diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml new file mode 100644 index 0000000..4f163f3 --- /dev/null +++ b/.github/workflows/ccpp.yml @@ -0,0 +1,19 @@ +name: C/C++ CI + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - name: setup_build_dir + run: mkdir buildproducts + - name: cmake + working-directory: ./buildproducts + run: cmake .. + - name: make + working-directory: ./buildproducts + run: make diff --git a/.gitignore b/.gitignore index dad50a1..6e469d5 100755 --- a/.gitignore +++ b/.gitignore @@ -41,7 +41,6 @@ xcuserdata *~.nib/ *.swp *~ -*.dat *.dep *.xcodeproj/ @@ -202,3 +201,36 @@ $RECYCLE.BIN/ # WindSDK compiled folders build/WinSDK/32bit/ build/WinSDK/64bit/ +======= + + +# Python compiler files +*.py[c] + +# Python distribution and packaging +dist/ +temp/ +*.cfg +*.egg-info/ + +# Eclipse Stuff +.metadata/ +.settings/ +.project +.cproject +.pydevproject + +# Testing Stuff +nrtestsuite/ +tests/data/ +tests/outfile/data/en* + + +#Cmake stuff +__cmake_systeminformation/ +buildprod*/ +*_export.h + + +# git merge +*.orig diff --git a/.mailmap b/.mailmap index 808fc22..42a86fd 100644 --- a/.mailmap +++ b/.mailmap @@ -1,4 +1,3 @@ -Sam Hatchett James Uber Demetrios Eliades Hyoungmin Woo @@ -6,4 +5,16 @@ Hyoungmin Woo Yunier Soad Jinduan Chen Maurizio Cingi -Elad Salomons \ No newline at end of file +Elad Salomons +Angela Marchi +Angela Marchi +Bryant McDonnell +Marios Kyriakou +Marios Kyriakou +Sam Hatchett +Sam Hatchett +Markus Sunela +Markus Sunela <30700548+makusuko@users.noreply.github.com> +Lew Rossman +Lew Rossman +Michael Tryby michaeltryby diff --git a/.travis.yml b/.travis.yml index 717ee37..308cb2d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,58 @@ -language: c +language: python + +matrix: + include: + # works on Precise and Trusty + - os: linux + addons: + apt: + sources: + - sourceline: 'ppa:mhier/libboost-latest' + - ubuntu-toolchain-r-test + packages: + - g++-7 + - boost1.67 + env: + - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7" + - PLATFORM="linux" + - REF_BUILD_ID="220dev1" + +python: + - "3.6" + +env: + global: + - SUT_BUILD_ID=$TRAVIS_JOB_NUMBER + - EPANET_HOME=`pwd` + - BUILD_HOME=buildprod + - TEST_HOME=nrtestsuite + +before_install: +# - sudo apt-get -qq update + - eval "${MATRIX_EVAL}" + +#install: +# - sudo apt-get install -y libboost-test-dev +# - sudo apt-get install -y libboost-thread-dev before_script: - - cd build/CMake - - mkdir buildproducts - - cd buildproducts - - cmake .. + - mkdir -p $BUILD_HOME + - cd $BUILD_HOME + - cmake -DCMAKE_C_COMPILER=${CC} + -DCMAKE_CXX_COMPILER=${CXX} + -DBUILD_TESTS=ON + -DBUILD_COVERAGE=ON .. script: - - make - - cd ../../../tests - - ./test_networks.sh + - cmake --build . + # run unit tests + - cd tests + - ctest --output-on-failure + # run regression tests + - cd $EPANET_HOME + - pip install -r tools/requirements.txt + - tools/before-test.sh $PLATFORM $REF_BUILD_ID $SUT_BUILD_ID $TRAVIS_COMMIT + - tools/run-nrtest.sh -c -s $SUT_BUILD_ID + +after_success: + - bash <(curl -s https://codecov.io/bash) diff --git a/AUTHORS b/AUTHORS index b12a354..c1cda77 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,8 +1,12 @@ # Authors ordered by first contribution. -# Generated by tools/update-authors.sh -Lew Rossman +Authors with Contributions in the Public Domain: + +Lewis Rossman Michael Tryby + +Authors with Contributions Subject to Copyright (see LICENSE): + Sam Hatchett Feng Shang James Uber @@ -14,7 +18,10 @@ Mike Kane Demetrios Eliades Will Furnass Steffen Macke -Mariosmsk +Marios Kyriakou Elad Salomons Maurizio Cingi Bryant McDonnell +Angela Marchi +Markus Sunela +Milad Ghiami diff --git a/BUILDING.md b/BUILDING.md new file mode 100644 index 0000000..bac6ad0 --- /dev/null +++ b/BUILDING.md @@ -0,0 +1,19 @@ +The most straightforward way to build the EPANET files is by using `CMake` ([https://cmake.org/](https://cmake.org/)). `CMake` is a cross-platform build tool that generates platform native build systems that can be used with your compiler of choice. It uses a generator concept to represent different build tooling. `CMake` automatically detects the platform it is running on and generates the appropriate makefiles for the platform default compiler. Different generators can also be specified. + +The project's `CMake` file (`CMakeLists.txt`) is located in its root directory and supports builds for Linux, Mac OS and Windows. To build the EPANET library and its command line executable using `CMake`, first open a console window and navigate to the project's root directory. Then enter the following commands: +``` +mkdir build +cd build +cmake .. +cmake --build . --config Release +``` + +Note: under Windows, the third command should be `cmake .. -A Win32` for a 32-bit build or `cmake .. -A x64` for a 64-bit build when Microsoft Visual Studio is the default compiler. + +For Windows the resulting EPANET toolkit library `epanet2.dll` and its command line executable `runepanet.exe` are placed in the `build\bin\Release` directory. The `build\lib\Release` directory will contain an `epanet2.lib` file which is needed to build C/C++ applications using the Windows version of the library. For Linux and Mac OS the EPANET toolkit shared library `libepanet2.so` appears in the `build/lib` directory and the command line executable `runepanet` is in the `build/bin` directory. + +In addition, two Windows one-click-build scripts are included in the `win_build` directory: +1. `Makefile2.bat`: this script uses the `CMake` file and requires the build tools for Visual Studio available from [https://visualstudio.microsoft.com/downloads/](https://visualstudio.microsoft.com/downloads/). The Community version will work just fine. This script was tested with Visual Studio 2017 and 2019. +2. `Makefile.bat`: this is the legacy build script compatible with Visual Studio 2010 which conforms with the C89 Standard which was the standard EPANET supported from earlier versions. This script requires the installation of Microsoft Windows SDK 7.1 ([https://www.microsoft.com/en-us/download/details.aspx?id=8279](https://www.microsoft.com/en-us/download/details.aspx?id=8279)) and will probably not run correctly on later versions of the SDK. `CMake` is not used in this script. + +These two scripts build EPANET binaries for both the 32 and 64 bit Windows platforms, placing them in the `win_build\32bit` and `win_build\64bit` directories, respectively. \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5fdcd7c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,102 @@ +# CMakeLists.txt - CMake configuration file for EPANET 2.0 +# +# CMake is a cross-platform build tool. CMake generates platform native +# build systems that can be used with your compiler of choice. CMake uses a +# generator concept to represent different build tooling. CMake automatically +# detects the platform it is running on and generates the appropriate makefiles +# for the platform default compiler. Different generators can also be specified. +# +# Note: CMake requires that your platform build system and compiler are +# properly installed. Build using Visual Studio requires msbuild shell. +# +# Build Options: +# BUILD_TESTS = ON/OFF +# BUILD_PY_LIB = ON/OFF +# +# Generic Invocation: +# cmake -E make_directory buildprod +# cd build +# cmake -G GENERATOR -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON .. +# cmake --build . --target SOME_TARGET --config Release +# +# More information: +# cmake --help +# +# CMake is available at https://cmake.org/download/ +# + +cmake_minimum_required (VERSION 2.8.8) + +project(EPANET) + +# Append local dir to module search path +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) + +option(BUILD_TESTS "Build tests (requires Boost)" OFF) +option(BUILD_PY_LIB "Build library for Python wrapper" OFF) +option(BUILD_COVERAGE "Build library for coverage" OFF) + + +IF (NOT BUILD_PY_LIB) + add_subdirectory(run) +ENDIF (NOT BUILD_PY_LIB) +add_subdirectory(src/outfile) + +IF (BUILD_TESTS) + #Prep ourselves for compiling with boost + IF(WIN32) + set(Boost_USE_STATIC_LIBS ON) + ELSE(TRUE) + set(Boost_USE_STATIC_LIBS OFF) + add_definitions(-DBOOST_ALL_DYN_LINK) + ENDIF(WIN32) + + find_package(Boost COMPONENTS unit_test_framework system thread filesystem) + include_directories (${Boost_INCLUDE_DIRS}) + + enable_testing() + add_subdirectory(tests) + add_subdirectory(tests/outfile) + add_subdirectory(tests/util) +ENDIF (BUILD_TESTS) + + +# Sets the output directory for executables and libraries. +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + + +# Sets the position independent code property for all targets +SET(CMAKE_POSITION_INDEPENDENT_CODE ON) + + +IF (APPLE) + set(INSTALL_NAME_DIR @executable_path/../lib) + set(CMAKE_MACOSX_RPATH 1) +ENDIF (APPLE) + +IF (MSVC) + set(CMAKE_C_FLAGS_RELEASE "/GL") + add_definitions(-D_CRT_SECURE_NO_DEPRECATE -MT) +ENDIF (MSVC) + +# configure file groups +file(GLOB EPANET_SOURCES RELATIVE ${PROJECT_SOURCE_DIR} src/*.c src/util/*.c) +file(GLOB EPANET_LIB_ALL RELATIVE ${PROJECT_SOURCE_DIR} src/* src/util/*) +# exclude epanet python API from the default build +list(REMOVE_ITEM EPANET_LIB_ALL "src/epanet_py.c") +source_group("Library" FILES ${EPANET_LIB_ALL}) + +# the shared library +IF(MSVC AND "${CMAKE_VS_PLATFORM_NAME}" MATCHES "(Win32)") + message(" ************************************") + message(" Configuring with epanet2.def mapping") + message(" ************************************") + add_library(epanet2 SHARED ${EPANET_LIB_ALL} ${PROJECT_SOURCE_DIR}/include/epanet2.def) + set_source_files_properties(${PROJECT_SOURCE_DIR}/include/epanet2.def PROPERTIES_HEADER_FILE_ONLY TRUE) +ELSE(TRUE) + add_library(epanet2 SHARED ${EPANET_LIB_ALL}) +ENDIF(MSVC AND "${CMAKE_VS_PLATFORM_NAME}" MATCHES "(Win32)") + +target_include_directories(epanet2 PUBLIC ${PROJECT_SOURCE_DIR}/include) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..8960271 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting any member of the [project team](https://github.com/OpenWaterAnalytics/EPANET/wiki/Project-Team). All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/LICENSE b/LICENSE index c03f27e..09e0360 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017 Open Water Analytics +Copyright (c) 2017 (see AUTHORS) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index df9b5ad..7f33dc6 100755 --- a/README.md +++ b/README.md @@ -1,14 +1,33 @@ -EPANET {#epanet-readme} +OWA-EPANET ====== -[![Build Status](https://travis-ci.org/OpenWaterAnalytics/EPANET.svg?branch=master)](https://travis-ci.org/OpenWaterAnalytics/EPANET) +## Build Status +[![Build status](https://ci.appveyor.com/api/projects/status/19wpg4g2cmj3oihl?svg=true)](https://ci.appveyor.com/project/OpenWaterAnalytics/epanet) +[![Build Status](https://travis-ci.org/OpenWaterAnalytics/EPANET.svg)](https://travis-ci.org/OpenWaterAnalytics/EPANET) -The EPANET Library is a pressurized pipe network hydraulic and water quality analysis toolkit written in C. +[![codecov](https://codecov.io/gh/OpenWaterAnalytics/EPANET/branch/master/graph/badge.svg)](https://codecov.io/gh/OpenWaterAnalytics/EPANET) -If you are interested in using/extending EPANET for academic, personal, or commercial use, then you've come to the right place. For community discussion, FAQ, and roadmapping of the project, go to the [Community Forum](http://community.wateranalytics.org/category/epanet). +## DESCRIPTION -Please see the [`version 2.1` Release Notes](https://github.com/OpenWaterAnalytics/EPANET/blob/master/ReleaseNotes2_1.md) for information relevant to users of the previous official version (2.00.12). If you would like to contribute by addressing any of the outstanding [Issues](https://github.com/OpenWaterAnalytics/EPANET/issues), then please comment on the Issue, then Fork this repo to your own account and base your commits on the [`dev` branch](https://github.com/OpenWaterAnalytics/EPANET/tree/dev). Once you are finished, you can open a Pull Request to test the code and discuss merging your changes back into the community respository. +**EPANET** is an industry-standard program for modeling the hydraulic and water quality behavior of water distribution system pipe networks. The EPANET Programmer's Toolkit is a library of functions (or API) written in C that allow programmers to customize the use of EPANET's solution engine for their own applications. Both EPANET and its toolkit were originally developed by the U.S. Environmental Protection Agency (USEPA). If you are interested in using/extending the EPANET engine and its API for academic, personal, or commercial use, then you've come to the right place. [Read more about EPANET on Wikipedia](https://en.wikipedia.org/wiki/EPANET). (Please note that this project covers only the EPANET hydraulic and water quality solver engine, not the graphical user interface.) -__Note:__ This repository is not affiliated with, or endorsed by, the USEPA. For the last "official" release of EPANET (2.00.12 UI and Toolkit) please go to the [EPA's GitHub repo](https://github.com/USEPA/Water-Distribution-Network-Model) or [the USEPA website](http://www2.epa.gov/water-research/epanet). It is also not the graphical user interface version. This is the hydraulic and water quality solver engine. +## INSTALLATION -However, if you are interested in extending EPANET for academic, personal, or commercial use, then you've come to the right place. For community discussion, FAQ, and roadmapping of the project, go to the [Community Forum](http://community.wateranalytics.org/category/epanet). +Instructions for building the OWA-EPANET Toolkit's function library as well as its command line executable from the source files in this repository can be found [here](https://github.com/OpenWaterAnalytics/EPANET/blob/master/BUILDING.md). + +## USAGE + +See the [full documentation](http://wateranalytics.org/EPANET/) of the OWA-EPANET API, along with examples of how to use the toolkit for water distribution system analysis. Additional information may be found on this project's [Wiki](https://github.com/openwateranalytics/epanet/wiki). + +## CONTRIBUTING + +Everyone is welcome to participate in this project. Whether you are helping others to resolve issues, reporting a new issue that hasn't yet been discovered, suggesting a new feature that would benefit your workflow, or writing code (or tests, or scripts, or ...), we value your time and effort. The path for contribution starts with the [Issues](https://github.com/OpenWaterAnalytics/EPANET/issues). Look around at open Issues and the conversation around them, get engaged by commenting on an outstanding Issue or creating a new one. If you want to contribute code, it helps to give the community time to discuss the ideas you present and offer constructive feedback. Once you get a clear path forward, Fork this repo to your own account. Make your commits on your dev branch (or one based on dev). Once you are finished, you can open a Pull Request to test the code and discuss merging your changes back into the community repository. A [step-by-step tutorial](http://www.slideshare.net/demetriseliades/contributing-to-epanet-using-github-in-windows) on how to contribute to OWA-EPANET using GitHub is also available. + +## CREDITS + +The **Open Water Analytics** (OWA) Community is an international group of EPANET developers and users, whose objective is to provide group interaction and coordinated development of the EPANET codebase, to ensure that important new user interface and algorithmic features are identified and that these features progress efficiently from prototype code to production implementations. OWA is actively maintaining OWA-EPANET, a community-supported branch of USEPA EPANET, since May 2014. The full list of individuals contributing to this project can be found [here](https://github.com/OpenWaterAnalytics/EPANET/blob/dev/AUTHORS). + +## DISCLAIMER +Although OWA is not formally affiliated with nor endorsed by USEPA, this project has been a collaborative effort between the two that builds upon and extends the USEPA’s legacy EPANET 2.0 code base. For the last "official" release of EPANET please go to the [USEPA website](http://www2.epa.gov/water-research/epanet). + +For more general community discussion, FAQ, and roadmapping of the project, please go to the [Community Forum](http://community/wateranalytics.org). diff --git a/ReleaseNotes2_1.md b/ReleaseNotes2_1.md index c29b71a..2ffd6fe 100644 --- a/ReleaseNotes2_1.md +++ b/ReleaseNotes2_1.md @@ -1,7 +1,7 @@ Release Notes for EPANET 2.1 {#release_2_1} ============================ -The last update to the EPANET engine was "Build 2.00.12" in February of 2008. Since that time, a community effort to update and extend the open-source code has emerged. This group has made a number of bug-fixes and API additions that help to improve the EPANET engine for everyone. Version 2.1 is now released after 8.5 years. +The last update to the EPANET engine was "Build 2.00.12" in February of 2008. Since that time, a community effort to update and extend the open-source code has emerged. This group has made a number of bug-fixes and API additions that help to improve the EPANET engine for everyone. Version 2.1 was released in July 2016, after 8.5 years. Contributors to this version (listed in order of first contribution): @@ -80,14 +80,15 @@ Contributors to this version (listed in order of first contribution): ``` ENopenH(); + ENopenQ(); ENinitH(0); ENinitQ(EN_NOSAVE); do { ENrunH(&t); ENrunQ(&qt); - ENnextQ(&qstep); // collect results ENnextH(&tstep); + ENnextQ(&qstep); } while (tstep > 0); ENcloseQ(); ENcloseH(); diff --git a/ReleaseNotes2_2.md b/ReleaseNotes2_2.md new file mode 100644 index 0000000..07bdf91 --- /dev/null +++ b/ReleaseNotes2_2.md @@ -0,0 +1,299 @@ +Release Notes for EPANET 2.2 +============================ +This document describes the changes and updates that have been made in version 2.2 of EPANET. + +## Thread-Safe API Functions + +A duplicate set of API functions has been provided that allow multiple EPANET projects to be analyzed concurrently in a thread-safe manner. These functions maintain the same name as the original but use a `EN_` prefix instead of `EN`. In addition, the first argument to each of these functions is a handle that identifies the particular project being analyzed. For example, instead of writing: + +`ENgetnodevalue(nodeIndex, EN_ELEVATION, &elev)` + +one would use: + +`EN_getnodevalue(ph, nodeIndex, EN_ELEVATION, &elev)` + +where `ph` is the handle assigned to the project. + +Two new functions have been added to the API to manage the creation and deletion of project handles. `EN_createproject` creates a new project along with its handle, while `EN_deleteproject` deletes a project. An example of using the thread-safe version of the API is shown below: +``` +#include "epanet2_2.h" +int runEpanet(char *finp, char *frpt) +{ + EN_Project ph = 0; + int err; + err = EN_createproject(&ph); + if (err) return err; + err = EN_open(ph, finp, frpt, ""); + if (!err) err = EN_solveH(ph); + if (!err) err = EN_report(ph); + EN_close(ph); + EN_deleteproject(ph); + return err; +} +``` +Prototypes of the thread-safe functions appear in the `epanet2_2.h` header file while `epanet2.h` contains prototypes of the legacy-style API functions. The enumerated constants used with both types of functions have been moved to `epanet2_enums.h`. + +## Network Building By Code + +API users now have the ability to build a complete EPANET network model using just function calls, without the need to open an EPANET-formatted input file. All types of network objects can be created and have their properties set using these calls, including both simple and rule-based controls. Here is an example of building a simple 2-node, 1-pipe network just through code: +``` +#include "epanet2_2.h" +int buildandrunEpanet(char *rptfile) +{ + // Create and initialize a project using gpm for flow + // units and the Hazen-Williams formula for head loss + EN_Project ph = 0; + int err, index; + err = EN_createproject(&ph); + if (err) return err; + EN_init(ph, rptfile, "", EN_GPM, EN_HW); + + //Add a junction node with 710 ft elevation and 500 gpm demand + EN_addnode(ph, "J1", EN_JUNCTION, &index); + EN_setjuncdata(ph, index, 710, 500, ""); + + // Add a reservoir node at 800 ft elevation + EN_addnode(ph, "R1", EN_RESERVOIR, &index); + EN_setnodevalue(ph, index, EN_ELEVATION, 800); + + // Add a 5280 ft long, 14-inch pipe with C-factor of 100 + // from the reservoir to the demand node + EN_addlink(ph, "P1", EN_PIPE, "R1", "J1", &index); + EN_setpipedata(ph, index, 5280, 14, 100, 0); + + // Solve for hydraulics and report nodal results + EN_setreport(ph, "NODES ALL"); + err = EN_solveH(ph); + if (!err) err = EN_report(ph); + + // Close and delete the project + EN_close(ph); + EN_deleteproject(ph); + return err; +} +``` +Instead of using `EN_open` to load data from a file, `EN_init` is used to initialize a project with the names of its report and binary files, and its flow units and head loss formula. The legacy-style API has a complementary set of functions for building networks from code. + +## Additional Convergence Parameters + +Two new analysis options have been added to provide more rigorous convergence criteria for EPANET's hydraulic solver. In the API they are named `EN_HEADERROR` and `EN_FLOWCHANGE` while in the `[OPTIONS]` section of an EPANET input file they are named `HEADERROR` and `FLOWCHANGE`, respectively. + +`EN_HEADERROR` is the maximum head loss error that any network link can have for hydraulic convergence to occur. A link's head loss error is the difference between the head loss found as a function of computed flow in the link (such as by the Hazen-Williams equation for a pipe) and the difference in computed heads for the link's end nodes. The units of this parameter are feet (or meters for SI units). The default value of 0 indicates that no head error limit applies. + +`EN_FLOWCHANGE` is the largest change in flow that any network element (link, emitter, or pressure-dependent demand) can have for hydraulic convergence to occur. It is specified in whatever flow units the project is using. The default value of 0 indicates that no flow change limit applies. + +These new parameters augment the current `EN_ACCURACY` option which always remains in effect. In addition, both `EN_HEADERROR` and `EN_FLOWCHANGE` can be used as parameters in the `EN_getstatistic` (or `ENgetstatistic`) function to retrieve their computed values (even when their option values are 0) after a hydraulic solution has been completed. + +## More Efficient Node Re-ordering + +EPANET's hydraulic solver requires solving a system of linear equations over a series of iterations until a set of convergence criteria are met. The coefficient matrix of this linear system is square and symmetric. It has a row for each network node and a non-zero off-diagonal coefficient for each link. The numerical effort needed to solve the linear system can be reduced if the nodes are re-ordered so that the non-zero coefficients cluster more tightly around the diagonal. + +EPANET's original node re-ordering scheme has been replaced by the more efficient **Multiple Minimum Degree (MMD)** algorithm. On a series of eight networks ranging in size from 7,700 to 100,000 nodes MMD reduced the solution time for a single period (steady state) hydraulic analysis, where most of the work is for node-reordering, by an average of 55%. Since MMD did not reduce the time needed to solve the linear equations generated at each iteration of the hydraulic solver longer extended period simulations will not exhibit a similar speedup. + +## Improved Handling of Near-Zero Flows + +EPANET's hydraulic solver can generate an ill-conditioned solution matrix when pipe flows approach zero unless some adjustment is made (i.e., as a pipe's flow approaches 0 its head loss gradient also approaches 0 causing its reciprocal, which is used to form the solution matrix's coefficients, to approach infinity). EPANET 2.0 used an arbitrary cutoff on head loss gradient to prevent it from becoming 0. This approach doesn't allow a pipe to follow any head loss v. flow relation in the region below the cutoff and can produce incorrect solutions for some networks (see [Estrada et al., 2009](https://ascelibrary.org/doi/full/10.1061/%28ASCE%29IR.1943-4774.0000100)). + +The hydraulic solver has been modified to use a linear head loss v. flow relation for flows approaching zero. For the Darcy-Weisbach equation, the linear Hagen-Poiseuille formula is used for laminar flow where the Reynolds Number is <= 2000. For the Hazen-Williams and Chezy-Manning equations, if the head loss gradient at a given flow is below the EPANET 2.0 gradient cutoff then a linear head loss relation is used whose slope equals the cutoff. EPANET 2.2 is now able to correctly solve the examples presented in Estrada et al. (2009) as well as those in [Gorev et al., (2013)](https://ascelibrary.org/doi/10.1061/%28ASCE%29HY.1943-7900.0000694) and [Elhay and Simpson (2011)](https://ascelibrary.org/doi/10.1061/%28ASCE%29HY.1943-7900.0000411). + +## Pressure Dependent Demands + +EPANET has always employed a Demand Driven Analysis (**DDA**) when modeling network hydraulics. Under this approach nodal demands at a given point in time are fixed values that must be delivered no matter what nodal heads and link flows are produced by a hydraulic solution. This can result in situations where required demands are satisfied at nodes that have negative pressures - a physical impossibility. + +To address this issue EPANET has been extended to use a Pressure Driven Analysis (**PDA**) if so desired. Under **PDA**, the demand D delivered at a node depends on the node's available pressure P according to: + +D = Dfull * [ (P - Pmin) / (Preq - Pmin) ]^Pexp + +where Dfull is the full demand required, Pmin is the pressure below which demand is zero, Preq is the pressure required to deliver the full required demand and Pexp is an exponent. When P < Pmin demand is 0 and when P > Preq demand equals Dfull. + +To implement pressure driven analysis four new parameters have been added to the [OPTIONS] section of the EPANET input file: + +| Parameter | Description | Default | +|-----------|--------------|---------| +| `DEMAND MODEL` | either DDA or PDA | DDA | +| `MINIMUM PRESSURE` | value for Pmin | 0 +| `REQUIRED PRESSURE` | value for Preq | 0.1 +| `PRESSURE EXPONENT` | value for Pexp | 0.5 | + +These parameters can also be set and retrieved in code using the following API functions +``` +int ENsetdemandmodel(int modelType, double pMin, double pReq, double pExp); +int ENgetdemandmodel(int *modelType, double *pMin, double *pReq, double *pExp); +``` +for the legacy API and +``` +int EN_setdemandmodel(EN_Project ph, int modelType, double pMin, double pReq, double pExp); +int EN_getdemandmodel(EN_Project ph, int *modelType, double *pMin, double *pReq, double *pExp); +``` +for the thread-safe API. Some additional points regarding the new **PDA** option are: + - If no DEMAND MODEL and its parameters are specified then the analysis defaults to being demand driven (**DDA**). + - This implementation of **PDA** assumes that the same parameters apply to all nodes in the network. Extending the framework to allow different parameters for specific nodes is left as a future feature to implement. + - Preq must be at least 0.1 (either psi or m) higher than Pmin to avoid numerical issues caused by having too steep a demand curve. + - Using `EN_DEFICIENTNODES` as the argument to `EN_getstatistic` (or `ENgetstatistic`) will retrieve the number of nodes that are pressure deficient. These are nodes with positive required demand whose pressure is below 0 under **DDA** or below Preq under **PDA**. + - Using `EN_DEMANDREDUCTION` as an argument will retrieve the total percent reduction of demands at pressure deficient nodes under **PDA**. + - Using `EN_DEMANDDEFICIT` with the `EN_getnodevalue` (or `ENgetnodevalue`) function will return the amount of demand reduction produced by a **PDA** at any particular node. + +## Tank Overflows +EPANET has always prevented tanks from overflowing by closing any links that supply inflow to a full tank. A new option `EN_CANOVERFLOW`, has been added to the list of Tank node properties. When set to 1 it will allow its tank to overflow when it becomes full. The spillage rate is returned in the tank's EN_DEMAND property. The default value for `EN_CANOVERFLOW` is 0 indicating that the tank cannot overflow. + +For the input file, a new field has been appended to the data supplied for each tank in the `[TANKS]` section of the file. A value of **YES** indicates that the tank can over flow while **NO** (the default) indicates that it cannot. For the volume curve field that precedes it, an asterisk (*) can be used if the tank does not utilize a volume curve. + +## Improved Water Quality Mass Balance + +As described by [Davis et al. (2018)](https://www.drink-water-eng-sci.net/11/25/2018/dwes-11-25-2018.pdf) EPANET's water quality simulations can result in some significant mass balance errors when modeling short term mass injections (errors are much smaller for continuous source flows). The entire water quality engine has been re-written to eliminate these errors. It still uses the Lagrangian Time Driven transport method but now analyzes each network node in topologically sorted order rather than in arbitrary order. + +A Mass Balance Report now appears the end of a simulation's Status Report that lists the various components (inflow, outflow, reaction) that comprise the network's overall mass balance. In addition `EN_MASSBALANCE` can be used as a parameter in the `EN_getstatistic` (or `ENgetstatistic`) function to retrieve the Mass Balance Ratio (Total Outflow Mass / Total Inflow Mass) at any point during a water quality simulation. + +With this change EPANET 2.2 now produces perfect mass balances when tested against the networks used in Davis et al. (2018). + +## New API functions +|Function|Description| +|--------|-----------| +|`EN_createproject` | Creates a new EPANET project | +|`EN_deleteproject` | Deletes an EPANET project | +|`EN_init`|Initializes an EPANET project| +|`EN_setflowunits`|Sets the project's flow units| +|`EN_addnode`|Adds a new node to a project| +|`EN_addlink`|Adds a new link to a project| +|`EN_addcontrol`|Adds a new simple control to a project| +|`EN_addrule`|Adds a new control rule to a project| +|`EN_deletenode`|Deletes a node from the project| +|`EN_deletelink`|Deletes a link from the project| +|`EN_deletepattern`|Deletes a time pattern from the project| +|`EN_deletecurve`|Deletes a data curve from the project| +|`EN_deletecontrol`|Deletes a simple control from the project| +|`EN_deleterule`|Deletes a rule-based control from the project| +|`EN_setnodeid`|Changes the ID name for a node| +|`EN_setjuncdata` |Sets values for a junction's parameters | +|`EN_settankdata` |Sets values for a tank's parameters| +|`EN_setlinkid`|Changes the ID name for a link| +|`EN_setlinknodes`|Sets a link's start- and end-nodes| +|`EN_setlinktype`|Changes the type of a specific link| +|`EN_setpipedata`|Sets values for a pipe's parameters| +|`EN_getdemandmodel`|Retrieves the type of demand model in use | +|`EN_setdemandmodel`|Sets the type of demand model to use| +|`EN_adddemand`|Adds a new demand category to a node| +|`EN_deletedemand`|Deletes a demand category from a node| +|`EN_getdemandindex`|Finds a demand category's index given its name| +|`EN_getdemandname`|Gets the name of a node's demand category| +|`EN_setdemandname`|Sets the name of a node's demand category| +|`EN_setdemandpattern`|Assigns a time pattern to a node's demand category | +|`EN_setpatternid`|Changes the ID name of a time pattern| +|`EN_setcurveid`|Changes the ID name of a data curve| +|`EN_getcurvetype`|Gets a curve's type| +|`EN_setheadcurveindex`|Sets the index of a head curve used by a pump | +|`EN_getruleinfo`|Gets the number of elements in a rule-based control | +|`EN_getruleid` | Gets the name assigned to a rule-based control | +|`EN_getpremise`|Gets the contents of a premise in a rule-based control| +|`EN_setpremise`|Sets the contents of a premise in a rule-based control| +|`EN_setpremiseindex`|Sets the index of an object in a premise of a rule-based control| +|`EN_setpremisestatus`|Sets the status of an object in a premise of a rule-based control| +|`EN_setpremisevalue`|Sets the value of a property in a premise of a rule-based control| +|`EN_getthenaction`|Gets the contents of a THEN action in a rule-based control| +|`EN_setthenaction`|Sets the contents of a THEN action in a rule-based control| +|`EN_getelseaction`|Gets the contents of an ELSE action in a rule-based control| +|`EN_setelseaction`|Sets the contents of an ELSE action in a rule-based control| +|`EN_setrulepriority`|Sets the priority of a rule-based control| +|`EN_gettitle` |Gets a project's title | +|`EN_settitle` |Sets a project's title | +|`EN_getcomment` |Gets the descriptive comment assigned to an object| +|`EN_setcomment` |Assigns a descriptive comment to an object| +|`EN_clearreport` |Clears the contents of a project's report file | +|`EN_copyreport` | Copies the contents of a project's report file | +|`EN_getresultindex` | Gets the order in which a node or link was saved to file | +|`EN_getvertexcount` | Gets the number of vertex points in a link | +|`EN_getvertex` | Gets the coordinates of a vertex point in a link | +|`EN_setvertices` | Assigns a new set of vertex points to a link | + +In addition to these new functions, a tank's volume curve `EN_VOLCURVE` can be set using `EN_setnodevalue` and `EN_setlinkvalue` can now be used to set the following pump properties: + - `EN_PUMP_POWER` (constant power rating) + - `EN_PUMP_HCURVE` (head characteristic curve) + - `EN_PUMP_ECURVE` (efficiency curve) + - `EN_PUMP_ECOST` (average energy price) + - `EN_PUMP_EPAT` (energy pricing pattern) + - `EN_LINKPATTERN` (speed setting pattern) + +Access to the following global energy options have been added to `EN_getoption` and `EN_setoption`: + - `EN_GLOBALEFFIC` (global pump efficiency) + - `EN_GLOBALPRICE` (global average energy price per kW-Hour) + - `EN_GLOBALPATTERN` (global energy price pattern) + - `EN_DEMANDCHARGE` (price per maximum kW of energy consumption) + +## New API Constants +### Node value types: +- `EN_CANOVERFLOW` +- `EN_DEMANDDEFICIT` + +### Link value types: +- `EN_PUMP_STATE` +- `EN_PUMP_EFFIC` +- `EN_PUMP_POWER` +- `EN_PUMP_HCURVE` +- `EN_PUMP_ECURVE` +- `EN_PUMP_ECOST` +- `EN_PUMP_EPAT` + +### Count types: + - `EN_RULECOUNT` + +### Head loss formula: + - `EN_HW` + - `EN_DW` + - `EN_CM` + +### Hydraulic option types: + - `EN_HEADERROR` + - `EN_FLOWCHANGE` + - `EN_HEADLOSSFORM` + - `EN_GLOBALEFFIC` + - `EN_GLOBALPRICE` + - `EN_GLOBALPATTERN` + - `EN_DEMANDCHARGE` + - `EN_SP_GRAVITY` + - `EN_SP_VISCOS` + - `EN_EXTRA_ITER` + - `EN_CHECKFREQ` + - `EN_MAXCHECK` + - `EN_DAMPLIMIT` + +### Quality option types: +- `EN_SP_DIFFUS` + - `EN_BULKORDER` + - `EN_WALLORDER` + - `EN_TANKORDER` + - `EN_CONCENLIMIT` + +### Simulation statistic types: + - `EN_MAXHEADERROR` + - `EN_MAXFLOWCHANGE` + - `EN_MASSBALANCE` + - `EN_DEFICIENTNODES` + - `EN_DEMANDREDUCTION` + +### Action code types: + - `EN_UNCONDITIONAL` + - `EN_CONDITIONAL` + +### Curve types: + - `EN_VOLUME_CURVE` + - `EN_PUMP_CURVE` + - `EN_EFFIC_CURVE` + - `EN_HLOSS_CURVE` + - `EN_GENERIC_CURVE` + +### Demand model types: + - `EN_DDA` + - `EN_PDA` + +## Documentation +Doxygen files have been created to generate a complete Users Guide for version 2.2's API. The guide's format is similar to the original EPANET Programmer's Toolkit help file and can be produced as a set of HTML pages, a Windows help file or a PDF document. + +## Authors contributing to this release: +(In alphabetical order) + - Demetrios Eliades + - Sam Hatchett + - Marios Kyriakou + - Lewis Rossman + - Elad Salomons + - Markus Sunela + - Michael Tryby diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..dd74d64 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,85 @@ +# +# appveyor.yml - Appveyor CI configuration for OWA EPANET +# +# Date created: 01/09/2018 +# +# Author: Michael E. Tryby +# US EPA - ORD/NRMRL +# + +version: 2.0.{build} + +matrix: + allow_failures: + #GROUP: (SUPPORTED/EXPERIMENTAL) + #EXPERIMENTAL is allowed to fail under build matrix + - GROUP: "EXPERIMENTAL" + +environment: + matrix: + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + GENERATOR: "Visual Studio 15 2017" + GROUP: "SUPPORTED" + BOOST_ROOT: "C:/Libraries/boost_1_67_0" + PLATFORM: "win32" + REF_BUILD_ID: "538_1" + # New build on Visual Studio 15 2017 + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + GENERATOR: "Visual Studio 15 2017 Win64" + GROUP: "EXPERIMENTAL" + BOOST_ROOT: "C:/Libraries/boost_1_67_0" + PLATFORM: "win64" + REF_BUILD_ID: "538_2" + +# called before repo cloning +init: + - set SUT_BUILD_ID=%APPVEYOR_BUILD_NUMBER%_%APPVEYOR_JOB_NUMBER% + - set EPANET_HOME=%APPVEYOR_BUILD_FOLDER% + - set BUILD_HOME=buildprod + - set TEST_HOME=nrtestsuite + - set PATH=%PATH%;%BOOST_ROOT%/ + + # See values set + - echo %APPVEYOR_BUILD_WORKER_IMAGE% + - echo %BUILD_HOME% + - echo %GENERATOR% + - echo %BOOST_ROOT% + +# called after repo clone +install: + - python -m pip install -r tools\requirements-appveyor.txt + +# called before build +before_build: + - mkdir %BUILD_HOME% + - cd %BUILD_HOME% + - cmake -G "%GENERATOR%" + -DBUILD_TESTS=ON + -DBOOST_ROOT="%BOOST_ROOT%" .. + +# run custom build script +build_script: + - cmake --build . --config Release + +before_test: + - cd %EPANET_HOME% + - tools\before-test.cmd %PLATFORM% %REF_BUILD_ID% %SUT_BUILD_ID% %APPVEYOR_REPO_COMMIT% + +# run custom test script +test_script: + # run unit tests + - cd %BUILD_HOME%\tests + - ctest -C Release --output-on-failure + # run regression tests + - cd %EPANET_HOME% + - tools\run-nrtest.cmd %REF_BUILD_ID% %SUT_BUILD_ID% + +on_success: + - cd %TEST_HOME%\benchmark + - appveyor PushArtifact receipt.json + +on_failure: + - cd %TEST_HOME%\benchmark + # zip up the SUT benchmarks + - 7z a benchmark-%PLATFORM%-%SUT_BUILD_ID%.zip .\epanet-%SUT_BUILD_ID% + - appveyor PushArtifact benchmark-%PLATFORM%-%SUT_BUILD_ID%.zip diff --git a/build/CMake/CMakeLists.txt b/build/CMake/CMakeLists.txt deleted file mode 100644 index e3e65aa..0000000 --- a/build/CMake/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -## cmake . -## make - -cmake_minimum_required (VERSION 2.6) - -SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) -SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) - -project (EPANET) - -IF(APPLE) - SET(CMAKE_INSTALL_NAME_DIR @executable_path) - SET(CMAKE_BUILD_WITH_INSTALL_RPATH ON) -ENDIF(APPLE) - -# the library -include_directories(../../include) -file(GLOB EPANET_SOURCES ../../src/*.c) -add_library(epanet STATIC ${EPANET_SOURCES}) - -# the standalone executable -include_directories(../../src) -add_executable(runepanet ../../run/main.c) -target_link_libraries (runepanet LINK_PUBLIC epanet m) - -# the binary hydraulics file API -include_directories(../../tools/outputapi) -add_library(ENBinaryOut SHARED ../../tools/outputapi/outputapi.c) diff --git a/build/Linux/Makefile b/build/Linux/Makefile deleted file mode 100755 index 584c1ad..0000000 --- a/build/Linux/Makefile +++ /dev/null @@ -1,109 +0,0 @@ -# Linux Makefile for EPANET - -# This will build EPANET as a shared object library -# (libepanet2.so) under Linux/Unix, and a standalone -# executable (epanet2). - -# The following targets are defined: -# make -# -Builds libepanet2.so, epanet2 -# make install -# -Creates shell wrapper runepanet2.sh that executes epanet2. -# The runepanet2.sh wrapper simply exports -# environment variables that help locate the runtime library, -# allowing you to specify your own library locations. -# -Installs epanet2 and runepanet2.sh -# in /bin, where defaults to ~ (and can be set -# below to something different - see "Install directories") -# -Installs libepanet2.so in /lib -# -Installs epanet2.h in /include. This is the required -# header file for the EPANET programmer's toolkit, and thus -# /include should be on your CPP include search path -# for subsequent use of the toolkit and linking with the -# library libepanet2.so -# make clean -# -Removes object and library files, returning the build directory -# to its pristine state. - -# You may wish to change the install path 'prefix', -# or the compiler flags, but these defaults should be fine. - -SHELL = /bin/sh - -# Target filenames -epanetrootname := epanet2 -libname := lib$(epanetrootname).so -exename := $(epanetrootname) -# Shell wrapper -runcmdtemplate = runepanet.sh.template -runcmdname = runepanet2.sh -# Location of EPANET toolkit includes -epanetincludedir = ../../include -# Search path for sources -epanetsrcdir = ../../src -epanetrundir = ../../run -VPATH = $(epanetsrcdir):$(epanetincludedir):$(epanetrundir) - -# Install directories -#prefix = /usr/local # GNU standard -- requires superuser rights -prefix =~ -# -exec_prefix = $(prefix) -libdir = $(exec_prefix)/lib -bindir = $(exec_prefix)/bin -includedir = $(prefix)/include -datarootdir = $(prefix)/share -docdir = $(datarootdir)/doc/epanet - -# Compiler and flags -CC = gcc -CFLAGS = -g -O3 -fPIC -std=c99 -CPPFLAGS = -I $(epanetincludedir) -LDFLAGS = -L . -Wl,-rpath,$(libdir) -lm - -# Installer -INSTALL = install -INSTALL_PROGRAM = $(INSTALL) -INSTALL_DATA = $(INSTALL) -m 644 - -# Files for the shared object library -epanet_objs=hash.o hydraul.o inpfile.o input1.o input2.o \ - input3.o mempool.o output.o quality.o report.o \ - rules.o smatrix.o epanet.o -# Epanet header files -epanet_heads=enumstxt.h funcs.h hash.h mempool.h text.h types.h vars.h -# Epanet main program -epanet_main=main -# Epanet main program header files -epanet_main_heads=epanet2.h - -.PHONY: all -all: $(libname) $(exename) - -$(libname): $(epanet_objs) - $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^ - -$(exename): $(epanet_main).o $(epanet_main_heads) - $(CC) $(CFLAGS) -o $@ $(epanet_main).o -l$(epanetrootname) $(LDFLAGS) - -$(epanet_objs): $(epanet_heads) - -.PHONY: install -install: - cat $(runcmdtemplate) | sed 's|libdir|$(libdir)|' \ - | sed 's|exename|$(bindir)/$(exename)|' \ - > $(runcmdname) - $(INSTALL_PROGRAM) -D $(exename) $(bindir)/$(exename) - $(INSTALL_PROGRAM) -D $(libname) $(libdir)/$(libname) - $(INSTALL_DATA) -D $(epanetincludedir)/epanet2.h $(includedir)/epanet2.h - $(INSTALL_PROGRAM) -D $(runcmdname) ~/$(runcmdname) - -.PHONY: uninstall -uninstall: - -.PHONY: check -check: - -.PHONY: clean -clean: - -/bin/rm *.o $(libname) $(exename) $(runcmdname) diff --git a/build/Linux/Makefile_Rev b/build/Linux/Makefile_Rev deleted file mode 100755 index 362725d..0000000 --- a/build/Linux/Makefile_Rev +++ /dev/null @@ -1,111 +0,0 @@ -# Linux Makefile for EPANET - -# This will build EPANET as a shared object library -# (libepanet_gcc_.so) under Linux/Unix, and a standalone -# executable (epanet_gcc_). - -# The following targets are defined: -# make -# -Builds libepanet_gcc_.so, epanet_gcc_ -# make install -# -Creates shell wrapper runepanet_.sh that executes epanet_gcc_.exe. -# The runepanet_.sh wrapper simply exports -# environment variables that help locate the runtime library, -# allowing you to specify your own library locations. -# -Installs epanet_gcc_ and runepanet_.sh -# in /bin, where defaults to ~ (and can be set -# below to something different - see "Install directories") -# -Installs libepanet_gcc_.so in /lib -# -Installs epanet2.h in /include. This is the required -# header file for the EPANET programmer's toolkit, and thus -# /include should be on your CPP include search path -# for subsequent use of the toolkit and linking with the -# library libepanet_gcc_.so -# make clean -# -Removes object and library files, returning the build directory -# to its pristine state. - -# You may wish to change the install path 'prefix', -# or the compiler flags, but these defaults should be fine. - -SHELL = /bin/sh - -# Target filenames -# svnname.sh constructs a name: -# where is the atomic revision number of the svn repo. -epanetsvnpath = ../../.. -epanetrootname := $(shell ../svnname.sh $(epanetsvnpath) "" epanet_gcc_ "") -libname := lib$(epanetrootname).so -exename := $(epanetrootname) -# Shell wrapper -runcmdtemplate = runepanet.sh.template -runcmdname = $(shell ../svnname.sh $(epanetsvnpath) "" runepanet_ .sh) -# Location of EPANET toolkit includes -epanetincludedir = ../../include -# Search path for sources -epanetsrcdir = ../../src -VPATH = $(epanetsrcdir):$(epanetincludedir) - -# Install directories -prefix = ~ -exec_prefix = $(prefix) -libdir = $(exec_prefix)/lib -bindir = $(exec_prefix)/bin -includedir = $(prefix)/include -datarootdir = $(prefix)/share -docdir = $(datarootdir)/doc/epanet - -# Compiler and flags -CC = gcc -CFLAGS = -g -O3 -fPIC -std=c99 -CPPFLAGS = -I $(epanetincludedir) -LDFLAGS = -L . -Wl,-rpath,$(libdir) -lm - -# Installer -INSTALL = install -INSTALL_PROGRAM = $(INSTALL) -INSTALL_DATA = $(INSTALL) -m 644 - -# Files for the shared object library -epanet_objs=hash.o hydraul.o inpfile.o input1.o input2.o \ - input3.o mempool.o output.o quality.o report.o \ - rules.o smatrix.o -# Epanet header files -epanet_heads=enumstxt.h funcs.h hash.h mempool.h text.h toolkit.h types.h vars.h -# Epanet main program -epanet_main=epanet -# Epanet main program header files -epanet_main_heads=epanet2.h - -.PHONY: all -all: $(libname) $(exename) - -$(libname): $(epanet_objs) - $(CC) $(CFLAGS) $(CPPFLAGS) -D SOL -c $(epanetsrcdir)/$(epanet_main).c - $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $(epanet_main).o $^ - -$(exename): $(libname) $(epanet_main_heads) - $(CC) $(CFLAGS) $(CPPFLAGS) -D CLE -c $(epanetsrcdir)/$(epanet_main).c - $(CC) $(CFLAGS) -o $@ $(epanet_main).o -l$(epanetrootname) $(LDFLAGS) - -$(epanet_objs): $(epanet_heads) - -.PHONY: install -install: - cat $(runcmdtemplate) | sed 's|libdir|$(libdir)|' \ - | sed 's|exename|$(bindir)/$(exename)|' \ - > $(runcmdname) - $(INSTALL_PROGRAM) -D $(exename) $(bindir)/$(exename) - $(INSTALL_PROGRAM) -D $(libname) $(libdir)/$(libname) - $(INSTALL_DATA) -D $(epanetincludedir)/epanet2.h $(includedir)/epanet2.h - $(INSTALL_PROGRAM) -D $(runcmdname) $(bindir)/$(runcmdname) - -.PHONY: uninstall -uninstall: - -.PHONY: check -check: - -.PHONY: clean -clean: - -/bin/rm *.o $(libname) $(exename) $(runcmdname) diff --git a/build/Linux/runepanet.sh.template b/build/Linux/runepanet.sh.template deleted file mode 100644 index 253dbc8..0000000 --- a/build/Linux/runepanet.sh.template +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -export LD_LIBRARY_PATH=libdir:$LD_LIBRARY_PATH -exec exename $* diff --git a/build/MinGW/Makefile b/build/MinGW/Makefile deleted file mode 100644 index eae49e2..0000000 --- a/build/MinGW/Makefile +++ /dev/null @@ -1,78 +0,0 @@ -# MINGW32 Makefile for EPANET - -# This will build EPANET as DLL -# (epanet2.dll) under MINGW32 GCC, and a standalone -# executable (epanet2d.exe). - -# The following targets are defined: -# make -# -Builds epanet2.dll, epanet2d.exe -# make install -# -Copy epanet2.dll, epanet2d.exe, epanet2.def to $(prefix) -# make clean -# -Removes object and library files, returning the build directory -# to its pristine state. - -# You may wish to change the install path 'prefix', -# or the compiler flags, but these defaults should be fine. - - -# Target filenames -epanetrootname := epanet2 -libname := $(epanetrootname).dll -exename := $(epanetrootname)d.exe - -# Location of EPANET toolkit includes -epanetincludedir = ../../include -# Search path for sources -epanetsrcdir = ../../src -# Search path for sources -epanetmainsrcdir = ../../run -VPATH = $(epanetsrcdir):$(epanetincludedir):$(epanetmainsrcdir) - -# Install directories -prefix = C:\discoD\EPA\EPAnet_util -execdir = $(prefix) -libdir = $(prefix) - - -# Compiler and flags -CC = gcc -CFLAGS = -g -O3 -std=c99 -Wno-implicit-function-declaration -D DLL -CPPFLAGS = -I $(epanetincludedir) -I $(epanetsrcdir) -LDFLAGS = -L . -Wl,--kill-at,--enable-stdcall-fixup,-rpath,$(libdir) -lm - - -# Files for the shared object library -epanet_objs=hash.o hydraul.o inpfile.o input1.o input2.o \ - input3.o mempool.o output.o quality.o report.o \ - rules.o smatrix.o epanet.o -# Epanet header files -epanet_heads=enumstxt.h funcs.h hash.h mempool.h text.h types.h vars.h epanet2.h -# Epanet main program -epanet_main=main -# Epanet main program header files -epanet_main_heads=epanet2.h - -.PHONY: all -all: $(libname) $(exename) - -$(libname): $(epanet_objs) - $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^ -Wl,--output-def,$(epanetrootname).def - -$(exename): $(epanet_main_heads) $(libname) $(epanet_main).o - $(CC) $(CFLAGS) -o $@ $(epanet_main).o -l$(epanetrootname) $(LDFLAGS) - -$(epanet_objs): $(epanet_heads) - - -.PHONY: clean -clean: - del $(epanet_main).o $(epanet_objs) $(exename) $(libname) $(epanetrootname).def - -.PHONY: install -install: - copy $(exename) $(execdir) - copy $(libname) $(libdir) - copy $(epanetrootname).def $(libdir) - diff --git a/build/WinSDK/Makefile.bat b/build/WinSDK/Makefile.bat deleted file mode 100644 index dcf942c..0000000 --- a/build/WinSDK/Makefile.bat +++ /dev/null @@ -1,54 +0,0 @@ -rem : set path to Windows SDK -Set Reg.Key=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows -Set Reg.Val=CurrentInstallFolder -Set Build_PATH=%CD% - -rem : set path for source EPANET files -cd ..\..\include -Set H_PATH=%CD% -cd ..\src -Set SRC_PATH=%CD% - -rem : set Windows SDK Path from registry -For /F "Tokens=2*" %%A In ('Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| Find /I "%Reg.Val%"' ) Do Call Set SDK_PATH=%%B - - -rem : 64 bit -rem : check pc architecture -Set Reg.Qry=HKLM\Hardware\Description\System\CentralProcessor\0 -REG.exe Query %Reg.Qry% > checkOS.tmp -Find /i "x86" < checkOS.tmp > StringCheck.tmp -If %ERRORLEVEL% == 1 ( - CALL "%SDK_PATH%bin\"SetEnv.cmd /x64 /release - rem : create EPANET2.DLL - cl -o epanet2.dll epanet.c hash.c hydraul.c inpfile.c input1.c input2.c input3.c mempool.c output.c quality.c report.c rules.c smatrix.c /I ..\include /I ..\run /link /DLL - rem : create EPANET2.EXE - cl -o epanet2.exe epanet.c ..\run\main.c hash.c hydraul.c inpfile.c input1.c input2.c input3.c mempool.c output.c quality.c report.c rules.c smatrix.c /I ..\include /I ..\run /I ..\src /link - md "%Build_PATH%"\64bit - move /y "%SRC_PATH%"\*.dll "%Build_PATH%"\64bit - move /y "%SRC_PATH%"\*.exe "%Build_PATH%"\64bit - copy "%H_PATH%"\*.h "%Build_PATH%"\64bit -) - - -rem : 32 bit with DEF -CALL "%SDK_PATH%bin\"SetEnv.cmd /x86 /release -echo "32 bit with epanet2.def mapping" -rem : create EPANET2.DLL -cl -o epanet2.dll epanet.c hash.c hydraul.c inpfile.c input1.c input2.c input3.c mempool.c output.c quality.c report.c rules.c smatrix.c /I ..\include /I ..\run /link /DLL /def:..\build\WinSDK\epanet2.def /MAP -rem : create EPANET2.EXE -cl -o epanet2.exe epanet.c ..\run\main.c hash.c hydraul.c inpfile.c input1.c input2.c input3.c mempool.c output.c quality.c report.c rules.c smatrix.c /I ..\include /I ..\run /I ..\src /link -md "%Build_PATH%"\32bit -move /y "%SRC_PATH%"\*.dll "%Build_PATH%"\32bit -move /y "%SRC_PATH%"\*.exe "%Build_PATH%"\32bit - - -rem : a bit of housekeeping and cleaning -del "%SRC_PATH%"\*.obj -del "%SRC_PATH%"\*.exp -del "%SRC_PATH%"\*.lib -del "%SRC_PATH%"\*.map -del "%SRC_PATH%"\*.tmp - -cd "%Build_PATH%" - diff --git a/build/WinSDK/epanet2.def b/build/WinSDK/epanet2.def deleted file mode 100644 index 8d1087b..0000000 --- a/build/WinSDK/epanet2.def +++ /dev/null @@ -1,77 +0,0 @@ -LIBRARY EPANET2.DLL - -EXPORTS - ENaddpattern = _ENaddpattern@4 - ENclose = _ENclose@0 - ENcloseH = _ENcloseH@0 - ENcloseQ = _ENcloseQ@0 - ENepanet = _ENepanet@16 - ENgetcontrol = _ENgetcontrol@24 - ENgetcount = _ENgetcount@8 - ENgeterror = _ENgeterror@12 - ENgetflowunits = _ENgetflowunits@4 - ENgetlinkid = _ENgetlinkid@8 - ENgetlinkindex = _ENgetlinkindex@8 - ENgetlinknodes = _ENgetlinknodes@12 - ENgetlinktype = _ENgetlinktype@8 - ENgetlinkvalue = _ENgetlinkvalue@12 - ENgetnodeid = _ENgetnodeid@8 - ENgetnodeindex = _ENgetnodeindex@8 - ENgetnodetype = _ENgetnodetype@8 - ENgetnodevalue = _ENgetnodevalue@12 - ENgetoption = _ENgetoption@8 - ENgetpatternid = _ENgetpatternid@8 - ENgetpatternindex = _ENgetpatternindex@8 - ENgetpatternlen = _ENgetpatternlen@8 - ENgetpatternvalue = _ENgetpatternvalue@12 - ENgetqualtype = _ENgetqualtype@8 - ENgettimeparam = _ENgettimeparam@8 - ENgetversion = _ENgetversion@4 - ENinitH = _ENinitH@4 - ENinitQ = _ENinitQ@4 - ENnextH = _ENnextH@4 - ENnextQ = _ENnextQ@4 - ENopen = _ENopen@12 - ENopenH = _ENopenH@0 - ENopenQ = _ENopenQ@0 - ENreport = _ENreport@0 - ENresetreport = _ENresetreport@0 - ENrunH = _ENrunH@4 - ENrunQ = _ENrunQ@4 - ENsaveH = _ENsaveH@0 - ENsavehydfile = _ENsavehydfile@4 - ENsaveinpfile = _ENsaveinpfile@4 - ENsetcontrol = _ENsetcontrol@24 - ENsetlinkvalue = _ENsetlinkvalue@12 - ENsetnodevalue = _ENsetnodevalue@12 - ENsetoption = _ENsetoption@8 - ENsetpattern = _ENsetpattern@12 - ENsetpatternvalue = _ENsetpatternvalue@12 - ENsetqualtype = _ENsetqualtype@16 - ENsetreport = _ENsetreport@4 - ENsetstatusreport = _ENsetstatusreport@4 - ENsettimeparam = _ENsettimeparam@8 - ENsolveH = _ENsolveH@0 - ENsolveQ = _ENsolveQ@0 - ENstepQ = _ENstepQ@4 - ENusehydfile = _ENusehydfile@4 - ENwriteline = _ENwriteline@4 - ENgetnumdemands = _ENgetnumdemands@8 - ENgetbasedemand = _ENgetbasedemand@12 - ENgetdemandpattern = _ENgetdemandpattern@12 - ENgetcurve = _ENgetcurve@20 - ENgetstatistic = _ENgetstatistic@8 - ENgetcoord = _ENgetcoord@12 - ENsetcoord = _ENsetcoord@12 - ENgetqualinfo = _ENgetqualinfo@16 - ENsetbasedemand = _ENsetbasedemand@12 - ENgetaveragepatternvalue = _ENgetaveragepatternvalue@8 - ENgetheadcurveindex = _ENgetheadcurveindex@8 - ENgetpumptype = _ENgetpumptype@8 - ENgetcurveindex = _ENgetcurveindex@8 - ENgetcurveid = _ENgetcurveid@8 - ENgetcurvelen = _ENgetcurvelen@8 - ENgetcurvevalue = _ENgetcurvevalue@16 - ENsetcurvevalue = _ENsetcurvevalue@16 - ENsetcurve = _ENsetcurve@16 - ENaddcurve = _ENaddcurve@4 \ No newline at end of file diff --git a/build/Xcode/epanet.xcodeproj/project.pbxproj b/build/Xcode/epanet.xcodeproj/project.pbxproj deleted file mode 100755 index 76e0349..0000000 --- a/build/Xcode/epanet.xcodeproj/project.pbxproj +++ /dev/null @@ -1,773 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 223109E61BA865930030AAE8 /* Net3.inp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 223109E31BA8658A0030AAE8 /* Net3.inp */; }; - 223109EB1BA869DA0030AAE8 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 22CD9A5D1B27898E00B65E83 /* main.c */; }; - 223109ED1BA869DA0030AAE8 /* libepanet-static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2255753B17551217009946B1 /* libepanet-static.a */; }; - 223109EF1BA869DA0030AAE8 /* Net3.inp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 223109E31BA8658A0030AAE8 /* Net3.inp */; }; - 223109F61BA869F30030AAE8 /* epanet.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F711068369500641384 /* epanet.c */; }; - 223109F71BA869F30030AAE8 /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F731068369500641384 /* hash.c */; }; - 223109F81BA869F30030AAE8 /* hydraul.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F751068369500641384 /* hydraul.c */; }; - 223109F91BA869F30030AAE8 /* inpfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F761068369500641384 /* inpfile.c */; }; - 223109FA1BA869F30030AAE8 /* input1.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F771068369500641384 /* input1.c */; }; - 223109FB1BA869F30030AAE8 /* input2.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F781068369500641384 /* input2.c */; }; - 223109FC1BA869F30030AAE8 /* input3.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F791068369500641384 /* input3.c */; }; - 223109FD1BA869F30030AAE8 /* mempool.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7A1068369500641384 /* mempool.c */; }; - 223109FE1BA869F30030AAE8 /* output.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7C1068369500641384 /* output.c */; }; - 223109FF1BA869F30030AAE8 /* quality.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7D1068369500641384 /* quality.c */; }; - 22310A001BA869F30030AAE8 /* report.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7E1068369500641384 /* report.c */; }; - 22310A011BA869F30030AAE8 /* rules.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7F1068369500641384 /* rules.c */; }; - 22310A021BA869F30030AAE8 /* smatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F801068369500641384 /* smatrix.c */; }; - 22310A051BA869F30030AAE8 /* epanet2.h in Headers */ = {isa = PBXBuildFile; fileRef = 22322FA9106836B000641384 /* epanet2.h */; }; - 22322F851068369500641384 /* enumstxt.h in Headers */ = {isa = PBXBuildFile; fileRef = 22322F701068369500641384 /* enumstxt.h */; }; - 22322F861068369500641384 /* epanet.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F711068369500641384 /* epanet.c */; }; - 22322F871068369500641384 /* funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = 22322F721068369500641384 /* funcs.h */; }; - 22322F881068369500641384 /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F731068369500641384 /* hash.c */; }; - 22322F891068369500641384 /* hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 22322F741068369500641384 /* hash.h */; }; - 22322F8A1068369500641384 /* hydraul.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F751068369500641384 /* hydraul.c */; }; - 22322F8B1068369500641384 /* inpfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F761068369500641384 /* inpfile.c */; }; - 22322F8C1068369500641384 /* input1.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F771068369500641384 /* input1.c */; }; - 22322F8D1068369500641384 /* input2.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F781068369500641384 /* input2.c */; }; - 22322F8E1068369500641384 /* input3.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F791068369500641384 /* input3.c */; }; - 22322F8F1068369500641384 /* mempool.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7A1068369500641384 /* mempool.c */; }; - 22322F901068369500641384 /* mempool.h in Headers */ = {isa = PBXBuildFile; fileRef = 22322F7B1068369500641384 /* mempool.h */; }; - 22322F911068369500641384 /* output.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7C1068369500641384 /* output.c */; }; - 22322F921068369500641384 /* quality.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7D1068369500641384 /* quality.c */; }; - 22322F931068369500641384 /* report.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7E1068369500641384 /* report.c */; }; - 22322F941068369500641384 /* rules.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7F1068369500641384 /* rules.c */; }; - 22322F951068369500641384 /* smatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F801068369500641384 /* smatrix.c */; }; - 22322F961068369500641384 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = 22322F811068369500641384 /* text.h */; }; - 22322F981068369500641384 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 22322F831068369500641384 /* types.h */; }; - 22322F991068369500641384 /* vars.h in Headers */ = {isa = PBXBuildFile; fileRef = 22322F841068369500641384 /* vars.h */; }; - 22322FAA106836BC00641384 /* epanet2.h in Headers */ = {isa = PBXBuildFile; fileRef = 22322FA9106836B000641384 /* epanet2.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2255753F17551234009946B1 /* epanet.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F711068369500641384 /* epanet.c */; }; - 2255754017551234009946B1 /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F731068369500641384 /* hash.c */; }; - 2255754117551234009946B1 /* hydraul.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F751068369500641384 /* hydraul.c */; }; - 2255754217551234009946B1 /* inpfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F761068369500641384 /* inpfile.c */; }; - 2255754317551234009946B1 /* input1.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F771068369500641384 /* input1.c */; }; - 2255754417551234009946B1 /* input2.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F781068369500641384 /* input2.c */; }; - 2255754517551234009946B1 /* input3.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F791068369500641384 /* input3.c */; }; - 2255754617551234009946B1 /* mempool.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7A1068369500641384 /* mempool.c */; }; - 2255754717551234009946B1 /* output.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7C1068369500641384 /* output.c */; }; - 2255754817551234009946B1 /* quality.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7D1068369500641384 /* quality.c */; }; - 2255754917551234009946B1 /* report.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7E1068369500641384 /* report.c */; }; - 2255754A17551234009946B1 /* rules.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F7F1068369500641384 /* rules.c */; }; - 2255754B17551234009946B1 /* smatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = 22322F801068369500641384 /* smatrix.c */; }; - 225762C51C068A3900484EC7 /* Net1.inp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 225762C31C068A2A00484EC7 /* Net1.inp */; }; - 225762C61C068A3B00484EC7 /* Net2.inp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 225762C41C068A2A00484EC7 /* Net2.inp */; }; - 226537E0179EDEEB00258C60 /* epanet2.h in Headers */ = {isa = PBXBuildFile; fileRef = 22322FA9106836B000641384 /* epanet2.h */; }; - 22CD9A5E1B27898E00B65E83 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 22CD9A5D1B27898E00B65E83 /* main.c */; }; - 22CD9A611B278BB900B65E83 /* libepanet-static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2255753B17551217009946B1 /* libepanet-static.a */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 223109E91BA869DA0030AAE8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2255753A17551217009946B1; - remoteInfo = "epanet-static"; - }; - 22CD9A5F1B278B0400B65E83 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2255753A17551217009946B1; - remoteInfo = "epanet-static"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 223109E11BA865690030AAE8 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 6; - files = ( - 223109E61BA865930030AAE8 /* Net3.inp in CopyFiles */, - 225762C51C068A3900484EC7 /* Net1.inp in CopyFiles */, - 225762C61C068A3B00484EC7 /* Net2.inp in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 223109EE1BA869DA0030AAE8 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 6; - files = ( - 223109EF1BA869DA0030AAE8 /* Net3.inp in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 223109E31BA8658A0030AAE8 /* Net3.inp */ = {isa = PBXFileReference; lastKnownFileType = text; name = Net3.inp; path = "../../example-networks/Net3.inp"; sourceTree = ""; }; - 223109F31BA869DA0030AAE8 /* runepanet copy */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "runepanet copy"; sourceTree = BUILT_PRODUCTS_DIR; }; - 22310A091BA869F30030AAE8 /* libepanet-static copy.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libepanet-static copy.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 22322F66106833BB00641384 /* runepanet */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = runepanet; sourceTree = BUILT_PRODUCTS_DIR; }; - 22322F701068369500641384 /* enumstxt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = enumstxt.h; path = ../../src/enumstxt.h; sourceTree = SOURCE_ROOT; }; - 22322F711068369500641384 /* epanet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; lineEnding = 2; name = epanet.c; path = ../../src/epanet.c; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.c; }; - 22322F721068369500641384 /* funcs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = funcs.h; path = ../../src/funcs.h; sourceTree = SOURCE_ROOT; }; - 22322F731068369500641384 /* hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hash.c; path = ../../src/hash.c; sourceTree = SOURCE_ROOT; }; - 22322F741068369500641384 /* hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hash.h; path = ../../src/hash.h; sourceTree = SOURCE_ROOT; }; - 22322F751068369500641384 /* hydraul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hydraul.c; path = ../../src/hydraul.c; sourceTree = SOURCE_ROOT; }; - 22322F761068369500641384 /* inpfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = inpfile.c; path = ../../src/inpfile.c; sourceTree = SOURCE_ROOT; }; - 22322F771068369500641384 /* input1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = input1.c; path = ../../src/input1.c; sourceTree = SOURCE_ROOT; }; - 22322F781068369500641384 /* input2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = input2.c; path = ../../src/input2.c; sourceTree = SOURCE_ROOT; }; - 22322F791068369500641384 /* input3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = input3.c; path = ../../src/input3.c; sourceTree = SOURCE_ROOT; }; - 22322F7A1068369500641384 /* mempool.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mempool.c; path = ../../src/mempool.c; sourceTree = SOURCE_ROOT; }; - 22322F7B1068369500641384 /* mempool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mempool.h; path = ../../src/mempool.h; sourceTree = SOURCE_ROOT; }; - 22322F7C1068369500641384 /* output.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = output.c; path = ../../src/output.c; sourceTree = SOURCE_ROOT; }; - 22322F7D1068369500641384 /* quality.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; lineEnding = 2; name = quality.c; path = ../../src/quality.c; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.c; }; - 22322F7E1068369500641384 /* report.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = report.c; path = ../../src/report.c; sourceTree = SOURCE_ROOT; }; - 22322F7F1068369500641384 /* rules.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rules.c; path = ../../src/rules.c; sourceTree = SOURCE_ROOT; }; - 22322F801068369500641384 /* smatrix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = smatrix.c; path = ../../src/smatrix.c; sourceTree = SOURCE_ROOT; }; - 22322F811068369500641384 /* text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = text.h; path = ../../src/text.h; sourceTree = SOURCE_ROOT; }; - 22322F831068369500641384 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../../src/types.h; sourceTree = SOURCE_ROOT; }; - 22322F841068369500641384 /* vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vars.h; path = ../../src/vars.h; sourceTree = SOURCE_ROOT; }; - 22322FA9106836B000641384 /* epanet2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 2; name = epanet2.h; path = ../../include/epanet2.h; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 2255753B17551217009946B1 /* libepanet-static.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libepanet-static.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 225762C31C068A2A00484EC7 /* Net1.inp */ = {isa = PBXFileReference; lastKnownFileType = text; name = Net1.inp; path = "../../example-networks/Net1.inp"; sourceTree = ""; }; - 225762C41C068A2A00484EC7 /* Net2.inp */ = {isa = PBXFileReference; lastKnownFileType = text; name = Net2.inp; path = "../../example-networks/Net2.inp"; sourceTree = ""; }; - 22CD9A5D1B27898E00B65E83 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = main.c; path = ../../run/main.c; sourceTree = ""; }; - 22E107B21C163E5300689CED /* outputapi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = outputapi.c; path = ../../tools/outputapi/outputapi.c; sourceTree = ""; }; - 22E107B31C163E5300689CED /* outputapi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = outputapi.h; path = ../../tools/outputapi/outputapi.h; sourceTree = ""; }; - D2AAC0630554660B00DB518D /* libepanet.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libepanet.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 223109EC1BA869DA0030AAE8 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 223109ED1BA869DA0030AAE8 /* libepanet-static.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 22310A031BA869F30030AAE8 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 22322F64106833BB00641384 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 22CD9A611B278BB900B65E83 /* libepanet-static.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2255753817551217009946B1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D289988505E68E00004EDB86 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 08FB7794FE84155DC02AAC07 /* epanet */ = { - isa = PBXGroup; - children = ( - 22E107B11C163E3B00689CED /* Output API */, - 223109E21BA865790030AAE8 /* sample networks */, - 22CD9A5C1B27896200B65E83 /* run epanet */, - 22322FA8106836A000641384 /* Include */, - 08FB7795FE84155DC02AAC07 /* Source */, - 1AB674ADFE9D54B511CA2CBB /* Products */, - ); - name = epanet; - sourceTree = ""; - }; - 08FB7795FE84155DC02AAC07 /* Source */ = { - isa = PBXGroup; - children = ( - 22322F711068369500641384 /* epanet.c */, - 22322F751068369500641384 /* hydraul.c */, - 22322F701068369500641384 /* enumstxt.h */, - 22322F721068369500641384 /* funcs.h */, - 22322F731068369500641384 /* hash.c */, - 22322F741068369500641384 /* hash.h */, - 22322F761068369500641384 /* inpfile.c */, - 22322F771068369500641384 /* input1.c */, - 22322F781068369500641384 /* input2.c */, - 22322F791068369500641384 /* input3.c */, - 22322F7A1068369500641384 /* mempool.c */, - 22322F7B1068369500641384 /* mempool.h */, - 22322F7C1068369500641384 /* output.c */, - 22322F7D1068369500641384 /* quality.c */, - 22322F7E1068369500641384 /* report.c */, - 22322F7F1068369500641384 /* rules.c */, - 22322F801068369500641384 /* smatrix.c */, - 22322F811068369500641384 /* text.h */, - 22322F831068369500641384 /* types.h */, - 22322F841068369500641384 /* vars.h */, - ); - name = Source; - sourceTree = ""; - }; - 1AB674ADFE9D54B511CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - D2AAC0630554660B00DB518D /* libepanet.dylib */, - 22322F66106833BB00641384 /* runepanet */, - 2255753B17551217009946B1 /* libepanet-static.a */, - 223109F31BA869DA0030AAE8 /* runepanet copy */, - 22310A091BA869F30030AAE8 /* libepanet-static copy.a */, - ); - name = Products; - sourceTree = ""; - }; - 223109E21BA865790030AAE8 /* sample networks */ = { - isa = PBXGroup; - children = ( - 223109E31BA8658A0030AAE8 /* Net3.inp */, - 225762C31C068A2A00484EC7 /* Net1.inp */, - 225762C41C068A2A00484EC7 /* Net2.inp */, - ); - name = "sample networks"; - sourceTree = ""; - }; - 22322FA8106836A000641384 /* Include */ = { - isa = PBXGroup; - children = ( - 22322FA9106836B000641384 /* epanet2.h */, - ); - name = Include; - sourceTree = ""; - }; - 22CD9A5C1B27896200B65E83 /* run epanet */ = { - isa = PBXGroup; - children = ( - 22CD9A5D1B27898E00B65E83 /* main.c */, - ); - name = "run epanet"; - sourceTree = ""; - }; - 22E107B11C163E3B00689CED /* Output API */ = { - isa = PBXGroup; - children = ( - 22E107B31C163E5300689CED /* outputapi.h */, - 22E107B21C163E5300689CED /* outputapi.c */, - ); - name = "Output API"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 22310A041BA869F30030AAE8 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 22310A051BA869F30030AAE8 /* epanet2.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2255753917551217009946B1 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 226537E0179EDEEB00258C60 /* epanet2.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D2AAC0600554660B00DB518D /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 22322FAA106836BC00641384 /* epanet2.h in Headers */, - 22322F851068369500641384 /* enumstxt.h in Headers */, - 22322F871068369500641384 /* funcs.h in Headers */, - 22322F891068369500641384 /* hash.h in Headers */, - 22322F901068369500641384 /* mempool.h in Headers */, - 22322F961068369500641384 /* text.h in Headers */, - 22322F981068369500641384 /* types.h in Headers */, - 22322F991068369500641384 /* vars.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 223109E71BA869DA0030AAE8 /* runepanet float-precision */ = { - isa = PBXNativeTarget; - buildConfigurationList = 223109F01BA869DA0030AAE8 /* Build configuration list for PBXNativeTarget "runepanet float-precision" */; - buildPhases = ( - 223109EA1BA869DA0030AAE8 /* Sources */, - 223109EC1BA869DA0030AAE8 /* Frameworks */, - 223109EE1BA869DA0030AAE8 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - 223109E81BA869DA0030AAE8 /* PBXTargetDependency */, - ); - name = "runepanet float-precision"; - productName = runepanet; - productReference = 223109F31BA869DA0030AAE8 /* runepanet copy */; - productType = "com.apple.product-type.tool"; - }; - 223109F41BA869F30030AAE8 /* epanet-static float-precision */ = { - isa = PBXNativeTarget; - buildConfigurationList = 22310A061BA869F30030AAE8 /* Build configuration list for PBXNativeTarget "epanet-static float-precision" */; - buildPhases = ( - 223109F51BA869F30030AAE8 /* Sources */, - 22310A031BA869F30030AAE8 /* Frameworks */, - 22310A041BA869F30030AAE8 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "epanet-static float-precision"; - productName = "epanet-static"; - productReference = 22310A091BA869F30030AAE8 /* libepanet-static copy.a */; - productType = "com.apple.product-type.library.static"; - }; - 22322F65106833BB00641384 /* runepanet */ = { - isa = PBXNativeTarget; - buildConfigurationList = 22322F6A106833E600641384 /* Build configuration list for PBXNativeTarget "runepanet" */; - buildPhases = ( - 22322F63106833BB00641384 /* Sources */, - 22322F64106833BB00641384 /* Frameworks */, - 223109E11BA865690030AAE8 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - 22CD9A601B278B0400B65E83 /* PBXTargetDependency */, - ); - name = runepanet; - productName = runepanet; - productReference = 22322F66106833BB00641384 /* runepanet */; - productType = "com.apple.product-type.tool"; - }; - 2255753A17551217009946B1 /* epanet-static */ = { - isa = PBXNativeTarget; - buildConfigurationList = 2255753E17551217009946B1 /* Build configuration list for PBXNativeTarget "epanet-static" */; - buildPhases = ( - 2255753717551217009946B1 /* Sources */, - 2255753817551217009946B1 /* Frameworks */, - 2255753917551217009946B1 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "epanet-static"; - productName = "epanet-static"; - productReference = 2255753B17551217009946B1 /* libepanet-static.a */; - productType = "com.apple.product-type.library.static"; - }; - D2AAC0620554660B00DB518D /* epanet */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1DEB914A08733D8E0010E9CD /* Build configuration list for PBXNativeTarget "epanet" */; - buildPhases = ( - D2AAC0600554660B00DB518D /* Headers */, - D2AAC0610554660B00DB518D /* Sources */, - D289988505E68E00004EDB86 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = epanet; - productName = epanet; - productReference = D2AAC0630554660B00DB518D /* libepanet.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 08FB7793FE84155DC02AAC07 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0630; - }; - buildConfigurationList = 1DEB914E08733D8E0010E9CD /* Build configuration list for PBXProject "epanet" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 1; - knownRegions = ( - English, - Japanese, - French, - German, - ); - mainGroup = 08FB7794FE84155DC02AAC07 /* epanet */; - projectDirPath = ""; - projectRoot = ../../..; - targets = ( - D2AAC0620554660B00DB518D /* epanet */, - 22322F65106833BB00641384 /* runepanet */, - 2255753A17551217009946B1 /* epanet-static */, - 223109E71BA869DA0030AAE8 /* runepanet float-precision */, - 223109F41BA869F30030AAE8 /* epanet-static float-precision */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 223109EA1BA869DA0030AAE8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 223109EB1BA869DA0030AAE8 /* main.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 223109F51BA869F30030AAE8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 223109F61BA869F30030AAE8 /* epanet.c in Sources */, - 223109F71BA869F30030AAE8 /* hash.c in Sources */, - 223109F81BA869F30030AAE8 /* hydraul.c in Sources */, - 223109F91BA869F30030AAE8 /* inpfile.c in Sources */, - 223109FA1BA869F30030AAE8 /* input1.c in Sources */, - 223109FB1BA869F30030AAE8 /* input2.c in Sources */, - 223109FC1BA869F30030AAE8 /* input3.c in Sources */, - 223109FD1BA869F30030AAE8 /* mempool.c in Sources */, - 223109FE1BA869F30030AAE8 /* output.c in Sources */, - 223109FF1BA869F30030AAE8 /* quality.c in Sources */, - 22310A001BA869F30030AAE8 /* report.c in Sources */, - 22310A011BA869F30030AAE8 /* rules.c in Sources */, - 22310A021BA869F30030AAE8 /* smatrix.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 22322F63106833BB00641384 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 22CD9A5E1B27898E00B65E83 /* main.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2255753717551217009946B1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2255753F17551234009946B1 /* epanet.c in Sources */, - 2255754017551234009946B1 /* hash.c in Sources */, - 2255754117551234009946B1 /* hydraul.c in Sources */, - 2255754217551234009946B1 /* inpfile.c in Sources */, - 2255754317551234009946B1 /* input1.c in Sources */, - 2255754417551234009946B1 /* input2.c in Sources */, - 2255754517551234009946B1 /* input3.c in Sources */, - 2255754617551234009946B1 /* mempool.c in Sources */, - 2255754717551234009946B1 /* output.c in Sources */, - 2255754817551234009946B1 /* quality.c in Sources */, - 2255754917551234009946B1 /* report.c in Sources */, - 2255754A17551234009946B1 /* rules.c in Sources */, - 2255754B17551234009946B1 /* smatrix.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D2AAC0610554660B00DB518D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 22322F861068369500641384 /* epanet.c in Sources */, - 22322F881068369500641384 /* hash.c in Sources */, - 22322F8A1068369500641384 /* hydraul.c in Sources */, - 22322F8B1068369500641384 /* inpfile.c in Sources */, - 22322F8C1068369500641384 /* input1.c in Sources */, - 22322F8D1068369500641384 /* input2.c in Sources */, - 22322F8E1068369500641384 /* input3.c in Sources */, - 22322F8F1068369500641384 /* mempool.c in Sources */, - 22322F911068369500641384 /* output.c in Sources */, - 22322F921068369500641384 /* quality.c in Sources */, - 22322F931068369500641384 /* report.c in Sources */, - 22322F941068369500641384 /* rules.c in Sources */, - 22322F951068369500641384 /* smatrix.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 223109E81BA869DA0030AAE8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 2255753A17551217009946B1 /* epanet-static */; - targetProxy = 223109E91BA869DA0030AAE8 /* PBXContainerItemProxy */; - }; - 22CD9A601B278B0400B65E83 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 2255753A17551217009946B1 /* epanet-static */; - targetProxy = 22CD9A5F1B278B0400B65E83 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 1DEB914B08733D8E0010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - EXECUTABLE_PREFIX = lib; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = "EN_API_FLOAT_TYPE=double"; - PRODUCT_NAME = epanet; - }; - name = Debug; - }; - 1DEB914C08733D8E0010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - EXECUTABLE_PREFIX = lib; - GCC_MODEL_TUNING = G5; - GCC_PREPROCESSOR_DEFINITIONS = "EN_API_FLOAT_TYPE=double"; - PRODUCT_NAME = epanet; - }; - name = Release; - }; - 1DEB914F08733D8E0010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c89; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.10; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = ""; - }; - name = Debug; - }; - 1DEB915008733D8E0010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = c89; - GCC_NO_COMMON_BLOCKS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ""; - MACOSX_DEPLOYMENT_TARGET = 10.10; - SDKROOT = ""; - }; - name = Release; - }; - 223109F11BA869DA0030AAE8 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ""; - INFOPLIST_PREPROCESSOR_DEFINITIONS = ""; - PRODUCT_NAME = "runepanet copy"; - }; - name = Debug; - }; - 223109F21BA869DA0030AAE8 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - GCC_MODEL_TUNING = G5; - GCC_PREPROCESSOR_DEFINITIONS = ""; - INFOPLIST_PREPROCESSOR_DEFINITIONS = ""; - PRODUCT_NAME = "runepanet copy"; - ZERO_LINK = NO; - }; - name = Release; - }; - 22310A071BA869F30030AAE8 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_WARN_EMPTY_BODY = YES; - COMBINE_HIDPI_IMAGES = YES; - EXECUTABLE_PREFIX = lib; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - PRODUCT_NAME = "epanet-static copy"; - }; - name = Debug; - }; - 22310A081BA869F30030AAE8 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_WARN_EMPTY_BODY = YES; - COMBINE_HIDPI_IMAGES = YES; - EXECUTABLE_PREFIX = lib; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - PRODUCT_NAME = "epanet-static copy"; - }; - name = Release; - }; - 22322F68106833BC00641384 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ""; - INFOPLIST_PREPROCESSOR_DEFINITIONS = ""; - PRODUCT_NAME = runepanet; - SDKROOT = macosx; - }; - name = Debug; - }; - 22322F69106833BC00641384 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - GCC_MODEL_TUNING = G5; - GCC_PREPROCESSOR_DEFINITIONS = ""; - INFOPLIST_PREPROCESSOR_DEFINITIONS = ""; - PRODUCT_NAME = runepanet; - SDKROOT = macosx; - ZERO_LINK = NO; - }; - name = Release; - }; - 2255753C17551217009946B1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_WARN_EMPTY_BODY = YES; - COMBINE_HIDPI_IMAGES = YES; - EXECUTABLE_PREFIX = lib; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_PREPROCESSOR_DEFINITIONS = "EN_API_FLOAT_TYPE=double"; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - }; - name = Debug; - }; - 2255753D17551217009946B1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_WARN_EMPTY_BODY = YES; - COMBINE_HIDPI_IMAGES = YES; - EXECUTABLE_PREFIX = lib; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_PREPROCESSOR_DEFINITIONS = "EN_API_FLOAT_TYPE=double"; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1DEB914A08733D8E0010E9CD /* Build configuration list for PBXNativeTarget "epanet" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB914B08733D8E0010E9CD /* Debug */, - 1DEB914C08733D8E0010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1DEB914E08733D8E0010E9CD /* Build configuration list for PBXProject "epanet" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB914F08733D8E0010E9CD /* Debug */, - 1DEB915008733D8E0010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 223109F01BA869DA0030AAE8 /* Build configuration list for PBXNativeTarget "runepanet float-precision" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 223109F11BA869DA0030AAE8 /* Debug */, - 223109F21BA869DA0030AAE8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 22310A061BA869F30030AAE8 /* Build configuration list for PBXNativeTarget "epanet-static float-precision" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 22310A071BA869F30030AAE8 /* Debug */, - 22310A081BA869F30030AAE8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 22322F6A106833E600641384 /* Build configuration list for PBXNativeTarget "runepanet" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 22322F68106833BC00641384 /* Debug */, - 22322F69106833BC00641384 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 2255753E17551217009946B1 /* Build configuration list for PBXNativeTarget "epanet-static" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 2255753C17551217009946B1 /* Debug */, - 2255753D17551217009946B1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; -} diff --git a/cmake/CodeCoverage.cmake b/cmake/CodeCoverage.cmake new file mode 100644 index 0000000..f74b9f1 --- /dev/null +++ b/cmake/CodeCoverage.cmake @@ -0,0 +1,305 @@ +# Copyright (c) 2012 - 2017, Lars Bilke +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# CHANGES: +# +# 2012-01-31, Lars Bilke +# - Enable Code Coverage +# +# 2013-09-17, Joakim Söderberg +# - Added support for Clang. +# - Some additional usage instructions. +# +# 2016-02-03, Lars Bilke +# - Refactored functions to use named parameters +# +# 2017-06-02, Lars Bilke +# - Merged with modified version from github.com/ufz/ogs +# +# +# USAGE: +# +# 1. Copy this file into your cmake modules path. +# +# 2. Add the following line to your CMakeLists.txt: +# include(CodeCoverage) +# +# 3. Append necessary compiler flags: +# APPEND_COVERAGE_COMPILER_FLAGS() +# +# 3.a (OPTIONAL) Set appropriate optimization flags, e.g. -O0, -O1 or -Og +# +# 4. If you need to exclude additional directories from the report, specify them +# using the COVERAGE_LCOV_EXCLUDES variable before calling SETUP_TARGET_FOR_COVERAGE_LCOV. +# Example: +# set(COVERAGE_LCOV_EXCLUDES 'dir1/*' 'dir2/*') +# +# 5. Use the functions described below to create a custom make target which +# runs your test executable and produces a code coverage report. +# +# 6. Build a Debug build: +# cmake -DCMAKE_BUILD_TYPE=Debug .. +# make +# make my_coverage_target +# + +include(CMakeParseArguments) + +# Check prereqs +find_program( GCOV_PATH gcov ) +find_program( LCOV_PATH NAMES lcov lcov.bat lcov.exe lcov.perl) +find_program( GENHTML_PATH NAMES genhtml genhtml.perl genhtml.bat ) +find_program( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/scripts/test) +find_program( SIMPLE_PYTHON_EXECUTABLE python ) + +if(NOT GCOV_PATH) + message(FATAL_ERROR "gcov not found! Aborting...") +endif() # NOT GCOV_PATH + +if("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") + if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3) + message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") + endif() +elseif(NOT CMAKE_COMPILER_IS_GNUCXX) + message(FATAL_ERROR "Compiler is not GNU gcc! Aborting...") +endif() + +set(COVERAGE_COMPILER_FLAGS "-g --coverage -fprofile-arcs -ftest-coverage" + CACHE INTERNAL "") + +set(CMAKE_CXX_FLAGS_COVERAGE + ${COVERAGE_COMPILER_FLAGS} + CACHE STRING "Flags used by the C++ compiler during coverage builds." + FORCE ) +set(CMAKE_C_FLAGS_COVERAGE + ${COVERAGE_COMPILER_FLAGS} + CACHE STRING "Flags used by the C compiler during coverage builds." + FORCE ) +set(CMAKE_EXE_LINKER_FLAGS_COVERAGE + "" + CACHE STRING "Flags used for linking binaries during coverage builds." + FORCE ) +set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE + "" + CACHE STRING "Flags used by the shared libraries linker during coverage builds." + FORCE ) +mark_as_advanced( + CMAKE_CXX_FLAGS_COVERAGE + CMAKE_C_FLAGS_COVERAGE + CMAKE_EXE_LINKER_FLAGS_COVERAGE + CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) + +if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") + message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading") +endif() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug" + +if(CMAKE_C_COMPILER_ID STREQUAL "GNU") + link_libraries(gcov) +else() + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") +endif() + +# Defines a target for running and collection code coverage information +# Builds dependencies, runs the given executable and outputs reports. +# NOTE! The executable should always have a ZERO as exit code otherwise +# the coverage generation will not complete. +# +# SETUP_TARGET_FOR_COVERAGE_LCOV( +# NAME testrunner_coverage # New target name +# EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR +# DEPENDENCIES testrunner # Dependencies to build first +# ) +function(SETUP_TARGET_FOR_COVERAGE_LCOV) + + set(options NONE) + set(oneValueArgs NAME) + set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES LCOV_ARGS GENHTML_ARGS) + cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(NOT LCOV_PATH) + message(FATAL_ERROR "lcov not found! Aborting...") + endif() # NOT LCOV_PATH + + if(NOT GENHTML_PATH) + message(FATAL_ERROR "genhtml not found! Aborting...") + endif() # NOT GENHTML_PATH + + # Setup target + add_custom_target(${Coverage_NAME} + + # Cleanup lcov + COMMAND ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} -directory . --zerocounters + # Create baseline to make sure untouched files show up in the report + COMMAND ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} -c -i -d . -o ${Coverage_NAME}.base + + # Run tests + COMMAND ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS} + + # Capturing lcov counters and generating report + COMMAND ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} --directory . --capture --output-file ${Coverage_NAME}.info + # add baseline counters + COMMAND ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} -a ${Coverage_NAME}.base -a ${Coverage_NAME}.info --output-file ${Coverage_NAME}.total + COMMAND ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} --remove ${Coverage_NAME}.total ${COVERAGE_LCOV_EXCLUDES} --output-file ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned + COMMAND ${GENHTML_PATH} ${Coverage_GENHTML_ARGS} -o ${Coverage_NAME} ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned + COMMAND ${CMAKE_COMMAND} -E remove ${Coverage_NAME}.base ${Coverage_NAME}.total ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned + + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + DEPENDS ${Coverage_DEPENDENCIES} + COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." + ) + + # Show where to find the lcov info report + add_custom_command(TARGET ${Coverage_NAME} POST_BUILD + COMMAND ; + COMMENT "Lcov code coverage info report saved in ${Coverage_NAME}.info." + ) + + # Show info where to find the report + add_custom_command(TARGET ${Coverage_NAME} POST_BUILD + COMMAND ; + COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report." + ) + +endfunction() # SETUP_TARGET_FOR_COVERAGE_LCOV + +# Defines a target for running and collection code coverage information +# Builds dependencies, runs the given executable and outputs reports. +# NOTE! The executable should always have a ZERO as exit code otherwise +# the coverage generation will not complete. +# +# SETUP_TARGET_FOR_COVERAGE_GCOVR_XML( +# NAME ctest_coverage # New target name +# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR +# DEPENDENCIES executable_target # Dependencies to build first +# ) +function(SETUP_TARGET_FOR_COVERAGE_GCOVR_XML) + + set(options NONE) + set(oneValueArgs NAME) + set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) + cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(NOT SIMPLE_PYTHON_EXECUTABLE) + message(FATAL_ERROR "python not found! Aborting...") + endif() # NOT SIMPLE_PYTHON_EXECUTABLE + + if(NOT GCOVR_PATH) + message(FATAL_ERROR "gcovr not found! Aborting...") + endif() # NOT GCOVR_PATH + + # Combine excludes to several -e arguments + set(GCOVR_EXCLUDES "") + foreach(EXCLUDE ${COVERAGE_GCOVR_EXCLUDES}) + list(APPEND GCOVR_EXCLUDES "-e") + list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") + endforeach() + + add_custom_target(${Coverage_NAME} + # Run tests + ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS} + + # Running gcovr + COMMAND ${GCOVR_PATH} --xml + -r ${PROJECT_SOURCE_DIR} ${GCOVR_EXCLUDES} + --object-directory=${PROJECT_BINARY_DIR} + -o ${Coverage_NAME}.xml + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + DEPENDS ${Coverage_DEPENDENCIES} + COMMENT "Running gcovr to produce Cobertura code coverage report." + ) + + # Show info where to find the report + add_custom_command(TARGET ${Coverage_NAME} POST_BUILD + COMMAND ; + COMMENT "Cobertura code coverage report saved in ${Coverage_NAME}.xml." + ) + +endfunction() # SETUP_TARGET_FOR_COVERAGE_GCOVR_XML + +# Defines a target for running and collection code coverage information +# Builds dependencies, runs the given executable and outputs reports. +# NOTE! The executable should always have a ZERO as exit code otherwise +# the coverage generation will not complete. +# +# SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML( +# NAME ctest_coverage # New target name +# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR +# DEPENDENCIES executable_target # Dependencies to build first +# ) +function(SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML) + + set(options NONE) + set(oneValueArgs NAME) + set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) + cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(NOT SIMPLE_PYTHON_EXECUTABLE) + message(FATAL_ERROR "python not found! Aborting...") + endif() # NOT SIMPLE_PYTHON_EXECUTABLE + + if(NOT GCOVR_PATH) + message(FATAL_ERROR "gcovr not found! Aborting...") + endif() # NOT GCOVR_PATH + + # Combine excludes to several -e arguments + set(GCOVR_EXCLUDES "") + foreach(EXCLUDE ${COVERAGE_GCOVR_EXCLUDES}) + list(APPEND GCOVR_EXCLUDES "-e") + list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") + endforeach() + + add_custom_target(${Coverage_NAME} + # Run tests + ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS} + + # Create folder + COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/${Coverage_NAME} + + # Running gcovr + COMMAND ${GCOVR_PATH} --html --html-details + -r ${PROJECT_SOURCE_DIR} ${GCOVR_EXCLUDES} + --object-directory=${PROJECT_BINARY_DIR} + -o ${Coverage_NAME}/index.html + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + DEPENDS ${Coverage_DEPENDENCIES} + COMMENT "Running gcovr to produce HTML code coverage report." + ) + + # Show info where to find the report + add_custom_command(TARGET ${Coverage_NAME} POST_BUILD + COMMAND ; + COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report." + ) + +endfunction() # SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML + +function(APPEND_COVERAGE_COMPILER_FLAGS) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) + message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}") +endfunction() # APPEND_COVERAGE_COMPILER_FLAGS diff --git a/doc/DataFlow.eps b/doc/DataFlow.eps new file mode 100644 index 0000000..041b043 --- /dev/null +++ b/doc/DataFlow.eps @@ -0,0 +1,15958 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/srv/www/vhosts/git_exclude/save/processed/5/f/7/5f73a081-3008-4947-be6b-2ae45f4afa5d/01_0631f921834777aef3d754c155093225_png_intermediate_eps/DataFlow.eps) +%%CreationDate: (2019-01-27T17:06:23+01:00) +%%BoundingBox: -0 -0 393 292 +%%HiResBoundingBox: 0 0 393.041 292 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 1 +%%EndComments + +%%BeginDefaults +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-none or 1-RunlengthEncoded. + % hex color packets. + % + gsave + /buffer 512 string def + /byte 1 string def + /color_packet 3 string def + /pixels 768 string def + + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 393 292 +userdict begin +DisplayImage +0 0 +393.041 291.78 +12 +524 389 +0 +0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFB +68BAD046AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC567B9CF +FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFBFBFBF5F5F546AAC5E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FFE2F9FF +E2F9FFE2F9FFE2F9FF46AAC5F5F5F5FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EBEBEB46AAC5E0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF +E0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FFE0F8FF46AAC5EBEBEBF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5E3E3E346AAC5 +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF +DFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FFDFF8FF46AAC5E3E3E3 +F5F5F5FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCF3F3F3DEDEDE46AAC5DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FFDDF7FF +DDF7FFDDF7FF46AAC5DEDEDEF3F3F3FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5DBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF +DBF7FFDBF7FFDBF7FFDBF7FFDBF7FFDBF7FF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5D9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF +D9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FFD9F6FF46AAC5DCDCDCF2F2F2 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +F2F2F2DCDCDC46AAC5D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FFD8F6FF +D8F6FF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FFD6F5FF +D6F5FFD6F5FFD6F5FFD6F5FFD6F5FF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5D4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF +D4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FFD4F5FF46AAC5DCDCDCF2F2F2FCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2 +DCDCDC46AAC5D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +D2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FFD2F5FF +46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FFD0F4FF +D0F4FFD0F4FFD0F4FFD0F4FF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5CFF4FFCFF4FFCFF4FF +CFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FF +CFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FF +CFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FF +CFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FF +CFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFAE66 +00000000000000000000000000000000003A75D2FFCFF4FFCFAE66000000000000000000000000 +00000053AEFFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FF9462000000000062B6CFF4FFCFF4FFCFF4FF +CFF4FFCFF4FFCFAE6600000000003A75D2FFCFF4FFCFF4FFCFF4FFCFF4DB7536000062B6CFF4FF +CFF4FFCFAE6600000000000000000000000000000000003A75D2DB753600000000000000000000 +00000000000000000000000000006694F4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FF +CFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FF +CFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FF +CFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FF +CFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FF +CFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FFCFF4FF46AAC5DCDCDCF2F2F2FCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC +46AAC5CDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FF +CDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FF +CDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FF +CDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FF +CDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FF +CDF3FFCDF3FFCDF3FFCDAE6600003A73D1FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDAE66 +00003A73D1FFCDF3FFCDF3FFB0893A0000002E89DBCDF3FFCDF3FFCDF3FFCDF3B65200002E363A +00006692F3FFCDF3FFCDF3FFCDF3FFCDF3FFCDAE660000000000000061B6CDF3FFCDF3FFCDF3FF +CDF3DB7336000061B6CDF3FFCDF3FFCDAE6600003A73D1FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FF +CDF3FFCDF3FFCDF3FFCDD1902E000052AEFFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FF +CDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FF +CDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FF +CDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FF +CDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FF +CDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FFCDF3FF46AAC5 +DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCF2F2F2DCDCDC46AAC5CBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FF +CBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FF +CBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FF +CBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FF +CBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FF +CBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBAE6600003A72D1FFCBF3FFCBF3FFCBF3FF +CBF3FFCBF3FFCBF3FFCBAE6600003A72D1FFCBF3FFCBF3FFCBF3DB723600003690AFF3FFCBF3FF +CBF3FFCBAE6600006691D1902D000052AEFFCBF3FFCBF3FFCBF3FFCBF3FFCBAE6600003A52613A +00000052AEFFCBF3FFCBF3FFCBF3DB7236000061B6CBF3FFCBF3FFCBAE6600003A72D1FFCBF3FF +CBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBD1902D000052AEFFCBF3FFCBF3FFCBF3FF +CBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FF +CBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FF +CBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FF +CBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FF +CBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FFCBF3FF +CBF3FFCBF3FFCBF3FF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5C9F2FFC9F2FFC9F2FFC9F2FF +C9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FF +C9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FF +C9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FF +C9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FF +C9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9AC6600003A +71CFFFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9AC6600003A71CFFFC9F2FFC9F2FFC9F2FF +90610000006690F2FFC9F2FFC9F2DB7136000061B6C9F2DB7136000061B6C9F2FFC9F2FFC9F2FF +C9F2FFC9AC6600003A71CFB6510000003690ADF2FFC9F2FFC9F2DB7136000061B6C9F2FFC9F2FF +C9AC6600003A71CFFFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9CF902D0000 +51ACFFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FF +C9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FF +C9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FF +C9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FF +C9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FF +C9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FFC9F2FF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5 +C8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FF +C8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FF +C8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FF +C8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FF +C8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FF +C8F2FFC8F2FFC8AC6600003A71CFFFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8AC6600003A +71CFFFC8F2FFC8F2FFC8F2DB713600003690ACF2FFC8F2FFC8CF902D000051ACFFC8F2FFAC883A +00003A71CFFFC8F2FFC8F2FFC8F2FFC8AC6600003A71CFFFC8AC6600000051ACFFC8F2FFC8F2DB +7136000061B6C8F2FFC8F2FFC8AC6600003A71CFFFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FF +C8F2FFC8F2FFC8CF902D000051ACFFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FF +C8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FF +C8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FF +C8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FF +C8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FF +C8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FFC8F2FF46AAC5DCDCDC +F2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCF2F2F2DCDCDC46AAC5C6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FF +C6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FF +C6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FF +C6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FF +C6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FF +C6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6AC660000000000000000000000000000002C87DB +C6F1FFC6F1FFC6AC6600003A6FCFFFC6F1FFC6F1FFAA873A00000050ACFFC6F1FFC6F1FFAA873A +0000668DF1FFC6F1FFC6CF902C00002C87DBC6F1FFC6F1FFC6F1FFC6AC6600003A6FCFFFC6F1DB +6F3600003690AAF1FFC6F1DB6F36000060B6C6F1FFC6F1FFC6AC66000000000000000000000000 +0000002C87DBC6F1FFC6F1FFC6F1FFC6F1FFC6CF902C000050ACFFC6F1FFC6F1FFC6F1FFC6F1FF +C6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FF +C6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FF +C6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FF +C6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FF +C6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FFC6F1FF +C6F1FFC6F1FF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5C4F1FFC4F1FFC4F1FFC4F1FFC4F1FF +C4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FF +C4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FF +C4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FF +C4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FF +C4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4AC6600003A6ECFFF +C4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4AC660000000000000000000000000000668CF1FF +C4F1FFC4F1FFC4F1DB6E3600003690A8F1FFC4F1FFC4F1B64E0000003690A8F1FFC4F1FFC4F1FF +C4AC6600003A6ECFFFC4F1FFC4AC660000002C87DBC4F1DB6E36000060B6C4F1FFC4F1FFC4AC66 +00003A6ECFFFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4CF902C00004EACFF +C4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FF +C4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FF +C4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FF +C4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FF +C4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FF +C4F1FFC4F1FFC4F1FFC4F1FFC4F1FFC4F1FF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5C3F1FF +C3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FF +C3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FF +C3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FF +C3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FF +C3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FF +C3F1FFC3AC6600003A6ECFFFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3AC6600003A6ECFFF +C3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3CF902C00002C87DBC3F1FFC3F1FFC3F1FF8B6000 +00003A6ECFFFC3F1FFC3F1FFC3AC6600003A6ECFFFC3F1FFC3F1DB6E36000000668BF1DB6E3600 +0060B6C3F1FFC3F1FFC3AC6600003A6ECFFFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FF +C3F1FFC3CF902C00004EACFFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FF +C3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FF +C3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FF +C3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FF +C3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FF +C3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FFC3F1FF46AAC5DCDCDCF2F2F2 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +F2F2F2DCDCDC46AAC5C1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FF +C1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FF +C1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FF +C1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FF +C1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FF +C1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1AB6600003A6DCEFFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FF +C1F0FFC1AB6600003A6DCEFFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFA6873A000000000000 +0000000000000000000000000000002C87DBC1F0FFC1F0FFC1AB6600003A6DCEFFC1F0FFC1F0FF +C1CE902C00002C87B66D36000060B6C1F0FFC1F0FFC1AB6600003A6DCEFFC1F0FFC1F0FFC1F0FF +C1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1CE902C00004DABFFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FF +C1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FF +C1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FF +C1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FF +C1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FF +C1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FFC1F0FF +C1F0FF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5C0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FF +C0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FF +C0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FF +C0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FF +C0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FF +C0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0AB6600003A6CCEFFC0F0FF +C0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0AB6600003A6CCEFFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FF +C0F0DB6C3600003690A5F0FFC0F0FFC0F0FFC0F0FFC0F0DB6C3600003690A5F0FFC0F0FFC0AB66 +00003A6CCEFFC0F0FFC0F0FFC0F0FF89600000003A2B36000060B6C0F0FFC0F0FFC0AB6600003A +6CCEFFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0CE902B00004CABFFC0F0FF +C0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FF +C0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FF +C0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FF +C0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FF +C0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FFC0F0FF +C0F0FFC0F0FFC0F0FFC0F0FFC0F0FF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5BEEFFFBEEFFF +BEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFF +BEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFF +BEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFF +BEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFF +BEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFF +BEAA6600003A6BCEFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEAA6600003A6BCEFFBEEFFF +BEEFFFBEEFFFBEEFFFBEEFFFBEAA660000004CAAFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFA3863A +0000004CAAFFBEEFFFBEAA6600003A6BCEFFBEEFFFBEEFFFBEEFFFBECE902B00000000000060B6 +BEEFFFBEEFFFBEAA6600003A6BCEFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFF +BECE902B00004CAAFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFF +BEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFF +BEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFF +BEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFF +BEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFF +BEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFFBEEFFF46AAC5DCDCDCF2F2F2FCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2 +DCDCDC46AAC5BCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFF +BCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFF +BCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFF +BCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFF +BCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFF +BCEFFFBCEFFFBCEFFFBCEFFFBCAA660000000000000000000000000000000000004BAAFFBCEFFF +BCAA6600003A6ACEFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFF86600000006686EFFFBCEFFFBCEFFF +BCEFFFBCEFFFBCEFFFBCCE902B00000060B6BCEFFFBCAA6600003A6ACEFFBCEFFFBCEFFFBCEFFF +BCEFFFA1863A0000000060B6BCEFFFBCEFFFBCAA66000000000000000000000000000000000000 +4BAAFFBCEFFFBCEFFFBCEFFFBCCE902B00004BAAFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFF +BCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFF +BCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFF +BCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFF +BCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFF +BCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFFBCEFFF +46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFFBAEEFF +BAEEFFBAEEFFBAEEFFBAEEFF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5B7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF +B7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFFB7EEFF46AAC5DCDCDCF2F2F2FCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC +46AAC5B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF +B5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFFB5EEFF46AAC5 +DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCF2F2F2DCDCDC46AAC5B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFFB3EEFF +B3EEFFB3EEFFB3EEFF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5B1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF +B1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFFB1EEFF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5 +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF +AFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFFAFEDFF46AAC5DCDCDC +F2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCF2F2F2DCDCDC46AAC5ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFFACEDFF +ACEDFFACEDFF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5A9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF +A9ECFFA9ECFFA9ECFFA9ECFFA9ECFFA9ECFF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5A7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF +A7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFFA7ECFF46AAC5DCDCDCF2F2F2 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +F2F2F2DCDCDC46AAC5A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFFA5EBFF +A5EBFF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DCDCDC46AAC5A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFFA2EBFF +A2EBFFA2EBFFA2EBFFA2EBFFA2EBFF46AAC5DCDCDCF2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF96A9C1385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8A +FFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A +385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF +385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A +385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A +385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFF +FFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A +385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A +385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8A +FFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A375C88F2F2F2DCDCDC46AAC5A0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF +A0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFFA0EAFF46AAC5305077355883375C88 +FFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A +385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF +385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A +385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A +385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFF +FFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A +385D8A385D8AFFFFFFFFFFFF385D8A385D8A839AB6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A +385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFF +FFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A +385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A +385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8A +FFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A +385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF +385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A +385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A +385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A375C88F2F2F2 +DDDDDD47A6C246AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +46AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC546AAC5 +47A6C2315178355883375C88FFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFF +FFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A +385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A +385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8A +FFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A +385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF +385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCF4F4F4E0E0E0C9C9C9B6B6B6ADADADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAADADADB6B6B6C9C9C9E0E0E0F4F4F4FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6E8E8E8D5D5D5C6C6C6C0C0C0BDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD +BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDC0C0C0C6C6C6D5D5D5E8E8E8F6F6F6FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 +E6E6E6DDDDDDD9D9D9D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D9D9D9DDDDDDE6E6E6 +F1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFDFDFDF9F9F9F4F4F4F0F0F0EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEEEEEEF0F0F0F4F4F4F9F9F9FDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFAFAFAFAFAFAF9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFCFCFCFDFDFDFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9D3DF8AB4E6 +8AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E6 +8AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E6 +8AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E6 +8AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E6 +8AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68AB4E6 +8AB4E68AB4E68AB4E68AB4E68AB4E68AB4E68E9CACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEADBCCF356EB26CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE +6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE +6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE +6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE +6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE +6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE6CB6FE4686D0556983FEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFAAAB9CC3168AA4283CB8FD7FF8FD7FF8FD7FF8FD7FF +8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF +8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF +8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF +8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF +8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF8FD7FF64A7DF +2F66A6546882FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF6F6F6A6B5C83168AA3878C4 +4487D280C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF +80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF +80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF +80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF +80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF80C8FF +80C8FF80C8FF5FA3E23775C02F66A6536781F6F6F6FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +F0F0F09FAEC13168AA3878C43B7DCC4487D56EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF +6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF +6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF +6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF +6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF +6EB5FF6EB5FF6EB5FF6EB5FF6EB5FF579BE53979C63775C02F66A650647EF0F0F0FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEE2EBED +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE483CFE4 +83CFE483CFE483CFE483CFE483CFE483CFE483CFE491B5BFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8ECECEC99A8BB3168AA3878C43B7DCC3D7FCF4387D85DA3F75DA3F7 +5DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F7 +5DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F7 +5DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F7 +5DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F7 +5DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F75DA3F74F94E63C7DCB3979C63775C02F66A6 +4E627CECECECF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFDFDFDFAFAFAC3D6DB2E9AB85FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF +5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF5FEDFF46C6E0548390FAFAFA +FDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B93168AA3878C43B7DCC +3D7FCF3E82D34287D84B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E3 +4B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E3 +4B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E3 +4B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E3 +4B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E34B90E3488CDF3E81D1 +3C7DCB3979C63775C02F66A64D617BEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F1F1F1B7CACF2C92AF47BED789FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +73E9F22C94B151808DF1F1F1F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +97A6B93168AA3878C43B7DCC3D7FCF3E82D34084D64286D94286D94286D94286D94286D94286D9 +4286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D9 +4286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D9 +4286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D9 +4286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D9 +4286D94286D94085D63E81D13C7DCB3979C63775C02F66A64D617BEAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF6F6F6E8E8E8ACBFC42C92AF +33ABCC48C5E07EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF7EFFFF +7EFFFF7EFFFF7EFFFF6CEBF333A9CA2C94B14D7C89E8E8E8F6F6F6FCFCFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA97A6B93168AA3878C43B7DCC3D7FCF3E82D34084D64286D94286D9 +4286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D9 +4286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D9 +4286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D9 +4286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D94286D9 +4286D94286D94286D94286D94286D94286D94085D63E81D13C7DCB3979C63775C02F66A64D617B +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFB +F3F3F3E0E0E0A4B7BC2C92AF33ABCC36B3D645C5E26CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF +6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF6CF3FF60E4F435AED033A9CA2C94B14A7986E0E0E0F3F3F3 +FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83168AA3978C43B7DCB3D7FCF +3F82D24184D54286D84386D94386D94386D94386D94386D94386D94386D94386D94386D94386D9 +4386D94386D94386D94386D94386D94386D94386D94386D94386D94386D94386D94386D94386D9 +4386D94386D94386D94386D94386D94386D94386D94386D94386D94386D94386D94386D94386D9 +4386D94386D94386D94386D94386D94386D94386D94386D94386D94386D94386D94386D94386D9 +4386D94386D94386D94386D94386D94386D94386D94386D94386D94386D94185D63F81D03C7DCB +3A79C53875BF3066A64D617BEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFAF2F2F2DDDDDDA0B3B82C92AE33ABCC36B3D538B6D842C3E45BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE +5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE5BE0FE53D7F537B3D535AECF33A9CA +2C94B1497885DDDDDDF2F2F2FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B8 +3268A93978C33C7DCB3E7FCE3F82D24184D54386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84185D53F81D03D7DCA3A79C53875BF3066A54D617AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB2B72C92AE33ABCB +36B3D538B6D839B9DB3FC1E44ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF1 +4ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF1 +4ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF1 +4ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF1 +4ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF1 +4ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF1 +4ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF1 +4ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF1 +4ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF1 +4ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF1 +4ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF1 +4ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF1 +4ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF1 +4ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF14ACDF147CAED +39B8DA37B3D535AECF33A9C92C94B0487783DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEF0F4E7F0F5E7E2EBCFE4EDD0D7E6BAD8E7BAD9E8BBDAE9BB +CCE0A4CDE1A4CEE2A5CEE3A5CDE1A4DAE9BBD9E7BBD7E6BAE4EED0E3ECD0E2EBD0E1EACFF0F4E7 +EFF4E6FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA97A6B83268A93978C33C7DCB3E7FCE3F82D24184D54386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84185D53F81D03D7DCA3A79C53875BF3066A54D617AEAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 +DCDCDC9FB2B72C92AE33ABCB36B3D538B6D839B9DC3BBCDF3DBFE23DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E33DC0E3 +3DC0E33DC0E33DC0E33BBDE039B8DA37B3D535AECF33A9C92C94B0487783DCDCDCF1F1F1FAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEF0F4E7E3ECD0CADDA3D1E6A6B9D97AC2E47EAAD653B0DD56B5E35ABAE85DBFED61C4F164 +C8F467C9F569CAF66ACCF76BCDF86CCEF96DCFF96FD0FA6FCEF96ECCF76BC9F569C7F467C4F265 +C2F063BFED61BDEB5FBAE85DB7E55BB4E259AFDC56B6DC68BBDC7AC3DD8FDBEABCD6E4BAE1EACF +FDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83268A93978C33C7DCB3E7FCE3F82D2 +4184D54386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84185D53F81D03D7DCA3A79C5 +3875BF3066A54D617AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB2B72C92AD33AACA36B2D438B6D739B9DB3BBCDE3CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBDDF39B8D937B3D435AECE33A9C82C94AF +487783DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE +E2EBD0CEE2A5C6E091BFE07EACD755B7E35CC1EE63C9F56AD1F971D8FD79E0FF81E5FF86E8FF8A +ECFF8DEFFF91F2FF94F4FF97F6FF99F7FF99F7FF9AF7FF9AF8FF9BF8FF9BF9FF9BF9FF9BF8FF9B +F7FF9AF6FF99F5FF97F4FF96F3FF95F1FF93EFFF91EEFF90ECFF8EEAFF8CE6FF88DFFE80D8FC79 +D1FA72CAF66CC3F065BBE95FB3E059BAE06BB1D667C5DF90D6E5B9DFE7CEFEFEFEFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83268A9 +3978C33C7DCB3E7FCE3F82D24184D54386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4185D53F81D03D7DCA3A79C53875BF3066A54D617AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B72D91AD34AACA37B2D3 +39B5D73AB8DA3CBBDE3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13CBCDF3AB7D9 +38B2D336ADCE34A8C82D93AF497683DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +F1F6E8CBDEA4B7D67AABD554BEEB60CDF76DD5FB76DDFE7EE4FF85EBFF8DF1FF93F5FF98F8FF9B +FAFF9DFBFF9EF9FF9DF8FF9CF7FF9BF6FF99F5FF98F4FF97F2FF96F2FF96F1FF95F1FF95F0FF94 +F0FF93EFFF93EFFF92EFFF93F0FF94F1FF94F1FF95F2FF95F2FF96F3FF96F4FF97F4FF97F5FF98 +F5FF98F6FF9AF7FF9AF7FF9AF6FF99F4FF97F0FF93ECFF8EE6FF88E0FE82D9FD7BD0F972C2EF64 +B3E059B3D967C1DA8ED5E3B9EEF2E6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA97A6B83268A93978C33C7DCB3E7FCE3F82D24184D54386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84185D53F81D03D7DCA3A79C53875BF3066A54D617AEAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC +9FB1B62D91AC34AAC937B2D339B5D63AB8DA3CBBDD3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03CBCDE3AB7D838B2D336ADCD34A8C72D93AF497683DCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEEEF2E6CADDA3B1D667B6E35BC6F367D2FA74E0FF82ECFF8FF4FF97F8FF9BF9FF9BF8FF9B +F5FF98F3FF96F1FF94EEFF92ECFF90E9FF8DE7FF8BE6FF8AE5FF89E4FF88E3FF87E1FF85E0FF84 +DFFF84DFFF84DEFF83DEFF83DDFF82DDFF81DCFF81DDFF82DEFF82DEFF83DFFF84E0FF84E0FF85 +E1FF85E1FF86E2FF86E3FF87E3FF87E5FF89E7FF8BE9FF8DEBFF8FECFF90EEFF92EFFF93F1FF95 +F2FF96F3FF96F2FF95EBFF8FE1FE84D4FB77C8F56BBCE960AED955ABCF63C2D3A0FEFEFEFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83268A93978C33C7DCB3E7FCE3F82D24184D5 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84185D53F81D03D7DCA3A79C53875BF +3066A54D617AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFAF1F1F1DCDCDC9FB1B62D91AC34A9C937B1D239B4D53AB7D93CBADC3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3CBBDD3AB6D838B1D236ACCC34A7C72D93AE497682 +DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEC9DCA2A1CA4FBBE960D2FA76E4FF87EDFF90F2FF96F3FF97F0FF95 +EDFF91E9FF8EE7FF8CE5FF8AE2FF88E0FF86DEFF83DBFF81D8FF7ED6FE7CD4FD7AD3FD79D2FC78 +D0FB76CFFB75CEF974CCF873CCF872CBF872CBF771CAF771CAF670C9F670C9F56FC9F670CAF771 +CBF772CCF872CCF973CDF974CEFA74CEFA75CFFB75CFFB76D0FC76D2FD78D4FE7AD6FE7CD9FF7E +DBFF80DCFF82DEFF83DFFF85E1FF86E3FF88E6FF8BE9FF8EEBFF90EAFF8FE8FF8DE2FF87D9FD7D +C8F56CAFDC57A7CA61BECE9DFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83268A93978C3 +3C7DCB3E7FCE3F82D24184D54386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84185D5 +3F81D03D7DCA3A79C53875BF3066A54D617AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B62C90AB33A8C836B0D138B3D4 +39B6D83BB9DB3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBADC3AB5D737B0D1 +35ABCB33A6C62C92AD487682DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEECF0E5ADCB74B6E35CCBF76FDFFF83EDFF91ECFF90 +E9FF8EE6FF8BE3FF88E0FF85DCFF81D8FF7ED5FE7BD3FD79D1FC77CEFA75CCF872C9F570C6F36D +C3F06AC2EE69C0ED67BFEC66BEEA65BCE963BBE762BAE661B9E561B8E560B8E460B7E45FB7E35F +B7E35EB6E25EB7E35FB8E45FB8E560B9E561BAE661BBE762BBE863BCE864BDE964BDEA65BEEA65 +C0EC67C2EF69C4F16BC7F46EC9F670CBF872CDF973CEFB75D0FC77D2FD78D6FE7CDAFF80DCFF82 +DEFF84E0FF85E1FF87E3FF88E2FF87D2FA77BCEA62A9D45395B458FDFDFDFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA97A6B83268A93978C33C7DCB3E7FCE3F82D24184D54386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84185D53F81D03D7DCA3A79C53875BE3066A54D617AEAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B6 +2C8FAA33A7C736AFD038B2D339B5D73BB8DA3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3BB9DB39B4D537AFD035AACA33A5C42C91AC487582DCDCDCF1F1F1FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDA0B96DA4CD4FC5F16B +DFFF83E1FF86E2FF86DDFF82D9FF7ED6FE7CD3FD79CFFA75CAF671C6F26DC4EF6BC1ED68BFEA66 +BCE763B9E561B7E25EB4DF5CB1DC59AFDA57AED956ADD855ACD654ABD653AAD552A9D452A9D451 +A9D351A9D351A8D351A8D351A8D350A8D250A8D350A9D351A9D351A9D451AAD452AAD552AAD552 +ABD653ABD654ACD754ACD755AED956B0DB58B3DE5AB5E05DB7E35FBAE561BCE763BEE965BFEB67 +C2ED69C6F16DCAF571CEF974D0FB77D2FC78D3FD7AD6FE7CDCFF81DCFF82D4FD7BBEE96695BB46 +849561FDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83268A93978C33C7DCB3E7FCE3F82D24184D54386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84185D53F81D03D7DCA3A79C53875BE3066A5 +4D617AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFAF1F1F1DCDCDC9FB1B62C8FAA33A7C636AECF38B1D339B4D63BB8DA3CBADD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3BB8DA39B4D537AFCF35AACA33A5C42C90AC487582DCDCDC +F1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +FAFAFA7C9C3B9DC44CB8E361D2FD78D6FF7CD4FD7ACDF974C9F470C6F16EC2ED6ABEE966B9E461 +B5DF5DB2DC5BAFDA58ADD756ABD554AAD353A8D251A7D151A7D150A7D150A7D150A7D150A7D150 +A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150 +A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150A8D251A9D252 +AAD453ABD554ADD756AFD958B1DC5AB5E05EBAE562BEE966C2EC6AC3EE6CC5F06DC9F571D0FB77 +D5FE7CD0FA76ABD4578CB0436F8245FAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83268A93978C33C7DCB +3E7FCE3F82D24184D54386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84185D53F81D0 +3D7DCA3A79C53875BE3066A54D617AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B62C8EA933A6C535ADCE37B0D239B3D5 +3AB6D83CB9DB3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3BB7D939B2D437AECE34A9C9 +32A4C32C90AB487581DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFCFCFCE4E7DE7A993A92B8449CC449A5CE50C1EB68C5F06CBEE966B9E361 +B5DF5EB1DB5AADD756AAD353A8D151A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D150A8D251AAD453AED757B2DC5B +B5DF5EB7E160BDE765C3EE6BB5DF5FA1C94E95BC4585A83E506427F7F7F7FCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +97A6B83268A93978C33C7DCB3E7FCE3F82D24184D54386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84185D53F81D03D7DCA3A79C53875BE3066A54D617AEAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B62B8DA8 +32A5C435ACCD37AFD038B2D43AB5D73BB7DA3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3AB6D838B1D336ACCD34A8C832A3C22B8EAA487481DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBE1E4DB7A983A91B7449BC3499FC84B +A2CC4DABD555AFD958AAD353A7D151A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50 +A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50 +A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50 +A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50 +A6CF50A6CF50A6CF50A7D050A7D151AAD354AFD858A9D2549EC64B9AC14894BB4585A73E506327 +F2F2F2FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA97A6B83268A93978C33C7DCB3E7FCE3F82D24184D54386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84185D53F81D03D7DCA3A79C53875BE3066A54D617A +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +F1F1F1DCDCDC9FB0B52B8CA732A4C335ACCC37AFCF38B2D33AB5D63BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93AB5D738B1D136ACCC34A7C732A2C12B8EA9487480DCDCDCF1F1F1 +FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADFE1D9 +79973991B5439BC2489EC64AA2CA4DA4CC4EA5CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4F +A6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4F +A6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4F +A6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4F +A6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA4CD4EA1C94C9DC44A +99C04794B94484A53D506327F0F0F0FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83268A93978C33C7DCB3E7FCE +3F82D24184D54386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84185D53F81D03D7DCA +3A79C53875BE3066A54D617AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB0B52B8CA632A3C235ABCB37AECE38B1D13AB4D5 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83AB5D638B0D036ABCB34A6C632A1C0 +2B8DA8487480DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFAFAFADFE1D979973990B5439AC1489EC64AA1CA4DA3CC4EA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA4CC4EA0C84C9CC44A98BF4793B94484A53D4F6327EFEFEFFAFAFAFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B8 +3268A93978C33C7DCB3E7FCE3F82D24184D54386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84185D53F81CF3D7DCA3A79C53875BE3066A54D617AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB0B52A8BA531A2C1 +34A9C936ACCD37AFD039B3D43AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D739B3D4 +37AFCF35AACA33A5C431A0BF2B8CA747737FDCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADFE1D97896388FB44299C0479DC549A0C94C +A2CB4DA3CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA3CB4E9FC74B9BC34997BE4692B84483A43C4F6226EFEFEF +FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA97A6B83268A93978C33C7DCB3E7FCE3F82D24184D54386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84185D53F81CF3D7DCA3A79C53875BE3066A54D617AEAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 +DCDCDC9EB0B52A8AA431A1C034A9C836ACCC37AFCF39B2D23AB4D53AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D639B2D337AECE35A9C833A4C3319FBD2B8CA647737FDCDCDCF1F1F1FAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADFE1D9779538 +8EB24298BF469CC3499FC74BA1C94CA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4E +A2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4E +A2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4E +A2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4E +A2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA1CA4D9EC64B9AC14896BD46 +91B64381A33C4E6126EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83268A93978C33C7DCB3E7FCE3F82D2 +4184D54386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84185D53F81CF3D7DCA3A79C5 +3875BE3066A54D617AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EB0B52A8AA331A1BF34A8C736ABCA37AECE39B1D13AB4D4 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D55FDBF8FFFFF182B4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +82E7FFFFFFF182B4D53AB4D55FDBF8FFFFF182B4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4E3C2FFFFE1DBDB3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D539B2D237ADCD35A9C733A4C2319FBC2B8BA5 +47737EDCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFADEE1D97695378DB24197BE469BC3489EC64AA0C84CA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A0C94C9DC54A9AC14896BC4590B64381A23B4D6125EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83268A9 +3978C33C7DCB3E7FCE3F82D24184D54386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4185D53F81CF3D7DCA3A79C43875BE3066A54D617AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EB0B42A89A230A0BD33A7C6 +35AAC937ADCD38B0D039B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339CDF1FFFFFFFFFFF7A3C0D339B2D339B2D339B2D339B2DB +A3F2FFFFE6E139B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D35FDAF7FFFFF1 +81B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339CDF1FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFE1DADB39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D381E6FFFFFFF181B2D339B2D35FDAF7FFFFF181B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2E1C2FFFFE1DADB39B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B1D137ACCB +34A7C632A3C1309EBB2A8AA447727EDCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADEE1D97594378CB14196BD469AC2489DC54A9FC74C +A0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D +A0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D +A0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D +A0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D +A0C94DA0C94DA0C94DA0C94D9FC84C9CC44A99C04895BB458FB54280A23B4D6025EFEFEFFAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA97A6B83268A93978C33C7DCA3E7FCE3F82D14184D54386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D84386D8 +4386D84386D84386D84386D84184D53F80CF3D7DCA3A79C43875BE3065A54D617AEAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFEFEFEFEFEFEFDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC +9EB0B42988A1309EBC33A6C535A9C836ACCB38AFCF39B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139CCF0FFFFFFFFFFFFFFE6E1 +39B1D139B1D139B1D139B1D9A3F2FFFFE6E139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139BFE8E1FFFFC2CCD139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D15FD9F7FFFFF081B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139CCF0FFFFF7A3BFD139B1D139B1D139CCF0FFFFFFE1D9D939B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D15FD9F7 +FFFFF081B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1E1C2FFFFE1D9D939B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D138B0D036ABCA34A6C532A2C0309DBA2A89A347727DDCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADEE1D97492368BAF40 +95BC4599C0479CC4499DC64B9FC74C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C +9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C +9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C +9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C +9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9EC74B9BC34997BF4793BA448EB342 +7FA03A4C6025EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A83977C23C7CCA3E7ECD3F81D14183D4 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74184D43F80CE3D7CC93A78C33874BD +3065A44D617AEAEAEAF8F8F8FDFDFDFEFEFEFEFEFEFCFCFCDBDBDB4646460000005E5E5EFCFCFC +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFAF1F1F1DCDCDC9EB0B42987A0309EBB33A6C435A9C736ACCA38AECE39B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39CCF0FFFFF7C2E6F7FFFFFFC2CCD039B1D039B1D039B1D8A3F2FFFFE6E039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039BFE8E1FFFFC2CCD039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D05FD9F7FFFFF081B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039CCF0FFFFF7A3BFD039B1D039B1D039B1D8A3F2FFFFF2E8 +5FB1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D05FD9F7FFFFF081B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1E0 +C2FFFFE1D9D839B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D038AFCE36ABC934A6C432A1BF309DB92A89A247727D +DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF787878404040 +7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFADEE1D97491368AAE4094BA4598BF479BC3499DC54B9EC64C9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9DC54B +9AC14997BD4793B9448DB2427E9F3A4C5F25EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A83977C2 +3C7CCA3E7ECD3F81D14183D44385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74184D4 +3F80CE3D7CC93A78C33874BD3065A44D617AEAEAEAF8F8F8FCFCFCFCFCFCEAEAEA737373070707 +000000000000070707F6F6F6FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB429869F2F9DBA32A4C233A7C6 +35AAC937ADCC38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38CBEFFFFFF7A2BDE0C2FFFFFFF2E75EB0CF38B0CF38B0D7A2F2FF +FFE5E038B0CF38B0CF38B0CF38BDE7E1FFFFFFFFFFFFFFFFFFF2E75EB0CF38B0CF80E5FFFFFFFF +FFFFFFFFFFFFFFFFFFFFF2E780D8F7FFFFF7A2BDCF38B0CF38B0CF38B0E0C2FFFFFFE5E038B0CF +38B0CF38B0CF5ED8F7FFFFEF80B0CF38B0CF38B0CF38BDE7E1FFFFFFFFFFFFFFFFFFFFFFC2CBCF +38B0CF38B0CF38B0CF5ED8F7FFF2E75EBDE7E1FFFFFFFFFFC2CBCF38B0CF5ED8F7FFFFEF80B0CF +38B0CF38B0E0C2FFFFFFFFEF80B0CF38B0CF38B0CF38B0CF38B0CF38CBEFFFFFF7A2BDCF38B0CF +38B0CF38B0D7A2F2FFFFE5E038B0CF38B0CF80E5FFFFFFEF80B0CF38B0CF38B0CF38B0E0C2FFFF +E1D8D738B0CF38B0CF5ED8F7FFFFEF80B0CF38B0CF5ED8F7FFFFEF80B0CF38B0CF38B0CF38CBEF +FFFFFFFFFFFFFFFFF7A2BDE0C2FFFFE1D8D738B0CF38B0CF38B0CF38BDE7E1FFFFFFFFFFFFFFFF +FFF2E75EB0CF38B0CF38B0CF5ED8F7FFF2E75EBDE7E1FFFFFFFFFFC2CBCF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF37AECD35A9C833A5C2 +31A0BD2F9BB82988A146717DDCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +8F8F8F181818000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFAFAFADEE1D973903689AD3F93B94497BE469AC1499CC34A9DC54B +9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B +9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B +9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B +9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B +9DC54B9DC54B9DC54B9CC44A99C04896BC4692B7438CB1417E9E3A4B5E24EFEFEFFAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA97A6B83267A83977C23C7CCA3E7ECD3F81D14183D44385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74184D43F80CE3D7CC93A78C33874BD3065A44D617AE9E9E9F6F6F6F9F9F9 +929292161616000000000000000000000000858585EFEFEFF9F9F9FEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB4 +28869E2F9CB931A3C133A6C435A9C836ACCB38AECE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38CAEFFFFFF7A2BDCE38CAEFFFFFFF +C2CACE38AFCE38AFD6A2F2FFFFE5DE38AFCE38AFCE38CAEFFFFFFFE1D8D638AFCE38AFD6A2F2FF +FFFFEF80AFCE38AFCE38BDE7E1FFFFC2CACE38AFCE38AFCE38BDE7E1FFFFE1D8D638AFCE38AFCE +38CAEFFFF2F7E1F2E75EAFCE38AFCE38AFCE80E5FFFFF2E75EAFCE38AFCE38CAEFFFFFFFE1D8D6 +38AFCE38AFCE38CAEFFFFFFFE1D8D638AFCE38AFCE5ED8F7FFFFFFFFFFEF80AFCE38AFCE38AFCE +38AFCE5ED8F7FFFFEF80AFCE38AFD6A2F2FFFFFFEF80AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38CAEFFFFFF7A2BDCE38AFCE38AFCE5ED8F7FFFFFFC2CACE38AFCE38AFCE80E5FFFFFFEF80AFCE +38AFCE38AFCE38AFDEC2FFFFE1D8D638AFCE38AFCE5ED8F7FFFFEF80AFCE38AFCE5ED8F7FFFFEF +80AFCE38AFCE38CAEFFFFFFFC2CACE38AFCE38BDE7E1FFFFFFFFFFE1D8D638AFCE38AFCE38CAEF +FFFFFFE1D8D638AFCE38AFD6A2F2FFFFFFEF80AFCE38AFCE5ED8F7FFFFFFFFFFEF80AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE37ADCC35A8C733A4C1319FBC2E9AB72887A046717CDCDCDCF1F1F1FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFB7B7B7282828000000000000000000000000606060FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADEE1D9728F3588AC3F92B843 +96BC4698C0489AC2499CC34A9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9BC34A98BF4894BB4690B6438BAF407C9D39 +4A5E24EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A83977C23C7CCA3E7ECD3F81D14183D44385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74184D43F80CE3D7CC93A78C33874BD3065A3 +4D617AE6E6E6BCBCBC2D2D2D000000000000000000000000313131A9A9A9D8D8D8EAEAEAF7F7F7 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFAF1F1F1DCDCDC9EAFB428859D2E9BB831A2C032A5C334A8C736ABCA37ADCC37AECD37AECD +37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD +37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD36C9EE +FFFFF7A2BCCD36AED5A2F2FFFFF2E75DAECD36AED5A2F2FFFFE5DE37AECD36AED5A2F2FFFFE5DE +37AECD37AECD37AECD36BCE7E1FFFFC1C9CD37AECD36BCE7E1FFFFC1C9CD37AECD37AECD36AED5 +A2F2FFFFE5DE37AECD37AECD5DD7F7E1D7E7C1FFF7A2BCCD37AECD36AEDEC1FFFFE1D7D537AECD +36AED5A2F2FFFFE5DE37AECD37AECD37AECD37AECD80E5FFFFF2E75DAECD37AECD5DD7F7FFFFFF +C1C9CD37AECD37AECD37AECD37AECD5DD7F7FFFFEE80AED5A2F2FFFFFFEE80AECD37AECD37AECD +37AECD37AECD37AECD37AECD36C9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E75DAECD37AECD +37AECD80E5FFFFFFEE80AECD37AECD37AECD36AEDEC1FFFFE1D7D537AECD37AECD5DD7F7FFFFEE +80AECD37AECD5DD7F7FFFFEE80AECD36AED5A2F2FFFFE5DE37AECD37AECD37AECD36BCE7E1FFFF +E1D7D537AECD36AED5A2F2FFFFE5DE37AECD37AECD37AECD36BCE7E1FFFFC1C9CD37AECD5DD7F7 +FFFFFFC1C9CD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD +37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD37AECD +37AECD37AECD37AECD37AECD37AECD36ACCB34A7C532A2C0309EBB2E99B628869F46717CDCDCDC +F1F1F1FAFAFAFEFEFEFFFFFFD7D7D7484848000000000000000000000000181818A7A7A7FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +DEE1D9718E3587AB3E91B64395BB4598BE479AC0499BC24A9BC24A9BC24A9BC24A9BC24A9BC24A +9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A +9BC24ABDEBFFFFFFC7BDC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A +9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A +9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9AC14997BD47 +94B94590B5428AAE407C9C394A5D24EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A83977C23C7CCA +3E7ECD3F81D14183D44385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74184D43F80CE +3D7CC93A78C33874BC2F64A244566C4D4D4D0000000000000000000000001818187F7F7FBCBCBC +C7C7C7D9D9D9EAEAEAF6F6F6FBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFDFDFDFCFCFCF8F8F8F0F0F0DCDCDC9EAFB328849C2E9AB731A1BF32A4C234A7C5 +36AAC937ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB36C8EEFFFFF7A2BACB37ACCB36C8EEFFFFFFE1D6D436ACD4A2F2FFFFE4DC +37ACCB36ACDCC1FFFFE1D6D437ACCB37ACCB37ACCB36ACDCC1FFFFE1D6D437ACCB36BAE6E1FFFF +C1C8CB37ACCB37ACCB37ACCB5DD6F7FFFFEE80ACCB37ACCB80E4F7A2BACB80E4FFC1C8CB37ACCB +36C8EEFFFFF7A2BACB37ACCB36BAE6E1FFFFE1D6D437ACCB37ACCB37ACCB37ACCB5DD6F7FFFFF7 +A2BACB37ACCB5DD6F7FFFFEE80ACCB37ACCB37ACCB37ACCB37ACCB5DD6F7FFFFFFFFFFFFFFFFEE +80ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB36C8EEFFFFF7A2BACB37ACCB37ACCB +36ACDCC1FFFFFFFFEE80ACCB37ACCB80E4FFFFFFEE80ACCB37ACCB37ACCB36ACDCC1FFFFE1D6D4 +37ACCB37ACCB5DD6F7FFFFEE80ACCB37ACCB5DD6F7FFFFEE80ACCB36ACDCC1FFFFE1D6D437ACCB +37ACCB37ACCB36ACDCC1FFFFE1D6D437ACCB36ACDCC1FFFFE1D6D437ACCB37ACCB37ACCB36ACDC +C1FFFFE1D6D437ACCB5DD6F7FFFFEE80ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB36ABC934A6C432A1BF309DBA +2E98B528859E46707BDCDCDCF1F1F1FAFAFAE6E6E6686868000000000000000000000000080808 +7F7F7FF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFADEE1D9708D3586A93E90B54394BA4597BD4799BF489AC14A9AC14A +9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A +9AC14A9AC14A9AC14A9AC14A9AC14ABDEBFFFFFFC7BDC14A9AC14A9AC14A9AC14A9AC14A9AC14A +9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A +9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A +9AC14A9AC14A99C04996BC4793B8458FB34289AD407B9B394A5C24EFEFEFFAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +97A6B83267A83977C23C7CCA3E7ECD3F81D14183D44385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74184D43F80CE3D7CC83A77C1356EB317304F020304000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000CFCFCFDADADA9EAFB327839B +2D99B530A0BE32A3C133A6C435A8C736ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36C8EDFFFFF7A2B9CA36ABCA36ABD3A2F2FF +FFFFED80ABD3A2F2FFFFE4DC36ABCA36B9E5E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +E1D6D336ABCA36B9E5E1FFFFC1C8CA36ABCA36ABCA36ABCA36B9E5E1FFF7A2B9CA36ABDCC1FFED +80ABCA5DD6F7FFE4DC36ABCA5DD6F7FFF2E55DABCA36ABCA36B9E5E1FFFFC1C8CA36ABCA36ABCA +36ABCA36ABCA36C8EDFFFFF7A2B9CA36ABCA5DD6F7FFFFED80ABCA36ABCA36ABCA36ABCA36ABCA +5DD6F7FFFFEDC1E4FFFFFFF7A2B9CA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36C8ED +FFFFF7A2B9CA36ABCA36ABCA36ABCA36B9E5E1FFFFE1D6D336ABCA80E4FFFFFFED80ABCA36ABCA +36ABCA36ABDCC1FFFFE1D6D336ABCA36ABCA5DD6F7FFFFED80ABCA36ABCA5DD6F7FFFFED80ABCA +36B9E5E1FFFFE1D6D336ABCA36ABCA36ABCA36ABDCC1FFFFE1D6D336ABCA36B9E5E1FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D6D336ABCA5DD6F7FFFFED80ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +35A9C833A5C331A0BE2F9CB92D97B327849D466F7BDCDCDCE9E9E9848484101010000000000000 +000000000000000000282828404040404040404040404040404040404040404040404040787878 +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF +BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADEE0D96F8C3485A83D8EB34292B844 +95BB4697BD4898BF4999C04999C04999C04999C04999C04999C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04998BE4894BB4691B7448DB24188AB3F7A9938495B23 +EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A83977C23C7CCA3E7ECD3F81D14183D44385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74184D43F80CE3D7BC73267A7050A11000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +CACACAD8D8D89DAEB227829A2D98B4309FBC31A2C033A4C335A7C636AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936C8EDFFFFF6 +A2B9C936AAC936AAC936B9E5E1FFFFE1D5DBA2F2FFFFE3DB36AAC936AADBC1FFFFE1D5D336AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936B9E5E1FFFFC1C8C936AAC936AAC936AAC936AADB +C1FFFFE1D5D336B9E5E1F2E55DAAC936B9E5E1F2E55DAAD3A2F2FFE1D5D336AAC936AAC936B9E5 +E1FFFFE1D5D336AAC936AAC936AAC936AAC95DD5F6FFFFF6A2B9C936AAC95DD5F6FFFFED80AAC9 +36AAC936AAC936AAC936AAC95DD5F6FFFFED80AAD3A2F2FFFFFFED80AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936C8EDFFFFF6A2B9C936AAC936AAC936AAC936AADBC1FFFFE1D5D336AAC9 +80E3FFFFFFED80AAC936AAC936AAC936AADBC1FFFFE1D5D336AAC936AAC95DD5F6FFFFED80AAC9 +36AAC95DD5F6FFFFED80AAC936AADBC1FFFFE1D5D336AAC936AAC936AAC936AADBC1FFFFE1D5D3 +36AAC936AADBC1FFFFE1D5D336AAC936AAC936AAC936AAC936AAC936AAC936AAC95DD5F6FFFFED +80AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC935A8C733A3C2319FBD2F9BB82D96B227839C466F7AC0C0C01E1E1E +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000002828284040403F3F3F383836 +1C230D6C88328EB34292B84495BB4696BD4898BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4997BE4894BA4691B644 +8DB14187AB3F799938495B23EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A83977C23C7CCA3E7ECD +3F81D14183D44385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74184D43F7FCD3C7AC6 +3773BB29558B0A1523000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000C1C1C1D4D4D49DAEB22781982D97B3309EBB31A1BE33A4C235A7C5 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836C8EDFFFFF6A2B9C836AAC836AAC836AAC880E3FFFFFFF6E1F2FFFFE3DB36AAC8 +36AAD2A2F2FFFFE3DB36AAC836AAC836AAC836AAC836AAC836AAC836AAC836B9E4E1FFFFC1C8C8 +36AAC836AAC836AAC836AAC880E3FFFFF2E480D5F6E1D5D236AAC836AADBC1FFF6A2B9DBC1FFF6 +A2B9C836AAC836AAC836AAD2A2F2FFFFE3DB36AAC836AAC836AAC836AAC880E3FFFFF2E45DAAC8 +36AAC85DD5F6FFFFED80AAC836AAC836AAC836AAC836AAC85DD5F6FFFFED80AAC836B9E4E1FFFF +FFE3DB36AAC836AAC836AAC836AAC836AAC836AAC836C8EDFFFFF6A2B9C836AAC836AAC836AAC8 +36B9E4E1FFFFE1D5D236AAC85DD5F6FFFFED80AAC836AAC836AAC836B9E4E1FFFFE1D5D236AAC8 +36AAC85DD5F6FFFFED80AAC836AAC85DD5F6FFFFED80AAC836AAD2A2F2FFFFE3DB36AAC836AAC8 +36AAC836C8EDFFFFFFE1D5D236AAC836AAD2A2F2FFFFE3DB36AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC85DD5F6FFFFED80AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC835A8C633A3C0319FBB2F9AB62D96B1 +27839B466F7ADCDCDCC4C4C4373737000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000627C2D8DB24191B74393BA4595BC4697BD4897BE4897BE48 +97BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE48 +97BE4897BE4897BE4897BE48A9DFE3FFFFC7BBBE4897BE48A9DFE3FFF4A9A9BE8ADDFFFFFFFFFF +FFFFFFDDD44897BE4897BE4897BE48A9DFE3FFF4A9A9BE8ADDFFFFFFFFFFFFFFFFEEDF6A97BE48 +97BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE48 +97BE4896BC4793B9458FB5438BB04086AA3E789837485B23EFEFEFFAFAFAFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B8 +3267A83977C23C7CCA3E7ECD3F81D14183D44385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74184D43F7FCD3C79C43771B83166A6275184252E3A0F0F0F000000000000000000000000 +444444A3A3A3B4B4B4B8B8B8BABABABBBBBBBBBBBBBBBBBBBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBEBEBEC3C3C3CECECED8D8D8D3D3D39CACB1277F972D96B2 +2F9DBA31A0BD32A3C034A6C435A8C636A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C7 +36A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C7 +36A9C736A9C736A9C736A9C736A9C736A9C736C7EDFFFFF6A2B9C736A9C736A9C736A9C736B9E3 +E1FFFFFFFFFFFFE3DA36A9C736A9C736C7EDFFFFFFC1C7C736A9C736A9C736A9DAC1FFF6A2B9C7 +36A9C736A9DAC1FFFFFFE3DA36A9C736A9C736A9C736A9C736C7EDFFFFEDC1E3FFC1C7C736A9C7 +36A9D0A2F1FFE1F1F6FFFFED80A9C736A9C736A9C736A9C75DD5F6FFFFFFC1C7C736A9C736A9C7 +5DD5F6FFFFFFC1C7C736A9C736A9C75DD5F6FFFFED80A9C736A9C736A9C736A9C736A9C75DD5F6 +FFFFED80A9C736A9C736C7EDFFFFFFE1D5D036A9C736A9C736A9C736A9C736A9C736C7EDFFFFF6 +A2B9C736A9C736A9C736A9D0A2F1FFFFFFED80A9C736A9C736B9E3E1FFFFE1D5D036A9C736B9E3 +E1FFFFFFFFFFE1D5D036A9C736A9C75DD5F6FFFFED80A9C736A9C75DD5F6FFFFED80A9C736A9C7 +5DD5F6FFFFFFC1C7C736A9C736B9E3E1FFFFFFFFFFE1D5D036A9C736A9C736C7EDFFFFFFC1C7C7 +36A9C736A9C736A9DAC1FFF6A2B9C736A9C75DD5F6FFFFED80A9C736A9C736A9C736A9C736A9C7 +36A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C7 +36A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C735A6C5 +33A2BF319EBA2F99B52C94B027829A466F7ADCDCDCF1F1F1FAFAFA9E9E9E181818000000000000 +000000000000404040B7B7B7BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF8787877F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F606060404040404040404040404040404040404040404040404040 +4040400E17230E1723404040404040404040404040404040404040404040383838000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000617C2D8BB0408FB54392B845 +94BA4695BC4796BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD48 +96BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD48A8DFE3FFFFC7BABD4896BD48A8DFE3 +FFFFFFFFFFC7BABD4896BD48A8DFE3FFFFE3CCC84896BD4896BD48A8DFE3FFFFFFFFFFE3CCC848 +96BD4896D4C7FFFFFFEEDF6A96BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD48 +96BD4896BD4896BD4896BD4896BD4895BB4791B7458EB4438AAF4085A83D779636475A23EFEFEF +FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA97A6B83267A83977C23C7CCA3E7ECD3F81D14183D44385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74184D43F7FCD3C7AC53771B83267A82753863A495B9E9E9E +5252520505050000000000000000000B0B0B676767BCBCBCBFBFBFC0C0C0C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C3C3C3C8C8C8D2D2D2DADADA +D3D3D39CACB1267F962C95B12F9CB9309FBC32A2BF34A5C235A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535C5ECFFFFF6A1B6C5 +35A7C535A7C535A7C535A7C55CD4F6FFFFFFFFE2D935A7C535A7C535A7C535B6E2E1FFFFFFFFFF +FFFFFFFFFFF6A1B6C535A7C535A7C535A7C535C5ECFFFFFFFFFFFFFFF1E25CA7C535A7C535A7D9 +C1FFFFFFFFF6A1B6C535A7C535A7C55CD4F6FFFFFFFFE2D935A7C535A7C535A7C535A7C535A7C5 +35C5ECFFFFFFFFFFFFFFFFFFFFFFF6A1B6C535A7C535A7C535A7C55CD4F6FFFFEC80A7C535A7C5 +35A7C535A7C535A7C55CD4F6FFFFEC80A7C535A7C535A7C580E2FFFFFFF6A1B6C535A7C535A7C5 +35A7C535A7C535C5ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E25CA7C535A7C535A7C535A7C5 +5CD4F6FFFFFFFFFFFFFFFFEC80A7CFA1F1FFE1D4CF35A7C535A7C55CD4F6FFFFEC80A7C535A7C5 +5CD4F6FFFFEC80A7C535A7C535A7C55CD4F6FFFFFFFFFFFFFFFFEC80A7CFA1F1FFE1D4CF35A7C5 +35A7C535A7C535B6E2E1FFFFFFFFFFFFFFFFFFFFF6A1B6C535A7C535A7C55CD4F6FFFFEC80A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C534A5C332A1BE309CB92E98B42C94AF278199456E79DCDCDCF1F1F1FAFAFA +FEFEFEEFEFEF707070000000000000000000000000202020B7B7B7FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7BEBEBEBBBBBBA6A8A2516625 +7A9A378BAF408FB44292B74493B94595BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB47 +95BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB47A8DEE3 +FFFFC6B9BB4795BB47A8DEE3FFFFE3CCC74795BB4795BB4795BB8ADDFFFFEEDE6995BB4795BB47 +A8DEE3FFFFFFDDD24795BB4795BB4795BB47B9E9FFFFF4A8A8BB4795BB4795BB4795BB4795BB47 +95BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4794BA4691B6448EB2428AAD3F +85A73D769636475922EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A83977C23C7CCA3E7ECD3F81D1 +4183D44385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74184D43F7FCD3C7BC73874BD +346CB02A59903F5064B2B2B2B1B1B1969696343434000000000000000000000000202020A9A9A9 +D4D4D4D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D8D8D8DBDBDBE0E0E0E2E2E2D6D6D69DADB1267F962C95B02F9CB8309EBB32A1BE34A4C135A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C434A5C232A0BD309CB82E98B32C93AE278198 +456E79DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFCFCFCF383838000000000000000000000000 +484848E7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFADEE0D86B873281A23B8AAE408EB34290B54492B74593B94694B94794B94794B947 +94B94794B94794B94794B94794B94794B94794B94794B94794B94794B94794B94794B94794B947 +94B94794B94794B947A7DCE3FFFFC6B9B94794B947A7DCE3FFFFC6B9B94794B94794B94794B98A +DCFFFFFFE88A94B94794B947A7DCE3FFFFC6B9B94794B94794B94794B947A7DCE3FFFFC6B9B947 +94B94794B94794B94794B94794B94794B94794B94794B94794B94794B94794B94794B94794B947 +93B84690B5448CB14288AC3F83A63D759436465822EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A8 +3977C23C7CCA3E7ECD3F81D14183D44385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4184D43F80CE3D7CC83977C13670B72D5F9A45576EC7C7C7C5C5C5BEBEBEB4B4B48383831B1B1B +000000000000000000151515E5E5E5EAEAEAECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEAEAEAD9D9D99DADB1267F952C94AF2F9BB7 +309EBA32A0BD34A3C035A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C334A4C1329FBC +309BB72E97B22C92AD278097456E78DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +9F9F9F181818000000000000000000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADDE0D86A863180A13A88AC3F8CB1418FB44391B644 +92B74693B84693B84693B84693B84693B84693B84693B84693B84693B84693B84693B84693B846 +93B84693B84693B84693B84693B84693B84693B846A7DCE2FFFFC6B9B84693B846A7DCE2FFFFC6 +B9B84693B84693B84693B889DCFFFFFFE78993B84693B846A7DCE2FFFFC6B9B84693B84693B846 +93B846A7DCE2FFFFE2CBC44693B84693B84693B84693B84693B84693B84693B84693B84693B846 +93B84693B84693B84693B84692B7458EB3438BB04187AB3F82A53C749335465822EFEFEFFAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA97A6B83267A83977C23C7CCA3E7ECD3F81D14183D44385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D74385D7 +4385D74385D74385D74385D74184D43F80CE3D7CC93A78C23873BC2F63A14A5D75D9D9D9DCDCDC +D3D3D3C8C8C8BDBDBDB6B6B66666660C0C0C000000292929EAEAEAF4F4F4F8F8F8F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F6F6F6EFEFEFDBDBDB +9EAEB2257D942B92AD2E99B52F9CB8319FBC33A2BF34A4C134A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C233A3BF319EBA2F9AB62D96B12B91AB267F96456D78DCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF707070000000000000383838FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADDE0D86A86317FA03A +88AC3F8CB1418EB34390B54492B74692B74692B74692B74692B74692B74692B74692B74692B746 +92B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B746A6DBE2FFFFC6 +B8B74692B746A6DBE2FFFFC6B8B74692B74692B74692B789DCFFFFFFE78992B74692B746A6DBE2 +FFFFC6B8B74692B74692B74692B746A6DBE2FFFFC6B8B74692B74692B74692B74692B74692B746 +92B74692B74692B74692B74692B74692B74692B74692B74691B6458EB3438BAF4187AA3F82A43C +749335465722EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A83977C23C7CC93E7ECD3F81D04183D3 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64184D33F80CE3D7CC83A78C33874BC +3064A34C6079E4E4E4EBEBEBE8E8E8DFDFDFD2D2D2C6C6C6BEBEBEB1B1B1949494CACACAEAEAEA +F7F7F7FCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FDFDFDF9F9F9F1F1F1DCDCDC9EAEB2257C942B91AD2E98B52F9BB8319EBB33A1BE34A3C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C133A1BF319DBA2F99B52D94B02B90AB267E96456D77 +DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7878787 +E7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFADDE0D86985317E9F3987AB3E8BB0408DB2428FB44390B64591B64591B64591B64591B645 +91B64591B64591B64591B64591B64591B64591B64591B64591B64591B64591B64591B64591B645 +91B64591B645A5DBE2FFFFC6B8B64591B645A5DBE2FFFFC6B8B64591B64591B64591B688DBFFFF +FFE78891B64591B645A5DBE2FFFFE2CAC24591B64591B64591B668CAF3FFFFF3A8A5B64591B645 +91B64591B64591B64591B64591B64591B64591B64591B64591B64591B64591B64591B64590B544 +8DB14289AE4085A93E80A33B739134455721EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A73977C1 +3C7CC93E7ECC3F81CF4183D34385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64184D3 +3F80CD3D7CC83A78C23874BC3064A44D617AE8E8E8F4F4F4F5F5F5F0F0F0E7E7E7DCDCDCD1D1D1 +CBCBCBCECECEDBDBDBECECECF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EADB2257C932B90AC2E97B42F9AB7 +319DBA339FBD34A2C034A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C1 +34A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C1 +34A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C1 +34A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C1 +34A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C1 +34A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C1 +34A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C1 +34A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C1 +34A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C1 +34A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C1 +34A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C1 +34A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C1 +34A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C1 +34A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C134A2C133A0BE319CB92F98B4 +2D93AF2B8FAA267D95456C77DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFAFAFADDE0D86883307D9E3985A93D89AE408CB1418DB3438FB444 +90B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B545 +90B545A3DBE2FFFFFFDBCF4590B54590B545A3DBE2FFFFC6B6B54590B545A3DBE2FFFFC6B6B545 +90B54590B54590B588DBFFFFFFE78890B54590B545A3DBE2FFFFFFFFFFE2C9C14590B54590CFC6 +FFFFFFDBCF4590B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B545 +90B54590B54590B5458EB4448BB04288AD4084A83D7FA23A719034445621EFEFEFFAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA97A6B83267A73977C13C7CC93E7ECC3F81CF4183D34385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64184D33F80CD3D7CC83A78C23874BC3064A44D617AEAEAEAF7F7F7FBFBFB +FAFAFAF5F5F5EFEFEFE6E6E6E0E0E0E0E0E0E8E8E8F2F2F2FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB2 +257B922B8FAB2D96B32F99B6309CB9329EBC33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF329FBD309BB82E96B32C92AE2A8EA9257C94456C77DCDCDCF1F1F1FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADDE0D86783307C9D3885A83D +89AD3F8BAF418DB1428FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB344 +8FB3448FB3448FB3448FB3448FB344A2DAE2FFFFFFDBCD448FB3448FB344A2DAE2FFFFC5B6B344 +8FB344A2DAE2FFFFC5B6B3448FB3448FB3448FB388DBFFFFFFE7888FB3448FB344A2DAE2FFFFC5 +B6C1A8EDFFFFFFFFFFFFFFFFDBCD448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB344 +8FB3448FB3448FB3448FB3448FB3448FB3448FB3448EB2438BAF4188AB3F84A63D7FA03A718F33 +445521EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A73977C13C7CC93E7ECC3F81CF4183D34385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64184D33F80CD3D7CC83A78C23874BC3064A4 +4D617AEAEAEAF8F8F8FDFDFDFEFEFEFCFCFCF9F9F9F5F5F5F2F2F2F1F1F1F5F5F5F9F9F9FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFAF1F1F1DCDCDC9DADB2257A912A8EAA2D95B22E97B5309AB8329DBB339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE329EBC3099B72E95B22C91AD2A8CA8257B93456B76DCDCDC +F1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +DDDFD86781307B9C3884A73D88AB3F8AAE418CB0428EB1438EB2448EB2448EB2448EB2448EB244 +8EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB244 +8EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB244 +8EB2448EB244A2DAE2FFFFC5B5B2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB244 +8EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448DB1438AAD41 +87AA3F83A53C7E9F3A708E33435521EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A73977C13C7CC8 +3E7ECC4081CF4183D34385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D6 +4385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64385D64184D33F80CD +3D7CC83A78C23874BC3064A44D617AEAEAEAF8F8F8FDFDFDFFFFFFFEFEFEFEFEFEFCFCFCFBFBFB +FBFBFBFCFCFCFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB12579902A8EA82D94B02E97B4309AB7 +329DBA339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD329DBA3099B52E95B12C91AC +2A8CA7257B92456B76DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFADDDFD866802F7B9B3883A63C87AA3E89AD408BAE418DB0428EB143 +8EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB143 +8EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB143 +8EB1438EB1438EB1438EB1438EB1438EB143A2D9E2FFFFC5B5B1438EB1438EB1438EB1438EB143 +8EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB143 +8EB1438EB1438CB04289AC4086A83E82A43C7D9E39708D33435420EFEFEFFAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +97A6B83267A73A77C13D7CC83F7ECC4081CF4283D34485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64284D34080CD3E7CC83B78C23974BC3164A44D617AEAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB124798F +2A8DA72C93AF2E96B23099B5319CB9339EBB339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +329CB93098B42E94B02C90AB2A8BA6247A91456B76DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADDDFD8667F2F7A993883A43C87A93E +89AB408BAD418CAF428DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43A1D8E2FFFFC5B4AF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438CAE4289AB4086A73E82A23C7D9D396F8C32435320 +EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A73A77C13D7CC83F7ECC4081CF4283D34485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64284D34080CD3E7CC83B78C23974BC3164A44D617A +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +F1F1F1DCDCDC9DADB124788F298CA62C92AE2D95B12F98B4319AB7329CBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA319BB82F97B32D93AE2B8FAA298AA5247990446B75DCDCDCF1F1F1 +FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADDDFD8 +657E2E79983782A33B86A73D88AA3F89AC408BAD418CAE428CAE428CAE428CAE428CAE428CAE42 +8CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE42 +8CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE42 +8CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE42 +8CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428AAC4188A93F84A63D +80A13B7C9B386E8A32425320EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B83267A73A77C13D7CC83F7ECC +4081CF4283D34485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64284D34080CD3E7CC8 +3B78C23974BC3164A44D617AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB124778E298BA52C92AD2D94B02F97B3319AB6 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8319AB72F96B22D92AD2B8EA9298AA4 +24798F446A75DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFAFAFADDDFD8647D2E78973680A23A84A63D86A83E85A63F87A84089AB418AAC42 +8AAC418AAC418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD41 +8AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD41 +8AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD41 +8AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAC418AAC4289AB42 +88A94185A63E83A43D83A43D7FA03A7A9A376D8931425220EFEFEFFAFAFAFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B8 +3267A73A77C13D7CC83F7ECC4081CF4283D34485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64284D34080CD3E7CC83B78C23974BC3164A44D617AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB123768D298AA4 +2B91AC2D93AF2E96B23099B5319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB73099B5 +2E95B12C91AC2A8DA72989A323788E446A74DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADDDFD8637D2D7796367F9F3A80A03C7F9E3D +82A13F85A54187A74287A84288A94288AA4289AA4189AB4189AC4189AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AB4189AB41 +88AA4188A94187A84186A74185A54182A23E7E9E3C7C9B3A7B9A387998376C893141521FEFEFEF +FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA97A6B83267A73A77C13D7CC83F7ECC4081CF4283D24485D54485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D64485D6 +4485D64485D64485D64485D64485D64284D24080CD3E7CC73B78C13974BC3164A34D6179EAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 +DCDCDC9DACB023768B2889A32B90AB2C92AE2E95B12F98B4319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB63098B42E94AF2C90AB2A8CA62888A123778D446A74DCDCDCF1F1F1FAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFADDDFD85B722B +6A853178953B7B993E7D9B3F809E4083A14284A34385A44385A54386A64386A64286A74287A842 +87A84187A94187A94187A94188AA4188AA4088AA4088AA4088AB4088AB4088AB4088AB4088AB40 +88AB4088AB4088AB4088AB4088AB4088AB4088AB4088AB4088AB4088AB4088AB4088AB4088AB40 +88AB4088AB4088AB4088AB4088AB4088AB4088AB4088AA4088AA4088AA4087AA4087A94187A941 +87A84186A84186A74185A64185A54184A44284A34282A24181A0417E9D3F7B993C78953A759238 +6D89335E772B646E4DEFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B73267A63A77C03D7CC73F7ECB4081CE +4283D24485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54284D24080CC3E7CC73B78C1 +3974BC3164A34D6179EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DACB022758A2888A22A8FA92B91AC2D94AF2E97B23099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B52F97B32D93AE2B8FAA298BA52787A022768C +436973DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFAEFEFEFB3BC9F576C2A667F34748F3C7C98407E9B42809E43819F4382A04483A144 +83A24484A34384A34384A44284A44285A54285A54285A54285A64285A64185A64186A74186A741 +86A74186A74086A74086A84086A84086A84086A84086A84086A84086A84086A84086A94086A840 +86A84086A84086A84086A84086A84086A84086A84086A84086A74086A74186A74185A74185A641 +85A64185A54184A54184A44284A44283A34183A24182A14182A04281A042809E417F9C417D9A40 +7B983F78953D74903A6C86355A712B4A5C22A1A697EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B73267A6 +3A77C03D7CC73F7ECB4081CE4283D24485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4284D24080CC3E7CC73B78C13974BC3164A34D6179EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DACB022748A2888A12A8EA8 +2B91AB2D94AE3096B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13197B12D93AD +2B8FA9298BA427869F22768B436973DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF0F0F0E0E0E09BA87F5E732F5A6E2E687F37779040 +7D98447F9B44809C44819D45819E45829F45829F4483A04483A04483A14483A14483A14383A243 +84A24384A24384A34384A34284A34284A34284A34284A34284A34284A44284A44184A44184A441 +84A44184A44184A44184A44184A44184A44184A44184A44184A44184A44184A44184A34284A342 +84A34283A34283A24283A24283A14282A14282A04282A042819F42819E42809E42809D427F9C42 +7E9B427D99427B97417A954077923F6E873A607630526529495A24969C89E0E0E0F0F0F0FAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA97A6B73267A63A77C03D7CC73F7ECB4081CE4283D24485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54284D24080CC3E7CC73B78C13974BC3164A34D6179EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC +9DACB02273892787A0298DA72B90AA2F93AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD3394AD +3394AD3394AD3394AD3293AC2B8EA8298AA327859E22758A436972DCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF2F2F2E4E4E4CDCDCD +AFB2A88C99725D73305A6E31647A366D843B748D3F7A94437E99447F9B45809C45809C45809C45 +809D44819D44819D44819E44819E44819E44819F43829F43829F43829F43829F43829F43819F42 +81A04281A04281A04282A04282A04282A04282A04282A04282A04282A04282A04282A04281A042 +81A042819F42819F42819F42819E42819E42809E42809D42809D43809C437F9C437F9B437E9A42 +7E99427D99427C98427C97427A9541758E3E6F873B667D365D723152652B5A6A387E876BABADA6 +CDCDCDE4E4E4F2F2F2FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B73267A63A77C03D7CC73F7ECB4081CE4283D2 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54284D24080CC3E7CC73B78C13974BC +3164A34D6179EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFAF1F1F1DCDCDC9DACB021738827869F298CA62E8FA83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A8338FA82888A226849D217489436872 +DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCF7F7F7EBEBEBD9D9D9C4C4C4B8B8B8A8ABA18C99727484515D7131596C305D7133657B38 +6D853D758E417993437B96447D98457E99457F9A457F9A457F9A457F9B457F9B457F9B447F9C44 +7F9C447F9C447F9C447F9C447F9C437F9C437F9C437F9C437F9C437F9C437F9C437F9C437F9C43 +7F9C437F9C437F9C437F9C437F9C437F9B437F9B437E9B437E9A437E9A437E9A437D99437D9943 +7D98437C97437B9643799442779141748D3F70893D6A813A617634586B2F52642B52652A67754A +818B6CB0B0B0B9B9B9C4C4C4D9D9D9EBEBEBF6F6F6FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B73267A63A77C0 +3D7CC73F7ECB4081CE4283D24485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54284D2 +4080CC3E7CC73B78C13974BC3164A34D6179EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DACAF21718727849D2E8BA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +358CA326839C217388436871DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFAFAFAF3F3F3E7E7E7D6D6D6C9C9C9BDBDBDB5B5B5B0B0B0 +A7AB9F9CA28E88936F70804F5B6F31596C315B6E335F7435647938687E3A6C833C70883E748C41 +7790427A94437C96447C97457D97457D98457D98457D98457D98457D99457D99447D99447D9944 +7D99447D99447D99447D99447D99447D99447D98447D98447D98447D98447C97447B96437A9543 +799342789242768F41728B3F6E863D69803A647A375F73345A6D3156692F54662D54672D5E6F3B +7F896B979C8CADADADB0B0B0B5B5B5BDBDBDC9C9C9D6D6D6E7E7E7F4F4F4FAFAFAFDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA97A6B73267A63A77C03D7CC73F7ECB4081CE4283D24485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54284D24080CC3E7CC73B78C13974BC3164A34D6179EAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DABAF +2170862C829937869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C37869C +37869C37869C37869C37869C37869C35859A217288436771DCDCDCF1F1F1FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDF9F9F9F3F3F3E7E7E7 +DCDCDCD0D0D0C7C7C7BFBFBFB9B9B9B3B3B3B1B1B1AFAFAFA5A99E9CA28F90997F7F8D61728350 +677A415D7132596D31586B31596C325C7034607536627737637938657A39667C3A677D3A687F3B +6A803C6B823C6C833D6D853D6E863E6F873E6F863E6E853D6D853D6C833C6C833C6B823B69803B +687E3A657A386277376074355D71345A6D32586B3155672F55672E566A2E60713D737F5B808A6C +848F6D999F8DACACACAFAFAFB1B1B1B3B3B3B9B9B9BFBFBFC7C7C7D0D0D0DCDCDCE7E7E7F3F3F3 +FAFAFAFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B73267A63A77C03D7CC73F7ECB4081CE4283D24485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54284D24080CC3E7CC73B78C13974BC3164A3 +4D6179EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFAF1F1F1DCDCDC9DABAF23677A2B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677 +2B66772B66772B66772B66772B66772B66772B66772B66772B66772B6677286575436771DCDCDC +F1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFDFDFDFBFBFBF5F5F5EDEDEDE4E4E4DCDCDCD4D4D4CDCDCDC6C6C6C1C1C1BDBDBDB9B9B9 +B5B5B5B4B4B4B1B1B1AFAFAFADADADABABABA4A79D9BA28E929B7F87936F7B895F72825070804F +6E7E4F6D7C4E65774064764063743F5B6F315A6E31596D31586B31586B30586B30586B30586C30 +586C30596C30596D30596D3062733E63753F6C7B4D75825C78855D828D6D85906D989E8CA3A69D +ABABABADADADAFAFAFB1B1B1B4B4B4B5B5B5B8B8B8BDBDBDC1C1C1C6C6C6CDCDCDD4D4D4DCDCDC +E4E4E4EEEEEEF5F5F5FBFBFBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B73267A63A77C03D7CC7 +3F7ECA4081CE4283D14485D44485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D5 +4485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54485D54284D14080CC +3E7CC63B78C03974BB3164A24D6179EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF2F2F2DDDDDDB2B9BC6D8D966A8A93698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +698992698992698992698992698992698992698992698992698992698992698992698992698992 +6A8A937090998CA6ADDDDDDDF2F2F2FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFAFAFAF5F5F5F1F1F1EBEBEBE5E5E5 +DFDFDFDADADAD5D5D5CFCFCFCBCBCBC9C9C9C4C4C4C0C0C0BCBCBCB9B9B9B8B8B8B8B8B8B7B7B7 +B5B5B5B2B2B2AFAFAFADADADACACACACACACACACACACACACACACACACACACACACACA5A99EA5A89E +A5A89EA5A89EA5A99EACACACACACACACACACACACACACACACACACACACACACADADADAFAFAFB2B2B2 +B5B5B5B7B7B7B8B8B8B8B8B8B9B9B9BCBCBCC0C0C0C4C4C4C9C9C9CBCBCBCFCFCFD5D5D5DADADA +DFDFDFE5E5E5EBEBEBF0F0F0F5F5F5FAFAFAFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +97A6B73266A53A76BF3D7BC63F7ECA4081CD4283D14485D44485D44485D44485D44485D44485D4 +4485D44485D44485D44485D44485D44485D44485D44485D44485D44485D44485D44485D44485D4 +4485D44485D44485D44485D44485D44485D44485D44485D44485D44485D44485D44485D44485D4 +4485D44485D44485D44485D44485D44485D44485D44485D44485D44485D44485D44485D44485D4 +4485D44485D44485D44485D44485D44485D44485D44485D44485D44485D44485D44485D44485D4 +4485D44485D44283D1407FCB3E7BC53B77C03974BB3164A24D6179EAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF3F3F3E0E0E0CBCBCBBDBDBD +B5B5B5B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B5B5B5BDBDBDCBCBCBE1E1E1F3F3F3FBFBFBFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE +FCFCFCFAFAFAF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE6E6E6E3E3E3E0E0E0DBDBDBD6D6D6D2D2D2 +CFCFCFCDCDCDCCCCCCCBCBCBC8C8C8C4C4C4BFBFBFBCBCBCBABABABABABABABABABABABABABABA +BABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA +BABABABCBCBCBFBFBFC4C4C4C8C8C8CBCBCBCCCCCCCDCDCDCFCFCFD2D2D2D6D6D6DBDBDBE0E0E0 +E3E3E3E6E6E6EAEAEAEEEEEEF1F1F1F5F5F5F8F8F8FAFAFAFCFCFCFEFEFEFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA97A6B73266A53A76BF3D7BC63F7DCA4080CD4282D14484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44283D1407FCB3E7BC53B77C03973BB3164A24D6179 +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +F6F6F6E7E7E7D7D7D7CCCCCCC6C6C6C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C6C6C6CDCDCDD7D7D7E8E8E8F6F6F6 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFBFBFBF9F9F9F7F7F7F5F5F5F3F3F3 +F2F2F2EEEEEEEAEAEAE7E7E7E5E5E5E4E4E4E4E4E4E2E2E2DEDEDEDADADAD5D5D5D2D2D2D0D0D0 +D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0 +D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D2D2D2D5D5D5DADADADEDEDEE2E2E2E4E4E4E4E4E4E5E5E5 +E7E7E7EAEAEAEEEEEEF2F2F2F3F3F3F5F5F5F7F7F7F9F9F9FBFBFBFCFCFCFDFDFDFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B73266A53A76BF3D7BC63F7DCA +4080CD4282D14484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44283D1407FCB3E7BC5 +3B77C03973BB3164A24D6179EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F0F0F0E6E6E6E0E0E0DDDDDDDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDDDDDD +E1E1E1E7E7E7F1F1F1F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE +FEFEFEFDFDFDFCFCFCFCFCFCFBFBFBF9F9F9F8F8F8F6F6F6F5F5F5F4F4F4F4F4F4F4F4F4F1F1F1 +EEEEEEEAEAEAE7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6 +E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7EAEAEAEDEDEDF0F0F0 +F4F4F4F4F4F4F4F4F4F5F5F5F6F6F6F8F8F8F9F9F9FBFBFBFCFCFCFCFCFCFDFDFDFEFEFEFEFEFE +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B7 +3266A53A76BF3D7BC63F7DCA4080CD4282D14484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44283D1407FCB3E7BC53B77C03973BB3164A24D6179EAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFAF6F6F6F3F3F3F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F6F6F6FAFAFAFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFCFCFC +FCFCFCFCFCFCFCFCFCFBFBFBF9F9F9F7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 +F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 +F6F6F6F7F7F7F9F9F9FBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA97A6B73266A53A76BF3D7BC63F7DCA4080CD4282D14484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D44484D4 +4484D44484D44484D44484D44484D44283D1407FCB3E7BC53B77C03973BB3164A24D6179EAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FEFEFEFDFDFDFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFDFDFDFEFEFEFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B73266A43976BE3C7BC53E7DC94080CD +4182D04384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24183D03F7FCA3D7BC53A77BF +3873BA3064A14D6179EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B73266A4 +3976BE3C7BC53E7DC93F80CC4182D04384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4183D03F7FCA3D7BC43A77BF3873BA3064A14D6179EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA97A6B73266A43976BE3C7AC53E7DC93F80CC4182D04384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24183D03F7FCA3D7BC43A77BF3873BA3064A14D6179EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A6B73266A43976BE3C7AC53E7DC93F80CC4182D0 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24183D03F7FCA3C7BC43A77BF3873BA +3064A14D6179EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B73266A43976BE +3C7AC53E7DC93F80CC4182D04384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D2 +4384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24384D24182D0 +3F7ECA3C7AC43A76BF3873BA3064A14D6179EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA97A5B73265A43975BE3C79C53E7CC93F7FCC4181D04383D24383D24383D24383D24383D2 +4383D24383D24383D24383D24383D24383D24383D24383D24383D24383D24383D24383D24383D2 +4383D24383D24383D24383D24383D24383D24383D24383D24383D24383D24383D24383D24383D2 +4383D24383D24383D24383D24383D24383D24383D24383D24383D24383D24383D24383D24383D2 +4383D24383D24383D24383D24383D24383D24383D24383D24383D24383D24383D24383D24383D2 +4383D24383D24383D24181D03F7ECA3C7AC43A76BF3872B93063A14D6179EAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B73265A33975BD3C79C43E7CC83F7FCB4181CF4383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14181CF3F7EC93C7AC33A76BE3872B93063A0 +4D6178EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B73265A33975BD3C79C4 +3E7CC83F7FCB4181CF4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14181CF3F7EC9 +3C7AC33A76BE3872B93063A04D6178EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +97A5B73265A33975BD3C79C43E7CC83F7FCB4181CF4383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14181CF3F7EC93C7AC33A76BE3872B93063A04D6178EAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA97A5B73265A33975BD3C79C43E7CC83F7FCB4181CF4383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14181CF3F7EC93C7AC33A76BE3872B93063A04D6178 +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B73265A33975BD3C79C43E7CC8 +3F7FCB4181CF4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14181CF3F7EC93C7AC3 +3A76BE3872B93063A04D6178EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B7 +3265A33975BD3C79C43E7CC73F7FCB4181CE4383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D14383D1 +4383D14181CE3F7DC83C7AC33A76BD3872B83063A04D6178EAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA97A5B63265A33975BC3C79C33E7CC73F7FCA4181CE4383D04383D04383D0 +4383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D0 +4383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D0 +4383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D0 +4383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D0 +4383D04383D04383D04383D04383D04181CE3F7DC83C7AC23A76BD3872B830639F4D6178EAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B63265A33975BC3C79C33E7CC73F7FCA +4181CE4383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D0 +4383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D0 +4383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D0 +4383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D04383D0 +4383D04383D04383D04383D04383D04383D04383D04383D04383D04181CE3F7DC83C79C23A76BD +3872B830639F4D6178EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B63264A3 +3974BC3C78C33E7BC73F7ECA4180CE4382D04382D04382D04382D04382D04382D04382D04382D0 +4382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D0 +4382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D0 +4382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D0 +4382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D0 +4180CE3F7CC83C78C23A75BD3871B830629F4D6078EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA97A5B63264A33974BC3C78C33E7BC73F7ECA4180CE4382D04382D04382D04382D0 +4382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D0 +4382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D0 +4382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D0 +4382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D04382D0 +4382D04382D04382D04382D04180CE3F7CC83C78C23A75BD3871B830629F4D6078EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B63264A23974BB3C78C23E7BC63F7EC94180CD +4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF +4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF +4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF +4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF +4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4180CD3F7CC73C78C13A75BC3871B7 +30629F4D6078EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B63264A23974BB +3C78C23E7BC63F7EC94180CD4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF +4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF +4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF +4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF +4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4382CF4180CD +3F7CC73C78C13A75BC3871B730629F4D6078EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA97A5B63164A23874BB3B78C23D7BC63F7EC94180CD4282CF4282CF4282CF4282CF4282CF +4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF +4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF +4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF +4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF +4282CF4282CF4282CF4180CD3E7CC73C78C13975BC3771B730629F4C6078EAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEE2EBED +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E884D2E8 +84D2E884D2E884D2E884D2E884D2E884D2E884D2E8C6D6DAFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B63164A23874BB3B78C23D7BC63E7EC94080CD4282CF +4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF +4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF +4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF +4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF +4282CF4282CF4282CF4282CF4282CF4282CF4282CF4080CD3E7CC73B78C13975BC3771B72F629F +4C6078EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFDFDFDFAFAFAC3D6DB2F9AB861EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF +61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF61EFFF38A8C1A2AFB3FAFAFA +FDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B63164A23874BB3B78C2 +3D7BC53E7EC94080CC4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF +4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF +4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF +4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF +4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4282CF4080CC3E7CC6 +3B78C13975BB3771B72F629E4C6078EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F1F1F1B7CACF2C92AF3CB4D289FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +52C4D82887A299A6AAF1F1F1F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +97A5B63164A13874BA3B78C13D7BC53E7EC84080CC4282CE4282CE4282CE4282CE4282CE4282CE +4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE +4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE +4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE +4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE +4282CE4282CE4080CB3E7CC63B78C03975BB3771B62F629E4C6077EAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF6F6F6E8E8E8ACBFC42C92AF +33ABCC3FBCDB7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF7DFFFF +7DFFFF7DFFFF7DFFFF50CBE031A4C42887A2919EA2E8E8E8F6F6F6FCFCFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE +FDFDFDFDFDFDFDFDFDFDFDFDF0F4E7F0F5E7E3ECD0D4E3B8D7E6B9CBDFA2CFE4A4C4DE8FC8E391 +BBDB7ABCDD7BBDDE7BBFE07CC0E27DB4DA67B5DC68B7DE69B8DF69B6DD68B3DA67BFE07CBDDE7B +BBDB7AB8D879C5E090C4DE8EC1DB8ECEE3A4CCE0A3CADEA2D8E7B9D4E2B8E1EACFEFF3E6FDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA97A5B63164A13874BA3B78C13D7BC43E7EC84080CC4282CE4282CE +4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE +4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE +4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE +4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE4282CE +4282CE4282CE4282CE4282CE4282CE4282CE4080CB3E7CC63B78C03975BB3771B62F629E4C6077 +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFB +F3F3F3E0E0E0A4B7BC2C92AF33ABCC36B3D645C5E26BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF +6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF6BF2FF4BCAE334ACCE31A4C42887A28A979BE0E0E0F3F3F3 +FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFD +FCFCFCEFF3E6E1EACFD6E5B9CFE3A5C6E190BFE07DADD855B7E45BBDEB60C2EF63C6F366CAF66A +CEF96ED2FA72D6FC76D9FD79DBFD7BDCFE7CDEFE7EDFFE7FE0FF80E1FF81E2FF82E3FF83E3FF84 +E2FF83E0FE81DEFE7FDCFE7CDAFD7BD8FD79D6FC77D5FC75D3FB73D1FA71CFF96FCDF86DCAF66B +C4F165BDEB60B5E25ABBE36CB4DA67BADA7AC3DD8ECBDEA3D6E4B8E2EBCFEEF3E6FCFCFCFDFDFD +FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B63163A13873BA3B77C13D7AC4 +3E7DC8407FCC4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE +4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE +4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE +4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE +4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE407FCB3E7BC63B77C0 +3974BB3770B62F619E4C6077EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFAF2F2F2DDDDDDA0B3B82C92AE33ABCC36B3D538B6D842C3E45ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE +5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE5ADFFE46C6E636B1D334ACCD31A4C3 +2887A1879498DDDDDDF2F2F2FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFDFDFDFCFCFC +EEF2E5C7DAA2D2E8A7C0E17EACD755B6E35CC0ED62C8F569CFF970D7FC77DEFE7FE5FF87ECFF8E +F0FF92F3FF95F5FF97F7FF9AF8FF9BFAFF9DFBFF9EFBFF9EFBFF9EFBFF9EFBFF9EFBFF9EFBFF9E +FAFF9EFAFF9DFAFF9DF9FF9DF9FF9DFAFF9DFAFF9DFAFF9DFAFF9DFAFF9DF9FF9CF9FF9BF9FF9B +F8FF9BF8FF9AF7FF99F6FF98F3FF95EFFF91EAFF8CE4FF86DEFE7FD8FC79D2FA73CCF76DC6F268 +BFED62B7E45CB9E06AB9D97ACADEA3E1EACFFCFCFCFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B6 +3163A13873BA3B77C13C7AC43E7DC8407FCC4281CE4281CE4281CE4281CE4281CE4281CE4281CE +4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE +4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE +4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE +4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE4281CE +4281CE407FCB3E7BC63B77C03974BB3770B62F619E4C6077EAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB2B72C92AE33ABCB +36B3D538B6D839B9DB3FC0E449CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF0 +49CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF0 +49CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF0 +49CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF0 +49CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF0 +49CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF0 +49CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF0 +49CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF0 +49CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF0 +49CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF0 +49CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF0 +49CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF0 +49CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF0 +49CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF049CCF041C2E5 +38B6D836B1D234ACCD31A4C32887A1869397DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFD +EEF3E6C6D8A1D1E6A6B2D766B4E15AC5F266D2F973DDFE7EE4FF85EAFF8CF0FF92F5FF97F7FF9A +FAFF9CFAFF9DF9FF9CF7FF9AF5FF98F4FF97F3FF96F1FF95F0FF94EFFF93EEFF91ECFF90EBFF8F +EBFF8FEAFF8FEAFF8EE9FF8EE9FF8DE8FF8DE8FF8CE8FF8CE8FF8CE9FF8DE9FF8DEAFF8EEAFF8E +EBFF8FEBFF8FECFF90ECFF90EDFF91EDFF91EEFF91EFFF92F1FF94F3FF96F4FF97F6FF99F6FF99 +F7FF9AF6FF99F5FF97F2FF94EEFF90E9FF8CDFFE81D3FB75C7F369BBE85EADD854ADD163BED78D +D2E0B7FCFCFCFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA97A5B63163A03873B93B77C03C7AC33E7DC7407FCB4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD407FCB3E7BC53B77BF3974BA3770B52F619D4C6077EAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 +DCDCDC9FB2B72C92AE33ABCB36B3D538B6D839B9DC3BBCDF3CBFE23DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE33DBFE3 +3DBFE33DBFE33CBFE23BBBDE38B6D836B1D234ACCD31A4C32887A1869397DCDCDCF1F1F1FAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFDFDFDEFF4E6CFE4A4ACD855C1EF63CDF86FD9FD7CE6FF88F0FF93F5FF98F7FF9BF6FF9A +F4FF98F2FF96F0FF94EDFF92EBFF90E9FF8DE6FF8BE4FF89E2FF87E1FF86DFFF85DEFF83DDFF82 +DCFF81DAFF80D9FF7ED8FF7ED8FF7DD7FE7DD7FE7CD6FE7CD6FE7CD5FE7BD5FE7AD4FE7AD5FE7B +D6FE7BD6FE7CD7FE7CD8FF7DD8FF7ED9FF7ED9FF7FDAFF7FDAFF7FDBFF80DBFF80DCFF81DEFF83 +E0FF85E2FF87E4FF89E6FF8AE7FF8CE9FF8DEBFF8FECFF90EEFF92F0FF94F2FF96F2FF96EEFF92 +E7FF8ADDFE80D2FB74C7F46ABBE85FB4DA67C8DBA1ECF0E5FDFDFDFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B63163A03873B93B77C03C7AC33E7DC7 +407FCB4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD407FCA3E7BC43B77BF3974BA +3770B52F619D4C6077EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB2B72C92AD33AACA36B2D438B6D739B9DB3BBCDE3CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13BBBDD38B6D736B1D134ACCC31A4C22887A0 +869397DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEEEF2E5A3C55FAFDB57C4F267DBFD7EEBFF8EF0FF94F3FF97F1FF95 +EEFF92EAFF8FE7FF8CE4FF89E2FF87E0FF85DDFF83DBFF81D9FF7FD6FE7CD4FD7AD1FC77CFFB75 +CEFA74CDF973CBF872CAF771C9F56FC7F46EC6F36DC5F26CC5F16CC4F16BC4F06BC3F06AC3EF6A +C2EF6AC2EE69C2EE69C2EE69C3EF6AC3F06AC4F06BC5F16CC5F26CC6F26DC7F36DC7F46EC8F46E +C8F56FC9F56FCAF670CCF872CEFA74D0FB76D2FD78D4FE7AD6FE7CD7FF7DD9FF7FDBFF80DCFF82 +DFFF84E2FF88E6FF8AE8FF8CEAFF8EEBFF90ECFF90E9FF8EE2FE87CEF873B9E65FB5DB67AAC672 +ECEFE4FDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B63163A0 +3873B93B77C03C7AC33E7DC7407FCB4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +407FCA3E7BC43B77BF3974BA3770B52F619D4C6077EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B72D91AD34AACA37B2D3 +39B5D73AB8DA3CBBDE3DBEE03DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13CBADC39B5D7 +37B0D135ABCB32A3C22986A0869397DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDCBD6B396BD47BDEA62D5FC79E5FF88EDFF91 +EAFF8EE7FF8BE4FF89E1FF86DDFF83D9FF7FD5FE7BD2FD78D0FB76CEFA74CCF872C9F570C7F36D +C4F06BC1ED68BFEB66BDE964BBE763BAE661B9E560B7E35FB6E25EB5E05CB3DF5BB2DE5AB2DE5A +B1DD59B1DD59B1DC59B0DC58B0DB58AFDB57AFDB57B0DB58B0DC58B1DD59B2DD59B2DE5AB3DF5B +B4DF5BB4E05CB5E15DB6E15DB6E25EB7E35EB8E45FBAE661BCE863BEEA65C0EC67C2EE69C4F16B +C6F36DC8F46ECAF670CBF772CEFA74D2FD78D5FE7BD9FF7EDBFF80DDFF82DFFF84E1FF86E4FF89 +E5FF8ADBFD80C9F56EB7E45EA3C65DD4DAC8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA97A5B63163A03873B93B77C03C7AC33E7DC7407FCB4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD407FCA3E7BC43B77BF3974BA3770B52F619D4C6077EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC +9FB1B62D91AC34AAC937B2D339B5D63AB8D93CBBDD3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03CBADC39B5D637B0D035ABCB32A3C129869F869396DCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFAFAFAA2BC6DA8D153 +CBF570E0FF84E2FF86E1FF85DAFF80D6FE7DD3FD7AD0FB77CCF874C8F46FC4EF6BC1EC68BEEA66 +BCE764B9E561B7E25FB4DF5CB2DD5AAFDA57ADD856ABD654AAD553AAD452A9D352A8D351A8D250 +A8D250A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150A7D150 +A7D150A7D150A7D150A7D150A7D150A7D250A8D250A8D250A8D251A8D351A9D351AAD452ABD653 +ADD755AED957B0DB59B2DD5BB4E05DB7E25FB8E460BAE562BDE865C1EC68C5F06CC9F46FCCF773 +CEF974D0FB76D2FD78D7FF7DDDFF82DEFF84D9FF7FC2ED6A99C04A728746FAFAFAFDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B63163A03873B93B77C03C7AC33E7DC7407FCB +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD407FCA3E7BC43B77BF3974BA3770B5 +2F619D4C6077EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFAF1F1F1DCDCDC9FB1B62D91AC34A9C937B1D239B4D53AB7D93CBADC3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3CB9DB39B4D537AFD035ABCA32A2C029869F869396 +DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FBFBFBE3E6DD7C9B3B96BD47B3DC5CD0FB76D7FF7CD2FC78CBF672C6F16EC3EE6BBFEA68BBE664 +B7E15FB2DD5BAFD958ADD756ABD554AAD353A8D251A7D151A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D150A8D151A8D251A9D352AAD453ACD655 +B0DA59B4DE5DB8E260BCE664BFE967C1EB69C4EE6BC9F471D0FA77D5FE7CC9F271A7D05489AC40 +586E2AF3F3F3FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B63163A03873B9 +3B77C03C7AC33E7DC7407FCB4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD +4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD4281CD407FCA +3E7BC43B77BF3974BA3770B52F619D4C6077EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B62C90AB33A8C836B0D138B3D4 +39B6D83BB9DB3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3BB8DA39B3D436AECF +34A9C931A1BF28859E869396DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEF8F8F8DDE0D77A993A92B8449CC449A5CE50B6E15FC3EE6ABCE764 +B6E05FB2DC5BAED858ABD454A8D252A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D151A9D252ABD555AFD858B2DB5BB5E05EBCE664C2ED6A +B4DE5E9AC14894BB4587AA3F586E2AEBEBEBF7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA97A5B631629F3872B83B76BF3C79C23E7CC6407EC94280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC407EC93E7AC33B76BE3973B9376FB42F609C4C6077EAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B6 +2C8FAA33A7C736AFD038B2D339B5D63BB8DA3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3BB7D938B2D336ADCD34A8C831A0BE28849D869396DCDCDCF1F1F1FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5D8DAD279983991B6439BC349 +A0C84BA3CC4DA6D050ACD555A8D152A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50 +A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50 +A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50 +A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50 +A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50 +A6CF50A8D152ACD656A3CC4F9DC54A99C04894BA4586A83E576D2AE5E5E5F3F3F3FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B631629F3872B83B76BF3C79C23E7CC6407EC94280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC407EC93E7AC33B76BE3973B9376FB42F609C +4C6077EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFAF1F1F1DCDCDC9FB1B62C8FAA33A6C636AECF38B1D339B4D63BB8DA3CBADD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBADD3BB7D838B2D336ADCD34A8C831A0BE28849D869396DCDCDC +F1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF3F3F3 +D4D6CE79973990B5439BC2489FC74BA2CA4DA3CC4EA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA4CD4EA0C84C9DC44A98BF4793B84486A73E576C2A +E2E2E2F2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B631629F3872B83B76BF +3C79C23E7CC6407EC94280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC407EC93E7AC3 +3B76BE3973B9376FB42F609C4C6077EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B62C8EA933A5C535ADCE37B0D239B3D5 +3AB6D83CB9DB3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DB3AB5D738B1D236ACCC34A7C7 +319FBD28839C869396DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCF1F1F1D2D4CC79973990B5439AC1489EC64AA1CA4CA3CB4EA4CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA4CC4EA0C84C9CC44A +98BE4793B84485A73E576C29E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +97A5B631629F3872B83B76BF3C79C23E7CC6407EC94280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC407EC93E7AC33B76BD3973B9376FB42F609C4C6077EAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B62B8DA8 +32A5C435ACCD37AFD038B2D43AB5D73BB7DA3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB +3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB8DB3BB7DA +3AB4D637AFD135ABCB33A6C6309EBC27829B869296DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1D1D3CB7896388FB34299C0479DC54A +A0C84CA2CA4DA3CB4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA2CB4D9FC74B9BC24997BD4691B74384A63D566C29E1E1E1F1F1F1FCFCFCFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA97A5B531629F3872B83B76BF3C79C23E7CC6407EC94280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280D5A7EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE8680CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC4280CC +4280CC4280CC4280CC4280CC4280CC4280CC407EC93E7AC33B76BD3973B9376FB42F609C4C6077 +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +F1F1F1DCDCDC9FB0B52B8CA732A4C335ACCC37AFCF38B2D33AB5D63BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93AB4D537AFCF35AACA33A5C4309DBB27829A869296DCDCDCF1F1F1 +FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1D1D3CB +7695378EB24198BF469CC4499FC74BA0C94CA1CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4D +A2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4D +A2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4D +A2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4D +A2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4D +A2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA1C94D9DC54A9AC14895BC4590B64283A53C556B29E1E1E1 +F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A5B530629F3871B83A76BF3C78C2 +3E7BC6407EC94180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC +4180CC4180CC4180CC4180CC4180CC86D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 +A697CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC +4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC +4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC4180CC407EC93D7AC33B76BD +3972B8376FB42F609B4C6077EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB0B52B8BA632A3C235ABCB37AECE38B1D13AB4D5 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83AB3D437AECE35A9C933A5C3309CBA +278199869296DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCF1F1F1D0D3CB7695378DB24197BE469BC3499EC74BA0C84CA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA0C94C9DC54A99C14895BB45 +90B54282A43C556A29E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B5 +30629E3771B73A75BE3B78C13D7BC53F7DC8407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB417FDCC4FFFFE2C1D4407FCB41ABEE +FFFFEE867FCB407FCB64C1F7FFD6DC407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB3F7DC83D79C23A75BC3872B8366EB32E5F9B4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EB0B52A8AA531A2C1 +34A9C936ACCD37AFD039B3D43AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D739B1D2 +36ADCD34A8C732A3C22F9BB9278098869295DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1D0D3CB7593378CB04096BD469AC2489DC54A +9EC74BA0C84CA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D +A0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D +A0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D +A0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D +A0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D +9FC84C9CC44A98BF4794BA458EB44281A33C546A28E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA97A4B530629E3771B73A75BE3B78C13D7AC53F7DC8407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB417FDC +C4FFFFC4ABCB407FCB4195E6E2FFEE867FCB407FCB4195E6E2FFEE867FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB3F7DC83D79C23A75BC3872B8366EB32E5F9B4C5F76EAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 +DCDCDC9EB0B52A8AA431A1BF34A9C836ACCB37AFCF39B2D23AB4D53AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D539B1D136ACCC34A7C632A2C12F9AB7277F98869295DCDCDCF1F1F1FAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FEFEFEFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1D0D3CB749237 +8BAF4095BC4599C0489CC44A9DC64B9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC74C9EC64B9AC24997BE4792B9448DB34180A23B546928E1E1E1F1F1F1 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B530629E3771B73A75BE3B78C13D7AC5 +3F7DC8407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB417FDCC4FFFFC4ABCB407FCB417FDCC4FFF7A695CB407FCB41ABEEFFFFEE +867FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB3F7DC83D79C23A75BC3872B8 +366EB32E5F9B4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EB0B52A89A331A1BE34A8C736ABCA37AECE39B1D13AB3D4 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4E3C2FFFFE1DBDB3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D55FDBF8FFFFF182B4D53AB4D582E7FFFFFFF182B4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D55FDBF8FFFFF182B4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB3D439B0D036ABCB34A7C532A2C02F9AB6277F97 +869295DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFCFCFC9C9C9C0808084E4E4ECBCBCBFCFCFCFEFEFEFEFEFEFFFFFFFFFFFF +FCFCFCF1F1F1D0D3CB7491368AAE4094BA4598BF479BC2499CC44A9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9DC54B9AC14996BD4792B8448DB141 +80A13B536828E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B530629E +3771B73A75BE3B78C13D7AC53F7DC8407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB86D6FFFFD6DC407FCB417FD4A6EBFF +FFFFFFFFFFFFFFFFFFFFD6DC407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +3F7DC83D79C23A75BC3872B8366EB32E5F9B4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EB0B42A89A230A0BD33A7C6 +35AAC937ADCD38B0D039B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339CDF1FFFFF7A3C0D339B2D339B2D339B2D339B2D339CDF1 +FFFFFFC2CDD339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2E1C2FFFFE1DADB39B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D35FDAF7FFFFF181B2D3 +39B2D381E6FFFFFFF181B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D35FDAF7FFFFFFFFFFFFFFFFFFFFE6E139B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D35FDAF7FFFFF181B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D338AFCF36AAC9 +34A6C431A1BF2E99B5277E96869295DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDF8F8F82D2D2D000000000000000000646464 +E2E2E2FCFCFCFEFEFEFFFFFFFCFCFCF1F1F1D0D3CB73903689AD3F93B94497BD4699C1489BC34A +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC34A +98BF4895BB4690B6438CB0407EA03A526727E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA97A4B530629E3771B73A75BE3B78C13D7AC53F7DC8407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB41ABEE +FFFFF7A695CB407FCB417FDCC4FFFFFFFFFFFFFFEE867FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB407FCB +407FCB407FCB407FCB407FCB3F7DC83D79C23A75BC3872B8366EB32E5F9B4C5F76EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC +9EB0B42988A1309EBC33A6C535A9C836ACCB38AFCF39B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139CCF0FFFFF7A3BFD139B1D1 +39B1D139B1D139B1D139CCF0FFFFFFC2CCD139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1E1C2FFFFE1D9D939B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D15FD9F7FFFFF081B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D181E6FFFFFFF7A3BFD139B1D139B1D181E6FF +C2CCD139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +5FD9F7FFFFF081B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D138AECE35A9C833A4C331A0BE2E98B4267D95869295DCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1959595 +0000000000000000000000000F0F0F828282F2F2F2FDFDFDFBFBFBF1F1F1D0D3CB718F3588AB3E +91B84395BC4698BF489AC1499BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9BC34A9AC24A97BE4794BA458FB5428AAF3F7D9E3A516627E1E1E1F1F1F1FCFCFC +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B530619E3770B63A75BD3B77C03D7AC43F7CC8 +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA3F7CC73D78C13A74BC3871B7366EB2 +2E5F9A4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFAF1F1F1DCDCDC9EB0B42987A0309EBB33A5C334A8C736ABCA38AECD39B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39CCF0FFFFF7A3BFD039B1D039B1D039B1D039B1D039CCF0FFFFFFC2CCD039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1E0C2FFFFE1D9D839B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D05FD9F7FFFFF081B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1E0C2FFFFFFE6E0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D05FD9F7FFFFF081B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D037ADCC35A9C733A4C231A0BC2E97B3267D94869295 +DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF9F9F9EDEDEDDCDCDCA6A6A63131310000000000000000000000001E1E1EAAAAAAF8F8F8 +EFEFEFCFD2CA718E3587AA3E91B64395BB4598BE4799C0499BC14A9BC24A9BC24A9BC24A9BC24A +9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A +9BC24A9BC24A9BC24AACE1E3FFFFC7BDC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A +9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A +9BC24A9BC28CDFFFFFEFE16C9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A +9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9AC14997BD4793B9458FB3428AAD3F7D9D39 +516627E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B530619E3770B6 +3A74BD3B77C03D79C43F7CC7407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA417ED3A6EBFFE2C1D3407ECA407ECA407ECA407ECA +407ECA64C1F7FFEBE5647ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA3F7CC7 +3D78C13A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB429869F2F9DBA32A4C233A7C6 +35AAC937ADCC38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38CBEFFFFFF7A2BDCF38B0CF38B0CF38B0CF38B0CF38CBEFFFFFFF +C2CBCF38B0CF80E5FFFFFFEF80B0CF38B0CF38B0CF38B0CF38CBEFFFFFF7A2BDCF38B0CF38B0CF +38CBEFFFFFFFFFFFFFFFFFF7A2BDE0C2FFFFE1D8D738B0CF38B0CF5ED8F7FFF2E75EBDE7E1FFFF +FFFFFFC2CBCF38B0CF38B0CF5ED8F7FFFFFFFFFFFFFFFFFFFFE5E038B0CF38B0CF38B0CF80E5FF +FFFFEF80B0CF38B0CF38B0CF38B0E0C2FFFFE1D8D738B0CF38B0CF5ED8F7FFFFEF80B0CF38B0CF +5ED8F7FFFFEF80B0CF38B0CF38B0CF38CBEFFFFFFFFFFFFFFFFFFFFFE5E038B0CF38B0CF38B0CF +38B0CF38B0E0C2FFFFFFE5E038B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38BDE7 +E1FFFFFFFFFFFFFFFFFFFFFFC2CBCF38B0CF38B0CF38B0CF5ED8F7FFFFEF80B0CF80E5FFFFFFEF +80B0CF38B0CF38B0CF38B0CF38CBEFFFFFFFC2CBCF38B0CF38B0CF38BDE7E1FFFFFFFFFFFFFFFF +FFF2E75EB0CF38B0CF38B0CF5ED8F7FFF2E75EBDE7E1FFFFFFFFFFC2CBCF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF36ACCB34A8C532A3C0 +309EBB2D96B2257C93869295DBDBDBF0F0F0F9F9F9FDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD385C89 +385C89FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFCFCFCFCFCFCFBFBFBF7F7F7EDEDEDDCDCDCCACACABEBEBE808080181818000000 +0000000000000000003C3C3CBFBFBFCED1C9708C3485A83E90B54294B94596BC4798BE4899C049 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04999C049ABE0E3FFFFC7BCC04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C08BDEFFFFEEE06B99C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999BF4995BB46 +92B7448EB24189AC3F7C9C39516526E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA97A4B530619E3770B63A74BD3B77C03D79C43F7CC7407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA417ED3A6EBFFE2C1D3 +407ECA407ECA407ECA407ECA407ECA41ABEDFFFFED867ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA3F7CC73D78C13A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEB2F2F2F080808757575 +EBEBEBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB4 +28859E2F9CB931A3C133A6C435A9C836ACCB38AECE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38CAEFFFFFF7A2BDCE38AFCE38AFCE +38AFCE38AFCE38CAEFFFFFFFC2CACE38AFCE38CAEFFFFFFFC2CACE38AFCE38AFCE38AFCE80E5FF +FFF2E75EAFCE38AFCE38CAEFFFFFFFC2CACE38AFCE38BDE7E1FFFFFFFFFFE1D8D638AFCE38AFCE +5ED8F7FFFFFFFFFFEF80AFCE38AFCE38AFCE38AFCE80E5FFE1D8D638AFCE38AFCE38CAEFFFFFFF +E1D8D638AFCE38AFCE80E5FFFFFFEF80AFCE38AFCE38AFCE38AFDEC2FFFFE1D8D638AFCE38AFCE +5ED8F7FFFFEF80AFCE38AFCE5ED8F7FFFFEF80AFCE38AFCE38CAEFFFFFFFC2CACE38AFCE38AFCE +80E5FFC2CACE38AFCE38AFCE38AFCE38AFCE80E5FFFFFFFFFFE5DE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38CAEFFFFFFFE1D8D638AFCE38AFCE38CAEFFFFFFFE1D8D638AFCE38AFCE5ED8F7 +FFFFEF80AFCE38CAEFFFFFFFC2CACE38AFCE38AFCE38AFCE80E5FFFFFFEF80AFCE38AFCE38CAEF +FFFFFFE1D8D638AFCE38AFD6A2F2FFFFFFEF80AFCE38AFCE5ED8F7FFFFFFFFFFEF80AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE36ABCA34A6C432A2BF309DBA2D95B1257B92859194C5C5C5B2B2B2B8B8B8BABABABBBBBB +BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB9393937C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C +7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B +7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B +7B7B7B7B7B7B7B7B7B1B2D431B2D435555553E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E +3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B383838343434 +3030302E2E2E272727000000000000000000000000000000000000525250637C2E84A63D8DB342 +92B84495BB4697BD4898BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49AAE0E3FFFFC7 +BBBF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF8BDEFFFFEEE06B98BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4997BE4894BA4691B6448CB14187AB3E7B9B39506426E1E1E1F1F1F1FCFCFCFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B530619E3770B63A74BD3B77C03D79C43F7CC7407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA417EDC +C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBE5647ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA3F7CC73D78C13A74BB3871B7366DB22E5E9A +4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +B7B7B7000000000000000000171717929292FBFBFBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFAF1F1F1DCDCDC9EAFB428859D2E9BB831A2C032A5C334A8C636ABCA37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC36C9EE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1C9CC37ADCC36ADD5A2F2FFFFE4DD +37ADCC37ADCC36ADDDC1FFFFE1D7D537ADCC36ADD5A2F2FFFFE4DD37ADCC37ADCC37ADCC36BBE6 +E1FFFFE1D7D537ADCC37ADCC5DD7F7FFFFFFC1C9CC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC36ADD5A2F2FFFFE4DD37ADCC37ADCC80E4FFFFFFEE80ADCC37ADCC37ADCC36ADDD +C1FFFFE1D7D537ADCC37ADCC5DD7F7FFFFEE80ADCC37ADCC5DD7F7FFFFEE80ADCC36ADD5A2F2FF +FFE4DD37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC36ADD5A2F2FFFFFFFF +FFFFFFFFE4DD37ADCC37ADCC37ADCC36ADD5A2F2FFFFE4DD37ADCC37ADCC37ADCC37ADCC80E4FF +FFF2E65DADCC37ADCC5DD7F7FFFFEE80ADCC36ADD5A2F2FFFFE4DD37ADCC37ADCC36ADDDC1FFFF +E1D7D537ADCC36ADD5A2F2FFFFE4DD37ADCC37ADCC37ADCC36BBE6E1FFFFC1C9CC37ADCC5DD7F7 +FFFFFFC1C9CC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC35AAC833A5C331A1BE2F9CB92C94B0247B90838F92848484 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000708035C742A8DB24191B74494BB4696BC4798BE4898BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF49AAE0E3FFFFC7BBBF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF8BDEFFFFEEE06B98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4997BE4894BA4690B6438CB04187AA3E7A9B38506426 +E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B530619D3770B63A74BD +3B77C03D79C43F7CC7407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA4194E5E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF7A694CA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA3F7CC73D78C1 +3A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF7F7F7EBEBEB454545000000000000000000000000353535C2C2C2FBFBFB +FEFEFEFEFEFEFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB328839C2E9AB631A1BF32A4C234A7C5 +36AAC937ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB36C8EEFFFFF7A2BACB37ACCB37ACCB37ACCB37ACCB36C8EEFFFFFFC1C8CB +37ACCB37ACCB5DD6F7FFFFF7A2BACB37ACCB36C8EEFFFFF7A2BACB37ACCB36ACDCC1FFFFE1D6D4 +37ACCB37ACCB37ACCB36ACDCC1FFFFE1D6D437ACCB37ACCB5DD6F7FFFFEE80ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB36ACD4A2F2FFFFF2E65DACCB37ACCB80E4FFFFFFEE +80ACCB37ACCB37ACCB36ACDCC1FFFFE1D6D437ACCB37ACCB5DD6F7FFFFEE80ACCB37ACCB5DD6F7 +FFFFEE80ACCB36BAE6E1FFFFE1D6D437ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB36ACD4A2F2FFFFFFFFFFFFF7A2BACB37ACCB36BAE6E1FFFFE1D6D437ACCB +37ACCB37ACCB37ACCB5DD6F7FFFFF7A2BACB37ACCB5DD6F7FFFFEE80ACCB37ACCB5DD6F7FFFFEE +80ACCB37ACCB36BAE6E1FFF7A2BACB37ACCB36ACDCC1FFFFE1D6D437ACCB37ACCB37ACCB36ACDC +C1FFFFE1D6D437ACCB5DD6F7FFFFEE80ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB35A9C733A4C2319FBD2F9BB8 +2C92AE24798E808C8F7F7F7F000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000001B1B1B4759217C9E398AAF4090B54393B94595BB4796BD4896BD48 +96BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD48 +96BD4896BD4896BD4896BD4896BD4896BD48A8DFE3FFFFC7BABD8ADDFFFFFFFFFFFFFFFFDDD448 +96BD4896BD48BAE9FFFFFFC7BABD4896BD4896BD4896BD4896D4C7FFFFE3CCC84896BD4896BD48 +96D4C7FFFFFFFFFFFFFFFFE3CCC88ADDFFFFEEDF6A96BD4896BD4896BD4896BD4896BD4896BD48 +96BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BC4792B8458FB443 +8BAF4086A93D7999384F6326E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +97A4B530619D3770B63A74BD3B77C03D79C43F7CC7407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA417ED3A6EBFFE2C1D3407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA +407ECA407ECA3F7CC73D78C13A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF4F4F4E5E5E5D3D3D3888888181818000000 +000000000000000000545454E2E2E2FCFCFCFEFEFEFEFEFEFAFAFAF1F1F1DCDCDC9EAFB327839B +2D99B530A0BE32A3C133A6C435A8C736ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36C8EDFFFFF7A2B9CA36ABCA36ABCA36ABCA +36ABCA36C8EDFFFFFFC1C8CA36ABCA36ABCA36B9E5E1FFFFE1D6D336ABCA80E4FFFFF2E55DABCA +36ABCA36B9E5E1FFFFE1D6D336ABCA36ABCA36ABCA36ABDCC1FFFFE1D6D336ABCA36ABCA5DD6F7 +FFFFED80ABCA36ABCA36ABCA36ABCA36ABCA36ABCA80E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E5 +5DABCA36ABCA80E4FFFFFFED80ABCA36ABCA36ABCA36ABDCC1FFFFE1D6D336ABCA36ABCA5DD6F7 +FFFFED80ABCA36ABCA5DD6F7FFFFED80ABCA36B9E5E1FFFFC1C8CA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36B9E5E1FFFFFFF2E55DABCA +36B9E5E1FFFFC1C8CA36ABCA36ABCA36ABCA36ABCA36C8EDFFFFF7A2B9CA36ABCA5DD6F7FFFFED +80ABCA36ABCA36B9E5E1FFFFC1C8CA36ABCA5DD6F7FFF2E55DABCA36ABCA36B9E5E1FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D6D336ABCA5DD6F7FFFFED80ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +34A7C632A3C1309EBC2E9AB72B91AD23778D7E8A8C8C8C8C323232313131313131303030303030 +3030303030303030303030304F4F4F606060606060606060606060606060606060606060606060 +6060606060606060606060606060606060606060606060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F +5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F +5F5F5F5F5F5F1522331522337C7C7C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E +8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8B8B8B8B8B8B888888 +8383833535350000000000000000000000000505055D5D5D9FA19B5E772B79983887AB3E8EB442 +92B84493BA4695BB4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC47 +95BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC47A8DEE3FFFFFFFFFFC6 +B9BC4795BC47A8DEE3FFFFE3CCC84795BC4795D3C6FFFFFFDDD34795BC4795BC4795BC47B9E9FF +FFF4A8A8BC4795BC4795D3C6FFFFFFDDD34795BC4795C8A8EEFFFFFFFFFFEEDE6995BC4795BC47 +95BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC47 +95BC4794BB4691B7448EB34289AE3F84A83D7898374E6225E1E1E1F1F1F1FCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA97A4B530619D3770B53A74BC3B77BF3D79C33F7CC7407EC9407EC9 +407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 +407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 +407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 +407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 +407EC9407EC9407EC9407EC9407EC9407EC93F7CC63D78C03A74B93871B5366CB02E5D984B5E75 +E7E7E7F5F5F5FAFAFAFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFAFAFAF3F3F3E6E6E6 +D4D4D4C3C3C3B4B4B4626262060606000000000000000000070707828282F2F2F2FCFCFCF9F9F9 +F1F1F1DCDCDC9EAFB327829A2D98B4309FBC31A2C033A4C335A7C636AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936C8EDFFFFF6 +A2B9C936AAC936AAC936AAC936AAC936C8EDFFFFFFC1C8C936AAC936AAC936AAD3A2F2FFFFF2E5 +5DAADBC1FFFFE1D5D336AAC936AAC936AADBC1FFFFE1D5D336AAC936AAC936AAC936AADBC1FFFF +E1D5D336AAC936AAC95DD5F6FFFFED80AAC936AAC936AAC936AAC936AAD3A2F2FFFFFFED80AAC9 +36AAC936AAD3A2F2FFFFF2E55DAAC936AAC980E3FFFFFFED80AAC936AAC936AAC936AADBC1FFFF +E1D5D336AAC936AAC95DD5F6FFFFED80AAC936AAC95DD5F6FFFFED80AAC936B9E5E1FFFFE1D5D3 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC980E3FFFFFFED80AAC936B9E5E1FFFFE1D5D336AAC936AAC936AAC936AAC95DD5F6FFFFF6 +A2B9C936AAC95DD5F6FFFFED80AAC936AAC936AAD3A2F2FFE1D5D336AAD3A2F2FFE1D5D336AAC9 +36AAC936AADBC1FFFFE1D5D336AAC936AAC936AAC936AAC936AAC936AAC936AAC95DD5F6FFFFED +80AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC934A6C532A2C0309DBB2E99B62B90AC23768C7D888BC1C1C1C3C3C3 +BEBEBEBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBDBDBDBEBEBE +BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE +BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE2A45672A4567BEBEBEBEBEBEBEBEBEBEBEBEBEBEBE +BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBFBFBFC0C0C0C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C0C0C0BDBDBD8B8B8B2222220000000000000000000000003A3A3A9E9E9EB2B2B2A7A9A2 +5E772C7A993788AB3E8EB34191B64493B84594BA4795BA4795BA4795BA4795BA4795BA4795BA47 +95BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA47 +95BA47A8DDE3FFFFE3CCC64795BA4795BA4795BA8ADDFFFFEEDD6995BA4795BA69CCF4FFFFE88A +95BA4795BA4795BA8ADDFFFFEEDD6995BA4795BA69CCF4FFFFE88A95BA4795BA4795BA4795C6A8 +EEFFFFEEDD6995BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA47 +95BA4795BA4795BA4795BA4795BA4794B94691B6448DB24289AC3F84A73D7897374E6125E1E1E1 +F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B530619D3770B53A74BC3B76BF +3D79C33F7CC6407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 +407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 +407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 +407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9 +407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC93F7CC63D78BF3973B8 +1B3759000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000001E1E1EA9A9A9F7F7F7F0F0F0DCDCDC9EAFB32781992D97B3309EBB31A1BE33A4C135A7C5 +36A9C736AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836C8EDFFFFF6A2B9C836AAC836AAC836AAC836AAC836C8EDFFFFFFC1C8C836AAC8 +36AAC836AAC85DD5F6FFFFF6A2D5EDFFFFF6A2B9C836AAC836AAC836AAD2A2F2FFFFE3DB36AAC8 +36AAC836AAC836C8EDFFFFFFE1D5D236AAC836AAC85DD5F6FFFFED80AAC836AAC836AAC836AAC8 +36B9E4E1FFFFE1D5D236AAC836AAC836AAD2A2F2FFFFF2E45DAAC836AAC85DD5F6FFFFED80AAC8 +36AAC836AAC836B9E4E1FFFFE1D5D236AAC836AAC85DD5F6FFFFED80AAC836AAC85DD5F6FFFFED +80AAC836AADBC1FFFFFFE3DB36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC880E3FFFFFFED80AAC836AAD2A2F2FFFFE3DB36AAC836AAC8 +36AAC836AAC880E3FFFFF2E45DAAC836AAC85DD5F6FFFFED80AAC836AAC836AAC85DD5F6FFF2E4 +5DB9E4E1FFF6A2B9C836AAC836AAC836AAD2A2F2FFFFE3DB36AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC85DD5F6FFFFED80AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836A9C834A6C432A1BE309DB92E99B42B90AB +23768C7F8A8DC7C7C7CDCDCDCCCCCCCBCBCBCACACACACACACACACACACACACACACACACACACACACA +CACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACA +CBCBCBCCCCCCCDCDCDCFCFCFD0D0D0D0D0D0D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 +D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 +D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D2D2D2D4D4D4D5D5D5 +D6D6D6D7D7D7D7D7D7D6D6D6D5D5D5C4C4C44646460000000000000000000000001A1A1A808080 +B3B3B3BDBDBDC3C3C3B3B5AE637C2E7B9C3988AC3E8DB14290B54392B74593B84693B84693B846 +93B84693B84693B84693B84693B84693B84693B84693B84693B84693B84693B84693B84693B846 +93B84693B84693B84693B84693B846A7DCE2FFFFC6B9B84693B84693B84693B889DCFFFFFFE789 +93B84693B846A7DCE2FFFFE2CBC44693B84693D0C6FFFFE2CBC44693B84693B889DCFFFFEDDC69 +93B84693B84693B84693B889DCFFFFEDDC6993B84693B84693B84693B84693B84693B84693B846 +93B84693B84693B84693B84693B84693B84693B84693B84693B84693B8468FB4438CB04188AB3E +83A53C7696364D6125E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B5 +2F609D376FB53974BC3B76BF3C79C33E7BC63F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 +3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DD3A6EAFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFED857DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 +3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 +3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 +3F7DC93F7BC63C76BE3870B51A3556000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000004B4B4BE6E6E6DBDBDB9EAEB32680982D96B2 +2F9DBA31A0BD32A3C034A6C435A8C636A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C7 +36A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C7 +36A9C736A9C736A9C736A9C736A9C736A9C736C7EDFFFFF6A2B9C736A9C736A9C736A9C736A9C7 +36C7EDFFFFFFC1C7C736A9C736A9C736A9C736A9DAC1FFFFFFFFFFFFF1E35DA9C736A9C736A9C7 +36A9C75DD5F6FFFFFFC1C7C736A9C736B9E3E1FFFFFFFFFFE1D5D036A9C736A9C75DD5F6FFFFED +80A9C736A9C736A9C736A9C736A9DAC1FFFFFFE3DA36A9C736A9C780E3FFFFFFFFFFF1E35DA9C7 +36A9C736B9E3E1FFFFE1D5D036A9C736B9E3E1FFFFFFFFFFE1D5D036A9C736A9C75DD5F6FFFFED +80A9C736A9C75DD5F6FFFFED80A9C736A9C75DD5F6FFFFFFC1C7C736A9C736A9C780E3FFE1D5D0 +36A9C736A9C736A9C736C7EDFFFFED80A9C736A9C736A9C736C7EDFFFFFFE1D5D036A9C736A9C7 +5DD5F6FFFFFFC1C7C736A9C736A9C75DD5F6FFFFFFC1C7C736A9C736A9C75DD5F6FFFFED80A9C7 +36A9C736A9C736B9E3E1FFF6C1E3F6FFF1E35DA9C736A9C736A9C736A9C736C7EDFFFFFFC1C7C7 +36A9C736A9C736A9DAC1FFF6A2B9C736A9C75DD5F6FFFFED80A9C736A9C736A9C736A9C736A9C7 +36A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C7 +36A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A8C634A5C3 +32A0BD309CB82E98B32B90AB23768C828E91D1D1D1DDDDDDE1E1E1E2E2E2E2E2E2E2E2E2E2E2E2 +E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2 +E2E2E2E2E2E2E2E2E2E2E2E2E3E3E3E3E3E3E5E5E5E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 +E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 +E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8 +E8E8E8E9E9E9EAEAEAECECECECECECEDEDEDECECECEBEBEBE7E7E74D4D4D000000000000000000 +0B0B0B626262B2B2B2BBBBBBC8C8C8D3D3D3D7D7D7C1C4BD66812F7D9E3987AC3F8CB1418EB443 +90B64492B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B746 +92B74692B74692B74692B74692B74692B74692B74692B74692B746A6DBE2FFFFC6B8B74692B746 +92B74692B789DCFFFFFFE78992B74692B74692C3A8EDFFFFEDDB6992B746B8E7FFFFF3A8A6B746 +92B74692C3A8EDFFFFEDDB6992B74692B74692B74692B789DCFFFFEDDB6992B74692B74692B746 +92B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B746 +91B6458EB3438BAF4186AA3E82A43C7595364C6025E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA96A4B52F609D366FB53974BC3A75BF3C78C33E7BC63F7DC93F7DC93F7DC9 +3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 +85D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A694C93F7DC93F7DC93F7DC93F7DC9 +3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 +3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 +3F7DC93F7DC93F7DC93F7DC93F7DC93E7BC53A75BD366DB1183251000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000606060D9D9D9E9E9E9 +D9D9D99DADB2267F972C95B12F9CB9309FBC32A2BF34A5C235A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535C5ECFFFFF6A1B6C5 +35A7C535A7C535A7C535A7C535C5ECFFFFFFC1C5C535A7C535A7C535A7C535A7C580E2FFFFFFFF +C1C5C535A7C535A7C535A7C535A7C535A7C55CD4F6FFFFFFFFFFFFFFFFEC80A7CFA1F1FFE1D4CF +35A7C535A7C55CD4F6FFFFEC80A7C535A7C535A7C535A7C535A7C535B6E2E1FFFFFFFFFFFFFFFF +FFE2D980E2FFFFF1E25CA7C535A7C535A7C55CD4F6FFFFFFFFFFFFFFFFEC80A7CFA1F1FFE1D4CF +35A7C535A7C55CD4F6FFFFEC80A7C535A7C55CD4F6FFFFEC80A7C535A7C535A7C55CD4F6FFFFFF +FFFFFFFFFFFFFFE2D935A7C535A7C535A7C535A7C535A7C55CD4F6FFFFFFFFFFFFFFFFFFFFFFFF +C1C5C535A7C535A7C535A7C535A7C535C5ECFFFFFFFFFFFFFFFFFFFFFFF6A1B6C535A7C535A7C5 +35A7C55CD4F6FFFFEC80A7C535A7C535A7C535A7CFA1F1FFFFFFFFE1D4CF35A7C535A7C535A7C5 +35A7C535A7C535B6E2E1FFFFFFFFFFFFFFFFFFFFF6A1B6C535A7C535A7C55CD4F6FFFFEC80A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C533A4C1319FBC2F9BB72D96B22A8FA923768B849093D8D8D8E9E9E9F0F0F0 +F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 +F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F7F7F7 +F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 +F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7365A86365A86F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 +F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F6F6F6EEEEEE +4D4D4D000000000000454545A5A5A5BBBBBBC5C5C5D2D2D2DFDFDFE7E7E7E6E6E6CACDC5698330 +7FA03A88AC3F8CB1418EB34390B54491B74592B74692B74692B74692B74692B74692B74692B746 +92B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B746 +A6DBE2FFFFC6B8B74692B74692B74692B789DCFFFFFFE78992B74692B74692B769CAF3FFFFF3A8 +A6B789DCFFFFEDDB6992B74692B74692B789DCFFFFEDDB6992B74692B74692B74692B789DCFFFF +EDDB6992B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B746 +92B74692B74692B74692B74691B6458DB2438AAF4086A93E81A43B7594354C6024E1E1E1F1F1F1 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B52F609D366FB53974BC3A75BE3C78C2 +3E7BC63F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 +3F7DC93F7DC93F7DC93F7DDBC4FFFFE1C1D33F7DC93FAAEDFFFFED857DC93F7DC964C1F6FFD5DB +3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 +3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9 +3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93E7BC43A74BB356BAE30629E +2A568E234774384657ADADADB7B7B7BBBBBBBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BBBBBBBBBBBBBBBBBBBABABAB7B7B7B3B3B38C8C8C2A2A2A0000000000000000000000002D2D2D +9C9C9CD2D2D2E1E1E1E7E7E7D9D9D99DADB1267F962C95B02F9CB8309EBB32A1BE34A4C135A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C480E2FFFFFFEC80A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C433A3C0319FBB2F9AB62D96B12A8EA823768B +849092DBDBDBEFEFEFF8F8F8FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD385C89385C89FDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFE +FEFEFEFDFDFDF8F8F8EDEDEDD5D5D5848484A1A1A1BDBDBDC3C3C3CFCFCFDBDBDBE7E7E7F0F0F0 +F4F4F4EDEDEDCDD0C86983317D9F3987AB3E8AAF408DB2428EB44390B54590B54590B54590B545 +90B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B545 +90B54590B54590B54590B545A3DBE2FFFFC6B6B54590B54590B54590B588DBFFFFFFE78890B545 +90B54590B545A3DBE2FFFFE2C9DBC6FFFFE2C9C14590B54590B54590B568C9F3FFFFE78890B545 +90B54590B54590CFC6FFFFFFEDDB6890B54590B54590B54590B54590B54590B54590B54590B545 +90B54590B54590B54590B54590B54590B54590B54590B5458FB5448CB14289AD4085A83D80A33B +7493354B5F24E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B52F609C +366FB43974BB3A75BE3C78C23E7BC53F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DDBC4FFFFC4AAC83F7DC83F94E4E1FFED +857DC83F7DC83F94E4E1FFED857DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 +3E7BC43A75BA366CAE30629F2B59902449763A4859B1B1B1BCBCBCBFBFBFC1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0C0C0BEBEBEAFAFAF4F4F4F000000000000000000 +000000101010757575B6B6B6C4C4C4D5D5D5E3E3E3E8E8E8D9D9D99DADB1267E952C94AE2F9AB6 +309DBA32A0BD33A3C035A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6D7C1FFFFFFE2D735A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C333A2BF319DBA +2F99B52D95B02A8DA723758A859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9EFEFEFDFDFDFCFCFCFCACACACECECED8D8D8 +E4E4E4EEEEEEF5F5F5FAFAFAFAFAFAF0F0F0CFD2CA6883307C9E3985A93D89AE3F8BB0418DB242 +8FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB444 +8FB4448FB4448FB444A2DBE2FFFFFFDBCE448FB4448FB444A2DBE2FFFFC5B6B4448FB4448FB444 +8FB488DBFFFFFFE7888FB4448FB4448FB4448FB488DBFFFFFFFFFFFFF2A8A2B4448FB4448FB444 +8FB444A2DBE2FFFFFFDBCE448FB4448FC1A8EDFFFFFFFFFFEDDB678FB4448FB4448FB4448FB444 +8FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448EB343 +8BB04188AC3F83A73C7FA13A7392344B5E23E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA96A4B52F609C366FB43974BB3A75BE3C78C23E7BC53F7DC83F7DC83F7DC83F7DC8 +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DDBC4FFFF +C4AAC83F7DC83F7DDBC4FFF6A694C83F7DC83FAAEDFFFFED857DC83F7DC83F7DC83F7DC83F7DC8 +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 +3F7DC83F7DC83F7DC83F7DC83E7BC43A76BC376EB23367A72F5F9B275082405063C5C5C5D1D1D1 +D5D5D5D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D5D5D5D3D3D38080800C0C0C +000000000000000000050505545454AAAAAABABABAC7C7C7D6D6D6E3E3E3ECECECEBEBEBDADADA +9EAEB2257D942B92AD2E99B52F9CB8319FBC33A2BF34A4C134A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C25BD3F5FFFFF5A1B4C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C232A1BD309CB92E98B42C94AF2A8CA6227489859093DCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF4F4F4E9E9E9 +E0E0E0DEDEDEE3E3E3ECECECF4F4F4F9F9F9FCFCFCFEFEFEFCFCFCF1F1F1CFD2CA6782307C9D38 +85A83D89AC3F8BAF418CB1428EB2448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB344 +8FB3448FB3448FB3448FB3448FB3448FB3448FB344A2DAE2FFFFFFDBCD448FB3448FB344A2DAE2 +FFFFC5B6B3448FB3448FB3448FB388DBFFFFFFE7888FB3448FB3448FB3448FB344B6E7FFFFFFFF +DBCD448FB3448FB3448FB3448FB3448FB344A2DAE2FFFFFFFFFFFFFFFFC5B6B367C8F2FFEDDA67 +8FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB344 +8FB3448FB3448FB3448EB2438AAE4187AB3F83A53C7EA03A7291344A5D23E1E1E1F1F1F1FCFCFC +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B52F609C366FB43974BB3A75BE3C78C23E7BC5 +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 +3F7DC83F7DC83F7DC885D5FFFFD5DB3F7DC83F7DD2A6EAFFFFFFFFFFFFFFFFFFFFFFD5DB3F7DC8 +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83E7BC53B76BD3871B5356CAF3266A6 +2B578E47586DD9D9D9E6E6E6EBEBEBEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECEC +E9E9E9B8B8B80000000000000000000000003737379A9A9AB7B7B7C2C2C2CFCFCFDDDDDDE9E9E9 +F1F1F1F4F4F4EFEFEFDBDBDB9EAEB2257C932B91AD2E98B52F9BB8319EBB33A1BE34A3C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A3C132A0BD309BB82E97B32C93AE2A8BA5227389859093 +DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFAFAFAF5F5F5F0F0F0F0F0F0F4F4F4F8F8F8FBFBFBFDFDFDFEFEFEFFFFFFFCFCFC +F1F1F1CFD2CA6781307B9C3884A73C88AB3F8AAD408CAF418EB1438EB1438EB1438EB1438EB143 +8EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB143 +8EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB143 +8EB1438EB143B5E6FFFFFFC5B5B1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB143 +8EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB143 +8EB1438EB1438EB1438EB1438EB1438EB1438EB1438DB1438AAD4087A93E82A43B7E9F39729034 +4A5D23E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B52F609C366FB4 +3974BB3A75BE3C78C23E7BC53F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83FAAEDFFFFF6A694C83F7DC83F7DDBC4FFFF +FFFFFFFFFFED857DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8 +3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83E7BC5 +3B77BE3973B8366FB3346AAD2D5B954A5D72E4E4E4F2F2F2F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F7F7F7F2F2F2CACACA0707070000001D1D1D838383B7B7B7C0C0C0CCCCCC +D9D9D9E5E5E5EFEFEFF6F6F6FAFAFAF8F8F8F0F0F0DCDCDC9EADB2257B932B90AC2E97B42F9AB7 +319DBA339FBD34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0329EBC309AB72E96B2 +2C91AD2A8AA5227288859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFAFAFAFAFAFAFCFCFCFDFDFDFEFEFE +FFFFFFFFFFFFFFFFFFFCFCFCF1F1F1CFD1CA66802F7A9A3783A53C87AA3E89AC408BAE418DAF42 +8DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB043 +8DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB043 +8DB0438DB0438DB0438DB0438DB0438DB087DBFFFFFFE5878DB0438DB0438DB0438DB0438DB043 +8DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB043 +8DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438CAF4289AB40 +86A83E81A23B7D9D39718E33495C23E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA96A4B42F609B366FB33974BA3A75BD3C78C03E7BC43F7DC73F7DC73F7DC73F7DC73F7DC7 +3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 +3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 +3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 +3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 +3F7DC73F7DC73F7DC73E7BC43B77BE3973B83770B3356CAE2E5D964C5F75E9E9E9F7F7F7FCFCFC +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFBFBFBF4F4F4E5E5E5B8B8B8929292BDBDBD +C0C0C0C9C9C9D6D6D6E2E2E2EDEDEDF4F4F4FAFAFAFCFCFCFDFDFDFAFAFAF1F1F1DCDCDC9DADB2 +257A922B8FAB2D96B32F99B6309BB9329EBC33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF329DBB3099B62E95B12C90AC2989A4227187859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE +FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1CFD1CA657F2F7A993783A43B +86A83E88AA3F8AAC418CAE428DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43A1D8E2FFFFE2C8BD438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438CAE4288AA3F85A63D81A13B7C9C38708D33495B22E1E1E1F1F1F1FCFCFCFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42F609B366FB33974BA3A75BD3C78C03E7BC43F7DC7 +3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 +3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 +3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 +3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 +3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73E7BC43B77BD3973B83770B4356CAF2E5D97 +4C5F75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF5F5F5 +E8E8E8D7D7D7CCCCCCCCCCCCD4D4D4DFDFDFEAEAEAF2F2F2F8F8F8FCFCFCFEFEFEFEFEFEFEFEFE +FAFAFAF1F1F1DCDCDC9DADB22479912A8EAA2D95B22E97B5309AB8329DBB339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE319CBA2F98B52D94B02B8FAB2988A3217086859093DCDCDC +F1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1 +CFD1CA657E2E79983681A33B85A73D87A93F87A94088AA418AAC418BAD428BAD428BAD428BAD42 +8BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD42 +8BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD42 +8BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD42 +8BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD42 +8BAD428BAD428BAD428BAD428BAD428AAC4187A94086A73E84A53D7FA03A7B9B386F8C32485A22 +E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42E609B366EB33873BA +3A75BD3C78C03D7AC43F7CC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 +3F7DC73F7DC73F7DC73F7DC73F7DC73F7DDAC4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAE3647DC7 +3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 +3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7 +3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73D7AC43B76BD +3972B8376FB4356CAF2D5D974C5F75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF9F9F9F0F0F0E5E5E5E0E0E0E2E2E2E9E9E9F0F0F0F7F7F7FBFBFBFDFDFD +FEFEFEFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB12479902A8EA82D94B02E97B3309AB6 +329DBA339FBC339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBC319BB82F97B42D93AF2B8FAA +2988A1217085859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCF1F1F1CFD1CA647D2D77973580A13A83A43C82A23D82A33E85A54087A841 +88A94289AA4189AB4189AB4189AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AB4189AB4188AA4187A94186A74083A33E7F9F3B7F9F3B +7E9F397A99376E8A31485A22E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +96A4B42E5F9B356EB33873BA3974BD3B77C03D7AC43E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7 +3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC763C0F6FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFE1C0D03E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7 +3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7 +3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7 +3E7CC73E7CC73D79C43A75BD3872B8366FB4346BAF2D5D974C5E75EAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF8F8F8F3F3F3F1F1F1F3F3F3F7F7F7 +FAFAFAFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB124788F +2A8DA72C93AF2E96B23099B5319CB8339EBB339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBB +319AB72F96B22D92AE2B8EA92887A0216F84859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1CFD1CA627B2D7391347C9B3A7D9B3D +7E9D3E819F4083A24185A44286A64386A74387A84387A84288A94288A94288AA4188AB4189AB41 +89AB4189AB4089AB4089AB4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AB4089AB4089AB4188AB4188AB4188AA4188AA4188A94187A84187A74186A64285A54284A441 +83A241809F3F7D9B3C7A983A7895397592366A8630455621E1E1E1F1F1F1FCFCFCFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA96A4B42E5F9B356EB33873BA3974BC3B77C03D7AC43E7CC73E7CC7 +3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73EA9EDFFFFFF +FFD5DA3E7CC73E7CC73E7CC73E7CC73E7CC73E7CD0A5EAFFFFFFF6A593C73E7CC73E7CC73E7CC7 +3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7 +3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7 +3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73D79C33A75BD3872B8366FB4346BAF2D5D974C5E75 +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFD +FBFBFBFBFBFBFCFCFCFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +F1F1F1DCDCDC9DADB124778E298BA62C92AE2D95B12F98B4319AB7329CBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329CBA3099B62E95B12C91AC2A8DA828859F216E84859093DCDCDCF1F1F1 +FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1E1E1E1 +6B7F405F772D728C397A973F7C993F7E9C40809E4282A04383A14383A34384A44385A44385A543 +85A64286A64286A74286A74286A74187A84187A84187A84187A94187A94187A94087A94087AA40 +87AA4087AA4087AA4087AA4087AA4087AA4087AA4087AA4087AA4087AA4087AA3F87AA3F87AA3F +87AA3F87AA3F87AA3F87AA3F87AA4087AA4087AA4087AA4087AA4087AA4087AA4087AA4087AA40 +87A94087A94087A94087A94087A84186A84186A74186A74186A64185A64185A54184A44184A341 +83A34183A24282A041809E417F9D407D9A3F7A973D77943B749039678131546A27727B5EE1E1E1 +F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42E5F9A356EB23873B93974BC +3B77BF3D7AC33E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 +3E7CC63E7CC684D5FFFFEAE3637CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CCFA5EAFF +FFD5D93E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 +3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 +3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63D79C23A75BC3872B7 +366FB3346BAE2D5D964C5E75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB124778D298BA52C92AD2D94B02F97B3319AB6 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB83099B52E95B02C91AB2A8DA728859E +216E83859092DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFE7E7E7505050000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000004B5D255A6E2F667D36728C3D7B96417E9A437F9C44809D44 +819E44819F4482A04483A14483A24483A24383A34384A34384A34384A34384A44384A44284A442 +84A54285A54285A54285A64185A64185A64185A64185A64185A64185A64185A64185A64185A641 +85A64185A74185A74085A74085A74085A74185A64185A64185A64185A64185A64185A64185A641 +85A64185A54185A54185A54185A54184A44184A44184A44184A34283A34283A24283A24282A142 +82A14281A042819F42809E42809E427F9D427E9B417D99417B984079964075913D6D86385F7530 +506327546235B6B7B3E2E2E2F2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B4 +2E5F9A356EB23873B93974BC3B77BF3D7AC33E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 +3E7CC63E7CC63E7CC63E7CC63E7CC63E7CD9C4FFFFE1C0CF3E7CC63E7CC63E7CC63E7CC63E7CC6 +3E7CC63E7CC63E7CC663C0F6FFEAE3637CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 +3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 +3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 +3E7CC63D79C23A75BC3872B7366FB3346BAE2D5D964C5E75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB123768C298AA4 +2B91AC2D93AF2E96B23099B5319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB73098B4 +2E94AF2C90AA2A8CA627859D206E82858F92DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000008588808D9A72617832596C2F +647A3670883D7790407B96437E99447F9B45809C45819D45819E45829E44829F44829F44829F44 +829F4482A04482A04483A04383A14383A14383A14383A24383A24283A24283A24283A24283A242 +83A24283A24283A24283A24283A24283A24183A24183A24183A24183A24183A24183A24183A242 +83A24283A24283A24283A24283A24283A14283A14283A14282A14282A04282A04282A042819F42 +819F42819E43809D43809D437F9C427F9B427F9B427E9A427D99427C98427A954176903F728B3C +6A82385E73315164295767367D856ABABABACBCBCBE5E5E5F3F3F3FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA96A4B42E5F9A356DB23873B93974BC3B77BF3D7AC33E7CC63E7CC63E7CC6 +3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CD9C4FFFFC4A9C63E7CC6 +3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63EA9EDFFFFED847CC63E7CC63E7CC63E7CC6 +3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 +3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 +3E7CC63E7CC63E7CC63E7CC63E7CC63D79C23A75BC3872B7366FB3346BAE2D5D964C5E75EAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 +DCDCDC9DACB023758B2889A32B8FAA2C92AD2E95B02F98B4319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB62F96B22D92AE2B8EA9298AA427839C206C81858F92DCDCDCF1F1F1FAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +939393B5B5B5A9ADA2959F8171814F5A6E315A6D31607535677E396E863D758E417B95447E9945 +7F9B457F9B457F9B45809B45809C45809C45809C45809C45809D44809D44819D44819E44819E44 +819E43819E43819E43819E43819E43819E43819E43819E43819E43819E43819E42819E42819E43 +819E43819E43819E43819E43819E43819E43819E43819E43809E43809D43809D43809D43809C43 +7F9C437F9C437F9B437F9B437E9A437E9A437D99437D98437C98437B97437A9542789241738C3E +6C843B6379355B6F3054672C51642B5B6A3980896BAEAEAEB5B5B5C4C4C4D5D5D5EBEBEBF7F7F7 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42E5F9A356DB23873B93974BC3B77BF +3D7AC33E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 +3E7CD9C4FFFFC4A9C63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63EA9EDFFFFED +847CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 +3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6 +3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63D79C23A75BC3872B7366FB3 +346BAE2D5D964C5E75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DACB022748A2788A22A8FA92B91AC2D94AF2E97B23099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B42E96B12C92AD2A8EA8298AA326839B1F6C80 +858F92DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFAF3F3F3E2E2E2D4D4D4C4C4C4BCBCBCB3B3B3AFAFAFA3A79D929B7E7E8C5F687B41 +5A6E31596C315E7234667B386C833C70883E738B40768F417892427B95447C97447D98457E9945 +7E9A457E9A457E9A457E9A447E9A447E9A447E9A447E9A447E9A447E9A447E9A447E9A437E9A43 +7E9A437E9B437E9B437E9B437E9B437E9A437E9A437E9A437E9A437E9A437E9A437E9A437E9A44 +7E99447D99437D99437D98437D98437D98437C97437A9543789342768F40738C3F6F873D6A813A +657B376175355B6F3255682E53652C5D6E3B7C8569828C6CA2A59CADADADB2B2B2BABABAC4C4C4 +D4D4D4E2E2E2F3F3F3FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42E5F9A +356DB13873B83974BB3B77BE3D7AC23E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC5 +3E7CC53E7CC53E7CC53E7CC53E7CD9C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFEC847CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC5 +3E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC5 +3E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC5 +3D79C13A75BB3872B6366FB2346BAD2D5D964C5E75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DACB02274892788A12A8EA8 +2B91AB2D94AE3096B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13096B02C91AC +2A8DA72989A226829A1F6B7F858F92DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9EFEFEFE6E6E6D9D9D9CFCFCFC4C4C4BDBDBD +B6B6B6B2B2B2AEAEAEACACACA3A69C949E7F808F6070804F5E73325A6E31596C31596C325B6E33 +5E7235627737667C396A803B6E853D71893F748C41758E41768F42769042779142789143789243 +7993437993437A94437A95447B95447B96447B96447B96447B95447A95447A95437A94437A9443 +799343799343789242779042758E41738C40718A3F6F873D6C843C6A813B667C396277365D7133 +586B3155682F54672E56692E5F6F3C6A784C7E876A848F6DA1A49BACACACADADADB1B1B1B4B4B4 +B9B9B9C1C1C1CECECED8D8D8E6E6E6EFEFEFFAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA96A4B42E5F99356DB13873B83974BB3B77BE3D7AC23E7CC53E7CC53E7CC53E7CC5 +3E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CD9C4FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC847CC53E7CC53E7CC53E7CC53E7CC5 +3E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC5 +3E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC5 +3E7CC53E7CC53E7CC53E7CC53D79C13A75BB3872B6366FB2346BAD2D5D954C5E74EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC +9DACB02173882786A0298DA72B90AA3093AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3092AB2A8CA62888A12581991F6A7E858F92DCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9F +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F4F4F4 +ECECECE5E5E5DADADAD1D1D1C9C9C9C2C2C2BBBBBBB7B7B7B3B3B3AFAFAFADADADABABABABABAB +A3A79CA1A49B929C7E8D967B7E8C5F79865E6E7E4F6476405A6E31586C31586B31586B31586B32 +596B32596C325A6D335B6E335C6F345D71345E72355F7335607536617637627737617637617536 +6074365F73355E72355D71345C70345C6F335A6E33596C32576A3056693056692F56692F576A2F +576B2F60713D6B7A4C7D876A828C6B8E977C999F8CAAAAAAABABABABABABADADADAFAFAFB3B3B3 +B7B7B7BBBBBBC1C1C1C6C6C6CECECED6D6D6E3E3E3EBEBEBF4F4F4F9F9F9FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42E5F99356DB13872B83974BB3B77BE3D79C2 +3E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC5 +3E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC5 +3E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC5 +3E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC5 +3E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53E7CC53D79C13A75BB3871B6366EB2346BAD +2D5C954C5E74EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFAF1F1F1DCDCDC9DACB021728727859E298CA62E8FA83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A82F8DA62887A02580981F6A7D848F92 +DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFDFDFDFCFCFCF8F8F8F5F5F5EEEEEEE7E7E7DFDFDFD9D9D9D1D1D1CCCCCCC5C5C5 +C0C0C0BBBBBBB8B8B8B7B7B7B5B5B5B2B2B2AFAFAFADADADACACACACACACACACACACACACA4A79C +A1A59B99A08C989F8B919B7D90997D8F987C8E967C86926E85906D838E6D7B895F7A875E79865E +77845D6F7F4F76835D77845D78855D78855D79865E818B6C828C6C828D6C838E6D85916D8E977C +979D8B989F8BA1A59BAAAAAAACACACACACACACACACACACACADADADAFAFAFB2B2B2B5B5B5B7B7B7 +B8B8B8BBBBBBC0C0C0C5C5C5CCCCCCD1D1D1D8D8D8DEDEDEE4E4E4EBEBEBF2F2F2F7F7F7FCFCFC +FDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42E5E99356CB1 +3872B83973BB3B76BE3D79C23E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC5 +3E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC5 +3E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC5 +3E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC5 +3E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53D78C1 +3A74BB3871B6366EB2346BAD2D5C954C5E74EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DACAF21718627849D2E8BA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4378DA4 +3089A1257F971F697C848F92DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCF9F9F9F6F6F6F1F1F1 +EDEDEDE7E7E7E2E2E2DCDCDCD6D6D6D1D1D1CECECECCCCCCC8C8C8C4C4C4BFBFBFBBBBBBBABABA +B9B9B9B9B9B9B8B8B8B5B5B5B1B1B1AFAFAFAEAEAEADADADADADADADADADADADADADADADADADAD +ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD +ADADADADADADADADADADADADAEAEAEAFAFAFB1B1B1B5B5B5B8B8B8B9B9B9B9B9B9BABABABBBBBB +BFBFBFC4C4C4C8C8C8CCCCCCCECECED1D1D1D6D6D6DCDCDCE2E2E2E7E7E7ECECECF1F1F1F5F5F5 +F8F8F8FBFBFBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA96A4B42E5E99356CB13872B83973BA3B76BE3D79C23E7BC53E7BC53E7BC53E7BC53E7BC5 +3E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC5 +3E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC5 +3E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC5 +3E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC53E7BC5 +3E7BC53E7BC53E7BC53D78C13A74BB3871B6366EB2346BAD2D5C954C5E74EAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DABAF +2170852C819837859B37859B37859B37859B37869B37869B37869B37869B37869B37869B37869B +37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B +37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B +37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B +37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B +37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B +37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B37869B +37869B37869B37869B37869B37869B37869B37869B37859B37859B37859B37859B37859B37859B +37859B37859B37859B37859B37859B37859B37859B37859B37859B37859B37859B37859B37859B +37859B37859B37859B37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A2D7F951E687B848F91DCDCDCF1F1F1FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFDFDFDFCFCFCFBFBFBF9F9F9F6F6F6F3F3F3EFEFEFEBEBEBE7E7E7E5E5E5E3E3E3DFDFDF +DADADAD5D5D5D1D1D1D0D0D0CFCFCFCFCFCFCCCCCCC8C8C8C3C3C3BFBFBFBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBFBFBFC3C3C3C8C8C8CCCCCC +CFCFCFCFCFCFD0D0D0D1D1D1D5D5D5DADADADFDFDFE3E3E3E5E5E5E7E7E7EBEBEBEFEFEFF3F3F3 +F6F6F6F9F9F9FAFAFAFCFCFCFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42E5E98356CB03872B73973BA3B76BD3D79C13E7BC4 +3E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC4 +3E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC4 +3E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC4 +3E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC4 +3E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43D78C03A74BA3871B5366EB1346BAC2D5C95 +4C5E74EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFAF1F1F1DCDCDC9DABAF2367792A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574 +2A65742A65742A65742A65742A65742A65742A65742A65742A65742A6574226071848E91DCDCDC +F1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060 +0000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFDFDFDFCFCFCFAFAFAF8F8F8 +F6F6F6F5F5F5F4F4F4F2F2F2EEEEEEEAEAEAE8E8E8E7E7E7E7E7E7E6E6E6E3E3E3DFDFDFD9D9D9 +D5D5D5D3D3D3D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2 +D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3D3D3D3 +D5D5D5D9D9D9DFDFDFE3E3E3E6E6E6E7E7E7E7E7E7E8E8E8EAEAEAEEEEEEF2F2F2F4F4F4F5F5F5 +F6F6F6F8F8F8FAFAFAFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42E5E98356CB03872B7 +3973BA3B76BD3D79C13E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC4 +3E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC4 +3E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC4 +3E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC4 +3E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43E7BC43D78C03A74BA +3871B5366EB1346BAC2D5C954C5E74EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF2F2F2DDDDDDB2B9BC6D8F986A8C95698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94698B94 +6A8C9570929B9EABAFDDDDDDF2F2F2FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBF9F9F9F8F8F8F6F6F6F6F6F6F6F6F6 +F6F6F6F4F4F4F1F1F1EDEDEDEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 +E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 +E9E9E9E9E9E9E9E9E9E9E9E9EBEBEBEDEDEDF1F1F1F4F4F4F6F6F6F6F6F6F6F6F6F6F6F6F8F8F8 +F9F9F9FBFBFBFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +96A4B42D5E98346CB03772B73873BA3A76BD3C79C13D7BC43D7BC43D7BC43D7BC43D7BC43D7BC4 +3D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC4 +3D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC4 +3D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC4 +3D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC4 +3D7BC43D7BC43C78C03974BA3771B5356EB1336BAC2C5C954B5E74EAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF3F3F3E0E0E0CBCBCBBDBDBD +B5B5B5B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B5B5B5BDBDBDCBCBCBE1E1E1F3F3F3FBFBFBFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFBFBFBF9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7 +F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 +F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F9F9F9FBFBFBFCFCFCFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA96A4B42D5E98346CB03772B73873BA3A76BD3C79C13D7BC43D7BC4 +3D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC4 +3D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC4 +3D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC4 +3D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43D7BC4 +3D7BC43D7BC43D7BC43D7BC43D7BC43D7BC43C78C03974BA3771B5356EB1336BAC2C5C954B5E74 +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +F6F6F6E7E7E7D7D7D7CCCCCCC6C6C6C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C6C6C6CDCDCDD7D7D7E8E8E8F6F6F6 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000 +0000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFE +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B32D5E98346CAF3772B63873B9 +3A76BC3C79C03D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC3 +3D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC3 +3D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC3 +3D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC3 +3D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33C78BF3974B93771B4 +356EB0336BAC2C5C944B5E74EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F0F0F0E6E6E6E0E0E0DDDDDDDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB +DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDDDDDD +E1E1E1E7E7E7F1F1F1F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B3 +2D5E98346CAF3772B63873B93A76BC3C79C03D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC3 +3D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC3 +3D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC3 +3D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC3 +3D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC3 +3D7BC33C78BE3974B93771B4356EB0336BAB2C5C944B5E74EAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFAF6F6F6F3F3F3F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F6F6F6FAFAFAFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA96A4B32D5E98346CAF3771B63873B83A76BC3C78C03D7BC33D7BC33D7BC3 +3D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BCE +A5EAFFE1C0CE3D7BC33D7BC33D7BC33D7BC33D7BC362C0F5FFEAE1627BC33D7BC33D7BC33D7BC3 +3D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC3 +3D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC33D7BC3 +3D7BC33D7BC33D7BC33D7BC33D7BC33C78BE3974B93770B4356EB0336AAB2C5B944B5E74EAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FEFEFEFDFDFDFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFDFDFDFEFEFEFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000000000 +9F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5D98346CAF3771B63872B83A75BC +3C78C03D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC3 +3D7AC33D7AC33D7AC33D7ACEA5EAFFE1BFCE3D7AC33D7AC33D7AC33D7AC33D7AC33DA8ECFFFFEC +847AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC3 +3D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC3 +3D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33C77BE3973B93770B4356DB0 +336AAB2C5B944B5E74EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5D98 +346CAF3771B63872B83A75BC3C78C03D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC3 +3D7AC33D7AC33D7AC33D7AC33D7AC33D7AD7C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFEAE1627AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC3 +3D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC3 +3D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC33D7AC3 +3C77BE3973B93770B4356DB0336AAB2C5B944B5E74EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA96A3B32D5D97346CAE3771B53872B73A75BB3C78BF3D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D91E1E1FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A591C23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23C77BD3973B83770B3356DAF336AAA2C5B934B5E73EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9F +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5D97346CAE3771B53872B73A75BB3C78BF +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7ACDA5EAFFE1BFCD3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23C77BD3973B83770B3356DAF336AAA +2C5B934B5E73EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5D97346BAE +3771B53872B73A75BB3C78BF3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23C77BD +3973B83770B3356DAF336AAA2C5B934B5E73EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA96A3B32D5D97346BAE3771B53872B73A75BB3C78BF3D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23DA8EBFFFFFF +C3A8C23D7AC23D7AC23D7AC23DA8EBFFFFFFC3A8C23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23C77BD3973B83770B3356DAF336AAA2C5B934B5E73EAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5D97346BAE3771B53872B73A75BB3C77BF3D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7ACDA5EAFFFFD5D73D7AC23D7AC23D7AC23D7AC23D7AC284D5FFFFD5D73D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23B77BD3973B83770B3356DAF336AAA2C5B93 +4B5E73EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060 +0000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B32E5D97346CAF3771B5 +3973B93A75BC3C78BF3D79C13D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AD7C3FFFFC3A8C23D7AC23D7AC23D7AC23D7AC23D7AC2 +3DA8EBFFFFEB847AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC2 +3D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23D7AC23C78BF3A74BA +3871B5366DB03369AB2C5B944B5E74EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +96A3B32E5D97346CAE3770B53972B83A75BB3C77BE3D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79D6C3FFFFC3A8C13D79C1 +3D79C13D79C13D79C13D79C13DA8EBFFFFEB8479C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13C77BE3A74B93870B5366DB03369AA2C5B934B5D73EAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA96A3B32E5D97346CAE3770B53972B83A75BB3C77BE3D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C184D5FFFFEAE16279C13D79C13D79C13D79C13D79CCA5EAFFFFEAE16279C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13C77BE3A74B93870B4366DB03369AA2C5B934B5D73 +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000 +0000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32E5D97346CAE3770B53972B8 +3A75BB3C77BE3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D91E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +C3A8C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13C77BE3A74B93870B4 +366DB03369AA2C5B934B5D73EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B3 +2E5D97346CAE3770B53972B83A75BB3C77BE3D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79CCA5EAFFFFFFFF +FFFFFFFFFFFFFFFFEB8479C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13C77BE3A74B93870B4366DB03369AA2C5B934B5D73EAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA96A3B32E5D97346CAE3770B53972B83A75BB3C77BE3D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C13D79C1 +3D79C13D79C13D79C13D79C13D79C13C77BE3A74B93870B4366DB03369AA2C5B934B5D73EAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000000000 +9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5D96346BAD366FB43872B73A74BA +3B76BE3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C90D58390C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C77BE3973B93770B4356CAF +3368A92C5A934B5D73EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5C96 +336BAD366FB43871B73973BA3B76BD3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78D5C3FFFFFFFFFFFFFFFFFFEAE0 +6178C03C78CAA4EAFFE1BECA3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3B76BD3973B8376FB3356CAF3268A92C5A934B5D73EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA96A3B32D5C96336BAD366FB43871B73973BA3B76BD3C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C083D4FF +FFEAE06178C03CA8EAFFEAE06178C03C78C061BEF5FFEAE06178C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03B76BD3973B8376FB3356CAF3268A92C5A934B5D73EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9F +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5C96336BAD366FB43871B73973BA3B76BD +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78D5C3FFFFC3A8C03C78C03CA8EAFFEAE06178C03C78C03CA8EAFFFFEA8378C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03B76BD3973B8376FB3356CAF3268A9 +2C5A934B5D73EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5C96336BAD +366FB43871B73973BA3B76BD3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78D5C3FFF5A490C03C78C03CA8EAFFEAE06178C0 +3C78C03CA8EAFFFFEA8378C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03B76BD +3973B8376FB3356CAF3268A92C5A934B5D73EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFDFDFDFCFCFCFCFCFCFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFCFCFCFCFCFCFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA96A3B32D5C96336BAD366FB43871B73973BA3B76BD3C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78CAA4EAFFFFD4D5 +3C78C03CA8EAFFEAE06178C03C78C083D4FFFFEAE06178C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C03C78C0 +3C78C03C78C03C78C03B76BD3973B8376FB3356CAF3268A92C5A934B5D73EAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFADDE6E8 +82D2E881D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E781D1E7 +81D1E781D1E781D1E781D1E781D1E781D1E781D1E7C2D1D5FAFAFAFDFDFDFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5C95336AAC366EB33870B63973B93B75BC3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C90E0E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3A7BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3B75BC3972B7376EB2356BAE3267A82C5992 +4B5D73EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF9F9F9F2F2F2B9CCD12F9BB863F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF +63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF63F0FF39A8C19BA8ACF2F2F2 +F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F484848A7A7A7 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060 +0000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5B95336AAC366EB3 +3870B63972B93B75BC3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77D5C3FFFFFFFFFFFFFFFFFFFFFFFFFFF4 +A490BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3B75BC3972B7 +376EB2356BAE3267A82C59924B5D73EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7E9E9E9AEC1C62C92AF3DB4D289FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF89FFFF +53C4D82887A2929FA3E9E9E9F7F7F7FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C7 +383838000000000000101010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +96A3B32D5B95336AAC366EB33870B63972B93B75BC3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3B75BC3972B7376EB2356BAE3267A82C59924B5D73EAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF3F3F3E1E1E1A5B8BD2C92AF +33ABCC3FBCDB7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF7CFFFF +7CFFFF7CFFFF7CFFFF50CBE031A4C42887A28B989CE1E1E1F3F3F3FBFBFBFEFEFEFFFFFFFFFFFF +FFFFFFE7E7E7585858000000000000000000000000505050FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5B95336AAC366EB33870B63972B93B75BC3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3B75BC3972B7376EB2356BAD3267A82C59924B5D73 +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +F2F2F2DDDDDDA0B3B82C92AF33ABCC36B3D63FBEDE6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF +6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF6BF1FF4BCAE334ACCE31A4C42887A2879498DDDDDDF2F2F2 +FAFAFAFEFEFEFFFFFFF7F7F7878787101010000000000000000000101010878787F7F7F7FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000 +0000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5B95336AAC366EB33870B6 +3972B93B75BC3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3CA7EAFFFFFFC3A7BF3C77CAA4E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFEA8377BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3B75BC3972B7376EB2 +356BAD3267A82C59924B5C73EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB2B72C92AE33ABCC36B3D538B6D83EBEE05ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE +5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE5ADEFE46C6E636B1D334ACCD31A4C3 +2887A1869397DCDCDCF1F1F1FAFAFAFEFEFEB7B7B7202020000000000000000000000000585858 +E7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B3 +2D5B95336AAC366EB33870B63972B93B75BC3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3CA7EAFFFFFFC3A7BF3C77D5C3FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4D53C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF3C77BF +3C77BF3B75BC3972B7376EB2356BAD3267A82C59914B5C73EAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB2B72C92AE33ABCB +36B3D538B6D839B9DB3FC0E448CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF +48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF +48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF +48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF +48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF +48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF +48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF +48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF +48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF +48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF +48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF +48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF +48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF +48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF48CCEF41C2E5 +38B6D836B1D234ACCD31A4C32887A1869397DCDCDCF1F1F1D3D3D3484848000000000000000000 +0000000000004848487F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3030300000000000009F9F9FFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA96A3B32D5B94336AAB366EB23870B53972B83B75BB3C77BE3C77BE3C77BE +3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE +3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE61BEF4FFFFEA8377BE +3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE +3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE +3C77BE3C77BE3C77BE3C77BE3C77BE3B75BB3972B6376EB1356BAC3267A72C59914B5C72EAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 +DCDCDC9FB2B72C92AE33ABCB36B3D538B6D839B9DC3BBCDF3CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23BBBDE38B6D836B1D234ACCD31A4C32887A1869397CECECE717171000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +9F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEF0F5E7F0F4E7F0F4E7EFF4E6EEF3E5E0E9CEE1EACEE1EBCFE2EBCFE1EACE +E0E9CEEEF2E5EDF2E5EEF2E5FDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A3B32D5B94336AAB366EB23870B53972B8 +3B75BB3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE +3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE +3C77BE3CA7EAFFFFEA8377BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE +3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE +3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3C77BE3B75BB3972B6376EB1356BAC +3267A72C59914B5C72EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB2B72C92AD33AACA36B2D438B5D739B9DB3BBCDE3CBEE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13BBBDD39B6D736B1D134ACCC31A3C22887A0 +869397CECECE717171080808000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000C7C7C7FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEEEF3E6E2EBCFD6E4B9CCE0A3D1E7A6 +C8E391BDDD7BC0E17DB6DC68AAD653AFDB56B3E058B7E55BB9E75CBAE85DBBE95EBDEB5FBEEC60 +BFED61C1EE62C1EF62BFED61BDEB5FBBE95DB8E65CB6E45AB4E159B1DE57AFDB56BBE36CB9E06A +B7DE69B4DA68B2D867BCDD7BC5E090BED78DD7E6B9E2ECCFE0E9CFFDFDFDFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A2B32D5B94 +3369AB366DB2386FB53971B83B74BB3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE +3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE +3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE +3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE +3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE +3B74BB3970B6376DB1356AAC3266A72C58914B5C72EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B72D91AD34AACA37B2D3 +39B5D73AB8DA3CBBDE3DBEE03DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13CBADC39B5D7 +37B0D135ABCB32A3C22986A0869397DCDCDCF1F1F1DBDBDB484848000000000000000000000000 +0000003838387F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FB7B7B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFEFEFEFEFEFEFDFDFDF0F5E7D6E4B9CCE0A4D2E7A7BBDB7BB4D969AED956B6E35C +BFEC61C6F367CDF86DD3FB74D8FD79DBFD7CDEFE7FE1FF83E5FF86E8FF89EAFF8CEDFF8FEEFF90 +EFFF91F0FF92F0FF92F1FF93F2FF93F2FF94F2FF95F1FF93F0FF92EFFF91EDFF8FECFF8DEAFF8B +E8FF8AE7FF88E5FF86E3FF84E1FF82E0FE81DEFE7FDBFD7BD5FB75CFF96FC8F469C2EF64BAE85E +B3E059BBE16CB3D868BADA7AC3DD8FCBDFA3E3ECD0FDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA96A2B32D5B943369AB366DB2386FB53971B83B74BB3C76BE3C76BE3C76BE3C76BE +3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE +3C8FDFE1FFFFFFFFFFFFFFFFFFFFFFFFE9DF6176BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE +3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE +3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE3C76BE +3C76BE3C76BE3C76BE3C76BE3B74BB3970B6376DB1356AAC3266A72C58914B5C72EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC +9FB1B62D91AC34AAC937B2D339B5D63AB8DA3CBBDD3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03CBADC39B5D637B0D035ABCB32A3C129869F869396DCDCDCF1F1F1FAFAFAFEFEFE +B7B7B7282828000000000000000000000000484848DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFEFEFEFDFDFDE1EAD0CBDEA3C5E090A7D152B7E35CC5F266CDF86ED3FA74 +DAFD7BE0FE81E6FF87EBFF8DF1FF93F4FF97F7FF9AFAFF9CFBFF9EFBFF9EFBFF9EFBFF9EFAFF9D +F9FF9DF8FF9CF7FF9BF7FF9AF6FF9AF6FF99F5FF99F5FF98F4FF98F4FF98F4FF97F4FF98F5FF98 +F5FF99F6FF99F7FF9AF7FF9AF8FF9BF8FF9BF9FF9CF9FF9CF9FF9CF9FF9CF9FF9DFAFF9CF9FF9B +F8FF9AF5FF97F1FF93EDFF8FE8FF89E2FE83DCFE7ED7FC78D1FA72CBF66CBFED62B1DD57B2D767 +C1DA8ED5E3B8DFE8CFFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A2B22D5B943369AA366DB1386FB43971B73B74BA +3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD +3C76BD3C76BD3C76BD3CA6E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A48FBD3C76BD +3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD +3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD +3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3B74BA3970B5376DB1356AAC3266A7 +2C58904B5C72EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFAF1F1F1DCDCDC9FB1B62D91AC34A9C937B1D239B4D53AB7D93CBADC3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3CB9DB39B4D537AFD035ABCA32A2C029869F869396 +DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFF8F8F8F101010000000000000000000080808787878 +EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDC4D6A0B7D579ADD856BCE95FC8F56AD3FB75DEFE80 +E9FF8CF2FF95F6FF99F8FF9BF9FF9CF9FF9CF8FF9BF6FF99F4FF97F2FF95F0FF94EEFF91ECFF90 +EAFF8FE9FF8EE8FF8DE7FF8CE6FF8BE5FF8AE5FF89E4FF89E4FF88E3FF88E3FF87E2FF87E2FF87 +E1FF86E1FF86E2FF86E2FF87E3FF87E4FF88E4FF88E5FF89E5FF89E6FF8AE6FF8BE7FF8BE8FF8C +E8FF8CE9FF8DEAFF8EECFF90EEFF92EFFF93F1FF94F2FF96F4FF97F5FF98F5FF99F6FF99F5FF97 +F3FF96ECFF8FE2FE85D7FC78CCF76DC0EE63B4E05AB5DB68B5D478E1EACEFDFDFDFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A2B22D5B933369AA +366DB1386FB43971B73B74BA3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD +3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76C8A4E9FFFFE9DF6176BD3C76BD3C76BD3C76BD +3C76C8A4E9FFFFD4D43C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD +3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD +3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3B74BA +3970B5376DB0356AAB3266A62C58904B5C72EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B62C90AB33A8C836B0D138B3D4 +39B6D83BB9DB3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3BB8DA38B3D436AECF +34A9C931A1BF28859E869396DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFEFEFEF707070 +000000000000000000000000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEDF1E5CBDFA3A1CA4FBAE85ECEF871E0FF83 +E9FF8DF0FF94F5FF98F6FF9AF3FF98F0FF94EDFF92EBFF90E9FF8EE7FF8CE5FF8AE3FF88E1FF86 +DFFF84DDFF82DAFF80D9FF7ED7FF7DD6FE7CD5FE7BD4FE7AD3FD79D2FC78D1FC77D0FC77D0FC77 +D0FB76CFFB76CFFB76CEFB75CEFA75CEFA74CEFA75CFFB75D0FB76D0FC76D1FC77D1FC78D2FD78 +D3FD79D3FD79D4FE7AD4FE7AD5FE7BD5FE7BD7FF7DD9FF7FDBFF81DDFF83DFFF84E0FF86E2FF87 +E3FF88E5FF8AE6FF8BE8FF8DEAFF8FEDFF92EFFF94EFFF94EEFF92E8FF8CE0FE84D6FC7AC9F66D +B3DF59AACE62C2D39FFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA96A2B22C5B933369AA366DB1376FB43971B73B74BA3C76BD3C76BD3C76BD3C76BD3C76BD +3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76D4C3FFFFC3A6BD +3C76BD3C76BD3C76BD3C76BD3C76BD3CA6E9FFFFE98376BD3C76BD3C76BD3C76BD3C76BD3C76BD +3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD +3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD3C76BD +3C76BD3C76BD3C76BD3B74BA3970B5366DB0346AAB3266A62B58904B5C72EAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B6 +2C8FAA33A7C736AFD038B2D339B5D63BB8DA3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3BB7D938B2D336ADCD34A8C831A0BE28849D869396DCDCDCF1F1F1FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFCFCFCF404040000000000000101010FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEDDE5CDA9CD62BDEB61 +D0F974E2FF85EEFF92F1FF95EEFF92EBFF90E8FF8DE5FF8AE2FF87DEFF84DBFF81D9FF7FD7FF7D +D5FE7BD3FD79D1FC77CFFB75CDF973CAF771C8F56FC6F36DC5F16CC4F06BC3EF6AC2EE69C1ED68 +C0EC67BFEB66BEEA65BDEA65BDEA65BDE964BCE964BCE864BBE863BBE863BCE863BDE964BDE964 +BEEA65BEEB66BFEB66C0EC67C0ED67C1ED68C2EE69C2EE69C3EF6AC3F06AC5F16CC7F46EC9F670 +CBF772CDF973CFFB75D1FC77D2FD78D4FD7AD5FE7BD7FE7CD9FF7FDDFF82E0FF85E2FF88E4FF89 +E6FF8BE8FF8DE9FF8EE8FF8CD8FD7DC3F068B1DC59A4C75FE8EBE2FEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5B933269AA356DB1376FB43871B73A74BA3B76BD +3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD +3B76BD3B76D4C3FFFFC3A6BD3B76BD3B76BD3B76BD3B76BD3B76BD3BA6E9FFFFE98276BD3B76BD +3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD +3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD +3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3A74BA3870B5366DB0346AAB3166A62B5890 +4B5C72EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFAF1F1F1DCDCDC9FB1B62C8FAA33A6C636AECF38B1D339B4D63BB8DA3CBADD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBADD3BB7D838B2D336ADCD34A8C831A0BE28849D869396DCDCDC +F1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF606060B7B7B7 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FBFBFBA0BA6CB6E15ED7FC7BE7FF8BE8FF8DE7FF8CE1FF87DDFF83DAFF81D8FF7ED5FD7BD1FB78 +CDF974C9F570C7F36EC5F16CC3EF6BC1EC69BFEA66BDE864BAE662B8E360B6E15EB4DF5CB3DE5B +B1DD5AB0DB59AFDA58AED957ADD856ACD755ACD755ACD654ABD654ABD654ABD654ABD553ABD553 +AAD553ABD553ABD654ACD654ACD755ACD755ADD856AED856AED957AFD957AFDA58B0DB58B0DB59 +B1DC59B3DE5BB5E05DB7E25FB9E461BBE663BDE865BFEA67C1EC68C3EE6AC4F06BC6F16DC8F46F +CCF873D0FB76D3FD7AD5FE7CD7FF7ED9FF7FDBFF81E0FF86E4FF89DDFE83CDF7739FC64C768C49 +FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5B933269AA356DB1 +376FB43871B73A74BA3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD +3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD82D4FFFFE9DF6076BD3B76BD3B76BD3B76BD3B76C8 +A4E9FFFFE9DF6076BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD +3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD +3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3B76BD3A74BA3870B5 +366DB0346AAB3166A62B58904B5C72EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B62C8EA933A5C535ADCE37B0D239B3D5 +3AB6D83CB9DB3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DB3AB5D738B1D236ACCC34A7C7 +319FBD28839C869396DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFBFBFBE3E6DD7B9A3A9AC14BBBE364D8FE7DDDFF83D8FF7ED1FB78CDF874 +CAF571C7F26FC3EE6BBFEA67BBE664B8E260B5E05EB3DD5CB1DB5AAFD958ADD756ABD554AAD453 +A9D352A8D151A7D150A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D150A8D151A8D251A9D352AAD453ACD655ADD756AFD958 +B1DB5AB3DD5CB4DF5DB8E260BBE664BFEA67C3EE6BC6F16EC8F370CAF572CDF874D2FC79D8FF7E +D4F77CB0D75C8AAE41586E2AF6F6F6FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +95A2B22C5B933269A9356DB0376FB33871B63A74B93B76BC3B76BC3B76BC3B76BC3B76BC3B76BC +3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B8FDEE1FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3A6BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC +3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC +3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC +3B76BC3B76BC3A74B93870B4366DAF346AAA3166A52B588F4B5C72EAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B62B8DA8 +32A4C435ACCD37AFD038B2D43AB5D73BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3AB4D637AFD035ABCB33A6C5309EBC27829B869296DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8DEE1D87A993A92B7449CC449A7CF52 +BFEA67C8F370C2EC6ABCE664B9E362B5DF5EB1DB5AADD757AAD454A8D252A7D151A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D151A9D252ABD454AED857B2DC5BB6E05FB9E362 +BBE564BEE967C4EF6CBAE464A1C94F95BB4687A93F586E2AEFEFEFF8F8F8FEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5B933269A9356DB0376FB33871B63A74B93B76BC3B76BC +3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC +3B76BC3B76BC3B76D3C3FFFFFFFFFFFFFFFFFFFFFFFFFFF4A48FBC3B76BC3B76BC3B76BC3B76BC +3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC +3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC +3B76BC3B76BC3B76BC3B76BC3B76BC3B76BC3A74B93870B4366DAF346AAA3166A52B588F4B5C72 +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +F1F1F1DCDCDC9FB0B52B8CA732A4C335ACCC37AFCF38B2D33AB5D63BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93AB4D537AFCF35AACA33A5C4309DBB27829A869296DCDCDCF1F1F1 +FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5D8DAD2 +79983991B6439CC3499FC74BA2CB4DAFD858B1DB5AABD555A9D152A7CF50A6CE4FA6CE4FA6CE4F +A6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4F +A6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4F +A6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4F +A6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4F +A6CE4FA6CF50A7D051A9D253ABD455AFD858ADD6579EC54A9AC14894BA4586A83E576D2AE9E9E9 +F5F5F5FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5A933268A9356CB0376EB3 +3870B63A73B93B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC +3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC +3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC +3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC +3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3A73B9386FB4366CAF +3469AA3165A52B588F4B5C72EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB0B52B8BA632A3C235ABCB37AECE38B1D13AB4D5 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83AB3D437AECE35A9C933A5C3309CBA +278199869296DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF3F3F3D4D6CE79973990B5439BC2489EC64BA1C94DA3CB4EA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA4CC4FA0C84C9DC44A99BF48 +93B94585A73E576C2AE4E4E4F3F3F3FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B2 +2C5A933268A9356CB0376EB33870B63A73B93B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC +3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC +3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC +3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC +3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC +3B75BC3A73B9386FB4366CAF3469AA3165A52B578F4B5C72EAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EB0B52A8AA531A2C1 +34A9C936ACCD37AFD039B2D33AB5D63AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D639B1D2 +36ADCD34A8C732A3C22F9BB8278098869295DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFDFDFDFEFEFEFEFEFE +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1D2D4CC78973890B4429AC1489EC54AA0C84C +A2CA4DA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A3CC4EA0C74C9CC34998BF4793B84485A73D576C29E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA95A2B22C5A923268A9356CAF376EB23870B53A73B83B75BB3B75BC3B75BC +3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75C8 +A4E9FFE1BDC83B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC +3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC +3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC +3B75BC3B75BC3B75BC3B75BC3B75BC3A73B9386FB3366CAE3469AA3165A52B578F4B5C72EAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 +DCDCDC9EB0B52A8AA431A1BF34A9C836ACCB37AFCF39B2D23AB4D53AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D539B1D136ACCC34A7C632A2C12F9AB7277F98869295DCDCDCF1F1F1FAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC +9C9C9C0808084E4E4ECBCBCBFCFCFCFEFEFEFEFEFEFFFFFFFFFFFFFCFCFCF1F1F1D1D3CB779538 +8EB24298BF479CC4499EC74BA0C94CA2CA4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4E +A2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4E +A2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4E +A2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4E +A2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4EA2CB4E +A2CB4EA2CB4EA2CB4EA2CB4EA1CA4D9EC64B9AC14996BD4691B64383A53D556B29E1E1E1F1F1F1 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5A923268A8356CAF376EB23870B5 +3A73B83B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75D2C3FFFFC3A6BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3A73B8386FB3366CAE3469A9 +3165A42B578E4B5C71EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEB2F2F2F080808757575EBEBEBFDFDFDFEFEFE +FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EB0B52A89A331A1BE34A8C736ABCA37AECE39B1D13AB3D4 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D55FDBF8FFFFF182B4D53AB4D582E7FFFFFFF182B4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D55FDBF8FFFFF182B4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB4D5 +3AB4D53AB4D53AB4D53AB4D53AB4D53AB4D53AB3D439B0D036ABCB34A7C532A2C02F9AB6277F97 +869295DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFDFDFDF8F8F82D2D2D000000000000000000646464E2E2E2FCFCFCFEFEFEFFFFFF +FCFCFCF1F1F1D0D3CB7695378DB24197BF469BC3499EC64AA0C84CA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA0C94D9DC54A9AC14896BC4690B643 +83A53C556B29E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5A92 +3268A8356CAF376EB23870B53A73B83B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB82D3FFFFFFE98275BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +3A73B8386FB3366CAE3469A93165A42B578E4B5C71EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBBEBEBE000000000000 +000000171717929292FBFBFBFDFDFDFDFDFDFAFAFAF1F1F1DCDCDC9EB0B42A89A230A0BD33A7C6 +35AAC937ADCD38B0D039B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339C0E9E1FFFFFFFFFFFFFFFFFFFFFFFFFFF181B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D35FDAF7FFFFF181B2D339B2D381E6FFFFFFF1 +81B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D35FDAF7FFFFFFFFFFFFFFFFFFFFE6E1 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +5FDAF7FFFFF181B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D338AFCF36AAC9 +34A6C431A1BF2E99B5277E96869295DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1959595000000000000000000000000 +0F0F0F828282F2F2F2FDFDFDFBFBFBF1F1F1D0D3CB7594378CB14196BD469AC2489DC54A9EC74B +A0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D +A0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D +A0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D +A0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D +A0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94DA0C94D9FC84C +9CC44A98BF4895BB468FB44281A33C546A28E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA95A2B22C5A923268A8356CAF376EB23870B53A73B83B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +82D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DE6075BB3B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75BB3A73B8386FB3366CAE3469A93165A42B578E4B5C71EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F7F7F7EBEBEB4D4D4D0000000000000000000000002D2D2DBABABAFAFAFAF8F8F8F0F0F0DCDCDC +9EB0B42987A1309EBC33A6C535A9C836ACCB38AFCF39B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D15FD9F7FFFFFFC2CCD139B1D139B1D139B1D181E6FF +FFFFFFC2CCD139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D15FD9F7FFFFF0 +81B1D139B1D139B1D139B1D139B1D139B1D139BFE8E1FFFFC2CCD139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D181E6FFFFFFF7 +A3BFD139B1D139B1D181E6FFC2CCD139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D15FD9F7FFFFF081B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D138AECE35A9C833A4C331A0BE2E98B4267D94869295DCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9EDEDEDDCDCDC +A6A6A63131310000000000000000000000001E1E1EAAAAAAF8F8F8EFEFEFCFD2CA7492378BAF40 +95BC4598C0489BC3499DC54B9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC64B9AC24997BE4793BA458EB34280A23B546928E1E1E1F1F1F1FCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5A923268A8356CAF376EB23870B53A73B8 +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75D2C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE98275BB +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB +3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3A73B8386FB3366CAE3469A93165A4 +2B578E4B5C71EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFCFCFCF4F4F4E6E6E6D3D3D3888888181818000000000000000000000000 +545454DDDDDDEEEEEEDBDBDB9EB0B42987A0309EBB33A5C334A8C736ABCA38AECD39B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039CCF0FFFFFFC2CCD039B1D0 +39B1D039B1D039B1D039B1D081E6FFFFFFF081B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D05FD9F7FFFFF081B1D039B1D039B1D039B1D039B1D039B1D039BFE8E1FFFFC2CCD0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1E0C2FFFFFFE6E039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D05FD9F7FFFFF081B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D037ADCC35A9C733A4C231A0BC2E97B3267D94869295 +DBDBDBF0F0F0F9F9F9FDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD385C89385C89FDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFC +FBFBFBF7F7F7EDEDEDDCDCDCCACACABEBEBE8080801818180000000000000000000000003C3C3C +BFBFBFCED1C974903689AD4094BA4598BE479AC1499CC44A9EC64C9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C +9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9EC64C9DC54B9AC14996BD4793B8458DB24180A13B +536828E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5A913268A7 +356CAE376EB13870B43A73B73B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9 +3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9 +3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9 +3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9 +3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93A73B7 +386FB2366CAC3469A73164A22B568C4A5B70E7E7E7F5F5F5FAFAFAFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFAFAFAF4F4F4E6E6E6D4D4D4C4C4C4B4B4B4 +626262060606000000000000000000070707747474D1D1D19DAEB329859E2F9DBA32A4C234A7C6 +35AAC937ADCC38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +80E5FFFFFFEF80B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38CBEFFFFFFFC2CBCF38B0CF38B0CF +80E5FFFFFFEF80B0CF38B0CF38B0CF38B0E0C2FFFFE1D8D738B0CF38B0CF38B0CF5ED8F7FFFFFF +FFFFFFFFFFFFFFE5E038B0CF38B0CF38B0CF5ED8F7FFFFEF80B0CF38B0CF5ED8F7FFFFEF80B0CF +80E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E7A2E5FFFFFFEF80B0CF38B0CF38B0CF38B0CF38CBEF +FFFFF7A2BDCF38B0CF38B0CF38B0CF38B0E0C2FFFFFFE5E038B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38BDE7E1FFFFFFFFFFFFFFFFFFFFFFC2CBCF38B0CF38B0CF38B0CF5ED8F7 +FFFFEF80B0CF80E5FFFFFFEF80B0CF38B0CF38B0CF38B0CF38CBEFFFFFFFC2CBCF38B0CF38B0CF +38BDE7E1FFFFFFFFFFFFFFFFFFF2E75EB0CF38B0CF38B0CF5ED8F7FFF2E75EBDE7E1FFFFFFFFFF +C2CBCF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF36ACCB34A8C532A3C0 +309EBB2D96B2257C93859194C5C5C5B2B2B2B8B8B8BABABABBBBBBBBBBBBBBBBBBBBBBBBBBBBBB +BBBBBB9393937C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C +7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B +7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B +7B7B7B5555553E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E +3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3838383434343030302E2E2E272727000000 +00000000000000000000000000000052535066803088AC3F92B84496BD4699C0489BC24A9CC44B +9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B +9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B +9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B +9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B +9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9CC34A99C048 +95BB4691B7448CB1417FA03A536727E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA95A2B12C5A913268A7356CAE376EB13870B43A73B73B75B93B75B93B75B93B75B93B75B9 +3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9 +3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9 +3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9 +3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9 +3B75B93B75B93B75B93A73B7386FB1356BAB193352000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000131313646F72 +27839C2F9BB831A3C133A6C435A9C836ACCB38AECD38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFDEC2FFFFFFE5DE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFDE +C2FFFFFFE5DE38AFCE38AFCE80E5FFFFFFEF80AFCE38AFCE38AFCE38AFDEC2FFFFE1D8D638AFCE +38AFCE80E5FFE1D8D638AFCE38AFCE38CAEFFFFFFFE1D8D638AFCE38AFCE5ED8F7FFFFEF80AFCE +38AFCE5ED8F7FFFFEF80AFCE38AFCE38BDE7E1FFFFC2CACE38AFCE38AFCE38CAEFFFFFFFC2CACE +38AFCE38AFCE38AFCE80E5FFFFF2E75EAFCE38AFCE38AFCE38AFCE38AFCE80E5FFFFFFFFFFE5DE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38CAEFFFFFFFE1D8D638AFCE38AFCE38CAEFFFFFFF +E1D8D638AFCE38AFCE5ED8F7FFFFEF80AFCE38CAEFFFFFFFC2CACE38AFCE38AFCE38AFCE80E5FF +FFFFEF80AFCE38AFCE38CAEFFFFFFFE1D8D638AFCE38AFD6A2F2FFFFFFEF80AFCE38AFCE5ED8F7 +FFFFFFFFFFEF80AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AECD36ABCA34A6C432A2BF309DBA2D95B1257B91849093848484000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000708035F772B90B642 +94BB4597BF479AC1499BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9AC24A97BE4794BA4590B5438BAF407D9E3A516627E1E1E1F1F1F1FCFCFCFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B59913267A7346BAE366DB1376FB43972B73A74B9 +3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 +5FBCF3FFFFFFFFFFFFFFFFFFE1BCC53A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 +3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 +3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 +3A74B93A74B93A74B93A74B93A74B93A74B93A74B93972B7376DB13468A818314F000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000B242A2C94AF31A1BF32A5C334A8C636ABCA37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC36ADDDC1FFFFFFE4DD37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC36ADDDC1FFFFFFE4DD37ADCC37ADCC80E4FFFFFFEE80ADCC37ADCC37ADCC +36ADDDC1FFFFE1D7D537ADCC37ADCC37ADCC37ADCC37ADCC37ADCC36ADD5A2F2FFFFE4DD37ADCC +37ADCC5DD7F7FFFFEE80ADCC37ADCC5DD7F7FFFFEE80ADCC37ADCC36BBE6E1FFFFC1C9CC37ADCC +37ADCC36ADD5A2F2FFFFE4DD37ADCC37ADCC36ADDDC1FFFFE1D7D537ADCC37ADCC37ADCC37ADCC +37ADCC36ADD5A2F2FFFFFFFFFFFFFFFFE4DD37ADCC37ADCC37ADCC36ADD5A2F2FFFFE4DD37ADCC +37ADCC37ADCC37ADCC80E4FFFFF2E65DADCC37ADCC5DD7F7FFFFEE80ADCC36ADD5A2F2FFFFE4DD +37ADCC37ADCC36ADDDC1FFFFE1D7D537ADCC36ADD5A2F2FFFFE4DD37ADCC37ADCC37ADCC36BBE6 +E1FFFFC1C9CC37ADCC5DD7F7FFFFFFC1C9CC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC35AAC833A5C331A1BE2F9CB92C93AF247A8F808C8F7F7F7F +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +1B1C1B485C2280A13B8EB24293B94597BD4799BF499AC14A9BC24A9BC24A9BC24A9BC24A9BC24A +9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A +9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A +9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A +9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A +9BC24A9BC24A9BC24A9BC24A9BC24A9BC24A9AC04996BC4793B8458FB4438AAE407D9D39516627 +E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B59913167A7346BAE +366DB1376FB43972B73A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 +3A74B93A74B93A74B95FBCF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D03A74B93A74B93A74B9 +3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 +3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 +3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93972B6366CAF +3266A4172E4B000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000373E3F226E822C95B0309FBD32A3C134A7C5 +36AAC937ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB36ACDCC1FFFF +FFE4DC37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB36ACDCC1FFFFFFE4DC37ACCB37ACCB80E4FF +FFFFEE80ACCB37ACCB37ACCB36ACDCC1FFFFE1D6D437ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +36ACD4A2F2FFFFF2E65DACCB37ACCB5DD6F7FFFFEE80ACCB37ACCB5DD6F7FFFFEE80ACCB37ACCB +36BAE6E1FFFFC1C8CB37ACCB37ACCB37ACCB5DD6F7FFFFF7A2BACB37ACCB36C8EEFFFFF7A2BACB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB36ACD4A2F2FFFFFFFFFFFFF7A2BACB37ACCB +36BAE6E1FFFFE1D6D437ACCB37ACCB37ACCB37ACCB5DD6F7FFFFF7A2BACB37ACCB5DD6F7FFFFEE +80ACCB37ACCB5DD6F7FFFFEE80ACCB37ACCB36BAE6E1FFF7A2BACB37ACCB36ACDCC1FFFFE1D6D4 +37ACCB37ACCB37ACCB36ACDCC1FFFFE1D6D437ACCB5DD6F7FFFFEE80ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB35A9C733A4C2319FBD2F9BB8 +2C92AE23788E7E8A8C8C8C8C323232313131313131303030303030303030303030303030303030 +4F4F4F606060606060606060606060606060606060606060606060606060606060606060606060 +6060606060606060606060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F +5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F152233152233 +7C7C7C8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E +8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8B8B8B8B8B8B888888838383353535000000000000 +0000000000000505055D5D5D9FA19B617A2D7D9C398BAF4092B74395BB4697BE4899C04999C049 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C049 +99C04999C04999CAA9EEFFFFDED54999C04999C04999C04999C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04998BF4895BB4692B744 +8EB24289AC3F7B9C39516526E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +95A2B12B59913167A7346BAD366DB0376FB33972B63A74B93A74B93A74B93A74B93A74B93A74B9 +3A74B93A74B93A74B93A74B93A74B93A74B93A74C5A3E9FFFFD3D03A74B93A74B93A74B93AA5E8 +FFFFF3A38DB93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 +3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 +3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9 +3A74B93A74B93972B5366BAD3164A12C5B9226508220426B374454ADADADB7B7B7BBBBBBBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBBBBBBBBBBBBBBBBBB +BABABAB7B7B7B3B3B38C8C8C2A2A2A00000000000000000000000025252587878782909323758B +2B91AC2F9DBA32A2C033A5C435A8C736ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABDCC1FFFFFFE4DC36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABDCC1FFFF +E1D6D336ABCA36ABCA80E4FFFFFFED80ABCA36ABCA36ABCA36ABDCC1FFFFE1D6D336ABCA36ABCA +36ABCA80E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E55DABCA36ABCA5DD6F7FFFFED80ABCA36ABCA +5DD6F7FFFFED80ABCA36ABCA36B9E5E1FFFFC1C8CA36ABCA36ABCA36ABCA36B9E5E1FFFFE1D6D3 +36ABCA80E4FFFFF2E55DABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36B9E5E1FFFFFFF2E55DABCA36B9E5E1FFFFC1C8CA36ABCA36ABCA36ABCA36ABCA36C8EDFFFFF7 +A2B9CA36ABCA5DD6F7FFFFED80ABCA36ABCA36B9E5E1FFFFC1C8CA36ABCA5DD6F7FFF2E55DABCA +36ABCA36B9E5E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D6D336ABCA5DD6F7FFFFED +80ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +34A7C632A3C1309EBC2E9AB72B91AD23778C7D888BC1C1C1C3C3C3BEBEBEBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBDBDBDBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE +BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE +BEBEBEBEBEBE2A45672A4567BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE +BEBEBEBEBEBEBFBFBFC0C0C0C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0C0C0BDBDBD8B8B8B +2222220000000000000000000000003A3A3A9E9E9EB2B2B2A7A9A3617A2D7D9D398BAF4091B643 +94BA4696BC4898BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998CAA9EEFFFFDED54998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4997BE4894BA4690B6448DB14288AB3F7B9B39506426E1E1E1F1F1F1FCFCFCFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA95A2B12B59903167A6346BAD366DB0376FB23972B63A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74D0C2FFFFC2A5B8 +3A74B83A74B83A74B83A74D0C2FFFFC2A5B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83A74B83972B5366CAE3265A22D5B9327528521446D384656 +B1B1B1BCBCBCBFBFBFC1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C0C0C0BEBEBEAFAFAF4F4F4F0000000000000000000000000F0F0F6E6E6E +ABABABA9A9A984929623768C2B91AC2F9DBA31A1BE33A4C335A7C636AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAD3A2F2FFFFF2E55DAAC936AAC936AAC936AAC9 +36AAC936AAC936C8EDFFFFFFC1C8C936AAC936AAC980E3FFFFFFED80AAC936AAC936AAC936AADB +C1FFFFE1D5D336AAC936AAD3A2F2FFFFFFED80AAC936AAC936AAD3A2F2FFFFF2E55DAAC936AAC9 +5DD5F6FFFFED80AAC936AAC95DD5F6FFFFED80AAC936AAC936B9E5E1FFFFC1C8C936AAC936AAC9 +36AAC936AAD3A2F2FFFFF2E55DAADBC1FFFFE1D5D336AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC980E3FFFFFFED80AAC936B9E5E1FFFFE1D5D336AAC936AAC9 +36AAC936AAC95DD5F6FFFFF6A2B9C936AAC95DD5F6FFFFED80AAC936AAC936AAD3A2F2FFE1D5D3 +36AAD3A2F2FFE1D5D336AAC936AAC936AADBC1FFFFE1D5D336AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC95DD5F6FFFFED80AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC934A6C532A2BF309DBA2E99B52B90AB23768D7F8A8DC7C7C7CDCDCD +CCCCCCCBCBCBCACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACA +CACACACACACACACACACACACACACACACACACACACACACACACACACACACBCBCBCCCCCCCDCDCDCFCFCF +D0D0D0D0D0D0D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 +D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D12E4C712E4C71D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 +D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D2D2D2D4D4D4D5D5D5D6D6D6D7D7D7D7D7D7D6D6D6 +D5D5D5C4C4C44646460000000000000000000000001A1A1A808080B3B3B3BDBDBDC3C3C3B3B5AF +65802F7F9F3A8BB04090B64393B94595BC4797BE4897BE4897BE4897BE4897BE4897BE4897BE48 +97BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE48 +97BE4897BE4897BE4897BE4897C9A9EEFFFFFFFFFFFFFFFFFFFFFFDDD44897BE4897BE4897BE48 +BBEAFFFFFFC7BBBE4897BE4897BE4897BE8ADDFFFFEEDF6A97BE48BBEAFFFFFFFFFFFFFFFFFFFF +FFFFFFFFF4A9A9BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE48 +97BE4897BE4897BE4897BE4897BE4896BD4893B94590B5438CB04187AB3E7A9A384F6426E1E1E1 +F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B59903167A6346BAD366DB0 +376FB23972B63A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 +3A74B83A74D0C2FFFFC2A5B83A74B83A74B83A74B83A74D0C2FFFFC2A5B83A74B83A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83972B5366DAF3367A5 +2F609A2A588F244A793E4E5FC5C5C5D1D1D1D5D5D5D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D3D3D38080800C0C0C000000000000000000 +050505505050A9A9A9B5B5B5BBBBBBB8B8B88D9C9F2579902C93AF309DBA31A1BE33A4C135A7C5 +36A9C736AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC85DD5F6FFFFFF +C1C8C836AAC836AAC836AAC836AAC836AAD2A2F2FFFFF2E45DAAC836AAC836AAC85DD5F6FFFFED +80AAC836AAC836AAC836B9E4E1FFFFE1D5D236AAC836B9E4E1FFFFE1D5D236AAC836AAC836AAD2 +A2F2FFFFF2E45DAAC836AAC85DD5F6FFFFED80AAC836AAC85DD5F6FFFFED80AAC836AAC836B9E4 +E1FFFFC1C8C836AAC836AAC836AAC836AAC85DD5F6FFFFF6A2D5EDFFFFF6A2B9C836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC880E3FFFFFFED80AAC836AAD2 +A2F2FFFFE3DB36AAC836AAC836AAC836AAC880E3FFFFF2E45DAAC836AAC85DD5F6FFFFED80AAC8 +36AAC836AAC85DD5F6FFF2E45DB9E4E1FFF6A2B9C836AAC836AAC836AAD2A2F2FFFFE3DB36AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC85DD5F6FFFFED80AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836A9C834A6C432A1BE309DB92E99B42B91AC +24778D828E91D1D1D1DDDDDDE1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2 +E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2 +E3E3E3E3E3E3E5E5E5E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 +E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E733547D33547DE7E7E7 +E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E9E9E9EAEAEAECECEC +ECECECEDEDEDECECECEBEBEBE7E7E74D4D4D0000000000000000000B0B0B626262B2B2B2BBBBBB +C8C8C8D3D3D3D7D7D7C2C4BD69853180A23B8BB0408FB54392B84494BA4695BC4796BD4896BD48 +96BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD48 +96BD4896BD4896BD4896BD4896BD4896BD4896BD4896D4C7FFFFFFEEDF6A96BD4896BD4896D4C7 +FFFFFFEEDF6A96BD4896BD48BAE9FFFFFFC7BABD4896BD4896BD4896BD8ADDFFFFEEDF6A96BD48 +96BD4896C8A9EEFFFFDDD44896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD48 +96BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4896BD4895BB4791B7458EB3438BAF40 +85A93D7999374E6325E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B1 +2B59903167A6346BAD366DB0376FB23972B63A74B83A74B83A74B83A74B83A74B83A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83A74D0C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFE9DC5F74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 +3A74B83972B6376DB03469A93164A12D5F99275183455669D9D9D9E6E6E6EBEBEBEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECECE9E9E9BFBFBF000000 +0000000000000000003737379A9A9AB7B7B7C1C1C1CBCBCBD1D1D1C9C9C996A5AA257D942D95B1 +2F9CB931A0BD32A3C034A6C435A8C636A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C7 +36A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C7 +36A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C7 +36A9C736A9C736A9D0A2F1FFFFFFFFC1C7C736A9C736A9C736A9D0A2F1FFFFFFF6A2B9C736A9C7 +36A9C736A9C736B9E3E1FFFFE1D5D036A9C736B9E3E1FFFFFFFFFFE1D5D036A9C736A9DAC1FFFF +FFE3DA36A9C736A9C780E3FFFFFFFFFFF1E35DA9C736A9C75DD5F6FFFFED80A9C736A9C75DD5F6 +FFFFED80A9C736A9C736A9DAC1FFFFFFE3DA36A9C736A9C736A9C736A9C736A9DAC1FFFFFFFFFF +FFF1E35DA9C736A9C736A9C736A9C736A9C736A9C736C7EDFFFFED80A9C736A9C736A9C736C7ED +FFFFFFE1D5D036A9C736A9C75DD5F6FFFFFFC1C7C736A9C736A9C75DD5F6FFFFFFC1C7C736A9C7 +36A9C75DD5F6FFFFED80A9C736A9C736A9C736B9E3E1FFF6C1E3F6FFF1E35DA9C736A9C736A9C7 +36A9C736C7EDFFFFFFC1C7C736A9C736A9C736A9DAC1FFF6A2B9C736A9C75DD5F6FFFFED80A9C7 +36A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C7 +36A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C7 +36A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A9C736A8C634A5C3 +32A0BD309CB82E98B32B90AB23778C849093D8D8D8E9E9E9F0F0F0F4F4F4F4F4F4F4F4F4F4F4F4 +F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 +F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 +F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 +F7F7F7365A86365A86F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 +F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F6F6F6EEEEEE4D4D4D000000000000454545 +A5A5A5BBBBBBC5C5C5D2D2D2DFDFDFE7E7E7E6E6E6CBCDC56C873181A33B8BAF408EB34291B644 +93B84595BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB47 +95BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB69CCF4FFFFE98A +95BB4795BB4795BB4795BB47B9E9FFFFF4A8A8BB4795BB47B9E9FFFFFFC6B9BB4795BB4795BB47 +95BB8ADDFFFFEEDE6995BB4795BB4795C7A8EEFFFFDDD24795BB4795BB4795BB4795BB4795BB47 +95BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB4795BB47 +94BA4691B6448DB2428AAE4085A83D7898374E6225E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA95A2B12B59903167A6346BAD366DB0376FB23972B63A74B83A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74D0C2FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE78274B83A74B83A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8 +3A74B83A74B83A74B83A74B83A74B83972B6376EB0356BAB3267A52F629F295589485A6EE4E4E4 +F2F2F2F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F7F7F7F2F2F2D1D1D10707070000001D1D1D838383B7B7B7C0C0C0CCCCCCD8D8D8E1E1E1E2E2E2 +D4D4D49CABB0267E962C94B02F9CB9309FBC32A2BF34A5C235A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535C5ECFFFFFFFFFFFFFFFFFFFFFFFF +FFE2E2A1F1FFFFFFEC80A7C535A7C535A7C535A7C55CD4F6FFFFFFFFFFFFFFFFEC80A7CFA1F1FF +E1D4CF35A7C535A7C535B6E2E1FFFFFFFFFFFFFFFFFFE2D980E2FFFFF1E25CA7C535A7C55CD4F6 +FFFFEC80A7C535A7C55CD4F6FFFFEC80A7C535A7C535A7C535C5ECFFFFFFFFFFFFFFF1E25CA7C5 +35A7C535A7C580E2FFFFFFFFC1C5C535A7C535A7C535A7C535A7C535A7C535A7C535A7C55CD4F6 +FFFFFFFFFFFFFFFFFFFFFFFFC1C5C535A7C535A7C535A7C535A7C535C5ECFFFFFFFFFFFFFFFFFF +FFFFF6A1B6C535A7C535A7C535A7C55CD4F6FFFFEC80A7C535A7C535A7C535A7CFA1F1FFFFFFFF +E1D4CF35A7C535A7C535A7C535A7C535A7C535B6E2E1FFFFFFFFFFFFFFFFFFFFF6A1B6C535A7C5 +35A7C55CD4F6FFFFEC80A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C533A4C1319FBC2F9BB72D96B22A8FA923768C849093DBDBDBEFEFEFF8F8F8 +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDF8F8F8EDEDED +D5D5D5848484A1A1A1BDBDBDC3C3C3CFCFCFDBDBDBE7E7E7F0F0F0F4F4F4EDEDEDCED0C86B8632 +81A23B8AAE3F8DB2428FB44392B74593B94694B94794B94794B94794B94794B94794B94794B947 +94B94794B94794B94794B94794B94794B94794B94794B94794B94794B94794B94794B94794B947 +94B94794C5A8EEFFFFEEDC6994B94794B94794B94794B947A7DCE3FFFFE3CBC54794B947B9E8FF +FFFFC6B9B94794B94794B94794B98ADCFFFFEEDC6994B94794B94794C5A8EEFFFFDCD04794B947 +94B94794B94794B94794B94794B94794B94794B94794B94794B94794B94794B94794B94794B947 +94B94794B94794B94794B94793B8468FB4448CB04288AC3F83A63C7796364D6125E1E1E1F1F1F1 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B598F3167A5346BAC366DAF376FB1 +3972B53A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 +3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 +3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 +3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 +3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73972B5376EB0356BAB3368A5 +3064A02A578B4A5C70E9E9E9F7F7F7FCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFDFDFDFBFBFBF4F4F4E5E5E5B8B8B8929292BDBDBDC0C0C0C9C9C9D6D6D6 +E2E2E2ECECECEFEFEFECECECD9D9D99DADB1267F962C95B02F9CB8309EBB32A1BE34A4C135A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7CFA1F1FFFFFFF5A1B6C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C480E2FFFFFFEC80A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C433A3C0319FBB2F9AB62D96B12A8EA823768B +859193DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEF9F9F9EFEFEFDFDFDFCFCFCFCACACACECECED8D8D8E4E4E4EEEEEEF5F5F5FAFAFA +FAFAFAF0F0F0D0D2CA6A86317FA13A88AC3F8CB0418EB34390B54492B74692B74692B74692B746 +92B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B746 +92B74692B74692B74692B74692B74692C3A8EDFFFFDCCF4692B74692B74692B74692B74692CFC6 +FFFFE2CAC34692B746B8E7FFFFFFC6B8B74692B74692B74692B789DCFFFFEDDB6992B74692B746 +92C3A8EDFFFFDCCF4692B74692B74692B74692B74692B74692B74692B74692B74692B74692B746 +92B74692B74692B74692B74692B74692B74692B74692B74691B7458EB3438BAF4187AB3F82A53C +7595364D6025E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B598F +3167A5346BAC366DAF376FB13972B53A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 +3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 +3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 +3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 +3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7 +3972B5376EAF356BAB3368A63064A12A578C4A5C70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF6F6F6E8E8E8D7D7D7CCCCCC +CCCCCCD4D4D4DFDFDFEAEAEAF2F2F2F7F7F7F7F7F7F0F0F0DBDBDB9EAEB2267E952C94AE2F9AB6 +309DBA32A0BD33A3C035A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335C4ECFFFFF5 +A1B5C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6D7C1FFFFFFE2D735A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C333A2BF319DBA +2F99B52D95B02A8DA723758A859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF4F4F4E9E9E9E0E0E0DEDEDEE3E3E3ECECEC +F4F4F4F9F9F9FCFCFCFEFEFEFCFCFCF1F1F1CFD2CA6A86317FA13A87AC3E8BB0418DB2428FB544 +91B74592B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B746 +92B74692B74692B74692B74692B74692B74692B74692B74692B74692C3A8EDFFFFEDDB6992B746 +92B74692B74692B746A6DBE2FFFFE2CAC34692B746B8E7FFFFFFC6B8B74692B74692B74692B789 +DCFFFFEDDB6992B74692B74692C3A8EDFFFFDCCF4692B74692B74692B74692B74692B74692B746 +92B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74691B645 +8DB2438AAE4186AA3E82A43C7594364C6024E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA95A2B12A598F3166A5336AAC356CAF376EB13871B53973B73973B73973B73973B7 +3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 +3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 +3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 +3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 +3973B73973B73973B73973B73871B5366EAF346AAB3267A63063A129568C4A5C70EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F9F9F9F0F0F0E6E6E6E0E0E0E2E2E2E9E9E9F0F0F0F7F7F7FBFBFBFCFCFCF9F9F9F1F1F1DCDCDC +9EAEB2257D942B92AD2E99B52F9CB8319FBC33A2BF34A4C134A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +5BD3F5FFFFF5A1B4C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C232A1BD309CB92E98B42C94AF2A8CA6227489859093DCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFAFAFAF5F5F5 +F0F0F0F0F0F0F4F4F4F8F8F8FBFBFBFDFDFDFEFEFEFFFFFFFCFCFCF1F1F1CFD2CA6985317D9F39 +86AA3E8AAE408CB1428EB34390B54590B54590B54590B54590B54590B54590B54590B54590B545 +90B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B545 +90B568C9F3FFFFE78890B54590B54590B54590B545B6E7FFFFF3A8A3B54590B545A3DBE2FFFFC6 +B6B54590B54590B54590C1A8EDFFFFEDDB6890B54590B54590C1A8EDFFFFDBCF4590B54590B545 +90B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B545 +90B54590B54590B5458FB5448CB14289AD4085A93E80A33B7493354B5F24E1E1E1F1F1F1FCFCFC +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12A588F3166A5336AAC356CAF366EB13871B5 +3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 +3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 +3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 +3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 +3973B73973B73973B73973B73973B73973B73973B73973B73871B5366DAF346AAB3267A62F63A1 +29568C4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF8F8F8F3F3F3F1F1F1F3F3F3F7F7F7FAFAFAFDFDFDFEFEFE +FEFEFEFAFAFAF1F1F1DCDCDC9EAEB2257C932B91AD2E98B52F9BB8319EBB33A1BE34A3C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A3C1329FBD309BB82E97B32C93AE2A8BA5227389859093 +DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFDFDFDFCFCFCFAFAFAFAFAFAFCFCFCFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFCFCFC +F1F1F1CFD2CA6883307C9E3885A83D88AC3F8AAF408CB2428FB4448FB4448FB4448FB4448FB444 +8FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB444 +A2DBE2FFFFFFDBCE448FB4448FB444A2DBE2FFFFFFDBCE448FB4448FB444A2DBE2FFFFFFDBCE44 +8FB4448FB4448FC1A8EDFFFFEDDB678FB4448FC1A8EDFFFFFFFFFFEDDB678FB4448FB4448FB488 +DBFFFFFFE7888FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB4448FB444 +8FB4448FB4448FB4448FB4448FB4448FB4448FB4448EB3438BAF4187AB3F84A73D7FA13A739234 +4B5E23E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12A588F3166A5 +336AAB356CAE366EB13871B43973B73973B73973B73973B73973B73973B73973B73973B73973B7 +3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 +3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 +3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7 +3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73871B4 +366DAF346AAA3267A62F63A129568C4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFBFBFBFBFBFBFCFCFC +FDFDFDFEFEFEFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EADB2257B932B90AC2E97B42F9AB7 +319DBA339FBD34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0329EBC309AB72E96B2 +2C91AD2A8AA5227288859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCF1F1F1CFD2CA6782307C9D3884A73D87AB3F8AAD408CB0428EB244 +8EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB244 +8EB2448EB2448EB2448EB244A2DAE2FFFFFFDBCD448EB2448EB2448EB2448ECDC5FFFFFFFFFFFF +FFFFFFFFFFE2C8C0448EB2448EB2448EB2448EB244A2DAE2FFFFFFFFFFFFFFFFC5B5B267C8F2FF +EDDA678EB2448EB2448EB2448ECDC5FFFFFFFFFFFFFFF2A8A2B2448EB2448EB2448EB2448EB244 +8EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448DB2438AAE41 +87AA3F83A63D7EA03A7291344A5D23E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA95A2B12A588E3166A4336AAB356CAD366EB03871B43973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63871B4366DAE346AAA3267A52F63A029568B4A5B70EAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB2 +257A922B8FAB2D96B32F99B6309BB9329EBC33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF329DBB3099B62E95B12C90AC2989A4227187859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1CFD2CA67812F7B9B3883A63C +87A93E89AC408BAE418DB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB143 +8EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB143 +8EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB143 +8EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB143 +8EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB1438EB143 +8EB1438EB1438DB04289AC4086A83E82A43C7E9F39718F334A5D23E1E1E1F1F1F1FCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12A588E3166A4336AAB356CAD366EB03871B43973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63871B4366DAE346AAA3267A52F63A029568B +4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFAF1F1F1DCDCDC9DADB22479912A8EAA2D95B22E97B5309AB8329DBB339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE319CB92F98B52D94B02B8FAB2988A3217086859093DCDCDC +F1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1 +CFD1CA66802F7A9A3783A43C86A83E88AA3F8AAD418CAF428DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438CAF4289AB4085A73E82A33C7D9D39718E334A5C23 +E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12A588E3066A4336AAB +356CAD366EB03871B43973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63871B4366DAE +346AAA3267A52F63A029568B4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB12479902A8EA82D94B02E97B3309AB6 +329DBA339FBC339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBC319BB82F97B42D93AF2B8FAA +2988A1217085859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCF1F1F1CFD1CA657F2E79983781A23B85A63D87A93E88AA408AAC428BAD42 +8BAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE42 +8CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE42 +8CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE42 +8CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE42 +8CAE428CAE428CAE428CAE428CAE428CAE428CAE428CAE428BAD428AAC4188AA4087A83F84A53D +80A13B7C9C38708D32495B22E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +95A2B12A588E3066A4336AAB356CAD366EB03871B43973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63871B4366DAE346AAA3267A52F63A029568B4A5B70EAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB124788F +2A8DA72C93AF2E96B23099B5319CB8339EBB339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBB +319AB72F96B22D92AE2B8EA92887A0216F84859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1CFD1CA647E2E78973680A13A83A43C +84A43F85A54187A74288A94288AA4289AA4289AB4289AB428AAC428AAC418AAD418AAD418AAD41 +8AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD41 +8AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD41 +8AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD418AAD41 +8AAD418AAD418AAD418AAD418AAD418AAD418AAC418AAC418AAC4289AB4289AB4288AA4288A942 +86A74184A43F81A13D80A03C7FA03A7B9A376F8B32485A22E1E1E1F1F1F1FCFCFCFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA95A2B12A588E3066A4336AAB356CAD366EB03871B43973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6 +3973B63973B63973B63973B63973B63973B63871B4366DAE346AAA3267A52F63A029568B4A5B70 +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +F1F1F1DCDCDC9DADB124778E298BA62C92AE2D95B12F98B4319AB7329CBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA329DBA +329DBA329DBA329DBA329CBA3099B62E95B12C91AC2A8DA828859F216E84859093DCDCDCF1F1F1 +FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1CFD1CA +637D2D7695357D9D3B7F9D3F819F4083A24285A44386A54386A64387A74387A84388A84388A942 +88A94288AA4289AA4189AA4189AB4189AB4189AB4189AC4189AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AB4189AB4189AB4189AB4188AA4188AA4188A94187A94187A842 +87A74286A74285A64284A44283A34181A03F7E9C3D7B993B7896397795376D8931485A22E1E1E1 +F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12A588E3065A43369AA346BAD +366DB03870B33972B53972B53972B53972B53972B53972B53972B53972B53972B53972B53972B5 +3972B53972B53972B53972B53972B53972B53972B53972B53972B53972B53972B53972B53972B5 +3972B53972B53972B53972B53972B53972B53972B53972B53972B53972B53972B53972B53972B5 +3972B53972B53972B53972B53972B53972B53972B53972B53972B53972B53972B53972B53972B5 +3972B53972B53972B53972B53972B53972B53972B53972B53972B53972B53870B3366CAE3469A9 +3266A42F62A029558A4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB124778D298BA52C92AD2D94B02F97B3319AB6 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB83099B52E95B02C91AB2A8DA728859E +216E83859092DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCF1F1F1D0D2CB5C732C637C2F748F3C7C98417E9B42809E4382A04483A14483A244 +84A34484A34485A44485A54385A54386A64386A64286A64286A74286A74286A74287A74287A841 +87A84187A84187A94187A94187A94187A94187A94187A94187A94087AA4087AA4087AA4087AA40 +88AA4088AA4088AA4088AA4088AA4088AA4088AA4088AA4088AA4087AA4087AA4087AA4087AA40 +87A94087A94187A94187A94187A94187A84187A84186A84186A74186A74186A64286A64285A542 +85A54285A44284A44284A34284A34283A24382A042819F427F9D417D9B407B983E78953C75913A +6A84345A702A606C49E1E1E1F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B1 +2A578D3065A33369AA346BAC366DAF386FB23971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53870B3366CAD3469A93266A42F629F29558A4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB123768C298AA4 +2B91AC2D93AF2E96B23099B5319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB72F98B3 +2D94AF2B90AA298CA527859D206D82859092DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF3F3F3E4E4E4B5BBA75E752F5B702F687F37748E3E +7D99447F9B45809C45819D45819E45829F4582A04483A14483A14483A24483A24483A24384A243 +84A34384A34384A34384A44384A44285A44285A54285A54285A54285A54285A54285A54185A541 +85A54185A54185A54185A54185A64185A64185A64185A64185A64185A64185A64185A64185A641 +85A64185A64185A54185A54185A54185A54284A54284A54284A44284A44284A34283A34283A342 +83A24283A24283A14282A14282A04282A042819F43819F43809E437F9D427E9B427D9A417C9841 +7A964076913D6D8738617831526629576737ABAFA3E4E4E4F3F3F3FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA95A1B12A578D3065A33369AA346BAC366DAF386FB23971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53870B3366CAD3469A83266A42F629F29558A4A5B70EAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 +DCDCDC9DACB023758B2889A32B8FAA2C92AD2E95B12F98B4319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB62F96B22D92AE2B8EA9298AA427839C206C81858F92DCDCDCF1F1F1FAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7505050000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +888B838E9A74607631596C30667B386E853C748D407A94437D9845809B45809C45819D45819D45 +819E45819E45829E45829F45829F44829F44829F4482A04482A04483A04483A14383A14383A143 +83A14383A14383A14383A14383A14283A14283A14283A14283A14283A14283A24283A24283A242 +83A24283A14283A14283A14283A14283A14283A14283A14282A14382A14382A04382A04282A042 +829F42819F43819F43819E43819E43809D43809D43809C437F9C437F9B437F9B437E9A437D9943 +7C97427A9441768F3F70893C6980385D713051642A5A6A387E876CB2B4ADD0D0D0E9E9E9F5F5F5 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B12A578D3065A33369AA346BAC366DAF +386FB23971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53870B3366CAD3469A83266A4 +2F629F29558A4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DACB022748A2788A22A8FA92B91AC2D94AF2E97B23099B4 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B53099B5 +3099B53099B53099B53099B53099B53099B53099B42E96B12C92AD2A8EA8298AA326839B1F6C80 +858F92DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF787878000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000999999BBBBBBADB0A5909D747383505D7231596D315C7033637837 +6B813B718A3F7891427C96447D98457E99457F9A467F9B457F9B457F9B45809B45809C45809C45 +809C45809D44809D44809D44809D44809D44809D44809D44809D43809D43809D43809D43809D43 +809D43809D43809D43809D43809D43809D43809D43809D43809D43809D43809D43809D43809C43 +809C437F9C437F9B437F9B437F9B437F9B437E9A437E9A437E99437D99437D98437C98437C9743 +7A9543789241758E406F873C677D385F7433586B2F53652C52652B5D6D3A838D6EB4B4B4BBBBBB +CCCCCCDBDBDBEFEFEFF8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B12A578D +3065A33369AA346BAC366DAF386FB23971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3870B3366CAD3469A83265A42F629F29558A4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DACB02274892788A12A8EA8 +2B91AB2D93AE3096B03297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13096B02C91AB +2A8DA72989A226829A1F6B7F858F92DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000A4A4A4CBCBCBC2C2C2B9B9B9B3B3B3 +A9ADA19EA5908A97717485515F7532596D31596C325F7435637837677D396B813B6E853D718A3F +758D417790427993437B95447D97457D98457E99457E99457E99457E99457E99457E99457E9944 +7E99447E99447E99447E99447E99447E99447E9A447E9A447E99447E99447E99447E99447E9944 +7E99447E99447E99447D99447D98447C98447C97447C97437B96437A9442789141758F40728B3F +6F883D6B833B677E396379375F74345B6F3257692F54662D5E6E3C69774B818B6C999E8EAFAFAF +B3B3B3B9B9B9C2C2C2CBCBCBDBDBDBE7E7E7F6F6F6FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA95A1B12A578D3065A33369AA346BAC366DAF386FB23971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B53971B5 +3971B53971B53971B53971B53870B2366CAD3469A83265A42F629F29558A4A5B70EAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC +9DACB02173882786A0298DA72B90AA3092AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3092AB2A8CA62888A12581991F6A7E848F92DCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF5F5F5EEEEEE +E2E2E2DADADACFCFCFC7C7C7C0C0C0BBBBBBB7B7B7B3B3B3B0B0B0A6A9A0949E81808E62748552 +6F7F505F74335B6F31596C31596C32596C325C6F34607436637838677D3A697F3B6A813C6B823C +6C833D6D853E6E863E6F873E70883F71893F728A40738B40748C41748D41758E41758E41748D41 +738C40738C40738B40728A3F728A3F71893F6F873E6D843D6B823C697F3A677D39657A38637837 +5F73355B6F32586B3156682F55682F576A2F60713E63743F75815C828C6E87926F9CA290B0B0B0 +B3B3B3B7B7B7BBBBBBC0C0C0C7C7C7CFCFCFDADADAE2E2E2EDEDEDF4F4F4FBFBFBFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B029568D3064A23268A9346AAB356CAE376EB1 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B4376FB2356BAC3368A83165A32E619E +2854894A5B6FEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFAF1F1F1DCDCDC9DACB021728727859E298CA6308FA83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A8318EA62887A02580981F6A7D848F92 +DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFBFBFBF8F8F8F2F2F2EDEDEDE5E5E5DEDEDED7D7D7D1D1D1CBCBCBC6C6C6C1C1C1 +BFBFBFBCBCBCB9B9B9B5B5B5B2B2B2B1B1B1AAADA2A8ABA19EA491939C808894707E8B61728251 +6E7D4F6677416576415C70315B6F315A6E31596C31586C31586B31586B31576A31576A31586A31 +586B31586A31586A31576A31576A30576930566930566930566930566930576A30586B2F586C2F +61733F63743F64763F6D7C4E78845E838E6E8893709CA18F9FA692B1B1B1B1B1B1B2B2B2B5B5B5 +B9B9B9BCBCBCBFBFBFC1C1C1C6C6C6CBCBCBD1D1D1D7D7D7DEDEDEE5E5E5EDEDEDF2F2F2F8F8F8 +FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B029568D3064A2 +3268A9336AAB356CAE376EB13870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4376FB1 +356BAC3368A73164A32E619E2854894A5B6FEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DACAF21718627849D308BA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +318AA1257F971F697C848F92DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFAF8F8F8F3F3F3EFEFEFEAEAEA +E5E5E5E0E0E0DBDBDBD6D6D6D3D3D3D0D0D0CBCBCBC6C6C6C2C2C2C0C0C0BFBFBFBEBEBEBBBBBB +B6B6B6B4B4B4B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B1B1B1B0B0B0A7ABA0A5A89EA4A79D +A2A69CA2A59C9BA18E9AA08D99A08D929B7F999F8D999F8D9AA08D9AA08D9AA08D9BA28E9DA38F +A6A9A0A9ACA2B1B1B1B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B4B4B4B7B7B7BBBBBBBEBEBE +BFBFBFC0C0C0C2C2C2C6C6C6CBCBCBCFCFCFD3D3D3D6D6D6DBDBDBE0E0E0E5E5E5EAEAEAEFEFEF +F3F3F3F8F8F8FAFAFAFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA95A1B029568D3064A23268A9336AAB356CAE376EB13870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B4376FB1356BAC3368A73164A32E619E2854894A5B6FEAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DABAF +2170852C819737859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A37859A +37859A37859A37859A37859A37859A2D7E941E687B848F91DCDCDCF1F1F1FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FDFDFDFBFBFBFAFAFAF7F7F7F6F6F6F2F2F2EFEFEFECECECE9E9E9E7E7E7E3E3E3DDDDDDDADADA +D8D8D8D7D7D7D4D4D4D0D0D0CBCBCBC7C7C7C5C5C5C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3C3C3 +C0C0C0BCBCBCB8B8B8B6B6B6B5B5B5B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4 +B4B4B4B5B5B5B6B6B6B8B8B8BCBCBCC0C0C0C3C3C3C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5C5C5 +C7C7C7CBCBCBD0D0D0D4D4D4D7D7D7D8D8D8DADADADDDDDDE3E3E3E7E7E7E9E9E9ECECECEFEFEF +F2F2F2F6F6F6F7F7F7FAFAFAFBFBFBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B029568D3064A23268A9336AAB356CAE376EB13870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B4376FB1356BAC3368A73164A32E619E285489 +4A5B6FEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFAF1F1F1DCDCDC9DABAF2366792A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373 +2A63732A63732A63732A63732A63732A63732A63732A63732A63732A6373226070848E91DCDCDC +F1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060 +0000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFDFDFDFCFCFCFBFBFBFAFAFAF8F8F8F7F7F7 +F6F6F6F4F4F4F0F0F0EEEEEEEDEDEDECECECEAEAEAE7E7E7E2E2E2DEDEDEDDDDDDDCDCDCDCDCDC +DCDCDCDCDCDCDCDCDCDBDBDBD8D8D8D2D2D2CECECECACACAC9C9C9C8C8C8C8C8C8C8C8C8C8C8C8 +C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9CACACACECECED3D3D3D8D8D8DBDBDBDCDCDCDCDCDC +DCDCDCDCDCDCDDDDDDDDDDDDDEDEDEE2E2E2E7E7E7EAEAEAECECECEDEDEDEEEEEEF0F0F0F4F4F4 +F6F6F6F8F8F8F8F8F8FAFAFAFBFBFBFDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B029568D2F64A23268A9 +336AAB356CAE376EB13870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4376FB1356BAC +3368A73164A32E619E2854894A5B6FEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF2F2F2DDDDDDB2B9BC6E919A6A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D966A8D96 +6B8E9771949D9EABAFDDDDDDF2F2F2FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F6F6F6F3F3F3 +F2F2F2F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEDEDEDE8E8E8E5E5E5E2E2E2E1E1E1 +E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E5E5E5E8E8E8 +EDEDEDEFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2F2F2F3F3F3F6F6F6F8F8F8F9F9F9 +F9F9F9FAFAFAFBFBFBFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +95A1B029568C2F63A23268A8336AAB356CAE376EB13870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B43870B4 +3870B43870B4376EB1356BAC3367A73064A32E619E2854894A5B6FEAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF3F3F3E1E1E1CBCBCBBDBDBD +B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B6B6B6BDBDBDCBCBCBE1E1E1F3F3F3FBFBFBFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFDFDFDFDFDFDFCFCFCFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF9F9F9 +F7F7F7F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 +F3F3F3F3F3F3F5F5F5F7F7F7F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFB +FCFCFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA95A1B029558C2F63A13267A83369AA356BAD376DB0386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3376EB0356AAB3366A63063A22E609D2853884A5A6F +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +F7F7F7E9E9E9D9D9D9CECECEC9C9C9C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C9C9C9CECECED9D9D9E9E9E9F7F7F7 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000 +0000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B029558C2F63A13267A83369AA +356BAD376DB0386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3376EB0356AAB3366A6 +3063A22E609D2853884A5A6FEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F2F2F2E9E9E9E3E3E3DFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +E3E3E3E9E9E9F2F2F2F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B0 +29558C2F63A13267A83369AA356BAD376DB0386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3376EB0356AAB3366A63063A22E609D2853884A5A6FEAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFAF6F6F6F4F4F4F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F4F4F4F6F6F6FAFAFAFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA95A1B029558C2F63A13267A83369AA356BAD376DB0386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3376EB0356AAB3366A63063A22E609D2853884A5A6FEAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FEFEFEFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFDFDFDFEFEFEFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000000000 +9F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B029558C2F63A13267A83369AA356BAD +376DB0386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3376EB0356AAB3366A63063A2 +2E609D2853884A5A6FEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B029558B +2F63A13267A73369AA356BAC376DB0386FB2386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3386FB3 +376EB0356AAA3366A63063A12E609D2853884A5A6FEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA95A1B029558B2F63A03267A73369A9356BAC376DAF386FB2386FB2386FB2386FB2 +386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2 +386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2 +386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2 +386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2 +386FB2386FB2386FB2386FB2376EAF356AAA3366A53063A12E609C2853874A5A6EEAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9F +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B029558B2F62A03266A73369A9356BAC376DAF +386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2 +386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2 +386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2 +386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2 +386FB2386FB2386FB2386FB2386FB2386FB2386FB2386FB2376DAF3569AA3366A53063A12E609C +2853874A5A6EEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B029558B2F62A0 +3266A73368A9356AAC376CAF386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2 +386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2 +386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2 +386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2 +386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2376DAF +3569AA3265A53062A12E5F9C2852874A5A6EEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA95A1B029558B2F62A03266A63368A9356AAC376CAF386EB2386EB2386EB2386EB2386EB2 +386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2 +386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2 +386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2 +386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2386EB2 +386EB2386EB2386EB2376CAF3569AA3265A53062A12E5F9C2852874A5A6EEAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B029558A2F629F3266A53368A8356AAB376CAE386EB1 +386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1 +386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1 +386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1 +386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1 +386EB1386EB1386EB1386EB1386EB1386EB1386EB1376CAE3569A93265A43062A02E5F9B285287 +4A5A6EEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060 +0000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B029558A2F629F3266A5 +3368A8356AAB376CAE386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1 +386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1 +386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1 +386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1 +386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1386EB1376CAE3569A9 +3265A43062A02E5F9B2852874A5A6EEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +95A1B029558A2F629F3166A53368A8346AAB366CAE376EB1376EB1376EB1376EB1376EB1376EB1 +376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1 +376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1 +376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1 +376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1 +376EB1376EB1366CAE3469A93265A43062A02E5F9B285287495A6EEAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA95A1B028558A2E629F3166A53268A8346AAB366CAE376EB1376EB1 +376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1 +376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1 +376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1 +376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1 +376EB1376EB1376EB1376EB1376EB1376EB1366CAE3469A93165A42F62A02D5F9B275287495A6E +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000 +0000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1B028558A2E629F3166A53268A8 +346AAB366CAE376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1 +376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1 +376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1 +376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1 +376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1376EB1366CAE3469A83165A4 +2F629F2D5F9B275286495A6EEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1AF +2855892E629E3166A43268A7346AAA366CAD376EB0376EB0376EB0376EB0376EB0376EB0376EB0 +376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0 +376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0 +376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0 +376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0 +376EB0366CAD3469A83165A32F629F2D5F9A275286495A6EEAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA95A1AF2855892E619E3165A43268A7346AAA366CAD376EB0376EB0376EB0 +376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0 +376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0 +376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0 +376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0376EB0 +376EB0376EB0376EB0376EB0376EB0366CAD3469A83165A32F629F2D5F9A275286495A6EEAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000000000 +9F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1AF2854892E619E3165A43267A73469AA +366BAD376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0 +376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0 +376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0 +376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0 +376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0366BAD3468A83164A32F619F +2D5E9A275186495A6EEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1AF285489 +2E619E3165A43267A73469AA366BAD376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0 +376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0 +376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0 +376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0 +376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0376DB0 +366BAD3468A83164A32F619F2D5E9A275186495A6EEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA95A1AF2854892E619D3165A33267A63469A9366BAC376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF366BAC3467A73164A22F619E2D5E99275185495A6EEAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9F +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1AF2854882E619D3165A33267A63469A9366BAC +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF366BAC3467A73164A22F619E2D5E99 +275185495A6EEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1AF2854882E619D +3165A33267A63469A9366BAC376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF366BAC +3467A73164A22F619E2D5E99275185495A6EEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFDFDFDFCFCFCFCFCFCFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFCFCFCFCFCFCFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA95A1AF2854882E619D3165A33267A63469A9366BAC376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF366BAC3467A73164A22F619E2D5E99275185495A6EEAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFADDE6E8 +6BC9E36BC9E36AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E26AC8E2 +6AC8E26AC8E26AC8E26AC8E26AC8E26BC9E36BC9E3C2D2D6FAFAFAFDFDFDFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1AF2854882E619D3165A33267A63469A9366BAB376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF376DAF +376DAF376DAF376DAF376DAF376DAF376DAF376DAF366BAC3467A63164A22F619D2D5E99275185 +495A6EEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF9F9F9F2F2F2B9CCD12F9BB865F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF +65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF65F2FF349DB69BA8ACF2F2F2 +F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060 +0000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A1AF2854872E619C3165A2 +3267A53469A8366BAB376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE +376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE +376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE +376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE +376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE366BAB3467A5 +3164A12F619D2D5E98275184495A6DEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7E9E9E9AEC1C62C92AF3DB4D28AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF8AFFFF +47B9D12887A2929FA3E9E9E9F7F7F7FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +95A1AF2854872E619C3165A23267A53469A8366BAB376DAE376DAE376DAE376DAE376DAE376DAE +376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE +376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE +376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE +376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE376DAE +376DAE376DAE366BAB3467A53164A12F619D2D5E98275184495A6DEAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF3F3F3E1E1E1A5B8BD2C92AF +33ABCC3FBCDB7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF7BFEFF +7BFEFF7BFEFF7BFEFF50CBE031A4C42887A28B989CE1E1E1F3F3F3FBFBFBFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA95A0AF2853872E609C3164A23266A53468A8366AAB376CAE376CAE +376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE +376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE +376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE +376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE +376CAE376CAE376CAE376CAE376CAE376CAE366AAB3466A53163A12F609C2D5D9827518449596D +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +F2F2F2DDDDDDA0B3B82C92AF33ABCC36B3D63FBEDE6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF +6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF6AF0FF4BCAE334ACCE31A4C42887A2879498DDDDDDF2F2F2 +FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000 +0000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A0AF2853872E609C3164A23266A5 +3468A8356AAB376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE +376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE +376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE +376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE +376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE376CAE366AAB3366A53163A1 +2F609C2D5D9827518449596DEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB2B72C92AE33ABCC36B3D538B6D83EBEE059DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE +59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE59DDFE46C6E636B1D334ACCD31A4C3 +2887A1869397DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A0AF +2853872E609C3164A13266A43468A7356AAA376CAD376CAD376CAD376CAD376CAD376CAD376CAD +376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD +376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD +376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD +376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD +376CAD366AAA3366A53163A02F609C2D5D9827518349596DEAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB2B72C92AE33ABCB +36B3D538B6D839B9DB3DBFE247CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE +47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE +47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE +47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE +47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE +47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE +47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE +47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE +47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE +47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE +47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE +47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE +47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE +47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE47CBEE40C2E5 +38B6D836B1D234ACCD31A4C32887A1869397DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF0F5E8F1F6E8E3ECD0E4EED1D7E5BAD9E8BB +DAE9BBCBDFA4CCE0A4CCE0A3CDE2A4CEE3A4CFE4A5CFE5A5CEE3A4CCE1A4CBDFA3D9E8BAD8E7BB +D7E6BAD6E4BAE4EED1E3EDD1E3ECD0F1F6E8F1F5E8F0F5E7FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA95A0AF2853872E609B3164A13266A43468A7356AAA376CAD376CAD376CAD +376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD +376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD +376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD +376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD +376CAD376CAD376CAD376CAD376CAD366AAA3366A43163A02F609B2D5D9727518349596DEAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 +DCDCDC9FB2B72C92AE33ABCB36B3D438B6D839B9DB3BBCDF3CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE23CBFE2 +3CBFE23CBFE23CBFE23BBBDE38B6D836B1D234ACCD31A4C32887A1869397DCDCDCF1F1F1FAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F585858B7B7B7FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000000000 +9F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE +FEFEFEFEFEFEF0F5E7E4EDD1D8E6BACFE4A6C5E090BDDE7CB6DD69AFDB56B3E059B8E55CBCE95E +BFED61C3F164C7F467CAF66ACBF76BCDF86CCEF86DCFF96ED0F96FD0FA70D1FA71D2FB72D1FA70 +CFF96FCDF86DCBF76BC9F669C7F467C5F366C3F164C1EF62BFED61BDEB5FBAE85EB8E65CB4E259 +BCE36CB4DA68BBDB7BC4DE8FCDE1A4D7E5B9E4EDD1F0F4E7FEFEFEFEFEFEFEFEFEFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A0AF2853872E609B3064A13266A43468A7 +356AAA376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD +376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD +376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD +376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD +376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD376CAD356AAA3366A43163A02F609B +2D5D9727518349596DEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB2B72C92AD33AACA36B2D438B5D739B9DB3BBCDE3CBEE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE1 +3CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13CBFE13BBBDD39B6D736B1D134ACCC31A3C22887A0 +869397DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C7383838000000 +000000101010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE +F1F6E7CBDEA4D5EBA9BFDF7DA9D353B2DE59BAE75EC2EF64C9F56AD0F970D6FC76DCFE7DE2FF83 +E7FF89EAFF8CEDFF8FF0FF92F2FF94F4FF96F6FF98F7FF9AF8FF9BF8FF9BF8FF9BF9FF9BF9FF9B +F9FF9CF9FF9CF9FF9CF9FF9CF8FF9BF8FF9BF7FF9AF6FF98F5FF98F4FF96F3FF96F2FF94F1FF93 +EFFF92EEFF90EDFF8FEAFF8CE4FF86DEFE80D9FD79D3FB73CDF86EC7F368C0EE62B9E65DB2DE58 +B9E06BB2D767C5DF90D8E7BBE0E9CFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AF275387 +2D609B3064A13166A43368A7346AAA366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD +366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD +366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD +366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD +366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD +356AAA3266A43063A02E609B2C5D9726518349596DEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B72D91AD34AACA37B2D3 +39B5D73AB8DA3CBBDE3DBEE03DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE1 +3DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13DBEE13CBADC39B5D7 +37B0D135ABCB32A3C22986A0869397DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFE7E7E7 +585858000000000000000000000000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEFF3E6 +D5E3B9CFE4A6BBDB7BACD755BCE95FC9F56AD4FB75DCFE7EE2FF84E8FF8AEEFF8FF2FF94F6FF98 +F8FF9AFAFF9DFAFF9DFAFF9DF8FF9CF8FF9BF7FF9AF6FF99F5FF98F4FF97F3FF96F2FF95F1FF95 +F1FF95F0FF94F0FF94EFFF93EFFF93EEFF92EEFF92EFFF92EFFF93F0FF93F0FF94F1FF94F1FF95 +F2FF95F3FF96F3FF96F4FF97F4FF98F5FF98F5FF99F6FF9AF8FF9BF8FF9BF9FF9BF7FF9AF6FF98 +F3FF95EFFF91EBFF8DE6FF88E1FE82DBFD7CD1FA72C4F166B8E55CB9E06BB9D87ABBD38CE2EBD0 +FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA94A0AF2753862D609B3064A13166A43368A6346AA9366CAD366CAD366CAD366CAD +366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD +366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD +366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD +366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD366CAD +366CAD366CAD366CAD366CAD356AA93266A43063A02E609B2C5D9726518349596DEAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC +9FB1B62D91AC34AAC937B2D339B5D63AB8DA3CBBDD3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE03DBEE0 +3DBEE03DBEE03CBADC39B5D637B0D035ABCB32A3C129869F869396DCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFF7F7F7878787101010000000000000000000080808787878EFEFEFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6060600000000000009F9F9F +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEE1EACFD1E6A6ABD655C0ED63CCF76DD6FC78E1FF83EBFF8EF3FF96F7FF9BF8FF9CF8FF9B +F6FF9AF4FF98F2FF96F0FF94EEFF92ECFF90EAFF8EE8FF8CE6FF8AE5FF8AE4FF89E3FF88E2FF87 +E1FF86E0FF85DFFF84DEFF83DEFF83DDFF83DDFF82DCFF82DCFF81DBFF81DBFF80DCFF81DCFF81 +DDFF82DDFF83DEFF83DFFF84DFFF84E0FF85E0FF85E1FF86E1FF86E2FF87E3FF87E4FF88E6FF8A +E8FF8CE9FF8EEBFF8FECFF91EEFF92EFFF93F1FF95F2FF96F3FF97F4FF98F3FF96EEFF91E6FF89 +DBFD7DD0FA72C5F368BAE75EACD855A5C760E0E9CFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AF2753862D5F9A3064A03166A33368A6346AA8 +366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC +366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC +366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC +366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC +366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC356AA83266A330639F2E609A2C5D96 +26518249596DEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFAF1F1F1DCDCDC9FB1B62D91AC34A9C937B1D239B4D53AB7D93CBADC3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF +3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3DBDDF3CB9DB39B4D537AFD035AACA32A2C029869F869396 +DCDCDCF1F1F1FAFAFAFEFEFEB7B7B7202020000000000000000000000000484848DFDFDFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +6060600000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFED1DEB8ABCF63B4E15AC7F46ADBFE7EEBFF8FF0FF94F4FF98F4FF98F1FF95 +EEFF93EBFF8FE8FF8CE5FF8BE3FF89E1FF87DFFF85DDFF83DCFF81D9FF7FD7FF7DD5FE7BD3FD79 +D2FC78D1FC77D0FB76CFFB75CEFA74CDF973CCF872CBF872CAF771CAF771CAF771C9F670C9F670 +C8F56FC8F56FC9F56FC9F670CAF771CBF771CBF872CCF872CCF973CDF973CEFA74CEFA74CFFB75 +CFFB76D0FB76D1FC77D3FD79D5FE7BD7FF7DD9FF7FDBFF81DCFF82DEFF83DFFF85E1FF86E2FF87 +E4FF89E8FF8CEBFF8FECFF91EDFF92EDFF92EAFF8EE3FF87D9FD7DC4F168AEDA56A6C960C0D09F +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2753862D5F9A +3064A03166A33368A6346AA8366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC +366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC +366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC +366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC +366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC366CAC356AA8 +3266A330639F2E609A2C5D9626518249596DEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B62C8FAB33A8C836B0D138B3D4 +39B6D83BB9DB3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE +3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3CBCDE3BB8DA38B3D436AECF +34A9C931A1BF28859E869396DCDCDCF1F1F1D3D3D3484848000000000000000000000000000000 +3838387F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F3030300000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEBECE9DA6D051C6F26ADBFE7FE8FF8CF0FF93ECFF91 +E9FF8DE6FF8BE3FF88E0FF86DDFF83D9FF7FD6FE7CD3FD7AD1FC78D0FB76CEF974CCF872C9F570 +C7F36EC5F16CC3EF6AC1EC68BFEB67BEEA66BDE965BCE864BBE762BAE661B9E460B8E460B8E460 +B7E35FB7E35FB7E35FB6E25EB6E25EB6E15DB6E25EB7E35EB7E35FB8E460B9E460B9E561BAE661 +BBE662BBE763BCE863BDE864BDE964BEE965BFEB66C1ED68C3EF6AC5F16CC7F36EC9F570CBF772 +CDF973CEFA74D0FB76D1FC77D3FD79D7FE7DDBFF80DDFF83DFFF85E1FF87E3FF88E5FF8AE7FF8C +E3FF88D1FA76BFEB65A3CC4EA7B982FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA94A0AE2752862D5F9A3063A03165A33367A63469A8366BAC366BAC366BAC366BAC366BAC +366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC +366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC +366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC +366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC +366BAC366BAC366BAC3569A83266A330629F2E5F9A2C5C9626508249596DEAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B6 +2C8FAA33A7C736AFD038B2D339B5D63BB8DA3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD3CBBDD +3CBBDD3BB7D938B2D336ADCD34A8C831A0BE28849D869396CECECE717171000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000009F9F9FFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFB7A993AABD557DAFE7F +E3FF88E5FF8AE3FF88DCFF82D8FF7ED5FE7CD2FC79CFFA76CBF773C7F36FC4EF6CC2ED69C0EB68 +BEE966BBE764B9E562B7E260B5E05DB3DE5BB0DB59AED957ADD856ACD755ABD654ABD554AAD553 +AAD452A9D352A9D352A9D351A8D351A8D251A8D251A8D251A8D251A8D251A8D251A8D351A8D351 +A9D351A9D352A9D452AAD452AAD453AAD553ABD554ABD654ACD654ACD755ADD856AFDA58B1DC5A +B3DE5CB5E05EB7E260B9E461BBE663BDE865BFEA66C0EB68C2EE6AC6F26ECAF671CEF975D0FB77 +D2FD79D4FE7BD6FE7DDBFF81E0FF86E0FF86D5FC7CA3CB51718E36E0E1DFFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2752862D5E9A3063A03165A33367A63469A8366BAC +366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC +366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC +366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC +366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC366BAC +366BAC366BAC366BAC366BAC366BAC366BAC366BAC3569A83265A330629F2E5F9A2C5C96265082 +49596DEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFAF1F1F1DCDCDC9FB1B62C8EA933A6C636AECF38B1D339B4D63BB7D93CBADC3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD3CBADD +3CBADD3CBADD3CBADD3CBADD3CBADC3BB6D838B2D336ADCD34A8C831A0BE28849D869396CECECE +717171000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000C7C7C7FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFB +E3E6DD7A9A3A93B944A4CC50C8F16FD9FF7FD3FC7ACDF874C7F26FC5EF6CC2EC6ABEE866BAE462 +B6E05FB2DC5BB0DA59AED857ACD655AAD454A9D352A8D251A8D151A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050A7D050 +A7D050A7D050A7D050A7D050A7D150A8D151A8D252A9D352AAD454ACD555ADD756AFD958B2DC5B +B5E05EB9E462BDE765C1EB69C3EE6BC5F06DC8F26FCDF774D2FC79D1F778A9CF568BAF416B8632 +BEBFBCFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2752852D5E9A3063A0 +3165A23367A53469A8366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB3569A73265A3 +30629E2E5F9A2C5C9526508249596DEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B62B8EA933A5C535ADCE37B0D139B3D5 +3AB6D83CB8DB3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC +3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB9DC3CB8DB3AB5D738B0D236ACCC34A7C7 +309FBD28839C869396DCDCDCF1F1F1D3D3D3484848000000000000000000000000000000383838 +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FB7B7B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEF8F8F8DEE1D87A993A91B7449CC449A0C84CB1DB5BC3EE6BBCE765B6E160 +B3DD5CAFD959ACD656A9D353A7D151A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50 +A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50 +A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50 +A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50A6CF50 +A6CF50A6CF50A6CF50A7D050A8D151A9D353ACD556AFD959B3DD5CB6E05FB9E362BEE967B2DC5D +9BC24996BD468AAE416A8532BABBB8F8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +94A0AE2752852D5E9930639F3165A23367A53469A7366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB3569A73265A230629E2E5F992C5C9526508149596CEAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB1B62B8DA8 +32A4C435ACCD37AFD038B2D43AB5D73BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA3BB7DA +3AB4D637AFD035ABCB33A6C5309EBC27829B869296DCDCDCF1F1F1FAFAFAFEFEFEB7B7B7202020 +000000000000000000000000484848DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5D8DAD279983991B5439BC2489FC74B +A2CA4DA6CE50ACD555A8D151A6CE50A6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4F +A6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4F +A6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4F +A6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4F +A6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CE4FA6CF50 +A8D051AAD354A5CD509EC54A9AC14895BB458AAD406A8431B6B7B4F5F5F5FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA94A0AE2752852D5E9930639F3165A23367A53469A7366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB3569A73265A230629E2E5F992C5C9526508149596C +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +F1F1F1DCDCDC9FB0B52B8CA732A4C335ACCC37AFCF38B2D33AB5D63BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D93BB7D9 +3BB7D93BB7D93BB7D93BB7D93AB4D537AFCF35AACA33A5C4309DBB27829A869296DCDCDCF1F1F1 +FAFAFAFEFEFEFFFFFFF7F7F7878787101010000000000000000000080808787878EFEFEFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF3F3F3D4D6CE +79973990B5439BC2489EC64BA1C94DA3CB4EA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA5CD4F +A5CD4FA5CD4FA5CD4FA5CD4FA5CD4FA4CD4FA1C94D9DC54A9AC04895BB4589AC40698431B2B3B0 +F3F3F3FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2752852D5E9930639F3165A2 +3367A53469A7366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB3569A73265A230629E +2E5F992C5C9526508149596CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9FB0B52B8BA632A3C235AACA36ADCE38B1D13AB4D5 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D8 +3BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D83BB6D839B2D337AECE35A9C833A4C3309CB9 +278199869296DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFE7E7E7585858000000000000 +000000000000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCF1F1F1D2D4CC7896388FB34299C0479DC54AA0C84CA1CA4DA3CB4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4E +A4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA4CC4EA3CB4EA0C84C9CC34998BF47 +93B94488AB3F688331B0B1AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE +2752852D5E9930629F3165A23367A53469A7366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB3569A73265A230629E2E5F992C5C9526508149596CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EB0B52A8AA531A2C1 +34A9C936ACCD37AFD039B2D33AB5D63AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D7 +3AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D73AB5D639B1D2 +36ADCD34A8C732A3C22F9BB8278098869295DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFC7C7C7383838000000000000101010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1D1D3CB7795388EB24198BF479CC3499EC64B +A0C84CA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4D +A2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4D +A2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4D +A2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4D +A2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4DA2CA4D +A1CA4D9EC64B9BC24997BE4792B84487AA3E678230B0B1AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA94A0AE2752852D5E9930629F3165A23367A53469A7366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB366BAB +366BAB366BAB366BAB366BAB366BAB3569A73265A230629E2E5F992C5C9526508149596CEAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 +DCDCDC9EB0B52A8AA431A1BF34A9C836ACCB37AFCF39B2D23AB4D53AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D63AB4D6 +3AB4D63AB4D63AB4D539B1D136ACCC34A7C632A2C12F9AB7277F98869295DCDCDCF1F1F1FAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F484848AFAFAFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1D0D3CB769537 +8DB24197BE469BC3499EC64A9FC84CA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4DA1CA4D +A1CA4DA1CA4DA1CA4DA1CA4DA1C94D9EC64B9AC14896BD4691B74387A93E678130B0B1AEF1F1F1 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2751842D5E9830619E3164A13366A4 +3468A6366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA +366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA +366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA +366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA +366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA366AAA3568A63264A130619D2E5E98 +2C5B94264F8149596CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFFFFFF +FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EB0B52A89A331A1BE34A8C736ABCA37AECE39B1D13AB3D4 +3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 +3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 +3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 +3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 +3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 +3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 +3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 +3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 +3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D482E7FFFFFFF1 +82B3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 +3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 +3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 +3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4 +3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D439B0D036ABCA34A7C532A2C02F9AB6277F97 +869295DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCF1F1F1D0D3CB7593378CB04096BD4699C1489CC44A9EC64B9FC84C9FC84C9FC84C9FC84C +9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C +9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C +9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C +9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C +9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9FC84C9CC44A99C04895BC4690B643 +85A83D668030B0B1AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE275184 +2D5D982F619E3164A13266A43468A6356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +3468A63264A130619D2E5E982C5B94264F8149596CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEB2F2F2F +080808757575EBEBEBFDFDFDFEFEFEFEFEFEFAFAFAF1F1F1DCDCDC9EB0B42A88A2309FBD33A7C6 +35AAC936ADCC38B0D039B2D239B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339CDF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1DADB39B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339CDF1FFFFFFC2CDD339B2D339B2D339B2D339B2D35FDAF7FFFFFF +C2CDD339B2D339B2D339B2D339B2D339CDF1FFFFFFC2CDD339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D381E6FFFFFFF181B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3 +39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D238AFCF36AAC9 +33A5C431A1BF2E99B5267E96869295DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFDFDFDFEFEFEFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1D0D3CB7492378AAF4094BB4598C0489BC3499DC54B +9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C +9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC74C9EC64C +9BC34A97BE4794BA458FB44284A73D657F2FB0B1AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA94A0AE2751842C5D982F619E3064A13266A43368A6356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA3368A63164A12F619D2D5E982B5B94264F8149596CEAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFBFBFBBEBEBE000000000000000000171717929292FBFBFBFCFCFCF9F9F9F1F1F1DCDCDC +9EB0B42987A1309EBC33A6C535A9C836ACCB38AFCF39B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139CCF0FFFFF7A3BFD139B1D139B1D139CCF0FFFFFF +FFE6E139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39BFE8E1FFFFC2CCD139B1D139B1D139B1D139B1D139B1D139BFE8E1FFFFE1D9D939B1D139B1D1 +39B1D139B1D9A3F2FFFFFFFFFFE6E139B1D139B1D139B1D139B1D181E6FFFFFFF081B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139BFE8E1FFFFC2CCD1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1 +39B1D139B1D138AECE35A9C833A4C331A0BE2E98B4267D94869295DCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F44E4E4E +3636368C8C8CFBFBFBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1D0D3CB7391368AAE3F +94BA4597BE479AC1499CC34A9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B +9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B +9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B +9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B +9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B9DC54B +9DC54B9DC54B9DC54B9DC54B9AC14997BD4793B9458EB34283A53C647E2FB0B1AEF1F1F1FCFCFC +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2751842C5D982F619E3064A13266A43368A6 +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA3368A63164A12F619D2D5E982B5B94 +264F8149596CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF7F7F7EBEBEB4D4D4D0000000000000000000000002D2D2D +B9B9B9F6F6F6EFEFEFDBDBDB9EB0B42987A0309EBB33A5C334A8C736ABCA38AECD39B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039CCF0FFFFF7A3BFD0 +39B1D039B1D039B1D081E6FFFFF2E85FB1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039BFE8E1FFFFC2CCD039B1D039B1D039B1D039B1D039B1D039B1D8 +A3F2FFFFF2E85FB1D039B1D039B1D039B1E0C2FFFFFFFFFFFFF2E85FB1D039B1D039B1D039B1D8 +A3F2FFFFE6E039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039BFE8E1FFFFC2CCD039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0 +39B1D039B1D039B1D039B1D039B1D039B1D037ADCC35A9C733A4C231A0BC2E97B3267D94869295 +DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFBFBFBBFBFBF000000000000000000262626AAAAAAFBFBFBFDFDFDFEFEFEFFFFFFFCFCFC +F1F1F1D0D3CB72903688AC3F92B84496BC4698BF489AC2499CC44B9CC44B9CC44B9CC44B9CC44B +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B +9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC44B9CC34A99BF4895BB4691B7448DB14182A43C +647D2EB0B1AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2751842C5D98 +2F619E3064A13266A43368A6356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA3368A6 +3164A12F619D2D5E982B5B94264F8149596CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF4F4F4E6E6E6D3D3D3888888 +181818000000000000000000000000525252D5D5D5D9D9D99DAEB329869F2F9DBA32A4C234A7C5 +35AAC937ADCC38AFCF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38CBEFFFFFF7A2BDCF38B0CF38B0CF38B0D7A2F2FFFFF2E75EB0CF38B0CF38B0CF38BDE7 +E1FFFFFFFFFFFFFFFFFFF2E75EB0CF38B0CF38B0CF5ED8F7FFF2E75EB0E0C2FFFFFFFFFFFFFFFF +E1D8D738B0CF38B0CF38B0CF38B0CF38BDE7E1FFFFFFFFFFFFFFFFFFFFFFC2CBCF38B0CF38B0CF +38B0CF5ED8F7FFF2E75EBDE7E1FFFFFFFFFFC2CBCF80E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E7 +5EB0CF38B0CF38B0CF38B0CF5ED8F7FFFFF7A2BDCF38B0CF38B0CF38CBEFFFFFF7A2D8EFFFFFF7 +A2BDCF38B0CF38B0CF38BDE7E1FFFFE1D8D738B0CF5ED8F7FFF2E75EBDE7E1FFFFFFFFFFC2CBCF +38B0CF5ED8F7FFFFEF80B0CF80E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E75EB0CF38B0CF38BDE7 +E1FFFFFFFFFFFFFFFFFFF2E75EB0CF38B0CF38B0CF5ED8F7FFF2E75EBDE7E1FFFFFFFFFFC2CBCF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF +38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF36ACCB34A7C532A3C0 +309EBB2D96B2257C93869295DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8E6E6E62A2A2A0000000000000000000000003D3D3D +C9C9C9FCFCFCFEFEFEFBFBFBF1F1F1D0D3CB718F3587AB3E91B74395BB4597BE4799C0499BC24A +9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A +9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC34A9BC24A98BE48 +94BA4591B6438CB04081A33B637C2EB0B1AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA94A0AE2751842C5D982F619E3063A13265A33368A6356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA +356AAA356AAA356AAA3367A63164A12F619D2D5E972B5B93264E7F48586BE8E8E8F5F5F5FAFAFA +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFAFAFA +F4F4F4E6E6E6D4D4D4C4C4C4B4B4B462626206060600000000000000000007070769696996A7AA +28849D2F9BB831A3C133A6C435A9C836ACCB38AECD38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38CAEFFFFFF7A2BDCE38AFCE38AFCE38CAEFFFFFFFE1D8D6 +38AFCE38AFCE38CAEFFFFFFFE1D8D638AFCE38AFD6A2F2FFFFFFEF80AFCE38AFCE5ED8F7FFFFFF +FFFFF7A2BDCE38AFCE38CAEFFFFFFFE1D8D638AFCE38AFCE38CAEFFFFFFFE1D8D638AFCE38AFCE +38CAEFFFFFFFE1D8D638AFCE38AFCE5ED8F7FFFFFFFFFFEF80AFCE38AFCE38AFCE38AFCE38BDE7 +E1FFFFC2CACE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38CAEFFFFFFFC2CACE38AFCE38AFCE +5ED8F7FFF2E75EBDE7E1FFFFE1D8D638AFCE38AFCE38CAEFFFFFF7A2BDCE38AFCE5ED8F7FFFFFF +FFFFEF80AFCE38AFCE38AFCE38AFCE5ED8F7FFFFEF80AFCE38AFCE38BDE7E1FFFFC2CACE38AFCE +38AFCE38AFCE38CAEFFFFFFFE1D8D638AFCE38AFD6A2F2FFFFFFEF80AFCE38AFCE5ED8F7FFFFFF +FFFFEF80AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE +38AECD36ABCA34A6C432A2BF309DBA2D95B1257B92869295DCDCDCF1F1F1FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF5F5F5E7E7E7CECECE6A6A6A +0C0C0C000000000000000000000000646464E2E2E2F9F9F9F0F0F0D0D3CB718D3587A93E90B543 +94B94596BC4798BF489AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A +9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A +9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A +9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A +9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A9AC14A +9AC14A9AC14A9AC04A97BD4893B94590B4438BAE4080A13B627B2EB0B1AEF1F1F1FCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2750832C5D972F609D3063A03265A33367A53569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93367A53163A02F609B2C5C95152C48000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000E10101A54642D99B531A1BF32A5C334A8C636ABCA37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC36C9EEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFEE80ADCC37ADCC37ADCC36ADD5A2F2FFFFE4DD37ADCC37ADCC37ADCC36BBE6E1FFFF +C1C9CC37ADCC5DD7F7FFFFFFC1C9CC37ADCC37ADCC37ADCC80E4FFFFF2E65DADCC36ADD5A2F2FF +FFE4DD37ADCC37ADCC37ADCC37ADCC80E4FFFFF2E65DADCC37ADCC5DD7F7FFFFFFC1C9CC37ADCC +37ADCC37ADCC37ADCC36BBE6E1FFFFC1C9CC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC36ADDD +C1FFFFFFE4DD37ADCC36ADD5A2F2FFFFE4DD36ADD5A2F2FFFFE4DD37ADCC37ADCC80E4FFFFF2E6 +5DADCC37ADCC5DD7F7FFFFFFC1C9CC37ADCC37ADCC37ADCC37ADCC5DD7F7FFFFEE80ADCC37ADCC +36BBE6E1FFFFC1C9CC37ADCC37ADCC36ADD5A2F2FFFFE4DD37ADCC37ADCC37ADCC36BBE6E1FFFF +C1C9CC37ADCC5DD7F7FFFFFFC1C9CC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC +37ADCC37ADCC37ADCC37ADCC37ADCC35AAC833A5C331A1BE2F9CB92C94B0247B91859194DCDCDC +F1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFBFB +F4F4F4E7E7E7D4D4D4C4C4C4A9A9A94C4C4C000000000000000000000000070707797979E5E5E5 +CED0C96F8B3485A83D8FB44292B84495BB4697BD4898BF4999C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999CAA9EEFFFFDED549 +99C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C04999C049 +99C04999C04999C04999C04999C04999C04998BF4995BB4792B7448EB34289AD3F7FA03A617A2D +B0B1AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAE2750832C5D972F609D +3062A03265A33367A53569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93367A53163A0 +2F5F9B2C5A93142A45000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000C2A312E99B632A3C134A7C5 +36AAC937ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +36C8EEFFFFF7A2BACB37ACCB36C8EEFFFFFFE1D6D437ACCB37ACCB36ACDCC1FFFFE1D6D437ACCB +37ACCB37ACCB36ACDCC1FFFFE1D6D437ACCB5DD6F7FFFFEE80ACCB37ACCB37ACCB37ACCB5DD6F7 +FFFFEE80ACCB36BAE6E1FFFFE1D6D437ACCB37ACCB37ACCB37ACCB5DD6F7FFFFF7A2BACB37ACCB +5DD6F7FFFFEE80ACCB37ACCB37ACCB37ACCB37ACCB36BAE6E1FFFFC1C8CB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB80E4FFFFFFEE80ACCB36ACDCC1FFFFC1C8CB37ACCB5DD6F7FFFFEE +80ACCB36ACD4A2F2FFE1D6D437ACCB37ACCB5DD6F7FFFFEE80ACCB37ACCB37ACCB37ACCB37ACCB +5DD6F7FFFFEE80ACCB37ACCB36BAE6E1FFFFC1C8CB37ACCB37ACCB36ACDCC1FFFFE1D6D437ACCB +37ACCB37ACCB36ACDCC1FFFFE1D6D437ACCB5DD6F7FFFFEE80ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB +37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB35A9C733A4C2319FBD2F9BB8 +2C93AF247A90849093DBDBDBEFEFEFF8F8F8FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCCDCDCDBDBDBD +BDBDBDBDBDBDBDBDBDBCBCBCBCBCBCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB +BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C +7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B +6C6C6C3E3E3E3E3E3E3E3E3E3C3C3C3A3A3A3737373333333030302E2E2E111111000000000000 +0000000000000000001515158485816D893384A63D8EB34292B74494BA4696BC4798BE4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998CAA9EEFFFFDED54998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF49 +98BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BF4998BE4994BA4791B644 +8DB24289AC3F7EA03A60792DB0B1AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +949FAE2750832C5C972F609D3062A03265A33367A53569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93367A531639F2E5E9A2B588F132842000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000E2E37 +257F972E99B630A0BF33A4C335A8C736ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36C8EDFFFFF7A2B9CA36ABCA36ABCA5DD6F7FFFFF7A2B9CA36ABCA +36B9E5E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D6D336ABCA5DD6F7FFFFED80ABCA +36ABCA36ABCA36ABCA5DD6F7FFFFF7A2B9CA36B9E5E1FFFFC1C8CA36ABCA36ABCA36ABCA36ABCA +36C8EDFFFFF7A2B9CA36ABCA5DD6F7FFFFED80ABCA36ABCA36ABCA36ABCA36ABCA36B9E5E1FFFF +C1C8CA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36C8EDFFFFF7A2B9CA36C8EDFFFFED +80ABCA36ABCA36C8EDFFFFFFC1C8CA36B9E5E1FFFFC1C8CA36ABCA36ABCA5DD6F7FFFFED80ABCA +36ABCA36ABCA36ABCA36ABCA5DD6F7FFFFED80ABCA36ABCA36B9E5E1FFFFC1C8CA36ABCA36ABCA +36B9E5E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D6D336ABCA5DD6F7FFFFED80ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA +34A7C632A3C1309EBC2E9AB72B92AD24798E849093808080000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000001A210C7999378BB14190B643 +92B84595BB4796BD4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE48 +97BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE48 +97BE48A9DFE3FFF4A9A9C9A9EEFFFFFFFFFFDDD44897BE48A9DFE3FFF4A9A9BE8ADDFFFFFFFFFF +FFFFFFEEDF6A97BE4897BE48BBEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A9A9BE4897BE4897BE48 +97BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE4897BE48 +97BE4896BD4893B94690B5438CB14187AB3E7D9E3960782CB0B1AEF1F1F1FCFCFCFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA949FAE2750832C5C972F609D3062A03265A33367A53569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9 +3569A93569A93569A93569A93569A93569A93367A531639F2E5E982A578D254E801E3E66374352 +ADADADB7B7B7BBBBBBBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBCBCBCBCBBBBBBBBBBBBBBBBBBBABABAB7B7B7B3B3B38C8C8C2A2A2A000000000000000000 +000000222222616B6E206B7F2888A12E98B3309FBC33A3C235A7C636AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936C8EDFFFFF6A2B9C936AAC936AAC9 +36B9E5E1FFFFE1D5D336AAC936AADBC1FFFFE1D5D336AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC95DD5F6FFFFED80AAC936AAC936AAC936AAC95DD5F6FFFFED80AAC936B9E5E1FFFFE1D5D3 +36AAC936AAC936AAC936AAC95DD5F6FFFFF6A2B9C936AAC95DD5F6FFFFED80AAC936AAC936AAC9 +36AAC936AAC936B9E5E1FFFFC1C8C936AAC936AAC936AAC936AAC936AAC936AAC936AAC936B9E5 +E1FFFFE1D5D35DD5F6FFF2E55DAAC936AAC936AADBC1FFFFE1D5D35DD5F6FFFFED80AAC936AAC9 +36AAC95DD5F6FFFFED80AAC936AAC936AAC936AAC936AAC95DD5F6FFFFED80AAC936AAC936B9E5 +E1FFFFC1C8C936AAC936AAC936AADBC1FFFFE1D5D336AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC95DD5F6FFFFED80AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9 +36AAC936AAC936AAC936AAC934A6C532A2BF309DBA2E99B52B91AC24778E828E91828282000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000383837 +5B722A7D9E3A89AE3F8EB34291B74493B94695BC4795BC4795BC4795BC4795BC4795BC4795BC47 +95BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC47 +95BC4795BC4795BC4795BC4795BC47A8DEE3FFFFFFFFFFC6B9BC4795BC4795BC4795BC47A8DEE3 +FFFFFFFFFFE3CCC84795BC4795D3C6FFFFFFEEDE6995BC4795BC4795C8A8EEFFFFDDD34795BC47 +95BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC4795BC47 +95BC4795BC4795BC4795BC4795BC4795BB4792B8458EB4438BAF4086AA3E7C9D395F782CB0B1AE +F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAE2650832C5C972E609D3062A0 +3165A33367A53469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 +3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 +3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 +3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 +3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93367A531639F2E5E99 +2A588E264F811E4069384454B2B2B2BCBCBCBFBFBFC1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0C0C0BEBEBEAFAFAF4F4F4F000000 +0000000000000000000F0F0F6A6A6A9C9C9C79878A216C802989A22E97B3309FBC33A3C035A7C5 +36A9C736AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836C8ED +FFFFF6A2B9C836AAC836AAC836AAD2A2F2FFFFF2E45DAAC836AAD2A2F2FFFFE3DB36AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC85DD5F6FFFFF6A2B9C836AAC836AAC836AAD2A2F2FFFFF2E4 +5DAAC836AAD2A2F2FFFFE3DB36AAC836AAC836AAC836AAC880E3FFFFF2E45DAAC836AAC85DD5F6 +FFFFED80AAC836AAC836AAC836AAC836AAC836B9E4E1FFFFC1C8C836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAD2A2F2FFFFE3E4A2F2FFE1D5D236AAC836AAC836AAC880E3FFFFF2E4 +A2E3FFFFE3DB36AAC836AAC836AAC85DD5F6FFFFED80AAC836AAC836AAC836AAC836AAC85DD5F6 +FFFFED80AAC836AAC836B9E4E1FFFFC1C8C836AAC836AAC836AAD2A2F2FFFFE3DB36AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC85DD5F6FFFFED80AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8 +36AAC836AAC836AAC836AAC836AAC836AAC836AAC836A9C834A6C432A1BE309DB92E99B42B90AB +23768C7F8A8D7C7C7C000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000001F1F1F313131313131 +313131313131313131313131313131313131303030303030303030303030303030303030303030 +303030303030303030303030303030606060606060606060606060606060152334152334606060 +6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6B6B6B +8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8B8B8B8888887373731A1A1A000000000000000000 +0000001B1B1B818181AAABA560792D7B9B3889AC3F8DB24290B54493B84594BA4795BA4795BA47 +95BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA47 +95BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA47A8DDE3FFFFFFDDD24795BA47 +95BA4795BA4795BA47A8DDE3FFFFFFDDD24795BA4795BA4795BA47B9E8FFFFF4A8A8BA4795BA47 +95C6A8EEFFFFDDD24795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA47 +95BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4795BA4794BA4791B6458EB2428AAE40 +86A93D7B9C395E772CB0B1AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAE +2650832C5C972E609C2F629F3164A23266A53468A83469A93469A93469A93469A93469A93469A9 +3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 +3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 +3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 +3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9 +3469A93266A430639F2D5F992A59912752872145703E4B5CC5C5C5D1D1D1D5D5D5D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 +D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D3D3D3 +8080800C0C0C0000000000000000000505054F4F4FA7A7A7AFAFAFABABAB8491962272872A8DA8 +2E99B6319FBC32A3C034A6C435A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C6 +35A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C6 +35A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C6 +35A8C635A8C635A8C635C6EDFFFFF6A1B8C635A8C635A8C635A8C65CD5F6FFFFFFC1C6C635A8C6 +35C6EDFFFFFFC1C6C635A8C635A8C635A8D9C1FFF6A1B8C635A8C65CD5F6FFFFFFFFFFF6A1B8C6 +35A8C635C6EDFFFFFFC1C6C635A8C635A8C65CD5F6FFFFFFC1C6C635A8C635A8C65CD5F6FFFFFF +C1C6C635A8C635A8C65CD5F6FFFFED80A8C635A8C635A8C635A8C635A8C635A8D9C1FFFFFFE3D9 +35A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C65CD5F6FFFFFFFFFFFFC1C6C635A8C6 +35A8C635A8C65CD5F6FFFFFFFFFFFFC1C6C635A8C635A8C635A8C65CD5F6FFFFED80A8C635A8C6 +35A8C635A8C635A8C65CD5F6FFFFED80A8C635A8C635A8D9C1FFFFFFE3D935A8C635A8C635A8C6 +35C6EDFFFFFFC1C6C635A8C635A8C635A8D9C1FFF6A1B8C635A8C65CD5F6FFFFED80A8C635A8C6 +35A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C6 +35A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C6 +35A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C634A5C2 +32A0BD309CB82E97B32B8FA922758A7D888BC1C1C1C3C3C3BEBEBEBCBCBCBBBBBBBBBBBBBABABA +B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8 +B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B9B9B9B9B9B9B9B9B9BABABABBBBBBBBBBBBBCBCBCBCBCBC +BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC +BCBCBC294566294566BCBCBCBDBDBDBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE +BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBCBCBCB9B9B96565650B0B0B +0000000000000000000505055A5A5AACACACB7B7B7ADAFA8617A2D7A9A3887AA3E8CB0418FB443 +91B64593B84693B84693B84693B84693B84693B84693B84693B84693B84693B84693B84693B846 +93B84693B84693B84693B84693B84693B84693B84693B84693B84693B84693B84693B84693B846 +A7DCE2FFFFC6B9B84693B84693B84693B84693B846A7DCE2FFFFC6B9B84693B84693B84693B846 +A7DCE2FFFFC6B9B84693B84693C4A8EDFFFFDCD04693B84693B84693B84693B84693B84693B846 +93B84693B84693B84693B84693B84693B84693B84693B84693B84693B84693B84693B84693B846 +93B84690B5448CB14289AD3F84A73D7A9A385D752BB0B1AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA949FAD264F822C5C962E5F9C2F619F3164A13266A43468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83265A430629F2E5E9A2B5A9329568D234978435264D9D9D9 +E6E6E6EBEBEBEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED +ECECECECECECE9E9E9BFBFBF0000000000000000000000003737379A9A9AB6B6B6BEBEBEC4C4C4 +BFBFBF909FA424798F2B91AD2F9BB8309EBB32A2BF34A4C235A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535C5ECFFFFF6A1B6C535A7C535A7C535A7C5 +35B6E2E1FFFFFFE2D935A7C535A7C535B6E2E1FFFFFFFFFFFFFFFFFFFFF6A1B6C535A7C535A7C5 +5CD4F6FFFFEC80B6E2E1FFFFFFFFFFFFFFFFC1C5C535A7C535A7C535A7C535A7C535C5ECFFFFFF +FFFFFFFFFFFFFFFFF6A1B6C535A7C535A7C535A7C55CD4F6FFFFEC80A7C535A7C535A7C535A7C5 +35A7C535A7C535C5ECFFFFFFFFFFFFFFF1E25CA7C535A7C535A7C535A7C535A7C535A7C535B6E2 +E1FFFFFFFFEC80A7C535A7C535A7C535A7C535B6E2E1FFFFFFFFF6A1B6C535A7C535A7C535A7C5 +5CD4F6FFFFEC80A7C535A7C535A7C535A7C535A7C55CD4F6FFFFEC80A7C535A7C535A7C535C5EC +FFFFFFFFFFFFFFF1E25CA7C535A7C535B6E2E1FFFFFFFFFFFFFFFFFFFFF6A1B6C535A7C535A7C5 +5CD4F6FFFFEC80A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5 +35A7C535A7C535A7C533A3C1319FBC2F9BB72D96B22A8EA822748A7E8A8CC3C3C3C6C6C6C3C3C3 +C2C2C2C2C2C2C2C2C2C3C3C3C3C3C3C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4 +C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C6C6C6C7C7C7 +C9C9C9CACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACA +CACACACACACACACACACACACACACACA2C4A6D2D4A6ECCCCCCCDCDCDCFCFCFD0D0D0D1D1D1D1D1D1 +D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0D0D0D0CECECE +A4A4A42525250000000000000000000000003434349D9D9DB7B7B7C2C2C2C7C7C7B7BAB3637E2F +7C9D3887AB3F8BB0418EB34390B54492B74692B74692B74692B74692B74692B74692B74692B746 +92B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B746 +92B74692B74692B74692B746A6DBE2FFFFC6B8B74692B74692B74692B74692B746A6DBE2FFFFC6 +B8B74692B74692B74692B746A6DBE2FFFFE2CAC34692B74692C3A8EDFFFFDCCF4692B74692B746 +92B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B74692B746 +92B74692B74692B74692B74692B7468EB4438BB04188AB3F83A63C7999385C752BB0B1AEF1F1F1 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F822B5C962E5F9C2F619F3164A1 +3266A43468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83265A430629F2E5F9B2C5C95 +2A5890244C7D475669E4E4E4F2F2F2F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F7F7F7F2F2F2D1D1D10707070000001D1D1D838383B7B7B7 +C0C0C0CBCBCBD5D5D5D8D8D8CECECE98A8AC257D942C94AF2F9BB7309EBB32A1BE34A4C135A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C45CD4F5FFFFEC80A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4 +35A7C435A7C435A7C435A7C435A7C435A7C435A7C433A3C0319FBB2F9AB62D96B12A8DA7237589 +808C8ECCCCCCD6D6D6D7D7D7D7D7D7D7D7D7D9D9D9DBDBDBDCDCDCDDDDDDDDDDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD +DDDDDDDDDDDDDEDEDEE0E0E0E1E1E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2 +E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E232527A32537BE4E4E4E5E5E5 +E6E6E6E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 +E7E7E7E7E7E7E5E5E5D2D2D21414140000000000000000001B1B1B7C7C7CB4B4B4BFBFBFCCCCCC +D7D7D7DADADAC4C6BF6781307D9E3986AA3E8BAF408DB2428FB44391B64591B64591B64591B645 +91B64591B64591B64591B64591B64591B64591B64591B64591B64591B64591B64591B64591B645 +91B64591B64591B64591B64591B64591B64591B64591B645A5DBE2FFFFC6B8B64591B64591B645 +91B64591B645A5DBE2FFFFC6B8B64591B64591B64591B645A5DBE2FFFFC6B8B64591B64591C2A8 +EDFFFFDBCF4591B64591B64591B64591B64591B64591B64591B64591B64591B64591B64591B645 +91B64591B64591B64591B64591B64591B64591B64591B64591B6458EB3438AAF4187AB3E82A53C +7899375C742AB0B1AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F82 +2B5C962E5F9C2F619F3164A13266A43468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3265A430629F2E5F9B2C5C962A5991254D7F48586BE9E9E9F7F7F7FCFCFCFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFBFBFBF4F4F4E5E5E5B8B8B8 +929292BDBDBDC0C0C0C9C9C9D6D6D6E1E1E1E8E8E8E7E7E7D8D8D89CACB0267E942C93AE2E9AB6 +309DB932A0BD33A3C035A5C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C35CD4F5FFFFEC80A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3 +35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C333A2BE319DBA +2F99B52D95B02A8DA7237589838E91D4D4D4E5E5E5E9E9E9ECECECEDEDEDEEEEEEF0F0F0F1F1F1 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 +F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 +F4F4F4F5F5F5F5F5F5F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 +F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F1F1F1E8E8E8070707000000060606606060AFAFAF +BCBCBCC8C8C8D6D6D6E2E2E2EAEAEAE8E8E8CBCEC66783317D9E3985AA3D89AE408BB0418DB343 +8FB44490B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B545 +90B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B545A3DBE2 +FFFFC6B6B54590B54590B54590B54590B545A3DBE2FFFFE2C9C14590B54590B54590B568C9F3FF +FFF3A8A3B54590B54590C1A8EDFFFFDBCF4590B54590B54590B54590B54590B54590B54590B545 +90B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B54590B5458FB444 +8CB14289AD4085A93E81A43B7797375B732AB0B1AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA949FAD264F822B5C962E5F9C2F619F3164A13266A43468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83265A430629F2E5F9B2C5C962A5992254D7F48586BEAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FCFCFCF6F6F6E8E8E8D7D7D7CCCCCCCCCCCCD4D4D4DFDFDFEAEAEAF1F1F1F3F3F3EEEEEEDBDBDB +9DADB1257D942B92AD2E99B52F9CB8319FBB33A2BF34A4C134A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C25BD3F5 +FFFFEB7FA5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2 +34A5C234A4C132A1BD309CB82E98B42C94AF2A8CA6227489848F92D9D9D9EDEDEDF5F5F5F8F8F8 +FAFAFAFAFAFAFBFBFBFBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFBFBF5F5F5E8E8E8ADADAD +6E6E6EAAAAAABDBDBDC5C5C5D2D2D2DFDFDFEAEAEAF3F3F3F6F6F6EEEEEECED1C96883307C9D38 +85A83D88AC3F8AAF408CB1428FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB344 +8FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB344A2DAE2FFFFFF +DBCD448FB3448FB344A2DAE2FFFFC5B6B3448FB3448FB3448FB3448FB344A2DAE2FFFFFFFFFFE2 +C8C1448FB3448FCDC5FFFFFFDBCD448FB3448FB3448FB388DBFFFFFFE7888FB3448FB3448FB344 +8FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB3448FB344 +8FB3448FB3448FB3448EB3448BB04188AC3F85A83D80A23A7696365A7229B0B1AEF1F1F1FCFCFC +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F822B5C962E5F9C2F619F3164A13266A4 +3468A73468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8 +3468A83468A83468A83468A83468A83468A83468A83468A83265A330629F2E5F9B2C5C962A5992 +254D7F48586BEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F0F0F0E6E6E6E0E0E0E2E2E2E9E9E9F0F0F0F7F7F7 +FAFAFAF8F8F8F0F0F0DCDCDC9EAEB2257C932B91AD2E98B52F9BB8319EBB33A1BE34A3C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1 +34A4C134A4C134A4C134A4C134A4C134A3C1329FBD309BB82E97B32C93AE2A8BA5227389859093 +DBDBDBF0F0F0F9F9F9FDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FDFDFDF7F7F7EAEAEAD9D9D9CBCBCBC9C9C9D0D0D0DBDBDBE7E7E7F0F0F0F7F7F7FBFBFBFAFAFA +F0F0F0CFD2CA6782307B9C3884A63C87AA3E89AD408BAF428EB1438EB2448EB2448EB2448EB244 +8EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB244 +8EB2448EB244A2DAE2FFFFFFDBCD448EB2448EB244A2DAE2FFFFC5B5B2448EB2448EB2448EB244 +8EB244A2DAE2FFFFC5B5C0A8EDFFFFFFFFFFFFFFFFDBCD448EB2448EB2448EB2448EB2448ECDC5 +FFFFFFFFFFFFFFF2A8A2B2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB2448EB244 +8EB2448EB2448EB2448EB2448EB2448EB2448EB2448DB1438AAE4187AA3F84A63D7FA13A759436 +5A7129B0B0AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F822B5C95 +2E5F9B2F619E3164A03266A33468A73468A73468A73468A73468A73468A73468A73468A73468A7 +3468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A7 +3468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A7 +3468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A7 +3468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73265A3 +30629E2E5F9A2C5C952A5991254D7E48586BEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF8F8F8F3F3F3F1F1F1 +F3F3F3F7F7F7FAFAFAFDFDFDFDFDFDFAFAFAF1F1F1DCDCDC9EADB2257B932B90AC2E97B42F9AB7 +319DBA339FBD34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0 +34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0329EBC309AB72E96B2 +2C91AD2A8AA5227288859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F0F0F0E5E5E5DDDDDDDEDEDEE5E5E5EEEEEEF5F5F5 +FAFAFAFDFDFDFEFEFEFCFCFCF1F1F1CFD1CA66812F7B9B3783A53C86A93E88AB3F8BAE418DB042 +8DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB043 +8DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB043 +8DB0438DB0438DB0438DB0438DB043A1D8E2FFFFC5B4B0438DB0438DB0438DB0438DB0438DB043 +8DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB043 +8DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438DB0438AAC40 +86A93E83A53C7E9F3A759335597029B0B0AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA949FAD264F812B5C952E5F9B2F619E3164A03266A33468A63468A73468A73468A73468A7 +3468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A7 +3468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A7 +3468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A7 +3468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A7 +3468A73468A73468A73265A230629E2E5F9A2C5C952A5991254D7E48586BEAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFDFDFDFBFBFBFBFBFBFCFCFCFDFDFDFEFEFEFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB2 +257A922B8FAB2D96B32F98B6309BB9329EBC33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF +33A0BF319DBB2F99B62D95B12B90AC2989A4227187859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF8F8F8F2F2F2EFEFEF +F0F0F0F5F5F5F9F9F9FCFCFCFEFEFEFFFFFFFFFFFFFCFCFCF1F1F1CFD1CA667F2F7A993782A33B +86A73D88AA3F8AAC408CAE428DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43A1D8E2FFFFC5B4AF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF438DAF43 +8DAF438DAF438CAE4289AB4086A73E82A33C7E9E39749235596F29B0B0AEF1F1F1FCFCFCFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F812B5B952E5F9B2F619E3163A03265A33467A6 +3468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A7 +3468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A7 +3468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A7 +3468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A73468A7 +3468A73468A73468A73468A73468A73468A73468A73265A230629E2E5F992C5B952A5891254D7E +48586BEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFAF1F1F1DCDCDC9DADB22479912A8EA92D95B12E97B5309AB8329DBB339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE +339FBE339FBE339FBE339FBE339FBE319CB92F98B52D94B02B8FAB2988A2217086859093DCDCDC +F1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFDFDFDFBFBFBFAFAFAFBFBFBFCFCFCFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1 +CFD1CA657E2E79983681A23B84A63D86A83F87A84089AA428AAB428AAC428BAD428BAD428BAD42 +8BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD42 +8BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD42 +9FD7E2FFFFC5B3AD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD42 +8BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD428BAD42 +8BAD428BAD428BAD428BAD428AAC4289AB4286A73F84A53E84A53D81A23B7C9C39739134586E28 +AFB0AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264E812B5A952E5E9B +2F609E3162A03265A33467A63467A73467A73467A73467A73467A73467A73467A73467A73467A7 +3467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A7 +3467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A7 +3467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A7 +3467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73264A230619E +2E5E992C5B952A5890254C7E48586BEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB12479902A8EA82D94B02E97B3309AB6 +329DBA339FBC339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD +339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBD339FBC319BB82F97B42D93AF2B8FAA +2988A1217085859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCF1F1F1CFD1CA647D2E78973680A13A81A13D82A14084A34186A64287A743 +88A84388A94288A94289AA4289AA4189AB4189AC4189AC4189AC4189AC4189AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC41 +89AC4189AC4189AC4189AB4189AB4188AA4188A94288A84287A74285A54183A23F809F3D7D9C3B +7C9C397B9B38728F33576D28AFB0AEF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA +949FAD264E812B5A952E5E9B2F609D3162A03265A33467A63467A73467A73467A73467A73467A7 +3467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A7 +3467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A7 +3467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A7 +3467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A73467A7 +3467A73467A73264A230619E2E5E992C5B952A5890254C7E48586BEAEAEAF8F8F8FDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB124788F +2A8DA72C93AF2E96B23099B5319CB8339EBB339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC +339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBC339EBB +319AB72F96B22D92AE2B8EA92887A0216F84859093DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1CFD1CA60782C718D337B993D7E9B40 +809E4182A04284A24484A34485A44486A54486A64387A74387A74387A84287A84288A94288A942 +88A94288AA4288AA4188AA4188AA4189AB4189AB4189AB4089AB4089AB4089AB4089AB4089AB40 +89AB4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC4089AC40 +89AC4089AC4089AC4089AC4089AC4089AB4089AB4089AB4089AB4089AB4189AB4188AB4188AB41 +88AA4188AA4188A94188A94188A94287A84287A84287A74286A64286A64285A54284A44283A342 +82A141809F407D9B3E7A973C77943A7491386B8731526726AFB0AEF1F1F1FCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF8F8F8EAEAEA949FAD264E802B5A942E5E9A2F609D31629F3265A23467A53467A6 +3467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A6 +3467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A6 +3467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A6 +3467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A6 +3467A63467A63467A63467A63467A63467A63264A130619D2E5E982C5B942A588F254C7E48586B +EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +F1F1F1DCDCDC9DADB124778E298BA62C92AE2D95B12F98B4319AB7329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA329CBA +329CBA329CBA329CBA329CBA3099B62E95B12C91AC2A8DA828859F216E83859093DCDCDCF1F1F1 +FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1E1E1E1 +7D8F565B712C6B843877923E7D9A427F9C43819E44819F4482A04483A14483A24484A24484A343 +84A44385A44385A44385A54385A54385A54285A54285A64286A64286A64286A74186A74186A741 +86A74186A74186A74186A74186A84186A84186A84186A84186A84186A84087A84087A84087A840 +87A84087A84087A84086A84086A84086A84186A84186A84186A84186A84186A74186A74186A741 +86A74185A74185A64185A64185A64185A54284A54284A44284A44283A34283A34283A24282A242 +82A14281A042809E427F9D417E9B417D9A407A963E77933C718C3A657E325267274A5631E1E1E1 +F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264E802B5A942E5E9A2F609D +31629F3265A23467A53467A63467A63467A63467A63467A63467A63467A63467A63467A63467A6 +3467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A6 +3467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A6 +3467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63467A6 +3467A63467A63467A63467A63467A63467A63467A63467A63467A63467A63264A130619D2E5E98 +2C5B942A588F254C7D48586BEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB124778D298BA52C92AD2D94B02F97B3319AB6 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB8 +329CB8329CB8329CB8329CB8329CB8329CB8329CB8329CB83099B52E95B02C91AB2A8DA728859E +216E83859092DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF3F3F3E4E4E4C0C4B98898685B702F5C71316A81397790417C97447F9A45809C45 +809D45819E45829E45829F4582A04482A04482A04483A14483A14483A14483A14483A24383A243 +84A24384A34384A34384A34384A34284A34284A34284A34284A34284A34284A34284A44284A442 +84A44284A44284A44284A44284A44284A44284A44284A44284A44284A44284A44284A44284A342 +84A34284A34284A34284A34283A24283A24283A24283A14282A14382A14382A04382A043819F43 +819F43819E43809E43809D437F9C437E9B437D99427C98427A9641789340718A3B657C35586C2D +4D5F26747F5DBBBCB7E4E4E4F3F3F3FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD +254E802B5A942D5E9A2E609D30629F3165A23367A53367A63367A63367A63367A63367A63367A6 +3367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A6 +3367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A6 +3367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A6 +3367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A6 +3367A63164A12F619D2D5E982B5B9429588F244C7D48586BEAEAEAF8F8F8FDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB123768C298AA4 +2B91AC2D93AF2E96B23099B5319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7 +319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB7319BB72F98B3 +2D94AF2B90AA298CA527859D206D82858F92DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5E9E9E9D0D0D0BFBFBFA7AAA18995705E7431 +5A6D31617635687E396F873D758F407B95437E9945809B45809C45809C45809C45809D45819D45 +819D45819D44819E44819E44819E44819F44829F44829F43829F43829F43829F43829F43829F43 +829F43829F43829F43829F4382A04282A04282A04282A04282A04282A04282A04282A04282A042 +82A043829F43829F43829F43819F43819F43819F43819E43819E43819E43809D43809D43809C43 +809C437F9C437F9B437F9B437E9A437E9A437E99437D99437C9643789241738C3E6D853B657B36 +5E723255682C5163297C84698D947FBFBFBFD0D0D0E9E9E9F5F5F5FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDF8F8F8EAEAEA949FAD254E802A5A942D5E9A2E609D30629F3165A23367A53367A63367A6 +3367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A6 +3367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A6 +3367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A6 +3367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A63367A6 +3367A63367A63367A63367A63367A63164A12F619D2D5E982B5B9429588F244C7D48586BEAEAEA +F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1 +DCDCDC9DACB023758B2889A32A8FAA2C92AD2E95B02F98B3319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6319AB6 +319AB6319AB6319AB62F96B22D92AD2B8EA9298AA427839C206C81858F92DCDCDCF1F1F1FAFAFA +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8EFEFEFDBDBDB +CCCCCCBBBBBBB4B4B4A6AA9F949E817F8E61697C415B6F31596C315D7134657A386C833C738B40 +768F417892437A95447C97447D98457E99457F9A457F9A457F9A457F9B457F9B457F9B457F9B45 +7F9B447F9B447F9B447F9B447F9B447F9B447F9B447F9B437F9B437F9B437F9B437F9C437F9C43 +7F9B437F9B437F9B437F9B437F9B437F9B437F9B437F9B437F9B437E9A437E9A437E9A437E9943 +7D99437D99437D98437D98447C97437B96437A9443789242768F40738C3F70883D6B813A637836 +5B6F3255682E53662C5D6D3B68764A818B6CADADADB4B4B4BBBBBBCCCCCCDBDBDBEFEFEFF8F8F8 +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD254E802A5A932D5E9A2E609C30639F +3265A23367A43367A53367A53367A53367A53367A53367A53367A53367A53367A53367A53367A5 +3367A53367A53367A53367A53367A53367A53367A53367A53367A53367A53367A53367A53367A5 +3367A53367A53367A53367A53367A53367A53367A53367A53367A53367A53367A53367A53367A5 +3367A53367A53367A53367A53367A53367A53367A53367A53367A53367A53367A53367A53367A5 +3367A53367A53367A53367A53367A53367A53367A53367A53367A53265A22F629D2D5E982B5B94 +29588F244C7D48586AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DACB022748A2788A22A8FA92B91AC2D94AF2E97B23099B4 +3099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B4 +3099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B4 +3099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B4 +3099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B4 +3099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B4 +3099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B4 +3099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B4 +3099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B4 +3099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B4 +3099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B4 +3099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B4 +3099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B4 +3099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B43099B4 +3099B43099B43099B43099B43099B43099B43099B42E96B12C92AD2A8EA8298AA326839B1F6C80 +858F92DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFBFBFBF6F6F6E7E7E7DBDBDBCBCBCBC2C2C2B9B9B9B3B3B3AFAFAFACACACA4A89D9BA18E +8190617182505D7232596D31596C325B6D325D7134617536657A38687E3A6C833C70873E728B40 +768E417891437993437A94447A94447B95447B95447B96447C96447C97447C97447C97447D9844 +7D98447D98447D98447D98447D98447D98447D98447D98447D97447C97447C97447B96447B9543 +7A9443799342779142769041758E40738B3F6F873D6B823B677D396378375F73345B6E32586B30 +55682F55672E56692E60713D7E876A848F6DA2A59CACACACAFAFAFB3B3B3B9B9B9C2C2C2CBCBCB +DBDBDBE7E7E7F6F6F6FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD254E80 +2A5A932D5E992E619C30639F3466A13567A23567A23567A23567A23567A23567A23567A23567A2 +3567A23567A23567A23567A23567A23567A23567A23567A23567A23567A23567A23567A23567A2 +3567A23567A23567A23567A23567A23567A23567A23567A23567A23567A23567A23567A23567A2 +3567A23567A23567A23567A23567A23567A23567A23567A23567A23567A23567A23567A23567A2 +3567A23567A23567A23567A23567A23567A23567A23567A23567A23567A23567A23567A23567A2 +3567A131639E2E5F992B5B9429588E244C7D48586AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DACB02274892788A12A8EA8 +2B91AB2D93AE3196B03297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B1 +3297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13297B13196B02C91AB +2A8DA72989A226829A1F6B7F858F92DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF5F5F5EEEEEEE2E2E2DADADACFCFCFC7C7C7 +C0C0C0BBBBBBB7B7B7B3B3B3B0B0B0AFAFAFA7AB9FA5A89E9BA18E919A7E87926F7C8A60708050 +6678405C7132596D31586B31596B325A6D335B6F345D70345E72355F7336607436617637627737 +637838647939657B39667C3A677D3A687F3B69803B697F3B687E3A677D3A677D39667C39657B39 +657A386479386277376074365E72345C6F335A6D32586B31576A3056692F56692F576B2F60713D +6A794D76825D818B6C85906E989E8C9BA18EADADADAFAFAFB0B0B0B3B3B3B7B7B7BBBBBBC0C0C0 +C7C7C7CFCFCFDADADAE2E2E2EDEDEDF4F4F4FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +F8F8F8EAEAEA949FAD254E802A5A932D5E992F619C34659F37679F37679F37679F37679F37679F +37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F +37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F +37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F +37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F37679F +37679F37679F37679F37679F37679F36669E2F609A2B5B9429578F244C7D48586AEAEAEAF8F8F8 +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC +9DACB02173882786A0298DA72B90AA3193AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC3393AC +3393AC3393AC3393AC3091AB2A8CA62888A12581991F6A7E848F92DCDCDCF1F1F1FAFAFAFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF8F8F8 +F2F2F2EDEDEDE5E5E5DEDEDED7D7D7D1D1D1CBCBCBC6C6C6C1C1C1BFBFBFBCBCBCB9B9B9B5B5B5 +B2B2B2B1B1B1B1B1B1B0B0B0AEAEAEACACACA4A89DA2A59C9AA08D90997E88947087926F85906F +7D8B617B885F7A875F7181506F7F4F6E7E4F6D7C4E65784064764063754063743F63743F63743F +63754063753F64763F6477406C7B4E6D7C4F6F7E4F78855F7A885F848E6E85916E87936F90997E +999F8DA3A69DACACACAEAEAEB0B0B0B1B1B1B1B1B1B2B2B2B5B5B5B9B9B9BCBCBCBFBFBFC1C1C1 +C6C6C6CBCBCBD1D1D1D7D7D7DEDEDEE5E5E5EDEDEDF2F2F2F8F8F8FBFBFBFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD254E802A59932D5E9935639C39669C39669C +39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C +39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C +39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C +39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C +39669C39669C39669C39669C39669C39669C39669C39669C39669C39669C38659B2E5C9529578F +244C7D48576AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFAFAF1F1F1DCDCDC9DACB021728727859E298CA6308FA83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A83590A8 +3590A83590A83590A83590A83590A83590A83590A83590A8318DA62887A02580981F6A7D848F92 +DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFDFDFDFAFAFAF8F8F8F3F3F3EFEFEFEAEAEAE5E5E5E0E0E0DBDBDBD6D6D6 +D3D3D3D0D0D0CBCBCBC6C6C6C2C2C2C0C0C0BFBFBFBEBEBEBBBBBBB6B6B6B4B4B4B2B2B2B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B1B1B1B0B0B0AEAEAEACACACABABABAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABABACACACAEAEAEB0B0B0B1B1B1B2B2B2 +B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B4B4B4B7B7B7BBBBBBBEBEBEBFBFBFC0C0C0C2C2C2C6C6C6 +CBCBCBCFCFCFD3D3D3D6D6D6DBDBDBE0E0E0E5E5E5EAEAEAEFEFEFF3F3F3F8F8F8FAFAFAFDFDFD +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD254E7F2A5993 +3662993B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B6599 +3B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B6599 +3B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B6599 +3B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B6599 +3B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B65993B6599 +3B65993B65993964982C5990244C7C48576AEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DACAF21718627849D308BA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3378DA3 +3289A1257F971F697C848F92DCDCDCF1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFBFBFBFAFAFAF7F7F7 +F6F6F6F2F2F2EFEFEFECECECE9E9E9E7E7E7E3E3E3DDDDDDDADADAD8D8D8D7D7D7D4D4D4D0D0D0 +CBCBCBC7C7C7C5C5C5C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3C3C3C0C0C0BCBCBCB8B8B8B6B6B6 +B5B5B5B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B5B5B5B6B6B6B8B8B8 +BCBCBCC0C0C0C3C3C3C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C5C5C5C7C7C7CBCBCBD0D0D0D4D4D4 +D7D7D7D8D8D8DADADADDDDDDE3E3E3E7E7E7E9E9E9ECECECEFEFEFF2F2F2F6F6F6F7F7F7FAFAFA +FBFBFBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 +EAEAEA949FAD254E7F315989385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A +385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A +385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A +385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A +385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A385D8A +385D8A385D8A385D8A385D8A385D8A385D8A385D8A355B88264D7C48576AEAEAEAF8F8F8FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DABAF +2170852D7F95368498368498368498368498368498368498368498368498368498368498368498 +368498378498378498378498378498378498378498378498378498378498378498378498378498 +378498378498378498378498378498378498378498378498378498378498378498378498378498 +378498378498378498378498378498378498378498378498378498378498378498378498378498 +378498378498378498378498378498378498378498378498378498378498378498378498378498 +378498378498378498378498378498378498378498378498378498378498378498378498378498 +378498378498378498378498378498378498378498378498378498378498378498378498378498 +378498378498378498378498368498368498368498368498368498368498368498368498368498 +368498368498368498368498368498368498368498368498368498368498368498368498368498 +368498368498368498368498368498368498368498368498368498368498368498368498368498 +368498368498368498368498368498368498368498368498368498368498368498368498368498 +368498368498368498368498368498368498368498368498368498368498368498368498368498 +368498368498368498368498368498368498368498368498368498368498368498368498368498 +368498368498368498368498368498368498368498368498368498368498368498368498368498 +3684983684983684983684983684982F7E941E687B848F91DCDCDCF1F1F1FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFEFEFEFDFDFDFCFCFCFBFBFBFAFAFAF8F8F8F7F7F7F6F6F6F4F4F4F0F0F0EEEEEE +EDEDEDECECECEAEAEAE7E7E7E2E2E2DEDEDEDDDDDDDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDBDBDB +D8D8D8D2D2D2CECECECACACAC9C9C9C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8 +C8C8C8C9C9C9CACACACECECED3D3D3D8D8D8DBDBDBDCDCDCDCDCDCDCDCDCDCDCDCDDDDDDDDDDDD +DEDEDEE2E2E2E7E7E7EAEAEAECECECEDEDEDEEEEEEF0F0F0F4F4F4F6F6F6F8F8F8F8F8F8FAFAFA +FBFBFBFDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD2849702A486B2A486B2A486B2A486B2A486B2A486B +2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B +2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B +2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B +2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B +2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B2A486B29476A +4A5A6DEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FAFAFAF1F1F1DCDCDC9DABAF236475296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272296272296272296272 +296272296272296272296272296272296272296272296272296272296272235F6F848E91DCDCDC +F1F1F1FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFDFDFDFDFD +FDFDFDFCFCFCFBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F6F6F6F3F3F3F2F2F2F0F0F0F0F0F0F0F0F0 +F0F0F0F0F0F0F0F0F0EFEFEFEDEDEDE8E8E8E5E5E5E2E2E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 +E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2E2E2E5E5E5E8E8E8EDEDEDEFEFEFF0F0F0F0F0F0 +F0F0F0F0F0F0F0F0F0F0F0F0F2F2F2F3F3F3F6F6F6F8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFCFCFC +FDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8ECECECC3C8CEB1B6BCA5AAB0A1A6AC +9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA +9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA +9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA +9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA +9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA9FA4AA +9FA4AAA0A5ABA4A9AFAEB3B9D7D7D7ECECECF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF2F2F2DDDDDDB2B9BC809AA27A949C79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B79939B +7A949C819BA3B2BBBDDDDDDDF2F2F2FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFC +FBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF9F9F9F7F7F7F5F5F5F3F3F3F3F3F3 +F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F5F5F5F7F7F7 +F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFCFCFCFCFCFCFDFDFDFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF0F0F0 +E0E0E0CFCFCFC6C6C6C2C2C2C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1 +C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2C2C2C6C6C6D0D0D0E0E0E0F0F0F0FAFAFAFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF3F3F3E1E1E1CBCBCBBDBDBD +B6B6B6B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 +B3B3B3B3B3B3B3B3B3B3B3B3B6B6B6BDBDBDCBCBCBE1E1E1F3F3F3FBFBFBFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFD +FDFDFDFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFEFCFCFCF6F6F6ECECECE2E2E2DDDDDDDBDBDBDADADADADADADADADADADADADADADA +DADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADA +DADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADA +DADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADA +DADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADA +DADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADDDDDDE3E3E3ECECEC +F7F7F7FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +F7F7F7E9E9E9D9D9D9CECECEC9C9C9C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 +C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C9C9C9CECECED9D9D9E9E9E9F7F7F7 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBF6F6F6F0F0F0EDEDEDECECECEBEBEB +EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB +EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB +EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB +EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB +EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB +ECECECEDEDEDF0F0F0F5F5F5FAFAFAFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F2F2F2E9E9E9E3E3E3DFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF +E3E3E3E9E9E9F2F2F2F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC +FAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 +F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFAF6F6F6F4F4F4F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2 +F2F2F2F2F2F2F2F2F2F2F2F2F4F4F4F6F6F6FAFAFAFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FEFEFEFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFDFDFDFEFEFEFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A +385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF385D8A385D8A +385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF +385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A +385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A +385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFF +FFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A +385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A +385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8A +FFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A +385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF +385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A +385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A +385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFF +FFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A +385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A +385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8A +FFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A +385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF +385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A +385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A +385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFF +FFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A +385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A +385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8A +FFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A +385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF +385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A +385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A +385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFF +FFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A +385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A +385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8A +FFFFFFFFFFFF385D8A385D8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A +385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A +385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8A +FFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A +385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF +385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A +385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A +385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFF +FFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A +385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A +385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8A +FFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A +385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF +385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A +385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A +385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFF +FFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A +385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A +385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8A +FFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A +385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF +385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A +385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A +385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFF +FFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A +385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A +385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8A +FFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A +385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF +385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A +385D8AFFFFFFFFFFFF385D8A385D8A385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A385D8A +385D8A385D8A385D8A385D8AFFFFFFFFFFFF385D8A517199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + +end +%%PageTrailer +%%Trailer +%%EOF diff --git a/doc/DataFlow.png b/doc/DataFlow.png new file mode 100644 index 0000000..a499f45 Binary files /dev/null and b/doc/DataFlow.png differ diff --git a/doc/DistributionSystem.eps b/doc/DistributionSystem.eps new file mode 100644 index 0000000..3350f21 --- /dev/null +++ b/doc/DistributionSystem.eps @@ -0,0 +1,7265 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/srv/www/vhosts/git_exclude/save/processed/e/7/b/e7b70b20-24db-4a38-ba1b-dd4205e4ca06/01_c43df27e8b44ed7b45f71cd3e6b6db7a_png_intermediate_eps/DistributionSystem.eps) +%%CreationDate: (2019-05-27T03:11:03+00:00) +%%BoundingBox: -0 -0 137 103 +%%HiResBoundingBox: 0 0 137.008 103 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 1 +%%EndComments + +%%BeginDefaults +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-none or 1-RunlengthEncoded. + % hex color packets. + % + gsave + /buffer 512 string def + /byte 1 string def + /color_packet 3 string def + /pixels 768 string def + + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 137 103 +userdict begin +DisplayImage +0 0 +137.008 102.756 +12 +348 261 +0 +0 +005FAF005FAF005FAF005FAF005FAF005DAD005DAD005EAE005EAE005EAE005EAE005EAE005DAD +005EAE005BAB005EAE005FAF0060AC0060AC005DAA005FAB005FAB005FAB005FAB005FAB005EAB +0060AD0060AD005DAA005DAD005DAD005EAE005EAE005EAE005EAE005CAC005EAE005FAF005EAE +005EAE005EAE005CAC005EAE005DAD005FAF005FAF005FAF005DAD005EAE005EAE005EAE005EAE +005EAE005CA9005EAB005BB1005EB4005DAE0060AC0260B0005DB0015FB1005FB0005CAE015EB0 +005DAE005FAF005EAE005EAE005DAD005DAD005FAF005EAF005FAF005DAE005DAE005DAE005FAF +005EAF005FAF005DAE005EAE005EAE005DAE005DAE005DAE005DAE005DAE005DAE005DAD005DAE +005CAD025FAF005FAE005BAC005CAD005DAE005DAE005DAE005DAE005DAE005DAE005DAE005DAE +005DAE005DAE005DAD005FAF005EAF005FAF005FAF005FAF005FAF015DAB015DAC015DAC015EAC +015EAC015EAC015DAA015DAA015DAA015DAA015DAA015DAA005FAA005FAA005FAA005FAA005FAA +005FAA015DAA015DAA015DAA015DAA015DAA015EAB015EAB015EAB015EAB015EAB005DA80061AD +0065AF0061AE0061AE0261AE0161AE0561AF0662B10D60B00E63B10C63B00B63AC0864AA0A63AA +0B63AA0C63AA0C64AA0B63AA0B63AA0B61A90766AA0665A90564A80665AA0564A80563A7005FAF +0364B3005FAE0162B10061B00061B00263B20263B20061B00263B20263B20263B20263B20364B3 +0364B30061B00263B20263B20161AE0262AF0162AF005FAC0060AD0060AD0160AD0161AE0161AE +0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AC0061B00061B0005FAE0162B1 +0162B10162B1005FAE0061B00061B00061B00061B00061B00061B00061B00061B00061B00061B0 +0061B00061B00061B0005FAE0163B20364B3005FAE0060AF0061B00061B00061B0005FAE0263B2 +005FAE0061B0005FAE0062B10062B1005FAE0061AC0061AE0061AE0061AE0061AE0061AE0161AE +0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AE005EAB0060AD +005EAB0061AE0061AE0061AE005DAA0060AD005DAA0060AD0060AD0060AB005CAE005EAE005EAE +005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE +005EAE005CAC005FAF005EAE005CAC005DAD0160B00160B0005CAC005EAE005CAC005FAF005FAF +005CAC005DAD005DAD005DAD005DAD005DAD005DAD005DAD005DAD005DAD005CAC005FAF005FAF +005CAC005EAE005BAB005DAD005DAD005DAD005CAC005FAF005FAF005FAF005FAF005CAC005CAC +005FAF005FAF005BAB005DAD005EAC005BAB005DAA005BA8015EAB015EAB015EAB015EAB015EAB +015EAB015EAB015EAB015EAB005BA8005DAA005BA8015EAB015EAB015EAB005DAD005DAD005EAE +005EAE005EAE015EAE015EAE005DAD005CAC005DAD005DAD005CAC005DAD005EAE005DAD005EAE +005EAE005FAE005FAD005DAB005EAC005EAC005EAC005EAC005EAC005EAC005FAD005FAD005DAC +005EAE005CAC005DAD005DAD005EAE005EAE005DAD005EAE005EAE005FAF005FAF005FAF005DAD +005EAE005DAD005FAF005FAF005FAF005DAD005EAE005EAE005DAD005DAD005EAD005EAA005EAC +005CAE005DB1005CAD005FAC005FAF005DB2005FB3005DB1005EB4005FB3005CAE005EAD005EAE +005EAE005DAD005DAE005FAE005EAE005FAE005EAC005DAD005DAD005EAC005EAB005EAD005DAC +005EAE005EAE005EAE005EAC005EAD005DAC005DAD005DAD005EAB005EAB005EAB005DAB005EAB +005EAC005DAD005DAD005DAC005EAD005EAD005EAD005EAD005EAD005EAD005EAD005EAD005EAD +005FAE005EAE005EAC005FAD005FAD005FAD005EAB005DAC005DAC005DAB005DAB005DAB005EAB +005DAA005DAA005EAB005EAB005EAB005FAA005FAA005FAA005FAA005FAA005FAA005EAA005DAA +005DAA005DAA005DAA005EAB005CA9015EAB015EAB015EAB005DA90061AC0063AE0061AD0060AD +0060AD0161AE0360AE0560AF0960AF0C62B20C61AF0E61AE1164AE1162AE1163AD1263AC1263AC +1465AE1565AF1767B00F68B00F66AE0F66AE0D64AB0C63AC0C63A90063B30061B00264B30263B2 +0263B20263B20162B10263B20061B00364B30364B30364B30162B10364B30364B30061B00263B2 +0263B20061AE0262AF0262AF0061AE0061AE0061AE015FAC0161AE0161AE0161AE0161AE0161AE +0161AE0161AE0161AE0161AE0161AE0161AC0061B00061B0005FAE0162B10162B10162B1005FAE +0061B00061B00061B00061B00061B00061B00061B00061B00061B00061B00061B00061B00061B0 +005FAE0162B10061B00062B1005FAE0061B00061B00060AF0060AF0061B00060AF0061B00060AF +0060AF0061B00060AF0060AC0061AE0061AE0061AE0061AE0061AE0161AE0161AE0161AE0161AE +0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AE005EAB0060AD005EAB0061AE0061AE +0061AE005FAC005FAC0060AD005FAC0060AD0060AB005CAE005EAE005EAE005EAE005EAE005EAE +005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005CAC005FAF +005EAE005CAC005DAD0160B00160B0005CAC005EAE005CAC005FAF005FAF005CAC005DAD005DAD +005DAD005DAD005DAD005DAD005DAD005DAD005DAD005CAC005FAF005FAF005CAC005EAE005BAB +005DAD005DAD005DAD005CAC005FAF005FAF005FAF005FAF005CAC005CAC005FAF005FAF005BAB +005DAD005EAC005BAB005DAA005BA8015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB +015EAB005BA8005DAA005BA8015EAB015EAB015EAB005DAD005DAD005CAC005EAE005DAD015EAE +005DAD005DAD005CAC005DAD005DAD005BAB005CAC005EAE005EAE005EAE005DAD005FAF005FAF +005CAC005EAE005EAE005DAE005EAE005DAE005DAE005DAE005DAE005EAE005EAE005BAB015EAE +005DAD005EAE005EAE005EAE005EAE005DAD005FAF005FAF005FAF005DAD005EAE005DAD005FAF +005FAF005FAF005DAD005EAE005EAE005DAD005DAD005DAD005CAD005DAE005EAD005DAD005EAE +005DAE005DAD005EAD005DAD005DAC005DAC005DAD005DAD005DAD005DAD005DAD005EAE005DAE +0060AC0060AC0060AC005EAB005FAB005FAB0360AC005BA7025FAC005DAB015EAE015DAD005EAD +005EAA005EAA005FAB005FAB005FAB005FAA005FAA005FAA005FAA005FAA005FAA005EAB005FAB +005FAB0060AC0060AC0060AC0060AC0060AC0060AC0060AC0060AC0060AC0060AC0060AC005DAA +005FAB005FAB005FAB005FAB005FAB005FAB005EAB005EAB005FAB005EAA005FAB005FAB0060AD +0060AC0060AD005EAB005FAB005FAB005FAB005FAC005FAC005FAC005FAC005FAC005FAC005FAC +005EAB005BA8015EAB015EAB015EAB015DAA0160AC0061AC0060AC005FAC005FAC005FAD0461AF +045FAE0661B00B62B20E60B1125FB01D66B61C63B31C63B01C63B01C64B01B62AF1F64B12268B6 +1767B01967B21564AF1564AE1463AD1462AC0164B40263B20364B30162B10162B10364B30061B0 +0162B10061B00263B20263B20263B20364B30162B10364B30061B00263B20263B20161AE0262AF +0162AF005FAC005FAC0060AD0160AD0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AE +0161AE0161AE005FAC0061B00061B0005FAE0162B10162B10162B1005FAE005FAE0061B0005FAE +005FAE005FAE005FAE005FAE0060AF005FAE0060AF005FAE0061B00061B0005FAE0162B10060AF +0566B5005FAE0061B00061B00061B00263B2005EAD0061B00061B00061B0005EAD0061B00062B1 +005FAC0060AD005FAC0061AE0061AE0061AE0161AE0161AE0161AE0161AE0161AE0161AE0161AE +0161AE0161AE0161AE0161AE0161AE005EAB005FAC005EAB0061AE005FAC005FAC0262AF005EAB +0262AF005EAB005EAC0060AB005CAE005CAC005CAC005CAC005CAC005CAC005CAC005CAC005CAC +005CAC005CAC005CAC005CAC005CAC005CAC005CAC005CAC005CAC005FAF005DAD005BAB005DAD +0160B00160B0005CAC005EAE005CAC005FAF005EAE005BAB005BAB005BAB005BAB005BAB005BAB +005BAB005BAB005BAB005BAB005CAC005FAF005FAF005CAC005DAD005AAA005BAB005BAB005DAD +005CAC005FAF005FAF005FAF005EAE005BAB005CAC005FAF005FAF005BAB005BAD005EAC005BA9 +005CA8005BA8015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB005BA8005DAA +005BA8015EAB005CA9015EAB005FAF005FAF005EAE005DAD005DAD005DAD005DAD005BAB005CAC +005CAC005DAD005BAB005CAC005EAE005DAD005DAD005DAD005FAF005FAF005CAC005EAE005DAD +005DAD005DAD005DAD005EAE005EAE005EAE005DAD005BAB005FAF0060B0005EAE005DAD005DAD +005DAD005DAD005DAD005FAF005EAE005EAE005DAD005EAE005DAD005FAF005FAF005FAF005EAE +005DAD005DAD005FAF005FAF005FAF005CAC0060B0005EAE005EAE005DAD005DAD005FAF005BAB +005EAE005CAC0060B0005DAD005EAE005FAF005FAF005FAF005CAC005DAD005BB2005DB1005FB1 +0161AD045EAC035CAA065DAC055DAA0458A5075CA9005EAD005FAF005DAD005DAE005EAE005CAC +005FAF005FAF005FAF005CAC005EAE005CAC005FAF005FAF005FAF005CAC005EAE005DAE005DAE +005DAE005DAE005DAE005DAE005DAE005DAE005DAE005BAC0262B2005DAE005BAB005EAE005DAE +005DAE005DAE005DAE005DAE005DAE005DAE005EAE005DAE005EAE005CAC005FAF005EAF005FAF +005FAF005FAF005FAF015CAA015EAC015DAC015DAC015DAC015DAC015DA9015EAB015EAB015EAB +015EAB015CAB005FAB005EAA005EAA005EAA005EAA005FAA015CAA005DAA005DAA005DAA005DAA +005DAA005DAA005DA9005DAA005DAA005DA9005DA9005DA9005EAA005EA9005CAA005BA80D60AD +1463B11565B21562B00262B00263B20263B20465B40465B40465B40364B30364B30364B30363B2 +0263B20263B20263B20465B40364B30061B00162B10263B20060AD0062AF0162AF0162AF0162AF +005FAC0060AD0161AE0161AE005FAC0161AE0161AE005EAB005EAB005EAB0061AE005FAC0262AE +0060B00061B0005FAE0061B00162B10162B10061B00162B10061B00062B10162B10162B10162B1 +0162B10061B00263B20060AF0364B3005FAE0061B0005FAE0061B00263B20060AF0061B00162B1 +0060AF005EAD005EAD0060AF005EAD005EAE005EAD0162B10062B10061B10062AD0062AF0162AF +005FAC0061AE0061AE0161AE0161AE0161AE0161AE005EAB0161AE005EAB005FAC005EAB0161AE +0161AE0161AE0061AE0061AE0060AD0162AF0062AF0162AF005FAC0161AE005FAC0161AE0161AE +0161AD005DAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005DAD005DAD005FAF +005CAC005FAF005CAC0060B0005EAE005DAD005EAE005EAE005EAE005EAE005DAD005EAE0060B0 +005EAE005DAD005EAE005CAC005EAE005EAE005EAE0060B0005EAE005DAD005DAD005DAD005DAD +005CAC005DAD0060B0005CAC005CAC005CAC0060B0005EAE005DAC015EAC015EAB015EAB015EAB +015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB005BA8005DAA005BA8015EAB0360AD +015DAA005FAF005FAF005FAF005FAF005FAF005DAD005CAC005DAD005CAC005CAC005DAD005CAC +005DAD005DAD005FAF005CAC005EAE005FAF005FAF005CAC005EAE005FAF0160B0005FAF005CAC +005EAE005EAE005EAE005BAB005CAC005FAF005DAD005FAF005FAF005FAF005FAF005DAD005EAE +005DAD005DAD005DAD005EAE005EAE005DAD005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005EAE005FAF005FAF005FAF005FAF005EAE005FAF005FAF005EAE005DAD +005EAE005FAF005FAF005FAF005EAE005EAE005DAC005BB2005EB3005CAC0061AB0060B2005DB2 +0060B4005DB1005EB3005EB3005DAD005FAF005DAD005EAE005DAD005DAD005FAF005EAF005FAF +005CAD005DAE005CAD005FAF005EAF005FAF005CAD005EAE005EAD005DAE005DAE005DAE005DAE +005DAE005DAE005DAD005DAD005DAC015FAF005EAD005CAD005DAE005DAE005DAE005DAE005DAE +005DAE005DAE005DAE005DAE005DAE005DAE005CAD005FAF005FAF005FAF005FAF005FAF005FAF +015CAA015DAC015DAC015EAC015EAC015EAC015DA9015DAA015DAA015DAA015DAA015CAA005FAA +005FAA005FAA005FAA005FAA005FAA015CAA015DAA015DAA015DAA015DAA015EAB015EAB015EAB +015EAB015EAB005EA9005EA9005DA9005FAB005FAB005EAB005CA9055EAC0A60AC085EAC065BA9 +0960AF0163B10263B10262B10263B20263B20263B20162B10162B10163B20163B20162B10162B1 +0162B10263B20061B00061B00061B00061B00162AE0062AF0062AF0062AF0061AE005FAC0161AE +0161AE0060AD0161AE0161AE005FAC0060AD0060AD005FAC0160AC005FAC0262B00060B00061B0 +0060AF0162B10162B10162B10160AF0162B10060AF0162B10161B10161B00062B10162B00061B0 +0162B00365B30060AF0061AF0060B00061B00061B00061B0005FAD0162B10061AF005EAD0060AF +0060AE0060AE0060AE0060AF005FAE0060AF0060AF0060AD0060AD0060AD0060AD0061AE0061AE +0061AE0161AE0161AD0161AE005EAB0161AE005EAB0060AC005EAB0161AD0161AE0061AE0060AE +0061AE0060AD0060AD0060AD0060AD0160AD0161AD0161AD0161AD0161AE0161AC005DAF005FAE +005FAE005EAF005EAE005FAE005FAE005FAF005EAF005EAF005EAF005FAF005FAE005FAE005EAE +005EAE005FAE005FAE005EAE005FAE005FAE005FAE005FAE005FAE005FAF005CAC005FAF005FAF +005BAB005FAF005CAC005EAE005EAE005EAE005EAE005CAC005FAF005BAB005FAF005CAC005EAE +005EAE005EAE005EAE005EAE005CAC005DAD0061B1005CAC005EAE005CAC0061B1005DAD005CAC +005EAE005EAE005EAE005CAC005DAE0061B0015CAA015EAB015EAB015EAB015EAB015EAB015EAB +015EAB015EAB015EAB015EAB015EAB005BA8005DAA005BA8025FAC005BA8025FAC005FAF005FAF +005FAF005FAF005FAF025DAD025DAD025DAD025FAF025EAE025EAE005FAF005FAF005DAD005FAF +005CAC005EAE005FAF005FAF005CAC005EAE005FAF0160B0005FAF005CAC005EAE005EAE005EAE +005BAB005CAC005FAF005DAD005FAF005FAF005FAF005EAE005CAC005EAE005DAD005CAC005CAC +005EAE005EAE005DAD005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005EAE005CAC005CAC005FAF005DAF +005FAF005DAE005FAF005DAC0059B1005EB4005CAC0262AA0060B7005DB70062BA005DB50062BC +005EB6005DAD005FAF005EAE005EAE005CAC005EAE005FAF005DAF005FAF005CAE005CAE005CAE +0061AF005EAF005FAF005CAE005EAE005EAC005CAE005CAE005CAE005CAE005CAE005CAE005EAD +005DAD005EAD005CAD005EAD005EAF005CAE005CAE005CAE005CAE005CAE005CAE005CAE005CAE +005CAE005CAE005CAE005CAE005FAF005EAF005FAF005FAF005FAF005FAF015CAA015CAC015CAC +015EAC015EAC015EAC015CA9015CA9015CA9015CA9015CA9015CA9005FA9005FA9005FA9005FA9 +005FA9005FA9015CA9015CA9015CA9015CA9015CA9015EAB015EAB015EAB015EAB015EAB005EA8 +005EA8005DA9005FAB005FAB005EAB005CA9025FAA0462AD0360AC0564AD025FAB0061B10061AF +0061B00263B20261B10263B00061B00061B00061B00061AF0060B00060B00061B10263B20062AF +005FAE005FAE0060AF0062AF0162AF0061AF0061AF0060AD0060AC015FAD0061AE0263AE0262AF +0060AF005EAB0060AD0060AD0060AC015FAD0060AC0262B1005FAF005FAF0060AF0162B00160B1 +0162B00060AF0061B10060AE0061B10061B1005FAF0161B10060B00162B10162B10060AF0263B2 +005FAE0060AE005FAE005FAF0061AF005EAC0062B10061B0005EAD0060AF0060AE0060AD0060AE +005FAE005EAE005EAE0060AE005EAB005EAB005EAB0061AD0061AD005FAE0061AB0061AD005FAC +0060AD005EAB0160AD005EAB005FAC005EAB0061AD0061AD0060AE0060AD0061AE0061AC0060AC +005FAD005FAC0060AE0061AD005FAD0061AC0061AE0160AD005EAF005FAE005FAE005EAE005EAD +005DAD005FAE005FAF005EAE005EAE005EAE005DAF005FAD005FAD005EAD005EAD005DAE005DAE +005EAE005FAE005DAE005DAE005FAE005FAE005EAF005CAC005FAF005CAD0060B0005EAC005DAD +005EAD005EAE005EAE005EAE005CAC005DAD005FAF005DAD005DAD005EAE005EAE005CAC005EAE +005CAC0060B0005DAD005DAD005DAD005EAE005DAD005DAD005DAD0060B0005CAE005CAE005CAE +0060B0005DAE005CAC015EAA015EAB015EAB015EAB015EAB015EAB015CAB015CAB015CAB015CAB +015CAB015EAB005BA8005CA9005BA8015EAB0360AD015DAA005FAF005FAF005EAE005EAE005EAE +0060B0005FAF0060B0005EAE005FAF005EAE0160B00160B0005DAD005CAC005EAE005EAE005CAC +005CAC005EAE005EAE005CAC005CAC005CAC005EAE005EAE005EAE005EAE005EAE005CAC005DAD +005FAF005DAD005CAC005CAC005EAE005EAE005DAD005FAF005FAF005FAF005DAD005EAE005DAD +005FAF005FAF005FAF005DAD005CAC005CAC005CAC005CAC005CAC005EAE005EAE005EAE005DAD +005CAC005CAC005CAC005CAC005CAC005CAC005FAF005DAF005FAC0060AB0060AB005FAA005EAA +005BAC005FB0005CAC005EAE005DAD005BAB0060AF005BAA0060AF005AA90060AF005BAB005BAB +005BAB005CAC0060B0005CAC0060AB0060AB0060AB005EAA005FAA005FAC005BA80460AD005BA8 +005EAB015EAE015CAF0060AD0060AB0060AD005EAA005FAA005FAA005FAA005FAA005DAA0060AA +005CA80060AB005DAA005FAA005EAA0060AD0060AB0060AB0060AB0060AB0060AB0060AB0060AB +0060AB0060AB0060AC005DA9005FAA005FAA005FAA005FAC005FAC005FAC005CA9005DA9005CA9 +005FAC005FAC005EAB0060AD0060AD0060AD005DAB005FAC005FAC005FAC005FAC005FAC005FAC +005FAC005FAC005FAC005FAC005CA9005CA9015EAA015DAA015DAA015EAB015EAB015EAB005BA8 +005BA8005BA8005CA90163B10B63B41064AE0461A9016AB70065B80060C00061B70064A90064AB +0060B50263B80660B9075FAF0464AB0067B80065C50068B8025FAC035FB80062C20061BE0461AE +0361AC055CA20E60A40D5EA40A61AD015CAE0064B3005DA90A52B10267BF0062A919549F025FAB +035DAC035FAC0060B3005FB6005EB30362AE0362A90564A80163A90063AD0063B90663AF0E60A1 +0066BF0466AE0462A1036CBF095EAD0066C6125DAA065DB60061C0085CA80063BF0062B30163AA +0262AB0060B1005FB9005FBE0060B70061B0005EB0005EB4005DB7005DB3005FAD0261A7015FAA +005EB70063AF0062B20061B3005FB10061B20063B011609D0361AD0063BA0460B1075FAE0760B4 +0061B5045EAF035EB60061C10160B60F5D9F0162A7055FAA075CB0075DB00261AD0063A60061AE +0063B30061B80060B6025EAE065DA5005FAE0459B60658B60060AC0064B6005FC4035BB1025EAE +015FAA0460A9045FAB0460AC025CB7005DB7005DB70060B80060B50060B4005EB3005DB20261B4 +0060B2005EB3005CB0035DB2015EAF005CAB005DAC025DAF045DB1005BB2015CAF015BAB025DAA +015DAC005FB0005DAC005FAF005DAD005DAD005EAE005CAD005FAF005CAC005FAF005CAC005EAE +005EAE005EAE005EAE005EAE005EAE005EAE005CAE005FAA005FAA005FAA005DAA005FAA005FAC +015CA9015EAB015EAB015EAB015EAB015CAB005FAB005FAB005FAB005FAB005FAB005FAB015DAB +015EAB015EAB015EAB005CA9015EAB005FAF005FAF005DAD005BAB005BAB005DAD005DAD005CAC +005FAF005EAE005EAE0160B00160B0005DAD005EAE005DAD005EAE005DAD005EAE005EAE005EAE +005EAE005EAE005EAE005DAD005EAE005EAE005EAE005EAE005CAC005EAE005FAF005DAD005EAE +005EAE005DAD005DAD005EAE005FAF005FAF005FAF005DAD005EAE005DAD005FAF005FAF005FAF +005DAD005DAD005EAE005EAE005EAE005EAE005CAC005BAB005BAB005EAE005EAE005EAE005EAE +005EAE005EAE005CAC005FAF005DAF005FAC0060AD0060AD005EAB005FAD005DAE005EAD005DAD +005EAE005CAD005EAD005EAE005DAD005DAD005DAD005DAD005DAD005DAD005DAD005EAE005EAE +005DAE0060AB0060AD0060AD005DAA005FAC005EAB025FAB005BA8025FAD005CAB015EAE015CAF +005EAC005EAB005EAB005EAB005FAC005FAC005FA9005FAA005EAA005FAB005FAB005FAA005EAC +005FAC005DAA0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD +005DAA005FAC005FAC005FAC005FAC005FAC005EAB005EAB005EAB005EAB005EAB005FAC005DAA +0060AD0060AD0060AD005DAA005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC +005FAC005EAB005CAA005EAD005EAD005EAD005DAC005EAC005EAC005CAB005EAC005EAC005DAC +0060B00061AC0060A80662AF0561B0005BA5015FB0015EAE0161A90161AC005FB00160AF025EB0 +035FAC025FAB005EAD0062B30061AA0660A9025BAA0060B2015FB0035FAE0061B5005FB30060B2 +0262B2005CAD005BAC0060B0035EA80B59AA0361B10062AE0859AA015FAE025CAB025DAB005EAC +005EAC005FAC0161AE005FAB005FAA0160AC005FAC005FB10360AE045EA80061B70462AE035BA2 +0063B40063AD0061B1015FA40262AC0064B40061A8005FAE0060AD0061AB0060AC005FAB005EAD +015EAF015FAD0160AB015FAC015EAE015FAE015EAC015FAC0160AC005FAC005EAD005EAC005EAB +005EAD005FAE005FAD005FAD0460BD0060BC005EB7005EAD0164AC0168AC015BA9065DAC065CAA +035EB1005DB0025DAC005FB3005FB2015FAD025EAD0060AE0060AD005DAB005FAC005FAE005EAE +015FAD025DAB005EAD035BAF045CAF005FAC0060AF015BB2025CAD015EAD0260AD005FAC005EAE +005DAC015DB0015EB1005DB0005EAE015DAD015EAC015DAC015DAC025FAE015EAE015DAE015EAE +005DAD015DAD005CAB015EAC005CAB015EAE005DB0005EB1005EB0005EAE005EAE005DAC005FAF +005DAD015FAE005CAB005DAC005CAB005DAC0160AF005DAB005DAC005DAC005DAC005EAC005DAC +005EAB005EAC005EAC005DAC005FAA005FAB005EAB005EAB005EAB005EAB015DAA015EAB015EAB +015EAB015EAB015CAB005FAB005FAB005FAB005FAB005FAB005FAB015CAB015EAB015EAB015EAB +015EAB015EAB005FAF005FAF005EAE005EAE005EAE015EAE005EAE005EAE0060B0005FAF005FAF +0160B00160B0005DAD005BAB0060B0005DAD005FAF005BAB005EAE005EAE005EAE005EAE005CAC +0060B0005DAD005EAE005EAE005DAD0160B0005AAA015EAE005DAD005EAE005DAD005EAE005EAE +005CAC005EAE005FAF005FAF005DAD005EAE005EAE005DAD005EAE005FAF005EAE005EAE005CAC +005EAE005EAE005EAE005CAC005FAF005EAE005DAE005EAE005EAE005EAE005EAE005EAE005DAD +005DAD005CAE005FAC005EAB005EAB005FAB005EAC0060B0005CAC005EAE005DAD005CAC005FAF +005BAB005FAF005CAC0060B0005CAC005FAF005EAE005EAE005FAF005BAB005FAF0060AB0060AD +0060AD005DAA005FAC005EAB015EAB005DAA015EAC005CAB015EAE015DAF005DAA005DA9005CA9 +005FAC005FAC005FAC005FA9005FAB005FAB005DA90061AD005DA9005FAC005FAC005DAA0060AD +0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD005DAA005FAC005FAC +005FAC005EAB005EAB005DAA0060AD005FAC0060AD005DAA005EAB005BA8005BAB005EAC0060AD +005DAA005EAB005EAB005FAC005FAC005FAC005EAB005EAB005EAB005FAC005FAC005EAA005CAA +005FAF005FAF005FAF005DAE005EAE005EAE005CAC005FAF005FAF005FAF005DAD005CAC005DAE +005DAE005DAD005FB0005DAC005EAE005DAE005DAE005DAD005DAD005DAD005DAE005DAE005DAD +005DAC005EAB005EAB005DAA005AA8005DAE005FAF005CAB005CAC005CAC005FAF005CAC005CAC +005DAD005FAF005FAF005DAD005EAF005FAF0060B1005CAC005CAC0060AE0060AD0060AD005EAB +005EAC005EAC015FAC015DAA015DAA005DAB005CAD015DAD005DAD005CA9005BA8005DAA005EAB +005EAC005EAA005EAA005EAB005DA80060AC0060AC005DAA005FAC005FAB005EAB0060AD0060AD +0060AD0060AC0060AC0060AD0060AD0060AD0060AD0060AD005FAB005DAA005FAB005EAB005EAB +005FAE005FAE005FAD005CAE005BAD005BAB005BAA0061B10263B5015AA9045FAE015CAD005DB2 +005FB3005EB5005FB0005EAD005FAF005FAF005CAC005DAE005FAF005FAF005FAF005DAE005DAE +005EAD005FAF005EAF005FAF005CAB005EAE005FAF005FAF005FAF005FAF005FAF005EAD005DAD +005CAB005BAB005BAB005EAE005EAF005CAC005EAE005DAD005DAD005FAF005CAC005EAE005EAE +005EAE005EAE005CAC005EAD005FAF005FAE005FAF005FAF005DAD005CAC005CAC0360AF005CAA +005DAB005CAA005EAB025FAD015DA9005BA8005BA8005BA8015EAA025FAC005DA9005CA8005CA8 +005FAB005FAB005FAB005CA9005BA8005BA8015EAB015EAB015EAB015EAB015EAB015EAB015CAB +005FAB005FAB005FAB005FAB005FAB005FAB015DAB015EAB015EAB015EAB015EAB015EAB005FAF +005FAF005FAF005FAF005FAF005DAD005CAC005CAC005EAE005EAE005EAE0160B00160B0005EAE +005FAF005DAD005FAF005CAC005FAF005DAD005EAE005EAE005DAD005EAE005DAD005FAF005DAD +005DAD005DAD005DAD005DAD005EAE005EAE005DAD005DAD005FAF005EAF005CAC005DAE005FAF +005FAF005DAD005EAE005EAE005CAC005DAD005FAF005FAF005EAF005CAC005DAE005DAD005DAD +005EAE005CAD005EAF005DAD005DAD005DAD005DAD005DAD005DAD005EAE005DAD005DAE005FAB +005DAA0056A60055A8005EAC005FB0005DAD0056A90053A9005AAC005FAF005BAB005AAB0053A8 +005CAF005CAC005FAF005FAF005FAF005EAE005CAC005EAF0060AB005FAC005FAC005DAA005FAC +005FAC015DAA015EAB005DAB005DAC015EAE005DAF005DAA005DAA005DAA005EAB005FAC005FAC +005FA9005FAB005EAA005CA80059A80053A30055A70059AA005DAA005FAC005FAC005FAC0060AD +0060AD0060AD005FAC005FAC005FAC0060AD0060AD005DAA005FAC005FAC005EAB005EAB005EAB +005EAB0060AD0060AD0060AD005EAB005BA90B6EB83980BC1869AE005EAC005EAB005EAB005EAB +005EAB005FAC005EAB005EAB005EAB005EAB005DAA0056A60053A50052A50055A90056AA005CAE +005DAD005EAE005CAC0054A80057AC005DAF005FAF005DAE005DAD005EAE005EAD005EAD005EAE +0060B0005DAB005EAD005EAD005DAD005DAD005DAD005DAD005EAE005DAE0056A80057A7005BA9 +0262B0297EBD3273B2005AAD005FAF005FAF005FAF005FAF005FAF005FAF005FAF005CAC005CAC +005FAF005FAF005FAF005DAD005FAF005FAF005DAC005DAA0056A50056A8005DAB005FAC015DAA +015EAB015EA9005DAB025FAF015EAC005CAD005FAB0060AD005FAC005FAC005FAC005FAA005FAB +005FAB005FAB0060AC005DA9005BA80056A70055A60055A7005AA9005DAA005EAB005FAC005FAC +005EAB005DAA005DAA005EAB0060AD005FAC005DAA005FAC005FAC005FAB005DAD005CAC005EAE +005DAC005CAC005DAE005CB00261B10060AF025FAE015CAA055EAD025BA8055DAB055BA8015CAB +005FAF005DAD005CAC005EAE005DAD005FAF005FAF005FAF005DAD005EAE005DAD005FAF005FAF +005FAF005EAE005EAE005CAC005CAC005CAC005CAC005CAC005CAC005EAE005EAE005EAE005EAE +005DAD005DAD005EAE005DAD005EAE005EAE005CAC005EAE005EAE005EAE005EAE005EAE005EAE +005EAE005CAC005FAF005FAF005FAF005FAF005FAF005FAF005DAB015EAC015EAC015EAC015EAC +005CAC015EAA015EAB015EAB015EAB015EAB015CA9005FAB005FAB005FAB005FAB005FAB005FAB +015DAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB005CA8005CA9005CA8 +005FAB005FAB005FAB005BA8005CA9005BA8015EAB015EAB015EAB005FAF005FAF005FAF005FAF +005FAF005EAE005EAE005EAE005DAD005DAD005DAD005EAE005FAF005DAD005DAD005EAE005DAD +005EAE005CAC005EAE005CAC005DAE005DAE005CAC005FAF005DAD005DAE005EAE005DAE005FAF +005CAC005DAD005DAE005DAD005DAD0060AE005FAD005EAD005FAD005FAD005FAD005DAE005EAE +005EAE005EAE005EAE005FAF005FAF005FAF005FAD005FAE005FAD005FAD005FAD0060AF005FAE +005FAD005FAD005FAD005DAE005DAE005EAD005EAD005EAF005DB0005DAB0769B463AADB91ACC5 +0554A9005EAE0057A8419EDC8DB9D1416AB3005BAD005AAA1A86CF94B3D44379B20059AC005FAF +005FAF005EAE005DAD005FAF005DAE0056A4004FA4005AA9005FAC005FAC005FAC015CA9015EAB +005CAB025FAD025FAE005CAE005DAA0060AC0060AD005DAA005FAC005FAC005FA9005FAB005CA7 +005CB24A9CCF7FB0D47FAFD44A83B6025DA9005DAB005EAB005DAA005FAC005FAC005FAC005DAA +005EAB005DAA0060AD0060AD005DAA005FAC005FAC005DAA005FAC005FAC005FAC0060AD0060AD +0060AD0060AD0055A547BCF7FFFFFF8C97B70059AB0060AD0060AD0060AD005DAA005FAC005DAA +0060AD0060AD005EAC0566B25EA7D984B0D57FADD481B0D775A9CB2766A90054AB005CAC0567B4 +5EAADD91A3C30B56AC005FAD005FAE0060AF0060AF0060AF005FAE005DAC0052A70055AA0060B0 +005FB10060AE005FAD005EAD005EB1085EAA05559A49A2DE8FAAC82E63A81078CFEBFFFFFFD7CE +0052AB005FAF005FAF005FAF005FAF005FAF005FAF005DAD005EAE005EAE005DAD005FAF005DAD +0055A8004EA7005DAD005FAE0057A547A3DC8FA9C93268AC005DAB015DAA015EAB015EAA005DAB +025FAE015EAC005CAD005FAA0060AD005EAB005FAC005FAC005FAA005FAB005FAB005EAA0060AC +0059A90866B75DA8D384B0D67AACD03772AD005BAB005FAC005EAB005EAB005FAC005FAC005FAC +005EAB0060AD005FAC005DAA005FAC005FAC005FAB0059A9004FA70056AB005DAA005CAD005CB1 +005DB2005FB00060AD035FAC015DAC045DAD045FAC0159A7045DA9005DAC005FAF005DAD005EAE +005EAE005DAD005FAF005FAF005FAF005DAD005EAE005DAD005FAF005EAF005FAF005DAD005EAE +005EAE005EAE005EAE005EAE005EAE005EAE005EAE005DAE005DAE005DAD0261B0005FAF005BAB +005CAC005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAD005FAF +005FAF005FAF005FAF005FAF005FAF015DAB015EAC015EAC015EAC015EAC015EAC015EAA015EAB +015EAB015EAB015EAB015EAB005FAB005FAB005FAB005FAB005FAB005FAB015DAB015EAB015EAB +015EAB015EAB015EAB015EAB015EAB015EAB015EAB005EA8005EAA005CA8005FAB005FAB005FAB +005BA8005DAA005BA8015EAB015EAB015EAB005FAF005FAF005FAF005DAF005DAF005FAF005DAE +005EAE005DAD005FAF005FAF005CAC005FAF005CAC005FAF005DAE005FAF005CAC005DAD005FAD +005DAE005FAC0060AD0060AD005DAA005EAC005FAC005EAC005FAC005EAC005FAC005EAC005EAC +005FB0005EAE005DAC005EAD005EAE005EAD005EAD005EAD005CAC005EAE005EAE005EAE005DAD +005EAE005EAE005DAD005FAF005EAF005FAF005FAF005DAD005FAE005FAF005FAE005EB3005FAF +005FAC005FAB005DAE005DB4195C990F5B9D1161A60063B49BE2FFFFFFFA545DA6005CAD0048B7 +CFFFFFFFFFFFCFA6BB0056AB004EB37EDEFBFFFFF9687DAA0056AB005AAD005AAC0058AB005DAE +005BAB0055A8229FE3EBF3EA7074B10057A9005EAC005FAC005AA70059A80057A9005AAB005EAD +005CAE005DA9005CA9005DAC0059A8005BAA005EAC005FA9005FAB004E9C6CC9FDFFFFFFFFFFFF +FFFFFFFFF1E52E6FAD005AAA005AA9005CAB005EAB005CAA0059A8005BAA005FAC005AA8005CAB +005EAB0058A8005AA9005DAB005EAB005DAA0059A8005CAA005CAA005BAA005CAB0060AD0055A5 +40B4F1FFFFF98092B50056A9005BAA005EAC0060AD005CAA005BA90059A80060AD0060AD005CAA +0B71BBC7F8FFFFFFFFFFFFFFFFFFFFFFFFFFF6ECEB758AB70050A60C73CBD8FFFFFFFBDD1F4EA8 +005BAC005AAC005AAC005AAD005DAE005AAA0069C0A8D6F2C1C9CF184DAA005AAF005CAA005BA7 +005BAB005BB2005AA8004BA3A4F9FFFFFFEF726FB20674CFD9FFFFFFCDCB004EA8005AAC005BAD +005FAF005FAE005BAC005AAD005DAE005DAD0059AA0059AC005BAD005FB464BAEAEBF4E42F4AA6 +005BAA004FACA5FBFFFFFFEF7775AE005BAB005CAA005AA80058A80058AA005CAE005CAD005CAB +005BA9005CAB005CAA0059A9005AA9005DAA005FAB005FAB005EAA005DAA0467B49BD9FDFFFFFF +FFFFFFFFFFFFFFDDD20050A60059A80059A8005CA9005EAB005DAA0059A8005CAB005FAC005AA9 +0058A8005AAA005EAC0058A50076CDEEF3F2969DC00250A3005DAB005BB0005DB40056AB005BA8 +005CB0005BB50060B7005DB2005BB6005DB50059AD005AAC005AAD005DAD0059AA0058AB005BAD +005DAF005FAF005DAE005CAE005CAE005FAF005EAE005FAF005EAE005EAE005EAE005CAE005CAE +005CAE005CAE005CAE005CAE005DAD005DAD005DAD005DAD005EAD005DAD005CAE005CAE005CAE +005CAE005CAE005CAE005CAE005CAE005CAE005CAE005CAE005CAE005FAF005DAF005FAF005FAF +005FAF005FAF015DAB015CAC015CAC015EAC015EAC015EAC015CAA015CA9015CA9015CA9015CA9 +015CA9005FA9005FA9005FA9005FA9005FA9005FA9015DA9015CA9015CA9015CA9015CA9015EAB +015EAB015EAB015EAB015EAB005EA8005EA9005CA8005FAB005FAB005FAB005BA8005DAA005BA8 +015EAB005CA9015EAB005EAE005EAE005EAE005FAF005FAF005FAF005DAC005EAE005DAD005EAE +005FAF005CAC005EAE005CAC005EAE005FAF005EAE005CAC005CAC005FAF005DAF0060AB005FAC +005FAC005EAA005FAC005FAB005FAB005FAB005EAB005EAB005EAB005DA90060B0005DAD005CAC +005DAD005DAD005DAD005CAC005EAE005EAE005CAC005CAC005CAC005EAE005EAE005DAD005DAD +005FAF005FAF005EAE005EAF005CAC005EAE005EAE005FAE005CAF005CAD005DAA005EAC0160B1 +0161B5055CA7035BA80259AB0058B35FB8EDFFFFFF9F8EA90054A90073D1FFFFFFFFFFFFFFD7D1 +004EA70065C2BBF0FFF8E5DF3058A4005DB0257BBC317CBE327FBF1F68B00058AD0464B45FC6F6 +FFFFFCA998C42175B50A5EAA005AA7005FB22B7BBB327CBC317BB7085FAD0057AB0060AD257EC0 +2367AC1879BD3377B50560AB005EA9005CA7006ACDFFFFFFFFD7D5004E970057BA90B8D22671AD +0061B32F83BE2B6FAE0058A70063B02C7BBB2C74B10058AA1373B92F78B50E63B12A7BBB317DBA +1363AC005AAA0260AF2B7FBB1A5DA81875BB3380BD2D77B50057AA0055A540B4F1FFFFF97D8FB6 +006AB9397FBB1467AD005DAC005EAB1C77BC3B7FB6055BAB0060AD005CAA0A6FBABCF2FFFFFCDF +0035970051A53E9BD6FFFFFFFFF3E63E6AAC0057AA0D69B51A69B00059AB005AAD1471B9337FBF +327BBB1D60AB005CAD128BD4E2FAFFF8ECE05272B81D66AC005DAF257BC22567B1197DC23477B7 +025AA80B68B51C69B00057A51873C6D8FFFFFCC5C90169B9337FBF2D76B70055AB005AAF1A78BD +347CBC0F60AB0059AB1272BC397EBA0E5DAB0B7BC89FDEFCFFFFF66970B92170B1005AA70869B4 +196BB0005EAB005CAA005BAA1772B9337DBB337DBB2670B30054AA005AAB1374BA2F78B50E62AF +2A7BBC317CBA1363AB005BA9005FAB005EAA0057A52CA0E7FFFFFFF3BBBB00369D0670C5B4C1CA +0058AE257CBE3A75B00059A8005BA80067B63A81BB216CAE0058AC267BBA317DBB347BB70B59A6 +0062AE1498E1FFFFFFCEBFD13E7BBB105CA9005BAC0058B0267ABD317CBE337CB91366AC0058AB +005CAF247BBC246BB40E67B5337DBC3076B40052A80F70BE2E7EBE2E76B30057A80060AB005FAA +005FAA005FAC005BA70460AD015DAB005CAA015EAE015DAE005FAE0060AB0060AC005EAB005FAA +005FAA005FAA005FAA005FAA0060AC005CA8005FAA005EAC005FAA005FAA0060AD0060AB0060AB +0060AB0060AB0060AB0060AB0060AB0060AB0060AB0060AB005DAA005FAA005FAA005FAA005FAC +005FAC005FAC005DAA005CA9005CA9005FAC005FAC005FAC0060AD0060AD0060AD005EAC005FAC +005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005EAB005BA8015EAB015EAB +015EAB015EAB015EAB015EAB005BA8005BA8005BA8005DAA005DAA005CA9005CA90360AD005CA9 +005CAC005DAD005CAC005FAF005FAF005FAF005FAF005FAF005FAF005CAC005EAE005EAE005DAD +005EAE005CAC0160B0005EAE005CAC005CAC005FAF005DAF0060AB005FAC005CA9005FAC005FAC +005FAC005FAC005FAC005DAA0060AD0060AD005DAA005DAE005EAE005DAD005EAE005EAE005EAE +005CAC005FAF005FAF005CAC005CAC005CAC005EAE005EAE005CAC005FAF005FAF005FAF005CAC +005EAE005EAE005DAD005DAD005DAE005CAA005DAC005BAF005DB00161B10160AE035EAD035DAB +065DAD0053A43696D8F6FFFFDEC1C4004AA329A7EBFFFFFFEEF5FBFFFFEC2943A20081CEE4FDFF +DFC1C30046AD5CBBE7FFFFFFFFFFFFFFFFFFF6DEE23B67A742BDFAFFFFFFFFFFFFFFFFFFFFFFED +4B61A20065BBA4D6FAFFFFFFFFFFFFFFFFFCB3B1C5025AA70971BCD0FFFFFEDBE2EAFFFFFFFFEC +3670AC005CA9005DA70058C4F6FFFFFCEAE77390B70047A00050A60057A62280DAFFFFFFF1BABD +004EA30D85D0F7FFFFF7D5CB0046A96FD5FBFFFFF8CFD6F0FFFFFFFFFFFFDFC3D20B5BA61276CB +EDFFFFE7CAE0EEFFFFFFFFFFFFFFFA757DAE004FA340B4F1FFFFF97889B327ADF4FFFFFFA6A3BE +0053A7076EBFC9FFFFFFF7DC024FA7005EAD005BAA0A70BBBCF2FFFFFEE2174CA4005BAC0048A0 +55CAFFFFFFFDA586B5006BBCCDFFFFFFF3DA0047A81F88D0D0F7FDFFFFFFFFFFFFFCCBCD0F68BC +DBFFFFFFFFFFFFFFFFFFFFFFD49FB80069BED0FFFFFDDAE3EAFFFFFFFFEC2660A395EFFFFFFFEC +336BA90D70C5D7FFFFFADFE8EAFFFFFFFFFFFFFFF9757BAC0047B69AEFFFFFFFF75C72A5004EA6 +6FD7FFFFFFF55E6CA89CF4FFFFFFFFFFFFFFFFFFFFFBD2D4094F9D97F2FFFFFFEC3572AD005DAE +56A9DFE0FBFFFFFFFFFFFFFFFFF5F0777EAC004BAB73D4FBFFFFF8CFD4EFFFFFFFFFFFFFDFC4D2 +1664AA005DAA005FAB0057A4258DDFFFFFFFF3DDD9366EAD004AA2004FA50872C4C6FBFFFFFFE5 +0A49A50052A73EB6F0FFFFFF908FBA309FD9FFFFFFFFFFFFFFFFFFA893AF2C92DAFFFFFFFFFFFF +FFFFFFFFFFFF7B69A3005FB657ABE6FFFFFFFFFFFFFFFFFFD7CBD22667AA0048B0CAFFFFFFE6F0 +D2E8FEFFFFFFFFFFF790B3DBD6F7FFFFFFFFFFFFF9777FB0005BAB005EAB005FAC005FAC025FAC +005BA8015EAB005DAB015EAE015DAE005EAD005EAB005EAB005EAB005FAC005FAC005FAA005FAA +005FAA005FAB005FAB005FAA005EAC005FAC005EAB0060AD0060AD0060AD0060AD0060AD0060AD +0060AD0060AD0060AD0060AD0060AD005DAA005FAC005FAC005FAC005FAC005FAC005FAC005EAB +005EAB005EAB005EAB005FAC005EAB0060AD0060AD0060AD005EAB005FAC005FAC005FAC005FAC +005FAC005FAC005FAC005FAC005FAC005FAC005EAB005BA8015EAB015EAB015EAB015EAB015EAB +015EAB005BA8005DAA005DAA005DAA005DAA005BA8015EAB005EAB005EAB005DAD005EAE005CAC +005FAF005FAF005FAF005FAF005FAF005FAF005CAC005EAE005EAE005EAE005EAE005CAC005EAE +005EAE005CAC005CAC005FAF005DAF0060AB0060AD005DAA005FAB005FAB005FAB005FAB005FAB +005DAA0060AD0060AD005DAA005DAE005DAD005EAE005EAE005EAE005EAE005CAC005FAF005FAF +005DAD005DAD005DAD005DAD005EAE005CAC005FAF005FAF005FAF005CAC005EAE005EAE005EAE +005EAE005EAD005CA8005DAD005BB2005EB2005EAE0061AC0360AE015DAD035FAF0059A80076C8 +DDF8FFECDED10B3BAD77DBF8FAEAEEA6BEE5FFFFFC5252A12B99DDFDFFFFA18CA7004FB56BBAE0 +6F82BB0662AD29A1D9FFFFFFB4A9C00A5DAF5BC3F4FFFFFAA497C32175B40052A844BBF0FFFFF7 +628AB1005CA969B9F4FFFFF57874AF006CB8BCF0FFFFFFFFB7A1C12A78B60860A9005EAA005FAA +0050A788CFFCFFFFFFFFFFFDDADBE4627CAC004FA31C7DD6F3FFFFDEB2BB004FA50A81CDE4FDFF +E4CBC70046A963CAF3FFFFFFEED8DC3A72BDABF1FFFFFFFC978BB1016EC6D5FFFFFFFFFF9184B5 +4AA9E7F9FFFFF7E3DC20549F39B2F1FFFFF87E8FB10052C4F6FFFFE6C8D11057A1178ADBFFFFFF +D0A5BA0055AA025EAD005BAA0B71BDBCF2FFFFFEE2174DA5005DAE0055A72399E5FFFFFFD4ACBB +0067BBBCF4FFFFE7D5004AAD6FC2F2FFFFF54F5AAE258ACEF4FDE5274EA80C89D3DCF6FFF2E7DE +5175BA1B64AB046BBBBCF0FFFFFFFFB79FC12A75B70052A58DE7FFFFF6E92B6AAB0B71C7D5FFFF +FFFFFF9183B64AA8E7F9FFFFF7E2DA194DB186E2F9FFF4F1546FA6004EA665CDFFFFFFF06173AD +0179C59BDAFAFFFFF46670B62171B2004EA08EE7FFFFF4E62B6CA90F71CDE1FFFFFFF5E1446DB8 +509FE1FEFFFFF7E4DB1C51A660C7F3FFFFFFEEE7E33A78BFAAEFFFFFFFEE5A76B0005AA9005FAB +005CA80668BBC3E9FFFFFFFFFEF5F7CFD0D7365EA50054AF68BBEEFFFFFF7B6E9C0054B8A0E5FC +FFF2E83668B8ACF0FFF7E7DA345EAD3C9FDCECE2D21956AB1198E0FFFFFFC8BED23D77B80958AA +2495DAFFFFFF9AA2B7005CAD2C8BDBFFFFFFB3A7C10040ADB4FCFFFFFFFFD6B3C8328BD5E0FFFF +FFFFFFB59ABF49A4E5F7FFFFE6C9C80054A9005EAB005FAC005FAC015EAB005DAA015EAB005CAA +005CAE015EAE005CAC005CA9005CA9005FAC005FAC005FAC005FAA005FAB005FAB005DA90061AD +005EAA005FAB005FAC005EAB0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD +0060AD0060AD005DAA005FAC005FAC005FAC005DAA005DAA005DAA0060AD005FAC0060AD005EAB +005DAA005DAA0060AD0060AD0060AD005EAB005DAA005DAA005FAC005FAC005FAC005DAA005DAA +005DAA005FAC005FAC005EAB005BA8015EAB015EAB015EAB015EAB015EAB015EAB005BA8005BA8 +005BA8005DAA005DAA005BA8025FAC005BA8025FAC005DAD005EAE005EAE005BAB005BAB005BAB +005EAE005CAC005CAC0360B0025FAF005DAD005BAB005BAB005DAD005AAA005DAD005EAE005EAE +005EAE005CAC005FAF005EAF005BAC005EAE005CAE005CAE005CAE005CAE005DAE005CAE005CAE +005CAE005FAF005EAE005BAB005DAD005EAE005EAE005EAE005EAE005CAC005FAF005FAF005FAF +005CAC005EAE005CAC005FAF005FAF005FAF005CAC005EAE005EAE005BAB005BAB005BAB0060AE +005BAB005FB0005CAD005EAE005DAD005BAC0060B0005CAC005FAE0058B8A0E6FBFFF4F14B7FBA +B5F0FFDEBFC42F89D7F5FFFFB19AB646AEEAFFFFFA565CA40055AC0079C7C7F2FFFFFFFFFFFFFF +FFFFFDBEAFC500489E26AFF1FFFFF98B78B20054A60063BFB7EEFBFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFC59DB80069B7BCF4FFFFE3D10047A3005CAA005CA9005FAB005FAB005EA90054A51B8AD0 +BDE1F1FFFFFFFFFFFA8180AF0D77D4F3FFFFDEB2BB004FA40A81CDE4FDFFE4CBC70046A964CCF5 +FFFAF35D79A7004A9F1891DFFFFFFFDEB2B90069C5D9FFFFFFC4C20048A20058B8A7E8FBFFF6F3 +4F6B9D35B0F2FFFFF88091B400469B74DBFFFFFFED3B6AA970D6FFFFFFEB5070AE005BAC025FAD +005BAA0B71BDBCF2FFFFFEE2174DA5005DAE0055A7239AE5FFFFFFD4ACBB0067BBBCF4FFFFE7D6 +004BAC52B2E8FFFFFFFFF6F5989BC41C5BA90054A9006DC4D1F3FFEFE3D51E49A60058AB0A70BC +BCF5FFFFE3D20045A50059AC004DA38FE8FFFFF5E62B6AAB0C71C8D9FFFFFFC5C30046A20057B9 +A7E8FBFFF5F14764AF82E0F9FFF4F15470A6004EA565CDFFFFFFF06575B0005BB17CCFF9FFFFF1 +3A46A1005CAA004EA08FE7FFFFF4E62866A52BB5F3FFFFFFA28AB30054A60046B080E0F6FFF6F2 +4B68A45CC8F5FFFBF35D77A6004A9F23ACEFFFFFFB947DB4005AA9005FAB005FAB005BA70058AB +409EDBE5F6FAFFFFFFFFFFF02C4F9D0987D1EBFFFFDDBEC10D81CEEDFFFFDAC0C10053B683D6F6 +FFFFFFFFE8EB7786BC0057A50055A4007CD6FFFFFFBAACC5024FA8005CB371C5F1FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFE6C9D2024BADB4FFFFFFDEDB125EA60069BAB8F2FFFFE2D10044A3006AC3 +CFF2FFF2E7D8284EA5005FAC005FAC005FAC015DAA015EAB005DAA025FAC025FAF015CAE005EAB +005FAC0060AD005EAB005FAC005FAC005FAA005FAB005EAA0060AC0060AC005DA9005FAA005FAC +005FAC005DAA005DAA005DAA0060AD005FAC0060AD005EAB005DAA005DAA0060AD0060AD005DAA +005FAC005FAC005EAB0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD +0060AD0060AD0060AD0060AD0060AD005EAB005FAC005EAB0060AD0060AD0060AD005EAB005FAC +005EAB005BA8015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB005BA8005DAA +005BA8005DAA015EAB005CA9005EAE005EAE005DAD005DAD005DAD005DAD005DAD005EAE005CAC +015EAE005DAD005DAD005CAC005DAD005DAD005BAB005EAE005EAE005EAE005EAE005CAC005FAF +005FAF005CAC005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005CAC005FAF005CAC +005FAF005CAC005EAE005EAE005EAE005EAE005CAC005FAF005FAF005FAF005CAC005EAE005CAC +005FAF005FAF005FAF005CAC005EAE005DAD005DAD005DAD005DAD005DAD005EAE005EAD005DAD +005EAE005CAD005EAD005EAE005DAD005DAC0051A93EB2EDFFFFF498BADBE6FFFFB196AB0071C9 +DFF7FFD8D6D594D0FDFFE8D7004AA60060C0BBF3FFFFFBF4A1ADCE63BAE9FFFFFFBCAFC5024AA0 +2CB2F2FFFFF98C7AB40057A70063BDB1EBFCFFF6F196ADD179AED67DACD275AAD14F75AF006DB8 +BCF4FFFFE7D60050A60060AC005DA9005FAB005FAB005AA60054A60055A50057A25DA7EDFCFFFF +F3C0BE0471D3F4FFFFD9AEB9004EA3027CCBE0FBFFE4CBC70046A964CCF5FFFBF4627CA90051A3 +1F93E0FFFFFFDDB2B8006BC6D8FFFFFFC6C4004CA4005DBBAAE9FBFFF5F34E6B9D35B0F2FFFFF8 +8090B4004FA22296E4FFFFFFCC9DCAB5FFFFF6D2D61A63A7005CAB005DAB005BAA0A6FBBBCF2FF +FFFEE2174DA5005CAD00489F55C8FFFFFFFDA587B7006ABCBCF4FFFFE8D7004AA40058B23D9CD2 +B3CFEEFFFFFFFFF8E62255A3006FC6D3F4FFF0E3D7224DA8005BAC0A70BEBCF5FFFFE7D7004DA8 +005EAE004DA38FE7FFFFF5E62B6CAC0C73CAD9FFFFFFC8C8004EA8005CBBAAE9FBFFF4F14664B0 +84E2FAFFF2F14D6FA50049A05AC6FEFFFFF06573AE005DB180D0FAFFFFF13D48A4005EAB0051A3 +8FE7FFFFF4E62866A528B1F1FFFFFC9884B40058A80054B799E5F9FFF4F14A68A45CC8F5FFFDF5 +6A81AC0050A330B2F2FFFFFA8F7DB3005AA9005FAB005FAB0057A50055A60052A40065B589C9F4 +FFFFFFA891A60058BCB5EFFDFFECEEA2BADFFBFFFF8F7FA80054A5005BB979B5DABEDCF5FFFFFF +E0C6C81355A2007FD8FFFFFFBAADC60953AA005DB46CC2F1FFFFFFABADD076ADD77FAFD676A9D3 +5D89BC004AAEB7FFFFFFE3DE2366AA036EBDBCF4FFFFE8D80049A30071C6D3F5FFF1E4D62450A6 +005FAC005FAC005FAC015DAA015EAB005DAA025FAB025FAF015CAE005EAB005FAB0060AD005EAB +005FAC005FAC005FAA005FAB005EAA0060AC0060AC005DA9005FAB005FAC005FAC005FAC005FAC +005FAC005EAB005EAB005EAB005EAB005FAC005FAC0060AD0060AD005DAA005FAC005FAC005FAC +005EAB005EAB005EAB0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD +0060AD0060AD005EAB005FAC005EAB0060AD0060AD0060AD005EAB005FAC005EAB005BA8015EAB +015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB005BA8005DAA005BA8015EAB015EAB +015EAB005CAC005CAC005CAC005FAF005EAE005FAF005CAC005DAD005CAC015EAE005CAC005AAA +005DAD005CAC005DAD005BAB005EAE005EAE005CAC005EAE005CAC005FAF005FAF005CAC005EAE +005CAC005CAC005CAC005EAE005CAC005EAE005EAE005EAE005BAB005EAE005FAF005CAC005CAC +005CAC005DAD005EAE005CAC005FAF005FAF005FAF005CAC005EAE005CAC005FAF005FAF005FAF +005CAC005DAD005CAC005FAF005EAE005FAF005CAC0060B0005CAC005EAE005CAC005CAC005FAF +005BAB005FAF005CAC005AAA0087DBFFFFFFF5F8FCFFFFFF756BA10051BB9FE8FAFFFDF1E9F3FF +EBBCBF004FA70073C8DFF7FFEDE5D1003C960197EAFFFFFFBCAFC502499F30BAF4FFFFFFA588B0 +0045A00051B8A0EDFCFFFDF27773A5003A9A004DB37DBCD44670AF006DB8BCF4FFFFE7D60050A6 +0060AC005DA9005FAB005AA6007FD2B4C2CD08529C003F973D9AE7FFFFFFF1BCBC006FCAE4FFFF +FFD6CA003CA445AFE7FFFFFFE0C9C70046A963CAF3FFFFFFBBADC0003DA168D0FFFFFFFEA484B1 +0370C7D6FFFFFFFFF2384A960079D4DDFDFFFAEDDE2A4D9F38B3F2FFFFF88091B40055A7056ABC +B6F0FFFFF7FAFFFFFDB3A9C10357A8005CAA005CAA005AA9096DB9BCF3FFFFFCDE00389A0053A8 +1B9CD7FFFFFFFFF5E83C6AAC006DBCBCF4FFFFE6D50053B261B7D85E77A5003FAB54B0E8FFFFFF +967EA10071C9DCF7FFF6E6DE214B9F0052AA0A71BEBCF4FFFFE7D7004FA9005FAF004FA48FE7FF +FFF5E62B6CAC0C73CAD6FFFFFFFFF2384B9B0078D4DDFCFFFBEDDE2548AB70D6F8FFFFF6867BA8 +004CBCDFFFFFFFFFEF6575AF0060B486D6FBFFFFFA4D4F990050A70050A28FE7FFFFF4E62868A6 +25A0E9FFFFFFFFD2CC00399D007DD4E0FFFFFEEEDE264AA660CAF5FFFDF56A81AC0050A330B2F2 +FFFFFA8F7DB3005AA9005FAB0057A523A3E090A1BC004B9D004AA981C2F1FFFFFFA58CA4004DA7 +30ADEBFFFFFFF5FAFEFFFFEA294EA20072C59CCBD11B4E970044B391E4F9FFFAF45B6E9F0083DB +FFFFFFCAB5C80048A10052B261B8EDFFFFFFB992AC00389D0037A758AAD97296BC0045AEB7FFFF +FFE3DE2366AA036DBDBCF5FFFFE6D7004CA70071C7D3F4FFF1E4D62450A6005FAC005FAC005FAC +015DAA015EAB015DAA025FAC025FAF015CAE005CAB005FAC0060AD005EAB005DAC005FAC005FAA +005FAB005EAA0060AC0060AC005DA9005FAA005FAC005FAC005FAC005FAC005FAC005DAA005CA9 +005CA9005FAC005FAC005DAA0060AD0060AD005DAA005FAC005FAC005FAC005DAA005CA9005CA9 +005FAC0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD005EAB +005FAC005EAB0060AD0060AD0060AD005EAB005FAA005EAB005BA8015EAB015CAB015CAB015CA9 +015CA9015CA9015CA9015CA9015EAB005BA8005DAA005BA8015EAB015EAB015EAB005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005CAC005DAD005DAD005DAD005DAD005DAD +005DAD005EAE005CAC005FAF005CAC005FAF005FAF005FAF005CAC005DAD0160B00160B0005FAF +005CAC005FAF005CAC005EAE005BAB005EAE005FAF005DAD005FAF005FAF005DAD0061B1005CAC +005CAC005EAE005DAD005DAD005EAE005EAE005CAC005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005EAE005FAF005FAF005FAF005FAF005FAF005FAF005FAF005CAC +005EAB0043B8CDFFFFFFFFFFFFF7E20448A50051AC54C0F2FFFFFFFFFFF58575B50057AA005EBA +81D5F5FFFFFFFFFFFFFFFCFDFFFFFFC9B4C7064FA21474CFDDFFFFFFFFFFFFFFEA405E9E0081D4 +FBFFFFFFFFFFFFFFFFFFFFFFFFF5E7546EAE016FB9C7FDFFFFEFD80050A60060AC005DA9005FAB +0059A5158FDCFFFFFFFFFFFFFFFFFFFFFFFFFFDADA1563A90062B486D0F9FFFFFFFFFFFFFFF8FB +FFFFFFEDD0C90046A963CAF3FFFFFFFCFDFFFFFFFFFFFFFFFFDDDB1865A61074C9D6FFFFFFF5F8 +FFFFFFFFFFFFFFFFFFA99AB5004DA345B9F5FFFFFD8894B50057A90057AC5BB6EAFFFFFFFFF3F0 +5D78A8005AAB015CAC015EAC005AA90B70BCC7F8FFFFFFFFFFFFFFFFFFFFFFFFFFEEE6E9627CB0 +0051A80A71BEC7FDFFFFEED80051B077C7F5FFFFFFFFFFFFFFFFFFFFFDE42A49A7004EB370CEF2 +FFFFFFFFFFFFCAA2BA006BBDC7FDFFFFEFD9004FAA005FAF004FA597EFFFFFFDE92F6DAC0E74CB +E4FFFFFFEEF9FFFFFFFFFFFFFFFFFFA998B5004FA50684D8FFFFFFFFFFFFFFFFFFE6EEFEFFFFF3 +6D78B10050AA43A0E0F9FFFFFFFFFFF4D2D3064F9E93EEFFFFFDEA3170AC0064B394DAFBFFFFFF +FFFFFFFFFFFFFFFFFC7E85A8004BAB6ED2F9FFFFF97184AC0050A334B7F5FFFFFE977FB4005AA8 +005FAA0054A25EBFF6FFFFFFFFFFFFFFFFFFFFFFFFFCC9C9004CA7005CA8005AC0EEFFFFFFFFFF +F0BEC20051A6006FC3C0E8FEFFFFFFFFFFFFFFFFFFCAC8C91850A50046B6C0FFFFFFFFFFFFFFFF +6E67A20072C5B5DFFBFFFFFFFFFFFFFFFFFFFFFFF38D93B90044AFC2FFFFFFEAE22769A80470BC +C7FDFFFFEFD8004AA10073C7DFFCFFFEEBD92750A6005FAC005FAC005FAC005DAA005CA9005CA9 +005FAC005FAA005FAA005FAA005FA9005DA90060AC0060AC005DA9005FAB005FAB005FAB005DA9 +005DA9005FAB005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005DAA005FAC +0060AD005EAB005DAA005FAC005DAA005CA9005CA9015DAC015EAC015EAC015CAA015CAA015CAA +005EAD0060AD0060AD005FAC005FAC005FAC0060AD0060AD0060AD005EAB005FAC005FAB025DAD +025DAD025DAD025FAD025FAD015EAC005FAB005FAB005FAB005FA9005FAC005FAC005FAC005FAC +005FAC005FAC005BA8005DAA005BA8015EAB015EAB015EAB005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF015DAD015DAD015DAD015EAE015EAE015DAD005FAF005FAF005DAD +005FAF005CAC005FAF005FAF005FAF005CAC005DAD0160B00160B0005FAF005CAC005FAF005CAC +005DAD005AAA005EAE005FAF005DAD005FAF005FAF005EAE005EAE005CAC005FAF005DAD005DAD +005DAD005EAE005EAE005CAC005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005CAC005DAC0054AD419EDB +88B4DA7C90C10056AA0059A90576C68CB5D988A4C82F65AD005CAD0059A80066C07CB6D784B3D2 +5B76BD60B8D66186B80457A7005FAF3F94D182B5D974A3BF1060A90051A11F7FCD7CACD781B1D7 +80ADC83B6FAC0056A90468B15EAADA94A3BF0058A90060AB005DA8005FAB005FA90053A9378CCA +7AAAD581B2D57B9BC92E68AD0059AA0059AA0871BD71ADD682ABCF316FB8539FD27395B9004DAB +66CCF5FFF8F38294BD69A9D682ADCF3B70AC0053A51577C9D8FFFFF6BFC6378ECD86B3D87A9DBE +0050A8005AA9208ACF92B2D14078B0005BAB0053A42792D6EEFFFFEEDCD72357A6005DAC015DAC +005EAC005AA90667B45EA7D984B0D47FAFD581AFD375A8CA2866AB0056AC005CAC0566B65EA9DC +94A3C20052AA0C69BB5DA8D584B1D87AACD1376DAE005AAD005BAA0467C079B5D988B4D1427AB2 +0064B55EA9DC94A2C10056AB005DAD0056A847A2DC92A8C91564AD0668BC70B5D74C6CB949A8D1 +86B3DA799FBF0050A9005EAD0050AC3C9DD488B3D87599C3116AC485B5D0346AAE005AA80163B6 +58A5D489B5D55C90B90057A645A2DB92A9C81868AC0058A70067B357A7D384AFD583AAD4687DB3 +0053A80057AC3494D08CADD03570AC0056A71887CE93BAD3486CAF005BA9005EAA005CA9005CB2 +4B93CF7EAED682AED57094C21A5BAA005DAB005EAA0048A295EBFFFFFFF88E85B40058A90058AB +1775C077B5D782AFD677A9CC145BA3005DAC0058A82480CD7CB3D88BB6CE1D61A90055A70066BF +79A8D981AFD784B3D35781B10052AA0053AE5CAFDD85A0C71163AA0167B45EAADC94A3C10055A7 +0068B869A9D778A1C11257A9005FAC005FAC005FAC005EAB005EAB005EAB005EAB005FAC005FAC +005FAA005FAB005EAA0060AC0060AC005DA9005FAB005FAB005FAB005FAB005FAB005FAA005FAC +005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005DAA005FAC0060AD005EAB005FAC +005FAC005EAB005EAB005EAB015DAB015EAC015EAC015EAC015EAC015EAC005FAD0060AD0060AD +005EAB005EAB005EAB0060AD0060AD0060AD005EAB005FAC005FAB025FAD025FAD025FAD025FAD +025FAD015FAC005FAA005FAB005FAB005FA9005FAC005FAC005FAC005FAC005FAC005FAC005BA8 +005DAA005BA8015EAB015EAB015EAB005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005EAE0160B0005FAF0160B0005DAD005FAF005DAD0160B00160B0005DAD005DAD005DAD005DAD +005DAD005EAE005DAD005EAE005DAD005DAD005DAD005DAD005DAD005DAD005DAD005DAD005BAB +005EAE005FAF005DAD005DAD005DAD005DAD005DAD005DAD005EAE005EAE005EAE005CAC005EAE +005CAC005FAF005FAF005FAF005DAD005DAD005DAD005DAD005DAD005DAD005FAF005FAF005FAF +005DAD005DAD005DAD005DAD005DAD005DAD005DAD005EAE005DAD0058A80056A90059AB0060AE +0060AE005CAB0053A90056AB005CAE005DAD005EAF005AAC0056A70055A7005AA90055A7005AAA +005FAC005FAC0058A70053A50056A9005EAB005EAB0058A70054A60053A60054A70059AB005DAB +005BAA0054A60055A8005DAC005DAB005EAB005DAB005DAB005DAA0057A70054A60053A60057A8 +005CAB005FAB005FAB005BA90055A70055A6005AA80056A60058A80052AC6BCFF7FFFFF7697FA9 +0050A60054A6005CAC005BA81776CADFFFFFFFCFC80049A30054A70055AA0060AD0060AD005AA9 +0056A8005CAC005DA90059B05BB7EAFFFFFFC5A9B30053AA005CAC005BAA025DAD025DAC015CAC +0053A60054A60055A70053A90055AA005BAD005DAD005FAF005DAD0055A80056AB005EAD005BAB +0056AA0055AA0054A9005AAC005DAD005DAD005BAB0053A80054A90059AC005BAC0055A90055AB +005DAD005DAD005DAD0056A80055AA005DAE005DAD0055A7005DAB0058A90057AA0059AC0061AF +0060AF005FAE0057AA0053A80057AD005BAE0055AB005EAC0060AC005EAA0057A70056A8005AAB +005FAD0056A50055A6005DAB005FAB005BAA0053A50052A50053A70057A9015CAB015CAB0056A7 +0053A70059AB015CAB0057A70054A7005AAB015CAB015CAB015CAB005BAA0057A70055A60055A6 +0058A8005DAB005FAB005DA80060C0EBFFFFFFEFE4336DAC005AA9005DA9005BA90055A60053A5 +0056A7005FAD015FAC015DAE0058AA0054A90052A8005AAB005BAB005BAB0055A80053A80053A9 +0058AC005EAE005CAB0056AA0056AC005DAC005EAB0057A80057A9005FAC005DAA0055A60056A8 +005DAA005FAC005FAC005EAB005FAC005FAC0060AD005EAB005FAC005FAC005FAA005FAB005EAA +0060AC0060AC005DA9005FAB005FAB005FAB005FAB005FAB005FAA005FAC005FAC005FAC005FAC +005FAC005FAC005DAA005DAA005FAC005DAA005FAC0060AD005EAB005FAC005EAB0060AD0060AD +0060AD015DAB005CAA015EAC015EAC015EAC015CAA005EAD0060AD0060AD005DAA005CA9005CA9 +005FAC0060AD0060AD005EAB005FAC005FAB025FAD025FAD025FAD025FAD025FAD015FAC005FAA +005FAB005FAB005FA9005FAC005FAC005FAC005FAC005FAC005FAC005BA8005DAA005BA8005DAA +015EAB005CA9005CAC005CAC005CAC005FAF005FAF005FAF005CAC005CAC005CAC005DAD005DAD +005DAD005FAF005EAE005DAD0160B00160B0005DAD005EAE005DAD005EAE005DAD005EAE005DAD +005EAE005EAE005EAE005EAE005DAD005EAE005EAE005EAE005EAE005CAC005FAF005FAF005CAC +005EAE005EAE005DAD005EAE005CAC005FAF005FAF005FAF005CAC005EAE005CAC005FAF005FAF +005FAF005CAC005EAE005EAE005EAE005EAE005EAE005CAC005CAC005CAC005EAE005EAE005EAE +005EAE005EAE005EAE005DAD005FAF005DAE0060AD0060AE0060AE0060AF0060AF0061AE005DAE +005FAE005EAF015DAD065EA9035DA90461AC015EAB005FAE005FAE005FAD005FAD005FAD005EAC +005CAA005FAC005FAC005FAC005DAB005DAB005CAB005DAC005DAC005DAC005DAC005CAC005DAC +005CAC005DAC005EAC005DAC005CAC005DAC005DAD005DAC005DAC005FAC005EAC005EAC005EAC +005EAC005EAC005EAC005EAC005EAC005FAC0055AD54B6E7E1DEE7567BAC005BAC005DAB0060AD +005CAA1372C4AFE6F9D1B6C30055AA025FAD025DAC005FAC005FAC005FAD005FAD005FAC005BA9 +046AB78BCCF3EBF4E12944A2005DAC015CAB005BAA025DAC025EAC025EAC015BAB015EAB025FAC +005DAE005DAD005DAD005FAF005FAF005FAF005DAD005EAE005EAE005DAD005EAE005FAF005EAE +005DAD005EAE005DAD005EAE005EAE005CAC005CAC005CAC005CAC005EAE005EAE005EAE005EAE +005EAE005DAD005EAE005EAE005EAD005EAF005DAF005EAE005DB2005DAF005EAC005FA9005DAD +005EB5175C9E135997115FA3095BA6015DB1005EB5005EB0005DAD005FAF005FAF005CAC005EAE +005FAF005FAF005FAF005EAE005EAE005CAD005FAE005FAF005FAF005CAC005EAE005FAF005FAF +005FAF005FAF005CAC005EAD005FAF005FAF005DAE005DAE005CAD005DAD005EAE005CAD005CAD +0056A81995DEF0F2EF9099C00353AB005EAD005EAE005CAC005DAE005FAF005FAF005EAF005FAF +005DAD005EAE005EAE005DAD0060B0005FAF005DAD005EAE005EAE005EAE005EAE005EAE005EAE +005CAC005CAE005FAB005DAA005DAA005FAC005FAC005EAB0060AD0060AD0060AD005EAB005FAC +005EAB0060AD0060AD0060AD005EAB005FAC005FAC005FAA005FAB005EAA0060AC0060AC005DA9 +005FAB005FAB005FAB005FAB005FAB005FAA005FAC005FAC005FAC005FAC005FAC005EAB0060AD +0060AD0060AD005DAA005FAC0060AD0060AD005DAA005FAC005FAC005DAA005DAA025FAD025FAD +015CAA005BA9015EAC025FAD0160AD0060AD0060AD005EAB005FAC005FAC005DAA005EAB0060AD +005EAB005FAC005FAC015DAA005CAA015EAC005CAA005BA9005EAB005FAB005FAB005FAB005FA9 +005FAC005FAC005FAC005FAC005FAC005FAC005BA8005DAA005BA8025FAC005BA8025FAC005CAC +005CAC005CAC005FAF005FAF005FAF005DAD005DAD005DAD005EAE005EAE005DAD005FAF005EAE +005EAE0160B00160B0005DAD005DAD005EAE005DAD005EAE005CAC005EAE005DAD005EAE005EAE +005DAD005EAE005DAD005EAE005EAE005DAD005FAF005CAC0060B0005CAC005EAE005DAD005DAD +005EAE005DAD005FAF005FAF005FAF005CAC005EAE005DAD005DAD005EAE005FAF005DAD005EAE +005DAD005EAE005EAE005EAE005CAC005EAE005CAC005EAE005EAE005EAE005EAE005EAE005EAE +005EAE005DAD005DAE005FAC005EAF005EAD005FAF005DB2005DAD005EAA005FAB005EB1055FAF +145B9B0B599E0B5EAA025CAD005FB5005DB3005EAE005EAF005FAF005DAE005CAC005FAF005FAF +005FAF005FAF005EAE005DAD005EAD005FAF005EAF005EAE005CAC005FAF005EAF005FAF005EAF +005EAE005CAC005EAE0060B0005DAD005DAD005DAD005DAE005DAD005DAD005DAD005DAD005DAE +005EAE005CAC005FAF005DAD0054A70050A80058AC005FAF005FAF005EAF005EAF005CAC0050A6 +0054AB005DAE015EAC005CAA005BAA015CAA025FAD025FAC005DAA005DAA005BA80052A3004EA4 +005EAA005EAA005EAA005EAA005FAA005FAA005FAA005DAA005DAA005DAB005DAE005FAF005DAD +005DAD005FAF005FAF005DAD005EAE005EAE005CAC005DAD005FAF005FAF005FAF005EAE005CAC +005EAE005DAE005EAE005EAE005EAE005EAE005DAE005EAE005EAE005EAE005EAE005EAE005DAD +005DAD005DAC005FAE005FAF005FAF005DAF005CAD005CAB005DAA0060B10262B5015BA9035EAD +005BAC005DB1005FB4005FB50060B0005EAD005FAF005FAF005CAC005EAE005FAF005FAF005FAF +005DAD005EAE005DAD005FAF005FAF005FAF005CAC005EAE005FAF005FAF005FAF005FAF005EAE +005EAE005EAE005CAC005CAC005CAC005EAE005EAE005DAD005EAE005EAE005DAD0059AA004DA5 +0056AB005EAE005EAE005EAE005CAC005EAE005FAF005FAF005FAF005FAF005DAD005DAE005DAD +005FAF005CAB005FAF005DAD005DAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005FAB +005FAC005FAC005FAC005FAC005EAB0060AD0060AD0060AD005EAB005FAC005EAB0060AD0060AD +0060AD005EAB005FAC005FAC005FAA005FAB005EAA0060AC0060AC005DA9005FAB005FAB005FAB +005FAB005FAB005FAA005FAC005FAC005FAC005FAC005FAC005FAC005EAB005EAB005EAB005DAA +005FAC0060AD0060AD005DAA005FAC005FAC005FAC005FAC025FAD025FAD015CAA005BA9015EAC +025FAD0160AD0060AD0060AD005EAB005FAC005FAC005DAA005FAC0060AD005EAB005FAC005FAC +015DAC015EAC015EAC005DAB005CAA005EAB005FAB005FAB005FAB005FA9005FAC005FAC005FAC +005FAC005FAC005FAC005BA8005DAA005BA8015EAB005EAB005EAB005DAD005BAB005EAE005FAF +005FAF005FAF005FAF005FAF005FAF005DAD005DAD005DAD005FAF005FAF005FAF0160B00160B0 +005DAD005EAE005DAD005FAF005DAD005FAF005DAD005DAD005EAE005CAC005FAF005DAD005FAF +005CAC005EAE005DAD005DAD005DAD005DAD005DAD005EAE005CAC005FAF005FAF005CAC005FAF +005EAF005FAF005CAC005EAE005EAE005CAC005FAF005FAF005FAF005FAF005CAC005EAE005EAE +005CAC005FAF005DAD005FAF005CAC005EAE005EAE005EAE005EAE005EAE005EAE005DAD005CAE +005FAB005FAF005FAF005EAF005BAE005BAB005CAB005DAD0262B2015FB1025DAD005BAB015FB3 +005DB3005FB5005EB3005FAE005FAF005FAF005EAE005CAC005FAF005FAF005FAF005FAF005DAD +005EAE005DAD005FAF005FAF005DAD005CAC005FAF005FAF005FAF005FAF005FAF005EAE005EAE +005CAC005BAB005BAB005CAC005FAF005EAE005CAC005EAE005EAE005EAE005EAE005CAC005FAF +005DAD005EAE005EAE005CAC005FAF005FAF005FAF005FAF005FAF005CAC005CAC015DAE025FAD +005BA9025EAC005CAA025FAD025EAC005BA8005BA8005BA8015DAA015EAC025FAB005CA8005CA8 +005DA9005FAB005FAB005EAB005BA8005BA8005BA9005DAE005EAF005CAD005DAD005FAF005FAF +005DAD005EAE005EAE005CAC005CAC005FAF005FAF005DAF005CAC005CAC005DAC005DAC005CAD +005DAF005DAF005CAD005DAC005DAC005CAC005CAC005CAC005EAE005CAC005CAD005DAC005EAD +005DAD005EAE005CAD005CAB005CAD005CAF0261B10160B0015EAE015DAC035EAF015BAB045EAE +035BAC005DAC005FAF005EAE005DAD005DAD005DAD005FAF005FAF005FAF005DAD005EAE005DAD +005FAF005FAF005FAF005DAD005EAE005DAD005DAD005DAD005DAD005DAD005DAD005DAD005DAD +005DAD005DAD005DAD005DAD005EAE005DAD005EAE005EAE005DAD005DAD005EAE005EAE005EAE +005EAE005DAD005EAE005DAD005FAF005FAF005FAF005DAD005DAC005DAD005CAB005EB0005DAE +005DAC005DAC005DAC005CAD005CAD005CAC005EAE005CAD005CAE005FAB005EAB005EAA005EAA +005EAA005DAA0060AD0060AC0060AD005EAB005FAB005EAB0060AD0060AD0060AD005FAB005FAB +005FAC005FAA005FA9005FA90060AC0060AC005DA9005FAB005FA9005FA9005FA9005FA9005FA9 +005FAC005FAB005FAB005FAB005FAB005FAC005DAA005CA9005CA9005CA9005FAC0060AD0060AD +005DAA005FAC005FAC005FAC005DAA025FAD025FAD015CAA005BA9005EAC025FAD0160AD0060AD +0060AD005EAB005DAA005FAC005DAA005EAB0060AD005FAB005FAC005FAC015EAC005EAC005DAA +025FAD005EAC005DAA005FA9005FAB005FAB005FA9005FAC005FAC005FAC005FAC005FAC005FAC +005BA8005CA9005BA8005CA90360AD005CA9005CAC005BAB005DAD005FAF005FAF005FAF005FAF +005FAF005FAF005EAE005EAE005EAE005DAD005DAD005CAC005FAF005FAF005DAD005CAC0060B0 +005CAC005FAF005BAB005FAF005CAC005EAE005DAD005CAC0060B0005CAC005DAD005DAD005DAD +0160B0005AAA0160B0005DAD005DAD005DAD005FAE005EAF005CAC005FAE005FAE005FAE005CAC +005EAE005DAD005CAC005EAE005DAF005FAF005EAE005CAC005EAE005EAD005EAD005DAC0060B0 +005DAC005EAD005EAD005DAD005CAD005DAD005DAD005EAE005DAD005CAE005FAB005CAC005CAC +005EAE005CAB005DAB005BAF015FB10261B1005EAE035DAE035EAD045CAC025CA9075DAB0159A8 +005FAE005FAF005CAC005EAE005EAE005DAD005FAF005FAF005FAF005DAD005EAE005DAD005FAF +005FAF005FAF005EAE005CAC005CAC005CAC005CAC005CAC005CAC005EAE005EAE005EAE005EAE +005EAE005CAC005EAE005FAF005DAD005EAE005EAE005EAE005EAE005CAC005EAE005EAE005EAE +005EAE005CAC005DAD005FAF005FAF005FAF005FAF005FAF005FAE015DAB015EAC005CAA015EAC +005CAA005CAC015EAB015EAB015EAB015EAB005CA9015DA9005FAB005FAB005FAB005FAB005FAB +005FAB015EAB015EAB015EAC0060AE005FAC005FAE005FAE005FAD005FAD005DAE005EAE005EAE +005EAE005FAF005EAF005FAF0061AF0061AF0061AF0061AF0061AF0061AF0061AE0061AE0061AF +0061AF0061AF0060AF005FAF005FAF005DAD005FAF005FAF005FAD005EAD005CAD005EAE005DAC +005CAC005CAE005CB00161B10160AF025FAE025CAA045DAE025CA9055DAB055BA9015CAB005FAF +005DAD005DAD005EAE005DAD005FAF005FAF005FAF005DAD005DAD005DAD005FAF005FAF005FAF +005DAD005DAE005CAD005DAD005DAD005DAD005DAD005DAD005EAE005EAE005EAE005EAE005DAD +005DAD005EAE005DAD005EAE005EAE005DAD005EAE005EAE005EAE005EAE005EAE005EAE005EAE +005CAC005FAF005FAF005EAF0060AF0061AF0061AF0060AE0061AD0060AF0061AF0060B00061AF +005FAE005FAE005EAF005DAF065EA9035DAA0560AB005EAB005FAD005FAE005FAD0060AD005FAD +0060AD005DAA005FAC005FAC005FAC015EAB005CAB005CAB005CAC005DAC005DAC005DAC005CAC +005DAC005CAC005CAC005EAC005DAC005CAC005CAC005DAD005CAC015CAC005FAC005EAC005EAC +005EAC005EAC005EAC005EAC005FAC005EAC005FAC005EAC005DAA005DAB005EAC005FAC005DAB +005FAC0060AD015EAD015EAD005CAB015DAC025FAC025FAD005FAC005FAC005FAD005FAD0060AD +005DAA025FAC035DAC035DAC015CAB015DAB015DAB005BAA015DAB025EAD025EAC025BAB025EAC +025FAC005CA9015CAB015CAB015CA9015CA9015CA9015DAA025FAC015DAA015EAB015EAB005DAA +025FAC005CA9025FAC005CAC005DAD005BAB005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005EAE005EAE005BAB005EAE005DAD005EAE005DAD005EAE +005DAD005CAC005FAF005FAF005CAC005DAD005CAC005FAF005EAE005EAE005DAD005FAF005CAC +005FAF005FAF005FAF005FAC005FAE005FAE005FAD005FAD005FAD005CAE005EAE005CAC005FAF +005FAF005DAF0061AF0060AF0060AF0060AF0060AF0060AF0060AF0060AE0060AF0060AF0060AF +0061AF005DAF005FAF005FAF005DAD005FAF005DAE005FAC005DAD005DAD005DAD005CAB005DAD +005BB0005EB10161B0025FAD035DAC035DAB055CAC045CAA065BA8045BA9005EAE005FAF005CAC +005EAE005EAE005DAD005FAF005FAF005FAF005DAD005EAE005DAD005FAF005FAF005FAF005DAD +005DAD005DAD005DAD005DAD005DAD005DAD005EAE005EAE005EAE005EAE005DAD005EAE005EAE +005DAD005EAE005EAE005EAE005EAE005EAE005DAD005EAE005EAE005EAE005EAE005DAD005DAD +005FAF005FAF005FAF005FAF005FAF005FAE015DAB015EAC005DAB015EAC005DAB005DAC015EAA +015EAB015EAB015EAB005DAA015DAA005FAB005FAB005FAB005FAB005FAB005FAB015DAB015EAA +015DAB005EAC005DAC005DAC005DAC005DAC005DAC005EAC005EAC005EAC005EAC005DAE005FAF +005EAF005EAF005DAD005EAE005DAD005EAF005EAF005EAF005EAE005EAF005EAE005DAE005EAE +005DAD005FAF005DAD005FAF005FAF005FAD005FAE005DAD005EAE005DAB005DAE005EAF005DB0 +005EAE0160AE025DAB015EAC025DAD035FAD015BAA035DAA005EAD005EAE005EAE005DAD005EAE +005EAE005DAD005FAF005DAD005EAE005EAE005EAE005DAD005DAD005FAF005DAE005FAC005FAD +005FAD005DAC005EAD005EAD005EAD005EAD005EAD005EAC005DAC015FAD0060B0005CAC005CAC +005DAD005DAD005DAD005DAD005DAD005DAD005DAD005DAD005DAD005EAE005EAE005EAE005DAD +005FAF005EAF005EAF005FAF005CAC005FAF005EAF005FAE005DB2005DAE005EAA005FAA005EB0 +0060B6155B9A0C5A9E0D5EA8025BAB015FB3005DB5005FAE005EAF005EAF005FAF005CAC005FAF +005FAF005FAF005FAF005CAD005EAE005CAC005FAE005FAF005FAF005CAB005FAE005EAF005FAF +005FAF005FAF005CAB005DAE0061B1005DAD005DAD005DAD005DAD005DAE005DAD005DAD005DAD +005CAC005FAF005CAC005FAF005CAD005EAD005EAE005CAC005FAF005FAF005FAF005EAF005FAF +005CAC005EAE005CAE025FAC015EAC005CAA005CAA025FAD025FAD005DAA005DAA005DAA005DAA +005EAA005DAA005EAA005EAA005EAA005EAA005FAA005FAA005DAA005DAA005DAA005DAA015EAB +015EAB015EAB015EAB015EAB005DAA025FAC005DAA015EAB015EAB005CA9025FAC005CA9025FAC +005EAE005EAE005EAE005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005EAE005BAB005EAE005CAC005CAC005CAC005DAD005EAE005CAC005FAF +005FAF005CAC005EAE005DAD005BAB005CAB005CAC005DAC025FAF015EAE015FAF015FAF005FAF +005CAC005DAE005CAC005DAE005CAE005DAE005CAC005EAE005DAD015FAF015FAF005EAF005FAF +005FAF005FAF005DAF005DAF005DAF005DAF005DAF005DAF005FAF005FAF005FAF015EAF015FAF +015FAF005DAD025FAF005DAD0060AC005DAE005CAE005DAB005DAA005CAE005CB4005DB1005FAE +0161AD015EAE015DAE035FB0015DAD005AAA025FAF005DAE005FAF005CAC005EAE005EAE005DAE +005FAF005FAF005FAF005DAE005EAE005DAD005FAF005FAF005FAF005EAE005EAE005EAE005DAE +005EAE005EAE005EAE005DAE005DAE005CAE005CAE015DAE0160B1005EAE005BAB005EAE005DAE +005DAE005DAE005DAE005EAE005EAE005EAE005EAE005EAE005EAE005DAE005FAF005FAF005EAF +005EAF005EAF005FAE015DAB015DAB005EAC005EAB005EAC005EAC015EAA015EAB015EAB015EAA +015EAA015DAA005FAA005FAA005FAA005FAA005FAA005FAA015DAA015EAA015DAA015DAA015DAA +015EAA015EAA015EAA015DAA015DAA015DAA015EAA015EAA005CAC005FAF005FAF005FAF015EAE +005AAA015EAE005FAF005FAF005FAF005DAD005FAF005EAE005BAB005CAC005BAB005FAF005CAC +005FAF005FAF005FAF005FAF005CAC005EAE005CAC005FAF005DAD005FAF005CAC005CAC005CAC +005FAF005FAF005FAF005FAF005FAF005FAF005CAC005DAD005CAC005FAF005FAF005CAC005FAF +005CAC005FAF005DAD005FAF005CAC005CAC005FAF005DAF0060AB0060AD0060AD005DAA005FAC +005FAB005FAB005FAB005FAC005CA9005CA9005EA9005DAD005EAE0060B0005BAB005BAB005BAB +005CAC005FAF005FAF005BAB005CAC005BAB005EAE005EAE005EAE005BAB005EAE005FAF005FAF +005FAF005CAC005FAF005FAF005FAF005BAF005BAD005CAB005CAC0261B10261B5005AAA015DAE +015FB1005EB1005FB4005EB5005FAE005EAF005FAF005FAF005CAC005FAF005FAF005FAF005FAF +005CAC005EAE005CAC005FAF005FAF005FAF005CAC005FAF005FAF005FAF005FAF005FAF005FB0 +005DAD005DAD005BAB005BAB005BAB005FAF005FAF005CAC005EAE005EAE005CAC005FAF005CAC +005FAF005CAC005EAE005EAE005CAC005FAF005FAF005FAF005FAF005FAF005CAC005DAC005CAC +0360AE005CAA025EAC005CAA025FAD025FAD005BA8005BA8005BA8005CA9025FAC025FAC005CA8 +005CA8005CA8005FAB005FAB005FAB005BA8005BA8005BA8015EAB015EAB015EAB015EAB015EAB +015EAB005DAA025FAC005DAA015EAB015EAB005CA9025FAC005DAA025FAC005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005CAC005CAC005FAF005FAF025EAF005DAC +025FAF025FAF025EAF005CAC015EAE005DAE005DAC005DAC005DAD005CAC005FAF005CAC005FAF +005CAC005EAE005CAC025EAF015EAF005BAC025EAF015EAE025FAF005CAD005DAD005DAD005FAF +005EAE005EAE005EAE005EAE005FAF005DAD005DAD005DAD005CAD005DAD005CAC0360B00059AA +0360B0005FAB0060AC0060AC0060AD0060AD0060AC0060AC0060AC0060AD005DAA005FAB005FAB +005CAB005EAB015EAC005DAB015EAB015DAB015EAB015EAB005CAA025FAC025FAC005CAA015DAB +015DAB005CAA0562AF005DAB025FAD005AA9005CA9005BA9015EAB0360AE025EAC025EAC025EAC +015EAC0360AE025EAC0360AE005DAB025EAC005DAB025FAD025EAC015EAB0360AE015EAC0360AE +005CAA005CAA005CAA005DAA005DAA005CAA025FAC025EAC015EAC0060AC0060AC0060AC005FAC +005EAA005FAC035EAC025DAC035DAC025DAC005BAA0059A8005AA9005BAB005BAB005EAE005CAD +005CAC005FAF005FAF005FAF005CAC005EAE005CAC005FAF005FAF005FAF005CAC005EAE005DAD +005FAF005FAF005FAF005CAC005EAE005DAD005DAD005DAD005DAD015EAE005BAB015EAE005CAC +005CAC005CAC005EAE005CAC005EAE005BAB005CAC005BAB005EAE005EAE005CAC005FAF005FAF +005FAF005CAC005EAE005CAC0160B00060B00160B0005FAF005FAF005FAF005CAC005DAD005CAC +005FAF005FAF005FAF005FAF005FAF005FAF005CAC005EAE005EAE005CAC005EAE005CAC0260B0 +005EAE005BAB005CAC005FAF005DAF0060AB005FAC005CA9005FAC005FAC005FAC005FAC005FAC +005DAA0060AD0060AD005DAA005EAE005EAE005CAC005EAE005EAE005EAE005CAC005FAF005FAF +005BAB005CAC005BAB005EAE005EAE005CAC005FAF005FAF005FAF005CAC005EAE005EAE005CAC +005CAC005DAE005CAB005DAC005BAE005DB00261B10060AF035FAD035DAC065DAD025BA8075DAB +045AA7005EAD005FAF005DAD005CAC005EAE005CAC005FAF005FAF005FAF005CAC005EAE005CAC +005FAF005FAF005FAF005DAD005EAE005CAC005CAC005CAC005CAC005CAC005EAE005EAE005EAE +005EAE005DAD005DAD005DAD005EAE005CAC005EAE005EAE005CAC005EAE005CAC005EAE005EAE +005EAE005EAE005EAE005CAC005FAF005FAF005FAF005FAF005FAF005FAF005CAA015EAC005CAA +015EAC005DAB005CAC015EAA015EAB015EAB015EAB005EAB015CA9005FAB005FAB005FAB005FAB +005FAB005FAB015DAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB005CA9 +015EAB015EAB015EAB005DAA025EAB005BA8015EAB005EAD005EAD005EAD005EAD005EAD005EAD +005EAD005EAD005EAD005EAD005EAD005EAD005EAD005EAD005EAD005EAD005EAD005EAD005EAD +005EAE005EAE005EAE005FAE005CAB005CAB005FAE005FAD035DAE015CAB035EAE015CAC015CAC +015CAC025DAE025DAD005BAB025CAD015CAC015CAB025FAE005DAB025FAE005DAB005EAC005EAB +035DAE025DAD005BAB015CAC015CAC015CAC025FAE015FAE015FAE005DAC005DAC005DAC005DAC +005DAC005DAC015FAE015FAE015FAE035DAE025DAE035EAE005BAB025DAD005BAB005EA9005EAA +005EAA0060AC0060AB0060AB0060AB0060AB0060AC005DAA005FAA005FAA015CAA005EAA005EAA +005EAA005EAA005EAA005EAA005EAA015EAB005BA8005DAB005DA9005CA9005CA9005CA80361AD +005DAA005DAA005AA9005BAA005BA9005BA9025DAC025DAB015CAA015CAA015CAA025EAC005AA9 +035EAC005AA9015CAB005AA9015CAA015CAA015CAA015FAC005CA9015FAC005CA9005CA9005CA9 +005BA9005BA9005BA9015CAA015CAA025CAA015DAA025DAA025EAB005AA8025EAC015AA8005BA9 +005BA9005BA9015DAB0059A6005BA8005AA9005EAE0161B4005AAB005EAE005CAC005FAF005FAF +005FAF005CAC005DAD005DAD005DAD005DAD005DAD005DAD005EAE005DAD005DAD005DAD005DAD +005DAD005EAE005CAC005FAF005EAE005FAF005CAC005FAF005CAC005DAD005EAE005EAE005EAE +005EAE005DAD005DAD005DAD005DAD005DAD005EAE005CAC005FAF005FAF005FAF005CAC005EAE +005CAC005EAE005EAE005EAE005DAD005DAD005DAD005DAD005EAE005CAC005FAF005FAF005FAF +005FAF005FAF005FAF005CAC005EAE005EAE005EAE005EAE005CAC005EAE005EAE005CAC005CAC +005FAF005DAF0060AB0060AD005DAA005FAC005FAC005FAC005FAC005FAC005DAA0060AD0060AD +005DAA005EAE005EAE005EAE005EAE005EAE005EAE005CAC005FAF005FAF005DAD005DAD005DAD +005DAD005EAE005CAC005FAF005FAF005FAF005CAC005EAE005EAE005EAE005EAE005DAD005DA9 +005DAD005BB2005EB1005EAF0061AD035EAC025DAB045DAD045DAB0259A7055DAB005EAD005FAF +005DAD005EAE005EAE005CAC005FAF005FAF005FAF005CAC005EAE005CAC005FAF005FAF005FAF +005CAC005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005DAE005DAE005CAC0262B2 +005DAD005BAA005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE +005CAC005FAF005FAF005FAF005FAF005FAF005FAF015CAA015EAC015EAC015EAC015EAC015EAC +015EA9015EAB015EAB015EAB015EAB015CAB005FAB005FAB005FAB005FAB005FAB005FAB015CAB +015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB +005DAA015CA9025FAC015CA9005DB5005DB5005DB50062B40060B40060B40060B40060B40060B5 +005FB6005EB6005FB60060B7005EB7005FB70060B40060B30060B3005FB3005FB1005DB0005DB1 +005FB2005DB1005EB1005FB1005EB20159B40059B4015AB40159B4015AB40159B4025BB4025BB5 +015AB4025AB5015AB5025AB5015AB4005AB4015AB4015BB5015BB5015BB5025BB4025BB5015AB4 +025AB5025AB5025AB5015AB4015AB4005AB4025AB5025AB5025AB5025BB6025BB6025CB60059B3 +0059B30059B30159B40159B40159B4045CB7035BB6045CB7005FB4005EB6005EB6005EB5005EB5 +005DB5005DB1005DB1005DB1005CB1005DB1005DB1025AB1025BB1025BB1035BB2035BB2025CB2 +045DB3035CB3015BB1025AB1015AB10057AE0159B00159B00159AF0157AE025AB2025AB10058B0 +0058B00058B00059B00059B00059B00059B00059B00059B00059B10059B00059B10159B10057AF +0159B10059B00059B00059B0005AB00059B0005AB10059B0005AB00058B00058B00058B00058B0 +0059B00059B00159B00356B00357B00458B10054AD0256AF0054AE0658B50357B30155B10355B1 +0456B20254B10458A6045BAD005EB8005DAD005EAE005DAC005FAF005EAE005FAE005DAC005DAE +005EAE005BAC005DAC005BAB005EAE005CAE005EAE005BAD005CAD005BAD005EAE005EAE005EAE +005CAC005CAC005CAC005EAE005BAB005EAE005DAD005EAE005CAC005CAC005EAE005CAC005FAF +005EAE005FAF005DAD005CAC005DAD005FAF005FAF005FAF005DAD005EAE005EAE005CAC005CAC +005EAE005BAB005BAB005BAB005EAE005EAE005CAC005FAF005FAF005FAF005FAF005FAF005FAF +005CAC005CAC005EAE005EAE005EAE005DAD005EAE005EAE005DAD005CAC005FAF005EAF0060AB +0060AC005DA9005FAA005FAA005FAA005FAA005FAA005EAA0060AD0060AC005DA9005CAE005CAC +005EAE005EAE005EAE005EAE005CAC005FAF005FAF005EAE005EAE005FAF005CAC005EAE005CAC +005FAF005FAF005FAF005CAC005EAE005EAE005EAE005EAE005FAD005CA7005DAC005AB1005EB4 +005CAC0262AA0060B5005DB50061B8005DB30061B9005EB5005EAD005FAF005EAE005EAE005CAC +005DAD005FAF005DAF005FAF005CAE005DAE005CAD0060AF005EAF005FAF005CAD005EAE005EAC +005CAE005CAE005CAE005CAE005CAE005CAE005DAD005DAD005DAD005DAE005EAD005DAF005DAE +005CAE005CAE005CAE005CAE005CAE005CAE005CAE005CAE005CAE005CAE005CAD005FAF005EAF +005FAF005FAF005FAF005FAF015CAA015CAC015CAC015EAC015EAC015EAC015CA9015CA9015CA9 +015CA9015CA9015CA9005FA9005FA9005FA9005FA9005FA9005FA9015CA9015CA9015CA9015CA9 +015CA9015CA9015EA9015EA9015EAA005CA9015EAB005CA9015EAB015EAB005DA9015EAB005DAA +015EAB1063A9005EAF005EAD005CAB005EAE0160AF005EAE005CAB005FAE005CAB005EAD005BAA +005DAD005FAE005EAE005EAE005EAE0060B0005DAD005CAC005EAD005EAD005DAD005EAD005DAD +005DAD005FAE005FAE005FAE005FAE005FAE005FAE005FAE005FAE005FAE005FAE005FAE005FAE +005FAE005FAE005FAE005FAE005CAB005EAD005CAB005FAE005FAE005EAD005FAE005CAB005FAF +005FAA005FAB005FAB005FAB005FAB005EA9005EA9005EA9025FAA025EAF005CAC005FA90060AC +005FAA005FAB005FAA005FA9005FA9005EA90060AB005FA9005DA8005FAB005FAB005FAB005FAB +005FAB005EAA005FAB005FAB005EAA005FAB005DA90060AC0060AC005DA9005FAB005FAB005FAB +005FAB005FAB0061AD0060AC0060AC0060AC0060AC0060AC0060AC0060AC0060AC0061AD0359A9 +035AA9035AA8045BA9045AA8035AA80359A70359A70359A5085DAC055CA9075EAB035AA6035BA8 +035AA8055DA9045DA9045CA9045CA8045CA9045CA8045CA8045CA8045CA8045CA8045CA8045BA8 +045BA8055BA7055AA70258A40358A60258A6075BA80658A80457A7085CAB0457A7085CAB005CB5 +015DB3065FB5025CAB015CAA005AAC035EAF065FB2025CB20060B7005DB1005BAB015DAA005AA6 +025EAC025FAB025FAB025FAD005CAA005DA9005DAA045AAB0157A7055BAB035AAA045AAA035AA9 +005EAE005FAF005DAD005DAD015FAF015DAD005FAF005CAC005FAF005DAD005FAF005FAF005CAC +0060B0005CAC005FAF005FAF005FAF005BAB005BAB005BAB005FAF005FAF005CAC005FAF005DAD +005EAE005CAC005EAE005EAE005BAB005BAB005BAB005EAE005CAC005CAC0360B0025FAF005DAD +005BAB005BAB005DAD005AAA005DAD005EAE005EAE005EAE005CAC005FAF005EAF005BAC005EAE +005CAE005CAE005CAE005CAE005CAE005CAE005CAE005CAE005FAF005FAF005BAB005DAD005EAE +005EAE005EAE005EAE005CAC005FAF005FAF005FAF005CAC005EAE005CAC005FAF005FAF005FAF +005CAC005EAE005EAE005BAB005BAB005BAB0060AF005BAB005FB0005CAC005EAE005DAD005BAB +0060AF005BAB0060B0005AAA0060B0005BAB005BAB005BAB005CAC0060B0005CAC0060AB0060AB +0060AB005EAA005FAA005FAC005BA80460AD005BA8005EAB015EAE015CAF0060AD0060AB0060AD +005EAA005FAA005FAA005FAA005FAA005DAA0060AA005CA80060AB005DAA005FAA005EAA0060AD +0060AB0060AB0060AB0060AB0060AB0060AB0060AB0060AB0060AB0060AC005DA9005FAA005FAA +005FAA005FAC005FAC005FAC005CA9005DA9005CA9005FAC005FAC005EAB0060AD0060AD0060AD +005DAB005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC015CAC +015EAC005CAA025FAD005BA9025FAD005BA9005BAA005BAB005BAA005BAA005BAA4F779E005CB1 +005EAE005CAC005FAF0160B0005FAF005CAC005FAF005CAC005DAD005AAA005EAE005FAF005FAF +005FAF005FAF005FAF005DAD005EAE005DAD005DAD005DAD005EAE005EAE005DAD005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005CAC005DAD005CAC005FAF005EAF005EAE005DAE005EAE005DAF005FAB005FAC005FAC +005FAC005FAC015DAA015EAB005DAA025FAC025DB0005CAC005FAB0060AD005EAB005EAC005FAC +005FAA005FAB005EAA0060AC005FAB005DA9005FAC005FAC005FAC005FAC005FAC005FAC005DAA +005DAA005FAC005FAC005DAA0060AD0060AD005DAA005FAC005FAC005DAA005DAA005DA9005FAC +0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD005FAC0061B20061B10060AF0264B5 +0063B20061B10560AA025DA7025DA8055FAA045FA9055FA90064AA0064A90064A90066AB0065AA +0064A80063A70064A90063A80062A70062A70062A70062A80062A80062A80062A90063A80061A6 +005EA5005EA70060A7005EA6005FA6005EA60061A60063A90063A80062A60062A60062A80062A1 +0064A50066A80061A60063A90062A7075AA1065AA1065FA90058A4005CAE005CB0005DAB005DAB +005DAB0461AF015DAB0059A8025AAA0159A9025AAA0057A70058A80057A6005EAE005FAF005DAD +005DAD005DAD005EAE005CAC0061B1005CAC005FAF005FAF005FAF005DAD005EAE005DAD005FAF +005FAF005FAF005DAD005DAD005DAD005DAD005EAE005DAD005CAC005CAC005CAC005EAE005EAE +005DAD005DAD005DAD005DAD005DAD005EAE005CAC015EAE005DAD005DAD005CAC005DAD005DAD +005BAB005EAE005EAE005EAE005EAE005CAC005FAF005FAF005CAC005EAE005EAE005EAE005EAE +005EAE005EAE005EAE005EAE005CAC005FAF005CAC005FAF005CAC005EAE005EAE005EAE005EAE +005CAC005FAF005FAF005FAF005CAC005EAE005CAC005FAF005FAF005FAF005CAC005EAE005DAD +005DAD005DAD005DAD005DAD005EAE005EAD005DAD005EAE005CAD005EAD005EAE005DAD005DAD +005DAD005DAD005DAD005DAD005DAD005EAE005EAE005DAE0060AB0060AD0060AD005DAA005FAC +005EAB025FAB005BA8025FAD005CAB015EAE015CAF005EAC005EAB005EAB005EAB005FAC005FAC +005FA9005FAA005EAA005FAB005FAB005FAA005EAC005FAC005DAA0060AD0060AD0060AD0060AD +0060AD0060AD0060AD0060AD0060AD0060AD0060AD005DAA005FAC005FAC005FAC005FAC005FAC +005EAB005EAB005EAB005EAB005EAB005FAC005DAA0060AD0060AD0060AD005DAA005FAC005FAC +005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC015CAC015EAC005DAB005EAC +005EAC015EAC005BA9005BA9005BA9005BA9005BA9005BA9396993005BAF005EAE005DAD005EAE +005DAD005DAD005DAD005DAD005DAD005DAD005DAD005BAB005EAE005EAE005DAD005DAD005DAD +005DAD005EAE005EAE005EAE005EAE005DAD005EAE005DAD005FAF005FAF005EAE005DAD005DAD +005DAD005DAD005EAE005FAF005FAF005FAF005DAD005DAD005DAD005DAD005DAD005DAD005EAE +005DAD0060AC005FAC0060AC005EAB005EAC005EAB005FAC005FAC005FAC005FAC005FAC005DAA +005CA9005CA9005FAC005EAB005EAB005FAA005EAA005FAB005FAC005FAA005EAA005FAB005FAB +005EAA005FAB005EAA005FAC005FAC005FAC005FAC005FAC005FAC005EAB005EAB005DAA0060AD +005FAC005EAB005FAC005EAB005DAA005DAA005EAC005DAB005DAB005DAA005DAB005DAB005FAD +0060AD0060AD0060AD0060AD0060AD0060AD045EA80261AB0060AE005EB00062B20365B40665B5 +0260B1015FAF015FAF015FAF025EAF0460B0045FB0045FB00460B0045FB0025DAE035FAF0460B0 +035DAF035FAF035FAF055EB0075DB0075EB0075EB0055BAF045BAE055CB0075AAE0659AE0357AB +055AAD0558AD0559AD0358AB065AAE055AAF065BAE055AAE0257AC065CAB055BAA0259A90458AC +0559AF0359AE04589F035DA70763B10161B3005CAD005DAE005BA9005BA9005BA9005CAA005BA9 +005EAB0056A7005AAA0057A70059A90058A90059A7005EAE005FAF005DAD015DAD015FAF005CAC +005EAE005DAD005EAE005EAE005FAF005DAD005FAF005BAB005FAF005DAD005FAF005FAF005FAF +005FAF005FAF005BAB005EAE005FAF005DAD005DAD005DAD005CAC005CAC005CAC005FAF005EAE +005FAF005CAC005DAD005CAC015EAE005DAD005AAA005DAD005DAD005DAD005BAB005EAE005EAE +005CAC005EAE005CAC005FAF005FAF005CAC005EAE005CAC005CAC005CAC005EAE005CAC005EAE +005EAE005EAE005BAB005EAE005FAF005CAC005CAC005CAC005EAE005EAE005CAC005FAF005FAF +005FAF005CAC005EAE005CAC005FAF005FAF005FAF005CAC005DAD005CAC005FAF005EAE005FAF +005CAC0060B0005CAC005EAE005CAC005CAC005FAF005BAB005FAF005CAC0060B0005CAC005FAF +005EAE005EAE005FAF005BAB005FAF0060AB0060AD0060AD005DAA005FAC005EAB015EAB005DAA +015EAC005CAB015EAE015DAF005CAA005CA9005CA9005FAC005FAC005FAC005FA9005FAB005FAB +005DA90061AD005DA9005FAC005FAC005DAA0060AD0060AD0060AD0060AD0060AD0060AD0060AD +0060AD0060AD0060AD0060AD005DAA005FAC005FAC005FAC005DAA005EAB005DAA0060AD005FAC +0060AD005DAA005EAB005DAA0060AD0060AD0060AD005DAA005DAA005DAA005FAC005FAC005FAC +005DAA005DAA005DAA005FAC005FAC005FAC015CAA005CAA015EAC005CAA0360AE015EAB0058A7 +0059A70059A70059A70059A70059A7376B95005CB0005EAE005EAE005DAD005EAE005EAE005EAE +005EAE005EAE005EAE005EAE005CAC005FAF005DAD005EAE005EAE005EAE005EAE005DAD005FAF +005FAF005FAF005DAD005EAE005DAD005FAF005FAF005DAD005EAE005EAE005EAE005EAE005CAC +005DAD005DAD005DAD005EAE005EAE005EAE005EAE005EAE005DAD005FAF005DAE0060AB0060AD +0060AD005DAA005FAC005FAC005FAC005FAC005FAC005FAC005FAC005EAB005EAB005EAB005EAB +005FAC005FAA005FAB005FAB005EAA0060AC005FAB005DA9005FAB005FAB005FAB005FAB005FAA +005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005DAA0060AD0060AD005DAA005FAC +005EAB005EAB005EAB015CAB015EAC015EAC015EAC015EAC015DAC005EAD0060AD005FAC005EAB +005EAB005FAC0060AD075FA70362AE0062B20060B20461AE045FA90060B4005BB1005CB00166BA +0063B80064B80265B90365B90365B90164B90062B70265B90062B70264B90265BA0566BB0366BA +0164B8015EB9015FBA015FBA015FB90462BC0563BD025DB9035EBA035FBA035DBA035EBA035DB9 +0361B6035FB60461B7005BB2005DB3015DB4005CB0015DB30461B6005CB60762BC015CB80060B8 +005EB90060B90064BA0260AE075CA6035FAD025FAD025FAD005DAB015EAC015EAC005AA8005AA8 +005BAA005CAB005CAB005CA9005EAE005FAF005CAC005FAF005FAF005FAF005EAE005DAD005EAE +005EAE005FAF005FAF005CAC0060B0005CAC005FAF005FAF005FAF005CAC005DAD005CAC005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005BAB005BAB005DAD005BAB005BAB005DAD005AAA005DAD005CAC005FAF005CAC005FAF +005FAF005FAF005CAC005DAD0160B00160B0005FAF005CAC005FAF005CAC005DAD005AAA005EAE +005FAF005DAD005FAF005FAF005FAF005DAD005CAC0060B0005CAC005CAC005CAC005EAE005EAE +005CAC005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005DAD005FAF +005FAF005FAF005FAF005DAD005FAF005FAF005DAD005CAC005DAD005FAF005FAF005EAE005CAC +0060B0005CAD005EAA005DAA005DAA005FAC005FAC005FAC015CA9015EAB005CAA025FAE025FAE +005CAE005DAA0060AD0060AD005DAA005FAC005FAC005FA9005FAB005DA90060AC005FAB005CA8 +005FAC005FAC005FAC005DAA005DAA005DAA0060AD005FAC0060AD005DAA005EAB005DAA0060AD +0060AD005DAA005FAC005FAC005DAA0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD +0060AD0060AD0060AD0060AD0060AD0060AD0060AD005DAA005FAC005DAA0060AD0060AD0060AD +005DAA005FAC005FAA025FAD025FAD025FAD005DAB005EAC005BA90159AA005AAA005AAA005AAA +005AAA005AAA336B94005CB0005EAE005DAD005EAE005EAE005EAE005DAD005EAE005EAE005EAE +005EAE005CAC005FAF005DAD005EAE005EAE005DAD005DAD005EAE005FAF005FAF005FAF005DAD +005EAE005DAD005FAF005FAF005DAD005DAD005EAE005EAE005EAE005EAE005BAB005BAB005CAC +005EAE005EAE005EAE005EAE005EAE005DAD005FAF005DAE0060AC0060AD0060AD005DAA005FAC +005FAC005EAB005EAB005FAC005FAC005EAB005FAC005FAC005FAC005EAB005FAC005FAA005FAB +005FAB005EAA0060AC005FAB005DA9005FAB005FAB005FAB005FAB005FAA005FAC005FAC005FAC +005FAC005FAC005FAC005EAB005FAC005DAA0060AD0060AD005DAA005FAC005DAA005FAC005FAC +015DAB005DAB015EAC015EAC015EAC015DAB005EAD0060AD005EAB005DAA005DAA005FAC0060AD +0560AB0162B10063B6015EAF0963AC0D60A420629A2568A21F639E2468A22466A12466A1166EA1 +166DA1156DA1186EA3146B9E13699D13699E11669B0E64980F639811679B146A9E1267A11367A1 +1366A11368A11367A11367A11265A010649E0D619B0E619C0E619C0E619D106497116398116398 +0F62980F62981063980F62950F629810639912659E1567A113659F125D9E0C5FA6045EAC0165B6 +005FAF025DA9015EAD025FAD025FAD005CAA015EAC015EAC005CAA005CAA005CAA005DAB005DAB +005DAA005FB0005BAB005FAF005DAD005FAF005FAF005CAC0061B1005CAC005FAF005FAF005DAD +005FAF005BAB005FAF005DAD005FAF005FAF005CAC005EAE005CAC005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005DAD005DAD +005DAD005DAD005DAD005DAD005DAD005EAE005CAC005FAF005CAC005FAF005FAF005FAF005CAC +005DAD0160B00160B0005FAF005CAC005FAF005CAC005EAE005BAB005EAE005FAF005DAD005FAF +005FAF005DAD0061B1005CAC005CAC005EAE005EAE005EAE005EAE005EAE005CAC005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005CAC005EAE005CAC005FAF005FAF005DAD005FAF005BAB005FB0005DAA +005FAC005FAC005FAC005FAC005FAC015CA9015EAB005CAC025FAC025FAE005CAE005DAA0060AB +0060AD005DAA005FAC005FAC005FA9005FAB005DA90060AC0060AC005DA9005FAC005FAC005FAC +005FAC005FAC005EAB005EAB005EAB005EAB005EAB005FAC005DAA0060AD0060AD005DAA005FAC +005FAC005EAB005EAB005EAB005EAB0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD +0060AD0060AD0060AD0060AD005DAA005FAC005DAA0060AD0060AD0060AD005DAA005FAC005FAB +005DAB005DAB005DAB005DAB015EAC005BA90158AA015AAA015AAA015AAA015AAA015AAA3E7498 +005BB0005BAB005EAE005DAD005EAE005CAC0060B0005CAC005EAE005DAD005CAC0160B0005AAA +005DAD005DAD005DAD005EAE005EAE005CAC005EAE005FAF005FAF005DAD005EAE005CAC005CAC +005FAF005EAE005EAE005DAD005CAC005DAD005DAD005EAE005FAF005CAC005EAE005DAD005DAD +005DAD005DAD005DAD005DAD005CAE005FAA005EAA005EAA005EAB005FAB005EAA005FAC005FAC +005EAB005FAC005EAB0060AD0060AD0060AD005FAC005FAC005FAA005FAA005FAA005EAA0060AC +005EAA005DA9005FAB005FAA005FAB005FAB005FAA005EAC005FAC005FAC005FAC005FAC005EAB +005FAC0060AD005DAA0060AD0060AD005FAC005DAA0060AD005EAB005EAB025EAD015EAC015CAB +005BA9015EAC025EAC0060AD0060AD005FAC005EAB005EAB005DAA005DAA0061B10062B80063B9 +0463B4196EB50C4F8E01020C000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000003062348185C950761AF005FB40061B7005DAC +025DAB025DAD005CAA015CAC015CAC005CAB005CAC005CAA025FAD025EAD025FAD005CAD0060B0 +005CAC005EAE005FAF005DAD005EAE005CAC005EAE005DAD005FAF005EAE005CAC0060B0005CAC +005EAE005FAF005FAF005CAC005EAE005CAC005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF025DAD025DAD025DAD025FAF025EAE +025DAD005FAF005FAF005DAD005FAF005CAC005FAF005FAF005FAF005CAC005DAD0160B00160B0 +005FAF005CAC005FAF005CAC005DAD005AAA005EAE005FAF005DAD005FAF005FAF005FAF005DAD +005CAC0060B0005CAC005CAC005CAC005EAE005EAE005CAC005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005CAC005DAD005CAC005FAF005DAF005EAF005CAE0060B0005CAE005EAA005FAC005FAC005FAC +005FAC005FAC015CA9015EAB005CAC025FAE025EAF005BAD005DAA0060AD0060AD005DAA005FAC +005FAC005FA9005FAB005DA90060AC0060AC005DA9005FAC005FAC005FAC005FAC005FAC005FAC +005CA9005CA9005CA9005FAC005FAC005DAA0060AD0060AD005DAA005FAC005FAC005FAC005CA9 +005DA9005CA90060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD +0060AD005DAA005FAC005DAA0060AD0060AD0060AD005DAA005FAC005FAC005BA9005DAA005BA9 +015EAC015EAC005AA90258AA035AAA035AAA035AAA035AAA035AAA005AAE005FAF0160B00160B0 +005DAD005CAC005FAF005DAD005CAC005BAB005FAF005FAF005DAD005FAF005FAF005FAF005FAF +005CAC005CAC005EAE005EAE005DAD005DAD005EAE005DAD005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005EAE005EAE005DAE005FAF005FAF005FAF005FAF005CAC0060B0005EAB005FAC005FAC005FAC +005EAB005FAC015DAA015DA9015DAC025FAE015DAE005CAD005FAA0060AD0060AD005FAC005FAC +005FAC005FAA005FAB005EAA0060AC005FAA005DA9005FAC005FAC005FAC005EAB005FAC005EAB +005EAB005EAB005EAB005FAC005FAC005EAB0060AD005FAB005DAA005FAC005FAC005EAA005FAB +005EAB005EAB0060AD0060AD0060AD0060AD0060AD005FAC005FAB005FAB005FAC0062B40F406F +2B231CF3F2F3D4D4D1D6D6D1D6D6D3D5D6D5DAD7D7D9D6D6D7D4D5D7D4D4D7D4D4D7D4D4D8D6D5 +D8D6D5D9D6D6D7D5D4D7D5D4D6D3D3D8D7D5D7D5D4D7D5D4D7D5D4D7D5D4D9D7D5D6D4D2D6D5D2 +D7D5D3D6D5D2D6D5D2D6D5D2D6D5D3D7D5D3D7D5D4D6D5D3D6D5D3D6D5D3D7D5D4D7D5D3D7D5D3 +D7D5D2D7D4D2DEDBD9B1B2AD08091B2E5E900263A90062B1015EB40061AD0061AE0161AE005DAA +005FAB005FAB005FAB005FAB005FAB005DAA005EAA005DAA005FAF005CAC005FAF005EAE005EAE +005FAF005DAD005FAF005DAD005FAF005EAE005EAE005FAF005CAC005FAF005EAE005EAE005FAF +005CAC005EAE005CAC005FAF005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005FAF +005FAF005FAF005EAE005EAE005DAD0060B00060B00060B0005DAD005FAF005DAD0160B00160B0 +005DAD005CAC005EAE005CAC005CAC005DAD005EAE005EAE005CAC005CAC005CAC005EAE005CAC +005EAE005EAE005EAE005BAB005EAE005FAF005CAC005CAC005CAC005EAE005EAE005CAC005FAF +005FAF005FAF005CAC005EAE005CAC005FAF005FAF005FAF005CAC005CAC005CAC005CAC005CAC +005CAC005FAF005EAE005FAF005CAC005CAC005CAC005CAC005CAC005CAC005EAE005FAF005DAE +0060AB0060AB0060AC005EAA005DAA005FAA005FAC005FAC005FAC005FAC005FAC005FAC005CA9 +005DAA005CA9005FAC005FAA005FAA005FAA005FA9005DA90060AC0060AB005DA8005FAB005FAB +005FAB005DA9005EAB005FAA005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC +005DAA0060AD0060AD005DAA005FAC005FAC005CA9005CA9005CA9015DAC015EAC015EAC015CAA +015CAA015CAA0060AD0060AD0060AD005FAC005FAC005FAC0060AD0060AD0060AD005DAA005FAC +005FAA025DAD025DAD025DAD025FAD025EAD005BAA015AAB015BAB005AA9025DAC025DAC015BA9 +0058AA005AAA005AAA005AAA005AAA005AAA005CAC005FAF0160B00160B0005DAD005CAC005FAF +005EAE005CAC005BAB005FAF005FAF005DAD005FAF005FAF005FAF005DAD005DAD005EAE005DAD +005DAD005DAD005EAE005EAE005DAD005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005DAD005DAD005DAD +005FAF005EAF005EAF005EAF005EAE005EAE005FAB005FAC005FAC005FAC005FAC005FAC015DAB +015EA9005DAC025FAE015DAE005BAD005EAB0060AD0060AD005EAB005FAC005FAC005FAA005FAB +005EAA0060AC005FAB005DA9005FAC005FAC005FAC005FAC005FAC005FAC005DAA005DAA005DAA +005FAC005EAB005EAB0060AD005FAC005DAA005FAC005FAC005FAC005DAA005DAA005EAB0060AD +0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD0063B50C3C6A2F2923FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +CFCDCC0E13213866970261A70062AE025DAF0061AD0161AE0161AE005FAC005FAC005FAC005FAC +005FAC005FAC005FAC005FAC005FAC005EAF005CAC005FAF005DAD005DAD005DAD005DAD005FAF +005DAD005DAD005DAD005DAD005FAF005CAC005FAF005DAD005DAD005DAD005DAD005EAE005DAD +005DAD005DAD005DAD005DAD005DAD005DAD005DAD005DAD005DAD005FAF005FAF005FAF005DAD +005DAD005DAD005EAE005EAE005EAE005EAE005FAF005DAD0160B00160B0005DAD005EAE005EAE +005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE +005CAC005FAF005FAF005CAC005EAE005EAE005EAE005EAE005CAC005FAF005FAF005FAF005CAC +005EAE005CAC005FAF005FAF005FAF005CAC005EAE005EAE005EAE005EAE005DAD005DAD005DAD +005DAD005DAD005EAE005EAE005EAE005EAE005EAE005DAD005FAF005DAE0060AB0060AD0060AD +005DAA005FAC005FAC005FAC005FAC005FAC005FAC005FAC005EAB005EAB005EAB005EAB005EAB +005FAC005FAC005FA9005FAB005DA90060AC0060AC005DA9005FAB005FAB005FAB005FAB005FAB +005FA9005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005DAA0060AD0060AD +005DAA005FAC005EAB005EAB005EAB005EAB015CAB015EAC015EAC015EAC015EAC015CAA0060AD +0060AD0060AD005EAB005EAB005EAB0060AD0060AD0060AD005DAA005FAC005FAA025FAD025FAD +025FAD025FAD025FAD005DAA015AAB015CAB005AA9025DAC025DAC005BA90158AA015AAA015AAA +015AAA015AAA015AAA005DAD005EAE005DAD005DAD005EAE005DAD005DAD005EAE005DAD005DAD +005DAD005FAF005EAE005DAD005DAD005DAD005DAD005EAE005EAE005EAE005EAE005EAE005DAD +005EAE005DAD005FAF005FAF005FAF005DAD005DAD005DAD005DAD005DAD005EAE005FAF005FAF +005FAF005DAD005DAD005DAD005DAD005DAD005DAD005DAD005EAE005DAE0060AC005FAC005FAC +005EAB005EAC005EAA005FAC005FAC005FAC005FAC005FAC005FAC005CA9005CA9005DAB005FAC +005EAB005EAB005EAB005EAA005FAB005FAC005FAB005EAA005FAB005FAB005FAB005EAA005FAB +005EAA005FAC005FAC005FAC005FAC005FAC005FAC005EAB005EAB005EAB005DAA005FAC0060AD +005EAB005FAC005EAB005DAA005DAA005DAB005DAB005DAB005EAB005DAB005DAB005EAC0060AD +0060AD0060AD0060AD0060AD0060AD0063B50C3D6A2E2822FFFFFFFDFDFAFDFDF8FDFDFAFDFDFE +FDFDFDFDFDFDF8F8F8FFFFFFFFFFFFFDFDFDFFFFFFFAFAFAFFFFFFFBFBFBFEFEFEFFFFFFFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFDFDFBFDFDFBFDFDFBFCFCFAFCFCFAFCFCFAFCFCFAFEFEFC +FEFEFCFCFCFAFDFDFBFDFDFAFCFCFAFCFCFAFCFCFAFCFCFAFCFCFAFFFFFFCAC9C71116223C6694 +055FA20060AC055CAC0061AE0161AE0161AE0060AD0060AD0060AD0060AD0060AD0060AD0060AD +0060AD0061AC005DAF005CAC005FAF005BAB005BAB005BAB005DAD005FAF005DAD005BAB005BAB +005BAB005FAF005CAC005FAF005BAB005BAB005BAB005EAE005CAC005EAE005BAB005BAB005CAC +005CAC005CAC005CAC005BAB005DAD005BAB005FAF005FAF005FAF005BAB005BAB005BAB005DAD +005CAC005CAC005FAF005DAD005DAD0160B00160B0005DAD005EAE005CAC005EAE005CAC005EAE +005CAC005EAE005EAE005EAE005EAE005CAC005EAE005EAE005EAE005EAE005CAC005FAF005FAF +005CAC005EAE005EAE005CAC005EAE005DAD005FAF005FAF005FAF005CAC005EAE005CAC005FAF +005FAF005FAF005CAC005EAE005EAE005EAE005EAE005EAE005BAB005BAB005BAB005EAE005EAE +005EAE005EAE005EAE005EAE005DAD005FAF005DAE0060AC0060AD0060AD005DAA005FAC005FAC +005DAA005DAA005DAA005FAC005FAC005DAA0060AD005FAC0060AD005DAA005FAC005FAC005FA9 +005FAB005DA90060AC0060AC005DA9005FAB005FAB005FAB005FAB005FAB005FA9005FAC005FAC +005FAC005FAC005FAC005FAC005DAA005DAA005FAC005DAA0060AD0060AD005DAA005FAC005DAA +0060AD0060AD0060AD015CAA005EAC015EAC015EAC005EAC015CAA0060AD0060AD0060AD005CA9 +005CA9005CA90060AD0060AD0060AD005DAA005FAC005FAA025FAD025FAD025FAD025FAD025FAD +005DAA015AAB015CAB005AA9025DAC025DAC005AA90158AA015AAA015AAA015AAA0058A8015AAA +005EAE005DAD005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005CAC005FAF005FAF +005DAD005EAE005EAE005EAE005EAE005DAD005FAF005FAF005FAF005DAD005EAE005DAD005FAF +005FAF005FAF005EAE005EAE005EAE005EAE005EAE005CAC005DAD005DAD005DAD005EAE005EAE +005EAE005EAE005EAE005EAE005DAD005FAF005DAE0060AC0060AD0060AD005EAB005FAB005FAC +005FAC005FAC005FAC005FAC005FAC005EAB005EAB005EAB005EAB005FAC005FAC005FAC005FAA +005FAB005EAA0060AC005FAA005DA9005FAB005FAB005FAB005FAB005FAB005FAA005FAC005FAC +005FAC005FAC005FAC005FAC005FAC005FAC005FAC005DAA0060AD0060AD005EAB005FAC005EAB +005EAB005EAB005EAB015EAC015EAC015EAC015EAC015EAC015DAB0060AD0060AD0060AD005EAB +005EAB005EAB0064B50939682E2822FFFFFFFCFCFBFEFFF8FEFDFAFEFEFEFCFCFCFDFDFDFFFFFF +E1E1E1A1A1A1D4D4D4C1C1C1FFFFFFE4E4E4FFFFFFF9F9F9FFFFFFFBFBFBFFFFFFFFFFFFFCFCFC +FFFFFFF6F6F7FFFFFFFEFEFDFDFDFBFBFBFAFFFFFFFFFFFFFFFFFFF8F8F6FAFAF9FEFEFCFAFAF8 +FAFAF8FEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFFFFFFC9C8C7141926416B990662A60061AB085DAC +0061AE0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AC005DAF +005FAF005DAD005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005DAD005FAF +005DAD005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005CAC005DAD005DAD005DAD +005DAD005BAB005EAE005FAF005FAF005FAF005FAF005FAF005FAF005EAE005EAE005EAE0060B0 +0060B00060B00160B00160B0005DAD005CAC0060B0005CAC005FAF005CAC005FAF005CAC005EAE +005DAD005DAD0060B0005DAD005DAD005EAE005CAC0160B0005AAA0160B0005CAC005EAE005CAC +005FAF005FAF005CAC005FAF005FAF005FAF005CAC005EAE005EAE005BAB005EAE005FAF005FAF +005FAF005CAC005EAE005EAE005DAD005EAE0060B0005EAE005DAD005EAE005EAE005EAE005EAE +005EAE005EAE005CAC005CAE005FAA005DAA005DAA005FAC005FAC005DAA0060AD0060AD0060AD +005DAA005FAC005DAA0060AD0060AD0060AD005DAA005FAC005FAC005FA9005FAB005DA90060AC +0060AC005DA9005FAB005FAB005FAB005FAB005FAB005FA9005FAC005FAC005FAC005FAC005FAC +005DAA0060AD0060AD0060AD005DAA0060AD0060AD0060AD005DAA0060AD005DAA005EAB005DAA +025FAD025FAD005CAA005CAA025FAD025EAD0060AD0060AD0060AD005EAB005FAC005FAC005CA9 +005FAC0060AD005DAA005FAC005FAC015CAA005CAA015EAC005BA9005BA9005DAA005AAA005BAA +015CAB005AA9005AA9005CAB0158A8015AAA015AAA0059A9025BAB0059A9005DAD005EAE005EAE +005EAE005EAE005DAD005EAE005EAE005EAE005EAE005CAC005FAF005FAF005DAD005EAE005EAE +005DAD005EAE005DAD005FAF005FAF005FAF005DAD005EAE005DAD005FAF005FAF005FAF005DAD +005EAE005EAE005EAE005EAE005EAE005BAB005BAB005CAC005EAE005EAE005EAE005EAE005EAE +005EAE005DAD005FAF005DAE0060AD0060AD0060AD005EAB005FAC005FAC005EAB005EAB005EAB +005FAC005FAC005EAB005FAC005FAC005FAC005EAB005FAC005FAC005FAA005FAB005EAA0060AC +005FAB005DA9005FAB005FAB005FAB005FAB005FAB005FAA005FAC005FAC005FAC005FAC005FAC +005FAC005EAB005EAB005FAC005DAA0060AD0060AD005EAB005FAC005EAB005FAC005FAC005FAC +015DAB015EAC015EAC015EAC005DAB015DAB0060AD0060AD005FAC005CA9005DAA005EAB0064B5 +0A3C6B2E2822FFFFFFFCFCFBFEFFF8FEFDFAFDFDFDFEFEFEFDFDFDFFFFFF161616ABABABC1C1C1 +6F6F6FBBBBBB4C4C4CFEFEFEFFFFFFCCCCCCFFFFFFE8E8E8CECECEFEFEFEF0F0F0FFFFFFD3D3D2 +F4F4F3FFFFFFFFFFFFDADAD9CDCDCCDCDCD9FFFFFFC8C8C7FFFFFFF8F8F7FCFCFBFDFDFBFEFEFC +FEFEFCFEFEFCFEFEFCFFFFFFC9C8C71419273F6D9E0562A80062AE035DAE0061AD0161AE0161AE +0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AE0161AC005DAF005FAF005EAE005EAE +005EAE005EAE005EAE005FAF005EAE005EAE005EAE005EAE005EAE005FAF005EAE005EAE005EAE +005EAE005EAE005FAF005FAF005FAF005FAF005CAC005DAD005DAD005DAD005DAD005BAB005EAE +005FAF005FAF005FAF005FAF005FAF005EAE005EAE005EAE005EAE005EAE005EAE005EAE0160B0 +0160B0005DAD005FAF005BAB005FAF005CAC0061B1005CAC005EAE005EAE005CAC005FAF005BAB +005FAF005CAC005EAE005EAE005CAC005EAE005CAC005EAE005EAE005CAC005FAF005FAF005CAC +005FAF005EAF005FAF005CAC005EAE005EAE005CAC005FAF005FAF005EAF005FAF005CAC005EAE +005DAE005CAC005FAF005CAB005FAF005CAC005DAE005EAE005EAE005EAE005EAE005EAE005EAE +005CAE005FAA005FAC005FAC005FAC005FAC005DAA0060AD0060AD0060AD005DAA005FAC005DAA +0060AD0060AD0060AD005DAA005FAC005FAC005FA9005FAB005DA90060AC0060AC005DA9005FAB +005FAB005FAB005FAB005FAB005FA9005FAC005FAC005FAC005FAC005FAC005EAB005EAB005EAB +005EAB005DAA0060AD0060AD0060AD005DAA0060AD005DAA005FAC005FAA025FAD025FAD005CAA +005CAA025FAD025DAD0060AD0060AD0060AD005DAA005FAC005FAC005DAA0060AD0060AD005DAA +005FAC005FAC015CAC015EAC005DAB005DAB005DAB005CA9005AA9005AA9005AA9005AA9005AA9 +005AA90158A9015AAA015AAA0059A9025BAB0059A9005EAE005DAD005EAE005EAE005DAD0060B0 +005CAC005EAE005EAE005EAE015EAE005AAA0160B0005DAD005EAE005DAD005EAE005EAE005CAC +005FAF005FAF005FAF005DAD005EAE005EAE005DAD005FAF005FAF005EAE005EAE005DAD005EAE +005EAE005DAD005EAE005FAF005CAC005EAE005EAE005EAE005EAE005EAE005EAE005EAE005DAD +005DAD005FAB005EAB005EAB005FAC005FAC005EAB005FAC005FAC005FAC005EAB005FAC005EAB +0060AD0060AD0060AD005EAB005FAC005FAC005FAA005FAB005EAA0060AC005FAB005DA9005FAB +005FAB005FAB005FAB005FAB005FAA005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC +005FAC005DAA0060AD0060AD005EAB005DAA0060AD005EAB005EAB005EAC025EAC015EAC005CAA +015DAB015EAC025EAC0060AD0060AD005FAC005EAB005EAB005EAB0061B30B3E6C2E2822FFFFFF +FCFCFAFCFFF8FCFDFAFCFCFCFFFFFFFFFFFFFFFFFF4E4E4E101010FFFFFFF9F9F96464644B4B4B +FFFFFF8A8A8ABFBFBF5F5F5FE3E3E3111111D2D2D2A3A3A34F4F50CDCDC94D4D4BF3F3F2929290 +6767651B1B19FFFFFF9B9B9AC8C8C4424242FFFFFFFCFCFAFEFEFAFCFCFAFCFCFAFCFCFAFCFCFA +FFFFFFC9C8C6141A2A4070A50163A90062B1015FB30161AE0161AE0161AE015FAC015FAC015FAC +0161AE0161AE0161AE0161AE0161AE0161AD005DAF005FAF005EAE005EAE005EAE005EAE005EAE +005FAF005EAE005EAE005EAE005EAE005EAE005FAF005EAE005EAE005EAE005EAE005EAE005FAF +005FAF005FAF005FAF005CAC005DAD005DAD005DAD005DAD005BAB005EAE005FAF005FAF005FAF +005FAF005FAF005EAE005EAE005EAE005EAE005CAC005CAC005CAC0160B00160B0005EAE005CAC +0060B0005CAC005FAF005CAC005FAF005CAC005EAE005CAC005DAD0060B0005DAD005CAC005DAD +005CAC0160B0005AAA0160B0005CAC005CAC005CAC005FAF005EAF005BAC005FAF005EAF005FAF +005CAC005EAE005EAE005BAB005EAE005EAF005EAF005EAE005BAB005DAE005DAC005DAC005CAC +005EB0005CAC005DAC005DAC005CAC005DAC005CAC005CAC005EAE005CAC005CAE005FAA005DAA +005DAA005DAA005DAA005DAA0060AD0060AD0060AD005DAA005FAC005DAA0060AD0060AD0060AD +005EAA005FAC005FAC005FA9005FAA005EA90060AC0060AB005DA8005FAB005FA9005FA9005FA9 +005FA9005FA9005FAC005FAC005FAC005FAC005FAC005FAC005CA9005CA9005CA9005DAA0060AD +0060AD0060AD005DAA0060AD005EAB005FAC005DAA025FAD025FAD005CAA005BA9015EAC025DAD +0060AD0060AD0060AD005DAA005FAC005FAC005CA9005FAC0060AD005EAA005FAC005EAC015EAC +005EAC005CAA025FAD005EAC005BA80058A70058A70058A70058A7005AA90058A70158AA0158AA +0158AA0159A9025BAB0159A9005CAC005EAE005EAE005DAD005FAF005CAC005FAF005DAD005EAE +005EAE005EAE005EAE005CAC005EAE005EAE005DAD005FAF005EAE005CAC005FAF005EAF005FAF +005DAD005EAE005EAE005CAC005FAF005FAF005FAF005EAE005CAC005EAE005DAE005DAD005FAF +005CAC005FAF005DAD005DAE005EAE005EAE005EAE005EAE005EAE005EAE005DAC005FAC005FAC +005FAC005FAC005FAC005EAB0060AD0060AD0060AD005EAB005FAC005EAB0060AD0060AD0060AD +005EAB005FAC005FAC005FAA005FAB005EAA0060AC005FAB005DA9005FAB005FAB005FAB005FAB +005FAB005FAA005FAC005FAC005FAC005FAC005FAC005DAA005EAB005EAB005EAB005DAA0060AD +0060AD005FAC005DAA0060AD005EAB005FAC015FAB025FAD015EAC005BA9015CAA025FAD025EAD +0060AD0060AD0060AD005FAC005FAC005FAC0061B20A3D6D2E2822FFFFFFFCFCFDFFFFFDFFFFFE +FFFFFFFDFDFDFCFCFCF8F8F8FBFBFBB8B8B8000000D6D6D67A7A7A767676EDEDED090909F0F0F0 +0000009F9F9F020202FFFFFFFFFFFFB5B5B5C9C9CA000000DEDEDE3838388484842A2A2AFFFFFF +3737377C7C7D363636DEDEDEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C8C618192A +3676A80066AC055DB00360AE005EAB005EAB005EAB0162AF0162AF0162AF005FAC0061AE0061AE +005EAB005EAB005FAB005DAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005BAB005BAB +005CAC005CAC005CAC005CAC005BAB005DAD005BAB005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005DAD005EAE005BAB005EAE005CAC005EAE005CAC +005EAE005CAC005CAC005FAF005FAF005CAC005CAC005CAC005FAF005FAF005FAF005DAD005FAF +005CAC005FAF005FAF005FAF005FAC005FAE0060AE005FAC005FAC005FAC005CAE005EAE005CAC +005FAF005FAF005DAF0061AF0060AF0061AF0060AF0060AF0060AF0061AF0060AD0061AF0060AF +0060AF0061AF005DAF005FAF005FAF005DAD005FAF005DAE0060AC0060AD0060AD0060AD0060AD +0060AD0060AD005FAC005CA9005FAC005FAC005FAC015CAA015CAA015CAA015CAC015CAC015CAC +015CAC015CAC015CAC015CAC015CAC015EAC015CAC015CAC015CAC015CAC015CAC015CAC005FAC +005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005EAB005DAA005DAA005FAC +005FAC005DAA0060AD0060AD025DAD025FAD005CAA025FAD025FAD025DAD0060AD0060AD0060AD +0060AD0060AD005DAA035FAD035DAD035EAD015CAA025CAC025CAC005AAA035DAD035EAD035EAD +025CAC0059A8005BAA005BAA005BAA005AA90058A7005AAA005BA8005BAA005BAA005BAA005BA8 +005BAA005EAE005EAE005DAD005DAD005EAE005EAE005DAD005DAD005DAD005DAD005EAE005BAB +005FAF005DAD005DAD005DAD005FAF005DAE005CAC005FAF005EAF005FAF005DAD005EAE005EAE +005CAC005FAF005EAF005FAF005DAD005CAC005DAE005DAD005DAD005EAE005DAE005DAD005DAD +005DAD005DAD005DAD005DAD005DAD005EAE005DAD005DAD005FAB005EAB005EAB005EAB005EAB +005EAB0060AD0060AD0060AD005EAB005FAC005EAB0060AD0060AD0060AD005FAB005FAC005FAC +005FAA005FAA005FAA0060AC005FAA005DA9005FAB005FAA005FAA005FAA005FAA005FAA005FAC +005FAC005FAC005FAC005FAC005FAC005DAA005DAA005DAA005DAA0060AD0060AD005FAC005DAA +0060AD005FAC005EAB015EAB025FAD015EAC005BA9005CAA025FAD025EAD0060AD0060AD0060AD +005EAB005FAC005FAC0061B2093B6B2E2822FFFFFFFCFCFCFFFFFCFFFFFEFFFFFFFDFDFEFEFEFE +FFFFFF0C0C0CFFFFFF767676494949797979666666F1F1F12F2F2FEBEBEB0A0A0ACBCBCB000000 +FFFFFFFFFFFF6565656A6A6A171717D1D1D1BDBDBD565656ACACACFFFFFF464646A5A5A5FFFFFF +F6F6F6FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C8C619192C387AAB0066AB055CB0 +035EAD0060AD0060AD0060AD0162AF0162AF0162AF005FAC0061AE0060AD0060AD0060AD0060AD +005DAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005DAD005DAD005DAD005DAD005DAD +005DAD005DAD005DAD005DAD005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005CAC005EAE005EAE005EAE005EAE005EAE005EAE005CAC +005FAF005FAF005CAC005EAE005DAD005DAD005DAD005DAD005DAD005DAD005DAD005FAF005FAF +005FAF005EAC005EAE005EAE005EAE005EAE005FAE005CAE005EAE005CAC005FAF005FAF005DAF +0060AF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF0060AF005DAF +005FAF005FAF005DAD005FAF005DAE0060AB0060AD0060AD0060AD0060AD0060AD0060AD0060AD +005DAA005FAC005FAC005FAC015CAC015EAC015EAC015EAC015EAC015EAC015EAC015EAC015EAC +015EAC015EAC015EAC015EAC015EAC015EAC015EAC015EAC015CAC005FAC005FAC005FAC005FAC +005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005DAA0060AD +0060AD025DAD025FAD005CAA025FAD025FAD025DAD0060AD0060AD0060AD0060AD0060AD005DAA +005FAD005FAD005FAD005DAA005EAC005FAC005BAA035DAD035EAD035EAD025DAC0059A8005BAA +005BAA005BAA0058A7005DAC0058A7005BAA005BAA005BAA005BAA005BAA005BAA005DAD005DAD +005EAE005EAE005CAC005DAD005DAD005EAE005EAE005FAF005FAF005DAD005DAD005EAE005EAE +005EAF0060AD005FAE005FAD0060AD0060AD005FAD005DAE005EAE005DAD005EAE005FAF005EAF +0061AF0060AE0060AE0060AE0060AE0060AE0060AE0061AE0060AE0060AE0060AE005FAE005EAE +005EAE005EAE005DAD005EAE005DAD0060AC005FAC005FAC005FAC005FAC005FAC0060AD005FAC +005EAB005FAC005FAC005FAC005DAB005DAB005DAB005DAC005DAC005DAC005DAB005DAB005DAB +005DAC005DAB005EAB005DAB005DAB005DAB005DAB005DAB005EAB005FAC005FAC005FAC005FAC +005FAC005FAC005EAB005EAB005EAB005EAB005EAB005EAB005FAC005EAB005FAC005DAA005FAC +015FAC025FAD005EAC005CAA015EAC025FAD025EAD0060AD0060AD0060AD005FAC005FAC005EAA +0162B408396A2E2822FFFFFFFCFCFCFFFFFCFFFFFEFFFFFFFDFDFEFCFCFCFFFFFF8D8D8DBEBEBE +8B8B8BF9F9F9E2E2E2696969FEFEFEE0E0E0848484D1D1D1CCCCCC4C4C4CC9C9C9FFFFFFA3A3A3 +D8D8D8888888EAEAEA626262000000000000A0A0A0F9F9F9656565E6E6E6FAFAFAFDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C8C6181A2C3B7DAE0065AB055CB0025EAD0062AF0061AE +0061AE0162AF0162AF0162AF005FAC0060AD005FAC0162AF0060AD0162AE005DAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005EAE005EAE005EAE005FAF005FAF005FAF005EAE005EAE +005EAE005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005EAE005BAB005EAE005CAC005CAC005CAC005DAD005EAE005CAC005FAF005FAF005CAC +005EAE005EAE005BAB005BAB005BAB005CAC025FAF015FAF015FAF015FAF005FAF005DAC005DAE +005DAC005DAE005DAE005DAE005CAC005EAE005DAD015FAF015FAF005EAF005FAF005FAF005FAF +005EAF005EAF005EAF005EAF005EAF005EAF005FAF005FAF005FAF015EAF015FAF015FAF005DAD +025FAF005DAD0060AB0060AD0060AD0060AD0060AD0060AD0060AD005FAC005CA9005FAC005FAC +005FAC015CAC015EAC015EAC015EAC015EAC015EAC015EAC015EAC015EAC005CAA005CAA015EAC +015EAC015EAC015EAC005CAA015EAC005CAA005EAC005EAC005EAC005DAC005DAA005DAA005DAA +005DAA005DAA005DAA005DAB005DAA005DAC005DAA005EAC005BA9015EAC015EAD005DAB015EAC +005BA9025FAD025FAD025EAD015FAD015FAD015FAD015EAD015EAC005CA90060AD0060AD0060AD +005DAA005FAC005FAB005BA9025CAC035EAD035EAD025DAC0059A8005BAA005BAA005AA90059A8 +0059A8005AA9005BAA005BAA005BAA005BAA005BAA005BAA005EAE005CAC005FAF005FAF005DAD +005EAE005CAC005DAD005DAD005DAD005EAE005DAD005DAD005FAF005FAF005FAF005EAD005EAE +005EAE005EAE005EAE005FAE005DAE005EAE005DAD005FAF005FAF005EAF0060AF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF0060AF005EAF005FAF005FAF005DAD +005FAF005DAE0060AC0060AD0060AD0060AD0060AD0060AD0060AD005EAB005DAA005FAC005FAC +005FAC015DAC015EAC015EAC015EAC015EAC015EAC015EAC015EAC015EAC015EAC015EAC015EAC +015EAC015EAC015EAC015EAC015EAC015DAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC +005FAC005FAC005FAC005FAC005FAC005FAC005FAC005FAC005DAA0060AD0060AD025FAD005EAC +005CAA025FAD025FAD025EAD0060AD0060AD0060AD0060AD005FAC005DAA0063B40E3F6E2E2822 +FFFFFFFCFCFCFFFFFCFFFFFEFFFFFFFFFFFFFDFDFDFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9FFFFFFFFFFFFFFFFFFFFFFFF +B4B4B4FFFFFFFFFFFFD9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFC8C8C51E1E303A7AAB0066AC085DB30461AF0062AE0061AE0062AF005FAC0060AD +005FAC0162AF0062AF0062AF0061AE0263B00062AE005DAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005CAC005CAC005CAC005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF005FAF +005FAF005FAF005FAF005FAF005FAF005CAC005CAC005FAF005FAF025EAF005DAC025FAF025FAF +025EAF005CAC015EAE005DAE005DAC005DAC005DAD005CAC005FAF005CAC005FAF005CAC005EAE +005CAC025EAF015EAF005BAC025EAF015EAE025FAF005CAD005DAD005DAD005FAF005EAE005EAE +005EAE005EAE005FAF005DAD005DAD005DAD005CAD005DAD005CAC0360B00059AA0360B0005FAB +005FAC005FAC0060AD0060AD0060AD0060AD0060AD0060AD005DAA005FAC005FAC015CAC015EAC +015EAC015EAC015EAC015EAC015EAC015EAC005CAA015FAD025FAD005CAA005DAB005DAB005CAA +0562B0005DAB025FAD005BA9005CAA005BA9005EAB0360AE025EAD025EAD025EAD005EAC0360AE +025EAC0360AE005DAB025EAD005DAB025FAD025EAD005EAB0360AE015EAC0360AE005CAA005CAA +005CAA005DAA005DAA005CAA025EAD025EAC015EAD0060AC0060AC0060AC005FAC005EAA005FAC +035EAD025DAC025DAC025DAC005BAA005AA9005AA9005BAA0059A8025DAC005AA9005AA90057A6 +005AA9005BAA005BAA005BAA005BAA005EAE005CAC005FAF005FAF005DAD005EAE005EAE005BAB +005CAC005CAC005DAD015EAE015EAE015FAF015FAF005FAF005DAD005EAE005DAD005EAE005EAE +005DAE005DAD005EAE005DAD015FAF015FAF005EAF005FAF005FAF005FAF005EAF005FAF005FAF +005FAF005FAF005EAF005FAF005FAF005FAF015FAF015FAF015FAF005DAD015FAF005DAD0060AC +0060AD0060AD0060AD0060AD0060AD0060AD005EAB005DAA005FAC005FAC005FAC015DAC015EAC +015EAC015EAC015EAC015EAC015EAC015EAC015EAC005DAB005DAB015EAC015EAC015EAC015EAC +005DAB015EAC005DAB005EAC005EAC005EAC005DAB005DAB005DAB005DAB005DAB005DAB005DAB +005DAB005DAB005DAC005DAB005EAC005CAA015FAD015EAD025FAD005DAB005CAA025FAD025FAD +025FAD015FAD015FAD015FAD015FAD005EAB005DAA0064B40D3F6E2E2822FFFFFFFCFCFCFFFFFC +FFFFFEFFFFFFFFFFFFFEFEFEFCFCFCFCFCFCFAFAFAFCFCFCFBFBFBFBFBFBFBFBFBF9F9F9FBFBFB +FDFDFDF9F9F9FEFEFEFAFAFAFCFCFCFCFCFCFBFBFBFFFFFFFBFBFBFDFDFDF7F7F7BDBDBDD8D8D8 +FFFFFFFBFBFBFAFAFAFBFBFBFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8C5 +1D1C2E3778A90064A9065DB10561B00060AD0060AD0060AD0060AC0060AD0060AC0060AD0060AD +0060AD0060AD0061AE0060AD005DAF005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE +005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE +005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE +005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE +005EAE005FAE005CAC005CAC005FAE005FAE025DAF015CAC035EAF015CAD015CAD015CAD025DAE +025CAE005BAC025CAE015CAD015CAC025EAF005DAC025FAF005DAC005EAD005EAC035DAF025DAE +005BAC015CAD015CAD015CAD025FAF015EAE015FAF005DAD005DAD005DAD005DAD005DAD005DAD +015FAF015EAE015FAE035DAE025DAE035EAF005BAC025DAE005BAC005EAA005EAB005EAB0060AD +0060AC0060AC0060AC0060AC0060AD005DAA005FAB005FAB015CAB005EAB005EAB005EAB005EAB +005EAB005EAB005EAB015EAC005BA9005DAB005DAA005CAA005CAA005CA90260AE005DAB005DAB +005AA9005BAA005BAA005BAA025DAC015CAB015CAB015CAB015CAB025DAC005AA9025DAC005AAA +015CAB005AAA015CAB015CAB015CAB015EAC005BA9015EAC005CAA005CAA005CAA005BAA005BAA +005BAA015CAB015CAB025CAB015DAB015CAB025DAB005AA9025EAC005AA9005BAA005BAA005BAA +015DAC0058A7005BA9005AA9005BAA005BAA0057A6015EAD005CAB0058A7005BAA005BAA005BAA +005BAA005BAA005CAC005CAC005FAF005FAF015FAD005EAC015FAF015EAE005DAD005CAC015DAD +005EAD005EAD005EAD005EAD005EAE005DAE005CAC005EAE005DAD005DAE005DAD015EAE005EAE +005DAC025FAF015FAF025FAF005CAC005DAD005EAE005EAF005EAF005EAF005EAF005EAF005FAF +005CAC005DAD005DAD005DAD005DAD015EAE025EAE005AAA0361B00060AC0060AD0060AD0060AD +0060AD0060AD0060AD005FAC005FAC005EAB005FAC005FAC015DAC015EAC015EAC015EAC015EAC +015EAC015EAC015EAC005DAB015EAC005DAB005DAB015EAC015EAC005DAB0360AE005DAB015DAB +005DAA005DAA005DAB005EAD025FAD015EAC015EAC015EAC015EAC025FAD015EAC015EAC005DAC +025FAC005EAC025EAC015FAD025EAD0360AE015FAD025EAC005DAB005DAB005DAB005EAB005EAB +015EAC025FAD025FAC005EAC0063B40E41712E2721FFFFFFFCFCFCFFFFFDFFFFFEFFFFFFFFFFFF +FFFFFFFEFEFEFFFFFFFEFEFEF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8 +FFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFF7F7F7FFFFFFFFFFFFFEFEFEFDFDFDFDFDFD +FDFDFDFFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C8C61C1C2D3575A70061A5 +045BAF0661B0005FAA005FAC005FAC0061AD0060AD0061AD005FAC005FAC005FAC005FAC0061AD +005FAB005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE +005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005FAF +005FAF0060AF005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE005EAE +005EAE005EAD005EAD005EAD005EAE005EAE005EAE005EAE005EAE005EAF005EAE005EAE005CAC +005CAC005EAE005FAE035CAE025BAC045DB0015AAB035DAE035DAE055EB0045DAE0059AA035CAD +025BAD025BAC035EAE015DAC035EAE005CAC015DAD005DAC045DAE035CAE015AAB015AAC015AAC +015BAC005BAB005BAB005BAB005BAC005BAC005BAC005BAB005BAC005BAC005BAB005BAB005BAB +0159AB015AAB0058AB055EAF0058A9045EAF005CA9005CA9005CA90060AD0060AB005FAD005FAC +005FAC005FAC005DAB005EAB005EAB005EAB005EAB005EAB005EAB005EAB005EAB005EAB005EAA +005EAD0059A6005DAA005DAA005CA9005CA9005AA8025FAD005CAA005CAA015BAA015BAA015BAA +005AAA035CAC025CAB005AAA015AAA005AAA035CAB0159A9035DAD0059A8025BAA0059A8015BAA +015AAA015BAA005FAB005BA9015FAD005AA8005CA9005BA9005AA90059A90059A9015BAA015AAA +005BAA045AAA045AAA045AAA045AAA0158A8045AAC0059A60059A80059A80059A8015EAC0056A6 +005BAA005AAA005AAA015CAC0059A7005BAA0058A7005BAA005BAA005BA8005BAA005BA8005BAB +005CAC005FAF015FAE025DAD015BAC035EAF015CAD015BAD015CAC025DAE025BAE005BAC025CAE +015BAD015DAE025EAE005CAC025FAF005DAD005EAD005EAD035EAF025CAE005BAC015CAD015CAD +015DAD025FAF025FAF025FAF005DAD005DAD005DAD005DAD005DAD005DAD025FAF025FAF015FAF +035DAF035EAF035EAF015CAD025DAE005DAC005EAB005EAB005EAB0060AD0060AC0060AC0060AC +0060AC0060AD005EAB005FAB005FAB015DAB005EAB005EAB005EAB005EAB005EAB005EAB005EAB +015DAB005DAB005EAC005BA9005CAA005CAA015DAB025FAD005CAA005DAC005AAA005AAA005AAA +015CAB035DAC025CAC015CAB015CAB015CAB025CAB015BAA025DAB005BAA025BAC005BAA015CAB +015CAB015DAB005EAB005CAA025FAD005CAA005CAA005CAA005BAA005BAA005BAA015CAB015CAB +025DAB0061B20E3F742E2821FFFFFFFCFCFAFFFFF9FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCF5F5F5E7E7E79C9C9CA2A2A29C9C9CA2A2A2D2D2D2FFFFFFFFFFFFF8F8F8FFFFFFFFFFFF +FFFFFFFFFFFFC7C7C7959595FFFFFFFFFFFFFBFBFBFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8C61D1D2C36769D0062A8055DB30162A90060B2 +0061B3005FB20061B50061B50061B5005FB20061B3005FB30060B40060B30060B20061B30060B3 +0062B4005DAF005DB1005DAF0062B40060B30061B30061B30061B30061B3005FB2005FB2005FB2 +005DB0005EB1005DB00061B30061B30061B30061B30061B30061B40060B8005FB60060B8005DB4 +005DB4005CB40062B30060B30061B30061B30061B30061B5005FB5005EB5005EB50160B7005FB7 +015FB70061B40061B30061B30060B3005FB1005EAF005DB0015FB2005DB1005FB1005FB0005EB1 +0159B30159B40159B40159B40159B40159B4025AB3025AB5035BB5025BB5025BB5025BB50159B4 +0159B40159B4035BB5025AB5035AB5025AB3025BB5025BB5025BB5025BB5035BB50159B40159B4 +0159B4045BB5045BB5045BB5045CB6045CB6045CB60159B30159B30159B3025AB4025AB4015AB4 +055DB8035BB6065DB7005FB5005EB6005FB6005DB5005DB5005CB5005DB0005DB1005DB1005DB1 +005DB1005DB1035AB1045AB1045AB1055BB2055BB1035BB1065CB3055BB3025AB0035AB10359B0 +0257AF0259AF0259AF0259AF0256AD035AB1045AB00158AF0158AF0158AF0158AF0158AF0158AF +0158AF0158AF0158AF0158AF0158AF0157AE035AB20057AE035AB20158AF0158AF0158AF0259AF +0259B00259AF0259B00259B00258B00259B00259B00259B00158B00159B00258B00456AF0457AF +0557B00053AB0255AD0053AC0958B40656B30353B00655B20554B10555B30458AA0757A60B559F +0857A1035AAC0057AE0057A20058A50055A70158AA0157AB0057AA005CAB005CAD005FAF015EAD +025DAE015BAC035DAE015BAB025CAD035DAE045EAF025CAD005AAA025CAD015BAC025DAD025EAE +005DAC035FAE005DAC005DAC015DAD045DAE025CAD005AAB015AAC015AAC015BAC005DAC005CAC +005CAC005BAC005BAC005BAC005BAB005BAB005BAC005CAC005CAC005CAC015BAC015BAC015BAC +025CAD005AAB035EAD005DA9005DA9005EAA0060AD0060AB005FAC005FAB005FAB005FAC005EAA +005EAA005EAA015EAA005EAA005EAA005EAA005EAA005EAA005EAA005EAA015DAB005AA7005DAA +005DAA005BA9005CA9005CA9015FAC005BA8005CAA015BA9015BA9005BA9015BAB025CAB025CAA +015AAA015AAA015BAA025BAB005AA9025CAB005AA9015CAA005AA8015BAA015AAA015CAA005EAB +005BA9015EAB005BA9005CA9005BA9005AA90059A9005AA9015BAA015AAA015BAA015DB1103D6D +2D2822FFFFFFFCFCF9FFFFFBFFFFFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8 +B4B4B45A5A5A1E1E1ED6D6D6D1D1D1F1F1F1F4F4F4FFFFFFD6D6D6F2F2F2DDDDDDFFFFFF9B9B9B +000000FFFFFFD3D3D3F6F6F6FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFC9C8C61D1E2933769F0068B60062C60065C10062AB0062AC0062AC0162AC +0161AC0162AC0062AC0062AC0062AC0060AB0061AC0060AB0063AE0063AD0063AD0063AE0063AE +0063AE0063AD0063AD0063AD0063AD0063AD0063AD0261AD0262AD0261AD0262AD0262AE0362AD +0162AD0162AD0162AD0063AD0063AD0063AD0361AD0262AE0362AE0160AB0161AB0160AC0063AC +0063AD0063AD0063AD0063AD0063AD0261AD0262AC0261AD0362AD0262AC0361AD0163AC0162AD +0162AD0163AD0062AC0060AA0160AB0261AC0160AB015FAB0160AB015FAB025EAA025EAA025EAA +025EAA025EAA025EAA025EAA025EAA025EAA025EAA025EAA025EAA025EAA025EAA025EAA025EAA +025EAA025EAA025EAA025EAA025EAA025EAA025EAA025EAA025EAA025EAA025EAA025FAA025EAA +025EAA0360AC035FAB035FAB0360AC0360AC0360AC025FAB025FAB025EAB0362AE035EAB0462AE +015FAA015FAA015FAA015FAA015FAA0160AB0160AA0160AB0160AB0160AB0160AB025FAB035EAB +035DAB035DAB035FAB035FAB025DAB0560AD035DAB025EAA015BA7035DAA045FAC025CAA025CAA +015CA90560AC015BA8025DA9025CAA025CAA025CAA025CAA025CAA025CAA025CAA025CAA025CAA +025CAA025CAA025CA9045EAA025CA8045EAA025CA9025CAA025CAA035CA9025CA9025CA9025CA9 +025CA9025CA9025CA9025CA9025CA9025CA9025CA9025CA9035DAA035CAA045DAA015AA7025BA8 +015AA8045BA9045AA9055AA9055AA8035AA9045AA7005EBD005EBA005DB7005AAF0159AB0559A8 +0154A00256A30154A30256A60355A50256A7005DB1005EB2005FB2005BB40159B50159B40159B5 +0059B4015AB5015AB5025BB5025AB5015AB5025AB5025AB5025BB5015AB5015AB4015AB5015BB5 +015AB5015AB5025BB4025AB5015AB5015AB5015AB5025AB50059B40059B40159B4025AB5025AB5 +025AB5025BB6025BB6015AB50058B30058B30058B30059B40059B4015AB5045CB7015AB5035EB8 +005EB5005EB6005EB6005EB5005EB5005CB5005DB1005DB1005DB1005CB1005CB1005DB1025BB1 +025BB1025BB1035CB2035CB2035CB2045DB3025BB2015BB1025BB20059B00059AF015AB0015AB0 +0159AF0058B0035CB3025AB10058B00159B00159B00059B10159B10159B10058B00158B00059B0 +0159B10158B00059B10058B00057AF0159B10059B00158B00059B0005AB1005AB0005AB1005AB0 +005AB00058B00058B00058B00058B00059B00058B00259B0025AB80E3D712E2822FFFFFFFCFCF9 +FFFFFBFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9FAFAFAFFFFFF747474303030 +FFFFFF969696A3A3A3595959EEEEEE454545949494686868929292BABABA060606FBFBFB707070 +F5F5F5FBFBFBF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +C9C8C61C1F283577990065B1065EBC015EB20065B50063B60063B60066B80065B80066B80063B6 +0063B60063B60064B70064B60064B70062B40063B40063B40061B40061B40061B40063B40063B4 +0063B40062B40063B40061B40063B70062B60062B7005EB30060B40060B40064B50062B50062B5 +0062B40063B40063B50061B10062B20062B20062B10062B10061B00063B40063B40063B40063B4 +0063B40063B40063B30063B20063B30061B10061B10062B10062B50062B50062B50063B80063B5 +0060B30061B40062B60060B4005EB3005EB3005FB20062B10062B00062B00062B00062B00062B0 +0061AF0061AF0061AF0061AF0061AF0061AE0062B10062B00062B10061AF0061AF0061AF0061AF +0061AF0061AF0061AF0061AF0061AF0062B00062B00062B00060AF0061AF0060AF0062B00062B0 +0062B00060AF0061AF0060AF0062B00062B00062B00063B20060AE0063B2005FAE005FAF005FAF +005FAF005FAF005FAF005EB3005FB3005FB3005FB3005FB3005EB3005FB3005FB3005FB3005FB2 +005FB2005EB20061B4005FB2005EB1005FB30060B3005DB10060B2005EB20060B2005EB10060B4 +005FB3005EB2005FB2005EB2005EB2005EB2005EB2005EB2005FB2005FB2005FB2005FB2005EB2 +0060B4005DB10060B4005EB2005FB2005EB2005FB3005FB3005FB3005FB3005FB3005FB3005FB3 +005FB3005FB3005FB3005FB3005FB30060B20060B20060B4005CB0005EB0005EB1005CAC005DAE +0060B0005CAA005CAC005BAB055BA9005AAD005BB4005CB50057AC0A5DAC0057AA035AAB0158A9 +025BAC035AB10259B3005DAC005FAB005FAB005FAA015DAA015CAA015CAB015CAB015CAB015CAB +025DAB025DAA025DAB025DAB025DAB025DAB015CAB015CAB015CAB025DAB025DAB025EAB025DAB +025EAB035DAB035EAB035EAB035EAB025DAB025DAB025DAB035EAB035EAB035EAC045FAD045FAC +045FAC055FAD055FAD055FAD045EAB045EAC055FAD065FAE045EAC0660AE025EAB015EAB015EAB +015EAB015EAB015FAB025FAB025FAB025FAB025FAB025FAB045EAB065DAB065DAB065DAB055DAA +055DAA065DAA065EAC035CA9045CA9035AA8045CA8055DAB035AA8035AA8045BA8065DAA0158A5 +045BA9035AA8035AA8035AA8035AA8035AA8035AA9035AA9035AA9035AA9035AA9035AA9045BA9 +055DAA045BA9055CAB035AA9035AA9045BA9055CA9045CA9045BA9045BA9045BAA045BA9045CA9 +045CA9045CA8045BA8035CA9045BA9035EAF0B39722E2822FFFFFFFCFEF9FFFFFBFFFFFBFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF5F5F5FFFFFF7272722F2F2FFFFFFFC2C2C2BEBEBE +2D2D2DD4D4D45C5C5C7E7E7E9F9F9F1E1E1EC6C6C60A0A0AAEAEAEFFFFFFFBFBFBF8F8F8FDFDFD +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C8C61C1F263D758E +0A5B8A234A84284D74214C82214C821F4A80214B81214B81214B81214C81214C81214C81214B81 +204B81224C811D487F1E497F1E497F1E4A7F1E4A7F1E4A7F1E497F1E497F1E497F1F4A801E487E +1F4B801F477F20497F20497F20497F20497F1F487F1E497F1E497F1E497F1E497F1E497F1E4A80 +1F487C1F487B1F487B20497C20497C1F497C1E49811E497F1E497F1E497F1E497F1E497F1F497C +20487C20497C20497C20497C1F497B1E49811E497F1E497F1E497F1E4A7F1E497F21498121497F +21498120487E20488020497F1D4A7D1D4A7C1D4A7C1D4A7C1D4A7C1D4A7C1D4A7C1D4A7C1D4A7C +1D4B7D1D4B7D1D4B7D1B497B1B4A7B1B4A7B1D4A7C1D4A7C1D4A7C1C4A7C1C4A7C1C4A7D1B497B +1B4A7C1B4A7B1D4A7C1D4A7C1D4A7C1D4B7D1D4B7D1E4B7D1C4A7C1C4A7C1C4A7C1D4A7C1D4A7C +1D4A7C1D4B7D1D4B7D1E4B7D1C4A7B1D4B7D1B4A7B214A7D21497D21497D21497D21497D21497C +1F48801F487F1F487F1F487F20487F1F487F1D497F1F497F1E497F1E497F1E497F1E497F1E497F +1E497F1F4B811E497F1E497F1E497F1E497F1E497F1E497F1E497F1E497F1E497F1E497F1E497F +1E497F204B811D497F204B811E497F1E497F1E497F1E497F1E497F1E497F1E497F1E497F1E497F +1E497F1E497F1E4A801E497F1E497F1E497F1E497F1E497F1E497F1E497F1E497F1E497F1E497F +1E497F1E49801C477D1D477E1D497F1A457B1A457C1A467C1E477A1D47791C4579204B7D1C467A +1D477B274566274C751B4B7F0D50930D5DAB0459B2005CB8005DB3005DAF005BB0015BB70059BC +2C73A20856A3055DA70C5FA60C5CAF0A5DAC0B60A70B60A60B60A50B60A40B60A70B60A90B5FA7 +0A5EA6085DA5095DA5095DA5095DA4095CA6095EA7085DA6075BA4075CA5075BA3055DA5055CA5 +055CA5055CA5055CA5055CA5055CA7045BA5035AA4035AA4035AA5025AA4005CA5005BA4005CA5 +005BA4005AA3005AA2005BA5005BA4005AA3005CA4005AA3005AA3005BA4005BA4005BA4005BA4 +005BA5005AA4005AA6005AA6005AA6005AA60059A50057A3005AA5005AA6005AA6005AA6005AA7 +005AA50058A60058A7005AA70059A80059A70059A7005CAA005BAA0059A80059A70059A80059A8 +0058A70059A70058A60059A50059A50059A40059A40059A3005BA4005AA4005AA4005AA50057A2 +0059A30059A30059A40058A20058A20058A40059A20059A0005AA20059A50058A6015AAA005AAD +035AA1005BA80060B10F3C692D2822FFFFFFFCFEF9FFFFFAFFFFFBFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFFFFFFFDFDFDF8F8F8FFFFFF717171282828FFFFFFA6A6A6414141414141D5D5D55E5E5E +7E7E7E949494242424C2C2C2020202808080888888FFFFFFFBFBFBFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8C71D1E253A7084014D7600083C000325 +00031D00041F00062100031F00031F00031F00031F00031F00031F00031F00031F00032000041F +00042000042000042000042000042000042000042000041F00052100031E00052100021F000320 +00032000032000032000022000042000042000042000042000042000042000021F00031F00031F +00041F00041F00032000041F00042000042000042000042000041F00022000041F00031F00031F +00041F00022000041F00042000042000042000042000041F00031F00031F00031F00021E00021E +00021F00031F00031F00031F00031F00031F00031F00042000042000042000031F00031F00031F +00021F00031E00031E00031F00031F00031E00042000041F00042000021E00031E00031E00031F +00031F00031F00031F00031F00031E00042000041F00042000031E00031F00031F00031F00031F +00031E00042000062100042000021E00021F00021F00021F00021F00021E000520000420000420 +000420000420000420020320010320020320000320000320000320010320010320010320000320 +00032000032000032000032000032000032000032000032000032000032000042000031F00021D +00031F00042000032000032000032000032000032000021E00021E00021E00021E00021E00021E +00032000032000032000032000032000032000021E00021E00021E00032000032000031F000520 +00052000052000031F00031F00031F00021F00021F00021E00052100021E00031F00082700021D +00021D00113E09478A0250A50051A100519C0053970051970051A00053AA65848D2659A1266BAC +2D70A33067BC2B68B62B68A92B6AA62B69A22C6BA0306EA7306EAA2C6AA62B6AA62B69A62C6AA7 +2C6AA72C6BA82A67A72E6CAB2865A52864A42865A52563A22064A52063A42063A51F62A31F62A3 +1E62A22466AB2163A71D5FA51C60A41C5FA41B5DA11160A01664A51260A0115EA00D5B9C0F5C9B +0E5BA00E5D9E0E5D9E0D5D9E0D5D9F0E5D9E0E5FA10D5FA10E5FA10B5D9D0D5F9F0B5D9D0C599E +0C5A9E0C5A9E0D5B9F0E5DA1105EA10E5CA10E5CA10F5DA10E5CA00E5CA1105EA10B58A10C5BA2 +0C5AA10D5BA30D5BA30D5BA30E5CA30D5CA30E5CA20F5DA40F5CA40E5CA30F5EA4105EA4105EA3 +0C5B9F0C5C9E0C5C9C0B5A9A0B5A990E5E9E0856970B5B9A0D5D9D0F5F9D0F5E9D10609F0D5B9A +0D5B9B0B5B9B0D5D9D0D5D9A0C5C9611629C105EA10D5BA2105AA6095CAC175A9603579E1165AF +1A34512B2724FFFFFFFCFEF9FFFFFAFFFFFBFFFFFEFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFFFFFF +FDFDFDDADADA5B5B5B4A4A4AD2D2D2C6C6C6A4A4A4969696CFCFCF474747848484B3B3B3525252 +9696962E2E2ED7D7D7393939CFCFCFFFFFFFFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFC8C7C71E202640798E005A8F1953981A578C15598E14598D13578C +14588D14588C14588C14588D14588D14588D14588C14588C14598D11568A12568A12568A12568A +12568A12568A12568A12568A12568A13578C11568A13578C14558A15548A15558A15558A15548A +15568A10568A12568A12568A12568A12568A11568B16569015558F15559014548E14548E15548F +11568B12568A12568A12568A12568A11568B14558F15548E14548E14548E14548E15558F11568B +12568A12568A12568A12568A11568A14558A14548A14548A12538913538913538913528D14528D +14528D14528D14528D14538D10518B12518B12518B12528C12528C12528C14538E13538D13538D +12528D14528D14538D11518B12518B11518B13538D13538D13538D14538D14538D14538D11518C +12528C12528C12518B12518C12518B14538D14538D14538D11518C12528C12528C12508A13528D +12508A11518C11518C11518C11518C11518C12528C0E53880E53870E53870E53870E53870F5488 +124F85125085124E85135287135187135287134E85134F85124E85145188145187145187145187 +145187145187145187145187145187145187145187135187155389145187155389135187145187 +145187145187145187145187155288145288145288145288145288155288145187145187145187 +145187145187145187155288155288155288145187145187145287135388135388135388135387 +135387135489134F8A134E8B134E8A15518E124E8A134F8A13558F29517925334900001C204D86 +1155A809529409538E0B55880751850C52910D5299DBD2ACF0F8FFE2FAFFF0FFFEF4FBFFEEFBFF +EFFFFFEFFFFFEFFFFFEFFFFFEEFFFFEEFFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF1FFFFEEFFFF +EEFFFFEEFFFFEEFEFFEEFFFFEFFFFFEDFFFFEEFFFFEEFFFFEEFFFFEEFFFFEFFFFFEDFFFFEEFFFF +EFFFFFEFFFFFEFFFFFEFFFFFEDFFFFECFDFFEDFFFFEBFDFFEDFFFFEDFEFFECFFFFECFEFFEBFEFF +EAFFFFE7FEFFE5FEFFE6FEFFE5FDFFE3FBFFE6FEFFE5FCFFE0F9FFE5F7FFE5F8FFE5F8FFE0F1FF +DFF0FFDEEFFFDAEEFFDBEDFFD8EAFFDEF1FFDBEDFFD6EAFFDCECFFDAEBFFD8E8FED8EAFFD8E8FF +D8E9FED7EDFFD7EDFFD8EDFFD6EBFFD7EDFFDAEFFFD9ECFFD9ECFFD8EBFFE2F7FFE3F6FFE4F8FF +E4F7FFE5F8FFE3F6FFE7FBFFE8FBFFE8FAFFE8FDFFE8FCFFE7FCFFE9FDFFEAFEFFECFFFFEDFFFF +EDFFFFEDFFFFEDFFFFEDFFFFEDFFFFEEFFFFEEFFFFECFFFFECFEFFFCFFFF9BB2BD1E1B1AFFFFFF +FEFEFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFC7C7C7161917E8F6F1E9FFFFEEFFFFF0FEFFE9FEFFEDFFFFECFFFFECFFFFECFFFFECFFFF +ECFFFFECFFFFECFFFFECFFFFECFFFFECFFFFEFFFFFEEFFFFEEFFFFEEFFFFEEFFFFEEFFFFEEFFFF +EEFFFFEFFFFFEEFFFFEFFFFFEEFFFFEDFFFFEDFFFFEDFFFFEDFFFFEDFFFFEDFFFFF1FFFFF2FFFF +F2FFFFF2FFFFF2FFFFF1FFFFF2FFFFF3FFFFF2FFFFF3FFFFF3FFFFF3FFFFF0FFFFF2FFFFF2FFFF +F2FFFFF2FFFFF2FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFEFFFFFEFFFFFEEFFFFEEFFFFEEFFFF +EEFFFFEEFFFFF2FFFFF3FFFFF3FFFFF0FFFFF1FFFFF1FFFFF1FFFFF0FFFFF0FFFFF0FFFFF0FFFF +F1FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF1FFFFF1FFFFF1FFFFF1FFFFF0FFFFF0FFFF +F2FFFFF2FFFFF2FFFFF0FFFFF1FFFFF1FFFFF0FFFFF0FFFFF0FFFFF1FFFFF1FFFFF1FFFFF0FFFF +F0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF1FFFFF1FFFFF1FFFFF1FFFFF1FFFFF1FFFFF1FFFFF1FFFF +F1FFFFF0FFFFF0FFFFF0FFFFF2FFFFF2FFFFF2FFFFF2FFFFF2FFFFF2FFFFEFFFFFEFFFFFEFFFFF +EFFFFFEFFFFFEEFFFFF2FFFFF2FFFFF2FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF1FFFF +F1FFFFF1FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF1FFFFF0FFFF +F0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF1FFFFF0FFFFF1FFFF +F0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF0FFFFF1FFFFF1FFFFF1FFFFF1FFFF +F1FFFFF1FFFFF0FFFFF0FFFFF1FFFFDEFFFFFAFFFF8B988D090907DEE4EAF9FFFFF7FCFFEDFDFF +ECFFFFE4FFFFD3FDFF64A5D5EBD3A1FFFFFFFAFFFBFEFFF4FFFBFEFFFCFBFFFFFCFEFFFBFEFFFB +FEFFFBFEFFFBFEFFFBFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFEFBFDFDFBFDFEFBFCFDFAFEFFFC +FEFFFBFEFFFCFDFDFAFDFEFBFDFEFBFDFEFBFDFEFBFDFEFAFDFEFCFDFDFBFDFDFBFDFDFBFDFDFB +FDFDFBFEFFFBFDFFFBFDFFFBFDFFFCFDFFFBFDFFFCFCFEFBFCFEFBFBFEFBFBFFFCF9FFFCF5FDFA +F8FFFBF8FEFBF7FDFBF5FBFBF6FDFDF5FDFDF7FAFCF4F7FCF1F4FAF5F9FBF4F8FAF3F6FBF0F7FA +F1F6FBF1F6FBF0F5F9F0F4FAEEF4FAEDF0F7EEF1F8EDF1F9EDF1F8EDF1F8EDF0F8EFF3F9F0F1F9 +F0F1F9F0F2F9F0F3F9F1F4FAF4F8FCF3F9FBF4F9FBF0F5F8F1F7F9F2F8F8F3F9F9F6FCFBF8FDFD +F9FFFEFBFFFEFBFFFEFAFEFBFAFEFBF9FEFBFAFEFBFCFFFCFBFFFDFCFFFCFDFFFCFDFFFCFCFEFB +FCFEFBFCFDFCFCFEFBFDFEFBFCFEFAFEFFFDFFFFFFA9AEAD1B1B1BFFFFFFFDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFEFEFEFDFDFDFEFEFEFDFDFD +FEFEFEFEFEFEFDFDFDFFFFFFFEFEFEFBFBFBFFFFFFFCFCFCFEFEFEFCFCFCFCFCFCFEFEFEFBFBFB +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C7151B18 +F0EFEEF3FFFFF7FFFFFAFEFFF9FFFBFCFFFCFBFFFBFBFFFCFBFFFCFBFFFCFCFFFDFCFFFCFCFFFD +FBFFFCFBFFFCFBFFFCFCFFFCFBFFFCFBFFFCFBFFFCFBFFFCFBFFFCFBFFFCFBFFFCFBFFFCFBFFFC +FBFFFCFBFFFCFBFEFCFBFEFCFBFEFCFBFEFCFBFEFCFCFEFCFCFEFCFDFFFCFDFFFCFDFFFCFDFFFC +FDFFFCFEFFFCFFFFFCFEFFFCFEFFFCFEFFFCFFFFFCFCFFFCFDFFFCFDFFFCFDFFFCFDFFFCFDFFFC +FEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFEFEFCFCFFFCFBFFFCFBFFFCFBFFFCFBFFFCFCFFFCFEFFFC +FFFFFCFEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFDFFFBFDFFFB +FDFFFBFDFFFBFDFFFBFDFFFBFEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFEFFFC +FEFFFCFEFFFCFEFFFCFDFFFBFDFFFBFDFFFBFEFFFCFEFFFCFEFFFCFDFFFBFDFFFBFDFFFBFDFFFB +FDFFFBFDFFFBFEFFFCFEFFFCFEFFFCFEFFFBFEFFFBFEFFFBFEFFFCFEFFFCFEFFFCFDFFFBFDFFFB +FDFEFBFEFFFCFEFFFCFEFFFCFFFFFDFFFFFCFFFFFDFEFEFCFEFFFCFEFFFCFEFFFCFEFFFCFFFFFC +FDFFFCFEFFFCFEFFFCFDFEFAFDFFFBFDFFFBFDFFFBFDFFFBFDFFFAFEFFFCFEFFFBFEFFFBFEFFFC +FEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFDFFFAFDFFFBFDFFFAFEFFFCFEFFFCFEFFFCFEFFFCFEFFFC +FEFFFCFEFFFCFEFFFCFEFFFCFDFFFAFDFFFBFDFFFAFEFFFCFEFFFCFEFFFCFDFFFAFDFFFBFDFFFB +FDFFFBFDFFFBFDFFFBFDFFFBFDFFFBFDFFFAFEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFEFFFCFDFFFB +FDFFFBFFFEFBF4FFFBFFFFFF918C89090908E8E6E3FFFFFFFFFCF8FDFDF9FAFFF7FCFFFBE9FFFF +71A2C4E8C68CFFF4F6FBFBF2FFFDE7FFF6FBFFF6F3FFFDF6FFFCF4FFFBF4FFFBF4FFFBF4FFFBF5 +FFFBF1FFFBF0FFFBF0FFFBF0FFFBF0FFFBF2FFFAF1FEFBF1FEFAF1FFFDF4FFFDF3FFFDF4FFFBF3 +FFFBF3FFFBF3FFFBF3FFFBF3FFFBF3FFFCF7FFFAF6FFFAF6FFFAF6FFFAF6FFFCF7FFFCF2FFFCF4 +FFFCF2FFFDF4FFFDF3FFFCF5FFFAF7FFFBF7FEFCF7FEFBF6FCFCF6FBFAF4FEFCF4FEFCF6FBFBF4 +FBF8F6FCF9F8F8F5F4FAF2F8FBF3F8FAF3F8F6EEF3F5EFF3F4EDF1F0EBEFF3EEF2F5F1F3ECE8EA +EEEAECEEE9EDEFE7EAF2EAEDF3ECEFF2EAEDF2EAEEF2EAEEF5EAEEF5EAEEF5E9EEF6EBEFF8ECF2 +F8EEF1F2EFF1F2EFF1F1EDEEF7F4F2F7F5F2F7F4F1FCF9F6FCF8F6FBF8F5FCF9F6FDFAF8FFFCF8 +FEFCF6FEFCF6FEFCF5FDFBF5FFFDF8FFFDF8FEFBF7FFFCF7FFFDF7FDF9F5FEFAF5FEFBF6FEFBF1 +FEFBF1FEFBF1FEFBF2FFFFFFB1ACA51A1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFEFEFEFEFEFEFDFDFDFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFDFDFDFEFEFEFDFDFDFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C7141616ECEDEDF6FFFCFDFEFD +FEFAFBFBFCF2FFFFF4FDFEF2FEFEF4FEFEF4FEFEF4FDFDF3FDFDF4FDFDF3FEFEF4FEFEF4FEFEF4 +FCFDF2FCFDF2FCFDF2FCFDF2FCFDF2FCFDF2FCFDF2FCFDF2FCFDF2FCFDF2FCFDF2FDFDF2FEFCF2 +FEFCF2FEFCF2FEFCF2FEFCF2FEFCF2FDFDF2FCFDF2FCFDF2FCFDF2FCFDF2FCFDF2FDFCF2FDFCF2 +FDFCF2FDFCF2FDFCF2FEFCF2FDFDF2FCFDF2FCFDF2FCFDF2FCFDF2FDFDF2FFFBF2FFFBF2FFFBF2 +FFFBF2FFFBF2FEFBF2FDFDF2FCFDF2FCFDF2FCFDF2FCFDF2FCFDF2FDFCF2FDFCF2FDFCF2FEFDF3 +FEFDF3FEFDF3FEFDF3FEFDF3FEFDF3FEFDF3FEFDF3FDFDF3FEFDF3FEFDF3FEFDF3FEFDF3FEFDF3 +FEFDF3FDFDF3FEFDF3FEFDF3FEFDF3FEFDF3FDFCF3FFFEF4FFFEF4FFFEF4FDFCF3FEFDF3FDFDF3 +FEFDF3FEFDF3FEFDF3FDFDF3FEFDF3FDFDF3FEFDF3FEFDF3FEFDF3FEFDF3FEFDF3FEFDF3FDFDF3 +FEFDF3FDFCF3FFFEF5FFFEF4FFFEF5FDFCF3FEFDF3FDFDF3FEFDF3FEFDF3FEFCF3FFFEF4FFFEF4 +FFFEF4FDFCF3FEFCF3FFFEF3FFFDF4FFFDF4FFFDF4FFFDF4FFFDF4FFFDF4FFFEF4FEFEF4FEFEF4 +FEFCF3FEFDF3FEFDF3FEFDF3FEFDF3FEFDF3FFFEF5FFFEF4FFFEF5FDFCF3FEFDF3FEFDF3FEFDF3 +FEFDF3FDFDF3FEFDF3FEFDF3FEFDF3FDFDF3FEFDF3FEFDF3FEFDF3FEFDF3FEFDF3FEFDF3FEFDF3 +FDFDF3FEFDF3FEFDF3FEFDF3FDFDF3FEFDF3FDFDF3FEFDF3FEFDF3FEFDF3FEFDF3FEFDF3FEFDF3 +FEFDF3FEFDF3FEFDF3FDFDF3FEFDF3FEFDF3FEFDF3FEFDF3FDFDF3FEFDF3FEFDF3FEFDF4FDFCEE +FFFFFF958A90070806E5E2DEFDFFF4FFF9EDFEF8EFFCFCEDFFFDEEEDFCFF749EB9DCC392FFFBFE +F7FDFBFDFFEFFEF7FFFDFAFDFAFCFBFDFDFEFCFEFFFCFEFFFCFEFFFCFEFEFDFEFCFDFEFBFDFEFB +FDFEFBFDFEFBFCFEFBFDFEFDFCFEFDFCFEFDFCFEFDFCFEFDFCFEFDFCFEFDFCFEFDFCFEFDFCFEFD +FCFEFDFCFEFDFCFDFFFCFEFDFCFEFEFCFEFEFCFEFDFCFEFFFDFEFDFCFEFDFDFEFDFBFDFBFBFDFC +FCFDFBFBFBFCFBFBFCF9FBFBFAFEFEF8FEFEF6FCFCF6FCFBF6FCFBF8FBFDF7FAFFF6F9FDF3F8FD +F9F9FFF6F6FEFBFAFFF4F3FCF5F4FDF5F5FDF6F7FFF3F5FCF7F8FFEEF0F7F0F2F9F1F1F9F1F2F9 +F1F2F9F1F1F9F0F1F8F1F1F8F0F0F8F5F1FAF4F0FAF5F1FAF3EFF8F4F0F9F5F0F9F1F3FAF2F3FC +F4F6FBF2F4F9F5F7FAF9FAFDF3F5F7F5F7F9F3F6F7F8FCFDF8FAFCF8FAFDF7FBFBFAFCFEFBFDFE +FAFDFEFBFDFDFAFBFDFDFEFDFDFEFEFAFBFCFDFEFFFBFCFDFDFEFFFEFEFDFCFEFDFEFFFDF9F9FA +FFFFFFAEAFAE1E1E1EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2D2D3191A1AEEEEEEFFFFFCFEFBF6FFFBF8F8FFFBF7FFFC +F7FFFCF7FEFBF7FEFBF7FEFBF7FEFBF7FEFBF7FEFBF7FEFBF7FEFBF7FEFBF7FEFBF7FEFBF7FEFB +F7FEFBF7FEFBF7FEFBF7FFFCF7FFFCF7FFFCF7FFFCF7FFFCF6FFFCFAFDFCFBFDFCFBFDFCFBFDFC +FBFDFCFBFDFCF6FFFCF6FFFCF6FFFCF6FFFCF6FFFCF7FFFCF8FEFCF9FEFCF9FEFCF9FEFCFAFEFC +F8FFFCF6FFFCF6FFFCF6FFFCF6FFFCF6FFFCF6FFFCFCFEFCFBFDFCFBFDFCFBFDFCFBFDFCFCFDFC +F7FFFCF7FFFCF7FFFCF7FFFCF7FFFCF7FFFCF8FEFCF9FEFCF9FEFCF8FEFCF8FEFCF8FEFCF8FEFC +F8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFC +F8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFC +F8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFC +F8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FDFCF8FEFCF8FEFCF9FEFCF9FEFC +F8FEFCFAFCFAFAFBFAF9FBFAFCFDFCFBFDFCFCFDFCF8FDFCFBFFFEFCFFFEF8FEFBF8FEFCF8FEFC +F8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFC +F8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFC +F8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFC +F8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FEFCF8FFFDFBFDF5FFFFFF8F8F9E070809 +E1E4E9F6FFFAFEFCF9F8FAF9FAFDF6FEFFF8E7FFFF6DA2C5E6D0A2FFFCFFF3FEFFFAFEF2FEF8FF +FCFBFFF7FDFCF9FEFEF9FFFEF9FFFEF9FFFEF9FFFEFBFFFEFBFEFEFBFEFEFBFEFEFBFEFEFBFFFE +F9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFFF9FFFF +F9FFFFF9FFFFF9FFFFF9FFFFF9FEFFFBFDFFFAFDFFFBFEFFF9FCFFF9FDFFFAFCFFFCFEFFFBFEFF +FAFEFFF9FEFFF6FFFFF6FDFFF5FDFFF5FDFFF5FCFFF7FEFFF7FDFFF5FCFFF7FAFFF7FAFFF7FAFE +F5F8FFF6F8FFF6F9FFF3F6FEF1F5FEF4F7FFF2F5FEF2F6FEF3F7FFEFF2FBF1F3FCF0F2FBF3F5FF +F1F5FEF3F4FEF3F6FFF3F5FFF3F5FFF4F6FFF4F6FEF6F7FFF3F7FFF5F9FFF7FBFFF4F8FFF5FAFF +F7FCFFF3F8FDF7FCFFFAFEFFF9FDFFF9FDFFF9FDFFF7FCFFF8FEFFFAFEFFF8FDFFF9FDFFF7FDFF +FBFEFFFBFDFFF8FBFFFCFDFFF9FBFFFBFDFFFAFEFFFAFEFFFBFDFFFAFDFFFFFFFFA5A6A8000000 +6D6D6D5757575D5D5D5B5B5B5C5C5C5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B +5B5B5B5A5A5A5858585B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C +5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5B5B5B +5B5B5B5E5E5D4B4B4D151415EAEBEAFDFDFDFDFDFDFEFEFCFAFFFFF9FFFFF9FFFFFBFFFFFAFFFF +FAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFBFFFF +F9FFFFF9FFFFF9FFFFF9FFFFF9FFFFFAFFFFF9FFFFFAFFFFF9FFFFF9FFFFF9FFFFFAFFFFF8FFFF +F8FFFFF8FFFFF8FFFFF8FFFFF8FFFFF9FFFFFAFFFFFAFFFFFAFFFFFAFFFFF9FFFFF8FFFFF8FFFF +F8FFFFF8FFFFF8FFFFF8FFFFF9FFFFF9FEFFF9FEFFF9FEFFF9FEFFF9FFFFFAFFFFF9FFFFF9FFFF +F9FFFFF9FFFFF9FFFFF9FFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFF +FAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFF +FAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFF +FAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFF +FAFFFFFAFFFFFAFFFFFAFFFFFAFFFFF8FDFFF8FDFFF8FDFFF8FDFFF8FDFFF9FEFFF8FEFFF8FDFF +F8FDFFF8FDFFF8FEFFF8FEFFF8FEFFFAFFFFFBFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFF +FAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFF +FAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFF +FAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFFFAFFFF +FAFFFFFAFFFFFAFFFFFAFFFFFAFFFFF9FFFFFBFDFDFFFFFF8E9098060808E0E4E6FCFFFFF9FCFC +F6FDFEF9FDFAFAFFF9E1FEFF67A1C6F3D9A6FFFAFDF8FEFAFEFDEFFFF8FFFFF9FCFAFDF3FCFDF6 +FDFFF5FDFFF5FDFFF5FDFFF5FFFDF9FFFEF9FFFEF9FEFCF9FEFCF9FFFDF9FDFFFAFDFFFAFDFFFA +FDFFFAFDFFFAFDFFFAFDFFFAFDFFFAFDFFFAFDFFFBFDFFFBFDFEFBFDFEFEFDFEFEFDFEFEFDFEFE +FDFEFEFDFCFEFFFDFAFEFDFAFFFEFBFDFBF9FDFBF9FDFCFAFEFBFCFEFBFDFDFAFDFFFEFFFEFEFE +FBFDFDFBFDFBFBFDFCFCFDFEFAFBFEF9FAFEF8F8FFFAF9F5FFFCFAFBF8F5FEFCF8FDFBF8FEFCF9 +F7F6FBF6F5F9FAF8FBF6F4F7F6F5F9F6F6F9F6F2F7F7F3F8F6F4F7F6F2F6F6F2F7F6F2F6F6F5F9 +F6F5F8F6F4F7F7F6FAF8F7FAFAF8FDF8F6FCFBF8FEFAF9FCFFFEFDFCFBFBFEFDFDF9F9F8FCFBF9 +FBFAF8FCFBFAFCFBFAFBFBFAFDFBFDFEFDFFFFFEFFFCFBFDFCFCFDFCFCFDFFFCFEFFFCFDFCF9FC +FFFDFEFEFAFDFFFDFFFFFDFAFFFDFBFFFEFBFDFBFAFFFFFFD8D7D4898A8A8D8D8D8D8D8D8F8F8F +8F8F8F8F8F8F8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9090908E8E8E8B8B8B919191777777 +5E5E5E9393938C8C8C8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D +8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D898A89 +A3A4A3F9F9F8F8F7FDFDFFFFF9FFFFFFFEFCFFFDFBFFFDFCFEFCFAFEFCFAFEFCFAFEFCFAFEFCFA +FEFCFAFEFCFAFEFCFAFEFCFAFEFCFAFEFCFAFEFCFAFEFCFAFEFCFAFEFCFAFFFDFCFFFDFBFFFDFB +FFFDFBFFFDFBFEFCFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFB +FEFFFBFEFFFBFFFFFBFEFFFBFEFFFBFEFFFBFEFFFBFFFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFB +FEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFEFBFFFDFBFFFDFBFFFDFBFFFDFBFFFCFB +FFFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFB +FEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFB +FEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFB +FEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFB +FEFFFBFFFFFCFDFBF9FDFBF9FDFBF9FEFCF9FEFCF9FEFCF9FDFFFBFDFFFBFDFFFBFCFDF9FCFEF9 +FCFDF9FDFCFAFFFEFCFFFFFCFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFB +FEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFB +FEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFB +FEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFBFEFFFB +FEFFFBFEFFFBFEFEFCFEFBFEFFFFFF91928E080707E4E4E0FFFFFFFBFBF4FDFFFCFFFBF3FFFFF7 +E8FFFF6BA4C2F7E2A0FFFBF5F5FDF7FBFEEDFFF9FFFEFAF7FBFDF6FEFFF9FEFDFBFEFDFCFEFCFE +FEFDFEFBFCF9FCFCFAFCFCFAFEFEFBFDFEFBFDFCFCFDFCFCFDFCFCFDFCFCFDFCFBFEFDFCFEFCFB +FBFFFDFBFFFDFDFFFDFAFCFBFAFCFCFAFDFCFEFDFEFEFDFCFEFDFDFEFDFDFEFCFCFEFEFEFCFEFD +FDFEFDFDFEFDFDFEFDFDFEFDFDFEFEFDFEFEFDFEFEFDFEFEFCFCFCFEFEFEFEFEFEFBFBFCFDFCFD +FCFBFBFEFEFDFDFDFCFBFBFBFCFCFBF8F9F9FCFBFCFBFBFBFBFCFBFCFCFCF8F9FCFAF9FDF9F8FD +F9F8FCF9F7FCF7F4FAF3F7FBF4F7FBF4F7FBF4F7FBF4F8FBF5F7FBEFFAFBEFFAFBEEF9FAF2FDFD +F0FBFDF0FBFBFAFFFBF7FEFBF7FDFBF7FCFBF9FEFDF6FCFBFCFCFCFCFBFCFCFCFCFAFAFCFBFBFC +FAFAFAFEFEFEFCFEFCFEFEFEFBFBFBFCFDFBFBFBFBFFFFFFFDFEFFFDFDFCFBFAFAFBFBFAFBFAFA +FDFDFCFCFBFCFCFBFCFEFFFEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8EFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FEFCF7FDFA +F7FEFCF8FEFCFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFDFDFD +FDFEFDFEFEFDFCFBFCFCFCFCFCFCFCFBFBFCFCFBFCFCFBFCFCFBFCFCFBFCFCFBFCFBFCFCFCFBFC +FCFBFBFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFEFF +FCFDFCFFFFFF919191070707E4E4E3FFFFFFFFFEFAFCFEFBFBFCF6FFFFF9E9FFFF6DA4C4F1DC9B +FFFCF8F6FEF9FAFEEDFFFAFFFEFAF7FBFDF6FEFFF9FEFDFBFEFDFBFEFEFEFDFDFEFDFDFBFDFDFB +FDFDFBFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFCFCFAFEFEFCFEFCFAFBFFFEFDFFFEFDFFFE +FAFCFBFCFEFDFAFEFBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFEFEFDFEFEFDFEFE +FDFEFEFDFEFEFDFEFEFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFBFBFBFDFDFDFCFCFCFCFCFCFCFCFC +F9F9F9FCFCFDF9F9F9FCFCFCFAFAFBFBFCFCFCFCFCF7F7FAF8F8FAF8F8FAF8F8FAF8F9FAF8F8FA +F7F8FAF7F8FAF7F8FAF7F8FAF7F8FAF7F8FAF5FBFAF6FAFAF5F9FAF7FBFBF6FBFBF7FAFBF7FCFA +F7FBFAF7FBFAF8FCFBFAFEFDF9FEFCFCFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFE +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFD +FBFBFBFCFCFCFAFAFAFAFAFAFEFEFEFCFCFCFFFFFFFAFAFAF8F8F8FFFFFFFCFCFCFAFAFAF7F7F7 +F9F9F9FAFAFAFBFBFBF9F9F9FEFEFEF7F7F7FFFFFF7F7F7FFFFFFFFDFDFDFCFCFCFBFBFBFDFDFD +FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFDFDFDFEFEFE +FBFBFBFCFCFCFBFBFBFCFCFCFCFCFCFCFDFCF9FDFCF6FBFAF9FDFCF9FDFCFAFDFCF7FCFBFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFEFEFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191 +070707E4E4E4FFFFFFFFFEFAFCFEFBFDFBF7FFFFF8E9FFFF6DA4C5EDD799FFFDFAF7FEFDFAFEED +FFF9FFFEFAF9FAFBF6FDFEF8FCFDFAFCFCFBFCFCFEFCFCFEFFFFFBFEFEFCFEFEFCFFFFFDFFFFFD +FFFFFDFFFFFDFFFFFDFFFFFDFCFCFAFCFDFBFEFCFAFBFFFEFBFFFCFDFFFEFAFCFBFAFCFBFAFCFB +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFBFBFBFDFDFDFBFBFBFFFFFFFFFFFFFCFCFCFEFEFEFBFBFB +FEFEFEFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFCFCFBF8F8F7FAFAFAFAFAFBFAFAF9FAFAFAFAFAFA +F9FAFAF9F9FAF9FAFAFAF9FAFBF9FAFAF9FAFBF9FBFBF9FBFBFAFBF8F9F8F7F9F8F6F9F8FBFEFD +FDFFFFFDFFFFFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFDFDFDFFFFFFFEFEFE +FFFFFFFCFCFCFFFFFFFFFFFFFCFCFCFCFCFCFEFEFEFBFBFBFBFBFBFBFBFBFDFDFDFEFEFEFEFEFE +FDFDFDFFFFFFFFFFFFFEFEFEFCFCFCFEFEFEFDFDFDFFFFFFFFFFFFFBFBFBFDFDFDFDFDFDFEFEFE +FEFEFEFDFDFDFDFDFDFFFFFFB4B4B4CECECEFFFFFFFCFCFCFDFDFDFFFFFFFDFDFDFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFF +FCFCFCFCFCFCFCFCFCFDFFFFFAFDFCFDFFFEFDFFFFFDFFFFFAFDFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFF +FFFEFAFCFEFBFDFBF7FFFFF8E9FFFF6DA5C5EBD697FFFBFBF6FDFBFBFEF2FFF8FFFFFAFAFCFEF7 +FFFFFBFFFFFDFFFFFCFFFFFFFFFFFFFFFFFBFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFD +FFFFFDFFFFFDFFFFFDFFFFFBFDFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFCFCFEFEFEFDFDFD +FCFCFCFDFDFDFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFBFBFBFBFBFBFBFBFBFBFBFB +FBFBFBFBFBFBFCFCFCFCFCFCFBFBFBFFFFFFFEFEFEFBFBFBFCFCFCFFFFFFF9F9F9FEFEFEFEFEFE +FEFEFEFDFDFCFDFDFCFAFAFAFAFAFAFAFAFAF9F9F9FCFCFBFBFCFBFBFCFBFCFCFBFCFCFBFBFCFB +FDFAFAFCFAFAFCFAFBFBF8FAFBF9FAFBF9F9FBFDFCFCFEFDFBFCFCFBFCFBFDFFFFFDFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFBFBFBFBFBFB +FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFE9E9E9CACACA +FFFFFFFEFEFEFCFCFCFEFEFEFCFCFCFCFCFCFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFAFAFA +FFFFFFFEFEFE858585FFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBFCFCFCFBFBFBFBFBFBFFFFFFFFFFFFFFFFFF +FDFFFFFEFFFFFEFFFFFAFCFBFBFCFBFAFCFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFEFBF9FBFCFBFDFDF9 +FDFDF6E8FEFF6CA2C4EBD59AFFFAFAF8FFFFFAFEF2FFF8FFFFFAFBFCFEF7FFFFF9FFFFFCFFFFFC +FFFFFFFFFFFFFFFFFBFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFD +FFFFFBFCFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFCFCFEFEFEFCFCFCFEFEFEFEFEFEFEFEFE +FCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFFFFFFFFFFFFFDFDFDFAFAFAFBFBFBFFFFFFFCFCFCFEFEFEFDFDFEFDFDFAFCFCFB +FBFBF9FCFCFBFCFCFAFCFCFAFDFCFAFDFCFAFDFCFAFDFCFAFDFCFAFDFCFAFEFEFCFEFEFBFEFEFC +FDFDFAFDFDFAFDFDF9FCFCFCFDFDFDFCFCFCFCFCFCFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF7A7A7A000000FFFFFFFFFFFFFDFDFD +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFBFBFBFCFCFCFFFFFF777777 +FFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFEFCF9FBFCFAFDFCF8FFFFF7E9FFFF6DA3C5 +F0DA9FFDF8F9F5FDFDFCFDF4FFF8FFFFFAFAFCFEF7FFFFFAFFFFFCFFFFFDFFFFFFFFFFFFFFFFFB +FFFFFBFFFFFBFFFFFBFFFFFBFFFFFBFFFFFBFFFFFBFFFFFBFFFFFBFFFFFBFFFFFBFCFFFFFCFFFF +FCFFFFFCFFFFFCFFFFFCFFFFFCFCFCFCFDFDFCFCFCFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF +FFFFFFFCFCFCFCFCFCFFFFFFF9F9F9FEFEFEFEFEFEFDFDFEFFFFFAFDFFFAFCFDF8FEFEFAFEFEFA +FEFEFAFFFEF8FFFCF9FFFCF9FEFDF9FEFCF9FFFDF9F8FFF8F9FFF8F8FFF7FBFEFAFBFEFAFCFEFB +FDFDFEFFFFFFFDFDFDFDFDFDFFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCFFFFFF7F7F7F000000FFFFFFFEFEFEFFFFFFFCFCFCFEFEFEFEFEFE +FCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFFFFFFA0A0A0ECECECFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF +FFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF +919191070707E4E4E4FFFFFFFEFDF9FCFEF9FEFCF8FFFFF9E9FFFF6DA5C7F3DFA1FDF9FBF5FCFC +FCFFF2FFF8FFFFFAFAFCFEF7FFFFFAFFFFFCFCFCFBFDFDFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFBFBFB +FBFBFBFDFDFDFBFBFBFBFBFBFBFBFBFEFEFDFEFCFDFDFCFDFFFFFFFEFEFEFFFFFFFCFCFDFDFEFD +FDFDFDFEFDFDFEFDFDFEFDFDFEFDFDFEFDFDFEFDFDFFFFFFFFFEFEFFFFFFFDFDFDFFFFFFFDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFFFFFF808080000000FFFFFFFDFDFDFDFDFDFDFDFDFEFEFEFCFCFCFFFFFFFFFFFFFFFFFF +FEFEFEFEFEFEFFFFFFFCFCFCFCFCFCFFFFFFD6D6D68F8F8FEEEEEEFFFFFFFDFDFDFDFDFDFDFDFD +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFFFFFFFEFEFEFBFBFBFEFEFEFCFCFCFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4 +FFFFFFFBFAF9FAFAFDFDFAF7FFFFF7ECFEFF71A2C1EED89CFFFCFCF7FEFEFBFEF2FFF8FFFFFAFA +FCFEF7FFFFFAFFFFFCFCFCFBFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFBFBFBFDFDFDFDFDFDFDFDFD +FDFDFDFBFBFBFEFEFEFEFEFEFDFDFEFDFDFDFDFDFDFDFDFDFDFDFEFDFEFEFCFCFCFEFFFFFEFEFE +FEFFFFFCFCFCFEFDFEFDFDFEFDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF818181 +000000FFFFFFFFFFFFFBFBFBFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFD +FCFCFCFFFFFFFFFFFF1E1E1E000000A6A6A6FFFFFFFBFBFBFCFCFCFDFDFDFEFEFEFEFEFEFEFEFE +FEFEFEFCFCFCFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFDFCFAFCFCFE +FEFCF9FFFFF7ECFEFF70A2C2E5CF94FFFDFBF4FBFAFCFEF3FFF8FFFFFAFAFCFEF7FFFFFAFFFFFC +FCFCFBFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFEFEFEFBFBFBFDFDFDFBFBFBFDFDFDFBFBFBFBFBFBFEFEFE +FEFEFEFEFEFEFBFBFBFCFCFCFBFBFBFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFDFDFDFEFEFE +FEFEFEFBFBFBFBFBFBFBFBFBFEFEFEFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF838383000000FFFFFFFEFEFE +FFFFFFFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFBFBFBFDFDFDFDFDFDFBFBFBFDFDFDFFFFFF +939393000000D8D8D8FFFFFFFEFEFEFEFEFEFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFF +FEFEFEFBFBFBFEFEFEFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFEFBFDFEFEFFFEFBFFFFF6ECFEFF +71A2C2DDC68BFFFAF9F7FFFDFBFEF1FFF8FFFFFAFAFCFEF7FFFFFAFFFFFCFCFCFBFEFEFEFCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFBFBFBFEFEFEFDFDFDFCFCFCFCFCFCFEFEFEFBFBFB +FCFCFCFCFCFCFBFBFBFBFBFBFCFCFCFBFBFBFDFDFDFBFBFBFEFEFEFCFCFCFCFCFCFEFEFEFEFEFE +FEFEFEFAFAFAFAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCFCFCFCFEFEFEFFFFFF8E8E8E000000FFFFFFFFFFFFFAFAFAFCFCFCFFFFFF +FFFFFFFEFEFEFDFDFDFDFDFDFAFAFAF7F7F7FCFCFCFEFEFEF8F8F8FAFAFAFFFFFFBCBCBCE7E7E7 +FFFFFFFAFAFAFDFDFDFEFEFEFDFDFDFBFBFBFAFAFAFDFDFDFFFFFFFCFCFCFEFEFEFCFCFCFCFCFC +FFFFFFFDFDFDFEFEFEFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +FFFFFF919191070707E4E4E4FFFFFFFDFAF9FAFAFCFEFAF7FFFFF7ECFEFF71A2C2E7D195FFFEFC +F9FFFFFAFEF2FFF8FFFFFAFAFCFEF7FFFFFAFFFFFCFCFCFBFEFEFEFCFCFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCFEFEFEFCFCFCFEFEFEFDFDFDFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFBFBFB +FDFDFDFBFBFBFEFEFEFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFEFEFEFEFEFEFCFCFCFCFCFC +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FEFEFEFEFEFEFFFFFF8C8C8C000000FFFFFFFEFEFEF8F8F8FDFDFDFFFFFFFFFFFFFAFAFAF3F3F3 +F8F8F8F9F9F9F9F9F9FDFDFDF7F7F7F7F7F7F5F5F5F9F9F9FFFFFFFAFAFAFCFCFCFBFBFBFDFDFD +F9F9F9FAFAFAFAFAFAFBFBFBFCFCFCFEFEFEFEFEFEFDFCFDF8F8F8FAFAFAFFFFFFFCFCFCF5F5F5 +FAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707 +E4E4E4FFFFFFFDFCF9FAFCFEFEFAF7FFFFF7ECFEFF70A2C2ECD89BFFFCFBF7FDFCFAFEF3FFF8FF +FFFAFCFCFEF7FFFFFAFFFFFCFCFCFBFDFDFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFE +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFBFBFBFCFCFCFBFBFBFCFCFC +FFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCFEFEFEFDFDFDFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFEFEFEFFFFFF +949494000000FDFDFDFAFAFAF3F3F3FDFDFDFFFFFFFFFFFFFDFDFDF6F6F6FAFAFAFDFDFDFBFBFB +F7F7F7FAFAFAFDFDFDFBFBFBFCFCFCFBFBFBFCFCFCFDFDFDFDFDFDFFFFFFF9F9F9FCFCFCFDFDFD +FDFDFDFCFCFCFCFCFCFDFEFDFDFFFDFDFDFDFAFAFAFCFCFDFDFDFEF8F8F8F8F8FAFCFCFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFDFAF9 +FAFAFCFEFAF7FFFFF7ECFEFF71A2C2ECD59EFFFBFCF8FEFFFAFEF1FFF8FFFFFAF9FCFEF7FFFFFA +FFFFFCFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFEFEFEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF989898000000FBFBFB +FDFDFDF6F6F6FDFDFDFBFBFBFDFDFDF7F7F7F9F9F9FEFEFEFCFCFCFCFCFCFDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFD +FBFBFFFFFDFFFFFEFFF8F7FDFBFAFEFDFDFFF8F8F7FBFBF9FEFEFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFEFDFAFCFDFFFEFCF9FFFFF7 +ECFEFF71A2C2EFD8A0FDF8FBF4FCFBFCFEF3FFF8FFFFFAF9FCFEF7FFFFF9FFFFFCFFFFFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF9C9C9C000000F6F6F6FFFFFFFFFFFFFCFCFC +FDFDFDFCFCFCFBFBFBF8F8F8F9F9F9F3F3F3FDFCFDFFFFFFF4F3F4C4C3C3999898979797929292 +8686868080807E7E7E828282828281888887909090A5A5A5BCBCBBE1E1E1FFFFFFFFFFFFFBFBFC +F9F9F8FBFBFAF7F7F7F9F9F8FDFDFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFFFFFF919191070707E4E4E4FFFFFFFEFCFAFBFDFFFEFBF8FFFFF7ECFEFF70A2C2E9D39C +FFFCFCF2FAFAFCFFF3FFF8FFFFFAF9FCFEF7FFFFFBFFFFFDFFFFFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCFFFFFF9F9F9F000000F2F2F2FFFFFFFCFCFCFCFCFCFDFDFDFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFB9BBBA717272686A688D8E8DA5A7A7B0B0B0AEAEAEAAAAAAA4A4A49F9F9F +A2A2A19C9C9E9C9C9D9090917D7D7F757577757577767674AAAAA8F9F9F7FFFFFFFFFFFFFCFCFA +FEFEFEFFFFFFF6F6F6FFFFFFFFFFFDFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191 +070707E4E4E4FFFFFFFEFCFAFBFDFFFEFBF8FFFFF7ECFEFF71A1C2E5CF99FFFFFFF7FEFDFCFEF1 +FFF9FFFEFAF9FBFEF7FBFEF8FBFCF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FFFFFFA8A8A8000000EFEFEFFFFFFFFAFAFAFEFEFEFDFDFDFCFCFCF3F3F3E4E4E49291915A5D5C +7173729B9E9DB8BBBAD0D2D1EEF1F0FFFFFFFFFFFFFCFCFCF4F4F4F0F0F0E2E2E1DDDCE0DADADC +D4D4D6BEBDBFABAAAD9292957C7C7A686867575755888886D7D6D5FDFEFDFFFFFFF5F4F8F7F7F8 +FDFDFAFFFFFAFEFFFAFEFEFDFEFEFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFF +FDFDFDFFFFFFFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFBFBFBFEFEFEFFFFFFFEFEFE +FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFDFDFDFFFFFF +FFFFFFFEFEFEFFFFFFFCFCFCFEFEFEFFFFFFFEFEFEFDFDFDFCFCFCFCFCFCFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFF +FEFCFAFBFDFFFEFBF8FFFFF8EDFFFF72A4C3E6D098FFFCFBF6FEFCFCFEF1FFF9FFFEFAF9FBFEF7 +FDFEF9FBFCF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFABABAB000000 +E0E0E0FFFFFFFBFBFBFCFCFCFFFFFFFFFFFFD0D0D07171716B6A6A868A89AAADACCCD0D0E2E6E5 +E6EAE9E7EDECFBF9F9F8F8F8E9E9E9DDDDDDDDDDDDD6D7D6D1D0D5C7C5CBC5C4C9C3C2C8BFBEC3 +B8B8BCB5B5B89B9A9E81818557575A69686DB5B5BAFFFFFFFDFCFEFCFCFEFDFDFBFFFFFAFDFEF6 +FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFFFFFF +FEFEFEFEFEFEFFFFFFFDFDFDFDFDFDFDFDFDFFFFFFFEFEFEFFFEFEFDFDFDFDFDFDFDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCFFFFFFFEFEFEFCFCFCFDFDFD +FAFAFAFCFCFCFEFEFEFDFDFDFCFCFCFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFEFCFAFBFDFFFEFBF8 +FFFFF7EDFDFF71A3C3E7D098FFF9F9F7FFFDFBFEF1FFF9FFFEFBF9FBFEF7FCFEF8FBFCF9FFFFFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFA9A9A9000000DFDFDFFFFFFFFCFCFC +FFFFFFFBFAFAA1A1A16262627B7A7BA2A1A1B3B9B7C1C6C4C2C8C5D3D8D5E3E7E6EAEFEEF6F7F6 +F6F6F6EEEEEEE1E1E1E2E2E0D9DAD9D0CED5C9C8CEC6C4CBBBB9BEB9B7BBB2AEB5ACAAB4ABAAB3 +AAA9B1878590807C885A58629F9EA5F9F7FDFFFFFFFFFFFDFFFFFAFCFEF4FDFDFDFBFBFDFBFBFB +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFB +FBFBFBFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFF6F6F6F8F8F8FCFCFCFCFCFCFCFCFCFCFCFC +FEFEFEFCFCFCFCFCFCFDFDFDFCFCFCFAFBFBFCFCFDFDFCFDFBFBFBFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF9FAFAF7F8F7FDFDFCFFFFFFFDFDFDFAFAFBFDFDFFFAFAFBFBFBFBFEFEFE +FEFDFCFBFAFAFEFEFEFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFEFBFAFBFDFEFEFBF8FFFFF8EDFFFF72A4C2 +EED29CFFF6F9F4FDFCF7FEEFFAFAFFF8FEFBFEFFF8FEFFFAFEFEFBFCFCFBFCFCFEFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7B7B7000000D6D6D6FFFFFFFCFCFCF6FAF8C2C3C56D7073 +676D72969DA0A0A8ACA6B3B3B2C0C0C0CAC9CED9D7D8E3DFE5EBE9F6F6F5F7F6F7EAEAEAE5E5E5 +E1E1E1D7D7D6D0CFD1C6C9CCC0C5C7B6BEC1B0BAC1AAB5BAA6AFB6A0A3AEA3A0B09F9BAB9397A4 +767E8C64676FB8BBC1FCFCFFFBFDFDFCFBF9FBFCF7FBFBF8FEFEFBFEFEFCFBFBF9FEFEFCFFFFFB +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFEFEFEFEFEFEFEFEFEFEFEFE +FCFCFCFEFEFEF9F9F9FEFEFEFBFBFBF9F9F9FEFEFEF7F7F7F8F8F8FAFAFAF2F2F2F8F8F8F7F9F7 +FCFFFFF8FBFAF6FBFAF8FFF9F9FFF9FAFCF9FCFFFAFEFCFAFEFEFAFBFBFBFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F8FEFEF8FDFFFAFEFFFCFEFDFAFBF9F8F9F6FCF7F4FEFDF9FEFEFDFEFEFEFCFCFFF8FCFEFEFCFD +FFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF +919191070707E4E4E4FFFFFFFFFEFAFCFEFBFEFBF7FEFCF6EBFEFF70A0C4F0D69FFFF8FAF2FAFA +F9FEF0FBFBFFF9FEFAFEFFF8FEFFFAFEFDFBFEFEFBFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFB6B6B6000000D1D1D1FFFFFFFFFFFFDEE1E27575786B7073959A9D93999DA0A8AF +A7B1B3B4C1C0C0CAC9CFD8D7DFE5E3EBF1EFF3F2F3F5F5F5E9E9EAE3E3E3DFDFDFD5D5D6D0D0D1 +C8C8CBC2C4C8B7BCBFB3BABEACB4BAA2ABADA3A7ACA0A0A89C9BA59395A0969EA8686C736D7077 +E3E4E9FDFFFFFEFEFAFCFDF8FBFBFAFEFEFCFEFEFCFCFCFAFFFFFDFFFFFBFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFEFEFEFCFCFC +FEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFCFDFDFDF8F8F8FBFBFBFAFBFAF9FCFBF7FBFAF6FDFC +F9FFF9FAFFFBFAFDF9FDFFFCFEFDFCFEFEFAFCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFF8FCFEF7FAFB +F9FCF9F9F9F6F8F8F5FDF8F5FCFDFAFEFEFDFEFEFEFDFCFFF8FDFFFDFDFDFDFDFDFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4 +FFFFFFFFFEFAFCFEFBFEFBF7FFFFFAEBFDFF6E9FC3EFD69EFFF8F9F7FEFFF7FEEFFBFBFFF9FEFA +FEFFF8FEFFFAFEFDFBFEFEFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8B8B8 +000000D2D2D2FFFFFFFFFFFFB0B1B35A5B6077797E979C9F959CA09EA4ACA7B2B3B5C0C0C0CBC9 +D2D7D7DDE2E0E4EAE9F6F5F4F7F7F4EBEBEAE5E5E4E1E1DFD8D8D6CFCFCFC8C8CAC4C4C6BABCC0 +B7B9BDB2B2B9A5ACAAA6ABAC96999C999BA0969A9F90969A878B9163686DAAABAFFFFFFFFFFFFB +FBFCF7FBFBF9FEFEFCFEFEFCFCFCFAFFFFFDFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFBFBFBFFFFFF +FDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFDFFFEF6F8F7F5F9F8F7FDFBF9FFF9FAFFFBFAFDF9 +FDFFFCFEFEFCFEFEFBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFEF9FDFCFDFEFDFAFBF9FDFCF7FCFDF8 +FBF7F4FDFDFAFCFEFDFEFEFEFDFDFFF6FBFFFEFDFDF9F9F9FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFEFAFCFEFB +FEFBF8FEFCF5EBFEFF71A1C4ECD19AFFFAFBF6FDFDF7FEEFFBFBFFF9FEFAFEFFF8FEFFFAFEFEFB +FCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFC2C2C2000000C3C3C3FFFFFF +FFFFFF818287696A6F81848990959C9599A39CA2ABADB5B8B5BDC0C1C6C6D3D9DADDE1E0EDF1F0 +F6F5F3F4F5F2E8E8E5E4E4E1DDDEDCD6D6D3D2D2D1CACAC8C6C4C5BCB9BCB8B5BAB5B0B6A6AAA8 +A2A7A593999898A09F969A9D85868B9399A07A7D837F8184FFFFFFFDFCF8FBFDF6FDFDFBFDFDFB +FBFBF9FEFEFCFEFEFCFCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFBFBFBFCFCFCFCFCFCFBFBFBFDFDFDFAFAFAF5F5F5F9F9F9 +F6F6F6F9F9F9F9F9F9FAFCFCFBFDFCF9FDFCF7FEFCF9FFF9FAFFFBFBFDFBFBFEF9FDFBF9FBFBF9 +FFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFAFCFBFEFFFDF8F8F6FDFDF8FCFBF7FCFAF3FEFBF9FCFCF9FFFFFE +FBFBFCFCFBFFF9FEFFFBFBFBFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFEFAFCFEFBFEFBF7FFFFF8ECFEFF +71A2C5ECD29BFFF8F9F7FFFEF7FEEFFBFBFFF9FEFAFEFFF8FEFFFAFEFEFBFCFCFAFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFC2C2C2000000C2C2C2FFFFFFFFFFFF7173786F7075 +888A918B8F98979DA89AA1ABADB4B7B8BDC0C1C6C7D3D6D7E2E4E2EEEEEEF4F4F0F5F6F1EBECE6 +E5E6E0DFE0DCD6D7D2D3D4D1CCCBC8C7C6C4BFB8BBBCB3B9B9AFB5A6A8A9A4A9AB9BA4A5949DA0 +9B9EA387868D868B91767A807D7E83FFFFFFFDFCFAFBFDF6FDFDFBFDFDFBFBFBF9FEFEFCFEFEFB +FCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFEFEFE +FEFEFEFCFCFCFFFFFFF8F8F8FFFFFFFAFAFAFCFCFCFBFBFBFBFBFBFAFAFAFAFBFAFFFFFFFCFCFC +FAFCFBF9FCFBF9FDFCF7FEFCF9FFF9FAFFFBFBFDFBFCFEFBFDFDFBFBFBF9FFFFFFFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFBFCFAFBFBF8FCFBF6FDFBF8FEFBF6FEFBF3FCF8F6FAFAF7FBFDFBFDFCFCFCFCFFF9FEFF +FCFBFBFEFEFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +FFFFFF919191070707E4E4E4FFFFFFFFFEFAFCFEFBFEFBF7FFFFF8ECFEFF70A2C5EED39EFFF7FA +F8FFFFF7FEEEFBFBFFF9FEFAFEFFF8FCFFF9FEFEFBFCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCFFFFFFC8C8C8000000B6B6B6FFFFFFFFFFFF7173796B6B748486908C8F979399A3 +9BA4ADB0B3B6B8BCBFC0C5C6D1D5D6E3E3E3EEECEEF4F5EEF7F8F2EEEEE8E8E9E3E4E5DEDBDCD4 +D6D6D1CECCC9CDC6C4C0B6B8BFB2B6BCAEB4A7A6ABA1A5A99BA4A7939CA29799A28E8A96868B91 +6C6F75808186FFFFFFFDFDF9FAFCF6FDFDFBFBFBF9FBFBF9FEFEFBFCFCFCFCFCFAFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFDFDFDFCFCFC +FDFDFDFDFDFDFBFBFCFCFBFCFDFDFDFFFFFFDEDEDFDBDDDCF8FAFAFDFEFEF8F9F9F9FDFBF8FBFA +F7FDFCF8FFF9F8FFF9FAFDF9FCFEF9FDFBF9FBFBF8FFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFBFAFAF6 +FFFFFFE1DEDAD7D3CDFEFBF5FFFCFAFCFBF9FFFEFEFCFCFCFCFCFEFAFEFFFAFAFBFDFDFDFCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707 +E4E4E4FFFFFFFFFEFAFCFEFBFEFBF7FFFFF8ECFEFF71A2C5EBD397FEF6F6F5FEFEFAFEF1FCFAFF +F8FCFAFEFFF8FFFFFBFEFEFCFCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +CECECE000000AEAEAEFFFFFFFFFFFF7D767F63636C858B92848E989097A49EA3B0AAB3BEB8BEC5 +C6CACCDFE3E3EAEFF1EFF3F8F0F7F1F0F7F1E7EBE9DBDDDDD4D6D8D1D0D3CCCFD6C8C9D2C5C7CF +C1C3D0B8BAC7B3B4C1A9AAB2A9A8B39A9BA691929F9899A6898B998B8F95727077857D83FFFFFF +FFFCFDFCFAFBFCFCFAFFFFFEFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFCFCFCFCFCFCF9F9F9FFFEFB +FAFCFAFBFDFCF9F7F885777C664D56DFD8DCFFFAFFFEFAFDFFFBFEFDFDFDFCFCFDFCFDFDFCFCFD +FCFEFDFBFDFDFEFFFFFEFFFFFEFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFEFBFFFFFAFCFFFFFF635647514231 +E4DDCAFFFFFFFAFDFFF5FAFDF7FDFDFCFEF9FDFBF4FDFDFEFEFEFEFDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFEFA +FCFEFBFEFBF7FFFFF9ECFEFF71A2C5ECD498FEFAF8F4FFFEFAFEF1FCFAFFF9FDFAFEFFF8FFFFFB +FEFEFCFCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2D2D2000000A8A8A8 +FFFFFFFFFFFF7C77806A6C74868D94848F989099A49BA3AEB1B9C4BBC1C8C6C9CFCED1D0C9CFD2 +C7D0D4B8C3C3A7B0B29CA4A88F989B868D947D848A858E998C949F8D94A29AA2B0A2A9B8A4ABBC +A0A5AFA6AAB7A0A2AF93919E9D99A8948E9E8C89936F6973837882FFFFFFFEFBFCFCFDFCFDFDF9 +FCFCF9FCFCFAFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFF6F5F6FDFEFAFCFDF8FFFFFDCDC6C4 +4939393A2224968989F3E7E7FEF7F6FEF9FAFCFBFBFDFBFCFAFEFDFCFEFDFCFEFDFBFDFCFEFFFF +FEFFFFFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB +F5F5F5FBFBFBFFFFFFFBFBFBFFFFFEF8F7FEFFFAFCD5C7C12D190D41291C8F7569FFFFFDFCFEFC +F4FBFAFAFFFFFCFFFBFDFFF8FBFBFCFCFCFCF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFEFAFCFEFBFEFBF7FFFFF8 +ECFEFF70A2C5ECD59BFFFCFAF1FDF9FAFEF0FCFAFFF9FCFAFEFFF8FFFFFBFEFEFCFBFBFAFEFEFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6010101A2A2A2FFFFFFFFFFFF838089 +60646C757D837A8A908E9CA4AAB3BEB2BEC9AAB0B7949399686C6E4952534B5A5F54636B54656D +5E6F77697A855E6F7B596A76596A79495B6A3143532537482E3F534E5E746F7D8B8793A19FA5B3 +9C9BACA299AB93869A9288997A707F887A88FFFFFFFCFBFCFDFFFCFDFCF7FCFEF8F9F8F7FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFEFEFEFEFEFEFBFBFBFCFCFCFDFBFCF0F3ECFDFFFAF6F3EB9C8F87463129533A31583F3B +DDC6C2FFF9F5FFF8F4FEFAF8FDFDFAFAFEFDFAFCFBFAFCFBFBFDFCFEFFFFFEFFFFFEFEFEFCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFEFEFEFFFFFF +FEFEFEF9F9F8FFFFFFF2E8E49078704622195E39315B372BD8D3C8FFFFFFF7FBF8F7FEFCF9FFFA +F9FFF7F5F5F4FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFEFAFCFEFBFEFBF7FFFFF8ECFEFF71A3C6EFD69A +FEF9FAF5FEFFFBFEF1FDFBFFFAFEFAFEFFF8FCFFF9FCFDFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFFFFFFFDFDFDFFFFFFDCDCDC030303989898FFFFFFFFFFFF787A825B62697D8D9293A5AC +8B9BA37381884D5B6744485378777EBFBFC4CDDADCB9CFD0ADC5D3A7C2CF9EB9C594B2C08FB0BE +81A3B37C9FAD799CAA7A9DAE7193A560839745677C2544541A34462F43536B748685889C8C8A9E +9290A27E788A867F8DFFFFFFFFFFFFFBFCF9FDFEF7FDFEF8FCFEF7FEFDFBFCFCFCFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFE +FEFEFEFFFFFFF9F9FAFDFCF2FFFEF5B1A195684E3E56372464422D623528764E44E7CAC2FFFFF8 +FAF7F1F9F9F6FDFFFEFDFFFEFDFFFEFDFFFEFCFFFDFBFFFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFDFDFDFBFBFBFBFBFBFBFBFBFDFDFDF9F9F9FEFFFFFFF6EB +A1897F825A506834276C3A2E744437534033E3D6CAFFFFFAFEFFFCFAFBF7FBFEF8F4F4F5F7F7F7 +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191 +070707E4E4E4FFFFFFFFFEFAFCFEFBFEFBF7FFFDF6EEFEFF6E9EC1EFD79CFFFDFCF3FEFCFBFEF3 +FDFBFFFAFEFAFEFFF8FEFFFAFCFDFAFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFDFDFD +FFFFFFE4E4E40808088E8E8EFFFFFFFFFFFF73777E6670767F9094687D834E6269687A81AEBBC9 +E5E9F5E8E4EFCBCBD1C7D8DBB5D1D3AACCD89BBDC78EB4BF89B0BE82AEBB7FADBB7CAFB774A5B0 +6E9EAA6291A2608F9F588998568295527A8D3B5D701A35443C52616A7C8B7B869768708081808C +FFFFFFFFFEFFFCFCF8FDFEF6FDFEF7FBFCF7FEFFF9FEFEFBFCFCFBFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFDFEFEFEFEFEFEFDFDFEFEFEFBFCFCFAF9FB +FFFEF5E7D7CE8A6C60825946683B236D43248047366434229C776AFFFBF2FFFDF7FBFAF7FCFFFE +FCFFFEFDFFFEFDFFFEFDFFFEFDFFFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF9F9F9FBFBFBFBFBFBFBFBFBF9F9F9FAFAFAFFFFFFD1BAA7815F4D996453682D1A +6A36217D4F395837259A7F72FAEFE8FFFCFBF8F4F4FBF8F8FCFCFCF9F9F9F6F6F6FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFF +FFFEFAFCFEFBFEFBF9FEFCF5E9FDFF72A2C6E8D195FFFBFCF4FEFDFBFEF1FDFBFFFAFEFAFEFFF9 +FEFFFAFCFDFBFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFDFDFDFFFFFFE1E1E1060606 +909090FFFFFFFFFFFF7D848A5E6B7057696C40575B82979ED0E2EBF0FDFFE3E6F4ECE6F1E6E5EC +BCCFD2B9D8D8ACD0DBA2CAD196C1C883B3BB7EB2BA71A4B06FABAF68A2A8629BA36198A35B929F +578E9C578BA04F81935E8B9B426B761B3F47193D46677D8E61717F757D88FFFFFFFFFEFFFDFCF9 +FBFEF5FDFDF4FCFDF7FEFFF9FEFEFBFCFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFCFEFEFEFEFEFEFEFDFDFEFEFEFCFDFDFDFFFDFDF7F8F8FEFFFFFBF3ECA98F887C5549 +92604D703C2078482388473477412E603728C4B0A6FFFEF8FDFEFBFDFFFFFCFFFEFDFFFEFCFFFC +FDFFFEFBFFFDFBFBFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFDFDFD +F9F9F8FAFBFBFAFAF9FCFAFBFFFFFFF7FBFC8E70557F533DA5695166270E652F167F5338784D3C +614034BBA39EFFFDFCFFFAFDFEF6FAFEFDFCF9F9F9F6F7F8FFFFFFFFFFFEFFFFFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFEFAFCFEFBFEFBF8 +FFFDF6EEFEFF6E9EC1E6CAA3FFFEEDF4FEFFFBFDFFFDFEFAFAFFFAFAFCF1FDFFF4FEFEF5FCFFF8 +FCFFF8FCFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEE0D0D0D7F7F7FFFFFFFFFFFFF +75847C3D4C4B485C5F789197B4CED4C0DDDEE8F0F9E8FBFDD6EAEBCED7DED0E1EDB7DDE7AECDDC +A8C7D49ABECC93BACA87B4C37EADBB73A8AD70A6AA68A1A8619EA45C9BA152949A5189933E828A +3A899236808A3F7C853362691C414C304C557B8C8FFFFFFFFFFFFFFBFBFDFEFFF6FEFFF7FBFCF3 +FEFFF6FEFFF7FCFFF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBFBFBF9FEFEFC +FFFFFBFFFFFBFFFFFBFFFFFBFFFFF9FFFFFAFFFFFBFFFFFCFEFEFEFBFBFBFBFBFFFBFBFFFBFBFF +FBFBFBFBFBFBFDFBF9F9FFF9F8FEF9F8FEF9FBFFFAF9FFFAFCFFFCFBFCF6FBFDF7FBFCF8FBFBF9 +FBFBFBFBFBFCFBFBFCFBFBFCFBFBFCFEFEFDFDFCFDFEFCFEFAFCF9FAFCF9FAFCF9FAFEFAFAFEFA +FBFEF9FFF9FCFEFBFFF9FEFFF7FAFBFFFBF8FFF2EFCEBCBD734F3E9C664C8B54387135167E360E +8C442C8D4C31854E336C4A36D8C9BAFFFCF1FEF8F3FCF9FAFAFAFDFAFFFFFAFFFEFDFFFCFFFFF9 +FFFFFAFFFFFDFBFBF9FEFEFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFEFEFEFBFBFBFBFBF9FBFBF9 +FBFBF9FBFBF9FBFBF9FBFBF9FBFBFCFBFBFCFBFBFCFEFEFEFEFEFFFFFFFFFAFDF5F5FBF7F8FEFF +FEFFFFF8F6FAB4ABB1764F36A46B45904C23703213773E2486492A8054306F462E6F4B41DAC7C7 +FFFFFFF8FBFEF4FBFCFAFAFBFEFDFBFBFCF7FCFFF8F4FFF6FDFFFBFEFFFBFCFFFBFCFFFBFCFFFB +FCFFFBFEFEFEFFFFFF919191070707E4E4E4FFFFFFFFFEFAFCFEFCFEFBF4FEFEF7ECFEFF6FA0C2 +E9CEA5FFFEEDF4FFFFFBFCFEFDFEF9FAFFFAFCFEF2FDFDF5FCFDF5FEFFF9FEFFF9FCFFF7FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F0F0F7E7E7EFFFFFFFFFFFF67727227363A4F626B +96AFBAA6BFCAB8D2D9DAEAF1E3FBFFE9FBFBE5E8F1D4DCE9BCD8E4B4D0DCAECBD7A1C3CE97BECA +90BBC789B6C27FB4BD72AAB26EA8B266A2AD5F9FAA5799A4518E9A4A909D4594A02F7B873A7882 +3D6D7B3055611C3A435A6D6FFFFFFFFCFFFFFCFFFEFEFFF7FEFFF7FBFCF4FEFFF8FEFFF7FCFFF7 +FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFDFCFCFAFFFFFDFFFFFDFFFFFDFFFFFD +FFFFFCFFFFF9FFFFFBFFFFFBFFFFFCFFFFFFFCFCFCFDFCFFFDFCFFFDFDFDFDFDFBFDFDFAFCFDF9 +FCFCFCFDFDFCFDFDFCFDFCFCFDFCFCFDFCFDFCFDF9FDFDFBFDFCFAFDFDFEFDFCFEFDFCFFFAFDFF +FAFDFFFAFCFFFBFEFFFBFDFFFBFEFFFBFCFBFCFEFDFCFEFDFCFEFDFCFEFDFCFEFDFFFAFDFCFDFE +F9FEFFF9F9FBFFFFFAF9EBE7805F567E503AA46A4D7C4831551F057939188C4A278F4C2D864A2E +774C38886D5DE7D8CEFFFFFFFDFEFAF9FEFEF9FEFFFAFEFFFDFEFDFDFDF9FEFEFCFDFDFBFCFCFE +FFFEFEFFFFFFFCFCFDFEFEFEFCFCFDFFFFFFFFFFFFFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFCFDFDFFFDFDFFFBFBFFFEFEFFFDFDFFFEFDFFFFF8FEFFF9FFFAF6FDFFFFFFD8D8D66C6F69 +84513EB073537D3B18511E0575442D774325905935805030673E298F756CEFE4E0FFFFFFF2F9FD +FAFDFEF8F7FAFEFDFCFDFFFCFAFFFBFDFFFDFEFFFEFEFFFEFEFFFEFEFFFEFEFFFDFEFCFFFFFFFF +919093070708E4E3E5FFFFFFFFFDFBFCFEFEFEFBF9FEFDF8ECFEFF6FA0C3ECD2A8FFFDECF4FFFF +FBFCFEFDFCF9FAFFFAFEFFF7FCFDF6FAFBF6FEFFF9FEFEFAFCFDF9FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF2F2F2101010797979FFFFFFFFFFFF55686C2942494C6F79719AA4779FABA2C8D2 +C2E3E6D7F7F8E7FAFDEFEAF6E2E1F0C9D9E7BCD5DFB7D1DCACCAD59EC2CC96BCC78DB5C07DB3BD +7AB0BB73ABB76CAAB666A5B35FA0AC508F9E468D9E4291A02E7B883674844D828E476D7A23444C +4C6464FFFFFFF9FFFEF9FFFDFEFFF9FEFFF9FBFCF6FEFFFAFCFFF8FCFFF7FFFFFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFAFFFFFDFFFFFDFFFFFDFFFFFDFFFFFCFFFFFBFFFFFB +FFFFFDFFFFFCFFFFFFFCFCFCFDFDFEFBFBFDFDFDFCFDFCFAFDFEF9FBFEF8FFFCFFFEF9FFFFFBFF +FFF9FEFEF9FEFDF9FEFCFDFDFBFBFCFDFDFEFDFDFFFDFBFFFEFDFFFAFEFFF9FEFFF8FCFFFAFFFF +FAFFFFFAFFFFFCFCFCFCFEFDFCFEFDFCFEFDFCFEFDFCFEFEFEFCFBFBFEFDF9FEFEFDFBF8FFFEFA +C8AFA96836219B62459A5D40845944683F2B612F178F552B894A248F4B2D8C523F714737A28679 +FFFFFFFBFEFAF6FEFEF9FEFFFCFDFFFEFBFDFDFDFBFEFEFCFDFDFDFCFDFFFFFEFFFFFFFFFCFCFC +FEFEFBFCFCFBFFFFFEFFFFFEFDFDFBFDFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFFFDFDFF +FBFBFFFEFEFFFEFEFFFCFCFFFEF5FFFBF4FDFFFBFFFBF3F1A09087675448A567589958419D654C +633C2C502D1A83563D83431991522E8C5333613C25B39E92FCF3EDF8FFFFF4F8FAF5F5F8FEFCFF +FFFEFFFEFDFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFBFFFFFFFF919095070808E4E2E5 +FFFFFFFFFDFFFDFDFFFEFAFAFEFCFAECFDFF6F9FC6EBD1A7FFFFEDF7FFFFF9FDFFFFFFFBFCFFFC +FFFFF9FFFFF9FCFEF8FEFEFAFEFEFCFCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC +161616656565FFFFFFFFFFFF4E72732756593E7C8151969D5EA2A67DBCC3A6CFD3BFE3E5E8F7FB +F6E9F8EAE0EFD7DFEAC7D9E1BFD2DCB8D0D9AAC8D29EC1C996BAC385B4BF80B1BB7AABB96EA7B1 +659FAA629CA85997A64C92A2418E9E428E9C3975854B7B894B707B3A58617C8E91FFFFFFFCFEFE +FBFEFEFCFCFBFCFBFBFDFDFBFCFCFCFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBFEFEFE +FDFDFDFEFEFEFBFBF9FBFBF9FBFBF9FBFBF9FBFBF9FBFEF8FBFCF7FBFEF7FBFCF9FEFEFBFDFDFD +FAFAFAFDFDFDFEFEFDFDFDFAFAFCF6FBFCF6FBFDF6FDF8FCFFFCFFFFFAFCFAF6F9FDF9FBFEFAFE +FBFAF8FFFFFEFBFBFBFCFCFEFBFBFDF5F4FAF8FCF9F8FDFBFBFDFBFBFDFCF7FBF9F8FBFAFAFDF9 +FAFCF9FBFDF9F7F9F4F7F9F6F7F9F5F4FBF6F4FBF9F9FDF9FFFCF7E5CBC3663E369661439E6442 +7A492EBCA395D3C0B56248396C441A8F533292452C9344308F5340784C3BC5C7B5FFFFF7FAFCF6 +F4F8F8FBFBFBFCFBF9F6F8F1FBFCF6F9FAF6FAFBF9FCFDFBFEFCFFFCFCFAFCFCFAFCFDFBFAFAF7 +FAFAF8FAFAF9FCFDF8FBFBF9F9FAF7FAFAF6FCFCF8FBFBF9FBFBFAFBFBFBFBFCFBFCFCFAF9F9F9 +F8F7F5ECFFFFEEF8F9FFFFFFD1AFAE7A4238924B3D9C5F547D4534D6B0A2CEC1BC5C4A40654230 +8B46258F4B259B582E804D266C472DCBB6A3FFFFFFF7F7F6F9F9F9FDFDFFFFFCFFFFFDFEFBFCFD +FAFCFDFAFCFDFCFDFEFBFDFEFBFDFEFEFDFEFFFFFF908F94070808E3E3E5FFFFFFFBF8F8F8F9FB +FCF8F6FFFCFAECFDFF6C9BC2ECD1A7FFFDEDF7FFFFF9FDFFFFFFFBFCFFFCFFFFF9FFFFFAFCFDF9 +FEFDFCFEFEFEFCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFB151515676767FFFFFF +FFFFFF7C999D1F4A4D2B6A6C458A8F589A9F629EA297C3CAB5D9DCD3DDE6FFF1FEFBEEFEE6EEF8 +D9E9F0D7E6EFD2E6EDBCD7E0B3D1D9B0CFD89CC6CD95BFC791BEC779A8B1689AA56597A25E97A6 +5FA2AF46919D438996518996497784426370445E68CBDADEFFFFFFFEFFFEFDFCFBFCFBFFFDFCFE +FDFBFEFCFCFEFFFEFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFEFEFEFBFBF9 +FDFDFBFDFDFBFDFDFBFDFCFBFDFEFAFDFEF7FCFEF9FBFCF9FEFEFBFEFEFDFBFBFAFDFDFDFFFFFD +FDFFF9FCFDF8FCFDF8FCFDF5FDFDF8FDFCF9FAFCF8FBFBF7FCFDF9FDFEFAFCFEF4FCFDF6FCFCF7 +FEFEFBFDFDFBF8F8F8FEFDF6FCFBF4FAF9F2FBFAF4F9F8F2F8F7F0FDFFF6FCFEF5FCFEF5FAFDF3 +FBFEF4FCFEF4F2FDF7EEF9F3FBFFFBFCF2ED9D79706E3E339465488052337F5C46ECE5DFFFFFFF +A29A8D44270A7C4931924330A953409856407B4C327D715CDFD5C4FFFFF5F9FBF4FAFBF6FAFAF3 +FCFCF1F6F7ECFEFFF5FDFEF7FEFEF9FEFEF9FCFDF8FCFDF8FCFDF8FDFEF8FDFEF8FDFEFAFBFCF3 +FDFDF6FEFEF7FFFFF7FDFFF5FBFCF3FDFEF7FDFEF7FDFEF7FBFCF5FDFEF7FEFEF7F4FEF7FFFFFE +FBEFE9744B40884637B5634D80483DA17668F8E6DCE9EEF29E979355372682432C94532F9C5827 +995B2D7D502B917055E6DDDAFFFFFDF9F9F4FCFFFCFCFEFCFDFDFCFCFFFAFDFEFBFCFEFAFEFFFB +FEFFFBFEFFFCFDFDFBFFFFFF8F908E080707E3E4E2FFFFFFFDFCF6FBFCF9FEFBF4FFFFF9ECFDFF +6898BAEBD0A8FFFDEDF7FFFFF9FDFFFFFFFBFCFFFBFFFFFAFFFFFAFCFCF9FEFEFDFEFEFDFCFCFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A5C5C5CFFFFFFFFFFFFCCD7DF57717A +0E4045478188598E956E9CA282ADB6A9CCD1DCE3ECFFFAFFFAEEFDD2DDE6B9C6CCA0AFB693A5AD +7E989E73919674939B709598668A90668E94759FA682B0B780AFB56AA0AD5B9AA4519AA43F828E +568C96517984334F608297A4F2FCFEFFFEFFFFFCFDFDF8FBFEFCFFFCFBFFFDFBFFFCFBFFFFFEFF +FFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFEFEFEFBFBF9FDFDF9FDFDF9FDFDF9 +FDFCF9FDFDF9FBFEF7FCFEF7FCFCF9FEFEFCFDFDFDFBFCFCFAFAF8FCFDF9FBFBF7FAFAF3FBFCF3 +FDFCF4FDFFF7F8FDF3FAFEF4F6FBF2F7FDF3FAFEF4FAF9EFF8F8EDFBFCF2F8F6F2FDFDF8FDFEF9 +FFFFF6FFFEF5FFFFF7FFFAF1FFF7EEFFF6EEFFFFF5FFFFF3FFFFF3FBFEF0FCFEF1FCFFEFF0FEF8 +F7FFFCFEFFFFBEAFA76941378B5548805B41765236B69F8BF8FDF8F2FFF8E8EDDF7A66526C3C2B +9C493BAC5240A35E44956545614A329D8A76F9EEE1FFFFF5FDFDF3F7FAEEFCFDECFDFFEFFDFEEE +FFFFF6FEFFF3FBFCF0FFFEFCFFFDF9FFFFF9FCFCF8FDFCF9FDFCF9FFFFF2FDFDF0FCFCF0FBFCEE +FDFDF0FEFEF1FFFFF6FFFFF6FFFFF5FFFFF5FFFFF2FCFDF1FFF9EBFEF6EABAA59765402D8F5B42 +9A58387D4C40DDBCADFBF8F1F6FFFFD9D8D87C5F50773F308E5030904B189A5B23966439704A2B +A5918FF8EEE7FFFFFBFCFFFAFAFFFCFAFFFCFDFFF6FCFFF6FCFFF7FCFFF7FCFFF6FCFFF6FFFEF9 +FFFFFF90908F080806E5E6E3FFFFFDFDFBF3FAFBF6FCFAEEFFFFF7F1FFFF72A3BFEED2AEFFFFEF +F7FFFFF9FEFBFFFFFBFCFFFFFEFCFCFDFCFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FCFCFCFCFCFCFFFFFFFFFFFF1D1D1D535353FFFFFFFDFCFCFCFFFFBACFD12E515728575E43747E +5F929D7EA29EA5BABEADB2B9A8A2ACA19EA49494988E9598838C8F848D92939FA5919EA585969B +79909781969F788F99617A8555707B5D7783718C9E6A92A2679BA95A909C608790556E7A5C6F6D +E3EDEDFFFFFFFDFDFFFDFAFDFEFBFDFBFDFBFDFDFCFBFBFCFEFEFEFCFEFDFCFCFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFBFFFFFCFCFCF9FEFEFAFEFEFAFEFEFAFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFBFBFCFFFEF8 +FFFDFBFFFDFEFEF9FDFFFBFFFFFAFFFAFAFFF9F8FCF6FBF9F6FFF8F3FFF6E9F8E9D8EFD2D5E9CC +D8E9CFDAE8CEDDE9D1E0E9D3E0E9C3D9E4C9D0E1C6D6EBC1D8E6C0DBE0C7D6E1C2DEE9CDDDE5CE +DCE7D0DAEACDD7EBC9D9ECCBDBE5C8E0E3CDD9DDCDD5E2D3D2E7D9D6ECD7E9F1DCE4D4BE603D24 +70442894634778543A928A71EEFAE7EDF4EDE7EBE9F0FDFDE4CABD633F377E4B48894539A6583C +AE5D33985D3E795236A19277E4EBD2D5E0C9E1E6D3D6EACCDDF0D3DDEECDD6E7C0DCE9C1E1EABF +DEE9CBDEE8CCE0E8CED9E4CCD5E3CCD3E5CBD8E3C8D7E8CAD0E6C5D5ECC8D6ECC6D3E5C2DCE8C6 +D7EABCD4EABFD4E7D1D6E6D5D4E5C7EFEAD9C7A99A6C3A2B81523D8B5D44673318C3A7A3FAEEEC +F2F5F6F1F9FCFFFEF8D7C9C16E443A7049328A5837904523A35A3B955E397A493AB59E8AEBEAD5 +E1E3CEDDE0CCD6E5C9D8E6C7D8E5C8D8E4C8D9E7CCD9E6CDDAE6CED6EAC6F3FDE1828077060609 +CFD2CADBEAC2D9E6BFDCE8CAE0E2C6DEDFCAD1EBEB5D97B0ECD2ACFFFFEFF7FFFFF9FFFAFFFFFB +FCFFFEFEFCFCFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFDFDFD +FFFFFF1F1F1F4D4D4DFFFFFFFAF9F9F9FFFFE6F6F891ACB2163B453C686F537F866E908E6F8283 +6B6F75928F959B979D94939A999E9D949B9D8F9797909B9D8F999C8D9A9B8B9CA08D9FA493A3AB +97AAB1889DA673889250667050727C5D8D9663959B61898D355457BFD1CFF4FEFFFBFDFFFEFCFE +FEFBFDFEFBFBFBFDFDFDFDFCFBFBFBFEFEFEFEFEFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFDFCFCFA +FEFEFCFEFEFCFEFEFAFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFBFBFCFFFEFAFFFEFBFFFDFDFDFAFC +FDFBFFFBF9FFF9F9FBFBFEFCFBFFF9F3FEF2E6F3E2D0DFCCBBD3B0BBD0AEB9CEACBFD2ADC0D1AC +C2D1AABDD4A6BAD2AEBFDBBBC7E5B7C4DFB4C0D5B9C7DBB5C8DDBBC0D7B8B8D3B5B8D6B1B5D7AD +B2D8AFB6D4B0BCD0B0C9DCC3BDD7BCBCDFC1C2DECBC6D0BAAB9C856640278252387F49307A5847 +D3CAB7F0FCEDF0F4F4F0F1F5EDF5FAFDF2E7A9918C69403C8F4E41A5563BA95029A05F387D512D +8A7B5BC5D2BAC6DCC8C7DECEB7D1ABBFD9B4BCD4AEBFD8AFC0D8ADBFD7ACBFD6ACC0D7ABBFD7AC +BEDAB2BCDBB1BEDFB7C4DBBCBFDDBAB8DAB5B4D9B0B8DEB3BBDEB4BCD9BDBADCB4B7DEB4B5D8C3 +B9D4C4BBD7BCD5D9C1917A66693E2D7F573F77503993644FF9EDE8F8F6F4E6EDEFE5EBF0FCFAF9 +F7E9E6AF8E8A63453385563C9A512F9D5331A769447F513E8E7E63C6CCAFC2CAAFC4CCAFBDCCAB +C0D0A8BFCFA9BFCFA9BFCDAABFCEACC1CEACBACEA7D4E1BF73746A050407B6B9ACC2D2A6C4D3A5 +C8D5AFC8CBAAC9CAB4C4DEDF5D97B3EED4AEFFFFEFF7FFFFF9FFFAFFFFFBFCFFFEFEFCFCFEFEFE +FEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEF8F8F8FFFFFF212121484848 +FFFFFFFEFEFDFBFBFCFCFFFFE7F6FD3D565F37555D4062684C676567767A92989E9B979D89878B +8683887A7B77727370656966666B6D656A6B5A5F61565F615C66695F6A6C727F838493988D9AA0 +98A2AA7B939A31575A5C898A4B706F62837FFBFFFFF8FFFFFAFBFEFEFBFDFEFCFBFDFBF9FBFBFD +FCFBFBFBFBFBFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFDFCFCFAFEFEFCFEFEFCFEFEFA +FBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFBFBFDFEFEFCFDFEFDFEFEFEFCFBFBFBFAFAF7F7F9F9FAF6 +FBFFF9F9FFF7E2EFD8CEDEC4C1D3B6BCD7ABBBD4A8B5CD9FBED6A2BBD39CB9D098BBD9A4C6E2BB +AECDAA7A9D746B8D676C8C756B8E7462887164917B5D91795C94775C94735797795B9277649079 +698F785B846B63967B6D917E7888725C4F386F462F814D377A442FB0938AFFFFF6E9F5EDEEF2F6 +F2F1F7F1F6FCF8F7F4E8DFDE725957884F43A9593EAE4E27A45A2C86562B5F5231627B646B9282 +5E898064876A6B8F73698A71668C70638B6E618B6D638B6E628E6D5C8E6E63997A5D977861997A +63907D61947D5B947A5694755997775B967758907957946F5491705B91815C8C8166947F778467 +5A4A336C49347B5B44664936C9A598F8FEFBECF2F4E9F3F7EBF0F7F0ECEFFFF4F3E1D1D4746257 +674330A15C3F9F5031A25D36845B3F988C6AC1CEA8C3D2ACC8D7B0C2D7AAC6DAA3C6D9A6C6D9A7 +C5D8A7C5D7A9C5D8A9C0D9AAD9EABF787A6A070606BCC4AEC9DCA9C4D49FC6D4A7CFD2ADD7D9C1 +D7F1F369A2C1E8CCA7FFFDECF6FFFEF9FFFAFFFFFBFCFFFEFEFCFCFEFEFEFEFEFEFEFEFEFEFEFE +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFDFDFDFEFEFEFFFFFF2323233B3B3BFFFFFFFBFBFBFAF8F6 +FCFBFDFFFFFFBCC7CD3145483C55548293938D9B9A7D858778777A969597C6C3C3DDE3DEEBF0EB +F4F5F4FAFAFCF9F9FCECECF2E0E4E2CFD4D3B4BABB767E7F545E5E505B5B73767B8792988B9FA4 +4761624C6460D1EBE2FDFFFFF6FBFAFBF9FAFFFDFBFEFEFAFDFFF9FEFDFEFEFEFEFEFEFEFEFEFE +FEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFDFCFCFAFEFEFCFEFEFCFEFEFAFBFBFDFDFDFDFDFDFD +FDFDFDFDFDFDFBFBFBFDFEFEFDFDFDFDFCFDFEFFFEFBFCFCFEFEFEFAFFF5F6FEEEE2EED7C9DBBA +BFD6ADB9D0A3BCD7A3BDD7A4C2DFA8B8D69DBCDBA0BAD899CDE6BCA2B9A05C78674B725C548272 +49777A26738023768216717F10707C106F750E686F14737B22767F32757E3C777C4580833C7A76 +558276768C7D3E35206B46316C412F94655AFFECEDFAFCF7E6F5F3F0F4FAF4F2F8FAF7FDDFE6E9 +FDFFFFD2CACA684237934E39B35637A5592E77492666644A669285458582469194467F83487E86 +487D873F78843A7D872E79852B738A25778D1B788B14778B1172870D6D830C65730A667105676F +10707717727A1B737D1C736D1E7967237D6B2F7E7F307578337671637B68322E1D563C296D5742 +998C7CFFF1EAE3F5F8E8F5F8EBF3F8EDEFF4EEEBEDFBF6F7FDF8FFC3BDBC685145905240A65940 +AC5E3F775231A9A67EC1D8AAC2DCACC4D9A4C1D8A1C0DB9CC1DA9FC1DA9FBFD79EBFD8A0BFD7A1 +BDDBA6D5E9BB737D67060605B7C5A9CAE2AAC3D29FC1CFA5CFD2AEF3F3DEE9FFFF6CA4C7E5CAA4 +FFFEEEF4FFFFF9FFFAFFFFFBFCFFFEFEFCFCFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFE +FEFEFEFEFEFEFCFCFCFFFFFFFFFFFF272727323232FFFFFFFCFCFCFFFFFBFCFBFBFEFCFFF0F5F8 +7E8D8C5870687684846F7B7B939A9BD9DBDCEBE9E9D7D1D2D2DBDBD4DADCCED3D6D0D2D7CBCCD2 +BEBCC4B9BEBDB9BDBFBBBFC1B2BABDACB3B78A9498595E61545C6174808957656A919E9FF1FCF9 +FBFFFEFCFDFEFFFCFCFFFCF9FEFFF9FCFFF8FEFCFDFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFE +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFBFFFFFDFCFCFAFEFEFCFEFDFCFEFEFAFBFBFDFDFDFDFDFDFCFDFDFCFDFCFCFDFCFC +FBFCFFFBFCFFFBFDFDFBFDFCFCFEFBFFFFFDF0F7E7DEE8D4CAD9BBBFD2A9BED6A3BCD7A1BFDAA1 +BEDAA3B9D7A0BCDDA9C0E2AFC5E7B28FAE93628078678E9081BCB889D1D670C2D451C9E648C3E2 +31B4D332B5D638B4D33DAFCE48BBD55EC1DD72C1DD7EC0D691D3E099E0E9AADBD9B7D1C8676252 +644735725346CDADA8FFF3F4ECF1EFE2F5F0EEF4F8F5F0F3EFEBEAF2EEF5F8F8FCFBFDFC937C73 +77412F9D4D35A964466D46309AA294B7F1F18ADAE386E2EF89D5E68DD4E985CBE580CDEB70C9EA +61C7E458C4EA4EC4E940C5E431BEDC31BADC27ACD028A8C12DAFC92FB1CA3CB6CF46B7D34EBBD8 +5AC4CF5BC6C458C0BE70CCDD7DCBDF79C5D099B9B451504C574236736453D4D2C4F9F9F4DCECF3 +EFF7FCEBEBF0F2F0EFF1F2EEE8EBE5FBF9FFF0F1F19C8D87753A32A55949AB5D466B4728B1B188 +BDDBAAB8D8A4C0D8A1C1DB9FBAD69DBCD79EBBD6A0BDD8A3BDD8A5BED8A5BADBA7D3EABA707D67 +050506B3C4A7C5DFA6C1CDA7C8D4B5E3E5CBFCFCEAE8FEFF669EBFE2C6A2FFFFEEF5FFFEF9FFFA +FFFFFBFCFFFEFEFCFCFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FDFDFDFFFFFF272727323232FFFFFFFDFCFCFAFDF7FEFBFCFFFDFFEDF2F4919F9B5E776A5C6466 +959DA0C1CAC7BDC0C0BDBABAC1B9B9BCCACBC2CDCFC0C9CDBBBFC8B7B9C3AEAFBCA3A7A9A2A9AB +9CA4A59BA2A89AA4A99DA8AEA3A7AD737B843D4550676E77ACB0B3F6F8F8F9FDFCFCFCFBFEFBFB +FFFCF8FFFEF8FCFFF8FEFCFDFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFEFC +FCFCFAFEFEFBFEFDFBFEFDFCFBFBFCFBFBFDFDFBFCFDFBFDFDFCFCFDFDFDF9FBFFF7FDFFF8FBFE +FCFFFEF8FBF8F0F4F0D9E1CFC7D1BBC0CEAEBFD4A6BCD69FB7D496BFD9A0C0DDA5B8D6A1BFDEAE +C1E4B886A87E4A786768989989C2CD81D4DC59C2D048BCDC29C0DD1AB5D307ABCA15B4D524B5D7 +2FB9DA43BFE05AC7E868C2E17EC8DD88D0DA8AD7DCA6DADFA6C3C0636254503728B8A298FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF5F2986E5D8B4732A96958 +5537298598919DDEE877D3E373D9EE76D0DE6DC1D368BAD460BBDB4DB8D842BADA32B8D02BBCD1 +1ABDCE10BCCC0CB4C604A8BB0CAABF13B2C916B1C722B2C936BAD536AFCE44B9CF4FC2CC53C4CD +5BBCD965B9D873C5D97EA0AA5254594D3734D8CCBDFFFFFFFFFFFFF2FFFFFFFFFFFFFFFFFFFFFF +FFFFFFF9FFF5FFFFFFFFFFFFFFF5F19A625F984E44AF6252593217A9A983C0E1B1B9DEACBFDBA4 +BEDB9EBBD8A5BCD7A5BCD7A7BCD8A8BCD8A9BDD7A9B8DBA7CFE9BC6F7B68050506B0C3A7BEDBA2 +C7D2B7D9E5CCF9FAE5FFFFF1E7FCFF609AB9E3C6A2FFFDEEF7FFFFF9FFFAFFFFFBFCFFFEFEFCFC +FEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFFFFFF272727 +2F2F2FFFFFFFFDFDFCFCFEF9FCFCFAFFFFFFE8E9E9595D5E4F53558D95979CA1A4989BA0A0A3A6 +B6B7BBC2C3C6CED2DBD0D6DCD6DBE1DCE2E6D2D8DDC9CED4C5C8CFBEC0C9B2B6BE9FA7AD9FA7AC +959FA38F96A091979E878C9250515779797EECEDF2FFFFFEFBFAF8FBFDFBFEFEFCFDFEFCFEFCFB +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9FFFFF9FCFDF7FEFFF9FEFFF8 +FEFFF8FEFFF9FEFEFEFCFEFFFDFEFFFAFEFFF7FDFCFCFAF5FBFCF9F9FEFAF4FCF0E3F1D7D3E5C0 +C2D8B9BCD0ABC3D4A8C2D8A5BED8A3C0DDAAB8D49DB6DDAAC1ECC2A3C3A6678C704D825E76B3B7 +84C9D36BC5D549C2D934C3D722C0D206BECB05B6CB0CB0D01EB4D934B9DE44BDE360BFDC67CBE1 +6CCFDD82D6E095D9EA9CD4EBC8E7F99EB2BE373A3E362C29807474978F8E747E7C7C87847F8B87 +808784818181847E817D7E7D7B837E727F768E89836C4D505F29328D5C624A353D7F8E9D98DBF2 +70CEEF62D2F95FC2DD5CBFDD58C1DF4DC2DF3EBFDA36BDD91BC0D515C0D608BCD200B0CA00AECE +03AAD00EB5D41BBAD91DB5D635BFE03CBEE03EBDDE50B7D55BC8E357C7E25CC2DF6CC0E093DCFF +68808B2E364342363A8D7A7B9089868185827E888782868083847B7F7F7781827F7F838581868E +7C81878B888E796064582727A65C5E422E1197A579BBE4A9B8DEA2BBD9A2BDDAA9BCD9A2BDD9A5 +BDD9A4BAD7A7B9D5A5BCD7A7B7D9ABD0E8C571796C050605B0C0A9B8D2B4D4E1D0EEF7ECFEFCF3 +FEF8F4E8FCFF689BC4E8CCA7FFFDECF5FFFFF9FFFAFFFFFBFCFFFEFEFCFCFEFEFEFEFEFEFEFEFE +FEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF2727272F2F2FFFFFFFFDFDFC +FCFEF9FDFBFAFFFFFFEEEFEF595E5F3A3D4199A2A49AA0A3A1A5A8BDC0C3DADADEE2E2E6E8EBF2 +EFF2F8F6F9FFFFFFFFFBFDFFF4F7FDDCDFE6D1D3D9C6CAD0AEB6BBA5AEB29DA9AB9399A2969CA3 +A0A6AC44464B757579F2F3F5FFFFFDFAFAF8FDFDFBFEFEFCFEFEFCFEFEFAFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFFFFFAFCFDF7FEFFF9FEFFF9FEFFF9FEFFF9FEFDFC +FDFEFFFBFDFFF9FEFDF7FEFAFBFDF1FBFEF3F4FBEEE2EFD9D0E0BFC4D8ADBCD6B2C2DBB0C6D9AA +C6D9A6C0D8A5BFDAA9BAD7A9B9E5BA9ACBA95C8571507F6B81C0A58BD8DC73CAD15DC3D03CBCCA +31C3CF24C2C90DADC00EA9BF22B3CF3BBBD850BFDD61C7E276CBDF7FD5E385D8DF99DFE5A3DCE7 +AADCEAD1EEFA82939C41454A969292B1AEADA5A5A39297989DA6A699A3A399A5A49EA5A59E9FA1 +A3A3A59AA1A0909E98A9AAA7B6A0A2977279643F444739408395A09AD7E770C7E061C5E262C1D4 +64C3D65CBED353BFD542BACF38B7CB1DB1C316B1C20AB0C004A7BD10AEC91DB8D52DB9D530B7D1 +38B8D34EC4DE51C3DC54C0DA65BFD268C6DA67C7DB70C8E079C3E09EDEFF455C69404953A9A0A2 +B7A6A6ADA6A49EA3A1A6AEAEA2A5A1A3A49DA6A59FA8ABA7A7ADADA5A7ACA0A5A9A7A9ACC0B0B0 +916E6B85504E3B2D13A0B188BBE3ADB9DDA5BDD8A5BFD7A8BCDAA3BDD8A5BDD9A4BBD7A7BBD7A7 +B9D6A6B3D3A4D2E7C5707B6C040503ADBBA7C0D9BDE8F0E2FCFFFAFFFCF2FDF5F2E9FDFF6B9DC4 +EDD2ACFEFCECF4FEFDF9FFFBFFFFFDFCFFFFFEFCFCFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF2727272B2B2BFFFFFFFDFDFCFBFEF9FDFBFAFCFFFD +FEFFFF969C9D3D414598A1A3A0A5A9C2C7CAEEF2F5FFFFFFF9FAFDEDEDF3E1E2E7D7D8DDCFD0D5 +D3D4D9CBCDD2C3C6CDC6CBCEC2C6CAB8C0C3B0B9BBA3AFAE939AA38B919890959B4D50549FA0A5 +FDFEFFFEFEFCFAFAF8FDFDFBFEFEFCFEFEFCFEFEFAFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFBFFFEFCFCFBFAFEFEFBFEFEFBFEFDFBFEFFF9FEFDFEFDFEFFFDFEFFFBFFFB +F9FFF6F9FEECF4FCE8E4EFD6CBDDB9BCD1A4C0D6A6BCDCADBFDBA8BAD19EBDD09FBCD3A4C2DAAF +C2E3C186B799447D6962989392CFCC7DCBC15FC5D858C5D642B9CD2CB0C12CB7C320B2BA1D99AC +2EA9BA3FB3C151B4C365B6C472BDC77CC0C687CCCB8FCEC99DD1CEA1CFCCB1DADAC8E1E55F7275 +6C777BF5F9FCFFFFFFFAFFFFFFFFFFFFFFFFF9FFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFF +FBFFFFFFFFFFECDEE35F4A4D3A363B778D9190C3CB79C1CC5EB4C265BBBD5DB3B558AEB54AA9B1 +3DA5AC34A3A8249FAA199BA30D98A01AA5B025AAB832AFC140A9BA41A9B846A8B853ADBA5FB5C2 +54A6B36EB4BB74BEC56BB6BD74B7C684BED49FD1F0314A59919BA6FFFEFFFFFDFDFFFDFBFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6D7D2563A33413C25 +A4B994BEE7B5BBD7A6C0D3A6C3D4A8BCDAA3BDDAA5BDD9A6BBD7A6BCD8A8B5D2A1BCD8A9D8ECC9 +6F7A6A060707BECDBCE4F8E1F8FDF1FBFEF7FEFBF1FEFAF5EBFDFF6C9CC2E3C8A2FFFDEDF2FEFD +FAFCFAFDFCF9FBFFFEFEFCFCFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF292929272727FFFFFFFDFDFDFEFFFAFEFDFBFDFFFDFFFFFFCBCCCC45484C +9DA5A7B0B6B9D3D7DAD8DBDEC6C7CBC2C3C7CED0D3D4D5D8D4D5DAD4D5D9CCCED1C1C2C6B5BABC +B7BBBDABAFB1A7AFB0A4ADAF9BA5A5979DA68D939A8B91975F6166CACBCFFFFFFFFAF9F7FDFDFB +FBFBF9FBFBF9FCFCFAFBFBF9FEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC +FFFFFCFCFCFAFBFBFAFBFBFAFBFBFAFCFCFAFEFEFFFCFCFFF8FBF8F7FDF5F7FFF2EAF7DDD7E5C6 +C7D9B2BBD3A3B9D39EBBD8A2B9DAA3B9D6A1BBD4A1C5DAB1CAE0BEC9E2C36D9789427E736DB2B1 +90D8EA78CCE363CADC43C7EF40BFE440BADF3EACCC23819B004F671851593A777B377772417C6D +437969497A67467764507D695B836A55795D59786260806B6F857041524995A0A2FDFFFFF4FCFC +EFFBF5F8FAF8F4FBF9F2FDF7F7FDFBFCFFFCFEFDFCF8F6F6FCFCFCEEF1F2F4F9F9FAFFFFF4FBFB +868684434A496777734C71674271652D67593A7B6536745F34705F3574652E7465287365246F6C +1C706A17716A267D781765651C6466346F6836736A3971673D75673C71613D71604C786A457465 +3F6D6054807F4A707B254961183044C0CCD4FFFFFFFEF5F6FAF5F6F9FBFEF9F7F8FBF6F8FEF6FC +FDFAFEF8FBFAF4FEFAFDFDFAF3F4F4F5F6FBF8F8F9EEF0EC75736D6E6F59AAC09EB8DCAEBED9A5 +C5D6A5C3D5A6BBD9A2BAD7A4BAD6A3BEDAA9BDD9A9B9D5A5BED4A7D8EBC8707E6D050506CBD8CD +FDFFFAFCFCF4F7FBF4FAFCF3FFFCF5EBFAFF6F98BEE2C6A1FFFFEFF3FEFDFAFDFAFDFEF9FBFFFE +FEFCFCFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF +2A2A2A262626FFFFFFFEFEFEFCFDF8FCFCFAFBFDFCFFFFFFC4C7C8484B4F969FA1A0A7A9A9AEB1 +AAADB0B0B1B5BABBC0C9C8C9C8C7C9C5C5C7BEBEC0BEBEC0B9B9BAAEB2B3AAADAEA8ADAD9EA8A6 +9DA6A498A2A090979F8C9299898E9464656BD6D7D8FFFFFFFAFAF8FBFBF9FEFEFCFBFBF9FDFDFB +FBFBF9FEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFDFDFDFD +FDFDFDFDFDFDFCFCFAFEFEFFFCFDFFF9FBF7F9FEF4F0F8E7D8E6CDC5D5B5B8CCA3BCD5A1BBD8A1 +BAD8A2BED8A3BFD8A4CEE5B7CAE0BEB0CCB26687715A888672B2B385D4E27BD0F161C5EB48C0E3 +27BDDD2BB5D333AAC83380981D475D0818293B3F3E89988C9DB89E92BA9591BB948EBA9290B694 +93B4919AB68E9BB38D99B58E8FAE899CB48D788974B8C5C3FDFFFFFBFDFFFCFEF7F9FDF5F8FEF6 +FCFFFAFFFFFBFFFDF9FFF4F4F8FBF3FCFBF6FBF9F7FEFDFDF7FCFCE5F2EEAFB9B288938A909D8E +A2B39D99B39691B58F8BB78D8DB38D93B69395BA9B92B99C90BB9D94BAAD8EB9A994C5B288B8A6 +456B5C516E6489AE8EA0C3A599BA9B90B28D95B68F9BBD948EAE928FAF909EBEA083A295415D62 +4762765B7188D1DBE4FFFFFFF4F1F1F8F7F8F9FBFFFFF9F8FFF9FEFFFAFFFFFEFFFCFFFFFAFFFD +FDFCF6F7F7F6FAFAFEFBFCFEE1E6E5B1B7B48B8B74ACC29DB9DBA9C0D9A0C2D7A0BED9A0BAD8A1 +BCD7A4BAD6A3BED9A9BBD7A7BAD7A6BED0A3D2E3C2707C6D070708D5DDD8FFFFFFFDFBF6F9FBF6 +FBFBF5FFFFF7EEFBFF6F95BAEDD0ACFFFFEFF6FFFFF8FCF9FDFEFAFBFFFEFEFDFDFEFEFEFEFEFE +FEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF363636232323FFFFFF +FDFDFDFAFBF6FAFAF8F9FBFAFFFFFFC7C9C94A4F5398A1A39DA4A5989DA0989B9EB2B1B5BEBFC3 +D5D4D6DEDEE0E2E2E4E1E1E3DFDFE1DCDCDEC7CACCBCC0C1B1B7B59CA5A497A1A1929E9C8C939B +8F959D8C92985E6066CECFD1FFFFFFFBFBF9F8F8F5FEFEFCFBFBF9FCFCF9FBFBF8FEFEFEFEFEFE +FCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFCFBFDFBFBFDFDFDFCFDFDFDFCFCFB +FEFEFFFDFEFFFFFFFCECF1E5D5DECCC0D0B7C2D2B5C2D8ACBAD59FB6D49CBDDFAAC0D2A3C0D3A4 +CFE2B7ABC6A45E7F6962887792BFC490D3DD73C4DB63BEEA52C0F13BBEEE1AC0CA23B9C20C838F +0540492B333946292F58352B988671D3D7AEC2DEA9C0E7AEB7E5B0C1E1B5C0DDAECBE1B2CADDAD +C5E1B0BCDCAECBE2B09DB191B4BFBAFFFFFFFFFFFFFFFFF9FAFFF3F4FCEDF3F9EBF0EDE6F4E7E1 +FFEAE7F6FEF1FFFFF7FFFDF8FFFCFBFFFFFFE6F2EDB4C4B9939E91B1B7A2DADFBECFDBB2CCE2AF +C0DCA6CAE0AECCDCAED1DDB6C9DBB3C3D9B2CBD4C2C5D5BEC4DBC2A5BCA032402643452FB3CB9C +D8F0C2C5DCACC0D7A0C1DAA0C5E0A5BFDAB1D8F1C8BFD8AF5A725B6C8482B3CDDB7A8DA6D2DCE5 +FFFFFFFFFFFFFFFFFFFFFFFFFFF5F6DED4D9D0C6D2C6C3CBD7DDDCEDF8F2FFFFFBFFFFFFFFFEFF +FFFFFFDDE0E2B8BCBE98947AABBE97BADAA5C0DA9DC0D99BBBDC9ABCD8A2BED9A5BAD6A3BDDAA8 +B8D5A5BDDAA9C2D2A4CDDCBB72806E080808DBE0DDFAFDF9FFFBFAFBF9F9FBFDF7FFFFF6EEFCFF +7498BCECD4A4FFFFE7F6FFF8F9FDF9FBFCF8F9FCFEFBFAFBFAFAFAFAFAFAFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF3B3B3B222222FFFFFFFCFCFDFFFFFCFFFFFD +FCFEFDFFFFFFC9CCCC4F54578C9194909497A9ADB0D5D9DCEEF4F6F2F8FBF9FAFCFEFFFFFEFEFE +FEFEFEFFFFFFF6F6F8E4E8E9D8DCDCCBCFD1B6B8BEABAEB4A5A7AE9B9FA691949B909297606163 +D2D1D2FFFFFFFEFEFEFEFEFEFCFCFEFEFEFEFEFEFEFEFEFEFEFEFAFEFEFAFEFEFAFCFCFAFCFCFA +FCFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFBFBFBFEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFCFCFEFDFDFBFCFCF9FDFDFB +FCFCFAFCFCFAFEFCFAFBFFF7FBFFF8FEFEF9FEFEFCFDF9FDFBF7FCFFFCF7FFFEF8FCFFF4E5F0DE +C3D4C0BFCEBAB8CFABB8D5A5C3E1A8B6DB98B7DFA1AED89EC3D4A0CCD5B4A0A4984E616D6B9DAA +96DDEA83CBD875C6D863C6DC46BCDB45C4E335BBDD129EAB0364634E76625A492A7B5B3F512E18 +724D30543D1D87835FD0E6B7B5DAA2AFDFA1B0DBA0B5D496C0D393CBDB9DC3D7A2BEDCABCFD9B9 +8EA877AFCEC2C8DFD6D9E2B4E3D6B5D2D5CFDDCFD98A757878210E962618653426D7DCCADEDFDE +E0DAD9EDE2CADAD9CBCADBEBBAD1D1859586A3BB98BBE1AEB8D4A5C5CBA9BDD79DC8E1AFBED3A4 +BACFA0BFD6A0BCD094C5DAAAC0DEB0C4D2AF6E47365728144E300F825E54BDBC9FBDD6AAC4DCA9 +CBD6A5CCD6A5C3DFAE8BAC8C4569607094A2ABCEE3BFDDF87891A6BADEE6BECEDBD4C582D1BEA1 +CDCED1BDBED07C7487614168804584693D63F1E7EBB0C6CBBFCEC7D9C19AC2B7AEB7D2ECB7C8CA +958B88B1B4A4C0D7B0B7D6A5BBDBAABDD9ADB1D3A4B4D2A4BED9ACBCD5A8BFD5AABCD2A7BBCBAB +E7F3DB86888009090AE5E3E5FFFFFFFDF9F4FAFDF8FDFEF6FFFDF6EEFCFF749ABEE8CEA2FFFDE6 +F5FFFBF7FAF6FFFFFDF7FAFCFCFCFDFCFCFCFAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFFFFFF414141202020FFFFFFFFFFFFFFFFFBFFFDFBFCFEFDFFFFFFCDCECF +5055589A9EA1A9ADB0CACED1F4F7F9FAFEFEE4E9EDDCDBDDD1D1D4C6C7C9BFC0C2C3C4C7C2C1C4 +B8BDBEB2B6B7B5B9BBB5B7BDB0B3B9A3A5AD93989E92959B909196626366D3D2D3FFFFFFFDFDFC +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFAFEFEFCFEFEFCFEFEFCFEFEFCFCFCFAFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFBFBF9FAFAF8FCFCFAFCFCFAFCFCFAFCFCFA +FDFCFAFEFCFCFEFCFBFCF9FCFDFBFEFFFCFFFDFEF7F4F7EDE4EADBC2CFB8BCCDB1BCCEAFCAE3B7 +BCD8A4B6D295C1E09FBBDBA1C3E4AFB5D1AA7F947D5B6F6980A5B191CDDD7ECEDA69C8DE58BCD5 +4FBDD744BBD939B4CF1D9AB615727B4C858278816E8F6548844B32682B18734B2F6143255B4D2A +B2BF95BFDEB0B8DFAFB5DDA9B7D79EC1D79CC6DBA0B9D2A1B1D3A7D3DBBA99B18299B5AC586C62 +555A297F6F464148347A69697F655F94321BB63A2A692B1ABABEAF5B5E574E4D3D80794E4D5131 +6F8084BDD5D488998CA6BB9BBBE1B0B3D0A1C4CEA7C2D7A1C1D9A6C0D8AAB7D3A3C4E2AEB9DA9F +C1D9A8BFDAAD8C947169402F67341F6C40265C3329898167C1D3AAC6D9AFC3D6AEC1DAB06F9073 +476B597EA5A6ABD4E6A7CFE7B2D9F47D9BAA9BC2CF51646D756F18867C4A4351406A717E998EA0 +956793B46EAE6F4368CDC8C438554D556A55907D474E4632728B9CB6C1C18B8780B1B7A4C5D9B3 +BDDAA7BFDEACBFDAADAED59FB4D7A4B9D9A8BCD9A8BBD6A8BBD4A7C5D6B8F8FFEE8A8A84080809 +E4E3E4FFFFFFFFFCF7FCFEF9FCFEF6FFFDF6EEFCFF739ABDEACFA8FFFDE9F3FEF9FAFDFAFBFCF8 +F9FCFEFCFAFCFAFAFAFAFAFAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FFFFFF4646461E1E1EFFFFFFFFFFFEFFFFFCFFFFFCFBFDFDFFFFFFC6CBCA494F51A1A5A9BCC0C3 +C9CDD0C8CDD0BCBFC2BCC1C5D5D8D8E2E5E7E5E8E9DFE2E3D0D3D5C3C5C7B4B8B9B2B6B5ADB1B3 +A8ABB0A6A9AF9EA1A8999EA5979AA0919196606164D2D2D3FFFFFFFDFDFDFCFCFCFCFCFCFEFEFE +FEFEFEFEFEFEFCFCFAFDFDFCFEFEFCFEFEFCFEFEFCFCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFCFCFEFDFDFBFCFCFAFFFFFDFAFAF8FAFAF8FAFCF9FFF8FFFFF8FEFEF9FE +FBFAFAFBF9F8FDFDFBF3FDF1DAE5D5C5D1BBC3D3B4CBDDB7BAD1A6BFD9A5CBE7ADBEDA9BBCD89B +C6DFADCFE6BE557E684D746995BEC396D0E57FCFE16BC6D852CCEB52CBE93FB7D34CBED5188497 +00616E6D9592A8B7AA8369519555368A4024752A1575452A7A50345D42227B7956C3D1AEC4DEBB +BADFB4B9D9A7BDD8A3C9E2AFBDDBADABCCA9D0D7B3A2B6899EB5B03F4F456F7437B6A96A4A5432 +6D594DA6806EC14D31CE432E8F3F2AB7BDAF4C52426B734BB9BC71464E195A6E60C3DEDD89988C +AABEA1BDDFB1B8D7A6C1D1A4C4D59FC2D6A6BCD7A7B7D8A8B6DFA8BCEAAEBED6A7B2C0946C613F +875643692A19844733744239624E38ACB08FD3E2BFB3CCAF66917451767478A0A5A9D7E8A8D6F0 +9ECDE7B4E3FA83A7AE96BEC82E4446929122B8BA6B39552D54646AA79AABB279A7D27EC2885D7E +C6CABF1F422C6D885FBAAB634B451C6D878EC1CCC692948BAAB49FC7DBB1BEDAA8BEDEABB9D7A8 +B0DBA1B7DDA5BBDFABBEDEACB8D5A8B5CEA2D6E7CCFFFFFB8A8A87080808E4E2E4FFFFFFFFFFFA +FDFFFAFDFDF6FFFFF7EFFCFF739ABDEFD5B2FFFFF0F3FEFDF7FCF8FDFEFAFAFDFEFBFBFBFEFEFE +FEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF5151511C1C1C +FFFFFFFFFFFFFBFCF8FDFBF9FCFEFCFFFFFFC8CACA494C508F9A9B9EA8AA9AA2A4A5AEAFB0B9BA +B8C2C4BCC2C1BCC2C2B5BCBBB2B8B8B5BBBBB4BCBAB0B3B5AFB3B4A7ABAD9C9FA49C9FA69DA0A7 +989DA395989E8A8C91656569D2D2D2FFFFFFFCFCFCFFFFFFFFFFFFFCFCFCFEFEFEFCFCFEFFFFFC +FFFFFDFCFCFAFEFEFCFEFEFCFCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFFFFFFFFFFFFFCFCFCFDFDFDFDFDFDFEFEFEFEFEFE +FEFEFEFCFCFAFEFEFCFEFEFCFCFCFAFDFDFBFBFDFAFFFBFFFCFAFFFCFBFCFEFFF9FAFEF4E7EDE0 +C2DCBCB9D1B0B4CCA6C7DDB2BFD5A6C6DCABBBD5A0B0CC94BEDAA2C8E4B8A6C0A45A70605E9597 +96D0D994DBEA77CFE562C8DE58C6DA40C3E138B7CF3FB0C5136E782A74717EBFB8CACBB28D7A5F +7D502FAB6A468F492B7D391F743E247E4B2C7A4C29573E1B908766CFD0B6BDDAB3B3CEA4BBD7A3 +B9D3A6C2DEB5BAD9B9C7D1AB96AC82A3BDBA4A5D4B7D8735EBE48A65774676614AA87561C54123 +E44A348F3920C3C7BA495231849548E9F588606D225F735EC3E4E08B9992B2BEAAC0DDB2BBD9A5 +BFD39EC6D49FC2D4A3BED4A9B9DCADAED9A6B4E6AEBBC29986754F875D408E573E591C05813A2A +87483A61371E654F30A5A08B6E847853857D91C0D5B7E8FFA1D2F2A6D9F4B1DEF4B8E3F27BA49C +A5CFD4475D56B0B524C8D365446A346C8380A298A4AE76A2C877B98A5E7BCCD3C23C613A95B375 +E0DA745B5C1E678780B3C3B98B9689B3C1A7C4D9B0BED7A1BCDAA4B7D9A6B5DBA2BADFAABADBAA +B4CDA4BFD8B2CDE4BEEAFAE5FFFFFF91908F070808E4E3E4FFFFFDFFFBF7FCFEF9FCFEF8FFFCF4 +EEFBFF7498BFEDD0B1FFFBEEF3FEFEF8FBFBFEFEF9FBFEFEFBFBFBFEFEFEFEFEFEFEFEFEFEFEFE +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF575757191919FFFFFFFFFFFFFBFEF9 +FDFBFBFBFEFBFFFFFFCBCDCC4C5155909A9B97A0A2939C9DA5AEB0BAC3C4CED8DADDE4E4E2EAEA +E7ECECE8EDEDEBF1F1E3EBEBD2D5D6C3C7C8B9BDBFA9ACB1A2A5AB999CA493989E93969D919398 +646468D2D2D2FFFFFFFCFCFCFFFFFFFFFFFFFCFCFCFEFEFEFCFCFEFFFFFBFFFFFDFCFCFAFEFEFC +FEFEFCFCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE +FEFEFEFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFEFEFE +FEFEFEFDFDFDFEFEFEFFFFFFFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFAFEFEFC +FEFEFCFBFBF9FDFCFBFCFCFAFDFDFFFDFDFFFBFFFAEFFBEAE3F3DBCCDDC2B6D9A8B6D8A7BCDBAB +BDD7A8B9D0A0C1D4A4C1D7ABC1D9ABBFDCB18CAD915D7E7473929791CCD991D4E675CCE158C1D8 +56C8DD55CADD3EB7C731A1AD19767C417E788CB4A0C9E3C9B69A7D6C4627996040B47052702D13 +7939267D4B307E48298B552F734620715230B9A486BED4AFC5DAAFBDD4A2B4CE9EB7D0A8B7D1B1 +CAD9B099B48899B9B7475F497B8B2DDCDD6B566F3F7C6853A97361C13820DC46328C3D27C8CABA +536134799532D7EC6B5E6D1C617463BEDFDD869690B0B9A8C2DCB5BAD8A4BDD599C7D39EC3D4A3 +C2D6AABCD7AEB9DCAFB3DFAEA79674805435AD6B50925B3C5D260B81402F8340298652336E4627 +5540307E8B88A2D3D793CFED9FDAF999D2F3A5D4ECB9E0ECCAEAF0739C89A3C9CC4F5F56A8AD10 +C1CE553C652D71817B969298A67DA4C180BB7F5B75CDD0BB39582B8EAA62D5CE5B585F14699284 +B6CFC5869784B2C5A8C3D4ACBDD59FBCDAA2B7DBA4BADBA9BAD9AAB7D3AAB7CDACCDDFC3E5F5DC +F3FFEEFFFFFF908E8D070808E4E3E4FFFFFDFFFCF7FCFFF9FDFEF8FFFCF4EEFBFF7499BFE2C5A9 +FFFEF5F5FEFFFAFDFDFFFFFBFEFFFEFAFAFAFDFDFDFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFCFCFC +FFFFFFFFFFFFFFFFFFFDFDFDFFFFFF575757191919FFFFFFFFFFFFFBFDF9FDFBFAFBFEFBFFFFFF +CDCECE4D5255899494959FA0B0BABBDAE6E6F0FAFBF2FDFFFBFFFFF6FFFFF7FFFFF9FFFFF5FCFC +ECF6F4E5E8E9D9DDDDC8CCCEB5B6BDAAADB2A0A1AA90969C8F9398909397646468D2D2D2FFFFFF +FCFCFCFFFFFFFFFFFFFCFCFCFDFDFCFCFCFEFFFFFDFFFEFDFCFBFAFEFEFCFEFEFAFCFCFAFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFBFBFBFBFBFBFEFEFEFEFEFE +FCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFFFFFF +FEFEFEFAFAFAFCFCFCFCFCFCFAFAFAFEFEFEFEFEFEFEFEFEFCFEFAFEFEFCFEFEFCFDFCFAFDFCFA +FDFCFBFDFFFFFCFFFFF5FFF3DCEDD5C4DCBCB9D1ACB1DE9FB6DCA2BBDEA6BED9A6C2D9A9C1D3A6 +C6D8B3C0D7AF93B08B5276647BA3A5ABD1E69DD8ED7BC3D967C2DA55C9DE41BBCE39B7C93FACB1 +157679277573A0CBB9D8E8C8C9CBA58F5940854930B76D5296452E7024135F170E85553C85502D +884E258A54276E441B7B5834C0D0ADD4E6B9BCD19EC2DAA7C1D6ADBACDAFCCDEB495B5899DBFBF +4E70537F972DD1D958506D3C7F6A57A97064CB442DDE4E3B823B28C6C7B353632C7D9A2CCCE55A +56671064736ABADDD983928EACB6A8C4DCB8BAD9A3BBD696C4D19AC4D4A3C5D7ABB9D1ABC7E5BD +B0D5AB825E40914E35B35F498B522F582A09864E38964E2F91563381502F4F2F22959BA0AEDBE8 +8DD7F79FDFFF99D5F3A9D7EBC2E3E9B8D0CC4A745999BBBC566157ADAF08C4D1513E6734687068 +929496A78FB0B382B779576DCFCCB43F592991A95CD4CE544A5302649381B4D7CC7D947EA9BD9F +C3D5ABBBD39BBAD8A1B6DCA5C0DAAFBFD7AFBBD1AEC1D1B7E3EFDAF6FFEEF4FFF2FFFFFF929191 +070707E4E2E4FFFFFBFFFCF7FCFFF9FDFEF8FFFCF4EEFBFF7499BFE5C1ADFFF6EEFDFCFEF4FFFF +F7FFFDFCFCF6FEFEFDFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFFFFFF676767151515F9F9F9FFFFFFFDFFFAFEFDFCFDFFFDFFFFFFC7CACA454A4C979FA6 +ADB5B9D2DADDEBF2F4E6EFEDD0D9D7C6CFCEC6CDCDBBBFBFAFB2B4B8B9BBB5B6B7ACB1B4AEB2B5 +B2B6B9B0B5B6ADB1B4A6ABAE9E9CA59A98A08F8E94646468D2D2D2FFFFFFFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFEFFFFF9FFFFF9FCFCFBFEFEFBFEFEFEFCFCFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF9F9F9F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 +F8F8F8FDFDFDFEFEFEFEFEFEFDFDFEFFFCFCFFFEFCFBFCF7F9FEF6F9FFF6F7FDF2F2FAF4E5F1E5 +D5E7D2C1DEB6B0D29FB0D99BB1DFA2B8DDA1BAD99FBAD39FBDD5A6D1E8BFA9C4A86B8771618477 +91BFC4A6DAED89C3DE74CFD46AD0DC55CADB53CCE341B5CF2D97B215746269A391BAD2B7D4DDB1 +DDDEAD87804C79411C9F6346995946955A50DAACA3906B6355331A7E4D2C8B481FA15D348A5532 +5A3218AC8D79BEC89EB9DA9FC0D09DC9D6B0BCD8B8CADDB58CA78B93B4A8475F5A7E8F24E7E46D +5F6A5074685C987C69B24632C33639832C3EC8C7CC4F5B30839E3ACFE17352622B5B7276BDD8E0 +849587A7B990BEDF9EBBD898C3D199C6CFADC1D0ADC1D6B3C0D3AEC5CDA88F9269764418AA5F42 +AB5C486A3E25543314683B209555438D412A99482D935B4A59494E8E9AB3BCDEF3A5D0E9BEE4FC +C9DCE49CA9B26C7E8C3C4E53A0BED0526350AEA33EC0C46B3C6C4B647686908F9BAF9BB385678F +5A4A62D6D2D2455F5194AE72DFD281504D156D8F77C0CBDD7A827FABC09BCBEAACB9D99DBDD8A7 +BFD8A3C0D5A7BED1A7C8D8BAE1EDDCF1FBF2F6FFFFF9F7F9FFFFFF909090080808E2E3E2FFFFFF +FFFCF7FCFFF9FDFEF8FFFCF4EEFBFF7499BFE7CAABFFFAE4FAFBF5F5FFFEF9FFFAFEFDF4FEFEFD +FEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF696969 +141414F7F7F7FFFFFFFCFFFAFEFCFCFCFFFCFFFFFFC8CACB4E53569BA2AAAAB1B6B8C0C3BDC5C6 +AFB8B7B3BCBBCED8D6DAE3E1DDE3E3D6D9DAD0D0D3CBCBCDB9BDC0B1B5B8ABAFB2A1A5A8A0A4A7 +9CA1A39A97A297969C8F8E95646468D2D2D2FFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE +FFFFF9FFFFF9FCFCFBFEFEFBFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCFAFAFAFCFCFC6D6D6D6D6D6D6969696A6A6A6A6A6A6A6A6A6A6A6A6A6A6A +6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A +6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6969696D6D6D6B6B6BB9B9B9FFFFFFF8F8F8FDFDFDFEFEFE +FDFDFDFAFAFBFEFEFBFEFEFAFBFDF7FAFEF6FCFFF4F7FEF1E6F2E1D1E0CABFD3B5BAD6AAB7DBA3 +B5DCA1B7DB9DB7D799BCD69DC7DAAEC9DDBBB1C6A85A7D6F648A809CCAC9A1DBE688CCE17FC5DF +60C8DC55C1D356C4D54AAEBE287F8B1A677270B397AFDBBFC3DEB8D0DCACA5A0716D52278A522D +9862467D4939B28A84FFF0ECD6C8C3432D1B734B308E4F2D9D552F9D5A3A8E523776503BA09E75 +C7E3A8C1D9A4BDD6ACB0D4AFC1DDAD92AA8AA6B7AE4A4F547E8627E0E17949604E655F5A927C6B +A745299B1D115D1A18C2C2C64856377E964DCADE89546435607878B2CED07D8F7FA3B78FBDDF9F +BADA9AC6D79EC2D3B0C0D4B2B9CEABCFDAB7AFAB85665A338F5A31A66046995444A57D6C917462 +4E2C1F804730924D309F4F2D92513A6C4B48726A76BDD2DCBFDFEFBBDDE991A29F63706D90A1A6 +879E9DA4C3D0405340ABA147C0C476365944677780A39CA9A486A5674070472F50D4CDD53A5146 +8BA56EC7BC7253521D749381B7BDD6758075A7BB91C3E09EBAD99BBCD8A4BFD6A3BFD0A7C1D2AC +D0DEC1EFFBECF5FEF6F7FDFEFBFAFAFFFFFF919191070707E2E3E3FFFFFFFFFCF7FCFFF9FDFEF8 +FFFCF4EEFBFF7499BFE4CFA5FFFCDCFDFFF0F7FFF9FAFFF7FEFEF3FCFEFDFEFEFEFEFEFEFEFEFE +FEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF6C6C6C121212F6F6F6FFFFFF +FEFFFAFEFDFCFDFFFEFFFFFFC6C9C942484A929CA19AA2A69AA5A7A4ADAEB6C0BFB9C2C2BBC5C3 +B9C1C0BCC2C2B9BDBEBBBCBEB4B4B6ABAFB2A5A9ACA5A9ACA3A7AA9FA3A6999EA094939B94939A +919096646368D2D2D2FFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9FFFFFAFCFCF9 +FEFEFBFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FFFFFFE9E9E90C0C0CBBBBBBA9A9A9A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7 +A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7 +A7A7A7A7A7A7A9A9A9AFAFAF6D6D6D676767FFFFFFF9F9F9FDFDFDFEFEFEFCFCFCF7F7F9FEFEFB +FDFFF9FAFEF6F9FEF0F5FDEBE0EBD8CCDABEC0D0AEC0D7ADB6D3A0BBDCA5BFE4AABCD59AC1D89F +C3D6A5D2E0C294A8955166597EACAFA8DFE58ECEDA82CFE175C9E06AC2DB4DC5E15AC7DE43A4B2 +256F6D42776E9AC3B5BCDDB1C6DEB2BCD3A3C4D09D78683C6F3B1A9A62427B4D37815E56F2E4E5 +FFFFFFF1FCFE938B80604332874F34924224A14E31A9553B8251386E5B33B8C48DC9E7B2B5DAAB +B2DEB3B9DDA890A682C1C0B84D3E4D494D00767F292D46406E676A91726AAC4626C74C36753C28 +CFCFD13F4E3D3A54296E82482C401C668278A2BFB77D8F7AABC097BEE1A4B9DB9CC2D79FBBD2AF +BCD4B1CBDEBBC9CAA67F6C47694821A7694B925641845045FFF9F4D9CECC6B585B673C1F985B39 +9648239C5131945B4C693F3E999496C6D3D57C9290546050B6C0ADD6E4D9809E94A1C1C4465A44 +4B49005F6122263C2F6A75799C8D9BA0749CB883C37B5D88D8D0E2253B3236531F5D5516373C11 +75958AA8A8C57E8777A9BD8FBEDB95BAD79ABDD7A3BFD6A4C0CEACD4E3C2EBF6DFF8FFF2FAFFFB +FCFDFFFAFAFAFFFFFF919191070707E2E2E2FFFFFFFFFCF7FCFFF9FDFEF8FFFCF4EEFBFF7498BF +D8CFABFFFFE3FDFFEEF8FFF5FCFEF8FEFCF5FEFEFDFDFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF7C7C7C0E0E0EEEEEEEFFFFFFFBFEF9FDFBFAFBFEFB +FFFFFFCACBCB4C5253919AA08B95999FA8ABB6C0C1C7D1CFD9E4E3E4EDECF3FAF9F4F9F9F9FCFD +F4F5F7E6E7E9DDE1E4D4D8DBC3C7CAB0B4B7A6AAAD9A9FA197969F94939C939298666569D3D3D4 +FFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF8FEFFF8FEFEFBFEFEFBFEFEFEFCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFE6E6E62F2F2F +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFB3B3B3666666FFFFFFF7F7F7FDFDFDFEFEFEFBFBFBFDFDFDFCFEFBFBFEF8F9FFF4F0F9E6 +DAE6CCCDDAC0C2D7AABAD19FB8D19ABEDCA1B9D6A0B5D4A3C3D9A9CDE0B7C3D4B6768C7D5E7A79 +8CABB49CDDEE8FD5EA80D4EB66C5DE5CBCD164C5D657C4DC419DAB28706F67917CADC6A2C0CEA6 +CEDFA2CCD7A0CED9A595996A61441F9651388F5C44765544B5A6A4F7FFFFE1F2F9E8FEFFDEE1DE +78675E6A3B2CA2543EAA5037AF50369B5D3D835531746C3BC2E2ACB6E2B0AED7ABB3D9A0A4B88E +CFD1BE7F777D2A3C002E49065A6860C1A7AEC18984D34E31D9432C7F2F19E1E8E37D9183002004 +3A5625526D45A5C6B097B39E798B71B7CAA2BDE5AAB9DFA2B9D49AB7D4AAC2DAB1D6E4C1968768 +68402496593E894B35794F3ECCB7ADFFF1F6F9EFF8ACAAB858402875482C95512CA44F2D9A4D33 +95503C6B4A3A6A5F547B826FB7C39DCDD8B0C4D5B681A88FC2E3D4668261273F00425718586E56 +ACB9B49E8A98B77EAEBE7FC47C5B8CEEEEFE59756021470F525C1A5E6D43A2C7B79A9AAD8C9581 +BCCE9ECEE6A2C1DFA4BAD0A5B9CCA5CAD4B9E1EAD1F3FAE8FDFFF8FDFDFBFCFCFEFDFDFCFFFFFF +909090070707E4E4E4FFFFFFFFFCF7FCFFF9FCFDF6FFFFF7EFFCFF739ABDD3CDB8FFFFF2F8FBF1 +FCFFFAFCFCFAFFFCF8FFFEFEFDFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFFFFFF7B7B7B0E0E0EEDEDEDFFFFFFFBFEF9FDFBFBFBFEFBFFFFFFCACCCC4E5354 +8F969E99A0A4BDC5C8E2E9EAE8F1EFDDE6E5D9E3E2CFD7D6C3CAC9BFC2C4C5C6C8C1C2C2BDC1C4 +B9BDC0B4B8BBADB1B4A7ABAEA0A5A796949D94939B908F96666569D3D3D3FFFFFFFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFEFCFFF8FEFFFAFEFDFBFEFEFBFEFEFEFCFCFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFE6E6E62C2C2CFFFFFFFAFAFAFDFDFD +FDFDFDFDFDFDFEFEFEFCFCFCFEFEFEFCFCFCFDFDFDFDFDFDFEFEFEFBFBFBFFFFFFFDFDFDFDFDFD +FDFDFDFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFBFBFBFFFFFFABABAB686868 +FFFFFFFDFDFDFFFFFFFDFDFDFBFBFBFAFBFBFBFFFBFAFFF9F1F9EAD7E3CBC4D1B4BACAA7C1D9A9 +C9E2AABDD99CB4D196BBD8A6C3DFB6C2D9BBA3BA9F718B795F827D94BFC8ABDBEE8CD4EA76C7E0 +70CBE767C9E164C2D25FBAC433888A226661699783BCD7B2CBE0B0BBCE99C5E0A0D0DBA6CDCFA4 +6058326D4A2E9A5842683E2A9C8278F1EDF1E8F5FEEBF8FFECF5FBF2FAF6C8BBB57A5449823C29 +A24F3AA74D38AA623EA665425D3E16A4C38CBAE2B0BFDBAFBDDAA39CB383859977576B636A9038 +5B84383D5539846E659D5D51CB351AE23B2AA543348B998C627D64568152698F4D3C5D25688C6C +688469809374C7DCB3B6DEA4B4DDA1B4D19AB9D4A0C8DFB0B7BF995E472E7C4733A8604D6C3025 +998173FAFBEFF1ECF2FFFAFFF2F8FF8A80755333218E5437A151319E5031AA5E437E4A356C5540 +AEB294DCE8B9C4D2A1CAE0B77EA78476987A4C7142608D3B5D883B3456225D6E66897380C184B3 +B975BC7B5D87A4ACB04D744D51843F667E35405F2C4C7C6045484D9EA392D1E3B5BBD393C1D9A8 +BBCFAFC1D0B4E7ECD5F8FCE9FCFEF0FDFDF7FDFCFDFFFBFFFCFCFBFFFFFF909090070707E4E4E4 +FFFFFFFFFCF7FCFFF9FCFEF6FFFDF6EEFCFF739ABDCAC6C0FFFFFFFCFBFBFDFDFFFEFCFDFEFAFA +FEFEFEFDFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF +8686860B0B0BE8E8E8FFFFFFFBFEF9FDFBFBFBFEFBFFFFFFCACBCB4B50529BA3AAABB3B7BDC5C8 +BEC7C8AEB8B7B2BBBAC1CCCBCFD7D6D2D8D8CDD1D1CECDD0C2C2C4B2B8BBABAFB3A5A9ACA2A6A9 +9EA3A59BA0A29E9BA598979E929198666569D3D3D3FFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFEFCFFF8FEFFF8FEFDFAFEFEFBFEFEFEFCFCFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDFFFFFFE6E6E62D2D2DFFFFFFFCFCFCFFFFFFFEFEFEFFFFFFFCFCFC +FFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5FBFBFBF7F7F7FFFFFFFFFFFFFBFBFB +FAFAFAFCFCFCFBFBFBFCFCFCFCFCFCFFFFFFFDFDFDFFFFFFABABAB666666FFFFFFFDFDFDFBFBFB +FCFCFCFAF9FAFBFAFCFBFEFBECF2EADBE6D6C6D2BAC1D0AFBECCA9BBD7A2B9D69BC3E1A1C7E3A7 +AFCA9EC6DCBCA8C1B0637D6E607D73B1DBE0ABDEED8AC6DE83D1E779D0EA5DBFDA65C4DB59B3C0 +398B90225F5481B19FC1DDC0BCD1A3BFD79FBDDB9EAEDA95CBDAAACBC6A34A351B7C573E854832 +76503EDAC4BEFEFEFFDBE8F7EBF0F9EFECF1E8EFECFAEFE8BA958A6B2B1B9A4E3D9B4B38AC5C35 +AA603D734B24A6BF8BBDE3B0CCDEB4CCDEAD8BA773395F32335E47669E3D6FA35246713F584D35 +80452CE2492BE43A28A13D3346514441613E699A596F9A47567A38456A452B4929859975CAE0B6 +B7DFA8B5DFA3B1D197C4DA9FC9DBA8878C654E331D995E5293433A89524AD6CABCEBFAEDF0EEF5 +F8F1FBF8FFFFCECFCE6F594F7A4631A05637A55837AB604291533C795C44969976CCDCA7B8C993 +CAE5B66B966C284C23416A3070AE526CA64A6796493F514A695660C17FAFCB87C970567946544E +51804C72AF5D7598445A82463369441E2520A8AC9ED9E8BDBFD79AB9CFA4BDCFB5D0DFC8F9FCE9 +FFFFF2FEFEF3FEFBF9FFFBFCFFFAFFFBFBFBFFFFFF909090070707E4E4E4FFFFFFFFFCF7FCFFF9 +FCFEF6FFFEF6EEFCFF739ABDB5C3E0F6FFFFF5FDF2FBFCFAFAFDFFF8FFFFFEFDFCFEFEFEFEFEFE +FEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF8787870A0A0AE7E7E7 +FFFFFFFBFEF9FDFBFBFBFEFBFFFFFFC7C9C9464B4D92979E94999F9FA3A8A7ACAEB4B9B9BCC2C2 +C5C9C9C6C9CAC2C4C6BABEBFB8BDBEB6BABBADB1B1ADB1B1A7ACAEA7A9B0A5A8AD9EA2AA95949C +939299949399616065D2D2D3FFFFFFFBFBFAFEFEFBFFFFFBFEFEFBFEFEFBFFFFFCFCFCFBFEFCFC +FEFEFCFEFEFCFEFEFAFCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFFFFFFE6E6E6282828FFFFFFFEFEFEFFFFFFFFFFFFFFFFFFE9E9E92A2A2A000000FFFFFF +FCFCFC0E0E0E080808E9E9E9FBFBFBEBEBEBFFFFFF2B2B2BDFDFDFE5E5E5EFEFEFF2F2F2FDFDFD +FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFA7A7A76A6A6AFFFFFFFEFDFEFDFFFEFCFEF9F9FEF9F8FFFA +E7F3E3D2DEC6C2D1AFC0D2A8C2D4A9C4D9AEBBDAA5C2DDA3B5CD92B8CD9CCDE5C08BA48A4D6A61 +7FA4A3AADDE49CDEEC8CD6E08FDBE46CB8C86EB1C481C9DA58ACAB317B72275C51C4D9BBD7E7C4 +C3D1A5CAE1ABB6E0A6A6E0A3BADA9FD1DDAABDAE8A4E2918724941673E3EB3ABA3FFFDF8F4F2F4 +F7F7FAEFF0F2F2F1F2FFF7EEFAF9F7E5E9EA715D547C4A2FA0562CA55E2D995731714A29D3D8B3 +B9D1A1BDD1A2C7DEA68DA77631542761985F5EA35C54A84F7DB579705E3F622A14DB5F50DB4F48 +80422A43453C889E777199557EA45A85AE6D4F834A1229008AA177CEE4B7B9D3A0BADBA0B6DE9C +CEDEB2BFC49A7D704A634125885A47653124CBBCB0FFFCF3ECEBE9E7EEF2E8EFF2EBF0F0F7FCF7 +B9B4AF624C487E4A39965031AE572CB8653D744522747447C4EBA8BADE9CCDE3AF809360395D29 +6BA6605FA5435896337BAF564C5D59554762B689C3C39CCF5C5E67385F4579B0686799586B985E +7FA66F4E713C183C07A4B38CC6D5ADCDDCB3C6D4B1D0DCC6E9F7E6FDFDF1FDFFF3FCFDF5FBFEF8 +FCFEF8FCFDFAFDFDFDFFFFFF909090070707E4E4E4FFFFFFFFFCF7FCFFF9FCFEF6FFFEF6EEFCFF +739ABDB6C4DBF7FFFFF6FEF0FBFDF7FBFEFEF9FFFCFEFDFDFEFEFEFEFEFEFEFEFEFEFEFEFCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF909090070707E4E4E4FFFFFFFCFEF9FDFBFB +FBFEFBFFFFFFC8CACA4D52549398A093989D989CA1AAB0B2BEC4C4D6DDDDE9ECEEF7FAFBFBFFFF +FCFEFEFBFDFEF1F5F6E1E5E6D7DBDCC2C7C9A6A9AE9C9FA493989F929199919097919096636267 +D3D3D4FFFFFFFBFBFAFEFEFCFFFFFDFDFDFBFDFDFBFDFDFBFDFDFBFEFEFCFEFEFCFEFEFCFEFEFC +FCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFE6E6E6 +292929FFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFD0D0D0232323A2A2A2FFFFFF454545686868 +CACACABABABA6E6E6EAEAEAE525252A9A9A92A2A2ABBBBBB525252FFFFFFF8F8F8FFFFFFFFFFFF +FFFFFFFFFFFFA9A9A9686868FFFFFFFDFBFEFEFDFAF9FCF4F2F6EAE5EADDC9D6BDBFCFB0C0D0A9 +C0D3A7C2D7AABED3A7BED7A5C3DAA6C8DEA9B5CB9F809A7A5D7A6388ACA8B7E7EA9EDDE883D3E4 +6FC5D574C8D65DBDC456A4AF4E90992A655F638A7CB7C6B5C9DBBEBED6B1B5D3A3BCE0A8B4DEA4 +ADDBA2C1DCA3CFDBABA89A7959382958372D92746DF3EDE2FFFFF8EBEAE7E8EBECF3F5F5F2F4F2 +F9F2EBF4F5F1FAFFFEBBB2A6715036844F2AA35F2F985A326F4923DFE7BEBDD7A8B5CE9FC3D9A9 +8AA478294920558150578E4D569549608C4F56562E4430138C4739A34B475B362830402C517747 +5F954A5688375A8C43306B28304A269DB792BED9AFB9D9A9B4DEA9ADDEA3C8DDB0B1B2897B623F +774B31663D27916D5AF8ECEBFAF4F3F3F1F4F1F3F8EEF1F3EEEEECF0F8F9F2F0F1917C7C76463A +9A553AA14B25B568468B6044999C77C3E8AFB8DCA2D2ECBE6C7F633458384A8052508F47518945 +59874B4151434D47578367978C77A546515B325A44618C49537D3E5B8348587D482D4E1D3C5F2F +B5CC9FC4D9AEC3D3ABD2DDC1E7EFE0F8FDF6FEFFF5FCFDF3F9FAF2FDFEF8FDFEF9FCFDF9FCFCFD +FFFFFF909090070707E4E4E4FFFFFFFFFCF7FCFFF9FCFEF6FFFDF6EEFCFF739ABDB8C4D7F8FFFD +FAFFEFFBFCF3FDFEF9FBFFF8FEFDFDFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDFFFFFF999999050505E0E0E0FFFFFFFBFEF9FDFBFBFBFEFBFFFFFFC6C8C9 +4E5355969BA19DA2A7BBC0C4E5EAEDFCFFFFFBFFFFF3F7F8EEF2F3EBEFF0EAEDEEEBEFEFDEE2E3 +D4D8D9CFD3D4C7CCCEBEC0C6B2B5BBA4A8AF99979F96959C929197656469D4D4D5FFFFFFFBFBFA +FEFEFCFFFFFDFBFBF9FCFCFAFBFBF9FEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFCFCFAFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFE6E6E6292929FFFFFFFDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFBBBBBBCDCDCD090909FFFFFF4D4D4D5F5F5FEBEBEBC8C8C83A3A3A +898989292929A8A8A81B1B1BE4E4E4020202F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFACACAB +5E5F5FFFFFFFFFFBFEFFFFFBF6F8E9E5E9D2D5DABFBCCCA7C2D3ABC2D3A7C2D7A7BDD4A7BCD2A8 +C5DAAECFE4B8BED4A96F866757775F93B6A6BEEEF0A1E0E880D2E573D4EC68C5DB77D0E456AAAD +124E53002B2A7FA08DBFCFB2D5CEAFC0CFAFB7D2ABB7E2B1A5D69FB1DBA4BCDCA8C3DBA5CDD3AB +90836A583C316D554EDDCBC3FFFFF3FFFFFDFCFDF8FAFFFBFFFFFFFDFFFAFFFFFCFBFFFCFCFFFF +F2F6E9A598816D54379C5E34985F3A624017E0ECBCC2DEACBEDBACC6DAB092AB8247643D3E6135 +3E642E355D1F3F5C213C521E20391233342B4837390F0A06474F3536592831691E24580838681E +1C500D596F4AB2C89FC6DCAFBDDBAABADEA9B1DEA6C4DFB6A7A37F6A4128804C356E5037C2B99B +FAF6FFF0EDF5EBECF2EFEFF2F4F2F4FAF4F4E5ECF5F8F8FFD9CDD47247448D4C36A1502D9F5230 +92654AA6A281BDDDA5B2D099D4E8BC829075435C413A643C3362233760254362353E4E382B363D +31395F334269102C3428533F3A59194361293657223A5A282F501F618457B2CE9CBDD4A8BDCDAA +E8EFDDF7F6F1FDFAFDFDFFF6F9FBF3FCFDF7FBFCF8FBFCF7FBFEF7FCFCFDFFFFFF909090070707 +E4E4E4FFFFFFFFFCF7FCFFF9FCFDF6FFFFF7EFFCFF739ABDB0BACFFAFFFDFBFEEDFEFEF5FDFDFA +FEFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFDFDFD +FFFFFF9F9F9F010101D7D7D7FFFFFFFBFEF9FDFBFBFBFEFCFFFFFFC7C9CA4A4F519CA1A8B3B8BD +D5DADFDEE3E5DBE1E1C6CDCCC8CCCDC3C7C8BDC1C2B4B9BAB4B8B9B1B5B6AEB2B3AFB3B3ADB1B4 +A9ACB1AAADB3A6A9B0A19EA69B9AA1908F95646368D0D0D1FFFFFFFAFAF9FCFCFAFEFEFCFBFBF9 +FDFDFBFBFBF9FEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFE6E6E6292929FFFFFFFDFDFDFFFFFFFFFFFFFFFFFF +FCFCFC8A8A8AE7E7E73D3D3DB1B1B1444444555555B9B9B9323232717171757575232323959595 +141414D3D3D3000000E6E6E6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF464645FFFFFFFDFFFB +EEF3E5D9E0C7CBD6B3CAD6ACC1D5A6C4D8A8BFD5A4B8D0A3BDD3AEC0D9B8BDCFB196AA905F7560 +688C7FB8E6E0B4EAE88CCED885D8E86BCEE768CCE471C4D964AAB6434B4F1F1B1D372D24BAC4A4 +D1E4B9C5D6A5BECEA8BBD9AFB2DCAEB6E3B0B9DFACBAD6A4C0DDA7CCD5B16D615147332F72635C +B6AFA6BFB9ACB0AEA5B4B8B4B4BABAA8AFACAEB1ACB7B7B6ADB3AF9FAEA4ABB7A89A9B8E51473D +7B503E875D434A2D08D9E4B0BED8A7C0D9AEC6D9B1BBD3ACAAC79B9AB989A5C08EA5BB85BACD9C +96C28B487B5742787C4E78801A2020755D49B8C59BA3C78CA7CC8AA5C38EA4C599B5C99CC1D4A2 +C9DBA3C0D398C3DAA2C7E2AE89AF966E705D4C291E72423ABBA698FCFFEDFFFFFFFBFAFFF7F4FA +FAF5F8FCF8F7FFFFFFF5F6FCFAFAFFFFFFFFC3A6A87D4C3CA25E40A55A347C4A2CC1B392BED099 +C3D79FC4D3A6C5D199B9CB99B6D098B5D58BB2CE87C0D59E9EC5A9558B883077903A86A1286668 +A2D4C0BED29AB4CC96BAD3A0B6CEA0AFC99EBDD5ABBED7A7C5D9B4D1DEC5FAFEF6FFFDFEFFFCFF +FDFCFAFDFEFBFBFCF8FEFFFAFEFFFAFEFFF8FCFBFCFFFFFF909090070707E4E4E4FFFFFFFFFCF7 +FCFFF9FDFEF8FFFCF4EEFBFF7498BFB4BCD4FAFFFFFAFCEFFEFCF8FDFBFDFDFDFCFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3ADADADA2A2A2 +A5A5A5A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4 +A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4 +A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3 +A3A3A3A3A3A3A3A3A3A3A3A3A1A1A1B6B6B6FFFFFFFDFDFDFDFDFDFFFFFFFFFFFFAFAFAF000000 +D2D2D2FFFFFFFBFEF9FDFBFBFBFEFCFFFFFFC8CACB474B4E9CA1A8ADB2B7BBC0C4B1B6B8ABB1B1 +B1B7B7C6CACBD9DDDED8DCDDD1D5D6C8CCCDC1C5C6B6BABBAFB3B4A4A8A9A0A2A8A1A4AA9A9EA5 +9B99A1919096919095636266D1D1D1FFFFFFFAFAF8FBFBF9FCFCFAFCFCFAFDFDFBFBFBF9FEFEFC +FEFEFCFEFEFCFEFEFCFEFEFCFCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFFFFFFE6E6E6292929FFFFFFFDFDFDFFFFFFFFFFFFFFFFFFEBEBEB878787D2D2D2 +F6F6F6DBDBDB999999A3A3A3CBCBCBAFAFAFD3D3D3A6A6A69B9B9BA3A3A3929292D5D5D5838383 +DFDFDFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFAEAEAE474748FFFFFFEBF3E5D5DFCAC0D0AFBFD2AA +C3D6A9C1D6A5C2D8A6C3DBABBCD3ADC1D9BCBCD3BD90A5935F766985A19DB4E1E49ED7E097DBE4 +7ECFD976D4E65CC6DF70C6DE69A1AE47676E623E3A63343062372A746C4CAFC298C4DEB4BCD5A7 +BCD5ACB9D2ABBBD7ADBEDCACB5D39EB8DBA6C0D2AF494435625051857473887F778880787D7A76 +7E83847A8086767E827B7F827E7A7F7C807E7781776E756C84817F7C70766B51566C4B42543C1D +E2EAB6C3D5A5C2D1A9BDCDA7C0D8AABADBA8BADEA7BAD8A1CBE0A8C4D7B4A2D7A1639076427687 +356972332823542E1DB1B390BDDEAFBADFB3B7D7B6B1D3BDB6E0B8B9DCAFBDDCA8BBD4A2BED7AD +9FB895426965525E5A321F22634247B0A0A1C5C7C5BCBEC2C1C0C1C4BDBDC1BBB7C1BFBDBDBEBF +BFB8B3C5C3C5BEBBC5C8B6BA6B463A7C46298B543661432EBFC1A7C4E2B7BEE0B1C4E1BFC4E1A8 +C3E2B2C1E4B2C4ECAAC0E4A8C9E6BA99DABF47A5A01694A6239CB217706DA2DBC4C4D8A1C2D7A4 +C2D5A6C5D6ABC4D2ACC2CEA9BED0ACD8E6CAF2FAEBFCFFFDFFFEFEFFFEFEFDFDFEFDFDFDFDFDFC +FDFEFAFEFFF8FEFFF8FCFBFCFFFFFF909090070707E4E4E4FFFFFFFFFCF7FCFFF9FDFEF8FFFCF4 +EEFBFF7499BFB6BCD9FBFFFFFAFBF2FEF8F8FFF9FFFCFBFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDB8F8F8FDFDFDFD9D9D9D9D9D9D8D8D8 +D8D8D8D8D8D8D8D8D8D9D9D9D8D8D8D8D8D8D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9 +D9D9D9D9D9D9D8D8D8D8D8D8D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9D9D9D9 +D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8 +D8D8D8E2E2E2616161FFFFFFFBFBFBFBFBFBFEFEFEFFFFFFAEAEAE000000D2D2D2FFFFFFFBFEF9 +FDFBFBFBFEFCFFFFFFC7C8CA4A4F519CA0A8999EA39DA2A6A1A6A8B6BDBCC1C8C8CBCFD0C6CACB +C2C7C8C2C6C7C7CBCCBFC3C4B2B6B7AFB3B4A8ACAFA1A4A9A0A3A9979BA298969E919097929198 +626065D0D0D0FFFFFFF8F8F7FAFAFAFAFAF8FDFCFBFBFBFBFBFBF9FEFEFCFDFDFAFCFCFAFCFCFA +FCFCFAFCFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF +E6E6E6282828FFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFDFDFDFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFAAABAB575658F4FFF0CBDBC5C3D2B8BDD1AEBCD5ABBBD5A7C2D7A6BFD5A3 +BED5A6D1E8C6B3C9B37C9183687D7298B1ADBEDDE4A5D8E798DAED7ECEDF6BC4CD6BCEE262CDE6 +519EB332555D393A387242347A3D30793C2A573E247D8464C4D2B8BFE3ADC0D7ACC2CBABC5CFAE +C1D6ABBCDFA7B5E0AB97AD8D3B392FC8B7BCFFFCFEFDFCF5FDFBFAFDFCFEFBFCFFF7FCFDFAFCFD +FCFCFEFCFBFCFBFDFAFBFDF9FCFBFBFFFEFFFFFCFF7A6D8342282B69513AE2E5B2C5D1A1C9CEA8 +C6D1AABFD7A8B8DDA3B4DC9DBDDDA0BFD79DBED3BCA1D9A77697842A55712C5F6A43261D5C3724 +59624059835876A5816D98826A978B64A585649F7964966B789F7A5E816748685A7AA2AB6B7F88 +211E2B7D6D7896889683818C7F7F828885838F89808D857E848581848B8B8B7D718C858482828A +95898E8B6E617246296C4D3D4A413981948B97C8A982B89686B7A28CBA938CBB9F8ABB9D89BD91 +8CBC9893BCAD63B79C1C94900098A810A7B80D766FA1DEC6C7DBA4BFD3A2C6D7ABC7D4ABC7CDAA +C7CAA7D2DEC2E7EEDAF8FCF5FCFFFFFAFFFCFDFFFBFFFEFFFEFEFFFFFEFFFCFDFAFCFFF8FEFFF7 +FBFBFBFFFFFF909090070707E4E4E4FFFFFFFFFCF7FCFFF9FDFEF8FFFCF4EEFBFF7498BFACBAD2 +FCFFFFFEFDF3FFF9FAFFFAFFFDFEFFFFFFFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFD8D8D8A7A7A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D6D6D +FFFFFFFFFFFFFFFFFFFEFEFEFFFFFFBCBCBC000000C8C8C8FFFFFFFBFEF9FDFBFBFCFEFCFFFFFF +C7CACB50545896A09C8A9193A0A5AAC6C8D0D7D7DBEFF0EEF5F9FAFEFFFFFFFFFFFFFFFFFFFFFF +EDF1F2E1E5E6D7DBDCCBCFD1B4B7BCA8ABB29B9FA794919B939299919096616166D1D1D1FFFFFF +FAFBF5FDFEF7FCFDF7FEFFFAFEFFF8FEFFF9FCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFE5E5E5313131FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +B5B2B2605A59E9F1DABED0AFB9D5A9BCDCA4B9D79FBFD8A3C3DCAABAD4A9BED8B3A4C1A96D8877 +68857AA7CCBCBBE7E19DD8DA91D9E780CFE277C7DF78CDE666BCC758A6A3315D503F4239795F5B +79472964331A8F54427C4032644633899171D7E3B5C8DEADB2D4A0AFDAA3B7E1AAB0D9A5C4DEAB +ADAF86635645F5EFF5FFFFFFFFF3EBF5FFFFFFFFEFFEFFEBF1F6FEF5F8FFFFFAF5FAFEFFFDF5FF +FFFBFFF6FEEDF5FFF2FFFFFF9F9899514F50676E61D5E5BCC4DAA7B9D0A5BFD8A8C1D9A9BFD7A7 +BFD6A8BFD9A9BED5A4B6D3A8B7DCB968907831443762534C613935864B354E312215251E185F62 +0E6D7B0574890C798A0E6D7D034C5A00313B2C5D5E83B5B089B2B72B3E43797478FFF9FFFFFAFF +F5F5FCFEFBFFFFFBF9FFFCF4EFFFFCEDFAFDFFF5F9FBFDF8FBFEFFF5F8FEFCFEFFFBF4EDC9BCAC +4E343339423E2B635D1A79790971740C727A14757D11727B0E72790B73790A757B09737700888A +008E8F00A2AC0DAFC00F777DA8D6C9AFDAA2B4D9A2BCD69BCBD6A9C0CBABC8D4BFE8F1DFFAFEF2 +FFFDF9FFFBFEFFFCFDFCFCFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFEFEFEFFFFFF919191 +070707E4E4E4FFFFFFFFFCF7FCFFF9FCFDF6FFFFF7EFFCFF739ABDA9B9D1FBFFFFFDFEF3FFF9FA +FFFAFFFDFDFFFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFD9D9D9A4A4A4FFFFFFFDFDFDFCFCFCFCFCFCFEFEFEFDFDFDFEFEFEFCFCFCFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFBFBFEFEFE +FDFDFDFDFDFDFDFDFDFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFDFDFDFDFDFDFDFDFD +FDFDFDFEFEFEFFFFFFFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFFFFFF6C6C6CFFFFFFFFFFFFFFFFFF +FDFDFDFFFFFFBFBFBF000000C5C5C5FFFFFFFCFEF9FDFBFBFBFEFCFFFFFFCBCCCD4E545595A09D +9BA2A3C6CBD1F2F5FCFFFFFFEDEDEDDEE3E4D8DCDDD1D5D6D0D4D5D1D5D6D0D4D5C5C9CAC2C6C6 +BFC4C7B9BCC1B0B3B9A7ABB19E9BA396959B908F95626066D1D1D1FFFFFFFAFBF5FDFEF8FBFCF7 +FEFFFAFEFFFAFEFFF8FCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5FFFFFFE7E7E7191919E9E9E9D1D1D1D1D1D1D1D1D1 +D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0D0D0B0B0B0D3D3D3DDDDDDD3D3D3CFCFCFD1D2D2 +D2D1D1D2D1D2D2D1D1D1D1D1D0D1D1CFD1D1D2D2D3D2D2D2D5D6D5D9D9D891928E585752DBE9C8 +C1D4AEC0DBABB9D8A1B9D49FBDD6A1C3DAA9C9E1B69DB69667847384A19BB9D4D4B6E8E7A6DDE2 +92D4E18BDAEC71C4D972C8DD65C4D036848841756D777E6F695543A27A687843215A280881462C +90503D6D452E655D3DB5BE96CADDB1B3D7A3B7E5ACB3E3A7A7D69AC3D7B0B6BB9488846BFEFFFF +F6F9FDFAF5F4F4F9FCFAFCF1FFFFF4FEFFFFFFFFFFFFFDF4FBFEFFFCFBFFFBF7FBF5FAEBF4F8EB +FFFFFFB5B3BD9D9DA6787F76CEE1B5C1DAA5BAD4A8B9D5A0C2D9A5C9D6A8C3D4A7BBD4A6BCE1AF +BED8B0C1D0B26D6F5C63493E8452457837277C422E71564634463C2F7C8038A8B62BAEC42FADC8 +2190A917768B448F9D85C7D092D3D8496F77374953B7B2B9FFFFFFFCF7FCFDFDFFFFFFFFFFF7FA +FFFCF9F7FFFCF4FFFFFEFAFEFFFFFBFEFFFFFAFEFFFAFCFBFFFFFDEFE9E1282B35416870308691 +1A9CAE17A2BB17A3C01DA3BE1CA3BE1BA2BD1AA4BE19A4BE16A5BD11A6B208ABB801B3C510B2C6 +0B757BA6D7CBB3DDA5B6DBA4BFD9A3BDCEA1C9D7B9DAE7D5F2FEEEFBFEF5FEFCFDFFFCFFFFFBFF +FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFF +FFFCF7FCFFF9FCFEF6FFFDF6EEFCFF739ABDA6B7CFF7FFFFFEFDF3FFF9FAFFFBFFFCFFFFFBFBFB +FBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9A4A4A4 +FFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBF8F8F8FFFFFFFFFFFFFFFFFFFCFCFC +FEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFDFDFDFEFEFEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFFFFFF6C6C6CFFFFFFFFFFFFFFFFFFFBFBFBFFFFFFC4C4C4 +000000C4C4C4FFFFFFFBFEF9FDFBFBFBFEFCFFFFFFC7CACA4C50539FA9A5ACB3B6CBD0D6D3D5DC +CECFD3C8C8C8D0D4D6D4D8D9CCD0D1BFC3C4BEC2C3B4B8B9AFB3B4AFB3B4A7ABADA2A4AAA0A3A9 +9DA0A7A19FA797969D908F95616066D1D1D1FFFFFFFAFBF5FDFEF9FCFDF8FEFFFAFEFFFAFEFFF8 +FBFBFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF5F5F5FCFCFCF0F0F01A1A1A4C4C4C444444414141414141414141414141424242 +4040404343434343434444443B3B3B3A3A3A0000004F4F4F606060494A49494344444243434241 +3E3E3D3E403E3D413C4043423A3D3C40443F383D342B3125656B5DD2E5B9C0D6A8B7D19DBEDAA4 +CAE1AFC4DBACCADFB394AB885F79608DABA5C0E0E5C5E4F399DAE98BD2E383D1E56FC5DB76CFDF +58B1C11578774B8782A0AC9F835D46855031B074526B39116333107D4523894329834E33603F1F +797A58BDC9A2C2E4B2B2E4A8ABDE9EB1E4A1C4D9BABBC4A08A9174F9FFFFF8FFFFFFFFFFFDFBFF +FBFFFAFFFFFBF4E9EBF2E5E2EFE7D5EFEDEFFDFFFFF6FAF9FFFFF2FFFFF1FFFFFFB0B5C5ADB3C2 +717F79C9E0B4C0DBA5BAD8A8BADB9DC5D7A3CDD1A5C6CDA4B7D4A8ACDBAAD0ECC4ACAD9173513E +9E5D4B93472E81300F8745297C563D5053431D5E5928969C1EACB5007C97007791319EB57DD5E6 +96E0EE82CBD15B7D888698A5CAC7D5FFFFFFFDF8FAF8FBFAF1F7F7FAF2F8FFF7FAFFFFFAFBFFFD +FBFCFFF7F7F5F5F8F5F8FDF8F2FAF5FBFFFEF4F6F84F66775A98A92B9AAC10ADC704ABD102ABD7 +04A7CA06A9CE08ACD003A7CA06ABD009AFD20AAEC603ACC306B9D20DA9BF0F747CA5D4C8B4DAA2 +B5D8A3B9D6A6C0D3ACD4E2CBE9F6E6F4FEF5F5F8F4FEF8FFFFFCFFFFFCFFFDFCFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFCF7FCFFF9FCFEF6 +FFFEF6EEFCFF739ABDA5B7CEF6FFFFFBFFF4FFFAF9FDFBFFFBFEFFFEFDFDFEFEFEFDFDFDFFFFFF +FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7A2A2A2FFFFFFFDFDFDDDDDDD +D1D1D1D1D1D1D7D7D7CBCBCBE7E7E7FEFEFEF7F7F7FEFEFEFFFFFFFBFBFBFEFEFEFCFCFCFBFBFB +FBFBFBFAFAFAFCFCFCFDFDFDFFFFFFFFFFFFF9F9F9FAFAFAF9F9F9FEFEFEFBFBFBFDFDFDFBFBFB +FCFCFCFDFDFDF9F9F9FCFCFCFBFBFBFCFCFCFBFBFBFDFDFDFDFDFDFCFCFCFFFFFFFFFFFFFCFCFC +FAFAFAFFFFFFFFFFFF6C6C6CFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFD3D3D3000000B5B5B5FFFFFF +FBFEF9FDFBFBFBFEFCFFFFFFC6C7C9484D4E9CA7A4A2A9A9B2B7BEAAACB4AAAAAEB6B6B6C9CDCE +D1D5D6CFD3D4CDD1D2C9CDCEBFC3C4B6BABBB2B6B7ABAFB1A1A4A99B9EA49A9EA598969E8F8E96 +919096626165D1D1D2FFFFFFF7F9F3FAFBF6FAFBF6FEFFFAFEFFFAFCFFF8FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF8B8B8BA6A6A6E1E1E1FCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFF3FDEADFEED4DBEDCDD7EAC9BDDAA4C0D8A3BDD4A0CFE4B5C7DDB3BBD0AE7E9378 +5D74619EBCB3CFF5FAB8E7F89FCDE485CDEC82CFEA7BCAE26FC1CD4E9E9F35847F4F9484B6CFBE +B69781762F0FAF6441AC6843572F105A37138052308C4A2E96523578421D6E4F37918966C0D3A7 +ADD79EB4DFA5BCE3A8C2D7B6B1C0A07B8B74E0FCF2DAE9DBF0EED1EAE6E2E5EEEBCBCBC7987567 +976D5293744EAFA0A2EBF2EFDDEDDFF0EDD2F0E9CEF5F8E3B1BBCBACB7C374827CCBE4B7BFDAA5 +BDD9AABBD9A1C5D6A5CCD1A5C9D1A8BBD3A4B3D9A6BBD1A67C745284583FAE694E7C381674380D +9B4A2588431F805231454C342B62511D7669207B8652AEB87DD6E37BCAD395D2D9A7D7DA75909E +8393A2B9BBC8FFFFFFFDFFF8F6FFEEF0F7F0FBFAFFFEF4F9FFEDE2FEEDE1FCF3F7FFFFFFFDFEF7 +FCFEEBF6FAEAFEFFFDF3F7FE87979E7AADB324848B1DA4AE17A7B61CA9BD18A6B318A6B318A6B3 +17A4B21AA6B51DA7B716A7B818A8B711A5B60F92A21D6F71ABCEBFBCD9A3BEDAABB6D2A8D2E6CB +E8F3E4F8FFF7F0FBF3F9FBFAFDF9FEFFFDFFFFFEFFFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFCF7FCFFF9FCFEF6FFFEF6EEFCFF739ABD +A1B4CBF7FFFFFAFEF4FEFAF9FDFBFFFAFEFFFEFEFCFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8A2A2A2FFFFFFFFFFFF9999998C8C8C343434464646 +8F8F8F9C9C9CFFFFFFFEFEFEFFFFFFFBFBFBFDFDFDFFFFFFFBFBFBFCFCFCFFFFFFFFFFFFFBFBFB +FFFFFFF0F0F0CFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFFFFFFFFFFFFFBFBFBFCFCFCFFFFFF +FFFFFFF7F7F7FFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFFFFFFB9B9B9FFFFFFF8F8F8FFFFFFFFFFFF +6C6C6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2D2D2000000B9B9B9FFFFFFFBFEF9FDFBFBFBFEFC +FFFFFFC7CACB4C515395A09C93999B93989F9E9FA7C0BFC3C3C6C3CCD0D2D2D6D7CED2D3D8DCDD +D6DADBD2D6D7C3C7C8B7BBBCB1B5B7A6A9AF9FA1A89A9EA5908E97908F969291975F5E62D0D0D0 +FFFFFFF9FBF6FBFCF7FCFDF8FEFFFAFEFFFAFCFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFDFDFDFCFCFC +FDFDFDFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFAFAFA +FFFFFFFFFFFFEEEEEE999A99A19BA0969497D3D3D1FFFFFFFFFFFAF6FBEEECF8E2CFDCC4BAC9AA +BED5AABAD5A5B6D39DBFDFA8BBD7A3C1D7A7D0E1B9ABBCA06F826A748D80B3D0C8CFF5F3ADE1EB +9CD9EA86C6DE83C7E58BD0EB8BD1E2458B892E6F5F67A58BC7E6D1C1BFA6734728964C2CAD664B +96553E71544459412964462A844B2E8D4A2B91552F80482F6F5232A4A77DC3E0B0BFDDAEBAD2A5 +BDD7A9B9CDAE798E869AB7B35764469187457978646271658D8D828A5234A560328A551D886B6B +A9B1A65B70588E8A648077506773509BA5ACB9C3C878877DCADFB1C2DCA6BED5A9BCD1A5C2D8AB +C1D5A9BDD0A1C3D4A4D4E6B3A39A746C54318E6144AD735556210C5D30148841238A3F20994F32 +7E553B37381F2F4E388FC8C590D1D38BD2DC94D5E09ACCD6B0D4DE8FABB56B7D87C0C7D0FFFFFF +FFFFFDFFFFEEFFFFFFF0ECF5997C87A36A59996656B08F96EAF4FDFFFFFFFFFFEFFFFFE8FFFFFF +FBFCFF7F7F8180A1A0175F5709706610776D11726A127B6F13796F14786F14766E16776F1A7871 +0F7975127B750673721072761F5956BACCBBC1D1A0C5DAB0C0D4B3E3F2DFFAFFF8FDFCFBF7FFF8 +FBFEFBFFFBFDFFFCFFFFFEFCFFFFF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF +919191070707E4E4E4FFFFFFFFFCF7FCFFF9FCFEF6FFFDF6EEFCFF739ABD9DB0C7F6FFFFF8FEF1 +FDFAF9FBFCFFFAFFFEFEFFFEFEFDFEFEFEFEFBFBFDFBFBFDFBFBFBFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFD8D8D8A2A2A2FFFFFFFCFCFCF7F7F7FFFFFF656565767676FFFFFFDADADA7F7F7F +E9E9E99F9F9FFFFFFFFFFFFF898989FFFFFFFFFFFFE6E6E6868686FFFFFFFFFFFF6767671C1C1C +EEEEEE818181E2E2E2A8A8A8FFFFFF9F9F9FFFFFFFFBFBFBFFFFFFB1B1B1D4D4D4FFFFFF767676 +C7C7C7A3A3A3FFFFFFFFFFFF414141414141F1F1F1FFFFFFFFFFFFFFFFFF6C6C6CFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFE1E1E1000000B1B1B1FFFFFFFBFEF9FDFBFBFBFEFCFFFFFFC9CCCD4F5357 +909B97949A9CA7ACB2CCCDD5E3E4E8FBFAFAFAFFFFFFFFFFFEFFFFFFFFFFFAFEFFECF0F1E4E8E9 +D9DDDECBCFD1B2B5BAA9ACB39FA3AA9B99A296959C8F8E94626065D1D1D2FFFFFFFBFCF6FCFDF8 +FDFEF9FEFFFAFEFFFAFCFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFEFEFE +FEFEFEFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFEFEFEFFFFFFFBFAFBFCFCFDFBFBFCF9F9FAFBFCFB +FFFFFFF9F8F9D7D7D8A3A3A061615AC7C8BDFFFFFF5B6849D6E4C4C0D4ACC3DDA8B8D79CB4D696 +B5D9A1BDD9A3D6E8BB95A27F6F7F688C9C8DBED9D7CCECEEB9E2E69AD3E085CADC7FCCE186C6E1 +7DBDD43F7F893D786D82B49ABAEBC3D3D5BC7E6A4B7D4E2BAD694B8D4D3A985D54E4CFCA8E8174 +4A3720804D328E4E2D8D50289E513A7B4D2D7C734BC1D6A7C1D5AEC2CFAEC5E2AAB5CBAD72888A +849CA0383F16AB9A3B767658293C298A8877CF8A5FE48F53C9833F9269699396882E4627ACA67B +76704119320198A1A0BCC6C5798779CEE0B3BFD4A0C1D2ABC7D5B2BAD1A9B6D7A7BDD9A4CCD8A3 +CBCC9A7C51317B4F30A7745887513A855544673B2B74433189463299463397533F71503C534D38 +8BB6B0A0D4D791D2DE9AD9ECA5D2E8B9DAF1ADC9CE7E9098979FA773776F80887084926A6E735B +A09BA35F3D498A402C732D1C905D689CA6B877776D8E8E6C88845D827B68C9BEC07D797F98B0B1 +619C9265B6A362B09766AB9260B19A61B19965AE9967AF9969AE9968AC9763AF9864AD9760B0A4 +68B3AF7FA9A1CCCFBBC3CC9DCAD7B1DCECCFF0FCEDFAFBF8FFFAFFF5FFF3FAFDF8FEFAFAFFFEFE +FFFFF8FFFFF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4 +FFFFFFFFFCF7FCFFF9FCFDF6FFFFF7EFFCFF739ABD9FB7D1F7FFFFFCFFF8FFFDFBFEFBFFFBFEFC +FEFCFAFEFEFAFEFEFAFCFCF9FFFFFCFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8 +A2A2A2FFFFFFFFFFFFFCFCFCFFFFFF5F5F5F727272FFFFFFE8E8E8050505797979646464E5E5E5 +181818BBBBBB353535EEEEEE282828CACACA000000FFFFFF616161929292FFFFFF444444737373 +2B2B2B4E4E4E5050502E2E2EFFFFFF606060949494444444C5C5C59797972E2E2E626262181818 +FFFFFF151515BFBFBFFFFFFFF8F8F8FEFEFEFFFFFF6B6B6BFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF +E8E8E8000000ACACACFFFFFFFDFEF9FDFBFBFCFEFCFFFFFFC8CBCA4A4F538F9997AEB7BCD1D8E0 +EFF5FDF6F9FDDAE0E2D9DDDED2D6D7C3C7C8C3C7C8C6CACBC7CBCCBCC0C1BCC0C0B6BABDB6B8BE +ACAFB5A5AAB09A98A096959C929197626167D3D3D2FFFFFFFEFFF9FEFFFAFEFFFAFEFFFAFEFFFA +FEFFF8FCFCFEFCFDFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDF7FDFEF8FDFDFAFDFCFAFEFCFDF9F4F7FFFCFDFFFDF9 +FFFFFEFFFFFF919E8E3F4D400000004F5145D0DABAC3D9ABBDDAA6B7D8A2C6E1ACC2D8AE89997C +67796DA0B5B3D1EDEDBAE1EBA7DCED93D9EF80CEE883C9DE95D0E178A7BD4271744C7A64A5C8A0 +D0E9BFC2D7ACA18F666D401C9F5D3A916140775A44BDA499FFFFFFDBD7D66E5B5B683C2D8A4E2D +954F22A1553A9B603C6C46248F806CD4D5B8CCD7A7CFD9B3ACC9A26A918690A5B75E5932FAE360 +9BAF6B30464F83875CDA8F49EC8A36E38A438F74548B97714B6F34DEF097A4A9603942179EB1B3 +BACABD717F64CFDFB5BFD7A2C0DCA3C1DCA9B6D7A6ADD5A4BED9ABD8DDAD877E4B6E4A18A75E43 +A4594D715B4EDDD2C8A58182582B2F7C423B8A412C94412DA2574C833E3E6063669AB1C3A4CFF6 +9BCAF2B9D8F2B8C1CF7D868070887E7A909E192305646D1F828C591625017C7B728A454FE74F44 +BD442CAC7D6A8C9D8B002627807835A37B2321302297A0A2878381B8BFAFB6C8A8D4EDBACBE7AC +CDE7ABCEE7A8CBE8A9C7EBABC3E6A8C9E5ADD0E9B3C5E7A6C7E8B7C9E7C6CCE2CBCEE1C1C0CFA8 +C4D3ADE1E6D1FFFFFFFEF4FFFDF8FFFFFCFEFFFFF9FDFEF8FFFFFBFDFFF9FEFEFAFCFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFCF7FCFFF9 +FDFEF8FFFCF4EEFBFF7498BFA4BBD7F4FFFFF8FCF5FFFDFCFFFBFFFBFEFBFEFEFCFEFEFCFEFEFC +FCFCFAFFFFFDFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8A2A2A2FFFFFFFEFEFE +FCFCFCFFFFFF5C5C5C727272FFFFFFE8E8E8090909D1D1D1FFFFFF9A9A9A0A0A0AC0C0C0939393 +FFFFFF9B9B9BB3B3B3000000FFFFFF5F5F5F8B8B8BFFFFFF454545D0D0D07F7F7F7F7F7FBDBDBD +181818FFFFFF131313939393919191E6E6E6858585757575E0E0E0171717FFFFFF1A1A1AB8B8B8 +FFFFFFF9F9F9FEFEFEFFFFFF6B6B6BFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFF0F0F0000000A9A9A9 +FFFFFFFCFEF9FDFBFBFBFEFCFFFFFFCBCDCD494F519AA4A2B5BDC1BDC4CCBFC2CDBDC0C5C3C7C8 +CFD3D4D5D9DACED2D3C5C9CABFC3C4BABEBFB5B9BAB0B4B5A9ADB0A1A4AAA0A2A89DA1A896959D +95949B929097626165D1D1D2FFFFFFFEFFFAFEFFF9FEFFFAFEFFFAFEFFFAFEFFF8FEFCFEFEFEFE +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFBFDFDFCFDFDFBFDFDFEFBFAFAFBFAFBFEFDFCF8F9F2EBEFDFD3DEC5E6F4DC +74836A2A2F26333C29A2B18BC4D7A9BFD8A9C8E1B1B8CAA076866471806AB3C7C2CAE6EAC5E3EE +A1D6E58FD0E185D1E485D2E487CBD5629DA2476F7D5C887EA8D4ADC1E1AAC5D8A9AFBC966C4C35 +87523C975B42754F359B8A74F3E8D9F6F7FAF8F2F7D3C3C5532E2378422A8F502CA151339E5A34 +8858376A4E3CAEA58DCFD2AAC9DBAFB1D1AB6A928E8FA1B85B5628EED84290AC5236504E8A9064 +C87B3CF38C39E48838967B608D9773486C30C5DC7E92A14B30450A94ABAAB7CBBF70846ACDE1B5 +C2DCA9B9D79EB9D9A8B6DCA8B6DBA8CFE4B1B4B38062511B8E6135AC644C7B362CAD9A93FFFFFF +F2DBE3704B4B703F33944E388D3F229B4F38A258475B4E4782868BB4CFE5B1D8F2A3C2D1738489 +6A7F7088A9987A969D4E5931AFBA61D0D997596843949289853E44E14332BF3B1FB576619BA99F +225652C3BD6AEAC866506A5B9EB0C1838487AEB7ADA2B598BCD7A6BBD69CC0D89CBBD898B9DA9A +B7DA9DB5D9A3B9D7A5BDD7ABB8DC9FB3D69EB8DBA6BAD5A8BBCFA8C1CEAAD4E1C1ECF2DFFCF7F6 +FEF9FFFCF9FEFEFDFDFDFFF4FAFCF2FDFEF6FDFFF9FEFFF9FCFDFAFFFFFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFCF7FCFFF9FDFEF8FFFCF4EEFBFF +7499BFA5BCD9EFFFFFFDFFF8FFFBFAFFFBFFFBFEFBFEFEFCFCFCFAFEFEFCFCFCFAFFFFFDFFFFFB +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8A2A2A2FFFFFFFEFEFEFEFEFEFFFFFF656565 +737373FFFFFFE7E7E7090909CDCDCDFFFFFFCFCFCF000000F1F1F1D3D3D3CACACA222222BABABA +000000FFFFFF5A5A5A646464E7E7E74C4C4CCBCBCB7D7D7D797979B6B6B6151515FFFFFF3A3A3A +727272DDDDDDF5F5F5898989747474D1D1D1131313FFFFFF0B0B0B8D8D8DE2E2E2FFFFFFFEFEFE +FFFFFF6B6B6BFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFAFAFA000000A4A4A4FFFFFFFBFEF9FDFBFB +FBFEFCFFFFFFC5C8C9454A4D95A09EA2AAAE9FA6AFA9ACB4ADB2B6B0B4B6BABEBFBFC3C4C1C5C6 +C3C7C8C4C8C9B6BABBB0B4B5ADB1B0A4A9AC9DA0A59EA1A79CA0A79D9AA397969C908F9566666A +D3D3D4FFFFFFFEFFF9FEFFF9FEFFFAFEFFFAFEFFFAFEFFF8FEFCFEFEFEFEFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFF +FEFEFFFEFFFFFAFBFBFEFFFFFCFFFDF6F9F4E5EADED4DEC4C7D4B0BFD0A8B9CBA2CBDDBBC2D5AF +BBCEA4C0D1A6CFE1B7BCCDA56470557A8874B6CAC1C7E3EAB5D9EBAED6ED94DBEE86D1E37FD0DE +7ECAD058969430665B759594B6DDBEBCE3A6BCD790D1DAA58B88666C3C349259508A5549685340 +C9C7B3F9FAE9F4F2FAEFEBF3FFF8FF7E636165392B824B34A54F2F9F522BA96A47774B3E7C6455 +C9C0A4C3DEA8ACCEA76D90948C99B358521BE4D1278AAE3E355342909469CB7A41F68936E07D25 +967D6787927043682CBFDB7389A04026470090ACACB5CFC26C8569C1DBAEB8D8A4B2D69DB3DAA9 +B0D8A5C9EBB5C2CE977A6B386B4B16965E3C924D3A8D554FE3D8D7FAFEFFFAF9FFBCA6A0613F31 +7D472E99512DA0512DA5502B835B45745E549AA0A19EB8BE67848071867DA9CBAEA8D3B670938E +3C4A19A0AE46C8D37F4756348D8A818C4245E9412ACB3616C56F598F9A9A164A3EBCB853DCC14A +47685791AFCF81868FB1BDB7A8BBA2BFD7A8C3D89EC6D89ABCDA96BBD999B8DA9EBADBA9BBD6AC +BED4B2B9DAA1B7DC97B6DC90BAD894BACD9FCED8BCEAF3DDFAFDF0FEFDFBFFFBFFFBFBFDFCFEFC +FDFFEFFBFDF1FBFEF2FEFFF7FCFFF6FCFFF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +FFFFFF919191070707E4E4E4FFFFFFFFFCF7FCFFF9FDFEF8FFFCF4EEFBFF7498BF9FB6D1F4FFFF +F5F9F2FFFDFCFFFBFFFBFEFBFDFCFAFEFEFCFDFDFBFCFCFAFFFFFDFFFFFBFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFD7D7D7A3A3A3FFFFFFFCFCFCFEFEFEDEDEDE4444444F4F4FE7E7E7DCDCDC +373737B7B7B7FFFFFFFFFFFFCFCFCF404040E6E6E6FFFFFF585858D2D2D2808080FFFFFFE7E7E7 +4D4D4DF6F6F6545454999999686868838383848484505050EEEEEEFFFFFF626262939393FFFFFF +6262627878788787874C4C4CE7E7E7EBEBEB4D4D4DF5F5F5FCFCFCFFFFFFFFFFFF6C6C6CFFFFFF +FFFFFFFFFFFFFDFDFDFFFFFFF9F9F90000009F9F9FFFFFFFFEFFFBFEFCFAFAFBFAFFFFFFCDCECE +555B5F8B9694899296939AA2B2B7BFCACFD4DBDEE2DFE3E4E3E7E8E3E7E8ECF0F1EAEEEFDFE3E4 +D1D5D6C9CDCDBEC2C5ABAEB3A4A7AD9FA3AA96959D94939A929197646368D2D2D2FFFFFFFEFFF9 +FEFFFAFEFFFAFEFFFAFEFFFAFEFFF8FEFCFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9FEFFFFFFFEFFFCF5FBF5 +F6FEF5F2FBF2DFECD6CBDABBC0D1AAB8CA9ABFD29CC6DBA6B7D1A7C8E1B5CCE2B6C2D8B299A78C +5D6A5599A9A3D0E6E4CFF0F5ADDBE99ED2E891C8E58BD4EB89D3E278C3C642817440725B96C0A4 +C3DFC0B6D9A8BBDE9AC7D997C8C49166512F6B3A33885553694343AEACA4EEF6ECF8FDF2F5F0F5 +F3F1F9FCFAFFE3D5D98266626A4339A85534A95931AA5D3B9D6355654537B4A98FCAE5ACADCFA4 +6F8E8E8F9CB4615E28EBDE3D99B64D294638888C60E39056F08433C45E0C9C8A7B8B997D466933 +DFF2939CAE512B4C0293B0B1AECABE60795FC7E5BABDDDAABCE3ABB0D9AAB6DBA7D7EDBA8B8856 +593B11956840844B34754336DAB9B4FFFFFFF0F8FEE5F3FDFFFBF4A090845737219358379B4E24 +A9501FA25D3B855237543D25707961889F84AFCDACC0E3BB99C6A16B90873F4E1BA5B147C9D57B +4258378E8D838D443FED4227CE3414CC715D939EA2174A3BC4BE4BD9BD3E4169538CB2D17E808C +AAB4AFB5C5AEC4D9ACC7DCA4C4D69AC4DB99BFDA9DBCD79FBBD6A8BFD5AFC5D5B5B8D8A5BCDF9D +B8DD91B3CE8DC5D5AEE1E9D9FEFEF7FEFEF8FDF8F6FFFBFDFCFCFBF8FCF8FBFCF2FAFCF1FDFFF6 +FFFFF9FFFFFAFFFFFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707 +E4E4E4FFFFFFFFFCF7FCFFF9FCFDF6FFFFF7EFFCFF739ABD9FB6D2F6FFFFF9FDF5FFFCFCFFFBFF +FBFEFCFDFCFAFEFEFCFDFDFBFCFCFAFFFFFDFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +D7D7D7A3A3A3FFFFFFF8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFBFBFBFFFFFFFFFFFFFFFFFFFCFCFC +FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFF9F9F9FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFFFFFF6C6C6CFFFFFFFFFFFFFFFFFFFBFBFB +FFFFFFFFFFFF0000009A9A9AFFFFFFFDFFFAFEFCFAFAFDFCFFFFFFC7CBCB4F56588B969497A0A4 +B3B9C2E3E6EFECEEF4E2E6E9E2E6E6DBDFE0CFD3D4C7CBCCC4C8C9C1C5C6C2C6C7BFC3C3B9BEBF +AFB2B7A8ABB1A1A6AD9A99A196959C929197646468D2D2D2FFFFFFFEFFF9FEFFFAFEFFFAFEFFFA +FEFFFAFEFFF8FEFCFEFEFEFEFCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF9FFFEFAFAFEF5F3FBEDE9F6E3D5E4D1C4D9B1 +C1D6A8BFD59FC1D89CCBE2A6BAD095BDD6A9C3DBAFBED5AD82957B7080729BAAA2CAE7EFCCF2F8 +B8E8F19CD7E593D3E594D3EB7DBCCD6EAEB743807A54876FA1C9A6BDDFB8B7D59CB4D69DBADBA5 +CAD9A8ABA1766345217B563F6A453C755F5FF1F9F9ECF3F1F8F1EFEFE9EAF5F5F6E4E9EFFEFDFF +BFACAB6345419B53339F532DA35631A268536E523EB7B393C9DEA9B3D0A06D8A7D94A0B35D5C38 +E4DF5B9FB16734484C848557DF8B4BDF7427A643027B6F6583918049653CE6F0A0989D542B3D07 +94AFB2A6BEB4698269C7E1B8BCDAAAC1E4AEAED4A6BDDCAAD2E2B262562C6C492A94624C714533 +987A6BF8E9E4F5F2F4F0F5FAE0EDF3F7FFF9D9D9D179695D6A3E239D5832AD592BAA5A38985B38 +603D18999870BED4A5C5E6B6B3CFA1A0C7A0759391475328A5B150C8D58544603A898E8089453D +EA4429C02C11BD655D95A29F194A3EC8BB52DEBA3E4B6B5297BACB7A747F9DA29EB3C0AAC3DAB0 +C2D9A6C3D8A2C5D79FC2D8A0BED7A1BED5A9C2D5AEC7D4B0BAD8A8BEDDA9C0DFABBAD1AAD1DEC9 +F6F9F1FFFFFFFFFDFDFFFBFBFFFEFAFBFEFAF7FFF7FBFBF6FAFBF5FCFDFAFFFFFEFFFFFDFFFFFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFCF7 +FCFFF9FCFEF6FFFDF5EEFCFF739ABD9FB4D1F6FFFFFBFFF8FFFBFBFEFBFFFBFDFCFDFDFBFEFEFC +FDFDFBFCFCFAFFFFFDFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7A3A3A3FFFFFF +FAFAFAFDFDFDF9F9F9FAFAFAFDFDFDFAFAFAFDFDFDFDFDFDF9F9F9FDFDFDFCFCFCFDFDFDFBFBFB +FFFFFFFBFBFBFDFDFDFBFBFBFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFAFAFAFCFCFCF7F7F7FAFAFA +FBFBFBF8F8F8FCFCFCFAFAFAFDFDFDFEFEFEFFFFFFFAFAFAFEFEFEFDFDFDF8F8F8FCFCFCFDFDFD +FDFDFDFEFEFEFDFDFDFFFFFFFFFFFF6C6C6CFFFFFFFFFFFFFFFFFFF9F9F9FFFFFFFFFFFF000000 +989898FFFFFFFDFFFAFDFCFAFAFBFBFFFFFFC7CBCA5055589CA8A6B2BABFC2C9D1CACDD6C5C8CE +BFC5C7CDD1D3D7DBDDD6DBDDCCD0D2CBCFD0C5C9CAC2C6C6BABEBEADB2B3A5A8AEA0A3A99C9FA6 +A09FA998999F949398636468D2D2D2FFFFFFFEFFF9FCFFF9FCFFFAFEFFFAFEFFFAFEFFF8FEFCFE +FEFEFEFCFCFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFEFFFFFFFFFFFFFFFEF8FDFDF5FBFFF2F0FCE6D6E4CBBCCCB3B5D099B9D39CBFD99ABFD796 +BBD496B9D094CDE1B5C2D7AD7086605C705CA8BBB4D4E6E7D2F8FFB3E0EE95D0DC91D5E18ED5E3 +93D9E97AB1BE4276784A7F72ACD5B6CAEAC1B9D2A6B0D085BBDDA2A7C89ED0DEBEA49774654419 +6E54315B422CCDC2BEF7FFFFE7EAEFEFDBE4F7EEE9ECEDEDE3ECF0F4F8FAF1E7E59B847F712F13 +9D582FA15630A36A51846C52B7BB94CCDAA8B1C99369836A919EB033331B9F9A31606638283548 +7F7D4ED5853EF0873DBC58277D747087968B273F1F949552635E24303411809A9E8FA69C829681 +C5DCB7B9D5A6BBDAA9BDDEB1C2DBACCED9AA58482368432D753F36755441D7C8B8FDFCF2EFEAEC +F6F6F7EAF3F0EAF7F5F4F9F9BFB8B2532F1B985A38A9572DB15D3BA05D3763360CC0BB86D0E4AC +BADFA2C4D5A7ACCAA77992944C5331A7B35ACAD88F4868408C998781433AD6361BA81B04A75A59 +94A59D26564CD2BE5CF7CD55526C4EA2BFC47A6E7694928EB7C2ACC6DAB1C0D7AAC2DAAAC7D5A4 +C2D7A6BED5A7BFD4A7C3D5ABC8D5ACBCD8ABBCDAB2BAD4B5D0E5D3E8F3EBFAFEFBFCFAFFFEFAFE +FFFDFDFCFBF6F7FCF5F0FCF3FBFAFCFAFAFBFEFEFEFFFFFFFFFCFFFFFCFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFBF6FCFEF8FCFEF6FFFDF7 +EEFBFF7399BD99BDD1F6FFFFFCFCF2FAFEFAFAFEFCFEFBF9FFFEFCFCFCFAFEFEFCFCFCFAFFFFFD +FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8A2A2A2FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFEFEFEF8F8F8FDFDFDFAFAFAFDFDFDFBFBFB +F8F8F8FDFDFDFCFCFCFCFCFCFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF +FDFDFDFDFDFDFCFCFCFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFFFFFF6B6B6BFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFF0000008F8F8FFFFFFFFEF9FA +FFFEFDFFFFFDFFFFFFCBCCCB50514D9A9E979FA6AA9FA7B3A7B0BCB4BBBFB7BAB5BCBEBDBBBCBA +BABCBABCBEBDBABCBBB5B7B5A3AEACA1A6A7A4A4A8A1A2A89DA2AA97A0A699949A95929C8F8B99 +66626AD3D1D3FFFFFFFCFDF7FFFFFAFEFEF8FCFFF7FEFFF7FEFFF8FEFCFFFEFEFBFEFFF8FCFFF6 +FCFDFBFCFCFFFFFFFCFFFFFBFFFFFBFEFEFBFEFEFBFEFEFCFEFEFFFEFEFFFEFEFFFEFEFFFEFEFF +FFFEFFFBFEFEFBFEFEFBFEFEFBFFFEFCFFFFFBFFFEFDFEFFFCFEFFFCFEFCFEFFF9FDFFF9FEFDF7 +FFFCFAFFFFFEEFF5EBC2D5BCB9D4B1B3D4A9BDD8A5BDD8A0BDDB9EBDD79BC1D5A1DAE8BA9AB68E +6B826084937CD6E7E1DEF7FBC3E3EDA9E2EE9BDEE691DEE27DC8CD8ACCD55A939E32636A85A9A9 +CEE1D9C7D7BCBACEA7BCD4AAB6E493B3DD9CBDDFB2C5D3B792886D694E315146299E9985FDFBF2 +EFEDF2F7F3FCF8F2FFFBF2F5F3F3F3F3FCFAF0FBFAFFFFFFE9E2EF88593D844B2EA66643905B35 +896C49C5BB9BC5E2A8B1D09F83A386B8D0C12A3B182B360044532A889C97B2A8A3CF783DF9883F +E47B4591868BC7C5BF3D4227282500504E2C8D93819DACB9707D79AEBFA5C5DAAFBCD9A7B3D39E +D2E0ABC6D7A7ADAF8D66423A6E40386A4239CBADB6FEFFF9EBF9E9FAEEEAFDECF3F1F0F8E0EFF7 +F1F7FCF9F8FF998C9B69403C9A5334AD5F35AC6744734B28C2CFA1C0DDA7B4CD94CAD8AEB1BAA9 +8087872D371F6E79478C9657364A30869174814D33DA4535AF2715A7574290979F223A16888139 +9C8F3838581A98BAB572726B899787B5D4B9B9DDB4B8D8A9BAD3A1BFDBA8BED8A5BCD7A0BEDBA5 +BED9A0BCD79FB4D4ADB6D1B3C5DAC5EAF7EDFAFFFAF9FEF6FDF3F6FFF9FBFFFEFFF8F9F7F5FCF9 +F2FCFAFCFBFAFAFAFAF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFAFAFCFDFFFCFCF7FFFFF8F0FCFF749BBE94B7CD +F4FFFFFDFFF3F9FFFAFAFFFCFFFBF9FFFEFCFEFEFCFEFEFCFCFCFAFFFFFDFFFFFBFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFD8D8D8A2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCF9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFFFFFFFFFFFF +F4F4F4F8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFEFEFEFDFDFDFFFFFFFDFDFD +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF6B6B6B +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF0000008D8D8DFFFFFFFFFCFBFFFDFBFEFEFCFFFFFF +C8C9C84C504D979B9591969A959EA8A2ACB5B7BFC2D5D7D3DEE0DFE7E8E7E7E9E8E8EAE8E9EBE9 +DFE0DFD0D7D3C6C8C8BCBBBCAEABB1A2A5A8999FA292929792929C9495A0626368D1D2D3FFFFFF +FBFBF8FDFEFCFCFCFAFEFEFBFEFDFBFEFDFCFEFDFEFEFDFCFEFFF8FEFFF7FEFEFCFCFCFFFFFFFE +FFFFFCFFFFFDFDFDFBFDFDFBFDFDFBFDFEFAFDFEFBFDFEFBFDFEFBFDFEFBFDFDFCFBFDFCFBFDFC +FBFDFCFCFEFDFDFFFEFCFFFDFDFBFFFEFCFEFEFCFBFCFAF7FBF9F3FEFBF4F8F9F0E5EBDDCDDAC4 +B9D0AFB7D7ACB2D5A7BFE2A9B6D79DBAD9A0C3D9A7C6D9B0A8B7945D795C8DA48FD2E9E0D8F4FA +C1E6F4AED9EC9DDCEE8CCFDC91DCE17AC1C24D8C89447A7984B59DB3DABEC9E4C0BED4A4C0D6A0 +BDD8A0B9DD9CB7DAA3BDDAB3C9D7B8817F60503E1F595846DADBCEFAFCF8FAFAFFFCFBFEF8F3F9 +FAF3F7F5F3F4F0F7F6EEF5F5F2F2F6FFFFFFB8A08D69472F976D4F77543170633DC7CBA6BEDBA5 +B6D3A485A38284A189425E2D64812D4C6542596C61978976D7873EE78A3BD4834D988175A2A689 +3E5D2D6886444D642F576C4B809394607363BDCDACC9DDA8C2DAA0BDD99FC5D89FC7D2A69F9679 +714540613734A0867DEEE5E7F6FAF2F4F7EEFAECECFAF1F5EBF7FBEFF9FAEDF0F1F4F4FCDED7DF +82675C7E4724A55532A96447734D2FBCC89FC4E0B1C2D9AAC5CEABB2BAAEA1AAA836452A1A2E00 +384E0F556E59B2B8A57C4034DD413BC53229C26253BFB7BF3B5338363A09423F0456704BC9D9E4 +717469859582BDDABFBBDEB4BCDAACBAD4A3BCD8A4BAD8A4BCD9A4B6D49EB9D7A2BBD9A1B8CFB2 +C2D5BFE1F0E2FAFFFBFEFFFDFDFEFBFEF8FAFFFBFDFEFEFEFCFDFDFAFEFDF8FEFDFDFDFCFCFCFC +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191 +070707E4E4E4FFFFFFFFFBFAFCFEFFFCFCF8FFFFF8EFFCFF749BBD8FB1C7F1FFFFFEFEF3F9FFFA +FAFFFCFFFBF9FFFEFCFCFDFBFEFEFCFCFCFAFFFFFDFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFD8D8D8A2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F8F8F8FFFFFFEDEDED3030304545457979798C8C8CFFFFFF5B5B5B505050FFFFFFF6F6F6FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9FFFFFFF6F6F6FEFEFEFBFBFBFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF6B6B6BFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF0000008A8A8AFFFFFFFFFFFDFFFEFDFDFDFAFFFFFFC6C9C74D524E939793 +969C9DB6C0C5DCE5ECF1F9F9FBFEFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F7F9E6E9E3E0DEDC +D3CED0BCB5B7ACA9ABA3A5A6989DA390959D9296A15F6468D0D3D3FFFFFFF9F8FCFDFDFFFBFBFE +FEFEFEFEFDFEFEFDFFFEFEFFFEFFFCFEFFF8FEFFF7FEFEFCFCFCFFFFFFFEFFFFFDFFFFFDFBFBF9 +FBFBF9FBFCFAFBFCF7FBFCF6FBFCF6FBFCF6FBFCF6FDFEF7F9F9F9F9FAFAF9F8F9FDFDFDFDFDFD +FCFCFBFFF7FFFFF7FBFEF9F9FCF9F5FEFCF4F9F7EDDFEBD3CFDDC0C4D9B3B8D4A4ACCE9AC4EAB4 +B9E4A3AFD29AC4E1B1C8DDBA8B9B84637461AEC7BCCCE9E2CBEEF2AFD9EDA8DAF4A9DEFB84C6DD +8ED3E288CFD3387A704F867698C7B5B9E6B3BAE0ADBCD9A3BFD598C0D89DBFDB9FBCD8A8BBD6AA +BFDAB3C9DAB85E6347322D0F4348427C83826D7276696D746D6A71716971756F70717170697070 +6E74747170757B747E776F68412F25634734584225726C48C8CFA8BDD8AAB0CC9E5F7B52496A45 +4E77377BAE4B5385533E5A36614D1FD17E29EC903DD47F477956325F6C384782396DB15855843E +4D7245445C4E445A3EB7C99BC2D698C6DC9AB6CF8EB6D49BDAE6BC8A7661734045785455CCC4BE +EEFFF6ECF5EDFEF7F2FFF3F8F7F7FBE2FBF9FAFFFCF5F4EFF3F1F2F8FCFFB6AA9D82643FAC5E45 +A2614B6F4B31B7C59FC2DEB6C2D7B3C2C6AAB0B4AB9FA9A05A714F486B3545702F608162AFB39E +85423ADF433ED84237CF604DC3B2A15672544E654057653C587359B4B3BF5B635491A38EBED8B9 +B4D4A9BCD8ABB8D3A3B9D7A1B9D8A4B9D9A5B9D6A3B9D8A5B6D7A2C1CFBDDCE6DAF2F9F6FFFFFF +FEFBFEFEF9FDFFFDFDFFFDFEFFFFFFFEFEFEFAFFFEFAFFFEFFFEFEFEFEFEFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFF +FFFBFAFCFDFFFCFCF8FFFFF8F0FCFF749BBE9CBED3F7FFFFFCFEF3FAFFFAFAFDFBFEFBF9FCFCFA +FEFFFDFFFFFDFDFDFBFEFEFCFCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8A2A2A2 +FFFFFFFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6FFFFFF +828282717171FFFFFF3F3F3F7E7E7EA3A3A3171717FFFFFFFFFFFFDCDCDCFEFEFEFFFFFFE0E0E0 +F9F9F9EAEAEAFFFFFFFFFFFF9797978F8F8FFFFFFFF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF6B6B6BFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF +0000008A8A8AFFFFFFFBFBF9FBFCF9FBFEFBFEFFFFC6C9C74B514CA6A9A7AEB5B4D1DBDBE6F1F0 +EBF3F1D4D7D5CBCBCEC0C1C3B2B3B6ACADAFB2B3B5B4B4B7AFB2AFB2B0B1B5AFB0B2ADB2B0AEB4 +A9A9AF989EA29297A08D909A5E6367CFD2D2FEFFFEFCFCFEFEFCFFFEFEFEFEFDFEFEFDFEFEFEFF +FBFBFEFCFCF9FBFCF7FEFFF8FEFDFCFEFEFFFCFCFBFCFCFAFCFCFAFEFEFCFEFEFCFEFDFBFEFFFA +FEFFF8FEFFF8FEFFF8FEFFF8FEFFF8FCFCFCFCFBFCFFFFFFFBFAFBFFFFFFFDFEFEFFF8F9FFFBF8 +FFFDF6FBFDEEF5F9E4DDE2CBC6D7B4C0D2A7BCD59FBCD99EC0DFA4B4D69DBEE1AAC7E1B4BCCEB0 +728274768882BFD2D0CDE8E9C2E8EFB7EAFA9CDAED91D0E696D0E695D3DE64A1A62D666175A793 +A2CDAEB7DCBAC3E0B0BBD7A7BED9A6C1D9A6C1D8AABED7AEBFD5ADB9D1A7C7DFB2B0C29E404C31 +7B836DC8CDD1CCD5DAC6D1D6D0D6DCCCCBD0D4CFCFD0CFD0CFCECECCCDCFD3D3D6D4D3D8CAC9CF +DFD2DDC7B2BA8D7170452B1B6E6449C1BF9FCDE9C4BFD7AB435A2B46673664965068AA445CB15A +64934A4D4200BD7220FD9C52F88853694917455C1D61AD5956AA4961A1517AA770192E104E6238 +BED09BC8DB9DB9CF93BFD79EC4E9B9B7CAA865594A461C2462474D94959084A4938A8F8A9B9095 +9A989F8F9A9C7E9090979790948D87959490989FA27E80774F43256D362A825343664E36BCCDA6 +C3DEB6C8D9B7C4D1AF919A852B3A225C7C4573A4604F8B46426E2A67663F7C3422C9402DCC4A2D +AC452374662E527E3E618F5372985D4C764567695A30442CA3B99CBED8B4B9D4ABBBD5A9BED8A9 +B7D5A3BCD9A7BCDAA9BFDCAFBAD7ACB2CEA4DADFD8F6F9F6FCFAFFFEFAFFFFFBFFFFFDFFFEFEFF +FEFEFEFEFEFEFFFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFBFAFCFDFFFCFCF8 +FFFEF7EEFCFF7399BCA4C6DAF9FFFFFDFDF3F8FEF7F8FBFAFEF9F6FCFDFBFDFFFDFFFFFDFCFCFA +FEFEFCFCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8A2A2A2FFFFFFFEFEFEFEFEFE +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFEFEFEFFFFFF7676766E6E6EFFFFFF +252525B4B4B48E8E8E222222F8F8F8868686999999707070FFFFFF6363636F6F6F494949A8A8A8 +FFFFFF0707078A8A8AFCFCFCF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCFFFFFF6B6B6BFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF000000888888FFFFFF +FAFBF8FAFDF9F8FDF9FFFFFFC7CBC94B544EA5A8A8A6ADAAB3BEB9B3BDBAB1B9B7C2C4C2D8D9DE +E0E1E5DDDEE2D9DADED2D3D7C9CACEB3BABCADAEB4AFADB2ACA8B0A9AAB29EA2AB98979C90909A +9696A1606267D0D1D2FFFFFEFBFCF9FEFDFBFEFDFBFEFDFBFEFDFBFEFEFCFBFBFDFDFDFBFBFCF7 +FEFFF8FEFDFCFEFEFFFEFEFBFEFEFCFEFEFCFEFEFCFEFEFCFEFDFBFEFEFBFEFEFBFEFEFBFEFDFB +FEFDFBFCFEFBFFFCFEFCFAFBFEFDFEFBF9FAFFFDFFFDFCFEFFFDF7FFFFF5FDFFEEE8F3D7D2DFBC +C5D4AEC3D1ACC2D3A4C2D89CBFD698BDD79DB8D39FCADEB4AAB89A74796C8E9696C4D6D7D2EFEF +CBECEFB0DDE4A2E0EB96DCE796D6DD98D2D45D9188396C60709D8CB9DEC3C4E6C3B2D3ACB8CDA0 +C3DAABC1D8A7C0D9A8C1D7ACBFD7B1BDDAA7BDD9A5C4DDA79DAF874F5942C2CABFFFFFFFFFFFFF +FCFFFFFDFFFFFDFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFFFFFCFFFFFBFFB8A3A6 +48362B76725AB9BC9BC1DEBDBCD3A74B5C2D4962346E9C5C65A64C509E4169984F414C108F7138 +D59B65D07D51604B1C4F69325EA45C58A44F5D934D6C9462212E08748154C5D3A0C4D5A3CAE0B4 +D5EFCA99C39C56775B1D26186E585CBDA7AAC1BBB6A7C2B1B3B4B2B9B4BAA7B4B8ACB8BCB3B1B6 +BBB9B5C0B7B0B4ACAAB6BAC2BBBCBEADA2927F5F59573D2F51492BB6D09FBFDBAACDDBB1CAE0B1 +758A610C2100759B5173AA5759A04C6291444A471C732C20C95446BF583C863816474A03569040 +6EA45779A95B6096563E53341A3216ACC4A6BFD7B5C3DAB3BED8ABBFDAABBED7A7BBD3A4C0D8AB +C1D7B1C0D6B1C5DCB7F1F3EDFFFFFEFBFBFDFDFBFFFFFDFFFFFEFEFCFDFDFDFEFDFDFDFDFFFFFF +FFFEFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFBFAFCFEFEFCFCF8FFFFF7EEFCFF739ABC +97B9D0EEFCFDFBFAF0FAFFFAF8FDFCFFFBFAFCFBF9FFFEFCFFFFFDFDFCFAFEFDFAFDFCFAFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8A2A2A2FFFFFFFCFCFCFCFCFCFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFF7C7C7C272727A3A3A3C4C4C4FFFFFF8A8A8A +222222F5F5F5898989DDDDDD000000EEEEEE6B6B6B6969699F9F9F1A1A1AFFFFFF171717CDCDCD +FFFFFFF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF +6B6B6BFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFFFFF000000858585FFFFFFF8FAF6F8FBF7F6FBF7 +FFFFFFC3C9C74149449C9D9F9EA6A29DAAA2A1ADA6AEB7B3AFB1B3B5B6BCC1C3C8C3C5CAC1C1C8 +C0C0C6BDBDC2AEB7BEAAAFB7A4A4AF9D9BA99498A6929AA696939A93909A94909D636068D2D1D4 +FFFFFEFBFDF5FDFFF8FEFFF8FEFFF8FEFFF8FEFFF8FBFBFEFDFDFAFCFCF7FEFFF8FEFEFCFEFCFF +FEFEFBFEFEFAFEFEFAFEFEFAFEFEFAFEFEFBFCFCFFFCFCFEFCFCFEFEFDFEFEFDFEFCFEFFFEF9FA +FBF7F8FAF6F7FEF8FBFFFDFEFFFCFEFDFCEFF9FCEAECF3DCD0DDBABBCEA2BFD5A4C7D3AFC5D4A4 +BED193BFD594C9E0A6CBE2B0A7AB8C70715FA59F9BE5E7EEDCEEF3C3E2E2B5DADAA9DDE0A2E9EE +8AD6D780C1BB6AA093406B558DB79EC6E8CEB5D5B6B9D6B3BBD7B2C5D6A6BFD39EC1D99EBFDA9F +C0D8A5C0D6A9BBE0A5BFDEA0CCE7A8A4B58677816DDAE1DCFFFFFFFFFAFBFBFBFFF7FBFFF9FCFD +FCFEF9FEFFFFFEFEFEFFFDFFFBF9FDF9F8FEF8FAFEFBF7FDFFFFFFB6ADAB595A4C788369B6CDA6 +C2E0C1B3C79A576332384A1F3760261D5B0B1D5908305A2112320E3647274C492452340C322600 +324F221B591E26631C2D591A3356292F340B8B9263BDC798C4D5A9C0D8B996B39C4A7457568067 +102D1DCBC6C5FFFFFEF9EDE8E9FCEDFAFAF7FBF9FBE5F9FBF1FBFBFCF2FBFBF9F7FCF8F5F9EDEE +EEF0FCFAF8FDFFFFFEAB9C9953493B555A39B0D19AC3DFA5CDD9A5B0D397728C562C45087EA94C +5A993653A24273A1565F53346F2226C05453AE56477736234555105FA15068A450699B4564A35D +294D2E2D4529BAD3B2C0D6B3C4D9B3B9CFA5B7D1A3C4D5A7C3D4A7C1D2AAC1D2AEC7D7B7E4F5D4 +FBFEF8FCFEFBFCFDFDFAFCFFFDFFFDFEFFF9FAFEFCFAFEFDFBFCFBFFFFFFFFFCFFFFFCFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF +919191070707E4E4E4FFFFFFFFFBFAFCFEFEFCFCF8FFFFF6EEFBFF7399BD95BED0E8FFFFF2FFF0 +FCFFF7FCFCFAFAFDF7FDFFFDFBFFFEFBFFFEFBFFFEFBFFFEFBFFFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFD8D8D8A2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFAFAFAFBFBFBFFFFFF7F7F7F7A7A7AFFFFFFFFFFFFFFFFFF888888202020FFFFFF5A5A5A +D7D7D7050505EAEAEA7171717F7F7FBBBBBB1B1B1BFFFFFF111111C4C4C4FAFAFAFAFAFAFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF6B6B6BFFFFFFFFFFFF +FFFFFFFAFDFCFCFFFEFFFFFF000000818584FFFFFFFAFFFEFBFFFEF9FDFDFFFFFFC5C6C843484E +8D97939B9E99A3A19DADABA4C7C9C2DEE5DBF5FCFAF5FFFCF7FFFFF4FDFFF0F7FAE3EAEDDADDE7 +D1D4D7C4CBC6ACB3AFA4A8AB9CA0A896949F919298939297636462CFCFCBFFFFFFFBF9F4FEFCF7 +FEFBF7FEFBF7FEFBF7FEFEF7FDFEFCFAFEFDFAFEFBFAFCFAFAFCF7FAFEF5FEFCFDFEFEFEFEFEFE +FEFEFEFEFEFEFCFCFDFFFFFDFFFFFFFFFFFEFCFCFEFEFFFFFEFEFFFEF6FFF9F3FCFBF8FDFAFBF7 +FCFCF4F8FBF2E9F6DBDDECCBC9DCB0C4DCA9C2DDA8C3DFABC1DDA8BED2A3C6D4AAD0DEB9C3D3AD +91A57E717365BFC4B8ECF8F4D9EEF7C2E1F4B5D6F2A4DEE6A4E0E58AC6C682B9AE52826B406B4D +B7DCAEC8ECC0BDDEB0B6D0A0BED8A8C4DEADC1D3A4C3D8A7C4D9A9BED6A4BED7A5BED9A4B9DCA0 +BFDDA3C3DBAABDCAAB949B8DE2E2E3FFFEFFF6FCDEF2FFF3EEF7FCFEFEEEFFF9F9FFFFFFFFFFFF +FAFCFFFBFFF5FDFCF7FDF7FEFEF9F9FFFFFFBCB9C59EA399A8B39DB8C2ADC1DCB2C2D7AEA3B78F +9AAF8496B18590AE8197BD6E7A946A3D706A278A96216D6A465B449BA187A1B19296B38D91B086 +93AE8294A67B98997CC8D0ABDEEEC5BCDCB67AA38B2F5F526EACA77DB1A7446C5FDDEFE4FEFDFD +FFF7FFFFF8F2F5FBFDEFFEFFFFFEF9FFFBFAFFFCFFF7FEFEFFFAF4FFFDF6FFFFFFFEFEFFFFFFFF +ACAEAF777564717649B1CA87C7DD9DCDD39FBCD99A7BA05A2C550A487522476E1D527724656833 +4F532538281C6A38566A364D4F2326365128597036486C2937723A4076462D53244F6F4AC6E4BB +BDD9AAC2DDA7BDD5A2BED5A5C4D8ACC3D4ACC1CFACCDD7BCE0E5D0F3F8E4FDFEFFFDFDFDFBFBFB +FCFCFCFFFFFFFEFDFEFBFAFAFEFCFDFCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4 +FFFFFFFFFBF8FCFEFDFCFCFBFFFEFAF0FCFF749CBB8DB2C6E7FFFFF3FFF0FEFFF9FDFEFBFBFEF8 +FDFFFDFDFFFEFDFFFEFDFFFEFDFFFEFBFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8 +A2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFD +F6F6F63C3C3C363636F0F0F0FEFEFEFFFFFF6060601C1C1CD9D9D9000000C1C1C12F2F2FEDEDED +4343436565658181810E0E0EFFFFFF646464505050E5E5E5FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF6B6B6BFFFFFFFFFFFFFFFFFFFBFEFCFEFFFE +FFFFFF0000007F8280FFFFFFFBFFFDFBFFFCF8FCFEFFFFFFC9CBCD495156929A9A9FA3A3CDCACB +EDECEBFDFEFBF4F7F3EFF4F1E9EDECE6E9EAE6E9ECECF0F4E3E7EAD9DCE5D0D3D8CACDCDBBBEBF +B2B5B9A5AAB09E9DA996949F929096666166D2CFCFFFFFFFFBFAF5FDFDF8FEFDF8FEFDF8FEFDF8 +FEFDF7FDFEFCFBFEFDFCFEFAFCFEFAFCFDF9FAFFF7FEFCFDFEFEFEFEFEFEFEFEFEFEFEFEFDFDFD +FDFDFDFDFDFDFDFDFDFBFBFCFDFDFDFCFCFEFFFDFFFEFAFFFDFDFBFBFCF7FDFFF4F1F6E9D1E0BE +C5D6AFBCD0A0BED5A2C1D9A4BFD8A6BDD8A5C4D8AAD2DFB7B4BD9E778066879178C3D1C2EAFBF0 +DFF6F3BEE0E9B1DAEDABDAF19BD0DD8FC8CE76ADAD4071606B9677AFD4ADBADDADBFDEB0B6D6A6 +B9D3A3C1D9A8B9D09DBCD0A2C3D8A9C0D7A7BFD8A7BDD7A8BDD7A7BADCA0BAD8A1BDD4A5C2D1B2 +9BA494E5E8E6FFFFFFFCFFD9FAFFECF9FFFFE6E9DFD3C4CADACDD1CFC7D3DEDCE6FEFFF7FFFFF9 +FFFEFFFFFFF9FFFFFFBAB8C2ADB3A7ACB69EA9B6A1C0DAADC2D8AFC9DDB3C5DCB1C5DFB3BFE0B2 +D1E1AD9AB399408A901AA7B71993963B7E71DEE4C3CBDEB9C0DAB1B9D5A8C8DAAEC7D3A6D3D6B8 +CCD9B5ABC29D5C846842706577ABAC8ACDD292CCCC4D766EDAECE4FEFFFAFEF9F8FEFAF0F3FBF9 +F6FFFFFFFFF9FFF9F2FFFDFAFCFFFFFBFAF9FEFCF9F8FAF3FAFEF9FFFFFFC0B4BCC4B6AF919073 +A5BF8FBEDAAFC2D1B2D3CDB3B0AF937879597F805F847F5E847858578263447C5E135349276272 +215C651F5F53788169848F66758A546C96646B9268738C618DB284BEE2B0B9DAA4C2DFA8BDD8A3 +BAD5A2C2D7A7C1D2A8C2D1AEDEE7CEF6FAEDFBFCF2FDFDFEFDFDFDFAFAFAFBFBFBFDFDFDFAFAFA +FDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFBF7FCFEFD +FCFCFCFFFEFAEFFCFF749BBB8EADC3ECFFFFF4FEEFFEFEF7FDFDF9FBFDF7FDFFFDFDFFFEFDFFFE +FDFFFEFDFFFEFBFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8A2A2A2FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFAFAFAF8F8F8D1D1D1D0D0D0 +F4F4F4FDFDFDFFFFFFDCDCDCD8D8D8FFFFFFDEDEDEEEEEEEECECECFBFBFBD3D3D3E0E0E0DDDDDD +D4D4D4F6F6F6F8F8F8D5D5D5FAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCFFFFFF6B6B6BFFFFFFFFFFFFFFFFFFFEFFFEFDFEFDFFFFFF000000787878 +FFFFFFFDFEFEFDFEFCF8FBFEFFFFFFBCC4C7444F5299A1A6ACB0B8D9D9E2EEEAF4E6E5E8C6C8C8 +C3C2BFC0C0BDB9B8B8C3C3C5C1BFC4B6B5BAA9ADB2A4A8ABA8ACAEAAAEB1A8ACAFA1A6ABA19EAB +9794A1928F99666066D1CED1FFFFFFFBFAF7FDFCFAFEFDFAFEFDFAFDFDFAFEFBF9FDFEFDFBFEFD +FCFEFAFCFEFAFCFDF9FAFFF7FEFCFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFBFBFBFDFDFDFBFBFB +FBFBFAFCFCF9FAFAF8FEFEFCFEFFFAFCFEF6FAFFF1F2FAE6E7EFDBC1D7ACB8CD9DC2D7A5BFD8A2 +BCD4A0BED5A5C2DBA9CCDDB2BBC6A57C7F6D767970D7DAD6E5FEF4CCEBE6BBE1E3B2E3EE9ED4E5 +A0DAECA3D7E26C9FA338676178A186B6D7AEC6E3AEB7D5A2BCD9A7BCD7A3BCD3A1BDD19EC5D6A4 +C2D9AAC1D7AAC0D7A8BDD7A8BDD8A8BDD7AABBDC9FB9D6A2C1DAAEBECFB299A693DBE4DBF3F6EE +F6F7BCF0F3CFE8F4FAB0B5B35C4854644B585E4C6199919FEFF4E7EEF4E2ECF2E5F0F3E1FAFAFB +BABBC4A6ADA2A7B49CB2BFAAC4DFAEBED6A7BED3A6BBD1A4BDD8ABBADCABCFD3AB96B3A32F8F98 +00AEC210ABB521807DD5E7C4BED9B5B9D7AFC6E0B8CFDFB7D6DDB6D1E0C0AEC8A763876C3E7268 +6FA9B198D5EB76C0D061A0AB3A6B6DD5EAE2FFFFFFFFFFF3FFFFF1FFFFFFF8FBFDFCEDE3FCEAD9 +FCEDD9F4F4EDFDFFFFFEFFFFFCFFE8FFFFF6FFFFFFBDB1B9CBC1C0737D6F5E8E7278AE9C73A29A +76A49B6E9E95679894759C9C77999A7B9395699FA74B969C147C8B1E9AB419899C298C8EB5C4B7 +C9D4B6C1CFA4B2D4A9B0D2A9B8D0A5AFDAA2B4DCA3B2D89BB6D89CBAD8A2BAD4A3BED3A1C1D2A9 +C9D5B7F0F6E6FCFEF7FEFCFDF8F8F8FCFCFCFCFCFCFDFDFDFFFFFFFAFAFAFDFDFDFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFBF8FCFDFDFCFDFDFFFEFAEFFCFF +749BBBA5BED5F4FFFFF7FDEEFDFDF7FDFBF9FAFBF7FDFFFDFDFFFEFDFFFEFDFFFEFDFFFEFBFFFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8A2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBF9F9F9FFFFFFFFFFFFFBFBFBF9F9F9FAFAFA +FFFFFFFFFFFFFBFBFBFEFEFEFEFEFEFBFBFBFCFCFCFFFFFFFCFCFCFFFFFFFEFEFEFBFBFBFCFCFC +FFFFFFFBFBFBF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FFFFFF6B6B6BFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF000000767576FFFFFFFDFAFBFFFDFD +F9FBFEFFFFFFC2C9C93D484998A6AAB1B7C1ADACBDA59EAEACA8B2C3C0C5DDDFD9EAEBE7DADAD9 +CFCFCFC9C9CBC6C7C8BEC1C5BABFC1B2B6BBA5A7AC9FA3A6989C9E97999F8E8F958E8E946B6970 +D2D3D4FFFFFFFAF9F7FCFBFAFDFCFBFCFBF9FFFDFBFFFEFBFBFEFCFCFEFDFCFEFAFCFEFAFCFDF9 +FAFFF7FEFCFDFEFEFEFDFDFDFDFDFDFDFDFDFDFDFCFCFCFEFBFBFDFFFFFDFDFEF9FDFEF7F7F7EF +F8FDF0F8FEF0F6FFEBE9F5DACCDABBBDCBA8C8E3B3BDD7A5BCD4A2C4DCAABED6A9C1D7B0CBDAB6 +94A1845F6653ADB1AFF6FEFFE4EEF8C1E8EAB9E7EDADE1EB9BD6E39FDCE187C1C34B7573527A71 +91B49FD1EEC5C5DFAFB8D39DBCDAA4BFDBA7C0DBA8C1D7A5C4D7A8C4D5A6BFD5A8BED7A8BDD8A8 +BDD8A8BBD8A8BBDAAABAD99DBAD7A3BED7AEC0D4B999AA93566655141B00645D074A43091B2F37 +76828C8F738AB997B8A286AE9E8EAA555946212A02525D301724002E372C7C848AA8B3A7A4B29C +AEBCA3C0DCA4C0D8A4C1D7A7BFD6A9BCD8ACBBDCADC7D4A19CC1A722899000AEC5039CB01D7783 +88C7B082C0AB81B9A584AE9A92B19E9FB6A37297893F6D5F49858089CFD781C7E07BC1E4327894 +427E9543717AC7E1D8E0EAD2D6D8B4CFDBB2D6DECEB7AFAB562D1D5C2B085A2D006C5F4BDBE0E5 +C3D2CEDCE4A8D8D8AAD8E0E8B0C0BCB6CCC850827A03675F0B82860A7E900080870685900B8B9D +0B849A0B7E91127E8F0A82980B8CA2069EBA0AAFD11299B43691A5AFDAC3BCDCB8C4DEAFB2DAAB +ACDAA8B4DEA6B7DFA0B5DC9EB4D798BBD89FBCD6A4BCD6ABBFCEA4CFDEBBEEF8E0FBFEF3FFFEFE +F9F6FEFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +FFFFFF919191070707E4E4E4FFFFFFFEFAF6FEFFFFFBFAFAFFFFFAEFFCFF749CBBACBFD8F8FFFF +FEFFF3FEFCF7FEFCF9FCFDF7FCFFFDFDFFFEFDFFFEFDFFFEFDFFFEFBFFFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFD8D8D8A2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FDFDFDFFFFFFFDFDFDFEFEFEFFFFFFFEFEFEFFFFFFFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF6B6B6BFFFFFF +FFFFFFFFFFFFFFFCFDFDFCFDFFFFFF000000706E6EFFFFFFFAF4F5FAF8F8F4F6F7FBFFFFC7CDCD +49575895A5A48C949B9C9CAEB4ABBDB9B1BBCCC7C6BDC3BCC6CAC3CDD1CBDBE0DDDCDFDDCACDCD +BEC3C3ACAFB39DA0A9A8ABB29CA0A48D9090929D98919A968E9694585E5CCFD1D1FEFFFFFCF8FA +F8F4F6FDFBFCFCFAFBFFFCFDFFFEFEFBFEFBFCFEFDFCFEFAFCFEFAFCFDF9FAFFF7FEFCFDFDFEFE +FCFCFCFEFEFEFEFEFEFEFEFDFEFEFFFBFBFCF9FAF8FAFBF4FDFEF3FEFFF4EFF7E2F3FEE6E2EFD3 +C9D8B6C6D7AFC3D4AAB4D2A3BEDAA9B6D1A1B6CEA2D1E5C2BFD1B67E8872757C6BBAC1B8ECF8F9 +DFF3FAD3EBF5B6E3F1A9DCEAA5E1EE9ED7DD7FB2AD578579668671A6C2A8C1DAB6BBD0A5BFD7AA +C0DAACB6DAA3BADBA7BBD9A8BED8A9BFD6ABC1D4ABBED7ABBDD8ABBDD7ABBBD8ABBBD8ABBADAAB +BDD99EBAD7A5BAD3ACB9CFB396AB90657963535D33D0C75CB8AE643B545C8391A2896B87B791C8 +A587BDAF9CC06A6A54666E35C6CE8A7C92645967567B8588A6B3A7A1AF98A9B6A0C1DFA2C1D89F +C0D6A4C0D6A9BCD7ADBBDBAEBCD09D99BEA83491A000ADD109ADC9067686066E6B066B6A12686A +25656A1F545A052F38275C615D9CA16FBAC578C8DA85D1EE59A1C45D96B3A8DBF36B95A1748F80 +4B5D3C6673435A6E345F694C85726A9D5F47D28756CC8340967F5F9699A33E514C6E711D666421 +545A60758E81B5D9CF4C928D0B8E9019B7C710AFD116A4BD16A7C514A7CC13A5C715A2BE159DB0 +00B5BA01B3BE04BCCE00BACE009AA5249194A3D9B4B9DBA9C1D8A0B8D9A4B1DBA6B4DEA1BBDC9F +B6D69BBCDB9FC4DBABBFD2AABECEAEC7D5B6E4EFD5F4FCEAFEFEF8FFFEFEFCF8FEFCFCFBFCFEFC +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707 +E4E4E4FFFFFFFFFBF8FCFDFDFDFCFCFFFEFAEFFCFF749ABBB3C0DAF9FFFFFDFDF1FFFBF9FFFCFB +FEFFF9FBFFFDFBFFFEFBFFFEFBFFFEFBFFFEFBFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +D7D7D7A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C6C6CFFFFFFFFFFFFFFFFFFFDFBFE +FFFBFCFFFFFF000000716E6FFFFFFFFFF8FAFDFAFBF7F8FAFFFFFFCACFD13140447D8F8B98A2AA +A8A5B9BDB5C7E9E0E7F6F1ECF4FEF3F6FFF7FAFFFCE1E9E6E2E9E7F5FEFBE6EBE8D4D8DBBEC2CB +B9BDC49FA1A694969596A99D8394887F8C855B675FCED4D1F6FEFAFCF9FBFDFAFBFDFBFCFBFBFB +FEFDFDFFFEFEFBFDFCFCFDFCFCFDFBFAFCFAFAFCF9FAFFF7FEFDFEFDFEFEFDFEFEFCFDFCFCFDFD +FEFFFDFDFCFFF9F9FBF8F9F6FDFDF5FEFFF4FFFFF4F5FFE8E6F1D6CCDBBAB5C8A0B9CDA1C6DBAB +B6D8A9ABCB9BBAD6A8C6DFB8BDD0B37A8D75777970CAD0C9ECF3F1E0F2F7D4F3F7B7DDE3A5D6EC +B0E5FC98D5E878B0B4558075688873ADC6A3CDE2BAC9D9ADB4C598C0D9B0BDD8B5AFD9A3B6DCA7 +B8D9A9BBD7AEBED7B0BED6B1BFD6ABBDD7A9BCD7A9BAD9ABBAD9ABB9D9AABBD89DBFDCABBEDAB6 +B9D0B591A98C597257576432E5D865C4B86534505A7B8DA3896687B892D69E81C1B09EC7706D55 +6A6D2DDFE48E8EA874576852758284ADBCB2A6B79FACB9A3C0DFA1C1D79FBFD6A2C1D9ABBCD7AB +B7D8ADC2D3AA9EB9B3398DAD00A6D701BADF01A0B2129AA81D9BAA2D99AD3D92AA185E78074460 +72B1C580CADF73C7DD76CCE586D4F15198B97CAFCBC2EEFF688E99698375576D45A7B78298B46D +64704A846A5DB86B51F1955EED8E3FA1825A8787913F514BC2C15EA39D4B5E6368748C7ABBE0D5 +4A9794008D9909B8D506B9E907B7D202B7D800B5DB00B7D802BCCF03BBC304BFC513B4C314B7CD +03BECE01A1A428968CA3D5A4BAD69CC7CF91C3D69EBEDBA4C0DEA1BBD69FBBD59DC6DCA7C7D9AF +C1CDAEBBC6AEDDE8D1F2FCE9F9FDEFFCFCF6FEFCFBFFFBFFFBFBFBFDFEFEFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFEFCF9 +FAFAFAFEFEFEFFFEFAEFFCFF759CBBA6C2D8EFFFFFFAFFF3FDFEF6FEFCFAF9FEF8FEFDFDFEFCFE +FEFCFEFEFCFEFEFCFEFDFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDB919191DFDFDF +D8D8D8D8D8D8D8D8D8D7D7D7D8D8D8D7D7D7D8D8D8D8D8D8D8D8D8D7D7D7D8D8D8D7D7D7D8D8D8 +D8D8D8D8D8D8D9D9D9D8D8D8D8D8D8D8D8D7D8D8D7D8D8D7D8D8D8D8D8D8D8D8D7D7D7D8D8D8D7 +D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8 +D8D8D8D8D8D8D7D7D7D8D8D8E2E2E2626262FFFFFFFBFBFBFFFEFFFBFFF9FEFFFDFFFFFF000000 +676668FFFFFFFBFAF7FEFCFDFFFFFFF5FFF899B39B0024003D492E7E8879DFE3E7FFFFFFF4F4FF +E7E5EADFE7ECCBD9D3A8BCAB466149405B49A5BFB5CECFCBC8C7CFC2C0D1BBBAC9B7BEBFA6B1A5 +64766E3449351D38164B643FD3DECEFCFFFCF7FCFFF6F6FAFDFAFEFFF8FEFEFAFFFCFEFFFAFDF8 +FCFDF7FAFEF7FDFFF9FDFFF8FEFFF8FDFBF7FEFCF9FEFAFCFFFCFFFFFAFFFBF5FEF9F8F9FBFBF8 +FFFFF8FAFDEBF8FBE6F2F5DBCBE4BEB6CFA9B8D2A8CAE5B5BBD6A4BFD9A6C1DDAFC9E1BBCAE3C3 +94A8975F756A8EA29DEFF8F3EBFAF9E0F5FAC1E2E9A6CFD2B2E1DEA7D7EB95C1D16D959B466C5E +89AC94BBDDBECFE2A9B8CE96C0D7A2CBE3B2B5CC9CB7CFA2BCDFB0B9DBADB6DAAAB9DCABB7DBAB +B5D9A9B4D9A9B8DBACBADBACBCD7A9BDD6A9BDD6AABDD9B5BBD7A2B7D29BB8D0AE9BAD9B5D7062 +596A48E8D941BEA84736565879939193619FBE88CCA078C1AF9EC8686F476B7A28C7D57B798C56 +4C6C47739283ABB3AFAAAA98B8BE98C1D9A9BFD8A5C1D9A4BFD7A3C1DAACBFD7ADD3D2AC87BAAC +2598A601A7C903B0CF09B2CA21BDD715A2CA0F88B00058702D8CA177D3EF72C7E66FC9DF6BC5DE +7BC8EE8FD3F28CCCD767898D6B9099668C9379988B516842C1D498B9C9726466336D675FBD6D40 +FF8C32D98C3EA17A5A7782853B5D41EDE170C9AF54665E52738769BFD4C55783860768751A93A6 +0E8CA40D85990D849614889A158A9D118C9B0F8F9C089186128C8D158B910D8885077A6D2A8E7E +B9CEA7C4DAB0C3D8A6C6DCA3C0DDA1B7D99BB7DC9EBCDBA4BBD9A8C0D3B0C2D2B7D6E3CDF7FCEF +FCFEF5FBFDF8FBFBFAFCF9FFFEF9FFFAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFCFBF6FEFFFFFBFBFAFFFCFA +EFFBFF7499BAA9C4DAEFFFFFF7FFEFFEFEF8FEFCFAF8FFF8FEFCFDFEFEFEFEFEFEFEFEFEFEFEFE +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9B4B4B4A2A2A2A4A4A4A2A2A2A5A5A5 +A1A1A1A3A3A3A2A2A2A4A4A4A4A4A4A3A3A3A2A2A2A2A2A2A2A2A2A5A5A5A4A4A4A3A3A3A5A5A5 +A4A4A4A3A3A4A2A2A1A2A2A1A2A2A1A4A4A3A3A3A2A3A2A1A2A2A3A2A2A2A2A2A2A2A2A2A2A2A2 +A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2 +A3A3A3A0A0A0C0C0C0FFFFFFF9F9F9FDFCFCFBFFFAFEFFFDFFFFFF000000666567FFFFFFF8F1F6 +FBF7FAFFFFFFC4D2C03E5A39335A2C49663D4F674BB2C2B9DFE4E4CFD0D7C1BEC4C3CAC3A3B2A0 +394F3133512F48654748644CA2A6A2B9BAC0B1ADC0A5A5B4AAB1B18D988C203B1D47653F4B6C3B +2A471CAFC2A7FCFFFCFEFFFFFAFAFDFEFBFDFFF9FEFEFCFEFCFEFEFAFCF7FCFDF8FAFCF7FDFFF9 +FDFFF9FCFFF9FEFCF7FDFDF9FDFCFBFEFBFFFFFDFFFCFAFEFDF9FAFEFCF9FEFCF3F9FBEAECEDD6 +DCDDC4BFD6ABBFD6ABC6DCB0BAD2A2BAD2A0C1D8A6C9DEB4C7DCB59FB39464776595A99DE2F6F0 +E2EFEED0E1E5CBE3ECC0E3EDB4E0E8B0E2E79AC7CB699593466F6594B8A1BCDEBEBFE0BAC3DAA7 +BFD5A5C2D9AABFD6A9BCD3A8BCD3A9BBDAAABBD8ABBBD9AABBD8AABBD9AABCD9ABB6D8A9B9DAAC +BADAACBCD9ABBDD8ABBFD8ABC1D6B3C0D9A5BCD7A0BBD4B595AC995C76685E674EE9DA3DBFB13F +3B5969778C9F8A648DC590D0A67EC2B39FC6666A3D717C26CED67A80955D54724B799785A8ADAB +AEAE9FBCC4A2C2D9A8C0D7A4BED9A0BBDBA4BBDCABB8DAACD0D9B892BDAA2A8383038C9908A1B3 +06A5B8189CAD0F89A80370902586976CCCDB6CCAE36CC3D670C8D57CCFE086CDE98ECCDEA8DFE0 +55726B3253504B6B696D8A71536D36B5CD81A3B95D616A30767667BC6F41F6842BD48B3D9A8561 +7D8B9637533FE8DA51C1AC40626566888173CDC2BF6A7077275A632F717A2D6C7B317075326E75 +326E74316E742F71742D727348696948626C425E6B3C656640635B6B8073B6CCA4C2D8ADBDD1A0 +BBD39BBBDB9EB4D799B6D99EBDDCA6B6D2A5B5C9A8CDDFC5E7F6E0FBFFF5FAFDF4FAFBF7FCFCFC +FDFBFFFEFBFFFCFCFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFFFFFF919191070707E4E4E4FFFFFFFDFDF8FBFEFDFCFDFDFFFDFAEFFBFF7498BAB2C7DF +F4FFFFF8FFF0FEFEF8FEFCFAF8FFF8FEFDFDFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F8F8F8FAFAFAFDFCFDFBFFFAFEFFFDFFFFFF010101656465FFFFFFFEF5FEFFFFFFF4FAEF8CA17F +4265326F9B5D689B583C66353C5C3C6B7B6FADB2B0DEDCDFD5E0CB7C8E7049693A6B945E769C6B +37582D5D665E9C9FA19B9BA7B3B3BD929C975F705F3761276E9A5963914932591D6F8D64C1D6BE +E7EEEDFBFFFFFDFDFFFFF9FEFDFDFBFEFFF9FAFCF9FCFEFAFBFDFAFDFFFBFDFFFBFCFFFBFCFBFA +FCFDFAFCFDFAFCFCFBFFFFFFFDFDFFFFFEF8FEFDF6F8F8EBE9EBD6D7D9BDC2C4A7BED5A4C2D7A7 +BDD0A2B9CD9EBFD3A3D9EDBCBAC6A281916E6A795FBACBBCEBFDF6E2F5F0D4EAEECDE6F0C2DEEB +B3DBE6B7E4ED8ABFC5557E6A5D856D96BC9BC7ECC0BBDCADB7D4A6BBD5A7C5DEB2B7CFA5B9D2A8 +C5DCB2C7DEB5BBD3A4BED6A8BFD7AABCD4A6BFD7A9C1D8ABB9D7A6BCDAAABBD8A9BFDBABBFDBAB +BEDBABC7D5B3C6D8A7C3DCA7B4CEAF87A392537265605C4EE4DB3DC3C13E314D6A7C8DB58E7388 +B681BC8A62A0A08AAE6C6E3F6B721ADDE38698AD745673487D9683979895B6B6AAC2CBB0C5DAA9 +BFD7A6BCD89FB9DDA4B6E0ACB2DEAEB8D9AD9BC39F3C73571A6A5E26888A097582005C6502687D +3A9BB276D7DE6FCFD56FD1E275C7E086D8E87AC4D69AD3EDAAD9E86C9894546D5290A8977E978A +7C9470546F2BAFCE70AAC868677737767D66B87240FF913AD9944A99946A7B8DA53D4F41F0DD3F +C7B83B54656F867978D5C2C3A19997A2B4AABDDCCCC2DCD0C4DDC4C8DDC6C6D6C3C8DDC8C4DEC8 +C1DFC9BCE1C4BCDCC4B5DBC3ACE7C3A8E5B8ABDDACD2E2BDC3D6ABBCD39FB5D196B3D498B5DA9E +BAD9A5BDDAA9B8D4A9C6DABCDDF0DAEEFFECFAFDF9F4F7F1FBFCF9FEFEFEFFFDFFFFFBFFFEFEFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191 +070707E4E4E4FFFFFFFEFEF9F7FBFBFDFEFEFFFCF9EFFBFF7499BAB4C6DFF8FFFFFDFFF2FEFBF5 +FBFCFBFAFFF9FEFFFDFEFDFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDF7F7F7F8F8F8F4F4F4FCFCFCFBFBFBFEFEFEF8F8F8DBDBDBFFFFFF +FFFFFFFFFFFFFEFEFEFEFEFEFBFBFBFBFBFBFEFEFEF9FAF9FEFCFEFCFEFDF8FAF8FCFDFDFCFEFE +FCFEFDFCFEFDFAFBFEFBFCFEFAFBFDFEFEFFFCFEFFFBFCFDFBFAFDFDFDFFFDFDFFFCFDFFFCFDFF +FEFEFFF9F9FAFDFDFDFBFBFBFCFCFCFCFCFCFEFEFEFEFEFEFDFDFDFEFEFEFDFDFDFAFAFAFDFEFD +FBFDFAFDFEFBFFFFFF0E0F0E5B5A5BFFFFFFFFFEFFDCE2DA8295783F682F6D9D5560974760A14E +70A95F2F5D252D4825687761A9B0A24656312545116296506FAA5B5D964977AB622741212C3E2A +4E5850919A8F465D422D512963A14A6DAD5264A3436BA04E3761252F51267E8E7CEEF7EFFEFFFF +FAF8FBFDFBFAFDFCF6FDFFFDFDFFFBFAFCF9FAFCFAFDFFFCFDFFFBFCFCF9FCFCFBFCFCFAFEFEFA +FDFEF9FFFFFBFBFDF0F3F8E8E6EAD4CCD0B4C6CCA9C5CBA6C0D39FBFD19EC1D2A5C8D8AED2E2BB +B1C19B81886C89947ED2DFCEF4FFFFDBF4F3D2EBEFCCF0F9C3E6EFB2D7E2B3D9DE719A984B7470 +7D9E79B3D4A7C5E6B4B7D59DBBD9A5B4D09FB4D2A6B8D5A9C0DCB1C3DCB0BFD6AABACFA4C2D4A8 +C1D4A7C0D2A5C7D9ACC1D3A6C3D4A7BED9AABBD6A5BEDAAABBD7A7BBD7A7BAD8A6C9D7B4C3D6A3 +BCD59FB7D0B68DA99B5A7A715B5145D0CC4FACB741334D617D84B587717FAF75AD714586947EA5 +6B6F47616D22BDC6787E97634F6A438194817D7A75B3B0A2C8D3B7C0D5A5BFD6A4BFDBA1B7DBA3 +B2DBA8B2DEADACE2A3B1D79AA1BA88ABB9A0849896405A6721798454AABF78CFE474CED16CC6C7 +80D8E683C9EF86C4E2A9DDF897BBD961808E5A776BA7C08ED3E6C97D8A7B7F8D6E57692DC2D982 +A8C5705B6C316D725EAC6A36FC9239B16D278A835E7084943A4F3FEBDD4EC0BA4A557274768A8B +B0BAB58F9E8AA8CAA3BBDFB0BBD5A4B8D497BED79DBBD39CBBD39EBAD7A1B7D7A3C2CEA4C6CEA5 +BCCD9FBBE1ABB7E0A4B8D79BBFD1A8BCD4A5C0DBA5C3E0A5BBDAA0C0DDA7BCD2A8BACFA6C9DBBB +E3F3DCF3FFF1F4FFF5F8FCFAFCFEFDFDFDFEFBFBFCFCFAFDFFFCFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFF +FEFEF7FBFEFDFDFCFCFFFFFAF1FBFF7399B8BAC6E2FAFFFFFDFFF2FEFAF5FBFDFBF9FFF9FEFFFD +FEFDFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFEFEFEFBFBFBFEFEFEFAFAFAF3F3F3FEFEFEF0F0F0A2A2A2929292E1E1E1B1B1B1E2E2E2 +FFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDF9FEFFFDFFFFFF +0A0B0A5E5D5EFFFFFFF8F9F98798833B5D30336A235C9D4864A74D61A0496CA45454813C52713D +4E643B677655445F323C682962A2505DAB4D58A04567A8534470364B6B3E3D52335368473D6230 +30632064AE505AA33F61A83F62A14443732B345D26617957DBEAD5FEFFFEFCFAFEFDFAFFFDFCFB +FDFFFEFDFFFEFAFCFBFAFCFCFDFFFEFDFFFEFBFDFAFBFEFBFBFDF8FCFEF8FCFEF7FFFFFAEAF4E1 +DDE6D1CDD9BDBFCBA7BECCA3CBD9AECAD9A7C9D8AAC6D4AAC8D5B2A5B194717E629BA192DFE9DD +F4FFFCD7F0F2CDEDF3C4E6F2B3E3EBB7E2EAABD3D871938C54715F8AA68BC2DDB3BFDBAAC4E1A8 +BDD79CC2DBA9C4DAB2B3D6A8B7D9AABCD8AABFD9A9BED4A3C3DAA9C1D4A7C1D5A7C1D5A6C2D7A9 +C2D5A8C0D5A6C1D7A8C0D7A7BED7A8BDD8A7BBD9A7BBDAA6C1D6B1C2DAA5BED8A2B3C9B297ADA5 +768E8B3B342274752850600A5A71748B8BB68E7088CE8FC89265A7A38CBC869176364A0F587035 +445830657E5DA0B09F6E685FB5B29FCCD7B4C2D9A8C6DEABBDD9A0B7D6A0B7D8A7B2D4A8B9DEA8 +C9E7B8CCE0BFA2B1A96A818A5B748762B8CE74C8E66AC1DA75CCD17FD1D681CEDD8CC5E39ED1E4 +92BAC9597582637F74AACBA3D1EEB3C6DAB9848B8282837960653FC2CC8CAAC3805B673C6F7365 +B87141F68A338A44037E654B7588863A5C41E3E17AACAD584B6E5C668184899A9293A68DB1D8A8 +BBE3ACBED9A4B4D690B8D695BDD99CBEDBA1BDDFA7B9E1A8BEDCA9C3D8A8BCD6A3ABD89CB7E1A6 +C3DCA7B9D4A5B9D6A4BDDEA4BCDB9FC2DAA6CADCACC5CDAAC2CBABDAE3C9F5FDEEF7FEF5F8FCF8 +F9FCFFFCFCFFFDFDFFFDFCFFFCFAFDFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFEFEF8FBFEFDFDFCFD +FFFEFAF1FBFF7399B8BFC9E4FDFFFFFEFDF0FEFBF5FBFEFCF9FFF9FEFFFDFEFCFEFEFEFEFEFEFE +FCFEFEFCFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFEFEFE +FFFFFFFCFCFCFCFCFCFEFEFEFCFCFCFFFFFFE1E1E1A2A2A20000002D2D2DFFFFFFEAEAEABCBCBC +AFAEAFB1B1B1B1B1B0AAB0B3ACB1B4ABB0B3ABAFB2A9B0B1A9AEB1ACB1B4AAB0B4AAB0B4AAB0B4 +ACB1B5AEB4B7ADACB0ADABB0AAA9AEABA9AFABA9AFA9A7AFB0B0AFB1B1B1AFAFAFB0B0B0AFAFAF +B2B2B2AEAEAEAEAEAEAFAFAFAEAEAEAFAFB0CBCBCAFFFFFEFEFFFDFFFFFF1B1B1A515052FFFBFF +F6FAF3678062618D5764A6565AA44C61AF515F98436397466F9C5076995A4A622D283A10779566 +6B9F5D5CA74E49A23D55A94659A44769A156709A5C4863341C39096A9A5566A34F54A64855A43E +5BAA3D5CA03B69A151618F51557040A3B596F6FDF6FDF9FFFDFAFFFDFDFFFEFFFDFBFEFDF9FBFB +FAFDFBFDFEFEFDFEFEF9FDFBF9FFFCFAFEFAF9FEF7F9FDF3F4F7EEC1D1B9C0D0B6C5D4B5C0D2AC +BECFA4C4D9A9C9D5A7CBD5AAD0DBB39AA286788067A5AC96FAFFF7F4FCF7DFF3F3D0EBF5BCE1EF +B1D9EDB1EAF198CAD05D8988547160A4B99BCADBB0C5DDB3C3DBA8C6DDA2BFD59CBED3A7C0D2B3 +B5DCABB7DCA8B9D9A5BED9A5C1D8A1C2D8A0C1DAA7C0D8A7C0D8A7BFD7A6C2D9A7BCD4A2C1D5A3 +C5D8A7BED6A3BED8A5BBD9A5BADAA5BBD6AFC1DDA7BCD7A4B3CAB59BABAA9EAFB337311D414119 +2535009BB3A4A8A1C48F6C92CF8BC6A777C0A997CBB0BFAF304C21274B202A3A1A82997FABB7A8 +746C5EB4AF97CEDDB4BED7A5C4DDA9C2DCA5B4CE99BDD6A8BDD4AAC7CEAFC5D2BF95ABA7396571 +49849A79BED468C0DD69C3E76EC7E77CD0DA82CDD78DCEE4A5D5DF81AEAC587B73769184BBDAB4 +B8E098BCDD9DC5DBB981828390878C4E4939737449647442646A4B777773BA7142FC8F39BA7431 +A87C6E839683154320777E3C6E70354A734D808792757471ABB09BC8DEB3BDD7A6C7D5A9C1D999 +C6DA9FC6D49FC1D4A2C1D7A8BDD8A9B1DAA9BDDAAABEDCAAADD6A1BDDFADC6D4A8B5D5A4B5D8A1 +BBDFA5BFDDA4C5D6A5C2CC9FCACBAED9DABEF0F1DCFFFFF7F9FBF5FCFCFBFAFDFFFCFDFFFFFEFF +FFFEFFFCFAFEFEF9FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFEFDFFFFFF919191070707E4E3E4FFFFFFFEFEF8FBFEFDFDFCFBFFFEFAF0FBFF7399B8 +B7C4DAF8FFFFFDFEF8FFFAFEFDFCFFF8FFF9FAFDFCFBFDFCFCFCFCFEFEFEFFFBFEFFFBFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCFFFFFFC4C4C41E1E1E131313B3B3B3CDCCCC5A5E5D7072716C70706C726F +6E71727074736D71736E717772757B73757D70737773747B72757A75787D73767B73757B707578 +73767974787B74797C757A7C787C7E7777787979797C7C7C7B7B7B7D7D7D7B7B7B828282818181 +8282827D7D7D6F6F6F747474FFFFFFFAFAFBFFFFFF1A1A1E535255FFFFFFE5EBDD6A865F4A833C +56A54461AD4F5A9E485F9F4A60A03F5F993A76A25E577F411D410061903E65A14D5CA84D52A546 +54A44557A243649F4373A4535E853E1F490057903A67AC4D60A0395DA73858AB3358A63365A33E +78A64D4A6B3858704CEAEFE2FFFDFFFFF6FFFFF1FFFAFDF7FEFEF9FEFEFBFCFBFAFFFCFFFFFDFE +FEFBFEFEFDFCFBFEF6EDFDE8E4F7DFC4DCBEB0CDAEB8D4B2BBD4B0B5CD9EC4D8A7C7DBA7C8CAA3 +C2C7A38F967C788174BECCC4F7FFFFE0F2F6D7EFF3C7EAECB7E1E4BFEAEEBAE5EB7FB0B358817C +62816FB7D3A9C6E1A6C7E49FB8D5A0BBD7A2BDDAA4B9D69FBEDBA4BCD8A2BBDDA2BADAA1BDDFA5 +B8D99FB9DBA0BADBA1BBD7AABCD8A9BCD7A9BEDBAABED9AABEDBABBCDBA9BBD9A9BCDAA9BCDBA9 +BDDAA9BEDBA8B6DAA2BADBA7B9D5A8BED2B07A8A6F7A867146633569995A498638587C497E7774 +926592C687C0B97EB59B7E9D648D6D4777437F9869507D454E714B566C586A786AACBAA1CCDAB5 +BBD5A2BCD19FC5D3A6C5D2A9CDDDB3CFE0B5B5CBB576978B4476775197A969B8D472C5E567C6E7 +6FCCEC77D3EF7ECADE93D2DA9BD3D36D97895D8073809988C9DDBAC8DDAAC1DA97B2D397C4D2B5 +989797BEB4BA3F3F2E333B111641006F9367AB9D7FC76526F9843CD97C36A78B75C9C5A7375323 +0C3B0022420A686F50B8BABC69796A99B396C7E7B8B8D09FC8D9A6B6CB96C5DAA7C1DAA7BFD6A8 +BDD8AABED6ACBAD8B1BAD7B0B8D8ADBCDBABBEDDACBBDBA7B2D5A3B7D9A8C2E2ADC3D9A9BFCFA4 +C8CEA9D2D6BEECEFDBF8FCE9FFFFF5FEFFFAFEFEFCFCFCF9FFFFFCFFFFFDFFFFFCFFFFFCFCFDFA +FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFDFFFFFF +919191070907E4E5E4FFFFFFFDFEF6FBFEFBFCFCF9FFFFFBF2FDFF7197B4B7C7DBF8FFFFFDFEF7 +FFFAFDFDFDFFF9FFF9FAFDFCFBFDFCFCFCFCFEFEFEFFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFB +FCFCFCFEFEFEFFFFFFFFFFFFF4F4F4BBBABB969896DFE2E1D4D8D7D3DBD7D7DBDCD9DDDDD8DCDF +DADDE1DDE0E5DBDEE7E0E3E7E2E5EAE0E3E8E2E5EAE1E4E9EBEEF3ECF1F3EDF1F4EEF2F5EFF3F6 +F1F5F8F1F5F7F6F4F5F4F4F4F2F2F2F8F8F8FCFCFCFDFDFDFEFEFEFFFFFFFDFDFDFFFFFFAFAFAF +646464FFFFFFFEFEFDFFFFFF212123504F52FFFFFF949D8E405F364983395AA44460A9465B9E40 +5D9D4167A540619C3A699C50416F292451025C923462A2425AA64056A93F57A53C5DA63C69A149 +6B9A4E466C292F561558893D67A150599E3059A62F5BAE3156A63053983068A14460844B4C673D +EFF2EAFFFFFFFEF9FFFFF6FFFBFBFBFEFEFDFEFEFCFDFCFCFDFCFDFDFBFCFFFEFCFEFFFAF5FCEE +DFF1D2C8DFBAB8D3A9BCDBABB8D4A7B7D0A3C2D8A9C2D3A6D1E5B6BABB9D83886E707865DEEAE0 +F8FFFFDFEEF2D4F0F2C9EBECBDE4E5BCE5E5B4DBDD81A6AA4C737176988FB7D3BDC0DBB1BDDDA2 +B6D893B0D197BCDDA2BCDDA2B4D69ABBDBA1BDDFA3BBD8A0BBD9A2BEDCA5BAD9A2BBD9A2BADAA2 +BDD7A9BCD9A9BCD8A9BCD8A9BCD8A9BCD9A9BCD8A7BCD8A7BCD8A7BCD8A7BCD8A7BDD8A8B7DAA4 +B6D6A2BFDCACBBD1A74B5D384B59395B8D5365AA5D4DA145366F2F465043896785CC8AC5B176AE +6B51693B5F355789487DA3636A9C604B74471B391B51664EBBD2AFBDD4A7BCD9A1BFD6A3BBCEA2 +C1D9B0C4DFB9A9C7A15D837640706C66A4AA78C4DA6FC2DE6EC5E66EC4E67BCDED7ECDE68DD0DB +8EC7C66799905E816B95B39FC3DAC4C5DCB9BDD5A5BAD79CB8D79CC9DCB8818A7B818E7C576E46 +7092524B8327517D43817950C56B2CF48339E7803B957C649B9B77547840588E415178395D7148 +81868562736298B391C8E8B9B9D3A1BFD2A1B9CD9AC6DDAABFD7A5BED8A8BDD8A9BED7A9BCD7AD +BBD8ADBBD8ABBCD8A9BCDAA9BBD8A6B6D7A9B8D9A9BDDDAABCD3A5C2D0A9CDD2B1E7EAD5FAFEE9 +FCFDF0FEFFF6FEFEFAFEFEFBFCFCFAFFFFFCFFFFFCFFFFFCFFFFFCFCFCF9FCFCFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFFFFFF919191070807E4E5E4 +FFFFFFFDFEF7FBFEFBFCFCF9FFFFFBF0FDFF7297B5B7C5DAF9FFFFFEFEF8FFFAFDFDFDFFF9FFF9 +F9FDFCFBFDFCFCFCFCFEFEFEFFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFFFFFFFAFAFAFCFCFC +FFFFFFEDEDEDA1A1A1B8BAB9D2D5D4CCD0CFCAD1CDD2D5D7D5D9D9D4D9DBD6D9DED8DBE1D7DAE2 +DEE1E5DDE0E5DEE1E6E2E5EAE1E4E9DFE2E9E0E5E7E3E7EAE2E6E9E4E8EBE5E9EEE6EAECECEBEB +EDEDEDEFEFEFEBEBEBF3F3F3FAFAFAF5F5F5FBFBFBF6F6F6F9F9F98888885F5F5FFFFFFFFCFCF9 +FFFFFF28282A4A494DFFFFFF5865563A59306FA25968AC4A65A84466A44767A24470AB446BA443 +6CA25630651A49802969A54066A94266AD4364B04261A83A6AAC4074A9516697482E5A16568142 +6E9D576EA2555EA93861AE3962B13965B13E5DA23D60A045648749456033EBF2E6FFFFFFFDFBFF +FBF9FFFBFCFDFEFEFFFDFEFFFBFDFDFAFEFCF9FCF9F8FDF3F3FCEAE1EDD4C7DCB1BAD3A0C2DEA5 +B7D697B6D498BED6A1CCDFB3D0DFB79CAD85787767929687D6DED4F6FFFFDFEFF4D9EBF5C7EFEE +BBE3E4BDE7E4B1D9D47598924E6E6886A094BCD3C2BAD1B6B7D1A6B8D8A0B4DC9AB3D698BDDFA2 +BBDDA0B4D79ABADC9FB7DB9DBCD8A1BAD7A1BDDAA4BCD9A2BCD9A2BCDAA3BDD7A7BDD9A8BCD9A8 +B9D5A6BBD7A7BAD7A5BCD6A5BBD6A4BCD7A4BBD6A4BBD6A4BCD6A4BADAA5BCDAA6C8E3B1BED9A5 +4A5F2D4A5D2C73AE6A63B25957B54E5A9E5449594183667CD196D2B284B75B4B585B79466EA153 +6BA2506AA4636C9E680F360D486543C3DEB4C5E2AFC2DEA4BCD8A4BEDBACBBDEBA97C1A1548265 +3B797B64A8AD6CB9C975CBE271CBE768C6E383CCEA88CEE79EDEEC89BEBC5582745A816CB3CBAA +C7E0C0C5DEBCBAD3AABCD8AABADAA6C1DDA4CFE6BB51694832552A4A7D3A6AA9515AA03A2C5F16 +494C14AA5D20F08844F389477B644750542C49743671B35D588E42466B35373E3454664FA3BF99 +C2E5B2B9D3A2BCD1A2BDD29FC2D8A5C2DAA9BED6A7BDD6A8BED6A8BBD8AABCD9ABBCD9A8BCD9A9 +BBD7A6BBD7A8BCDAAEBCDCAEBBD7A8BAD1A5C9D4B2E0E3C8F3F5E6FDFFF0FBFDF1FEFFF7FEFFFB +FEFEFEFCFCFAFFFFFDFFFFFDFFFFFDFFFFFDFCFCFAFCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFFFFFF919191070807E4E5E4FFFFFFFDFEF7FBFEFB +FCFCF9FFFFFBF1FDFF7297B5B8C8DCF9FFFFFBFCF6FFFBFDFDFCFFF9FFF9F9FCFDFCFEFDFDFCFB +FEFEFEFFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFDFDFDFCFCFCFAFAFAFCFCFCFFFFFFDADADA787878 +D6D8D7CACDCCCDD0D0CFD5D3D3D6D8D5D9D9D4D9DCD4D7DDD8DBE1D9DCE4D6D9DDDADDE2D9DCE1 +DFE2E7DBDEE3D9DCE1DDE2E4DFE3E6E0E4E7E4E8EBE5E9ECE4EAECE6E5E6EAEAEAEEEEEEEEEEEE +F4F4F4F2F2F2F2F2F2F5F5F5F0F0F0F5F5F58383836F6F6FFFFFFFF8F8F4FFFFFF2D2D2C49494A +FFFFFF566153475B3A6A8F524D7B2E4F7E326089424E7C3253843656883F5488541B541B468139 +4C8A38508D3C528E3C528A3651832F5B843453883550863C15501355925B5090574C884D52994B +4D903C4D88325589375C9046518541496935465F3AE8F2E4FCFFFEFDFEFFFBFFFDFEFBFEFDFBFD +FCFDFAF9FEF9F9FEF7F5FEF6EAF9DDD6E6C7BFD4ACB5CD9AB9D59BB9D898B5D290BEDA9DC7DEAB +C1CFAC93A085757E69B2B3ADF9FAF9FAFFFFE0F1F9D7EDF9CEE4F5C4F0ECC0ECE5A0CBBD597F6B +617E69ABC1ABC6D7B8C5D6B5C9D9B3C1D8AAC0E1A9BBE2A5B7D99DB6D79CBDDEA3BADBA0BADBA0 +BADC9FBDD7A7BBD7A5BCD8A6BCD8A6BCD8A6BCD8A5BCD9A4BDD8A5BDD8A4BDD8A5BDD8A5BBD9A6 +C0DAA5BFDAA4BCD7A1BED8A4BDD8A3BED8A2BDD8A6C2DEA9C4DFA9AFC9924E682D435D215F8E4E +4C87354E8F325685413F4D37584B5B8380B2747A9D2030304F6933669142548C39467D3D629258 +193D0F67855BCDE9BAB9D5A3B9D9A0C2E4B4BEE3BF78AB952F6F63448C8373C8D470C8D772CDE0 +6DC9DF6DC6DC77CEE195D2E29BD3DB81B0AC4D735C749674B6D3AED0DFB4C4D9ABB5CF9EB8D2A3 +BDD9ABBED9ADC4D8A6C6DEB1425F303F6C2E6CA4565FA04662A94B6594495058208B6030E6A472 +ED9F6B4C3A1A515B3364955465AE5372AE5B7CA96C27301C495D3DADCE9FBEE3B0BAD6A5BCD3A3 +C5D8A9BAD1A3BED4A6BFD8A6BDD9A4BDD8A4BEDAA7BDDAA8BAD7A6BBD6A6BBD6A6BDD9A8BFDAB4 +B8D4AAB3CFA6BECFADDEE5CFF5F4E6FFFFF8FDFFF5FEFFF8FEFDFAFBFBFAFEFEFDFCFCFAFFFFFD +FFFFFDFCFCFAFEFEFCFEFEFBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFAFBFFFFFF909090070907E4E5E4FFFFFFFDFEF7FBFEFBFCFCF9FFFFFBF1FDFF +7297B5BAC9DEF9FFFFFCFDF7FFFAFDFDFDFFF9FFF9F9FCFDFCFEFDFDFCFBFEFEFEFFFDFEFFFBFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDFDFDFDFAFAFAFFFFFFFEFEFEFFFFFFCCCCCC908F90D2D4D3CCCECDCDD1D0 +CDD3D0D0D4D6D4D8D8D3D7DAD5D8DFD6D9DFD4D7DFD5D8DDD7DADFD9DCE1DBDEE3DDE0E5DDDFE6 +E0E4E6E1E5E8E0E4E7E4E8EBE6EAEDE4EAECE9E8E9EBEBEBECECECEFEFEFF1F1F1F1F1F1F8F8F8 +F0F0F0FBFBFBC9C9C99A9A9A7F7F7FFFFFFFFCFDF7FFFFFF383836434342FFFFFF9296905C6750 +556B3E54703A546E3E5B744B4E6C3F547446375D37315C491F5136306A3E366C3D4C7D4F446E42 +34562A5D794D5E73482F5F301F58300950321C6B5714634D14614B226240275A34436A3D4E683B +5A70485B745058724E7D8E77F6F8F4FEFEFFFEFEFCFCFFF8FDFBFAFEFCF9FCFFF6F3FCEEF1FEED +EBF8E5CAE2B9BDD5ABB8D1A2B4D19CBFDCA2C0DEA2BED8A3C9E2B1C7D8B387947E747D6FB7BFB8 +FFFFFFFAFEFFE8F2F7D8ECF4CDE6F2C3E1EFBEE1DC94B9AD5E8471749476ABC39ECCDFB6C7D6AB +C1D0A6C2D2A5C3D5A6BFDBA7BBDDA6B7D19EB7D19EB9D3A1BED9A6BED9A5BED7A6BCD7A8BCD5A6 +BED8A8BDD6A8BDD6A8BED7A8BBD9A4BCD8A4BCD9A4BCD8A4BCD8A4BBD9A3C1D9A4C0D9A3BED6A1 +C0D8A2BFD7A2BFD8A2BDD7A1C0DCA5C1DCA6B5CF9974915959733B4A78424C763252772B5F7E48 +3D58471A333D245D81235E7212433E5771405C793950813F4373385377434763349AAE85C8DBAF +B4C699C5E5B2B0D4AA6793763C79724F9DA168C2CB70CEDD60BED06AC9DA74CEDC7BCED88FDCE3 +8DCBCB61968D4A765F89A985C4DEB5C8E3B6BCCB9CBCD19CC9E4ABB8D49BC0D6A5C5D5AAC9D9AD +C0D2A6455F2F4E6E376B905069914859924A7B9E614F5A2C68593CB59879B98F68443516596741 +6295574B9138679E4F7498602F3D1C607851B8DAA8B7DDA8B6D5A4BFD8ABC4D5AABCD2A5C0D8A8 +BFD7A4BED9A4BCD7A3BFDAA4BFDAA4BCD7A5BED7A8BDD7A8BED8AABED8B2B8D1ACBCD4ADCDDCC1 +F0F5E5FFFDF6FDFEF8FCFDF9FCFDF9FCFBFAF9F9FAFCFCFCFCFCFAFFFFFDFFFFFDFCFCFAFEFEFC +FEFEFAFCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAFB +FFFFFF909090070907E4E5E4FFFFFFFDFEF7FBFEFBFCFCF9FFFFFBF1FDFF7297B5BCCCE0F8FFFF +FFFEF8FEFBFDFDFDFFF9FFF9F9FCFDFCFEFBFBFCFBFEFEFEFFFDFEFFFBFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FEFEFEFBFAFAFBFBFBFEFDFDF7F8F7A1A2A2B5B3B4C9CBCACED0CFCBCFCECBD1CED1D4D6D3D7D8 +D2D6DAD2D5DBD5D6DED6D9E1D7D9DEDADDE2DBDDE3E1E4EAE0E4E9E0E2E8E0E6E8E0E6E9DFE4E7 +E2E8EBE5EAEDE5EAECEBEAEAEAEBEAEAEAEAEFEFEFEDEDEDF2F2F2F5F5F5F3F3F3FFFFFF969696 +AFAFAF838283FFFFFFFCFDF6FFFFFF383A393F3F3FFCFCFDE3E0E0C6C9BBB0BB9BBACAA4BAC8AC +BECAB8B4C6B4B8CDBA759286597C8275A29F73AB9182B19C9EC8B580A0916A7D70C4D1C6C8CEC2 +6F9A91356E6B367F87328B9B308A993990A33F76754E777299AEA2C5C7B7BFC1B3BFC3B7BBCEBA +D3DDD3FCFEFDFDFBFFFFFEFBFDFFF6FFFCF6FDFEF5FDFFF5F6FFEFE5F4DACFE2C5B8D3A1B8D4A2 +BDDAA8BFDDA8BEDCA6BCDBA4D1E9BDADC29F7382677D887BCAD0CDF6FAFEFAF9FBE7EAECDBE7EB +D8EFF7C9E4F0C7EAF696B1AB466557709077BAD9B0C4DAABC1D49EC2D39FC1CF9DC1CE9CC2D4A1 +C2D8A6B9D7A3BED3A6BBD1A3BED3A6C1D6A9BFD6A8C1D6A8BBD8A8BBD5A6BDD8A8BDD7A6BDD7A7 +BDD8A7BCD9A3BBD9A2BCD9A2BCDAA1BCDAA1BBD8A2C3DAA2C0D8A2BFD79FC1D8A2C0D8A0C1D7A0 +BCD69DC1DAA2BED9A2BDD7A6A5BF8F9DB4847DB78395BB7E99B06F9FBB8E5F917F2464682588A4 +117481317C729AB0879FB2808BB48191B87F96B4829CAF85C1CCA6D0D7B1DAE1B9A7C797648861 +3D6B545EA5A56CC3D260C6DC69CEDB62C6D36FD1DF7AD2D88FDCDD8CD3CF4A897A4C816B86B08E +CEEABFC6DEB0C3DBACC5D7A5C3DBA0C2DE9FBED999C4D39ECCD3A6C6D2ABCDDCB1677949445928 +43541F56662D3A642D4B5D2E363C1A2D2E1E5B56436051333E2B11404E2B366A2F296C15326417 +3F5E2833421F769065BBDFA8B7DFA8B3D3A2BFD8AAC5D6ADBCD2A7C1D9A9BFD7A4BCD7A4BCD7A2 +BFDAA1BFDAA3BCD7A3C2DDAEBED9A9BED7AABCD5B1B5D1AAC4DFBAE4F2D8F9FCEFFFFBF8FFFEFB +FCFCFBFAFAFAFCFCFBF9F9FAFBFBFBFCFCFAFFFFFDFFFFFDFCFCFAFEFEFCFEFEFBFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9FBFFFFFF909090070907 +E4E5E4FFFFFFFDFEF7FBFEFBFCFCF9FFFFFBF1FDFF7297B5C6D0E8F5FFFEF9FCF5FDFDFDFDFBFF +FCFDF8FAFFFEFDFFFEFEFEFEFDFEFEFFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBFBF6F8F8F8FAF9 +FEFFFFE9EFED767D75CDD1CDCCD0CFCCD0D0CFD3D5D1D5D7CFD3D3D2D6D7D2D6D7D5D9D9D6DADC +D5D9DAD7DBDBD9DDDED7DBDCDCE0E1DEE2E3DFE5E4E6E5EAE4E4E9E8E8EDE4E5E9E7E7EBE6E7EB +E9E9EAECECEBEAEAEAF0F0F0F0F0F0F2F2F2EFEFEFF4F4F4FFFFFF787878B7B7B7848484FFFFFF +FEFCFAFFFFFF4C4845343236F4F3F4FFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +AAB0BF81A8C9ADE0F9B0E0ECCDF1FFE9FEFFC9CFDFB1B0BDFFFFFFFFFFFFA6CEDA5C9EB052B4CE +4DC3E259CAE75CCAE25BA9BB89ACBDF5F1FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFEF8F7 +FFFEFFFEFDFFFEFFF9FFFFF3FAF9E5E4EDD1C5D8BAB4D0B0B8D1A6C2D7AECADCB5C9D7B1C6D4AD +CBD4AFA1AD986D78667F8C80F0F7F5FFFFFFEBF4FCEAEAECDCE6E5CEE5E0C6E5DCBEDDD478958D +5F74609DB098C5D4B4C8E1B4BDE4AEAAE0A2C1CA9CCBD9AEC8D7B0C0D3A7C2D7A8C4DBA5CADAAA +C7D6A8C6D3A8C7D2A7CAD4ABCAD2AAC1D8A7C2D8A5BFD4A1C4DAA5C1D8A1C2D9A1BFD7A1C5DBA7 +C1D6A5C1DAAAC1D7A8C6DCADBAD5A3C0DBA8BDD7A6BAD5A5BED9A8C1DBACC3DAAEC6DBADBFDAA7 +BBDF9FB8E9A1B3EFA0C1E6ADCDEAB7D4DFACDAEAB980B99920877D17BCC514958B52A088CAEAC2 +DDE6BAE3E1B7D2E4BFCCDAB7D3E1BBCBDBB9C2D7B99BB29734756248857B72AFB085C3D07EBFCF +78B9CB89C8D597C6DAA3CEE4A4D5E388B2BA59737D698D7DAECFBACDEACDC2D9B4CCDBB9C4D0B1 +CDD8B5CEDCB6BDD3A8BDDBB2BADEBAB6E0C3BEDAC3C9E4C4ACC69D91AE8396B79693B59D90B599 +7DB7915F8F7617665F227D7534505566856689B07E8DB87B87B27E85AC7A8DB37397AF89AFC89F +C0D7ACC4D9ACC1D6A6C2D6A5C4D6A8C1D9A9BDDAA5BCDBA4BDDBA2BFDAA1BBD8A6BDD8A2BDD9A1 +BDD4A0C2D6A8BFD3AABCD2B0CADBBFDFECD4F6FDF0FCFDF6FBFCF7FEFEFFFEFDFFFEFDFFFAFAFF +FCFBFFFAFAFFFCFCFAFFFFFBFFFFFDFFFFFDFFFFFDFCFCFAFCFCFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFEFFFFFF919191070807E3E5E4FEFFFFFDFEF7 +FBFEFBFCFCF9FFFFFBF1FDFF7297B5CCD7EDF5FEFDFCFFF8FDFBFBFDFBFFFCFDF8FAFFFEFDFFFE +FEFDFEFDFEFEFFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDFAFBFAFAFBFAFEFFFFE0E5E37F847F +C7CCC8CACECCC9CDCCCCD0D1CCD0D3D0D4D5D2D6D7D3D7D8D2D6D7D6DADAD5D9D9D7DBDCD8DCDD +D9DDDEDADEDFDCE0E1DEE3E3DFE0E5DEDFE3E1E2E6E4E5E9E5E6EAE4E6E9EBEBEBECECEBECECEC +EDEDEDF4F4F4F4F4F4F6F6F6F7F7F7E8E8E8808080B4B4B4828383FFFFFFFCFDF8FFFFFF4D4D48 +333236F4F3F5FDFFFFFDFEF9FDFDF6FAFBF3FCFCF9FCFCFCF6F6F6FFFFFF929FAA7AA7C19CD4E9 +A3D5DFB7DBE2DCF5FEB2BDC893959EFFFFFFFFFFFF96C3C75397A24CB0C348C0D84BC0D758C5D7 +52A5B676A1B3E0EAF7FFFFFFFEFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFF +FAFFF8EBF5E4D4E4CBC2D9BEBEDDC1C8E0BECBDFBECCDDBED0DFC0CBD8BA9CA6897B8774A2AE9D +E7F4E7F9FFFFE8F4F7E0ECF3D3E2E5CEE5E5CBEBE7A3CAC56A958F638D88A9C5B5D3F0DEC8E3CB +C2E5C3BDEBBFB2E7B5C4E8BFC1E4BEC3E5C3BFE1BDC2E5BDC3E8B9CBE1BFC8DEBAC8DBB8CFE0BE +D2E1C2CFDBBECBDFB8D0E3BCD5E8C1CFE2B9CCE0B5CEE2B4D1E5BBCFE3BBC5DBB2CDE3BDC8DFB9 +C7E0BBC7E0BAC5DDB8C5DFBBC5E0BBC5E0BEC5E1BEC7E1C0C9E3BFCAE4BEC3E3B6BDE8B3B7EAB1 +C4E6BEC7E3C0D2E4C0CFE5C37AB39E26848220B0C1259195569D90C3E2C6CAE0C2D4E7C9C5E9C9 +BCDDBDCBECCCB3D8BD78A38E4E7B6B3E8D8478C2C07AC1C93D829632758B377A923C7483437A8D +427C903F8092235968093947517B79618A84577D725C7E6F5B7A6D5D7A70507A77537F79558579 +4D82764B847A4A837C5181844E7C775685795D8C7F55888352888A4D8A8951A497358682138B8E +2BB9B52E848A82AC89BAE3B4C8E8B4C7E1B9C2E3B5BAE5AAC6DFB3C2DDB0BED4A8C2DAABC4DAA9 +C4D9A7C5D5A9C0D9A8BDDBA6BBDBA4BCDBA4BFDAA1BDD7A6BDD9A3BFD8A1BDD4A2BED2A7B8CCA5 +BDCFB3D7E7CCECFAE5FCFFF6FDFEF8FCFDF9FEFEFFFEFEFFFEFEFFFCFCFEFCFCFEFCFCFEFCFCFA +FFFFFBFFFFFDFFFFFDFFFFFDFCFCFAFCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDFFFFFF909191080807E3E5E4FDFFFFFDFEF7FBFEFBFCFCF9FFFFFB +F1FDFF7297B5CAD3E9F7FFFFFDFEF8FDFBFBFDFBFFFCFEF8FAFFFEFDFFFEFEFDFEFDFEFEFFFDFE +FFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFDFFFDFDFEFDF6F9F9C2C9C69CA19BC6CBC7C7CBCACBCFCD +CDD1D2CDD1D5D0D4D5D3D7D8D3D7D8D5D9DADADEDFDADEDFDBDFE0DDE1E2DFE3E4DCE0E1DFE3E4 +E0E5E5E3E4E8E2E3E7E5E6EAE7E8ECE9EAEEE9EAEDECECEDEDEDEDEDEDEDF0F0F0EEEEEEF1F1F1 +F3F3F3FDFDFDC6C6C68D8D8DC3C3C3727272FFFFFFFBFDF8FFFFFF4C4E48302F33F2F2F3FFFFFF +FCFCF7FAFBF4FCFDF6FCFDF9FBFAFAF0F4F3FFFFFF8FA5A976ABBF95D1E39AD1DBB9DCDED8F3F6 +BECDD0919598FFFFFFFFFFFF97C7C6559DA150B8C64AC6D849C0D059CAD65CB3C5467D905F798A +8398A0728A917B8B9583979A7F8F9285949477848577888A798E94778F8E677D765A716256705A +526F58506F59546954576A575A68565967555D6757676F5FBCC9BCF2FAF3F6FFFCE1F2F1DFF0F3 +DFF0F8C3E1EAC9ECF2BFEAED4073740036361D54545780784370673F6F62417A653E7C603B7C5A +397D61387B61397761356D563A6F533C714F4466514464524A66544E64534F625058685954644C +5767505A6A5356674C50614646563A66765D4F6249576B52485D48526B544A624D4B634F4F6854 +4A655448655748675848665A4066534265544B6A58486C57477056447157476A5A4970634F7264 +537665225951004B55006983025A68084344577E77527A71406F6935755D3D7862397460377569 +2D716C48939162C0C673CAD759ACC13D89A15DA2BE6DAFCB458FA3419AAF258DA4107B9607728C +0C7C9414898F067A7F067B7B067C7C067C81057B840D78950E79930B798B0C79870A7785087582 +12779112778B177A891277850A738609778D03769000849006899A00A5B60CC6CE078A9B70AE88 +AEDAAFBFD2A8CDD4B5C1D9B4AAD6A0BBD3A6B9D4A4C1D8A9BDD5A5C2D8AAC3D6A8C5D5A9C0D9A8 +BEDBA8BCDBA5BEDBA5BFDAA4BDD8A5BFD8A4C1D7A4BFD6A6B9CBA5BBCCABD0DDC9E9F6E2F4FFEF +F9FEF5FCFEF9FEFFFCFEFCFEFEFEFDFEFEFDFCFCFDFDFDFDFEFEFEFCFCFAFFFFFDFFFFFDFFFFFD +FEFEFCFBFBF9FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFFFFFF909191080807E3E5E4FEFFFFFDFEF7FBFEFBFCFCF9FFFFFBF1FDFF7297B5BDC7DD +F8FFFFFBFEF7FDFDFDFDFBFFFCFEF8FAFFFEFDFFFEFEFDFEFDFEFEFFFDFEFFFBFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFEFDFDFAFBFAFEFFFFF1F5F4979C9BB8BDB7CFD4CFD6D8D7CCD0D0CFD3D4D3D7DAD4D8D8 +D3D7D8D2D6D7D6DADBD9DDDEDDE1E2DCE0E1DCE0E1DBDFE0DFE3E4E1E5E6E2E7E7E8E8EDE7E8EC +E5E6EAEAEBEFEDEEF2EBEDF0EDECEDF1F1F0F0F0F0F4F4F4F7F7F7F9F9F9F8F8F8FFFFFF969696 +8F8F8FCECECE7D7C7DFFFFFFFBFBF8FFFFFF61625C28272BF0F0F1FFFFFFFEFEF8FEFFF8FDFEF5 +FCFDF8F9F9FAFEFEFFFFFFFF92AFAC68A5B18DCCDC9BCEDAC8E7E9D3EEF0BED0D19DA6A5FFFFFF +FFFFFF93C2C05A9FA659BDCD4CC5D84CC3D45AC7D76DC7D661A1B4538295729EAD628D9A708FA3 +5375772D4B4C809A9A829B9D718E9672909D7CA1A77BA3A2779F9582A49888A69B8FA8A096AAA7 +95A3A298A5A3A0A9A9A4ABACDBE1E1F4FFFAF2FDFBE4F3F1D4E8ECD7EFF4D0E7EDACD8E2A9D7E0 +BBE9F3134D53559698559A9B4A919642929C37939B25878C23828028837F1D8B822A8F8A338F8F +4390905298935B9D946F9B9B769FA07A9E9E8AA2A68FA0A49AA9ACA1ABA6AAB2ACAFB7B0B0B8B1 +B2BCB267736675817DA3B0ABA9B9B393A8A39AB3AD9CB6B27FA09D82A3A27EA2A3769FA2709BA3 +6C9A9F649CA06699A063929B61959E558E984F8C944787953C8A99378792398386408D96358CA1 +3995AF2F768A07394840717F337686257A8E2E8E8935918E3289883A939756B3BE69C8D95DC1DA +5FBEDA499FBE74C0E0ACEEFF9FDBF165D6F03DD0E51CC5DC09AFCF0FB7DB05C0DD14ACCD12ACCB +17B2D013B1D212B1D511B1D803BADD04BADA06BCD902B6CF05B8CB06B9C607B5CE08B4CC08B4C9 +06B3CA02B4C90AC0D601B5D500BCCD08B0CA05BDDC0CC2DA158BAF75B592B3E0B6C2D0AACCCCB1 +C4D6B5B4DDA9BBD5A1C0DCA8C4DCA9BFD6A7C2D7AAC4D8A8C5D6ACC2DAABBBD8A7BAD9A6BBD9A6 +BEDAA4C1D7A7C1D9A7BED5A5C5D5AEBBCBABCBD9C0ECF2E8FBFFF7FAFFFAF7FBF8FCFCFBFAFCFC +FEFDFDFEFEFDFCFCFDFFFFFEFFFFFEFCFCFCFCFCFAFFFFFDFFFFFDFFFFFDFFFFFDFFFFFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF909191 +080807E3E5E4FDFFFFFDFEF7FBFEFBFCFCF9FFFFFBF1FDFF7297B5B5BFD6F6FFFFFCFEF6FDFDFD +FDFBFFFCFEF8FAFFFEFDFFFEFEFDFEFDFEFEFFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFDFEFAFBFB +FFFFFFE5E9E9767C799BA09BA4A9A5ACB0AEA2A6A5A3A7A9A5A9ACA9ADADA8ACADA7ACADABAFB0 +ADB1B2B0B4B5ACB0B1ADB1B2ACB0B1AEB3B4B0B4B5ADB3B2B8B7BDB5B7BAB5B6BAB8B9BDBABBBF +B8B9BDC1C1C1C4C4C4C6C6C6C7C7C7C8C8C8CACACACBCBCBC4C4C46F6F6F959595C9C9C9828181 +FFFFFFFAFBF8FFFFFF62635F252427EFEFF0FFFFFFFEFEF8FEFFF6FDFEF7FEFEFAFDFDFEFFFDFF +FFFFFF8BA9A264A1A797D3E3B2E1F1BDDADFDEF8FCB6CACE98A3A4FEFFFFFFFFFF94BDC25F9EAB +5EBBD153C7E158C7DF68CEE470CAD487CBDB8DC6DAA0DCE9A7DBEBBBE0F46A8F9020414498B4B8 +CBE8EEBBDAE7B6D8E9BBE9F4C0EDF2C5F3F1CDF2ECD7F1F0E0EFF3E0F3F5E5F4F7E8F4F6F2FBFF +FAFFFFFDFFFFF1FAFCE9F6FADDEDF1CCE4EAC8E3E9C6E2E8B2E0ECAAD6E2B1DFEA00273049858A +9FE1E362C7D955C6DA42C2DA32B7CE2EACBD38AEBB3FBEC64EC4D15EC4D876CBDD87D1DE92D6DF +AADAE6B5E1EFC0E4F0D2EAF7E1F0FCE4EDFAF9FFFFFFFFFFFFFFFFFFFFFFFFFFFF858F895A6467 +D2DEE1E7F8FBE5FCFED6F2F3D9F5F7BFEAEDBAE6EABBEAF3AFE3EEA6E0EFA2DCED99DEF297D8EF +8ED0EA87CEEB7CCBE778CAE65CC3DB4EC5E346C3DE54C0CE61C0D04EADC84BA3B63B7F93053445 +4A859B5BB1CF51C2E552C7D251BFC963CAD56CCEDC63C4D75EC3D763BFE165BEE055A6C671BAD5 +9DDEF28AC5D048B7CA18B4BD00AFBA11AEC80DACC901B1C500AFC801BACF00B3C300B3C500B2C8 +00B0CC03B3CC03B2CD02B0CE04B4CB03B4C703B8BF03AFC404AFC504ADC405B0C807B8CD03B8CB +03AFC600B0BB09A6BA07AECA14B7CE19769973A885B5DEB3BED3A7C3CDACBFD4B0B9DCA8BED9A1 +B9D59EBED6A2C1D8A6C1D7A9C2D7A8C5D5AEC2D7ADBBD7A8BFDCAABDD9A7BAD5A4C2D7A9C2D8A7 +C3D5A8B9CBA5C6D3B9DDE9D6F9F9F9FCFDFBF9FCF8FBFBFDFBFDFEFBFEFFFEFCFBFEFDFBFCFCFB +FFFFFCFFFEFCFCFCFAFCFCFAFFFFFDFFFFFDFFFFFDFFFFFDFFFFFBFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF909191080807E3E5E4FDFFFF +FDFEF7FBFEFBFCFCF9FFFFFBF1FDFF7297B5B3BED4F8FFFFFAFDF6FDFBFDFDFBFFFBFCF9FAFFFD +FDFFFEFEFDFEFDFEFEFFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFDFEFCFDFAFCFAFFFFFFD8DCDB464D4A +242923141914161917181C1B16191A161B1D171B1C171B1D171C1D16191A181B1C171A1B181C1D +181C1D171B1D191D1E181C1D171B1C1B1B1F1A1B201A1B2018191D1A1B20191A1E1D1D1E1E1E1E +1D1D1D1F1F1F1F1F1F1E1E1E1B1B1B2323233E3E3EADADADC8C8C8828182FFFFFFF7FBF8FFFFFF +717570181A1EEAEBECFEFFFFFDFEF9FEFFF7F9FAF2FCFCF7FEFDFEFFFCFFFFFFFF8EACA16BA9AC +A2DBEA9BC6D67A97A1ECFFFFBBD0D58E9A9DFFFFFFFFFFFF98BBC769A3B667C0DD5DCBEA5BC6E3 +69CCE677D0D38DD3E178B6C8569AAA5F9AA978A2B740686A0023255B7C80AECDD5C1E2F2C8E9FE +B4E7F6B7EAF3C0F3F3C2E6E6D0E6EADAE6EED8E9ECE1EFF2E4EFF1EEF7FCF1F6FDF7FCFFE8F0F9 +EAF7FDDFF0F9CEE6EBBBD7DD97B6BD73A1AD6A93A1658E9D001A2417545955969749C2DE2CB1CF +1BB2D314B1D31BAFCE29B3CD39C0D348C5DF59C7E672C9E683CBE58DCDE49FCFE2ACD8ECB6DAEE +CADEF1D7E3F6DEE3F7EDF4F9CCD3D9A5AEB3B8C1C3A1A9AB4E56572D363C7C888FC7D8DFCCE4EA +B7D3D8B6D3D7A7D9DEA3D7DF9DD6E098D5E48DCEE187CBDE7CC7E278C3E36FBDE164BAE259B8E1 +51B7E238BDDA26BCE11EBBDD21A8BC1283991079981A7785125B6C002235195D7A3AA1C336B9E4 +49CBDF50C9DC4CBDCD57BACD65C6DC65C8DE79CBF181D1F855A3C4498EA65E9FAD5590972D818B +048F8F0096940A8A9C0B879B008F9A0090AA0093A80192A200919E0290A1028EA40292AC0092B0 +0092B40096B30096AE0099A80091AB018FAD038FAE008EAC0095B10095AA008DA4009AA5018C9C +0093AD0097A90E6E8A71977AB2D7ADBFDBAABED2AEBBD2ACBAD6A3BED99FC0DBA2C0D9A4C2DAAA +C2D8ABC2D5A8C7D5B1C3D8B0BBD7ABBAD8A7BBDAA7BED9AAC1D6A8C3D7A9C1D1A6C1D2B0D3E1C9 +F0FAEAFEFDFFFAFAFDF9FAFCFBFCFFFBFFFFFCFFFFFEFEFAFEFEF9FCFEF9FFFFFCFFFEFAFCFDF7 +FCFCFAFFFFFBFFFFFBFFFFFBFFFFFBFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFEFDFFFFFF919191070807E3E5E4FCFFFFFDFEF7FBFEFBFCFCF9 +FFFFFBF1FDFF7297B5B6C0DCF9FFFFFBFEF7FEFDFDFEFEFEFDFFF7FAFFFDFDFFFEFEFDFEFDFEFE +FFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFDFDFFFEFDFEEAEBE778786E0D1111000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000002E2E2EB4B4B4CDCDCD838385FFFFFFFEFEF9FFFFFF72746F1A1B18EBEBEA +FFFFFFFDFBFDFEFBFCFDFDFDFBFDFDFCFEFCFAF5FBFFFFFF98ACB278A8BB93C8D54F7A7B516268 +B6C5C7C6CCCA989994FFFFFFFFFFFFA4BEB370A49D6EC3C45ECBD565D1DF6AD2DF7ECCD493D5E2 +6292A341596F707D93828EA0989897909496AAB5B882939AB7D0D7CFEAF2C7DDE6C5E0E9CCE8F1 +CFE6EFDCE9F7DDE2F4E4EBF2EBF1FAEDF4FAEFF7FCF2FBFFEBF5F6E1E6E8DAE0E5D2DCE4D1DFEE +AEBFD3394F66667B8197A39F9D9A8C978B87AEBFC743798826AAB126BDCD00ACC309B8D427B6D5 +48BBD84FC3D75AC6DB66C8DD81D1E58FD4E89BDBEDA9DAE7AFDEEDBDE2F0CBE6F1D9E7F6EBF5FF +FFFFFF8E948F525A4A9CA8958C9A88839082ABAEB17E868AA8B4BCCBE2E9B9D5DEBBD8E3A4D2E1 +9FD1E192CADF84CAE47AC8E570C4E263C5E864C7E25CC3D857CAD747C6D23DC3CD1FC4CB1AC1CC +29BED72782A4154E6654828E85A89F84988F8A928A91ABAF437F93459ABD63C4E45ABCDA59BDDA +6ECAE966BDDC6ABDDE81CEEE8BCCE597C6D5486B67365A466D9575629D625B92645D8E73558774 +5B8C7B5F917A598F77598D7661947B6292776293776393765E94726095755F94725F93725F9373 +5E93725F93765F94775E94765F9577679C7E64977C59916162986C60956F6397756197795B947C +90B07AB5D59DB7D99FB8DBA0B8DAA3B8D8A8B9DAA0BAD9A0BAD9A0BBD99FBBDAA0BADBA1B6DD98 +B7DB9DBADBA7BAD6A7BEDAAABDDAA6C3DBA6BFD7A4C4D7A5DAE6C4F0F7E2F6FDF2FCFDF9FCFCF9 +FAFAF8FEFEFDFEFEFBFEFCFCFEFFF8FEFFF8FEFFF8FCFFF8FDFFF7FEFFF9FCFCFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFBFDFFFFFF919191070807E4E5E4FFFFFFFDFEF7FBFEFBFCFCF9FFFFFAF1FDFF7197B5 +B9C2DEF4FDFFFEFFFAFEFCFBFEFDFEFDFFF7FAFFFDFDFFFEFEFDFEFDFEFEFFFDFEFFFBFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFFFAF9F9EEEEE89A9D8F0D100E000000010200000200000102000004 +010000010001010001010001010001010001010001010001010001010001010001010101010101 +010100010101000000000000000000010101010101000000000000000000000000010101000000 +373737B2B2B2CDCDCD838383FFFFFFFFFFFCFFFFFF7D7D7B131312E8E8E8FFFFFFFEFCFDFDFBFD +FCFDFDFAFDFCF8FCFAFAF5F9FFFFFFA1AFB7749EB278A6B56C9094B7C0C382898AC2C4BFA1A29B +FEFFF8FFFFFF9FBEB674AAA96FC3C960CCD766D2E06DD6E480CAD597D4E1507A885E727FD1D9E3 +E9EDF3ECECEDFBFDFDD5DBE1718087ADC3CAC8E1E8CAE0E7CCE3EAD6EEF4D7E9F2E3ECF8E6E7F6 +E1EBF4E7F2FBEEFAFFECF9FFE7F6FBDFEDF4D1E4E7CDE2E9BED6DDBBD8E59ABCCD254A5CA7B0BA +F5F8F6F2F0E8FAF0EFEFFFFF77ABB9007A861DAABC13B8CE1EBEDC39BDDB52BBD861C4DE6BC9E2 +7ACFE588CFE098D5E2A6DFE9B4DFEABFE5F0C7E8F0D9ECF7F0FCFFF3FCFFFBFAFF7C7D805D635A +F9FEF7E1E8DFE4ECE4FFFFFFBFC7CA5F7278BDDCE5B5DEEAA5D0E09AD5E88FD0E587CEE67BCEEB +6CC6E668C6E75BC6E45FC8E05DC3D757BDCD4DB7C744B0C12CB4C419B4C219B4C7157E94225E71 +A3D2DEF1F6F3EFEEECF9F2F2E5F1F55A91A94599BD5ABDDB59BCD665C7E06CC7DB78CADE7EC9DE +84CAD989C4CF5B888952766794B99BAAD4ACA6CB9EAED3A9A2C69DACD5A2B0DD9AAFDD8DACDD95 +ACDC95B0DE96B0DD94B1DD93B3DD92B0DC99B2DD9BB1DC99B1DD9AB1DD9AB1DB9BB1DC9CB1DC9C +B0DC9CB1DC9BB3DE9FB1DC9DAEDC8EB1DE94B0DD96B2DE9AB2DC9EB0DB9EB4E08EB7E28EB7E48C +B9E68FB9E591B9E494BBE390BAE391BBE491B9E18FB9E28FB9E28FB8E190BBE097B8DB9CBFDCA9 +BCD6A7C2DAABBFD5A8BDD1A5C6D6AFE9F5D8F7FDEFF9FCF7FDFCFBFCFCFAFCFCFAFEFEFCFEFEFB +FEFCFCFEFFF8FEFFF9FEFFF9FEFFF9FEFFF9FEFFF8FCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFFFFFF +919191070807E4E5E4FFFFFFFDFEF7FBFEFBFCFCFAFFFFF8F1FCFF7298B6B7C1DCF5FFFFFDFFF9 +FEFDFDFEFFFFFDFFF8FAFFFDFDFFFEFEFDFEFDFEFEFFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFFFAFAF8EDEEE4999C8C0D0F07000000000000000102000103000101010100010101010101 +010101010101010101000000010101000000010101000000010101000000000001000000000000 +0000000000000101010000000101010000000000000000000202020000003C3C3CB1B1B1CCCCCC +828282FFFFFFFDFDFCFFFFFF8A8A890D0D0CE5E6E6FFFFFFFCFCFBFCFDFBFBFEFDF8FCFBF4F9F7 +FEFAFDFFFFFFA9B1B86C8DA25D8193C5DFE5FFFFFFAEAFAB77756DADAEA2FFFFFCFFFFFEA1C3C4 +6EA4A876C5CC6ED2DF70D6E571D4E489CCDAA4DBE6486E756E7C80F7FAFEFFFFFFFFFFFFFFFFFF +D6DDDF677479BACED3CBE3E7CEE0E7D9EDF1D7E8EEE1ECF4DDE2ECEBEAF7DFEDF5EBF9FFE7F7FF +DFF3F9D9EDF4D5E9F2C3E6ECB6DCE3A6D0D8ABDAE686B8C71A5163C8CBD5FFFFFFFFFFFFFFFFFF +F2FFFF7CAFBB0068792FADC02DC0D733BFD954C3E16BC3E17AC5E586CEE995D9ED9CD5E1A5DADC +B1E4E2C7E8ECD2F1F4D8F2F5E7F4F7F9FDFFE9ECF1F8F4FF85838B6E6E73FFFFFFFFFFFFFFFFFF +FFFFFFC6D5D44B6769A5D0DBA1D8E890CEE487D2EA7ECCE57FD5EE6CCBE862C7E85BC4E753CAE0 +56C3D963C5D736899A0C596D09526B086B8420A7B712AEB90F8692307581BCE6F2FFFFFFFFFBFF +FFFFFFEDFEFF5B95AA409ABA56B7D260C0D666C5D578CAD381C9CF9BDBE16FAEA652857B608875 +97B598C1E1B8B8E2AFC4DBA9C3DDAAC1DDA5C0E296BEE785BFEC79BEEA80C0EB80BEE97DC0E87D +C1E87BC1E878BFE683C1E884BFE682C0E883C0E883C0E882C0E684C0E784C0E784C0E784C0E683 +BCE280C3EC81C0E97FC1E984C0E883C0E685C0E686B6E983B7EB81B6E97BB6EB7EB6EA80B6E884 +B5E882B6E883B5E783B7E984B7E984B8E984B9E583BCE78FB7DD94BCD8A1BDD7A9BDD4A8B7CCAA +CADBBADCEACFF8FFF1F8FCF5FAFDFBFEFEFCFEFEFCFEFEFCFEFEFCFDFEFCFCFCFAFCFDFBFCFDFB +FCFDFBFCFDFBFCFDFBFEFDFAFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFFFFFF919191070807E4E5E4 +FFFFFFFDFEF7FBFEFBFDFCFBFFFDF6F0FCFF7399B7BDC7E2F5FDFFFDFFF7FBFBFAFDFCFCFBFFF5 +FAFFFDFDFFFEFEFDFEFDFEFEFFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFFEFEFEFFFFFCF1F2E5 +999C86121403000000020202000004000004000100000101010101010101000000000000000000 +020202000000020202010101030303000000020202030303020202030303000000030303010101 +0303030202020303030101010000000101010000003E3E3EB4B4B4CBCBCB828282FFFFFFFCFCFC +FFFFFF8484850B0B0BE5E5E5FFFFFFFDFEFEFCFFFEFAFEFEF7FCFBF6FEFBFBFAFAFFFFFFA6A9B0 +3249600A273AB4CAD0FCF9F75E5E5915130B9A9B91FFFFFFFDFFFBD0E9F16B939B75B3BC92E1EA +83D3DF87D9E796CCDCB3E0E8658384303F3B6F726F777775848488979A9DABB3B68E9E9FCEE5E5 +D1EAE9D7EDEBE1F3F4E2EEF0EAF0F5F2F6FBF3F5FAF2FFFFF0FEFFE6F7FDD7ECF2D1E8EFC2DDE3 +B5E1E9AFDDE6A7D6E09CD2DD6DA9B513515D4F6469778C8A7F8A87767B809AB3BC4A7F8C43A1AD +50BBCA47C0D055C5D873C6DF8BC6E09BC9E5A2D0E7ABD7E8B4DFDEBBE3DBC3EBDFDAF6F2E2F8F8 +EAFCFBF2FAFDEEF2F4F4F1F6FDFDFF81818A2E2F35868B8F7C8280888F8BA8B3A885989286A4A5 +A5D6DF9AD6EA8ACDE583CFE389D9EC80D4EC6FCBE46CCFE85CC1DD4FC0D15DC1D14392A02F6675 +709AADA3C3D84F879E1F859127B1B31B8A92094F5A436F7D807D8A88868A888A8697B8B743868E +4DAEC081D2E376C6D474C3C78ED2CE92CCC363958B5B896A7A9E7FAEC7A7CAE0B5BDD7A4B4D29A +B6D492B8D899B3D99AB9E49BB9E790B5EA85B4E784B3E982B5E781B8E982B8EA81BAE97FB6EC7D +B6EA7CB6EB7CB6EA7CB6EA7CB6EA7BB6EA7AB6EA7BB6EA7BB6EA7BB6EB7BB6EC7BB6EA7BB6EA7B +B6EA7CB6EB7DB6E97EB6EB7EB7E988B4EA86B4EB81B4EB82B4EA84B5E987B5EA88B4EA88B5EA88 +B4E987B4E987B5E988B7EC7BB8E684B3D98ABED9A1BFD4A8BCCDA4C5D4BBDBE8D4EFFBEDFCFFFD +FFFFFEFDFCFDFBFBF9FCFBFAFBFBF9FCFCFAFFFFFDFFFFFDFFFFFCFFFFFCFFFFFCFFFFFCFFFFFC +FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFCFFFFFF8D8E8E080908E4E5E4FFFFFFFDFEF7FBFEFB +FDFCFBFFFFF8F2FEFF759BB8BFC8E3F6FEFFFCFFF8FDFBFBFDFCFEFCFFF6FAFFFDFDFFFEFEFDFE +FDFEFEFFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFFEFEFEFFFFFAEFF3E1989D85121400000000 +030201010007010002020100000101010101010101000000000000000000000000040404000000 +020202000000020202010101030303020202000000010101000000050505010101020202000000 +0000000404040000000000003C3C3CAEAEAEC8C8C8828282FFFFFFFDFDFEFFFFFF979799010102 +E2E1E2FFFFFFFCFFFEFAFFFEF8FEFBF3FAF7F6FEFCF4FEF7FFFFFF9B9DA42C3F560C2537A0B4B9 +EEF3F1444C462D3128A0A29CFFFFFFF9FCFBEBF8FD7D97A275A0A79BD7DD90CCD790CDDB9CC8D9 +ACD1D89DBAB78D9E98929C9CA5ABB05C63662B33356D7C7DBDD3CFD2EEEAC8E6E1D0EDE6DAEEEB +DDE8E8E9F1F2EBF2F3E9F1F2EBF3F1E4EEEEDBEAEACADEE0C5DDE1B6D0D3ABD0DBA1C8D298C2CE +94C5CE7CB2BB568F9A49767158837B4E6D6717292D43646D46818A54A8AF59B8C05AC2C96DC9D4 +84C4D697BFD5A6C6D8ADD0DEB6DAE0B9DEDBC3E7DEC8EDDED5EEEADAF2F0E1F2F1E8F0F2DFE2E7 +E9E8EEE8EEF2B6BCC1888E959CA7A8929E984F5C504B544B687871A9C3C3A4CFD793CAD98FCCDF +87C7D27DC0CD76BDCB69B7C660B4C164BACA58B7C54896A428646D799EA7CEE6F2EBFAFFC2DEE9 +1F6A722997984DABB636778B4D7D9466788959666C24342F46645C70A7AA75C0CE80BBC680BFC3 +88C6C377AEA4568577527A6B8AAB87B9D2B0CFDEB9C9D5ADC3D6A6BEDAA4BAD8A0B6D7A1ADD29B +B5E19DB4E995B1EA88B1E88BB1E98AB3E888B6E989B6E888B8E986B3EA84B4EA84B4EA84B4EA84 +B4EA84B4EA84B4EA82B4EA81B4EA81B4EA81B4EA81B4EA81B4EA87B4EA87B4EA85B4EA86B4EA86 +B3EA84B7E78BB7E888B7E885B7E885B7E888B7E78BB5E988B5E988B5E988B5E988B5E989B4E989 +B6EB7CB9E888B5DB8FC1DBA4C1D5A8BECDA6D7E6CDEDF8E7F9FFF9FAFDFCFFFEFEFEFCFBFBFDFA +FDFDFBFDFCFBFCFCFAFFFFFDFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFBFCFFFFFF8F8F8F080908E4E5E4FFFFFFFDFEF7FBFEFBFDFCFBFFFDF6F2FEFF +759BB8C2CBE7F6FFFFFBFEF6FDFCFCFDFCFDFBFEF5FAFFFDFDFFFEFEFDFDFDFEFEFFFDFEFFFBFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFFFEFEFEFFFFF9F0F3DF989E81131300000000040101020007020004 +030100000101010101010101000000000000000000020202000000020202010101030303010101 +030303030303020202010101000000010101010101030303020202020202000000000000010101 +0000003E3E3EB4B4B4CBCBCB838382FFFFFFFDFDFFFFFFFF9B9A9F000000E0E0E2FFFFFFFBFFFE +FBFFFEF4FCF9EDF7F4F7FEFEF3FFFAFFFFFFA9ACB37B8DA4738C9FB0C1C6E3F5F2798B84939C95 +AFB0AFFFFFFFF9FBFFF4F9FFABBBC757757B39666C33636C42707E5F889960838C6A83846E827F +6071767D8A993B444900080C415355738F8C73948E6C928B74938C7B938E818F8E9097968C9796 +8794938D918B868D88818B8B6F84846C8388708A8E5E7B89516F7D496D7A456F7B3F6D763E6D78 +266A5F2D70612E605600000100202B23626E15666C1D797C16787B2A7C8144788658758A5B7783 +627D8666848870918D6C8F8772968A7993917E9595849495858D94878B9583848E747E7D7D878A +7C878C6B79796B7C73203424040B06465351637B7B6287904473823C738341747C397077336E76 +286A7230757E2872761462720E4F5A68969FCDE7ECE2F0F8E5EDF6D9EEF7306B70156C72085769 +1E5B772A6181415A752E414E0000001D2D294164673E6E7E3463682356581145403C6C616A9485 +9CC0B2C2DAB7CDE0BDC5CCABC5CEA8C8D8ABC6DEADBFD2B0B8CDA7C2DDADC2EB9FB7E782B8EE77 +B3E782B6E882B6E781BAEA7FBAE87CBBE87DB9E886B9E886B9E886B9E886B9E786B9E886B9E882 +B9E882B9E882B9E882B9E882B9E881B9E68CB9E78AB9E78AB9E786B9E688B9E985BAE785BAE984 +BAE880BAE780BAE984BAE886B5EA7FB6EA7FB6EA7FB6EA7FB6E97FB7EB7EB4EA82B9E98DB7DF93 +BDD8A2C4D7ABCBDAB0E5F4DBF1FCEDF8FFF8FDFCFEFEFEFDFDFCF7FBFBF9FBFBFBFBFCFAFCFBFB +FFFEFCFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFC +FFFFFF8D8E8E080908E4E5E4FFFFFFFDFEF6FBFEFBFCFCFAFFFFF8F1FEFF759BB8C0CCDBF7FFFF +FDFFFCFEFFF5FEFDF9FDFFFFFAFFFFFDFFFEFEFFF8FFFFFBFFFCFCFFFBFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFF9FDFCF9FFFEFFF2F0EBA09E82161400000000000107000200000200010002000101010100 +010101010101010101010101000000000000000000000000000000000000000000000000000000 +0202020000000202020000000000000000000000000101010101010101010000003B3B3BB2B2B2 +CACACA818181FFFFFFFEFEFDFFFFFFA8A8A7000000DDDDDDFFFFFFFEFBFBFBFCFBFFFFFEFAFCFB +F8FBFAF8FEFFFFFFFF91A3A87A9FB286AAB8A5BCBFE2E6E49C9F9FCDD0D09C9D9CFFFFFEFAFAF9 +FFFAFFFFFFFFEAEAEFD0D9D8D3E1DED0E1DBB3C7B394AC908FAA8499B78C9BB28BA1B08F8D9873 +73875F8FAC8095B98C91B68A89AD8296B48692AD818BA77B98AC8299A9819BA9829DA4819AA582 +98A78195AB8494AD839BB58991B19097B79394B29091AF8D91AF8C96B2908FBD9B89AD8EA8C3A7 +62765A9BAC92A2AE969BC2A092BA9792B79193B68F9AB59099AF8A9DB4859AB58698B68A90B288 +8CB48B89B38A93B08693AD8390AB8194A7809EAE88A0AE8992AC8095B1858BAC7F92B18598B48A +778E6478885FA1B38A99AB8397AE869EB48F95AA868BAF809CBF9098BD8E97BC95A2C6AB5C7E6E +2A573E90BCA8CFF8E8DEFCEFE7FBEDE5EFE08EA7935470528FB08899C29696C3A289BCA397B29D +87A2856C835BA3B990A5BA9796AA91A3BD98B7D1AAC3DEB5BFDAB0C3E0B1C5E3B4C9D8A9C0CEA2 +C3CBA1C9D5AAC5D8ACB7CEA1C8E1ADBACEAEB3C8ABC3E2A1BBE889B6EA7EB7EA86B7E986B5E986 +B6E986B6E886B6E886B6E885B6E885B6E885B6E885B6E885B6E885B6E986B6E986B6E986B6E986 +B6E986B6E886B6E887B6E887B6E887B6E887B6E887B6E887B6E887B6E887B6E787B6E887B6E887 +B6E786B5EA87B5EA87B5EA87B5EA87B5E987B4E988B2EE7CB7E58AC2E2A0BACCA6CAD9BBE7F5DB +FBFEF0FAFDF1F8FAF3FDFFFBFBFFFEFCFEFFFEFEFFFEFFFCFEFFF8FCFCF6FFFFFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFEFFFFFF919191070707 +E4E4E4FFFFFFFFFCF3FCFFFBFEFCF7FFFCF7F3FCFF769BB7C0CCDCF7FFFFFCFFFAFEFFF6FEFDF9 +FDFFFEFAFFFFFDFFFEFEFFF9FFFFFAFFFCFDFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF9FCFCFAFFFEFF +F1EDE89A9A7A141200000000020107000300000300010002010102010100010101010101010101 +010101000000000000000000000000000000000000000000000000000000010101010101010101 +0000000101010101010101010101010101010101010000003C3C3CB2B2B2CACACA818181FFFFFF +FEFEFDFFFFFFB0B0B0000000DBDBDBFFFFFFFEFBFDFDFDFDFBFAFAFAFCFBF7FBF9FBFDFDFFFFFF +98A3AA83A7B97D9CAEA8BBC2EDEDED909092C0C1C1A1A0A0FFFFFFFFFCFAFCF6FCFCFAFEFAFCFB +F4FBF5E9F7ECE2F2E6BFD7BBB9D3B2B9D5ABC1DEB1BFD7ACB8CAA2C3CEACBDCFAAC1DEB6B4D5AA +B1D4A9B4D7ACBAD8AAB6D3A6B6CFA4BDD3A9C0D0A8BFCFA8C0CCAAC2CFABC0D2ADBDD3AEB7D2AA +B4CEA5B1D1ABB6D5AFBCDCB6B6D5AFB8D7B1BAD8B3B4D9B2BDDBB6BED4B1AEB99AC3CDAEBCC6A7 +BBD8B6B4D4B0B8D8B3B6D4ADBBD5AEBDD1ACBED8AABBD7A7B5D2A7B3D5A8B2D7ABB1D9ACB9D4AC +BAD4ACBAD3ACBDD1ABC2D3AEC6D3AFBAD2A6B4D0A2AECE9FB9D9A9BFDAADACC397CCDDB2C1D6AD +CAE1B7B9CFA8BAD4AEB9D1AEB6D6A8B5D5A9C1E0B6B8DAB888AA925675667CA395C7EBE3D7FBF6 +D9F8F3CFE7E0B6C7C05667549FB497BFDBB3BADBB0B3D9B3B0DAB9BED9B7BDD5ADB1C696C5D8A7 +C3D8ABBED4AFBBD5A9BAD1A6BFD8AAC3DDACB9D3A1B9D3A1BDD19EC4D5A5CCDAABC4D3A4BFD4A3 +B9D5A1B5D19DC3D7B6BED5B1B9D992BBE989B6EB83B7E882B7EA84B7EA84B6EA84B6EA84B6EA84 +B6EA84B6EA84B6EA84B6EA84B6EA84B6EA84B6EA84B6EA84B6EA84B6EA84B6EA84B6EA83B6E885 +B6E884B6E885B6E885B6E885B6E885B6E884B6E885B6E985B6E885B6E885B7E884B4EA85B5EA85 +B5EA85B5EA85B5E985B5EB86B1EB7BBAE78EB8D79AC3D4B3D9E6CDF0FBE4FAFEF1FBFFF3FDFEF8 +FCFFFBFDFDFFFBFEFFFEFEFFFEFDFCFEFFF8FCFDF7FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFCF4 +FCFEFAFEFCF7FFFCF7F3FCFF769BB7C1CDDCF7FFFFFCFFFCFEFFF6FEFDF9FDFFFEFAFFFFFDFFFE +FEFFF9FFFFFAFFFCFDFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF9FDFCFAFFFFFFF3F1EA9F9F7F171400 +000000000106000100000200010002010102010100010101010101010101010101000000000000 +000000000000000000000000000000000000000000010101010101010101000000010101010101 +0101010101010000000101010000003C3C3CB3B3B3CCCCCC808080FFFFFFFDFDFDFFFFFFB0B0B0 +000000DADBDAFFFFFFFEFCFDFDFDFDFCFDFCFBFDFCEFF5F4F7F5F2FFFFFF95A0A683A3B883A2B5 +B2C6CEF9F5F697969BB9B7BBA09E9DFFFFFFFDF7F6FDFAF7FCF8F3FFFEF4F7FCEEDBE4CFD3DDC8 +B5CDA7BCD9ACB9D6A8C0DDABBFD7A7C2D4A5C9D6B1CBDFB7BFDAB0B9D9ACBBDBAEC0DEB3BFDBAD +BBD5A9BED5AAC6DBB0C7D9AFC6D7AEC7D7B0C6D7B1C4D6AEC0D8AEC2DCB3BFDAAFC2E0B3BAD7AA +B8D6A9BAD7AABCD9ADBBD8ACB8D8A6C9E1B2B8C79BD2DAB0CDD3A9D0D6ADC1CFADC6DAB1C2D8AE +BED8AEBED5AAC3D6ADBAD4A3B9D4A4B7D4A2B7D7A5B9DAA9BADDADBED8AFC0DAAFC3DBB2C7DCB4 +C2D4ACBDCEA8C1DAA6B7D4A0BEDFAAC3E4B1BCD8A6B9D3A1CCDFB4B4C99EC1D8ADB6CDA4C1D9B0 +BFD7AFC4DFB0B2CDA2D0ECC5A0BA9D607A67819B8FCBE8E5DEF9F9D7F6FAD6F5F6A0BBB9526966 +919A85BDCDAEC9DBB3BAD3A4B8D5A6B5D1A7BFD9AAC7DEA9C8DAA1C3D497CBDEA6D0E5B0BFD6A0 +B8CD98C8DEA8CCE4AEC7DDA5BFD59EC4DAA4C6DCA5C2D7A2BCD59EB8D39CC2DFA7C5E0ABBED3AD +B5CBA5C6E69EBAE888B5EA83B6E880B6E97FB5E980B7EA80B7EA80B7EA80B7EA80B7EA80B7EA80 +B7EA80B7EA80B7EA80B7EA80B7EA80B7EA80B7EA80B7EA80B7EA7FB7EA82B7EA82B7EA82B7EA82 +B7EA82B7EA82B7EA82B7EA82B7EA82B7EA82B7EA82B7EA82B6E881B6E981B6E881B6EA82B6EA82 +B6EA81B3EB7FB8E590BAD6A0D7E6CCEAF6E4F6FFEFF8FAF2F7FAF3FEFEF9FBFFFDFCFEFEFBFDFF +FEFEFFFEFDFCFEFFF8FCFDF7FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFCF4FCFFFAFEFCF7FFFCF7 +F3FCFF769BB7BECBD9F9FFFFFCFFFAFEFFF6FEFDF9FDFFFEFAFFFFFDFFFEFEFFF9FFFFFAFFFCFD +FFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFEFEFFF9FCFCFAFFFEFFF2EEE99C9D7D141000000000020107000400 +010400020203000000010101010101000000000000000000010101030303010101020202000000 +020202020202000000020202000000020202010101000000010101000000000000000000030303 +000000000000373737AFAFAFC7C7C7868686FFFFFFFDFDFDFFFFFFC3C3C3000000D6D7D7FFFFFF +FCFAFCFBFCFCFDFDFDFAFBFAF9FEFDFEFAF5FFFFFF9AA4A87A9DB384A8BB738B97A1A0AA93929B +C0BFC599989AFFFFFDFEFCF9FDFBF0FBFAECE8EAD8DDE4CACAD4B1C1CBA7C6E3ADBCD9A6BFDDAB +BAD7A3BCD7A2C7D9A3D1DFB4C1D6A9B4CEA0B9D6A5BCD9A8C0DAABB8D1A5B7CFA2BCD3A6BBD3A6 +BCD2A6BCD3A6BED5A6BED5A6BDD5A7BCD3A5BAD4A5BAD4A4BDD9A7BBD6A5B9D4A2BAD5A4C0DCAA +BCD7A7BADCA3B6CF9ACEDFACC5CD9ECAD1A2CAD0A2B8C698C4D6A7C1DBA8BED4A5BFD5A6C5D6A9 +C1D9AABED8A7BCD4A5BBD5A5BBD6A2B9D5A1BDD6A7BCD5A7BAD0A2B9D1A3BFD5A6BED4A7C4DDAA +BBD7A4B5D6A1B3D59FBCD8A3C1D8A5B9D1A5C3DBAFBAD0A3C9E0B2CBE1B1B9CFA1BDD2A3D1E5BF +98AC90566A5C8DA298E4F8F2E2F6FFDFF8FFC4E2E79DBCBA526D62819E8DCED8B6CFDCB5BACB9E +C2D7A5C4DCA7BDD49FB4D199BDD59BC7D99EC7D89CC5D89BC2D79BC1D99FC2DB9FC1D99EBBD299 +BED59EC3D8A2C2DCA5BED9A2B7D59EC1E0A7C1E1A8B9D9A0B7D19CC5DCB2B6CDA2C0E193B9E687 +B5E786B7EA83B7E983B7E983B5E781B5E881B5E781B5E882B5E882B5E882B5E882B5E882B5E882 +B5E882B5E882B5E882B5E781B5E781B5E782B5E884B5E885B5E884B5E884B5E884B5E884B7E985 +B6E985B7E985B5E884B5E884B5E884B9EB86B7EA86B8EB86B6E884B6E885B6E884B5EA80BAE293 +C9E1B6F1FBF0FAFFFAF7FFF6FDFEFAFCFEFBFAFCFAFDFFFCFEFFFFFCFFFDFEFCFFFEFEFCFEFFF8 +FEFFF8FEFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFFFFFF919191070707E4E4E4FFFFFFFFFCF4FCFFFAFEFCF7FFFCF7F3FCFF769BB7BFCBD9 +F8FFFFFCFFFBFEFFF6FEFDF9FDFFFEFAFFFFFDFFFEFEFFF9FFFFFAFFFCFDFFFBFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFEFDFFF9FCFCFAFFFEFFF2EFEA9D9D7D141000000000020107000400010400020203000000 +010101010101000000000000000000020202000000020202000000040404000000000000040404 +0000000202020000000202020000000101010000000404040000000000000000000000003B3B3B +B1B1B1C0C0C0898989FFFFFFF9F9F9FFFFFFBFBFBF000000D7D8D7FFFFFFFEFBFDFDFFFEF8F7F7 +F8FAFAFAFEFDF8F9F0FFFFFF9BACAD7AA0B57CA7B90A2A34020512666B76BABFC6A3A6A6FFFFFF +FDFEF9FBFEF1EEF4E4D8DFC8C2CEADC1CDA7C4CFA8BDDAA0BBD9A4BDDAA9BBDAA9BFD8A5C6D8A4 +C5D8A9C2D8A8BDD9A6BBD8A5BED8A7C1D9A8C1D7AAC0D7A8C0D7A9C0D7A9C0D7A9BFD8A9BDD8A6 +BCD8A6BED8A6BBD7A5BDD7A5BBD7A4C3D9AAC1D8A9BFD6A6C2D8A9C3DAABC2D8A9B4DEA7B6D8A4 +C4DCABC3D3A5C6D4A8C6D2A7B9D59EBEDBA5BADBA6BBD8A7BED6A9C5D6ABC2D7ADC0D7ABBED6A9 +C2D9AAC1D9A8C0D8A6C3DAAAC3DAAABFD7A6C2DAA8C3DAA9BFD9A7C2D9A9BDD9A7B8D8A5BCDDA9 +BDD9A6BFD7A6BED9ABBAD6A7BCD3A4C4DBAABCD19FC2D6A2C3D9AFA6BA9B495E4A95A8A6D4E8E8 +E3F8F9D7ECF7D4EDF49BB9B9537162728D71BAD2ADCBDFB2C1D7A9BDD4A4BFD7A6C0DAA7BDD8A3 +BCDBAABFD8A7C2D6A6C4D7A5C3D8A4C0DAA3BED7A1C2DEA7BED7A4BFDAA6BED8A8BDD6A7C1DBA8 +BCDCA6B6DDA4B7DFA6B9DEA7BADBA4BCD6A0C1D8A9C2DAA8C1E293BBE889B4E788B8EB88B7EA87 +B8EA87B6E885B6E886B6E886B7E986B6E986B6E986B6E986B6E986B6E986B6E986B6E986B6E986 +B6E886B6E986B6E886B6E889B6E889B6E889B6E889B6E889B7E98AB4E687B5E787B4E687B7E98A +B6E889B6E989B9E788B8E788B8E888B8E889B8E889BAE98AB4E97EB7DE94DAF1CDF2FAF6F9FDFE +F8FEFCFCFCFDFCFCFEFAFDFCFDFFFEFEFFFFFCFFFEFEFCFEFEFDFCFEFFF8FEFFF7FEFEFCFCFCFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191 +070707E4E4E4FFFFFFFFFCF4FCFEFAFEFCF7FFFCF7F3FCFF769BB7BFCBDAF8FFFFFCFFFBFEFFF6 +FEFEFAFDFFFEFAFFFFFDFFFEFEFFF8FFFFFBFFFCFCFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9FCFCF9 +FFFEFFF2EFEA9D9D7D141000000000020108000400000400020203000000010101010101000000 +000000000000010101020202000000020202000000010101010101000000020202000000020202 +010101000000010101000000000000000000030303000000000000393939ADADADCFCFCF7C7C7C +FFFFFFFCFCFCFFFFFFC3C3C3000000D5D5D5FFFFFFFDFAFCFBFBFAFEFEFEFCFEFCFAFFFEFAFDF2 +FFFFFF9AADAE7AA7BB8DBACD6C929A7D8390B3BCC6C0C9D09DA4A4FFFFFFF6FDF8DCE6D7CCD7C6 +C1CEB5BBC9A7BDCEA3C3D4A7BCD99BB8D8A2B4D3A3B9D8A9BDD6A5C0D39CBFD1A1BDD3A1BAD5A1 +B9D5A0BAD4A1BFD2A0BCD2A3BED4A4BCD3A3B9D1A0B9D1A1B7D1A0B8D7A0B9D5A2B8D6A2B8D39F +B8D59FBAD4A1B9CE9FBAD0A0B8CF9FBDD3A4BBD0A1BACE9FA9DEA6B0D9A6B6D4A5B9D1A4BDD1A6 +BACFA4B5DCA1B0DBA0ADD7A0B3D7A5B9D3A7C0D5ABB9D1ACBAD3ABBCD2A9BED3A5C0D3A5BFD2A3 +BED5A2BFD4A2B8D19EBDD6A3BCD6A3B6D49FBCD3A5BAD7A7B3D4A1B7D8A7B7D3A4C4DCAEAFCB9D +B5D0A0B9D2A0B9CE9BC6D9A3CFE2A79BB58C4A614294A99BDAECF2E4F8FFD7ECF5C5DCE89DB8BD +54756E6D8D71C0DBAFC3DBA2B6D59DC7E4B1B5D3A1B6D4A2B8D6A6BAD9A5B3D4AAB6D2ABB7CEA8 +BDD3ABBBD4A6B8D4A5B9D9A1B8D7A5BAD8A6B5D2A5B7D4A9B9D7ADB9D5A3B7D8A5B2DBA6ABD9A2 +AFD7A2B5D6A3B9D49BBBD1A1B8D09BB9DC88B7E684B6EB89B4E686B4E787B4E787B2E585B2E685 +B2E685B1E585B2E686B2E685B2E687B2E685B2E587B2E585B2E585B2E585B3E686B3E686B3E686 +B2E587B2E587B2E587B2E587B2E587B2E587B3E687B4E787B3E687B2E586B2E586B2E587BAE98A +B8E789B6E587B5E486B7E588B4E485B5EB7CB8E194E3F8D9F6FDFFFCFDFFFBFEFFFCFBFFFCFCFE +FAFDFFFDFFFEFEFFFFFCFFFBFEFDFFFEFFFBFEFFF8FEFFF7FEFDFBFCFCFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFEFFFFFF919191070707E4E4E4FFFFFF +FFFCF4FCFFFAFEFCF7FFFDF7F2FCFF769BB7B9C9D7FAFFFFFDFBF9FEFCF5FDFCF8F9FEFDFAFFFE +FDFFFEFEFDFDFDFEFEFFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFDF6FEFDFBFFFCFFF1EDE89C9C7F +141000000000020108000200010200000001000000010101000000010101030303010101010101 +020202000000020202000000010101010101020202010101010101020202000000020202020202 +020202000000010101000000020202000000353535B0B0B0C8C8C87B7B7BFFFFFFFCFCFCFFFFFF +C5C5C5000000D6D6D6FFFFFFFBFEFBFEFEFEFCFBFCFFFDFEFEFAFDFBFBF3FFFFFF97A5A56BADAB +8DD6DBA5D9EACDECFCDDF7FFC2D6DA939D9CF9FFFADDEDDBC6D4C0C3CBB9C7C9B6C8CBB3C9D3B3 +C8D8B7C6D7ADC6D5ABC5D5AAC3D3A7C3D3A9C1D2A9C6D7A9C5D7A8C5D6A8C7D8A9C6D7A9C3D6A6 +CBD5ADC8D5ABC6D7ABC1D7ABBEDAABBDDAAAC1D8ACBFD6AAC2D8ABC0D7ABC1D7ABC1D7ABC6D7A9 +C5D6A9C5D6A9C5D6AAC4D4A8C6D7A9BFD7B0C1D7B0C0D8B0BED7B0BED7B0BFD7B1BBDBACBEDAAC +C0DAACBDD7A9BFD8A9BED6A9C7D4ADC5D3AFC5D3AEC5D3AEC6D3AEC6D4AEC4D4AAC4D4AAC6D4AC +C5D4A9C6D4AAC7D5ABC2D8A8C3D8A7C3D9A8C3D8A8C3D9A9BDD1A2C0DCB0C7E3B4B9D6A4BED9AA +D3F0C6A3C19B425F4682A38FC6E9DFDCFFFCD1F0F0D2EFF09FC1CA5C7A7C6E8277B8CBAAC0D2A3 +C5D9A0B5D69DB2CFA0BED9B3BDD6B4BFD7AABDD59FBCD5A8BED7ABBFD9ADBFD8AFC0D8B1C1D8B1 +C0D1B3C0D2B4C0D2B4C3D6B7C3D5B6C1D4B5C3D5B6C1D6B6C1D5B6C2D5B6C1D5B6C1D6B7BFDAA9 +BFDAA6BFDAA6BFD8A7BED6ACBFD3B0BFD5B1BFD5B1BFD5B1BFD5B1BFD5B1BFD3B3C3D6ACC0D3AA +C3D6ADBFD2A9C1D4ABBFD3A9C3D4ACC3D4ABC3D4ABC3D4ABC3D4ABC3D4ABC2D1AAC3D3ACC2D1AA +C3D4ACC3D4ACC3D3ACC2D3B4C1D3B5C1D3B4C2D4B7C4D4B7C1D2B7B9C8A7BFCEADCAD9B8BECEAE +BAC9A8BFCEADE2ECD9F4FBEEFCFFFBFDFEFEFDFBFDFDFDF7FAFAF9FBFAF9FAFAF8FEFEFBFEFCFA +FEFEFAFBFBFBFBFBFDFBFBFCFCFBFCFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDF9FBFFFFFF909090070907E4E5E4FFFFFFFEFDF3FAFEFAFBFEF9 +FFFFF8F5FBFF7C96B6B5C5D3F9FFFFFFFFFDFFFCF4FDFEF8F9FFFDFAFFFEFDFFFEFEFDFEFDFEFE +FFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFEF8FEFDFCFFFEFFF3F0E99E9D7E141000000000020108 +000100000200000000010101010101000000020202000000020202020202000000020202000000 +040404000000000000020202020202020202000000020202000000030303000000010101010101 +000000020202000000353535B6B6B6B0B0B0979797FFFFFFFDFDFDFFFFFFC7C7C7000000D4D5D4 +FFFFFFFBFDFBFDFEFEFCFBFCFFFDFEFEFBFDF8FDF4FFFFFF92A4A564AAA791DDE09ED4E5CDEBF9 +E0F9FFB8CAD0929E9BFAFFFADFEEDCD6E1D5D9DFD1DEE0CFE4E7D5DEE6D0D8E6CCD8E6CAD9E9CB +D8E7CBD7E7C9D8E7C9D8E6CAD9E6C9D8E6CAD8E6C9DAE8CBD9E8CAD7E5CADEE5CADBE7C9D8E6C9 +DAEDCDD6ECCCD3EBCAD9EBCDD7EACAD9ECCDD8EACBD9EBCBD8EACDDBE9C9DAE9C9DAE8C9DBEACA +D9E9C8DBEACBD9E9CDD9E9CED9E9CED8E8CDD9E7CCD9E8CDD4EACAD5EAC9D5E7C9D8EACCD9E9CC +D8E9CBDDE8CCDCE8CDDCE8CDDCE8CDDCE8CDDCE8CEDBE7CADBE7CADBE7CBDAE7CADAE7CADBE7CB +D7E8C9D8E7C9D7E7C9D9E8CAD9E8CAD2E1C4E2F4D6D5E7C8DAEFCBE7FDDCA5BB9F5C725999B5A6 +D7F6ECE3FFFFCBEBF0C1DFE6ABC3CC5B7A82688385CDE0DBE7F5E2DFEED0D9EBC6DAF2C8D3E8C8 +D9EBD3D5E4CED9E9CAD6E8C0D9E9CBDAEACBDBE9CCD7E7CBD9E7CCD7E5CEDAE8D1DBE7D1DBE8D1 +D9E5CFD9E5CFD9E6CFD7E7CFD8E6CFD7E6CFD9E8D1D9E8D1DAE7D2D9E9C8D9EAC7D9EAC4DAEAC7 +DAE9CDDAE8CFDAE9CFDAE9CFDBE9CFD9E7CDD9E8CED8E7CEDCEACDDAE7CBDDEACDDAE8CBDCEACD +DAE8CCDBE6CBDBE6CBDBE6CBDBE6CBDBE6CBDBE6CBDBE7CCDDE9CDDBE7CCDBE6CBDBE6CBDBE6CA +DCEAD1DCE9D1DCE9D1DCE9D0DDEAD2DBE8D1D9E4CBDCE6CEE0EBD3DFEAD2DEE8D0E2EDD5F4FCE9 +F7FEF0F9FDF6FBFEFCFDFDFBFEFCF8FCFCFAFCFCFAFCFCFAFEFEFCFEFEFCFEFEFAFBFBFDFDFDFD +FDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFAFBFFFFFF909090070907E4E5E4FFFFFFFEFEF3FAFEFAFBFEF8FFFFF8F6FBFF7B96B7 +B6C6D4F8FFFFFDFDFAFFFCF5FDFEF8F9FFFDFAFFFEFDFFFEFEFDFEFDFEFEFFFDFEFFFBFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFEFCFDF6FEFCFBFFFFFFF5F0EBA09F80141000000000020108000300000300000000 +000000010101000000010101030303010101010101030303010101020202000000020202010101 +020202010101000000030303000000020202020202020202000000010101000000020202000000 +333333BBBBBB919191B7B7B7FFFFFFFCFCFCFFFFFFCDCDCD000000D2D3D2FFFFFFFBFEFCFDFEFE +FCFBFCFFFDFEFEFBFDF5FCF4FFFFFF8DA2A35FA9A689D8DC99D3E5C0DFEDD7F0FDB5C6CD9DA6A4 +FFFFFEF6FDEEF5FCF8F8FDF6FCFCF6FCFEF6FAFDF2F5FDEDF6FEF1F7FEF4FAFEF6F6FEF1F6FEF3 +F6FDF2F6FEF6F6FEF6F6FEF6F9FEF7F9FEF7F6FEF5F9FDF3F8FDF3F5FDF1F6FFF6F2FEF2EEFEEF +F6FEF4F4FEF1F7FEF4F5FEF2F5FEF2F4FEF2F6FDEFF6FEF1F6FDF1F7FEF1F6FDEFF7FEF1F9FEF4 +F9FEF5F9FEF4FAFEF7FAFEF6FCFEF6F3FEF2F5FEF3F6FEF3F7FDF3F8FDF3FAFDF2F7FEF5F6FEF5 +F6FEF5F6FEF5F6FEF5F6FEF4FAFEF4F8FEF4F8FEF4F8FDF5F8FDF5F9FDF3F6FEF6F6FEF6F6FEF6 +F8FDF6F7FEF7F3FCF4F4FBF4F5FDF4FEFFFCCAD9CB6D7B728C9B95D8F3F5DFFBFFD6F3FDB8D6E2 +B5CEDB667B886F888ADAEEF0F4FFFFF3FCF9F1FBF2EEF9EEF4FFEEEEFAEBF5FCF7F7FDF6FBFEF4 +FAFEEFFCFFF4F9FEF4F8FEF3F9FEF5F9FEF7F9FEF6FAFEF5FBFEF4FBFEF4F9FDF2F9FDF3F9FDF3 +F8FDF3F7FDF3F7FDF3F8FDF4F8FDF4F8FEF4F9FDF3F9FEEFF9FDEDF9FEEFF8FEF3F8FDF6F8FDF6 +F8FDF6F8FDF6FAFEF8FAFEF8FAFEF8F9FEF3F9FDF1FBFEF4FAFEF3FCFEF6FBFEF3FBFEF4FCFEF4 +FCFEF4FCFEF4FCFEF4FDFEF4FCFDF3FDFEF6FCFDF3FCFEF4FCFEF4FCFEF4FCFEF5FCFEF5FCFEF5 +FCFEF6FDFFF6FAFEF3FCFDF9FCFDF8FDFEFAFCFDF7F8FAF4F9FBF4FAFEF1FBFDF4FFFFFCFCFEF9 +FDFDFBFCFBF9FDFDFCFDFDFBFDFDFBFEFEFCFEFEFCFEFEFBFBFBFDFBFBFBFBFBFBFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9FBFFFFFF +909090070907E4E5E4FFFFFFFEFEF3FAFEFAFBFEF8FFFFF8F6FBFF7B96B6B1C2D0F9FFFFFFFEFB +FFFCF5FDFEF8F9FFFDFAFFFEFDFFFEFEFDFEFDFEFEFFFDFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFEFEFEFDFDFDFDFDFDFEFEFEFFFFFFFEFEFEFEFEFEFEFEFE +FFFFFFFEFEFEFDFDFDFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFD +FDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFEFFFFF9 +FCFCF9FFFEFFF2EEE99D9D7E151200000000020108000200000200010001010101010101010101 +010101000000010101010101000000010101000000000000000000010101000000000000030303 +000000030303000000010101000000020202020202000000000000000000393939ADADAD808080 +E3E3E3FFFFFFFEFEFEFFFFFFC4C4C4000000D2D2D2FFFFFFF9FBFAFDFCFCFDFEFEFFFEFFFFFCFE +F6FCF5FFFFFF8DA2A35CA5A389D8DEA0D9EDBAD8E6D8EFFBBFCED59FA6A4FFFFFFFDFFF1FAFAFA +FCFDFCFBFDFBFBFEFAFCFEF9FAFBF6FBFEFFFAFFFEFDFFFFFCFEFEFCFEFEFCFFFFFBFCFFFBFDFF +FBFEFFF9FBFFF9FBFFF9FBFFFBFFFFFBFFFEFAFFFFF8FEFDF9FFFEF9FFFEFAFEFDFBFDFEF9FDFD +FCFFFFFCFEFEFCFFFFFCFFFEFCFFFDFCFFFDFCFFFDFCFFFDFDFFFDFCFAFCFDFAFCFDFAFCFEFCFD +FEFBFDFEFBFDFCFFFFFDFEFEFEFFFFFDFCFDFDFBFDFFFBFEFAFEFDFBFDFDFBFDFDFBFDFDFBFDFD +FBFEFDF9FDFEFAFDFDF9FDFDFCFFFEFCFFFEFBFFFFFCFCFFFCFDFFFCFCFFFCFDFFFEFEFFF5F6FA +F9F8FFFBFCFFD0D6D86672738D9DA2DFEEF6DBF5FFD1EDFACCEAF9ADC8D45F757E68797FE9F9F6 +FCFFFFFBFFFFF9FCFFF2F5FAF6FCFFF4F5F6F0F2F4F7F7FDFDFCFFFFFCFFFFFDFEFEFCF9FEFDFB +FFFBFEFBF8FBFCF9FDFCF8FEFBFBF8FDFDFAFDFCFBFFFEFDFEFEFCFFFDFCFDFFFCFEFFFCFEFFFD +FAFBF9FBFCFAFAFCF9FFFCFCFEFDFAFEFDF8FEFCFAFFFDFFFEFAFFFEFCFFFEFBFFFEFBFFFEFBFF +FEFBFFFFFBFFFBFAFCFCFBFCFBFAFCFDFCFEFDFCFDFDFCFDFFFDFFFFFDFEFFFDFFFEFBFDFEFBFD +FEFBFDFEFBFDFEFBFDFEFBFDFEFCFEFEFCFEFFFCFFFBFCFBFDFCFBFDFCFBFEFEFCFEFDFCFEFEFD +FEFCFFFBF8FCFCF9FDFDFAFEFDFBFEFDFAFFFCFCF8F9F7F3FCFBF6F9FBF5FCFDF8FBFBFDFFFFFD +FFFFFDFDFDFBFBFBF9FBFBF9FBFBF9FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFFFFFFFF909090070907E4E5E4 +FFFFFFFEFEF3FAFEFAFBFEF9FFFEF7F4FBFF7C98B7AEBECEF7FDFFFEFEFBFFFCF4FDFEF8F9FFFD +FAFFFEFDFFFEFEFDFEFDFEFEFFFCFEFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFDFDFDFCFCFCFCFDFCFDFDFDFEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFDFDFDFCFCFC +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFEFEFEFFFEFFFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFFFFFEFDFFF9FDFCFAFFFEFFF1EDE7 +9E9E80151200000000020108000300000300010001010001010101010101010101010101010101 +010101010101010101000000000000000000010101010101010101000000020202000000010101 +010101000000000000000100000000000000000000343434A2A2A2949494EBEBEBFFFFFFFEFEFE +FFFFFFCECECE000000CAC9C9FFFFFFF9FBFAFDFDFCFCFBFCFEFCFDFFFBFCF5FAF5FFFFFF93A5AA +6CB1B28FDAE1A0D4EBBBDCEADCF5FEBCCAD19C9FA1FFFFFEFCFCEFFDF9F8FCFDF9F9FFFAF9FFFB +FCFCFBFDF9F9F6F5F9F9F9FCFDFDFEFDFDFFFDFDFFFDFDFFFDFDFEFDFDFEFDFDFEFCFCFEFCFCFE +FCFCFEFCFEFFFBFDFFFBFDFFFBFDFFFCFEFFFCFEFFFDFDFFFEFDFFFEFDFFFEFDFFFEFCFFFEFDFF +FCFEFEFDFDFEFDFDFEFDFDFEFDFDFEFDFEFFFDFBFAFDFBFAFDFBFAFEFDFBFEFCFBFEFDFBFBFDFF +FCFDFFFDFEFFFCFCFFFEFAFFFEFBFFFDFEFCFCFDFBFCFDFBFCFDFBFCFDFBFCFEFCFBFCFFFBFBFF +FBFBFFFDFEFFFCFDFFFAFAFEFEFBFEFEFBFEFEFBFEFEFCFEFEFBFEFFFEFFF4F3FDCDCFD5737A7E +96A4A4DFF2F6E7FAFFD3EEF9C4DFECA6C3CE678084768A88DEEDE7F6FFF5F8FFF6FAFBF9FDFDFB +FDFEFFF9FEFFF7F9FCFAFCFDF7F9F9FDFBFEFFFBFEFFFCFFFDFBF8FEFCFAFEFBFBFCFAFDFCFAFD +FCFAFFFCFCFCFDFDFDFCFBFCFEFEFEFEFCFEFEFDFEFBFFFEFBFFFEFBFFFEFAFDFCFAFDFCFAFDFC +FEFCFFFEFDFBFEFDF8FDFBFAFEFBFEFEFAFFFEFBFEFEFAFEFEFAFEFEFAFEFEFAFEFEFBFFFCFCFE +FCFCFEFCFCFEFDFCFFFDFCFFFCFDFFFDFBFEFDFBFEFDFBFEFDFAFFFEFAFFFEFAFFFEFAFFFEFAFF +FDFAFFFEFCFFFEFCFFFEFDFFFBFCFEFDFCFEFCFBFEFEFEFFFEFDFFFEFEFFFDFAFEFBF8FCFBF9FD +FDFAFEFDFAFDFCF9FDFEFAFEFEF8F8FEFCF7FDFCF6FCFDFAFCFEFEFFFEFBFBFBF9F8F8F6FCFCFA +FDFDFBFDFDFBFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDFFFFFF909090070907E4E5E4FFFFFFFEFEF3FAFEFA +FBFEF9FFFEF7F4FBFF7C97B7B4C3D2F8FFFFFCFBF9FFFCF5FCFDF8F9FFFCFBFFFDFCFFFDFEFDFD +FEFEFDFFFCFDFFFBFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFBFDFCFBFCFBFBFCFCFBFCFCFBFBFBFBFEFEFEFEFEFE +FCFCFCFBFBFCFDFDFDFEFEFEFCFCFDFDFDFCFBFBFDFEFEFEFDFEFEFCFBFBFEFEFDFDFCFDFEFCFC +FCFDFBFDFDFDFDFDFCFDFDFCFDFDFCFDFDFDFCFBFBFCFCFBFCFCFBFDFDFDFDFBFBFDFBFDFDFCFB +FDFDFDFDFCFBFDFCFCFDFCFBFDFBFBFFFFFFFFFFF9FEFDFCFFFDFFF7F2EE9B9A7C151100000000 +010107000200000200000001000000010000010000010000000000000000000000000000010101 +000000000000000000010101010001010001010000010101000000000101000100010101000000 +0200020202020001010000004242428A8989AEADADF7F7F5FFFFFFFEFEFEFFFFFFD0D0D1000000 +C8C8C8FFFFFFF9FCFAFDFDFDFCFAFBFEFCFDFFFBFDF6F6F4FFFFFF9EAAB16AABAF8FD7E1B0E0FA +BDDFECDDF7FFB9C7CD9D9FA0FFFFFEFFFEF2FEF8F4FCFDF7F9FFF7F9FEF9FCFAFAFEF8F7FBF9FB +FBF9FBFEFCFEFEFCFDFEFCFDFEFBFEFEFFFAFEFEFBFEFFFBFEFCF9FEFCF9FEFCFAFCFFFEFBFEFD +FDFDFCFEFFFFFFFDFFFFFCFFFEFCFFFFFCFFFFFEFFFFFBFCFFFBFDFFFBFDFEFEFAFEFCFBFEFCFB +FEFCFBFEFCFBFEFCFBFCFEF7FDFEF7FCFEF7FFFEF9FFFEF9FFFEF8F9FFFDFAFEFDFBFFFDFBFBFC +FCFBFCFEFBFCFBFEF8FAFEF7FAFEF7FAFCF7FAFCF7FAFEF8FBFDFDFBFDFCFBFCFDFDFFFFFCFDFD +F7FAFBFFFCFBFFFBFAFFFDFBFFFDFAFFFEFBFFFFFFD2D2DA6C7175818A89E4F3F3EAFDFFD4EAF0 +CDE8F1AECAD36F8E945B7572D2E3DDF3FFF0F3FBE8FAFDEDFAFAF0FDFCF5FDFDF8FAFEFBFBFEFF +FAFFFBFBFFFAFAFBF8FEFCFCFFFBFFFBFDF6FCFDF6FCFEF7FCFCFAFBFCFAFBFBFBFEFFFFFCFEFE +FAFDFCFCFFFEFCFEFEFCFFFEF9FFFCFAFFFCFAFFFCFAFEFCFAFEFCFBFEFEFFFEFCFFFEFAFFFFF8 +FBFDF8FCFCFDFCFCFFFCFCFAFCFCF9FCFCF9FCFCF9FCFCFAFCFBF8FCFFFEFBFEFDFBFEFDFAFDFC +FBFDFCFBFEFCFAFAFBFAFAFBFAFAFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFCFDFDFEFDFDFE +FDFDFDFBFBFFFAFCFFFAFBFFFCFEFFFCFEFFFBFEFFFFFFFDFCFCF9FDFCFAFAFAF8FAFAF8FCFBF9 +FFF8FFFFFAFDFFFDF7FCFDF4FDFFFAFDFFFFFEFCFBFBFBF9FBFBF7FAFAF7FEFEFBFFFFFBFCFCFE +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFCFDFFFFFF909090070907E4E5E4FFFFFFFFFCF3FAFEFAFBFEF8FFFEF7F5FBFF +7B98B7BECBD3F5FFFFF7FFFFFAFFFFFDFFFBFDFFF8FEFEF9FEFEFAFEFFFAFBFCF7FEFFFAFFFFFB +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBFBFFFB +FAFEFDF8FBFAF1F8F9F0FAF9F8FFFFF2F8F9F6FBFCFBFDFCF8F8F8FBF8F8F8F3F3FFF3F9FEFCFC +FCFDFBF8FDF9F9FAF6FEFDF8FAFAFBF7FBFBF5F9F9F3F8F8F4FBFAF4FEFDF6FCFDF7FBFDF7FBFD +F7FBFDF7FBFDF7FCFDF3FDFDF5FDFBF6FCFBF6FBFBFCFDFCFAFCFBFAFEFFF4F9FBFBFDFDF7FCFD +F9FDFEF8FCFDFDFDF7FBFFF5F7FEEFF4FFE7EDF3D89E9F8117160B000000040207000005000002 +000300000302000302010302000200010000000000020202020202020202000000010101010001 +000201000201000200010302000302020302020000030102000100010101000201000000030102 +000000424A48606A66CCD3D0FDFFFFFBFDFAFAFBF8FFFFFFD4D4D1000000C0BBBBFFFFFFFCF7FE +FBF7FCFEF9FEFDF8FEF9F4FCF6F6F1FFFFFF97ADB46CA4AB9BD9E38ABDCD6F878CE3F9FEBBCDD1 +9BA7A8FDFFFFF6FCFBFCFBFAFDFEFCFDFDFCFDFDFCFEFEFCFDFEFBFEFEFEFEFEFEFCFEFEFDFEFE +FDFEFEFCFDFCFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFD +FEFEFDFDFCFDFFFFFFFFFFFFFCFCFEFDF9FAFEF9FCFEFBF9FBF8F7F8F5F1F9F6F1F4FEEDF3FDF1 +F0F5EEF3F7F7FEFFFFD9D9E1535C6195A4ABEDFFFFD4F7FFC6EAF9BEE5F58DC9D1557E86667983 +F2F4F9FFFFFFF8FBF5F6FAF7F9FEFBF8FEFAFAFEFAFBFFFCFCFFFBFFFFFFFEFEFFFCFBFCFEFEFE +FEFEFEFCFEFCFEFEFDFEFEFDFEFEFEFCFCFCFFFFFFFFFFFFFCFCFCFEFCFEFEFEFEFEFCFEFEFDFE +FDFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFDFCFDFEFEFEFEFEFC +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFEFFFFFFFFFFFFFFFFFFFDFCFDFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFFFFFFFFFFFFFFFFFFFDFDFCFEFEFC +FEFEFCFEFEFCFEFEFCFEFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFDFDFEFDFEFD +FDFEFDFEFCFEFEFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFC +FFFFFF919191070707E3E3E4FFFFFFF6FEF5FBFBFAFEFAF9FCFEF7F0FCFF8292B8A8B5B9F8FFFF +F4FFFFFAFFFDFCFFFAFDFFF8FEFCFCFEFDFBFEFEFBFCFBFAFFFEFCFFFFFBFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFBFDFCFBFEFCF9FDFDF7FDFA +F6FCFCF3FEFCFAFFFCFAFFFBFCFFFBFFFFFAF8F8F2F6F4EFFFFCF6FDFEF7FCFFF8FAFFF6FFFFF7 +FFFEF8FBFFF8F9FFF7F7FFF5F6FFF6F5FFF6F5FFF5F7FFF9F7FFF9F7FFF9F7FFF9F7FFF9F6FFF9 +F5FFF6F5FFF6F7FFF6F7FFF6F7FDF5F6FAF3F8FEF5F7FCF4F7FDF5FBFFF9F9FFF6FBFFF8FCFFF6 +FAFFF3F5FFEDF5FFE5EAEED49E9E8018170C000000030205000006000103000300000402000202 +010302000000000000000000020202020202020202000000010101000001000101010101000000 +020202020202010002030000030102000100010001000201000200020001000000343A3876837D +DADEDDFDFFFFF6FAF5F9FDFAFFFFFFD6D6D4000000BEBCBBFFFFFFFDFBFEFDFBFFFCFBFEFCFBFE +F9F7FAF8F5F2FFFFFF94A6AE7DADB695CBD450798A596E72ACC0C3BACACE9BA5A5FFFFFFF8FCFC +FCFBF9FEFEFCFEFDFCFEFDFCFEFEFCFDFEFAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFF +FFFFFFFCFCFCFDFBFCFDFBFCFDFCFBFEFDFBF9F8F3FBFBF7FAFFF3F9FEF6F8FCFAFFFFFFCFCED3 +797881A2AEB5DDEEF3E1FDFFC7EFF7B1DAE5A6D3DD5E8D9563848CD8E5EAFBFAFEFEFCFBF7F8F2 +F8F9F7FAFCF9FBFDFAFBFEFAFDFFFDFDFFFBFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFEFDFDFEFEFDFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFFFFFF919191070707 +E3E4E4FFFFFFF7FEF5FCFBFAFDFAFAFDFFF7F1FCFF8192B8949FA1FAFFFFF5FCFBFCFFFDFEFEFB +FFFEF9FCFDFCFEFEFDFEFEFDFCFCFCFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFBFCFBFDFEFEFDFFFCF9FFFBF9FFFBF3FAF5FBFFF6 +F2F9EDEBF2E5E6EDDCE7EEDDE1E7D4EAF4E2E2ECDBE0E9D8E8EDDEEFEEE2EDE8DFE7F0DCE5F0DD +E3EFDAE3F0DBE1F0DADDEDD7E0ECD8DFEBD8DFEBD8DFECD8DFECD8E0ECD8DDECD8DEECD8DFECD6 +E2EEDBE1ECD8E7EFDDE2EBD5E4ECD7E3ECD7E2EAD6DCE4D0E0EAD4E2EADAE3EDDAE5F1DBE2EBD3 +DBE0C39F9F801B170D000000010002010005000101000100000402000302010100000100000000 +000000020202020202020202000000010101000101020001020001000000030102030002030002 +04000003010200010101000100020100020002000100000023292795A19EE7EEEBFDFFFFF1F6F1 +F9FEFAFFFFFFD5D6D4000000BEBCBBFFFFFFFBFAFBFBFAFBFCFDFCFCFDFDF7F7F8FEFAF6FFFFFF +9AA5AA79A0AB7AA4AC617F8FC2D3D67E8E90B9C6CA99A1A2FFFFFFF7F9F8FCFCF9FDFDFBFEFEFC +FEFEFCFDFDFCFCFCFAFCFCFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFCFCFCFEFDFD +FDFDFEFDFDFBFFFFFDFCFBF8F0F0EBFCFDF6F8F9F5FFFFFFD9D8DF7F7F8792929DE9F8FFDEF6FE +CDF0F6B8E7EA9FD0D35F8F95658287C5D9E0F9FEFFFBF8FDFCF7F6FCF8F7F9F9F7F8F8F6FDFDFB +FCFBFAFEFEFDFEFFFBFFFFFFFEFEFEFBFBFBFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFBFBFB +FEFEFEFFFFFFFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFDFCFDFDFCFCFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFFFFFF919191070707E3E4E4FFFFFFF7FEF5 +FCFBFAFDFAFAFDFEF6F1FCFF8192B799A3A1FEFFFFFCFFFEFBFCFAFEFBF9FDFBF9FCFEFEFEFEFD +FEFEFEFCFCFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFDFCFAF8FCFCFBFBFDFDFDFCFEF8FAFEF7F9FCF4F4FEE9D7E4CDBDCAB0BECDAD +BECDA9BECFA9B8C9A8B8C8A8BBC6A9C1C9B2C0C7B1C2C9B3BECFAEBACCABB8C9A8BACDACB7CCAA +B9D0ADB9CAA8BACBAABACBAAB9CAA9BACAA9B9CAA9B7CEABB9CFADBBCFAFB8CAA9B8C8A8B9C9A8 +BDCCA8BFCDAABDCCA9B9C8A5BFCDAAC4D1B0BCC9B1BDCCB2C3D2B7C6D3B5C8CDB09B997B1F1E0F +010000020204010007010304000300000100000101020403020403000000020202000000000000 +000000010101000000000000000000000000040303000000010000000000020000000000000000 +0101010002000001000100000000000F1612BDCAC4F8FFFDF9FCFDF6FDF8F8FEFAFFFFFFD9DAD9 +000000AEADABFFFFFFFCFDFCFCFCFCFEFEFDFBFBFBFEFFFEFEF8F5FFFFFFAEB4BC61838753757A +CEE1ECFCFFFF9EA8A9545C5CA5A9ACFFFFFFFBFBFDFCFAF9FEFEFCFCFCFAFCFCFAFFFFFDFFFFFB +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFBFBFBFBFBFBFBFBFBFDFEFEFDFDFEFEFDFCFCFCFA +F6F8F3F8F9F1FBFAF7FFFFFFCBD0D36D71799FA4B0F2F9FFDDF2FEC4E3EEB3DFE499CCCC659091 +4F7578DAE4E4FFFFFFFBFDFFF5F4F6FDFBFCFEFCFEF8F7F5FDFDFBFEFFFDFBFCFAFEFFFDFFFFFB +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFBFCFFFFFF909090080707E3E4E4FFFFFFF7FEF5FCFBFAFDFAF8FEFFF9 +F0FBFF8294B899A39CFEFFFFFBFFFCFBFDF9FEFCFBFFFBF9FEFEFFFDFEFFFEFEFFFCFCFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFC +FEFAFFFDFAFDFBFAF9F9FCF4FBFFF4FAFFF3E4F1D6CAD7BBBDCDACC0D1A8C4D9ABC6DEABC0D5AA +BDCDA5C4CFADC6D1B2C3D2B5C0D3B7C2D5B0C0D4AFBDD3ADBED6B0BCD4ADBDD7B0BDD3ACBDD2AC +BDD2ACBFD5ADBFD4ADBFD4ADBCD6B0BCD4AEB9D2ABBFD4AFBED1ADC0D3AEC4D2ADC2D2ACBECEA7 +C4D3ADC9D8B2C3D2ABC1D2B4BFD1B3C0D3B2C7D2B2C6CAAC8D8C6D1C190E000000000000000003 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000D1211D8E4E0FDFFFFF9FDFCF4FDF8F5FCF8FFFFFFD9D9D8000000B0B0AEFFFFFF +FBFDF9FBFEFAFAFBF9F8FAF7FBFCF9FBF8F3FFFFFFA1A9AE264547142E32BECDD4FDFFFE606867 +05090AA8ACADFFFFFFFDFDFFFDFDFCFEFEFCFAFAF8FDFDFBFFFFFDFFFFFBFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFEFEFEFEFEFEFBFBFBFDFCFDFDFBFBFCFFFEFCFFFEFDFFFCFAFCF8F5F7F2FAFCF5FFFFFF +D1D9D9667072929FA8E7F5FBE1EFFAC6E1F4B6DCE7A3D5D8659393608081B8CCD2FFFFFEFDFFFD +F4F8F6F6F8F7F8F9FAF3F3F5FCFAF8FCFBF9FCFBF9FEFCFAFFFFFDFFFFFBFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFBFCFFFFFF909090080707E3E4E4FFFFFFF7FEF5FCFBFAFDFAFAFCFEF6F4FCFF7F91B599A39A +FFFFFFFDFFFAFCFBFBFEFBFBFFFAFBFEFDFFFEFCFFFEFDFFFCFBFFFFFDFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFCFDFCFDF7FDFEFBFDFEFDFA +FFFFF7FBFCF1F1F4E7D2DFC1BECBACC5D5B1CDE5B3CDE7B0D6F2B6D8EBBBD8E8BADBE5BCDAE7C4 +D4EAC6CFECC7D6ECC5D5EAC4D5EDC6D4EFC5D1EDC4D2EFC6D5EFC5D5EEC4D5EEC5D4EEC3D4EEC3 +D5EFC5D1ECC4D3EEC6D5EFC7D6EDC6D4EAC4D7ECC4DAEBC2DBECC2D9EBBFDCEDC3D7E7BDC6D7AC +CBE1BCC8DEBBBACDAAC7D4B3C2C4A38986673735291D1C162220252B2A312425261F231D292E2C +2629292427262C2B2B2B2B2B2021203333322B2C2D2A292A2223232726262E2C2C29322E242C28 +252C28232D2726302D212B272824252321222223222021201F23221E2120232122131515383F3D +ECF6F3FAFFFFF7FCFCF5FDF9EFF9F4FDFFFFDCDCDB000000A7A9A6FFFFFFFAFEF8FAFFF9F6FBF4 +F5F8F2F6FBF5FCFDF7FFFFFF9CA7A9284846173233A5B3B8EBF0ED565B583B3E3B999A9DFFFFFF +FAFBFFFCFCF9FEFEFBFCFCFAFCFCF9FFFFFCFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFEFEFE +FBFBFBFDFCFDFCFCFBFBFFFDFBFFFEFBFFFDFAFDFAFAFDF8FFFFFFCBD2D3747D7E849193E5F5FC +DCF0F9D1E7F3B4D4E6A7D1DD659A9D4C7778B1C9CEFBFFFFF9F8F2F1F1EBF1F6F1F5FBFAF6FBFB +F1F6F7F5F1F0FDFAF8FEFEFBFEFBF9FFFDFCFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFFFFFF909090 +080707E3E4E4FFFFFFF7FEF5FCFBFAFDFAF9FEFFF8F0FBFF8294B8A09F9FFFFFFFFEFCFDFEFFF8 +FDFFF8FEFFF8FCFFFDFBFFFEFDFFFEFAFDFCFDFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFEFDFDFEF7F6FDF8FCFFFDFFF4FBF5EBFAE8D2E9CD +BBD6ACB7CEA2CBDDB0ADC2996E84645470567472567474597074576F745A6C745B69745B6A7258 +6B745A6D755C6C755C6973596C765C6A71586A71596A71586D735B6C725B6D745A6B74586C7358 +6B73586D745B6B765C68775E7374566F75576873576C7C6163755D61735A8D9E81B2CEA8AFD4A7 +BBDCB1B7CAAC91978380837186887A868D82888F8A646E6E637073728A897488877885867C8387 +73747A66626C9293928B888690888494908C8188884A5A5B5A6E73657D845C757E6D838A768386 +5B6065807C7D8C8A8B8A87888889898887878B8C8C8989847B7C76A7A7A1FAFEF8FDFFFCFBFFFA +EEF4EDFAFFF9FFFFFFDDDDDE000000A6A5A9FFFFFFFAFEFFF0FFFFECFEFFEEFFFFEDF9FDFAF9FD +FFFFFFA3AAB26D99A77A9CA8B5BABFF0EBEF928F95B1AFB39F9FA1FFFFFFFBFDFDFAFAFBFDFDFE +FEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFCFFFEFAFEFDFAFDFCF8FFFD +F9FEF8FDFEF9FDFCF8FFFEFAFFFFFED6DAD7616F6C9DAEAEDDF0F8D5F4FFBEE6ECB5E3E490CED5 +63939A537279C3CFD3FCFDFFFEFDFBFCFBF9F5FBF8EFFDF6F3FFF9F6FEF7FCFCFAF8F9FAFBFCFD +FFFFFFFDFEFEFDFEFEFDFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFCFFFFFF8E8F8F080808E3E4E4FFFFFF +F8FFF7FDFBFBFCF9F7FFFFF9F2FBFF8091B69C9C9DFFFFFFFEFEFCFEFEF9FEFFF9FEFFF8FBFFFD +FDFFFEFDFFFEFBFDFBFEFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFFFEFDFDFDFEF8FEF9F5FCF4F4F8F7FFF6E2F1DBC4D7B6C0D4ACC8D9B1C2D1AA +728460869A8090A9949DA38D9AA28D959E8A989F8D9EA5959CA4959DA3939EA595A0A6969FA695 +9CA3939FA696A0A394A0A394A0A494A0A394A0A394A0A4959CA6949EA6949CA6959DA6959CA695 +9CA695A0A3939EA4919AA3909CA894A3B09C65725E5B7150B6D1ACB5D5ACBCD9B2D6E6CCDADFCD +DEDECFE2E5D7E1E4DCDEE6E097A1A19AA5A7BDD0D0BFD0CFBDC9CAC2C7CBA8A9AF8C898FEAEDEC +E1DDDCE3DAD7E5E2E0D6E0DD54646588A6AB91B2B78FB0B6A3C1C7B4C8CB748083C8C6C5EBE9EA +E3E4E4DEDDDDE0E0E0E2E2E2E1E1DEDCDCD8EEEFEBFDFEF9FEFDFAFDFDF9F9F9F3FBFCF7FFFFFC +DEDEDF0000009F9FA0FFFFFFFCFBFFF6FCFEF4FFFEF6FFFFF7FEFFFFF7FAFFFFFF979CA377A5AE +80ACB0B2C3C2EDEAEB8C8990C7C7CAA4A4A6FFFFFFFBFBFBFDFDFDFEFEFDFEFEFEFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFDFFFEF9FCFBF9FDFDF6FCFAFCFFFAFDFCF7FFFEFB +FFFFFFD4D5D37579779DB1B2DFF5F9E1FCFFBFE6F1AFE0E8ACE2E3598A914B727BA8C0C8FFFFFF +FBFBFCF9F6F5FCFCFAFBFFFCF5FEF9F4FEF7F9FDF9FDFCFAFCFCFDFDFDFCFBFBFBFEFEFEFDFEFE +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFBFCFFFFFF8F8F8F080808E3E4E4FFFFFFF8FFF7FDFBFBFBF9F7 +FFFFF8F2FBFF8092B79C9C9EFFFFFFFEFEFEFEFDFBFEFEFAFEFFF9FBFFFEFDFFFEFDFFFEFBFDFC +FEFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +FCFDFCFDF8FFF8F5FEF6FBF9E6F4E1C3D3B5C1D2ACC3D3ABD1DDB98C97798A9883E5F5ECF9FFFF +F9FFFFF9FFFFFAFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFCFFFFFBFFFFFDFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFE5EFDF8E9988A7BE98BBD6AEBAD5B4CBE2C5EEFBE9FBFFF2FFFDF3FFFFF6FBFDF6 +FFFFFFA9B0B3B4BEC1E4F3F4E0EDEEDFE9ECEBEEF3C1C2C8A09EA4FFFFFFFFFFFFFFFEFDFFFFFF +EEFAF9627677A1CACE9CCBCFA3DADDB4DEE6CEEDF181969ADDDCDDFFFFFFFFFFFFFEFFFEFFFFFF +FFFFFFFEFFFFFEFFFEFFFFFFFEFCFCFFFCFDFDF7FAFFFDF7FCFAF5FFFFFBE0E0DF000000959996 +FFFFFFFEF9FBFDFCFBF7FAF8F8FCFBF9FFFDFEF1F5FFFFFF94999C74A8AC75AAA9A6C5BBEDECF0 +949599C0C0C29F9FA2FFFFFFFCFDFDFFFFFFFFFFFFFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFFFFFFFEFFFEF6F8F7EFF3F2F4FAF8FCFBF7FFFBF8FFFFFFD4D2D67A7E7F929B9D +D5F1F7DDFEFFC0E9F1AADDE9A3DAE368A6A856757DA1BAC3F6FCFFFBFCFFFBF8FAFDFCFAF9FAF7 +F7FBF7FAFFFCF6FCF8FBFFFAFEFFFDFDFDFDFEFEFEFDFDFDFDFDFDFEFEFEFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFBFCFFFFFF8E8E8E080808E3E4E4FFFFFFF8FFF7FDFBFBFBF9F7FFFFFAF2FBFF8091B6 +8E8D94FFFFFFFDFDFEFEFEFEFEFEFCFEFCFAFBFFFEFDFFFEFDFFFEFBFDFCFEFFFFFCFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFCFCFEFCFFFCFEFE +F1FFF4D8EACEBCCDABC3D0ADC9CFAFB1B9A36E7B70CCE4E4DAFEFFB6EAEDBFF4F8BCEFF5BFEFF7 +C1EEFBBEE9F8BBE3F3C1ECF9C7F2FCBCE8F6C3EDFBC2ECFBC4ECFBC3EDFBC5ECFBC1EAF9C9F1FE +C7F0FCC1E9F9C0EAFCC2EEFCC0F1FDBFEDF8C8EEFAC8EAF7CEE3EFE5F4FCF7FFFFEEF3EA89947F +8A997DCEE6BAB9D1ABC6DCBEEAF7E9F7FFF6F8FFF7F9F3F0F8F7F2FAFAF7FFFFFFA4AAAAB3B9BB +E8F3F6DAE4E6DFE7EAEEF1F7C4C6CA9999A0FFFFFFFFFBFFFFFDFCFEFFFFE7F5F56981828EC8CC +89C9CE8CD0D3A1DEE4C7F1F77B97A0D7DCDBFFFFFFF6FBFBFFFFFFFFFEFFFFFEFFFCFBFDF7F6FB +F9F9FDFCFAFDFCFBFEFDF9FFFBFEF9FCFCFBFFFFFFE1E1E1000100989C97FFFFFFFBFAFCFCFBFE +F7F9FBF5FFFEF1FDFBFEFAFBFFFFFF9DABAD70A9AE6CA6A6B1D0C8E8EDED9A9FA3BCC2C3969798 +FFFFFFFEFBFDFBFBFBFBFBFBFBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF +FEFFFFF8FBFAEFF3F2F6FEFAFCF8F6FFFFFFE0DEE0626A6E92A0A5DAEFF3DBFCFFBFE7F3ABDAE7 +9FD2DE679BA4306167B7C7CDF0F9FFFCFFFFFDF7FDFEFAFAFFFDFBFBFEFBFEFFFCFCFEFBFBFAF8 +FCFDFBFAFDF9FDFCFDFDFDFDFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFFFFFF +919191070707E3E4E4FFFFFFF7FEF5FCFBFAFDFBFAFCFEF6F0FCFF8193B897969BFFFFFFFDFDFF +FEFEFFFEFEFEFEFCFCFBFFFEFDFFFEFDFFFEFBFDFCFEFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCFDFFFEFFF8FEF7DBEFDAC8DFC0C8D9B8 +D1D9BAC1C3AC7E8779B2C6C6CEF9FF79B8C968B4C774C4D171C1D070BECD71C0D26CBACD6EBDD0 +76C3D674C2D570BED076C4D670BED174C0D374C2D474C0D373BED175C0D473BED272BDD071B5D3 +70BCD56FC0D575C0D175B8CA79B3C797BBC5D8F2F7F5FFFFACB9A5829472B5CD9FBAD5A5C3D9B2 +D6E7CEF4FEF4F9FFFEF6FCFAFFFCFBFFF9F9FCFAFAFFFFFFA5AAABB9BFBFFBFFFFE2E8ECE7EBF0 +ECEFF4C9CBD09C9EA3FFFFFFFFFBFEFEFBFCFEFFFFE8F6F663808189C8CF89CFD684D2D79EE2E9 +C6F3FD7994A1D7E0E0FFFFFFF6FCFDFBFCFEFFFFFFFFFFFFFFFDFFFFFFFFFEFFFFFCFFFFFAFFFF +FBFFFFF5FFFFF7FFFFFDFFFFE9E9E9030706969695FFFFFFF7FFFFF9FFFFFAFFFFF2FFFFF1FFFF +F5FFFFFFFFFF94ADB273B2BB74ADB2647E7C818B8C798283C0C8C79E9FA1FFFFFFFDFAFBFCFDFD +FDFDFDFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFEFEFEFCFEFDFCFDFBF8FCFB +F8FFFBFFFFFFCFD0CE6F737698A6ACDFF9FCDEFEFFBBDFE6A9D3DBA3D2DE6E9AA54C6F7996B2BC +F0F8FBFCFFFFFAF8FDFAF8FAFAFBFAF8FBF4F9FEFBFEFEFCFEFCFBFCF9F8FDFDFBFAFFFBF7F6F7 +FAFAFAFEFEFEFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFFFFFF919191070707E3E4E4 +FFFFFFF7FEF5FCFBFAFDFAFAFDFFF7F1FCFF8192B89999A0FFFFFFFEFDFFFEFEFFFEFEFDFEFCFE +FBFFFDFDFFFDFDFFFEFAFDFCFDFFFEFDFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFEFFFFFFFFFEFEFFFDFCFDFCFBFAEFF9ECCDE4CAB4CCABC1CFB3D6DEC59998868D958E +EDFFFF92C7DC3D8CA55BBCD560C1D154B7C855B9CC50B9CB52BBCE51BDD154BDD24AB4C748B4C6 +4AB5C853BED251BED252BCD051BCD150BCD04BB8CB50BBCF58C3D75AB6D855B8D850B9D152B8CB +57AFC55EACC5B4E2E9E0FFFFDFF6EE687A5BA6BE8EC5E6A7B5D09DCCE1BAEDFBE6F4FEF9FAFFFF +F8FDFEFFFDFFFFFAFCFFFDFDFFFFFFA6A7AABFC4C5FFFFFFF0F2F8F2F5FAF3F7FDCACDD09D9EA3 +FFFFFFFFF9FEFEFBFCF9FDFFE5F5F65C7B7D81BFC78AD2DB85D8DE98DFE6B1DFEC69839297A3A3 +B2BEC0A7B0B4AEAFB6B8B5BCB5B0B6B8B0BDBDBAC4C0C2CAB7C3C6ACBEC0ABC1C2A3BFBFA8BEC0 +AEBFC1B1B6B60203036F6D6EBED0D4B1BEC4BAC6CBBDCDD2B2C9CAA6C4C3A9CDCAB4CAC65E8184 +60A0AA6EA4AD001013000808495454B5BEBDA6AAABFFFFFFFEFAFCFDFDFCFDFBFDFBFBFDFCFCFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFEFDF5F6F5F9FDFDFFFFFFDAE0DA6D7370 +808A8AE6FAFFDAFAFEC4EBF29AC1C6ABD6DC79A7B0385E6994ABB6EDF6FFFFFFFFFCFDFFFBF8FE +FEFDFDFEFFFFF6FCF5F8FFFBFEFDFAFFFBF9FEF7F8FEFCF9F7FFF9FDFDFDFCFCFCFFFFFFFCFCFC +FDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFDFFFFFF919191070707E3E4E4FFFFFFF6FEF5FBFDFA +FEFCFAFDFEF7F1FCFF8293B89FA4A2FFFFFFFCFEFEFCFFFCFEFDFEFEFEFDFBFCF7FDFCF6FCFCF6 +FCFDF7FFFFF9FFFFF9FFFDFEFFFCFEFEFFFEFFFEFEFDFFFEFBFFFFFFFFFCFFFCFFFFFBFFFFFAFF +FDFEFFF8FFFAF3FAECCDE7C5C3E5B2B8C898CAD6B09FB3948A8C83CBEAEB9CDEEE1C85A031AAC2 +4DCADF53CBDC51B8CE5CC2DB49C0D647C6DE48C2DD41BDCD4EC3DA5BC6E55DC2DF5CC1D55CC4D0 +61BAC962B9C960B6C65BB8C254BAC051C2C454C1CE52C5D550C7D754C0CF68C1CD88D2DDD8FEFD +E4F6F48693889AA38ACEDDB8C3D9B1C9E2ACE1F6D0F7FEF1F9FAFDFBFAFCFBFAFCF9F2FCFAF9FB +FBFBF9F5FCF3AEBCB5C3D1D5F9FFFFEFF7FCFAFCFEFDFCFECAC5CE9E98ABFFFFFFFDFCFAFCF9F1 +FFFFFCE9F6F759838281CAD28DD6DD8FD9DFA2D7E3C4E3EFA5B4C09A9D9CA6ABA9A3A9A4A0A8A8 +98A0A5959CA895A0AB5061694E616D8DA6B177909C6F89967394A46B929F628E9A5E848D00090C +39444865979852848738636E2143533E7479297A74237C7D40929C3E889D7BB5CBA3D0E396BFCC +9FADB7C6D3DCBFCAD0A2A6A8FFFFFFF8F7F5FBFDF6FEFEF9FEFEFBFCFCFAFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FDFCFDFCFEFCFEFBFDFDFDFCF9FDFEF0FAF9F9FFFFCBD3D76F716BA7ABADEEF9FFCEECF6B3DEE7 +A0D7DA9EDDEA699DA73E63699AB1B0F5FFFBF9FFFBF6F8F0FAFDF4FFFFF9FBFDF6FBFDF6F8FCF5 +FDFCFDFEFEFEFCFBFDFCFDFEFFFFFFFFFEFFFDFCFDFFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFEFDFFFFFF919191070707E4E4E4FFFFFFFEFCF7FFF8F9FCF5F4FBFFF9F0FDFF +7B93B4989E9CFFFFFFFDFFFEFCFFFEFEFDFEFEFEFDFBFEF8FDFEF8FBFDF8FDFEF9FDFFF9FDFEF8 +FFFCFEFEFCFDFDFDFDFDFDFDFCFEFDF9FEFDFEFFFCFFFEFFFFFCFFFFFEFEFEFFFCFAFFFCE2ECD5 +C3DDB6B9D4A3C9D7A9CCD5B375876DBFC0C0D7F9FF51A1B50D8FA61DB3C629C8D545BFCE53BDD3 +58BDD64CC1D84BC3DC4DBEDA44B7CA60CBE365C5DF489EB6287E8F2B818A2D7E88327B89387887 +3C74843C728139717F3C6B773A747F3277802C72763E807D5F9E9792A6AD7F8E94313637787870 +8288766B78628295758FA08C939E9790949D9798A79B98AA9A96AD9798A4969C9A929F967B8A88 +AEC1C2E7F0FBE5EEF3E3EBEBF1F6F7C0C4C8999AA4FFFFFFFCFBFAFEFAF3FFFEFDE8F5F75E8689 +85CAD188CFD78BD3DCA8DDE8C8E9F5D1E1EFD1D5D3E3E8E4ECF1EAD9E2DCD3DADACED4D9D6E2ED +52616E304350ACC6D4ADCAD9A4C4D39ECBDB8EC0CE84BBCA83B4BE030F13444E537CC5CE5FA8B2 +2E6D7B003145378795319FA220969836A6B148ABC075C1DA95D0E6B1E3F6D1E2EBE5F5FDB8C3C8 +999EA1FFFFFFFCFBF9FCFDF8FCFEF8FCFCF9FCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFDFEFDFCFBFC +FDFDFCFBFDFEFFFFFFC9CDD1717378A1ABAAE9F7F8DAF6FEB9E2ECA0D6DC8DCBD069A5AC44757C +7B9DA2EFFFFFF7FFFBF8FDF6F7F9F4F8FAF5F8FBF5FBFDF8FCFDF8F9FAF5FDFDFDFEFEFEFCFDFC +FCFCFCFDFDFDFCFCFCF6F6F6FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +FFFFFF919191070707E4E4E4FFFFFFFCFDF7FEFAFBFDF9F8FCFFF8EFFDFF7B93B5949B98FFFFFF +FCFFFEFDFFFEFEFDFEFEFEFEFBFBF8FBFCFAFBFBF8FFFFFDFFFEFCFCFCFAFFFBFDFEFCFDFDFDFD +FDFCFDFCFEFDF9FEFDFEFFFEFFFFFFFFFDFFFEFEFFFDFFF9FEFFFAD5E5C3BED6A9BED4A1D1D5AF +929980768976E1FFFF99DCE916879D009AB20CB2C534DDED3EBACB52C3D753BDD64EC1D752C2DC +54B8D44EB7CB65C6DA56A7BD22697D589AA55899A0609BA7659AA66B99A67597A67B96A77A90A2 +7E959D78979C6B929359858264918A78A79D92A0AD848F9D838B9789939B8694957F928E83A194 +8BA29F76878E7281918490A48E9AB39195B28790A485939B89A09E829A99BBD8D8DBE8F6D5E7ED +CFE1E4E4F4F3B7C3C3949B9EFFFFFFFDFDFDFDFAF4FFFCFCE9F4F6597E827DC2CB89CFD78CD1DA +A2DCE5BEE1EDD4E6F2E2EAE4F7FDF8F6FFF4E3EBE0D2D9D4C7CACCC1CFD83948520616269DBDC8 +B8DDEBB7E1F195CFE08BCEDD94DFED88C6D206161C40495067B3BE569FA72D6C7800243A156A7D +31A8B525B5C039BFD055C7E475C9E98CC9E8A5D7F0C0D6DCE9FAFDC1CCD1979D9FFFFFFFFDFAF8 +FFFFFAFEFFF8FBFBF8FCFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFDFEFEFEFFFFFFFFFFE8E6E9 +6C6A6F9D9AA0E8FFFFE1FFFFB8E6F2A0DBE698D7DE87C8CC1C4E53749CA0DBF4F9FBFFFFF8FBFC +FBFBF6FCFDFBF9FBF9F6F8F5FCFEFBFBFDFAF8FAF7FDFDFDFEFEFEFDFDFDFBFBFBFCFCFCF9F9F9 +F8F8F8FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707 +E4E4E4FFFFFFFCFEF6FFFBFBFEFCFAFBFFF7EEFDFF7B93B4909593FFFFFFFCFFFEFDFFFEFEFEFE +FCFCFDFFFFFCFFFFFDFFFFFEFCFCFBFEFEFCFBFCFAFEF9FBFCFAFBFBFBFBFAFBFAF9FCFAF5F8F8 +F9FFF9FCFCFBFEFBFEFCFEF7E9F1E3D6E3CEC2D3AABCD2A3D2E2B4A6A98C7C8B7FD6F8F57DE2EA +189AA603A1B400A3BF13A9C647C9E847C2D750BED951BFD655C9DD4BB8CE5DB7D466C4D64498AB +1D67758AC7D4B7EEFAB4E9F7C1E2F3BFE6F4BEE8F4B7E7EFB9E7EDBFEDF3BDF9FBB9EDF0CAF4F7 +4C6B703D5960C2DEE7C5E5F0B2D5E5C8F0FFB3DFEFB7E1EEBFE7EEBAEAECC1EBEEB8DAE0193944 +779DA8C1EBF8C1D7F3BED8EFBBDAEABEE6EDB3E0E6B6E5E8BDDFEEB6DBE8B2DAE2C6E8EBAAC3C2 +92A4A0FFFFFFFAFAFCFDFCF7FFFCFEEAF4F75B7D8387C8D292D6DF8CD2DB9FDAE3B9DFE9C8DDE9 +E4EEECEDF8F0F3FFF4787E743D423B80837E687476657076AFBEC8728D9988B2BEB0E5EE8BCEDC +82D1DF76CDDD75BDC9091E24181A1D618486657D7C737D7C9CA5AF6B9AA91F768426B3CB37B6D3 +55C1E87EC9F199CEEFA8CDEAC0DCE1DAF1F6B7C9CCA1A7A8FFFFFFFFFCFCFDFDF6FBFEF7FCFDFA +FEFDFDFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFCFCFCFEFEFEFAFAFAF8F8F8FAFAFAF8FEFCFFFFFFCFC8CD696669B4B6BAF2F9FBCBFAFE +A7DEE994D8E682C6D465A2AA3A6F7195B0B0EAFEFFFDFFFFFBFBFEFAF8FAFEFEFCFCFFFBFDFFFC +FDFFFDFAFCFAFCFEFAFCFEFAFDFBFDFBFBFBFBFBFBFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFCFFF8 +FFFFFCFFFFFCF9FFF6EAFBFF7B98B8909795FFFFFFFDFFFFFCFFFDFEFEFEFCFCFCFFFFFFFFFFFF +FFFFFFFCFCFDFEFEFEFBFCFCFDF8F9FBF9FAF9FAF9FDFCFCFBFDFBF8FBFCF3FAF5F8FBF9FDFCF9 +FCFFF6EAF4E1CCDCC1C8D9B0C1D3A8CCD8AE78806BAAC6C3C6FDFF29A4B00192A104B1C600A5C2 +1EA7C853BBE04FC5DD50BAD652BDD84AC0D351BFD35EBBD562BACA3888945299A4A3E1EDA4DDEE +A1DCEFABD5E9A9D8E9A6DBEAA9DBE7ADDFEBADDBEA97C8CCA9D0D6C0D9E03747521A2B3896B1C0 +BAE5F3AADDEF9ED7EDA6E0F5B2E5F6A6D2DE9ECACEB5D9DD9AB8B90825252F5554A0CFCBB3DDF3 +B0DDEEA7D8E9A7DFEF9ED8E79EDAE6A6DEF09ED9EA9BD7E5B2E0EA96B7B88CA29FFFFFFFF7FBFD +FCFAF7FFFCFFE9F1F6607F888DCDD78ACDD594D9E3AAE4EEBBE3EDCAE2ECE1EDEFE9F5F3EFF9F3 +7D837C727371DDDDDEDEE5E1E1E5E6F1F8FDA5BEC45D878C96CED295D6E385D6E37AD7E47FC5D2 +081C203F3439ECF6F6E3E4DEEDE3D9FBF3F5BCD7E02671811FA1BE40B6DA58BFE374C2E390CCE5 +A5D4E7C4E2E5D8F3F7B6C9CB99A2A3FFFFFFFCF6F6FAFBF5FDFEF9FFFFFCFCFCFBFEFEFEFEFEFE +FEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFE +FCFCFCFDFDFDFBFAFAFCFFFFC9C8C77470739C9EA0F9FFFFE1F5F3A4DFE299DBE389D6E46FB3C1 +407076759496EEF5F5FDFFFFFAFAFEFCF8FCF9F9FAFAFCFDFCFFFDFDFFFEFCFFFDFCFEFDFCFEFD +FCFEFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFAFEF6FDFDFBFEFDFAF8FFF6 +E9FCFF7A99B8929896FFFFFFFFFFFFFCFFFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFCFCFCFEFEFE +FBFBFBFFFBFCFDFBFCFCFCFCFEFEFDFCFEFDFAFDFDF0F7F1F6F9F7FFFEFCF3F7EBDCE8D2BFD0B3 +C2D1A9C9D9AF949D798F9B8CD9FEFF89D0DA137D921198AE00AAC200A4C01FAAC954BDDE4FBED9 +56BCDC56C1DB44BCCE58C7DA5FBDD652A7B038868F89CED699D9E68FCDE293CFEC90CDE093D0E2 +97D1E2A2CBE2ABC3DF6172921E202B3E3947352A322E2C3560707968828C8BB3C7ABDCF595CDEB +9ED6F186B3C630546018363C2D41443746442A38316D877E6E8E879BD3DF95CBDA8CC6D98DCFE2 +8FD3E78ED5EA92DBEF8AD5E989D0E4A2DAE68EB3B8869C9EFFFFFFF7FBFCFAF9F7FFF8FEF3F9FE +7C9AA582C0C994D6E092D8E2A0DCE5B5DDE7CFEAF1DBE9F2E7F5F7F5FEFD757A768E8E8FFFFFFF +FFFFFFFFFFFFFFFFFFA9BDC0628C8F8BC5C3A1DEEA87D7E375D2DF84C7D20C1D23483132FFFFFF +FFFFFDFFFFF2FFFFFFC2E3E91C73841C9AB649BEDE4FBEDE6EC9E183D1DB9EE1E3BADADCC7E4E7 +AABFC0B5BDBDFDFCFBFAF3F3FEFFF8FBFEF8FCFCF9FDFDFBFEFEFEFEFEFEFCFCFCFDFDFDFCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFEFEFEF7F7F7FFFFFFFFFEFF +D9DCDB5655550100015E6867D2E9E6C4E6DF99DBD88AD6DA5EB0BD2C6D7D71969ED8E6E8FFFFFF +FCF7F8FEF7F9FFFBFCFDFFFFF9FFFFFCFFFCFBFFFDFBFFFCFEFFFFFCFFFEFCFFFEFFFEFEFEFEFE +FFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFFFFFF919191070707E4E4E4FFFFFFF8FEF4FBFBFAFAFCF8F8FFF8E9FCFF7998B8929796 +FFFFFFFDFFFEFCFFFEFEFEFEFEFCFCFCFFFFFCFFFFFCFFFFFEFFFFFDFFFFFBFEFCFFFFFFFEFFFF +FBFCFFFBFBFFFDFBFFFBF9FFF3F9F5FAFDF9FAFFF3D9E7C8BFD2A8BACF9DC6D0A5AAAC8870725C +DDFEF99AE2EA2796A60A99BC0BA4C500A3C103A5BD1DA7BD4AC3D856BDD84DBCD345BCCE4CC2D4 +4BBCD056C1D639919E4599A98ADAEC72BFD281D4E579D2E482CEE986CEEA80CBE882CFE28BC0D2 +48617B83798DF8F6FFF3F0F3F7F0F1FCFFFF90B1B158949488CCD47CCAD789C7D77CA1AE41515A +BABABCF8FDF8F0F3EAEBE6E1E9EFF16E89895D9CA38CD7E980D0E780CAD67ECED573D0DD75CDE1 +71CFE66CCEE484CCDA89B3B1A2B3A4FFFFFFFFF9F8FFF2F0FAF6F5F7FFFFC9E2E25781969CCCDD +9AD1DAA5D7DBBCDFE7CEE7F2E1ECE5F4FBF9F5FEFA7D83814E535097979796949488898DBBC7CD +73929983B3BBA1DDE699D8E489D3E578CADE7FC1CB0F2224211E187CAEA975999B90A0A4A9B9B9 +659DA51273881CAFC442B9D454B9D573CFE18DD5E2A2D5DFCEE7F4B3C8D48F99A4FFFFFFFFFBFF +FFFEFCFBF9FBFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFEFEFEFBFBFBFEFEFEFFFFFF616865000000000000 +0000005B7573A8E5DB86D4DA6DB0B938707C75979FE3EEF3FFFFFFF7F4F5F1F2F1F7FCFAFBFDFD +FEFAFBFFFBFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191 +070707E4E4E4FFFFFFFAFFF7FDFCFBFFFEFBFAFFF6EEFBFF7D96B8929796FFFFFFFCFDFCFDFFFE +FEFEFEFEFCFCFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFBFDFCFFFFFFFFFFFFFCFCFFFCFDFFFDFDFF +FCFBFDF4FDFAF4FEF2E8F6E0C2D4AFBCD3A0C6E0A6BEC49B808667ACBCABC0F5FC51B0C40F8AA7 +0397BB049FC200A4C102A0B720A8BD4CC2D453BDDC4FBDDB4ABCD74FC2D94AB9D05BC6DE1B7A8A +52AFC372CBE066C0D566C5DC63C6DA65C5DE69C3E062C1DC69CEE065B7C81B556AA39CAAFFFFFF +FFFFFFFFFFFFFFFFFFC5DEDB397E7957ABAC68CBD27CD4DC699CA43B5258CDCACBFFFFFFFFFFFE +FFFFFFFDFFFF87A49F377F8967B9D068BFDC6FC0D468C3D35DC5DC5DC5DD5BC4DD65C6DF71B2C1 +7B9898D2D4CAFFFFFFFFFCF8FFF3F0FEF9FAFBFFFFE0F4F54A72848CB7C49CCED7AFDBE1B6D9E0 +C9E3EBDAE4E3EFFBFBF4FEFEB6BABE83858997969A979A9C393F443A474D809FA893C1CAA7E0EA +87C8D887D0E27ED0E585C6D6182C332321214B8A844173782D4E561E46492B75822093AE1EBCD4 +3DBCDA57C4E06DC8DB89D2DEA7D8E2CCE5EE99ADB7939BA5FFFFFFFBF8FCFDFAF8FBFBFDFEFEFE +FEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFFFFFFFEFEFEF7F7F7FFFFFFF1F1F11D20200000000205010000001A39368ECFC5 +6AAFB4316E7564949FDEF5FDFCFFFFFFF6FAFDFDFCF9FBFAF7FBFBF8FBF9FDFAFAFFFBFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFF +F9FFF7FDFCFBFEFEFBFAFFF7EEFBFF7D96B8929797FFFFFFFDFFFEFCFFFEFEFEFEFEFCFCFEFFFF +FEFFFFFEFFFFFEFFFFFEFFFFFBFDFCFFFFFFFFFFFFFCFCFDFEFEFEFFFFFFFCFDFDF4FFF9EAFCE9 +D1E6C5B6D09EC7E1A7CFEAAB7F845E9AAC90D5FCF65EB0C7158DAF028EBB019DC500A2C400A5BF +019DB023A8BC4EC0D351BDDE51BFDE4EBEDA56C6E251C0DB5ECBE70972864BB4CB55BCD458C5DE +4EBED84DC0DB45C2DA4BBFDB45BDD744C8D845BBCA0062736A7889C2D7DFC1CECDCDCDD0E1EDF2 +79999D3E949B52C3CA3FC9D048C8D04799A4285463A5B1B5D2E5E3D2DED9DCE1DECFE4E5598888 +46A6B352BAD45DCBED53BFD74CC0D93EC1E03FC5DC4ECCE45BCAE05DA0AE6B8484F5F3EBFCFEF9 +FCF6F3FEF8F7FBF4F3F4FAFBEEFFFF8EAAB8789BA4A1C8CEC0E5E8C4E2E6CFE7ECE5F2F4F3FDFF +EEF7FDF9FDFEE4E6EEEBEBF2EAEFF2565E6429383FB6D3DEB2DDE8ABE1E98ECFE28DD4E887D3EA +8AC6DD192E37252B3178D0C86DBDC12B6E77003B3F228A971DACC70FB2CA38BCDA5FC9E86FC7DA +92D8E1B2E0E89AB1B7788890C7CFD7FFFFFFFBF8FCF7F4F6FBFDFCFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFBFBFBFCFCFCFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF +FEFEFEFCFCFCFFFFFFDCDCDC0A0A090000000206020000000C2724508E84427D80588A91C9EBEF +F8FFFFF7EFF7FCEAF3FFFFFEFCFEFEF1F8F5F5F8F7F9F9F9FFFBFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFF9FFF7FDFCFBFEFEFB +FAFFF7EEFBFF7D96B8919795FFFFFFFDFFFFFCFFFCFEFDFEFEFDFEFAFCFBFAFCFBFAFCFBFEFFFF +FEFFFFFBFDFCFFFDFFFEFEFFFCFCFCFEFEFBFDFEF8FDFDF9EEFDECDAEFD1BAD6AABAD6A0C5DBA3 +9FB079778B70CBF3EAA9F4FE0A87A70A9CC8009CCE03A2C902A6C300A0B6019BB020A7BC49C2DA +53BFE24BB9D952BFDE51BEDB52C0DC51C1DC0B7B9135A8C13DB9D23FC3DE36BCDA34BBD929BED6 +31BFDB2FBED82CC3D632BFCE1C96A60549650D55680B465500263A325F7644849B2EA5C02EBDD7 +1FC6E326C7E526A6C2086883104C6214516011424F0B2F4340788D2F849648CDD734C3DA25B8D5 +32BDD22EBCD124BFDA22C4D234CAD740BFCC46929683A6A1FCFFF7FCFCF6FCF8F1FFF9F2FCFCF8 +F1F3F4F7FFFFC8D7DF788A8E82989BADC5C6CAE3E3C5DCDCD7E2E6E5EAEAE1E8EDE8EBECE5E6EC +E1DFE8D9DFE37A8287828D94BED2DAB2D4D9A4CDD293CAD592C9D784BACC86B3C71C2B33262D36 +71D1C962BFBE2F8587045B5B36A3A920ACBC1C9FB44AB0CA68B3D07CBECD8DC2C78BB2B1788A8F +A1B0B5FAFEFFF9F7FFFBFBFCFCF9FBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFBFBFB +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFF8F8F8F9F9F9FFFFFF +D1D1D10F0D0D00000000020001020215272833605D598184C8E7EAF4FFFFF9FBFDFEF2FAFFF4FC +FCFFFCF5FBF9F1FCF8F5FAF9FDFEFEFFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFF9FFF7FDFCFBFEFEFBFAFFF7EEFBFF7D96B8 +919795FFFFFFFDFFFFFCFFFCFEFEFEFEFCFDFCFEFDFCFEFDFCFEFDFEFFFFFEFFFEFBFEFCFCFBFF +FDFBFFFBFBFCFEFEFAFFFFF9FFFEF7E5F2DACBDEBCB1CF9EC1DDA9B3C296757750C1E9D9B7FCFB +42B1C00092B3009DC50AA9D2009EBE00A1BB00A1B3019AAE1AA8C142C3E44EC0DA4DBBD853BDDA +4BB7D048B8CE53C7DC0E7E931690A629ADC215A3BD1CADC919AAC913B1C619ABC51AA8C522B4CA +25AFBF2FA5B657BBD7389DB155AABA1C556C053A543B8EA740B4D926AAD018AFDA1BB4DA32BAD9 +3CB5CF42A4B74BA7B75098A90028411258733EA1B927B2BF1FAEC81CABC930B2C727AABD1DACC2 +21B6C321A8B417858D468487C7DFDEFFFEFCFEFFF8FEFDF4FFFEF5FEF9F5FCFBFBF5F6FCF7FDFE +D7E0E07A84844D5D5D6A7E7C677F7C6C7677727C7D828B8C7A7F8173757977767B797C7D66696B +6F73786A787A5C7476527172527A7D4C72784D7079536E7A141D2410141D407D7A29656D376E77 +3C6D6B2B6C6D1B727A1A727D306C803F667C49707A476B6D5A7672B3C2C4F5FEFFF8FCFEFAF6FD +FEFCFFFDFDFEFDFDFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFBFBFBFEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F4FAFAFAFFFFFFE0E0E0191617000000 +030402030000000000587074DFFBFFF1FFFFF7FDFCFDFAFAFCF8F9FFF9FEF7FCFBF3FAF8F1FCF9 +F2FBF8F8FAF9FEFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF +919191070707E4E4E4FFFFFFF9FFF7FDFCFBFEFEFBFAFFF6EEFBFF7D96B8919895FFFFFFFDFFFF +FCFFFCFEFEFEFEFCFCFCFFFFFCFFFEFCFFFEFDFFFFFDFFFEFAFEFCF9F8FFFCFCFFFBFBFBFFFEF9 +FFFFF6FAFAF1D6DEC3BCCEA7BFDCA8C1D6A58D936FAEA28CCBFFFB74CACE1494A9009DBC05A9CA +09A5C405A2BC01A0B604A6B5019EAF19ACC83FC7EF4ABDD44DBCD454BBD452BCD24CBDD058CEE0 +0D7F921490A423AEC110A6BC11A9C40DA5C10BAEC21CAEC818A5C414A4BD169AAF2090A538ADC1 +2799A6419FAA11546511556C348CA02790B01F90B7158FBD149BC21297B4179AA92499A4319DA4 +32838E003348236A83369BB11497AB159ABC1095B82192A92796A91890A423A1B013818F106772 +84B0B7F2FAFDFFF5F7FEFEF4FEFBF0FFFDF3FFFCF6FEFDFCFCF9FFFFFFFDFEFDFEEDF0EFD3DEDE +C1D4D1B5CBC8B9C7C2C2D0CCC3CDC9C7CDCBC5C8C8C7C6C7C9C9C6CAC9C7D0CECFC1CACBBBCCCA +B4CBCAB2D2CCB5D1CFB8CCD2C4D3DA34373B292B2ED9EAF3B7C9DABFCCDAC9CCCFBEC9CAB1D0D6 +A2D8DFB5CEDFC3CCE0BDD0D9C0D9D8DEEFECF0FDFDF8FFFFFCFEFDFDF9FEFDFDFFFCFCFFFEFEFC +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDFAFAFAFAFAFAFFFFFFEEEEEE515051000000000000020000524753 +D3DBE5F7FFFFF2FCFCFAFBF8FDFBF9FDFCFCF8FDFFF9FDFDF6FEFBF4FFFCF7FDFDF7FBF9FEFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4 +FFFFFFFAFEF6FCFCFBFEFEFAFAFFF7EEFBFF7D96B98F9593FFFFFFFBFEFDFDFFFEFEFEFEFCFCFC +FFFFFFFFFFFFFFFFFFFDFDFDFDFCFCFFFFFDFDF9FDFEFEFFFDFFFEF6FDF4F2FBE8E2EDD1BDC7AC +C6CFADD4DDB995AB8A799986D8FBF272CCD31C97A30096AE009FCA029CCA03A1CC06A0BD04A3C1 +03A7BF029FB522A9C54CC4E450C4D64CC0D34DBED149B4C95DC6D953BACC2B92A22E9DB331AFC6 +37BFD832BFD529B9CD20B8D531B4D335A0BC25718B2A6E7F3678850045411B60552165531F5F51 +195553386F782C71802B6984316B912D6B902871872076812872752E6C6F386B6E22535434686B +346C6F226D80307887296D7A296A732C69702F6A6E24646B48808197C3C0FDFFFFFBFDFFFDFCFF +FBFFFEFCFEFEFBFBFBFCFDFCFCFAFCFCF8F9F5FBF8F6FCFAF9FFFDFFFFFFFFFFFFFDFFFFFFFFFF +FDFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFFBF8FFFF +FEFFFFFFFFFF515354242326FFFFFFFFFEFFFFFBFFFFF7FDFFFBFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFEFFFFFBFCFFF7FAF9FAFBFBFBFEFDFDFFFFFFFEFEFEFBFBFBFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFBFBFBFDFDFDFBFBFBFEFEFEFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFECCCDCC4242420B0B0B565657EBECEBFFFFFFF1F9FCF6FEFD +F6FBFBFDFFFDFFFEFBFEFCF7F9FFFEFAFFFEFAFFFEFAFFFEF9FFFCFAFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFBFEFDFFFBF9 +FEFEF5FDFFFEEBFBFF7B96AE929997FFFFFFFDFEFEFCFFFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFF +FBFBFBFAFAFAFBFBFBFCFBFEFDFEFFFBFEFCF4FCEFEAF6DFC6D5B6C7D0B2CDD5B5B4C09F768E78 +ACD0C5D9FFFF329BB1088FA5009FBB01A0C7029CC3009CBF049EBE00A0BD00A1B9079BB325A4C0 +4FBEDE51C1D34EBBCF51BBCE4FB7C95CC1D351B5C64BA6B9298CA246B5D045C1D93FBED446CADE +50C7D852B4C8357E919AC4CFD0F1F589A5A86A907AA9CEB5A2C7A8A6CAAFB4D5C6D2EFEBDDF1F7 +DAE9F6D9E6F9D8EAFAD2ECF5CEF0F2C9F2F4CEEDF0D7EEF0DEEDEFDEF1F2D6F0F3C4EDF6CAF0F7 +CFF0F7D4F2F7D4F0F4D1ECEFD4EFF3DDF4F6EBFEFAF8FDFAFEFCFCFFFCFFF9FDFCFBFEFDFCFCFC +FDFDFCFDFCFDFDF9FAFAFEFDF9FDFCF9FDFCF9FDFCF9FCFCF6FAFAFCFDFCFAFDFBFAFDFBFCFEFD +FCFEFDFBFEFDFDFDFAFDFDFBFDFDFBFDFDFBFDFDFBFEFDFBF3FEF6F5FEF7F8FFF9FFFFFF535453 +1B1719FFFFFFF8FDFFFBF6FCFBF5F9FCF7F8FBF9F9F9F7FCF8F8FBF7F7F7FCFBF7FCFDF5FCFEF4 +FBFAFBFDFDFDFEFEFDFDFDFDFEFEFEFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFBFBFB +FDFDFDFBFBFBFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFDFDFDFDFDFD +F8F8F8FEFEFEFCFCFCD2D2D2B3B3B3DADADAFFFFFFFBFAF9F2F8FCFBFFFFF4F8F7F7FAF7FDFCFB +FFFDF9FCFEFEFCFEFEFCFEFEFBFEFEFBFDFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFDFFFFFF919191070707E4E4E4FFFFFFFAFEFDFEFCFAFEFEF6FAFFFBEAFCFF +7C98B0959C99FFFFFFFDFFFEFCFFFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFDFDFDFCFCFCFFFFFE +FEFDFEFDFFFEFBFFFBEEFBE6D6E8C7BCD1A7D1D7B7D1D8BC86947D8AAAA2CEFFFF88CCD50687AE +0297B902A8C603A1C1089FC203A0BE009CBE009DBA0099B40B96B039ADC861C1E161C8D859BED0 +5EC0D363C3D367C4D46CC8D96CB7CC1E728B66C3DF5AC0D95CC5DC54BDD37CD1E25194A15C868F +F7FFFFDBDBD97A7472ADB897CDD8B5BECBA5CBD7B6E5F2DAF8FFF2FFF9FAFFFAFEFFF7FFFFFAFF +FFFDFEFFFEFAF4FFFFFBFFFFFDFBFBFFFFFEFFFFFEFEFFFFF9FFFFFBFFFFFDFEFFFDFEFCFFFFFC +FFFFFBFEFFFCFEFFFAFDFFF5F9F8EFFFFEF8FEFBFCF8FCFBFDFFFEFEFDFEFCFBFBFCFBFCFDF8F9 +FAFDFBF9FBFBF9FCFBF8FBFAF8FBFAF9FCFBFDFCFDFDFCFCFDFCFCFDFCFCFDFCFCFDFCFDFCFCFA +FCFCFAFCFCFAFCFCFAFCFCFAFCFDFAFBFFF6FBFFF6FDFFF8FFFFFD5553511F1B18FFFFFFF2FDFD +F7FCFDF6F7F7F7F8F5F6F7F4FDFBFBFCF7F7F9F5F3FCFBF3FEFAF2FEFBF0FDFEFFFEFEFEFEFEFE +FCFCFCFFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFEFEFEFEFEFEFEFEFEFBFBFBFDFDFDFBFBFBFEFEFE +FEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFD +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEF7F7F7F9F9F9FAFAFAFCFCFC +FEFEFEFFFFFFFEFEFEFEFEFEFBFBFAF8FBFEFAFAFCF7F7F6FDFEFEFFFFFDFDFDF8FFFCFEFFFCFE +FFFCFEFEFDFEFEFBFCFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FFFFFF919191070707E4E4E4FFFFFFFAFEFDFEFCFAFEFEF6F9FEFBEAFCFF7C98B1969D9AFFFFFF +FCFFFEFDFFFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFCFCF9FCFEFBF1FBF0 +D9ECCFBBD7ABBCDBA6C6D1AB9CA78A80958AC5F9FC82D8E7208EA60096C303A9CA00A7C2039DBB +069BBA029EBD009BC2019CBE0099B529A8C066C7E291D8F77BD3E37CD4E683D8E880CFE085D2E2 +86D3E28DD3E83E859C66B2CA8BD4EF84C9E492D3EB77AFCA5F869ACCE1E9EEF1EE7C7B72A2A297 +E3EECCC2D0B0C7D0B6EEF6E1F4F9EEF8FBF3FDF7F7FBF8F8F9F9FAFAF8FBF9F9F8FBF8F8F9FAFC +FDFFF8FBFDF2FDFCF1FCFDF4FBFCF5FFFEF6FEFEF5FFFDF6FBFAEFFCF9EFFFFCF2F2F3E9F8F8ED +FCFFF0F2F9EBF5FFF8F4FEF9F9FDFCFDFDFEFEFDFDFEFEFEFDFBFCFDFAFBFFFFFFFDFFFEFEFFFF +FAFBFAFAFDFCFAFCFAFDFCFDFCFCFDFCFCFDFCFCFDFCFCFDFCFCFDFCFDF9FDFDFBFBFBF9FEFEFC +FEFEFCFDFFFBFEFEF4FEFEF6FEFCF7FFFFFF6362600D0B08FFFFFFF0F9F8F2FDFAF2FCF6F7FDF8 +F7FDF5FEFCF6FFFBF7FFFCF7FEFBF6FDFAF3FFFDF7FCFBFCFBFBFDFBFBFBFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFBFBFBFDFDFDFDFDFDFCFCFCFFFFFFFFFFFFFCFCFC +FDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFEFEFEFDFDFDFFFFFFFDFDFDF6F6F6FAFAFAFDFDFDFBFBFB +FCFCFCFAFBF9FCF9FEFCF9FDFCFCFCF9F9F8FDFCFBFCFFF7FFFCFEFEFCFDFFFDFEFDFAFBFCFAFB +FFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFD +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF909090070707 +E4E4E4FFFFFFFAFEFDFEFCFAFEFEF6FAFDFBEAFDFF7C98B1949997FFFFFFFBFEFDFDFFFEFEFEFE +FCFCFCFFFFFFFFFFFFFFFFFFFDFDFDFCFCFCFBFBFAFDFDFAF8FDF5E8F3E4C8DFBEB4D5A3BCE1A3 +AEBF95788B70B7D5D0B5F8FF33A3C00592B402A0C500A7BF00A2B40197B00697BA04A0C9009BC5 +009BBE069BB843B7D07BCEE996CDED7ED0DF80D1E185D0E07EC5D58CD1DF87CAD985D2E063ACBF +4589A299D1EBA0CDE8AED3EC6881A3A0B4C4FFFFFF96A08D8C9B80C2D6B9CAE2BFBBCFAFCCDAC4 +F9FFF3FBFCF7FBF9F8F9FEFDF6FFFDF3FFFBF2FEFAF6FDFCFAFBFCF9FCFEF9FDFAF9FDF5F9FEF2 +F7FEF5F9FEF9FAFBF2FDFFF7FBFEF6F6F8F2F9FBF5FDFEF9FAFEFAF8FEF7F9FFF4EFF7EDF5FDF6 +F6FDFCFAFEFCFCFDFDFCFDFCFCFCFCFDFAFBFDF9FAFCFBFBFDFDFDFDFCFCFCFCFCFCFCFCFCFCFC +FEFAFCFDFBFDFDFBFDFDFBFDFDFBFDFEFAFDFBFDF9FDFDFBFBFBF9FEFEFCFEFEFCFDFDFBFEFEF8 +FFFCF8FDFBF8FFFFFF6263610A0A0CFFFFFFF4F8F7F2FCF7F3FDF6F8FDF6FBFCF6FBFCF7FCFCF8 +FCFCF8FBFBF9FAFBF8FDFDFCFBFBFBFDFDFDFDFDFDFCFCFCFFFFFFFFFFFFFDFDFDFDFDFDFDFDFD +FDFDFDFEFEFEFEFEFEFBFBFBFDFDFDFDFDFDFCFCFCFFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFDFDFDFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFBFBFBF9F9F9FDFDFDF5F4F4FBF3FB +FFFBFEFCF8FAFCFBFCFDFDFBFAFCF6FAFDFEFBFDFCFBFDFCFAFDFDFAFCFBFDFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFE +FEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFF909090070707E4E4E4FFFFFFFAFEFD +FEFCFAFEFEF6FAFEFBEAFDFF7C98B1868C8BFEFFFFFCFFFFFDFFFEFEFEFEFCFDFEFFFFFFFFFFFF +FFFFFFFCFBFDFBFCFCF9F9F9FEFFF8F3F8F1D5E3D1B4CFABB8DBA4B4DF99879D6EA1B89CEAFFFF +63B2CA108EB201A6CD00A2BD00A4B400A0A90998B00A99C0039FD200A0CC01A0C612A8C663D2EC +86D3ED8FBEDD84CFDC86CEDE85CAD885C7D68FCDDD88C5D279CCD679C8D5387A9097C5DFBDDBF8 +8DA1C082849EFBFAFFDBD9CD7B855EACC393BCDFABB4D2A4BDD5ADE7F8DCFCFDF1FFF8F4FFF4F3 +FDFAF6FBFCF5F7FDF4F9FEF5FDFCF6FFF8F7FFFAFFFBF9FAFCFDF9F8FCF6FAFCF8FCFCFBF6F4F1 +FFFFFDFBFBF8FCFCFDFBFBFDFAFCFDFAFCFFFAFCFEFBFCFAFEFCF8FEFAFAFEFAFEFBFFFCFBFFFD +FAFBFAFBFBFBFCF9FAFBF7F8F7F8F7FAFAFAFCFCFCFEFEFEFEFEFEFEFEFEFDFAFBFEFAFBFEFAFB +FEFAFBFEFAFBFFFAFDFBFBF8FBFBF9FBFBF9FEFEFCFEFEFAFEFDFBFDFEFAFCFFFDFAFDFEFFFFFF +67696B000000FFFFFFFFFFFFFFFFFFFAFFFCFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFEFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFDFFFFFDFFFAF8F9 +FFFFFDFFFFFEFEFFFFFEFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF949494070707E4E4E4FFFFFFF9FEFDFEFCF9FEFEF5F9FEFB +EBFDFF7C99B28E928EFFFFFFFCFBFAFDFBF9FEFBF9FEFBF9F9FEFCFCFCF9FEFBF7FFFDF9FCFCFB +FBFFFFFDF6F8E7E8D9C4D0AEC2D6A2C9E3AC9EB883859479D2F9F594DEF90B87A40495AD06A6C1 +00A6B800A4BE04A6C403A0C3019EC6039EC900A0C20EA2C045BED381D9EB8ED4EA85C1DD84CFDC +84D2DD7ED0DB86D5E37ECCDB87D1E37DCAD38BD6E65DA1B96E9EB4A7C3D36C7C84DFE1D6ECF3DE +798966A8BB96C0D8B7B6CDB1CAD8CCDEE9DDFEFFFBFCFAF1FDF4EDFFF8F2FEFDFDFDFDFCFDFBFC +FDFBFCFCFDFCFCFDFCFCFDFDF8F8F8FCFCFDFDFBFCFDFDFDFDFDFDFCFCFEFBFCFCFCFCFCFBFBFB +F6F6F6FCFAFAFDFDFEFDFCFCFCFDFDFDFDFDFCFCFDFCFCFBFEFEFEFEFDFEFEFEFEFBFBFBFDFDFD +FDFDFDFDFDFDFDFDFDFBFBFBFBFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFBFBFBFBFBFDFBFBFBFEFEFEFEFCFDFCFBFBFFFFFF636362000000E3E3E3 +CFCFCFCFCFCFD0CFD0CFCFD0CFCFD0CFCFCFCFCFCFCFCFCFCFCFCFD0CFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFD0CFCFD0CFCFD0D0D0D0D0CFCFD0CFCFD0D0CFCF +D0CFCFD0CFCFCFCFCFD0CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFD8D8D87C7C7C020202DFDFDFFFFFFFFEFFFBFDFCFFFFFEFDFBFDF7F0FCFF7F95B79DA29D +FFFFFFFDFCFAFCFCFAFEFDFBFFFBF9F9FEFDFCFCFAFEF9F8FEFDFCF9F9F5F5FAF5F2F4EDC6CDB9 +BDCBA7CEE2B4A6BF906C8659C8E0D4B7EDFB3FA0C20392B006A6C3009EC304A3BA07A3BA08A1BF +0EA0C20C9AC10A98C20299B22FB9CB67DAE484D8E183C8D486C1D388D1E48AD5E77FCBDA81CEDB +7CCBD681D0DA79CAD787D4E58AC9E2436B83677D8FAAB3BEFFFFFE9CA98F859470C8DBB3BFD4B1 +B5C9ACDFE5E0F4FAF4FEFFFBFBFAF6FDF8F5FEFAF9FEFDFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FFFFFFFEFEFEFFFFFFFDFDFDFDFDFDFDFDFDFFFFFEFEFEFEFEFEFEFEFEFEFDFDFDFEFEFEFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD +FDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFDFDFDFDFDFDFEFEFEFDFDFDFDFDFDFFFFFFB1B1B1000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +6E6E6EF4F4F4FBFBFAFEFFFCFDFBFEFEFBF8FEFFFAF0FCFF7B92B3A2A7A2FFFFFFFEFEFCFDFCFA +FEFDFBFFFCF9F9FDFDFBFAFDFAF6F7FFFDFBF5F7EFF7FCEED2E2CEBCCCB0C2D6B1C4DAB36C8465 +99B397D7FFFF64B7CF098FB000A1BB01AAC500A8D101A1BD01A0BD009CBD03A2C6059DC40498C4 +26A7BE54C9DC77DEE77ECBD37CBFCB8FC9DC8CD2EC87D0E77DC6D87ECBD685D2DB7CCFD27CD3E4 +80CCE191C8E17694AA8A97A5FCFEFFC1D2B5889876ADBF96C8DAB1CADCB9CCDDC0EEEDF0F9F9FB +FDFDFEFBFCFCF9F9FBFDFDFDFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF +FEFEFEFEFEFEFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDFFFFFFFDFDFDFFFFFFFEFEFEFEFEFEFEFEFE +FEFEFEFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE +FFFFFFFEFEFEFDFDFDFDFDFDFFFFFFD7D7D7CDCDCDCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF +CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC9C9C9FFFFFFFFFFFFF9F9F8 +FEFFFCFCFAFDFCF9F6FDFFF9F0FCFF7C93B4A7ABA8FFFFFFFDFDFBFAFAF8FBFAF8FEFAF7FBFFFF +FDFDFFFDF7FEFBF6F3FBFEEFE7EED6B2CEA8BCD4ACC4DAB38FA98E84A495DCFEF976D1D82094AA +0094B204B0C600A1B600A3C500A1C200A6C600A7C800A1C5009CC5009BC455B5DF76D1F17DCEE7 +86CCE48FCDEC90CEEF83C9E386C8E08ECDE385CADA7FCED57CD6D57FD4E881C4D89AC4D9D3E6F1 +F5FDFFECEEED7E956F9DB48BD4E8BDB9CAA1C5D1B5E0E9D5FBF4FBFFFCFEFDFDFFFAFAFDF7FAFC +FCFEFFFEFCFCFCFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFEFAFDF9FCFEF9F8 +FEFFFBF0FCFF7C92B3A4A8A5FFFFFEFBFBF9FCFCFAFDFCFAFFFCF9F9FCFFFCFCFFFCF8FFFEFDFA +F1F4E0C6CEADB8D9A8C8E0B4AFC79E5C7A64BFE8E3C0F1F824848810778F03779901859A0D92A6 +0F91AE0791AF0D9EB9089CB60798B20B91AE25A4C57ED1F588D7F481CBE085C9DF8CD0EB88CAEC +7EC3D77CBBD090CAE18ED1E179C9D477D5DA7ECDE085BFD2A8C9D6F9FFFFF4FCF49DA797729169 +BDD8AEC6DBB0C5D2B1D5DDCAF6F8F1FEFDFDFEFEFEFDFCFCFBFBFCFBFCFDFDFEFEFDFDFDFEFEFE +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFDFDFD +FDFDFDFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFEFAFDF9FCFEF9F8FEFFFBF0FCFF7C93B4 +B0B4B1FFFFFFFDFDFBFDFEFAFFFCFBFFFEFBF7FBFDFDFBFFFFFAFFFFFDFADEE0CAB8C39CC2DEA9 +C3DBAA70865EA2C3B1B2E1E38FC9DA74CCCF78C6E178C1E779C5E176CCE371CCE872CBE470D2E5 +6CD4E567CFDC77CFE47ECDE481D1E884D1E187D2D885CDD485D0DC7FCDE189D0DC8CC9DA91CADC +8CCBE07ECFDD80DEE97BC7D894C8D7CEE7EEFFFFFFC4CDBD79886FA9CAA1C0DDB3BBD2A8C9D5B8 +F0F4E7FFFEFFF9FFF9FBFDF7FDFFF9FDFEF9FFFFF9FFFDF9FCFEFEFDFCFCFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFFFFFFFCFCFCFDFDFDFCFCFC +FFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFD +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC +FDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFEFBFEF9FCF9FCFEF9F7FEFFFBF0FCFF7C93B4AFB9A9FFFFFEFBFBFB +FEFEFFFBFFFFF3FEFAF8FFF6FCFFFCFCFBFDE4E4DEC9CCB9CCD6B7BDDD9A929D73909A88D8FFFF +96DCE281D1DC8AD8D28ED9D58FD6D78FCFD893CFDA90C8D58FD6D98CCDD292CBD397CFD790CCD3 +8ECDD38DC8D587CFD985CFDA92CCDF8DC9DB87D0DF8ACAE587CBE189D4E560ADBD64ACC280C4DE +89BECFC6E3F0F9FFFFC9DEC56F8763A0B28BD2EBC4BBD1B0BECDB4E5ECDDF7F7F0FDFBF6FEFDFC +FCFCFDFCFCFDFBFBFCFBFBFCFCFBFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFEFEFFF9FEFCFBFFFAF7FDFFF7EFFBFF7B91AEAAB5A7FEFFFCFEFDFDFDFEFFFBFFFEF5FFF8 +F4FEF5F9FDF7EDF1E8D4DAC9BFCDAFC6DCB3A7B6877F8D72CAEADFADF1F478C5CF92DBEB7485A3 +69839F415970A3D4E69BD0E0A4DFEE92D5E19CD9E9A6DFF0A0D6E9A3DEEE99D4E5AAE3ED99DFE4 +87CED59BD9E499DCE681D3DAA4D4E79DD6E790D3E165A9B874B1C68ECAE1A4D1DEE5F8FFF1F9F6 +8C9F87859A7AC5D3B0C4DDB5B7CAA9CFDEC3FCFFF4FAFAF7FEFBFEFBFBFBFBFBFBFBFBFBFDFDFD +FDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF9FDFBFB +FFFAF7FDFFF7EFFCFF7B92AEA4AEA3FFFFFFFBFAFDFEFEFFFBFFFDF6FFF7F6FFF5F5FCF0D5DEC9 +C7D6B5C2DCB1B6D8A687836FA6BEB6D0FFFF4DB4BF61B9C8B4F1FF000013738DA45B8496A3DCE5 +7BC3C516666285B9C75E8795395F6E4F6F815D7A8A58849431515D447B8094D0D44D838D387279 +99E2E65B788467949D9AD4DE80BDCA96CADD9CC5DDD2F2F5F5FFFFCCCFC8718268B7CAA9CBD5B4 +BBCFA7CBDBBAE6F3DAF9FEF6FDFDFFFEFBFFFCFCFDFEFEFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF9FDFBFBFFFAF7FDFFF7EFFCFF +7A92AE9DA89FFFFFFFFBFBFEFEFFFFFAFEF9F3FEF2EEFAEBE0EBD4BCCAA6BACFA5BED9AF82A179 +9D9EA3D6FDFF6BCDDF0E95A657BCCE9DD6EB94B6BA102E32486566B5D5D41E2425A9BDBB0C0A09 +798C920512198B969A454A4B93A9AF110F109BB8C47A9EA8140F12B9DDEB56898F000000183741 +8DC6D189BECC99BCCDCDE0F2F8FFFFDFE3DA707664B5CBAAC6DDB8BFCDACC7D4B6E1EDD4F4FCEA +FFFFFDFEFEFEFFFBFFFCFDFCF9F9F9FFFFFFF6F6F6FAFAFAFCFCFCFCFCFCFDFDFDFBFBFBFFFFFF +FCFCFCFEFEFEFDFDFDFBFBFBFBFBFBFDFDFDFEFEFEFCFCFCFEFEFEFEFEFEFEFEFEFFFFFFFDFDFD +FEFEFEFCFCFCFCFCFCFCFCFCFAFAFAFDFDFDFBFBFBFEFEFEFDFDFDFEFEFEFEFEFEFDFDFDFEFEFE +FCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFDFDFDFFFFFF +FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFDFDFDFDFDFD +FDFDFDFFFFFFFEFEFEFFFFFFF8F8F8FDFDFDF9F9F9FFFFFFFEFEFEFFFFFFFEFEFEFFFFFFFCFCFC +FEFEFEFFFFFFFDFDFDFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFBFBFBFFFFFFFEFEFEFCFCFCFFFFFF +FEFEFEFEFEFEFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFDFDFDFFFFFF +FEFEFEFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFDFDFDFFFFFFFCFCFC +F9F9F9FEFEFEFDFDFDFEFEFEFFFFFFFEFEFEFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFBFBFBFCFCFCFBFBFBFCFCFCFFFFFFFEFEFEFFFFFFFFFFFFFDFDFDFEFEFEFCFCFC +F8F8F8FFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFCFCFCFCFCFCFEFEFEFDFDFDFDFDFDFFFFFF +FCFCFCFCFCFCFEFEFEFCFCFCFEFEFEFFFFFFFEFEFEFDFDFDFFFFFFFDFDFDFEFEFEFDFDFDFEFEFE +FDFDFDFDFDFDFFFFFFFFFFFFFFFFFFF8F8F8FBFBFBFBFBFBFFFFFFFFFFFFFDFDFDFCFCFCFDFDFD +F9F9F9FDFDFDFCFCFCFCFCFCFCFCFCFDFDFDFEFEFEFDFDFDFFFFFFFCFCFCFFFFFFFEFEFEFFFFFF +FCFCFCF9F9F9FAFAFAFAFAFAFDFDFDFBFBFBFBFBFBFAFAFAFBFBFBFEFEFEFEFEFEFEFEFEFCFCFC +FEFEFEFFFFFFFCFCFCFEFEFEFFFFFFFDFDFDFEFEFEFEFEFEFBFBFBFBFBFBFEFEFEFBFBFBFCFCFC +FCFCFCFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFFFFFFFEFEFEFFFFFFFBFBFBFEFEFEFDFDFD +FEFEFEFEFEFEFFFFFFF8F8F8FDFDFDF9F9F9FBFBFBFCFCFCFBFBFBFEFEFEFFFFFFFEFEFEFFFFFF +FDFDFDFFFFFFFFFFFFFDFDFDFFFFFFFDFDFDFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFFFFFFFEFEFE +FFFFFFFBFBFBFBFBFBFCFCFCFEFEFEFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF +FCFCFCFFFFFFFEFEFEFAFAFAFDFDFDFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF9FDFBFBFFFAF7FCFFF7EFFCFF7D94B29AA39DFFFFFF +FFFEFFFEFDFDFAFFF8F1FDEFE5F4DFCDDEBEC1CEA5C8D7AFA0B194819681D0E4EEB0EBFC2A9CB9 +008CA654BFD2B4ECFD1F3237D4EEF6010000909BA928262CABABB70507096F888D000E17768389 +464E5097B1BA0D0E0ECAEDF97FA6B00B070CCAEEFD4A7881151B25B5E6F38FD0DC85BFCAB2D0DD +EEF3FDF5FCF0989A887F856CD1EBC5BFDDB7BBCEACD8DFCEF3F9EAFAFEF3FBFCF8FDFDFDFEFDFE +FAFAFAF5F5F5FFFFFFFFFFFFF6F6F6F9F9F9FFFFFFFFFFFFF7F7F7FEFEFEFDFDFDFAFAFAFAFAFA +FFFFFFFCFCFCFAFAFAFDFDFDFCFCFCFCFCFCFAFAFAFCFCFCFCFCFCFEFEFEFFFFFFFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFAFAFAFCFCFCFCFCFCFAFAFAFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFDFDFDF8F8F8FAFAFAFAFAFAFEFEFEFCFCFCFAFAFAFDFDFDFDFDFDFDFDFDFFFFFF +FFFFFFFFFFFFFCFCFCFBFBFBFDFDFDFBFBFBFBFBFBFCFCFCF6F6F6FBFBFBFDFDFDFDFDFDFFFFFF +FDFDFDFBFBFBFFFFFFFDFDFDFFFFFFFDFDFDFDFDFDFAFAFAFBFBFBFBFBFBFCFCFCFDFDFDFDFDFD +F8F8F8FCFCFCFFFFFFFFFFFFF7F7F7F9F9F9FCFCFCFCFCFCF9F9F9FDFDFDFDFDFDFEFEFEF8F8F8 +FBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFDFDFDFAFAFAFBFBFB +FBFBFBFBFBFBFDFDFDFCFCFCF9F9F9FBFBFBFDFDFDF8F8F8FAFAFAFFFFFFFFFFFFF9F9F9FCFCFC +FDFDFDFCFCFCFCFCFCF8F8F8FCFCFCFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFFFFFF +FFFFFFF8F8F8FCFCFCFDFDFDFEFEFEFDFDFDFEFEFEFDFDFDF6F6F6FFFFFFFFFFFFFFFFFFFEFEFE +FCFCFCFDFDFDFDFDFDFBFBFBF7F7F7FFFFFFFFFFFFF7F7F7FAFAFAFCFCFCFDFDFDFEFEFEFBFBFB +F9F9F9FBFBFBFBFBFBFFFFFFFEFEFEFDFDFDFBFBFBFCFCFCF9F9F9FCFCFCFBFBFBFBFBFBFDFDFD +FAFAFAFDFDFDFBFBFBF8F8F8FFFFFFF9F9F9FDFDFDFEFEFEF9F9F9F8F8F8FDFDFDFFFFFFFCFCFC +FAFAFAFBFBFBFCFCFCFBFBFBFCFCFCFFFFFFFEFEFEFEFEFEFCFCFCFEFEFEFEFEFEFEFEFEFFFFFF +FFFFFFF6F6F6FAFAFAFDFDFDFFFFFFF8F8F8FDFDFDFCFCFCFCFCFCFEFEFEFAFAFAFEFEFEFBFBFB +FDFDFDFCFCFCFCFCFCFDFDFDFCFCFCF5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFBFBFB +FBFBFBFBFBFBFBFBFBFAFAFAFCFCFCFBFBFBFCFCFCFDFDFDFDFDFDFBFBFBFCFCFCFDFDFDFBFBFB +F9F9F9FFFFFFFFFFFFFEFEFEFFFFFFFDFDFDFDFDFDFCFCFCF7F7F7FEFEFEFBFBFBFDFDFDFCFCFC +FAFAFAFBFBFBFCFCFCFEFEFEFAFAFAFCFCFCFCFCFCFBFBFBFDFDFDF9F9F9FDFDFDF7F7F7FFFFFF +FFFFFFF8F8F8FAFAFAFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFCFCFCFBFBFBFAFAFAFCFCFC +FCFCFCFFFFFFF9F9F9FCFCFCFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFEFDFFF9FDFBFBFFFAF7FBFFF7EFFCFF7D93B19BA3A0FFFFFFFDFCFFFEFDFDFBFFF9 +F7FFF2CFE1C8B8C8A6D5E1B2C9D3AD798370B7C0BCD0F9FF60A8C2148CB10092B157C4D6A8E4ED +4272755E91964F7E83A0D5E285B9C42B64718BB1BEA1C9D83E5F716280904662714E778730464A +84BDBFA8E0E54A697567919FA0D8E3445F6F649CAC89D5E193D4E0D7F4FCFFFFFFBCC6AC7A7B63 +C0CAAAB9DBB0B7DCB4BAD6B2EBEBE4FDFFF8F9FDF6F7FAF3FCFDF8FEFFFAF9F9F9FFFFFF7D7D7D +979797FFFFFFFFFFFF909090979797FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3A3A3DCDCDCFDFDFD +FEFEFEFFFFFFFFFFFFFAFAFAFFFFFFFBFBFBFFFFFFFEFEFEFFFFFF8C8C8C0D0D0D0E0E0E161616 +D2D2D2FFFFFFF8F8F8FCFCFCFCFCFCF8F8F8FCFCFCFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFEFEFE +F6F6F6FEFEFEFFFFFFFFFFFFFEFEFEF9F9F9FFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFCFCFC +FFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFDFDFDFFFFFFFDFDFDFFFFFFFEFEFEFFFFFFE4E4E4747474 +F0F0F0FFFFFFFCFCFCFFFFFFFDFDFDFAFAFAF9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8 +515151FFFFFFFBFBFBFAFAFAFEFEFEF7F7F7FFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFFFFFFFFFFFF +FFFFFFFDFDFDFDFDFDFDFDFDFBFBFBFFFFFFFFFFFFFFFFFFFBFBFBFFFFFFFFFFFFFFFFFFFDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFF3F3F3FFFFFFE2E2E2565656FFFFFFFEFEFEFEFEFEFEFEFEFFFFFF +F9F9F9FFFFFFFFFFFFF9F9F9FCFCFCFFFFFFFFFFFFFDFDFDFFFFFFB6B6B6C7C7C7FFFFFFFEFEFE +FFFFFFFFFFFFFDFDFDFEFEFEFFFFFFFFFFFF888888CACACAFFFFFFFDFDFDFAFAFAFFFFFFFFFFFF +FEFEFEFFFFFFF5F5F5888888FFFFFFFAFAFAFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFDFDFD +FFFFFFFFFFFFFDFDFDF9F9F9FCFCFCF7F7F7F9F9F9FEFEFEFFFFFFFFFFFFFBFBFBFFFFFFFCFCFC +FFFFFF2E2E2EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F28B8B8BFFFFFFFBFBFBFDFDFDFCFCFC +FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4FFFFFF6565653E3E3EFFFFFFFAFAFA +DBDBDB767676F2F2F2FFFFFFFFFFFFFEFEFEFBFBFBFFFFFFFEFEFEFFFFFFFFFFFFFBFBFBFFFFFF +FFFFFFFFFFFFFFFFFFAFAFAFCDCDCDECECEC545454E1E1E1FFFFFFFFFFFFFFFFFFF7F7F7FCFCFC +FAFAFAFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFFFFFFFCFCFCFEFEFEF7F7F7FFFFFFADADADCDCDCD +F2F2F26D6D6DEBEBEBFFFFFFFFFFFFFCFCFCFFFFFFFFFFFFFCFCFCFFFFFFFFFFFFFEFEFEFEFEFE +FCFCFCFDFDFDF9F9F9FDFDFDFAFAFAFCFCFCFFFFFFFFFFFFFFFFFFC7C7C76E6E6EFFFFFFFFFFFF +FEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFAFAFAFCFCFCFBFBFBF7F7F7FFFFFFF2F2F2A1A1A1F5F5F5 +FBFBFBFFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8 +FDFAFBFFFBF8FCFFF8EEFBFF7D94B299A4A0FFFFFFFAFEF9F7FBF3F6FFF5DCEADFB9D6B4C5DAB6 +BFD0A78C9C788FA288E2F5E49ABDD934829716879B2A91AA69B7D486CAE59AD7ED97D4EB91D0E6 +8CCCE18AC9DDA0DEF384D1E184CDDE99DCEE9AD7EAA1DAEC9FD0E69EE3EF8BC9D58BC8D49FD9E6 +9AD2DF96CBD99DDADD98D5DE87C0CFB2D8DFF6FFFFE1E8DF707664A7B698D8EAC5B4CBA7BED1BA +D7E4DAFAFDFDFEFFFFFEFEFDFDFDFCFDFAFCFFFDFEFCFBFCFFFFFF787878141414D6D6D6FFFFFF +8989898A8A8AFFFFFFD2D2D2BBBBBBF3F3F3FFFFFF424242868686FEFEFEEDEDEDBCBCBCD8D8D8 +FFFFFFDEDEDED8D8D8FEFEFEFBFBFBFFFFFF5A5A5AD3D3D3FFFFFFFFFFFF171717FFFFFFDDDDDD +F2F2F2F3F3F3DDDDDDFBFBFBCDCDCDCFCFCFE1E1E1EEEEEEB9B9B9F5F5F5FBFBFBE4E4E4D0D0D0 +C1C1C1EFEFEFFFFFFFCDCDCDBABABAEEEEEEFFFFFFFEFEFEFCFCFCFBFBFBD5D5D5B9B9B9E9E9E9 +FFFFFFD2D2D2ECECECBDBDBDE6E6E6FEFEFEF3F3F3C3C3C3B7B7B7656565EDEDEDFEFEFEFAFAFA +D7D7D7FFFFFFFDFDFDCBCBCBFFFFFFE8E8E8BEBEBECCCCCCFFFFFFE9E9E91B1B1BF9F9F9FAFAFA +FBFBFBDBDBDBFAFAFAF3F3F3B8B8B8D1D1D1FFFFFFFBFBFBCACACAC1C1C1F3F3F3FDFDFDFCFCFC +F6F6F6FFFFFFDCDCDCBABABADADADAFFFFFFE2E2E2D7D7D7CACACAFFFFFFD4D4D4BEBEBEEFEFEF +FFFFFFFEFEFEFFFFFFE5E5E5262626FFFFFFD4D4D4C0C0C0F3F3F3FFFFFFFFFFFFC2C2C2C4C4C4 +FFFFFFFEFEFECFCFCFBEBEBEEFEFEFFDFDFD4848487E7E7EFAFAFAEFEFEFB9B9B9D4D4D4FFFFFF +FFFFFFD4D4D4D2D2D25B5B5BBEBEBEFFFFFFFEFEFEFEFEFEF2F2F2BEBEBEC1C1C1FFFFFFBBBBBB +1E1E1EDBDBDBFEFEFEF8F8F8FDFDFDE5E5E5BCBCBCD2D2D2FFFFFFFEFEFEFDFDFDDDDDDDF3F3F3 +FFFFFFF2F2F2DDDDDDFFFFFFCFCFCFB9B9B9EEEEEEFFFFFFD3D3D3D4D4D4E6E6E6E5E5E5FFFFFF +EFEFEFBFBFBFD1D1D1FFFFFFB2B2B2202020DEDEDEE1E1E1FCFCFCEEEEEEE0E0E0FFFFFFFDFDFD +FDFDFDF7F7F7C1C1C1C8C8C8FFFFFFA6A6A63C3C3CEAEAEAFFFFFFFFFFFFD2D2D2535353FCFCFC +E0E0E0B9B9B9E8E8E8FFFFFFFFFFFFCBCBCBC5C5C5F6F6F6FFFFFFD5D5D5BABABAE2E2E2FFFFFF +4141418A8A8AE8E8E8F0F0F0FBFBFBE7E7E7B8B8B8DFDFDFFFFFFFE1E1E1EFEFEFBDBDBDD9D9D9 +FEFEFEF8F8F8BDBDBDC9C9C9FFFFFFF9F9F9F8F8F8F5F5F54848487B7B7BD3D3D3696969B8B8B8 +C6C6C6EEEEEEFFFFFFC5C5C5D1D1D1FFFFFFD9D9D9BABABAEAEAEAFFFFFFE2E2E2E6E6E6FFFFFF +E0E0E0EBEBEBFFFFFFBEBEBEE1E1E1DBDBDBCBCBCB515151D8D8D8CACACAFCFCFCFAFAFAD4D4D4 +B8B8B8F8F8F8FFFFFFCFCFCFFEFEFEF7F7F7D9D9D9BABABA444444AEAEAEFFFFFFFFFFFFFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFFFFFDF8FEFBF1FDFFFC +F1FEFF7B94A6A0A2A3FFFFFFFFFFFCFAFEF6EAF4E8C5D5C6BCD9B5CDE3BE9BAB85828B70E5EFE0 +FAFFFDB8DCE193D1D591E0E98FD2E0A1D5E4A5D9E090DFE190DEE18EDBDE8CD9DD90DFE38EDCE0 +AFE4E5BAEBEEBBEAECC3E9ECC6E9ECC1E2E4C1E9F0C5EDF2C3EAF1C2E6ECC7EBF1C7E7F2CCE4ED +C7E2EECBE7F0E8F8FDF7FBF98B817A9CA588C3D2AECBE0B8BACFAECADBC8E5F2E9FDFFFFFAFBFA +FBFCFBFDFBFDFCFAFBFFFDFEFDFDFDFFFFFF636363A0A0A07B7B7BFFFFFF8989898F8F8FEEEEEE +3C3C3C6E6E6E4A4A4AFFFFFF1C1C1C444444D8D8D88D8D8D797979747474D9D9D9C3C3C3A6A6A6 +FFFFFFFCFCFCFFFFFF5D5D5DD5D5D5FFFFFFFFFFFF131313FAFAFA464646DFDFDFDDDDDD434343 +FCFCFC0000009999993434349A9A9A3B3B3B8E8E8EF5F5F52929296868685959598F8F8FB7B7B7 +6E6E6E777777434343FFFFFFFDFDFDFFFFFFB5B5B54C4C4C7272724C4C4CFFFFFF313131838383 +767676313131FFFFFF7979795A5A5A7272724C4C4CF1F1F1FFFFFFFFFFFF2A2A2AFFFFFFFFFFFF +272727F3F3F36A6A6B7474745C5C5CB6B6B6FAFAFB191919838384EDEDEEDADADA5F5F5FFFFFFF +5F5F5F7B7B7B5A5A5AE6E6E69E9E9E6C6C6C6868687B7B7BF4F4F4FBFBFBFBFBFBE5E5E53B3B3B +7575752D2D2DFFFFFF7C7C7C3A3A3A969696C9C9C98383836D6D6D878787F6F6F6FDFDFDFFFFFF +E6E6E6383838D1D1D15F5F5F616161787878FFFFFF8A8A8A5959595B5B5BABABABB0B0B0676767 +616161757575CDCDCD262626404040F3F3F36464647A7A7A585858EEEEEEC7C7C76262627A7A7A +343434C4C4C4FFFFFFFEFEFEFFFFFF525252767676484848A7A7A79F9F9F1111118D8D8DFFFFFF +FEFEFEDEDEDE606060747474525252C0C0C0FFFFFFFFFFFF999999838383FFFFFF878787989898 +B1B1B15151517171714E4E4EFFFFFF101010757575D1D1D1080808FFFFFF9494947676767D7D7D +C0C0C0838383121212A0A0A0373737FFFFFF7B7B7B989898FFFFFFFBFBFBFFFFFF727272606060 +575757B2B2B28A8A8A1818188C8C8CFFFFFFFFFFFFD6D6D6606060F5F5F53A3A3A6D6D6D474747 +FFFFFFA4A4A45C5C5C5757578E8E8EE3E3E3464646747474393939EEEEEE1D1D1D4A4A4AA4A4A4 +4F4F4FF7F7F73939396D6D6D464646FBFBFB777777676767757575474747EBEBEB5A5A5A828282 +747474949494FFFFFFFBFBFBE9E9E92121214D4D4DA8A8A86161617D7D7D5151518A8A8AFFFFFF +000000A2A2A2DDDDDD3F3F3F6F6F6F444444FFFFFF5E5E5EBABABAFFFFFF4F4F4FCACACA7D7D7D +5E5E5E9D9D9D0F0F0FE0E0E03B3B3B939393383838C5C5C5D5D5D54A4A4A696969696969FFFFFF +010101FFFFFFFFFFFF0B0B0BA1A1A1262626535353FFFFFFFFFFFFFCFCFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFEFFFDF9FEFBF1FDFFFCF1FDFF7C94A7A59EA3 +FFFFFFFFFFFBF3F5EED3E1D1B3C7B5C3DFB6B0C6A0849372B0B6A4FFFFFFFCF5FFE1FDF7DEFFFF +E1FFFFE6FAFFEEFEFFE5FFFFE5FFFFE6FFFFE1FCFFE7FFFFE5FFFFE4FFFFECFFFFEDFFFFEFFFFF +F3FFFDF2FCF8F8FFFBF1FFFFF4FFFFF1FEFFF9FFFFF7FFFFFAFFFFFFFFFFFAFCFFFAFFFFFFFFFF +A4A39A958B7BC9D7ACD0E1B6AEC399C5DABCDFEFDFF3FCFAFCFEFDFDFDFDFCFCFCFDFCFDFCFAFB +FFFDFEFDFCFEFFFFFF5E5E5EBFBFBF909090BFBFBF9B9B9B9E9E9E353535FBFBFBFFFFFF616161 +D3D3D3777777D4D4D4B8B8B82F2F2F7777774B4B4B6A6A6AFFFFFFFFFFFFFAFAFAFDFDFDFFFFFF +6F6F6F0202020F0F0F232323ABABABF7F7F75D5D5DE4E4E4E3E3E35E5E5EFFFFFF141414FFFFFF +2E2E2EE9E9E9E1E1E1414141F9F9F94E4E4EEBEBEBFFFFFF7474748888881D1D1DBCBCBCE4E4E4 +FEFEFEFAFAFAF8F8F8F1F1F1F5F5F5EFEFEF1B1B1BEFEFEF4D4D4DC8C8C8FFFFFF141414DBDBDB +626262FFFFFFE1E1E14B4B4BEDEDEDFFFFFFFFFFFF9A9A9AB6B6B4ACACAB9B9B99FEFEFDF3F3F2 +FFFFFD676766707070FFFFFF353534949493D0D0CEBFBFBF8B8B8BD3D3D30E0E0E858585525252 +4141418D8D8D323232C5C5C5F1F1F1EFEFEFF8F8F8F6F6F6F3F3F3F3F3F3FBFBFB171717DDDDDD +898989999999FFFFFF595959626262747474101010C7C7C7FFFFFFFFFFFFE9E9E93333338B8B8B +CFCFCFFFFFFF626262D8D8D8171717FFFFFFFFFFFFDBDBDBF2F2F2FFFFFFC4C4C4383838EDEDED +797979C2C2C2C9C9C91E1E1E8787874343435B5B5B818181CDCDCDFFFFFF616161C0BFBFFFFFFF +FEFFFFFFFFFFE5E5E5FFFFFF949494414141F9F9F9424242FFFFFFF7F7F7F3F3F3F4F4F4EFEFEF +FBFBFB5C5C5C7D7D7DFFFFFFFCFCFCFFFFFF3A3A3AFFFFFF777777D5D5D5F4F4F4FCFCFCECECEC +080808FFFFFF232323FCFCFCFFFFFF171717E0E0E02323237E7E7E505050525252F1F1F1404040 +FFFFFF494949FFFFFF707070C9C9C9FFFFFFFEFEFEFFFFFF252525FFFFFFFFFFFF262626ECECEC +535353FFFFFFF9F9F9FAFAFAD5D5D5737373696969BEBEBEFFFFFF9F9F9F868686757575E3E3E3 +FCFCFCE1E1E1F3F3F3FDFDFDF5F5F50E0E0EFAFAFA767676BABABAF7F7F76A6A6A9D9D9D7E7E7E +FFFFFFD9D9D95353538A8A8A8E8E8EFFFFFF6B6B6BD2D2D22121216D6D6DE0E0E0E8E8E8FCFCFC +F9F9F9FFFFFF797979B5B5B5FCFCFC515151EBEBEBEAEAEA5D5D5DFEFEFE1E1E1EFFFFFF505050 +D1D1D1FFFFFF7F7F7FA9A9A9737373BFBFBFFFFFFF5C5C5CCBCBCB353535FFFFFFFFFFFF191919 +E3E3E3434343FFFFFFA7A7A79191916C6C6CCDCDCDFFFFFF787878BFBFBF1A1A1AFFFFFFFFFFFF +151515FAFAFA696969FFFFFFFEFEFEFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFDFEFFFEF9FEFBF2FDFFFCF1FEFF7B94A79E9B99FFFFFFFFFFFBE2E8D4 +C6D7BCBED7B6BAD3AA91A88395A689F3FAECFFFFFCFBF5FAF3FFFFEFFEFFF2FAFDFFF5FEFFFBFE +F9FFFEFFFEFBFFFDFDFFFEFDFFFBFAFFFBFAFFFEFBF7FBFDFAFDFDFDFDFEFEFBFBFFFBFBFFFAF9 +FFFFF6FFFAF3FFF9F2FFF9F3FFFFF5FFFCF4FAFEFEFDFFFEFAFFFCCEDDC57F9070AFC19BCADCAD +C6DAAEBBD2ADD4E5D1F3FDF6F9FFFFFAFCFDFAFEFCFDFDFDF8F8F8FDFBFCFFFDFEFAFAFAFFFFFF +616161B5B5B5FFFFFF5A5A5A8B8B8BA8A8A8282828FFFFFFFFFFFF757575B5B5B5707070D2D2D2 +B4B4B4525252D0D0D0B5B5B5CDCDCDFFFFFFFFFFFFFDFDFDFDFDFDFFFFFF5A5A5AD4D4D4FFFFFF +FFFFFFFFFFFFEBEBEB555555EDEDEDEBEBEB5C5C5CFFFFFF141414FFFFFF2E2E2EEDEDEDDCDCDC +414141FBFBFB585858EBEBEBFFFFFF656565BFBFBFF1F1F1767676000000FFFFFFFAFAFAFFFFFF +B2B2B22B2B2BA9A9A9282828F4F4F43E3E3EE2E2E2FFFFFF171717D9D9D96A6A6AFFFFFFE2E2E2 +555555F0F0F0FFFFFFFDFDFDFFFFFF464643949391DFE0DDE8E8E93F3D3D7C7C7C7D7D7A737374 +FFFFFD262523E7E7E6979794686868FFFFFFAEAEAE484848CECECEBBBBBBC7C7C7FFFFFFD5D5D5 +6161613A3A3AF0F0F0FCFCFCFFFFFFEFEFEF0F0F0FA1A1A1282828DEDEDE8383839B9B9BFFFFFF +575757A3A3A3C5C5C5AEAEAEEFEFEFFFFFFFFFFFFFE9E9E93C3C3C7D7D7DD6D6D6FFFFFF6B6B6B +D6D6D61B1B1BFFFFFFFFFFFFF3F3F39797973C3C3C959595444444EDEDED686868C7C7C79B9B9B +5A5A5ACDCDCDB7B7B7CECECE6C6C6CD3D3D3FFFFFF6A6A6ABFBFBFFFFFFFFCFEFCFFFFFF343434 +6C6C6C909090484848EEEEEE363636FFFFFFFAFAFAFDFDFDDFDFDF393939878787676767808080 +FFFFFFFBFBFBFFFFFF868686A2A2A28B8B8BFFFFFF999999353535B1B1B11B1B1BFFFFFF161616 +FCFCFCFFFFFF181818DADADA4C4C4CC8C8C8B7B7B7D2D2D2DEDEDE404040FFFFFFDDDDDD4B4B4B +7C7C7CF2F2F2FCFCFCFFFFFFFDFDFD1E1E1EFFFFFFFFFFFF191919DFDFDF494949FFFFFFF9F9F9 +FFFFFFD5D5D5797979525252D1D1D1FFFFFFB0B0B0686868757575E4E4E4FFFFFFF7F7F7D9D9D9 +202020A5A5A50F0F0FFEFEFE6A6A6AC8C8C8F2F2F26E6E6E818181919191FFFFFFEFEFEF414141 +8E8E8EA3A3A3FFFFFF686868C4C4C4F2F2F2BCBCBC323232656565FFFFFFFCFCFCFFFFFF676767 +B6B6B6FAFAFA5C5C5CE5E5E5E0E0E05D5D5DF9F9F9191919FFFFFF383838E8E8E8FFFFFF969696 +959595707070C8C8C8FFFFFF606060CDCDCD292929FFFFFFFFFFFF161616DADADA535353FFFFFF +AAAAAA8A8A8A606060D9D9D9FFFFFF818181AFAFAF141414FFFFFFFFFFFF151515F0F0F05B5B5B +FAFAFAFFFFFFFDFDFDFCFCFCFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFE +F9FBFEFEFBF7FDFAF0FDFFFBF1FDFF7D95A9939D90FFFFF8EDF4E0CFDABCBFD2ACC5DFB19DB18A +607551A5BC9CCCDEC8C9D2C3CCCEC6CACDCBC3D1CAC4D1C8D0CBC6D1CDC6CAD2C5C2D6C3C1D5C4 +C2D5C4C1D4C2C1D4C3C1D5C3CBCFC9CBCFC8CBCEC7CCCFC5CBCEC4CDCFC4D1CDBFCFCCBCCDCCBC +CDCFBDCDD1BFCDD0BEC5D1C4C4D3C2B9CBB089A07A90AB7EBFDDABC2D3ADB9CDAACDE2C8ECFCF0 +F7FFFFFAFCFFFBFEFEFCFEFDFDFDFDFCFBFBFEFCFDFFFDFEF9F9FAFFFFFF515151AAAAAAFFFFFF +E7E7E70000009B9B9BD1D1D1454545949494252525FFFFFF717171525252DFDFDF6464648F8F8F +777676C3C3C3D4D4D4C4C4C4FFFFFFFCFCFCFFFFFF4E4E4EBCBCBCFFFFFFFCFCFCFFFFFFFBFBFB +6A6A6A6565658282823A3A3AFEFEFE060606FFFFFF131313E7E7E7D2D2D2333333FFFFFF424242 +8A8A8A7777778B8B8BD3D3D35D5D5DA4A4A4262626FFFFFFFCFCFCFFFFFF898989565656B0B0B0 +2D2D2DE2E2E22A2A2AD8D8D8FFFFFF050505FFFFFF7676767E7E7E7C7C7C3E3E3EEDEDEDFFFFFF +FCFCFCFFFFFF71706D5F615CFFFFFFCCCCCD464643A6A6A5666660757573F8F8F4151512FFFFFF +484943707070FFFFFFFFFFFF3333339A9A9A5E5E5ED1D1D1ADADAD7A7A7A8E8E8E6B6B6BE6E6E6 +FFFFFFFFFFFFBBBBBB3E3E3EAEAEAE2D2D2DBFBFBF767676898989FFFFFF999999717171868686 +7D7D7DEBEBEBFBFBFBFFFFFFDFDFDF232323BDBDBD666666868686636363FBFBFB6D6E6E737373 +717171B1B1B17A7A7A6D6D6D999999383838E2E2E2797979474747F2F2F2323232989898686868 +DADADABBBBBB6C6D6D989A9A323434C0BFBFFFFFFFFBFEFEFFFFFF0B0B0BA4A4A48B8B8B3B3B3B +FDFDFD272827A2A2A2FFFFFFFFFFFFCACACA3F3F3FA3A3A35D5D5D767676FFFFFFFEFEFEFCFCFC +FFFFFF000000B8B8B8FFFFFF6A6A6A6B6B6BB3B3B41E1E1EFDFDFD0B0B0BF7F7F7FFFFFF060607 +FFFFFF6A6A6A898989767676A8A8A8F4F4F4020202C2C2C2FFFFFF060606818181FFFFFFF8F8F9 +F9F9F9FFFFFF5757577F7F7F6F6F6F8F8F8FD5D5D5353535FFFFFFFDFDFDFFFFFFD0D0D0505050 +E3E3E3363636989898303030FFFFFF9090906868687070709D9D9D9E9E9E575757B1B1B1151515 +DFDFDF8B8B8B525252C4C4C4545454F0F0F02727279797973E3E3EE2E2E2727272929292FFFFFF +5F5F5FCACACA6666668E8E8EA2A2A2616161FFFFFFF7F7F7FFFFFF8989894D4D4DBEBEBE515151 +E0E0E0DCDCDC4E4E4EF3F2F3090A09FFFFFFDADADA404040979696252525FFFFFF9090905E5E5E +9A9A9A1B1B1BD4D4D47070707F7F7FA9A9A9212121D8D8D83E3E3EFFFFFF9E9E9E6C6C6CC8C8C8 +4B4B4B9595954C4C4CFFFFFF6767676C6C6CA8A8A8000000FFFFFF4444447A7A7AFFFFFFFEFEFE +FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFAFBFEFEFCF8FEFAF0 +FDFFFCF1FDFF7D95A88FA48DE9FBE2D3E3C4C1D0A9BFD5A4C2DDA796A5814A5F3B668161597258 +5F715965715C6D695D60735E5C785B63725568705664715465705F656F5F65705E646E5E646E5E +636E5C65745F65725C637059636F586371556271556E6F5E6B6E5C6C715F636C5866705D64705B +64706065715C7380618C9D74ADC490C7E2AABDCDB1C3D7BDDFF4E3F1FFF9F9FFFFFDFEFFFCFFFF +FDFFFFFFFFFFFDFDFDFFFDFEFFFBFEFDFDFDFEFEFEB9B9B9DBDBDBFAFAFAFFFFFFB2B2B2D2D2D2 +FFFFFFB8B8B8969696D7D7D7FFFFFFEDEDED7E7E7EF5F5F5DEDEDE838383C2C3C3FBFCFDD7D7D8 +BABABBFFFFFFFEFDFDFFFEFFB8B7B8E5E5E5FFFFFFFCFBFCFEFDFDFEFEFEEEEEEE848484CBCBCB +BCBCBCFCFCFC9D9D9DFFFFFFA5A5A5F5F5F5EAE8E9AFAFAFF0F0F05D5D5DC4C4C6A2A2A2F4F4F4 +FFFFFFBDBDBD919192DADADAFFFFFFF7F7F7FBFBFBF3F3F49A9A9ABABABADADADAE5E5E6AEAEAE +E9EAEAFFFFFF9F9FA0FFFFFFF0F0F1898A8ACACACABEBEBFF7F7F7FEFEFEFEFEFEFDFDFEE7E8E1 +D0D1CDFFFFFFFBFBF6BDBEBA999B94D5D6D4CFD0C7FAFAF4A0A19DFFFFFFCACBC3E5E4E4FEFDFE +FFFFFFD5D5D5939292B3B3B3FFFFFFF6F6F6B6B6B6949394EEEDEDFFFDFFFBFAFBF9F7F9FFFFFF +A2A2A2ABABABE1E1E1CBCCCBCCCCCCD0D1D0FFFFFFF6F5F5C5C6C5838383E6E6E6FFFFFFF8F7F8 +FFFFFFEEEDEDA4A4A4FFFFFFC6C6C68D8C8CE7E6E7FFFFFFF6F4F49E9E9EA8A7A8FFFFFFF4F3F3 +929292CBCACBBFBFBFEEEEEEEBEBEB898989F2F1F1D4D3D4939393B8B6B6FFFFFFFEFCFCC4C5C5 +999F9FB6B8B8E1E7E4FDFFFFFAFFFEFEFFFFCBC9CA959494DCDCDCB4B4B4FFFFFFBCBABC959595 +FFFFFFFAFAFAFBFBFBB8B8B8A0A09FD6D6D8CCCCCEFFFFFFFEFEFEFBFBFCFFFFFFABABAAF9F8F9 +FFFFFFEEEEEE979797C6C5C5D6D6D6EAE9EAA0A0A0FAF9FAFFFFFF969695FFFFFFE8E8E9959596 +B0B0B1F1F1F2FFFFFFA2A1A2BBBBBAFFFFFF5F5E5F9A9A9BFFFFFFFAF9F9FAFAFAF9F9F9ECECEC +9F9F9FAAAAABFFFFFFEAE9EAAAAAAAFFFFFFFBFBFCFFFFFFE9E9E9B5B5B5FFFFFFC5C5C5959595 +C8C8C8FFFFFFF1F1F1AAAAAA9B9B9BF0F0F0FFFFFF9E9E9EB1B1B1D0D0D0D5D5D5FAFAFA8D8D8D +D1D1D1C3C3C3F6F6F6CECECE929292BEBEBEFFFFFFC6C5C5D2D3D2FFFFFFBEBEBEE3E3E4EDEDED +9A9B99AAA9A8FFFFFEFFFFFFF7F8F8FDFBFCF7F7F78A8A8AD4D4D3BFBEBEF0F0F0F2F2F1B7B7B6 +F9F9F9A0A0A0FFFFFFFFFFFFBFBEBE9A9898CFCFCFFFFFFFFAF8F8A1A0A0B1B1B1B2B2B2EBEBEB +E8E8E8B7B7B7EEEEEE252525F5F5F5B5B5B5FFFFFFD3D3D4BDBDBDFFFFFFBABABA979797E4E4E4 +FFFFFFFFFFFF939393C3C3C3949494FFFFFFC0C0C08F8F8FFFFFFFFDFDFDFEFEFEFBFBFBFBFBFB +FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFBFBFAFCFFFEFBF7FDFAF0FDFFFBF0FDFF7D95A9 +98AB98DEF4DDBED5BAB7D3AEC2DCB4C0DDB1BDE5B4B1D0A5CEE2BEBBC9A7C0CEA6BECDA2BDD0A4 +BED0A4BDD0A4BDCFA4BECFA5BDD1A4BCD09EBCD19DBCD19DBCD09CBCD09CBCD09CBBCD9ABDCE9C +BDCE9BBFCF9CBECF9DBECF9CBBCF9FBDD0A1BED0A4BECFA4BCCFA6BFCDA4BAD4AAB8D39DABC789 +B6CE90D1E5B4C6D8B0B4C4A3D8E7CEF2FCEFF7FDF9F9FFFEF8FDFDFEFDFCFEFCFCFEFEFEFBFBFB +FBFDFBFBFDFBFCFBFCFDFDFDFFFFFFFFFFFFFAFAFAF9F9F9FFFFFFFFFFFFF6F6F6FFFFFFFFFFFF +FFFFFFF7F7F7FFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFBFCFFFFFFFFFFFFFFFAFBFEF9FA +FAFDFCFFFFFFFEFFFFFDFFFEFDFFFEFCFFFEFBFAFAFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9FFFFFF +F9FBFAFFFFFFFCFFFDFFFFFFFFFFFFE6E4E4595755E6E6E6FFFFFFF8F7F4FCFBF9FFFFFFFFFFFF +FEFCF9FCFBF8FFFEFCF7F6F4FEFDFBFFFFFFFFFFFEFFFEFCFFFEFBFFFFFFFFFFFEFDFCFAFFFFFF +FCFBF9FEFDFAFFFFFFFFFFFFFFFFFFFDFFFBFEFFFDFCFFFAF9FDF8FCFEFBFFFFFEF6F9F5F7F9F6 +FFFFFFFFFFFFF8FAF7FFFFFFFEFFFEFFFFFFF8FAF7FFFFFFFCFFFFF8FAF9F6F8F7FFFFFFFFFFFF +FFFFFFFAFCFBFBFFFCFFFFFFFFFFFFF9FCFBF4F6F5FBFDFCFAFDFBFAFCFBFFFFFFFFFFFFFCFEFD +FFFFFFFFFFFFFEFFFFF8FFFCFAFFFFFFFFFFFFFFFFFEFFFFFAFCFBFAFCFBF9FCFAFDFFFFFFFFFF +FAFDFCFFFFFFFFFFFFFEFFFFFAFDFBF8FCFBFFFFFFFFFFFFFAFDFCFFFFFFFFFFFFFFFFFFFFFFFF +FDFFFEFBFEFCFFFFFFFAFDFBFEFFFFFFFFFFFFFFFFF5F9F8F7FAF9FEFFFFFFFFFFFFFFFFFFFFFF +FBFBFBFBFCFBFDFCFDFEFFFFFFFFFFFFFFFFFFFFFFF9FCFAFFFFFFFFFFFFF9F9F9FBFBFBF7F7F7 +FFFFFFFFFFFFFBFBF9FFFFFFFCFCF9FEFEFCFCFCF9F9F9F7FFFFFFFCFEF6F9FAF4FCFEF7FFFFFF +FFFFFAFCFDF7FEFFF8FFFFFFFEFFF8FAFCF5FFFFFFFDFDF3FFFFF6FFFFFFFFFFFEFEFFF3FDFDF3 +FFFFFEFFFFFFB0B1AB4F5049FFFFFFF8F9F3FDFFF9FEFFFAFDFEF9FEFFFAFFFFFFFFFFFFFCFEF8 +FFFFFBFFFFFFFAFCF6FBFCF6FAFBF7FEFEFFFFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFAFAFAF9F9F9 +FFFFFFFFFFFFFEFEFEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFCFCFC +FFFFFFFFFFFFFFFFFFF8FCFEFFFFFFFFFFFFF5F9FCFFFFFFF4F7FBFEFFFFFFFFFFFFFFFFF9FEFF +F5F9FCF8FBFFF8FCFFFCFFFFFFFFFFFDFFFFFFFFFFF8FCFFFBFFFFFFFFFFFCFFFFFFFFFFF9FFFC +F8FDFAFFFFFFFFFFFFFFFFFFF3F6F9F4F9FAFFFFFFFFFFFFFFFFFFFFFFFF1C1D1C9E9E9D5E5E5E +9C9C9CFFFFFFFFFFFFFBFBFAFFFFFFFFFFFFF9F9F9FFFFFFFFFFFFFBFBFCF8F8F7F9F9F8FFFFFF +FFFFFFFFFFFFF7F7F6FFFFFFFFFFFFFEFEFEFEFCFDFEFCFDFEFEFDFEFEFDFEFEFDFEFEFDFEFEFD +FEFEFDFEFEFDFEFEFDFEFEFDFCFEF3FFFBF8FEFEF7F9FFF3ECFCFF7C99B18BA28CCDE5CBB9D2B3 +BAD4A9BFDCABBBD9A4C3E0AEC6DEB2CADCB6C6D5B0C5D9ADC4DAABC5D9AEC6D9AEC6D9AEC5D9AE +C5D9AEC5DAADC7DCAAC7DCABC7DCABC6DBAAC6DCABC6DBABC7DFADC8DEACC8DEACC7DDACC7DDAC +C8DEACC3DBACC5DDADC6DEB0C4DBB0C4DCB2C5DCB3C1DBB0C5E1ADC0D9A0C4DBA7C7DCB2B9CBA9 +CDDCBEF1FBE7F4FDF1F9FEFBFBFEFEF8FDFBFEFDFEFEFEFEFEFEFEFBFBFCFDFDFDFDFDFDFDFDFD +FCFCFDFBFBFBFEFEFEFEFEFEFEFEFEFCFCFDFDFDFDFCFCFCFFFFFFFEFEFFFBFBFCFDFDFEFEFEFE +FDFDFDFEFEFEFEFEFEFDFEFEFDFCFDFEFEFEFDFEFDFCFBFCFDFCFCFDFCFCFBFDFCFBFDFCFBFDFC +FDFFFEFDFFFEFBFFFEFEFDFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFDFEFEFDFFFEFEFFFF +FCFEFDFEFFFFF5F6F4C5C5C4F4F6F4FCFFFCFCFFFBFBFEFBFDFEFBFBFDFAF9FDF9FCFDFAFDFEFC +FBFDFAFBFDFAFCFEFCFAFDFAFBFEFAFBFEFAFBFEFBFAFCFAFCFEFBFAFCF9FBFEFAFBFEFAFCFDFA +F9FAF7FBFDFAFAFCF9FCFEFBFCFEFBFAFCF9FCFEFBFCFEFBFCFEFBFBFDFAFCFEFBFBFDFAFCFEFB +FCFEFBFAFCF9FDFEFCFDFEFCFDFEFBFBFDFDFCFEFDFBFDFCFCFEFEFCFEFDFCFEFDFCFEFEFCFEFE +FCFEFDFDFFFFFBFDFCFBFDFCFDFFFEFCFEFEFCFEFEFCFFFDFDFFFFFEFFFEF9FEFDF9FEFDFAFEFD +F9FCFCF9FEFDF7FDFCFDFEFDFCFEFDFCFEFEFCFEFEFCFEFEFCFEFDFCFEFDFCFEFEFCFEFDFCFEFD +FCFEFDFDFEFEFBFDFCFCFEFDFBFDFCFDFFFEFDFFFEFDFEFEFBFDFCFBFDFCFBFDFCF9FBFAF8FAFA +F9FBFAFAFCFCFAFCFCFAFCFBFBFDFCFBFDFCFAFDFBFDFDFDFBFBFCF9F9FAFAFAFBFAFAFBFBFAFB +F7FAF9F9FBFAFAFCFBFAFCFBFAFCFBF9FCFBFEFDFEFBFBFBFAFAFBFCFCFCFDFDFDFBFBFCFAFAF8 +FDFDFBFFFFFDFDFDFBFDFDFBFBFAFAFDFEF8FDFEF9FDFEF8FDFEF9FDFEF9FBFCF6FDFEF9FDFEF9 +FBFCF6FEFFFAFDFEF9FAFCF6FDFCF7FDFCF8FCFBF8FDFDF8FDFDF9FEFCFAFCFDF8FFFFFDA6A6A5 +EFF0E9FFFFFDFBFBF7FDFCFBFEFEFBFCFCFAFEFDFCFBFBF9FDFDFBFDFDFBFDFDFAFDFDFCFCFCFA +FCFCFAFCFCF9FDFDFEFDFDFDFDFDFDFCFCFCFDFDFDFCFCFCFEFEFEFCFCFCFDFDFDFDFDFDFDFDFD +FEFEFEFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFBFBFBFAFAFAFBFAFB +FDFFFEFCFEFDFBFEFDFEFEFEFAFBFCFCFDFDFBFCFDF9FCFBF8FAF9FBFDFCF9FBF9FBFDFCFAFCFB +FCFEFDFCFEFEFCFDFCFCFDFCFCFDFEFBFCFDFBFCFDFBFDFBFBFCF8FBFDF8FCFCF8FBFDFAFBFDFA +FBFDFAFCFEFAFAFBF8FBFDFAFCFCF8FCFCF8FFFFFFF1F1ED8F8F8FBCBDBAFFFFFFFEFEFAFCFDF9 +FCFDF8FCFCF8FCFDF8FDFDFAFDFDF9FCFCF8FDFDF9FDFDF9FCFDF9FEFEFAFDFEF9FEFEFAFCFDF8 +FDFEF9FCFCF8FEFEFAFEFEFAFEFEFAFEFEFAFEFEFAFEFEFAFEFEFAFEFEFAFEFEFAFEFEFAFEFEF9 +FEFFFBFAFFF4FEFEFAFDFEF7F5FFF2EAFCFF7897B07B957BC1DBBEB3CFA8B5CFA0BBD7A2B6D399 +C2D2A4C7D4AAC1CDAABFCDA7BDD0A3BAD29FBBD2A9BBD1A8BBD1A8BBD1A8BBD1A8BBD2A9BAD1A6 +BAD1A5BAD0A5BDD3A8BDD3A7BDD3A8B8D3A5B8D2A6B8D3A6B7D2A5B8D2A5B8D2A5B7D1A4B7D4A8 +B9D4A9B7D3AAB7D4ABB8D2ABB8D4A8B8D0A3BBD3A2C3D9AFB7C9A8BECFB5E3F0D6F5FFEBF3FBEF +F1F6F2F9FCFBFCFFFEFEFEFBFEFEFBFEFEFCFBFBFAFCFBFAFBFBFAFDFDFBFFFFFDFFFFFFFFFFFE +FFFFFDFFFFFFFEFEFBFEFEFDFEFEFBFDFDFCFDFDFCFDFDFAFFFFFEFEFEFCFFFFFDFDFDFBFDFDFC +FEFEFBFEFFFEFFFFFFFBFFFCFFFFFFFDFFFEFAFFFBFDFFFDFDFFFCFDFFFCFFFFFEFFFFFDFDFFFD +FCFCFAFDFDFAFDFDFAFFFFFFFFFFFDFFFFFEFCFEFBFCFEFBFDFFFDFCFEFCFFFFFEFAFDF9F5FBF8 +FFFFFFF8FEFBFBFFFDFDFFFEFDFFFFF8FFFAF8FFFBF9FFFBF5FCF8F8FEFAFBFFFDF6FCF8FBFFFD +FAFFFCF9FFFCFAFFFBF7FDF9FAFFFCFBFFFDFAFFFCF7FEF9F7FEFAF7FDF9FCFEFBFCFEFBFCFEFB +FCFEFBFCFEFBFBFDFAFCFEFBFBFEFAFFFFFFFDFFFCFDFFFCFBFDFAFBFDFAFCFEFBFDFFFCFDFFFC +FEFFFDFEFFFDFBFDFAFDFFFCFCFEFBFBFEFAFCFEFAFBFDFAFBFDFAFBFDFAFBFDFAFCFEFCFAFCFA +FDFFFDFBFDFAFBFDFAFBFDFAFDFFFDFCFEFCFCFDF9FBFDFAFBFDFAFCFDFAFBFDFBFDFFFDFDFFFD +FBFDFAFCFEFAFCFEFAFBFDFAFBFDFAFBFDFAFBFDFAFBFDFAFBFDFAFBFDFAFBFDFAFBFDFAFCFEFB +FDFFFCFBFDFBFDFFFCFAFCF9FDFFFCFDFEFDFDFEFDFEFFFDFAFCF9FBFDFAFBFDFBF8FAF8FBFDFA +FCFEFBF9FBF9FAFCF9F9FCF9FDFCFBFCFDFAFBFBFAFBFBFAFBFBFAFBFBFAFAFCF8FBFDFBFCFEFC +FAFCFAFAFCFAFAFCFAFEFEFDFBFBFAFCFCFBFCFCFAFDFDFCFBFBF8FBFBF9FDFDFBFEFEFCFDFDFB +FEFEFCFEFEFCFBFBF8FBFCF9FBFBF8FFFFFDFDFDFAFCFDFAFCFCFAFDFDFCFDFEFBFCFBF9FAFAF8 +F8F8F5FCFAFCFBFAFCFCFAFCFBF9FBFBF9FCFCF9FCF5F5F2F9FAF7FFFFFFFAFAF7F8F9F7F9F9F7 +FDFDFDFEFEFDFCFCFCFDFDFCFEFEFDFDFDFCFCFCFCFCFCFCFCFCFCFEFEFDFEFEFDFEFEFDFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFBFBFBFEFEFEFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFDFDFDFDFDFDFDFDFEFBFDF8FDFDF8FCFDF8 +FBFDF8FDFFFAFDFEF9FDFEFAFDFFFAFDFFF9FFFFFBFCFDF8FFFFFBFCFDF7FDFFFAFFFFFBFBFDF8 +FDFDF8FCFDF8FEFFF9FDFFFAFDFFF9FDFEF8FDFEF6FDFFF6FAFBF5FAFCF6FAFBF5FEFFF9FCFCF6 +FEFFF9FCFDF5FDFEF5FEFFF7FAFBF4FFFFFFFFFFFAFBFBF5FCFDF5FEFEF6FEFFF6FEFFF6FEFFF7 +FCFCF5FCFDF5FCFCF5FEFFF6FEFFF6FDFFF6FDFEF6FFFFF8FDFEF7FCFDF4FEFFF6FCFDF5FEFFF6 +FEFFF6FEFFF6FEFFF6FEFFF6FEFFF6FEFFF6FEFFF6FEFFF6FCFFF6FDFFF6FEFFF6F7FFF6FBFDFA +FBFFF9F3FFF2E8FDFF7597AF839B80DAF0D4D6EBCBD2E4C1D0E2BACFDFB6D3DAB8D7DBBEDBDCC2 +DFE4CAD3E2C1CFE5BDD1E1C4D2E1C4D2E1C4D1E0C2D1E0C2D1E0C2D4E3C4D3E3C2D5E3C4CFDFBE +D0DFC0CFE0BECFE3C3CFE3C1D0E3C3CEE1C0CEE1C1CDE2C0CCE3C1CCE3BFCCE2C2CBE0C3CDE2C6 +CDE3C9CFDFC2D0E0C2D5E5C5DAE7CCD0DBC6DFE8D5F5FFEDF9FFF3F6FAF4FDFFFFFDFDFCFCFCFA +FBFCFAFCFCFAFBFBFAFEFEFBFEFEFBFEFEFBFBFBF8FDFDFAEFEFEDF0EFEEFEFEFCD2D2D2FFFFFF +FAFAF7FDFDFCFAF9F8FAFAF7F9F9F7F9F9F6FBFBF9FBFBF8FDFDFBFCFCF9FCFCF9F7F9F6E1E2E1 +F7F8F7D3D3D2E8EAE9FDFFFDF6F9F5FAFBF9F8FBF8F1F1EFEEEDECF9FAF8FDFCFAFAFAF8FFFFFF +C5C5C6F1F2F1E3E3E2FEFFFFF7F9F5F8F9F7F7F9F5F4F7F3FAFBF9F3F7F5F8FDFADBDCDCFFFFFF +DFE2E0DBDCDBFCFFFEF7FCF9F7FCF8F7FCF9F6FBF9F2F9F5F9FDFBF3F8F5F3F9F6F8FFFAF9FFFD +FBFFFDF4F9F6F7FEFAF6FDF9F5F9F7F7FBF9F8FEFBF7F8F5FBFCFAF7F9F6F9FBF8FBFCFAFAFCF8 +F9FAF8FFFFFFDCDDDCFFFFFFF7FAF6FBFCFAFBFCFAFAFDF9F9FAF8FAFBF9F3F5F2F6F7F5FDFCFC +F5F7F4F9FAF8FBFBF9FAFDF9FBFCF9FCFEFAFCFEFAFCFEFAFAFCFAFCFEFAFAFCFAFCFEFAFCFEFA +FCFEFAF9FBF7FAFCF9F9FBF9FCFEFAFBFEFAFBFEFAFBFEFAFBFCFAFBFEFAF9FBF9F9FCF9F9FBF9 +FCFEFAFCFEFAFCFEFAFCFEFAFCFEFAFAFCFAFDFFFBFAFDF9FDFFFBFAFCFAFAFCFAFCFEFAFAFCFA +FCFEFAFAFCF9FDFFFBFBFEFBFBFEFBFDFFFBFDFFFBFDFFFBFBFDFAFCFEFAFAFCFAFDFFFBFDFFFB +FDFFFBFCFCFAFDFCFAFDFCFAFDFCFAFDFCFAFDFCFAFDFFFBFDFFFBFDFFFBFDFFFBFDFFFBFDFFFB +FBFBF8FDFDFAFDFCFAFDFCFAFCFDFAFDFDFAFDFCFBFDFDFBFBFBF9FBFBF9FBFBF9FBFBF9FCFCFB +FCFCFAFCFCFAFAFAF9FCFCFAFCFCFAFAFAF8FCFCF9FDFDFBFEFEFCFEFEFCFEFEFCFEFAFFFEFBFF +FDFBFFFFFDFFFFFDFFFFFCFFFFFFFFFCFCFAF6F6F3FFFFFDFDFDFBFDFDFAFDFDFDFBFBFCFBFBFC +FEFEFEFEFEFDFEFEFEFBFBFCFDFDFCFDFDFCFBFBFCFCFCFCFBFBFCFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFDFDFDFEFEFEFEFEFEFBFBFBFDFDFDFBFBFBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFBFBFBFBFBFBFBFBFBFEFEFEFEFEFEFEFEFDFCFDF8FCFEF8FCFEF8FCFEF8FCFDF8FCFDF8 +FCFDF8FCFDF8FCFCF8FDFFF9FDFFF9FDFEF9FEFEF9FDFEF9FDFEF9FCFDF8FCFEF8FCFDF8FCFDF8 +FCFDF8FCFCF7FEFFF9FDFEF7FDFEF4FEFEF9FEFEF9FEFFF9FCFCF6FCFDF7FCFDF7FCFEF6FCFDF5 +F9FAF2FDFFF6F7F9F0FDFEF6FCFEF5FDFEF5FBFDF5FBFDF5FCFDF5FBFCF5FEFFF6FEFFF6FEFFF6 +FEFFF6FEFFF6FEFFF6FDFFF6FCFFF6FDFFF6FEFFF6FEFFF6FEFFF6FBFCF5FBFDF5FBFDF5FBFDF5 +FBFDF5FBFDF5FBFDF5FBFDF5FBFCF4FFFFF8FFFFF7FCFDF4FAFFF9FDFCFBFDFDFAF8FFF8E9FCFF +7796B398AA93F3FFECF4FFEDF8FDEDF8FDEDF8FBECF8F7E7FAFAEEFCFAF2FBF9EFF9FDEFF9FFEE +F4FCECF6FDEDF5FDECF9FEF0F9FEF0F9FEF0F7FDEDF7FDEFF7FDEEF8FEEFF8FEEFF8FEF0F6FDEC +F6FDEEF7FDEDF7FCEDF7FCEDF7FCEEF4FDEAF5FDECF6FDEDF3FBEEF6FDF0F6FDF2F6FCEFF6FCED +F6FDEDF9FBEBF8FBE8FBFCE7F8FFEFF5FCF1F9FDF8FAFBFBFCFCFBFDFCFAFBFEF8FCFEF8FCFEF8 +FCFDF8FCFDF8FCFEF9F8F8F3FFFFFF7D7F7ACACAC6FFFFFF090A04FFFFFFFFFFFFFCFDF8F4F5F0 +FFFFFFFFFFFFFFFFFFF7F8F3F6F8F2FAFCF6F9FBF5FFFFFFFFFFFF626263BEBEBCABACA8D3D3D1 +FFFFFFFFFFFFFFFFFFFFFFFFB4B6B0969794FFFFFFFFFFFFFFFFFFFFFFFF939393A8A9A760615B +FFFFFFFFFFFFFCFDF9FFFFFFFFFFFFF5F6F0FFFFFFFFFFFF1D201EFFFFFFC5C6C5B7BAB7FFFFFF +FFFFFFFFFFFFFFFFFFF3F5F2FFFFFFFFFFFFFFFFFFFEFFFEF6F9F6F8FCF8F8FBF8F5F7F5FFFFFF +FFFFFFFFFFFFF8FBF7FFFFFFF3F5F2F8F9F7FFFFFFF9FBF8FFFFFFFFFFFFFFFFFFFFFFFF242524 +FFFFFFFFFFFEFFFFFFFFFFFFFFFFFFF5F6F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F9F4 +FAFBF7F9FCF6FCFEF8FBFDF8FBFDF8FBFDF8FBFDF8FBFDF8FBFDF8FBFDF8FCFEF8F9FBF7FAFCF7 +F9FBF7FDFEF8FDFEF8FDFEF8FDFEF8FDFEF8FDFEF8F9FBF7FBFCF7F9FBF7FCFEF8FCFDF8FCFDF8 +FBFDF8FBFDF8FCFEF8FAFDF7FEFFFBFAFDF7FCFEF8FBFDF8FBFDF8FBFDF8FBFDF8FBFDF8FBFDF8 +FBFDF8FBFDF8FDFFF9FCFFF9FDFFF9FAFCF8FBFDF8FAFCF8FDFFF9FCFFF9FCFFF9FDFDF8FDFEF8 +FDFEF8FDFEF8FDFEF8FDFDF8FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FCFFF9FDFDF8FDFEF8FDFEF8 +FDFEF8FDFEF8FDFEF7FCFBFBFCFDFBFDFDFBFDFDFBFDFDFBFBFBF9FDFDFFFDFDFDFDFDFDFFFFFF +FEFEFEFCFCFCFDFDFDFEFEFEFFFFFFFCFCFDFEFDFEFEFEFEFEFBFCFEFCFCFCFBFCFFFDFDFFFCFD +FFFCFDFCFEFDFEFEFEFFFFFFFCFCFCFCFDFDFCFDFCFCFDFFFCFDFFFBFBFFFEFEFFFDFEFFFEFEFF +FBFBFFFCFDFFFCFDFFFCFDFFFCFDFFFBFBFFFEFEFCFDFEFEFEFEFEFCFCFCFCFCFCFCFCFCFCFCFC +FCFCFCFCFCFCFCFCFCFDFCFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFD +FBFBFCFEFEFEFEFEFEFEFEFEFDFAFCFDFBFCFDFBFCFDFBFCFDFBFCFDFBFCFDFBFCFDFBFCFDFBFC +FFFDFDFFFCFDFFFDFDFDFBFCFDFBFDFDFCFDFEFBFCFDFBFCFDFBFEFDFBFDFDFCFDFDFBFBFFFEFA +FFFDF9FFFDF9FFFCFAFFFCFBFFFDFBFDFBFAFDFBFAFEFBFAFBFDF8FDFEF8FCFDF8FEFEFAFCFEF8 +FEFFFAFBFCF8FDFDF9FDFDF9FDFDF9FDFDF9FBFCF8FEFEFAFDFEFAFDFEFAFDFEFAFDFEFAFDFEFA +FEFEFAFEFEFAFEFEFAFEFEFAFEFEFAFEFEFAFBFCF8FDFDF9FDFDF9FDFDF9FDFDF9FDFDF9FDFDF9 +FDFDF9FBFCF8FFFFFBFEFEFAFCFDF8FCFBF7FEFAFCFFFAF8FAFFF7EDFBFF7A93B3A5B29CFAFFF2 +F8FDF2FEFCF9FFFBFEFFFAFFF9FAF2FCFBFAFFFBFFFFF9FDFFFEFCFDFCF7FCFCF4FEFCF6FCFCF6 +FFFEF8FFFDF7FFFDF9FEFDF8FEFDF9FFFDF8FDFCF8FDFCF8FEFBF8FFFBF7FFFBF7FFFBF5FFFDF8 +FFFCF8FFFCF9FEFFF5FFFFF5FFFDF8FDFCF7FFFDF9FFFEFBFFFEFAFFFDFBFAF7F1FAF7E9FFFDE8 +FFFFE6FCFFF3F9FEF7F8FBF9F7F7F9FBFAF9FDFEF9FCFDF7FCFDF8FDFDF8FBFCF6FBFCF6FCFEF8 +FDFDF9B2B2AF0101010000008F8F8C494A446D6D6A191917DFE0D9FFFFFF8F8F8904040392938F +FFFFFFF9F9F4F9F9F5FFFFFF5C5C582F2E2D3E3B3AD0D0D0827F7BD5D4D4ADABA8000001666663 +F5F7F0000000000000E3E4DF30303042423DDADBD95C5C5DB4B4B28B8D8711120E484946FFFFFF +91938F949694FFFFFF8987845656560000003736378F8E8B929190FFFFFF474745000000E1DFDE +FFFFFF484848C8C7C4000000B4B3B0FFFFFFFBFAF7FBF9F6FFFFFFA3A1A01110105D5B5BFFFFFF +373738FFFFFFFDFFFD4C4E4BFFFFFF676A66020303A7A9A89E9E9E000000212222D4D5D4969795 +060606888985FFFFFFA6A8A44D4E4B171716CCCEC8616260161815FFFFFFFBFCF7FDFEF9FBFEF6 +FBFEF7FBFDF7FCFFF7FBFFF7FBFDF7FBFFF7FBFFF7FCFFF8FAFCF5FAFCF5FAFCF5FDFEF7FDFEF7 +FDFEF7FDFEF7FDFEF7FEFEF8F9FDF5FBFDF6F9FCF6FCFFF8FCFEF7FBFEF7FBFDF7FBFEF7FBFEF7 +FCFFF9FAFEF6FCFFF9FBFEF7FBFFF8FBFDF7FBFDF7FBFDF7FCFEF7FAFDF6FAFDF6FAFCF5FDFFF9 +FCFFF8FDFFF9FBFEF6FBFEF6FBFEF6FDFFF8FCFFF8FCFFF8FBFCF6FBFEF6FBFEF7FCFEF7FCFEF7 +FBFDF6FCFFF8FCFFF8FCFFF8FCFFF8FCFFF8FCFFF8FBFCF6FBFEF6FBFEF6FBFEF6FBFEF6FBFEF7 +FCFCFAFCFDFBFDFDFBFDFDFBFDFBFBFDFCFAFCFBFBFDFBFCFCFBFCFFFFFFFDFDFCFAF9F9FBFBFB +FDFCFCFEFEFEFDFDFDFDFDFDFDFEFEFDFCF8FEFDF7FEFCF7FFFEF8FEFEF8FEFCF9FCFEFDFDFDFD +FCFCFBFCFCFCFCFDFCFCFDFCFCFDFFFCFBFFFCFBFFFEFDFFFDFDFFFEFDFFFCFBFFFCFCFFFCFCFF +FCFCFFFCFCFFFCFCFFFEFEFEFDFEFEFEFEFEFBFAFAFBFBFCFBFAFCFCFBFCFBFBFCFBFBFCFCFDFD +FCFCFDFCFDFDFAFAFAFBFAFCFAFAFCFCFAFCFCFAFCFAFAFCFDFCFCFCFBFCFBFBFCFEFEFDFEFCFD +FEFEFDFDFAFFFEFAFFFEFAFFFEFAFFFEFAFFFEFAFFFEFAFFFEFAFFFDFAFFFFFCFFFFFBFFFFFCFF +FDF8FFFEF9FFFEF8FFFFFBFFFDFAFFFEFBFFFEFAFFFEFAFFFEF9FFFFFCFEFFFDFDFFFDFAFFFDFF +FFFCFFFFFCFFFEFAFFFEFAFDFFFAFEFCFCFCFEFEFEFEFFFEFCFDFDFDFEFEFDFDFDFBFBFCFCFCFC +FCFCFCFCFCFCFCFCFCFBFBFCFEFEFDFDFEFDFDFEFDFDFEFDFDFEFDFDFEFDFDFEFDFEFEFDFEFEFD +FEFEFDFEFEFDFEFEFDFBFBFCFBFBFCFBFBFCFCFDFCFCFDFCFCFCFCFCFBFCFDFBFCFBFBFCFFFFFF +FFFDFFFCFDFDFEF8F5FFF6FCFFF7F9FEFFF7EFF9FF7E92B4A5ABA6FFFFFFFBFAF8FEFCFCFBFDFC +F7FEFDF9FCFFFAFCFEF9FCFAF8FBFBFAFDFFFCFDFFFEFAFBFEFBFAFEFBFAFDFAFAFDFAFAFDFAFB +FDFCF8FDFCF7FEFCF8FDFBF6FDFBF6FEFAF7FBF6F7FDF9FAFDFAFBFDF9F9FDF9FAFDF9F9FDFBF6 +FDF9F7FDFBF6FDFAF6FDF9F6FEFCF8FEFBFDFEFBFEFEFCFFFEFBFFFDF9FEFDF9FDFEFDFBFEFBFA +FEF8F7FFFBF9FEFAF9FEF9F8FDFBF4FDFAF4FDFAF4FEFBF4FEFBF4FEFAF4FEFDF5FFFFFF7C7975 +D7D4CEFFFFFF060503FFFFFFCDCBC868635CCBCACA6A6864FFFFFF6A655EA5A39FFFFFFCFFFFFF +7E7C78AEA8A2FFFFFF474743D3D3D46A6C6488898141423AFFFFFFA4A3A0CBC9C3C5C4BC959691 +FFFFFF000000FFFFFFFFFFFF141414CBCAC9070500FFFFFFB2B1AE8E8E869F9E978F8E8BFFFFFF +63625CD4D4D21F1F1FFFFFFF96969493938C908E91A7A6A7FFFFFF242225FCFBFC151515DAD9D9 +FFFFFF010000FFFFFFFAF8FBFFFFFFCECECE4F494BF0EFF0DAD5D09593918C8882D2D3CDA7A7A5 +8A8A83BDBDB6575754FFFFFF8B8C84ECEBE91C1C1CFFFFFF9C9C9A8A8983FFFFFF67645EC2C2C0 +9F9D99706F6CFFFFFF000000FFFFFF83827D91908AFFFFFFFAF9F3FEFBFAFBF9F8FEFCFAF9F6F5 +FCFAF8FDFBF9FAF8F6FBF9F7FAF8F6FEFCFBFEFCFAFFFCFAF9FDF9F9FDF9F9FDF9F7FBF8F8FBF8 +F7FBF7FAFDF7F9FDF7FAFDF7F9FDF7F9FDF7FAFDF7FDFAF6FDFAF6FDFAF6FDFAF6FDFAF7FDFAF6 +FDFCF7FDFBF7FCFBF7FEFCF8FEFCF8FEFCF8FCFAF6FDFAF7FCFAF6FEFBF8FDFBF8FDFBF6FEFDFB +FEFDFAFEFDFAFEFDFAFEFDFAFEFCFAFEFCFAFEFCFAFEFCFAFDFBFAFDFBFAFDFBFAFEFDFAFEFDFA +FEFDFAFEFDFAFEFDFAFEFCFAFEFCFAFEFCFAFEFCFAFEFCFAFEFCFAFEFCFAFFFAF9FFFBF9FBF9F6 +FBFDF8F9FDF8F8FDF8F5FFF8F4FDF8F2FCF6F3FDF6F3FEF7F3FEF7F5FCF7F5FCF7F3FBF6FAFFFB +F7FFF8F8FFFBF7FFFDF7FEFDF4FBFAF9FFFFF8FFFEF9FFFFFEFBF8FDFCF9FDFCF9FEFCF9FDFCF9 +FFFCFAFDFBF9FFFEFBFDFDF9FDFCF6FDFDF6FDFDF3FEFCFAFEFCFBFEFCFBFDFCFAFDFCFAFEFCFB +FDFCFAFDFCFAFDFCFAFEFDFBFDFAF9FFFDFBF6FDF9F8FEFBF7FEF9F8FDF9F8FDF9F6FDF8FDFFFB +FBFEFAFCFEFBFAFCF9FAFCF9FAFCF9FBFEF8FDFFFAFBFEF8FBFDF7FBFDF7FBFEF7FCFDFBFBFDF9 +FBFDF9FBFDF9FBFDF9FBFDF9FBFDF9FBFDF9FBFDF9FBFDF9FBFDF9FCFDFAFAFDF8FAFDF8FAFDF8 +F9FCF7FAFCF9FAFBF7FFFCFCFDF9FCFDFCFDFDFAFDFDFAFDFDFAFDFDFBFBFDFBFBFDFCFBFDFBFB +FEFEFDFCFCFCFFF9FAFFF9FAFFF9FAFFF9FAFFF9FAFFFAFAFDFDFAFCFCFAFCFCFAFDFDFBFDFDFB +FDFDFCFCF9FCFFFCFEFEFCFEFEFCFEFEFCFEFEFCFEFDFBFDFCFBFDFCFBFDFCFBFDFCFBFDFCFBFD +FFFDFEFEFDFEFFFDFEFCFBFDFCFCFDFCFBFDFCFEFAFBFEFAFBFEFAFBFDFAFCFEFCFBFCF9FBFCFA +FCF8FFFFF9FCFDFFFAF3FEFF7E92B4A3B0ABFEFFFFFCFFFEF7F7F9F7F9FDF5F9FDF8FDFDF5FBF9 +F2F8F1F5FDF5F7FCFAF7FCFEF8FCFCF9FCFBF8FCFBF8FCFBF8FCFBF8FCFCF8FCF8F8FCF9F9FCF9 +F6FBF8F7FBF8F7FCF7F7FAFBF7FCFAF7FBFAF7FCFAF7FCFAF7FBFBF7FBF7F7FBF8F6FBF8F8FBFA +F7FBF7F9FDFAF6F9FCF6FAFCF6FAFCF6F9FCF6F8FCF6F9FCF6F9FBF6FAFDF5F8FCF7FBFEF7FAFD +F7FAFEF7FBFAF7FBFAF7FBFAF7FBFAF7FBFAF7FBFAF7FBFAFFFFFF5F6261B1B4B4FFFFFF1D211F +FFFFFFD8DBD94B4F4E8B8F8D353837606461585C5BA2A5A5FEFFFFFDFEFD555958CFD0D0FFFFFF +6D6D6ED0CFCF626867BEC0BF949A994346446D7070FDFFFF8E9291808282FFFFFF0F0F0FFFFFFF +FFFFFF1B1A1BB8B9BA828685FFFFFFF8FBFA2A2E2DA8ABAB8D8F8FFFFFFF656867C2C4C41A1A1A +FFFFFF9293929CA19F383A3EF4F5F6FFFFFF85898CADAEAF1B1B1BFFFFFFFFFFFF101010FFFFFF +F8FAFDF9FCFFF2F5F59093954C4F5163676AE2E3E5FFFFFF4B4E4E888988C2C3C2F7F9F86C6E6C +515553868888FFFFFF121212FFFFFF6C6C6C5458576262624D4D4FB2B2B2A0A0A0818182FFFFFF +101110FFFFFF8F91917E8081FFFFFFF7FAFAF6F9FCF9FCFDF7FBFCF6F9FCF8FBFCF9FCFDF9F8FC +FAFAFCFAF9FCFCFAFEFBFAFDFCFAFDF8FEFEF8FEFDF9FEFEF7FDFDF7FDFDF7FDFDF9FEFDF8FEFD +F8FEFDF8FEFDF8FEFDF8FEFDFAFDFDFAFDFDFAFDFDFAFDFDFAFDFDFAFDFDFAFDFEFBFEFEFAFDFE +FBFEFEFBFEFEFBFEFEF9FCFDFAFDFDF9FCFDF9FDFEF9FDFEFAFDFDF9FDFEFAFDFEFAFDFEFAFDFE +FAFDFEFAFDFEFAFDFEFAFDFEF9FDFDFAFDFFFAFDFFFAFDFFF9FDFDFAFDFEFAFDFEFAFDFEFAFDFE +FAFDFEFAFDFEFAFDFEFAFDFEFAFDFEFAFDFEFAFDFDFAFDFFFAFCFFF7FBFEF6FDFEF5FEFEF3FFFE +F5FEFDF3FDFDF2FCFCF3FEFEF3FDFEF3FDFEF4FCFEF4FCFEF4FCFDF6FEFFF4FCFEF6FEFFF4FCFE +F5FDFEF4FDFEF7FEFEF6FEFEF6FEFFFAFDFFF9FCFFFAFDFFF9FBFEF9FCFEF9FCFEF9FCFDFBFEFE +FAFDFEF9FDFDF9FEFBF9FEFAFAFCFDFAFDFCFAFDFDF9FDFDF9FDFDF9FDFDFAFCFDFAFDFCFAFDFC +FBFDFEF9FCFCFBFEFEFCFBFCFCFCFDFBFBFCFCFCFDFCFCFDFCFCFDFCFCFDFDFBFCFDFBFDFCFBFD +FDFBFDFDFCFEFBF8FBFDFAFCFBF8FBFBF9FCFBF9FCFBF9FBFBF9FDFBF9FDFBF9FDFBF9FDFBF9FD +FBF9FDFBF9FDFBF9FDFBF9FDFBF9FDFBF9FDFBF9FDFCF9FEFCF9FEFCF9FEFDFBFFFDFBFEFDFAFE +FAFDFFF8FBFEFAFDFFF9FCFEF9FCFFF9FCFEFAFDFFF9FCFEF9FDFEF9FCFDFBFDFFFAFCFDFCFDFE +FCFDFEFCFDFEFCFDFEFCFDFEFEFCFEF8FEFEF8FEFEF8FEFEF8FDFDF8FDFDF8FCFDF7FDFEF9FEFF +F9FEFFF9FEFFF9FEFFFAFEFFF7FEFFF8FDFFF8FDFFF8FDFFF8FDFFF8FDFFFAFEFFF8FEFFFAFEFF +F8FDFFF8FDFFF8FDFFFDFCFCFDFBFCFDFBFCFDFCFDFEFDFFFDFAFBF8F9F3FDF9FAFDF6F3FFFFF9 +F6FEFF8093B2A2AFA0FDFFFAFCFAF6FDF8F5FDFAF8FAF8F6FDFEF2FCFDEEFBFEEBFCFDEBFDFEEF +FDFEF3FDFFFBFDFFFAFDFFFAFDFFFAFDFFFAFDFFFAFDFFF9FDFFF9FDFFF9FBFFF6FCFFF8FBFEF7 +FEFFFCFDFFFAFAFEF8FCFEF9FCFEF9FCFEF9FCFFF6FCFFF8FBFFF6FFFFFBFCFFF6FBFEF7FBFDF9 +FBFDFAFBFDFAFCFFFBFCFEFBFCFFFCFBFDFDFDFFFFFDFEFFFBFDFEFBFDFEFBFDFEFCFEFCFCFEFC +FCFEFCFCFEFCFCFEFCFCFEFCFAFDFAFFFFFF505151C8CBC9FFFFFF1A1C1AFFFFFFD2D4D24A4E4A +C4C6C3818383FFFFFFCDCFCDC0C1C0FEFFFFFFFFFF757775CECECDFFFFFF5A5B5ACFCECF6C6F6D +A7A8A7BFC1BEFFFFFF64666690928F9A9B9A8B8C8BFFFFFF070908FFFFFFFFFFFF161616C0C0C0 +454745FFFFFFCCCECD757675999B99929393FFFFFF3A3938C7C7C7111112FFFFFF969695989797 +7B7B77C5C5C3FFFFFF51514DE4E3E3121213FFFFFFFFFFFF0C0C0BFFFFFFFEFFFCFCFCF9E6E7E6 +C2C4BFFFFFFF969799666667FFFFFF3B3A38585654DFE0E0DEDBDAC6C5C6FFFFFF636161ADACAC +101010FFFFFF7C7C7BADADACFFFFFFBEBCBDE9E4E49C9899828080FFFFFF090909FFFFFF8F908F +838483FFFFFFFFFFFFF9FAFAFEFFFFFEFFFEFCFEFEFEFFFFFEFFFFFFFBFEFEFCFEFEFCFEFFFDFE +FFFDFEFFFDFFFEFCFEFDFCFEFDFEFEFDFBFCFDFBFDFDFBFDFDFEFCFDFCFCFDFCFCFDFCFCFDFCFC +FDFDFBFDFEFCFDFEFCFDFEFCFDFEFCFDFEFCFDFEFCFDFEFDFCFEFDFCFFFDFEFFFDFEFFFDFEFFFE +FCFEFCFCFEFCFEFFFCFBFDFBFBFDFBFCFDFCFDFCFCFDFBFDFDFBFDFDFBFDFDFBFDFDFBFDFDFBFD +FDFBFDFDFBFDFDFCFDFDFCFDFDFCFDFDFCFDFDFBFDFDFBFDFDFBFDFDFBFDFDFBFDFDFBFDFDFBFD +FDFBFDFDFBFDFDFBFDFCFDFDFDFDFDFBFCFDF8FAFBF8FCFCF8FCFCF8FCFCFAFBFBFAFBFBF7F9F9 +F9FBFBF9FBFBF9FBFBFCF9FBFAFAFBFAF9FBFDFBFCFAF9FBFDFBFDFBFAF7FDFDFAFDFDFAFBFBF8 +FCFBF9FBFBF8FBFDFDFBFDFDFCFFFEF9FAFBF9FBFBF9FAFCFBFCFDFDFFFEFCFDFDFBFCFBFBFEFA +FBFEF8FBFDF8FBFDF7FBFDF8FBFEF8FBFEF8FBFEF8FBFDF8FBFDF7FBFDF7FFFFFBFCFEF8FFFFFB +FEFEF9FFFFFBFEFDF9FFFEFAFFFEFAFEFEFAFFFAF7FFFBF7FFFBF7FFFDFAFFFCF9FFFEFAFFF8FA +FFFAFBFFF9F9FFF9FAFFF9FAFFF9FBFFF9FBFFF9FBFFF9FBFFF9FBFFF9FBFFF9FBFFF9FBFFF9FB +FFF9FBFFF9FBFFF9FBFFF9FBFFF9FCFFF9FBFFF9FBFFF9FBFFF9FCFFF9FBFAFEF8F9FDF7FCFEF9 +F9FAF5F9FBF6F9FAF6FDFFF8FBFEF6FBFEF7FCFDF7FDFEF8FCFDF7FCFEF8FDFEF7FDFEF7FDFEF7 +FDFEF7FEFEF8FBFEF6FBFEF6FBFEF6FBFFF7FBFFF7FDFFF7F6FDF7F9FFFAFAFFF9FAFFF9FAFFF9 +F9FFFAFBFDF7FBFDF8FBFDF8FBFEF8FBFEF8FBFDF8FDFFFAFCFFF9FDFFFAFBFEF8FBFEF9FBFEF8 +FFFBF9FFFCF9FFFCF8FFFCFAFFFEFAFFF9F8F9FBF1FFFEFAFEF8F3FCFEF1F0FCFF7A8FA9A8AE9C +FFFFF5FEFCF1FFFAF2FFFAF3FEFCF4FEFAEAFEFAE7FEFAE3FFFEE7FFFEE9FFFCECFEFDF1FEFDF2 +FFFDF2FCFCF1FDFCF1FCFCF1FFFDF2FEFDF2FEFDF2FFFDF2FFFDF2FFFDF3FEFDF2FEFDF2FFFDF2 +FFFDF2FFFDF2FFFDF2FCFCF2FDFCF2FDFCF2FCFCF2FEFCF2FCFCF2FFFEF5FFFEF5FFFEF5FCFCF3 +FDFDF3FCFCF2FFFDF8FEFCF7FEFDF7FFFDF7FFFDF7FFFCF7FCFBF7FDFBF7FCFBF7FFFDF8FFFDF8 +FFFDF8FEFBF8FFFFFFD2D1CC0A0803B2B1AB3A3833FFFFFFDBD9D7494744FFFFFF5855502C2A25 +4B4945FFFFFAFDFBF7FEFDFBF2F0ED4F4C47474540454240DBDCDC716D68CAC8C77D7A77312C28 +57514DF4F3F4D5CFCB0E0805E8E7E4363333FFFFFFFFFFFF373637C6C2C168635E3F3935423E3A +F3F1EDEAE8E82E29264D47435A5450D2D0CE7D77743D373497918E8F8B88F7F5F13C362F2B251E +8C8581FFFFFF2C2C2BFFFFFFFFFFFF2D2D2BFFFFFFFEF8F2FFFAF3FDFDF788877D2B2A24514F4B +DBDAD9FFFFFFB7B2AE545150FFFFFFEEECEA5D5652342E2A706A65FFFFFF8E888526211EF7F2ED +534C49322724514743F6F4F4A297948D8886FFFFFF2D2B2BFFFFFF989693928E8DC1BEBC8D8783 +FFFFFFFFFBF7FEFBF8FFFAF5FFF9F5FFF9F5FFF9F7FFF9F7FFF9F7FEF9F6FEF9F6FEF9F6FEFAF6 +FFFAF6FFFAF6FFFAF6FFFAF6FFFAF7FFFAF4FFFAF5FFFAF5FFFAF5FFFAF5FFF9F5FFFCF5FFFBF5 +FFFBF4FFFAF5FFFCF7FFFAF5FFFBF4FFFBF6FFFBF4FFFBF4FFFBF4FFFBF4FFF9F3FFF9F3FFF9F3 +FFFAF3FFFAF3FFF9F4FEF9F4FFFAF5FFFAF5FFFAF5FFFAF5FFFAF5FFFAF5FFFAF5FFFAF5FFF9F5 +FFF9F5FFF9F5FFFAF5FFFAF5FFFAF5FFFAF5FFFAF5FFFAF5FFFAF5FFFAF5FFFAF5FFFAF5FFFAF5 +FFF9F5FAFBF5FCFAF5FCFAF5FCFAF5FEF9F5FDF9F5FEF9F5FEFAF6FEFAF6FEFAF5FEFAF5FEFAF5 +FFF8F5FFF9F5FFF8F6FEF8F5FFF8F5FEF8F5FFFBF2FFF9F3FFF9F2FFFCF5FFFAF4FFFBF4FFF9F4 +FFF9F5FFF9F5FFFAF5FFFAF5FFF9F5FFF9F6FFFAF5FFFAF4FFFAF2FFFAF1FFFAF0FFFAF0FFFAF0 +FFFAF0FFFAF0FFFAF0FFFAF0FFFAF0FFFAF0FFFBF0FFF9F0FFF9F0FFF9F0FAFDF0F9FDF0F9FDF0 +F9FDF0F9FDF0F9FDF0FBFCF0FAFCF0FAFCF0FAFCF0FAFCF0FAFCEFFAFBF4FAFBF4FAFBF4FAFBF4 +FAFBF4FAFBF5FAFDF0FAFDF1FAFDF1FAFDF1FAFDF1FAFDF1FAFDF1FAFDF1FAFDF1FAFDF1FAFDF1 +FAFDF1FAFDF1FAFDF1FAFDF1FAFDF1FAFDF1FBFCF1FFFBF0FFFAEEFFFCF1FFFAEFFFFAF0FFFCEF +FEFAECFFFCEEFEFAECFFFCEDFFFBECFFFCEDFCFAEBFEFAEBFDFAEBFDFAEBFDFAEBFDF9EBFFFCEF +FFFCEFFFFCEDFFFDF0FFFCF0FFFDEEFFFDF1FFFDF2FEFDF2FEFDF2FEFDF2FEFDF2FFFDF2FFFDF2 +FFFEF2FFFBF0FFFBF1FFFBF1FFFBF0FFFBF0FFFBF1FFFBF0FEF8EEFFFBF2F7F9ECF8F9EEF8F9EE +F8FAEDF8FAEDF9FAEDF7FDF8F9FAFBFEFDFDF5FEF5EDFFFF7E98B8A5B2ADFFFFFFFEFFFCFDFFFE +FAFFFFF5FFFFFFFFFEFFFFFDFFFFFAFFFFFAFFFFFCFFFFFDFEFFFEFEFFFEFEFFFEFEFFFEFEFFFE +FEFFFEFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFDFEFFFEFEFFFEFEFFFEFEFFFEFEFFFE +FEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFF +FEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF +FFFFFFF0F2F0FBFDFCF2F5F3FFFFFFFEFFFFF0F4F2FFFFFFFFFFFFE8E7E5FFFFFFFFFFFFFFFFFF +FEFFFFFFFFFFFFFFFFF2F1F0FFFFFFFFFFFFF2F7F7FEFCFAFFFFFFF0EFECFFFFFFFFFFFFFFFFFF +FAF5F4FFFFFFF0EFEEFFFFFFFFFFFFEEECEBFDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFC +FFFFFFFFFFFFFBFFFDFFFFFFE4E8E6FDFFFDF5F9F7FFFFFFFFFFFFF3F6F2FFFFFFFFFFFFE8E8E4 +FCFFFFFFFFFFEAEAE6FFFFFFFBFFFEFBFFFEFFFFFFFFFFFFEFEFECFFFFFFFFFFFFF9FFFF90989D +959798FFFFFFFFFFFFFFFFFFEBEAE9FFFFFFFDFFFFFFFFFFE7E9E6FFFFFFFFFFFFE9EAE9FFFFFF +FFFFFFF4F8F8F9FBFAFFFFFFEFF1F0FFFFFFFAFCF9F7F7F7F7F9F9F0F1EFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFEFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFEFFFF +FDFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFCFFFEFBFFFEFBFFFEFBFFFEFBFFFEFAFFFE +FDFFFEFCFFFEFCFFFEFCFFFEFCFFFEFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFE +FCFFFEFCFFFEFCFFFEFCFFFEFCFFFEFCFFFEFCFFFEFCFFFEFCFFFEFCFFFEFCFFFEFCFFFEFCFFFE +FCFFFEFCFFFEFCFFFEFCFFFEFFFFFDFFFFFCFFFFFDFFFFFDFFFFFDFFFFFDFFFFFBFFFFFCFFFFFC +FFFFFCFFFFFCFFFFFCFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFBFFFFFCFFFFFCFFFFFD +FFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFD +FFFFFDFFFFFDFFFFFDFFFFFDFFFFFEFFFFFEFFFFFEFEFFFFFDFFFFFEFFFFFCFFFEFCFFFEFCFFFF +FAFFFFFEFFFFFFFFFFF7FFFFEEFFFF7B9BC37C98A7CCE3F1C9DFEEC6E4F1BEE5F1B9E9F2C9DDF4 +C9E0F2C7DEEECCE3F2CBE1F5CCE1F8CAE0EDCAE0EECAE0EECBE2EFCBE2EFCBE1EFCAE0F2CAE0F2 +CAE0F2CAE0F2CAE0F2CAE0F2C9E1EECBE1EDC9E1EECAE1EECAE1EDCAE0EEC9E0F1C9E0F2C9E0F2 +C9E0F2C9E0F2C9E0F2CDE3F2CCE3F2CDE3F3CBE1F1CBE1F1CCE2F2C9E1EDC9E1ECC9E1ECC9E1EC +C9E1ECC9E1EBCBE1F1CAE1F1CAE1F0CCE2F2CCE2F0CDE2F3CAE1EFCDE5F4CAE1F1CDE3F2CCE3F2 +CDE4F3CDE4F3C9E0EECFE6F5C8DFEFCFE6F4D5EBF9C9DFEFCEE5F2CFE5F4CBE2F0CFE7F5CCE2F1 +D2E7F5CCE0F0D4E9F5C9DEEECCDFF0CADFECD5E5F6CFDFF0CCDCEDD1E1F3D3E1F2CDDFEFD6E7F7 +CCDDEECCDEF0D8E6F7CEDFF0D4E5F6CBDBECD1E2F3D1E1F2CCDDEFD5E5F7D4E2F4C7E4F0C6E1EF +C4E0EDCAE5F2C8E4F2C7E4F2C7E2F0C8E4F2C7E2F1C7E3F0C7E4F3C9E3F1C6E4F4C8E4F3CBE5F3 +C0DDEBC6E2F1C7E4F1CAE0F2CCE1F3CFE4F2CEE7F0D4ECF19DB7BC325160D4EFFCC7E2F0C9E7F3 +C6E3F0CBE4F2C5E1EFC5E1EFC6E2EFC7E2F0C6E3F0C3E0EEC9E3F1CBE5F3C8E1F0C8E3F1C6E0ED +C7E0EFD5E6F5CCDDEFD3E3F4D1E2F4CFE0F1D3E5F6CDDDEBCCDCEACDDDECCBDCEACBDCEACCDDEA +C6E1EAC5E0EAC4DFEAC8E2EDC8E1ECC6E1ECC8E2ECC9E2ECC9E2ECC9E2ECC9E2ECC9E2ECC9E2EB +C9E2EAC9E2EAC9E1EAC9E2EAC8E0EACEDFEBCEE1EBCEE1EBCEE0EBD0E1ECCEE0EBCEE1EBCEE0EB +CEE0EBCEE1EBCEE1EBCEE1ECCFE1ECCFE1ECD0E1ECCDDFEACDDFEACFDFEAC4E4EBC5E2EBC5E2EB +C5E2EBC5E2EBC5E2EBC4E2EBC5E2EBC5E2EBC5E2EBC5E2EBC5E2EBC4E2EBC5E2EBC5E2EBC5E2EB +C5E2EBC5E2EBC5E2ECC5E2ECC5E2ECC5E2ECC5E2ECC6E2ECC7E1ECC8E1EDC9E0EDCBE1EDCDDFED +CDDFEDC7E2EDC7E1EDC7E1EDC7E1EDC7E1EDC7E1EDC9E0EDC9E0EDC9E0EDC8DFECC8E0ECC8E0ED +C7DEEFC7DEEEC7DEEEC9DFF0C9DFF0C7DEEFCCE0EECCDFEDCCDFEDCBDFEDCBDFEDCBDFEDCCDFF0 +CBDFEFCBDFEDCBE0EBCBDFEBCBDFE9CBDFEFCBDFF0CBDFF0CBDFF0CBDFF0CBDFF0CBDFEECBDFF0 +CADFF0CCDEEFCCDEEFCADEEFCEDDEFCEDDF0CEDDF0CEDDEFCEDEF0CEDEF0CFDDEFCFDDF0CFDDEF +CFDDF0CFDDF0CFDDF0CFDDECCFDDEBCFDDEBCFDDEBCFDDEBCFDDEBCFDEEBCFDEEBCFDEEBCFDEEB +CFDEEBCFDEEBCFDEEBCFDEEBCFDEEBCFDEEBCFDEEBCFDEEBCFDEEBCFDEEBCFDEEBCFDEEBCFDEEB +CFDEEBCDE0EECADEEDCDE0EFCBDFEDCBDFEDCBDFEECBDFECCDE0EDCBDFECCBDFECCBDFECCCE0EC +C6E0EAC7E0EBC7E0EBC7E0EBC7E0EBC8E0EBCDDEEBCCDDEBCCDDEBCFDFEDCDDFEDCDDFEBCFDDEE +D0DEEED0DEEED0DEEED0DEEECFDDEECEE0EECDDFEECDE0EECCDDECCCDFEDCCDFEDCCDDECCCDEEC +CCDDECCCDEEDCDDFEECDDFEDCCDAEDCCDBEDCCDBEDCDDCEECDDCEECCDAEDCFDEE7D3DDECD7DDE9 +CFE0E7BCD8EB6387B61B46573D739C2D71A81F6EA6216FAD2469B81675B01472AE1675B01371AE +1372AD1372AD1675AD1473AD1473AD1473AD1473AD1473AE1473AC1473AC1573AC1674AE1674AE +1675AE1772AA1873AB1873AB1772AB1772AB1772AA1B75AD1A75AD1A75AD1B75AD1B75AD1B75AD +1873AB1772AB1670A81872AB1974AC1872AB1773A61873A91975A91874A81A75AA1874A81A75AC +1A75AE1A73B11A73B31A73B61972B71C71BA196FB91C71BB1A70B91D73BB1C72BB1971B91A73BB +1971B91C74BC1871BA1A73BC1A6FB81A6FB91A6FB9196EB71A6FB8196EB71A73B51A73B51570B1 +1B75B61A74B61973B61D70B51F71B82072B9196CB21B6EB41B6CB51971AB1C74AD1972AA1870A9 +1A72AB1871A91970AA1870A91770A91970AA176FA81770A81B6FAE1C71AE196EAA1F6FAE1E6CAA +216FAD266DAA256AA7286EAC246AA7246AA7266BA7216CA7216CA71F6AA62973AF236DA92872AE +1C6AB31E6CB41E6DB31A69B11E6BB42B78C3307FBD236FAD206DAA1C6AA31E6CA41D6BA4226AA2 +236AA3236AA3236AA3236AA3246AA32369A32468A12469A22467A2266CA52467A31A6BA31B6CA2 +18699F1B6C9F1B6D9E1B6C9D1A6D9F1A6EA01A6EA0196C9F196C9F196C9F1B6A9D1C699D1C6B9E +1D679D206A9F226BA21F6A9F206A9F206AA01E699E1E699E1E699E1E699D1E699F1E699D206AA1 +206A9F216CA11B6A9A1967981968981866971968981866971A68991A68991A6898196898166696 +1A68981764A01765A01764A01865A31864A41865A31F60A81F62A61F62A61F62A61F62A61F62A6 +1D61A61E61A61E62A61C60A51C60A51C60A51F62A61F62A61F62A61F62A61F62A61F61A61F63A5 +2063A21D60A11F63A31F62A31F62A31C66971E6597206397235F952660982A60992F5E952E5E96 +2E5E962E5E962E5E962E5F962F5B992F5B982F5B972E5C952E5D922E5D932D5B992F5B9A2F5B9A +2D5B982D5B992D5A99285D95295D95295C952C5C962D5A952F5D982E5D912E5D912E5D912F5E93 +2F5E92305E92325D90325E90325E90325E90325E90335E8F2F5F93305E91325E90335D8E335E8E +365C8C325F8A335E8A335E8A325E8B325F8A2F5C8833608C305D88335F8C315D89315D89315D89 +325D88325D89325D89325D89325D89325D89325D88325D88325D88325D88325D88325D88325D88 +325D88325D88325D88325D88325D88325D88325D88325D88325D88325D88335D882E5E8E2F5E8E +2E5D8E305F8F2F5F8F305F902D608D2D608D2E608D2E608D2E608D2E608D2D60872D60862E6087 +2C5E842D5F862B5E84335C86335B85335B86325B84325B84335B84385988365888365888365888 +365888385988345987355A89335887365C8A345A88325786355C89355A89355B89345A88375E8B +315886335987345987335986345A87325986395F8D3F57883553783F63813F6588325A8A214B84 +02425A0F558702569600599600569B0053A40056A20053A00055A20055A20055A20055A30055A2 +0055A20055A20055A20055A20055A20055A20055A20056A20054A00054A00054A000539E00549E +00549E00549E00549E00539E00559F00559F00559F00559F00559F00549F00559F00559F00539D +00529D00549E00529D00549B00549D00559E00549C00559D00549C00579B00569A00569A00569A +00569A00569A00559D00539C00559E00519A00549D00529B00559F00559E00559E00559F00539C +00569F00539D00549D00549D00539D00559E00539C0055A30054A20052A00054A20053A20054A2 +00549A00549B01559C00519800529900529900529E00519D00539E00529D00529D00529D00519C +00519C00519C00519C00519C00529D004F9D004E9C0152A1004D9C02509E004D9D004F9C00509C +00519C004E9B004E9B004E9B004F99004F9A004F99004F9B004D9A004F9A004E97004E97004E97 +004E97004F98004D96024E9F004A9A004B99004C99004C97004C96004F96004E96004E96004E96 +004E96004E96004C95004D96004D96004D96004F97004D96024C96014A94004992014A91014B90 +004C8F004B94004B93004A93004B93004B93004B93004B93004C93004B93004993024A92014892 +01489201489201489200479100479100479100479100479100469101499301489302499300478A +004489004589004388004589004488004286004286004285004589004386004589004584004584 +004585004585004586004686004484004484004484004484004484004484004584004484004484 +004483004583004583004484004484004484004484004484004384004486004485004284004284 +004283004285004389004086003E84003D84033E86063D88004082004083004083004083004083 +004083013D85013E85013E84013F83013F81003F81034183024084024084034185024085024084 +063E83063F83073E83083D84063A80063880093D80093C80083C800A3D81093D810A3E8209387C +0A3A7C093A7C093A7C0A3A7C0A397C063B7F093A7F09397D0C3B7C0D3B7B0D3A7B0B3C7A0B3C79 +0B3C790D3D7B0C3D7A0A3B780B3B7A093A770B3B790B3C7A0B3B7A0B3C7A0E3B760D3B760D3B76 +0D3B760D3B760D3B760D3B770D3B770D3B770D3B770D3B770D3B770D3B770D3B770D3B770D3B77 +0D3B770D3B770D3B770D3B770D3B770D3B770D3B770E3C770B3E730B3D720B3E72093C70093C70 +093C72093C6F0B3C6F0A3C6F0A3C6F0A3C6F0A3C6F0D3D760C3C740C3D750A3C740C3D760B3C74 +0F3C740E3A740E3B750E3B740E3B740E3B75123B6E113B6D113B6D113B6D113B6D113B6D103B6D +113D6F103B6E0F3A6C0F3B6C0D396A0C376A0C376A0B37690D396B103C6E113C6F103B6E103B6E +0F3B6D123D700D386B13407114346A103362153A650D38620B366B14407F004A71085B9B0361B3 +0060B00061B1005EB9035AB30158B2045AB40158B20158B20358B30058AF0058B00058B00158B0 +0158B00158B00058B00058B00058B00259B00259B00159B1065AB0045AB0045AB00459AF0459AF +0459AF055AB0055AB0055AB0055AB0055AB00459B0065BB1055BB10358AE0256AD0358AE0256AD +0459AD065AB0075DB10458AE065AAF0458AE065BAF055BAD055BAB055BA9055CA7055CA6015DA9 +005BA7025DAA005BA8035EAA025DAA055CAA055BA9065BA9035AA80157A6045AA9005CA8005CA8 +005BA8025DA9035EAB015DA8055BB10559AF0257AE0258AE0258AE0258AF015AA6015AA7015AA7 +0059A60059A60058A50559B00255AB0559B00458AD0458AE0458AE0256AC0357AC0357AC0357AD +0357AD0456AD0056AD0056AF0052AA0256AE0151AB0455AF0054A80057AD0054AB0055AA0053AA +0055AA0055A90054A90054A90055AA0056AD0055AC0053A20053A10053A10154A30153A20052A0 +0250AD014FAB014FAA0352AA0352A90351A70055A60056A70054A60054A60055A70056A70053A6 +0054A60054A60054A60055A70054A60851A70550A5044EA3044FA0044F9E044D9D0150A20350A1 +034FA10451A40451A30351A20153A40352A40353A4024FA2034FA2014C9F014D9F014D9F014DA0 +004B9E004C9E004C9E004C9F004C9F004C9F014D9F014D9F004CA1054B9C02499A03499B014899 +03499B01489902499A02499A02499A03499A01469903499B014992014993014A91014A90024B8F +034C90024C8C024C8D024C8D024C8D024C8D024C8D004B8D024C8D024C8D024C8E024C8E024C8E +014B8D024C8D024C8D024C8D024C8D024C8C044D91034C9102498F00478D00498D01488D004796 +034999084C9C0446960747990A489B004A94004A95004A95004A96004A96004A96014A98024A97 +024996014A95014B94034C9300498F004990004990024B91014B9102499104488E05498E064890 +03448C05458D0C489003418D04438D04438D06449006448E06448E08428D08438D08438D08438D +08438D08438E06439107438E07418E0C44900D448E0D448E0B458E0A458E0B458E09448C09438B +0641890B458D08438B0A458D08428B08428B08438C0A41870B43870B42870B42870B42870B4287 +0B42870B42870B42870B42870B42870B42870B42870B42870B42870B42870B42870B42870B4287 +0B42870B42870B42870B42870B41870C43800D43810C42810C43810C43810C43820C437E0E4380 +0D427F0D437F0D437F0D43800D41840D41850D42850D41850F43870D41840E43870E43860D4285 +0D43860D41850D438610427E1043801043801043801043801042800E43800F44810E43800C407C +0B3F7D083D7A0C3F7A0C3F7A0A3F790F447F0D417C0C407B0D417B0C417B0D417C0A3D790D427C +083E79143B7B143E770F3D74103D760E407E0E3E8201447A0955A70759BF005ABA0057B80454BD +0361AF0361AF035FAF0360AF035FAF0361AF025EAB025EAC025FAC015DAB015DAB015DAB025FAC +025EAC025EAC025EAC025EAC025EAC035FAA035EAA035EAA025DAA035DAA035DAA015CA8015CA8 +015CA8015CA8015CA8015CA8035DAA035DAA035DAA025CA9025CA9035CAA015CA9015CAB015CAA +015CAB015CAA015DAB0159B6015BB3015AB0015BAD015BAB015CAB015FAD015FAD015FAD025FAD +005FAD015FAD015BAB015BAC015BAC015BAC035CAC025BAC015FAD015FAD015FAD015FAD005FAD +015FAE015DA5025DA7035FA7005CA6005CA6015CA6015BAC005BAD005DAD005AAC005AAC005BAC +025AA6025AA7025AA70259A60259A60259A6035AA7025AA7035AA70259A7025AA7015AA7005CA8 +005CA9005BAA015BAA0158A80053A3085AAC0355A80254A70053A60053A60053A60352A70352A7 +0352A70352A60352A50352A70053A60055A90056A80058AB0057AA0055A90053A50054AA0053A6 +0054A30054A40054A20351A00451A10351A10451A10554A30251A00650A10650A10650A10650A1 +0650A10651A100519C02529D02529B04539D03549B03569A00519B00539C00539C00529B00529B +00539B00549B00549B00539B00529B004F99004F9902519B00519B02519B00509A00509A01509A +004F98004F98004F9800519B00509A01519A024D96034E97014B94024D97024D96024D97024D97 +024D97024D97024D96024D97024C96034D9D034D9C034D9B034E9A034D96014B93004F92004E92 +004E93004C90004D91004D90004F93004E92004B8F004D91004C91004C90004E93004E92004E92 +004E92004E91004C90004994004A93004A93024C96004B96004B95024C90004C8F014B8E034C8F +044B8F044A8F064A8D054A8D054B8D03498C04498C04498B06488F06488E06488D06488C06498B +06498A064986064986064986044785064987074B88014D86014C87024B87044C88034A86014885 +054C89044B89054B8903498703498802498804488804488804488804488804488804488806498D +06498C074A8B0748880948870B4886084889074888074888064786064788044585054686054686 +054685054686054686064686074680084681084681084681084681084681084681084681084681 +084681084681084681084681084681084681084681084681084681084681084681084681084681 +0846810848820B43870944870944860944860944860943870E45860A42830E45860B42850B4485 +0B42850B457F0B457F0B457F0D45810A447E0D458108447E0946800B488109457F0B4881094580 +0B44860C43850C43850C43850C43850C44850944840B45860A4484064183084383084384084382 +084382084382064282084382084382054181074181054181084382084382084482113E83103F81 +0E41800D3F800D3F820B3E850143760A55A70658BC0158B90258B30855B70060AB005EAC005FAC +005FAC005FAC005EAD0060A90060A90060A9005EA8005FA8005EA80060A90060A90060A90060A9 +0060A90060AA005CA5005CA6005CA5005EA7005EA7005DA7005EA7015EA6015EA6015EA6015EA6 +005EA7005DA7005EA7005DA7005EA7015EA6015EA7015DA9015EAA015EAA015EAA015EAA015DAA +015CAB015DAC015CAC015DAC015CAC005CAC015CAB015CAB015CAB015CAB015CAB015CAB005CAB +015DAC015DAC015DAC015DAC005CAB015CAB015CAB015CAB015CAB015CAB015CAC005EA6005EA6 +015EA6005DA5005DA5005EA60058A90058AA0058AA015AAB015AAB0159AB005BA3005BA4005AA4 +005CA5005CA4005CA50059A20059A30059A2005AA4005AA40059A4005BA6005AA5005AA60055A2 +0157A60358A60358A70355A60153A40154A60154A50153A50252A50352A50352A50352A50352A5 +0353A60054A60056A90056A90053A60054A70051A40154A80051A40155A60052A30054A20055A1 +03529F0352A003529F0553A2024F9E0553A204519F0551A00551A00551A00551A00651A000539B +00539B00549900539900549800549600549A005499005499005499005499005399005499005499 +00539900529A004F97015097015198015198025198005097005097005097005098005097005097 +015097005097015098014E95014E96004C93004D95004D94004D94004D94004D94004D94004D94 +004D94004D95004B9F004C9D004C99014D97014F94004C91014C94014C95014D95004B93014C94 +004C93044A95034C95004A92024B94014A94024A93024D95014C95014D95014D95014D95004A93 +024992024993024892044B94034A94034A93034C8B034C8C034C8C024C8C014C8C024D8B064A89 +074A8A074B8A05498906498906498806488C08488B084988084887084987084986084984084984 +074984094A85074983044681034C87034B87054B88024584054886084B89074983074985074985 +0548840648840648830648850648850648850648850648850548850848890848890948870B4886 +0B47840D47850948860A48870A4887094785084685074583084685084684084684084684084685 +08458608477E09467F09467F09467F09467F09467F09467F09467F09467F09467F09467F09467F +09467F09467F09467F09467F09467F09467F09467F09467F09467F09467F09467F0A467F0B4485 +0B43850B43850B43850B44850B42860D437F1146840D43810E44810E44810E43810E447C0E447D +0E447D0D437C10467F0D427C1247800E447D0D427A10467F0C417A10457F0E42840F42840F4284 +0F42840F42840F42840B43840D44850C43840941810A42820A41830A437B0A437D0A437D0A437D +0A437D0A437D09427C09437C09427C0A437D0A437D0A437D0E40800C3F810F3F800E3F800D4080 +0E407F01466E0559A10157B8005CB7005BAD045AAE005EB0005EB1005DB0005DAF005DB1005DB0 +0060B00060AF0060AF005EAE005FAE005EAE0060AF0060AF0060AF0060AF0060AF0060B0005DAB +005DAC005DAC005CAB005CAB005CAB005EAD005DAC005EAC005DAC005DAC005EAD005CAB005CAB +005CAB005EAD005DAC005EAC005CB1005DB0005DB0005DB0005DB0005CB10060A2005FA30060A7 +005EA8005FAC005FAC005BA8005BA9005BA9005BA9005BA9005BA8005FAB005FAA005FAA005FAA +005FAA005FAB005BA8005BA8005BA8005BA8005BA8005BA9005EB0005EB0005EB0005BAE005DAF +005CAF015AAB0059AB0059AB0059AB0059AB0059AB005DAB005CAB005CAB005CAA005CAA005CAB +005AA9005AA9005BA90058A8005AA80059A80057AA0157AA0056A90055AA0355AB0456AB0058AF +0056AC0055AA0057AC0057AB0057AB0053AD0054AD0054AD0054AD0054AD0054AC0051A60354A8 +0255A90255A80154A70052A6024FAE0351B00251AC0150A90250A90252A80055A50054A40055A5 +0054A40056A80054A40053A50053A40053A50053A50053A40054A60051A00053A10053A000519C +00539B00519A00549F00549F00549F00549F00549F00539F00519F00539F01529F0251A0004D9C +014D9D024F9E024F9E034F9F004D9C014E9D014E9D024F9F024F9E024F9E014D9D014D9D014F9D +014C9C024C9C004A9A014D9C014B9B014C9B014C9B014C9B014C9B014B9B014D9B014C9D00499E +004B9B004A97024F96024E91004C8E034B95034B96034D96024A95024A95004A95054C96054A96 +024794054A95044995044995034D96034B96034B96034B96034B9600499405488F05498F05488E +064A90064A9006498F064991064A92064891034991044B92034B91014C90024C90024C90014B8E +014B8F014B8F034991044A8F04498F044A8E044B8C044A8C044B8C034B8D054B8D00468901488C +03488C07489007478F08468E0B47910A458E08438D0B48890B47890B47890945880A46880A4689 +0A458B0A448C0A448C0A448C0A448C09448D0C468F0C45900D448E0E458D10448C1043890D458C +0E458E0E458E0D448C0D428C0A418A0C438C0C438B0C438B0C438B0C438B0D418C0C43840E4385 +0D43850D43850D43850D43850D43840D43850D43850D43840D43850D43850D43850D43850D4385 +0E43850E43850E43850D43850D43850D43850D43850D43850E42860C457F0D44800D44800D4580 +0D45800C448012447F10407C12447E0F417C11437D11427D1142821142831142821142840E3F80 +13438411408113428315448511408214428313418411407F12418012418012417F124180124380 +10427F1244811043800E407C0E407E0E407E0E41790E417A0E417A0F427A0E427A0F427A0D3F79 +0D40790D3F790F427A0E427A0F417A0C427C0D407D0D3F7F10427E11417B11417A0443650E58B8 +005FB50061A50058B90557B50062A7005EAC005FB2005DB6005FB2005FAE005DAD005DAD005FAF +005CAC005CAD005DAD005CAC005DAD005FAF005CAC005CAC005CAC0060AD005FAC005EAA005FAB +005FAC005FAC005FAA005FAB005DAA0060AD0060AC005DA9005DAA0060AD0060AD005DAA005FAB +005FAB005EAB005EAB005EAB005EAB005EAB005FAB015DAA015DAA015DAA015CAB015CAA015CA9 +015EAB015EAB015EAB015EAB015EAB015EAB015CAA015CAB015CAB015CAB015DAB005CA9025FAD +025FAD025FAD005DAB015EAC005EAC015CAB025CAB025CAB015CAB0059A90059A9005BA8005BA8 +005BA90058A7005AA70058A70059A90159A80159A80159A90159A8015AAA0056A60058A80056A6 +0058A90058A90057A90059A70059A80059A90057A70058A70057A70358AB0156A90053A70053A7 +0053A70053A90153A40153A50153A50153A50153A50053A40254A80153A70254A80051A50051A5 +0153A70053A30053A30053A40053A40053A40051A40152A30152A30152A30152A30152A30152A3 +0152A30152A30152A30152A30152A30152A40252A10251A200509E01539C01539D01529B01529B +01529C01529C01529C01529C01529C00549C01529C02529C004F9B014F99014F9B03519B03519B +01519B04509C01509A014E9902519B03519B03519B004F9A04519C014F9B014C99024E99004B97 +014D98014D98014D98014D98014D98014D98014D98014D98014D98014D98014D98004B98024F95 +024F95004C92004E94004E92004E92004E92004E92004E94004A91014C91014C91034C94004A91 +034C94004E92004E92004E92004E92004E93004C90004892014A92014A92014892014992004991 +06499303478D044B8B084D8E04498D054892054B8F05498E054B9004488D04488E044A8D054890 +054A8F054A8D05498B05488B044A8805488A06488A06488A064A8A064A8A064A8B044A8A04498A +05498A06478807468A08478A07478A07488B07488B08488B08488B08488B08488908488A08488A +08488A08488A08488B07488A08488A0A478A0A478A0B47890B448B0B47890B478A0C478A0A4589 +0A45890842870945880945880945880945880945880944890945840A45830A45840A45840A4584 +0A45840A45830A45830A45830C46850A45830A43820A45830A45830A4584094282094482094282 +0A45840A45830A45830A45830A45830A44830946840946840945840D42840D42840C4285104183 +0E43830E41831144850D40811144850E41830F43840E41821144851144850E41820F42840F4284 +0F42840D40821244860F41831041830F41830F41831143851042831041820F4383114484104283 +0E42830E40820C3F800D427D0C427D0E427D0B3F7B0B3F7C0B3F7C0C417C0C417C0C417C0B3F7C +0B3F7C0B3F7C10427F12448110427E0F417E0E427F0E427E034A670B58B4005DB30061A30059B7 +0458B50060A8005EAC005FB2005DB5005FB2005FAE005FAF005FAF005FAF005CAC005EAE005CAC +0061B1005DAD005CAC005EAE005EAE005EAE005DA9005EAB0062AF005DAA005FAC005FAC005FAC +005FAC005DAA0060AD0060AD005DAA005DAA0060AD0060AD005DAA005FAC005FAC005FAB005FAB +005FAB005FAB005FAB005FAC015CA9015DAB015DAB015EAB015EAB015EAB015EAB015EAB015EAB +015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB005CA9025FAD025FAD025FAD005CAA +015EAC005EAC025BAB025CAB025CAB025CAB0059A8005BAA005BAA005BAA005BAA0058A7005AA9 +005AA70159AA0159AA0159AA0159AA0159AA015AAA0059A90056A60059A90057A70058A90059A9 +0159A90159A80159A90056A60058A70058A60358AB0257A90053A60055A80055A70055A80252A4 +0253A50253A50253A50253A50253A40254A80254A80254A80051A50153A70153A70153A30153A4 +0153A40153A40153A40053A50252A20252A30252A30252A30252A30252A30252A30252A30252A3 +0252A30252A30252A40253A00252A200509D01539B01539C01539A01529D01529C01529C01529C +01529C01519C00549C01539C01519B05549F02509B004B9603519C03519B03519C004E98014F9B +05539D014F9A03519B014F9A03519C004E9803529C004C98024E99004B96014D99014D98014D98 +014D98014D98014D98014D98014D98014D98014D98014D97004B98024F95024F95004C91014E94 +014E94014E94014E94014E94004E94024A91014C93004A91034D94004A91034D94004E94014E94 +014E94014E94014E94004C91024892014A92014A92014A92014A92004A92044690084C9004498A +024789094D92074992064B8F064B90064B9004488D054A8F054A8D054890054A8F05498C05498C +05498B034B8806488B064A8A064A8A064A8A064A8A064A8A034A8A054A8A054A8B044587084689 +09488B08478A09488B09488B09488B09488B09488B09488B09488A09488A09488A09488A09468A +07498A09478A09488A0B488A0C478B0D458B0A478B0B478A0C478B0944880B46890843860A4589 +0945880945880945880945890845880B45840A45850A45850A45850A45850A45850A44830A4483 +0B45840842820A44840E48870943830A44830B45840842820943820842820B45840A44830A4483 +0A44830A44830B43830846850946850945850D42850D43850C41851042831042840F4184104284 +1043841042840F41831042840F41830F42831042840F42831042840F42841042840E41820E4182 +1346871040831140840F40831242861142850E3E811043841144851043840C3E800E4082114384 +0D407D0E427E0E427E0C3F7B0D417D0D417D0D417D0D417D0D417D0D417D0D417D0B3F7B124381 +0D3F7C1143800E407D10427F10427F014F660758B1005BAD0061A20059B70657B50261A8015FAC +015EB2015EB6015EB2015FAE005FAF005FAF005FAF005CAC005EAE005DAD005CAC005DAD005FAF +005CAC005EAE005CAE0061AD005EAB005EAB005EAB005FAC005FAC005FAC005FAC005DAA0060AD +0060AD005DAA005DAA0060AD0060AD005DAA005DAA005DAA005DAB005DAB005DAA005FAC005FAC +005FAC015CA9015EAB015EAB005CA9005CA9015EAB015EAB015EAB015EAB015EAB005DAA005CA9 +015EAB015EAB015EAB015EAB015EAB005CA9025FAD025FAD025FAD005DAB015EAC005EAC025DAC +025DAC025DAC025CAB0059A8005BAA005BAA005BAA005BAA0058A70058A7005AA70159AA015AAA +0059A8015AAA015AAA015AAA0056A60059A90056A60058A80059A90059A90259A90259A90259A9 +0058A70158A80058A60258AC0157AA0053A60055A80055A80055A80253A40254A60254A60254A6 +0254A60254A40254A80254A80254A80051A50153A70153A70153A30153A50153A50153A50153A5 +0053A50253A20253A40253A40253A40253A40253A40253A40253A40253A40253A40253A40253A4 +0253A00151A200509D01539B01539C01539A01539D01539D01539D01539D01539D01519D00549D +01539D02529D00509B014E99014F9A03519C03519C014F9A03519D014F9A014F9A03519C03519C +03519C02509B04529D02509B014C99024E9A004B97014D99014D99014D99014D99014D99014D99 +014D99014D99014D99014D99014D97004B98024F95024F95004C91014E94014E94004C92014E94 +014E94004E94024A91004B92004A91034D94004A91034D94004E94014E94014E94014E94014E94 +004C91024890004890014890014890014890004890054A9202488D044B8B074D8E03498E044991 +044B90044B8F054B9003488D034A8F034A8D03499003498F034A8C044A8C034A8B034B8806488B +064A8B064A8B064A8B064A8B064A8B034A8B054A8B044A890A4B8D08468904438609488B09488B +09488B09488B09488B09488B09488B09488B09488B09488B09488B09468B07498B09478B0A488B +0B488B0C478B0D468B0C478B0C478B0C478B0A45890B468A0843870A45890A45890A45890A4589 +0A45890845880B45840B45850B45850B45850B45850B45850B45820B45810944810D47840A4582 +0A45800A45810B45810B46810843800944800843800B46810B45810B45810B45810B45810B4582 +0946850A46850A45850D42850C43850D42850D43820D42810D43810D42810F46830D42810D4381 +0D43810D43810B427F0E44820F45830D43810D43810D42810F46830F44830A407E114281114281 +1142820D3F7D1244821545850D42820F45830E43820D43810C41800A417F0B417C0B427E0B427E +0A3F7B0A3F7B0A3F7B0A3F7B0A417D0A3F7B0A3F7B0A3F7B093F7B10417E1244810E407D0F417E +10427F10427F07616D065AA9005FAB0063A30059B60158B30360A8015EAC025DB2005BB2015CB0 +035EAE005CAC005CAC005CAC0060B0005DAD005DAD005FAF005FAF005FAF005CAC005EAE005CAE +005DAA005FAC005FAC005FAC005FAC005FAC005FAC005FAC005DAA0060AD0060AD005DAA005DAA +0060AD0060AD0060AD0060AD0060AD0060AD0060AD0060AD005DAA005FAC005FAC015CA9015EAB +005CA9025EAB025FAC015BA8005DAA015EAB015EAB005CA9025FAC025FAC005CA9015EAB015EAB +015EAB015EAB015EA9005CAC005CAA015EAC005BA9005AA8005DAB0059A80059A80059A80059A8 +005BAA005BAA005BAA005BAA0059A8015CAB015CAB0059A80259A90057A7025AAA0057A70057A7 +0058A80056A60059A90056A60058A80059A90059A90257A80054A50054A50054A50054A50054A5 +0053A60053A60055A80055A80055A80055A80151A30051A30051A30051A30051A30051A30051A7 +0051A50051A50153A70153A70153A70153A30153A50153A50153A50153A50053A50253A20253A4 +0253A40253A40253A40253A40051A20152A30051A20050A10050A10050A301509F0253A301539F +00529B01539C01539A01539D01539D01539D004F9900529C00539D00519B01539D01509B01509B +02509B004D9803519C03519C03519C014F9A03519C004E99004D98004D98004E99004C97004C97 +004C97014B97004D98014D99014D99014D99014D99014D99014D99014D99014D99014D99014D99 +014D99014D97004B98024F97004B92034F95004D93004D93035096004C92014E94004E94034C94 +034D94034D94004A91034D94034B94004E94014E94014E94014E94014E94004B91034A93034B93 +034B93034B93034B93024B93034891034A8F03498A024A89064D90034890054B91044B8F054B90 +03488D034A8F034A8D03499003498F044B8C01498A044B8B054C8906488B064A8B064A8B064A8B +064A8B064A8B034A8B054A8B064A8B03438509488B0B4A8D07468909488B09488B09488B09488B +09488B09488B09488B09488B09488B09488B09468B07498B09478B0A488B0744870843870B4287 +0843870843870843870843870944880A45890A45890A45890A45890A45890A45890845880B4584 +0B45850B45850842820943820842840B46820B45810B45810944810B45810B45810B45810B4581 +0B45810B45810B45810B45810B45810B45810B45810B45810B45810B4582074384074582084382 +0D44850C42850D42850D44820F45830D44810D43810D42810D43810D43810D43810D43810F4583 +0E44820B427F0D43810D43810D43810C42800B427F1248870F41811142810F4281124483114282 +0E3F7F0E44810D43810D44810B407F0B407F093F7D0C427C0B427E0B427E0B427E0B427E0B427E +0C417D093F7B0C417D0B427E0B427E0A407C1143800D3F7C1143800E407D10427F10427F15767A +045EA9005DA60061A0015BB80059B3035FA8025EAC025CB2045EB6025DB1005BAB005EAE005EAE +005EAE005CAC005DAD0061B1005DAD005FAF005FAF005CAC005DAE005CAE005FAA005FAC005FAC +005FAC005FAC005FAC005FAC005FAC005DAA0060AD0060AD005DAA005DAA0060AD0060AD0060AD +0060AD0060AD0060AD0060AD0060AD005DAA005FAC005FAC015CA9015EAB015EAB005CA9005AA7 +0260AD005CA9015EAB015EAB005CA9025FAC025FAC005CA9015EAB015EAB015EAB015EAB015EA9 +015EAC015EAC015EAC005DAB005AA8005DAB0059A8005BAA005BAA005BAA005BAA005BAA005BAA +005BAA0059A8015CAB015CAB005AA80057A7015CAC0057A70059A90059A90057A70059A90055A5 +0059A90057A70059A90059A90357A80154A50155A70053A50054A50054A50054A80055A80055A8 +0055A80055A80055A80151A30153A50153A50153A50153A50153A30153A70153A70153A70153A7 +0153A70153A70153A30153A50153A50153A50153A50053A50253A20253A40253A40253A40253A4 +0152A30051A20050A10152A30051A20152A30050A30253A2004F9F0254A200519B01539C01539A +01539D01539D01539D00519B00529C00519B00539B01539D01519C024F9A03519C024F9A02509B +03519C03519C03519C03519C004E99014F9A014F9A014F9A004C97004E99004E99014B99014D99 +014D99014D99014D99014D99014D99014D99014D99014D99014D99014D99014D99014D97004B98 +035098024F9600488E045197004D93004C92014E94014E94004E94034B94034D94034D94004A91 +034D94034B94004E94014E94014E94014E94014E94004C91034993034B93034B93034B93034B93 +014B93054892054A8F04498A054A8B04498E054890054B90064B8F064B9004488D054A8F054A8D +054890054A8F054A8C03478C064A8B064C8906488B064A8B064A8B064A8B064A8B064A8B034A8B +054A8B044A8A08488A08478A05448709488B09488B09488B09488B09488B09488B09488B09488B +09488B09488B09488B09468B07498B09478B0A488B0844870A45890B43890845890A45890A4589 +0A45890A45890A45890A45890A45890A45890A45890A45890845880B45840B45850B4585084282 +0A44840842840B45840B44840B44840B44840B44840B44840B44840B44840B44840B44840B4484 +0B44840B44840B44840B44840B44840B44840B44840745840945840843820D44850D43850C4183 +1244850E40821244860F41831042841042841042841042841042840F42831042840F42830F4183 +1042840F41831346871043840C40821141841141841041841041831141841041830F4383104284 +1043840B3D7F0D3F811041830D427D0E427E0E427E0E427E0E427E0E427E0B3F7B1044800B3F7B +0E427E0E427E0C417C10427F10427F10427F0F417E10427F10427F1E8483015EA3005DA301619F +045EB70059B4045EA9035DAD035CB30259B3025AB1055EB0005EAC005EAE005CAC0060B0005DAD +005DAD005FAE005FAF005FAF005CAE005EAD005DAF005FAA005FAC005FAC005FAC005FAC005FAC +005FAC005FAC005EAB0060AD0060AD005DAA005DAA0060AD0060AD0060AD0060AD0060AD0060AD +0060AD0060AD005EAB005FAC005FAC015CA9015EAB005CA9025EAB025FAC015BA8005DAA015EAB +015EAB005CA9025FAC025FAC005CA9015EAB015EAB015EAB015EAB015EA9015CAC015CAC015EAC +005BA9005BA9005DAB0059A8005BAA005BAA005BAA0059A8005BAA0059A8005BAA0059A8015CAB +015CAB0059A8025AAA0057A7025AAA0057A70059A90058A80056A6005AAA0056A60058A80059A9 +0059A90455A80253A50355A70051A30051A30051A30055A80055A80055A80055A80055A80055A8 +0151A30153A50153A50051A30153A50051A30153A70051A70153A70053A70053A70051A70051A3 +0153A50051A30153A50153A50053A50253A20253A40253A40051A20253A40051A20253A4004FA0 +0253A40050A10152A30051A30151A00354A301539F00539D01539C01539B01539D01539D01539D +00539D01539D00509A00539C01539D02519C004D9802509B04529D014F9A03519C014F9A03519C +03519C004E99014F9A014F9A014F9A004C97004E99004E99014B99014D99014D99014D99014D99 +014D99014D99014D99014D99014D99014D99014D99014D99014D97004B98024F97004B92034F95 +004C92004D93035096004C92014E94004E94034B94034D94034D94004990024C93034B94004E94 +014E94014E94014E94004E94004C91034A93034B93034B93014991034B93014B93054891034A8F +03488A074C8B02478C064992054B90064B8F064B9003488D054A8F054A8D054890054A8F054A8C +03488C064B8B064C8A06488B064A8B064A8B044889064A8B064A8B034A8B054A8B044A8A07488A +08478A07468909488B09488B09488B07468909488B09488B09488B09488B09488B09488B074689 +09478B07498B09488B0A488B0844870A45890B43890945890A45890A45890A45890A45890A4589 +0A45890A45890A45890A45890A45890845880945850A45850B45850842820A42820842820B4582 +0B45820B45820B45840B45840B45840B45840B45840B45840B45820B45820B45820B45820B4582 +0B45820B45840B45840B45840745840945840843820D44850D42850C42841042821145850E4182 +0F42831043841043840E41821043840E42820D40811043841144850E41821043840E41820F4283 +1245860D41811142841141841142840E3F811141841243850E43831043841043840D41810C4081 +0B3E7F0D427E0C427D0C427E0C427E0C427E0C427C0D417D0A3F7B0D417D0C427C0C427E0C427D +0E407D1244810D407D10427F10427F10427F1A7B7A025CA30463AE0062A1035EB6035BAC005EA2 +005EA8025DAD005AAA015EAD005AA7005DAD005BAB005DAD005AAA015DAD005EAC025DB0025FAF +015CAA005BA9005CA9005BA9015EAA015CA9015CA9015CA9015CA9015CA9015CA9015CA9015CA9 +015CA9015CA9015EAB015EAB015CA9015CA9015CA9015CA9015CA9015CA9015CA9015CA9015CA9 +015CA9015CA9015EAB015EAB015EAB005CA9005CA9015EAB015EAB015EAB015EAB015EAB005DAA +005CA9015EAB015EAB015EAB015EAB015EAB015CAB005FA9005FA9015DA9025FAC005BA80058A5 +005BAA005BAA005AA9015AA9015DAC0159A8025CAB0059A8025CAB005AA9015CAB005AA90054A4 +005AAA0054A40059A90059A90059A90059A90057A70059A90059A90059A90059A90455A80153A5 +0355A70153A50254A60253A60055A40055A40055A40055A40055A40055A40151A30153A50051A3 +0254A60152A40052A50152A30355A50151A30153A40253A40253A40254A60051A30254A60051A3 +0153A50052A50152A20152A30051A20354A50051A20354A50354A50050A10050A10051A20152A3 +0152A10152A500509F004F9A005097004F99004F9B00529A00509A004E9800509A004F99004F99 +00539C01539D02509B03529D024F9A004E9903519C004E9903519C004D98004E99004C97004C97 +004C97004C97004E99004E99004E99014B99014D99014D99014D99014D99014D99014D99014D99 +014D99014D99014D99014D99014D99014D97004B98025098004C93004C92024F95014E94004B91 +014E94014E94004E94034B94034D94004A91014B92024C93024D93004D91004E92004C91004E94 +034C94024991004890004890004890054D95014991024A92064993064B90064B8B044A8B084D92 +044892054A90064B8F064B9003488D054A8F054A8D054890054A8F054A8D02478A02478A024A87 +05478A034788034788074B8C044889034788054A8B054A8B044A8B064688074589074689064588 +08478A07468909488B07468906458809488B09488B08478A0645880A498C064588064888074588 +09478A0846870A45890B43890742860842870742860A45890A45890A45890A45890A45890A4589 +0A45890945890A45880C41830D41820C41820B45850A46850846850B43850B45850B4585084282 +0842840842840842840842840842820B45850B45850B45850B45850B45850B4585084282084384 +0A42840745840945840843820D44850D42850C42841042821144851043840F42830F42830F4283 +1043840E42821245860E41821043840D40811043841043841043841044840D40811144850C3F80 +1043840E42831044841144850D4182103F81103F811041830C3D7F0E3D810D40800F417F0F3F7D +0F3F7E0F3F7E0F3F7E0F3F7E0F3F7C0F417E0F3F7C0F3F7E0F3F7E0D3F7C1343810D3C7B134381 +0E3E7C103E7C103E7C1676790058A4045FAE0060A4025CBA0159B1025FA2025EA9025DAD005BAC +015BAC015DA9005CAD005DAD005DAD005BAB015EAE005EAC025DB0025FAF015CAA005DAB005DA9 +005BA8015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB +015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB +015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB +015EAB015EAB015EAB015CAB005FAB005FAB015EAB005BA8005AA7025BA90059AA005BAA0059A8 +025CAB0058A7025CAB0059A8015EAD0059A8015CAB015CAB005AA80057A70058A80057A70059A9 +0059A90059A90059A90059A90059A90059A90059A90059A90455A80153A50355A70052A40254A6 +0252A60055A60054A60054A60054A60054A60055A60151A30153A50153A50051A30254A60051A3 +0254A60050A30254A60252A40253A50053A50051A30456A80051A30153A50153A50051A50253A4 +0253A40253A40051A20556A70051A20051A20253A40050A10152A30152A30152A10152A40151A0 +004F9C00529700519A00509C00509A00519B00509A00509A00519B004F9900539C01539D02529C +004D99014F9A05539E004D9805539E004D9805539E02509B004D98004E99004E99004E99004E99 +004E99004E99014B99014D99014D99014D99014D99014D99014D99014D99014D99014D99014D99 +014D99014D99014D97004B98024F98004C93014E94004D93014E94004D93004D93014E94004E94 +034B94034D94004A91024C9300488F055097004C91004E93004C91014E94024D94024991024A92 +024A92024A9200478F064E96044C94064993064B9004498B074C8D04478C074A9404498F064B90 +064B9004488D054A8F054A8D054890054A8F054A8D03478A04488A024A8705478A05498A05498A +034788044889084C8D034889054A8B044A8B07488A08478A0746890C4B8E0A498C09488B064588 +0746890B4A8D07468909488B07468909488B05448709488B06488808468A09478A0846870A4589 +0B43890744860944880742860A45890A45890A45890A45890A45890A45890A45890A4589094588 +0D41830B42840C41820B45850A46850846850B43850B45850B45850842820A44840A44840A4484 +0A44840842820B45850B45850B45850B45850B45850B45850842820A44840A4284074584094584 +0843820D44850D43850C41831244850E40821143851143851144851345870F42831244860C3F80 +1345870E41821244861042841042841043840F41831345870D40811548890F42831144850F4183 +0D3F811346870E3F811040831041830C3D800E3E810C40800F417E0F417D0F417E0F417E0F417E +0F417E0F417E0F417E0F417E0F417E0F417E0D417D0F3F7D1242800F3F7D0F3F7D10407E10407E +1A79820059AA015EB3005FA8015BBD0056B4025FA2025EA9015CAD025DAE005AA9025EA9005BAD +005DAD005DAD005BAB015EAE005EAC025DB0025FAF015CAA005DAB005DAA005BA8015EAB015EAB +015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB +015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB +015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB015EAB +015CAB005FAB005FAB015DA9015EAB005BA80058A5005AAA005BAA005AA9005AA9005CAB0059A8 +015BAA005AA9005BAA005BAA015CAB005AA80058A90055A50059A90058A80059A90059A90059A9 +0059A90059A90059A90059A90059A90455A80153A50355A70052A40254A60153A60056A60055A6 +0055A60055A60055A60056A60151A30153A50051A30253A50152A40052A40152A40254A60152A4 +0153A50253A50152A40153A50052A40253A50051A30153A50052A50152A20152A30152A30253A4 +0152A30253A40254A50050A10052A30051A20152A30152A10152A40151A0004F9C00529700509A +00519C004F9900529C00529C004F9900519B004F9900539C01539D02509B01519C024F9A014F9A +02509B014F9A02519C004D98004E99004D98004E99004E99004E99004E99004E99004E99014B99 +014D99014D99014D99014D99014D99014D99014D99014D99014D99014D99014D99014D99014D97 +004B98024F98004C93014E94004C92024F95024F95004C92014E94004E94034B94034D94004A91 +014B92024C93024D93004D91004E93004C91014E94024D94024991024A92024A92004890044C94 +014991024A92054A93044A90044B8B044B8A064D90044A92044A90044B8F054B9003488D034A8F +034A8D03499003498F044B8D02498A02498A024A8705478A05498A034788064A8B044889044889 +04498A054A8B044A8B06468807468907468907468908478A08478A09488B07468907468908478A +09488B08478A06458809488B08458906488908468A09478A0846870A45890B4389074486094488 +0742860A45890A45890A45890A45890A45890A45890A45890A45890945880D41830B42840C4182 +0B45850A46850846850B43850B45850B45850842820A44840A44840A44840A44840842820B4585 +0B45850B45850B45850B45850B45850842820A44840A42840745840945840843820D44850C4285 +0D42850D44820F45830D43810D42810D43810C43800E43820D42810F45830C41800E43820C4280 +0E44820E43820E43820E44820C42800F44830A417E0E44820D42810E44820F45830C4280104180 +1041801042810C3E7E0E3F7E0C3E7F0F417C0F417E0F417E0F417E0F417E0F417E0F417E0F417E +0F417E0F417E0F417E0D417C11407E11417F10407E0E3E7C10407E10407E + +end +%%PageTrailer +%%Trailer +%%EOF diff --git a/doc/DistributionSystem.png b/doc/DistributionSystem.png new file mode 100644 index 0000000..4804e7e Binary files /dev/null and b/doc/DistributionSystem.png differ diff --git a/doc/DoxygenLayout.xml b/doc/DoxygenLayout.xml new file mode 100644 index 0000000..d349cc8 --- /dev/null +++ b/doc/DoxygenLayout.xml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/Example2.eps b/doc/Example2.eps new file mode 100644 index 0000000..951105e --- /dev/null +++ b/doc/Example2.eps @@ -0,0 +1,5118 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/srv/www/vhosts/git_exclude/save/processed/2/c/a/2ca60741-93df-4a47-aed0-e0e7810e4c5c/01_7818d35b8c7eba10b243424bedf7cbe1_png_intermediate_eps/Example2.eps) +%%CreationDate: (2019-01-24T16:40:35+01:00) +%%BoundingBox: -0 -0 203 175 +%%HiResBoundingBox: 0 0 202.521 175 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 1 +%%EndComments + +%%BeginDefaults +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-none or 1-RunlengthEncoded. + % hex color packets. + % + gsave + /buffer 512 string def + /byte 1 string def + /color_packet 3 string def + /pixels 768 string def + + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 203 175 +userdict begin +DisplayImage +0 0 +202.521 174.768 +12 +270 233 +0 +0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A00000000 +000000000000000000000000003A90DBFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFB666000000000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFF +B6660000003A90B6903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB90 +3A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066 +B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 +000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0000000000000000000000000000 +3A90DBFFFFFFFFFFFFFFDB903A000000000000000066B6FFFFFFFFFFFFFF00000000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFB666003A90DBFFFFFFB6 +66003A90DBFFFFFFFFFFDB903A003A90DBFFFFFFFF00000000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFB6660066B6FFFFFFFFFFFF +FFFFFFB6660066B6FFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066 +B6FFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666003A90DBFF +FFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0000000000000000000000 +00000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFFFF00000000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFB66600003A90DBFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0000 +66B6FFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB90 +3A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A000066B6FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFDB903A00000000000000000000000000000066B6FFFFFFFF000000 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0000000000000000000000000000000066 +B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFF +FFFFFFFFB666000000000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFB6660000003A90B690 +3A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFF +FFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0000000000000000000000000000 +003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFB66600003A90DBFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0000 +0000000000000000000000003A90DBFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFDB90 +3A0066B6FFFFFFDB903A00000066B6FFFFFFFFFFFFFFFFFFB66600000066B6FFFFFFDB903A0000 +0000000000000000000000003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFDB903A000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFF +FFFFB666003A90DBFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFDB90 +3A003A3A6690DBFFFFFFFFFFFFFFB6663A3A3A0066B6FFFFFFDB903A0066B6FFFFFFFFFFFFFFFF +FFFFB666003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFF +FFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFB666000000000000000066B6FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066 +B6FFFFFFFFFFFFFFFFFFFFDB903A000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFDB903A0066B6FF +FFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFDB903A006666663A90DBFF +FFFFFFFFDB906666663A0066B6FFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFDB903A0066B6FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFF +FFFFFFFFFFFFFFB666000000000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB90 +3A0066B6FFFFFFDB903A0066B6FFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFF +FFFFFFFFDB903A00003A90DBFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFDB903A0066B6FFFF +FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFDB903A0066B6B66666B6FFFFFFFFDB906690B690 +3A0066B6FFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFB6660000003A +90B6903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB90 +3A000000000000000000000000000066B6FFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFF +FFDB903A0066B6FFFFFFDB903A0066B6DB903A66B6FFFFDB903A66B6DB903A0066B6FFFFFFDB90 +3A000000000000000000000000000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFDB903A00000000000000000000000000003A90DBFFFFFFFFFFFFFFB666000000000000 +000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFF +DB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFF +FFDB903A0066B6FFDB906690DBFFB66666B6FFDB903A0066B6FFFFFFDB903A0066B6FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF +FFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066 +B6FFFFFFFFFFFFFFFFFFFFB666003A90DBFFFFDB903A0066B6FFFFFFFFFFDB903A0066B6FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFDB903A000000003A90DBFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFB666003A90DBFFFFFFFFFFFFFFFFFFFFFFDB903A3A90DBFFFFFFDB903A0066B6FFFF +B6663A9090663A90DBFFDB903A0066B6FFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066 +B6FFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFF +FFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666003A90DBFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB66600 +0066B6FFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFDB903A0066B6FFFFFFB66600003A90DBFF +FFDB903A0066B6FFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFF +FFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFDB903A003A90DBFF +FFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6660066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB66600000000000000 +0000003A90DBFFFFFFFFFFFFFFDB903A0066B6FFFFFFDB903A0066B6FFFFFFDB903A0066B6FFFF +FFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000000FFFFB666003A90DBFFFFFFFFFFB666003A90DBFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066 +B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFDB903A000000000000000000000000000066B6FFFFFFFFFFFFFFFFFFFFFFDB90 +3A000000003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFB666003A90DBFFFFFFFFFFB666003A90DBFFFFFFB666003A90DBFFFF +FFFFFFFFFFB666003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFB666 +00000000000000003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB90 +3A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666003A +90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFB66600000000000000003A90DBFFFFFFFFFFFFFFDB903A00000000000000003A90DBFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6660066B6FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFB666003A90DBFFFFFFFFFFFFFFB666003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A +00000000000000003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFF00FFFF00FFFF000000000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFF00FFFF00FFFF000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000000000FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00000000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF0000000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000 +000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFF00FFFF00FFFF000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000000000000000FFFF00FFFF00FFFF +000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000000000FF0000FF0000FF0000FF00000000000000000000000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF00 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +00FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF00 +00FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00000000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF00 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 +00FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +00FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF00 +00FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A00000000000000000000000000003A90DBFFFFFF +FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB90 +3A00000000000000000000000000003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFB666003A90DBFFFFFFFFFFFFFFFFB666 +000000000066B6FFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFF +FFFFFFFFFFB666003A90DBFFFFFFFFFFFFFFFFFFFFDB903A00000066B6FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB90 +3A0066B6FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFB6660000003A90B6903A0066B6FFFF +FFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFDB903A00 +66B6FFFFFFFFFFFFFFFFDB903A3A66663A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00 +000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFF +FFFFFFFFDB903A003A90DBFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFFFFDB +903A3A90DBDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF00000000000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A000000000000000000000000000066B6FF +FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFDB903A000000000000000000000000000066B6FFFFFFFFFFFFFFDB903A3A90DBFFFFDB903A00 +66B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A3A90DBFFFFFFFFDB903A0066B6FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066 +B6FFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFDB903A0000000000000000000000000000003A90DBFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFF +00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFF00000000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF00 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 +00FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF00 +00FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00 +000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000000000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF00 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 +00FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00 +000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF00 +00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00 +00FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF00000000000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF00 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +00FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 +00FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00 +000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +000000FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFDB903A0000000000000000 +66B6FFFFFFFFFFFFFF00000000000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFF +FFFFFFFFFFFFFFDB903A0066B6FFFFFFFFB666003A90DBFFFFFFFFFFDB903A003A90DBFFFFFFFF +00000000FF0000FF0000FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFDB90 +3A0066B6FFFFFFB6660066B6FFFFFFFFFFFFFFFFFFB6660066B6FFFFFFFF00FF0000FF0000FF00 +00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFB666003A90DBFFFFFFFF00FF0000FF0000FF00000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFDB +903A003A90DBFFFFFFFFFFFF00FF0000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF +FFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFB66600003A90DBFFFFFFFFFFFF +FFFFFF00FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFF +FFDB903A0066B6FFFFFFFFFFFFDB903A000066B6FFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFB666003A90DBFFFFFFFFFFB666003A90DBFFFF +FFDB903A000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF000000FFFFFFFFB66600000000000000003A90DBFFFFFFFFDB903A000000000000 +00000000000000000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FF0000FF0000FF0000000000000000FF0000FF0000FF0000FF00 +000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000000000000000000000000000FF0000FF0000FF0000FF00000000000000FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFF00FFFF +00FFFF00000000000000FF0000FF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF +00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +00000000FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF000000FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 +00FFFF00FFFF00FFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF + +end +%%PageTrailer +%%Trailer +%%EOF diff --git a/doc/Example2.png b/doc/Example2.png new file mode 100644 index 0000000..bff8f4e Binary files /dev/null and b/doc/Example2.png differ diff --git a/doc/How-to-use-the-toolkit.dox b/doc/How-to-use-the-toolkit.dox deleted file mode 100644 index 503990d..0000000 --- a/doc/How-to-use-the-toolkit.dox +++ /dev/null @@ -1,43 +0,0 @@ -/** -@page how-to-use How to Use the Toolkit - -The following topics briefly describe how to accomplish some basic tasks for which the Toolkit would be used. See the Example Applications topic for code listings of complete applications of the Toolkit. - -@section open-close Opening and Closing the Toolkit - -The Toolkit must open an EPANET [Input File](Input-File) to obtain a description of the pipe network to be analyzed before any of its other functions can be called. (The exception to this is the @ref ENepanet function, which performs a complete hydraulic/water quality simulation similar to a command line execution of EPANET). Once all analysis is completed, it must close itself down to free all allocated memory. The functions for doing this are @ref ENopen and @ref ENclose, respectively. An example of using these functions is shown below. - -~~~~~~~~~~~~~~~{.c} -char *f1, // Name of input file - *f2, // name of report file - *f3; // name of output file (can be blank) -int errcode; -errcode = ENopen(f1, f2, f3); -if (errcode > 0) { - ENclose(); - return; -} -{ Call functions that perform desired analysis } -ENclose(); -~~~~~~~~~~~~~~~ - -@section parameters Retrieving and Setting Network Parameters - -The Toolkit has various functions available for retrieving and setting the parameters that define the design and operation of the pipe network being analyzed. The names of retrieval functions all begin with `ENget` (e.g., [ENgetnodevalue](ENgetnodevalue), [ENgetoption](ENgetoption), etc.) while the functions used for setting parameter values begin with `ENset` (e.g., [ENsetnodevalue](ENsetnodevalue), [ENsetoption](ENsetoption), etc.). - -Most of these functions use an index number to reference a specific network component (such as a node, link, or time pattern). This number is simply the position of the component in the list of all components of similar type (e.g., node 10 is the tenth node, starting from 1, in the network) and is not the same as the ID label assigned to the component in the Input File being processed. A series of functions exist to determine a component's index number given its ID label (see [ENgetlinkindex](ENgetlinkindex), [ENgetnodeindex](ENgetnodeindex), and [ENgetpatternindex](ENgetpatternindex)). Likewise, functions exist to retrieve a component's ID label given its index number (see [ENgetlinkid](ENgetlinkid), [ENgetnodeid](ENgetnodeid), and [ENgetpatternid](ENgetpatternid)). The [ENgetcount](ENgetcount) function can be used to determine the number of different components in the network. - -The code below is an example of using the parameter retrieval and setting functions. It changes all pipes with diameter of 10 inches to 12 inches. - -~~~~~~~~~~~~~~~{.c} -int i, Nlinks; -float D; -ENgetcount(EN_LINKCOUNT, &Nlinks); -for (i = 1; i <= Nlinks; i++) { - ENgetlinkvalue(i, EN_DIAMETER, &D); - if (D == 10) ENsetlinkvalue(i, EN_DIAMETER, 12); -} -~~~~~~~~~~~~~~~ - - -*/ \ No newline at end of file diff --git a/doc/Network.eps b/doc/Network.eps new file mode 100644 index 0000000..e09123d --- /dev/null +++ b/doc/Network.eps @@ -0,0 +1,8420 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/srv/www/vhosts/git_exclude/save/processed/5/1/6/516c741a-b818-4549-9242-31d39aeea3ae/01_e68991540beae84167a2809d37d77fa6_png_intermediate_eps/Network2.eps) +%%CreationDate: (2019-01-24T03:19:17+01:00) +%%BoundingBox: -0 -0 368 162 +%%HiResBoundingBox: 0 0 367.653 162 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 1 +%%EndComments + +%%BeginDefaults +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-none or 1-RunlengthEncoded. + % hex color packets. + % + gsave + /buffer 512 string def + /byte 1 string def + /color_packet 3 string def + /pixels 768 string def + + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 0 0 368 162 +userdict begin +DisplayImage +0 0 +367.653 162.068 +12 +490 216 +0 +0 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A000000000000000000000000 +3A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A000066B6FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFFFFDB903A00003A90DBFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFDB903A000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +DB903A003A90DBFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFF +FFFFFFB666000066B6FFFFFFFFFFFFFFFFDB903A00000000000000000066B6FFFFFFFFFFFFFFFF +FFB666000000000000000000003A90DBFFFFFFFFFFFFFFDB903A00000000000000000066B6FFFF +FFFFFFFFFFB666003A90B6903A000000003A3A3A00003A90DBFFFFFFFFFFFFFFFFFFB666000066 +B6FFFFFFFFDB903A00000000000000000066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFB6 +66003A90B6903A000000003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFFFFDB903A000066B6FFFFFFFF +FFFFDB903A000066B6FFFFFFFFFFFFDB903A003A90DBFFFFFFDB903A003A90DBFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFDB903A000066B6FFFFFFFFFFFFDB903A003A90DBFFFFFFFFB6660000000066 +B6FFFFFFFFFFFFB66600003A90DBFFFFFFFFFFFFDB903A003A90DBFFFFDB903A000066B6FFFFFF +FFFFFFB66600000066B6FFFFFFFFFFB666000066B6FFFFFFFFFFB6660000000066B6FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFDB903A000000000000000000000066B6FFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFF +FFFFFFFFFFB666003A90DBFFFFFFB66600003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A003A +90DBFFFFFFFFFFFFFFFFFFB666003A90DBFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFDB903A00 +3A90DBFFFFFFFFDB903A003A90DBFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFB666000066B6FF +FFFFFFB666000066B6FFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A003A90DBFFFF +FFFFDB903A00003A90DBFFFFFFFFFFFFDB903A000000000000000000000000000000000066B6FF +FFFFFFFFFFB666000000000000003A90DBFFFFFFFFFFDB903A0000000000000000000000000000 +00000066B6FFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFDB903A003A90 +DBFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFB666000066B6FFFFFF +FFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFDB903A000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFFFFDB903A000066B6FF +FFFFFFFFDB903A003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFB66600003A90DBFFFFDB903A003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6660000 +66B6FFFFFFFFFFFFFFFFFFFFFFDB903A003A90DBDB903A0066B6FFFFFFFFFFB666000066B6FFFF +FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFB666000066B6FFFFFFFFFFB666000066B6FFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFDB +903A000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF903A00000000000000 +000000000000000000000000003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFDB903A003A90DBFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFDB903A000066B6 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFDB +903A000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFF +FFFFFFB666003A66663A0066B6FFFFFFFFFFFFFFB66600000066B6FFFFFFFFFFFFB66600003A90 +DBFFFFFFFFFFB666000066B6FFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A003A90 +DBFFFFFFFFFFFFFFFFFFB66600003A90DBFFFFFFFFFFFFDB903A00000000000000000000000066 +B6FFFFFFB66600000000000000000000000066B6FFFFFFFFFFFFFFFFFFDB903A00000000000000 +000000000066B6FFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFB6660000000066B6 +FFFFFFFFFFFFFFFFFFFFFFB6660000000000000000003A90DBFFFFFFFFFFFFFFFFB666000066B6 +FFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB66600 +0066B6FFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFDB903A0066B6B6 +66000000000000003A90DBFFFFFFFFFFFFFFFFFFDB903A000000000000000066B6FFFFDB903A00 +0000000000000000000066B6FFFFFFB666000066B6FFFFFFFFFFFFFFFFDB903A00000000000000 +000066B6FFFFFFFFFFFFFFDB903A0066B6B666000000000000003A90DBFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFDB903A00 +66B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFDB903A0000003A90DBFFFFFFFFB66600003A90 +DBFFFFFFFFDB903A000066B6FFFFFFFFFFFFB6660066B6FFFFFFFFB666000066B6FFFFFFFFFFFF +FFFFFFB666000066B6FFFFFFFFFFDB903A000066B6FFFFFFFFFFFFB66600000066B6FFFFFFFFDB +903A0000003A90DBFFFFFFFFB66600003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A00000000000000000066B6FFFF +FFFFFFFFFFDB903A0066B6B666000000000000003A90DBFFFFFFFFFFFFDB903A0066B6FFFFFFFF +FFDB903A00003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666 +000066B6FFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFDB903A003A90DBFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFB666000066B6FFFFFF +FFB666000066B6FFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFDB903A0066B6FFFFFFFFFFFFFF +FFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFF +FFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFB666000066B6FFFFFFFFFFDB903A0000003A +90DBFFFFFFFFB66600003A90DBFFFFFFFFDB903A0066B6FFFFDB903A00003A90DBFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +B666000066B6FFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFDB903A00 +66B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFB666000066B6FFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFB666000066B6FFFFFFFFFF +FFFFFFFFFFB666000066B6FFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666000066 +B6FFFFFFFFDB903A006690903A000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFDB +903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666 +000066B6FFFFFFDB903A003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFF +FFFFFFFFFFFFB666000066B6FFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFB666000066B6FF +FFFFDB903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0000000000000000000000 +003A90DBFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFDB903A00000000 +00003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFB6660000000000000000000000003A90DBFFFFFFFFFFFFDB903A000066B6FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFFFFB666000066B6FFFFFFFFFFB6 +660000000066B6FFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFDB903A00 +0066B6FFFFFFFFFFFFB6660066B6FFFFFFFFB66600003A90DBFFFFFFFFFFFFFFFFB666000066B6 +FFFFFFFFFFB66600000066B6FFFFFFFFFFFFB66600003A90DBFFFFFFFFDB903A0066B6FFFFFFFF +FFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6 +FFFFFFFFFFFFFFFFFFFFDB903A000066B6FFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFDB903A00 +66B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFDB903A0066B6FFDB903A00003A90DBFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFF +FFFFFFDB903A00003A90DBFFFFFFDB903A000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF660000 +000000000066B6FFFFFFFFFFFFFFFFFFFFB6660000000000000066B6DB903A0066B6FFFFFFFFDB +903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFB66600000000000000000066B6 +FFFFFFFFFFFFFFDB903A00000000000066B6FFFFFFB666000066B6FFFFFFFFFFFFFFFFB6660000 +000000000000003A90DBFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFDB90 +3A000066B6FFFFFFFFFFFFB6660000003A90DBFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666 +000066B6FFFFFFFFDB903A0066B6FFFFFFFFB66600000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFB666000066B6FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFDB903A00000000000000003A +909066003A90DBFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFDB903A00 +66B6FFFFFFFFFFFFDB903A00003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFB666000066B6FFFFFF +FFFFDB903A3A90DBB666000000000000003A90DBFFFFFFFFFFFFFFFFFFDB903A00000000000000 +000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6 +FFFFFFFFFFFFB66600000066B6FFFFFFFFFFB666000066B6FFFFFFFFFFDB903A0000003A90DBFF +FFFFFFDB903A000066B6FFFFFFFFDB903A000066B6FFFFFFFFFFFFDB903A003A90DBFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB66600000000000000000000000066B6FFFF +FFFFFFFFFFFFB666000066B6FFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFB666000066B6FF +FFDB903A003A90DBFFFFFFFFFFFFFFFFFFB666003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6 +FFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFB666000066B6FFFFDB903A0000000000000000 +00000000000000000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB66600 +0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFDB903A0066B6FF +FFFFFFFFFFFFFFDB903A003A90DBFFFFDB903A003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFDB903A0000003A90DBFFFFFFFFDB903A000066 +B6FFFFFFFFDB903A000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB66600 +0066B6FFFFFFFFFFDB903A0066B6B666000000000000003A90DBFFFFFFFFFFFFFFFFFFDB903A00 +000000000000000000000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A00 +66B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC +FEFEFEFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFEFEFEFEFEFEFEFEFEFDFDFD +FDFDFDFEFEFEFEFEFEFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFD +FDFDFDFCFCFCFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFDFDFDFDFDFDFEFEFEFEFDFEFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBDBDBDBA0A0A07B7B7B5F5F5F +5858585E5E5E6565656565656666666666666464645D5D5D5959596464647E7E7EBABABAEBEBEB +FEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F5F5F56666667878787878787A7A7A +7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A +7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7979797B7B7B626262 +BEBEBEFEFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDD9D9D9D9D9D9D9D9D9 +F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FAFDFDF7FDFFFDFDFDFFFCF7FFFCF8F7FEFDF0FEFF +DCEBEDBDD2DAAFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5 +AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5B3CBD6DDEEF9DDEEF9FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFD8686865252526363636A6A6A717171717171717171737373747474 +7272727373737474747272727171717171716B6B6B5C5C5C4F4F4F8F8F8FF9F9F9FBFBFBFBFBFB +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFAFAFAFAFAFA4C4C4C555555646464696969686868686868686868686868 +686868686868686868686868686868686868686868686868686868686868686868686868686868 +6868686868686868686868686868686868686A6A6A6B6B6B222222D0D0D0FEFEFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFEDEDED757575000000000000000000000000000000939393F6F6F6FFFFFF +FFFFFFFFFBF7FAFDFDF7FDFFFDFDFDFFFCF7FFFCF8F7FEFDF0FEFFDCEBEDBDD2DAAFC9D5AFC9D5 +AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5AFC9D5 +AFC9D5AFC9D5AFC9D5B3CBD6DDEEF9DDEEF9FFFFFFFFFFFFFFFFFFD9D9D98585854F4F4F000000 +646464A1A1A1EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFEFFF9FFFFF8FDFEFCFDFDEEEEEEC2C0BDB7B5B3C4C4C4 +F1F2EEFDFEF7FCFDF6FEFEF9FEFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +4141417070707373737F7F7F7E7E7E7E7E7E7F7F7F7F7F7F8383838181817E7E7E7F7F7F7F7F7F +8080807B7B7B7F7F7F7373737171713C3C3C9D9D9DFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FEFEFE9D9D9D4B4B4B878787808080818181818181818181818181818181818181818181818181 +818181818181818181818181818181818181818181818181818181818181818181818181818181 +818181818181838383676767464647F5F6F6FDFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3353535 +000000000000000000000000000000000000000000646464F6F6F6FFFFFFFDFEF6FAFEFAFBFFFD +FDFEFDFCFEFEDBEAF392B5D65B8EC14580BA3578B52E75B22E75B22E75B22E75B22E75B22E75B2 +2E75B22E75B22E75B22E75B22E75B22E75B22E75B22E75B22E75B22E75B22E75B22E75B23772A5 +C1E2FBC2E3FCFFFFFFFFFFFF939393000000000000000000000000000000000000353535C4C4C4 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFEFAFEFFF9FFFFF8FDFEFCFDFDEEEEEEC2C0BDB7B5B3C4C4C4F1F2EEFDFEF7FCFDF6FEFEF9 +FEFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE5E5E5E8282827D7D7D808080 +7E7E7E7D7D7D7F7F7F7F7F7F7E7E7E8080807E7E7E7D7D7D7F7F7F7E7E7E7F7F7F8080807E7E7E +828282545454333333FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDE2E2E23E3E3E777777 +7E7E7E7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F75737232312F +989796FBFCFCFBFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4F000000000000000000000000000000 +000000000000000000000000757575FFFFFFFEFDFFFFFCFEFDFCFFF6FEFFD5EFFB74A3C73D7FB2 +2D7CB7247DBD2979BA3075B53075B53075B53075B53075B53075B53075B53075B53075B53075B5 +3075B53075B53075B53075B53075B53075B53075B53075B53872A6BBDDF4BCDEF5FFFFFFA1A1A1 +000000000000000000000000000000000000000000000000000000D9D9D9FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9FDFBFAFDFDFDD5D5D5 +3D3D3D07050604020100000004040409080E6B6C74DEDFE3FCFEFFFBFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFD3535357272728080808181817F7F7F7E7E7E7E7E7E7F7F7F +7F7F7F7E7E7E7F7F7F7F7F7F7E7E7E7F7F7F8181817F7F7F7C7C7C6868682F2F2F121212FEFEFE +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFEFEFE6C6C6C4242428080807E7E7E7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F8080807E7E7E7F7F7F7D7D7D81818157514C45403BE6E4E0FDFDFAFBFCF9FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFC4C4C4000000000000000000000000000000000000000000000000000000000000 +000000E3E3E3FDFCFAFFFDFAFAFCFDD4E8F980A9D0457FB43277B22A76B52577BA2A76B82E75B5 +2E75B52E75B52E75B52E75B52E75B52E75B52E75B52E75B52E75B52E75B52E75B52E75B52E75B5 +2E75B52E75B52E75B52E75B53873A8BADCF5BBDDF6EDEDED000000000000000000000000000000 +0000000000000000000000000000004F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F3FFFDF8F5EFEA2F2A27070300050200000000000000 +000306000001030301272724DEDFDCFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF3FEFEF3FEFCFBFFFCFF +FEFBFEE7E6E7C0C2BFADB0ABBFBEBFE1DCE2FAF9FDF9FDFEFBFDFEFCFEFDFDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FEFEFE3A3A3A2626264141416969698181818A8A8A848484808080818181818181818181818181 +818181808080797979686868343434222222323232101010FEFEFEFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDFDFDFDFDFDFDBABABA2020206F6F6F7E7E7E7E7E7E8080807E7E7E7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8282827D7D7D +7F7F7F7C7C7C818181323233979A9CE9F0EFE9F0F1E5ECEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF939393000000 +000000000000000000000000000000000000000000000000000000000000ADADADF5FEFAF6FDF9 +CCE0ED719CC2397AB52B75BA2D74B73173B53073B62D75B62B76B62B76B62B76B62B76B62B76B6 +2B76B62B76B62B76B62B76B62B76B72B75B62B75B62B76B72B76B62B75B62B75B62B75B62B75B6 +3572A6C3E0FBC4E1FCA1A1A1000000000000000000000000000000000000000000000000000000 +000000000000CFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFBF8EEEBE83C3836040000030000010000020202000000010103000201020401000303 +5F6362F9FDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FEFDF9FEFDFDFDFDDDDADB5D5B5B070606000000000201 +0000000404072D2A29C2BFB9FFFFF9FDFCF7FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FEFF +F9FEFFFBFEFFF9F9F9FEFEFECDCECFA3A5A78F9092A09FA0CCC8CAF5F3F0FDFDFAFBFEFDFAFFFF +F7FCFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6969694646463A3A3A +3B3B3B4141414747474C4C4C5252525353535353535353535050504A4A4A4141413C3C3C3D3D3D +3D3D3D5050505E5E5E111111FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFEFEFEEFEFEF +5B5B5B4949497F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E7E7E8080806D6D6D213D57 +99BBD7A5C6DCA3C6DEA1C7DF5B9BD55B9BD55B9BD55B9BD55B9BD55B9BD55B9BD55B9BD55B9BD5 +5B9BD55B9BD55B9BD55B9BD55B9BD55B9BD55B9BD52A4762000000000000000000000000000000 +0000000000000000000000000000000000002F516FCEE5F4CFE4F486A8C5467DAD2E78BA2877C0 +2E74B73472B13472B02E75B52977B82977B82977B82977B82977B82977B82977B82977B82977B8 +2A77B92A77B92A77B92A77B92976B82A78B92A78B92A78B92A78B93A77ACBBD4EEBCD5EF5F666E +00000000000000000000000000000000000000000000000000000000000000000043749F70A7D9 +70A7D970A7D970A7D970A7D970A7DA74ABDE7CB3E67FB6E583B2DF89B1D989B1D989B1D989B1D9 +89B2D98AB2DA90B9DE97C0DD97BFDD9ABFDA9ABFDA9ABFDA9ABFDA9ABFDA99BFDB9EC3DAA7C9DA +A8C9DAA9C9D8ABCAD6ABCAD6ABCAD6ABCAD6ABCAD6ABCAD6B0CFDBB9D7E4BAD8E5C4D7E2C4D7E2 +C4D7E2C4D7E2C4D7E2C3D7E2C6D9E4CFE2EDD3E6F1D3E4ECD6E4EAD6E4EAD6E4EAD6E4EAD7E4EA +D7E6ECDEECF2E3F1F7E4F2F8EBF2F4ECF2F4EBF2F4EAF2F5E9F3F6E7F2F6F6FEFE898E91010001 +050303010000030303000001010101000000040100080302050101090808EFF0F3FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF4FFFFF4FFFFD4DADE181A19030100040202000000000005000001000000000000161B19 +DAE1E2F8FFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFBFBF8CBC9C54B4744 +010101000003010206020203030001221E1EBAB8B2FFFDF8FEFDF9FCFDF9FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE7A7A7A7575756D6D6D6262625D5D5D5B5B5B595959 +5656565656565555555555555858585A5A5A5C5C5C5F5F5F6363637070707B7B7B6E6E6E101010 +FCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFEFEFEFDFDFDE0E0E03838387979797F7F7F +7E7E7E8080807F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F8181817E7E7E7E7E7E828282434343426D976A9DC86A9FCD689FCF67A0D1 +5B9BD55B9BD55B9BD55B9BD55B9BD55B9BD55B9BD55B9BD55B9BD55B9BD55B9BD55B9BD55B9BD5 +5B9BD55B9BD55B9BD52A4762000000000000000000000000000000000000000000000000000000 +0000000000003962866498CE5C92CB3F7EBC2D77BC2976BC2B75B82E75B03075AC2E76AE2E76AF +3075AF3075AF3075AF3075AF3075AF3075AF3075AF3075AF3075AF3074AE3074AE3074AE3075AF +3075AE3075AF3075AF3075AF3075AF2975B7489BE5489BE556616C000000000000000000000000 +0000000000000000000000000000000000000000004E779970A7D870A7D870A7D870A7D870A7D8 +6FA6D871A8DA75ACDE76ADDD6EA7DA6AA5DA6AA5DA6AA5DA6AA5DA6AA5DA6AA5D96DA8DC70ABDC +70ABDB74A8D974A8D974A8D974A8D974A8D974A8D976AAD97AADD97AADD97BADD77CAED57CAED5 +7CAED57CAED57BADD57BADD57EB0D882B3DC82B3DC86B3D886B3D886B3D886B3D886B3D885B2D7 +87B4D98BB8DD8CB9DF8CB8DD8EB8DD8EB8DD8EB8DD8EB8DD8EB8DD8DB8DD92BBE194BEE393BDE3 +94BEE394BEE394BEE593BEE594BEE497BDDFDDEEF82F3940000003040404000000000000000002 +0000000000000B00000F00000B0000090102C7C1C3B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +B2C4DDDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EE +EEF1F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFEFFEFFEFF565E67 +000401040200030100010002010108010103010300040200030100222526DAE2E4F4FFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFBD0CDC70F0903080300030100000000000003000001 +000000010202131314D4D4D4FEFCFBFFFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFBF97B79787F80808083847C81837B80827B7E7F797979787573757575757575757575 +7777777A7A7A7E7E7E8080808080808080807F7F7F6C6C6C101010FDFDFDFDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFBFBFBFDFDFDFFFFFF7070705E5E5E8282827D7D7D7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F808080 +7F7F7F7E7E7E7D7D7D2E2E2E9CABBBA6B7C8A6BBCDA1B8CDA9C2D8DFE9F5DFE9F5DFE9F5DFE9F5 +DFE9F5DFE9F5DFE9F5DFE9F5DFE9F5DFE9F5DFE9F5DFE9F5DFE9F5DFE9F5DFE9F5DFE9F58C939A +0000000000000000000000000000000000000000000000000000000000000000008898AAA4CAD7 +6DA7CE3882BE2A77B92C75B82E74B62E73B92B74BE2875C22A75BC2C75B72C75B72C75B72C75B7 +2C75B72C75B72C75B72C75B72C75B72C75B72D76B82B75B62B74B62C76B72C75B72C75B72C75B7 +2C75B72B76B85CAAEB5CAAEB5F666E000000000000000000000000000000000000000000000000 +0000000000000000008695A3C3DAEFC3DAEFC3DAEFC3DAEFC3DAEFC3DAEEC3DAEEC4DBEFC2D9EE +BBD5EDB8D5EFB8D5EFB8D5EFB8D5EFB8D5EFB7D4EFB7D5EFB8D5F0B4D1EDA6C6E2A6C6E2A6C6E2 +A6C6E2A6C6E2A6C7E3A4C5E1A6C7E3A4C4E199BAD994B5D994B5D994B5D994B5D995B7DA94B5D9 +93B5D894B6D990B1D57CA7CE7CA7CE7CA7CE7CA7CE7CA7CE7EA9CF7BA7CD7DA8CE7BA6CC709CC5 +6B96C36B96C36B96C36B96C36A96C26995C16B97C36C98C46A96C26597C46598C46498C66398C7 +6398C66996BF8EA8BC0D192500060A000000000000000003000004000000040000030001000008 +00031200041A3754712E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B67EA0CA7EA0CA7EA0CA7EA0CA +7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA9AB3D4B2C4DDB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD4C5E794C5E79000510010501020100030000020004 +01000900000200020002010004010401050D3946567692ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FBFDFCFBFDFC4E4D4A0502000401000201010000000001010001010101010200000301011C1C1C +DFDFDEFAFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FBFA7A7A7C7F7F7E +7F82817A7F817980847B80837E7F80837D7B7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F6B6B6B101010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE +FEFEFEFDFDFDC4C4C43838388282827E7E7E7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7D7D7D8181817F7F7F4F4F4F5E5E5E +F8FFFFF7FFFFF6FEFFF5FFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3000000000000000000000000 +000000000000000000000000000000000000000000EDEDEDFDFCFF8FB1D43E82C02874B92C73B5 +3074B02F75AF2D76B02E76AE2E75B32E74B72E74B72E74B72E74B72E74B72E74B72E74B72E74B7 +2E74B72E74B73278BB347ABD337ABC3379BC347BBD347BBD347BBD347BBD3D77ACB9D6EFBAD7F0 +ADADAD000000000000000000000000000000000000000000000000000000000000000000CCCCCC +FEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFEFEFEFEFEFEFEFDFDFDFFFEFEFFFEFEFFFEFE +FFFEFEFEFDFEFEFDFEFFFEFEFFFDFDFCFBFCEDF4F6EDF4F6EDF4F6EDF4F6EDF4F6EDF5F6ECF3F5 +EDF4F6ECF2F4E4EBEFDFE8EFDFE8EFDFE8EFDFE8EFE0E8F0DFE7EFDEE7EEDFE7EFDCE5ECCADCE7 +CADCE7CADCE7CADCE7CADCE7CCDEE9C9DCE7CADCE7C9DAE6C1D4E1BCD1DEBCD1DEBCD1DEBCD1DE +BBD0DEBBCFDEBCD1DFBCD1DFBBD0DEAFCCDFAFCCDEAECCDFADCCDFADCCE1AFCCDEB4CBDB202A32 +0101010501000300000000030001050000020200000101000104000004050006105C788C2E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B635476235476200020D000200020000020000020004000008000002000200030403 +000008000313142741456F952E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B67EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA +7EA0CA7EA0CA8CAACFB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DDD1DBEADBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EE +DBE3EEE4EAF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFD9DCCFD9DC010307020505 +00010100010000000000010000000001000002000102020700020D49586A87A6C02E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B6B5CCDC727B83817D7A847F7A807E7C7A8083798185 +7D7F81837D7B7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6B6B6B +101010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141 +5E5E5E8282827F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F8282827E7E7E6A6A6A101010CDCDCDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858585000000000000000000000000000000000000000000 +000000000000A1A1A1FFFFFFFEFCFF769DC3337BBD2876BA2B76B82D75B52E74B13074AF2F75B0 +2E74B32D74B52C75B62C75B72C75B72D74B62E74B52E74B52C74B72D75B93E81BF6C9ECD8EB1D4 +8CB1D585B1DB8CB0D38FB0D089B2D78AB1D594B1CCDAEAF6DBEAF6EDEDED000000000000000000 +0000000000000000000000000000000000000000004D4F4FFFFCF7FEFEFEFEFEFEFEFEFEFEFEFE +FEFEFEFEFEFEFEFEFDFFFFFDFFFFFDFFFEFDFFFEFDFFFEFDFFFEFDFFFEFDFFFEFDFFFEFDFFFEFD +FFFEFDFFFEFCFDFEFEFDFEFEFDFEFEFDFEFEFDFEFEFDFEFFFDFEFEFDFEFFFDFEFFFCFEFDFCFFFD +FCFFFDFCFFFDFCFFFDFBFFFCFBFEFCFBFEFCFCFFFCFCFEFDFAFEFEFAFEFEFAFEFEFAFEFEFAFEFE +FAFEFDFAFDFDFAFEFDFAFDFDF9FEFDF8FFFEF8FFFEF8FFFEF8FFFEF8FFFEF8FFFEF8FFFEF8FFFE +F7FFFEEFFBFFF2FAFDF1FAFCF1FAFCF1FAFEEFFAFFEEFEFF737679070000080000070100000000 +000207000005000002040000060000030000000202DCE2E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4EAF3DBE3EEDBE3EEDBE3EEDBE3EEDBE3EE +DBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEC7D4E6B2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA +7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA4880BB2E75B62E75B66E7B866E7B86 +0003090000000201000100000000000000050000010000000200000301030000082D3645B3C6D2 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B66E96C57EA0CA7EA0CA +7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA8CAACFB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DDB2C4DDB2C4DDB2C4DD485A65485A6500030B000206000102000201000100000000 +00000003000001020400051000051B092649346C9B2E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B66189AA6C7E8C847E7A877C72847D767C80827981867B7F83837E7B7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6B6B6B101010FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9898982525257C7C7C7C7C7C808080 +808080808080808080808080808080808080808080808080808080808080808080808080808080 +7D7D7D8080803C3C3C6B6B6BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF6F6F6646464000000000000000000000000000000000000000000939393FFFFFFFFFFFF +FFFEFF6F9AC22F79BB2873B62D75B52D75B72E74B53074B32F74B42D75B42C75B42B76B62B76B6 +2C75B62E75B42E74B32E74B32C74B62F78B95592C9BBD6EFFEFDFEFCFDFEF2FFFFFDFEFDFEFDF9 +F6FFFFF8FFFFFEFEFEFFFFFFFFFFFFFFFFFFC4C4C4000000000000000000000000000000000000 +000000000000343535DBE3E3FFFDF6FFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFC +FFFFFCFFFFFDFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFCFFFFFCFFFFFCFFFFFCFFFFFC +FFFFFCFFFFFCFFFFFCFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFFFFFFFFFFFF +FDFFFEFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFBFFFFFFFEFEFFFDFE +FFFDFEFFFDFFFEFDFFF8FDFEBBBBBA050509040205040000020000000205030002040001040100 +0701000B0201202124F5FDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EA3A29EA3A2000000030101020000010000 +00000000000000000002000001000400010701070E4B5158F8FFFFDBE3EEDBE3EEDBE3EEDBE3EE +DBE3EEDBE3EEDBE3EEDBE3EEDBE3EEB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DDB2C4DDB2C4DDB2C4DD8CAACF7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA +7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA6E96C52E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62C3B4C2C3B4C00030F0002090002060000020001000000000100000200000A00000B0000 +0201040E1A298AA9C42E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6658DAE6B7E8E +827E7B867C72857D767E7F807B80847C7F82817F7D7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F6B6B6B101010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDE2E2E21E1E1E6060607F7F7F808080808080808080808080808080 +8080808080808080808080808080808080808080808080808080807F7F7F7F7F7F2F2F2FDEDEDE +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6ADADAD +3535350000000000000000004F4F4FB9B9B9FFFFFFFFFFFFFFFFFFFEFDFF7FA8CF3880BF2F76B7 +3174B23074B22E75B62D75B72E74B52D75B52C76B62C76B62C76B62D75B42F75B33074B22F74B2 +2E75B53177B85691C5C1DAF0FEFDFFFDFEFFF3FFFFFEFEFEFEFEFAF7FFFFF9FFFFFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFC4C4C43535350000000000000000000000000000004F4E4EE2E3E3F8FFFF +FFFCF6FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFEFDFFFEFDFFFEFDFFFEFDFFFEFDFFFE +FDFFFEFDFFFEFDFFFEFDFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFEFEFEFEFEFFFEFEFFFEFEFF +FEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFDFEFDFFFEFDFFFEFEFFFEFFFDFEFFFDFEFFFFFEFE +FFFAF79CA8B111151A030000050000000104050000040204010305060203180906ACACB1F9FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFD8D7CDD8D7CD060200070006030003000001000200000200000001020006 +050003070100040000817E78FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EE +DBE3EEDBE3EEC7D4E6B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DDA6BBD87EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA78848D78848D000209 +0000040302020200010000000000000000000000000601000500000401003C3D3EFAFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFD3E2707B857C7E80817F7C827E7B817E7C +807F7E7F7E7F7E807F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +6A6A6A0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F8F8F89595951313132323231F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F +1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D6E6E6EFCFCFCFCFCFCFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3D9D9D9E3E3E3 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFFA1BFDC4583BA3276B33373AE3473AD2D75B62877BD +2D75B72E75B52B76B62C75B62C75B52E75B42F74B32F74B22F74B33075B43578B56393BFD4E1F0 +FEFCFBFDFDFBF7FFFFFEFEFCFFFDF9F9FFFFFAFFFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F6F6F6B6B9B740607F2D4B639EA19CCCCECAFCFEFDFCFFFFF6FFFFFEFDFBFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFF +FEFDFFFEFDFFFEFDFFFEFDFFFEFDFFFEFDFFFEFDFFFEFDFFFEFDFFFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFAFFFFFAFFFFFBFCFFFEF9FFFFF7FFFFFBFBFBFFFEFBF4FFFF959CA0050100 +05000000010503000000000600030A1D1818CBBCB6FCFDFFF7FFFCFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF0 +FDFDF02C292C020505020104040003080100000200060101010003040202030000080502BFBEBB +FEFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D9DBD7D9DB0301020500000A0402040000000000 +000001000003000002000105000409000306808080FFFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFCFDF6787A7B7A8086797E837E7F80827E7A837E79807E7C7D80807F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6B6B6B0F0F0FFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBA5A5A5090909161616 +121212121212121212121212121212121212121212121212121212121212121212121212121212 +1212120F0F0F0F0F0F777777FFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF8FEFFD5E3EE618FB72C77B82976B92E75B42D75B52A76BA2D75B72E75B52D75B62E75B4 +2E75B42E75B42D75B52C75B72C76B72E76B64381BA8EAFCCF0F7FBFFFCF9FEFCF8FBFEFFFFFEFD +FFFEFAFBFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFF71A5DA63A3D6 +FAFFFDFDFFFEFDFEFDFCFEFCF9FFFDFEFDFDFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFE +FEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF +FEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFDFEFFFDFEFFFDFEFFFDFEFFFDFEFF +FDFEFFFDFEFFFDFEFFFDFEFFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFEFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFBFFFCFDFFFC +FFFEFCFDFDFBFBFDFBFAFEFCFEFEFFFFFDFBF8FEFFFAFCFCB4B0AB6A66612E3236202225131E35 +2B4457B8C5CEFFFAF8FBFDFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF2FEFDF2C4C5CB141814000505 +0600030D0000000507060001000100000100161616ACACACFDFDFDFBFBFBFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFDEF4FCDEF4FC131B26090100080000050002000307000004020001000105000207 +0201030C0905CBCAC8FAFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEE +7C79767B8187777D847C8083827D7B837D79817E7B7C80817F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6C6C6C0E0E0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFF5F4F585A1BD +3580C22078C42775BA2F74B33075B32E74B42D75B42F74B32F74B22F74B22D75B62B76BA2A77BB +2C77B93479B66095C5C6D9EAFBFCFCFFFCF8FFFBF8FFFFFFFFFEFDFFFFFCFDFFFFFEFFFEFFFFFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF75A4D667A2D3FCFFFBFFFFFDFFFDFCFFFEFB +FFFFFCFFFCFCFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFDFFFFFDFFFFFDFFFFFDFFFF +FDFFFFFDFFFFFDFFFFFDFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFF +FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFCFFFFFC +FFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCFFFFFCF9FFFFFCFFFFFFFEFFFFFCF9FFFCF9FFFDFA +FDFCFFFFFCFAF6FAFCFDFEFBFFFEF8F9F9F9FAFEFFF7FCFF739EC4709BC0D0E6F6FFFFFFF9FCFF +FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFDF4FCFDF4FEFEFFDBE1DA25292904000308000000060D050104 +000100030303ACACACFFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF538ABB538ABB +37577612171E060101030104000309030204070000030206000309201C1CCAC1B8FDFDFAF3FEFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF37978767E7F827D7F837D7F80 +807E7E817D7D7F7E7D7E7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F +7F7F7F6B6B6B101010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDFFFEFCFCB5CADF4A8BC3287AC02A77BA2F74B0 +3375B02F75B52C74B52E74B23075B22F75B32C75B62976B92A76B92F75B44783B98EB8DCEDFAFE +FDFEFCFFFDF9FEFCF8FEFEFEFFFEFEFFFFFDFEFFFFFEFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF71A5DA67A1D7FEFEFBFEFFFDFEFEFEFFFEFDFFFFFEFFFEFCFEFFFFFEFFFF +FEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFF +FEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE +FFFFFEFFFFFEFFFFFEFDFFFFFEFFFFFFFEFFFFFEFDFFFEFDFFFEFDFFFEFEFFFFFFFFFEFFFFFEFF +FFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFEFEFCFEFEFDFCFEFDFCF5E4E3E082818625262E001531252B39717171C1C1C1FFFFFFFDFDFD +FCFCFCFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4EAF33575AD3575AD648EB5E5F5FF343436020103 +0001050801000B0000030001060D14C4CACAFFFEF7FFFDFAEFFAFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF9FEFB737473817E7D827F7F807E7E7F7E817E7E817E7F7F7F7F7D +7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F696969151515FEFEFE +FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFEFDFAF8F1F8FDAACEED5891C33879B23272AC3374AD2D76B62B75B72E74B4 +3074B22F74B32D75B62C76B72F75B2437AAD83A8C7E1F3FCFBFEFDFEFEFDFEFDFCFDFCFBFEFEFE +FEFFFFFEFFFFFFFFFFFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC +67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF +5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FEFFF9FEFFFFFEFFFFFDF8 +FEFBF8FDFEFFA5B8CC3670A0AAC0CEFFFFFFFEFEFEFDFDFDFFFFFFFDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFDBE3EE4880BB678DAF678DAFD7F0F8F1FEFFEBEBEC9091934D5255404040323941163D5F +537694F6FEFEFEFEFEFDFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FAFFFF5354547A7776837F7E82807F7E7E817E7F827E7F807F7F7D7E7E7E7F7F7F7F7F7F7F7F7F +7F7F7F7F7F7F8080808080807D7D7D7272724E4E4E565656FEFEFEFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFDFE +FAFCFFF0FEFFA6CBE7538ABB3775AC3374AE2A74B62A75B82E74B52E74B32E74B42E75B62E76B6 +3979B3709EC6CCE2F1F8FDFEFFFFFCFEFFFDFDFEFEFFFFFFFDFDFDFEFFFFFDFFFFFFFFFFFFFFFE +FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFF +FFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FEFFF9FEFFFFFEFFFFFDF8FEFBF8FDFEFFA5B8CC3670A0 +AAC0CEFFFFFFFEFEFEFDFDFDFFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7D4E62E75B62E75B6F3F2F5 +F3F2F5F9FFFFFDFDFDFFFCF8FFFEFCF3F8FBF9FFFFBDDCEF2B7CBF3373A8DEECF8FCFBFFFFFDFE +FBFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE666666656565646464 +6565656D6D6D7575757878787C7C7C7B7B7B7C7C7C7C7C7C7A7A7A7878787373736D6D6D656565 +636363676767686868CFCFCFFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF7F9FEFDFDFDFDFFFCFAF4F8FAABCEE8 +5B97C9377DBB2C79BD2A77BC2C75B82D74B62F76B6347AB94689C478AEDAC1DEF0F8FBF9FFF9F0 +FEFDF8FCFEFDFBFEFFFDFFFFFDFDFDFCFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2C4DD2E75B67EA0CAFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF9AB3D42E75B62E75B64880BBE4EAF3FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF5D8CC02E75B69AB3D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE1E1E19090907676765B5B5B535353525252525252 +4F4F4F5050504F4F4F5050504F4F4F5353535454545252525F5F5F7E7E7EA5A5A5E3E3E3FEFEFE +FDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFFFEFDFFFFFDFFFFFCFDFDE4E8ECB3C4D5789CBC4A7DA7 +3B71A33F72A65A85AF96B3C7D3E0E3F4F5F7FFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFB2C4DD2E75B67EA0CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8FB8CAACF +2E75B62E75B66E96C5F6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +C7D4E62E75B62E75B6F6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFFFFFFFCFCFCFBFBFBA4A4A45A5A5A3333331E1E1E020202050505010101000000 +090909212121444444636363B3B3B3FDFDFDFFFFFFFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFD +FDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2C4DD +2E75B67EA0CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEF1F76E96C52E75B62E75B69AB3D4F6F8FBFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8FB4880BB2E75B6B2C4DD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2C4DD2E75B67EA0CAFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFE4EAF34880BB2E75B62E75B6B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9AB3D42E75B65D8CC0FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFB2C4DD2E75B67EA0CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7D4E64880BB2E75B62E75B6 +C7D4E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFEEF1F72E75B62E75B6C7D4E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFC +FDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CB +A3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +B2C4DD2E75B67EA0CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFB2C4DD2E75B62E75B64880BBE4EAF3FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EA0CA +2E75B67EA0CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFF +FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2C4DD2E75B67EA0CAFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9AB3D4 +2E75B62E75B66E96C5EEF1F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1DBEA2E75B62E75B6E4EAF3FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2C4DD2E75B64880BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8FB6E96C52E75B62E75B67EA0CAF6F8FBFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D8CC02E75B69AB3D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DA +FFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD0 +6498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFB2C4DD2E75B62E75B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFE4EAF35D8CC02E75B62E75B69AB3D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFB2C4DD2E75B64880BBF6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFF +FFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDCCE12E75B62E75B6 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1DBEA4880BB2E75B62E75B6 +C7D4E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8FB2E75B62E75B6 +BDCCE1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBE3EE2E75B62E75B6FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFC7D4E62E75B62E75B64880BBDBE3EEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9AB3D42E75B65D8CC0FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6660000000000000000000000003A90DBFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC +67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF +5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFDBE3EE2E75B62E75B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9AB3D4 +2E75B62E75B65D8CC0E4EAF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFE4EAF32E75B62E75B6D1DBEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFDB903A00003A90DBFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFF +FFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBE3EE2E75B6 +2E75B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8FB7EA0CA2E75B62E75B66E96C5F6F8FBFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +6E96C52E75B67EA0CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB66600 +0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBE3EE2E75B62E75B6FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFEEF1F76E96C52E75B62E75B69AB3D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7D4E62E75B62E75B6EEF1F7 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFB6 +66000066B6FFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFB666000066B6B6 +660000000000000066B6FFDB903A0000000000003A90DBFFFFFFFFFFFFDB903A3A90DBB6660000 +00000000003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFDBE3EE2E75B62E75B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4EAF34880BB2E75B62E75B6 +B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4880BB2E75B69AB3D4FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFB66600000066B6FFFFFFFFDB903A00 +66B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFB6660000000066B6FFFFFFFFB6660000000000 +66B6FFFFFFFFB66600003A90DBFFFFFFFFDB903A0000003A90DBFFFFFFFFDB903A000066B6FFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFD +FDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBE3EE +2E75B62E75B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFC7D4E62E75B62E75B64880BBC7D4E6FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFB2C4DD2E75B64880BBF6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +B66600000000000000000000000066B6FFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666 +000066B6FFFFFFFFB666000066B6FFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFB666000066 +B6FFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBE3EE2E75B62E75B6FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6BBD8 +2E75B62E75B64880BBE4EAF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEF1F72E75B6 +2E75B6C7D4E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFB6660000 +66B6FFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFB666000066B6FFFFFFFFDB903A0066B6FF +FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFDBE3EE2E75B62E75B6DBE3EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8FB9AB3D42E75B62E75B66E96C5F6F8FBFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9AB3D42E75B65D8CC0FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +903A0066B6FFFFFFFFFFFFFFFFB666000066B6FFFFFFFFB666000066B6FFFFFFFFFFFFFFB66600 +0066B6FFFFFFFFFFFFFFB666000066B6FFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFDB903A003A +90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFC +FDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CB +A3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +DBE3EE2E75B62E75B6DBE3EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF6F8FB6E96C52E75B62E75B68CAACFF6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFDBE3EE2E75B62E75B6DBE3EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFB6 +660000000066B6FFFFFFFFB666000066B6FFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFB666 +000066B6FFFFFFFFDB903A0000003A90DBFFFFFFFFDB903A000066B6FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFF +FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBE3EE2E75B62E75B6DBE3EE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4EAF34880BB2E75B62E75B6 +A6BBD8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF5D8CC02E75B68CAACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6660000000000000066B6DB903A0066B6FFFFFFFFB6 +66000066B6FFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFB666000066B6FFFFFFFFDB903A00 +66B6B666000000000000003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBE3EE2E75B62E75B6DBE3EEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFD1DBEA4880BB2E75B62E75B6C7D4E6FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7D4E62E75B62E75B6 +EEF1F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DA +FFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD0 +6498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFDBE3EE2E75B62E75B6DBE3EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDCCE1 +2E75B62E75B64880BBDBE3EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8FB4880BB2E75B6A6BBD8FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFF +FFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFBEEFEFBEEF9FDFBF3FFFFF6FFFFFEFCF6FFFAF0FFFCFABFD2E14170A153779A +F2FEFFF8FFFFFBFDFFFEFAFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9AB3D42E75B62E75B66E96C5E4EAF3FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFA6BBD82E75B64880BBF6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB +903A0066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF5F7FEFF +F9FFFFFCFCF9FFFDF9F1FFFF6C94B48DB4D2F3FFFFFCFEFFFEFEFEFEFEFEFBFBFBFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFD +FAFDFEF9FEFFE0E2E355524F18121009070600050F000D24080E1C828282F1EFECFFFCF6FFFAF3 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF6F8FB6E96C52E75B62E75B67EA0CAF6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEF1F7 +2E75B62E75B6C7D4E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC +67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFAF9FDFED1D4D6625F5D100D0B00060E +00091D000819141414646464ECECECFFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFFFCFDFFFFFEFFFFFEFF3D3B3B030101 +050505000000020202030300000103000408383D3EEBEFEEFBFFFEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF3 +FFFBF9FCFCFEFAFCFDFDFEFFFDFCF9FFFEFBFCFEFEFBFFFFDFF0F55B8EB53672A23F7BAB98BDD2 +9AB3D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EA0CA2E75B65D8CC0FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFF +FFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFAFFFFCDCECF120E0B050201040303000003000308020304060000030000 +585858FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFAFBFEFAFBFEF2F1F24E4B4C020100010000020403000100040202030000 +030202030404010304707270FBFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFFFFFFBFBFBF4D4D4D +2121211212121D1F1F3E41422C4A6E2E6FB45B98D5C7E8F4FFFEFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83A5BC83A5BC2278BF95C4E8F6FCF7D7D3CEA7A7A793918E +A0A4A4CACFD0F5F7F8FDFDFDFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FEFF +3E3C3B050000040000010102000104030103040000070100020000070707848484FBFBFBFAFAFA +FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFB +FFFDFB9997970100000101010001010000000201010200000501020300010400000100000A0B0D +E7EDF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF2FFFFF9FFFFA3A3A30D0A08010000000002000205000001020300 +0003024C5251FCFFFFFFFFFFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFCFE1EACFE1EA3A74A33656713F454C020103000003040100000201020202252525BFBFBF +FFFFFFFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFF060100060000040102000105 +000106050000060000020003010001000000000000B0B0B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF7FFFCF7444341000000010403 +000000000000030000020000000004040103030000000000000209727E8BB2C4DDB2C4DDB2C4DD +D1DBEADBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +EAFEFF9AA3AA080707060100040101050608000106010203020000030201070707757371F8F7F3 +F9FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFF8FFFF4D6274 +000A1300020B000208000002060100000200000000010100171717DEDEDEFDFDFDFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFD +FDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF9FFFF060000070000030103000107000208040000050000000107 +000003000000000000424242FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF6FDFEF6FDFE161E21000204000101010000030000020000000005 +00000B00000700010700000C000415334F6A2E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B67EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA8CAACFB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDBDCCE1DBE3EEDBE3EEDBE3EE5F7D9509121D030001050000 +03000000000400020700000204000004000002000003000364707B90B3D0FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FEFFF3FEFF363D4603050A000209000309010001 +060000000102000201010101020202222222E6E6E6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFFFF06000006000002010400020800020802000001000000020B000105020202020202070707 +A5BBD87EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA +7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA +7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CAB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +5A81A35A81A303142800020A040201030000000000000003000004000003050000060000040000 +010002959CA32E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B63B5972000511020000040000040100000004000207000002 +0500000400000000000000081B3050366DAB6E96C57EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA +7EA0CA7EA0CAA6BBD8B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDDBE3EEDBE3EE +DBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFDFEEF5DFEEF5050505000000000309000108030000080000000002000000000000 +0000000000009F9F9FFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020000000000000103 +0000040000020300000100000001060000030202020101011D1D1D7EA0CA2E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B63374B23374B2122F5200000C +070100040000000203000307000101080000040102000102030303000000E3E3E3FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EE +DBE3EEBDCCE1B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDA6BBD87EA0CA7EA0CA +7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA4880BB2E75B62E75B62E75B62E75B62E75B6 +2E75B666798500020A010101030000010000000000000103000000020000040000050001030001 +22313D79A5C22E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B64880BB7EA0CA +7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA8CAACFB2C4DDB2C4DDB2C4DD41637D41637D +0600000300000001050301050800000900000000020002070102040101010000005C5C5CFEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFC +FDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000001000003000103010000040000050000040000 +020000000000000000000000727272C7D4E6B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DD9AB3D47EA0CA7EA0CAABCBEBABCBEB8293A4000005040101030100000101000103 +000001040000030202010102020202181818FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E9193000004020407 +000001010101000000000000000000000000000304000504010602424340FDFFFFB2C4DDB2C4DD +B2C4DDB2C4DDB2C4DDB2C4DDB2C4DD9AB3D47EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA +7EA0CA7EA0CA2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B6385C78385C78040000000000000001040001 +090000040000010001000109000004000000030303323232FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFF +FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFEFEFE060609060101020003010103030000030101080000030202000000000000161616 +DADADAFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDFDFDFDFBFBFB8C8C8C0C0C0C000000000000000000000000010101020202020202 +0404049E9E9EFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEB6B0010000000307000206000001030000040000 +010000000103020103030000040000635E60FFFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEF1F7DBE3EEDBE3EEDBE3EEDBE3EEDBE3EE +DBE3EEDBE3EEDBE3EEDBE3EEB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +9AB3D47EA0CA7EA0CA8EA3AA8EA3AA070000000200000000030000030000000106040000000003 +0202030101010000003C3C3CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFB7A7B80060000 +0504070201030200000104080A03020000000202021C1C1CCDCDCDFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFDFDFD +FFFFFF8383830101010000000000000101010202020202020A0A0AA1A1A1FCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFEFEDEA121110000002010103000000010000020000000000000001010101030101 +020101969495FEFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFC9CD +BFC9CD0B010000020100000001000001000300020B0500000300010100000202020000006E6E6E +FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DA +FFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF9FDFF746E6B04010301010409060400030C +000000000000020202BDBDBDFFFFFFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFBFBFBF7F7F79A9A9A4A4A4A +111111000000181818525252C7C7C7FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD838383 +030303000000020202000000000000010101000000030303000000444444F0F0F0F9F9F9FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9170B05000201010302 +000000000107000310070000060000020000010101040404B1B1B1FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFF +FFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFAF6F7FDFFFAFAFAB7B8B947464708040200071E0F1B29656565BEBEBEFCFCFC +FDFDFDFDFDFDFAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFCFCFCFCFCFCFFFFFFFEFEFEFFFFFFFEFEFEFBFBFB +FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6F6F65C5C5C030303000000000000 +020202020202040404030303393939FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFC6F6E6E050100040100020102020105000004000000 +0101000101000000004D4D4DF1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF4F7FFFF +FCFFFFFDFCFEFFFDFCFFFEFB6A98BE8BB1CFFFFFFFFFFFFFFFFFFFF8F8F8FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFDFDFCFCFCF7F7F7929292282828060606010101070707222222585858 +E0E0E0FDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFEFDFCFEFDEDEDED312D2E0300000000020104080001060102040101010202023A3A3AF3F3F3 +FFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC +67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF4F7FFFFFCFFFFFDFCFEFFFDFCFFFEFB +6A98BE8BB1CFFFFFFFFFFFFFFFFFFFF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +FFFFFFFFFFFFFFFFFFE4E4E4989898828282939393CFCFCFFDFDFDFDFDFDFFFFFFFFFFFFF8F8F8 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFDFBFDFDFDFDFDF0EEEF +7F7D7E1B1C200103080000060405081B1B1B545454E0E0E0FFFFFFFDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFF +FFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFFFFFFFFFFFFE4E4E4 +989898828282939393CFCFCFFDFDFDFDFDFDFFFFFFFFFFFFF8F8F8FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFEFCFFFEFFFFFFFBFBFBFFFFFFDADCE15E63693A3F45 +8D9194DADADAFBFBFBFFFFFFFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFD +FDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFC +FDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CB +A3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFF +FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DA +FFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD0 +6498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFF +FFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC +67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF +5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFF +FFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +6FA6DC67A0DAFFFEFCFDFFFDFDFEFFFFFEFFFFFFFFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFFFF5C9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70A7D768A1D5FFFDFEFDFEFF +FDFFFDFFFFFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFF5C9AD16398CCA2CEF9 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFFFF6FA7D667A1D5FFFDFFFDFEFFFDFFFCFFFFF9FFFFFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFF5C9AD16398CCA2CEF9FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFFFF6EA7D866A1D6FFFEFFFDFEFFFDFFFCFFFFF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFFFF5D9AD06498CBA3CEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFF6EA7D966A1D7FFFFFF +FDFFFFFDFFFCFFFFFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E9ACE6698C9 +A4CEF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFF6DA7DA65A2D8FFFEFFFDFEFFFDFFFCFFFFFAFFFFFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D9ACF6598CAA4CEF7FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFBFEFF6DA7D866A1D6FDFDFDFDFFFFFDFFFCFFFFF9FFFFFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFFFBFCFFFDFEFCFCFBFF +FEFBFFFFFBFBFCFEFBA5C9E16597D0B2CDE9FAFFFFFDFDFDFEFEFEFDFDFDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFBFCFCFFFFEAEFF1A5ACAF868F934D59614F5C67 +AAB8BFEBF2F3FDFDFBFDFFFFFAFEFEFAFFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FCF9F7FCF9FEFDF5F6F7F198A09C3B3F3B1718150B1111 +0F1B20394343ABACACFCFCFCFFFFFFFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFDFDF5F5F58E8E8E1D1E1E00010401040800030700030800040A1C2126C2C2C2FDFDFD +FDFDFAFCFAF7FCFAF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFEF4FFFEF4F5EEF2484C510004060305090700010A0000030500050000020000AAAAAA +FEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFC8B8886020000 +000000000000000000010101010101000000030306201F24E9E9E9FFFEFDFFFCF8FFFCF8FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF3FFFCF36A6266 +01030A0205080401020800000402060003060700020401011C1C1CC6C6C6FCFCFCFDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD1A1918050403020202010101000000010101 +010101010101010104030207393A3DEFF0F2FDFEFCFDFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE +FFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFEFEFEF6FDF9F6FDF9050403000305020002080100090000 +00020600030E050303020201000000121212D5D5D5F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFDFD020202000000040404000000000000000000000000000000000001010105 +000005A9ACB1FBFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFFDFFFFFDFFFFFEFFFFFFFF +FEFEFEFFFFFFEAFCFFEAFCFF000300010300070200070000070000000303000411000200000100 +010101040404646464FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFF000102 +00000000000000000000000000000000000000000004000006010000050B1B2E3F90B0CE90B0CE +FFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFF +FFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFF +FFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFF +FFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFF +FFFEFFFFFEFFFFFEFFFFFEFFFDFEFEFDFEFFFCFEFFFCFFFFFCFFFFFBFEFEFCFEFD82B9E782B9E7 +000501090100030004000205000200030000000008000200000100000000010101171717FDFDFD +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFF000104000003000003000002000000 +0000000000000000000500000701000002060006196F96B86F96B8ABCCECABCCECABCCECABCCEC +ABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCEC +ABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCEC +ABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCEC +ABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCECABCCEC +ABCCECABCCECABCCECAACCECAACDECAACCEBACCCE9749DCA749DCA00000904000501000C000110 +0000040900000400020000070000040101010000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFEFE000000000000000000000000000000000000000000000000000100 +0002040002051D2429F8FFFFF8FFFF68A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D9 +68A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D9 +68A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D9 +68A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D9 +68A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D968A4D96BA2D96BA2D96BA2D96BA2D9 +6BA2D96BA1D76FA3D6F8FBF8F8FBF8060001000000000404010201050000050000000300000003 +0000010101010202024A4A4AFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFD +0000000100000100000100000100000100000100000100000001010102040000027A7C7DFCFFFB +FCFFFB5B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD4 +5B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD4 +5B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD4 +5B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD45B9BD4 +5B9BD45B9BD45B9BD45B9BD45B9BD45F99D45F99D45F99D45F99D45F99D45F98D2639AD1FDFEFD +FDFEFD03000002020201020200010102000002000001020100000101020300020400050C8C9DA8 +F0FDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFC000100020000020000020000 +020000020000020000020000010002000002171717E5E4E0FFFFF7FFFFF7FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFC434343000000010101 +0202020000000202020000000000000102020209142C4760426D92699ECAFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFEFEFE595959000000000000000000020202010101010101000000 +0101010E0E0EA8A8A8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1D1D1131313030303000000040404040404000000 +00000000000271788A8CABCD3E73A8266DB0B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FDFDFDE8E8E83232320202020000000000000000000101010000000000008A8A8AFDFDFDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFCFCFCFCFCFEFEFEDCDCDC6C6C6C1A1A1A0303030000000E0E0E2D2D2D807B7DF5F1F4EFFDFF +AECFE55182B72E75B66E96C5EEF1F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDECECEC8A8A8A +2929290606060202021313133F3F3F8E8E8EF9F9F9FBFBFBFDFDFDFBFBFBFBFBFBFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFEFEFEF9F9F9 +FDFDFDCCCCCC8B8B8B7B7B7BA4A4A4EAEAEAFFFEF9FEFBF3FFFFFBFDFDFDFEFEFE2E75B62E75B6 +4880BBD1DBEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFDFDFDE3E3E3C1C1C1BEBEBECCCCCC +EFEFEFFFFFFFFDFDFDFFFFFFFFFFFFFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFCFCFEFEFEF9F9F9FDFDFDCCCCCC8B8B8B7B7B7B +A4A4A4EAEAEAFFFEF9FEFBF3FFFFFBFDFDFDFEFEFEDBE3EE4880BB2E75B62E75B6A6BBD8F6F8FB +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF6F8FB7EA0CA2E75B62E75B66E96C5E4EAF3FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFBDCCE12E75B62E75B64880BBC7D4E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4EAF3 +5D8CC02E75B62E75B68CAACFF6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8FB8CAACF2E75B62E75B6 +5D8CC0E4EAF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDCCE14880BB2E75B62E75B6BDCCE1FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFE4EAF36E96C52E75B62E75B67EA0CAF6F8FBFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFF6F8FB9AB3D42E75B62E75B64880BBDBE3EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB66600003A90DBFFFFFFFFFF +FFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7D4E6 +4880BB2E75B62E75B6B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB66600003A90DBFFFFFFFFFFFFFFFFFFFFFFFFB6660000 +66B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEF1F76E96C52E75B62E75B6 +6E96C5EEF1F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFB66600003A90DBFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6BBD82E75B62E75B64880BBD1DBEAFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB66600003A90 +DBFFFFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFDB903A00000000000000000066B6FFFF +FFFFFFFFFFFFB666000066B6FFFFFFB66600003A90DBFFFFFFFFFFFFFFFFFFB666000066B6FFFF +FFFFDB903A00000000000000000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFD1DBEA4880BB2E75B62E75B6A6BBD8F6F8FBFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFFFFB6660000 +66B6FFFFFFFFFFFFDB903A0066B6FFFFFFFFFFFFFFB666000066B6FFFFFFFFFFFFB666000066B6 +FFFFFFFFB66600003A90DBFFFFFFFFFFFFDB903A003A90DBFFFFDB903A000066B6FFFFFFFFFFFF +DB903A003A90DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFEEF1F77EA0CA2E75B62E75B66E96C5E4EAF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFFB666000066B6FFFFFFFFFFDB903A003A90DB +FFFFFFFFDB903A003A90DBFFFFDB903A003A90DBFFFFFFFFFFFFFFFFFFB666003A90DBFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2C4DD +2E75B62E75B64880BBBDCCE1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +DB903A003A90DBFFFFB666003A90DBFFFFFFFFFFFFFFFFFFFFDB903A0000000000000000000000 +003A90DBFFFFFFFFFFB666000066B6FFFFFFFFFFFFDB903A003A90DBFFFFDB903A003A90DBFFFF +FFDB903A000000000000000000000000000000000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBE3EE4880BB2E75B62E75B6 +8CAACFF6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A003A90DBB666003A +90DBFFFFFFFFFFFFFFFFDB903A000066B6FFFFFFFFFFFFFFDB903A003A90DBFFFFFFFFFFB66600 +0066B6FFFFFFFFFFFFFFDB903A003A90DBDB903A0066B6FFFFFFFFFFDB903A003A90DBFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8FB7EA0CA2E75B62E75B65D8CC0E4EAF3FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB903A003A3A3A003A90DBFFFFFFFFFFFFFFFFFFDB90 +3A000066B6FFFFFFFFFFFFB6660000003A90DBFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFF +B666003A66663A0066B6FFFFFFFFFFFFFFDB903A000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFBDCCE12E75B62E75B62E75B6B2C4DDFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFDB903A0000003A90DBFFFFFFFFFFFFFFFFFFFFFFFFDB903A00000000000000003A +909066003A90DBFFFFFFFFFFB666000066B6FFFFFFFFFFFFFFFFFFFFB6660000000066B6FFFFFF +FFFFFFFFFFFFFFFFDB903A00000000000000000000000066B6FFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFE4EAF35D8CC02E75B62E75B67EA0CAF6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8FB8CAACF +2E75B62E75B64880BBDBE3EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDCCE14880BB2E75B62E75B6 +A6BBD8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4EAF36E96C52E75B62E75B66E96C5EEF1F7FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF6F8FB9AB3D42E75B62E75B64880BBD1DBEAFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFC7D4E64880BB2E75B62E75B69AB3D4F6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEF1F76E96C5 +2E75B62E75B66E96C5E4EAF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6BBD82E75B62E75B64880BB +BDCCE1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1DBEA4880BB2E75B62E75B68CAACFF6F8FBFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFEEF1F77EA0CA2E75B62E75B65D8CC0E4EAF3FFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFF6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8FBFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFB2C4DD2E75B62E75B62E75B6B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E96C5 +EEF1F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFC7D4E6B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBE3EE4880BB +2E75B62E75B67EA0CAF6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E75B64880BBE4EAF3FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9AB3D42E75B6 +B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8FB7EA0CA2E75B62E75B64880BB +DBE3EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF2E75B62E75B64880BBE4EAF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9AB3D42E75B62E75B6B2C4DDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFAFEFFF9FFFFF4FAFBCED0D19A9A9A989593B3B1AEE5E5E5FDFDFDFDFDFDFFFFFF +FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDCCE12E75B62E75B62E75B6A6BBD8FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +2E75B62E75B62E75B64880BBE4EAF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF9AB3D42E75B62E75B62E75B6B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F6F6F6D9D9D9D9D9D9EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9FEFDFBB5B5B5 +393939020202040202030100020202020202444444E0E0E0FBFBFBFDFDFDFEFEFEFEFEFEFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFE4EAF35D8CC02E75B62E75B66E96C5EEF1F7C4C4C4646464000000000000 +353535939393EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E75B62E75B62E75B62E75B6 +4880BBE4EAF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9AB3D42E75B62E75B62E75B6 +2E75B6B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3757575000000000000000000000000 +4F4F4FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF6B2ABA6050000050000030000040200000000 +0101010001040102033E3E3EFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +F6F8FB8CAACF2E75B62C71B0464D56000000000000000000000000000000000000000000C4C4C4 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E75B62E75B62E75B62E75B62E75B64880BBE4EAF3FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF9AB3D42E75B62E75B62E75B62E75B62E75B6B2C4DDFFFFFFFFFFFF +FFFFFFFFFFFFC4C4C4000000000000000000000000000000000000000000000000939393FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFDFCF9292524080401050100020000010000030303000000020305000001020202 +6B6B6BF9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDCCE133455B +000000000000000000000000000000000000000000000000000000D9D9D9FFFFFFFFFFFFFFFFFF +FFFFFF2E75B62E75B62E75B62E75B62E75B62E75B62E75B6C7D4E6FFFFFFFFFFFFF6F8FB6E96C5 +2E75B62E75B62E75B62E75B62E75B62E75B6B2C4DDFFFFFFFFFFFFFFFFFFEDEDED353535000000 +000000000000000000000000000000000000000000000000CFCFCFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FEFE000105 +0302020301010100000101010000010000000100000000000101010000009A9A9AFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4C4C4000000000000000000000000000000 +000000000000000000000000000000646464FFFFFFFFFFFFFFFFFFFFFFFF2E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B6C7D4E6F6F8FB6E96C52E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B6B2C4DDFFFFFFFFFFFFFFFFFF939393000000000000000000000000000000000000 +0000000000000000000000004F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FFFF00030A000103000000000000000000 +000002000000020000010000010101000000353535FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF858585000000000000000000000000000000000000000000000000000000 +000000000000708EB47EA0CA7EA0CA7EA0CA2E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B64981BB2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6ACC0DBFFFFFF +FFFFFFFFFFFF353535000000000000000000000000000000000000000000000000000000000000 +000000AFBDD1B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDA6BBD87EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA +7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA4880BB +2E75B62E75B62E75B67892A6000410000408010101010101000003000004000000040000020000 +010101000000040404FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000 +000000000000000000000000000000000000000000000000000000000000000000255F942E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6000000000000 +00000000000000000000000000000000000000000000000000000000000027649B2E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6A4BBCD +00030B010101030000030100000003000105000002020000010000000000000000292929FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000 +000000000000000000000000000000000000000000566D897EA0CA7EA0CA7EA0CA2E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B6000000000000000000000000000000000000 +0000000000000000000000000000000000006B88AC7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA +7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA +7EA0CA7EA0CA7EA0CA7EA0CA7EA0CA8CAACFB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DD +B2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDB2C4DDF1FFFF0000030A0200070000050000 +0000000002070000050000000000000000000303038B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000000000000000000000000000 +000000000000000000D9D9D9FFFFFFFFFFFFFFFFFF2E75B62E75B62E75B62E75B62E75B62E75B6 +6E96C5EEF1F7FFFFFFFFFFFFFFFFFFC7D4E62E75B62E75B62E75B62E75B62E75B62E75B69AB3D4 +DBE3EED1DBEAB2C4DD25292E000000000000000000000000000000000000000000000000000000 +000000000000EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFF6FEFF0E0A07030004040204060201060000010203050002000000 +000101010101282828E9E9E9FDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +939393000000000000000000000000000000000000000000000000000000000000000000F6F6F6 +FFFFFFFFFFFFFFFFFF2E75B62E75B62E75B62E75B62E75B66E96C5F6F8FBFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFC7D4E62E75B62E75B62E75B62E75B62E75B6B2C4DDFFFFFFFFFFFFFFFFFF939393 +000000000000000000000000000000000000000000000000000000000000646464FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FAFCFE958E8303030C0105090502000B0000000606060002010200000100363636E6E6E6FEFEFE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3000000000000000000 +000000000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFF2E75B6 +2E75B62E75B62E75B66E96C5F6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7D4E6 +2E75B62E75B62E75B62E75B6B2C4DDFFFFFFFFFFFFFFFFFFEDEDED353535000000000000000000 +000000000000000000000000000000000000D9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFFFFFDF19B99A30D1014 +0502000A0000000609030207000000191918E0E0E0FFFFFFFCFCFCFDFDFDFDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4C4C4000000000000000000000000000000000000 +000000000000646464F6F6F6FFFFFFFFFFFFFFFFFFFFFFFF2E75B62E75B62E75B66E96C5F6F8FB +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7D4E62E75B62E75B62E75B6 +B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF353535000000000000000000000000000000000000 +000000A1A1A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFFFEFCF5FFFEFFD0D0D16A67662B2426001732233044 +96928FDBD9D7FCFCFCFDFDFDFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFCFCFCF353535000000000000000000000000000000858585F6F6F6FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF2E75B62E75B66E96C5F6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7D4E62E75B62E75B6B2C4DDFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFE3E3E37575750000000000000000000000004F4F4FCFCFCFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFDFFFFFEFEFEFCFCFFFDFCFCFFFDFCE9E9F33473A681A4C6FFFBF8FFFDFCFAFAFAFFFFFF +FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFCFCFCFADADADADADADB9B9B9EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +2E75B66E96C5F6F8FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFC7D4E62E75B6B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +EDEDED27649B27649B9FAFC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFEFEFEFCFCFF +FDFCFCFFFDFCE9E9F33473A681A4C6FFFBF8FFFDFCFAFAFAFFFFFFFBFBFBFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E96C5F6F8FBFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +C7D4E6B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E75B62E75B6DBE3EE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EA0CA +2E75B6B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E75B62E75B6DBE3EEFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EA0CA2E75B6B2C4DDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF2E75B62E75B6DBE3EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFF7EA0CA2E75B6B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E75B62E75B6 +DBE3EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +7EA0CA2E75B6B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E75B62E75B6DBE3EEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EA0CA2E75B6B2C4DDFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFF2E75B62E75B6DBE3EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EA0CA2E75B6B2C4DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E75B6 +2E75B6DBE3EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF7EA0CA2E75B6C7D4E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E75B62E75B6DBE3EEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EA0CA2E75B6DBE3EE +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FEFFFDFEFF +FFFDFBF8F7F6C2C9CD7888972F4253647381D2DAE0F9FCF9FEFEF7FEFFFAFDFDFCFCFCFCFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFAF4FCFEFFFBFDFFF9F7F9C4C7CA5A7083224666668494DCDACFFDFCF7FDFDFDFFFFFFFCFCFC +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDFEFEFDFBB4AEA938333101020500020C +00051000050D000103373B3FD4DADCFAFEFFFDFDFEFDFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FEFFF5FBFBACACAC35302F +0300000303050001070002070002053A3C3BDEDEDEFCFCFCFDFDFDFCFCFCFCFCFCFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFDFFFFA8A4A109000006000001000004090C000206000203030000010003 +36373DFAF9FDFFFEFFFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFF9BA19F0606060100000700000A00000B0000070001 +000006000002383838FFFFFFFFFFFFFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFCFC +2826240802000702000201010000020003050101010300000301020201035A595AF6F6F6FDFAFA +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFAFCF5222523000001040403070100070000050206040003070102030102020202626262 +F8F8F8FDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFE010000080300040000010000 +060606000100040402040000060200020000090705B9B9B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEF000201000304 +03010103000006030400020A020209080000050000030303000000BEBEBEFAFAFAFAFAFAFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFFFF000000000000000000000000000000000000000000000000 +060000070100000301293C4887A7C0DBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EE +DBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1EBF100030C00000201010100010300030B000411 +0002050900000500000101010000004F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FCFFFF00010300000300010300000000000000000000000000000004010002010000070D00081E +4172992E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B65D8CC03D71A30003140A0000060000000205000308000100040000000100010101000000 +000000030303FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000001000003000103 +00000000000000000000000000000000000200020600040B0D1925CCDBEA7EA0CA7EA0CA5D8CC0 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B6 +2E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B62E75B645739A02040C +0B0100040000000102000103080000070000000209000104010101000000171717FFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD000000000002000002000000020000020000010000 +00000001000105030503010469696FF7FDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EE +DBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEDBE3EEE1F7FC010305040000020000000001000001 +05000004000100010A000105000000020202686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFEFC000000000002000001010000040000040000020000000000040001070000100606 +DED5D4FFF9F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFEFFFC00000000000001020002020200000003000001000300000C000006 +0101010B0B0BDCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE414141010101 +0101010101010000000000000101010000000000000707078E8E8EFDFDFDFDFDFDFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD +3C3C3C020202020202000000020202000000010101000000000000090909949494FEFEFEFBFBFB +FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFED2D2D2121212030303000000000000030303 +000000000000020202616161FCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCCFCFCF0D0D0D030303020202 +000000040404000000000000030303666666FFFFFFFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFEFEFEFEFEFEDADADA6666661616160000000101010707072323236C6C6CEFEFEF +FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDD6D6D6626262161616000000020202090909222222 +717171EFEFEFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA +FAFAFAFFFFFFCDCDCD8E8E8E7F7F7FA4A4A4ECECECFEFEFEFFFFFFFFFFFFFDFDFDFBFBFBFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFCFCFCFDFDFDFFFFFFC9C9C98A8A8A7F7F7FA7A7A7EEEEEEFDFDFDFFFFFFFFFFFFFCFCFC +FBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + +end +%%PageTrailer +%%Trailer +%%EOF diff --git a/doc/Network.png b/doc/Network.png new file mode 100644 index 0000000..3a6df9e Binary files /dev/null and b/doc/Network.png differ diff --git a/doc/Toolkit-Overview.dox b/doc/Toolkit-Overview.dox deleted file mode 100644 index 85fc282..0000000 --- a/doc/Toolkit-Overview.dox +++ /dev/null @@ -1,23 +0,0 @@ -/** -@page toolkit-overview Toolkit Overview - - -The Programmer's Toolkit is an extension of the EPANET simulation package. EPANET performs extended period simulation of hydraulic and water quality behavior within pressurized pipe networks. A network can consist of pipes, nodes (pipe junctions), pumps, valves and storage tanks or reservoirs. EPANET tracks the flow of water in each pipe, the pressure at each node, the height of water in each tank, and the concentration of a chemical species throughout the network during a multi-time period simulation. In addition to chemical species, water age and source tracing can also be simulated. - -The Toolkit provides a series of functions that allow programmers to customize the use of EPANET's hydraulic and water quality solution engine to their own applications. Before using the Toolkit one should become familiar with the way that EPANET represents a pipe network and the design and operating information it requires to perform a simulation. This information can be obtained from reading EPANET's on-line Help file or from the EPANET Users Manual. - -A typical usage of the Toolkit functions to analyze a distribution system might look as follows: - -1. Use the @ref ENopen function to open the Toolkit system, along with an EPANET [Input file](Input-File). -2. Use the `ENsetxxx` series of functions to change selected system characteristics. -3. Run a full hydraulic simulation using the @ref ENsolveH function (which automatically saves results to a [Hydraulics file](Hydraulics-File)) or use the @ref ENopenH - @ref ENinitH - @ref ENrunH - @ref ENnextH - @ref ENcloseH series of functions to step through a hydraulic simulation, accessing results along the way with the `ENgetxxx` series of functions. -4. Run a full water quality simulation using @ref ENsolveQ (which automatically saves hydraulic and water quality results to an [Output file](Output-File)) or use the @ref ENopenQ - @ref ENinitQ - @ref ENrunQ - @ref ENnextQ (or @ref ENstepQ) - @ref ENcloseQ series of functions to step through a water quality simulation, accessing results along the way with the `ENgetxxx` series of functions. -5. Return to Step 2 to run additional analyses or use the @ref ENreport function to write a formatted report to the [Report file](Report-File). -6. Call the @ref ENclose function to close all files and release system memory. - -More specific examples of using the functions can be found in the [Example Applications](Example-Applications) topic. - - -- @subpage how-to-use - -*/ \ No newline at end of file diff --git a/doc/doxyfile b/doc/doxyfile index 0c31cba..ba331a2 100644 --- a/doc/doxyfile +++ b/doc/doxyfile @@ -1,4 +1,4 @@ -# Doxyfile 1.8.11 +# Doxyfile 1.8.10 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -32,13 +32,13 @@ DOXYFILE_ENCODING = UTF-8 # title of most generated pages and in a few other places. # The default value is: My Project. -PROJECT_NAME = EPANET +PROJECT_NAME = "OWA-EPANET Toolkit" # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 2.1 +PROJECT_NUMBER = 2.2 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a @@ -58,7 +58,7 @@ PROJECT_LOGO = # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = ../epanet-owa-dox +OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and @@ -226,7 +226,7 @@ SEPARATE_MEMBER_PAGES = NO # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. -TAB_SIZE = 2 +TAB_SIZE = 4 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: @@ -535,7 +535,7 @@ HIDE_COMPOUND_REFERENCE= NO # the files that are included by a file in the documentation of that file. # The default value is: YES. -SHOW_INCLUDE_FILES = YES +SHOW_INCLUDE_FILES = NO # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader @@ -694,7 +694,7 @@ FILE_VERSION_FILTER = # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. -LAYOUT_FILE = +LAYOUT_FILE = DoxygenLayout.xml # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib @@ -749,12 +749,6 @@ WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO -# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. -# The default value is: NO. - -WARN_AS_ERROR = NO - # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated @@ -781,10 +775,15 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = ../include \ - ../src \ - ../doc \ - ../ +INPUT = main.dox \ + toolkit-usage.dox \ + toolkit-examples.dox \ + toolkit-files.dox \ + input-file.dox \ + toolkit-units.dox \ + modules.dox \ + ../include/epanet2_enums.h \ + ../include/epanet2_2.h # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -806,8 +805,8 @@ INPUT_ENCODING = UTF-8 # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl, -# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js. +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, +# *.vhdl, *.ucf, *.qsf, *.as and *.js. FILE_PATTERNS = *.c \ *.cc \ @@ -856,7 +855,7 @@ FILE_PATTERNS = *.c \ # be searched for input files as well. # The default value is: NO. -RECURSIVE = NO +RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a @@ -918,7 +917,7 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = +IMAGE_PATH = . # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program @@ -934,10 +933,6 @@ IMAGE_PATH = # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. INPUT_FILTER = @@ -947,10 +942,6 @@ INPUT_FILTER = # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. FILTER_PATTERNS = @@ -1068,7 +1059,7 @@ VERBATIM_HEADERS = YES # rich C++ code for which doxygen's built-in parser lacks the necessary type # information. # Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse-libclang=ON option for CMake. +# compiled with the --with-libclang option. # The default value is: NO. CLANG_ASSISTED_PARSING = NO @@ -1122,7 +1113,7 @@ GENERATE_HTML = YES # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_OUTPUT = ../../epanet-owa-dox +HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). @@ -1149,7 +1140,7 @@ HTML_FILE_EXTENSION = .html # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_HEADER = +HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard @@ -1159,7 +1150,7 @@ HTML_HEADER = # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_FOOTER = +HTML_FOOTER = newfooter.html # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of @@ -1184,7 +1175,7 @@ HTML_STYLESHEET = # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_STYLESHEET = +HTML_EXTRA_STYLESHEET = extrastylesheet.css # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1323,7 +1314,7 @@ GENERATE_HTMLHELP = NO # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -CHM_FILE = +CHM_FILE = owa_epanet.chm # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, @@ -1331,7 +1322,7 @@ CHM_FILE = # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -HHC_LOCATION = +HHC_LOCATION = "c:\Program Files (x86)\HTML Help Workshop\hhc.exe" # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the master .chm file (NO). @@ -1453,7 +1444,7 @@ ECLIPSE_DOC_ID = org.doxygen.Project # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -DISABLE_INDEX = NO +DISABLE_INDEX = YES # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag @@ -1480,7 +1471,7 @@ GENERATE_TREEVIEW = YES # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. -ENUM_VALUES_PER_LINE = 4 +ENUM_VALUES_PER_LINE = 0 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. @@ -1658,7 +1649,7 @@ EXTRA_SEARCH_MAPPINGS = # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. # The default value is: YES. -GENERATE_LATEX = NO +GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -1701,7 +1692,7 @@ COMPACT_LATEX = NO # The default value is: a4. # This tag requires that the tag GENERATE_LATEX is set to YES. -PAPER_TYPE = a4 +PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names # that should be included in the LaTeX output. The package can be specified just @@ -1729,7 +1720,7 @@ EXTRA_PACKAGES = # to HTML_HEADER. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_HEADER = +LATEX_HEADER = header.tex # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the # generated LaTeX document. The footer should contain everything after the last @@ -1740,7 +1731,7 @@ LATEX_HEADER = # Note: Only use a user-defined footer if you know what you are doing! # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_FOOTER = +LATEX_FOOTER = # The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined # LaTeX style sheets that are included after the standard style sheets created @@ -1751,7 +1742,7 @@ LATEX_FOOTER = # list). # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_EXTRA_STYLESHEET = +LATEX_EXTRA_STYLESHEET = # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the LATEX_OUTPUT output @@ -1785,14 +1776,14 @@ USE_PDFLATEX = YES # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_BATCHMODE = NO +LATEX_BATCHMODE = YES # If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the # index chapters (such as File Index, Compound Index, etc.) in the output. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_HIDE_INDICES = NO +LATEX_HIDE_INDICES = YES # If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source # code with syntax highlighting in the LaTeX output. @@ -1812,14 +1803,6 @@ LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- @@ -2059,7 +2042,7 @@ MACRO_EXPANSION = YES # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -EXPAND_ONLY_PREDEF = YES +EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES, the include files in the # INCLUDE_PATH will be searched if a #include is found. @@ -2175,7 +2158,7 @@ PERL_PATH = /usr/bin/perl # powerful graphs. # The default value is: YES. -CLASS_DIAGRAMS = YES +CLASS_DIAGRAMS = NO # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see: diff --git a/doc/extrastylesheet.css b/doc/extrastylesheet.css new file mode 100644 index 0000000..1a91060 --- /dev/null +++ b/doc/extrastylesheet.css @@ -0,0 +1,2 @@ +h1 { font-size:1.5em; } + diff --git a/doc/footer.tex b/doc/footer.tex new file mode 100644 index 0000000..76e29b1 --- /dev/null +++ b/doc/footer.tex @@ -0,0 +1,12 @@ +% Latex footer for doxygen 1.8.10 +%--- End generated contents --- + +% Index +\backmatter +\newpage +\phantomsection +\clearemptydoublepage +\addcontentsline{toc}{chapter}{Index} +\printindex + +\end{document} diff --git a/doc/header.tex b/doc/header.tex new file mode 100644 index 0000000..f44b122 --- /dev/null +++ b/doc/header.tex @@ -0,0 +1,141 @@ +% Latex header for doxygen 1.8.10 +\documentclass[twoside]{book} + +% Packages required by doxygen +\usepackage{fixltx2e} +\usepackage{calc} +\usepackage{doxygen} +\usepackage[export]{adjustbox} % also loads graphicx +\usepackage{graphicx} +\usepackage[utf8]{inputenc} +\usepackage{makeidx} +\usepackage{multicol} +\usepackage{multirow} +\PassOptionsToPackage{warn}{textcomp} +\usepackage{textcomp} +\usepackage[nointegrals]{wasysym} +\usepackage[table]{xcolor} + +% Font selection +\usepackage[T1]{fontenc} +\usepackage[scaled=.90]{helvet} +\usepackage{courier} +\usepackage{amssymb} +\usepackage{sectsty} +\renewcommand{\familydefault}{\sfdefault} +\allsectionsfont{% + \fontseries{bc}\selectfont% + \color{darkgray}% +} +\renewcommand{\DoxyLabelFont}{% + \fontseries{bc}\selectfont% + \color{darkgray}% +} +\newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} + +% Page & text layout +\usepackage{geometry} +\geometry{% + a4paper,% + top=2.5cm,% + bottom=2.5cm,% + left=2.5cm,% + right=2.5cm% +} +\tolerance=750 +\hfuzz=15pt +\hbadness=750 +\setlength{\emergencystretch}{15pt} +\setlength{\parindent}{0cm} +\setlength{\parskip}{0.2cm} +\makeatletter +\renewcommand{\paragraph}{% + \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@parafont% + }% +} +\renewcommand{\subparagraph}{% + \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@subparafont% + }% +} +\makeatother + +% Headers & footers +\usepackage{fancyhdr} +\pagestyle{fancyplain} +\fancyhead[LE]{\fancyplain{}{\bfseries\thepage}} +\fancyhead[CE]{\fancyplain{}{}} +\fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}} +\fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}} +\fancyhead[CO]{\fancyplain{}{}} +\fancyhead[RO]{\fancyplain{}{\bfseries\thepage}} +\fancyfoot[LE]{\fancyplain{}{}} +\fancyfoot[CE]{\fancyplain{}{}} +\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize OWA-EPANET 2.2 \textcopyright 2019}} +\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize OWA-EPANET 2.2 \textcopyright 2019}} +\fancyfoot[CO]{\fancyplain{}{}} +\fancyfoot[RO]{\fancyplain{}{}} +\renewcommand{\footrulewidth}{0.4pt} +\renewcommand{\chaptermark}[1]{% + \markboth{#1}{}% +} +\renewcommand{\sectionmark}[1]{% + \markright{\thesection\ #1}% +} + +% Indices & bibliography +\usepackage{natbib} +\usepackage[titles]{tocloft} +\setcounter{tocdepth}{1} +\setcounter{secnumdepth}{5} +\makeindex + +% Hyperlinks (required, but should be loaded last) +\usepackage{ifpdf} +\ifpdf + \usepackage[pdftex,pagebackref=true]{hyperref} +\else + \usepackage[ps2pdf,pagebackref=true]{hyperref} +\fi +\hypersetup{% + colorlinks=true,% + linkcolor=blue,% + citecolor=blue,% + unicode% +} + +% Custom commands +\newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% +} + + +%===== C O N T E N T S ===== + +\begin{document} + +% Titlepage & ToC +\hypersetup{pageanchor=false, + bookmarks=true, + bookmarksnumbered=true, + pdfencoding=unicode + } +\pagenumbering{roman} +\begin{titlepage} +\vspace*{7cm} +\begin{center}% +{\Large OWA-EPANET Toolkit\linebreak\linebreak 2.2}\\ +\vspace*{1cm} +{\large January 2019}\\ +%\vspace*{0.5cm} +%{\small Wed Jan 23 2019 17:57:36}\\ +\end{center} +\end{titlepage} +\clearemptydoublepage +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} +\hypersetup{pageanchor=true} + +%--- Begin generated contents --- diff --git a/doc/input-file.dox b/doc/input-file.dox new file mode 100644 index 0000000..8bbe5c1 --- /dev/null +++ b/doc/input-file.dox @@ -0,0 +1,1152 @@ +/** +@page InpFile Input File +The Input file is a standard EPANET input data file that describes the system being analyzed. It can either be created external to the application being developed with the Toolkit or by the application itself. It is the first file name supplied to the @ref EN_open function. A project's data associated with its Input file remains accessible until the project is closed down with the @ref EN_close or deleted with @ref EN_deleteproject. + +The file is organized by sections where each section begins with a keyword enclosed in brackets. The various keywords are listed below. Click on a section to see the format of the data it contains. + +|Network Components |System Operation |Water Quality |Options & Reporting |GUI Support | +|:-------------------------------|:-------------------------------|:--------------------------------|:-------------------------------|------------------------------------| +|@subpage TitlePage "[Title]" |@subpage CurvesPage "[Curves]" |@subpage QualPage "[Quality]" |@subpage OptionsPage "[Options]"|@subpage BackdropPage "[Backdrop]" | +|@subpage JuncsPage "[Junctions]"|@subpage PatsPage "[Patterns]" |@subpage ReactsPage "[Reactions]"|@subpage TimesPage "[Times]" |@subpage CoordsPage "[Coordinates]" | +|@subpage ResvPage "[Reservoirs]"|@subpage EnergyPage "[Energy]" |@subpage SourcesPage "[Sources]" |@subpage ReportPage "[Report]" |@subpage VertexPage "[Vertices]" | +|@subpage TanksPage "[Tanks]" |@subpage StatusPage "[Status]" |@subpage MixingPage "[Mixing]" | |@subpage LabelsPage "[Labels]" | +|@subpage PipesPage "[Pipes]" |@subpage CtrlsPage "[Controls]" | | | | +|@subpage PumpsPage "[Pumps]" |@subpage RulesPage "[Rules]" | | | | +|@subpage ValvesPage "[Valves]" |@subpage DmndsPage "[Demands]" | | | | +|@subpage EmitsPage "[Emitters]" | | | | | + +The order of sections is not important. However, whenever a node or link is referred to in a section it must have already been defined in the [JUNCTIONS], [RESERVOIRS], [TANKS], [PIPES], [PUMPS], or [VALVES] sections. Thus it is recommended that these sections be placed first. + +Each section can contain one or more lines of data. Blank lines can appear anywhere in the file and the semicolon (;) can be used to indicate that what follows on the line is a comment, not data. A maximum of 1024 characters can appear on a line. + +The ID labels used to identify nodes, links, curves and patterns can be any combination of up to 31 characters and numbers. + +The GUI Support sections are provided to assist an external program that wishes to draw a visual representation of a project's network. + +*/ + +/** +@page CtrlsPage [CONTROLS] + +__Purpose:__ + +Defines simple controls that modify links based on a single condition.
+ +__Format:__ + +One line for each control which can be of the form: + +   LINK _linkID_  _status_  IF NODE   _nodeID_  ABOVE / BELOW   _value_ + +   LINK _linkID_   _status_   AT TIME  _time_ + +   LINK _linkID_   _status_   AT CLOCKTIME _clocktime_   AM / PM + +where: + + + + + + + +
linkID =  a link ID label
status =   OPEN / CLOSED, a pump speed setting, or a control valve setting
nodeID =  a node ID label
value =  a pressure for a junction or a water level for a tank
time =  a time since the start of the simulation in hours
clocktime =  a 24-hour clock time (hrs:min)
+ +__Remarks:__ +1. Simple controls are used to change link status or settings based on tank water level, junction pressure, time into the simulation or time of day. +2. See the notes for the @ref StatusPage section for conventions used in specifying link status and setting, particularly for control valves. + +__Examples:__ + +[CONTROLS]
+;Close Link 12 if the level in Tank 23 exceeds 20 ft.
+LINK 12 CLOSED IF NODE 23 ABOVE 20 + +;Open Link 12 if the pressure at Node 130 is under 30 psi
+LINK 12 OPEN IF NODE 130 BELOW 30 + +;Pump PUMP02's speed is set to 1.5 at 16 hours into the simulation
+LINK PUMP02 1.5 AT TIME 16 + +;Link 12 is closed at 10 am and opened at 8 pm throughout the simulation
+LINK 12 CLOSED AT CLOCKTIME 10 AM
+LINK 12 OPEN AT CLOCKTIME 8 PM
+*/ + +/** +@page CurvesPage [CURVES] + +__Purpose:__ + +Defines data curves and their X,Y points.
+ +__Format:__ + +One line for each X,Y point on each curve containing: +- Curve ID label +- an X value +- a Y value + +__Remarks:__ +1. Curves can be used to represent the following relations: + - Head v. Flow for pumps + - Efficiency v. Flow for pumps + - Volume v. Depth for tanks + - Head Loss v. Flow for General Purpose Valves +2. The points of a curve must be entered in order of increasing X-values (lower to higher). +3. If the input file will be used with the Windows version of EPANET, then adding a comment which contains the curve type and description, separated by a colon, directly above the first entry for a curve will ensure that these items appear correctly in EPANET's Curve Editor. Curve types include PUMP, EFFICIENCY, VOLUME, and HEADLOSS. See the examples below. + +__Example:__ +``` +[CURVES] +;ID Flow Head +;PUMP: Curve for Pump 1 +C1 0 200 +C1 1000 100 +C1 3000 0 + +;ID Flow Effic. +;EFFICIENCY: +E1 200 50 +E1 1000 85 +E1 2000 75 +E1 3000 65 +``` +*/ + +/** +@page DmndsPage [DEMANDS] + +__Purpose:__ + +Supplement to @ref JuncsPage section for defining multiple water demands at junction nodes. + +__Format:__ + +One line for each category of demand at a junction containing: +- Junction ID label +- Base demand (flow units) +- Demand pattern ID (optional) +- Name of demand category preceded by a semicolon (optional) + +__Remarks:__ +1. Only use for junctions whose demands need to be changed or supplemented from entries in [JUNCTIONS] section. +2. Data in this section replaces any demand entered in the [JUNCTIONS] section for the same junction. +3. An unlimited number of demand categories can be entered per junction. +4. If no demand pattern is supplied then the junction demand follows the \b Pattern entry in the @ref OptionsPage section, or Pattern 1 if no such pattern is supplied. If the default pattern (or Pattern 1) does not exist, then the demand remains constant. + +__Example:__ +``` +[DEMANDS] +;ID Demand Pattern Category +;--------------------------------- +J1 100 101 ;Domestic +J1 25 102 ;School +J256 50 101 ;Domestic +``` +*/ + +/** +@page EmitsPage [EMITTERS] + +__Purpose:__ + +Defines junctions modeled as emitters (sprinklers or orifices). + +__Format:__ + +One line for each emitter containing: +- Junction ID label +- Flow coefficient, flow units at 1 psi (1 meter) pressure drop + +__Remarks:__ +1. Emitters are used to model flow through sprinkler heads or pipe leaks. +2. Flow out of the emitter equals the product of the flow coefficient and the junction pressure raised to a power. +3. The power can be specified using the EMITTER EXPONENT option in the @ref OptionsPage section. The default power is 0.5, which normally applies to sprinklers and nozzles. +4. Actual demand reported in the program's results includes both the normal demand at the junction plus flow through the emitter. +5. An [EMITTERS] section is optional. +*/ + +/** +@page EnergyPage [ENERGY] + +__Purpose:__ + +Defines parameters used to compute pumping energy and cost. + +__Formats:__ + +   GLOBAL   PRICE / PATTERN / EFFIC   value + +   PUMP  pumpID   PRICE / PATTERN / EFFIC  value + +   DEMAND CHARGE   value + +__Remarks:__ +1. First format is used to set global default values of energy price, price pattern, and pumping efficiency for all pumps. +2. Second format is used to override global defaults for specific pumps. +3. Parameters are defined as follows: + - \b PRICE = average cost per kW-hour, + - \b PATTERN = ID label of time pattern describing how energy price varies with time, + - \b EFFIC = either a single percent efficiency for global setting or the ID label of an efficiency curve for a specific pump, + - DEMAND CHARGE = added cost per maximum kW usage during the simulation period. +4. The default global pump efficiency is 75% and the default global energy price is 0. +5. All entries in this section are optional. Items offset by slashes (/) indicate allowable choices. + +__Example:__ +``` +[ENERGY] +GLOBAL PRICE 0.05 ;Sets global energy price +GLOBAL PATTERN PAT1 ;and time-of-day pattern +PUMP 23 PRICE 0.10 ;Overrides price for Pump 23 +PUMP 23 EFFIC E23 ;Assigns effic. curve to Pump 23 +``` +*/ + +/** +@page JuncsPage [JUNCTIONS] + +__Purpose:__ + +Defines junction nodes contained in the network. + +__Format:__ + +One line for each junction containing: +- ID label +- Elevation, ft (m) +- Base demand flow (flow units) (optional) +- Demand pattern ID (optional) + +__Remarks:__ +1. A [JUNCTIONS] section with at least one junction is required. +2. If no demand pattern is supplied then the junction demand follows the Default Demand Pattern provided in the @ref OptionsPage section, or Pattern 1 if no Default Pattern is specified. If the Default Pattern (or Pattern 1) does not exist, then the demand remains constant. +3. Demands can also be entered in the @ref DmndsPage section and include multiple demand categories per junction. + +__Example:__ +``` +[JUNCTIONS] +;ID Elev. Demand Pattern +;------------------------------ +J1 100 50 Pat1 +J2 120 10 ;Uses default demand pattern +J3 115 ;No demand at this junction +``` +*/ + +/** +@page MixingPage [MIXING] + +__Purpose:__ + +Identifies the model that governs mixing within storage tanks. + +__Format:__ + +One line per tank containing: +- Tank ID label +- Mixing model (MIXED, 2COMP, FIFO, or LIFO) +- Compartment volume (fraction) + +__Remarks:__ +1. Mixing models include: + - Single compartment, complete mix model ( \b MIXED ) + - Two-compartment complete mix model ( \b 2COMP ) + - Plug flow, first in, first out model ( \b FIFO ) + - Stacked plug flow, last in, first out model ( \b LIFO ) +2. The compartment volume parameter only applies to the two-compartment model and represents the fraction of the total tank volume devoted to the inlet/outlet compartment. +3. The [MIXING] section is optional. Tanks not described in this section are assumed to be completely mixed. + +__Example:__ +``` +[MIXING] +;Tank Model +;----------------------- +T12 LIFO +T23 2COMP 0.2 +``` +*/ + +/** +@page OptionsPage [OPTIONS] + +__Purpose:__ + +Defines various simulation options. + +__Formats:__ + + + + + + + + + + + + + + + + + + + + + + + + + + +
UNITSCFS / GPM / MGD / IMGD / AFD /
LPS / LPM / MLD / CMH / CMD
HEADLOSSH-W / D-W / C-M
HYDRAULICSUSE / SAVE  filename
VISCOSITYvalue
SPECIFIC GRAVITYvalue
TRIALSvalue
ACCURACYvalue
FLOWCHANGEvalue
HEADERRORvalue
CHECKFREQvalue
MAXCHECKvalue
DAMPLIMITvalue
UNBALANCEDSTOP / CONTINUE / CONTINUE n
DEMAND MODELDDA / PDA
MINIMUM PRESSUREvalue
REQUIRED PRESSUREvalue
PRESSURE EXPONENTvalue
PATTERNid
DEMAND MULTIPLIERvalue
EMITTER EXPONENTvalue
QUALITYNONE / CHEMICAL / AGE / TRACE   nodeID
DIFFUSIVITYvalue
TOLERANCEvalue
MAPfilename
+__Definitions:__ + +UNITS sets the units in which flow rates are expressed where: +- \b CFS = cubic feet per second +- \b GPM = gallons per minute +- \b MGD = million gallons per day +- \b IMGD = Imperial MGD +- \b AFD = acre-feet per day +- \b LPS = liters per second +- \b LPM = liters per minute +- \b MLD = million liters per day +- \b CMH = cubic meters per hour +- \b CMD = cubic meters per day + +For CFS, GPM, MGD, IMGD, and AFD other input quantities are expressed in US Customary Units. If flow units are in liters or cubic meters then Metric Units must be used for all other input quantities as well. (See the @ref Units topic). The default flow units are \b GPM. + +\b HEADLOSS selects a formula to use for computing head loss for flow through a pipe. The choices are the Hazen-Williams (\b H-W ), Darcy-Weisbach (\b D-W ), or Chezy-Manning (\b C-M ) formulas. The default is \b H-W. + +The \b HYDRAULICS option allows you to either SAVE the current hydraulics solution to a file or \b USE a previously saved hydraulics solution. This is useful when studying factors that only affect water quality behavior. + +\b VISCOSITY is the kinematic viscosity of the fluid being modeled relative to that of water at 20 deg. C (1.0 centistoke). The default value is 1.0. + +\b SPECIFIC GRAVITY is the ratio of the density of the fluid being modeled to that of water at 4 deg. C (unitless). The default value is 1.0. + +\b TRIALS are the maximum number of trials used to solve network hydraulics at each hydraulic time step of a simulation. The default is 40. + +\b ACCURACY prescribes the convergence criterion that determines when a hydraulic solution has been reached. The trials end when the sum of all flow changes from the previous solution divided by the total flow in all links is less than this number. The default is 0.001. + +\b FLOWCHANGE is a similar convergence criterion requiring that the largest absolute flow change between the current and previous solutions be less than the specified value (in flow units). The default is 0 which means that this criterion is not used. + +\b HEADERROR is yet another convergence criterion requiring that the head loss computed by the head loss formula compared to the difference in nodal heads across each link be less than the specified value (in ft or m). The default is 0 which means that this criterion is not used. + +\b CHECKFREQ sets the number of solution trials that pass during hydraulic balancing before the status of pumps, check valves, flow control valves and pipes connected to tanks are once again updated. The default value is 2, meaning that status checks are made every other trial. + +\b MAXCHECK is the number of solution trials after which periodic status checks are discontinued. Instead, a status check is made only after convergence is achieved. The default value is 10, meaning that after 10 trials, instead of checking status every \b CHECKFREQ trials, status is checked only at convergence. + +\b DAMPLIMIT is the accuracy value at which solution damping and status checks on PRVs and PSVs should begin. Damping limits all flow changes to 60% of what they would otherwise be as future trials unfold. The default is 0 which indicates that no damping should be used and that status checks on control valves are made at every iteration. + +\b UNBALANCED determines what happens if a hydraulic solution cannot be reached within the prescribed number of \b TRIALS at some hydraulic time step into the simulation. \b STOP will halt the entire analysis at that point. \b CONTINUE will continue the analysis with a warning message issued. CONTINUE n will continue the search for a solution for another \b n trials with the status of all links held fixed at their current settings. The simulation will be continued at this point with a message issued about whether convergence was achieved or not. The default choice is \b STOP. + +\b DEMAND MODEL specifies whether a demand driven analysis ( \b DDA ) or a pressure driven analysis ( \b PDA ) should be made. Under \b DDA full nodal demands are always met even if negative pressures result. \b PDA assumes that demand varies between 0 and its full value as a power function of nodal pressure. The default demand model is \b DDA. + +\b MINIMUM PRESSURE is the pressure below which no demand can be delivered under a pressure driven analysis. It has no effect on a demand driven analysis. Its default value is 0. + +\b REQUIRED PRESSURE is the pressure required to supply a node's full demand under a pressure driven analysis. It has no effect on a demand driven analysis. It must be at least 0.1 psi or m higher than the MINIMUM PRESSURE, which is also its default value. + +\b PRESSURE EXPONENT is the power to which pressure is raised when computing the demand delivered to a node under a pressure driven analysis. It has no effect on a demand driven analysis. Its default value is 0.5. + +\b PATTERN provides the ID label of a default demand pattern to be applied to all junctions where no demand pattern was specified. If no such pattern exists in the \b [PATTERNS] section then by default the pattern consists of a single multiplier equal to 1.0. If this option is not used, then the global default demand pattern has a label of "1". + +The DEMAND MULTIPLIER is used to adjust the values of baseline demands for all junctions and all demand categories. For example, a value of 2 doubles all baseline demands, while a value of 0.5 would halve them. The default value is 1.0. + +EMITTER EXPONENT specifies the power to which the pressure at a junction is raised when computing the flow issuing from an emitter. The default is 0.5. + +\b QUALITY selects the type of water quality analysis to perform. The choices are NONE, CHEMICAL, AGE, and \b TRACE. In place of \b CHEMICAL the actual name of the chemical can be used followed by its concentration units (e.g., CHLORINE mg/L). If \b TRACE is selected it must be followed by the ID label of the node being traced. The default selection is \b NONE (no water quality analysis). + +\b DIFFUSIVITY is the molecular diffusivity of the chemical being analyzed relative to that of chlorine in water. The default value is 1.0. Diffusivity is only used when mass transfer limitations are considered in pipe wall reactions. A value of 0 will cause EPANET to ignore mass transfer limitations. + +\b TOLERANCE is the difference in water quality level below which one can say that one parcel of water is essentially the same as another. The default is 0.01 for all types of quality analyses (chemical, age (measured in hours), or source tracing (measured in percent)). + +\b MAP is used to supply the name of a file containing coordinates of the network's nodes so that a map of the network can be drawn. It is not used for any hydraulic or water quality computations. + +__Remarks:__ +1. All options assume their default values if not explicitly specified in this section. +2. Items offset by slashes (/) indicate allowable choices. + +__Example:__ +``` +[OPTIONS] +UNITS CFS +HEADLOSS D-W +DEMAND MODEL PDA +REQUIRED PRESSURE 40 +QUALITY TRACE Tank23 +UNBALANCED CONTINUE 10 +``` +*/ + +/** +@page PatsPage [PATTERNS] + +__Purpose:__ + +Defines time patterns. + +__Format:__ + +One or more lines for each pattern containing: +- Pattern ID label +- One or more multipliers + +__Remarks:__ +1. Multipliers define how some base quantity (e.g., demand) is adjusted for each time period. +2. All patterns share the same time period interval as defined in the @ref TimesPage section. +3. Each pattern can have a different number of time periods. +4. When the simulation time exceeds the pattern length the pattern wraps around to its first period. +5. Use as many lines as it takes to include all multipliers for each pattern. + +__Example:__ +``` +[PATTERNS] +;Pattern P1 +P1 1.1 1.4 0.9 0.7 +P1 0.6 0.5 0.8 1.0 +;Pattern P2 +P2 1 1 1 1 +P2 0 0 1 +``` +*/ + +/** +@page PipesPage [PIPES] + +__Purpose:__ + +Defines all pipe links contained in the network.
+ +__Format:__ + +One line for each pipe containing: +- ID label +- ID of start node +- ID of end node +- Length, ft (m) +- Diameter, inches (mm) +- Roughness coefficient +- Minor loss coefficient +- Status (OPEN, CLOSED, or CV) + +__Remarks:__ +1. Roughness coefficient is unitless for Hazen-Williams and Chezy-Manning head loss formulas and has units of millifeet (mm) for the Darcy-Weisbach formula. Choice of head loss formula is supplied in the @ref OptionsPage section. +2. Setting status to \b CV means that the pipe contains a check valve restricting flow to one direction. +3. If minor loss coefficient is 0 and pipe is \b OPEN then these two items can be dropped from the input line. + +__Example:__ +``` +[PIPES] +;ID Node1 Node2 Length Diam. Roughness Mloss Status +;------------------------------------------------------------- +P1 J1 J2 1200 12 120 0.2 OPEN +P2 J3 J2 600 6 110 0 CV +P3 J1 J10 1000 12 120 +``` +*/ + +/** +@page PumpsPage [PUMPS] + +__Purpose:__ + +Defines all pump links contained in the network. + +__Format:__ + +One line for each pump containing: +- ID label +- ID of start node +- ID of end node +- Keyword and Value (can be repeated) + +__Remarks:__ +1. Keywords consists of: + - \b POWER - power for constant energy pump, hp (kw) + - \b HEAD - ID of curve that describes head versus flow for the pump + - \b SPEED - relative speed setting (normal speed is 1.0, 0 means pump is off) + - \b PATTERN - ID of time pattern that describes how speed setting varies with time +2. Either \b POWER or \b HEAD must be supplied for each pump. The other keywords are optional. + +__Example:__ +``` +[PUMPS] +;ID Node1 Node2 Properties +;--------------------------------------------- +Pump1 N12 N32 HEAD Curve1 +Pump2 N121 N55 HEAD Curve1 SPEED 1.2 +Pump3 N22 N23 POWER 100 +``` +*/ + +/** +@page QualPage [QUALITY] + +__Purpose:__ + +Defines initial water quality at nodes. + +__Format:__ + +One line per node containing: +- Node ID label +- Initial quality + +__Remarks:__ +1. Quality is assumed to be zero for nodes not listed. +2. Quality represents concentration for chemicals, hours for water age, or percent for source tracing. +3. The [QUALITY] section is optional. +*/ + +/** +@page ReactsPage [REACTIONS] + +__Purpose:__ + +Defines parameters related to chemical reactions occurring in the network. + +__Formats:__ + +   ORDER  BULK / WALL / TANK  _value_ + +   GLOBAL  BULK / WALL  _value_ + +   BULK / WALL    _pipeID_  _value_ + +   TANK    _tankID_  _value_ + +   LIMITING POTENTIAL    _value_ + +   ROUGHNESS CORRELATION    _value_ + +__Definitions:__ + +\b ORDER is used to set the order of reactions occurring in the bulk fluid, at the pipe wall, or in tanks, respectively. Values for wall reactions must be either 0 or 1. If not supplied the default reaction order is 1.0. + +\b GLOBAL is used to set a global value for all bulk reaction coefficients (pipes and tanks) or for all pipe wall coefficients. The default value is zero. + +BULK, WALL, and \b TANK are used to override the global reaction coefficients for specific pipes and tanks. + +LIMITING POTENTIAL specifies that reaction rates are proportional to the difference between the current concentration and some limiting potential value. + +ROUGHNESS CORRELATION will make all default pipe wall reaction coefficients be related to pipe roughness in the following manner: +|Head Loss Equation|Roughness Correlation| +|------------------|---------------------| +|Hazen-Williams | F / C | +|Darcy-Weisbach | F / log(e/D) | +|Chezy-Manning | F * n | + +where \b F = roughness correlation, \b C = Hazen-Williams C-factor, \b e = Darcy-Weisbach roughness, \b D = pipe diameter, and \b n = Chezy-Manning roughness coefficient. The default value computed this way can be overridden for any pipe by using the \b WALL format to supply a specific value for the pipe. + +__Remarks:__ +1. Remember to use positive numbers for growth reaction coefficients and negative numbers for decay coefficients. +2. The time units for all reaction coefficients are 1/days. +3. All entries in this section are optional. Items offset by slashes (/) indicate allowable choices. + +__Example:__ +``` +[REACTIONS] +ORDER WALL 0 ;Wall reactions are zero-order +GLOBAL BULK -0.5 ;Global bulk decay coeff. +GLOBAL WALL -1.0 ;Global wall decay coeff. +WALL P220 -0.5 ;Pipe-specific wall coeffs. +WALL P244 -0.7 +``` +*/ + +/** +@page ReportPage [REPORT] + +__Purpose:__ + +Describes the contents of the output report produced from a simulation. + +__Formats:__ + + + + + + + + + + + +
\b PAGESIZE \a value
\b FILE \a filename
\b STATUS YES / NO / FULL
\b SUMMARY YES / NO
\b MESSAGES YES / NO
\b ENERGY YES / NO
\b NODES NONE / ALL/ node1 node2 ...
\b LINKS NONE / ALL/ node1 node2 ...
\a variable YES / NO
\a variable  BELOW / ABOVE / PRECISION \a value
+ +__Definitions:__ + +\b PAGESIZE sets the number of lines written per page of the output report. The default is 0, meaning that no line limit per page is in effect. + +\b FILE supplies the name of a file to which the output report will be written (ignored by the Windows version of EPANET). The default is to write the report to the project's @ref RptFile file. + +\b STATUS determines whether a hydraulic status report should be generated. If \b YES is selected the report will identify all network components that change status during each time step of the simulation. If \b FULL is selected, then the status report will also include information from each trial of each hydraulic analysis. This level of detail is only useful for de-bugging networks that become hydraulically unbalanced. The default is \b NO. + +\b SUMMARY determines whether a summary table of number of network components and key analysis options is generated. The default is \b YES. + +\b ENERGY determines if a table reporting average energy usage and cost for each pump is provided. The default is \b NO. + +\b NODES identifies which nodes will be reported on. You can either list individual node ID labels or use the keywords \b NONE or \b ALL. Additional \b NODES lines can be used to continue the list. The default is \b NONE. + +\b LINKS identifies which links will be reported on. You can either list individual link ID labels or use the keywords \b NONE or \b ALL Additional \b LINKS lines can be used to continue the list. The default is \b NONE. + +The _variable_ reporting option is used to identify which quantities are reported on, how many decimal places are displayed, and what kind of filtering should be used to limit output reporting. Node variables that can be reported on include: +- \b Elevation +- \b Demand +- \b Head +- \b Pressure +- \b Quality + +Link variables include: +- \b Length +- \b Diameter +- \b Flow +- \b Velocity +- \b Headloss +- \b State (same as status: open, active, closed) +- \b Setting (roughness for pipes, speed for pumps, pressure/flow setting for valves) +- \b Reaction (reaction rate) +- \b F-Factor (friction factor). + +The default quantities reported are Demand, Head, Pressure, and \b Quality for nodes and Flow, Velocity, and \b Headloss for links. The default precision is two decimal places. + +__Remarks:__ +1. All options assume their default values if not explicitly specified in this section. +2. Items offset by slashes (/) indicate allowable choices. +3. The default is to not report on any nodes or links, so a \b NODES or \b LINKS option must be supplied if you wish to report results for these items. + +__Example:__ + +The following example reports on nodes N1, N2, N3, and N17 and all links with velocity above 3.0. The standard node variables (Demand, Head, Pressure, and Quality) are reported on while only Flow, Velocity, and F-Factor (friction factor) are displayed for links. +``` +[REPORT] +NODES N1 N2 N3 N17 +LINKS ALL +FLOW YES +VELOCITY PRECISION 4 +F-FACTOR PRECISION 4 +VELOCITY ABOVE 3.0 +``` +*/ + +/** +@page ResvPage [RESERVOIRS] + +__Purpose:__ + +Defines all reservoir nodes contained in the network. + +__Format:__ + +One line for each reservoir containing: +- ID label +- Head, ft (m) +- Head pattern ID (optional) + +__Remarks:__ +1. Head is the hydraulic head (elevation + pressure head) of water in the reservoir. +2. A head pattern can be used to make the reservoir head vary with time. +3. At least one reservoir or tank must be contained in the network. + +__Example:__ +``` +[RESERVOIRS] +;ID Head Pattern +;----------------------- +R1 512 ;Head stays constant +R2 120 Pat1 ;Head varies with time +``` +*/ + +/** +@page RulesPage [RULES] + +__Purpose:__ + +Defines rule-based controls which modify links based on a combination of conditions. + +__Format:__ + +Each rule is a series of statements of the form: + + RULE   _ruleID_
+ IF       _condition_1_
+ AND   _condition_2_
+ OR     _condition_3_
+ AND   _condition_4_
+ etc.
+ THEN  _action_1_
+ AND   _action_2_
+ etc.
+ ELSE  _action_3_
+ AND   _action_4_
+ etc.
+ PRIORITY _value_
+ +where: + + + + + +
ruleID =  an ID label assigned to the rule
conditon_n =  a @subpage ConditionClauses "condition clause"
action_n =  an @subpage ActionClauses "action clause"
PRIORITY =  a priority value (e.g., a number from 1 to 5)
+ +__Remarks:__ +1. Only the RULE, IF and THEN portions of a rule are required; the other portions are optional. +2. When mixing AND and OR clauses, the OR operator has higher precedence than AND, i.e.,
+       `IF A or B and C`
+ is equivalent to
+       `IF (A or B) and C`
+ If the interpretation was meant to be
+       `IF A or (B and C)`
+ then this can be expressed using two rules as in
+       `IF A THEN ...`
+       `IF B and C THEN ...`
+3. The PRIORITY value is used to determine which rule applies when two or more rules require that conflicting actions be taken on a link. A rule without a priority value always has a lower priority than one with a value. For two rules with the same priority value, the rule that appears first is given the higher priority. + +__Example:__ +``` +[RULES] +RULE 1 +IF TANK 1 LEVEL ABOVE 19.1 +THEN PUMP 335 STATUS IS CLOSED +AND PIPE 330 STATUS IS OPEN + +RULE 2 +IF SYSTEM CLOCKTIME >= 8 AM +AND SYSTEM CLOCKTIME < 6 PM +AND TANK 1 LEVEL BELOW 12 +THEN PUMP 335 STATUS IS OPEN + +RULE 3 +IF SYSTEM CLOCKTIME >= 6 PM +OR SYSTEM CLOCKTIME < 8 AM +AND TANK 1 LEVEL BELOW 14 +THEN PUMP 335 STATUS IS OPEN +``` +*/ + +/** +@page ConditionClauses Condition Clauses + +A condition clause in a @ref RulesPage "Rule-Based Control" takes the form of: + +  _object  id  attribute  relation  value_ + +where + + + + + + +
object     =   a category of network object
id     =   the object's ID label
attribute   =   an attribute or property of the object
relation    =   a relational operator
value     =   an attribute value
+ +Some example conditional clauses are:
+  JUNCTION 23 PRESSURE > 20
+  TANK T200 FILLTIME BELOW 3.5
+  LINK 44 STATUS IS OPEN
+  SYSTEM CLOCKTIME = 7:30 AM
+  SYSTEM DEMAND >= 1500 + +Objects can be any of the following keywords:
+  NODE  JUNCTION  TANK  RESERVOIR
+  LINK  PIPE  PUMP  VALVE
+  SYSTEM + +When \b SYSTEM is used in a condition no ID is supplied. + +The following attributes can be used with Node-type objects:
+   DEMAND
+   HEAD
+   PRESSURE + +The following attributes can be used with Tanks:
+   LEVEL
+   FILLTIME  (hours needed to fill a tank)
+   DRAINTIME (hours needed to empty a tank) + +These attributes can be used with Link-Type objects:
+   FLOW
+   STATUS  (OPEN, CLOSED, or ACTIVE)
+   SETTING  (pump speed or valve setting) + +The \b SYSTEM object can use the following attributes: + + + + + +
   DEMAND (total system demand)
   TIME (hours from the start of the simulation expressed
   either as a decimal number or in hours:minutes format)
   CLOCKTIME  (24-hour clock time with \b AM or \b PM appended)
+ +Relation operators consist of the following:
+ + + + + + + +
  \b = \b IS
  \b <> \b NOT
  \b < \b BELOW
  \b > \b ABOVE
  \b <=
  \b >=
+*/ + +/** +@page ActionClauses Action Clauses + +An action clause in a @ref RulesPage "Rule-Based Control" takes the form of: + +    _object_  _id_  STATUS / SETTING  IS  _value_ + +where + + + + +
object   =   LINK, PIPE, PUMP, or VALVE keyword
id     =   the object's ID label
value   =   a status condition (OPEN or CLOSED), pump speed setting, or valve setting
+Some example action clauses are:
+ + LINK 23 STATUS IS CLOSED
+ PUMP P100 SETTING IS 1.5
+ VALVE 123 SETTING IS 90
+
+ +See the notes for the @ref StatusPage section for conventions used in specifying link status and setting, particularly for control valves. +*/ + +/** +@page SourcesPage [SOURCES] + +__Purpose:__ + +Defines locations of water quality sources. + +__Format:__ + +One line for each water quality source containing: +- Node ID label +- Source type (CONCEN, MASS, FLOWPACED, or SETPOINT) +- Baseline source strength +- Time pattern ID (optional) + +__Remarks:__ +1. For \b MASS type sources, strength is measured in mass flow per minute. All other types measure source strength in concentration units. +2. Source strength can be made to vary over time by specifying a time pattern. +3. A \b CONCEN source: + - represents the concentration of any external source inflow to the node + - applies only when the node has a net negative demand (water enters the network at the node) + - if the node is a junction, reported concentration is the result of mixing the source flow and inflow from the rest of the network + - if the node is a reservoir, the reported concentration is the source concentration + - if the node is a tank, the reported concentration is the internal concentration of the tank + - is best used for nodes that represent source water supplies or treatment works (e.g., reservoirs or nodes assigned a negative demand) + - do not use at storage tanks with simultaneous inflow/outflow. +4. A MASS, FLOWPACED, or SETPOINT source: + - represents a booster source, where the substance is injected directly into the network regardless of what the demand at the node is + - affects water leaving the node to the rest of the network in the following way: + - a \b MASS booster adds a fixed mass flow to that resulting from inflow to the node + - a \b FLOWPACED booster adds a fixed concentration to the resultant inflow concentration at the node + - a \b SETPOINT booster fixes the concentration of any flow leaving the node (as long as the concentration resulting from the inflows is below the setpoint) + - the reported concentration at a junction or reservoir booster source is the concentration that results after the boosting is applied; the reported concentration for a tank with a booster source is the internal concentration of the tank + - is best used to model direct injection of a tracer or disinfectant into the network or to model a contaminant intrusion. +5. A \b [SOURCES] section is not needed for simulating water age or source tracing. + +__Example:__
+@code +[SOURCES] +;Node Type Strength Pattern +;-------------------------------- +N1 CONCEN 1.2 Pat1 ;Concentration varies with time +N44 MASS 12 ;Constant mass injection +@endcode +*/ + +/** +@page StatusPage [STATUS] + +__Purpose:__ + +Defines initial status of selected links at the start of a simulation. + +__Format:__ + +One line per link being controlled containing: +- Link ID label +- Status or setting + +__Remarks:__ +1. Links not listed in this section have a default status of \b OPEN (for pipes and pumps) or \b ACTIVE (for valves). +2. The Status value assigned in this section can be \b OPEN or \b CLOSED. For control valves (e.g., PRVs, FCVs, etc.) this means that the valve is either fully opened or closed, not active at its control setting. +3. The Setting value can be a speed setting for pumps or valve setting for valves. +4. The initial status of pipes can also be set in the @ref PipesPage section. +5. Check valves cannot have their status be preset. +6. Use @ref CtrlsPage or @ref RulesPage to change status or setting at some future point in the simulation. +7. If a \b CLOSED or \b OPEN control valve is to become \b ACTIVE again, then its pressure or flow setting must be specified in the control or rule that reactivates it. + +__Example:__ +@code +[STATUS] +; Link Status/Setting +;---------------------- + L22 CLOSED ;Link L22 is closed + P14 1.5 ;Speed for pump P14 + PRV1 OPEN ;PRV1 forced open + ;(overrides normal operation) +@endcode +*/ + +/** +@page TanksPage [TANKS] + +__Purpose:__ + +Defines all tank nodes contained in the network. + +__Format:__ + +One line for each junction containing: +- ID label +- Bottom elevation, ft (m) +- Initial water level, ft (m) +- Minimum water level, ft (m) +- Maximum water level, ft (m) +- Nominal diameter, ft (m) +- Minimum volume, cubic ft (cubic meters) +- Volume curve ID (optional) +- Overflow indicator (YES / NO) (optional) + +__Remarks:__ +1. Water surface elevation equals bottom elevation plus water level. +2. Non-cylindrical tanks can be modeled by specifying a curve of volume versus water depth in the @ref CurvesPage section. +3. If a volume curve is supplied the diameter value can be any non-zero number +4. Minimum volume (tank volume at minimum water level) can be zero for a cylindrical tank or if a volume curve is supplied. +5. If the overflow indicator is \b YES then the tank is allowed to overflow once it reaches it maximum water level. The default is no overflow. +6. If the tank does not use a volume curve then an asterisk (*) can be used as a placeholder for it if an overflow indicator is specified. +7. A network must contain at least one tank or reservoir. + +__Example:__ +@code +[TANKS] +;ID Elev. InitLvl MinLvl MaxLvl Diam MinVol VolCurve Overflow +;--------------------------------------------------------------------- +;Cylindrical tank that can overflow +T1 100 15 5 25 120 0 * YES + +;Non-cylindrical tank with arbitrary diameter +T2 100 15 5 25 1 0 VC1 +@endcode +*/ + +/** +@page TimesPage [TIMES] + +__Purpose:__ +Defines various time step parameters used in the simulation. + +__Formats:__ + + + + + + + + + + + +
DURATION value (units)
HYDRAULIC TIMESTEP value (units)
QUALITY TIMESTEPvalue (units)
RULE TIMESTEPvalue (units)
PATTERN TIMESTEPvalue (units)
PATTERN STARTvalue (units)
REPORT TIMESTEPvalue (units)
REPORT STARTvalue (units)
START CLOCKTIMEvalue (AM / PM)
STATISTICNONE / AVERAGED / MINIMUM / MAXIMUM / RANGE
+ +__Definitions:__ + +\b DURATION is the duration of the simulation. Use 0 to run a single period snapshot analysis. The default is 0. + +HYDRAULIC TIMESTEP determines how often a new hydraulic state of the network is computed. If greater than either the \b PATTERN or \b REPORT time step it will be automatically reduced. The default is 1 hour. + +QUALITY TIMESTEP is the time step used to track changes in water quality throughout the network. The default is 1/10 of the hydraulic time step. + +RULE TIMESTEP is the time step used to check for changes in system status due to activation of rule-based controls between hydraulic time steps. The default is 1/10 of the hydraulic time step. + +PATTERN TIMESTEP is the interval between time periods in all time patterns. The default is 1 hour. + +PATTERN START is the time offset at which all patterns will start. For example, a value of 6 hours would start the simulation with each pattern in the time period that corresponds to hour 6. The default is 0. + +REPORT TIMESTEP sets the time interval between which output results are reported. The default is 1 hour. + +REPORT START is the length of time into the simulation at which output results begin to be reported. The default is 0. + +START CLOCKTIME is the time of day (e.g., 3:00 PM) at which the simulation begins. The default is 12:00 AM midnight. + +\b STATISTIC determines what kind of statistical post-processing should be done on the time series of simulation results generated. \b AVERAGED reports a set of time-averaged results, \b MINIMUM reports only the minimum values, \b MAXIMUM the maximum values, and \b RANGE reports the difference between the minimum and maximum values. \b NONE reports the full time series for all quantities for all nodes and links and is the default. + +__Remarks:__ +1. Units can be SECONDS (SEC), MINUTES (MIN), HOURS, or \b DAYS. The default is \b HOURS. +2. If no units are supplied, then time values can be expressed in either decimal hours or in hours:minutes notation. +3. All entries in the \b [TIMES] section are optional. Items offset by slashes (/) indicate allowable choices. + +__Example:__ +@code +[TIMES] +DURATION 240 HOURS +QUALITY TIMESTEP 3 MIN +QUALITY TIMESTEP 0:03 +REPORT START 120 +START CLOCKTIME 6:00 AM +@endcode +*/ + +/** +@page TitlePage [TITLE] + +__Purpose:__ + +Attaches a descriptive title to the network being analyzed. + +__Format:__ + +Any number of lines of text. + +__Remarks:__ + +The [TITLE] section is optional. +*/ + +/** +@page ValvesPage [VALVES] + +__Purpose:__ + +Defines all control valve links contained in the network. + +__Format:__ + +One line for each valve containing: +- ID label +- ID of start node +- ID of end node +- Diameter, inches (mm) +- Valve type +- Valve setting +- Minor loss coefficient + +__Remarks:__ +1. Valve types and settings include: +|Valve Type | Setting | +|-----------|---------| +|PRV (pressure reducing valve) | Pressure, psi (m) | +|PSV (pressure sustaining valve) | Pressure, psi (m) | +|PBV (pressure breaker valve) | Pressure, psi (m) | +|FCV (flow control valve) | Flow (flow units) | +|TCV (throttle control valve) | Loss Coefficient | +|GPV (general purpose valve) | ID of head loss curve | +2. Shutoff valves and check valves are considered to be part of a pipe, not a separate control valve component (see @ref PipesPage). +*/ + +/** +@page BackdropPage [BACKDROP] + +__Purpose:__ + +Identifies a backdrop image and dimensions for visualizing the network's layout. + +__Formats:__ + + + + + +
DIMENSIONS LLx LLy URx URy
UNITS FEET/METERS/DEGREES/NONE
FILEfilename
OFFSETX Y
+ +__Definitions:__ + +DIMENSIONS provides the X and Y coordinates of the lower-left and upper-right corners of the network's +bounding rectangle. Defaults are the extents of the nodal coordinates supplied in the @ref CoordsPage "[COORDINATES]" section. + +UNITS specifies the units that the network's dimensions are given in. Default is NONE. + +FILE supplies the name of the file that contains a backdrop image for the network. + +OFFSET lists the X and Y distance that the upper-left corner of the backdrop image is offset from the +upper-left corner of the network's bounding rectangle. Default is zero offset. + +__Remarks:__ + +1. The [BACKDROP] section is optional and only provides support for an external GUI program that uses the EPANET engine. + +2. Only Windows Enhanced Metafiles and bitmap files can be used as backdrops. +*/ + +/** +@page CoordsPage [COORDINATES] + +__Purpose:__ + +Assigns map coordinates to network's nodes. + +__Format__: + +One line for each node containing: +- Node ID label +- X-coordinate +- Y-coordinate + +__Remarks:__ + +1. Include one line for each node that has coordinates. + +2. The coordinates represent the distance from the node to an arbitrary origin at the lower left of the network. Any convenient units of measure for this distance can be used. + +3. The locations of the nodes need not be to actual scale. + +4. A [COORDINATES] section is optional and only provides support for an external GUI program that uses the EPANET engine. +*/ + +/** +@page VertexPage [VERTICES] + +__Purpose:__ + +Assigns interior vertex points that describe the shape of network links. + +__Format:__ + +One line for each vertex point in each link containing such points that includes: +- Link ID label +- X-coordinate +- Y-coordinate + +__Remarks:__ + +1. Vertex points allow links to be drawn as polylines instead of simple straight-lines between their end nodes. + +2. The coordinates refer to the same coordinate system used for node and label coordinates. + +3. A [VERTICES] section is optional and only provides support for an external GUI program that uses the EPANET engine. +*/ + +/** +@page LabelsPage [LABELS] + +__Purpose:__ + +Assigns coordinates to labels added to a network's visualization. + +__Format:__ + +One line for each label containing: +- X-coordinate +- Y-coordinate +- Text of label in double quotes +- ID label of an anchor node (optional) + +__Remarks:__ + +1. Include one line for each label. + +2. The coordinates refer to the upper left corner of the label and are with respect to an arbitrary origin at the lower left of the network. + +3. The optional anchor node anchors the label to the node when the network layout is re-scaled during zoom-in operations. + +4. The [LABELS] section is optional and only provides support for an external GUI program that uses the EPANET engine. +*/ diff --git a/doc/main.dox b/doc/main.dox index 19e54f5..0b30bdf 100755 --- a/doc/main.dox +++ b/doc/main.dox @@ -1,12 +1,119 @@ -/** -@mainpage EPANET Open Source +/** +@mainpage Overview -The EPANET Open-Source Library is a pressurized pipe network hydraulic and water quality analysis toolkit, originally developed by USEPA, written in C. +EPANET is a program that performs extended period simulation of hydraulic and water quality behavior within water distribution system pipe networks. A network can consist of pipes, nodes (pipe junctions), pumps, valves and storage tanks or reservoirs. EPANET tracks the flow of water in each pipe, the pressure at each node, the height of water in each tank, and the concentration of a chemical species throughout the network during a multi-time period simulation. In addition to chemical species, water age and source tracing can also be simulated. -__Note:__ This repository is not affiliated with, or endorsed by, the USEPA. For the "official" release of EPANET (2.00.12 UI and Toolkit) please go to the [EPA's GitHub repo](https://github.com/USEPA/Water-Distribution-Network-Model) or [the USEPA website](http://www2.epa.gov/water-research/epanet). It is also not the graphical user interface version. This is the hydraulic and water quality solver engine. + + +
+@image html DistributionSystem.png +@image latex DistributionSystem.eps +
-However, if you are interested in extending EPANET for academic, personal, or commercial use, then you've come to the right place. For community discussion, FAQ, and roadmapping of the project, go to the [Community Forum](http://community.wateranalytics.org/category/epanet). +The EPANET Programmer's Toolkit is a library of functions (or API) written in C that allow programmers to customize the use of EPANET's hydraulic and water quality solution engine to their own applications. Both EPANET and its toolkit were originally developed by the U.S. Environmental Protection Agency (USEPA). -- @subpage toolkit-overview "Toolkit Overview" +The OWA-EPANET Toolkit is an open-source version of the original EPANET Toolkit that extends its capabilities by: +- providing a full set of functions to set and retrieve values for all parameters contained in a network model +- allowing networks to be built completely from function calls instead of from an input file +- allowing multiple projects to be analyzed in parallel in a thread-safe manner +- adding the ability to use pressure dependent demands in hydraulic analyses +- producing more robust results with regard to hydraulic convergence, low/zero flow conditions, and water quality mass balance +- achieving faster run times for single period hydraulic analyses. -*/ \ No newline at end of file +Before using the OWA-EPANET Toolkit one should be familiar with the way that EPANET represents a pipe network, the design and operating information it requires, and the steps it uses to simulate a network's behavior. The following topics provide some introductory material on these subjects: +- @subpage DataModel "Network Data Model" +- @subpage DataFlow "Data Flow Diagram" +- @subpage ToolkitVersions "Toolkit Versions" + +More detailed information can be obtained from reading the EPANET 2 Users Manual. + +__Note:__ OWA (Open Water Analytics) exists on GitHub as an open community for the exchange of information and ideas related to computing in the water & wastewater industries. Its activities and code projects are neither affiliated with nor endorsed by the USEPA. +*/ + +/** +@page DataModel Network Data Model + +EPANET models a pipe network as a collection of links connected to nodes. The links represent pipes, pumps, and control valves. The nodes represent junctions, tanks, and reservoirs. The figure below illustrates how these objects can be connected to one another to form a network. + + + +
+@image html Network.png +@image latex Network.eps +
+ +Junctions have a user-supplied water withdrawal rate (i.e., consumer demand) associated with them. Tanks are storage units whose water level changes over time. Reservoirs are boundary points where a fixed hydraulic head applies. + +Pipes have a length, diameter and roughness coefficient that determines their head loss as a function of flow rate. Pumps have either a constant power rating or a head curve that determines the head they add as a function of flow rate. Valves are used to regulate either flow or pressure. Controls can be applied to completely open or close a link or to adjust its setting (pump speed or valve setting). + +In addition to these physical objects an EPANET model can also contain the following data objects: +- time patterns that allow demands, quality source strength and pump speed settings to vary at fixed +intervals of time +- data curves that describe relationships between two quantities, such as head versus flow for pumps and +volume versus water level for tanks +- simple controls that adjust a link's setting (such as a pump's status) based on node pressure, tank +level, elapsed time, ot time of day +- rule-based controls that consist of one or more premises that if true result in one set of actions +being taken and if false result in a different set of actions being taken +- water quality sources that introduce a chemical constituent into the network at specified nodes. + +An EPANET model also contains a number of analysis options that specify: +- the project's flow units which in turn determines its unit system (US or SI) +- the formula used to compute head loss +- whether to use a demand driven or a pressure driven analysis +- hydraulic convergence criteria +- time steps used for hydraulic, water quality and reporting +- the type of water quality analysis to perform (chemical reaction, source tracing or water age) +- global values for chemical reaction coefficients that can be overridden for individual pipes +- global values for energy usage parameters that can be overridden for individual pumps. + +Please refer to the EPANET 2 Users Manual +for more information on EPANET's data model. +*/ + +/** +@page DataFlow Data Flow Diagram + +The EPANET Toolkit contains separate code modules for network building, hydraulic analysis, water quality analysis, and report generation. The data flow diagram for analyzing a pipe network is shown below. The processing steps depicted in this diagram can be summarized as follows: + + + +
+@image html DataFlow.png +@image latex DataFlow.eps +
+ +- The network builder receives a description of the network being simulated either from an external input file (.inp) or from a series of function calls that create network objects and assign their properties via code. These data are stored in a Project data structure. + +- The hydraulics solver carries out an extended period hydraulic simulation. The results obtained at every time step can be written to an external, unformatted (binary) hydraulics file (.hyd). Some of these time steps might represent intermediate points in time where system conditions change because of tanks becoming full or empty or pumps turning on or off due to level controls or timed operation. + +- If a water quality simulation is requested, the water quality solver accesses the flow data from the hydraulics file as it computes substance transport and reaction throughout the network over each hydraulic time step. During this process it can write both the formerly computed hydraulic results as well as its water quality results for each preset reporting interval to an unformatted (binary) output file (.out). If no water quality analysis was called for, then the hydraulic results stored in the .hyd file can simply be written out to the binary output file at uniform reporting intervals. + +- If requested, a report writer reads back the computed simulation results from the binary output file (.out) for each reporting period and writes out selected values to a formatted report file (.rpt). Any error or warning messages generated during the run are also written to this file. + +Toolkit functions exist to carry out all of these steps under the programmer's control, including the ability to read and modify the contents of the Project data structure. +*/ + +/** +@page ToolkitVersions Toolkit Versions + +The Toolkit comes with two sets of identical functions that programmers can utilize: +- the single-threaded version of the Toolkit is compatible with previous releases and only works +with single threaded applications. +- the multi-threaded version allows users to create multiple EPANET data sets (called projects) that can be +analyzed concurrently. + +Both Toolkit versions utilize identical function names and argument lists with the following exceptions: +- The `#include "epanet2.h"` directive must appear in all C/C++ code modules that use the single-threaded library while `#include "epanet2_2.h"` must be used for the multi-threaded library. +- Function names in the single-threaded library begin with \b EN while those in the multi-threaded +library begin with \b EN_ . +- The multi-threaded functions contain an additional argument that references a particular network project +that the function is applied to. +- The multi-threaded library contains two additional functions that allow users to create and delete +EPANET projects. +- The single-threaded library uses single precision for its floating point arguments while the +multi-threaded library uses double precision. + +To avoid unnecessary duplication this document only discusses the multi-threaded version of the +Toolkit. +*/ diff --git a/doc/modules.dox b/doc/modules.dox new file mode 100644 index 0000000..ca2ba4f --- /dev/null +++ b/doc/modules.dox @@ -0,0 +1,387 @@ +/** +@defgroup Project Project Functions +These functions are used to manage a project. +*/ + +/** +@defgroup Hydraulics Hydraulic Analysis Functions +These functions are used to perform a hydraulic analysis. +*/ + +/** +@defgroup Quality Water Quality Analysis Functions +These functions are used to perform a water quality analysis. +*/ + +/** +@defgroup Reporting Reporting Functions +These functions are used to report simulation results. +*/ + +/** +@defgroup Options Analysis Options Functions +These functions are used to get and set analysis options. +*/ + +/** +@defgroup Nodes Network Node Functions +These functions are used for working with network nodes. +*/ + +/** +@defgroup Demands Nodal Demand Functions +These functions are used for managing nodal demands. +*/ + +/** +@defgroup Links Network Link Functions +These functions are used for working with network links. +*/ + +/** +@defgroup Patterns Time Pattern Functions +These functions are used for working with time patterns. +*/ + +/** +@defgroup Curves Data Curve Functions +These functions are used for working with data curves. +*/ + +/** +@defgroup Controls Simple Control Functions +These functions are used for working with simple conditional controls. +*/ + +/** +@defgroup Rules Rule-Based Control Functions +These functions are used for working with rule-based controls. +*/ + +/** +@defgroup Enumerations Enumerated Types +These are the toolkit's enumerated types whose members are used as function arguments. +*/ + +/** +@addtogroup Project +@{ +@fn int EN_createproject(EN_Project *ph) +@fn int EN_deleteproject(EN_Project ph) +@fn int EN_runproject(EN_Project ph, const char *f1, const char *f2, const char *f3, void (*pviewprog)(char *)) +@fn int EN_init(EN_Project ph, const char *rptFile, const char *outFile, int unitsType, int headLossType) +@fn int EN_open(EN_Project ph, const char *inpFile, const char *rptFile, const char *binOutFile) +@fn int EN_getcount(EN_Project ph, int code, int *count) +@fn int EN_gettitle(EN_Project ph, char *line1, char *line2, char *line3) +@fn int EN_settitle(EN_Project ph, char *line1, char *line2, char *line3) +@fn int EN_saveinpfile(EN_Project ph, const char *filename) +@fn int EN_close(EN_Project ph) +@} +*/ + +/** +@addtogroup Hydraulics +@{ +@fn int EN_solveH(EN_Project ph) +@fn int EN_usehydfile(EN_Project ph, const char *filename) +@fn int EN_openH(EN_Project ph) +@fn int EN_initH(EN_Project ph, int initFlag) +@fn int EN_runH(EN_Project ph, long *currentTime) +@fn int EN_nextH(EN_Project ph, long *tStep) +@fn int EN_saveH(EN_Project ph) +@fn int EN_savehydfile(EN_Project ph, const char *filename) +@fn int EN_closeH(EN_Project ph) +@} +*/ + +/** +@addtogroup Quality +@{ +@fn int EN_solveQ(EN_Project ph) +@fn int EN_openQ(EN_Project ph) +@fn int EN_initQ(EN_Project ph, int saveFlag) +@fn int EN_runQ(EN_Project ph, long *currentTime) +@fn int EN_nextQ(EN_Project ph, long *tStep) +@fn int EN_stepQ(EN_Project ph, long *timeLeft) +@fn int EN_closeQ(EN_Project ph) +@} +*/ + +/** +@addtogroup Reporting +@{ +@fn int EN_writeline(EN_Project ph, char *line) +@fn int EN_report(EN_Project ph) +@fn int EN_copyreport(EN_Project ph, char *filename) +@fn int EN_clearreport(EN_Project ph) +@fn int EN_resetreport(EN_Project ph) +@fn int EN_setreport(EN_Project ph, char *reportFormat) +@fn int EN_setstatusreport(EN_Project ph, int code) +@fn int EN_getversion(int *version) +@fn int EN_geterror(int errcode, char *errmsg, int maxLen) +@fn int EN_getstatistic(EN_Project ph, int type, double* value) +@fn int EN_getresultindex(EN_Project ph, int type, int index, int *value) + +@} +*/ + +/** +@addtogroup Options +@{ +@fn int EN_getoption(EN_Project ph, int option, double *value) +@fn int EN_setoption(EN_Project ph, int option, double value) +@fn int EN_getflowunits(EN_Project ph, int *units) +@fn int EN_setflowunits(EN_Project ph, int units) +@fn int EN_gettimeparam(EN_Project ph, int param, long *value) +@fn int EN_settimeparam(EN_Project ph, int param, long value) +@fn int EN_getqualinfo(EN_Project ph, int *qualType, char *chemName, char *chemUnits, int *traceNode) +@fn int EN_getqualtype(EN_Project ph, int *qualType, int *traceNode) +@fn int EN_setqualtype(EN_Project ph, int qualType, char *chemName, char *chemUnits, char *traceNode) +@} +*/ + +/** +@addtogroup Nodes +@{ +@fn int EN_addnode(EN_Project ph, char *id, int nodeType, int *index) +@fn int EN_deletenode(EN_Project ph, int index, int actionCode) +@fn int EN_getnodeindex(EN_Project ph, char *id, int *index) +@fn int EN_getnodeid(EN_Project ph, int index, char *id) +@fn int EN_setnodeid(EN_Project ph, int index, char *newid) +@fn int EN_getnodetype(EN_Project ph, int index, int *code) +@fn int EN_getnodevalue(EN_Project ph, int index, int code, double *value) +@fn int EN_setnodevalue(EN_Project ph, int index, int code, double v) +@fn int EN_setjuncdata(EN_Project ph, int index, double elev, double dmnd, char *dmndpat) +@fn int EN_settankdata(EN_Project ph, int index, double elev, double initlvl, + double minlvl, double maxlvl, double diam, double minvol, char *volcurve) +@fn int EN_getcoord(EN_Project ph, int index, double *x, double *y) +@fn int EN_setcoord(EN_Project ph, int index, double x, double y) +@} +*/ + +/** +@addtogroup Demands +@{ +@fn int EN_getdemandmodel(EN_Project ph, int *type, double *pmin, double *preq, double *pexp) +@fn int EN_setdemandmodel(EN_Project ph, int type, double pmin, double preq, double pexp) +@fn int EN_adddemand(EN_Project ph, int nodeIndex, double baseDemand, char *demandPattern, char *demandName) +@fn int EN_deletedemand(EN_Project ph, int nodeIndex, int demandIndex) +@fn int EN_getdemandindex(EN_Project p, int nodeIndex, char *demandName, int *demandIndex) +@fn int EN_getnumdemands(EN_Project ph, int nodeIndex, int *numDemands) +@fn int EN_getbasedemand(EN_Project ph, int nodeIndex, int demandIndex, double *baseDemand) +@fn int EN_setbasedemand(EN_Project ph, int nodeIndex, int demandIndex, double baseDemand) +@fn int EN_getdemandpattern(EN_Project ph, int nodeIndex, int demandIndex, int *pattIndex) +@fn int EN_setdemandpattern(EN_Project ph, int nodeIndex, int demandIndex, int patIndex) +@fn int EN_getdemandname(EN_Project ph, int nodeIndex, int demandIdx, char *demandName) +@fn int EN_setdemandname(EN_Project ph, int nodeIndex, int demandIdx, char *demandName) +@} +*/ + +/** +@addtogroup Links +@{ +@fn int EN_addlink(EN_Project ph, char *id, int linkType, char *fromNode, char *toNode, int *index) +@fn int EN_deletelink(EN_Project ph, int index, int actionCode) +@fn int EN_getlinkindex(EN_Project ph, char *id, int *index) +@fn int EN_getlinkid(EN_Project ph, int index, char *id) +@fn int EN_setlinkid(EN_Project ph, int index, char *newid) +@fn int EN_getlinktype(EN_Project ph, int index, int *linkType) +@fn int EN_setlinktype(EN_Project ph, int *index, int linkType, int actionCode) +@fn int EN_getlinknodes(EN_Project ph, int index, int *node1, int *node2) +@fn int EN_setlinknodes(EN_Project ph, int index, int node1, int node2) +@fn int EN_getlinkvalue(EN_Project ph, int index, int property, double *value) +@fn int EN_setlinkvalue(EN_Project ph, int index, int property, double value) +@fn int EN_setpipedata(EN_Project ph, int index, double length, double diam, double rough, double mloss) +@fn int EN_getpumptype(EN_Project ph, int linkIndex, int *pumpType) +@fn int EN_getheadcurveindex(EN_Project ph, int pumpIndex, int *curveIndex) +@fn int EN_setheadcurveindex(EN_Project ph, int pumpIndex, int curveIndex) +@fn int EN_getvertexcount(EN_Project ph, int index, int *count) +@fn int EN_getvertex(EN_Project ph, int index, int vertex, double *x, double *y) +@fn int EN_setvertices(EN_Project ph, int index, double *x, double *y, int count) +@} +*/ + +/** +@addtogroup Patterns +@{ +@fn int EN_addpattern(EN_Project ph, char *id) +@fn int EN_deletepattern(EN_Project ph, int index) +@fn int EN_getpatternindex(EN_Project ph, char *id, int *index) +@fn int EN_getpatternid(EN_Project ph, int index, char *id) +@fn int EN_setpatternid(EN_Project ph, int index, char *id) +@fn int EN_getpatternlen(EN_Project ph, int index, int *len) +@fn int EN_getpatternvalue(EN_Project ph, int index, int period, double *value) +@fn int EN_setpatternvalue(EN_Project ph, int index, int period, double value) +@fn int EN_getaveragepatternvalue(EN_Project ph, int index, double *value) +@fn int EN_setpattern(EN_Project ph, int index, double *f, int len) +@} +*/ + +/** +@addtogroup Curves +@{ +@fn int EN_addcurve(EN_Project ph, char *id) +@fn int EN_deletecurve(EN_Project ph, int index) +@fn int EN_getcurveindex(EN_Project ph, char *id, int *index) +@fn int EN_getcurveid(EN_Project ph, int index, char *id) +@fn int EN_setcurveid(EN_Project ph, int index, char *id) +@fn int EN_getcurvelen(EN_Project ph, int index, int *len) +@fn int EN_getcurvetype(EN_Project ph, int index, int *type) +@fn int EN_getcurvevalue(EN_Project ph, int curveIndex, int pointIndex, double *x, double *y) +@fn int EN_setcurvevalue(EN_Project ph, int curveIndex, int pointIndex, double x, double y) +@fn int EN_getcurve(EN_Project ph, int curveIndex, char* id, int *nPoints, double **xValues, double **yValues) +@fn int EN_setcurve(EN_Project ph, int index, double *xValues, double *yValues, int nPoints) +@} +*/ + +/** +@addtogroup Controls +@{ +@fn int EN_addcontrol(EN_Project ph, int type, int linkIndex, double setting, int nodeIndex, double level, int *index) +@fn int EN_deletecontrol(EN_Project ph, int index) +@fn int EN_getcontrol(EN_Project ph, int index, int *type, int *linkIndex, double *setting, int *nodeIndex, double *level) +@fn int EN_setcontrol(EN_Project ph, int index, int type, int linkIndex, double setting, int nodeIndex, double level) +@} +*/ + +/** +@addtogroup Rules +@{ +@fn int EN_addrule(EN_Project ph, char *rule) +@fn int EN_deleterule(EN_Project ph, int index) +@fn int EN_getrule(EN_Project ph, int index, int *nPremises, int *nThenActions, int *nElseActions, double *priority) +@fn int EN_getruleID(EN_Project ph, int index, char* id); +@fn int EN_getpremise(EN_Project ph, int ruleIndex, int premiseIndex, int *logop, int *object, int *objIndex, + int *variable, int *relop, int *status, double *value) +@fn int EN_setpremise(EN_Project ph, int ruleIndex, int premiseIndex, + int logop, int object, int objIndex, int variable, int relop, int status, double value) +@fn int EN_setpremiseindex(EN_Project ph, int ruleIndex, int premiseIndex, int objIndex) +@fn int EN_setpremisestatus(EN_Project ph, int ruleIndex, int premiseIndex, int status) +@fn int EN_setpremisevalue(EN_Project ph, int ruleIndex, int premiseIndex, double value) +@fn int EN_getthenaction(EN_Project ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, double *setting) +@fn int EN_setthenaction(EN_Project ph, int ruleIndex, int actionIndex, int linkIndex, int status, double setting) +@fn int EN_getelseaction(EN_Project ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, double *setting) +@fn int EN_setelseaction(EN_Project ph, int ruleIndex, int actionIndex, int linkIndex, int status, double setting) +@fn int EN_setrulepriority(EN_Project ph, int index, double priority) +@} +*/ + +/** +@addtogroup Enumerations +@{ +\enum EN_SizeLimits +\enum EN_ObjectType +\enum EN_CountType +\enum EN_NodeType +\enum EN_LinkType +\enum EN_PumpType +\enum EN_PumpStateType +\enum EN_CurveType +\enum EN_QualityType +\enum EN_SourceType +\enum EN_ControlType +\enum EN_HeadLossType +\enum EN_NodeProperty +\enum EN_LinkProperty +\enum EN_LinkStatusType +\enum EN_TimeParameter +\enum EN_Option +\enum EN_FlowUnits +\enum EN_DemandModel +\enum EN_MixingModel +\enum EN_StatisticType +\enum EN_InitHydOption +\enum EN_ActionCodeType +\enum EN_AnalysisStatistic +\enum EN_StatusReport +\enum EN_RuleObject +\enum EN_RuleVariable +\enum EN_RuleOperator +\enum EN_RuleStatus +\def EN_MISSING +@} +*/ + +/** +@defgroup ErrorCodes Error Codes + +| Code | Meaning | +|------|--------- | +| 0 | No error | +| 101 | Insufficient memory available | +| 102 | No network data available | +| 103 | Hydraulic solver not opened | +| 104 | No hydraulics for water quality analysis | +| 105 | Water quality solver not opened | +| 106 | No results saved to report on | +| 107 | Hydraulics supplied from external file | +| 108 | Cannot use external file while hydraulics solver is open | +| 110 | Cannot solve network hydraulic equations | +| 120 | Cannot solve water quality transport equations | +| || +| 200 | One or more errors in an input file | +| 201 | Syntax error | +| 202 | Function call contains an illegal numeric value | +| 203 | Function call refers to an undefined node | +| 204 | Function call refers to an undefined link | +| 205 | Function call refers to an undefined time pattern | +| 206 | Function call refers to an undefined curve | +| 207 | Function call attempts to control a check valve pipe or a GPV valve | +| 208 | Function call contains illegal PDA pressure limits | +| 209 | Function call contains an illegal node property value | +| 211 | Function call contains an illegal link property value | +| 212 | Function call refers to an undefined Trace Node | +| 213 | Function call contains an invalid option value | +| 214 | Too many characters in a line of an input file | +| 215 | Function call contains a duplicate ID label | +| 216 | Function call refers to an undefined pump | +| 217 | Invalid pump energy data | +| 219 | Illegal valve connection to tank node | +| 220 | Illegal valve connection to another valve | +| 221 | Mis-placed clause in rule-based control | +| 222 | Link assigned same start and end nodes | +| 223 | Not enough nodes in network | +| 224 | No tanks or reservoirs in network | +| 225 | Invalid lower/upper levels for tank | +| 226 | No head curve or power rating for pump | +| 227 | Invalid head curve for pump | +| 230 | Nonincreasing x-values for curve | +| 233 | Network has unconnected node | +| 240 | Function call refers to nonexistent water quality source | +| 241 | Function call refers to nonexistent control | +| 250 | Function call contains invalid format (e.g. too long an ID name) | +| 251 | Function call contains invalid parameter code | +| 253 | Function call refers to nonexistent demand category | +| 254 | Function call refers to node with no coordinates | +| 257 | Function call refers to nonexistent rule | +| 258 | Function call refers to nonexistent rule clause | +| 259 | Function call attempts to delete a node that still has links connected to it | +| 260 | Function call attempts to delete node assigned as a Trace Node | +| 261 | Function call attempts to delete a node or link contained in a control | +| 262 | Function call attempts to modify network structure while a solver is open | +| || +| 301 | Identical file names used for different types of files | +| 302 | Cannot open input file | +| 303 | Cannot open report file | +| 304 | Cannot open output file | +| 305 | Cannot open hydraulics file | +| 306 | Hydraulics file does not match network data | +| 307 | Cannot read hydraulics file | +| 308 | Cannot save results to binary file | +| 309 | Cannot save results to report file | + +*/ + +/** +@defgroup WarningCodes Warning Codes + +| Code | Description | +|------|--------- | +|1 | System hydraulically unbalanced - convergence to a hydraulic solution was not achieved in the allowed number of trials | +|2 | System may be hydraulically unstable - hydraulic convergence was only achieved after the status of all links was held fixed | +|3 | System disconnected - one or more nodes with positive demands were disconnected from all supply sources | +|4 | Pumps cannot deliver enough flow or head - one or more pumps were forced to either shut down (due to insufficient head) or operate beyond the maximum rated flow | +|5 | Valves cannot deliver enough flow - one or more flow control valves could not deliver the required flow even when fully open | +|6 | System has negative pressures - negative pressures occurred at one or more junctions with positive demand | + +*/ diff --git a/doc/modules_controls.dox b/doc/modules_controls.dox deleted file mode 100644 index 820c32a..0000000 --- a/doc/modules_controls.dox +++ /dev/null @@ -1,12 +0,0 @@ -/** - -@defgroup Controls Managing Controls - - -@addtogroup Controls -@{ -@enum EN_ControlType -@fn int ENgetcontrol(int controlIndex, int *controlType, int *linkIndex, EN_API_FLOAT_TYPE *setting, int *nodeIndex, EN_API_FLOAT_TYPE *level) -@fn int ENsetcontrol(int cindex, int ctype, int lindex, EN_API_FLOAT_TYPE setting, int nindex, EN_API_FLOAT_TYPE level) -@} -*/ \ No newline at end of file diff --git a/doc/modules_curves.dox b/doc/modules_curves.dox deleted file mode 100644 index 277b226..0000000 --- a/doc/modules_curves.dox +++ /dev/null @@ -1,20 +0,0 @@ -/** - -@defgroup Curves - - -@addtogroup Curves -@{ -@fn int ENgetcurve(int curveIndex, char* id, int *nValues, EN_API_FLOAT_TYPE **xValues, EN_API_FLOAT_TYPE **yValues) -@fn int ENgetheadcurveindex(int index, int *curveindex) -@fn int ENgetpumptype(int index, int *type) -@fn int ENgetheadcurve(int linkIndex, char *curveId) -@fn int ENgetcurveindex(char *id, int *index) -@fn int ENgetcurveid(int index, char *id) -@fn int ENgetcurvelen(int index, int *len) -@fn int ENgetcurvevalue(int index, int pnt, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y) -@fn int ENsetcurvevalue(int index, int pnt, EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y) -@fn int ENsetcurve(int index, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y, int len) -@fn int ENaddcurve(char *id) -@} -*/ diff --git a/doc/modules_filemanagement.dox b/doc/modules_filemanagement.dox deleted file mode 100644 index 8e826f2..0000000 --- a/doc/modules_filemanagement.dox +++ /dev/null @@ -1,20 +0,0 @@ -/** - -@defgroup FileManagement File Management - - - - - - -@addtogroup FileManagement -@{ -@fn int ENwriteline (char *line) -@fn int ENreport () -@fn int ENresetreport () -@fn int ENsetreport (char *reportFormat) -@fn int ENopen (char *inpFile, char *rptFile, char *binOutFile) -@fn int ENsaveinpfile (char *filename) -@fn int ENclose() -@} -*/ \ No newline at end of file diff --git a/doc/modules_hydraulicfunctions.dox b/doc/modules_hydraulicfunctions.dox deleted file mode 100644 index 028cac6..0000000 --- a/doc/modules_hydraulicfunctions.dox +++ /dev/null @@ -1,41 +0,0 @@ -/** - -@defgroup HydraulicFunctions Hydraulic Analysis - -~~~~~~~~~~~~~~~{.c} -int errcode; -long t, tstep; - -errcode = ENopenH(); -if (!errcode) { - errcode = ENinitH(EN_SAVE); - if (!errcode) { - do { - tstep = 0; - ERRCODE(ENrunH(&t)); - ERRCODE(ENnextH(&tstep)); - } while (tstep > 0); - } -} - -ENcloseH(); -~~~~~~~~~~~~~~~ - - - -@addtogroup HydraulicFunctions -@{ - -@fn int ENsolveH() -@fn int ENsaveH() -@fn int ENopenH() -@fn int ENinitH(int initFlag) -@fn int ENrunH(long *currentTime) -@fn int ENnextH(long *tStep) -@fn int ENcloseH() -@fn int ENsavehydfile(char *filename) -@fn int ENusehydfile(char *filename) -@fn int ENgetstatistic(int code, EN_API_FLOAT_TYPE* value) - -@} -*/ diff --git a/doc/modules_networkinfo.dox b/doc/modules_networkinfo.dox deleted file mode 100644 index 5c0bdd6..0000000 --- a/doc/modules_networkinfo.dox +++ /dev/null @@ -1,16 +0,0 @@ -/** - -@defgroup NetworkInfo Network Info - - -@addtogroup NetworkInfo -@{ -@fn int ENgetcount (int code, int *count) -@fn int ENgetnodeindex (char *id, int *index) -@fn int ENgetnodeid (int index, char *id) -@fn int ENgetnodetype (int index, int *code) -@fn int ENgetnodevalue (int index, int code, EN_API_FLOAT_TYPE *value) -@fn int ENgetcoord (int index, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y) -@fn int ENsetcoord (int index, EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y) -@} -*/ \ No newline at end of file diff --git a/doc/modules_patterns.dox b/doc/modules_patterns.dox deleted file mode 100644 index 996bf22..0000000 --- a/doc/modules_patterns.dox +++ /dev/null @@ -1,14 +0,0 @@ -/** - -@defgroup Patterns - - -@addtogroup Patterns -@{ -@fn int ENgetpatternindex (char *id, int *index) -@fn int ENgetpatternid (int index, char *id) -@fn int ENgetpatternlen (int index, int *len) -@fn int ENgetpatternvalue (int index, int period, EN_API_FLOAT_TYPE *value) -@fn int ENgetaveragepatternvalue (int index, EN_API_FLOAT_TYPE *value) -@} -*/ diff --git a/doc/modules_qualityfunctions.dox b/doc/modules_qualityfunctions.dox deleted file mode 100644 index d4a9087..0000000 --- a/doc/modules_qualityfunctions.dox +++ /dev/null @@ -1,17 +0,0 @@ -/** - -@defgroup QualityFunctions Water Quality Functions - - - -@addtogroup QualityFunctions -@{ -@fn int ENsolveQ () -@fn int ENopenQ () -@fn int ENinitQ (int saveFlag) -@fn int ENrunQ (long *currentTime) -@fn int ENnextQ (long *tStep) -@fn int ENstepQ (long *timeLeft) -@fn int ENcloseQ () -@} -*/ \ No newline at end of file diff --git a/doc/modules_toolkitoptions.dox b/doc/modules_toolkitoptions.dox deleted file mode 100644 index e5e798f..0000000 --- a/doc/modules_toolkitoptions.dox +++ /dev/null @@ -1,14 +0,0 @@ -/** - -@defgroup ToolkitOptions Toolkit Options - - -@addtogroup ToolkitOptions -@{ -@fn int ENgetoption (int code, EN_API_FLOAT_TYPE *value) -@fn int ENgettimeparam (int code, long *value) -@fn int ENgetflowunits (int *code) -@fn int ENgetqualtype (int *qualcode, int *tracenode) -@fn int ENgeterror (int errcode, char *errmsg, int maxLen) -@} -*/ \ No newline at end of file diff --git a/doc/newfooter.html b/doc/newfooter.html new file mode 100644 index 0000000..6ef6196 --- /dev/null +++ b/doc/newfooter.html @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/doc/readme.md b/doc/readme.md new file mode 100644 index 0000000..36e1793 --- /dev/null +++ b/doc/readme.md @@ -0,0 +1,30 @@ + + +## Generating Documentation for OWA-EPANET 2.2 + +You must have [Doxygen](http://www.doxygen.nl) installed on your machine to generate documentation for the OWA-EPANET Toolkit. Assuming this is the case, open a terminal window, navigate to the project's `doc` directory and issue the command `doxygen`. This will generate HTML documentation placed in a sub-directory named `html`. From that directory you can launch the `index.html` file to view the full documentation in a web browser. + +To generate a Windows compiled HTML Help file you must have [Microsoft's HTML Help Workshop](https://www.microsoft.com/en-us/download/details.aspx?id=21138) installed. You then need to edit the Doxygen configuration file `doxyfile` as follows: + +1. Change the `GENERATE_HTMLHELP` setting to `YES`. + +2. Enter the location where the Help Workshop system was installed next to the + `HHC_LOCATION` setting. + +After running Doxygen again the resulting Help file named `owa-epanet.chm` will appear in the `html` sub-directory. + +Doxygen uses the special comments placed in the project's `epanet2_2.h` and `epanet2_enums.h` header files to document EPANET's API. It also uses supplementary material contained in the following files of the project's `doc` directory to generate additional pages of documentation: + +- `main.dox`: generates the *Overview* section. +- `usage.dox`: generates the *Usage* section. +- `toolkit-examples.dox` : generates the *Examples* section. +- `toolkit-files.dox`: generates the *Toolkit Files* section. +- `input-file.dox`: generates the *Input File* sub-section. +- `toolkit-units.dox`: generates the *Measurement Units* section. +- `modules.dox`: defines the contents of the *API Reference* section. + +Finally, a group of special Doxygen files are used to customize the format of the generated documentation. These include the following: +- `doxyfile`: the main Doxygen configuration file +- `DoxygenLayout.xml`: sets the title of the automatically generated *Modules* section to *API Reference* and hides the *Files* section in the tree view pane of the document. +- `extrastylesheet.css`: reduces the size of the the h1 heading style. +- `newfooter.html`: replaces the default Doxygen footer in HTML output with a custom one. diff --git a/doc/toolkit-examples.dox b/doc/toolkit-examples.dox new file mode 100644 index 0000000..547724e --- /dev/null +++ b/doc/toolkit-examples.dox @@ -0,0 +1,229 @@ +/** @page ToolkitExamples Examples +Here are several examples of how the Toolkit can be used for different types of network analyses. + +- @subpage Example1 "Embedded Engine Example" +- @subpage Example2 "Network Building Example" +- @subpage Example3 "Hydrant Rating Curve Example" +- @subpage Example4 "Chlorine Dosage Example" + +*/ + +/** @page Example1 Embedded Engine Example +This example shows how simple it is for the Toolkit to provide a network analysis engine for other applications. There are three steps that the application would need to take: +-# Have the application write network data to an EPANET-formatted input file. + +-# Create a project and call @ref EN_runproject, supplying the name of the EPANET input file, the name of a Report file where status and error messages are written, and the name of a binary Output file which will contain analysis results. + +-# Have the application access the output file to display desired analysis results (see @ref OutFile). + +Here is an example where a callback function `writeConsole` is provided to write EPANET's progress messages to the console: + +\code {.c} +#include "epanet2_2.h" + +void writeConsole(char *s) +{ + fprintf(stdout, "\n%s", s); +} + +int runEpanet(char* inpFile, char* rptFile, char* outFile) +{ + int errcode; + EN_project ph; + EN_createproject(&pH); + errcode = EN_runproject(ph, inpFile, rptFile, outFile, &writeConsole); + EN_deleteproject(ph); + return errcode; +} +\endcode +*/ + +/** @page Example2 Network Building Example +This example shows how a network can be built just through toolkit function calls, eliminating the +need to always use an EPANET formatted input file. This creates opportunities to use other sources +of network data in one's code, such as relational database files or GIS/CAD files. + +Below is a schematic of the network to be built. + + +
+@image html Example2.png +@image latex Example2.eps +
+ +\code {.c} +#include "epanet2_2.h" + +void netbuilder() +{ + // Create a project that uses gpm for flow units and + // the Hazen-Williams formula for head loss + int index; + EN_Project ph; + EN_createproject(&ph); + EN_init(ph, "", "", EN_GPM, EN_HW); + + // Add the first junction node to the project with + // an elevation of 700 ft and a demand of 0 + EN_addnode(ph, "J1", EN_JUNCTION, &index); + EN_setjuncdata(ph, index, 700, 0, ""); + + // Add the remaining two junctions with elevations of + // 710 ft and demands of 250 and 500 gpm, respectively + EN_addnode(ph, "J2", EN_JUNCTION, &index); + EN_setjuncdata(ph, index, 710, 250, ""); + EN_addnode(ph, "J3", EN_JUNCTION, &index); + EN_setjuncdata(ph, index, 710, 500, ""); + + // Add the reservoir at an elevation of 650 ft + EN_addnode(ph, "R1", EN_RESERVOIR, &index); + EN_setnodevalue(ph, index, EN_ELEVATION, 650); + + // Add the tank node at elevation of 850 ft, initial water level + // at 120 ft, minimum level at 100 ft, maximum level at 150 ft + // and a diameter of 50.5 ft + EN_addnode(ph, "T1", EN_TANK, &index); + EN_settankdata(ph, index, 850, 120, 100, 150, 50.5, 0, ""); + + // Add the pipes to the project, setting their length, + // diameter, and roughness values + EN_addlink(ph, "P1", EN_PIPE, "J1", "J2", &index); + EN_setpipedata(ph, index, 10560, 12, 100, 0); + EN_addlink(ph, "P2", EN_PIPE, "J1", "T1", &index); + EN_setpipedata(ph, index, 5280, 14, 100, 0); + EN_addlink(ph, "P3", EN_PIPE, "J1", "J3", &index); + EN_setpipedata(ph, index, 5280, 14, 100, 0); + EN_addlink(ph, "P4", EN_PIPE, "J2", "J3", &index); + EN_setpipedata(ph, index, 5280, 14, 100, 0); + + // Add a pump to the project + EN_addlink(ph, "PUMP", EN_PUMP, "R1", "J1", &index); + + // Create a single point head curve (index = 1) and + // assign it to the pump + EN_addcurve(ph, "C1"); + EN_setcurvevalue(ph, 1, 1, 1500, 250); + EN_setlinkvalue(ph, index, EN_PUMP_HCURVE, 1); + + // Save the project for future use + EN_saveinpfile(ph, "example2.inp"); + + // Delete the project + EN_deleteproject(ph); +} +\endcode +*/ + +/** @page Example3 Hydrant Rating Curve Example + +This example illustrates how the Toolkit could be used to develop a hydrant rating curve used in fire flow studies. This curve shows the amount of flow available at a node in the system as a function of pressure. The curve is generated by running a number of steady state hydraulic analyses with the node of interest subjected to a different demand in each analysis. For this example we assume that the ID label of the node of interest is `MyNode` and that `N` different demand levels stored in the array `D` need to be examined. The corresponding pressures will be stored in `P`. To keep the code more readable, no error checking is made on the results returned from the Toolkit function calls. + +\code {.c} +#include "epanet2_2.h" + +void HydrantRating(char *MyNode, int N, double D[], double P[]) +{ + EN_Project ph; + int i, nodeindex; + long t; + double pressure; + + // Create a project + EN_createproject(&ph); + + // Retrieve network data from an input file + EN_open(ph, "example2.inp", "example2.rpt", ""); + + // Open the hydraulic solver + EN_openH(ph); + + // Get the index of the node of interest + EN_getnodeindex(ph, MyNode, &nodeindex); + + // Iterate over all demands + for (i=1; i 432000) { + for (i=1; i<=nnodes; i++) { + EN_getnodevalue(ph, i, EN_QUALITY, &c); + if (c < Ctarget) { + violation = 1; + break; + } + } + } + EN_nextQ(ph, &tstep); + + // End WQ run if violation found + } while (!violation && tstep > 0); + + // Continue search if violation found + } while (violation && csource <= 4.0); + + // Close up the WQ solver and delete the project + EN_closeQ(ph); + EN_deleteproject(ph); + return csource; +} +\endcode + +*/ diff --git a/doc/toolkit-files.dox b/doc/toolkit-files.dox new file mode 100644 index 0000000..38aeab8 --- /dev/null +++ b/doc/toolkit-files.dox @@ -0,0 +1,163 @@ +/** @page Files Toolkit Files +The Toolkit can make use of several different types of files when analyzing a pipe network. These include: +- @subpage InpFile "Input File" +- @subpage RptFile "Report File" +- @subpage OutFile "Output File" +- @subpage HydFile "Hydraulics File" +- @subpage HeaderFiles "Header Files" +*/ + +/** +@page RptFile Report File +The Report file is the second file name supplied to the @ref EN_open function (or the first file name to @ref EN_init). It is used to log any error messages that occur when an Input file is being processed and to record all status messages that are generated during a hydraulic simulation. In addition, if the @ref EN_report function is called the resulting report can also be written to this file as can user-generated lines of text using the @ref EN_writeline function. The format of the report is controlled by statements placed in the @ref ReportPage section of the Input file and by similar statements included in calls to the @ref EN_setreport function. Only results at a specified uniform reporting time interval are written to this file. + +To suppress the writing of all error and warning messages to the Report file either include the command `MESSAGES NO` in the @ref ReportPage section of the Input file or call the Toolkit function `EN_setreport("MESSAGES NO")`. + +To route a formatted report to a different file than the Report file either include the command `FILE filename` in the @ref ReportPage section of the Input file or call the Toolkit function `EN_setreport("FILE filename")`, where `filename` is the name of the file to use. + +Toolkit clients will not be able to access the contents of a Report file until a project is closed. If access is needed before then, the @ref EN_copyreport function can be used to copy its current contents to another file. A @ref EN_clearreport function is also available to clear the current contents of the Report file. +*/ + +/** +@page OutFile Output File + +The Output file is an unformatted binary file used to store both hydraulic and water quality results at uniform reporting intervals. It is the third file name supplied to the @ref EN_open function (or second name to @ref EN_init). If an empty string ("") is used as its name then a scratch temporary file will be used. Otherwise the Output file will be saved after the @ref EN_close function is called. Saving this file is useful if further post-processing of the output results are needed. + +The function @ref EN_saveH will transfer hydraulic results to the Output file if no water quality analysis will be made. Using @ref EN_solveQ to run a water quality analysis automatically saves both hydraulic and water quality results to this file. If the @ref EN_initQ - @ref EN_runQ - @ref EN_nextQ set of functions is used to perform a water quality analysis, then results will be saved only if the \b saveflag argument of @ref EN_initQ is set to `EN_SAVE`. Again, the need to save results to the Output file is application-dependent. If a formatted output report is to be generated using @ref EN_report, then results must first be saved to the Output file. + +The data written to the file is either 4-byte integers, 4-byte floats, or fixed-size strings whose size is a multiple of 4 bytes. This allows the file to be divided conveniently into 4-byte records. The file consists of four sections of the following sizes in bytes: + +| Section | Size in Bytes | +|----------------|----------------------------------------| +|Prolog | 884 + 36*Nnodes + 52*Nlinks + 8*Ntanks | +|Energy Usage | 28*Npumps + 4 | +|Dynamic Results | (16*Nnodes + 32*Nlinks)*Nperiods | +|Epilog | 28 | + +where: +- Nnodes = number of nodes (junctions + reservoirs + tanks), +- Nlinks = number of links (pipes + pumps + valves), +- Ntanks = number of tanks and reservoirs, +- Npumps = number of pumps, +- Nperiods = number of reporting periods. + +All of these counts are themselves written to the file's Prolog or Epilog sections. + +@section Output_Prolog Prolog Section + +The Prolog section of an EPANET binary output file contains the following data: + +|Item | Type | # Bytes | +|----------------|-----------|-----------| +| Magic Number = 516114521 | Integer | 4 | +| Version (= 200) | Integer | 4 | +| Number of Nodes | Integer | 4 | +| Number of Reservoirs & Tanks | Integer | 4| +| Number of Links | Integer | 4 | +| Number of Pumps | Integer | 4 | +| Number of Valves | Integer | 4 | +| Water Quality Option - see @ref EN_QualityType | Integer | 4 | +| Traced Node Index | Integer | 4 | +| Flow Units Option | Integer | 4 | +| Pressure Units Option:
0 = psi
1 = meters
2 = kPa | Integer | 4 | +| Report Statistic Type - see @ref EN_StatisticType | Integer | 4 | +| Reporting Start Time (sec) | Integer | 4 | +| Reporting Time Step (sec) | Integer | 4 | +| Simulation Duration (sec) | Integer | 4 | +| Project Title (1st line) | Char | 80 | +| Project Title (2nd line) | Char | 80 | +| Project Title (3rd line) | Char | 80 | +| Name of Input File | Char | 260 | +| Name of Report File | Char | 260 | +| Name of Quality Chemical | Char | 32 | +| Chemical Concentration Units | Char | 32 | +| ID String of Each Node | Char | 32*Nnodes | +| ID String of Each Link | Char | 32*Nlinks | +| Index of Head Node of Each Link | Integer | 4*Nlinks | +| Index of Tail Node of Each Link | Integer | 4*Nlinks | +| Type Code of Each Link (see @ref EN_LinkType) | Integer | 4*Nlinks | +| Node Index of Each Tank | Integer | 4*Ntanks | +| Surface Area of Each Tank | Float | 4*Ntanks | +| Elevation of Each Node | Float | 4*Nnodes | +| Length of Each Link | Float | 4*Nlinks | +| Diameter of Each Link | Float | 4*Nlinks | + +@section Output_Energy Energy Usage Section + +The Energy Usage section of an EPANET binary output file contains the following data: + +|Item (Repeated for Each Pump) | Type | # Bytes | +|------------------------------|---------|---------| +| Pump Index in list of links | Integer | 4 | +| Pump Utilization (%) | Float | 4 | +| Average Efficiency (%) | Float | 4 | +| Average kW/MGal (or kW/m^3) | Float | 4 | +| Average kW | Float | 4 | +| Peak kW | Float | 4 | +| Average Cost per Day | Float | 4 | + +These data are followed by a single 4-byte Float containing the overall Demand Charge for peak energy usage. + +@section Output_Results Dynamic Results Section + +The Dynamic Results section of an EPANET binary output file contains the following set of data for each reporting period (the reporting time step is written to the Output File's @ref Output_Prolog and the number of such steps is written to the @ref Output_Epilog): + +| Item | Type | # Bytes | +|------|------|---------| +|Demand at Each Node | Float | 4*Nnodes | +|Head (Grade) at Each Node | Float | 4*Nnodes | +|Pressure at Each Node | Float | 4*Nnodes | +|Water Quality at Each Node | Float | 4*Nnodes | +|Flow in Each Link
(negative for reverse flow)| Float | 4*Nlinks | +|Velocity in Each Link | Float | 4*Nlinks | +|Head Loss per 1000 Units of Length for Each Link
(total head for pumps and head loss for valves) | Float | 4*Nlinks | +|Average Water Quality in Each Link | Float | 4*Nlinks | +| Status Code for Each Link:
0 = closed (pump shutoff head exceeded)
1 = temporarily closed
2 = closed
3 = open
4 = active (partially open)
5 = open (pump max. flow exceeded)
6 = open (FCV can't supply flow)
7 = open (PRV/PSV can't supply pressure) | Float | 4*Nlinks | +| Setting for Each Link | Float | 4*Nlinks | +|Reaction Rate for Each Link (mass/L/day) | Float | 4*Nlinks | +|Friction Factor for Each Link | Float | 4*Nlinks | + +@section Output_Epilog Epilog Section + +The Epilog section of an EPANET binary output file contains the following data: + +|Item | Type | # Bytes | +|-----|------|---------| +|Average bulk reaction rate (mass/hr) | Float | 4 | +|Average wall reaction rate (mass/hr) | Float | 4 | +|Average tank reaction rate (mass/hr) | Float | 4 | +|Average source inflow rate (mass/hr) | Float | 4 | +|Number of Reporting Periods | Integer | 4 | +|Warning Flag:
0 = no warnings
1 = warnings were generated | Integer | 4 | +|Magic Number = 516114521 | Integer | 4 | + +*/ + +/** +@page HydFile Hydraulics File +The Hydraulics file is an unformatted binary file used to store the results of a hydraulic analysis. Results for all time periods are stored, including those at intermediate times when special hydraulic events occur (e.g., pumps and tanks opening or closing because control conditions have been satisfied). + +Normally it is a temporary file that is deleted after the @ref EN_deleteproject function is called. However, it will be saved if the @ref EN_savehydfile function is called before that. + +Likewise, a previously saved Hydraulics file can be used if the command `HYDRAULICS USE` filename appears in the @ref OptionsPage section of the input file, or if the @ref EN_usehydfile function is called. + +When the Toolkit function @ref EN_solveH is used to make a hydraulic analysis, results are automatically saved to the Hydraulics file. When the @ref EN_initH - @ref EN_runH - @ref EN_nextH set of functions is used, the \b initFlag argument to @ref EN_initH determines whether results are saved or not. The need to save hydraulic results is application-dependent. They must always be saved to the Hydraulics file if a water quality analysis will follow. + +*/ + +/** +@page HeaderFiles Header Files +The Toolkit provides several header files that are needed to develop C/C++ applications: +- `epanet2.h` contains declarations of the single-threaded version of the Toolkit (the ENxxx named functions). +- `epanet2_2.h` contains declarations of the multi-threaded version of the Toolkit (the EN_xxx named functions). +- `epanet2_enums.h` contains definitions of the symbolic constants used by the Toolkit. +- `epanet2.lib` must be linked in to any Toolkit application compiled for Windows using MS Visual C++. +Developers need to issue an include directive for either `epanet2.h` or `epanet2_2.h` in their C/C++ code depending on whether they are building a single-threaded or multi-threaded application. There is no need to explicitly include `epanet2_enums.h` as it is automatically included by both of the other header files. + +Several additional function declaration files that provide bindings for other programming languages are included with the Toolkit package: +- `epanet2.bas` for Visual Basic for Applications and Visual Basic 6 +- `epanet2.vb` for Visual Basic .NET +- `epanet2.pas` for Delphi Pascal, Free Pascal or Lazarus. + +These bindings only support the single-threaded version of the Toolkit. +*/ diff --git a/doc/toolkit-units.dox b/doc/toolkit-units.dox new file mode 100644 index 0000000..d8bd3be --- /dev/null +++ b/doc/toolkit-units.dox @@ -0,0 +1,37 @@ + +/** +@page Units Measurement Units + +The toolkit can use data expressed in either US Customary of SI Metric units. A project's unit system depends on the unit system used for its choice of flow units. If the @ref EN_open function is used to supply data to a project from an Input File then its flow units are set in the @ref OptionsPage section of the file. If the @ref EN_init function is used to initialize a project then the choice of flow units is the fourth argument to the function. The following table lists the units used to express the various parameters in an EPANET model. + +| Parameter | US Customary | SI Metric | +|----------------|-------------------------|---------------------------| +|Concentration | mg/L or ug/L | mg/L or ug/L | +|Demand | (see Flow units) | (see Flow units) | +|Diameter (Pipes)| inches | millimeters | +|Diameter (Tanks)| feet | meters | +|Efficiency | percent | percent | +|Elevation | feet | meters | +|Emitter Coeff. | flow units @ 1 psi drop | flow units @ 1 meter drop | +|Energy | kwatt - hours | kwatt - hours | +|Flow | CFS (cubic feet / sec) | LPS (liters / sec) | +| | GPM (gallons / min) | LPM (liters / min) | +| | MGD (million gal / day) | MLD (megaliters / day) | +| | IMGD (Imperial MGD) | CMH (cubic meters / hr) | +| | AFD (acre-feet / day) | CMD (cubic meters / day) | +|Friction Factor | unitless | unitless | +|Head | feet | meters | +|Length | feet | meters | +|Minor Loss Coeff. | unitless | unitless | +|Power | horsepower | kwatts | +|Pressure | psi | meters | +|Reaction Coeff. (Bulk) | 1/day (1st-order)| 1/day (1st-order) | +|Reaction Coeff. (Wall) | mass/sq-ft/day (0-order) | mass/sq-m/day (0-order) | +| | ft/day (1st-order) | meters/day (1st-order) | +|Roughness Coeff. | millifeet (Darcy-Weisbach) unitless otherwise| mm (Darcy-Weisbach) unitless otherwise | +|Source Mass Injection | mass/minute | mass/minute | +|Velocity | ft/sec | meters/sec | +|Volume | cubic feet | cubic meters | +|Water Age | hours | hours | + +*/ diff --git a/doc/toolkit-usage.dox b/doc/toolkit-usage.dox new file mode 100644 index 0000000..3bf06de --- /dev/null +++ b/doc/toolkit-usage.dox @@ -0,0 +1,243 @@ +/** +@page toolkit-usage Usage + +The following topics briefly describe how to accomplish some basic tasks using the OWA-EPANET Toolkit in C/C++ code. See the @ref ToolkitExamples topic for code listings of complete applications of the Toolkit. + +@section CreateProject Creating a Project + +Before any use is made of the Toolkit, a project and its handle must be created. After all processing is completed the project should be deleted. See the code snippet below: + +\code {.c} +EN_Project ph; // a project handle +EN_createproject(&ph); + +// Call functions that perform desired analysis + +EN_deleteproject(ph); +\endcode + +@section DetectingErrors Detecting Error Conditions + +All of the Toolkit functions return an error/warning code. A 0 indicates that the function ran successfully. A number greater than 0 but less than 100 indicates that a warning condition was generated while a number higher than 100 indicates that the function failed. + +The meaning of specific error and warning codes are listed in the @ref ErrorCodes and @ref WarningCodes sections of this guide. The Toolkit function @ref EN_geterror can be used to obtain the text of a specific error/warning code. The following example uses a macro named `ERRCODE` along with a variable named `errcode` to execute Toolkit commands only if no fatal errors have already been detected: + +\code {.c} +#define ERRCODE(x) (errcode = ((errcode > 100) ? (errcode) : (x))) + +void runHydraulics(EN_Project ph, char *inputFile, char *reportFile) +{ + int errcode = 0; + char errmsg[EN_MAXMSG + 1]; + + ERRCODE(EN_open(ph, inputFile, reportFile, "")); + ERRCODE(EN_solveH(ph)); + ERRCODE(EN_saveH(ph)); + ERRCODE(EN_report(ph)); + EN_geterror(ph, errcode, errmsg); + if (errcode) printf("\n%s\n", errmsg); +} +\endcode + +@section NetworkData Providing Network Data + +Once a project is created there are two ways in which it can be populated with data. The first is to use the @ref EN_open function to load an EPANET-formatted @ref InpFile that provides a description of the network to be analyzed. This function should be called immediately after a project is created. It takes as arguments the name of the input file to open and the names of a report file and a binary output file, both of which are optional. Here is a code sample showing this approach: + +\code {.c} +EN_Project ph; +int errcode; +EN_createproject(&ph); +errcode = EN_open(ph, "net1.inp", "net1.rpt", ""); +if (errcode == 0) +{ + // Call functions that perform desired analysis +} +EN_deleteproject(ph); +\endcode + +After an input file has been loaded in this fashion the resulting network can have objects added or deleted, and their properties set using the various Toolkit functions . + +The second method for supplying network data to a project is to use the Toolkit's functions to add objects and to set their properties via code. In this case the @ref EN_init function should be called immediately after creating a project, passing in the names of a report and binary output files (both optional) as well as the choices of flow units and head loss formulas to use. After that the various \b EN_add functions, such as @ref EN_addnode, @ref EN_addlink, @ref EN_addpattern, @ref EN_addcontrol, etc., can be called to add new objects to the network. Here is a partial example of constructing a network from code: + +\code {.c} +int index; +EN_Project ph; +EN_createproject(&ph); +EN_init(ph, "net1.rpt", "", EN_GPM, EN_HW); +EN_addnode(ph, "J1", EN_JUNCTION, &index); +EN_addnode(ph, "J2", EN_JUNCTION, &index); +EN_addlink(ph, "P1", EN_PIPE, "J1", "J2", &index); +// additional function calls to complete building the network +\endcode + +See the @ref Example2 for a more complete example. The labels used to name objects cannot contain spaces, semi-colons, or double quotes nor exceed @ref EN_SizeLimits "EN_MAXID" characters in length. While adding objects their properties can be set as described in the next section. Attemtping to change a network's structure by adding or deleting nodes and links while the Toolkit's hydraulic or water quality solvers are open will result in an error condition. + +@section Properties Setting Object Properties + +The Toolkit contains several functions for retrieving and setting the properties of a network's objects and its analysis options. The names of retrieval functions all begin with \b EN_get (e.g., @ref EN_getnodevalue, @ref EN_getoption, etc.) while the functions used for setting parameter values begin with \b EN_set (e.g., @ref EN_setnodevalue, @ref EN_setoption, etc.). + +Most of these functions use an index number to refer to a specific network component (such as a node, link, time pattern or data curve). This number is simply the position of the component in the list of all components of similar type (e.g., node 10 is the tenth node, starting from 1, in the network) and is not the same as the ID label assigned to the component. A series of functions exist to determine a component's index number given its ID label (see @ref EN_getnodeindex, @ref EN_getlinkindex, @ref EN_getpatternindex, and @ref EN_getcurveindex). Likewise, functions exist to retrieve a component's ID label given its index number (see @ref EN_getlinkid, @ref EN_getnodeid, @ref EN_getpatternid, and @ref EN_getcurveid). The @ref EN_getcount function can be used to determine the number of different components in the network. Be aware that a component's index can change as elements are added or deleted from the network. The @ref EN_addnode and @ref EN_addlink functions return the index of the newly added node or link as a convenience for immediately setting their properties. + +The code below is an example of using the property retrieval and setting functions. It changes all links with diameter of 10 inches to 12 inches. + +\code {.c} +void changeDiameters(EN_Project ph) +{ + int i, nLinks; + double diam; + EN_getcount(ph, EN_LINKCOUNT, &nLinks); + for (i = 1; i <= nLinks; i++) + { + EN_getlinkvalue(ph, i, EN_DIAMETER, &diam); + if (diam == 10) EN_setlinkvalue(ph, i, EN_DIAMETER, 12); + } +} +\endcode + +@section hydraulics Computing Hydraulics + +There are two ways to use the Toolkit to run a hydraulic analysis: +-# Use the @ref EN_solveH function to run a complete extended period analysis, without having access to intermediate results. +-# Use the @ref EN_openH - @ref EN_initH - @ref EN_runH - @ref EN_nextH - @ref EN_closeH series of functions to step through the simulation one hydraulic time step at a time. + +Method 1 is useful if you only want to run a single hydraulic analysis, perhaps to provide input to a water quality analysis. With this method hydraulic results are always saved to an intermediate hydraulics file at every time step. + +Method 2 must be used if you need to access results between time steps or if you wish to run many analyses efficiently. To accomplish the latter, you would make only one call to \b EN_openH to begin the process, then make successive calls to EN_initH - EN_runH - EN_nextH to perform each analysis, and finally call \b EN_closeH to close down the hydraulics system. An example of this is shown below (calls to \b EN_nextH are not needed because we are only making a single period analysis in this example). + +\code {.c} +void runHydraulics(EN_Project ph, int nRuns) +{ + int i; + long t; + EN_openH(ph); + for (i = 1; i <= nRuns; i++) + { + // user-supplied function to set parameters + setparams(ph, i); + // initialize hydraulics; don't save them to file + EN_initH(ph, EN_NOSAVE); + // solve hydraulics + EN_runH(ph, &t); + // user-supplied function to process results + getresults(ph, i); + } + EN_closeH(ph); +} +\endcode + +@section quality Computing Water Quality + +As with a hydraulic analysis, there are two ways to carry out a water quality analysis: + +-# Use the @ref EN_solveQ function to run a complete extended period analysis, without having access to intermediate results. A complete set of hydraulic results must have been generated either from running a hydraulic analysis or from importing a saved hydraulics file from a previous run. +-# Use the @ref EN_openQ - @ref EN_initQ - @ref EN_runQ - @ref EN_nextQ - @ref EN_closeQ series of functions to step through the simulation one hydraulic time step at a time. (Replacing @ref EN_nextQ with @ref EN_stepQ will step through one water quality time step at a time.) + +The second option can either be carried out after a hydraulic analysis has been run or simultaneously as hydraulics are being computed. Example code for these two alternatives is shown below: + +\code {.c} +int runSequentialQuality(EN_Project ph) +{ + int err; + long t, tStep; + err = EN_solveH(ph); + if (err > 100) return err; + EN_openQ(ph); + EN_initQ(ph, EN_NOSAVE); + do { + EN_runQ(ph, &t); + // Access quality results for time t here + EN_nextQ(ph, &tStep); + } while (tStep > 0); + EN_closeQ(ph); + return 0; +} + +int runConcurrentQuality(EN_Project ph) +{ + int err = 0; + long t, tStep; + EN_openH(ph); + EN_initH(ph, EN_NOSAVE); + EN_openQ(ph); + EN_initQ(ph, EN_NOSAVE); + do { + err = EN_runH(ph, &t); + if (err > 100) break; + EN_runQ(ph, &t); + // Access hydraulic & quality results for time t here + EN_nextH(ph, &tStep); + EN_nextQ(ph, &tStep); + } while (tStep > 0); + EN_closeH(ph); + EN_closeQ(ph); + return err; +} +\endcode + +@section results Retrieving Computed Results + +The @ref EN_getnodevalue and @ref EN_getlinkvalue functions can also be used to retrieve the results of hydraulic and water quality simulations. The computed parameters (and their Toolkit codes) that can be retrieved are as follows: +|For Nodes: | For Links: | +|----------------------------------- | ----------------------------------------- | +|\b EN_DEMAND (demand) |\b EN_FLOW (flow rate) | +|\b EN_DEMANDDEFICIT (demand deficit) |\b EN_VELOCITY (flow velocity) | +|\b EN_HEAD (hydraulic head) |\b EN_HEADLOSS (head loss) | +|\b EN_PRESSURE (pressure) |\b EN_STATUS (link status) | +|\b EN_TANKLEVEL (tank water level) |\b EN_SETTING (pump speed or valve setting) | +|\b EN_TANKVOLUME (tank water volume) |\b EN_ENERGY (pump energy usage) | +|\b EN_QUALITY (water quality) |\b EN_PUMP_EFFIC (pump efficiency) | +|\b EN_SOURCEMASS (source mass inflow)| | + +The following code shows how to retrieve the pressure at each node of a network after each time step of a hydraulic analysis (`writetofile` is a user-defined function that will write a record to a file): +\code {.c} +void getPressures(EN_Project ph) +{ + int i, numNodes; + long t, tStep; + double p; + char id[EN_MAXID + 1]; + EN_getcount(ph, EN_NODECOUNT, &numNodes); + EN_openH(ph); + EN_initH(ph, EN_NOSAVE); + do { + EN_runH(ph, &t); + for (i = 1; i <= NumNodes; i++) { + EN_getnodevalue(ph, i, EN_PRESSURE, &p); + EN_getnodeid(ph, i, id); + writetofile(t, id, p); + } + EN_nextH(&tStep); + } while (tStep > 0); + EN_closeH(ph); +} +\endcode + +@section report Producing a Report + +The Toolkit has some built-in capabilities to produce formatted output results saved to a file. More specialized reporting needs can always be handled by writing custom code. + +The @ref EN_setreport function is used to define the format of a report while the @ref EN_report function actually writes the report. The latter should be called only after a hydraulic or water quality analysis has been made. An example of creating a report that lists all nodes where the pressure variation over the duration of the simulation exceeds 20 psi is shown below: + +\code {.c} +void reportPressureVariation(EN_Project ph) +{ + // Compute ranges (max - min) + EN_settimeparam(ph, EN_STATISTIC, EN_RANGE); + + // Solve and save hydraulics + EN_solveH(ph); + EN_saveH(ph); + + // Define contents of the report + EN_resetreport(ph); + EN_setreport(ph, "FILE myfile.rpt"); + EN_setreport(ph, "NODES ALL"); + EN_setreport(ph, "PRESSURE PRECISION 1"); + EN_setreport(ph, "PRESSURE ABOVE 20"); + + // Write the report to file + EN_report(ph); +} +\endcode + +*/ diff --git a/include/epanet2.bas b/include/epanet2.bas index adb5d70..4b9df87 100644 --- a/include/epanet2.bas +++ b/include/epanet2.bas @@ -5,229 +5,391 @@ Attribute VB_Name = "Module1" 'Declarations of functions in the EPANET PROGRAMMERs TOOLKIT '(EPANET2.DLL) -'Last updated on 4/3/07 +'Last updated on 11/04/2019 ' These are codes used by the DLL functions -Global Const EN_ELEVATION = 0 ' Node parameters -Global Const EN_BASEDEMAND = 1 -Global Const EN_PATTERN = 2 -Global Const EN_EMITTER = 3 -Global Const EN_INITQUAL = 4 -Global Const EN_SOURCEQUAL = 5 -Global Const EN_SOURCEPAT = 6 -Global Const EN_SOURCETYPE = 7 -Global Const EN_TANKLEVEL = 8 -Global Const EN_DEMAND = 9 -Global Const EN_HEAD = 10 -Global Const EN_PRESSURE = 11 -Global Const EN_QUALITY = 12 -Global Const EN_SOURCEMASS = 13 -Global Const EN_INITVOLUME = 14 -Global Const EN_MIXMODEL = 15 -Global Const EN_MIXZONEVOL = 16 +Public Const EN_ELEVATION = 0 ' Node parameters +Public Const EN_BASEDEMAND = 1 +Public Const EN_PATTERN = 2 +Public Const EN_EMITTER = 3 +Public Const EN_INITQUAL = 4 +Public Const EN_SOURCEQUAL = 5 +Public Const EN_SOURCEPAT = 6 +Public Const EN_SOURCETYPE = 7 +Public Const EN_TANKLEVEL = 8 +Public Const EN_DEMAND = 9 +Public Const EN_HEAD = 10 +Public Const EN_PRESSURE = 11 +Public Const EN_QUALITY = 12 +Public Const EN_SOURCEMASS = 13 +Public Const EN_INITVOLUME = 14 +Public Const EN_MIXMODEL = 15 +Public Const EN_MIXZONEVOL = 16 -Global Const EN_TANKDIAM = 17 -Global Const EN_MINVOLUME = 18 -Global Const EN_VOLCURVE = 19 -Global Const EN_MINLEVEL = 20 -Global Const EN_MAXLEVEL = 21 -Global Const EN_MIXFRACTION = 22 -Global Const EN_TANK_KBULK = 23 -Global Const EN_TANKVOLUME = 24 -Global Const EN_MAXVOLUME = 25 +Public Const EN_TANKDIAM = 17 +Public Const EN_MINVOLUME = 18 +Public Const EN_VOLCURVE = 19 +Public Const EN_MINLEVEL = 20 +Public Const EN_MAXLEVEL = 21 +Public Const EN_MIXFRACTION = 22 +Public Const EN_TANK_KBULK = 23 +Public Const EN_TANKVOLUME = 24 +Public Const EN_MAXVOLUME = 25 +Public Const EN_CANOVERFLOW = 26 +Public Const EN_DEMANDDEFICIT = 27 -Global Const EN_DIAMETER = 0 ' Link parameters -Global Const EN_LENGTH = 1 -Global Const EN_ROUGHNESS = 2 -Global Const EN_MINORLOSS = 3 -Global Const EN_INITSTATUS = 4 -Global Const EN_INITSETTING = 5 -Global Const EN_KBULK = 6 -Global Const EN_KWALL = 7 -Global Const EN_FLOW = 8 -Global Const EN_VELOCITY = 9 -Global Const EN_HEADLOSS = 10 -Global Const EN_STATUS = 11 -Global Const EN_SETTING = 12 -Global Const EN_ENERGY = 13 -Global Const EN_LINKQUAL = 14 'ES -Global Const EN_LINKPATTERN = 15 +Public Const EN_DIAMETER = 0 ' Link parameters +Public Const EN_LENGTH = 1 +Public Const EN_ROUGHNESS = 2 +Public Const EN_MINORLOSS = 3 +Public Const EN_INITSTATUS = 4 +Public Const EN_INITSETTING = 5 +Public Const EN_KBULK = 6 +Public Const EN_KWALL = 7 +Public Const EN_FLOW = 8 +Public Const EN_VELOCITY = 9 +Public Const EN_HEADLOSS = 10 +Public Const EN_STATUS = 11 +Public Const EN_SETTING = 12 +Public Const EN_ENERGY = 13 +Public Const EN_LINKQUAL = 14 +Public Const EN_LINKPATTERN = 15 -Global Const EN_DURATION = 0 ' Time parameters -Global Const EN_HYDSTEP = 1 -Global Const EN_QUALSTEP = 2 -Global Const EN_PATTERNSTEP = 3 -Global Const EN_PATTERNSTART = 4 -Global Const EN_REPORTSTEP = 5 -Global Const EN_REPORTSTART = 6 -Global Const EN_RULESTEP = 7 -Global Const EN_STATISTIC = 8 -Global Const EN_PERIODS = 9 -Global Const EN_STARTTIME = 10 -Global Const EN_HTIME = 11 -Global Const EN_QTIME = 12 -Global Const EN_HALTFLAG = 13 -Global Const EN_NEXTEVENT = 14 +Public Const EN_PUMP_STATE = 16 +Public Const EN_PUMP_EFFIC = 17 +Public Const EN_PUMP_POWER = 18 +Public Const EN_PUMP_HCURVE = 19 +Public Const EN_PUMP_ECURVE = 20 +Public Const EN_PUMP_ECOST = 21 +Public Const EN_PUMP_EPAT = 22 -Global Const EN_ITERATIONS = 0 -Global Const EN_RELATIVEERROR = 1 +Public Const EN_DURATION = 0 ' Time parameters +Public Const EN_HYDSTEP = 1 +Public Const EN_QUALSTEP = 2 +Public Const EN_PATTERNSTEP = 3 +Public Const EN_PATTERNSTART = 4 +Public Const EN_REPORTSTEP = 5 +Public Const EN_REPORTSTART = 6 +Public Const EN_RULESTEP = 7 +Public Const EN_STATISTIC = 8 +Public Const EN_PERIODS = 9 +Public Const EN_STARTTIME = 10 +Public Const EN_HTIME = 11 +Public Const EN_QTIME = 12 +Public Const EN_HALTFLAG = 13 +Public Const EN_NEXTEVENT = 14 -Global Const EN_NODECOUNT = 0 'Component counts -Global Const EN_TANKCOUNT = 1 -Global Const EN_LINKCOUNT = 2 -Global Const EN_PATCOUNT = 3 -Global Const EN_CURVECOUNT = 4 -Global Const EN_CONTROLCOUNT = 5 +Public Const EN_ITERATIONS = 0 ' Run statistics +Public Const EN_RELATIVEERROR = 1 +Public Const EN_MAXHEADERROR = 2 +Public Const EN_MAXFLOWCHANGE = 3 +Public Const EN_MASSBALANCE = 4 +Public Const EN_DEFICIENTNODES = 5 +Public Const EN_DEMANDREDUCTION = 6 -Global Const EN_JUNCTION = 0 ' Node types -Global Const EN_RESERVOIR = 1 -Global Const EN_TANK = 2 +Public Const EN_NODE = 0 ' Component types +Public Const EN_LINK = 1 +Public Const EN_TIMEPAT = 2 +Public Const EN_CURVE = 3 +Public Const EN_CONTROL = 4 +Public Const EN_RULE = 5 -Global Const EN_CVPIPE = 0 ' Link types -Global Const EN_PIPE = 1 -Global Const EN_PUMP = 2 -Global Const EN_PRV = 3 -Global Const EN_PSV = 4 -Global Const EN_PBV = 5 -Global Const EN_FCV = 6 -Global Const EN_TCV = 7 -Global Const EN_GPV = 8 +Public Const EN_NODECOUNT = 0 ' Component counts +Public Const EN_TANKCOUNT = 1 +Public Const EN_LINKCOUNT = 2 +Public Const EN_PATCOUNT = 3 +Public Const EN_CURVECOUNT = 4 +Public Const EN_CONTROLCOUNT = 5 +Public Const EN_RULECOUNT = 6 -Global Const EN_NONE = 0 ' Quality analysis types -Global Const EN_CHEM = 1 -Global Const EN_AGE = 2 -Global Const EN_TRACE = 3 +Public Const EN_JUNCTION = 0 ' Node types +Public Const EN_RESERVOIR = 1 +Public Const EN_TANK = 2 -Global Const EN_CONCEN = 0 ' Source quality types -Global Const EN_MASS = 1 -Global Const EN_SETPOINT = 2 -Global Const EN_FLOWPACED = 3 +Public Const EN_CVPIPE = 0 ' Link types +Public Const EN_PIPE = 1 +Public Const EN_PUMP = 2 +Public Const EN_PRV = 3 +Public Const EN_PSV = 4 +Public Const EN_PBV = 5 +Public Const EN_FCV = 6 +Public Const EN_TCV = 7 +Public Const EN_GPV = 8 -Global Const EN_CFS = 0 ' Flow units types -Global Const EN_GPM = 1 -Global Const EN_MGD = 2 -Global Const EN_IMGD = 3 -Global Const EN_AFD = 4 -Global Const EN_LPS = 5 -Global Const EN_LPM = 6 -Global Const EN_MLD = 7 -Global Const EN_CMH = 8 -Global Const EN_CMD = 9 +Public Const EN_NONE = 0 ' Quality analysis types +Public Const EN_CHEM = 1 +Public Const EN_AGE = 2 +Public Const EN_TRACE = 3 -Global Const EN_TRIALS = 0 ' Misc. options -Global Const EN_ACCURACY = 1 -Global Const EN_TOLERANCE = 2 -Global Const EN_EMITEXPON = 3 -Global Const EN_DEMANDMULT = 4 +Public Const EN_CONCEN = 0 ' Source quality types +Public Const EN_MASS = 1 +Public Const EN_SETPOINT = 2 +Public Const EN_FLOWPACED = 3 -Global Const EN_LOWLEVEL = 0 ' Control types -Global Const EN_HILEVEL = 1 -Global Const EN_TIMER = 2 -Global Const EN_TIMEOFDAY = 3 +Public Const EN_HW = 0 ' Head loss formulas +Public Const EN_DW = 1 +Public Const EN_CM = 2 -Global Const EN_AVERAGE = 1 'Time statistic types -Global Const EN_MINIMUM = 2 -Global Const EN_MAXIMUM = 3 -Global Const EN_RANGE = 4 +Public Const EN_CFS = 0 ' Flow units types +Public Const EN_GPM = 1 +Public Const EN_MGD = 2 +Public Const EN_IMGD = 3 +Public Const EN_AFD = 4 +Public Const EN_LPS = 5 +Public Const EN_LPM = 6 +Public Const EN_MLD = 7 +Public Const EN_CMH = 8 +Public Const EN_CMD = 9 -Global Const EN_MIX1 = 0 'Tank mixing models -Global Const EN_MIX2 = 1 -Global Const EN_FIFO = 2 -Global Const EN_LIFO = 3 +Public Const EN_DDA = 0 ' Demand driven analysis +Public Const EN_PDA = 1 ' Pressure driven analysis -Global Const EN_NOSAVE = 0 ' Save-results-to-file flag -Global Const EN_SAVE = 1 +Public Const EN_TRIALS = 0 ' Simulation options +Public Const EN_ACCURACY = 1 +Public Const EN_TOLERANCE = 2 +Public Const EN_EMITEXPON = 3 +Public Const EN_DEMANDMULT = 4 +Public Const EN_HEADERROR = 5 +Public Const EN_FLOWCHANGE = 6 +Public Const EN_HEADLOSSFORM = 7 +Public Const EN_GLOBALEFFIC = 8 +Public Const EN_GLOBALPRICE = 9 +Public Const EN_GLOBALPATTERN = 10 +Public Const EN_DEMANDCHARGE = 11 +Public Const EN_SP_GRAVITY = 12 +Public Const EN_SP_VISCOS = 13 +Public Const EN_UNBALANCED = 14 +Public Const EN_CHECKFREQ = 15 +Public Const EN_MAXCHECK = 16 +Public Const EN_DAMPLIMIT = 17 +Public Const EN_SP_DIFFUS = 18 +Public Const EN_BULKORDER = 19 +Public Const EN_WALLORDER = 20 +Public Const EN_TANKORDER = 21 +Public Const EN_CONCENLIMIT = 22 -Global Const EN_INITFLOW = 10 ' Re-initialize flow flag +Public Const EN_LOWLEVEL = 0 ' Control types +Public Const EN_HILEVEL = 1 +Public Const EN_TIMER = 2 +Public Const EN_TIMEOFDAY = 3 -Global Const EN_CONST_HP = 0 ' constant horsepower -Global Const EN_POWER_FUNC = 1 ' power function -Global Const EN_CUSTOM = 2 ' user-defined custom curve +Public Const EN_AVERAGE = 1 ' Time statistic types +Public Const EN_MINIMUM = 2 +Public Const EN_MAXIMUM = 3 +Public Const EN_RANGE = 4 + +Public Const EN_MIX1 = 0 ' Tank mixing models +Public Const EN_MIX2 = 1 +Public Const EN_FIFO = 2 +Public Const EN_LIFO = 3 + +Public Const EN_NOSAVE = 0 ' Save-results-to-file flag +Public Const EN_SAVE = 1 +Public Const EN_INITFLOW = 10 ' Re-initialize flow flag +Public Const EN_SAVE_AND_INIT = 11 + +Public Const EN_CONST_HP = 0 ' Constant horsepower pump curve +Public Const EN_POWER_FUNC = 1 ' Power function pump cuve +Public Const EN_CUSTOM = 2 ' User-defined custom pump curve +Public Const EN_NOCURVE = 3 ' No pump curve + +Public Const EN_VOLUME_CURVE = 0 ' Volume curve +Public Const EN_PUMP_CURVE = 1 ' Pump curve +Public Const EN_EFFIC_CURVE = 2 ' Efficiency curve +Public Const EN_HLOSS_CURVE = 3 ' Head loss curve +Public Const EN_GENERIC_CURVE = 4 ' Generic curve + +Public Const EN_UNCONDITIONAL = 0 ' Unconditional object deletion +Public Const EN_CONDITIONAL = 1 ' Conditional object deletion + +Public Const EN_NO_REPORT = 0 ' No status report +Public Const EN_NORMAL_REPORT = 1 ' Normal status report +Public Const EN_FULL_REPORT = 2 ' Full status report + +Public Const EN_R_NODE = 6 ' Rule objects +Public Const EN_R_LINK = 7 +Public Const EN_R_SYSTEM = 8 + +Public Const EN_R_DEMAND = 0 ' Rule variables +Public Const EN_R_HEAD = 1 +Public Const EN_R_GRADE = 2 +Public Const EN_R_LEVEL = 3 +Public Const EN_R_PRESSURE = 4 +Public Const EN_R_FLOW = 5 +Public Const EN_R_STATUS = 6 +Public Const EN_R_SETTING = 7 +Public Const EN_R_POWER = 8 +Public Const EN_R_TIME = 9 +Public Const EN_R_CLOCKTIME = 10 +Public Const EN_R_FILLTIME = 11 +Public Const EN_R_DRAINTIME = 12 + +Public Const EN_R_EQ = 0 ' Rule operators +Public Const EN_R_NE = 1 +Public Const EN_R_LE = 2 +Public Const EN_R_GE = 3 +Public Const EN_R_LT = 4 +Public Const EN_R_GT = 5 +Public Const EN_R_IS = 6 +Public Const EN_R_NOT = 7 +Public Const EN_R_BELOW = 8 +Public Const EN_R_ABOVE = 9 + +Public Const EN_R_IS_OPEN = 1 ' Rule status types +Public Const EN_R_IS_CLOSED = 2 +Public Const EN_R_IS_ACTIVE = 3 + +Public Const EN_MISSING As Double = -1.0E10 'These are the external functions that comprise the DLL - Declare Function ENepanet Lib "epanet2.dll" (ByVal F1 As String, ByVal F2 As String, ByVal F3 As String, ByVal F4 As Any) As Long - Declare Function ENopen Lib "epanet2.dll" (ByVal F1 As String, ByVal F2 As String, ByVal F3 As String) As Long - Declare Function ENsaveinpfile Lib "epanet2.dll" (ByVal F As String) As Long +'Project Functions + Declare Function ENgetversion Lib "epanet2.dll" (value As Long) As Long + Declare Function ENepanet Lib "epanet2.dll" (ByVal inpFile As String, ByVal rptFile As String, ByVal outFile As String, ByVal pviewprog As Any) As Long + Declare Function ENinit Lib "epanet2.dll" (ByVal rptFile As String, ByVal outFile As String, ByVal unitsType As Long, ByVal headlossType As Long) As Long + Declare Function ENopen Lib "epanet2.dll" (ByVal inpFile As String, ByVal rptFile As String, ByVal outFile As String) As Long + Declare Function ENgettitle Lib "epanet2.dll" (ByVal line1 As String, ByVal line2 As String, ByVal line3 As String) As Long + Declare Function ENsettitle Lib "epanet2.dll" (ByVal titleline1 As String, ByVal titleline2 As String, ByVal titleline3 As String) As Long + Declare Function ENsaveinpfile Lib "epanet2.dll" (ByVal filename As String) As Long Declare Function ENclose Lib "epanet2.dll" () As Long +'Hydraulic Analysis Functions Declare Function ENsolveH Lib "epanet2.dll" () As Long Declare Function ENsaveH Lib "epanet2.dll" () As Long Declare Function ENopenH Lib "epanet2.dll" () As Long - Declare Function ENinitH Lib "epanet2.dll" (ByVal SaveFlag As Long) As Long - Declare Function ENrunH Lib "epanet2.dll" (T As Long) As Long - Declare Function ENnextH Lib "epanet2.dll" (Tstep As Long) As Long + Declare Function ENinitH Lib "epanet2.dll" (ByVal initFlag As Long) As Long + Declare Function ENrunH Lib "epanet2.dll" (currentTime As Long) As Long + Declare Function ENnextH Lib "epanet2.dll" (tStep As Long) As Long Declare Function ENcloseH Lib "epanet2.dll" () As Long - Declare Function ENsavehydfile Lib "epanet2.dll" (ByVal F As String) As Long - Declare Function ENusehydfile Lib "epanet2.dll" (ByVal F As String) As Long + Declare Function ENsavehydfile Lib "epanet2.dll" (ByVal filename As String) As Long + Declare Function ENusehydfile Lib "epanet2.dll" (ByVal filename As String) As Long +'Water Quality Analysis Functions Declare Function ENsolveQ Lib "epanet2.dll" () As Long Declare Function ENopenQ Lib "epanet2.dll" () As Long - Declare Function ENinitQ Lib "epanet2.dll" (ByVal SaveFlag As Long) As Long - Declare Function ENrunQ Lib "epanet2.dll" (T As Long) As Long - Declare Function ENnextQ Lib "epanet2.dll" (Tstep As Long) As Long - Declare Function ENstepQ Lib "epanet2.dll" (Tleft As Long) As Long + Declare Function ENinitQ Lib "epanet2.dll" (ByVal saveFlag As Long) As Long + Declare Function ENrunQ Lib "epanet2.dll" (currentTime As Long) As Long + Declare Function ENnextQ Lib "epanet2.dll" (tStep As Long) As Long + Declare Function ENstepQ Lib "epanet2.dll" (timeLeft As Long) As Long Declare Function ENcloseQ Lib "epanet2.dll" () As Long - Declare Function ENwriteline Lib "epanet2.dll" (ByVal S As String) As Long +'Reporting Functions + Declare Function ENwriteline Lib "epanet2.dll" (ByVal line As String) As Long Declare Function ENreport Lib "epanet2.dll" () As Long + Declare Function ENcopyreport Lib "epanet2.dll" (ByVal filename As String) As Long + Declare Function ENclearreport Lib "epanet2.dll" () As Long Declare Function ENresetreport Lib "epanet2.dll" () As Long - Declare Function ENsetreport Lib "epanet2.dll" (ByVal S As String) As Long + Declare Function ENsetreport Lib "epanet2.dll" (ByVal format As String) As Long + Declare Function ENsetstatusreport Lib "epanet2.dll" (ByVal level As Long) As Long + Declare Function ENgetcount Lib "epanet2.dll" (ByVal object As Long, count As Long) As Long + Declare Function ENgeterror Lib "epanet2.dll" (ByVal errcode As Long, ByVal errmsg As String, ByVal maxLen As Long) As Long + Declare Function ENgetstatistic Lib "epanet2.dll" (ByVal type_ As Long, ByRef value As Single) As Long + Declare Function ENgetresultindex Lib "epanet2.dll" (ByVal type_ As Long, ByVal index As Long, ByRef value As Long) As Long - Declare Function ENgetcontrol Lib "epanet2.dll" (ByVal Cindex As Long, Ctype As Long, Lindex As Long, Setting As Single, Nindex As Long, Level As Single) As Long - Declare Function ENgetcount Lib "epanet2.dll" (ByVal Code As Long, Value As Long) As Long - Declare Function ENgetoption Lib "epanet2.dll" (ByVal Code As Long, Value As Single) As Long - Declare Function ENgettimeparam Lib "epanet2.dll" (ByVal Code As Long, Value As Long) As Long - Declare Function ENgetflowunits Lib "epanet2.dll" (Code As Long) As Long - Declare Function ENgetpatternindex Lib "epanet2.dll" (ByVal ID As String, Index As Long) As Long - Declare Function ENgetpatternid Lib "epanet2.dll" (ByVal Index As Long, ByVal ID As String) As Long - Declare Function ENgetpatternlen Lib "epanet2.dll" (ByVal Index As Long, L As Long) As Long - Declare Function ENgetpatternvalue Lib "epanet2.dll" (ByVal Index As Long, ByVal Period As Long, Value As Single) As Long - Declare Function ENgetaveragepatternvalue Lib "epanet2.dll" (ByVal Index As Long, Value As Single) As Long - Declare Function ENgetqualtype Lib "epanet2.dll" (QualCode As Long, TraceNode As Long) As Long - Declare Function ENgeterror Lib "epanet2.dll" (ByVal ErrCode As Long, ByVal ErrMsg As String, ByVal N As Long) As Long - Declare Function ENgetstatistic Lib "epanet2.dll" (ByVal Code As Long, Value As Single) As Long +'Analysis Options Functions + Declare Function ENgetoption Lib "epanet2.dll" (ByVal option_ As Long, value As Single) As Long + Declare Function ENsetoption Lib "epanet2.dll" (ByVal option_ As Long, ByVal value As Single) As Long + Declare Function ENgetflowunits Lib "epanet2.dll" (units As Long) As Long + Declare Function ENsetflowunits Lib "epanet2.dll" (ByVal units As Long) As Long + Declare Function ENgettimeparam Lib "epanet2.dll" (ByVal param As Long, value As Long) As Long + Declare Function ENsettimeparam Lib "epanet2.dll" (ByVal param As Long, ByVal value As Long) As Long + Declare Function ENgetqualinfo Lib "epanet2.dll" (qualType As Long, ByVal chemName As String, ByVal chemUnits As String, traceNode As Long) As Long + Declare Function ENgetqualtype Lib "epanet2.dll" (qualType As Long, traceNode As Long) As Long + Declare Function ENsetqualtype Lib "epanet2.dll" (ByVal qualType As Long, ByVal chemName As String, ByVal chemUnits As String, ByVal traceNode As String) As Long - Declare Function ENgetnodeindex Lib "epanet2.dll" (ByVal ID As String, Index As Long) As Long - Declare Function ENgetnodeid Lib "epanet2.dll" (ByVal Index As Long, ByVal ID As String) As Long - Declare Function ENgetnodetype Lib "epanet2.dll" (ByVal Index As Long, Code As Long) As Long - Declare Function ENgetnodevalue Lib "epanet2.dll" (ByVal Index As Long, ByVal Code As Long, Value As Single) As Long - Declare Function ENgetcoord Lib "epanet2.dll" (ByVal Index As Long, X As Single, Y As Single) As Long - Declare Function ENsetcoord Lib "epanet2.dll" (ByVal Index As Long, ByVal X As Single, ByVal Y As Single) As Long +'Node Functions + Declare Function ENaddnode Lib "epanet2.dll" (ByVal id As String, ByVal nodeType As Long, index As Long) As Long + Declare Function ENdeletenode Lib "epanet2.dll" (ByVal index As Long, ByVal actionCode As Long) As Long + Declare Function ENgetnodeindex Lib "epanet2.dll" (ByVal id As String, index As Long) As Long + Declare Function ENgetnodeid Lib "epanet2.dll" (ByVal index As Long, ByVal id As String) As Long + Declare Function ENsetnodeid Lib "epanet2.dll" (ByVal index As Long, ByVal newid As String) As Long + Declare Function ENgetnodetype Lib "epanet2.dll" (ByVal index As Long, nodeType As Long) As Long + Declare Function ENgetnodevalue Lib "epanet2.dll" (ByVal index As Long, ByVal property As Long, value As Single) As Long + Declare Function ENsetnodevalue Lib "epanet2.dll" (ByVal index As Long, ByVal property As Long, ByVal value As Single) As Long + Declare Function ENsetjuncdata Lib "epanet2.dll" (ByVal index As Long, ByVal elev As Single, ByVal dmnd As Single, ByVal dmndpat As String) As Long + Declare Function ENsettankdata Lib "epanet2.dll" (ByVal index As Long, ByVal elev As Single, ByVal initlvl As Single, ByVal minlvl As Single, ByVal maxlvl As Single, ByVal diam As Single, ByVal minvol As Single, ByVal volcurve As String) As Long + Declare Function ENgetcoord Lib "epanet2.dll" (ByVal index As Long, x As Double, y As Double) As Long + Declare Function ENsetcoord Lib "epanet2.dll" (ByVal index As Long, ByVal x As Double, ByVal y As Double) As Long + +'Nodal Demand Functions + Declare Function ENgetdemandmodel Lib "epanet2.dll" (type_ As Long, pmin As Single, preq As Single, pexp As Single) As Long + Declare Function ENsetdemandmodel Lib "epanet2.dll" (ByVal type_ As Long, ByVal pmin As Single, ByVal preq As Single, ByVal pexp As Single) As Long + Declare Function ENadddemand Lib "epanet2.dll" (ByVal nodeIndex As Long, ByVal baseDemand As Single, ByVal patternName As String, ByVal demandName As String) As Long + Declare Function ENdeletedemand Lib "epanet2.dll" (ByVal nodeIndex As Long, ByVal demandIndex As Long) As Long + Declare Function ENgetdemandindex Lib "epanet2.dll" (ByVal nodeIndex As Long, ByVal demandName As String, demandIndex As Long) As Long + Declare Function ENgetnumdemands Lib "epanet2.dll" (ByVal nodeIndex As Long, numDemands As Long) As Long + Declare Function ENgetbasedemand Lib "epanet2.dll" (ByVal nodeIndex As Long, ByVal demandIndex As Long, value As Single) As Long + Declare Function ENsetbasedemand Lib "epanet2.dll" (ByVal nodeIndex As Long, ByVal demandIndex As Long, ByVal BaseDemand As Single) As Long + Declare Function ENgetdemandpattern Lib "epanet2.dll" (ByVal nodeIndex As Long, ByVal demandIndex As Long, patIndex As Long) As Long + Declare Function ENsetdemandpattern Lib "epanet2.dll" (ByVal nodeIndex As Long, ByVal demandIndex As Long, ByVal patIndex As Long) As Long + Declare Function ENgetdemandname Lib "epanet2.dll" (ByVal nodeIndex As Long, ByVal demandIndex As Long, ByVal demandName As String) As Long + Declare Function ENsetdemandname Lib "epanet2.dll" (ByVal nodeIndex As Long, ByVal demandIndex As Long, ByVal demandName As String) As Long - Declare Function ENgetnumdemands Lib "epanet2.dll" (ByVal Index As Long, numDemands As Long) As Long - Declare Function ENgetbasedemand Lib "epanet2.dll" (ByVal Index As Long, ByVal DemandIndex As Long, Value As Single) As Long - Declare Function ENgetdemandpattern Lib "epanet2.dll" (ByVal Index As Long, ByVal DemandIndex As Long, PatIndex As Long) As Long +'Link Functions + Declare Function ENaddlink Lib "epanet2.dll" (ByVal id As String, ByVal linkType As Long, ByVal fromNode As String, ByVal toNode As String, index As Long) As Long + Declare Function ENdeletelink Lib "epanet2.dll" (ByVal index As Long, ByVal actionCode As Long) As Long + Declare Function ENgetlinkindex Lib "epanet2.dll" (ByVal id As String, index As Long) As Long + Declare Function ENgetlinkid Lib "epanet2.dll" (ByVal index As Long, ByVal id As String) As Long + Declare Function ENsetlinkid Lib "epanet2.dll" (ByVal index As Long, ByVal newid As String) As Long + Declare Function ENgetlinktype Lib "epanet2.dll" (ByVal index As Long, linkType As Long) As Long + Declare Function ENsetlinktype Lib "epanet2.dll" (index As Long, ByVal linkType As Long, ByVal actionCode As Long) As Long + Declare Function ENgetlinknodes Lib "epanet2.dll" (ByVal index As Long, node1 As Long, node2 As Long) As Long + Declare Function ENsetlinknodes Lib "epanet2.dll" (ByVal index As Long, ByVal node1 As Long, ByVal node2 As Long) As Long + Declare Function ENgetlinkvalue Lib "epanet2.dll" (ByVal index As Long, ByVal property As Long, value As Single) As Long + Declare Function ENsetlinkvalue Lib "epanet2.dll" (ByVal index As Long, ByVal property As Long, ByVal value As Single) As Long + Declare Function ENsetpipedata Lib "epanet2.dll" (ByVal index As Long, ByVal length As Single, ByVal diam As Single, ByVal rough As Single, ByVal mloss As Single) As Long + Declare Function ENgetvertexcount Lib "epanet2.dll" (ByVal index As Long, count As Long) As Long + Declare Function ENgetvertex Lib "epanet2.dll" (ByVal index As Long, ByVal vertex As Long, x As Double, y As Double) As Long + Declare Function ENsetvertices Lib "epanet2.dll" (ByVal index As Long, xCoords As Any, yCoords As Any, ByVal count As Long) As Long - Declare Function ENgetlinkindex Lib "epanet2.dll" (ByVal ID As String, Index As Long) As Long - Declare Function ENgetlinkid Lib "epanet2.dll" (ByVal Index As Long, ByVal ID As String) As Long - Declare Function ENgetlinktype Lib "epanet2.dll" (ByVal Index As Long, Code As Long) As Long - Declare Function ENgetlinknodes Lib "epanet2.dll" (ByVal Index As Long, Node1 As Long, Node2 As Long) As Long - Declare Function ENgetlinkvalue Lib "epanet2.dll" (ByVal Index As Long, ByVal Code As Long, Value As Single) As Long +'Pump Functions + Declare Function ENgetheadcurveindex Lib "epanet2.dll" (ByVal linkIndex As Long, curveIndex As Long) As Long + Declare Function ENsetheadcurveindex Lib "epanet2.dll" (ByVal linkIndex As Long, ByVal curveIndex As Long) As Long + Declare Function ENgetpumptype Lib "epanet2.dll" (ByVal linkIndex As Long, pumpType As Long) As Long - Declare Function ENgetcurve Lib "epanet2.dll" (ByVal CurveIndex As Long, ByVal CurveID As String, nValues As Long, xValues As Any, yValues As Any) As Long - Declare Function ENgetheadcurveindex Lib "epanet2.dll" (ByVal PumpIndex As Long, CurveIndex As Long) As Long - Declare Function ENgetpumptype Lib "epanet2.dll" (ByVal Index As Long, PumpType As Long) As Long +'Time Pattern Functions + Declare Function ENaddpattern Lib "epanet2.dll" (ByVal id As String) As Long + Declare Function ENdeletepattern Lib "epanet2.dll" (ByVal index As Long) As Long + Declare Function ENgetpatternindex Lib "epanet2.dll" (ByVal id As String, index As Long) As Long + Declare Function ENgetpatternid Lib "epanet2.dll" (ByVal index As Long, ByVal id As String) As Long + Declare Function ENsetpatternid Lib "epanet2.dll" (ByVal index As Long, ByVal newid As String) As Long + Declare Function ENgetpatternlen Lib "epanet2.dll" (ByVal index As Long, len_ As Long) As Long + Declare Function ENgetpatternvalue Lib "epanet2.dll" (ByVal index As Long, ByVal period As Long, value As Single) As Long + Declare Function ENsetpatternvalue Lib "epanet2.dll" (ByVal index As Long, ByVal period As Long, ByVal value As Single) As Long + Declare Function ENgetaveragepatternvalue Lib "epanet2.dll" (ByVal index As Long, value As Single) As Long + Declare Function ENsetpattern Lib "epanet2.dll" (ByVal index As Long, values As Any, ByVal len_ As Long) As Long - Declare Function ENgetversion Lib "epanet2.dll" (Value As Long) As Long +'Data Curve Functions + Declare Function ENaddcurve Lib "epanet2.dll" (ByVal id As String) As Long + Declare Function ENdeletecurve Lib "epanet2.dll" (ByVal index As Long) As Long + Declare Function ENgetcurveindex Lib "epanet2.dll" (ByVal id As String, index As Long) As Long + Declare Function ENgetcurveid Lib "epanet2.dll" (ByVal index As Long, ByVal id As String) As Long + Declare Function ENsetcurveid Lib "epanet2.dll" (ByVal index As Long, ByVal newid As String) As Long + Declare Function ENgetcurvelen Lib "epanet2.dll" (ByVal index As Long, len_ As Long) As Long + Declare Function ENgetcurvetype Lib "epanet2.dll" (ByVal index As Long, type_ As Long) As Long + Declare Function ENgetcurvevalue Lib "epanet2.dll" (ByVal curveIndex As Long, ByVal pointIndex As Long, x As Single, y As Single) As Long + Declare Function ENsetcurvevalue Lib "epanet2.dll" (ByVal curveIndex As Long, ByVal pointIndex As Long, ByVal x As Single, ByVal y As Single) As Long + Declare Function ENgetcurve Lib "epanet2.dll" (ByVal index As Long, ByVal id As String, nPoints As Long, xValues As Any, yValues As Any) As Long + Declare Function ENsetcurve Lib "epanet2.dll" (ByVal index As Long, xValues As Any, yValues As Any, ByVal nPoints As Long) As Long - Declare Function ENsetcontrol Lib "epanet2.dll" (ByVal Cindex As Long, ByVal Ctype As Long, ByVal Lindex As Long, ByVal Setting As Single, ByVal Nindex As Long, ByVal Level As Single) As Long - Declare Function ENsetnodevalue Lib "epanet2.dll" (ByVal Index As Long, ByVal Code As Long, ByVal Value As Single) As Long - Declare Function ENsetlinkvalue Lib "epanet2.dll" (ByVal Index As Long, ByVal Code As Long, ByVal Value As Single) As Long - Declare Function ENaddpattern Lib "epanet2.dll" (ByVal ID As String) As Long - Declare Function ENsetpattern Lib "epanet2.dll" (ByVal Index As Long, F As Any, ByVal N As Long) As Long - Declare Function ENsetpatternvalue Lib "epanet2.dll" (ByVal Index As Long, ByVal Period As Long, ByVal Value As Single) As Long - Declare Function ENsettimeparam Lib "epanet2.dll" (ByVal Code As Long, ByVal Value As Long) As Long - Declare Function ENsetoption Lib "epanet2.dll" (ByVal Code As Long, ByVal Value As Single) As Long - Declare Function ENsetstatusreport Lib "epanet2.dll" (ByVal Code As Long) As Long - Declare Function ENsetqualtype Lib "epanet2.dll" (ByVal QualCode As Long, ByVal ChemName As String, ByVal ChemUnits As String, ByVal TraceNode As String) As Long - Declare Function ENgetqualinfo Lib "epanet2.dll" (QualCode As Long, ByVal ChemName As String, ByVal ChemUnits As String, TraceNode As Long) As Long - Declare Function ENsetbasedemand Lib "epanet2.dll" (ByVal NodeIndex As Long, ByVal DemandIndex As Long, ByVal BaseDemand As Single) As Long +'Simple Control Functions + Declare Function ENaddcontrol Lib "epanet2.dll" (ByVal type_ As Long, ByVal linkIndex As Long, ByVal setting As Single, ByVal nodeIndex As Long, ByVal level As Single, index As Long) As Long + Declare Function ENdeletecontrol Lib "epanet2.dll" (ByVal index As Long) As Long + Declare Function ENgetcontrol Lib "epanet2.dll" (ByVal index As Long, type_ As Long, linkIndex As Long, setting As Single, nodeIndex As Long, level As Single) As Long + Declare Function ENsetcontrol Lib "epanet2.dll" (ByVal index As Long, ByVal type_ As Long, ByVal linkIndex As Long, ByVal setting As Single, ByVal nodeIndex As Long, ByVal level As Single) As Long - Declare Function ENgetcurveindex Lib "epanet2.dll" (ByVal ID As String, Index As Long) As Long - Declare Function ENgetcurveid Lib "epanet2.dll" (ByVal Index As Long, ByVal ID As String) As Long - Declare Function ENgetcurvelen Lib "epanet2.dll" (ByVal Index As Long, L As Long) As Long - Declare Function ENgetcurvevalue Lib "epanet2.dll" (ByVal Index As Long, ByVal Ptn As Long, X As Single, Y As Single) As Long - Declare Function ENsetcurvevalue Lib "epanet2.dll" (ByVal Index As Long, ByVal Ptn As Long, ByVal X As Single, ByVal Y As Single) As Long - Declare Function ENsetcurve Lib "epanet2.dll" (ByVal Index As Long, X As Any, Y As Any, ByVal N As Long) As Long - Declare Function ENaddcurve Lib "epanet2.dll" (ByVal ID As String) As Long \ No newline at end of file +'Rule-Based Control Functions + Declare Function ENaddrule Lib "epanet2.dll" (ByVal rule As String) As Long + Declare Function ENdeleterule Lib "epanet2.dll" (ByVal index As Long) As Long + Declare Function ENgetrule Lib "epanet2.dll" (ByVal index As Long, nPremises As Long, nThenActions As Long, nElseActions As Long, priority As Single) As Long + Declare Function ENgetruleID Lib "epanet2.dll" (ByVal index As Long, ByVal id As String) As Long + Declare Function ENsetrulepriority Lib "epanet2.dll" (ByVal index As Long, ByVal priority As Single) As Long + Declare Function ENgetpremise Lib "epanet2.dll" (ByVal ruleIndex As Long, ByVal premiseIndex As Long, logop As Long, object As Long, objIndex As Long, variable As Long, relop As Long, status As Long, value As Single) As Long + Declare Function ENsetpremise Lib "epanet2.dll" (ByVal ruleIndex As Long, ByVal premiseIndex As Long, ByVal logop As Long, ByVal object As Long, ByVal objIndex As Long, ByVal variable As Long, ByVal relop As Long, ByVal status As Long, ByVal value As Single) As Long + Declare Function ENsetpremiseindex Lib "epanet2.dll" (ByVal ruleIndex As Long, ByVal premiseIndex As Long, ByVal objIndex As Long) As Long + Declare Function ENsetpremisestatus Lib "epanet2.dll" (ByVal ruleIndex As Long, ByVal premiseIndex As Long, ByVal status As Long) As Long + Declare Function ENsetpremisevalue Lib "epanet2.dll" (ByVal ruleIndex As Long, ByVal premiseIndex As Long, ByVal value As Single) As Long + Declare Function ENgetthenaction Lib "epanet2.dll" (ByVal ruleIndex As Long, ByVal actionIndex As Long, linkIndex As Long, status As Long, setting As Single) As Long + Declare Function ENsetthenaction Lib "epanet2.dll" (ByVal ruleIndex As Long, ByVal actionIndex As Long, ByVal linkIndex As Long, ByVal status As Long, ByVal setting As Single) As Long + Declare Function ENgetelseaction Lib "epanet2.dll" (ByVal ruleIndex As Long, ByVal actionIndex As Long, linkIndex As Long, status As Long, setting As Single) As Long + Declare Function ENsetelseaction Lib "epanet2.dll" (ByVal ruleIndex As Long, ByVal actionIndex As Long, ByVal linkIndex As Long, ByVal status As Long, ByVal setting As Single) As Long diff --git a/include/epanet2.def b/include/epanet2.def new file mode 100644 index 0000000..9bf41b4 --- /dev/null +++ b/include/epanet2.def @@ -0,0 +1,131 @@ +LIBRARY EPANET2.DLL + +EXPORTS + ENaddcontrol = _ENaddcontrol@24 + ENaddcurve = _ENaddcurve@4 + ENaddlink = _ENaddlink@20 + ENaddnode = _ENaddnode@12 + ENadddemand = _ENadddemand@16 + ENaddpattern = _ENaddpattern@4 + ENaddrule = _ENaddrule@4 + ENclearreport = _ENclearreport@0 + ENclose = _ENclose@0 + ENcloseH = _ENcloseH@0 + ENcloseQ = _ENcloseQ@0 + ENcopyreport = _ENcopyreport@4 + ENdeletecontrol = _ENdeletecontrol@4 + ENdeletecurve = _ENdeletecurve@4 + ENdeletedemand = _ENdeletedemand@8 + ENdeletelink = _ENdeletelink@8 + ENdeletenode = _ENdeletenode@8 + ENdeletepattern = _ENdeletepattern@4 + ENdeleterule = _ENdeleterule@4 + ENepanet = _ENepanet@16 + ENgetaveragepatternvalue = _ENgetaveragepatternvalue@8 + ENgetbasedemand = _ENgetbasedemand@12 + ENgetcomment = _ENgetcomment@12 + ENgetcontrol = _ENgetcontrol@24 + ENgetcoord = _ENgetcoord@12 + ENgetcount = _ENgetcount@8 + ENgetcurve = _ENgetcurve@20 + ENgetcurveid = _ENgetcurveid@8 + ENgetcurveindex = _ENgetcurveindex@8 + ENgetcurvelen = _ENgetcurvelen@8 + ENgetcurvetype = _ENgetcurvetype@8 + ENgetcurvevalue = _ENgetcurvevalue@16 + ENgetdemandindex = _ENgetdemandindex@12 + ENgetdemandmodel = _ENgetdemandmodel@16 + ENgetdemandname = _ENgetdemandname@12 + ENgetdemandpattern = _ENgetdemandpattern@12 + ENgetelseaction = _ENgetelseaction@20 + ENgeterror = _ENgeterror@12 + ENgetflowunits = _ENgetflowunits@4 + ENgetheadcurveindex = _ENgetheadcurveindex@8 + ENgetlinkid = _ENgetlinkid@8 + ENgetlinkindex = _ENgetlinkindex@8 + ENgetlinknodes = _ENgetlinknodes@12 + ENsetlinknodes = _ENsetlinknodes@12 + ENgetlinktype = _ENgetlinktype@8 + ENgetlinkvalue = _ENgetlinkvalue@12 + ENgetnodeid = _ENgetnodeid@8 + ENgetnodeindex = _ENgetnodeindex@8 + ENgetnodetype = _ENgetnodetype@8 + ENgetnodevalue = _ENgetnodevalue@12 + ENgetnumdemands = _ENgetnumdemands@8 + ENgetoption = _ENgetoption@8 + ENgetpatternid = _ENgetpatternid@8 + ENgetpatternindex = _ENgetpatternindex@8 + ENgetpatternlen = _ENgetpatternlen@8 + ENgetpatternvalue = _ENgetpatternvalue@12 + ENgetpremise = _ENgetpremise@36 + ENgetpumptype = _ENgetpumptype@8 + ENgetqualinfo = _ENgetqualinfo@16 + ENgetqualtype = _ENgetqualtype@8 + ENgetresultindex = _ENgetresultindex@12 + ENgetrule = _ENgetrule@20 + ENgetruleID = _ENgetruleID@8 + ENgetstatistic = _ENgetstatistic@8 + ENgetthenaction = _ENgetthenaction@20 + ENgettimeparam = _ENgettimeparam@8 + ENgettitle = _ENgettitle@12 + ENgetversion = _ENgetversion@4 + ENgetvertex = _ENgetvertex@16 + ENgetvertexcount = _ENgetvertexcount@8 + ENinit = _ENinit@16 + ENinitH = _ENinitH@4 + ENinitQ = _ENinitQ@4 + ENnextH = _ENnextH@4 + ENnextQ = _ENnextQ@4 + ENopen = _ENopen@12 + ENopenH = _ENopenH@0 + ENopenQ = _ENopenQ@0 + ENreport = _ENreport@0 + ENresetreport = _ENresetreport@0 + ENrunH = _ENrunH@4 + ENrunQ = _ENrunQ@4 + ENsaveH = _ENsaveH@0 + ENsavehydfile = _ENsavehydfile@4 + ENsaveinpfile = _ENsaveinpfile@4 + ENsetbasedemand = _ENsetbasedemand@12 + ENsetcomment = _ENsetcomment@12 + ENsetcontrol = _ENsetcontrol@24 + ENsetcoord = _ENsetcoord@20 + ENsetcurve = _ENsetcurve@16 + ENsetcurveid = _ENsetcurveid@8 + ENsetcurvevalue = _ENsetcurvevalue@16 + ENsetdemandmodel = _ENsetdemandmodel@16 + ENsetdemandname = _ENsetdemandname@12 + ENsetdemandpattern = _ENsetdemandpattern@12 + ENsetelseaction = _ENsetelseaction@20 + ENsetflowunits = _ENsetflowunits@4 + ENsetheadcurveindex = _ENsetheadcurveindex@8 + ENsetjuncdata = _ENsetjuncdata@16 + ENsetlinkid = _ENsetlinkid@8 + ENsetlinknodes = _ENsetlinknodes@12 + ENsetlinktype = _ENsetlinktype@12 + ENsetlinkvalue = _ENsetlinkvalue@12 + ENsetnodeid = _ENsetnodeid@8 + ENsetnodevalue = _ENsetnodevalue@12 + ENsetoption = _ENsetoption@8 + ENsetpattern = _ENsetpattern@12 + ENsetpatternid = _ENsetpatternid@8 + ENsetpatternvalue = _ENsetpatternvalue@12 + ENsetpipedata = _ENsetpipedata@20 + ENsetpremise = _ENsetpremise@36 + ENsetpremiseindex = _ENsetpremiseindex@12 + ENsetpremisestatus = _ENsetpremisestatus@12 + ENsetpremisevalue = _ENsetpremisevalue@12 + ENsetqualtype = _ENsetqualtype@16 + ENsetreport = _ENsetreport@4 + ENsetrulepriority = _ENsetrulepriority@8 + ENsetstatusreport = _ENsetstatusreport@4 + ENsettankdata = _ENsettankdata@32 + ENsetthenaction = _ENsetthenaction@20 + ENsettimeparam = _ENsettimeparam@8 + ENsettitle = _ENsettitle@12 + ENsetvertices = _ENsetvertices@16 + ENsolveH = _ENsolveH@0 + ENsolveQ = _ENsolveQ@0 + ENstepQ = _ENstepQ@4 + ENusehydfile = _ENusehydfile@4 + ENwriteline = _ENwriteline@4 diff --git a/include/epanet2.h b/include/epanet2.h old mode 100755 new mode 100644 index 5b6f20a..19c9c67 --- a/include/epanet2.h +++ b/include/epanet2.h @@ -1,910 +1,431 @@ -/** @file epanet2.h - @see http://github.com/openwateranalytics/epanet - - */ - -/* - ******************************************************************* - - EPANET2.H - Prototypes for EPANET Functions Exported to DLL Toolkit - - VERSION: 2.00 - DATE: 5/8/00 - 10/25/00 - 3/1/01 - 8/15/07 (2.00.11) - 2/14/08 (2.00.12) - AUTHORS: L. Rossman - US EPA - NRMRL - OpenWaterAnalytics members: see git stats for contributors - - ******************************************************************* - */ - - -#ifndef EPANET2_H -#define EPANET2_H - -// the toolkit can be compiled with support for double-precision as well. -// just make sure that you use the correct #define in your client code. -#ifndef EN_API_FLOAT_TYPE - #define EN_API_FLOAT_TYPE float -#endif - -// --- define WINDOWS -#undef WINDOWS -#ifdef _WIN32 - #define WINDOWS -#endif -#ifdef __WIN32__ - #define WINDOWS -#endif - -// --- define DLLEXPORT -#ifndef DLLEXPORT - #ifdef WINDOWS - #ifdef __cplusplus - #define DLLEXPORT extern "C" __declspec(dllexport) - #else - #define DLLEXPORT __declspec(dllexport) __stdcall - #endif // __cplusplus - #elif defined(CYGWIN) - #define DLLEXPORT __stdcall - #elif defined(__APPLE__) - #ifdef __cplusplus - #define DLLEXPORT - #else - #define DLLEXPORT - #endif - #else - #define DLLEXPORT - #endif -#endif - - -// --- Define the EPANET toolkit constants - -/// Node property codes -typedef enum { - EN_ELEVATION = 0, /**< Node Elevation */ - EN_BASEDEMAND = 1, /**< Node Base Demand, from last demand category */ - EN_PATTERN = 2, /**< Node Demand Pattern */ - EN_EMITTER = 3, /**< Node Emitter Coefficient */ - EN_INITQUAL = 4, /**< Node initial quality */ - EN_SOURCEQUAL = 5, /**< Node source quality */ - EN_SOURCEPAT = 6, /**< Node source pattern index */ - EN_SOURCETYPE = 7, /**< Node source type */ - EN_TANKLEVEL = 8, /**< Tank Level */ - EN_DEMAND = 9, /**< Node current simulated demand */ - EN_HEAD = 10, /**< Node Head value */ - EN_PRESSURE = 11, /**< Node pressure value */ - EN_QUALITY = 12, /**< Node quality value */ - EN_SOURCEMASS = 13, /**< Node source mass value */ - EN_INITVOLUME = 14, /**< Tank or Reservoir initial volume */ - EN_MIXMODEL = 15, /**< Tank mixing model */ - EN_MIXZONEVOL = 16, /**< Tank mixing zone volume */ - EN_TANKDIAM = 17, /**< Tank diameter */ - EN_MINVOLUME = 18, /**< Tank minimum volume */ - EN_VOLCURVE = 19, /**< Tank volume curve index */ - EN_MINLEVEL = 20, /**< Tank minimum level */ - EN_MAXLEVEL = 21, /**< Tank maximum level */ - EN_MIXFRACTION = 22, /**< Tank mixing fraction */ - EN_TANK_KBULK = 23, /**< Tank bulk decay coefficient */ - EN_TANKVOLUME = 24, /**< Tank current volume */ - EN_MAXVOLUME = 25 /**< Tank maximum volume */ -} EN_NodeProperty; - -/// Link property codes -typedef enum { - EN_DIAMETER = 0, - EN_LENGTH = 1, - EN_ROUGHNESS = 2, - EN_MINORLOSS = 3, - EN_INITSTATUS = 4, - EN_INITSETTING = 5, - EN_KBULK = 6, - EN_KWALL = 7, - EN_FLOW = 8, - EN_VELOCITY = 9, - EN_HEADLOSS = 10, - EN_STATUS = 11, - EN_SETTING = 12, - EN_ENERGY = 13, - EN_LINKQUAL = 14, - EN_LINKPATTERN = 15 -} EN_LinkProperty; - -/// Time parameter codes -typedef enum { - EN_DURATION = 0, - EN_HYDSTEP = 1, - EN_QUALSTEP = 2, - EN_PATTERNSTEP = 3, - EN_PATTERNSTART = 4, - EN_REPORTSTEP = 5, - EN_REPORTSTART = 6, - EN_RULESTEP = 7, - EN_STATISTIC = 8, - EN_PERIODS = 9, - EN_STARTTIME = 10, - EN_HTIME = 11, - EN_QTIME = 12, - EN_HALTFLAG = 13, - EN_NEXTEVENT = 14 -} EN_TimeProperty; - - -typedef enum { - EN_ITERATIONS = 0, - EN_RELATIVEERROR = 1 -} EN_AnalysisStatistic; - -typedef enum { - EN_NODECOUNT = 0, /**< Number of Nodes (Juntions + Tanks + Reservoirs) */ - EN_TANKCOUNT = 1, /**< Number of Tanks */ - EN_LINKCOUNT = 2, /**< Number of Links (Pipes + Pumps + Valves) */ - EN_PATCOUNT = 3, /**< Number of Time Patterns */ - EN_CURVECOUNT = 4, /**< Number of Curves */ - EN_CONTROLCOUNT = 5 /**< Number of Control Statements */ -} EN_CountType; - -typedef enum { - EN_JUNCTION = 0, - EN_RESERVOIR = 1, - EN_TANK = 2 -} EN_NodeType; - - -typedef enum { - EN_CVPIPE = 0, /* Link types. */ - EN_PIPE = 1, /* See LinkType in TYPES.H */ - EN_PUMP = 2, - EN_PRV = 3, - EN_PSV = 4, - EN_PBV = 5, - EN_FCV = 6, - EN_TCV = 7, - EN_GPV = 8 -} EN_LinkType; - - -typedef enum { - EN_NONE = 0, /* Quality analysis types. */ - EN_CHEM = 1, /* See QualType in TYPES.H */ - EN_AGE = 2, - EN_TRACE = 3 -} EN_QualityType; - -typedef enum { - EN_CONCEN = 0, /* Source quality types. */ - EN_MASS = 1, /* See SourceType in TYPES.H. */ - EN_SETPOINT = 2, - EN_FLOWPACED = 3 -} EN_SourceType; - -typedef enum { - EN_CFS = 0, /* Flow units types. */ - EN_GPM = 1, /* See FlowUnitsType */ - EN_MGD = 2, /* in TYPES.H. */ - EN_IMGD = 3, - EN_AFD = 4, - EN_LPS = 5, - EN_LPM = 6, - EN_MLD = 7, - EN_CMH = 8, - EN_CMD = 9 -} EN_FlowUnits; - - -/// Simulation Option codes -typedef enum { - EN_TRIALS = 0, - EN_ACCURACY = 1, - EN_TOLERANCE = 2, - EN_EMITEXPON = 3, - EN_DEMANDMULT = 4 -} EN_Option; - -typedef enum { - EN_LOWLEVEL = 0, /* Control types. */ - EN_HILEVEL = 1, /* See ControlType */ - EN_TIMER = 2, /* in TYPES.H. */ - EN_TIMEOFDAY = 3 -} EN_ControlType; - - - -typedef enum { - EN_AVERAGE = 1, /* Time statistic types. */ - EN_MINIMUM = 2, /* See TstatType in TYPES.H */ - EN_MAXIMUM = 3, - EN_RANGE = 4 -} EN_StatisticType; - - - -typedef enum { - EN_MIX1 = 0, /* Tank mixing models */ - EN_MIX2 = 1, - EN_FIFO = 2, - EN_LIFO = 3 -} EN_MixingModel; - - - -typedef enum { - EN_NOSAVE = 0, - EN_SAVE = 1, - EN_INITFLOW = 10, - EN_SAVE_AND_INIT = 11 -} EN_SaveOption; - - - -typedef enum { - EN_CONST_HP = 0, /* constant horsepower */ - EN_POWER_FUNC = 1, /* power function */ - EN_CUSTOM = 2 /* user-defined custom curve */ -} EN_CurveType; - - - -// --- Declare the EPANET toolkit functions -#if defined(__cplusplus) -extern "C" { -#endif - /** - @brief runs a complete EPANET simulation - @param inpFile pointer to name of input file (must exist) - @param rptFile pointer to name of report file (to be created) - @param binOutFile pointer to name of binary output file (to be created) - @param callback a callback function that takes a character string (char *) as its only parameter. - @return error code - - The callback function should reside in and be used by the calling - code to display the progress messages that EPANET generates - as it carries out its computations. If this feature is not - needed then the argument should be NULL. - */ - int DLLEXPORT ENepanet(char *inpFile, char *rptFile, char *binOutFile, void (*callback) (char *)); - - /** - @brief Opens EPANET input file & reads in network data - @param inpFile pointer to name of input file (must exist) - @param rptFile pointer to name of report file (to be created) - @param binOutFile pointer to name of binary output file (to be created) - @return error code - */ - int DLLEXPORT ENopen(char *inpFile, char *rptFile, char *binOutFile); - - /** - @brief Saves current data to "INP" formatted text file. - @param filename The file path to create - @return Error code - */ - int DLLEXPORT ENsaveinpfile(char *filename); - - /** - @brief Frees all memory and files used by EPANET - @return Error code - */ - int DLLEXPORT ENclose(); - - /** - @brief Solves the network hydraulics for all time periods - @return Error code - */ - int DLLEXPORT ENsolveH(); - - /** - @brief Saves hydraulic results to binary file - @return Error code - - Must be called before ENreport() if no WQ simulation has been made. - Should not be called if ENsolveQ() will be used. - */ - int DLLEXPORT ENsaveH(); - - /** - @brief Sets up data structures for hydraulic analysis - @return Error code - */ - int DLLEXPORT ENopenH(); - - /** - @brief Initializes hydraulic analysis - @param initFlag 2-digit flag where 1st (left) digit indicates if link flows should be re-initialized (1) or not (0), and 2nd digit indicates if hydraulic results should be saved to file (1) or not (0). - @return Error code - */ - int DLLEXPORT ENinitH(int initFlag); - - /** - @brief Run a hydraulic solution period - @param[out] currentTime The current simulation time in seconds - @return Error or warning code - @see ENsolveH - - This function is used in a loop with ENnextH() to run - an extended period hydraulic simulation. - See ENsolveH() for an example. - */ - int DLLEXPORT ENrunH(long *currentTime); - - /** - @brief Determine time (in seconds) until next hydraulic event - @param[out] tStep Time (seconds) until next hydraulic event. 0 marks end of simulation period. - @return Error code - - This function is used in a loop with ENrunH() to run an extended period hydraulic simulation. - See ENsolveH() for an example. - */ - int DLLEXPORT ENnextH(long *tStep); - - - /** - @brief Frees data allocated by hydraulics solver - @return Error code - */ - int DLLEXPORT ENcloseH(); - - /** - @brief Copies binary hydraulics file to disk - @param filename Name of file to be created - @return Error code - */ - int DLLEXPORT ENsavehydfile(char *filename); - - /** - @brief Opens previously saved binary hydraulics file - @param filename Name of file to be used - @return Error code - */ - int DLLEXPORT ENusehydfile(char *filename); - - /** - @brief Solves for network water quality in all time periods - @return Error code - */ - int DLLEXPORT ENsolveQ(); - - /** - @brief Sets up data structures for WQ analysis - @return Error code - */ - int DLLEXPORT ENopenQ(); - - /** - @brief Initializes water quality analysis - @param saveFlag EN_SAVE (1) if results saved to file, EN_NOSAVE (0) if not - @return Error code - */ - int DLLEXPORT ENinitQ(int saveFlag); - - /** - @brief Retrieves hydraulic & WQ results at time t. - @param[out] currentTime Current simulation time, in seconds. - @return Error code - - This function is used in a loop with ENnextQ() to run - an extended period WQ simulation. See ENsolveQ() for - an example. - */ - int DLLEXPORT ENrunQ(long *currentTime); - - /** - @brief Advances WQ simulation to next hydraulic event. - @param[out] tStep Time in seconds until next hydraulic event. 0 marks end of simulation period. - @return Error code - - This function is used in a loop with ENrunQ() to run - an extended period WQ simulation. See ENsolveQ() for - an example. - */ - int DLLEXPORT ENnextQ(long *tStep); - - /** - @brief Advances WQ simulation by a single WQ time step - @param[out] timeLeft Time left in overall simulation (in seconds) - @return Error code - - This function is used in a loop with ENrunQ() to run - an extended period WQ simulation. - */ - int DLLEXPORT ENstepQ(long *timeLeft); - - /** - @brief Frees data allocated by water quality solver. - @return Error code. - */ - int DLLEXPORT ENcloseQ(); - - /** - @brief Writes line of text to the report file. - @param line Text string to write - @return Error code. - */ - int DLLEXPORT ENwriteline(char *line); - - /** - @brief Writes simulation report to the report file - @return Error code - */ - int DLLEXPORT ENreport(); - - /** - @brief Resets report options to default values - @return Error code - */ - int DLLEXPORT ENresetreport(); - - /** - @brief Processes a reporting format command - @return Error code - */ - int DLLEXPORT ENsetreport(char *reportFormat); - - /** - @brief Retrieves parameters that define a simple control - @param controlIndex Control index (position of control statement in the input file, starting from 1) - @param[out] controlType Control type code (see EPANET2.H) - @param[out] linkIndex Index of controlled link - @param[out] setting Control setting on link - @param[out] nodeIndex Index of controlling node (0 for TIMER or TIMEOFDAY control) - @param[out] level Control level (tank level, junction pressure, or time (seconds)) - @return Error code - */ - int DLLEXPORT ENgetcontrol(int controlIndex, int *controlType, int *linkIndex, EN_API_FLOAT_TYPE *setting, int *nodeIndex, EN_API_FLOAT_TYPE *level); - - /** - @brief Retrieves the number of components of a given type in the network. - @param code Component code (see EPANET2.H) - @param[out] count Number of components in network - @return Error code - */ - int DLLEXPORT ENgetcount(int code, int *count); - - /** - @brief Gets value for an analysis option - @param code Option code (see EPANET2.H) - @param[out] value Option value - @return Error code - */ - int DLLEXPORT ENgetoption(int code, EN_API_FLOAT_TYPE *value); - - /** - @brief Retrieves value of specific time parameter. - @param code Time parameter code - @param[out] value Value of time parameter. - @return Error code - */ - int DLLEXPORT ENgettimeparam(int code, long *value); - - /** - @brief Retrieves the flow units code - @param[out] code Code of flow units in use - @return Error code - */ - int DLLEXPORT ENgetflowunits(int *code); - - /** - @brief Retrieves the index of the time pattern with specified ID - @param id String ID of the time pattern - @param[out] index Index of the specified time pattern - @return Error code - @see ENgetpatternid - */ - int DLLEXPORT ENgetpatternindex(char *id, int *index); - - /** - @brief Retrieves ID of a time pattern with specific index. - @param index The index of a time pattern. - @param[out] id The string ID of the time pattern. - @return Error code - @see ENgetpatternindex - */ - int DLLEXPORT ENgetpatternid(int index, char *id); - - /** - @brief Retrieves the number of multipliers in a time pattern. - @param index The index of a time pattern. - @param[out] len The length of the time pattern. - @return Error code - */ - int DLLEXPORT ENgetpatternlen(int index, int *len); - - /** - @brief Retrive a multiplier from a pattern for a specific time period. - @param index The index of a time pattern - @param period The pattern time period. First time period is 1. - @param[out] value Pattern multiplier - @return Error code - */ - int DLLEXPORT ENgetpatternvalue(int index, int period, EN_API_FLOAT_TYPE *value); - - /** - @brief Retrieve the average multiplier value in a time pattern - @param index The index of a time pattern - @param[out] value The average of all of this time pattern's values - @return Error code - */ - int DLLEXPORT ENgetaveragepatternvalue(int index, EN_API_FLOAT_TYPE *value); - - /** - @brief Retrieve the type of quality analytis to be run. - @param[out] qualcode The quality analysis code number. - @param[out] tracenode The index of node being traced, if qualcode == trace - @return Error code - @see ENsetqualtype - */ - int DLLEXPORT ENgetqualtype(int *qualcode, int *tracenode); - - /** - @brief Get the text of an error code. - @param errcode The error code - @param[out] errmsg The error string represented by the code - @param maxLen The maximum number of characters to copy into the char pointer errmsg - @return Error code - */ - int DLLEXPORT ENgeterror(int errcode, char *errmsg, int maxLen); - - /** - @brief Get hydraulic simulation statistic - @param code The type of statistic to get - @param[out] value The value of the statistic - @return Error code - */ - int DLLEXPORT ENgetstatistic(int code, EN_API_FLOAT_TYPE* value); - - /** - @brief Get index of node with specified ID - @param id The string ID of the node - @param[out] index The node's index (first node is index 1) - @return Error code - @see ENgetnodeid - */ - int DLLEXPORT ENgetnodeindex(char *id, int *index); - - /** - @brief Get the string ID of the specified node. - @param index The index of the node (first node is index 1) - @param[out] id The string ID of the specified node. Up to MAXID characters will be copied, so id must be pre-allocated by the calling code to hold at least that many characters. - @return Error code - @see ENgetnodeindex - */ - int DLLEXPORT ENgetnodeid(int index, char *id); - - /** - @brief Get the type of node with specified index. - @param index The index of a node (first node is index 1) - @param[out] code The type code for the node. - @return Error code - */ - int DLLEXPORT ENgetnodetype(int index, int *code); - - /** - @brief Get a property value for specified node - @param index The index of a node (first node is index 1). - @param code The property type code - @param[out] value The value of the node's property. - @return Error code - @see EN_NodeProperty - */ - int DLLEXPORT ENgetnodevalue(int index, int code, EN_API_FLOAT_TYPE *value); - - /** - @brief Get coordinates (x,y) for a node. - @param index The index of a node (first node is index 1). - @param[out] x X-value of node's coordinate - @param[out] y Y-value of node's coordinate - @return Error code - @see ENsetcoord - */ - int DLLEXPORT ENgetcoord(int index, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y); - - /** - @brief Set coordinates (x,y) for a node. - @param index The index of a node (first node is index 1) - @param x X-value of node's coordinate - @param y Y-value of node's coordinate - @return Error code - @see ENgetcoord - */ - int DLLEXPORT ENsetcoord(int index, EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y); - - /** - @brief Get the number of demand categories for a node. - @param nodeIndex The index of a node (first node is index 1) - @param[out] numDemands The number of demand categories - @return Error code - */ - int DLLEXPORT ENgetnumdemands(int nodeIndex, int *numDemands); - - /** - @brief Get a node's base demand for a specified category. - @param nodeIndex The index of a node (first node is index 1) - @param demandIndex The index of the demand category (starting at 1) - @return Error code - */ - int DLLEXPORT ENgetbasedemand(int nodeIndex, int demandIndex, EN_API_FLOAT_TYPE *baseDemand); - - /** - @brief Get the index of the demand pattern assigned to a node for a category index. - @param nodeIndex The index of a node (first node is index 1). - @param demandIndex The index of a category (first category is index 1). - @param[out] pattIndex The index of the pattern for this node and category. - @return Error code - */ - int DLLEXPORT ENgetdemandpattern(int nodeIndex, int demandIndex, int *pattIndex); - - /** - @brief Get the index of a Link with specified ID. - @param id The string ID of a link. - @param[out] index The index of the named link (first link is index 1) - @return Error code - @see ENgetlinkid - */ - int DLLEXPORT ENgetlinkindex(char *id, int *index); - - /** - @brief Get the string ID of a link with specified index - @param index The index of a link (first link is index 1) - @param[out] id The ID of the link. Up to MAXID characters will be copied, so id must be pre-allocated by the calling code to hold at least that many characters. - @return Error code - @see ENgetlinkindex - */ - int DLLEXPORT ENgetlinkid(int index, char *id); - - /** - @brief Get the link type code for a specified link - @param index The index of a link (first link is index 1) - @param[out] code The type code of the link. - @return Error code - @see EN_LinkType - */ - int DLLEXPORT ENgetlinktype(int index, int *code); - - /** - @brief Get the indexes of a link's start- and end-nodes. - @param index The index of a link (first link is index 1) - @param[out] node1 The index of the link's start node (first node is index 1). - @param[out] node2 The index of the link's end node (first node is index 1). - @return Error code - @see ENgetnodeid, ENgetlinkid - */ - int DLLEXPORT ENgetlinknodes(int index, int *node1, int *node2); - - /** - @brief Get a property value for specified link. - @param index The index of a node (first node is index 1). - @param code The parameter desired. - @param[out] value The value of the link's specified property. - @return Error code - @see ENgetnodevalue, EN_LinkProperty - */ - int DLLEXPORT ENgetlinkvalue(int index, int code, EN_API_FLOAT_TYPE *value); - - /** - @brief Get a curve's properties. - @param curveIndex The index of a curve (first curve is index 1). - @param[out] id The curve's string ID. Client code must preallocate at least MAXID characters. - @param[out] nValues The number of values in the curve's (x,y) list. - @param[out] xValues The curve's x-values. Must be freed by client. - @param[out] yValues The curve's y-values. Must be freed by client. - @return Error code. - */ - int DLLEXPORT ENgetcurve(int curveIndex, char* id, int *nValues, EN_API_FLOAT_TYPE **xValues, EN_API_FLOAT_TYPE **yValues); - - /** - @brief Retrieves the curve index for a specified pump index. - @param pumpIndex The index of a pump - @param[out] curveIndex The index of the curve used by the pump. - @return Error code. - */ - int DLLEXPORT ENgetheadcurveindex(int pumpIndex, int *curveIndex); - - /** - @brief Get the type of pump - @param linkIndex The index of the pump element - @param[out] outType The integer-typed pump curve type signifier (output parameter) - @return Error code - @see EN_CurveType - */ - int DLLEXPORT ENgetpumptype(int linkIndex, int *outType); - - /** - @brief Get the version number. This number is to be interpreted with implied decimals, i.e., "20100" == "2(.)01(.)00" - @param[out] version The version of EPANET - @return Error code. - */ - int DLLEXPORT ENgetversion(int *version); - - /** - @brief Specify parameters to define a simple control - @param cindex The index of the control to edit. First control is index 1. - @param ctype The type code to set for this control. - @param lindex The index of a link to control. - @param setting The control setting applied to the link. - @param nindex The index of a node used to control the link, or 0 for TIMER / TIMEOFDAY control. - @param level control point (tank level, junction pressure, or time in seconds). - @return Error code. - */ - int DLLEXPORT ENsetcontrol(int cindex, int ctype, int lindex, EN_API_FLOAT_TYPE setting, int nindex, EN_API_FLOAT_TYPE level); - - /** - @brief Set a property value for a node. - @param index The index of a node. First node is index 1. - @param code The code for the proprty to set. - @param v The value to set for this node and property. - @return Error code. - @see EN_NodeProperty - */ - int DLLEXPORT ENsetnodevalue(int index, int code, EN_API_FLOAT_TYPE v); - - /** - @brief Set a proprty value for a link. - @param index The index of a link. First link is index 1. - @param code The code for the property to set. - @param v The value to set for this link and property. - @return Error code. - @see EN_LinkProperty - */ - int DLLEXPORT ENsetlinkvalue(int index, int code, EN_API_FLOAT_TYPE v); - - /** - @brief Add a new time pattern. - @param id The string ID of the pattern to add. - @return Error code. - @see ENgetpatternindex - */ - int DLLEXPORT ENaddpattern(char *id); - - /** - @brief Set multipliers for a specific pattern - @param index The index of a pattern. First pattern is index 1. - @param f An array of multipliers - @param len The length of array f. - @return Error code. - @see ENgetpatternindex - */ - int DLLEXPORT ENsetpattern(int index, EN_API_FLOAT_TYPE *f, int len); - - /** - @brief Set the multiplier for a specific pattern at a specific period. - @param index The index of a pattern. First pattern is index 1. - @param period The period of the pattern to set. - @param value The value of the multiplier to set. - @return Error code. - */ - int DLLEXPORT ENsetpatternvalue(int index, int period, EN_API_FLOAT_TYPE value); - - /** - @brief Set the value for a time parameter. - @param code The code for the parameter to set. - @param value The desired value of the parameter. - @return Error code. - @see EN_TimeProperty - */ - int DLLEXPORT ENsettimeparam(int code, long value); - - /** - @brief Set a value for an anlysis option. - @param code The code for the desired option. - @param v The desired value for the option specified. - @return Error code. - @see EN_Option - */ - int DLLEXPORT ENsetoption(int code, EN_API_FLOAT_TYPE v); - - /** - @brief Sets the level of hydraulic status reporting. - @param code Status reporting code. - @return Error code. - */ - int DLLEXPORT ENsetstatusreport(int code); - - /** - @brief Sets type of quality analysis called for - @param qualcode WQ parameter code, EN_QualityType - @param chemname Name of WQ constituent - @param chemunits Concentration units of WQ constituent - @param tracenode ID of node being traced (if applicable) - @return Error code. - @see EN_QualityType - - chemname and chemunits only apply when WQ analysis is for chemical. tracenode only applies when WQ analysis is source tracing. - */ - int DLLEXPORT ENsetqualtype(int qualcode, char *chemname, char *chemunits, char *tracenode); - - /** - @brief Get quality analysis information (type, chemical name, units, trace node ID) - @param[out] qualcode The EN_QualityType code being used. - @param[out] chemname The name of the WQ constituent. - @param[out] chemunits The cencentration units of the WQ constituent. - @param[out] tracenode The trace node ID. - @return Error code. - @see EN_QualityType - */ - int DLLEXPORT ENgetqualinfo(int *qualcode, char *chemname, char *chemunits, int *tracenode); - - /** - @brief Sets the node's base demand for a category. - @param nodeIndex The index of a node. - @param demandIdx The index of a demand category. - @param baseDemand The base demand multiplier for the selected category. - @return Error code. - @see ENgetbasedemand - */ - int DLLEXPORT ENsetbasedemand(int nodeIndex, int demandIdx, EN_API_FLOAT_TYPE baseDemand); - - /** - @brief Retrieves index of curve with specific ID. - @param id The ID of a curve. - @param[out] index The index of the named curve - @return Error code. - @see ENgetcurveid - */ - int DLLEXPORT ENgetcurveindex(char *id, int *index); - - /** - @brief Retrieves ID of a curve with specific index. - @param index The index of a curve. - @param[out] id The ID of the curve specified. - @return Error code. - @see ENsetcurveindex - - NOTE: 'id' must be able to hold MAXID characters - */ - int DLLEXPORT ENgetcurveid(int index, char *id); - - /** - @brief Retrieves number of points in a curve - @param index The index of a curve. - @param[out] len The length of the curve coordinate list - @return Error code. - @see ENgetcurvevalue - */ - int DLLEXPORT ENgetcurvelen(int index, int *len); - - /** - @brief retrieves x,y point for a specific point number and curve - @param curveIndex The index of a curve - @param pointIndex The index of a point in the curve - @param[out] x The x-value of the specified point. - @param[out] y The y-value of the specified point. - @return Error code. - @see ENgetcurvelen ENsetcurvevalue - */ - int DLLEXPORT ENgetcurvevalue(int curveIndex, int pointIndex, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y); - - /** - @brief Sets x,y point for a specific point and curve. - @param curveIndex The index of a curve. - @param pointIndex The index of a point in the curve. - @param x The x-value of the point. - @param y The y-value of the point. - @return Error code. - */ - int DLLEXPORT ENsetcurvevalue(int curveIndex, int pointIndex, EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y); - - /** - @brief Sets x,y values for a specified curve. - @param index The index of a curve. - @param x An array of x-values for the curve. - @param y An array of y-values for the curve. - @param len The length of the arrays x and y. - @return Error code. - */ - int DLLEXPORT ENsetcurve(int index, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y, int len); - - /** - @brief Adds a new curve appended to the end of the existing curves. - @param id The name of the curve to be added. - @return Error code. - @see ENgetcurveindex ENsetcurve - */ - int DLLEXPORT ENaddcurve(char *id); - -#if defined(__cplusplus) -} -#endif - -#endif //EPANET2_H +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: epanet2.h + Description: declarations of the legacy style EPANET 2 API functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 10/29/2019 + ****************************************************************************** + */ + +/* +This module contains declarations of the legacy style EPANET API functions, with +version 2.2 updates, that apply only to single threaded applications. A second +set of thread safe API functions that allows one to run concurrent analyses on +multiple EPANET projects can be found in the epanet2_2.h header file. The two +APIs share the same function names and arguments with the difference being that +the thread safe functions use the prefix "EN_" and include an extra argument that +represents the EPANET project being analyzed. To avoid unneccesary repetition, +only the thread safe API functions have been documented. To see a description of +a legacy style API function declared here please refer to its complementary named +function in epanet2_2.h. +*/ + +#ifndef EPANET2_H +#define EPANET2_H + +// The legacy style EPANET API can be compiled with support for either single +// precision or double precision floating point arguments, with the default +// being single precision. To compile for double precision one must #define +// EN_API_FLOAT_TYPE as double both here and in any client code that uses the +// API. +#ifndef EN_API_FLOAT_TYPE + #define EN_API_FLOAT_TYPE float +#endif + +#ifndef DLLEXPORT + #ifdef _WIN32 + #ifdef epanet2_EXPORTS + #define DLLEXPORT __declspec(dllexport) __stdcall + #else + #define DLLEXPORT __declspec(dllimport) __stdcall + #endif + #elif defined(__CYGWIN__) + #define DLLEXPORT __stdcall + #else + #define DLLEXPORT + #endif +#endif + +#include "epanet2_enums.h" + +// --- Declare the EPANET toolkit functions +#if defined(__cplusplus) +extern "C" { +#endif + + +/******************************************************************** + + Project Functions + +********************************************************************/ + + int DLLEXPORT ENepanet(const char *inpFile, const char *rptFile, + const char *outFile, void (*pviewprog) (char *)); + + int DLLEXPORT ENinit(const char *rptFile, const char *outFile, + int unitsType, int headlossType); + + int DLLEXPORT ENopen(const char *inpFile, const char *rptFile, + const char *outFile); + + int DLLEXPORT ENgettitle(char *line1, char *line2, char *line3); + + int DLLEXPORT ENsettitle(char *line1, char *line2, char *line3); + + int DLLEXPORT ENgetcomment(int object, int index, char *comment); + + int DLLEXPORT ENsetcomment(int object, int index, char *comment); + + int DLLEXPORT ENgetcount(int object, int *count); + + int DLLEXPORT ENsaveinpfile(const char *filename); + + int DLLEXPORT ENclose(); + +/******************************************************************** + + Hydraulic Analysis Functions + +********************************************************************/ + + int DLLEXPORT ENsolveH(); + + int DLLEXPORT ENsaveH(); + + int DLLEXPORT ENopenH(); + + int DLLEXPORT ENinitH(int initFlag); + + int DLLEXPORT ENrunH(long *currentTime); + + int DLLEXPORT ENnextH(long *tStep); + + int DLLEXPORT ENcloseH(); + + int DLLEXPORT ENsavehydfile(char *filename); + + int DLLEXPORT ENusehydfile(char *filename); + +/******************************************************************** + + Water Quality Analysis Functions + +********************************************************************/ + + int DLLEXPORT ENsolveQ(); + + int DLLEXPORT ENopenQ(); + + int DLLEXPORT ENinitQ(int saveFlag); + + int DLLEXPORT ENrunQ(long *currentTime); + + int DLLEXPORT ENnextQ(long *tStep); + + int DLLEXPORT ENstepQ(long *timeLeft); + + int DLLEXPORT ENcloseQ(); + +/******************************************************************** + + Reporting Functions + +********************************************************************/ + + int DLLEXPORT ENwriteline(char *line); + + int DLLEXPORT ENreport(); + + int DLLEXPORT ENcopyreport(char *filename); + + int DLLEXPORT ENclearreport(); + + int DLLEXPORT ENresetreport(); + + int DLLEXPORT ENsetreport(char *format); + + int DLLEXPORT ENsetstatusreport(int level); + + int DLLEXPORT ENgetversion(int *version); + + int DLLEXPORT ENgeterror(int errcode, char *errmsg, int maxLen); + + int DLLEXPORT ENgetstatistic(int type, EN_API_FLOAT_TYPE* value); + + int DLLEXPORT ENgetresultindex(int type, int index, int *value); + +/******************************************************************** + + Analysis Options Functions + +********************************************************************/ + + int DLLEXPORT ENgetoption(int option, EN_API_FLOAT_TYPE *value); + + int DLLEXPORT ENsetoption(int option, EN_API_FLOAT_TYPE value); + + int DLLEXPORT ENgetflowunits(int *units); + + int DLLEXPORT ENsetflowunits(int units); + + int DLLEXPORT ENgettimeparam(int param, long *value); + + int DLLEXPORT ENsettimeparam(int param, long value); + + int DLLEXPORT ENgetqualinfo(int *qualType, char *chemName, char *chemUnits, + int *traceNode); + + int DLLEXPORT ENgetqualtype(int *qualType, int *traceNode); + + int DLLEXPORT ENsetqualtype(int qualType, char *chemName, char *chemUnits, + char *traceNode); + +/******************************************************************** + + Node Functions + +********************************************************************/ + + int DLLEXPORT ENaddnode(char *id, int nodeType, int *index); + + int DLLEXPORT ENdeletenode(int index, int actionCode); + + int DLLEXPORT ENgetnodeindex(char *id, int *index); + + int DLLEXPORT ENgetnodeid(int index, char *id); + + int DLLEXPORT ENsetnodeid(int index, char *newid); + + int DLLEXPORT ENgetnodetype(int index, int *nodeType); + + int DLLEXPORT ENgetnodevalue(int index, int property, EN_API_FLOAT_TYPE *value); + + int DLLEXPORT ENsetnodevalue(int index, int property, EN_API_FLOAT_TYPE value); + + int DLLEXPORT ENsetjuncdata(int index, EN_API_FLOAT_TYPE elev, + EN_API_FLOAT_TYPE dmnd, char *dmndpat); + + int DLLEXPORT ENsettankdata(int index, EN_API_FLOAT_TYPE elev, + EN_API_FLOAT_TYPE initlvl, EN_API_FLOAT_TYPE minlvl, + EN_API_FLOAT_TYPE maxlvl, EN_API_FLOAT_TYPE diam, + EN_API_FLOAT_TYPE minvol, char *volcurve); + + int DLLEXPORT ENgetcoord(int index, double *x, double *y); + + int DLLEXPORT ENsetcoord(int index, double x, double y); + +/******************************************************************** + + Nodal Demand Functions + +********************************************************************/ + + int DLLEXPORT ENgetdemandmodel(int *model, EN_API_FLOAT_TYPE *pmin, + EN_API_FLOAT_TYPE *preq, EN_API_FLOAT_TYPE *pexp); + + int DLLEXPORT ENsetdemandmodel(int model, EN_API_FLOAT_TYPE pmin, + EN_API_FLOAT_TYPE preq, EN_API_FLOAT_TYPE pexp); + + int DLLEXPORT ENadddemand(int nodeIndex, EN_API_FLOAT_TYPE baseDemand, + char *demandPattern, char *demandName); + + int DLLEXPORT ENdeletedemand(int nodeIndex, int demandIndex); + + int DLLEXPORT ENgetnumdemands(int nodeIndex, int *numDemands); + + int DLLEXPORT ENgetdemandindex(int nodeIndex, char *demandName, int *demandIndex); + + int DLLEXPORT ENgetbasedemand(int nodeIndex, int demandIndex, + EN_API_FLOAT_TYPE *baseDemand); + + int DLLEXPORT ENsetbasedemand(int nodeIndex, int demandIndex, + EN_API_FLOAT_TYPE baseDemand); + + int DLLEXPORT ENgetdemandpattern(int nodeIndex, int demandIndex, int *patIndex); + + int DLLEXPORT ENsetdemandpattern(int nodeIndex, int demandIndex, int patIndex); + + int DLLEXPORT ENgetdemandname(int nodeIndex, int demandIndex, char *demandName); + + int DLLEXPORT ENsetdemandname(int nodeIndex, int demandIndex, char *demandName); + +/******************************************************************** + + Link Functions + +********************************************************************/ + + int DLLEXPORT ENaddlink(char *id, int linkType, char *fromNode, char *toNode, int *index); + + int DLLEXPORT ENdeletelink(int index, int actionCode); + + int DLLEXPORT ENgetlinkindex(char *id, int *index); + + int DLLEXPORT ENgetlinkid(int index, char *id); + + int DLLEXPORT ENsetlinkid(int index, char *newid); + + int DLLEXPORT ENgetlinktype(int index, int *linkType); + + int DLLEXPORT ENsetlinktype(int *index, int linkType, int actionCode); + + int DLLEXPORT ENgetlinknodes(int index, int *node1, int *node2); + + int DLLEXPORT ENsetlinknodes(int index, int node1, int node2); + + int DLLEXPORT ENgetlinkvalue(int index, int property, EN_API_FLOAT_TYPE *value); + + int DLLEXPORT ENsetlinkvalue(int index, int property, EN_API_FLOAT_TYPE value); + + int DLLEXPORT ENsetpipedata(int index, EN_API_FLOAT_TYPE length, + EN_API_FLOAT_TYPE diam, EN_API_FLOAT_TYPE rough, + EN_API_FLOAT_TYPE mloss); + + int DLLEXPORT ENgetvertexcount(int index, int *count); + + int DLLEXPORT ENgetvertex(int index, int vertex, double *x, double *y); + + int DLLEXPORT ENsetvertices(int index, double *x, double *y, int count); + +/******************************************************************** + + Pump Functions + +********************************************************************/ + + int DLLEXPORT ENgetpumptype(int linkIndex, int *pumpType); + + int DLLEXPORT ENgetheadcurveindex(int linkIndex, int *curveIndex); + + int DLLEXPORT ENsetheadcurveindex(int linkIndex, int curveIndex); + +/******************************************************************** + + Time Pattern Functions + +********************************************************************/ + + int DLLEXPORT ENaddpattern(char *id); + + int DLLEXPORT ENdeletepattern(int index); + + int DLLEXPORT ENgetpatternindex(char *id, int *index); + + int DLLEXPORT ENgetpatternid(int index, char *id); + + int DLLEXPORT ENsetpatternid(int index, char *id); + + int DLLEXPORT ENgetpatternlen(int index, int *len); + + int DLLEXPORT ENgetpatternvalue(int index, int period, EN_API_FLOAT_TYPE *value); + + int DLLEXPORT ENsetpatternvalue(int index, int period, EN_API_FLOAT_TYPE value); + + int DLLEXPORT ENgetaveragepatternvalue(int index, EN_API_FLOAT_TYPE *value); + + int DLLEXPORT ENsetpattern(int index, EN_API_FLOAT_TYPE *values, int len); + +/******************************************************************** + + Data Curve Functions + +********************************************************************/ + + int DLLEXPORT ENaddcurve(char *id); + + int DLLEXPORT ENdeletecurve(int index); + + int DLLEXPORT ENgetcurveindex(char *id, int *index); + + int DLLEXPORT ENgetcurveid(int index, char *id); + + int DLLEXPORT ENsetcurveid(int index, char *id); + + int DLLEXPORT ENgetcurvelen(int index, int *len); + + int DLLEXPORT ENgetcurvetype(int index, int *type); + + int DLLEXPORT ENgetcurvevalue(int curveIndex, int pointIndex, + EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y); + + int DLLEXPORT ENsetcurvevalue(int curveIndex, int pointIndex, + EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y); + + int DLLEXPORT ENgetcurve(int index, char* id, int *nPoints, + EN_API_FLOAT_TYPE *xValues, EN_API_FLOAT_TYPE *yValues); + + int DLLEXPORT ENsetcurve(int index, EN_API_FLOAT_TYPE *xValues, + EN_API_FLOAT_TYPE *yValues, int nPoints); + +/******************************************************************** + + Simple Controls Functions + +********************************************************************/ + + int DLLEXPORT ENaddcontrol(int type, int linkIndex, EN_API_FLOAT_TYPE setting, + int nodeIndex, EN_API_FLOAT_TYPE level, int *index); + + int DLLEXPORT ENdeletecontrol(int index); + + int DLLEXPORT ENgetcontrol(int index, int *type, int *linkIndex, + EN_API_FLOAT_TYPE *setting, int *nodeIndex, EN_API_FLOAT_TYPE *level); + + int DLLEXPORT ENsetcontrol(int index, int type, int linkIndex, + EN_API_FLOAT_TYPE setting, int nodeIndex, EN_API_FLOAT_TYPE level); + + +/******************************************************************** + + Rule-Based Controls Functions + +********************************************************************/ + + int DLLEXPORT ENaddrule(char *rule); + + int DLLEXPORT ENdeleterule(int index); + + int DLLEXPORT ENgetrule(int index, int *nPremises, int *nThenActions, + int *nElseActions, EN_API_FLOAT_TYPE *priority); + + int DLLEXPORT ENgetruleID(int index, char* id); + + int DLLEXPORT ENgetpremise(int ruleIndex, int premiseIndex, int *logop, + int *object, int *objIndex, int *variable, + int *relop, int *status, EN_API_FLOAT_TYPE *value); + + int DLLEXPORT ENsetpremise(int ruleIndex, int premiseIndex, int logop, + int object, int objIndex, int variable, int relop, + int status, EN_API_FLOAT_TYPE value); + + int DLLEXPORT ENsetpremiseindex(int ruleIndex, int premiseIndex, int objIndex); + + int DLLEXPORT ENsetpremisestatus(int ruleIndex, int premiseIndex, int status); + + int DLLEXPORT ENsetpremisevalue(int ruleIndex, int premiseIndex, + EN_API_FLOAT_TYPE value); + + int DLLEXPORT ENgetthenaction(int ruleIndex, int actionIndex, int *linkIndex, + int *status, EN_API_FLOAT_TYPE *setting); + + int DLLEXPORT ENsetthenaction(int ruleIndex, int actionIndex, int linkIndex, + int status, EN_API_FLOAT_TYPE setting); + + int DLLEXPORT ENgetelseaction(int ruleIndex, int actionIndex, int *linkIndex, + int *status, EN_API_FLOAT_TYPE *setting); + + int DLLEXPORT ENsetelseaction(int ruleIndex, int actionIndex, int linkIndex, + int status, EN_API_FLOAT_TYPE setting); + + int DLLEXPORT ENsetrulepriority(int index, EN_API_FLOAT_TYPE priority); + + #if defined(__cplusplus) + } + #endif + +#endif //EPANET2_H diff --git a/include/epanet2.pas b/include/epanet2.pas new file mode 100644 index 0000000..a532134 --- /dev/null +++ b/include/epanet2.pas @@ -0,0 +1,423 @@ +unit epanet2; + +{ Declarations of imported procedures from the EPANET PROGRAMMERs TOOLKIT } +{ (EPANET2.DLL) } + +{Last updated on 11/12/19} + +interface + +const + +{ These are codes used by the DLL functions } + EN_MAXID = 31; { Max. # characters in ID name } + EN_MAXMSG = 255; { Max. # characters in strings } + EN_MISSING = -1.E10; + + EN_ELEVATION = 0; { Node parameters } + EN_BASEDEMAND = 1; + EN_PATTERN = 2; + EN_EMITTER = 3; + EN_INITQUAL = 4; + EN_SOURCEQUAL = 5; + EN_SOURCEPAT = 6; + EN_SOURCETYPE = 7; + EN_TANKLEVEL = 8; + EN_DEMAND = 9; + EN_HEAD = 10; + EN_PRESSURE = 11; + EN_QUALITY = 12; + EN_SOURCEMASS = 13; + EN_INITVOLUME = 14; + EN_MIXMODEL = 15; + EN_MIXZONEVOL = 16; + + EN_TANKDIAM = 17; + EN_MINVOLUME = 18; + EN_VOLCURVE = 19; + EN_MINLEVEL = 20; + EN_MAXLEVEL = 21; + EN_MIXFRACTION = 22; + EN_TANK_KBULK = 23; + EN_TANKVOLUME = 24; + EN_MAXVOLUME = 25; + EN_CANOVERFLOW = 26; + EN_DEMANDDEFICIT = 27; + + EN_DIAMETER = 0; { Link parameters } + EN_LENGTH = 1; + EN_ROUGHNESS = 2; + EN_MINORLOSS = 3; + EN_INITSTATUS = 4; + EN_INITSETTING = 5; + EN_KBULK = 6; + EN_KWALL = 7; + EN_FLOW = 8; + EN_VELOCITY = 9; + EN_HEADLOSS = 10; + EN_STATUS = 11; + EN_SETTING = 12; + EN_ENERGY = 13; + EN_LINKQUAL = 14; + EN_LINKPATTERN = 15; + EN_PUMP_STATE = 16; + EN_PUMP_EFFIC = 17; + EN_PUMP_POWER = 18; + EN_PUMP_HCURVE = 19; + EN_PUMP_ECURVE = 20; + EN_PUMP_ECOST = 21; + EN_PUMP_EPAT = 22; + + EN_DURATION = 0; { Time parameters } + EN_HYDSTEP = 1; + EN_QUALSTEP = 2; + EN_PATTERNSTEP = 3; + EN_PATTERNSTART = 4; + EN_REPORTSTEP = 5; + EN_REPORTSTART = 6; + EN_RULESTEP = 7; + EN_STATISTIC = 8; + EN_PERIODS = 9; + EN_STARTTIME = 10; + EN_HTIME = 11; + EN_QTIME = 12; + EN_HALTFLAG = 13; + EN_NEXTEVENT = 14; + EN_NEXTEVENTTANK = 15; + + EN_ITERATIONS = 0; { Analysis statistics } + EN_RELATIVEERROR = 1; + EN_MAXHEADERROR = 2; + EN_MAXFLOWCHANGE = 3; + EN_MASSBALANCE = 4; + EN_DEFICIENTNODES = 5; + EN_DEMANDREDUCTION = 6; + + EN_NODE = 0; { Component Types } + EN_LINK = 1; + EN_TIMEPAT = 2; + EN_CURVE = 3; + EN_CONTROL = 4; + EN_RULE = 5; + + EN_NODECOUNT = 0; { Component counts } + EN_TANKCOUNT = 1; + EN_LINKCOUNT = 2; + EN_PATCOUNT = 3; + EN_CURVECOUNT = 4; + EN_CONTROLCOUNT = 5; + EN_RULECOUNT = 6; + + EN_JUNCTION = 0; { Node types } + EN_RESERVOIR = 1; + EN_TANK = 2; + + EN_CVPIPE = 0; { Link types } + EN_PIPE = 1; + EN_PUMP = 2; + EN_PRV = 3; + EN_PSV = 4; + EN_PBV = 5; + EN_FCV = 6; + EN_TCV = 7; + EN_GPV = 8; + + EN_CLOSED = 0; { Link status types } + EN_OPEN = 1; + + EN_PUMP_XHEAD = 0; { Pump state types } + EN_PUMP_CLOSED = 2; + EN_PUMP_OPEN = 3; + EN_PUMP_XFLOW = 5; + + EN_NONE = 0; { Quality analysis types } + EN_CHEM = 1; + EN_AGE = 2; + EN_TRACE = 3; + + EN_CONCEN = 0; { Source quality types } + EN_MASS = 1; + EN_SETPOINT = 2; + EN_FLOWPACED = 3; + + EN_HW = 0; { Head loss formulas } + EN_DW = 1; + EN_CM = 2; + + EN_CFS = 0; { Flow units types } + EN_GPM = 1; + EN_MGD = 2; + EN_IMGD = 3; + EN_AFD = 4; + EN_LPS = 5; + EN_LPM = 6; + EN_MLD = 7; + EN_CMH = 8; + EN_CMD = 9; + + EN_DDA = 0; { Demand model types } + EN_PDA = 1; + + EN_TRIALS = 0; { Option types } + EN_ACCURACY = 1; + EN_TOLERANCE = 2; + EN_EMITEXPON = 3; + EN_DEMANDMULT = 4; + EN_HEADERROR = 5; + EN_FLOWCHANGE = 6; + EN_HEADLOSSFORM = 7; + EN_GLOBALEFFIC = 8; + EN_GLOBALPRICE = 9; + EN_GLOBALPATTERN = 10; + EN_DEMANDCHARGE = 11; + EN_SP_GRAVITY = 12; + EN_SP_VISCOS = 13; + EN_EXTRA_ITER = 14; + EN_CHECKFREQ = 15; + EN_MAXCHECK = 16; + EN_DAMPLIMIT = 17; + EN_SP_DIFFUS = 18; + EN_BULKORDER = 19; + EN_WALLORDER = 20; + EN_TANKORDER = 21; + EN_CONCENLIMIT = 22; + + EN_LOWLEVEL = 0; { Control types } + EN_HILEVEL = 1; + EN_TIMER = 2; + EN_TIMEOFDAY = 3; + + EN_SERIES = 0; { Report statistic types } + EN_AVERAGE = 1; + EN_MINIMUM = 2; + EN_MAXIMUM = 3; + EN_RANGE = 4; + + EN_MIX1 = 0; { Tank mixing models } + EN_MIX2 = 1; + EN_FIFO = 2; + EN_LIFO = 3; + + EN_NOSAVE = 0; { Hydraulics flags } + EN_SAVE = 1; + EN_INITFLOW = 10; + EN_SAVE_AND_INIT = 11; + + EN_CONST_HP = 0; { Pump curve types } + EN_POWER_FUNC = 1; + EN_CUSTOM = 2; + EN_NOCURVE = 3; + + EN_VOLUME_CURVE = 0; { Curve types } + EN_PUMP_CURVE = 1; + EN_EFFIC_CURVE = 2; + EN_HLOSS_CURVE = 3; + EN_GENERIC_CURVE = 4; + + EN_UNCONDITIONAL = 0; { Deletion action codes } + EN_CONDITIONAL = 1; + + EN_NO_REPORT = 0; { Status reporting levels } + EN_NORMAL_REPORT = 1; + EN_FULL_REPORT = 2; + + EN_R_NODE = 6; { Rule-based control objects } + EN_R_LINK = 7; + EN_R_SYSTEM = 8; + + EN_R_DEMAND = 0; { Rule-based control variables } + EN_R_HEAD = 1; + EN_R_GRADE = 2; + EN_R_LEVEL = 3; + EN_R_PRESSURE = 4; + EN_R_FLOW = 5; + EN_R_STATUS = 6; + EN_R_SETTING = 7; + EN_R_POWER = 8; + EN_R_TIME = 9; + EN_R_CLOCKTIME = 10; + EN_R_FILLTIME = 11; + EN_R_DRAINTIME = 12; + + EN_R_EQ = 0; { Rule-based control operators } + EN_R_NE = 1; + EN_R_LE = 2; + EN_R_GE = 3; + EN_R_LT = 4; + EN_R_GT = 5; + EN_R_IS = 6; + EN_R_NOT = 7; + EN_R_BELOW = 8; + EN_R_ABOVE = 9; + + EN_R_IS_OPEN = 1; { Rule-based control link status } + EN_R_IS_CLOSED = 2; + EN_R_IS_ACTIVE = 3; + + EpanetLib = 'epanet2.dll'; + +{Project Functions} + function ENepanet(F1: PAnsiChar; F2: PAnsiChar; F3: PAnsiChar; F4: Pointer): Integer; stdcall; external EpanetLib; + function ENinit(F2: PAnsiChar; F3: PAnsiChar; UnitsType: Integer; HeadlossType: Integer): Integer; stdcall; external EpanetLib; + function ENopen(F1: PAnsiChar; F2: PAnsiChar; F3: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENgetcount(Code: Integer; var Count: Integer): Integer; stdcall; external EpanetLib; + function ENgettitle(Line1: PAnsiChar; Line2: PAnsiChar; Line3: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENsettitle(Line1: PAnsiChar; Line2: PAnsiChar; Line3: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENgetcomment(ObjType: Integer; Index: Integer; Comment: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENsetcomment(ObjType: Integer; Index: Integer; Comment: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENsaveinpfile(F: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENclose: Integer; stdcall; external EpanetLib; + +{Hydraulic Functions} + function ENsolveH: Integer; stdcall; external EpanetLib; + function ENsaveH: Integer; stdcall; external EpanetLib; + function ENopenH: Integer; stdcall; external EpanetLib; + function ENinitH(SaveFlag: Integer): Integer; stdcall; external EpanetLib; + function ENrunH(var T: LongInt): Integer; stdcall; external EpanetLib; + function ENnextH(var Tstep: LongInt): Integer; stdcall; external EpanetLib; + function ENcloseH: Integer; stdcall; external EpanetLib; + function ENsavehydfile(F: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENusehydfile(F: PAnsiChar): Integer; stdcall; external EpanetLib; + +{Quality Functions} + function ENsolveQ: Integer; stdcall; external EpanetLib; + function ENopenQ: Integer; stdcall; external EpanetLib; + function ENinitQ(SaveFlag: Integer): Integer; stdcall; external EpanetLib; + function ENrunQ(var T: LongInt): Integer; stdcall; external EpanetLib; + function ENnextQ(var Tstep: LongInt): Integer; stdcall; external EpanetLib; + function ENstepQ(var Tleft: LongInt): Integer; stdcall; external EpanetLib; + function ENcloseQ: Integer; stdcall; external EpanetLib; + +{Reporting Functions} + function ENwriteline(S: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENreport: Integer; stdcall; external EpanetLib; + function ENcopyreport(F: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENclearreport: Integer; stdcall; external EpanetLib; + function ENresetreport: Integer; stdcall; external EpanetLib; + function ENsetreport(S: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENsetstatusreport(Code: Integer): Integer; stdcall; external EpanetLib; + function ENgetversion(var Version: Integer): Integer; stdcall; external EpanetLib; + function ENgeterror(Errcode: Integer; Errmsg: PAnsiChar; MaxLen: Integer): Integer; stdcall; external EpanetLib; + function ENgetstatistic(StatType: Integer; var Value: Single): Integer; stdcall; external EpanetLib; + function ENgetresultindex(Code: Integer; Index: Integer; var Value: Integer): Integer; stdcall; external EpanetLib; + +{Analysis Options Functions} + function ENgetoption(Code: Integer; var Value: Single): Integer; stdcall; external EpanetLib; + function ENsetoption(Code: Integer; Value: Single): Integer; stdcall; external EpanetLib; + function ENgetflowunits(var Code: Integer): Integer; stdcall; external EpanetLib; + function ENsetflowunits(Code: Integer): Integer; stdcall; external EpanetLib; + function ENgettimeparam(Code: Integer; var Value: LongInt): Integer; stdcall; external EpanetLib; + function ENsettimeparam(Code: Integer; Value: LongInt): Integer; stdcall; external EpanetLib; + function ENgetqualinfo(var QualType: Integer; ChemName: PAnsiChar; ChemUnits: PAnsiChar; var TraceNode: Integer): Integer; stdcall; external EpanetLib; + function ENgetqualtype(var QualCode: Integer; var TraceNode: Integer): Integer; stdcall; external EpanetLib; + function ENsetqualtype(QualCode: Integer; ChemName: PAnsiChar; ChemUnits: PAnsiChar; TraceNodeID: PAnsiChar): Integer; stdcall; external EpanetLib; + +{Node Functions} + function ENaddnode(ID: PAnsiChar; NodeType: Integer; var Index: Integer): Integer; stdcall; external EpanetLib; + function ENdeletenode(Index: Integer; ActionCode: Integer): Integer; stdcall; external EpanetLib; + function ENgetnodeindex(ID: PAnsiChar; var Index: Integer): Integer; stdcall; external EpanetLib; + function ENgetnodeid(Index: Integer; ID: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENsetnodeid(Index: Integer; NewID: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENgetnodetype(Index: Integer; var Code: Integer): Integer; stdcall; external EpanetLib; + function ENgetnodevalue(Index: Integer; Code: Integer; var Value: Single): Integer; stdcall; external EpanetLib; + function ENsetnodevalue(Index: Integer; Code: Integer; Value: Single): Integer; stdcall; external EpanetLib; + function ENsetjuncdata(Index: Integer; Elev: Single; Dmnd: Single; DmndPat: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENsettankdata(Index: Integer; Elev, InitLvl, MinLvl, MaxLvl, Diam, MinVol: Single; VolCurve: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENgetcoord(Index: Integer; var X: Double; var Y: Double): Integer; stdcall; external EpanetLib; + function ENsetcoord(Index: Integer; X: Double; Y: Double): Integer; stdcall; external EpanetLib; + +{Demand Functions} + function ENgetdemandmodel(var Model: Integer; var Pmin: Single; var Preq: Single; var Pexp: Single): Integer; stdcall; external EpanetLib; + function ENsetdemandmodel(Model: Integer; Pmin: Single; Preq: Single; Pexp: Single): Integer; stdcall; external EpanetLib; + function ENgetnumdemands(NodeIndex: Integer; var NumDemands: Integer): Integer; stdcall; external EpanetLib; + function ENadddemand(NodeIndex: Integer; BaseDemand: Single; PatName: PAnsiChar; DemandName: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENdeletedemand(NodeIndex: Integer; DemandIndex: Integer): Integer; stdcall; external EpanetLib; + function ENgetdemandindex(NodeIndex: Integer; DemandName: PAnsiChar; var DemandIndex: Integer): Integer; stdcall; external EpanetLib; + function ENgetbasedemand(NodeIndex: Integer; DemandIndex: Integer; var BaseDemand: Single): Integer; stdcall; external EpanetLib; + function ENsetbasedemand(NodeIndex: Integer; DemandIndex: Integer; BaseDemand: Single): Integer; stdcall; external EpanetLib; + function ENgetdemandpattern(NodeIndex: Integer; DemandIndex: Integer; var PatIndex: Integer): Integer; stdcall; external EpanetLib; + function ENsetdemandpattern(NodeIndex: Integer; DemandIndex: Integer; PatIndex: Integer): Integer; stdcall; external EpanetLib; + function ENgetdemandname(NodeIndex: Integer; DemandIndex: Integer; DemandName: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENsetdemandname(NodeIndex: Integer; DemandIndex: Integer; DemandName: PAnsiChar): Integer; stdcall; external EpanetLib; + +{Link Functions} + function ENaddlink(ID: PAnsiChar; LinkType: Integer; FromNode: PAnsiChar; ToNode: PAnsiChar; var Index: Integer): Integer; stdcall; external EpanetLib; + function ENdeletelink(Index: Integer; ActionCode: Integer): Integer; stdcall; external EpanetLib; + function ENgetlinkindex(ID: PAnsiChar; var Index: Integer): Integer; stdcall; external EpanetLib; + function ENgetlinkid(Index: Integer; ID: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENsetlinkid(Index: Integer; ID: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENgetlinktype(Index: Integer; var Code: Integer): Integer; stdcall; external EpanetLib; + function ENsetlinktype(var Index: Integer; LinkType: Integer; ActionCode: Integer): Integer; stdcall; external EpanetLib; + function ENgetlinknodes(Index: Integer; var Node1: Integer; var Node2: Integer): Integer; stdcall; external EpanetLib; + function ENsetlinknodes(Index: Integer; Node1: Integer; Node2: Integer): Integer; stdcall; external EpanetLib; + function ENgetlinkvalue(Index: Integer; Code: Integer; var Value: Single): Integer; stdcall; external EpanetLib; + function ENsetlinkvalue(Index: Integer; Code: Integer; Value: Single): Integer; stdcall; external EpanetLib; + function ENsetpipedata(Index: Integer; Length: Single; Diam: Single; Rough: Single; Mloss:Single): Integer; stdcall; external EpanetLib; + + function ENgetvertexcount(Index: Integer; var Count: Integer): Integer; stdcall; external EpanetLib; + function ENgetvertex(Index: Integer; Vertex: Integer; var X: Double; var Y: Double): Integer; stdcall; external EpanetLib; + function ENsetvertices(Index: Integer; var X: Double; var Y: Double; Count: Integer): Integer; stdcall; external EpanetLib; + +{Pump Functions} + function ENgetpumptype(LinkIndex: Integer; var PumpType: Integer): Integer; stdcall; external EpanetLib; + function ENgetheadcurveindex(LinkIndex: Integer; var CurveIndex: Integer): Integer; stdcall; external EpanetLib; + function ENsetheadcurveindex(LinkIndex: Integer; CurveIndex: Integer): Integer; stdcall; external EpanetLib; + +{Pattern Functions} + function ENaddpattern(ID: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENdeletepattern(Index: Integer): Integer; stdcall; external EpanetLib; + function ENgetpatternindex(ID: PAnsiChar; var Index: Integer): Integer; stdcall; external EpanetLib; + function ENgetpatternid(Index: Integer; ID: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENsetpatternid(Index: Integer; ID: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENgetpatternlen(Index: Integer; var Len: Integer): Integer; stdcall; external EpanetLib; + function ENgetpatternvalue(Index: Integer; Period: Integer; var Value: Single): Integer; stdcall; external EpanetLib; + function ENsetpatternvalue(Index: Integer; Period: Integer; Value: Single): Integer; stdcall; external EpanetLib; + function ENgetaveragepatternvalue(Index: Integer; var Value: Single): Integer; stdcall; external EpanetLib; + function ENsetpattern(Index: Integer; var F: Single; N: Integer): Integer; stdcall; external EpanetLib; + +{Curve Functions} + function ENaddcurve(ID: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENdeletecurve(Index: Integer): Integer; stdcall; external EpanetLib; + function ENgetcurveindex(ID: PAnsiChar; var Index: Integer): Integer; stdcall; external EpanetLib; + function ENgetcurveid(Index: Integer; ID: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENsetcurveid(Index: Integer; ID: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENgetcurvelen(Index: Integer; var Len: Integer): Integer; stdcall; external EpanetLib; + function ENgetcurvetype(Index: Integer; var CurveType: Integer): Integer; stdcall; external EpanetLib; + function ENgetcurvevalue(CurveIndex: Integer; PointIndex: Integer; var X: Single; var Y: Single): Integer; stdcall; external EpanetLib; + function ENsetcurvevalue(CurveIndex: Integer; PointIndex: Integer; X: Single; Y: Single): Integer; stdcall; external EpanetLib; + function ENgetcurve(Index: Integer; ID: PAnsiChar; var N: Integer; var X: Single; var Y: Single): Integer; stdcall; external EpanetLib; + function ENsetcurve(Index: Integer; var X: Single; var Y: Single; N: Integer): Integer; stdcall; external EpanetLib; + +{Control Functions} + function ENaddcontrol(Ctype: Integer; Link: Integer; Setting: Single; Node: Integer; Level: Single; var Index: Integer): Integer; stdcall; external EpanetLib; + function ENdeletecontrol(Index: Integer): Integer; stdcall; external EpanetLib; + function ENgetcontrol(Index: Integer; var Ctype: Integer; var Link: Integer; var Setting: Single; var Node: Integer; var Level: Single): Integer; stdcall; external EpanetLib; + function ENsetcontrol(Index: Integer; Ctype: Integer; Link: Integer; Setting: Single; Node: Integer; Level: Single): Integer; stdcall; external EpanetLib; + + {Rule-Based Control Functions} + function ENaddrule(Rule: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENdeleterule(Index: Integer): Integer; stdcall; external EpanetLib; + function ENgetrule(Index: Integer; var Npremises: Integer; var NthenActions: Integer; + var NelseActions: Integer; var Priority: Single): Integer; stdcall; external EpanetLib; + function ENgetruleID(Index: Integer; ID: PAnsiChar): Integer; stdcall; external EpanetLib; + function ENsetrulepriority(Index: Integer; Priority: Single): Integer; stdcall; external EpanetLib; + function ENgetpremise(RuleIndex: Integer; PremiseIndex: Integer; var LogOp: Integer; + var ObjType: Integer; var ObjIndex: Integer; var Param: Integer; var RelOp: Integer; + var Status: Integer; var Value: Single): Integer; stdcall; external EpanetLib; + function ENsetpremise(RuleIndex: Integer; PremiseIndex: Integer; LogOp: Integer; ObjType: Integer; + ObjIndex: Integer; Param: Integer; RelOp: Integer; Status: Integer; Value: Single): Integer; stdcall; external EpanetLib; + function ENsetpremiseindex(RuleIndex: Integer; PremiseIndex: Integer; ObjIndex: Integer): Integer; stdcall; external EpanetLib; + function ENsetpremisestatus(RuleIndex: Integer; PremiseIndex: Integer; Status: Integer): Integer; stdcall; external EpanetLib; + function ENsetpremisevalue(RuleIndex: Integer; PremiseIndex: Integer; Value: Single): Integer; stdcall; external EpanetLib; + function ENgetthenaction(RuleIndex: Integer; ActionIndex: Integer; var LinkIndex: Integer; + var Status: Integer; var Setting: Single): Integer; stdcall; external EpanetLib; + function ENsetthenaction(RuleIndex: Integer; ActionIndex: Integer; LinkIndex: Integer; + Status: Integer; Setting: Single): Integer; stdcall; external EpanetLib; + function ENgetelseaction(RuleIndex: Integer; ActionIndex: Integer; var LinkIndex: Integer; + var Status: Integer; var Setting: Single): Integer; stdcall; external EpanetLib; + function ENsetelseaction(RuleIndex: Integer; ActionIndex: Integer; LinkIndex: Integer; + Status: Integer; Setting: Single): Integer; stdcall; external EpanetLib; + +implementation + +end. diff --git a/include/epanet2.vb b/include/epanet2.vb index 9cd3e2c..bfe65c2 100644 --- a/include/epanet2.vb +++ b/include/epanet2.vb @@ -4,7 +4,7 @@ 'Declarations of functions in the EPANET PROGRAMMERs TOOLKIT '(EPANET2.DLL) for use with VB.Net. -'Last updated on 7/19/15 - LR +'Last updated on 11/04/2019 Imports System.Runtime.InteropServices Imports System.Text @@ -38,7 +38,10 @@ Public Const EN_MAXLEVEL = 21 Public Const EN_MIXFRACTION = 22 Public Const EN_TANK_KBULK = 23 -Public Const EN_TANKVOLUME = 24 'ES +Public Const EN_TANKVOLUME = 24 +Public Const EN_MAXVOLUME = 25 +Public Const EN_CANOVERFLOW = 26 +Public Const EN_DEMANDDEFICIT = 27 Public Const EN_DIAMETER = 0 ' Link parameters Public Const EN_LENGTH = 1 @@ -54,9 +57,17 @@ Public Const EN_HEADLOSS = 10 Public Const EN_STATUS = 11 Public Const EN_SETTING = 12 Public Const EN_ENERGY = 13 -Public Const EN_LINKQUAL = 14 'ES +Public Const EN_LINKQUAL = 14 Public Const EN_LINKPATTERN = 15 +Public Const EN_PUMP_STATE = 16 +Public Const EN_PUMP_EFFIC = 17 +Public Const EN_PUMP_POWER = 18 +Public Const EN_PUMP_HCURVE = 19 +Public Const EN_PUMP_ECURVE = 20 +Public Const EN_PUMP_ECOST = 21 +Public Const EN_PUMP_EPAT = 22 + Public Const EN_DURATION = 0 ' Time parameters Public Const EN_HYDSTEP = 1 Public Const EN_QUALSTEP = 2 @@ -67,7 +78,26 @@ Public Const EN_REPORTSTART = 6 Public Const EN_RULESTEP = 7 Public Const EN_STATISTIC = 8 Public Const EN_PERIODS = 9 -Public Const EN_STARTTIME = 10 'ES +Public Const EN_STARTTIME = 10 +Public Const EN_HTIME = 11 +Public Const EN_QTIME = 12 +Public Const EN_HALTFLAG = 13 +Public Const EN_NEXTEVENT = 14 + +Public Const EN_ITERATIONS = 0 +Public Const EN_RELATIVEERROR = 1 +Public Const EN_MAXHEADERROR = 2 +Public Const EN_MAXFLOWCHANGE = 3 +Public Const EN_MASSBALANCE = 4 +Public Const EN_DEFICIENTNODES = 5 +Public Const EN_DEMANDREDUCTION = 6 + +Public Const EN_NODE = 0 ' Component types +Public Const EN_LINK = 1 +Public Const EN_TIMEPAT = 2 +Public Const EN_CURVE = 3 +Public Const EN_CONTROL = 4 +Public Const EN_RULE = 5 Public Const EN_NODECOUNT = 0 'Component counts Public Const EN_TANKCOUNT = 1 @@ -75,6 +105,7 @@ Public Const EN_LINKCOUNT = 2 Public Const EN_PATCOUNT = 3 Public Const EN_CURVECOUNT = 4 Public Const EN_CONTROLCOUNT = 5 +Public Const EN_RULECOUNT = 6 Public Const EN_JUNCTION = 0 ' Node types Public Const EN_RESERVOIR = 1 @@ -100,6 +131,10 @@ Public Const EN_MASS = 1 Public Const EN_SETPOINT = 2 Public Const EN_FLOWPACED = 3 +Public Const EN_HW = 0 ' Head loss formulas +Public Const EN_DW = 1 +Public Const EN_CM = 2 + Public Const EN_CFS = 0 ' Flow units types Public Const EN_GPM = 1 Public Const EN_MGD = 2 @@ -111,118 +146,257 @@ Public Const EN_MLD = 7 Public Const EN_CMH = 8 Public Const EN_CMD = 9 -Public Const EN_TRIALS = 0 ' Misc. options +Public Const EN_DDA = 0 ' Demand driven analysis +Public Const EN_PDA = 1 ' Pressure driven analysis + +Public Const EN_TRIALS = 0 ' Simulation options Public Const EN_ACCURACY = 1 Public Const EN_TOLERANCE = 2 Public Const EN_EMITEXPON = 3 Public Const EN_DEMANDMULT = 4 +Public Const EN_HEADERROR = 5 +Public Const EN_FLOWCHANGE = 6 +Public Const EN_HEADLOSSFORM = 7 +Public Const EN_GLOBALEFFIC = 8 +Public Const EN_GLOBALPRICE = 9 +Public Const EN_GLOBALPATTERN = 10 +Public Const EN_DEMANDCHARGE = 11 +Public Const EN_SP_GRAVITY = 12 +Public Const EN_SP_VISCOS = 13 +Public Const EN_UNBALANCED = 14 +Public Const EN_CHECKFREQ = 15 +Public Const EN_MAXCHECK = 16 +Public Const EN_DAMPLIMIT = 17 +Public Const EN_SP_DIFFUS = 18 +Public Const EN_BULKORDER = 19 +Public Const EN_WALLORDER = 20 +Public Const EN_TANKORDER = 21 +Public Const EN_CONCENLIMIT = 22 -Public Const EN_LOWLEVEL = 0 ' Control types +Public Const EN_LOWLEVEL = 0 ' Control types Public Const EN_HILEVEL = 1 Public Const EN_TIMER = 2 Public Const EN_TIMEOFDAY = 3 -Public Const EN_AVERAGE = 1 'Time statistic types +Public Const EN_AVERAGE = 1 ' Time statistic types Public Const EN_MINIMUM = 2 Public Const EN_MAXIMUM = 3 Public Const EN_RANGE = 4 -Public Const EN_MIX1 = 0 'Tank mixing models +Public Const EN_MIX1 = 0 ' Tank mixing models Public Const EN_MIX2 = 1 Public Const EN_FIFO = 2 Public Const EN_LIFO = 3 -Public Const EN_NOSAVE = 0 ' Save-results-to-file flag +Public Const EN_NOSAVE = 0 ' Save-results-to-file flag Public Const EN_SAVE = 1 -Public Const EN_INITFLOW = 10 ' Re-initialize flow flag +Public Const EN_INITFLOW = 10 ' Re-initialize flow flag +Public Const EN_SAVE_AND_INIT = 11 -Public Const EN_CONST_HP = 0 ' constant horsepower -Public Const EN_POWER_FUNC = 1 ' power function -Public Const EN_CUSTOM = 2 ' user-defined custom curve +Public Const EN_CONST_HP = 0 ' Constant horsepower pump curve +Public Const EN_POWER_FUNC = 1 ' Power function pump curve +Public Const EN_CUSTOM = 2 ' User-defined custom pump curve +Public Const EN_NOCURVE = 3 ' No pump curve + +Public Const EN_VOLUME_CURVE = 0 ' Volume curve +Public Const EN_PUMP_CURVE = 1 ' Pump curve +Public Const EN_EFFIC_CURVE = 2 ' Efficiency curve +Public Const EN_HLOSS_CURVE = 3 ' Head loss curve +Public Const EN_GENERIC_CURVE = 4 ' Generic curve + +Public Const EN_UNCONDITIONAL = 0 ' Unconditional object deletion +Public Const EN_CONDITIONAL = 1 ' Conditional object deletion + +Public Const EN_NO_REPORT = 0 ' No status report +Public Const EN_NORMAL_REPORT = 1 ' Normal status report +Public Const EN_FULL_REPORT = 2 ' Full status report + +Public Const EN_R_NODE = 6 ' Rule objects +Public Const EN_R_LINK = 7 +Public Const EN_R_SYSTEM = 8 + +Public Const EN_R_DEMAND = 0 ' Rule variables +Public Const EN_R_HEAD = 1 +Public Const EN_R_GRADE = 2 +Public Const EN_R_LEVEL = 3 +Public Const EN_R_PRESSURE = 4 +Public Const EN_R_FLOW = 5 +Public Const EN_R_STATUS = 6 +Public Const EN_R_SETTING = 7 +Public Const EN_R_POWER = 8 +Public Const EN_R_TIME = 9 +Public Const EN_R_CLOCKTIME = 10 +Public Const EN_R_FILLTIME = 11 +Public Const EN_R_DRAINTIME = 12 + +Public Const EN_R_EQ = 0 ' Rule operators +Public Const EN_R_NE = 1 +Public Const EN_R_LE = 2 +Public Const EN_R_GE = 3 +Public Const EN_R_LT = 4 +Public Const EN_R_GT = 5 +Public Const EN_R_IS = 6 +Public Const EN_R_NOT = 7 +Public Const EN_R_BELOW = 8 +Public Const EN_R_ABOVE = 9 + +Public Const EN_R_IS_OPEN = 1 ' Rule status types +Public Const EN_R_IS_CLOSED = 2 +Public Const EN_R_IS_ACTIVE = 3 + +Public Const EN_MISSING As Double = -1.0E10 'These are the external functions that comprise the DLL - Declare Function ENepanet Lib "epanet2.dll" (ByVal F1 As String, ByVal F2 As String, ByVal F3 As String, ByVal F4 As String) As Int32 - Declare Function ENopen Lib "epanet2.dll" (ByVal F1 As String, ByVal F2 As String, ByVal F3 As String) As Int32 - Declare Function ENsaveinpfile Lib "epanet2.dll" (ByVal F As String) As Int32 +'Project Functions + Declare Function ENgetversion Lib "epanet2.dll" (value As Int32) As Int32 + Declare Function ENepanet Lib "epanet2.dll" (ByVal inpFile As String, ByVal rptFile As String, ByVal outFile As String, ByVal pviewprog As Any) As Int32 + Declare Function ENinit Lib "epanet2.dll" (ByVal rptFile As String, ByVal outFile As String, ByVal unitsType As Int32, ByVal headlossType As Int32) As Int32 + Declare Function ENopen Lib "epanet2.dll" (ByVal inpFile As String, ByVal rptFile As String, ByVal outFile As String) As Int32 + Declare Function ENgettitle Lib "epanet2.dll" (ByVal titleline1 As String, ByVal titleline2 As String, ByVal titleline3 As String) As Int32 + Declare Function ENsettitle Lib "epanet2.dll" (ByVal titleline1 As String, ByVal titleline2 As String, ByVal titleline3 As String) As Int32 + Declare Function ENsaveinpfile Lib "epanet2.dll" (ByVal filename As String) As Int32 Declare Function ENclose Lib "epanet2.dll" () As Int32 +'Hydraulic Analysis Functions Declare Function ENsolveH Lib "epanet2.dll" () As Int32 Declare Function ENsaveH Lib "epanet2.dll" () As Int32 Declare Function ENopenH Lib "epanet2.dll" () As Int32 - Declare Function ENinitH Lib "epanet2.dll" (ByVal SaveFlag As Int32) As Int32 - Declare Function ENrunH Lib "epanet2.dll" (ByRef T As Int32) As Int32 - Declare Function ENnextH Lib "epanet2.dll" (ByRef Tstep As Int32) As Int32 + Declare Function ENinitH Lib "epanet2.dll" (ByVal initFlag As Int32) As Int32 + Declare Function ENrunH Lib "epanet2.dll" (currentTime As Int32) As Int32 + Declare Function ENnextH Lib "epanet2.dll" (tStep As Int32) As Int32 Declare Function ENcloseH Lib "epanet2.dll" () As Int32 - Declare Function ENsavehydfile Lib "epanet2.dll" (ByVal F As String) As Int32 - Declare Function ENusehydfile Lib "epanet2.dll" (ByVal F As String) As Int32 + Declare Function ENsavehydfile Lib "epanet2.dll" (ByVal filename As String) As Int32 + Declare Function ENusehydfile Lib "epanet2.dll" (ByVal filename As String) As Int32 +'Water Quality Analysis Functions Declare Function ENsolveQ Lib "epanet2.dll" () As Int32 Declare Function ENopenQ Lib "epanet2.dll" () As Int32 - Declare Function ENinitQ Lib "epanet2.dll" (ByVal SaveFlag As Int32) As Int32 - Declare Function ENrunQ Lib "epanet2.dll" (ByRef T As Int32) As Int32 - Declare Function ENnextQ Lib "epanet2.dll" (ByRef Tstep As Int32) As Int32 - Declare Function ENstepQ Lib "epanet2.dll" (ByRef Tleft As Int32) As Int32 + Declare Function ENinitQ Lib "epanet2.dll" (ByVal saveFlag As Int32) As Int32 + Declare Function ENrunQ Lib "epanet2.dll" (currentTime As Int32) As Int32 + Declare Function ENnextQ Lib "epanet2.dll" (tStep As Int32) As Int32 + Declare Function ENstepQ Lib "epanet2.dll" (timeLeft As Int32) As Int32 Declare Function ENcloseQ Lib "epanet2.dll" () As Int32 - Declare Function ENwriteline Lib "epanet2.dll" (ByVal S As String) As Int32 +'Reporting Functions + Declare Function ENwriteline Lib "epanet2.dll" (ByVal line As String) As Int32 Declare Function ENreport Lib "epanet2.dll" () As Int32 + Declare Function ENcopyreport Lib "epanet2.dll" (ByVal filename As String) As Int32 + Declare Function ENclearreport Lib "epanet2.dll" () As Int32 Declare Function ENresetreport Lib "epanet2.dll" () As Int32 - Declare Function ENsetreport Lib "epanet2.dll" (ByVal S As String) As Int32 + Declare Function ENsetreport Lib "epanet2.dll" (ByVal format As String) As Int32 + Declare Function ENsetstatusreport Lib "epanet2.dll" (ByVal level As Int32) As Int32 + Declare Function ENgetcount Lib "epanet2.dll" (ByVal object As Int32, count As Int32) As Int32 + Declare Function ENgeterror Lib "epanet2.dll" (ByVal errcode As Int32, ByVal errmsg As String, ByVal maxLen As Int32) As Int32 + Declare Function ENgetstatistic Lib "epanet2.dll" (ByVal type_ As Int32, ByRef value As Single) As Int32 + Declare Function ENgetresultindex Lib "epanet2.dll" (ByVal type_ As Int32, ByVal index As Int32, ByRef value As Int32) As Int32 + +'Analysis Options Functions + Declare Function ENgetoption Lib "epanet2.dll" (ByVal option As Int32, value As Single) As Int32 + Declare Function ENsetoption Lib "epanet2.dll" (ByVal option As Int32, ByVal value As Single) As Int32 + Declare Function ENgetflowunits Lib "epanet2.dll" (units As Int32) As Int32 + Declare Function ENsetflowunits Lib "epanet2.dll" (ByVal units As Int32) As Int32 + Declare Function ENgettimeparam Lib "epanet2.dll" (ByVal param As Int32, value As Int32) As Int32 + Declare Function ENsettimeparam Lib "epanet2.dll" (ByVal param As Int32, ByVal value As Int32) As Int32 + Declare Function ENgetqualinfo Lib "epanet2.dll" (qualType As Int32, ByVal chemName As String, ByVal chemUnits As String, traceNode As Int32) As Int32 + Declare Function ENgetqualtype Lib "epanet2.dll" (qualType As Int32, traceNode As Int32) As Int32 + Declare Function ENsetqualtype Lib "epanet2.dll" (ByVal qualType As Int32, ByVal chemName As String, ByVal chemUnits As String, ByVal traceNode As String) As Int32 + +'Node Functions + Declare Function ENaddnode Lib "epanet2.dll" (ByVal id As String, ByVal nodeType As Int32, Index As Int32) As Int32 + Declare Function ENdeletenode Lib "epanet2.dll" (ByVal index As Int32, ByVal actionCode As Int32) As Int32 + Declare Function ENgetnodeindex Lib "epanet2.dll" (ByVal id As String, index As Int32) As Int32 + Declare Function ENgetnodeid Lib "epanet2.dll" (ByVal index As Int32, ByVal id As String) As Int32 + Declare Function ENsetnodeid Lib "epanet2.dll" (ByVal index As Int32, ByVal newid As String) As Int32 + Declare Function ENgetnodetype Lib "epanet2.dll" (ByVal index As Int32, nodeType As Int32) As Int32 + Declare Function ENgetnodevalue Lib "epanet2.dll" (ByVal index As Int32, ByVal property As Int32, value As Single) As Int32 + Declare Function ENsetnodevalue Lib "epanet2.dll" (ByVal index As Int32, ByVal property As Int32, ByVal value As Single) As Int32 + Declare Function ENsetjuncdata Lib "epanet2.dll" (ByVal index As Int32, ByVal elev As Single, ByVal dmnd As Single, ByVal dmndpat As String) As Int32 + Declare Function ENsettankdata Lib "epanet2.dll" (ByVal index As Int32, ByVal elev As Single, ByVal initlvl As Single, ByVal minlvl As Single, ByVal maxlvl As Single, ByVal diam As Single, ByVal minvol As Single, ByVal volcurve As String) As Int32 + Declare Function ENgetcoord Lib "epanet2.dll" (ByVal index As Int32, x As Double, y As Double) As Int32 + Declare Function ENsetcoord Lib "epanet2.dll" (ByVal index As Int32, ByVal x As Double, ByVal y As Double) As Int32 - Declare Function ENgetcontrol Lib "epanet2.dll" (ByVal Cindex As Int32, ByRef CtlType As Int32, ByRef Lindex As Int32, ByRef Setting As Single, ByRef Nindex As Int32, ByRef Level As Single) As Int32 - Declare Function ENgetcount Lib "epanet2.dll" (ByVal Code As Int32, ByRef Value As Int32) As Int32 - Declare Function ENgetoption Lib "epanet2.dll" (ByVal Code As Int32, ByRef Value As Single) As Int32 - Declare Function ENgettimeparam Lib "epanet2.dll" (ByVal Code As Int32, ByRef Value As Int32) As Int32 - Declare Function ENgetflowunits Lib "epanet2.dll" (ByRef Code As Int32) As Int32 - Declare Function ENgetpatternindex Lib "epanet2.dll" (ByVal ID As String, ByRef Index As Int32) As Int32 - Declare Function ENgetpatternid Lib "epanet2.dll" (ByVal Index As Int32, ByVal ID As StringBuilder) As Int32 - Declare Function ENgetpatternlen Lib "epanet2.dll" (ByVal Index As Int32, ByRef L As Int32) As Int32 - Declare Function ENgetpatternvalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Period As Int32, ByRef Value As Single) As Int32 - Declare Function ENgetqualtype Lib "epanet2.dll" (ByRef QualCode As Int32, ByRef TraceNode As Int32) As Int32 - Declare Function ENgeterror Lib "epanet2.dll" (ByVal ErrCode As Int32, ByVal ErrMsg As StringBuilder, ByVal N As Int32) +'Nodal Demand Functions + Declare Function ENgetdemandmodel Lib "epanet2.dll" (type_ As Int32, pmin As Single, preq As Single, pexp As Single) As Int32 + Declare Function ENsetdemandmodel Lib "epanet2.dll" (ByVal type_ As Int32, ByVal pmin As Single, ByVal preq As Single, ByVal pexp As Single) As Int32 + Declare Function ENadddemand Lib "epanet2.dll" (ByVal nodeIndex As Int32, ByVal baseDemand As Single, ByVal patternName As String, ByVal demandName As String) As Int32 + Declare Function ENdeletedemand Lib "epanet2.dll" (ByVal nodeIndex As Int32, ByVal demandIndex As Int32) As Int32 + Declare Function ENgetdemandindex Lib "epanet2.dll" (ByVal nodeIndex As Int32, ByVal demandName As String, demandIndex As Int32) As Int32 + Declare Function ENgetnumdemands Lib "epanet2.dll" (ByVal nodeIndex As Int32, numDemands As Int32) As Int32 + Declare Function ENgetbasedemand Lib "epanet2.dll" (ByVal nodeIndex As Int32, ByVal demandIndex As Int32, value As Single) As Int32 + Declare Function ENsetbasedemand Lib "epanet2.dll" (ByVal nodeIndex As Int32, ByVal demandIndex As Int32, ByVal BaseDemand As Single) As Int32 + Declare Function ENgetdemandpattern Lib "epanet2.dll" (ByVal nodeIndex As Int32, ByVal demandIndex As Int32, patIndex As Int32) As Int32 + Declare Function ENsetdemandpattern Lib "epanet2.dll" (ByVal nodeIndex As Int32, ByVal demandIndex As Int32, ByVal patIndex As Int32) As Int32 + Declare Function ENgetdemandname Lib "epanet2.dll" (ByVal nodeIndex As Int32, ByVal demandIndex As Int32, ByVal demandName As String) As Int32 + Declare Function ENsetdemandname Lib "epanet2.dll" (ByVal nodeIndex As Int32, ByVal demandIndex As Int32, ByVal demandName As String) As Int32 - Declare Function ENgetnodeindex Lib "epanet2.dll" (ByVal ID As String, ByRef Index As Int32) As Int32 - Declare Function ENgetnodeid Lib "epanet2.dll" (ByVal Index As Int32, ByVal ID As StringBuilder) As Int32 - Declare Function ENgetnodetype Lib "epanet2.dll" (ByVal Index As Int32, ByRef Code As Int32) As Int32 - Declare Function ENgetnodevalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Code As Int32, ByRef Value As Single) As Int32 - Declare Function ENgetcoord Lib "epanet2.dll" (ByVal Index As Int32, ByRef X As Single, ByRef Y As Single) As Int32 - Declare Function ENsetcoord Lib "epanet2.dll" (ByVal Index As Int32, ByVal X As Single, ByVal Y As Single) As Int32 +'Link Functions + Declare Function ENaddlink Lib "epanet2.dll" (ByVal id As String, ByVal linkType As Int32, ByVal fromNode As String, ByVal toNode As String, Index As Int32) As Int32 + Declare Function ENdeletelink Lib "epanet2.dll" (ByVal index As Int32, ByVal actionCode As Int32) As Int32 + Declare Function ENgetlinkindex Lib "epanet2.dll" (ByVal id As String, index As Int32) As Int32 + Declare Function ENgetlinkid Lib "epanet2.dll" (ByVal index As Int32, ByVal id As String) As Int32 + Declare Function ENsetlinkid Lib "epanet2.dll" (ByVal index As Int32, ByVal newid As String) As Int32 + Declare Function ENgetlinktype Lib "epanet2.dll" (ByVal index As Int32, linkType As Int32) As Int32 + Declare Function ENsetlinktype Lib "epanet2.dll" (index As Int32, ByVal linkType As Int32, ByVal actionCode As Int32) As Int32 + Declare Function ENgetlinknodes Lib "epanet2.dll" (ByVal index As Int32, node1 As Int32, node2 As Int32) As Int32 + Declare Function ENsetlinknodes Lib "epanet2.dll" (ByVal index As Int32, ByVal node1 As Int32, ByVal node2 As Int32) As Int32 + Declare Function ENgetlinkvalue Lib "epanet2.dll" (ByVal index As Int32, ByVal property As Int32, value As Single) As Int32 + Declare Function ENsetlinkvalue Lib "epanet2.dll" (ByVal index As Int32, ByVal property As Int32, ByVal value As Single) As Int32 + Declare Function ENsetpipedata Lib "epanet2.dll" (ByVal index As Int32, ByVal length As Single, ByVal diam As Single, ByVal rough As Single, ByVal mloss As Single) As Int32 + Declare Function ENgetvertexcount Lib "epanet2.dll" (ByVal index As Int32, count As Int32) As Int32 + Declare Function ENgetvertex Lib "epanet2.dll" (ByVal index As Int32, ByVal vertex As Int32, x As Double, y As Double) As Int32 + Declare Function ENsetvertices Lib "epanet2.dll" (ByVal index As Int32, xCoords As Any, yCoords As Any, ByVal count As Int32) As Int32 - Declare Function ENgetnumdemands Lib "epanet2.dll" (ByVal Index As Int32, ByRef numDemands As Int32) As Int32 'ES - Declare Function ENgetbasedemand Lib "epanet2.dll" (ByVal Index As Int32, ByVal DemandIndex As Int32, ByRef Value As Single) As Int32 'ES - Declare Function ENgetdemandpattern Lib "epanet2.dll" (ByVal Index As Int32, ByVal DemandIndex As Int32, ByRef PatIndex As Int32) As Int32 'ES +'Pump Functions + Declare Function ENgetheadcurveindex Lib "epanet2.dll" (ByVal linkIndex As Int32, curveIndex As Int32) As Int32 + Declare Function ENsetheadcurveindex Lib "epanet2.dll" (ByVal linkIndex As Int32, ByVal curveIndex As Int32) As Int32 + Declare Function ENgetpumptype Lib "epanet2.dll" (ByVal linkIndex As Int32, pumpType As Int32) As Int32 - Declare Function ENgetlinkindex Lib "epanet2.dll" (ByVal ID As String, ByRef Index As Int32) As Int32 - Declare Function ENgetlinkid Lib "epanet2.dll" (ByVal Index As Int32, ByVal ID As StringBuilder) As Int32 - Declare Function ENgetlinktype Lib "epanet2.dll" (ByVal Index As Int32, ByRef Code As Int32) As Int32 - Declare Function ENgetlinknodes Lib "epanet2.dll" (ByVal Index As Int32, ByRef Node1 As Int32, ByRef Node2 As Int32) As Int32 - Declare Function ENgetlinkvalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Code As Int32, ByRef Value As Single) As Int32 +'Time Pattern Functions + Declare Function ENaddpattern Lib "epanet2.dll" (ByVal id As String) As Int32 + Declare Function ENdeletepattern Lib "epanet2.dll" (ByVal index As Int32) As Int32 + Declare Function ENgetpatternindex Lib "epanet2.dll" (ByVal id As String, index As Int32) As Int32 + Declare Function ENgetpatternid Lib "epanet2.dll" (ByVal index As Int32, ByVal id As String) As Int32 + Declare Function ENsetpatternid Lib "epanet2.dll" (ByVal index As Int32, ByVal newid As String) As Int32 + Declare Function ENgetpatternlen Lib "epanet2.dll" (ByVal index As Int32, len_ As Int32) As Int32 + Declare Function ENgetpatternvalue Lib "epanet2.dll" (ByVal index As Int32, ByVal period As Int32, value As Single) As Int32 + Declare Function ENsetpatternvalue Lib "epanet2.dll" (ByVal index As Int32, ByVal period As Int32, ByVal value As Single) As Int32 + Declare Function ENgetaveragepatternvalue Lib "epanet2.dll" (ByVal index As Int32, value As Single) As Int32 + Declare Function ENsetpattern Lib "epanet2.dll" (ByVal index As Int32, values As Any, ByVal len_ As Int32) As Int32 - Declare Function ENgetcurve Lib "epanet2.dll" (ByVal CurveIndex As Int32, ByRef nValues As Int32, ByRef xValues As Single, ByRef yValues As Single) As Int32 'ES - Declare Function ENgetheadcurveindex Lib "epanet2.dll" (ByVal Index As Int32, ByVal CurveIndex As int32) As Int32 'ES - Declare Function ENgetpumptype Lib "epanet2.dll" (ByVal Index As Int32, ByRef PumpType As Int32) As Int32 'ES +'Data Curve Functions + Declare Function ENaddcurve Lib "epanet2.dll" (ByVal id As String) As Int32 + Declare Function ENdeletecurve Lib "epanet2.dll" (ByVal index As Int32) As Int32 + Declare Function ENgetcurveindex Lib "epanet2.dll" (ByVal id As String, index As Int32) As Int32 + Declare Function ENgetcurveid Lib "epanet2.dll" (ByVal index As Int32, ByVal id As String) As Int32 + Declare Function ENsetcurveid Lib "epanet2.dll" (ByVal index As Int32, ByVal newid As String) As Int32 + Declare Function ENgetcurvelen Lib "epanet2.dll" (ByVal index As Int32, len_ As Int32) As Int32 + Declare Function ENgetcurvetype Lib "epanet2.dll" (ByVal index As Int32, type_ As Int32) As Int32 + Declare Function ENgetcurvevalue Lib "epanet2.dll" (ByVal curveIndex As Int32, ByVal pointIndex As Int32, x As Single, y As Single) As Int32 + Declare Function ENsetcurvevalue Lib "epanet2.dll" (ByVal curveIndex As Int32, ByVal pointIndex As Int32, ByVal x As Single, ByVal y As Single) As Int32 + Declare Function ENgetcurve Lib "epanet2.dll" (ByVal index As Int32, ByVal id As String, nPoints As Int32, xValues As Any, yValues As Any) As Int32 + Declare Function ENsetcurve Lib "epanet2.dll" (ByVal index As Int32, xValues As Any, yValues As Any, ByVal nPoints As Int32) As Int32 - Declare Function ENgetversion Lib "epanet2.dll" (ByRef Value As Int32) As Int32 +'Simple Control Functions + Declare Function ENaddcontrol Lib "epanet2.dll" (ByVal type_ As Int32, ByVal linkIndex As Int32, ByVal setting As Single, ByVal nodeIndex As Int32, ByVal level As Single, index As Int32) As Int32 + Declare Function ENdeletecontrol Lib "epanet2.dll" (ByVal index As Int32) As Int32 + Declare Function ENgetcontrol Lib "epanet2.dll" (ByVal index As Int32, type_ As Int32, linkIndex As Int32, setting As Single, nodeIndex As Int32, level As Single) As Int32 + Declare Function ENsetcontrol Lib "epanet2.dll" (ByVal index As Int32, ByVal type_ As Int32, ByVal linkIndex As Int32, ByVal setting As Single, ByVal nodeIndex As Int32, ByVal level As Single) As Int32 - Declare Function ENsetcontrol Lib "epanet2.dll" (ByVal Cindex As Int32, ByVal CtlType As Int32, ByVal Lindex As Int32, ByVal Setting As Single, ByVal Nindex As Int32, ByVal Level As Single) As Int32 - Declare Function ENsetnodevalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Code As Int32, ByVal Value As Single) As Int32 - Declare Function ENsetlinkvalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Code As Int32, ByVal Value As Single) As Int32 - Declare Function ENsetpattern Lib "epanet2.dll" (ByVal Index as Int32, ByRef F as Single, ByVal N as Int32) as Int32 - Declare Function ENsetpatternvalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Period As Int32, ByVal Value As Single) As Int32 - Declare Function ENsettimeparam Lib "epanet2.dll" (ByVal Code As Int32, ByVal Value As Int32) As Int32 - Declare Function ENsetoption Lib "epanet2.dll" (ByVal Code As Int32, ByVal Value As Single) As Int32 - Declare Function ENsetstatusreport Lib "epanet2.dll" (ByVal Code As Int32) As Int32 - Declare Function ENsetqualtype Lib "epanet2.dll" (ByVal QualCode As Int32, ByVal ChemName As String, ByVal ChemUnits As String, ByVal TraceNode As String) As Int32 - - Declare Function ENaddpattern Lib "epanet2.dll" (ByVal ID As String) As Int32 +'Rule-Based Control Functions + Declare Function ENaddrule Lib "epanet2.dll" (ByVal rule As String) As Int32 + Declare Function ENdeleterule Lib "epanet2.dll" (ByVal index As Int32) As Int32 + Declare Function ENgetrule Lib "epanet2.dll" (ByVal index As Int32, nPremises As Int32, nThenActions As Int32, nElseActions As Int32, priority As Single) As Int32 + Declare Function ENgetruleID Lib "epanet2.dll" (ByVal index As Int32, ByVal id As String) As Int32 + Declare Function ENsetrulepriority Lib "epanet2.dll" (ByVal index As Int32, ByVal priority As Single) As Int32 + Declare Function ENgetpremise Lib "epanet2.dll" (ByVal ruleIndex As Int32, ByVal premiseIndex As Int32, logop As Int32, object As Int32, objIndex As Int32, variable As Int32, relop As Int32, status As Int32, value As Single) As Int32 + Declare Function ENsetpremise Lib "epanet2.dll" (ByVal ruleIndex As Int32, ByVal premiseIndex As Int32, ByVal logop As Int32, ByVal object As Int32, ByVal objIndex As Int32, ByVal variable As Int32, ByVal relop As Int32, ByVal status As Int32, ByVal value As Single) As Int32 + Declare Function ENsetpremiseindex Lib "epanet2.dll" (ByVal ruleIndex As Int32, ByVal premiseIndex As Int32, ByVal objIndex As Int32) As Int32 + Declare Function ENsetpremisestatus Lib "epanet2.dll" (ByVal ruleIndex As Int32, ByVal premiseIndex As Int32, ByVal status As Int32) As Int32 + Declare Function ENsetpremisevalue Lib "epanet2.dll" (ByVal ruleIndex As Int32, ByVal premiseIndex As Int32, ByVal value As Single) As Int32 + Declare Function ENgetthenaction Lib "epanet2.dll" (ByVal ruleIndex As Int32, ByVal actionIndex As Int32, linkIndex As Int32, status As Int32, setting As Single) As Int32 + Declare Function ENsetthenaction Lib "epanet2.dll" (ByVal ruleIndex As Int32, ByVal actionIndex As Int32, ByVal linkIndex As Int32, ByVal status As Int32, ByVal setting As Single) As Int32 + Declare Function ENgetelseaction Lib "epanet2.dll" (ByVal ruleIndex As Int32, ByVal actionIndex As Int32, linkIndex As Int32, status As Int32, setting As Single) As Int32 + Declare Function ENsetelseaction Lib "epanet2.dll" (ByVal ruleIndex As Int32, ByVal actionIndex As Int32, ByVal linkIndex As Int32, ByVal status As Int32, ByVal setting As Single) As Int32 - Declare Function ENgetcurveindex Lib "epanet2.dll" (ByVal ID As String, ByRef Index As Int32) As Int32 - Declare Function ENgetcurveid Lib "epanet2.dll" (ByVal Index As Int32, ByVal ID As StringBuilder) As Int32 - Declare Function ENgetcurvelen Lib "epanet2.dll" (ByVal Index As Int32, ByRef L As Int32) As Int32 - Declare Function ENgetcurvevalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Pnt As Int32, ByRef X As Single, ByRef Y As Single) As Int32 - Declare Function ENsetcurvevalue Lib "epanet2.dll" (ByVal Index As Int32, ByVal Pnt As Int32, ByVal X As Single, ByVal Y As Single) As Int32 - Declare Function ENsetcurve Lib "epanet2.dll" (ByVal Index as Int32, ByRef X as Single, ByRef Y as Single, ByVal N as Int32) as Int32 - Declare Function ENaddcurve Lib "epanet2.dll" (ByVal ID As String) As Int32 - End Module diff --git a/include/epanet2_2.h b/include/epanet2_2.h new file mode 100644 index 0000000..cbfece3 --- /dev/null +++ b/include/epanet2_2.h @@ -0,0 +1,1786 @@ +/** @file epanet2_2.h + @see http://github.com/openwateranalytics/epanet + */ + +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: epanet2.h + Description: API function declarations + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 10/29/2019 + ****************************************************************************** + */ + +#ifndef EPANET2_2_H +#define EPANET2_2_H + +#ifdef epanet_py_EXPORTS + #define DLLEXPORT +#else + #ifndef DLLEXPORT + #ifdef _WIN32 + #ifdef epanet2_EXPORTS + #define DLLEXPORT __declspec(dllexport) __stdcall + #else + #define DLLEXPORT __declspec(dllimport) __stdcall + #endif + #elif defined(__CYGWIN__) + #define DLLEXPORT __stdcall + #else + #define DLLEXPORT + #endif + #endif +#endif + +#include "epanet2_enums.h" + +// --- Declare the EPANET toolkit functions +#if defined(__cplusplus) +extern "C" { +#endif + +/** + @brief The EPANET Project wrapper object +*/ +typedef struct Project *EN_Project; + +/******************************************************************** + + Project Functions + +********************************************************************/ + + /** + @brief Creates an EPANET project. + @param[out] ph an EPANET project handle that is passed into all other API functions. + @return an error code. + + EN_createproject must be called before any other API functions are used. + */ + int DLLEXPORT EN_createproject(EN_Project *ph); + + /** + @brief Deletes a currently opened EPANET project. + @param[in,out] ph an EPANET project handle which is returned as NULL. + @return an error code. + + EN_deleteproject should be called after all network analysis has been completed. + */ + int DLLEXPORT EN_deleteproject(EN_Project ph); + + /** + @brief Runs a complete EPANET simulation. + @param ph an EPANET project handle. + @param inpFile the name of an existing EPANET-formatted input file. + @param rptFile the name of a report file to be created (or "" if not needed) + @param outFile the name of a binary output file to be created (or "" if not needed) + @param pviewprog a callback function that takes a character string (char *) as its only parameter. + @return an error code + + The callback function should reside in and be used by the calling code to display + the progress messages that EPANET generates as it carries out its computations. Here is + an example of a such a function that displays progress messages to stdout: + \code {.c} + void writeConsole(char *s) + { + fprintf(stdout, "\n%s", s); + } + \endcode + It would be passed into EN_runproject as `&writeConsole`. If this feature is not needed then + the pviewprog argument should be `NULL`. + */ + int DLLEXPORT EN_runproject(EN_Project ph, const char *inpFile, const char *rptFile, + const char *outFile, void (*pviewprog)(char *)); + + /** + @brief Initializes an EPANET project. + @param ph an EPANET project handle. + @param rptFile the name of a report file to be created (or "" if not needed). + @param outFile the name of a binary output file to be created (or "" if not needed). + @param unitsType the choice of flow units (see @ref EN_FlowUnits). + @param headLossType the choice of head loss formula (see @ref EN_HeadLossType). + @return an error code. + + This function should be called immediately after ::EN_createproject if an EPANET-formatted input + file will not be used to supply network data. If the project receives it's network data + from an input file then there is no need to call this function. + */ + int DLLEXPORT EN_init(EN_Project ph, const char *rptFile, const char *outFile, + int unitsType, int headLossType); + + /** + @brief Opens an EPANET input file & reads in network data. + @param ph an EPANET project handle. + @param inpFile the name of an existing EPANET-formatted input file. + @param rptFile the name of a report file to be created (or "" if not needed). + @param outFile the name of a binary output file to be created (or "" if not needed). + @return an error code. + + This function should be called immediately after ::EN_createproject if an EPANET-formatted + input file will be used to supply network data. + */ + int DLLEXPORT EN_open(EN_Project ph, const char *inpFile, const char *rptFile, + const char *outFile); + + /** + @brief Retrieves the title lines of the project + @param ph an EPANET project handle. + @param[out] out_line1 first title line + @param[out] out_line2 second title line + @param[out] out_line3 third title line + @return an error code + */ + int DLLEXPORT EN_gettitle(EN_Project ph, char *out_line1, char *out_line2, char *out_line3); + + /** + @brief Sets the title lines of the project + @param ph an EPANET project handle. + @param line1 first title line + @param line2 second title line + @param line3 third title line + @return an error code + */ + int DLLEXPORT EN_settitle(EN_Project ph, char *line1, char *line2, char *line3); + + /** + @brief Retrieves a descriptive comment assigned to a Node, Link, Pattern or Curve. + @param ph an EPANET project handle. + @param object a type of object (either EN_NODE, EN_LINK, EN_TIMEPAT or EN_CURVE) + @param index the object's index starting from 1 + @param[out] out_comment the comment string assigned to the object + @return an error code + */ + int DLLEXPORT EN_getcomment(EN_Project ph, int object, int index, char *out_comment); + + /** + @brief Assigns a descriptive comment to a Node, Link, Pattern or Curve. + @param ph an EPANET project handle. + @param object a type of object (either EN_NODE, EN_LINK, EN_TIMEPAT or EN_CURVE) + @param index the object's index starting from 1 + @param[out] comment the comment string assigned to the object + @return an error code + */ + int DLLEXPORT EN_setcomment(EN_Project ph, int object, int index, char *comment); + + /** + @brief Retrieves the number of objects of a given type in a project. + @param ph an EPANET project handle. + @param object a type of object to count (see @ref EN_CountType) + @param[out] count number of objects of the specified type + @return an error code + */ + int DLLEXPORT EN_getcount(EN_Project ph, int object, int *count); + + /** + @brief Saves a project's data to an EPANET-formatted text file. + @param ph an EPANET project handle. + @param filename the name of the file to create. + @return Error code + */ + int DLLEXPORT EN_saveinpfile(EN_Project ph, const char *filename); + + /** + @brief Closes a project and frees all of its memory. + @param ph an EPANET project handle. + @return Error code + + This function clears all existing data from a project but does not delete the + project, so it can be re-used with another set of network data. Use ::EN_deleteproject + to actually delete a project from memory. + */ + int DLLEXPORT EN_close(EN_Project ph); + + /******************************************************************** + + Hydraulic Analysis Functions + + ********************************************************************/ + + /** + @brief Runs a complete hydraulic simulation with results for all time periods + written to a temporary hydraulics file. + @param ph an EPANET project handle. + @return an error code. + + Use ::EN_solveH to generate a complete hydraulic solution which can stand alone + or be used as input to a water quality analysis. This function will not allow one to + examine intermediate hydraulic results as they are generated. It can also be followed by calls + to ::EN_saveH and ::EN_report to write hydraulic results to the report file. + + The sequence ::EN_openH - ::EN_initH - ::EN_runH - ::EN_nextH - ::EN_closeH + can be used instead to gain access to results at intermediate time periods and + directly adjust link status and control settings as a simulation proceeds. + + Example: + \code {.c} + EN_Project ph; + EN_createproject(&ph); + EN_open(ph, "net1.inp", "net1.rpt", ""); + EN_solveH(ph); + EN_solveQ(ph); + EN_report(ph); + EN_deleteproject(ph); + \endcode + */ + int DLLEXPORT EN_solveH(EN_Project ph); + + /** + @brief Uses a previously saved binary hydraulics file to supply a project's hydraulics. + @param ph an EPANET project handle. + @param filename the name of the binary file containing hydraulic results. + @return an error code. + + Call this function to re-use a set of hydraulic analysis results saved previously. This + can save computational time if water quality analyses are being made under the same set + of hydraulic conditions. + + Do not call this function while the hydraulics solver is open. + */ + int DLLEXPORT EN_usehydfile(EN_Project ph, const char *filename); + + /** + @brief Opens a project's hydraulic solver. + @param ph an EPANET project handle. + @return an error code. + + Call ::EN_openH prior to running the first hydraulic analysis using the + ::EN_initH - ::EN_runH - ::EN_nextH sequence. Multiple analyses can be made before + calling ::EN_closeH to close the hydraulic solver. + + Do not call this function if ::EN_solveH is being used to run a complete hydraulic + analysis or if hydraulics are being supplied by a previously saved hydraulics file + using ::EN_usehydfile. + */ + int DLLEXPORT EN_openH(EN_Project ph); + + /** + @brief Initializes a network prior to running a hydraulic analysis. + @param ph an EPANET project handle. + @param initFlag a 2-digit initialization flag (see @ref EN_InitHydOption). + @return an error code. + + This function initializes storage tank levels, link status and settings, and + the simulation time clock prior to running a hydraulic analysis. + + The initialization flag is a two digit number where the 1st (left) digit + indicates if link flows should be re-initialized (1) or not (0), and the + 2nd digit indicates if hydraulic results should be saved to a temporary + binary hydraulics file (1) or not (0). + + Be sure to call ::EN_initH prior to running a hydraulic analysis using a + ::EN_runH - ::EN_nextH loop. + + Choose to save hydraulics results if you will be: + - making a subsequent water quality run, + - using ::EN_report to generate a report + - using ::EN_savehydfile to save the binary hydraulics file. + + There is no need to save hydraulics if you will be writing custom code to + process hydraulic results as they are generated using the functions ::EN_getnodevalue + and ::EN_getlinkvalue. + */ + int DLLEXPORT EN_initH(EN_Project ph, int initFlag); + + /** + @brief Computes a hydraulic solution for the current point in time. + @param ph an EPANET project handle. + @param[out] currentTime the current simulation time in seconds. + @return an error or warning code. + + This function is used in a loop with ::EN_nextH to run an extended period hydraulic + simulation. This process automatically updates the simulation clock time so \b currentTime + should be treated as a read-only variable. + + ::EN_initH must have been called prior to running the ::EN_runH - ::EN_nextH loop. + + See ::EN_nextH for an example of using this function. + */ + int DLLEXPORT EN_runH(EN_Project ph, long *currentTime); + + /** + @brief Determines the length of time until the next hydraulic event occurs in an + extended period simulation. + @param ph an EPANET project handle. + @param[out] tStep the time (in seconds) until the next hydraulic event or 0 if at + the end of the full simulation duration. + @return an error code. + + This function is used in a loop with ::EN_runH to run an extended period hydraulic + simulation. + + The value of \b tstep should be treated as a read-only variable. It is automatically + computed as the smaller of: + - the time interval until the next hydraulic time step begins + - the time interval until the next reporting time step begins + - the time interval until the next change in demands occurs + - the time interval until a tank becomes full or empty + - the time interval until a control or rule fires. + + Example: + \code {.c} + long t, tstep; + EN_openH(ph); + EN_initH(ph, EN_NOSAVE); + do { + EN_runH(ph, &t); + // Retrieve hydraulic results for time t + EN_nextH(ph, &tstep); + } while (tstep > 0); + EN_closeH(ph); + \endcode + */ + int DLLEXPORT EN_nextH(EN_Project ph, long *tStep); + + /** + @brief Transfers a project's hydraulics results from its temporary hydraulics file + to its binary output file, where results are only reported at uniform reporting intervals. + @param ph an EPANET project handle. + @return an error code. + + ::EN_saveH is used when only a hydraulic analysis is run and results at uniform reporting + intervals need to be transferred to a project's binary output file. Such would be the case + when results are to be written in formatted fashion to the project's report file using ::EN_report. + */ + int DLLEXPORT EN_saveH(EN_Project ph); + + /** + @brief Saves a project's temporary hydraulics file to disk. + @param ph an EPANET project handle. + @param filename the name of the file to be created. + @return an error code. + + Use this function to save the current set of hydraulics results to a file, either for + post-processing or to be used at a later time by calling the ::EN_usehydfile function. + + The hydraulics file contains nodal demands and heads and link flows, status, and settings + for all hydraulic time steps, even intermediate ones. + + Before calling this function hydraulic results must have been generated and saved by having + called ::EN_solveH or the ::EN_initH - ::EN_runH - ::EN_nextH sequence with the initflag + argument of ::EN_initH set to \b EN_SAVE or \b EN_SAVE_AND_INIT. + */ + int DLLEXPORT EN_savehydfile(EN_Project ph, const char *filename); + + /** + @brief Closes the hydraulic solver freeing all of its allocated memory. + @return an error code. + + Call ::EN_closeH after all hydraulics analyses have been made using + ::EN_initH - ::EN_runH - ::EN_nextH. Do not call this function if ::EN_solveH is being used. + */ + int DLLEXPORT EN_closeH(EN_Project ph); + + /******************************************************************** + + Water Quality Analysis Functions + + ********************************************************************/ + + /** + @brief Runs a complete water quality simulation with results at uniform + reporting intervals written to the project's binary output file. + @param ph an EPANET project handle. + @return an error code. + + A hydraulic analysis must have been run and saved to a hydraulics file before + calling ::EN_solveQ. This function will not allow one to examine intermediate water + quality results as they are generated. It can be followed by a call to ::EN_report + to write all hydraulic and water quality results to a formatted report file. + + One can instead use the ::EN_openQ - ::EN_initQ - ::EN_runQ - ::EN_nextQ - ::EN_closeQ + sequence to gain access to gain access to water quality results at intermediate time + periods. + + Example: see ::EN_solveH. + */ + int DLLEXPORT EN_solveQ(EN_Project ph); + + /** + @brief Opens a project's water quality solver. + @param ph n EPANET project handle. + @return an error code. + + Call ::EN_openQ prior to running the first water quality analysis using an + ::EN_initQ - ::EN_runQ - ::EN_nextQ (or ::EN_stepQ) sequence. Multiple water + quality analyses can be made before calling ::EN_closeQ to close the water + quality solver. + + Do not call this function if a complete water quality analysis will be made + using ::EN_solveQ. + */ + int DLLEXPORT EN_openQ(EN_Project ph); + + /** + @brief Initializes a network prior to running a water quality analysis. + @param ph an EPANET project handle. + @param saveFlag set to \b EN_SAVE (1) if results are to be saved to the project's + binary output file, or to \b EN_NOSAVE (0) if not. + @return an error code. + + Call ::EN_initQ prior to running a water quality analysis using ::EN_runQ in + conjunction with either ::EN_nextQ or ::EN_stepQ. + + ::EN_openQ must have been called prior to calling ::EN_initQ. + + Do not call ::EN_initQ if a complete water quality analysis will be made using ::EN_solveQ. + */ + int DLLEXPORT EN_initQ(EN_Project ph, int saveFlag); + + /** + @brief Makes hydraulic and water quality results at the start of the current time + period available to a project's water quality solver. + @param ph an EPANET project handle. + @param[out] currentTime current simulation time in seconds. + @return an error code. + + Use ::EN_runQ along with ::EN_nextQ in a loop to access water quality results at the + start of each hydraulic period in an extended period simulation. Or use it in a loop + with ::EN_stepQ to access results at the start of each water quality time step. See + each of these functions for examples of how to code such loops. + + ::EN_initQ must have been called prior to running an ::EN_runQ - ::EN_nextQ + (or ::EN_stepQ) loop. + + The current time of the simulation is determined from information saved with the + hydraulic analysis that preceded the water quality analysis. Treat it as a read-only + variable. + */ + int DLLEXPORT EN_runQ(EN_Project ph, long *currentTime); + + /** + @brief Advances a water quality simulation over the time until the next hydraulic event. + @param ph an EPANET project handle. + @param[out] tStep time (in seconds) until the next hydraulic event or 0 if at the end + of the full simulation duration. + @return an error code. + + This function is used in a loop with ::EN_runQ to perform an extended period water + quality analysis. It reacts and routes a project's water quality constituent over a + time step determined by when the next hydraulic event occurs. Use ::EN_stepQ instead + if you wish to generate results over each water quality time step. + + The value of \b tStep is determined from information produced by the hydraulic analysis + that preceded the water quality analysis. Treat it as a read-only variable. + + Example: + \code {.c} + long t, tStep; + EN_solveH(ph); // Generate & save hydraulics + EN_openQ(ph); + EN_initQ(ph, EN_NOSAVE); + do { + EN_runQ(ph, &t); + // Monitor results at time t, which + // begins a new hydraulic time period + EN_nextQ(ph, &tStep); + } while (tStep > 0); + EN_closeQ(ph); + \endcode + */ + int DLLEXPORT EN_nextQ(EN_Project ph, long *tStep); + + /** + @brief Advances a water quality simulation by a single water quality time step. + @param ph an EPANET project handle. + @param[out] timeLeft time left (in seconds) to the overall simulation duration. + @return an error code. + + This function is used in a loop with ::EN_runQ to perform an extended period water + quality simulation. It allows one to generate water quality results at each water + quality time step of the simulation, rather than over each hydraulic event period + as with ::EN_nextQ. + + Use the argument \b timeLeft to determine when no more calls to ::EN_runQ are needed + because the end of the simulation period has been reached (i.e., when \b timeLeft = 0). + */ + int DLLEXPORT EN_stepQ(EN_Project ph, long *timeLeft); + + /** + @brief Closes the water quality solver, freeing all of its allocated memory. + @param ph an EPANET project handle. + @return an error code. + + Call ::EN_closeQ after all water quality analyses have been made using the + ::EN_initQ - ::EN_runQ - ::EN_nextQ (or ::EN_stepQ) sequence of function calls. + + Do not call this function if ::EN_solveQ is being used. + */ + int DLLEXPORT EN_closeQ(EN_Project ph); + + /******************************************************************** + + Reporting Functions + + ********************************************************************/ + + /** + @brief Writes a line of text to a project's report file. + @param ph an EPANET project handle. + @param line a text string to write. + @return an error code. + */ + int DLLEXPORT EN_writeline(EN_Project ph, char *line); + + /** + @brief Writes simulation results in a tabular format to a project's report file. + @param ph an EPANET project handle. + @return an error code + + Either a full hydraulic analysis or full hydraulic and water quality analysis must + have been run, with results saved to file, before ::EN_report is called. In the + former case, ::EN_saveH must also be called first to transfer results from the + project's intermediate hydraulics file to its output file. + + The format of the report is controlled by commands issued with ::EN_setreport. + */ + int DLLEXPORT EN_report(EN_Project ph); + + /** + @brief Copies the current contents of a project's report file to another file. + @param ph an EPANET project handle. + @param filename the full path name of the destination file. + @return an error code. + + This function allows toolkit clients to retrieve the contents of a project's + report file while the project is still open. + */ + int DLLEXPORT EN_copyreport(EN_Project ph, char *filename); + + /** + @brief Clears the contents of a project's report file. + @param ph an EPANET project handle. + @return an error code. + */ + int DLLEXPORT EN_clearreport(EN_Project ph); + + /** + @brief Resets a project's report options to their default values. + @param ph an EPANET project handle. + @return an error code + + After calling this function the default reporting options are in effect. These are: + - no status report + - no energy report + - no nodes reported on + - no links reported on + - node variables reported to 2 decimal places + - link variables reported to 2 decimal places (3 for friction factor) + - node variables reported are elevation, head, pressure, and quality + - link variables reported are flow, velocity, and head loss. + */ + int DLLEXPORT EN_resetreport(EN_Project ph); + + /** + @brief Processes a reporting format command. + @param ph an EPANET project handle. + @param format a report formatting command. + @return an error code + + Acceptable report formatting commands are described in the @ref ReportPage section of + the @ref InpFile topic. + + Formatted results of a simulation can be written to a project's report file + using the ::EN_report function. + */ + int DLLEXPORT EN_setreport(EN_Project ph, char *format); + + /** + @brief Sets the level of hydraulic status reporting. + @param ph an EPANET project handle. + @param level a status reporting level code (see @ref EN_StatusReport). + @return an error code. + + Status reporting writes changes in the hydraulics status of network elements to a + project's report file as a hydraulic simulation unfolds. There are three levels + of reporting: \b EN_NO_REPORT (no status reporting), \b EN_NORMAL_REPORT (normal + reporting) \b EN_FULL_REPORT (full status reporting). + + The full status report contains information at each trial of the solution to the + system hydraulic equations at each time step of a simulation. It is useful mainly + for debugging purposes. + + If many hydraulic analyses will be run in the application it is recommended that + status reporting be turned off (level = EN_NO_REPORT). + */ + int DLLEXPORT EN_setstatusreport(EN_Project ph, int level); + + /** + @brief Retrieves the toolkit API version number. + @param[out] version the version of the OWA-EPANET toolkit. + @return an error code. + + The version number is to be interpreted with implied decimals, i.e., + "20100" == "2(.)01(.)00" + */ + int DLLEXPORT EN_getversion(int *version); + + /** + @brief Returns the text of an error message generated by an error code. + @param errcode an error code. + @param[out] out_errmsg the error message generated by the error code + @param maxLen maximum number of characters that errmsg can hold + @return an error code + + Error message strings should be at least @ref EN_SizeLimits "EN_MAXMSG" characters in length. + */ + int DLLEXPORT EN_geterror(int errcode, char *out_errmsg, int maxLen); + + /** + @brief Retrieves a particular simulation statistic. + @param ph an EPANET project handle. + @param type the type of statistic to retrieve (see @ref EN_AnalysisStatistic). + @param[out] value the value of the statistic. + @return an error code + */ + int DLLEXPORT EN_getstatistic(EN_Project ph, int type, double* value); + + /** + @brief Retrieves the order in which a node or link appears in an @ref OutFile "output file". + @param ph an EPANET project handle. + @param type a type of element (either @ref EN_NODE or @ref EN_LINK). + @param index the element's current index (starting from 1). + @param[out] value the order in which the element's results were written to file. + @return an error code. + + If the element does not appear in the file then its result index is 0. + + This function can be used to correctly retrieve results from an EPANET binary output file + after the order of nodes or links in a network's database has been changed due to editing + operations. + */ + int DLLEXPORT EN_getresultindex(EN_Project ph, int type, int index, int *value); + + /******************************************************************** + + Analysis Options Functions + + ********************************************************************/ + + /** + @brief Retrieves the value of an analysis option. + @param ph an EPANET project handle. + @param option a type of analysis option (see @ref EN_Option). + @param[out] value the current value of the option. + @return an error code + */ + int DLLEXPORT EN_getoption(EN_Project ph, int option, double *value); + + /** + @brief Sets the value for an anlysis option. + @param ph an EPANET project handle. + @param option a type of analysis option (see @ref EN_Option). + @param value the new value assigned to the option. + @return an error code. + @see EN_Option + */ + int DLLEXPORT EN_setoption(EN_Project ph, int option, double value); + + /** + @brief Retrieves a project's flow units. + @param ph an EPANET project handle. + @param[out] units a flow units code (see @ref EN_FlowUnits) + @return an error code. + + Flow units in liters or cubic meters implies that SI metric units are used for all + other quantities in addition to flow. Otherwise US Customary units are employed. + */ + int DLLEXPORT EN_getflowunits(EN_Project ph, int *units); + + /** + @brief Sets a project's flow units. + @param ph an EPANET project handle. + @param units a flow units code (see @ref EN_FlowUnits) + @return an error code. + + Flow units in liters or cubic meters implies that SI metric units are used for all + other quantities in addition to flow. Otherwise US Customary units are employed. + */ + int DLLEXPORT EN_setflowunits(EN_Project ph, int units); + + /** + @brief Retrieves the value of a time parameter. + @param ph an EPANET project handle. + @param param a time parameter code (see @ref EN_TimeParameter). + @param[out] value the current value of the time parameter (in seconds). + @return an error code. + */ + int DLLEXPORT EN_gettimeparam(EN_Project ph, int param, long *value); + + /** + @brief Sets the value of a time parameter. + @param ph an EPANET project handle. + @param param a time parameter code (see @ref EN_TimeParameter). + @param value the new value of the time parameter (in seconds) + @return an error code. + */ + int DLLEXPORT EN_settimeparam(EN_Project ph, int param, long value); + + /** + @brief Gets information about the type of water quality analysis requested. + @param ph an EPANET project handle. + @param[out] qualType type of analysis to run (see @ref EN_QualityType). + @param[out] out_chemName name of chemical constituent. + @param[out] out_chemUnits concentration units of the constituent. + @param[out] traceNode index of the node being traced (if applicable). + @return an error code. + */ + int DLLEXPORT EN_getqualinfo(EN_Project ph, int *qualType, char *out_chemName, + char *out_chemUnits, int *traceNode); + + /** + @brief Retrieves the type of water quality analysis to be run. + @param ph an EPANET project handle. + @param[out] qualType the type of analysis to run (see @ref EN_QualityType). + @param[out] traceNode the index of node being traced, if qualType = EN_TRACE. + @return an error code. + */ + int DLLEXPORT EN_getqualtype(EN_Project ph, int *qualType, int *traceNode); + + /** + @brief Sets the type of water quality analysis to run. + @param ph an EPANET project handle. + @param qualType the type of analysis to run (see @ref EN_QualityType). + @param chemName the name of the quality constituent. + @param chemUnits the concentration units of the constituent. + @param traceNode the ID name of the node being traced if qualType = EN_TRACE. + @return an error code. + + Chemical name and units can be an empty string if the analysis is not for a chemical. + The same holds for the trace node if the analysis is not for source tracing. + + Note that the trace node is specified by ID name and not by index. + */ + int DLLEXPORT EN_setqualtype(EN_Project ph, int qualType, char *chemName, + char *chemUnits, char *traceNode); + + /******************************************************************** + + Node Functions + + ********************************************************************/ + + /** + @brief Adds a new node to a project. + @param ph an EPANET project handle. + @param id the ID name of the node to be added. + @param nodeType the type of node being added (see @ref EN_NodeType) + @param[out] index the index of the newly added node + @return an error code. + + When a new node is created all of its properties (see @ref EN_NodeProperty) are set to 0. + */ + int DLLEXPORT EN_addnode(EN_Project ph, char *id, int nodeType, int *index); + + /** + @brief Deletes a node from a project. + @param ph an EPANET project handle. + @param index the index of the node to be deleted. + @param actionCode the action taken if any control contains the node and its links. + @return an error code. + + If \b actionCode is \b EN_UNCONDITIONAL then the node, its incident links and all + simple and rule-based controls that contain them are deleted. If set to + \b EN_CONDITIONAL then the node is not deleted if it or its incident links appear + in any controls and error code 261 is returned. + + */ + int DLLEXPORT EN_deletenode(EN_Project ph, int index, int actionCode); + + /** + @brief Gets the index of a node given its ID name. + @param ph an EPANET project handle. + @param id a node ID name. + @param[out] index the node's index (starting from 1). + @return an error code + */ + int DLLEXPORT EN_getnodeindex(EN_Project ph, char *id, int *index); + + /** + @brief Gets the ID name of a node given its index. + @param ph an EPANET project handle. + @param index a node's index (starting from 1). + @param[out] out_id the node's ID name. + @return an error code + + The ID name must be sized to hold at least @ref EN_SizeLimits "EN_MAXID" characters. + */ + int DLLEXPORT EN_getnodeid(EN_Project ph, int index, char *out_id); + + /** + @brief Changes the ID name of a node. + @param ph an EPANET project handle. + @param index a node's index (starting from 1). + @param newid the new ID name for the node. + @return an error code. + + The ID name must not be longer than @ref EN_SizeLimits "EN_MAXID" characters. + */ + int DLLEXPORT EN_setnodeid(EN_Project ph, int index, char *newid); + + /** + @brief Retrieves a node's type given its index. + @param ph an EPANET project handle. + @param index a node's index (starting from 1). + @param[out] nodeType the node's type (see @ref EN_NodeType). + @return an error code. + */ + int DLLEXPORT EN_getnodetype(EN_Project ph, int index, int *nodeType); + + /** + @brief Retrieves a property value for a node. + @param ph an EPANET project handle. + @param index a node's index. + @param property the property to retrieve (see @ref EN_NodeProperty). + @param[out] value the current value of the property. + @return an error code. + + Values are returned in units that depend on the units used for flow rate + (see @ref Units). + */ + int DLLEXPORT EN_getnodevalue(EN_Project ph, int index, int property, double *value); + + /** + @brief Sets a property value for a node. + @param ph an EPANET project handle. + @param index a node's index (starting from 1). + @param property the property to set (see @ref EN_NodeProperty). + @param value the new value for the property. + @return an error code. + + Values are in units that depend on the units used for flow rate (see @ref Units). + */ + int DLLEXPORT EN_setnodevalue(EN_Project ph, int index, int property, double value); + + /** + @brief Sets a group of properties for a junction node. + @param ph an EPANET project handle. + @param index a junction node's index (starting from 1). + @param elev the value of the junction's elevation. + @param dmnd the value of the junction's primary base demand. + @param dmndpat the ID name of the demand's time pattern ("" for no pattern) + @return an error code. + + These properties have units that depend on the units used for flow rate (see @ref Units). + */ + int DLLEXPORT EN_setjuncdata(EN_Project ph, int index, double elev, double dmnd, + char *dmndpat); + + /** + @brief Sets a group of properties for a tank node. + @param ph an EPANET project handle. + @param index a tank node's index (starting from 1). + @param elev the tank's bottom elevation. + @param initlvl the initial water level in the tank. + @param minlvl the minimum water level for the tank. + @param maxlvl the maximum water level for the tank. + @param diam the tank's diameter (0 if a volume curve is supplied). + @param minvol the volume of the tank at its minimum water level. + @param volcurve the name of the tank's volume curve ("" for no curve) + @return an error code. + + These properties have units that depend on the units used for flow rate (see @ref Units). + */ + int DLLEXPORT EN_settankdata(EN_Project ph, int index, double elev, double initlvl, + double minlvl, double maxlvl, double diam, double minvol, char *volcurve); + + /** + @brief Gets the (x,y) coordinates of a node. + @param ph an EPANET project handle. + @param index a node index (starting from 1). + @param[out] x the node's X-coordinate value. + @param[out] y the node's Y-coordinate value. + @return an error code. + */ + int DLLEXPORT EN_getcoord(EN_Project ph, int index, double *x, double *y); + + /** + @brief Sets the (x,y) coordinates of a node. + @param ph an EPANET project handle. + @param index a node index (starting from 1). + @param x the node's X-coordinate value. + @param y the node's Y-coordinate value. + @return an error code. + */ + int DLLEXPORT EN_setcoord(EN_Project ph, int index, double x, double y); + + /******************************************************************** + + Nodal Demand Functions + + ********************************************************************/ + + /** + @brief Retrieves the type of demand model in use and its parameters. + @param ph an EPANET project handle. + @param[out] type Type of demand model (see @ref EN_DemandModel). + @param[out] pmin Pressure below which there is no demand. + @param[out] preq Pressure required to deliver full demand. + @param[out] pexp Pressure exponent in demand function. + @return an error code. + + Parameters pmin, preq, and \b pexp are only used when the demand model is \b EN_PDA. + */ + int DLLEXPORT EN_getdemandmodel(EN_Project ph, int *type, double *pmin, + double *preq, double *pexp); + + /** + @brief Sets the type of demand model to use and its parameters. + @param ph an EPANET project handle. + @param type Type of demand model (see @ref EN_DemandModel). + @param pmin Pressure below which there is no demand. + @param preq Pressure required to deliver full demand. + @param pexp Pressure exponent in demand function. + @return an error code. + + Set \b type to \b EN_DDA for a traditional demand driven analysis (in which case the + remaining three parameter values are ignored) or to \b EN_PDA for a pressure driven + analysis. In the latter case a node's demand is computed as: + > `Dfull * [ (P - pmin) / (preq - pmin) ] ^ pexp` + where `Dfull` is the full demand and `P` is the current pressure. + + Setting \b preq equal to \b pmin will result in a solution with the smallest amount of + demand reductions needed to insure that no node delivers positive demand at a pressure + below \b pmin. + */ + int DLLEXPORT EN_setdemandmodel(EN_Project ph, int type, double pmin, + double preq, double pexp); + + + /** + @brief appends a new demand to a junction node demands list. + @param ph an EPANET project handle. + @param nodeIndex the index of a node (starting from 1). + @param baseDemand the demand's base value. + @param demandPattern the name of a time pattern used by the demand + @param demandName the name of the demand's category + @return an error code. + + A NULL or blank string can be used for `demandPattern` and for `demandName` to indicate + that no time pattern or category name is associated with the demand. + */ + int DLLEXPORT EN_adddemand(EN_Project ph, int nodeIndex, double baseDemand, + char *demandPattern, char *demandName); + + /** + @brief deletes a demand from a junction node. + @param ph an EPANET project handle. + @param nodeIndex the index of a node (starting from 1). + @param demandIndex the position of the demand in the node's demands list (starting from 1). + @return an error code. + */ + int DLLEXPORT EN_deletedemand(EN_Project ph, int nodeIndex, int demandIndex); + + /** + @brief Retrieves the index of a node's named demand category + @param ph an EPANET project handle. + @param nodeIndex the index of a node (starting from 1) + @param demandName the name of a demand category for the node + @param[out] demandIndex the index of the demand being sought + @return an error code + */ + int DLLEXPORT EN_getdemandindex(EN_Project ph, int nodeIndex, char *demandName, + int *demandIndex); + + /** + @brief Retrieves the number of demand categories for a junction node. + @param ph an EPANET project handle. + @param nodeIndex the index of a node (starting from 1). + @param[out] numDemands the number of demand categories assigned to the node. + @return an error code. + */ + int DLLEXPORT EN_getnumdemands(EN_Project ph, int nodeIndex, int *numDemands); + + /** + @brief Gets the base demand for one of a node's demand categories. + @param ph an EPANET project handle. + @param nodeIndex a node's index (starting from 1). + @param demandIndex the index of a demand category for the node (starting from 1). + @param[out] baseDemand the category's base demand. + @return an error code. + */ + int DLLEXPORT EN_getbasedemand(EN_Project ph, int nodeIndex, int demandIndex, + double *baseDemand); + + /** + @brief Sets the base demand for one of a node's demand categories. + @param ph an EPANET project handle. + @param nodeIndex a node's index (starting from 1). + @param demandIndex the index of a demand category for the node (starting from 1). + @param baseDemand the new base demand for the category. + @return an error code. + */ + int DLLEXPORT EN_setbasedemand(EN_Project ph, int nodeIndex, int demandIndex, + double baseDemand); + + /** + @brief Retrieves the index of a time pattern assigned to one of a node's demand categories. + @param ph an EPANET project handle. + @param nodeIndex the node's index (starting from 1). + @param demandIndex the index of a demand category for the node (starting from 1). + @param[out] patIndex the index of the category's time pattern. + @return an error code. + + A returned pattern index of 0 indicates that no time pattern has been assigned to the + demand category. + */ + int DLLEXPORT EN_getdemandpattern(EN_Project ph, int nodeIndex, int demandIndex, + int *patIndex); + + /** + @brief Sets the index of a time pattern used for one of a node's demand categories. + @param ph an EPANET project handle. + @param nodeIndex a node's index (starting from 1). + @param demandIndex the index of one of the node's demand categories (starting from 1). + @param patIndex the index of the time pattern assigned to the category. + @return an error code. + + Specifying a pattern index of 0 indicates that no time pattern is assigned to the + demand category. + */ + int DLLEXPORT EN_setdemandpattern(EN_Project ph, int nodeIndex, int demandIndex, int patIndex); + + /** + @brief Retrieves the name of a node's demand category. + @param ph an EPANET project handle. + @param nodeIndex a node's index (starting from 1). + @param demandIndex the index of one of the node's demand categories (starting from 1). + @param[out] out_demandName The name of the selected category. + @return an error code. + + \b demandName must be sized to contain at least @ref EN_SizeLimits "EN_MAXID" characters. + */ + int DLLEXPORT EN_getdemandname(EN_Project ph, int nodeIndex, int demandIndex, char *out_demandName); + + /** + @brief Assigns a name to a node's demand category. + @param ph an EPANET project handle. + @param nodeIndex a node's index (starting from 1). + @param demandIdx the index of one of the node's demand categories (starting from 1). + @param demandName the new name assigned to the category. + @return Error code. + + The category name must contain no more than @ref EN_SizeLimits "EN_MAXID" characters. + */ + int DLLEXPORT EN_setdemandname(EN_Project ph, int nodeIndex, int demandIdx, char *demandName); + + /******************************************************************** + + Link Functions + + ********************************************************************/ + + /** + @brief Adds a new link to a project. + @param ph an EPANET project handle. + @param id the ID name of the link to be added. + @param linkType The type of link being added (see @ref EN_LinkType) + @param fromNode The ID name of the link's starting node. + @param toNode The ID name of the link's ending node. + @param[out] index the index of the newly added link. + @return an error code. + + A new pipe is assigned a diameter of 10 inches (254 mm) and a length of 330 + feet (~ 100 meters). Its roughness coefficient depends on the head loss formula in effect (see @ref EN_HeadLossType) as follows: + - Hazen-Williams formula: 130 + - Darcy-Weisbach formula: 0.5 millifeet (0.15 mm) + - Chezy-Manning formula: 0.01 + + All other pipe properties are set to 0. + + A new pump has a status of \b EN_OPEN, a speed setting of 1, and has no pump + curve or power rating assigned to it. + + A new valve has a diameter of 10 inches (254 mm) and all other properties set to 0. + + See @ref EN_LinkProperty. + */ + int DLLEXPORT EN_addlink(EN_Project ph, char *id, int linkType, char *fromNode, + char *toNode, int *index); + + /** + @brief Deletes a link from the project. + @param ph an EPANET project handle. + @param index the index of the link to be deleted. + @param actionCode The action taken if any control contains the link. + @return an error code. + + If \b actionCode is \b EN_UNCONDITIONAL then the link and all simple and rule-based + controls that contain it are deleted. If set to \b EN_CONDITIONAL then the link + is not deleted if it appears in any control and error 261 is returned. + */ + int DLLEXPORT EN_deletelink(EN_Project ph, int index, int actionCode); + + /** + @brief Gets the index of a link given its ID name. + @param ph an EPANET project handle. + @param id a link's ID name. + @param[out] index the link's index (starting from 1). + @return an error code. + */ + int DLLEXPORT EN_getlinkindex(EN_Project ph, char *id, int *index); + + /** + @brief Gets the ID name of a link given its index. + @param ph an EPANET project handle. + @param index a link's index (starting from 1). + @param[out] out_id The link's ID name. + @return an error code. + + The ID name must be sized to hold at least @ref EN_SizeLimits "EN_MAXID" characters. + */ + int DLLEXPORT EN_getlinkid(EN_Project ph, int index, char *out_id); + + /** + @brief Changes the ID name of a link. + @param ph an EPANET project handle. + @param index a link's index (starting from 1). + @param newid the new ID name for the link. + @return Error code. + + The ID name must not be longer than @ref EN_SizeLimits "EN_MAXID" characters. + */ + int DLLEXPORT EN_setlinkid(EN_Project ph, int index, char *newid); + + /** + @brief Retrieves a link's type. + @param ph an EPANET project handle. + @param index a link's index (starting from 1). + @param[out] linkType the link's type (see @ref EN_LinkType). + @return an error code. + */ + int DLLEXPORT EN_getlinktype(EN_Project ph, int index, int *linkType); + + /** + @brief Changes a link's type. + @param ph an EPANET project handle. + @param[in,out] inout_index the link's index before [in] and after [out] the type change. + @param linkType the new type to change the link to (see @ref EN_LinkType). + @param actionCode the action taken if any controls contain the link. + @return an error code. + + If \b actionCode is \b EN_UNCONDITIONAL then all simple and rule-based controls that + contain the link are deleted when the link's type is changed. If set to + \b EN_CONDITIONAL then the type change is cancelled if the link appears in any + control and error 261 is returned. + */ + int DLLEXPORT EN_setlinktype(EN_Project ph, int *inout_index, int linkType, int actionCode); + + /** + @brief Gets the indexes of a link's start- and end-nodes. + @param ph an EPANET project handle. + @param index a link's index (starting from 1). + @param[out] node1 the index of the link's start node (starting from 1). + @param[out] node2 the index of the link's end node (starting from 1). + @return an error code. + */ + int DLLEXPORT EN_getlinknodes(EN_Project ph, int index, int *node1, int *node2); + + /** + @brief Sets the indexes of a link's start- and end-nodes. + @param ph an EPANET project handle. + @param index a link's index (starting from 1). + @param node1 The index of the link's start node (starting from 1). + @param node2 The index of the link's end node (starting from 1). + @return an error code. + */ + int DLLEXPORT EN_setlinknodes(EN_Project ph, int index, int node1, int node2); + + /** + @brief Retrieves a property value for a link. + @param ph an EPANET project handle. + @param index a link's index (starting from 1). + @param property the property to retrieve (see @ref EN_LinkProperty). + @param[out] value the current value of the property. + @return an error code. + + Values are returned in units that depend on the units used for flow rate (see @ref Units). + */ + int DLLEXPORT EN_getlinkvalue(EN_Project ph, int index, int property, double *value); + + /** + @brief Sets a property value for a link. + @param ph an EPANET project handle. + @param index a link's index. + @param property the property to set (see @ref EN_LinkProperty). + @param value the new value for the property. + @return an error code. + + Values are in units that depend on the units used for flow rate (see @ref Units). + */ + int DLLEXPORT EN_setlinkvalue(EN_Project ph, int index, int property, double value); + + /** + @brief Sets a group of properties for a pipe link. + @param ph an EPANET project handle. + @param index the index of a pipe link (starting from 1). + @param length the pipe's length. + @param diam the pipe's diameter. + @param rough the pipe's roughness coefficient. + @param mloss the pipe's minor loss coefficient. + @return an error code. + + These properties have units that depend on the units used for flow rate (see @ref Units). + */ + int DLLEXPORT EN_setpipedata(EN_Project ph, int index, double length, double diam, + double rough, double mloss); + + /** + @brief Retrieves the number of internal vertex points assigned to a link. + @param ph an EPANET project handle. + @param index a link's index (starting from 1). + @param[out] count the number of vertex points that describe the link's shape. + @return an error code. + */ + int DLLEXPORT EN_getvertexcount(EN_Project ph, int index, int *count); + + /** + @brief Retrieves the coordinate's of a vertex point assigned to a link. + @param ph an EPANET project handle. + @param index a link's index (starting from 1). + @param vertex a vertex point index (starting from 1). + @param[out] x the vertex's X-coordinate value. + @param[out] y the vertex's Y-coordinate value. + @return an error code. + */ + int DLLEXPORT EN_getvertex(EN_Project ph, int index, int vertex, double *x, double *y); + + /** + @brief Assigns a set of internal vertex points to a link. + @param ph an EPANET project handle. + @param index a link's index (starting from 1). + @param x an array of X-coordinates for the vertex points. + @param y an array of Y-coordinates for the vertex points. + @param count the number of vertex points being assigned. + @return an error code. + + Replaces any existing vertices previously assigned to the link. + */ + int DLLEXPORT EN_setvertices(EN_Project ph, int index, double *x, double *y, int count); + + /******************************************************************** + + Pump Functions + + ********************************************************************/ + + /** + @brief Retrieves the type of head curve used by a pump. + @param ph an EPANET project handle. + @param linkIndex the index of a pump link (starting from 1). + @param[out] pumpType the type of head curve used by the pump (see @ref EN_PumpType). + @return an error code. + */ + int DLLEXPORT EN_getpumptype(EN_Project ph, int linkIndex, int *pumpType); + + /** + @brief Retrieves the curve assigned to a pump's head curve. + @param ph an EPANET project handle. + @param linkIndex the index of a pump link (starting from 1). + @param[out] curveIndex the index of the curve assigned to the pump's head curve. + @return an error code. + */ + int DLLEXPORT EN_getheadcurveindex(EN_Project ph, int linkIndex, int *curveIndex); + + /** + @brief Assigns a curve to a pump's head curve. + @param ph an EPANET project handle. + @param linkIndex the index of a pump link (starting from 1). + @param curveIndex the index of a curve to be assigned as the pump's head curve. + @return an error code. + */ + int DLLEXPORT EN_setheadcurveindex(EN_Project ph, int linkIndex, int curveIndex); + + /******************************************************************** + + Time Pattern Functions + + ********************************************************************/ + + /** + @brief Adds a new time pattern to a project. + @param ph an EPANET project handle. + @param id the ID name of the pattern to add. + @return an error code. + + The new pattern contains a single time period whose factor is 1.0. + */ + int DLLEXPORT EN_addpattern(EN_Project ph, char *id); + + /** + @brief Deletes a time pattern from a project. + @param ph an EPANET project handle. + @param index the time pattern's index (starting from 1). + @return an error code. + */ + int DLLEXPORT EN_deletepattern(EN_Project ph, int index); + + /** + @brief Retrieves the index of a time pattern given its ID name. + @param ph an EPANET project handle. + @param id the ID name of a time pattern. + @param[out] index the time pattern's index (starting from 1). + @return an error code. + */ + int DLLEXPORT EN_getpatternindex(EN_Project ph, char *id, int *index); + + /** + @brief Retrieves the ID name of a time pattern given its index. + @param ph an EPANET project handle. + @param index a time pattern index (starting from 1). + @param[out] out_id the time pattern's ID name. + @return an error code. + + The ID name must be sized to hold at least @ref EN_SizeLimits "EN_MAXID" characters. + */ + int DLLEXPORT EN_getpatternid(EN_Project ph, int index, char *out_id); + + /** + @brief Changes the ID name of a time pattern given its index. + @param ph an EPANET project handle. + @param index a time pattern index (starting from 1). + @param id the time pattern's new ID name. + @return an error code. + + The new ID name must not exceed @ref EN_SizeLimits "EN_MAXID" characters. + */ + int DLLEXPORT EN_setpatternid(EN_Project ph, int index, char *id); + + /** + @brief Retrieves the number of time periods in a time pattern. + @param ph an EPANET project handle. + @param index a time pattern index (starting from 1). + @param[out] len the number of time periods in the pattern. + @return an error code. + */ + int DLLEXPORT EN_getpatternlen(EN_Project ph, int index, int *len); + + /** + @brief Retrieves a time pattern's factor for a given time period. + @param ph an EPANET project handle. + @param index a time pattern index (starting from 1). + @param period a time period in the pattern (starting from 1). + @param[out] value the pattern factor for the given time period. + @return an error code. + */ + int DLLEXPORT EN_getpatternvalue(EN_Project ph, int index, int period, double *value); + + /** + @brief Sets a time pattern's factor for a given time period. + @param ph an EPANET project handle. + @param index a time pattern index (starting from 1). + @param period a time period in the pattern (starting from 1). + @param value the new value of the pattern factor for the given time period. + @return an error code. + */ + int DLLEXPORT EN_setpatternvalue(EN_Project ph, int index, int period, double value); + + /** + @brief Retrieves the average of all pattern factors in a time pattern. + @param ph an EPANET project handle. + @param index a time pattern index (starting from 1). + @param[out] value The average of all of the time pattern's factors. + @return an error code. + */ + int DLLEXPORT EN_getaveragepatternvalue(EN_Project ph, int index, double *value); + + /** + @brief Sets the pattern factors for a given time pattern. + @param ph an EPANET project handle. + @param index a time pattern index (starting from 1). + @param values an array of new pattern factor values. + @param len the number of factor values supplied. + @return an error code. + + \b values is a zero-based array that contains \b len elements. + + Use this function to redefine (and resize) a time pattern all at once; + use @ref EN_setpatternvalue to revise pattern factors one at a time. + */ + int DLLEXPORT EN_setpattern(EN_Project ph, int index, double *values, int len); + + /******************************************************************** + + Data Curve Functions + + ********************************************************************/ + + /** + @brief Adds a new data curve to a project. + @param ph an EPANET project handle. + @param id The ID name of the curve to be added. + @return an error code. + + The new curve contains a single data point (1.0, 1.0). + */ + int DLLEXPORT EN_addcurve(EN_Project ph, char *id); + + /** + @brief Deletes a data curve from a project. + @param ph an EPANET project handle. + @param index the data curve's index (starting from 1). + @return an error code. + */ + int DLLEXPORT EN_deletecurve(EN_Project ph, int index); + + /** + @brief Retrieves the index of a curve given its ID name. + @param ph an EPANET project handle. + @param id the ID name of a curve. + @param[out] index The curve's index (starting from 1). + @return an error code. + */ + int DLLEXPORT EN_getcurveindex(EN_Project ph, char *id, int *index); + + /** + @brief Retrieves the ID name of a curve given its index. + @param ph an EPANET project handle. + @param index a curve's index (starting from 1). + @param[out] out_id the curve's ID name. + @return an error code. + + The ID name must be sized to hold at least @ref EN_SizeLimits "EN_MAXID" characters. + */ + int DLLEXPORT EN_getcurveid(EN_Project ph, int index, char *out_id); + + /** + @brief Changes the ID name of a data curve given its index. + @param ph an EPANET project handle. + @param index a data curve index (starting from 1). + @param id the data curve's new ID name. + @return an error code. + + The new ID name must not exceed @ref EN_SizeLimits "EN_MAXID" characters. + */ + int DLLEXPORT EN_setcurveid(EN_Project ph, int index, char *id); + + /** + @brief Retrieves the number of points in a curve. + @param ph an EPANET project handle. + @param index a curve's index (starting from 1). + @param[out] len The number of data points assigned to the curve. + @return an error code. + */ + int DLLEXPORT EN_getcurvelen(EN_Project ph, int index, int *len); + + /** + @brief Retrieves a curve's type. + @param ph an EPANET project handle. + @param index a curve's index (starting from 1). + @param[out] type the curve's type (see @ref EN_CurveType). + @return an error code. + */ + int DLLEXPORT EN_getcurvetype(EN_Project ph, int index, int *type); + + /** + @brief Retrieves the value of a single data point for a curve. + @param ph an EPANET project handle. + @param curveIndex a curve's index (starting from 1). + @param pointIndex the index of a point on the curve (starting from 1). + @param[out] x the point's x-value. + @param[out] y the point's y-value. + @return an error code. + */ + int DLLEXPORT EN_getcurvevalue(EN_Project ph, int curveIndex, int pointIndex, + double *x, double *y); + + /** + @brief Sets the value of a single data point for a curve. + @param ph an EPANET project handle. + @param curveIndex a curve's index (starting from 1). + @param pointIndex the index of a point on the curve (starting from 1). + @param x the point's new x-value. + @param y the point's new y-value. + @return an error code. + */ + int DLLEXPORT EN_setcurvevalue(EN_Project ph, int curveIndex, int pointIndex, + double x, double y); + + /** + @brief Retrieves all of a curve's data. + @param ph an EPANET project handle. + @param index a curve's index (starting from 1). + @param[out] out_id the curve's ID name. + @param[out] nPoints the number of data points on the curve. + @param[out] xValues the curve's x-values. + @param[out] yValues the curve's y-values. + @return an error code. + + The calling program is responsible for making `xValues` and `yValues` large enough + to hold `nPoints` number of data points and for sizing `id` to hold at least + @ref EN_SizeLimits "EN_MAXID" characters. + */ + int DLLEXPORT EN_getcurve(EN_Project ph, int index, char *out_id, int *nPoints, + double *xValues, double *yValues); + + /** + @brief assigns a set of data points to a curve. + @param ph an EPANET project handle. + @param index a curve's index (starting from 1). + @param xValues an array of new x-values for the curve. + @param yValues an array of new y-values for the curve. + @param nPoints the new number of data points for the curve. + @return an error code. + + \b xValues and \b yValues are zero-based arrays that contains \b nPoints elements. + + Use this function to redefine (and resize) a curve all at once; + use @ref EN_setcurvevalue to revise a curve's data points one at a time. + */ + int DLLEXPORT EN_setcurve(EN_Project ph, int index, double *xValues, + double *yValues, int nPoints); + + /******************************************************************** + + Simple Controls Functions + + ********************************************************************/ + + /** + @brief Adds a new simple control to a project. + @param ph an EPANET project handle. + @param type the type of control to add (see @ref EN_ControlType). + @param linkIndex the index of a link to control (starting from 1). + @param setting control setting applied to the link. + @param nodeIndex index of the node used to control the link + (0 for \b EN_TIMER and \b EN_TIMEOFDAY controls). + @param level action level (tank level, junction pressure, or time in seconds) + that triggers the control. + @param[out] index index of the new control. + @return an error code. + */ + int DLLEXPORT EN_addcontrol(EN_Project ph, int type, int linkIndex, + double setting, int nodeIndex, double level, int *index); + + /** + @brief Deletes an existing simple control. + @param ph an EPANET project handle. + @param index the index of the control to delete (starting from 1). + @return an error code. + */ + int DLLEXPORT EN_deletecontrol(EN_Project ph, int index); + + /** + @brief Retrieves the properties of a simple control. + @param ph an EPANET project handle. + @param index the control's index (starting from 1). + @param[out] type the type of control (see @ref EN_ControlType). + @param[out] linkIndex the index of the link being controlled. + @param[out] setting the control setting applied to the link. + @param[out] nodeIndex the index of the node used to trigger the control + (0 for \b EN_TIMER and \b EN_TIMEOFDAY controls). + @param[out] level the action level (tank level, junction pressure, or time in seconds) + that triggers the control. + @return an error code. + */ + int DLLEXPORT EN_getcontrol(EN_Project ph, int index, int *type, int *linkIndex, + double *setting, int *nodeIndex, double *level); + + /** + @brief Sets the properties of an existing simple control. + @param ph an EPANET project handle. + @param index the control's index (starting from 1). + @param type the type of control (see @ref EN_ControlType). + @param linkIndex the index of the link being controlled. + @param setting the control setting applied to the link. + @param nodeIndex the index of the node used to trigger the control + (0 for \b EN_TIMER and \b EN_TIMEOFDAY controls). + @param level the action level (tank level, junction pressure, or time in seconds) + that triggers the control. + @return an error code. + */ + int DLLEXPORT EN_setcontrol(EN_Project ph, int index, int type, int linkIndex, + double setting, int nodeIndex, double level); + + + /******************************************************************** + + Rule-Based Controls Functions + + ********************************************************************/ + + /** + @brief Adds a new rule-based control to a project. + @param ph an EPANET project handle. + @param rule text of the rule following the format used in an EPANET input file. + @return an error code. + + Consult the @ref RulesPage section of the @ref InpFile topic to learn about a + rule's format. Each clause of the rule must end with a newline character `\n`. + */ + int DLLEXPORT EN_addrule(EN_Project ph, char *rule); + + /** + @brief Deletes an existing rule-based control. + @param ph an EPANET project handle. + @param index the index of the rule to be deleted (starting from 1). + @return an error code. + */ + int DLLEXPORT EN_deleterule(EN_Project ph, int index); + + /** + @brief Retrieves summary information about a rule-based control. + @param ph an EPANET project handle. + @param index the rule's index (starting from 1). + @param[out] nPremises number of premises in the rule's IF section. + @param[out] nThenActions number of actions in the rule's THEN section. + @param[out] nElseActions number of actions in the rule's ELSE section. + @param[out] priority the rule's priority value. + @return an error code. + */ + int DLLEXPORT EN_getrule(EN_Project ph, int index, int *nPremises, + int *nThenActions, int *nElseActions, double *priority); + + /** + @brief Gets the ID name of a rule-based control given its index. + @param ph an EPANET project handle. + @param index the rule's index (starting from 1). + @param[out] out_id the rule's ID name. + @return Error code. + + The ID name must be sized to hold at least @ref EN_SizeLimits "EN_MAXID" characters. + */ + int DLLEXPORT EN_getruleID(EN_Project ph, int index, char *out_id); + + /** + @brief Gets the properties of a premise in a rule-based control. + @param ph an EPANET project handle. + @param ruleIndex the rule's index (starting from 1). + @param premiseIndex the position of the premise in the rule's list of premises + (starting from 1). + @param[out] logop the premise's logical operator ( \b IF = 1, \b AND = 2, \b OR = 3 ). + @param[out] object the type of object the premise refers to (see @ref EN_RuleObject). + @param[out] objIndex the index of the object (e.g. the index of a tank). + @param[out] variable the object's variable being compared (see @ref EN_RuleVariable). + @param[out] relop the premise's comparison operator (see @ref EN_RuleOperator). + @param[out] status the status that the object's status is compared to + (see @ref EN_RuleStatus). + @param[out] value the value that the object's variable is compared to. + @return an error code. + */ + int DLLEXPORT EN_getpremise(EN_Project ph, int ruleIndex, int premiseIndex, + int *logop, int *object, int *objIndex, int *variable, + int *relop, int *status, double *value); + + /** + @brief Sets the properties of a premise in a rule-based control. + @param ph an EPANET project handle. + @param ruleIndex the rule's index (starting from 1). + @param premiseIndex the position of the premise in the rule's list of premises. + @param logop the premise's logical operator ( \b IF = 1, \b AND = 2, \b OR = 3 ). + @param object the type of object the premise refers to (see @ref EN_RuleObject). + @param objIndex the index of the object (e.g. the index of a tank). + @param variable the object's variable being compared (see @ref EN_RuleVariable). + @param relop the premise's comparison operator (see @ref EN_RuleOperator). + @param status the status that the object's status is compared to + (see @ref EN_RuleStatus). + @param value the value that the object's variable is compared to. + @return an error code. + */ + int DLLEXPORT EN_setpremise(EN_Project ph, int ruleIndex, int premiseIndex, + int logop, int object, int objIndex, int variable, int relop, + int status, double value); + + /** + @brief Sets the index of an object in a premise of a rule-based control. + @param ph an EPANET project handle. + @param ruleIndex the rule's index (starting from 1). + @param premiseIndex the premise's index (starting from 1). + @param objIndex the index of the premise's object (e.g. the index of a tank). + @return an error code. + */ + int DLLEXPORT EN_setpremiseindex(EN_Project ph, int ruleIndex, int premiseIndex, + int objIndex); + + /** + @brief Sets the status being compared to in a premise of a rule-based control. + @param ph an EPANET project handle. + @param ruleIndex the rule's index (starting from 1). + @param premiseIndex the premise's index (starting from 1). + @param status the status that the premise's object status is compared to + (see @ref EN_RuleStatus). + @return an error code. + */ + int DLLEXPORT EN_setpremisestatus(EN_Project ph, int ruleIndex, int premiseIndex, + int status); + + /** + @brief Sets the value in a premise of a rule-based control. + @param ph an EPANET project handle. + @param ruleIndex the rule's index (staring from 1). + @param premiseIndex the premise's index (starting from 1). + @param value The value that the premise's variable is compared to. + @return an error code. + */ + int DLLEXPORT EN_setpremisevalue(EN_Project ph, int ruleIndex, int premiseIndex, + double value); + + /** + @brief Gets the properties of a THEN action in a rule-based control. + @param ph an EPANET project handle. + @param ruleIndex the rule's index (starting from 1). + @param actionIndex the index of the THEN action to retrieve (starting from 1). + @param[out] linkIndex the index of the link in the action (starting from 1). + @param[out] status the status assigned to the link (see @ref EN_RuleStatus) + @param[out] setting the value assigned to the link's setting. + @return an error code. + */ + int DLLEXPORT EN_getthenaction(EN_Project ph, int ruleIndex, int actionIndex, + int *linkIndex, int *status, double *setting); + + /** + @brief Sets the properties of a THEN action in a rule-based control. + @param ph an EPANET project handle. + @param ruleIndex the rule's index (starting from 1). + @param actionIndex the index of the THEN action to modify (starting from 1). + @param linkIndex the index of the link in the action. + @param status the new status assigned to the link (see @ref EN_RuleStatus). + @param setting the new value assigned to the link's setting. + @return an error code. + */ + int DLLEXPORT EN_setthenaction(EN_Project ph, int ruleIndex, int actionIndex, + int linkIndex, int status, double setting); + + /** + @brief Gets the properties of an ELSE action in a rule-based control. + @param ph an EPANET project handle. + @param ruleIndex the rule's index (starting from 1). + @param actionIndex the index of the ELSE action to retrieve (starting from 1). + @param[out] linkIndex the index of the link in the action. + @param[out] status the status assigned to the link (see @ref EN_RuleStatus). + @param[out] setting the value assigned to the link's setting. + @return an error code. + */ + int DLLEXPORT EN_getelseaction(EN_Project ph, int ruleIndex, int actionIndex, + int *linkIndex, int *status, double *setting); + + /** + @brief Sets the properties of an ELSE action in a rule-based control. + @param ph an EPANET project handle. + @param ruleIndex the rule's index (starting from 1). + @param actionIndex the index of the ELSE action being modified (starting from 1). + @param linkIndex the index of the link in the action (starting from 1). + @param status the new status assigned to the link (see @ref EN_RuleStatus) + @param setting the new value assigned to the link's setting. + @return an error code. + */ + int DLLEXPORT EN_setelseaction(EN_Project ph, int ruleIndex, int actionIndex, + int linkIndex, int status, double setting); + + /** + @brief Sets the priority of a rule-based control. + @param ph an EPANET project handle. + @param index the rule's index (starting from 1). + @param priority the priority value assigned to the rule. + @return an error code. + */ + int DLLEXPORT EN_setrulepriority(EN_Project ph, int index, double priority); + +#if defined(__cplusplus) +} +#endif + +#endif //EPANET2_2_H diff --git a/include/epanet2_enums.h b/include/epanet2_enums.h new file mode 100644 index 0000000..32d8171 --- /dev/null +++ b/include/epanet2_enums.h @@ -0,0 +1,468 @@ +/** @file epanet2_enums.h +*/ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: epanet2_enums.h + Description: enumerations of symbolic constants used by the API functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 11/06/2019 + ****************************************************************************** +*/ + + +#ifndef EPANET2_ENUMS_H +#define EPANET2_ENUMS_H + + +// --- Define the EPANET toolkit constants + +/// Size Limts +/** +Limits on the size of character arrays used to store ID names +and text messages. +*/ +typedef enum { + EN_MAXID = 31, //!< Max. # characters in ID name + EN_MAXMSG = 255 //!< Max. # characters in message text +} EN_SizeLimits; + +/// Node properties +/** +These node properties are used with @ref EN_getnodevalue and @ref EN_setnodevalue. +Those marked as read only are computed values that can only be retrieved. +*/ +typedef enum { + EN_ELEVATION = 0, //!< Elevation + EN_BASEDEMAND = 1, //!< Primary demand baseline value + EN_PATTERN = 2, //!< Primary demand time pattern index + EN_EMITTER = 3, //!< Emitter flow coefficient + EN_INITQUAL = 4, //!< Initial quality + EN_SOURCEQUAL = 5, //!< Quality source strength + EN_SOURCEPAT = 6, //!< Quality source pattern index + EN_SOURCETYPE = 7, //!< Quality source type (see @ref EN_SourceType) + EN_TANKLEVEL = 8, //!< Current computed tank water level (read only) + EN_DEMAND = 9, //!< Current computed demand (read only) + EN_HEAD = 10, //!< Current computed hydraulic head (read only) + EN_PRESSURE = 11, //!< Current computed pressure (read only) + EN_QUALITY = 12, //!< Current computed quality (read only) + EN_SOURCEMASS = 13, //!< Current computed quality source mass inflow (read only) + EN_INITVOLUME = 14, //!< Tank initial volume (read only) + EN_MIXMODEL = 15, //!< Tank mixing model (see @ref EN_MixingModel) + EN_MIXZONEVOL = 16, //!< Tank mixing zone volume (read only) + EN_TANKDIAM = 17, //!< Tank diameter + EN_MINVOLUME = 18, //!< Tank minimum volume + EN_VOLCURVE = 19, //!< Tank volume curve index + EN_MINLEVEL = 20, //!< Tank minimum level + EN_MAXLEVEL = 21, //!< Tank maximum level + EN_MIXFRACTION = 22, //!< Tank mixing fraction + EN_TANK_KBULK = 23, //!< Tank bulk decay coefficient + EN_TANKVOLUME = 24, //!< Current computed tank volume (read only) + EN_MAXVOLUME = 25, //!< Tank maximum volume (read only) + EN_CANOVERFLOW = 26, //!< Tank can overflow (= 1) or not (= 0) + EN_DEMANDDEFICIT = 27 //!< Amount that full demand is reduced under PDA (read only) +} EN_NodeProperty; + +/// Link properties +/** +These link properties are used with @ref EN_getlinkvalue and @ref EN_setlinkvalue. +Those marked as read only are computed values that can only be retrieved. +*/ +typedef enum { + EN_DIAMETER = 0, //!< Pipe/valve diameter + EN_LENGTH = 1, //!< Pipe length + EN_ROUGHNESS = 2, //!< Pipe roughness coefficient + EN_MINORLOSS = 3, //!< Pipe/valve minor loss coefficient + EN_INITSTATUS = 4, //!< Initial status (see @ref EN_LinkStatusType) + EN_INITSETTING = 5, //!< Initial pump speed or valve setting + EN_KBULK = 6, //!< Bulk chemical reaction coefficient + EN_KWALL = 7, //!< Pipe wall chemical reaction coefficient + EN_FLOW = 8, //!< Current computed flow rate (read only) + EN_VELOCITY = 9, //!< Current computed flow velocity (read only) + EN_HEADLOSS = 10, //!< Current computed head loss (read only) + EN_STATUS = 11, //!< Current link status (see @ref EN_LinkStatusType) + EN_SETTING = 12, //!< Current link setting + EN_ENERGY = 13, //!< Current computed pump energy usage (read only) + EN_LINKQUAL = 14, //!< Current computed link quality (read only) + EN_LINKPATTERN = 15, //!< Pump speed time pattern index + EN_PUMP_STATE = 16, //!< Current computed pump state (read only) (see @ref EN_PumpStateType) + EN_PUMP_EFFIC = 17, //!< Current computed pump efficiency (read only) + EN_PUMP_POWER = 18, //!< Pump constant power rating + EN_PUMP_HCURVE = 19, //!< Pump head v. flow curve index + EN_PUMP_ECURVE = 20, //!< Pump efficiency v. flow curve index + EN_PUMP_ECOST = 21, //!< Pump average energy price + EN_PUMP_EPAT = 22 //!< Pump energy price time pattern index +} EN_LinkProperty; + +/// Time parameters +/** +These time-related options are used with @ref EN_gettimeparam and@ref EN_settimeparam. +All times are expressed in seconds The parameters marked as read only are +computed values that can only be retrieved. +*/ +typedef enum { + EN_DURATION = 0, //!< Total simulation duration + EN_HYDSTEP = 1, //!< Hydraulic time step + EN_QUALSTEP = 2, //!< Water quality time step + EN_PATTERNSTEP = 3, //!< Time pattern period + EN_PATTERNSTART = 4, //!< Time when time patterns begin + EN_REPORTSTEP = 5, //!< Reporting time step + EN_REPORTSTART = 6, //!< Time when reporting starts + EN_RULESTEP = 7, //!< Rule-based control evaluation time step + EN_STATISTIC = 8, //!< Reporting statistic code (see @ref EN_StatisticType) + EN_PERIODS = 9, //!< Number of reporting time periods (read only) + EN_STARTTIME = 10, //!< Simulation starting time of day + EN_HTIME = 11, //!< Elapsed time of current hydraulic solution (read only) + EN_QTIME = 12, //!< Elapsed time of current quality solution (read only) + EN_HALTFLAG = 13, //!< Flag indicating if the simulation was halted (read only) + EN_NEXTEVENT = 14, //!< Shortest time until a tank becomes empty or full (read only) + EN_NEXTEVENTTANK = 15 //!< Index of tank with shortest time to become empty or full (read only) +} EN_TimeParameter; + +/// Analysis convergence statistics +/** +These statistics report the convergence criteria for the most current hydraulic analysis +and the cumulative water quality mass balance error at the current simulation time. They +can be retrieved with @ref EN_getstatistic. +*/ +typedef enum { + EN_ITERATIONS = 0, //!< Number of hydraulic iterations taken + EN_RELATIVEERROR = 1, //!< Sum of link flow changes / sum of link flows + EN_MAXHEADERROR = 2, //!< Largest head loss error for links + EN_MAXFLOWCHANGE = 3, //!< Largest flow change in links + EN_MASSBALANCE = 4, //!< Cumulative water quality mass balance ratio + EN_DEFICIENTNODES = 5, //!< Number of pressure deficient nodes + EN_DEMANDREDUCTION = 6 //!< % demand reduction at pressure deficient nodes +} EN_AnalysisStatistic; + +/// Types of network objects +/** +The types of objects that comprise a network model. +*/ +typedef enum { + EN_NODE = 0, //!< Nodes + EN_LINK = 1, //!< Links + EN_TIMEPAT = 2, //!< Time patterns + EN_CURVE = 3, //!< Data curves + EN_CONTROL = 4, //!< Simple controls + EN_RULE = 5 //!< Control rules +} EN_ObjectType; + +/// Types of objects to count +/** +These options tell @ref EN_getcount which type of object to count. +*/ +typedef enum { + EN_NODECOUNT = 0, //!< Number of nodes (junctions + tanks + reservoirs) + EN_TANKCOUNT = 1, //!< Number of tanks and reservoirs + EN_LINKCOUNT = 2, //!< Number of links (pipes + pumps + valves) + EN_PATCOUNT = 3, //!< Number of time patterns + EN_CURVECOUNT = 4, //!< Number of data curves + EN_CONTROLCOUNT = 5, //!< Number of simple controls + EN_RULECOUNT = 6 //!< Number of rule-based controls +} EN_CountType; + +/// Node Types +/** +These are the different types of nodes that can be returned by calling @ref EN_getnodetype. +*/ +typedef enum { + EN_JUNCTION = 0, //!< Junction node + EN_RESERVOIR = 1, //!< Reservoir node + EN_TANK = 2 //!< Storage tank node +} EN_NodeType; + +/// Link types +/** +These are the different types of links that can be returned by calling @ref EN_getlinktype. +*/ +typedef enum { + EN_CVPIPE = 0, //!< Pipe with check valve + EN_PIPE = 1, //!< Pipe + EN_PUMP = 2, //!< Pump + EN_PRV = 3, //!< Pressure reducing valve + EN_PSV = 4, //!< Pressure sustaining valve + EN_PBV = 5, //!< Pressure breaker valve + EN_FCV = 6, //!< Flow control valve + EN_TCV = 7, //!< Throttle control valve + EN_GPV = 8 //!< General purpose valve +} EN_LinkType; + +/// Link status +/** +One of these values is returned when @ref EN_getlinkvalue is used to retrieve a link's +initial status ( \b EN_INITSTATUS ) or its current status ( \b EN_STATUS ). These options are +also used with @ref EN_setlinkvalue to set values for these same properties. +*/ +typedef enum { + EN_CLOSED = 0, + EN_OPEN = 1 +} EN_LinkStatusType; + +/// Pump states +/** +One of these codes is returned when @ref EN_getlinkvalue is used to retrieve a pump's +current operating state ( \b EN_PUMP_STATE ). \b EN_PUMP_XHEAD indicates that the pump has been +shut down because it is being asked to deliver more than its shutoff head. \b EN_PUMP_XFLOW +indicates that the pump is being asked to deliver more than its maximum flow. +*/ +typedef enum { + EN_PUMP_XHEAD = 0, //!< Pump closed - cannot supply head + EN_PUMP_CLOSED = 2, //!< Pump closed + EN_PUMP_OPEN = 3, //!< Pump open + EN_PUMP_XFLOW = 5 //!< Pump open - cannot supply flow +} EN_PumpStateType; + +/// Types of water quality analyses +/** +These are the different types of water quality analyses that EPANET can run. They +are used with @ref EN_getqualinfo, @ref EN_getqualtype, and @ref EN_setqualtype. +*/ +typedef enum { + EN_NONE = 0, //!< No quality analysis + EN_CHEM = 1, //!< Chemical fate and transport + EN_AGE = 2, //!< Water age analysis + EN_TRACE = 3 //!< Source tracing analysis +} EN_QualityType; + +/// Water quality source types +/** +These are the different types of external water quality sources that can be assigned +to a node's \b EN_SOURCETYPE property as used by @ref EN_getnodevalue and @ref EN_setnodevalue. +*/ +typedef enum { + EN_CONCEN = 0, //!< Sets the concentration of external inflow entering a node + EN_MASS = 1, //!< Injects a given mass/minute into a node + EN_SETPOINT = 2, //!< Sets the concentration leaving a node to a given value + EN_FLOWPACED = 3 //!< Adds a given value to the concentration leaving a node +} EN_SourceType; + +/// Head loss formulas +/** +The available choices for the \b EN_HEADLOSSFORM option in @ref EN_getoption and +@ref EN_setoption. They are also used for the head loss type argument in @ref EN_init. +Each head loss formula uses a different type of roughness coefficient ( \b EN_ROUGHNESS ) +that can be set with @ref EN_setlinkvalue. +*/ +typedef enum { + EN_HW = 0, //!< Hazen-Williams + EN_DW = 1, //!< Darcy-Weisbach + EN_CM = 2 //!< Chezy-Manning +} EN_HeadLossType; + +/// Flow units +/** +These choices for flow units are used with @ref EN_getflowunits and @ref EN_setflowunits. +They are also used for the flow units type argument in @ref EN_init. If flow units are +expressed in US Customary units ( \b EN_CFS through \b EN_AFD ) then all other quantities are +in US Customary units. Otherwise they are in metric units. +*/ +typedef enum { + EN_CFS = 0, //!< Cubic feet per second + EN_GPM = 1, //!< Gallons per minute + EN_MGD = 2, //!< Million gallons per day + EN_IMGD = 3, //!< Imperial million gallons per day + EN_AFD = 4, //!< Acre-feet per day + EN_LPS = 5, //!< Liters per second + EN_LPM = 6, //!< Liters per minute + EN_MLD = 7, //!< Million liters per day + EN_CMH = 8, //!< Cubic meters per hour + EN_CMD = 9 //!< Cubic meters per day +} EN_FlowUnits; + +/// Demand models +/** +These choices for modeling consumer demands are used with @ref EN_getdemandmodel +and @ref EN_setdemandmodel. + +A demand driven analysis requires that a junction's full demand be supplied +in each time period independent of how much pressure is available. A pressure +driven analysis makes demand be a power function of pressure, up to the point +where the full demand is met. +*/ +typedef enum { + EN_DDA = 0, //!< Demand driven analysis + EN_PDA = 1 //!< Pressure driven analysis +} EN_DemandModel; + +/// Simulation options +/** +These constants identify the hydraulic and water quality simulation options +that are applied on a network-wide basis. They are accessed using the +@ref EN_getoption and @ref EN_setoption functions. +*/ +typedef enum { + EN_TRIALS = 0, //!< Maximum trials allowed for hydraulic convergence + EN_ACCURACY = 1, //!< Total normalized flow change for hydraulic convergence + EN_TOLERANCE = 2, //!< Water quality tolerance + EN_EMITEXPON = 3, //!< Exponent in emitter discharge formula + EN_DEMANDMULT = 4, //!< Global demand multiplier + EN_HEADERROR = 5, //!< Maximum head loss error for hydraulic convergence + EN_FLOWCHANGE = 6, //!< Maximum flow change for hydraulic convergence + EN_HEADLOSSFORM = 7, //!< Head loss formula (see @ref EN_HeadLossType) + EN_GLOBALEFFIC = 8, //!< Global pump efficiency (percent) + EN_GLOBALPRICE = 9, //!< Global energy price per KWH + EN_GLOBALPATTERN = 10, //!< Index of a global energy price pattern + EN_DEMANDCHARGE = 11, //!< Energy charge per max. KW usage + EN_SP_GRAVITY = 12, //!< Specific gravity + EN_SP_VISCOS = 13, //!< Specific viscosity (relative to water at 20 deg C) + EN_UNBALANCED = 14, //!< Extra trials allowed if hydraulics don't converge + EN_CHECKFREQ = 15, //!< Frequency of hydraulic status checks + EN_MAXCHECK = 16, //!< Maximum trials for status checking + EN_DAMPLIMIT = 17, //!< Accuracy level where solution damping begins + EN_SP_DIFFUS = 18, //!< Specific diffusivity (relative to chlorine at 20 deg C) + EN_BULKORDER = 19, //!< Bulk water reaction order for pipes + EN_WALLORDER = 20, //!< Wall reaction order for pipes (either 0 or 1) + EN_TANKORDER = 21, //!< Bulk water reaction order for tanks + EN_CONCENLIMIT = 22 //!< Limiting concentration for growth reactions +} EN_Option; + +/// Simple control types +/** +These are the different types of simple (single statement) controls that can be applied +to network links. They are used as an argument to @ref EN_addcontrol,@ref EN_getcontrol, +and @ref EN_setcontrol. +*/ +typedef enum { + EN_LOWLEVEL = 0, //!< Act when pressure or tank level drops below a setpoint + EN_HILEVEL = 1, //!< Act when pressure or tank level rises above a setpoint + EN_TIMER = 2, //!< Act at a prescribed elapsed amount of time + EN_TIMEOFDAY = 3 //!< Act at a particular time of day +} EN_ControlType; + +/// Reporting statistic choices +/** +These options determine what kind of statistical post-processing should be done on +the time series of simulation results generated before they are reported using +@ref EN_report. An option can be chosen by using \b STATISTIC _option_ as the argument +to @ref EN_setreport. +*/ +typedef enum { + EN_SERIES = 0, //!< Report all time series points + EN_AVERAGE = 1, //!< Report average value over simulation period + EN_MINIMUM = 2, //!< Report minimum value over simulation period + EN_MAXIMUM = 3, //!< Report maximum value over simulation period + EN_RANGE = 4 //!< Report maximum - minimum over simulation period +} EN_StatisticType; + +/// Tank mixing models +/** +These are the different types of models that describe water quality mixing in storage tanks. +The choice of model is accessed with the \b EN_MIXMODEL property of a Tank node using +@ref EN_getnodevalue and @ref EN_setnodevalue. +*/ +typedef enum { + EN_MIX1 = 0, //!< Complete mix model + EN_MIX2 = 1, //!< 2-compartment model + EN_FIFO = 2, //!< First in, first out model + EN_LIFO = 3 //!< Last in, first out model +} EN_MixingModel; + +/// Hydraulic initialization options +/** +These options are used to initialize a new hydraulic analysis when @ref EN_initH is called. +*/ +typedef enum { + EN_NOSAVE = 0, //!< Don't save hydraulics; don't re-initialize flows + EN_SAVE = 1, //!< Save hydraulics to file, don't re-initialize flows + EN_INITFLOW = 10, //!< Don't save hydraulics; re-initialize flows + EN_SAVE_AND_INIT = 11 //!< Save hydraulics; re-initialize flows +} EN_InitHydOption; + +/// Types of pump curves +/** +@ref EN_getpumptype returns one of these values when it is called. +*/ +typedef enum { + EN_CONST_HP = 0, //!< Constant horsepower + EN_POWER_FUNC = 1, //!< Power function + EN_CUSTOM = 2, //!< User-defined custom curve + EN_NOCURVE = 3 //!< No curve +} EN_PumpType; + +/// Types of data curves +/** +These are the different types of physical relationships that a data curve can +represent as returned by calling @ref EN_getcurvetype. +*/ +typedef enum { + EN_VOLUME_CURVE = 0, //!< Tank volume v. depth curve + EN_PUMP_CURVE = 1, //!< Pump head v. flow curve + EN_EFFIC_CURVE = 2, //!< Pump efficiency v. flow curve + EN_HLOSS_CURVE = 3, //!< Valve head loss v. flow curve + EN_GENERIC_CURVE = 4 //!< Generic curve +} EN_CurveType; + +/// Deletion action codes +/** +These codes are used in @ref EN_deletenode and @ref EN_deletelink to indicate what action +should be taken if the node or link being deleted appears in any simple or rule-based +controls or if a deleted node has any links connected to it. +*/ +typedef enum { + EN_UNCONDITIONAL = 0, //!< Delete all controls and connecing links + EN_CONDITIONAL = 1 //!< Cancel object deletion if it appears in controls or has connecting links +} EN_ActionCodeType; + +/// Status reporting levels +/** +These choices specify the level of status reporting written to a project's report +file during a hydraulic analysis. The level is set using the @ref EN_setstatusreport function. +*/ +typedef enum { + EN_NO_REPORT = 0, //!< No status reporting + EN_NORMAL_REPORT = 1, //!< Normal level of status reporting + EN_FULL_REPORT = 2 //!< Full level of status reporting +} EN_StatusReport; + +/// Network objects used in rule-based controls +typedef enum { + EN_R_NODE = 6, //!< Clause refers to a node + EN_R_LINK = 7, //!< Clause refers to a link + EN_R_SYSTEM = 8 //!< Clause refers to a system parameter (e.g., time) +} EN_RuleObject; + +/// Object variables used in rule-based controls +typedef enum { + EN_R_DEMAND = 0, //!< Nodal demand + EN_R_HEAD = 1, //!< Nodal hydraulic head + EN_R_GRADE = 2, //!< Nodal hydraulic grade + EN_R_LEVEL = 3, //!< Tank water level + EN_R_PRESSURE = 4, //!< Nodal pressure + EN_R_FLOW = 5, //!< Link flow rate + EN_R_STATUS = 6, //!< Link status + EN_R_SETTING = 7, //!< Link setting + EN_R_POWER = 8, //!< Pump power output + EN_R_TIME = 9, //!< Elapsed simulation time + EN_R_CLOCKTIME = 10, //!< Time of day + EN_R_FILLTIME = 11, //!< Time to fill a tank + EN_R_DRAINTIME = 12 //!< Time to drain a tank +} EN_RuleVariable; + +/// Comparison operators used in rule-based controls +typedef enum { + EN_R_EQ = 0, //!< Equal to + EN_R_NE = 1, //!< Not equal + EN_R_LE = 2, //!< Less than or equal to + EN_R_GE = 3, //!< Greater than or equal to + EN_R_LT = 4, //!< Less than + EN_R_GT = 5, //!< Greater than + EN_R_IS = 6, //!< Is equal to + EN_R_NOT = 7, //!< Is not equal to + EN_R_BELOW = 8, //!< Is below + EN_R_ABOVE = 9 //!< Is above +} EN_RuleOperator; + +/// Link status codes used in rule-based controls +typedef enum { + EN_R_IS_OPEN = 1, //!< Link is open + EN_R_IS_CLOSED = 2, //!< Link is closed + EN_R_IS_ACTIVE = 3 //!< Control valve is active +} EN_RuleStatus; + +#define EN_MISSING -1.E10 //!< Missing value indicator + +#endif //EPANET2_ENUMS_H diff --git a/run/CMakeLists.txt b/run/CMakeLists.txt new file mode 100644 index 0000000..6420176 --- /dev/null +++ b/run/CMakeLists.txt @@ -0,0 +1,33 @@ +# EPANET COMMAND LINE EXECUTABLE +cmake_minimum_required (VERSION 2.8.8) + + +# Sets for output directory for executables and libraries. +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + +# Sets the position independent code property for all targets. +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + + +# Link to multi-threaded static runtime library +IF (MSVC) + add_definitions(-D_CRT_SECURE_NO_DEPRECATE -MT) +ENDIF (MSVC) + + +# Set up file groups for exe target +set(EPANET_CLI_SOURCES main.c) +include_directories(include) + +source_group("CLI" FILES ${EPANET_CLI_SOURCES}) + + +# Creates the EPANET command line executable +add_executable(runepanet ${EPANET_CLI_SOURCES}) +if(NOT WIN32) + target_link_libraries(runepanet LINK_PUBLIC epanet2 m) +else(NOT WIN32) + target_link_libraries(runepanet LINK_PUBLIC epanet2) +endif(NOT WIN32) diff --git a/run/main.c b/run/main.c index a96c979..793fffa 100644 --- a/run/main.c +++ b/run/main.c @@ -1,133 +1,93 @@ -#include -#include -#include "epanet2.h" - -#define MAXMSG 79 /* Max. # characters in message text */ -#define MAXWARNCODE 99 -/* text copied here, no more need of include "text.h" */ -#define FMT01 "\nEPANET Version %d.%d.%d\n" -#define FMT03 "\n Correct syntax is:\n epanet \n" -#define FMT09 "\nEPANET completed.\n" -#define FMT10 "\nEPANET completed. There are warnings." -#define FMT11 "\nEPANET completed. There are errors." - - -void writeConsole(char *s); - - /* ----------------------------------------------------------------- - Entry point used to compile a stand-alone executable. ----------------------------------------------------------------- + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: main.c + Description: main stub for a command line executable version of EPANET + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 12/07/2018 + ****************************************************************************** */ +#include +#include "epanet2.h" -int main(int argc, char *argv[]) +void writeConsole(char *s) +{ + fprintf(stdout, "\r%s", s); + fflush(stdout); +} + +int main(int argc, char *argv[]) /*-------------------------------------------------------------- ** Input: argc = number of command line arguments ** *argv[] = array of command line arguments ** Output: none - ** Purpose: main program segment + ** Purpose: main program stub for command line EPANET ** ** Command line for stand-alone operation is: ** progname f1 f2 f3 ** where progname = name of executable this code was compiled to, ** f1 = name of input file, - ** f2 = name of report file (optional, stdout if left blank) - ** f3 = name of binary output file (optional, nullfile if left blank). + ** f2 = name of report file + ** f3 = name of binary output file (optional). **-------------------------------------------------------------- */ { - char *f1,*f2,*f3; - char blank[] = ""; - char errmsg[MAXMSG+1]=""; - int errcode; - int version; - char s[25]; - int major; - int minor; - int patch; - - /* get version from DLL and trasform in Major.Minor.Patch format - instead of hardcoded version */ - ENgetversion(&version); - major= version/10000; - minor= (version%10000)/100; - patch= version%100; - sprintf(s,FMT01, major , minor, patch); - writeConsole(s); + char *f1,*f2,*f3; + char blank[] = ""; + char errmsg[256] = ""; + int errcode; + int version; + int major; + int minor; + int patch; + + // Check for proper number of command line arguments + if (argc < 3) + { + printf( + "\nUsage:\n %s []\n", + argv[0]); + return 0; + } + // Get version number and display in Major.Minor.Patch format + ENgetversion(&version); + major = version/10000; + minor = (version%10000)/100; + patch = version%100; + printf("\n... Running EPANET Version %d.%d.%d\n", major, minor, patch); - /* Check for proper number of command line arguments */ - if (argc < 2) { - writeConsole(FMT03); - return(1); - } - - /* set inputfile name */ - f1 = argv[1]; - if (argc > 2) { - /* set rptfile name */ + // Assign pointers to file names + f1 = argv[1]; f2 = argv[2]; - } - else { - /* use stdout for rptfile */ - f2 = blank; - } - if (argc > 3) { - /* set binary output file name */ - f3 = argv[3]; - } - else { - /* NO binary output*/ - f3 = blank; - } + if (argc > 3) f3 = argv[3]; + else f3 = blank; - /* Call the main control function */ - if (strlen(f2)> 0) { - /* use stdout for progress messages */ - errcode = ENepanet(f1,f2,f3,writeConsole); - } - else { - /* use stdout for reporting, no progress messages */ - errcode = ENepanet(f1,f2,f3,NULL); - } + // Run EPANET + errcode = ENepanet(f1, f2, f3, &writeConsole); - /* Error/Warning check */ - if (errcode == 0) { - /* no errors */ - writeConsole(FMT09); - return(0); - } - else { - ENgeterror(errcode, errmsg, MAXMSG); - writeConsole(errmsg); - if (errcode > MAXWARNCODE) { - /* error */ - writeConsole(FMT11); - return(errcode); - } - else { - /* warning */ - writeConsole(FMT10); - return(0); - } - } + // Blank out the last progress message + printf("\r "); - -} /* End of main */ - - -void writeConsole(char *s) -/*---------------------------------------------------------------- - ** Input: text string - ** Output: none - ** Purpose: writes string of characters to console - **---------------------------------------------------------------- - */ -{ - fprintf(stdout,"%s\n",s); - fflush(stdout); + // Check for errors/warnings and report accordingly + if (errcode == 0) + { + printf("\n... EPANET ran successfully.\n"); + return 0; + } + else if (errcode < 100) + { + printf("\n... EPANET ran with warnings - check the Status Report.\n"); + return 0; + } + else + { + ENgeterror(errcode, errmsg, 255); + printf("\n... EPANET failed with %s.\n", errmsg); + return 100; + } } - - diff --git a/src/enumstxt.h b/src/enumstxt.h index 0863d0c..fdb9311 100755 --- a/src/enumstxt.h +++ b/src/enumstxt.h @@ -1,137 +1,134 @@ -/* -*********************************************************************** - -ENUMSTXT.H -- Text strings for enumerated data types in EPANET - -VERSION: 2.00 -DATE: 5/8/00 -AUTHOR: L. Rossman - US EPA - NRMRL - -********************************************************************** -*/ - -#ifndef ENUMSTXT_H -#define ENUMSTXT_H - -char *NodeTxt[] = {t_JUNCTION, - t_RESERVOIR, - t_TANK}; - -char *LinkTxt[] = {w_CV, - w_PIPE, - w_PUMP, - w_PRV, - w_PSV, - w_PBV, - w_FCV, - w_TCV, - w_GPV}; - -char *StatTxt[] = {t_XHEAD, - t_TEMPCLOSED, - t_CLOSED, - t_OPEN, - t_ACTIVE, - t_XFLOW, - t_XFCV, - t_XPRESSURE, - t_FILLING, - t_EMPTYING}; - -char *FormTxt[] = {w_HW, - w_DW, - w_CM}; - -char *RptFormTxt[] = {t_HW, - t_DW, - t_CM}; - -char *RptFlowUnitsTxt[] = {u_CFS, - u_GPM, - u_MGD, - u_IMGD, - u_AFD, - u_LPS, - u_LPM, - u_MLD, - u_CMH, - u_CMD}; - -char *FlowUnitsTxt[] = {w_CFS, - w_GPM, - w_MGD, - w_IMGD, - w_AFD, - w_LPS, - w_LPM, - w_MLD, - w_CMH, - w_CMD}; - -char *PressUnitsTxt[] = {w_PSI, - w_KPA, - w_METERS}; - -char *QualTxt[] = {w_NONE, - w_CHEM, - w_AGE, - w_TRACE}; - - -char *SourceTxt[] = {w_CONCEN, - w_MASS, - w_SETPOINT, - w_FLOWPACED}; - -char *ControlTxt[] = {w_BELOW, - w_ABOVE, - w_TIME, - w_CLOCKTIME}; - -char *TstatTxt[] = {w_NONE, - w_AVG, - w_MIN, - w_MAX, - w_RANGE}; - -char *MixTxt[] = {w_MIXED, - w_2COMP, - w_FIFO, - w_LIFO, - NULL}; - -char *RptFlagTxt[] = {w_NO, - w_YES, - w_FULL}; - -char *SectTxt[] = {s_TITLE, s_JUNCTIONS, s_RESERVOIRS, - s_TANKS, s_PIPES, s_PUMPS, - s_VALVES, s_CONTROLS, s_RULES, - s_DEMANDS, s_SOURCES, s_EMITTERS, - s_PATTERNS, s_CURVES, s_QUALITY, - s_STATUS, s_ROUGHNESS, s_ENERGY, - s_REACTIONS, s_MIXING, s_REPORT, - s_TIMES, s_OPTIONS, s_COORDS, - s_VERTICES, s_LABELS, s_BACKDROP, - s_TAGS, s_END, - NULL}; - -char *RptSectTxt[] = {NULL, t_JUNCTION, t_RESERVOIR, - t_TANK, t_PIPE, t_PUMP, - t_VALVE, t_CONTROL, t_RULE, - t_DEMANDFOR,t_SOURCE, t_EMITTER, - t_PATTERN, t_CURVE, t_QUALITY, - t_STATUS, t_ROUGHNESS,t_ENERGY, - t_REACTION, t_MIXING, t_REPORT, - t_TIME, t_OPTION}; - -char *Fldname[] = {t_ELEV, t_DEMAND, t_HEAD, - t_PRESSURE, t_QUALITY, t_LENGTH, - t_DIAM, t_FLOW, t_VELOCITY, - t_HEADLOSS, t_LINKQUAL, t_LINKSTATUS, - t_SETTING, t_REACTRATE, t_FRICTION, - "", "", "", "", "", "", NULL}; - - -#endif \ No newline at end of file +/* + ***************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: enumstxt.h + Description: text strings for enumerated data types + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 06/20/2019 + ****************************************************************************** +*/ + +#ifndef ENUMSTXT_H +#define ENUMSTXT_H +#include "text.h" + +char *NodeTxt[] = {t_JUNCTION, + t_RESERVOIR, + t_TANK}; + +char *LinkTxt[] = {w_CV, + w_PIPE, + w_PUMP, + w_PRV, + w_PSV, + w_PBV, + w_FCV, + w_TCV, + w_GPV}; + +char *StatTxt[] = {t_XHEAD, + t_TEMPCLOSED, + t_CLOSED, + t_OPEN, + t_ACTIVE, + t_XFLOW, + t_XFCV, + t_XPRESSURE, + t_FILLING, + t_EMPTYING, + t_OVERFLOWING}; + +char *FormTxt[] = {w_HW, + w_DW, + w_CM}; + +char *RptFormTxt[] = {t_HW, + t_DW, + t_CM}; + +char *RptFlowUnitsTxt[] = {u_CFS, + u_GPM, + u_MGD, + u_IMGD, + u_AFD, + u_LPS, + u_LPM, + u_MLD, + u_CMH, + u_CMD}; + +char *FlowUnitsTxt[] = {w_CFS, + w_GPM, + w_MGD, + w_IMGD, + w_AFD, + w_LPS, + w_LPM, + w_MLD, + w_CMH, + w_CMD}; + +char *PressUnitsTxt[] = {w_PSI, + w_KPA, + w_METERS}; + +char *DemandModelTxt[] = { w_DDA, + w_PDA, + NULL }; + +char *QualTxt[] = {w_NONE, + w_CHEM, + w_AGE, + w_TRACE}; + + +char *SourceTxt[] = {w_CONCEN, + w_MASS, + w_SETPOINT, + w_FLOWPACED}; + +char *ControlTxt[] = {w_BELOW, + w_ABOVE, + w_TIME, + w_CLOCKTIME}; + +char *TstatTxt[] = {w_NONE, + w_AVG, + w_MIN, + w_MAX, + w_RANGE}; + +char *MixTxt[] = {w_MIXED, + w_2COMP, + w_FIFO, + w_LIFO, + NULL}; + +char *RptFlagTxt[] = {w_NO, + w_YES, + w_FULL}; + +char *SectTxt[] = {s_TITLE, s_JUNCTIONS, s_RESERVOIRS, + s_TANKS, s_PIPES, s_PUMPS, + s_VALVES, s_CONTROLS, s_RULES, + s_DEMANDS, s_SOURCES, s_EMITTERS, + s_PATTERNS, s_CURVES, s_QUALITY, + s_STATUS, s_ROUGHNESS, s_ENERGY, + s_REACTIONS, s_MIXING, s_REPORT, + s_TIMES, s_OPTIONS, s_COORDS, + s_VERTICES, s_LABELS, s_BACKDROP, + s_TAGS, s_END, + NULL}; + +char *Fldname[] = {t_ELEV, t_DEMAND, t_HEAD, + t_PRESSURE, t_QUALITY, t_LENGTH, + t_DIAM, t_FLOW, t_VELOCITY, + t_HEADLOSS, t_LINKQUAL, t_LINKSTATUS, + t_SETTING, t_REACTRATE, t_FRICTION, + "", "", "", "", "", "", NULL}; + + +#endif diff --git a/src/epanet.c b/src/epanet.c old mode 100755 new mode 100644 index 27543b5..efc0535 --- a/src/epanet.c +++ b/src/epanet.c @@ -1,3167 +1,5578 @@ -/* -******************************************************************************* - -EPANET.C -- Hydraulic & Water Quality Simulator for Water Distribution Networks - -VERSION: 2.00 -DATE: 5/30/00 - 9/7/00 - 10/25/00 - 3/1/01 - 11/19/01 - 6/24/02 - 8/15/07 (2.00.11) - 2/14/08 (2.00.12) - AUTHORS: L. Rossman - US EPA - NRMRL - OpenWaterAnalytics members: see git stats for contributors - -EPANET performs extended period hydraulic and water quality analysis of -looped, pressurized piping networks. The program consists of the -following code modules: - - EPANET.C -- main module providing supervisory control - INPUT1.C -- controls processing of input data - INPUT2.C -- reads data from input file - INPUT3.C -- parses individual lines of input data - INPFILE.C -- saves modified input data to a text file - RULES.C -- implements rule-based control of piping system - HYDRAUL.C -- computes extended period hydraulic behavior - QUALITY.C -- tracks transport & fate of water quality - OUTPUT.C -- handles transfer of data to and from binary files - REPORT.C -- handles reporting of results to text file - SMATRIX.C -- sparse matrix linear equation solver routines - MEMPOOL.C -- memory allocation routines - HASH.C -- hash table routines - -The program can be compiled as either a stand-alone console application -or as a dynamic link library (DLL) of function calls depending on whether -the macro identifier 'DLL' is defined or not. - -See EPANET2.H for function prototypes of exported DLL functions -See FUNCS.H for prototypes of all other functions -See TYPES.H for declaration of global constants and data structures -See VARS.H for declaration of global variables -See TEXT.H for declaration of all string constants -See ENUMSTXT.H for assignment of string constants to enumerated types - -The following naming conventions are used in all modules of this program: -1. Names of exportable functions in the DLL begin with the "EN" prefix. -2. All other function names are lowercase. -3. Global variable names begin with an uppercase letter. -4. Local variable names are all lowercase. -5. Declared constants and enumerated values defined in TYPES.H are - all uppercase. -6. String constants defined in TEXT.H begin with a lower case character - followed by an underscore and then all uppercase characters (e.g. - t_HEADLOSS) - --------------------------------------------------------------------------- - -This is the main module of the EPANET program. It uses a series of -functions, all beginning with the letters EN, to control program behavior. -See the main() and ENepanet() functions below for the simplest example of -these. - -This module calls the following functions that reside in other modules: - RULES.C - initrules() - allocrules() - closerules() - INPUT1.C - getdata() - initreport() - INPUT2.C - netsize() - setreport() - HYDRAUL.C - openhyd() - inithyd() - runhyd() - nexthyd() - closehyd() - resistance() - tankvolume() - getenergy() - setlinkstatus() - setlinksetting() - QUALITY.C - openqual() - initqual() - runqual() - nextqual() - stepqual() - closequal() - REPORT.C - writeline() - writelogo() - writereport() - HASH.C - ENHashTablecreate() - ENHashTableFind() - ENHashTableFree() - -The macro ERRCODE(x) is defined in TYPES.H. It says if the current -value of the error code variable (errcode) is not fatal (< 100) then -execute function x and set the error code equal to its return value. - -******************************************************************************* -*/ - -/*** Need to define WINDOWS to use the getTmpName function ***/ //(2.00.12 - LR) -// --- define WINDOWS -#undef WINDOWS -#ifdef _WIN32 - #define WINDOWS -#endif -#ifdef __WIN32__ - #define WINDOWS -#endif -/************************************************************/ - -#include -#include -#include -#ifndef __APPLE__ -#include -#endif -#include -#include //(2.00.12 - LR) - -#include "text.h" -#include "types.h" -#include "enumstxt.h" -#include "funcs.h" -#define EXTERN -#include "vars.h" -#include "epanet2.h" - -void (* viewprog) (char *); /* Pointer to progress viewing function */ - - -/* ----------------------------------------------------------------- - Entry point used to compile a Windows DLL ----------------------------------------------------------------- -*/ - - -/* ----------------------------------------------------------------- - Functions for opening & closing the EPANET system ----------------------------------------------------------------- -*/ - - -/*** updated 3/1/01 ***/ -int DLLEXPORT ENepanet(char *f1, char *f2, char *f3, void (*pviewprog) (char *)) - -/*------------------------------------------------------------------------ -** Input: f1 = pointer to name of input file -** f2 = pointer to name of report file -** f3 = pointer to name of binary output file -** pviewprog = see note below -** Output: none -** Returns: error code -** Purpose: runs a complete EPANET simulation -** -** The pviewprog() argument is a pointer to a callback function -** that takes a character string (char *) as its only parameter. -** The function would reside in and be used by the calling -** program to display the progress messages that EPANET generates -** as it carries out its computations. If this feature is not -** needed then the argument should be NULL. -**------------------------------------------------------------------------- -*/ -{ - int errcode = 0; - viewprog = pviewprog; - ERRCODE(ENopen(f1,f2,f3)); - if (Hydflag != USE) ERRCODE(ENsolveH()); - ERRCODE(ENsolveQ()); - ERRCODE(ENreport()); - ENclose(); - return(MAX(errcode, Warnflag) ); -} - - -int DLLEXPORT ENopen(char *f1, char *f2, char *f3) -/*---------------------------------------------------------------- -** Input: f1 = pointer to name of input file -** f2 = pointer to name of report file -** f3 = pointer to name of binary output file -** Output: none -** Returns: error code -** Purpose: opens EPANET input file & reads in network data -**---------------------------------------------------------------- -*/ -{ - int errcode = 0; - -/*** Updated 9/7/00 ***/ -/* Reset math coprocessor */ -#ifdef DLL - _fpreset(); -#endif - -/* Set system flags */ - Openflag = FALSE; - OpenHflag = FALSE; - OpenQflag = FALSE; - SaveHflag = FALSE; - SaveQflag = FALSE; - Warnflag = FALSE; - Coordflag = TRUE; - -/*** Updated 9/7/00 ***/ - Messageflag = TRUE; - Rptflag = 1; - -/* Initialize global pointers to NULL. */ - initpointers(); - -/* Open input & report files */ - ERRCODE(openfiles(f1,f2,f3)); - if (errcode > 0) - { - errmsg(errcode); - return(errcode); - } - writelogo(); - -/* Find network size & allocate memory for data */ - writecon(FMT02); - writewin(FMT100); - ERRCODE(netsize()); - ERRCODE(allocdata()); - -/* Retrieve input data */ - ERRCODE(getdata()); - -/* Free temporary linked lists used for Patterns & Curves */ - freeTmplist(Patlist); - freeTmplist(Curvelist); - -/* If using previously saved hydraulics then open its file */ - if (Hydflag == USE) ERRCODE(openhydfile()); - -/* Write input summary to report file */ - if (!errcode) - { - if (Summaryflag) writesummary(); - writetime(FMT104); - Openflag = TRUE; - } - else errmsg(errcode); - return(errcode); -} - - -int DLLEXPORT ENsaveinpfile(char *filename) -/*---------------------------------------------------------------- -** Input: filename = name of INP file -** Output: none -** Returns: error code -** Purpose: saves current data base to file -**---------------------------------------------------------------- -*/ -{ - if (!Openflag) return(102); - return(saveinpfile(filename)); -} - - -int DLLEXPORT ENclose() -/*---------------------------------------------------------------- -** Input: none -** Output: none -** Returns: error code -** Purpose: frees all memory & files used by EPANET -**---------------------------------------------------------------- -*/ -{ - if (Openflag) writetime(FMT105); - freedata(); - - if (TmpOutFile != OutFile) //(2.00.12 - LR) - { //(2.00.12 - LR) - if (TmpOutFile != NULL) fclose(TmpOutFile); //(2.00.12 - LR) - remove(TmpFname); //(2.00.12 - LR) - } //(2.00.12 - LR) - TmpOutFile=NULL; - - if (InFile != NULL) { fclose(InFile); InFile=NULL; } - if (RptFile != NULL && RptFile != stdout) { fclose(RptFile); RptFile=NULL; } - if (HydFile != NULL) { fclose(HydFile); HydFile=NULL; } - if (OutFile != NULL) { fclose(OutFile); OutFile=NULL; } - - if (Hydflag == SCRATCH) remove(HydFname); //(2.00.12 - LR) - if (Outflag == SCRATCH) remove(OutFname); //(2.00.12 - LR) - - Openflag = FALSE; - OpenHflag = FALSE; - SaveHflag = FALSE; - OpenQflag = FALSE; - SaveQflag = FALSE; - return(0); -} - - -/* ----------------------------------------------------------------- - Functions for running a hydraulic analysis ----------------------------------------------------------------- -*/ - - -int DLLEXPORT ENsolveH() -/*---------------------------------------------------------------- -** Input: none -** Output: none -** Returns: error code -** Purpose: solves for network hydraulics in all time periods -**---------------------------------------------------------------- -*/ -{ - int errcode; - long t, tstep; - -/* Open hydraulics solver */ - errcode = ENopenH(); - if (!errcode) - { - /* Initialize hydraulics */ - errcode = ENinitH(EN_SAVE); - writecon(FMT14); - - /* Analyze each hydraulic period */ - if (!errcode) do - { - - /* Display progress message */ - -/*** Updated 6/24/02 ***/ - sprintf(Msg,"%-10s",clocktime(Atime,Htime)); - - writecon(Msg); - sprintf(Msg,FMT101,Atime); - writewin(Msg); - - /* Solve for hydraulics & advance to next time period */ - tstep = 0; - ERRCODE(ENrunH(&t)); - ERRCODE(ENnextH(&tstep)); - -/*** Updated 6/24/02 ***/ - writecon("\b\b\b\b\b\b\b\b\b\b"); - } - while (tstep > 0); - } - -/* Close hydraulics solver */ - -/*** Updated 6/24/02 ***/ - writecon("\b\b\b\b\b\b\b\b "); - - ENcloseH(); - errcode = MAX(errcode, Warnflag); - return(errcode); -} - - -int DLLEXPORT ENsaveH() -/*---------------------------------------------------------------- -** Input: none -** Output: none -** Returns: error code -** Purpose: saves hydraulic results to binary file. -** -** Must be called before ENreport() if no WQ simulation made. -** Should not be called if ENsolveQ() will be used. -**---------------------------------------------------------------- -*/ -{ - char tmpflag; - int errcode; - -/* Check if hydraulic results exist */ - if (!SaveHflag) return(104); - -/* Temporarily turn off WQ analysis */ - tmpflag = Qualflag; - Qualflag = NONE; - -/* Call WQ solver to simply transfer results */ -/* from Hydraulics file to Output file at */ -/* fixed length reporting time intervals. */ - errcode = ENsolveQ(); - -/* Restore WQ analysis option */ - Qualflag = tmpflag; - if (errcode) errmsg(errcode); - return(errcode); -} - - -int DLLEXPORT ENopenH() -/*---------------------------------------------------------------- -** Input: none -** Output: none -** Returns: error code -** Purpose: sets up data structures for hydraulic analysis -**---------------------------------------------------------------- -*/ -{ - int errcode = 0; - -/* Check that input data exists */ - OpenHflag = FALSE; - SaveHflag = FALSE; - if (!Openflag) return(102); - -/* Check that previously saved hydraulics file not in use */ - if (Hydflag == USE) return(107); - -/* Open hydraulics solver */ - ERRCODE(openhyd()); - if (!errcode) OpenHflag = TRUE; - else errmsg(errcode); - return(errcode); -} - - -/*** Updated 3/1/01 ***/ -int DLLEXPORT ENinitH(int flag) -/*---------------------------------------------------------------- -** Input: flag = 2-digit flag where 1st (left) digit indicates -** if link flows should be re-initialized (1) or -** not (0) and 2nd digit indicates if hydraulic -** results should be saved to file (1) or not (0) -** Output: none -** Returns: error code -** Purpose: initializes hydraulic analysis -**---------------------------------------------------------------- -*/ -{ - int errcode = 0; - int sflag, fflag; - -/* Reset status flags */ - SaveHflag = FALSE; - Warnflag = FALSE; - -/* Get values of save-to-file flag and reinitialize-flows flag */ - fflag = flag/EN_INITFLOW; - sflag = flag - fflag*EN_INITFLOW; - -/* Check that hydraulics solver was opened */ - if (!OpenHflag) return(103); - -/* Open hydraulics file */ - Saveflag = FALSE; - if (sflag > 0) - { - errcode = openhydfile(); - if (!errcode) Saveflag = TRUE; - else errmsg(errcode); - } - -/* Initialize hydraulics */ - inithyd(fflag); - if (Statflag > 0) writeheader(STATHDR,0); - return(errcode); -} - - -int DLLEXPORT ENrunH(long *t) -{ - int errcode; - *t = 0; - if (!OpenHflag) return(103); - errcode = runhyd(t); - if (errcode) errmsg(errcode); - return(errcode); -} - - -int DLLEXPORT ENnextH(long *tstep) -{ - int errcode; - *tstep = 0; - if (!OpenHflag) return(103); - errcode = nexthyd(tstep); - if (errcode) errmsg(errcode); - else if (Saveflag && *tstep == 0) SaveHflag = TRUE; - return(errcode); -} - - -int DLLEXPORT ENcloseH() - -{ - if (!Openflag) return(102); - closehyd(); - OpenHflag = FALSE; - return(0); -} - - -int DLLEXPORT ENsavehydfile(char *filename) -{ - FILE *f; - int c; - -/* Check that hydraulics results exist */ - if (HydFile == NULL || !SaveHflag) return(104); - -/* Open file */ - if ( (f = fopen(filename,"w+b")) == NULL) return(305); - -/* Copy from HydFile to f */ - fseek(HydFile, 0, SEEK_SET); - while ( (c = fgetc(HydFile)) != EOF) fputc(c, f); - fclose(f); - return(0); -} - - -int DLLEXPORT ENusehydfile(char *filename) -{ - int errcode; - -/* Check that input data exists & hydraulics system closed */ - if (!Openflag) return(102); - if (OpenHflag) return(108); - -/* Try to open hydraulics file */ - strncpy(HydFname, filename, MAXFNAME); - Hydflag = USE; - SaveHflag = TRUE; - errcode = openhydfile(); - -/* If error, then reset flags */ - if (errcode) - { - strcpy(HydFname, ""); - Hydflag = SCRATCH; - SaveHflag = FALSE; - } - return(errcode); -} - - -/* ----------------------------------------------------------------- - Functions for running a WQ analysis ----------------------------------------------------------------- -*/ - - -int DLLEXPORT ENsolveQ() -{ - int errcode; - long t, tstep; - -/* Open WQ solver */ - errcode = ENopenQ(); - if (!errcode) - { - /* Initialize WQ */ - errcode = ENinitQ(EN_SAVE); - if (Qualflag) writecon(FMT15); - else - { - writecon(FMT16); - writewin(FMT103); - } - - /* Analyze each hydraulic period */ - if (!errcode) do - { - - /* Display progress message */ - -/*** Updated 6/24/02 ***/ - sprintf(Msg,"%-10s",clocktime(Atime,Htime)); - - writecon(Msg); - if (Qualflag) - { - sprintf(Msg,FMT102,Atime); - writewin(Msg); - } - - /* Retrieve current network solution & update WQ to next time period */ - tstep = 0; - ERRCODE(ENrunQ(&t)); - ERRCODE(ENnextQ(&tstep)); - -/*** Updated 6/24/02 ***/ - writecon("\b\b\b\b\b\b\b\b\b\b"); - - } while (tstep > 0); - - } - -/* Close WQ solver */ - -/*** Updated 6/24/02 ***/ - writecon("\b\b\b\b\b\b\b\b "); - ENcloseQ(); - return(errcode); -} - - -int DLLEXPORT ENopenQ() -{ - int errcode = 0; - -/* Check that hydraulics results exist */ - OpenQflag = FALSE; - SaveQflag = FALSE; - if (!Openflag) return(102); - // !LT! todo - check for SaveHflag / set sequential/step mode - //if (!SaveHflag) return(104); - -/* Open WQ solver */ - ERRCODE(openqual()); - if (!errcode) OpenQflag = TRUE; - else errmsg(errcode); - return(errcode); -} - - -int DLLEXPORT ENinitQ(int saveflag) -{ - int errcode = 0; - if (!OpenQflag) return(105); - initqual(); - SaveQflag = FALSE; - Saveflag = FALSE; - if (saveflag) - { - errcode = openoutfile(); - if (!errcode) Saveflag = TRUE; - } - return(errcode); -} - - -int DLLEXPORT ENrunQ(long *t) -{ - int errcode; - *t = 0; - if (!OpenQflag) return(105); - errcode = runqual(t); - if (errcode) errmsg(errcode); - return(errcode); -} - - -int DLLEXPORT ENnextQ(long *tstep) -{ - int errcode; - *tstep = 0; - if (!OpenQflag) return(105); - errcode = nextqual(tstep); - if (!errcode && Saveflag && *tstep == 0) SaveQflag = TRUE; - if (errcode) errmsg(errcode); - return(errcode); -} - - -int DLLEXPORT ENstepQ(long *tleft) -{ - int errcode; - *tleft = 0; - if (!OpenQflag) return(105); - errcode = stepqual(tleft); - if (!errcode && Saveflag && *tleft == 0) SaveQflag = TRUE; - if (errcode) errmsg(errcode); - return(errcode); -} - - -int DLLEXPORT ENcloseQ() - -{ - if (!Openflag) return(102); - closequal(); - OpenQflag = FALSE; - return(0); -} - - -/* ----------------------------------------------------------------- - Functions for generating an output report ----------------------------------------------------------------- -*/ - - -int DLLEXPORT ENwriteline(char *line) -{ - if (!Openflag) return(102); - writeline(line); - return(0); -} - - -int DLLEXPORT ENreport() -{ - int errcode; - -/* Check if results saved to binary output file */ - if (!SaveQflag) return(106); - errcode = writereport(); - if (errcode) errmsg(errcode); - return(errcode); -} - - -int DLLEXPORT ENresetreport() -{ - int i; - if (!Openflag) return(102); - initreport(); - for (i=1; i<=Nnodes; i++) Node[i].Rpt = 0; - for (i=1; i<=Nlinks; i++) Link[i].Rpt = 0; - return(0); -} - - -int DLLEXPORT ENsetreport(char *s) -{ - char s1[MAXLINE+1]; - if (!Openflag) return(102); - if (strlen(s) > MAXLINE) return(250); - strcpy(s1,s); - if (setreport(s1) > 0) return(250); - else return(0); -} - - -/* ----------------------------------------------------------------- - Functions for retrieving network information ----------------------------------------------------------------- -*/ - -/*** Updated 10/25/00 ***/ -int DLLEXPORT ENgetversion(int *v) -/*---------------------------------------------------------------- -** Input: none -** Output: *v = version number of the source code -** Returns: error code (should always be 0) -** Purpose: retrieves a number assigned to the most recent -** update of the source code. This number, set by the -** constant CODEVERSION found in TYPES.H, is to be -** interpreted with implied decimals, i.e., "20100" == "2(.)01(.)00" -**---------------------------------------------------------------- -*/ -{ - *v = CODEVERSION; - return(0); -} - - -int DLLEXPORT ENgetcontrol(int cindex, int *ctype, int *lindex, EN_API_FLOAT_TYPE *setting, int *nindex, EN_API_FLOAT_TYPE *level) -{ - double s, lvl; - - s = 0.0; - lvl = 0.0; - *ctype = 0; - *lindex = 0; - *nindex = 0; - if (!Openflag) return(102); - if (cindex < 1 || cindex > Ncontrols) return(241); - *ctype = Control[cindex].Type; - *lindex = Control[cindex].Link; - s = Control[cindex].Setting; - if (Control[cindex].Setting != MISSING) switch (Link[*lindex].Type) - { - case PRV: - case PSV: - case PBV: s *= Ucf[PRESSURE]; break; - case FCV: s *= Ucf[FLOW]; - } - else if (Control[cindex].Status == OPEN) s = 1.0; - -/*** Updated 3/1/01 ***/ - else s = 0.0; - - *nindex = Control[cindex].Node; - if (*nindex > Njuncs) - lvl = (Control[cindex].Grade - Node[*nindex].El)*Ucf[ELEV]; - else if (*nindex > 0) - lvl = (Control[cindex].Grade - Node[*nindex].El)*Ucf[PRESSURE]; - else - lvl = (EN_API_FLOAT_TYPE)Control[cindex].Time; - *setting = (EN_API_FLOAT_TYPE)s; - *level = (EN_API_FLOAT_TYPE)lvl; - return(0); -} - - -int DLLEXPORT ENgetcount(int code, int *count) -{ - *count = 0; - if (!Openflag) return(102); - switch (code) - { - case EN_NODECOUNT: *count = Nnodes; break; - case EN_TANKCOUNT: *count = Ntanks; break; - case EN_LINKCOUNT: *count = Nlinks; break; - case EN_PATCOUNT: *count = Npats; break; - case EN_CURVECOUNT: *count = Ncurves; break; - case EN_CONTROLCOUNT: *count = Ncontrols; break; - default: return(251); - } - return(0); -} - - -int DLLEXPORT ENgetoption(int code, EN_API_FLOAT_TYPE *value) -{ - double v = 0.0; - *value = 0.0; - if (!Openflag) return(102); - switch (code) - { - case EN_TRIALS: v = (double)MaxIter; - break; - case EN_ACCURACY: v = Hacc; - break; - case EN_TOLERANCE: v = Ctol*Ucf[QUALITY]; - break; - case EN_EMITEXPON: if (Qexp > 0.0) v = 1.0/Qexp; - break; - case EN_DEMANDMULT: v = Dmult; - break; - default: return(251); - } - *value = (EN_API_FLOAT_TYPE)v; - return(0); -} - - -int DLLEXPORT ENgettimeparam(int code, long *value) -{ - *value = 0; - if (!Openflag) return(102); - if (code < EN_DURATION || code > EN_NEXTEVENT) return(251); - switch (code) - { - case EN_DURATION: *value = Dur; break; - case EN_HYDSTEP: *value = Hstep; break; - case EN_QUALSTEP: *value = Qstep; break; - case EN_PATTERNSTEP: *value = Pstep; break; - case EN_PATTERNSTART: *value = Pstart; break; - case EN_REPORTSTEP: *value = Rstep; break; - case EN_REPORTSTART: *value = Rstart; break; - case EN_STATISTIC: *value = Tstatflag; break; - case EN_RULESTEP: *value = Rulestep; break; - case EN_PERIODS: *value = Nperiods; break; - case EN_STARTTIME: *value = Tstart; break; /* Added TNT 10/2/2009 */ - case EN_HTIME: *value = Htime; break; - case EN_NEXTEVENT: - *value = Hstep; // find the lesser of the hydraulic time step length, or the time to next fill/empty - tanktimestep(value); - break; - } - return(0); -} - - -int DLLEXPORT ENgetflowunits(int *code) -{ - *code = -1; - if (!Openflag) return(102); - *code = Flowflag; - return(0); -} - - -int DLLEXPORT ENgetpatternindex(char *id, int *index) -{ - int i; - *index = 0; - if (!Openflag) return(102); - for (i=1; i<=Npats; i++) - { - if (strcmp(id, Pattern[i].ID) == 0) - { - *index = i; - return(0); - } - } - *index = 0; - return(205); -} - - -int DLLEXPORT ENgetpatternid(int index, char *id) -{ - strcpy(id,""); - if (!Openflag) return(102); - if (index < 1 || index > Npats) return(205); - strcpy(id,Pattern[index].ID); - return(0); -} - - -int DLLEXPORT ENgetpatternlen(int index, int *len) -{ - if (!Openflag) return(102); - if (index < 1 || index > Npats) return(205); - *len = Pattern[index].Length; - return(0); -} - - -int DLLEXPORT ENgetpatternvalue(int index, int period, EN_API_FLOAT_TYPE *value) -{ *value = 0.0; - if (!Openflag) return(102); - if (index < 1 || index > Npats) return(205); - if (period < 1 || period > Pattern[index].Length) return(251); - *value = (EN_API_FLOAT_TYPE)Pattern[index].F[period-1]; - return(0); -} - - -int DLLEXPORT ENgetcurveindex(char *id, int *index) -{ - int i; - *index = 0; - if (!Openflag) return(102); - for (i=1; i<=Ncurves; i++) - { - if (strcmp(id, Curve[i].ID) == 0) - { - *index = i; - return(0); - } - } - *index = 0; - return(206); -} - - -int DLLEXPORT ENgetcurveid(int index, char *id) -{ - strcpy(id,""); - if (!Openflag) return(102); - if (index < 1 || index > Ncurves) return(206); - strcpy(id,Curve[index].ID); - return(0); -} - - -int DLLEXPORT ENgetcurvelen(int index, int *len) -{ - if (!Openflag) return(102); - if (index < 1 || index > Ncurves) return(206); - *len = Curve[index].Npts; - return(0); -} - - -int DLLEXPORT ENgetcurvevalue(int index, int pnt, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y) -{ - *x = 0.0; - *y = 0.0; - if (!Openflag) return(102); - if (index < 1 || index > Ncurves) return(206); - if (pnt < 1 || pnt > Curve[index].Npts) return(251); - *x = (EN_API_FLOAT_TYPE)Curve[index].X[pnt-1]; - *y = (EN_API_FLOAT_TYPE)Curve[index].Y[pnt-1]; - return(0); -} - - -int DLLEXPORT ENgetqualtype(int *qualcode, int *tracenode) -{ - *tracenode = 0; - if (!Openflag) return(102); - *qualcode = Qualflag; - if (Qualflag == TRACE) *tracenode = TraceNode; - return(0); -} - -int DLLEXPORT ENgetqualinfo(int *qualcode, char *chemname, char *chemunits, int *tracenode) -{ - ENgetqualtype(qualcode, tracenode); - if (Qualflag == TRACE) { - strncpy(chemname, "", MAXID); - strncpy(chemunits, "dimensionless", MAXID); - } - else { - strncpy(chemname,ChemName,MAXID); - strncpy(chemunits,ChemUnits,MAXID); - } - return 0; -} - -int DLLEXPORT ENgeterror(int errcode, char *errmsg, int n) -{ - switch (errcode) - { - case 1: strncpy(errmsg,WARN1,n); break; - case 2: strncpy(errmsg,WARN2,n); break; - case 3: strncpy(errmsg,WARN3,n); break; - case 4: strncpy(errmsg,WARN4,n); break; - case 5: strncpy(errmsg,WARN5,n); break; - case 6: strncpy(errmsg,WARN6,n); break; - default: strncpy(errmsg,geterrmsg(errcode),n); - } - if (strlen(errmsg) == 0) return(251); - else return(0); -} - -int DLLEXPORT ENgetstatistic(int code, EN_API_FLOAT_TYPE* value) -{ - switch (code) { - case EN_ITERATIONS: - *value = (EN_API_FLOAT_TYPE)_iterations; - break; - case EN_RELATIVEERROR: - *value = (EN_API_FLOAT_TYPE)_relativeError; - break; - default: - break; - } - return 0; -} - -/* ----------------------------------------------------------------- - Functions for retrieving node data ----------------------------------------------------------------- -*/ - - -int DLLEXPORT ENgetnodeindex(char *id, int *index) -{ - *index = 0; - if (!Openflag) return(102); - *index = findnode(id); - if (*index == 0) return(203); - else return(0); -} - - -int DLLEXPORT ENgetnodeid(int index, char *id) -{ - strcpy(id,""); - if (!Openflag) return(102); - if (index < 1 || index > Nnodes) return(203); - strcpy(id,Node[index].ID); - return(0); -} - - -int DLLEXPORT ENgetnodetype(int index, int *code) -{ - *code = -1; - if (!Openflag) return(102); - if (index < 1 || index > Nnodes) return(203); - if (index <= Njuncs) *code = EN_JUNCTION; - else - { - if (Tank[index-Njuncs].A == 0.0) *code = EN_RESERVOIR; - else *code = EN_TANK; - } - return(0); -} - - -int DLLEXPORT ENgetcoord(int index, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y) -{ - if (!Openflag) return(102); - if (index < 1 || index > Nnodes) return(203); - if (!Coordflag) return(255); - - // check if node have coords - if (Coord[index].HaveCoords == FALSE) return(254); - - *x = Coord[index].X; - *y = Coord[index].Y; - return 0; -} - - -int DLLEXPORT ENsetcoord(int index, EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y) -{ - if (!Openflag) return(102); - if (index < 1 || index > Nnodes) return(203); - if (!Coordflag) return(255); - - Coord[index].X = x; - Coord[index].Y = y; - Coord[index].HaveCoords = TRUE; - return 0; -} - - -int DLLEXPORT ENgetnodevalue(int index, int code, EN_API_FLOAT_TYPE *value) -{ - double v = 0.0; - Pdemand demand; - Psource source; - -/* Check for valid arguments */ - *value = 0.0; - if (!Openflag) return(102); - if (index <= 0 || index > Nnodes) return(203); - -/* Retrieve called-for parameter */ - switch (code) - { - case EN_ELEVATION: - v = Node[index].El*Ucf[ELEV]; - break; - - case EN_BASEDEMAND: - v = 0.0; - /* NOTE: primary demand category is last on demand list */ - if (index <= Njuncs) - for (demand = Node[index].D; demand != NULL; demand = demand->next) - v = (demand->Base); - v *= Ucf[FLOW]; - break; - - case EN_PATTERN: - v = 0.0; - /* NOTE: primary demand category is last on demand list */ - if (index <= Njuncs) - { - for (demand = Node[index].D; demand != NULL; demand = demand->next) - v = (double)(demand->Pat); - } - else v = (double)(Tank[index-Njuncs].Pat); - break; - - case EN_EMITTER: - v = 0.0; - if (Node[index].Ke > 0.0) - v = Ucf[FLOW]/pow((Ucf[PRESSURE]*Node[index].Ke),(1.0/Qexp)); - break; - - case EN_INITQUAL: - v = Node[index].C0*Ucf[QUALITY]; - break; - -/*** Additional parameters added for retrieval ***/ //(2.00.11 - LR) - case EN_SOURCEQUAL: - case EN_SOURCETYPE: - case EN_SOURCEMASS: - case EN_SOURCEPAT: - source = Node[index].S; - if (source == NULL) return(240); - if (code == EN_SOURCEQUAL) v = source->C0; - else if (code == EN_SOURCEMASS) v = source->Smass*60.0; - else if (code == EN_SOURCEPAT) v = source->Pat; - else v = source->Type; - break; - - case EN_TANKLEVEL: - if (index <= Njuncs) return(251); - v = (Tank[index-Njuncs].H0 - Node[index].El)*Ucf[ELEV]; - break; - -/*** New parameter added for retrieval ***/ //(2.00.11 - LR) - case EN_INITVOLUME: //(2.00.11 - LR) - v = 0.0; //(2.00.11 - LR) - if ( index > Njuncs ) v = Tank[index-Njuncs].V0*Ucf[VOLUME]; //(2.00.11 - LR) - break; //(2.00.11 - LR) - -/*** New parameter added for retrieval ***/ //(2.00.11 - LR) - case EN_MIXMODEL: //(2.00.11 - LR) - v = MIX1; //(2.00.11 - LR) - if ( index > Njuncs ) v = Tank[index-Njuncs].MixModel; //(2.00.11 - LR) - break; //(2.00.11 - LR) - -/*** New parameter added for retrieval ***/ //(2.00.11 - LR) - case EN_MIXZONEVOL: //(2.00.11 - LR) - v = 0.0; //(2.00.11 - LR) - if ( index > Njuncs ) v = Tank[index-Njuncs].V1max*Ucf[VOLUME]; //(2.00.11 - LR) - break; //(2.00.11 - LR) - - case EN_DEMAND: - v = NodeDemand[index]*Ucf[FLOW]; - break; - - case EN_HEAD: - v = NodeHead[index]*Ucf[HEAD]; - break; - - case EN_PRESSURE: - v = (NodeHead[index] - Node[index].El)*Ucf[PRESSURE]; - break; - - case EN_QUALITY: - v = NodeQual[index]*Ucf[QUALITY]; - break; - -/*** New parameters added for retrieval begins here ***/ //(2.00.12 - LR) -/*** (Thanks to Nicolas Basile of Ecole Polytechnique ***/ -/*** de Montreal for suggesting some of these.) ***/ - - case EN_TANKDIAM: - v = 0.0; - if ( index > Njuncs ) - { - v = sqrt(4.0/PI*Tank[index-Njuncs].A)*Ucf[ELEV]; - } - break; - - case EN_MINVOLUME: - v = 0.0; - if ( index > Njuncs ) v = Tank[index-Njuncs].Vmin * Ucf[VOLUME]; - break; - - case EN_MAXVOLUME: // !sph - v = 0.0; - if ( index > Njuncs ) v = Tank[index-Njuncs].Vmax * Ucf[VOLUME]; - break; - - case EN_VOLCURVE: - v = 0.0; - if ( index > Njuncs ) v = Tank[index-Njuncs].Vcurve; - break; - - case EN_MINLEVEL: - v = 0.0; - if ( index > Njuncs ) - { - v = (Tank[index-Njuncs].Hmin - Node[index].El) * Ucf[ELEV]; - } - break; - - case EN_MAXLEVEL: - v = 0.0; - if ( index > Njuncs ) - { - v = (Tank[index-Njuncs].Hmax - Node[index].El) * Ucf[ELEV]; - } - break; - - case EN_MIXFRACTION: - v = 1.0; - if ( index > Njuncs && Tank[index-Njuncs].Vmax > 0.0) - { - v = Tank[index-Njuncs].V1max / Tank[index-Njuncs].Vmax; - } - break; - - case EN_TANK_KBULK: - v = 0.0; - if (index > Njuncs) v = Tank[index-Njuncs].Kb * SECperDAY; - break; - -/*** New parameter additions ends here. ***/ //(2.00.12 - LR) - - case EN_TANKVOLUME: - if (index <= Njuncs) return(251); - v = tankvolume(index-Njuncs, NodeHead[index])*Ucf[VOLUME]; - break; - - default: return(251); - } - *value = (EN_API_FLOAT_TYPE)v; - return(0); -} - - -/* ----------------------------------------------------------------- - Functions for retrieving link data ----------------------------------------------------------------- -*/ - - -int DLLEXPORT ENgetlinkindex(char *id, int *index) -{ - *index = 0; - if (!Openflag) return(102); - *index = findlink(id); - if (*index == 0) return(204); - else return(0); -} - - -int DLLEXPORT ENgetlinkid(int index, char *id) -{ - strcpy(id,""); - if (!Openflag) return(102); - if (index < 1 || index > Nlinks) return(204); - strcpy(id,Link[index].ID); - return(0); -} - - -int DLLEXPORT ENgetlinktype(int index, int *code) -{ - *code = -1; - if (!Openflag) return(102); - if (index < 1 || index > Nlinks) return(204); - *code = Link[index].Type; - return(0); -} - - -int DLLEXPORT ENgetlinknodes(int index, int *node1, int *node2) -{ - *node1 = 0; - *node2 = 0; - if (!Openflag) return(102); - if (index < 1 || index > Nlinks) return(204); - *node1 = Link[index].N1; - *node2 = Link[index].N2; - return(0); -} - - -int DLLEXPORT ENgetlinkvalue(int index, int code, EN_API_FLOAT_TYPE *value) -{ - double a,h,q, v = 0.0; - -/* Check for valid arguments */ - *value = 0.0; - if (!Openflag) return(102); - if (index <= 0 || index > Nlinks) return(204); - -/* Retrieve called-for parameter */ - switch (code) - { - case EN_DIAMETER: - if (Link[index].Type == PUMP) v = 0.0; - else v = Link[index].Diam*Ucf[DIAM]; - break; - - case EN_LENGTH: - v = Link[index].Len*Ucf[ELEV]; - break; - - case EN_ROUGHNESS: - if (Link[index].Type <= PIPE) - { - if (Formflag == DW) - v = Link[index].Kc*(1000.0*Ucf[ELEV]); - else v = Link[index].Kc; - } - else v = 0.0; - break; - - case EN_MINORLOSS: - if (Link[index].Type != PUMP) - { - v = Link[index].Km; - v *= (SQR(Link[index].Diam)*SQR(Link[index].Diam)/0.02517); - } - else v = 0.0; - break; - - case EN_INITSTATUS: - if (Link[index].Stat <= CLOSED) v = 0.0; - else v = 1.0; - break; - - case EN_INITSETTING: - if (Link[index].Type == PIPE || Link[index].Type == CV) - return(ENgetlinkvalue(index, EN_ROUGHNESS, value)); - v = Link[index].Kc; - switch (Link[index].Type) - { - case PRV: - case PSV: - case PBV: v *= Ucf[PRESSURE]; break; - case FCV: v *= Ucf[FLOW]; - } - break; - - case EN_KBULK: - v = Link[index].Kb*SECperDAY; - break; - - case EN_KWALL: - v = Link[index].Kw*SECperDAY; - break; - - case EN_FLOW: - -/*** Updated 10/25/00 ***/ - if (LinkStatus[index] <= CLOSED) v = 0.0; - else v = Q[index]*Ucf[FLOW]; - break; - - case EN_VELOCITY: - if (Link[index].Type == PUMP) v = 0.0; - -/*** Updated 11/19/01 ***/ - else if (LinkStatus[index] <= CLOSED) v = 0.0; - - else - { - q = ABS(Q[index]); - a = PI*SQR(Link[index].Diam)/4.0; - v = q/a*Ucf[VELOCITY]; - } - break; - - case EN_HEADLOSS: - -/*** Updated 11/19/01 ***/ - if (LinkStatus[index] <= CLOSED) v = 0.0; - - else - { - h = NodeHead[Link[index].N1] - NodeHead[Link[index].N2]; - if (Link[index].Type != PUMP) h = ABS(h); - v = h*Ucf[HEADLOSS]; - } - break; - - case EN_STATUS: - if (LinkStatus[index] <= CLOSED) v = 0.0; - else v = 1.0; - break; - - case EN_SETTING: - if (Link[index].Type == PIPE || Link[index].Type == CV) { - return(ENgetlinkvalue(index, EN_ROUGHNESS, value)); - } - if (LinkSetting[index] == MISSING) { - v = 0.0; - } - else { - v = LinkSetting[index]; - } - switch (Link[index].Type) - { - case PRV: - case PSV: - case PBV: v *= Ucf[PRESSURE]; break; - case FCV: v *= Ucf[FLOW]; - } - break; - - case EN_ENERGY: - getenergy(index, &v, &a); - break; - - case EN_LINKQUAL: - v = avgqual(index) * Ucf[LINKQUAL]; - break; - - case EN_LINKPATTERN: - if (Link[index].Type == PUMP) - v = (double)Pump[PUMPINDEX(index)].Upat; - break; - - default: return(251); - } - *value = (EN_API_FLOAT_TYPE)v; - return(0); -} - - -int DLLEXPORT ENgetcurve(int curveIndex, char *id, int *nValues, EN_API_FLOAT_TYPE **xValues, EN_API_FLOAT_TYPE **yValues) -{ - int iPoint, nPoints; - Scurve curve; - EN_API_FLOAT_TYPE *pointX, *pointY; - -/* Check that input file opened */ - if (!Openflag) return(102); - - curve = Curve[curveIndex]; - nPoints = curve.Npts; - - pointX = calloc(nPoints, sizeof(EN_API_FLOAT_TYPE)); - pointY = calloc(nPoints, sizeof(EN_API_FLOAT_TYPE)); - - for (iPoint = 0; iPoint < nPoints; iPoint++) { - double x = curve.X[iPoint] * Ucf[LENGTH]; - double y = curve.Y[iPoint] * Ucf[VOLUME]; - pointX[iPoint] = (EN_API_FLOAT_TYPE)x; - pointY[iPoint] = (EN_API_FLOAT_TYPE)y; - } - - strncpy(id,"", MAXID); - strncpy(id, curve.ID, MAXID); - *nValues = nPoints; - *xValues = pointX; - *yValues = pointY; - - return(0); -} - - -/* ----------------------------------------------------------------- - Functions for changing network data ----------------------------------------------------------------- -*/ - - -int DLLEXPORT ENsetcontrol(int cindex, int ctype, int lindex, - EN_API_FLOAT_TYPE setting, int nindex, EN_API_FLOAT_TYPE level) -{ - char status = ACTIVE; - long t = 0; - double s = setting, lvl = level; - -/* Check that input file opened */ - if (!Openflag) return(102); - -/* Check that control exists */ - if (cindex < 1 || cindex > Ncontrols) return(241); - -/* Check that controlled link exists */ - if (lindex == 0) - { - Control[cindex].Link = 0; - return(0); - } - if (lindex < 0 || lindex > Nlinks) return(204); - -/* Cannot control check valve. */ - if (Link[lindex].Type == CV) return(207); - -/* Check for valid parameters */ - if (ctype < 0 || ctype > EN_TIMEOFDAY) return(251); - if (ctype == EN_LOWLEVEL || ctype == EN_HILEVEL) - { - if (nindex < 1 || nindex > Nnodes) return(203); - } - else nindex = 0; - if (s < 0.0 || lvl < 0.0) return(202); - -/* Adjust units of control parameters */ - switch (Link[lindex].Type) - { - case PRV: - case PSV: - case PBV: s /= Ucf[PRESSURE]; - break; - case FCV: s /= Ucf[FLOW]; - break; - -/*** Updated 9/7/00 ***/ - case GPV: if (s == 0.0) status = CLOSED; - else if (s == 1.0) status = OPEN; - else return(202); - s = Link[lindex].Kc; - break; - - case PIPE: - case PUMP: status = OPEN; - if (s == 0.0) status = CLOSED; - } - if (ctype == LOWLEVEL || ctype == HILEVEL) - { - if (nindex > Njuncs) lvl = Node[nindex].El + level/Ucf[ELEV]; - else lvl = Node[nindex].El + level/Ucf[PRESSURE]; - } - if (ctype == TIMER) t = (long)ROUND(lvl); - if (ctype == TIMEOFDAY) t = (long)ROUND(lvl) % SECperDAY; - -/* Reset control's parameters */ - Control[cindex].Type = (char)ctype; - Control[cindex].Link = lindex; - Control[cindex].Node = nindex; - Control[cindex].Status = status; - Control[cindex].Setting = s; - Control[cindex].Grade = lvl; - Control[cindex].Time = t; - return(0); -} - - -int DLLEXPORT ENsetnodevalue(int index, int code, EN_API_FLOAT_TYPE v) -/*---------------------------------------------------------------- -** Input: index = node index -** code = node parameter code (see EPANET2.H) -** value = parameter value -** Output: none -** Returns: error code -** Purpose: sets input parameter value for a node -**---------------------------------------------------------------- -*/ -{ - int j; - Pdemand demand; - Psource source; - double Htmp; - double value = v; - - if (!Openflag) return(102); - if (index <= 0 || index > Nnodes) return(203); - switch (code) - { - case EN_ELEVATION: - if (index <= Njuncs) Node[index].El = value/Ucf[ELEV]; - else - { - value = (value/Ucf[ELEV]) - Node[index].El; - j = index - Njuncs; - Tank[j].H0 += value; - Tank[j].Hmin += value; - Tank[j].Hmax += value; - Node[index].El += value; - NodeHead[index] += value; - } - break; - - case EN_BASEDEMAND: - /* NOTE: primary demand category is last on demand list */ - if (index <= Njuncs) - { - for (demand = Node[index].D; demand != NULL; demand = demand ->next) - { - if (demand->next == NULL) demand->Base = value/Ucf[FLOW]; - } - } - break; - - case EN_PATTERN: - /* NOTE: primary demand category is last on demand list */ - j = ROUND(value); - if (j < 0 || j > Npats) return(205); - if (index <= Njuncs) - { - for (demand = Node[index].D; demand != NULL; demand = demand ->next) - { - if (demand->next == NULL) demand->Pat = j; - } - } - else Tank[index-Njuncs].Pat = j; - break; - - case EN_EMITTER: - if (index > Njuncs) return(203); - if (value < 0.0) return(202); - if (value > 0.0) - value = pow((Ucf[FLOW]/value),Qexp)/Ucf[PRESSURE]; - Node[index].Ke = value; - break; - - case EN_INITQUAL: - if (value < 0.0) return(202); - Node[index].C0 = value/Ucf[QUALITY]; - if (index > Njuncs) Tank[index-Njuncs].C = Node[index].C0; - break; - - case EN_SOURCEQUAL: - case EN_SOURCETYPE: - case EN_SOURCEPAT: - if (value < 0.0) return(202); - source = Node[index].S; - if (source == NULL) - { - source = (struct Ssource *) malloc(sizeof(struct Ssource)); - if (source == NULL) return(101); - source->Type = CONCEN; - source->C0 = 0.0; - source->Pat = 0; - Node[index].S = source; - } - if (code == EN_SOURCEQUAL) { - source->C0 = value; - } - else if (code == EN_SOURCEPAT) - { - j = ROUND(value); - if (j < 0 || j > Npats) return(205); - source->Pat = j; - } - else // code == EN_SOURCETYPE - { - j = ROUND(value); - if ( j < CONCEN || j > FLOWPACED) return(251); - else source->Type = (char)j; - } - return(0); - - case EN_TANKLEVEL: - if (index <= Njuncs) return(251); - j = index - Njuncs; - if (Tank[j].A == 0.0) /* Tank is a reservoir */ - { - Tank[j].H0 = value/Ucf[ELEV]; - Tank[j].Hmin = Tank[j].H0; - Tank[j].Hmax = Tank[j].H0; - Node[index].El = Tank[j].H0; - NodeHead[index] = Tank[j].H0; - } - else - { - value = Node[index].El + value/Ucf[ELEV]; - if (value > Tank[j].Hmax - || value < Tank[j].Hmin) return(202); - Tank[j].H0 = value; - Tank[j].V0 = tankvolume(j, Tank[j].H0); - // Resetting Volume in addition to initial volume - Tank[j].V = Tank[j].V0; - NodeHead[index] = Tank[j].H0; - } - break; - -/*** New parameters added for retrieval begins here ***/ //(2.00.12 - LR) -/*** (Thanks to Nicolas Basile of Ecole Polytechnique ***/ -/*** de Montreal for suggesting some of these.) ***/ - - case EN_TANKDIAM: - if (value <= 0.0) return(202); - if (index <= Njuncs) return(251); - j = index - Njuncs; - if (j > 0 && Tank[j].A > 0.0) - { - value /= Ucf[ELEV]; - Tank[j].A = PI*SQR(value)/4.0; - Tank[j].Vmin = tankvolume(j, Tank[j].Hmin); - Tank[j].V0 = tankvolume(j, Tank[j].H0); - Tank[j].Vmax = tankvolume(j, Tank[j].Hmax); - } - else - { - return(251); - } - break; - - case EN_MINVOLUME: - if (value < 0.0) return(202); - if (index <= Njuncs) return(251); - j = index - Njuncs; - if (j > 0 && Tank[j].A > 0.0) - { - Tank[j].Vmin = value/Ucf[VOLUME]; - Tank[j].V0 = tankvolume(j, Tank[j].H0); - Tank[j].Vmax = tankvolume(j, Tank[j].Hmax); - } - else - { - return(251); - } - break; - - case EN_MINLEVEL: - if (value < 0.0) return(202); - if (index <= Njuncs) return(251); //not a tank or reservoir - j = index - Njuncs; - if (Tank[j].A == 0.0) return(251); //node is a reservoir - Htmp = value/Ucf[ELEV] + Node[index].El; - if (Htmp < Tank[j].Hmax && Htmp <= Tank[j].H0) - { - if (Tank[j].Vcurve > 0) return(202); - Tank[j].Hmin = Htmp; - Tank[j].Vmin = tankvolume(j, Tank[j].Hmin); - } - else - { - return(251); - } - break; - - case EN_MAXLEVEL: - if (value < 0.0) return(202); - if (index <= Njuncs) return(251); //not a tank or reservoir - j = index - Njuncs; - if (Tank[j].A == 0.0) return(251); //node is a reservoir - Htmp = value/Ucf[ELEV] + Node[index].El; - if (Htmp > Tank[j].Hmin && Htmp >= Tank[j].H0) - { - if (Tank[j].Vcurve > 0) return(202); - Tank[j].Hmax = Htmp; - Tank[j].Vmax = tankvolume(j, Tank[j].Hmax); - } - else - { - return(251); - } - break; - - case EN_MIXMODEL: - j = ROUND(value); - if (index <= Njuncs) return(251); - if (j < MIX1 || j > LIFO) return(202); - if (index > Njuncs && Tank[index-Njuncs].A > 0.0) - { - Tank[index-Njuncs].MixModel = (char)j; - } - else - { - return(251); - } - break; - - case EN_MIXFRACTION: - if (value < 0.0 || value > 1.0) return(202); - if (index <= Njuncs) return(251); - j = index - Njuncs; - if (j > 0 && Tank[j].A > 0.0) - { - Tank[j].V1max = value*Tank[j].Vmax; - } - break; - - case EN_TANK_KBULK: - if (index <= Njuncs) return(251); - j = index - Njuncs; - if (j > 0 && Tank[j].A > 0.0) - { - Tank[j].Kb = value/SECperDAY; - Reactflag = 1; - } - else - { - return(251); - } - break; - -/*** New parameter additions ends here. ***/ //(2.00.12 - LR) - - default: return(251); - } - return(0); -} - - -int DLLEXPORT ENsetlinkvalue(int index, int code, EN_API_FLOAT_TYPE v) -/*---------------------------------------------------------------- -** Input: index = link index -** code = link parameter code (see EPANET2.H) -** v = parameter value -** Output: none -** Returns: error code -** Purpose: sets input parameter value for a link -**---------------------------------------------------------------- -*/ -{ - char s; - double r, value = v; - - if (!Openflag) return(102); - if (index <= 0 || index > Nlinks) return(204); - switch (code) - { - case EN_DIAMETER: - if (Link[index].Type != PUMP) - { - if (value <= 0.0) return(202); - value /= Ucf[DIAM]; /* Convert to feet */ - r = Link[index].Diam/value; /* Ratio of old to new diam */ - Link[index].Km *= SQR(r)*SQR(r); /* Adjust minor loss factor */ - Link[index].Diam = value; /* Update diameter */ - resistance(index); /* Update resistance factor */ - } - break; - - case EN_LENGTH: - if (Link[index].Type <= PIPE) - { - if (value <= 0.0) return(202); - Link[index].Len = value/Ucf[ELEV]; - resistance(index); - } - break; - - case EN_ROUGHNESS: - if (Link[index].Type <= PIPE) - { - if (value <= 0.0) return(202); - Link[index].Kc = value; - if (Formflag == DW) Link[index].Kc /= (1000.0*Ucf[ELEV]); - resistance(index); - } - break; - - case EN_MINORLOSS: - if (Link[index].Type != PUMP) - { - if (value <= 0.0) return(202); - Link[index].Km = 0.02517*value/SQR(Link[index].Diam)/SQR(Link[index].Diam); - } - break; - - case EN_INITSTATUS: - case EN_STATUS: - /* Cannot set status for a check valve */ - if (Link[index].Type == CV) return(207); - s = (char)ROUND(value); - if (s < 0 || s > 1) return(251); - if (code == EN_INITSTATUS) - setlinkstatus(index, s, &Link[index].Stat, &Link[index].Kc); - else - setlinkstatus(index, s, &LinkStatus[index], &LinkSetting[index]); - break; - - case EN_INITSETTING: - case EN_SETTING: - if (value < 0.0) return(202); - if (Link[index].Type == PIPE || Link[index].Type == CV) - return(ENsetlinkvalue(index, EN_ROUGHNESS, v)); - else - { - switch (Link[index].Type) - { - case PUMP: break; - case PRV: - case PSV: - case PBV: value /= Ucf[PRESSURE]; break; - case FCV: value /= Ucf[FLOW]; break; - case TCV: break; - -/*** Updated 9/7/00 ***/ - case GPV: return(202); /* Cannot modify setting for GPV */ - - default: return(251); - } - if (code == EN_INITSETTING) - setlinksetting(index, value, &Link[index].Stat, &Link[index].Kc); - else - setlinksetting(index, value, &LinkStatus[index], &LinkSetting[index]); - } - break; - - case EN_KBULK: - if (Link[index].Type <= PIPE) - { - Link[index].Kb = value/SECperDAY; - Reactflag = 1; //(2.00.12 - LR) - } - break; - - case EN_KWALL: - if (Link[index].Type <= PIPE) - { - Link[index].Kw = value/SECperDAY; - Reactflag = 1; //(2.00.12 - LR) - } - break; - - default: return(251); - } - return(0); -} - - -int DLLEXPORT ENaddpattern(char *id) -{ - int i, j, n, err = 0; - Spattern *tmpPat; - -/* Check if a pattern with same id already exists */ - - if ( !Openflag ) return(102); - if ( ENgetpatternindex(id, &i) == 0 ) return(215); - -/* Check that id name is not too long */ - - if (strlen(id) > MAXID) return(250); - -/* Allocate memory for a new array of patterns */ - - n = Npats + 1; - tmpPat = (Spattern *) calloc(n+1, sizeof(Spattern)); - if ( tmpPat == NULL ) return(101); - -/* Copy contents of old pattern array to new one */ - - for (i=0; i<=Npats; i++) - { - strcpy(tmpPat[i].ID, Pattern[i].ID); - tmpPat[i].Length = Pattern[i].Length; - tmpPat[i].F = (double *) calloc(Pattern[i].Length, sizeof(double)); - if (tmpPat[i].F == NULL) err = 1; - else for (j=0; j Npats) return(205); - if (n <= 0) return(202); - -/* Re-set number of time periods & reallocate memory for multipliers */ - Pattern[index].Length = n; - Pattern[index].F = (double *) realloc(Pattern[index].F, n*sizeof(double)); - if (Pattern[index].F == NULL) return(101); - -/* Load multipliers into pattern */ - for (j=0; j Npats) return(205); - if (period <= 0 || period > Pattern[index].Length) return(251); - Pattern[index].F[period-1] = value; - return(0); -} - - -int DLLEXPORT ENaddcurve(char *id) -{ - int i, j, n, err = 0; - Scurve *tmpCur; - -/* Check if a curve with same id already exists */ - - if ( !Openflag ) return(102); - if ( ENgetcurveindex(id, &i) == 0 ) return(215); - -/* Check that id name is not too long */ - - if (strlen(id) > MAXID) return(250); - -/* Allocate memory for a new array of curves */ - - n = Ncurves + 1; - tmpCur = (Scurve *) calloc(n+1, sizeof(Scurve)); - if ( tmpCur == NULL ) return(101); - -/* Copy contents of old curve array to new one */ - - for (i=0; i<=Ncurves; i++) - { - strcpy(tmpCur[i].ID, Curve[i].ID); - tmpCur[i].Npts = Curve[i].Npts; - tmpCur[i].X = (double *) calloc(Curve[i].Npts, sizeof(double)); - tmpCur[i].Y = (double *) calloc(Curve[i].Npts, sizeof(double)); - if (tmpCur[i].X == NULL) err = 1; - else if (tmpCur[i].Y == NULL) err = 1; - else for (j=0; j Ncurves) return(206); - if (n <= 0) return(202); - -/* Re-set number of points & reallocate memory for values */ - Curve[index].Npts = n; - Curve[index].X = (double *) realloc(Curve[index].X, n*sizeof(double)); - Curve[index].Y = (double *) realloc(Curve[index].Y, n*sizeof(double)); - if (Curve[index].X == NULL) return(101); - if (Curve[index].Y == NULL) return(101); - -/* Load values into curve */ - for (j=0; j Ncurves) return(206); - if (pnt <= 0 || pnt > Curve[index].Npts) return(251); - Curve[index].X[pnt-1] = x; - Curve[index].Y[pnt-1] = y; - return(0); -} - - -int DLLEXPORT ENsettimeparam(int code, long value) - -{ - if (!Openflag) return(102); - if (OpenHflag || OpenQflag) { - // --> there's nothing wrong with changing certain time parameters during a simulation run, or before the run has started. - // todo -- how to tell? - /* - if (code == EN_DURATION || code == EN_HTIME || code == EN_REPORTSTEP || code == EN_DURATION || Htime == 0) { - // it's ok - } - else { - return(109); - } - */ - } - if (value < 0) return(202); - switch(code) - { - case EN_DURATION: - Dur = value; - if (Rstart > Dur) Rstart = 0; - break; - - case EN_HYDSTEP: - if (value == 0) return(202); - Hstep = value; - Hstep = MIN(Pstep, Hstep); - Hstep = MIN(Rstep, Hstep); - Qstep = MIN(Qstep, Hstep); - break; - - case EN_QUALSTEP: - if (value == 0) return(202); - Qstep = value; - Qstep = MIN(Qstep, Hstep); - break; - - case EN_PATTERNSTEP: - if (value == 0) return(202); - Pstep = value; - if (Hstep > Pstep) Hstep = Pstep; - break; - - case EN_PATTERNSTART: - Pstart = value; - break; - - case EN_REPORTSTEP: - if (value == 0) return(202); - Rstep = value; - if (Hstep > Rstep) Hstep = Rstep; - break; - - case EN_REPORTSTART: - if (Rstart > Dur) return(202); - Rstart = value; - break; - - case EN_RULESTEP: - if (value == 0) return(202); - Rulestep = value; - Rulestep = MIN(Rulestep, Hstep); - break; - - case EN_STATISTIC: - if (value > RANGE) return(202); - Tstatflag = (char)value; - break; - - case EN_HTIME: - Htime = value; - break; - - case EN_QTIME: - Qtime = value; - break; - - default: - return(251); - } - return(0); -} - - -int DLLEXPORT ENsetoption(int code, EN_API_FLOAT_TYPE v) -/*---------------------------------------------------------------- -** Input: code = option code (see EPANET2.H) -** v = option value -** Output: none -** Returns: error code -** Purpose: sets value for an analysis option -**---------------------------------------------------------------- -*/ -{ - int i,j; - double Ke,n,ucf, value = v; - if (!Openflag) return(102); - switch (code) - { - case EN_TRIALS: if (value < 1.0) return(202); - MaxIter = (int)value; - break; - case EN_ACCURACY: if (value < 1.e-5 || value > 1.e-1) return(202); - Hacc = value; - break; - case EN_TOLERANCE: if (value < 0.0) return(202); - Ctol = value/Ucf[QUALITY]; - break; - case EN_EMITEXPON: if (value <= 0.0) return(202); - n = 1.0/value; - ucf = pow(Ucf[FLOW],n)/Ucf[PRESSURE]; - for (i=1; i<=Njuncs; i++) - { - j = ENgetnodevalue(i,EN_EMITTER,&v); - Ke = v; - if (j == 0 && Ke > 0.0) Node[i].Ke = ucf/pow(Ke,n); - } - Qexp = n; - break; - case EN_DEMANDMULT: if (value <= 0.0) return(202); - Dmult = value; - break; - default: return(251); - } - return(0); -} - - -int DLLEXPORT ENsetstatusreport(int code) -{ - int errcode = 0; - if (code >= 0 && code <= 2) Statflag = (char)code; - else errcode = 202; - return(errcode); -} - - -int DLLEXPORT ENsetqualtype(int qualcode, char *chemname, char *chemunits, char *tracenode) -{ -/*** Updated 3/1/01 ***/ - double ccf = 1.0; - - if (!Openflag) return(102); - if (qualcode < EN_NONE || qualcode > EN_TRACE) return(251); - Qualflag = (char)qualcode; - if (Qualflag == CHEM) /* Chemical constituent */ - { - strncpy(ChemName,chemname,MAXID); - strncpy(ChemUnits,chemunits,MAXID); - -/*** Updated 3/1/01 ***/ - strncpy(Field[QUALITY].Units,ChemUnits,MAXID); - strncpy(Field[REACTRATE].Units,ChemUnits,MAXID); - strcat(Field[REACTRATE].Units,t_PERDAY); - ccf = 1.0/LperFT3; - - } - if (Qualflag == TRACE) /* Source tracing option */ - { - TraceNode = findnode(tracenode); - if (TraceNode == 0) return(203); - strncpy(ChemName,u_PERCENT,MAXID); - strncpy(ChemUnits,tracenode,MAXID); - -/*** Updated 3/1/01 ***/ - strcpy(Field[QUALITY].Units,u_PERCENT); - } - if (Qualflag == AGE) /* Water age analysis */ - { - strncpy(ChemName,w_AGE,MAXID); - strncpy(ChemUnits,u_HOURS,MAXID); - -/*** Updated 3/1/01 ***/ - strcpy(Field[QUALITY].Units,u_HOURS); - } - -/*** Updated 3/1/01 ***/ - Ucf[QUALITY] = ccf; - Ucf[LINKQUAL] = ccf; - Ucf[REACTRATE] = ccf; - - return(0); -} - -int DLLEXPORT ENgetheadcurveindex(int index, int *curveindex) -{ - if (!Openflag) return(102); - if (index < 1 || index > Nlinks || PUMP != Link[index].Type) return(204); - *curveindex = Pump[PUMPINDEX(index)].Hcurve; - return(0); -} - -int DLLEXPORT ENgetpumptype(int index, int *type) -{ - *type=-1; - if (!Openflag) return(102); - if (index < 1 || index > Nlinks || PUMP != Link[index].Type) return(204); - *type = Pump[PUMPINDEX(index)].Ptype; - return(0); -} - -/* ----------------------------------------------------------------- - Functions for opening files ----------------------------------------------------------------- -*/ - - -int openfiles(char *f1, char *f2, char *f3) -/*---------------------------------------------------------------- -** Input: f1 = pointer to name of input file -** f2 = pointer to name of report file -** f3 = pointer to name of binary output file -** Output: none -** Returns: error code -** Purpose: opens input & report files -**---------------------------------------------------------------- -*/ -{ -/* Initialize file pointers to NULL */ - InFile = NULL; - RptFile = NULL; - OutFile = NULL; - HydFile = NULL; - -/* Save file names */ - strncpy(InpFname,f1,MAXFNAME); - strncpy(Rpt1Fname,f2,MAXFNAME); - strncpy(OutFname,f3,MAXFNAME); - if (strlen(f3) > 0) Outflag = SAVE; //(2.00.12 - LR) - else Outflag = SCRATCH; //(2.00.12 - LR) - -/* Check that file names are not identical */ - if (strcomp(f1,f2) || strcomp(f1,f3) || (strcomp(f2,f3) && (strlen(f2) > 0 || strlen(f3) > 0))) - { - writecon(FMT04); - return(301); - } - -/* Attempt to open input and report files */ - if ((InFile = fopen(f1,"rt")) == NULL) - { - writecon(FMT05); - writecon(f1); - return(302); - } - if (strlen(f2) == 0) RptFile = stdout; - else if ((RptFile = fopen(f2,"wt")) == NULL) - { - writecon(FMT06); - return(303); - } - - return(0); -} /* End of openfiles */ - - -int openhydfile() -/*---------------------------------------------------------------- -** Input: none -** Output: none -** Returns: error code -** Purpose: opens file that saves hydraulics solution -**---------------------------------------------------------------- -*/ -{ - INT4 nsize[6]; /* Temporary array */ - INT4 magic; - INT4 version; - int errcode = 0; - -/* If HydFile currently open, then close it if its not a scratch file */ - if (HydFile != NULL) - { - if (Hydflag == SCRATCH) return(0); - fclose(HydFile); - } - -/* Use Hydflag to determine the type of hydraulics file to use. */ -/* Write error message if the file cannot be opened. */ - HydFile = NULL; - switch(Hydflag) - { - case SCRATCH: getTmpName(HydFname); //(2.00.12 - LR) - HydFile = fopen(HydFname, "w+b"); //(2.00.12 - LR) - break; - case SAVE: HydFile = fopen(HydFname,"w+b"); - break; - case USE: HydFile = fopen(HydFname,"rb"); - break; - } - if (HydFile == NULL) return(305); - -/* If a previous hydraulics solution is not being used, then */ -/* save the current network size parameters to the file. */ - if (Hydflag != USE) - { - magic = MAGICNUMBER; - version = ENGINE_VERSION; - nsize[0] = Nnodes; - nsize[1] = Nlinks; - nsize[2] = Ntanks; - nsize[3] = Npumps; - nsize[4] = Nvalves; - nsize[5] = (int)Dur; - fwrite(&magic,sizeof(INT4),1,HydFile); - fwrite(&version,sizeof(INT4),1,HydFile); - fwrite(nsize,sizeof(INT4),6,HydFile); - } - -/* If a previous hydraulics solution is being used, then */ -/* make sure its network size parameters match those of */ -/* the current network. */ - if (Hydflag == USE) - { - fread(&magic,sizeof(INT4),1,HydFile); - if (magic != MAGICNUMBER) return(306); - fread(&version,sizeof(INT4),1,HydFile); - if (version != ENGINE_VERSION) return(306); - if (fread(nsize,sizeof(INT4),6,HydFile) < 6) return(306); - if (nsize[0] != Nnodes || nsize[1] != Nlinks || - nsize[2] != Ntanks || nsize[3] != Npumps || - nsize[4] != Nvalves || nsize[5] != Dur) return(306); - SaveHflag = TRUE; - } - -/* Save current position in hydraulics file */ -/* where storage of hydraulic results begins */ - HydOffset = ftell(HydFile); - return(errcode); -} - - -int openoutfile() -/*---------------------------------------------------------------- -** Input: none -** Output: none -** Returns: error code -** Purpose: opens binary output file. -**---------------------------------------------------------------- -*/ -{ - int errcode = 0; - -/* Close output file if already opened */ - if (OutFile != NULL) fclose(OutFile); - OutFile = NULL; - if (TmpOutFile != NULL) fclose(TmpOutFile); - TmpOutFile = NULL; - - if (Outflag == SCRATCH) remove(OutFname); //(2.00.12 - LR) - remove(TmpFname); //(2.00.12 - LR) - -/* If output file name was supplied, then attempt to */ -/* open it. Otherwise open a temporary output file. */ - //if (strlen(OutFname) != 0) //(2.00.12 - LR) - if (Outflag == SAVE) //(2.00.12 - LR) - { - if ( (OutFile = fopen(OutFname,"w+b")) == NULL) - { - writecon(FMT07); - errcode = 304; - } - } - //else if ( (OutFile = tmpfile()) == NULL) //(2.00.12 - LR) - else //(2.00.12 - LR) - { - getTmpName(OutFname); //(2.00.12 - LR) - if ( (OutFile = fopen(OutFname,"w+b")) == NULL) //(2.00.12 - LR) - { - writecon(FMT08); - errcode = 304; - } - } - -/* Save basic network data & energy usage results */ - ERRCODE(savenetdata()); - OutOffset1 = ftell(OutFile); - ERRCODE(saveenergy()); - OutOffset2 = ftell(OutFile); - -/* Open temporary file if computing time series statistic */ - if (!errcode) - { - if (Tstatflag != SERIES) - { - //if ( (TmpOutFile = tmpfile()) == NULL) errcode = 304; //(2.00.12 - LR) - getTmpName(TmpFname); //(2.00.12 - LR) - TmpOutFile = fopen(TmpFname, "w+b"); //(2.00.12 - LR) - if (TmpOutFile == NULL) errcode = 304; //(2.00.12 - LR) - } - else TmpOutFile = OutFile; - } - return(errcode); -} - - -/* ----------------------------------------------------------------- - Global memory management functions ----------------------------------------------------------------- -*/ - - -void initpointers() -/*---------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: initializes global pointers to NULL -**---------------------------------------------------------------- -*/ -{ - NodeDemand = NULL; - NodeQual = NULL; - NodeHead = NULL; - Q = NULL; - PipeRateCoeff = NULL; - LinkStatus = NULL; - LinkSetting = NULL; - OldStat = NULL; - - Node = NULL; - Link = NULL; - Tank = NULL; - Pump = NULL; - Valve = NULL; - Pattern = NULL; - Curve = NULL; - Control = NULL; - Coord = NULL; - - X = NULL; - Patlist = NULL; - Curvelist = NULL; - Adjlist = NULL; - Aii = NULL; - Aij = NULL; - F = NULL; - P = NULL; - Y = NULL; - Order = NULL; - Row = NULL; - Ndx = NULL; - XLNZ = NULL; - NZSUB = NULL; - LNZ = NULL; - NodeHashTable = NULL; - LinkHashTable = NULL; - initrules(); -} - - -int allocdata() -/*---------------------------------------------------------------- -** Input: none -** Output: none -** Returns: error code -** Purpose: allocates memory for network data structures -**---------------------------------------------------------------- -*/ -{ - int n; - int errcode = 0; - -/* Allocate node & link ID hash tables */ - NodeHashTable = ENHashTableCreate(); - LinkHashTable = ENHashTableCreate(); - ERRCODE(MEMCHECK(NodeHashTable)); - ERRCODE(MEMCHECK(LinkHashTable)); - -/* Allocate memory for network nodes */ -/************************************************************* - NOTE: Because network components of a given type are indexed - starting from 1, their arrays must be sized 1 - element larger than the number of components. -*************************************************************/ - if (!errcode) - { - n = MaxNodes + 1; - Node = (Snode *) calloc(n, sizeof(Snode)); - NodeDemand = (double *) calloc(n, sizeof(double)); - NodeQual = (double *) calloc(n, sizeof(double)); - NodeHead = (double *) calloc(n, sizeof(double)); - ERRCODE(MEMCHECK(Node)); - ERRCODE(MEMCHECK(NodeDemand)); - ERRCODE(MEMCHECK(NodeQual)); - ERRCODE(MEMCHECK(NodeHead)); - } - -/* Allocate memory for network links */ - if (!errcode) - { - n = MaxLinks + 1; - Link = (Slink *) calloc(n, sizeof(Slink)); - Q = (double *) calloc(n, sizeof(double)); - LinkSetting = (double *) calloc(n, sizeof(double)); - LinkStatus = (char *) calloc(n, sizeof(char)); - ERRCODE(MEMCHECK(Link)); - ERRCODE(MEMCHECK(Q)); - ERRCODE(MEMCHECK(LinkSetting)); - ERRCODE(MEMCHECK(LinkStatus)); - } - -/* Allocate memory for tanks, sources, pumps, valves, */ -/* controls, demands, time patterns, & operating curves */ - if (!errcode) - { - Tank = (Stank *) calloc(MaxTanks+1, sizeof(Stank)); - Pump = (Spump *) calloc(MaxPumps+1, sizeof(Spump)); - Valve = (Svalve *) calloc(MaxValves+1, sizeof(Svalve)); - Control = (Scontrol *) calloc(MaxControls+1,sizeof(Scontrol)); - Pattern = (Spattern *) calloc(MaxPats+1, sizeof(Spattern)); - Curve = (Scurve *) calloc(MaxCurves+1, sizeof(Scurve)); - if (Coordflag == TRUE) - { - Coord = (Scoord *) calloc(MaxNodes+1, sizeof(Scoord)); - } - ERRCODE(MEMCHECK(Tank)); - ERRCODE(MEMCHECK(Pump)); - ERRCODE(MEMCHECK(Valve)); - ERRCODE(MEMCHECK(Control)); - ERRCODE(MEMCHECK(Pattern)); - ERRCODE(MEMCHECK(Curve)); - if (Coordflag == TRUE) ERRCODE(MEMCHECK(Coord)); - } - -/* Initialize pointers used in patterns, curves, and demand category lists */ - if (!errcode) - { - for (n=0; n<=MaxPats; n++) - { - Pattern[n].Length = 0; - Pattern[n].F = NULL; - } - for (n=0; n<=MaxCurves; n++) - { - Curve[n].Npts = 0; - Curve[n].Type = -1; - Curve[n].X = NULL; - Curve[n].Y = NULL; - } - - for (n=0; n<=MaxNodes; n++) - { - // node demand - Node[n].D = NULL; - /* ini coord data */ - if (Coordflag == TRUE) - { - Coord[n].X = 0; - Coord[n].Y = 0; - Coord[n].HaveCoords = FALSE; - } - } - - } - -/* Allocate memory for rule base (see RULES.C) */ - if (!errcode) errcode = allocrules(); - return(errcode); -} /* End of allocdata */ - - -void freeTmplist(STmplist *t) -/*---------------------------------------------------------------- -** Input: t = pointer to start of a temporary list -** Output: none -** Purpose: frees memory used for temporary storage -** of pattern & curve data -**---------------------------------------------------------------- -*/ -{ - STmplist *tnext; - while (t != NULL) - { - tnext = t->next; - freeFloatlist(t->x); - freeFloatlist(t->y); - free(t); - t = tnext; - } -} - - -void freeFloatlist(SFloatlist *f) -/*---------------------------------------------------------------- -** Input: f = pointer to start of list of floats -** Output: none -** Purpose: frees memory used for storing list of floats -**---------------------------------------------------------------- -*/ -{ - SFloatlist *fnext; - while (f != NULL) - { - fnext = f->next; - free(f); - f = fnext; - } -} - - -void freedata() -/*---------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: frees memory allocated for network data structures. -**---------------------------------------------------------------- -*/ -{ - int j; - Pdemand demand, nextdemand; - Psource source; - -/* Free memory for computed results */ - free(NodeDemand); - free(NodeQual); - free(NodeHead); - free(Q); - free(LinkSetting); - free(LinkStatus); - -/* Free memory for node data */ - if (Node != NULL) - { - for (j=0; j<=MaxNodes; j++) - { - /* Free memory used for demand category list */ - demand = Node[j].D; - while (demand != NULL) - { - nextdemand = demand->next; - free(demand); - demand = nextdemand; - } - /* Free memory used for WQ source data */ - source = Node[j].S; - if (source != NULL) free(source); - } - free(Node); - } - -/* Free memory for other network objects */ - free(Link); - free(Tank); - free(Pump); - free(Valve); - free(Control); - -/* Free memory for time patterns */ - if (Pattern != NULL) - { - for (j=0; j<=MaxPats; j++) free(Pattern[j].F); - free(Pattern); - } - -/* Free memory for curves */ - if (Curve != NULL) - { - for (j=0; j<=MaxCurves; j++) - { - free(Curve[j].X); - free(Curve[j].Y); - } - free(Curve); - } - -/* Free memory for node coordinates */ - if (Coordflag == TRUE) free(Coord); - -/* Free memory for rule base (see RULES.C) */ - freerules(); - -/* Free hash table memory */ - if (NodeHashTable != NULL) ENHashTableFree(NodeHashTable); - if (LinkHashTable != NULL) ENHashTableFree(LinkHashTable); -} - - -/* ----------------------------------------------------------------- - General purpose functions ----------------------------------------------------------------- -*/ - -/*** New function for 2.00.12 ***/ //(2.00.12 - LR) -char* getTmpName(char* fname) -// -// Input: fname = file name string -// Output: returns pointer to file name -// Purpose: creates a temporary file name with path prepended to it. -// -{ - char name[MAXFNAME+1]; - int n; - - // --- for Windows systems: - #ifdef WINDOWS - // --- use system function tmpnam() to create a temporary file name - tmpnam(name); - - // --- if user supplied the name of a temporary directory, - // then make it be the prefix of the full file name - n = (int)strlen(TmpDir); - if ( n > 0 ) - { - strcpy(fname, TmpDir); - if ( fname[n-1] != '\\' ) strcat(fname, "\\"); - } - - // --- otherwise, use the relative path notation as the file name - // prefix so that the file will be placed in the current directory - else - { - strcpy(fname, ".\\"); - } - - // --- now add the prefix to the file name - strcat(fname, name); - - // --- for non-Windows systems: - #else - // --- use system function mkstemp() to create a temporary file name - strcpy(fname, "enXXXXXX"); - mkstemp(fname); - #endif - return fname; -} - - -int strcomp(char *s1, char *s2) -/*--------------------------------------------------------------- -** Input: s1 = character string -** s2 = character string -** Output: none -** Returns: 1 if s1 is same as s2, 0 otherwise -** Purpose: case insensitive comparison of strings s1 & s2 -**--------------------------------------------------------------- -*/ -{ - int i; - for (i=0; UCHAR(s1[i]) == UCHAR(s2[i]); i++) - if (!s1[i+1] && !s2[i+1]) return(1); - return(0); -} /* End of strcomp */ - - -double interp(int n, double x[], double y[], double xx) -/*---------------------------------------------------------------- -** Input: n = number of data pairs defining a curve -** x = x-data values of curve -** y = y-data values of curve -** xx = specified x-value -** Output: none -** Returns: y-value on curve at x = xx -** Purpose: uses linear interpolation to find y-value on a -** data curve corresponding to specified x-value. -** NOTE: does not extrapolate beyond endpoints of curve. -**---------------------------------------------------------------- -*/ -{ - int k,m; - double dx,dy; - - m = n - 1; /* Highest data index */ - if (xx <= x[0]) return(y[0]); /* xx off low end of curve */ - for (k=1; k<=m; k++) /* Bracket xx on curve */ - { - if (x[k] >= xx) /* Interp. over interval */ - { - dx = x[k]-x[k-1]; - dy = y[k]-y[k-1]; - if (ABS(dx) < TINY) return(y[k]); - else return(y[k] - (x[k]-xx)*dy/dx); - } - } - return(y[m]); /* xx off high end of curve */ -} /* End of interp */ - - -int findnode(char *id) -/*---------------------------------------------------------------- -** Input: id = node ID -** Output: none -** Returns: index of node with given ID, or 0 if ID not found -** Purpose: uses hash table to find index of node with given ID -**---------------------------------------------------------------- -*/ -{ - return(ENHashTableFind(NodeHashTable,id)); -} - - -int findlink(char *id) -/*---------------------------------------------------------------- -** Input: id = link ID -** Output: none -** Returns: index of link with given ID, or 0 if ID not found -** Purpose: uses hash table to find index of link with given ID -**---------------------------------------------------------------- -*/ -{ - return(ENHashTableFind(LinkHashTable,id)); -} - - -char *geterrmsg(int errcode) -/*---------------------------------------------------------------- -** Input: errcode = error code -** Output: none -** Returns: pointer to string with error message -** Purpose: retrieves text of error message -**---------------------------------------------------------------- -*/ -{ - switch (errcode) - { /* Warnings */ -/* - case 1: strcpy(Msg,WARN1); break; - case 2: strcpy(Msg,WARN2); break; - case 3: strcpy(Msg,WARN3); break; - case 4: strcpy(Msg,WARN4); break; - case 5: strcpy(Msg,WARN5); break; - case 6: strcpy(Msg,WARN6); break; -*/ - /* System Errors */ - case 101: strcpy(Msg,ERR101); break; - case 102: strcpy(Msg,ERR102); break; - case 103: strcpy(Msg,ERR103); break; - case 104: strcpy(Msg,ERR104); break; - case 105: strcpy(Msg,ERR105); break; - case 106: strcpy(Msg,ERR106); break; - case 107: strcpy(Msg,ERR107); break; - case 108: strcpy(Msg,ERR108); break; - case 109: strcpy(Msg,ERR109); break; - case 110: strcpy(Msg,ERR110); break; - case 120: strcpy(Msg,ERR120); break; - - /* Input Errors */ - case 200: strcpy(Msg,ERR200); break; - case 223: strcpy(Msg,ERR223); break; - case 224: strcpy(Msg,ERR224); break; - - /* Toolkit function errors */ - case 202: sprintf(Msg,ERR202,t_FUNCCALL,""); break; - case 203: sprintf(Msg,ERR203,t_FUNCCALL,""); break; - case 204: sprintf(Msg,ERR204,t_FUNCCALL,""); break; - case 205: sprintf(Msg,ERR205,t_FUNCCALL,""); break; - case 207: sprintf(Msg,ERR207,t_FUNCCALL,""); break; - case 240: sprintf(Msg,ERR240,t_FUNCCALL,""); break; - case 241: sprintf(Msg,ERR241,t_FUNCCALL,""); break; - case 250: sprintf(Msg,ERR250); break; - case 251: sprintf(Msg,ERR251); break; - case 253: sprintf(Msg,ERR253); break; - case 254: sprintf(Msg,ERR254); break; - case 255: sprintf(Msg,ERR255); break; - - /* File Errors */ - case 301: strcpy(Msg,ERR301); break; - case 302: strcpy(Msg,ERR302); break; - case 303: strcpy(Msg,ERR303); break; - case 304: strcpy(Msg,ERR304); break; - case 305: strcpy(Msg,ERR305); break; - case 306: strcpy(Msg,ERR306); break; - case 307: strcpy(Msg,ERR307); break; - case 308: strcpy(Msg,ERR308); break; - case 309: strcpy(Msg,ERR309); break; - - case 401: strcpy(Msg,ERR401); break; - default: strcpy(Msg,""); - } - return(Msg); -} - - -void errmsg(int errcode) -/*---------------------------------------------------------------- -** Input: errcode = error code -** Output: none -** Purpose: writes error message to report file -**---------------------------------------------------------------- -*/ -{ - if (errcode == 309) /* Report file write error - */ - { /* Do not write msg to file. */ - writecon("\n "); - writecon(geterrmsg(errcode)); - } - else if (RptFile != NULL && Messageflag) - { - writeline(geterrmsg(errcode)); - } -} - - -void writecon(char *s) -/*---------------------------------------------------------------- -** Input: text string -** Output: none -** Purpose: writes string of characters to console -**---------------------------------------------------------------- -*/ -{ - //(2.00.11 - LR) - //fprintf(stdout,s); - //fflush(stdout); - -} - - -void writewin(char *s) -/*---------------------------------------------------------------- -** Input: text string -** Output: none -** Purpose: passes character string to viewprog() in -** application which calls the EPANET DLL -**---------------------------------------------------------------- -*/ -{ - char progmsg[MAXMSG+1]; - if (viewprog != NULL) - { - strncpy(progmsg,s,MAXMSG); - viewprog(progmsg); - } -} - - -int DLLEXPORT ENgetnumdemands(int nodeIndex, int *numDemands) -{ - Pdemand d; - int n=0; - /* Check for valid arguments */ - if (!Openflag) return(102); - if (nodeIndex <= 0 || nodeIndex > Nnodes) return(203); - for(d=Node[nodeIndex].D; d != NULL; d=d->next) n++; - *numDemands=n; - return 0; -} - - -int DLLEXPORT ENgetbasedemand(int nodeIndex, int demandIdx, EN_API_FLOAT_TYPE *baseDemand) -{ - Pdemand d; - int n=1; - /* Check for valid arguments */ - if (!Openflag) return(102); - if (nodeIndex <= 0 || nodeIndex > Nnodes) return(203); - if (nodeIndex <= Njuncs) { - for(d=Node[nodeIndex].D; nnext) { - n++; - } - if(n != demandIdx) { - return(253); - } - *baseDemand=(EN_API_FLOAT_TYPE)(d->Base*Ucf[FLOW]); - } - else { - *baseDemand=(EN_API_FLOAT_TYPE)(0.0); - } - return 0; -} - - -int DLLEXPORT ENsetbasedemand(int nodeIndex, int demandIdx, EN_API_FLOAT_TYPE baseDemand) -{ - Pdemand d; - int n=1; - /* Check for valid arguments */ - if (!Openflag) return(102); - if (nodeIndex <= 0 || nodeIndex > Nnodes) return(203); - if (nodeIndex <= Njuncs) { - for(d=Node[nodeIndex].D; nnext) n++; - if(n!=demandIdx) return(253); - d->Base = baseDemand/Ucf[FLOW]; - } - return 0; -} - - -int DLLEXPORT ENgetdemandpattern(int nodeIndex, int demandIdx, int *pattIdx) -{ - Pdemand d; - int n=1; - /* Check for valid arguments */ - if (!Openflag) return(102); - if (nodeIndex <= 0 || nodeIndex > Nnodes) return(203); - for(d=Node[nodeIndex].D; nnext) n++; - if(n!=demandIdx) return(253); - *pattIdx=d->Pat; - return 0; -} - - -int DLLEXPORT ENgetaveragepatternvalue(int index, EN_API_FLOAT_TYPE *value) -{ - int i; - *value = 0.0; - if (!Openflag) return(102); - if (index < 1 || index > Npats) return(205); - //if (period < 1 || period > Pattern[index].Length) return(251); - for (i=0; i +#include +#include +#include +#include + +#include "epanet2_2.h" +#include "types.h" +#include "funcs.h" +#include "text.h" +#include "enumstxt.h" + +#ifdef _WIN32 +#define snprintf _snprintf +#endif + +/******************************************************************** + + Project Functions + +********************************************************************/ + +int DLLEXPORT EN_createproject(EN_Project *p) +/*---------------------------------------------------------------- +** Input: none +** Output: p = pointer to a new EPANET project +** Returns: error code +** Purpose: creates a new EPANET project +**---------------------------------------------------------------- +*/ +{ + struct Project *project = (struct Project *)calloc(1, sizeof(struct Project)); + if (project == NULL) return -1; + getTmpName(project->TmpHydFname); + getTmpName(project->TmpOutFname); + getTmpName(project->TmpStatFname); + *p = project; + return 0; +} + +int DLLEXPORT EN_deleteproject(EN_Project p) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Returns: error code +** Purpose: deletes an EPANET project +**---------------------------------------------------------------- +*/ +{ + if (p == NULL) return -1; + if (p->Openflag) { + EN_close(p); + } + remove(p->TmpHydFname); + remove(p->TmpOutFname); + remove(p->TmpStatFname); + free(p); + return 0; +} + +int DLLEXPORT EN_runproject(EN_Project p, const char *inpFile, + const char *rptFile, const char *outFile, + void (*pviewprog)(char *)) +/*------------------------------------------------------------------------ +** Input: inpFile = name of EPANET formatted input file +** rptFile = name of report file +** outFile = name of binary output file +** pviewprog = see note below +** Output: none +** Returns: error code +** Purpose: runs a complete EPANET simulation +** +** The pviewprog() argument is a pointer to a callback function +** that takes a character string (char *) as its only parameter. +** The function would reside in and be used by the calling +** program to display the progress messages that EPANET generates +** as it carries out its computations. If this feature is not +** needed then the argument should be NULL. +**------------------------------------------------------------------------- +*/ +{ + int errcode = 0; + + // Read in project data from an input file + ERRCODE(EN_open(p, inpFile, rptFile, outFile)); + p->viewprog = pviewprog; + + // Solve for system hydraulics + if (p->outfile.Hydflag != USE) + { + ERRCODE(EN_solveH(p)); + } + + // Solve for system water quality + ERRCODE(EN_solveQ(p)); + + // Write a formatted output report + ERRCODE(EN_report(p)); + EN_close(p); + + // Return any error or warning code + if (p->Warnflag) errcode = MAX(errcode, p->Warnflag); + return errcode; +} + +int DLLEXPORT EN_init(EN_Project p, const char *rptFile, const char *outFile, + int unitsType, int headLossType) +/*---------------------------------------------------------------- + ** Input: rptFile = name of report file + ** outFile = name of binary output file + ** unitsType = type of flow units (see FlowUnitsType) + ** headLossType = type of head loss formula (see HeadLossType) + ** Output: none + ** Returns: error code + ** Purpose: initializes an EPANET project that isn't opened with + ** an input file + **---------------------------------------------------------------- + */ +{ + int errcode = 0; + + // Set system flags + p->Openflag = FALSE; + p->hydraul.OpenHflag = FALSE; + p->quality.OpenQflag = FALSE; + p->outfile.SaveHflag = FALSE; + p->outfile.SaveQflag = FALSE; + p->Warnflag = FALSE; + p->report.Messageflag = TRUE; + p->report.Rptflag = 1; + + // Check for valid arguments + if (unitsType < 0 || unitsType > CMD) return 251; + if (headLossType < 0 || headLossType > CM) return 251; + + // Open files + errcode = openfiles(p, "", rptFile, outFile); + + // Initialize memory used for project's data objects + initpointers(p); + ERRCODE(netsize(p)); + ERRCODE(allocdata(p)); + if (errcode) return (errcode); + + // Set analysis options + setdefaults(p); + p->parser.Flowflag = unitsType; + p->hydraul.Formflag = headLossType; + + // Perform additional initializations + adjustdata(p); + initreport(&p->report); + initunits(p); + inittanks(p); + convertunits(p); + p->parser.MaxPats = 0; + p->Openflag = TRUE; + return errcode; +} + +int DLLEXPORT EN_open(EN_Project p, const char *inpFile, const char *rptFile, + const char *outFile) +/*---------------------------------------------------------------- + ** Input: inpFile = name of input file + ** rptFile = name of report file + ** outFile = name of binary output file + ** Output: none + ** Returns: error code + ** Purpose: opens an EPANET input file & reads in network data + **---------------------------------------------------------------- + */ +{ + int errcode = 0; + + // Set system flags + p->Openflag = FALSE; + p->hydraul.OpenHflag = FALSE; + p->quality.OpenQflag = FALSE; + p->outfile.SaveHflag = FALSE; + p->outfile.SaveQflag = FALSE; + p->Warnflag = FALSE; + p->report.Messageflag = TRUE; + p->report.Rptflag = 1; + + // Initialize data arrays to NULL + initpointers(p); + + // Open input & report files + ERRCODE(openfiles(p, inpFile, rptFile, outFile)); + if (errcode > 0) + { + errmsg(p, errcode); + return errcode; + } + + // Allocate memory for project's data arrays + writewin(p->viewprog, FMT100); + ERRCODE(netsize(p)); + ERRCODE(allocdata(p)); + + // Read input data + ERRCODE(getdata(p)); + + // Close input file + if (p->parser.InFile != NULL) + { + fclose(p->parser.InFile); + p->parser.InFile = NULL; + } + + // If using previously saved hydraulics file then open it + if (p->outfile.Hydflag == USE) ERRCODE(openhydfile(p)); + + // Write input summary to report file + if (!errcode) + { + if (p->report.Summaryflag) writesummary(p); + writetime(p, FMT104); + p->Openflag = TRUE; + } + else errmsg(p, errcode); + return errcode; +} + +int DLLEXPORT EN_gettitle(EN_Project p, char *line1, char *line2, char *line3) +/*---------------------------------------------------------------- +** Input: None +** Output: line1, line2, line3 = project's title lines +** Returns: error code +** Purpose: retrieves the title lines of the project +**---------------------------------------------------------------- +*/ +{ + if (!p->Openflag) return 102; + strncpy(line1, p->Title[0], TITLELEN); + strncpy(line2, p->Title[1], TITLELEN); + strncpy(line3, p->Title[2], TITLELEN); + return 0; +} + +int DLLEXPORT EN_settitle(EN_Project p, char *line1, char *line2, char *line3) +/*---------------------------------------------------------------- +** Input: line1, line2, line3 = project's title lines +** Returns: error code +** Purpose: sets the title lines of the project +**---------------------------------------------------------------- +*/ +{ + if (!p->Openflag) return 102; + strncpy(p->Title[0], line1, TITLELEN); + strncpy(p->Title[1], line2, TITLELEN); + strncpy(p->Title[2], line3, TITLELEN); + return 0; +} + +int DLLEXPORT EN_getcomment(EN_Project p, int object, int index, char *comment) +/*---------------------------------------------------------------- +** Input: object = a type of object (see EN_ObjectType) +** index = the object's index +** Output: comment = the object's descriptive comment +** Returns: error code +** Purpose: Retrieves an object's descriptive comment +**---------------------------------------------------------------- +*/ +{ + return getcomment(&p->network, object, index, comment); +} + +int DLLEXPORT EN_setcomment(EN_Project p, int object, int index, char *comment) +/*---------------------------------------------------------------- +** Input: object = a type of object (see EN_ObjectType) +** index = the object's index +** comment = a descriptive comment to assign +** Returns: error code +** Purpose: Assigns a descriptive comment to an object +**---------------------------------------------------------------- +*/ +{ + return setcomment(&p->network, object, index, comment); +} + +int DLLEXPORT EN_getcount(EN_Project p, int object, int *count) +/*---------------------------------------------------------------- +** Input: object = type of object to count (see EN_CountType) +** Output: count = number of objects of the specified type +** Returns: error code +** Purpose: Retrieves number of network objects of a given type +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + *count = 0; + if (!p->Openflag) return 102; + switch (object) + { + case EN_NODECOUNT: + *count = net->Nnodes; + break; + case EN_TANKCOUNT: + *count = net->Ntanks; + break; + case EN_LINKCOUNT: + *count = net->Nlinks; + break; + case EN_PATCOUNT: + *count = net->Npats; + break; + case EN_CURVECOUNT: + *count = net->Ncurves; + break; + case EN_CONTROLCOUNT: + *count = net->Ncontrols; + break; + case EN_RULECOUNT: + *count = net->Nrules; + break; + default: + return 251; + } + return 0; +} + +int DLLEXPORT EN_saveinpfile(EN_Project p, const char *filename) +/*---------------------------------------------------------------- + ** Input: filename = name of file to which project is saved + ** Output: none + ** Returns: error code + ** Purpose: saves project to an EPANET formatted file + **---------------------------------------------------------------- + */ +{ + if (!p->Openflag) return 102; + return saveinpfile(p, filename); +} + +int DLLEXPORT EN_close(EN_Project p) +/*---------------------------------------------------------------- + ** Input: none + ** Output: none + ** Returns: error code + ** Purpose: frees all memory & files used by a project + **---------------------------------------------------------------- + */ +{ + // Free all project data + if (p->Openflag) writetime(p, FMT105); + freedata(p); + + // Close output file + closeoutfile(p); + + // Close input file + if (p->parser.InFile != NULL) + { + fclose(p->parser.InFile); + p->parser.InFile = NULL; + } + + // Close report file + if (p->report.RptFile != NULL && p->report.RptFile != stdout) + { + fclose(p->report.RptFile); + p->report.RptFile = NULL; + } + + // Close hydraulics file + if (p->outfile.HydFile != NULL) + { + fclose(p->outfile.HydFile); + p->outfile.HydFile = NULL; + } + + // Reset system flags + p->Openflag = FALSE; + p->hydraul.OpenHflag = FALSE; + p->outfile.SaveHflag = FALSE; + p->quality.OpenQflag = FALSE; + p->outfile.SaveQflag = FALSE; + return 0; +} + +/******************************************************************** + + Hydraulic Analysis Functions + + ********************************************************************/ + +int DLLEXPORT EN_solveH(EN_Project p) +/*---------------------------------------------------------------- + ** Input: none + ** Output: none + ** Returns: error code + ** Purpose: solves for network hydraulics in all time periods + **---------------------------------------------------------------- + */ +{ + int errcode; + long t, tstep; + + // Open hydraulics solver + errcode = EN_openH(p); + if (!errcode) + { + // Initialize hydraulics + errcode = EN_initH(p, EN_SAVE); + + // Analyze each hydraulic time period + if (!errcode) do + { + // Display progress message + sprintf(p->Msg, "%-10s", + clocktime(p->report.Atime, p->times.Htime)); + sprintf(p->Msg, FMT101, p->report.Atime); + writewin(p->viewprog, p->Msg); + + // Solve for hydraulics & advance to next time period + tstep = 0; + ERRCODE(EN_runH(p, &t)); + ERRCODE(EN_nextH(p, &tstep)); + } while (tstep > 0); + } + + // Close hydraulics solver + EN_closeH(p); + errcode = MAX(errcode, p->Warnflag); + return errcode; +} + +int DLLEXPORT EN_saveH(EN_Project p) +/*---------------------------------------------------------------- + ** Input: none + ** Output: none + ** Returns: error code + ** Purpose: saves hydraulic results to binary file + ** + ** Must be called before EN_report() if no WQ simulation made. + ** Should not be called if EN_solveQ() will be used. + **---------------------------------------------------------------- + */ +{ + int tmpflag; + int errcode; + + // Check if hydraulic results exist + if (!p->outfile.SaveHflag) return 104; + + // Temporarily turn off WQ analysis + tmpflag = p->quality.Qualflag; + p->quality.Qualflag = NONE; + + // Call WQ solver to simply transfer results from Hydraulics file + // to Output file at fixed length reporting time intervals + errcode = EN_solveQ(p); + + // Restore WQ analysis option + p->quality.Qualflag = tmpflag; + if (errcode) errmsg(p, errcode); + return errcode; +} + +int DLLEXPORT EN_openH(EN_Project p) +/*---------------------------------------------------------------- + ** Input: none + ** Output: none + ** Returns: error code + ** Purpose: opens a project's hydraulic solver + **---------------------------------------------------------------- + */ +{ + int errcode = 0; + + // Check that input data exists + p->hydraul.OpenHflag = FALSE; + p->outfile.SaveHflag = FALSE; + if (!p->Openflag) return 102; + + // Check that previously saved hydraulics file not in use + if (p->outfile.Hydflag == USE) return 107; + + // Open hydraulics solver + ERRCODE(openhyd(p)); + if (!errcode) p->hydraul.OpenHflag = TRUE; + else errmsg(p, errcode); + return errcode; +} + +int DLLEXPORT EN_initH(EN_Project p, int initFlag) +/*---------------------------------------------------------------- + ** Input: initFlag = 2-digit flag where 1st (left) digit indicates + ** if link flows should be re-initialized (1) or + ** not (0) and 2nd digit indicates if hydraulic + ** results should be saved to file (1) or not (0) + ** Output: none + ** Returns: error code + ** Purpose: initializes a project's hydraulic solver + **---------------------------------------------------------------- + */ +{ + int errcode = 0; + int sflag, fflag; + + // Reset status flags + p->outfile.SaveHflag = FALSE; + p->Warnflag = FALSE; + + // Get values of save-to-file flag and reinitialize-flows flag + fflag = initFlag / EN_INITFLOW; + sflag = initFlag - fflag * EN_INITFLOW; + + // Check that hydraulics solver was opened + if (!p->hydraul.OpenHflag) return 103; + + // Open hydraulics file if requested + p->outfile.Saveflag = FALSE; + if (sflag > 0) + { + errcode = openhydfile(p); + if (!errcode) p->outfile.Saveflag = TRUE; + else + { + errmsg(p, errcode); + return errcode; + } + } + + // Initialize hydraulics solver + inithyd(p, fflag); + if (p->report.Statflag > 0) writeheader(p, STATHDR, 0); + return errcode; +} + +int DLLEXPORT EN_runH(EN_Project p, long *currentTime) +/*---------------------------------------------------------------- +** Input: none +** Output: currentTime = current elapsed time (sec) +** Returns: error code +** Purpose: solves network hydraulics at current time point +**---------------------------------------------------------------- +*/ +{ + int errcode; + + *currentTime = 0; + if (!p->hydraul.OpenHflag) return 103; + errcode = runhyd(p, currentTime); + if (errcode) errmsg(p, errcode); + return errcode; +} + +int DLLEXPORT EN_nextH(EN_Project p, long *tStep) +/*---------------------------------------------------------------- +** Input: none +** Output: tStep = next hydraulic time step to take (sec) +** Returns: error code +** Purpose: determines the time step until the next hydraulic event +**---------------------------------------------------------------- +*/ +{ + int errcode; + + *tStep = 0; + if (!p->hydraul.OpenHflag) return 103; + errcode = nexthyd(p, tStep); + if (errcode) errmsg(p, errcode); + else if (p->outfile.Saveflag && *tStep == 0) p->outfile.SaveHflag = TRUE; + return errcode; +} + +int DLLEXPORT EN_closeH(EN_Project p) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Returns: error code +** Purpose: closes a project's hydraulic solver +**---------------------------------------------------------------- +*/ +{ + if (!p->Openflag) return 102; + if (p->hydraul.OpenHflag) closehyd(p); + p->hydraul.OpenHflag = FALSE; + return 0; +} + +int DLLEXPORT EN_savehydfile(EN_Project p, const char *filename) +/*---------------------------------------------------------------- +** Input: filename = name of file to which hydraulic results are saved +** Output: none +** Returns: error code +** Purpose: saves results from a scratch hydraulics file to a +** permanent one +**---------------------------------------------------------------- +*/ +{ + FILE *f; + FILE *HydFile; + int c; + + // Check that hydraulics results exist + if (p->outfile.HydFile == NULL || !p->outfile.SaveHflag) return 104; + + // Open the permanent hydraulics file + if ((f = fopen(filename, "w+b")) == NULL) return 305; + + // Copy from the scratch file to f + HydFile = p->outfile.HydFile; + fseek(HydFile, 0, SEEK_SET); + while ((c = fgetc(HydFile)) != EOF) fputc(c, f); + fclose(f); + return 0; +} + +int DLLEXPORT EN_usehydfile(EN_Project p, const char *filename) +/*---------------------------------------------------------------- +** Input: filename = name of previously saved hydraulics file +** Output: none +** Returns: error code +** Purpose: uses contents of a previously saved hydraulics file to +** run a water quality analysis +**---------------------------------------------------------------- +*/ +{ + int errcode; + + // Check that project was opened & hydraulic solver is closed + if (!p->Openflag) return 102; + if (p->hydraul.OpenHflag) return 108; + + // Try to open hydraulics file + strncpy(p->outfile.HydFname, filename, MAXFNAME); + p->outfile.Hydflag = USE; + p->outfile.SaveHflag = TRUE; + errcode = openhydfile(p); + + // If error, then reset flags + if (errcode) + { + strcpy(p->outfile.HydFname, ""); + p->outfile.Hydflag = SCRATCH; + p->outfile.SaveHflag = FALSE; + } + return errcode; +} + +/******************************************************************** + + Water Quality Analysis Functions + + ********************************************************************/ + +int DLLEXPORT EN_solveQ(EN_Project p) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Returns: error code +** Purpose: solves for network water quality in all time periods +**---------------------------------------------------------------- +*/ +{ + int errcode; + long t, tstep; + + // Open WQ solver + errcode = EN_openQ(p); + if (!errcode) + { + // Initialize WQ solver + errcode = EN_initQ(p, EN_SAVE); + if (!p->quality.Qualflag) writewin(p->viewprog, FMT106); + + // Analyze each hydraulic period + if (!errcode) do + { + // Display progress message + sprintf(p->Msg, "%-10s", + clocktime(p->report.Atime, p->times.Htime)); + if (p->quality.Qualflag) + { + sprintf(p->Msg, FMT102, p->report.Atime); + writewin(p->viewprog, p->Msg); + } + + // Retrieve current hydraulic results & update water quality + // to start of next time period + tstep = 0; + ERRCODE(EN_runQ(p, &t)); + ERRCODE(EN_nextQ(p, &tstep)); + } while (tstep > 0); + } + + // Close WQ solver + EN_closeQ(p); + return errcode; +} + +int DLLEXPORT EN_openQ(EN_Project p) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Returns: error code +** Purpose: opens a project's water quality solver +**---------------------------------------------------------------- +*/ +{ + int errcode = 0; + + // Check that hydraulics results exist + p->quality.OpenQflag = FALSE; + p->outfile.SaveQflag = FALSE; + if (!p->Openflag) return 102; + if (!p->hydraul.OpenHflag && !p->outfile.SaveHflag) return 104; + + // Open water quality solver + ERRCODE(openqual(p)); + if (!errcode) p->quality.OpenQflag = TRUE; + else errmsg(p, errcode); + return errcode; +} + +int DLLEXPORT EN_initQ(EN_Project p, int saveFlag) +/*---------------------------------------------------------------- +** Input: saveFlag = flag indicating if results should be saved +** to the binary output file or not +** Output: none +** Returns: error code +** Purpose: initializes the water quality solver +**---------------------------------------------------------------- +*/ +{ + int errcode = 0; + + if (!p->quality.OpenQflag) return 105; + initqual(p); + p->outfile.SaveQflag = FALSE; + p->outfile.Saveflag = FALSE; + if (saveFlag) + { + errcode = openoutfile(p); + if (!errcode) p->outfile.Saveflag = TRUE; + } + return errcode; +} + +int DLLEXPORT EN_runQ(EN_Project p, long *currentTime) +/*---------------------------------------------------------------- +** Input: none +** Output: currentTime = current simulation time (sec) +** Returns: error code +** Purpose: retrieves current hydraulic results and saves current +** results to file. +**---------------------------------------------------------------- +*/ +{ + int errcode; + + *currentTime = 0; + if (!p->quality.OpenQflag) return 105; + errcode = runqual(p, currentTime); + if (errcode) errmsg(p, errcode); + return errcode; +} + +int DLLEXPORT EN_nextQ(EN_Project p, long *tStep) +/*---------------------------------------------------------------- +** Input: none +** Output: tStep = time step over which water quality is updated (sec) +** Returns: error code +** Purpose: updates water quality throughout the network until +** next hydraulic event occurs +**---------------------------------------------------------------- +*/ +{ + int errcode; + + *tStep = 0; + if (!p->quality.OpenQflag) return 105; + errcode = nextqual(p, tStep); + if (!errcode && p->outfile.Saveflag && *tStep == 0) + { + p->outfile.SaveQflag = TRUE; + } + if (errcode) errmsg(p, errcode); + return errcode; +} + +int DLLEXPORT EN_stepQ(EN_Project p, long *timeLeft) +/*---------------------------------------------------------------- +** Input: none +** Output: timeLeft = amount of simulation time remaining (sec) +** Returns: error code +** Purpose: updates water quality throughout the network over +** fixed time step +**---------------------------------------------------------------- +*/ +{ + int errcode; + + *timeLeft = 0; + if (!p->quality.OpenQflag) return 105; + errcode = stepqual(p, timeLeft); + if (!errcode && p->outfile.Saveflag && *timeLeft == 0) + { + p->outfile.SaveQflag = TRUE; + } + if (errcode) errmsg(p, errcode); + return errcode; +} + +int DLLEXPORT EN_closeQ(EN_Project p) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Returns: error code +** Purpose: closes a project's water quality solver +**---------------------------------------------------------------- +*/ +{ + if (!p->Openflag) return 102; + closequal(p); + p->quality.OpenQflag = FALSE; + closeoutfile(p); + return 0; +} + +/******************************************************************** + + Reporting Functions + + ********************************************************************/ + +int DLLEXPORT EN_writeline(EN_Project p, char *line) +/*---------------------------------------------------------------- +** Input: line = line of text +** Output: none +** Returns: error code +** Purpose: write a line of text to a project's report file +**---------------------------------------------------------------- +*/ +{ + if (!p->Openflag) return 102; + writeline(p, line); + return 0; +} + +int DLLEXPORT EN_report(EN_Project p) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Returns: error code +** Purpose: writes formatted simulation results to a project's +** report file +**---------------------------------------------------------------- +*/ +{ + int errcode; + + // Check if results have been saved to binary output file + if (!p->outfile.SaveQflag) return 106; + writewin(p->viewprog, FMT103); + + // Write the formatted report + errcode = writereport(p); + if (errcode) errmsg(p, errcode); + return errcode; +} + +int DLLEXPORT EN_copyreport(EN_Project p, char *filename) +/*---------------------------------------------------------------- +** Input: filename = name of file to receive copy of report +** Output: none +** Returns: error code +** Purpose: copies the contents of a project's report file to +** another file +**---------------------------------------------------------------- +*/ +{ + return copyreport(p, filename); +} + +int DLLEXPORT EN_clearreport(EN_Project p) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Returns: error code +** Purpose: clears the contents of a project's report file +**---------------------------------------------------------------- +*/ +{ + return clearreport(p); +} + +int DLLEXPORT EN_resetreport(EN_Project p) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Returns: error code +** Purpose: resets reporting options to their default values +**---------------------------------------------------------------- +*/ +{ + int i; + + if (!p->Openflag) return 102; + initreport(&p->report); + for (i = 1; i <= p->network.Nnodes; i++) + { + p->network.Node[i].Rpt = 0; + } + for (i = 1; i <= p->network.Nlinks; i++) + { + p->network.Link[i].Rpt = 0; + } + return 0; +} + +int DLLEXPORT EN_setreport(EN_Project p, char *format) +/*---------------------------------------------------------------- +** Input: format = a report formatting command +** Output: none +** Returns: error code +** Purpose: sets a specific set of reporting options +**---------------------------------------------------------------- +*/ +{ + char s1[MAXLINE + 1]; + + if (!p->Openflag) return 102; + if (strlen(format) >= MAXLINE) return 250; + strcpy(s1, format); + strcat(s1, "\n"); + if (setreport(p, s1) > 0) return 250; + else return 0; +} + +int DLLEXPORT EN_setstatusreport(EN_Project p, int level) +/*---------------------------------------------------------------- +** Input: level = level of reporting to use (see EN_StatusReport) +** Output: none +** Returns: error code +** Purpose: sets the level of hydraulic status reporting +**---------------------------------------------------------------- +*/ +{ + int errcode = 0; + + if (level >= EN_NO_REPORT && level <= EN_FULL_REPORT) + { + p->report.Statflag = (char)level; + } + else errcode = 251; + return errcode; +} + +int DLLEXPORT EN_getversion(int *version) +/*---------------------------------------------------------------- +** Input: none +** Output: version = version number of the source code +** Returns: error code (should always be 0) +** Purpose: retrieves the toolkit API version number +** +** The version number is set by the constant CODEVERSION found in +** TYPES.H and is to be interpreted with implied decimals, i.e., +** "20100" == "2(.)01(.)00". +**---------------------------------------------------------------- +*/ +{ + *version = CODEVERSION; + return 0; +} + +int DLLEXPORT EN_geterror(int errcode, char *errmsg, int maxLen) +/*---------------------------------------------------------------- +** Input: errcode = an error or warnng code +** maxLen = maximum characters that errmsg can hold +** Output: errmsg = text of error/warning message +** Returns: error code +** Purpose: retrieves the text of the message associated with +** a particular error/warning code +**---------------------------------------------------------------- +*/ +{ + char msg1[MAXMSG+1] = ""; + char msg2[MAXMSG+1] = ""; + + switch (errcode) + { + case 1: + strncpy(errmsg, WARN1, maxLen); + break; + case 2: + strncpy(errmsg, WARN2, maxLen); + break; + case 3: + strncpy(errmsg, WARN3, maxLen); + break; + case 4: + strncpy(errmsg, WARN4, maxLen); + break; + case 5: + strncpy(errmsg, WARN5, maxLen); + break; + case 6: + strncpy(errmsg, WARN6, maxLen); + break; + default: + sprintf(msg1, "Error %d: ", errcode); + if ((errcode >= 202 && errcode <= 222) || + (errcode >= 240 && errcode <= 261)) strcat(msg1, "function call contains "); + snprintf(errmsg, maxLen, "%s%s", msg1, geterrmsg(errcode, msg2)); + } + if (strlen(errmsg) == 0) + return 251; + else + return 0; +} + +int DLLEXPORT EN_getstatistic(EN_Project p, int type, double *value) +/*---------------------------------------------------------------- +** Input: type = type of simulation statistic (see EN_AnalysisStatistic) +** Output: value = simulation analysis statistic value +** Returns: error code +** Purpose: retrieves the value of a simulation analysis statistic +**---------------------------------------------------------------- +*/ +{ + switch (type) + { + case EN_ITERATIONS: + *value = p->hydraul.Iterations; + break; + case EN_RELATIVEERROR: + *value = p->hydraul.RelativeError; + break; + case EN_MAXHEADERROR: + *value = p->hydraul.MaxHeadError * p->Ucf[HEAD]; + break; + case EN_MAXFLOWCHANGE: + *value = p->hydraul.MaxFlowChange * p->Ucf[FLOW]; + break; + case EN_DEFICIENTNODES: + *value = p->hydraul.DeficientNodes; + break; + case EN_DEMANDREDUCTION: + *value = p->hydraul.DemandReduction; + break; + case EN_MASSBALANCE: + *value = p->quality.MassBalance.ratio; + break; + default: + *value = 0.0; + return 251; + } + return 0; +} + +int DLLEXPORT EN_getresultindex(EN_Project p, int type, int index, int *value) +/*---------------------------------------------------------------- +** Input: type = type of object (either EN_NODE or EN_LINK) +** index = the object's index +** Output: value = the order in which the object's results were saved +** Returns: error code +** Purpose: retrieves the order in which a node's or link's results +** were saved to an output file. +**---------------------------------------------------------------- +*/ +{ + *value = 0; + if (!p->Openflag) return 102; + if (type == EN_NODE) + { + if (index <= 0 || index > p->network.Nnodes) return 203; + *value = p->network.Node[index].ResultIndex; + } + else if (type == EN_LINK) + { + if (index <= 0 || index > p->network.Nlinks) return 204; + *value = p->network.Link[index].ResultIndex; + } + else return 251; + return 0; +} + +/******************************************************************** + + Analysis Options Functions + +********************************************************************/ + +int DLLEXPORT EN_getoption(EN_Project p, int option, double *value) +/*---------------------------------------------------------------- +** Input: option = an analysis option code (see EN_Option) +** Output: value = analysis option value +** Returns: error code +** Purpose: retrieves the value of an analysis option +**---------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &p->hydraul; + Quality *qual = &p->quality; + + double *Ucf = p->Ucf; + double v = 0.0; + + *value = 0.0; + if (!p->Openflag) return 102; + switch (option) + { + case EN_TRIALS: + v = (double)hyd->MaxIter; + break; + case EN_ACCURACY: + v = hyd->Hacc; + break; + case EN_TOLERANCE: + v = qual->Ctol * Ucf[QUALITY]; + break; + case EN_EMITEXPON: + if (hyd->Qexp > 0.0) v = 1.0 / hyd->Qexp; + break; + case EN_DEMANDMULT: + v = hyd->Dmult; + break; + case EN_HEADERROR: + v = hyd->HeadErrorLimit * Ucf[HEAD]; + break; + case EN_FLOWCHANGE: + v = hyd->FlowChangeLimit * Ucf[FLOW]; + break; + case EN_HEADLOSSFORM: + v = hyd->Formflag; + break; + case EN_GLOBALEFFIC: + v = hyd->Epump; + break; + case EN_GLOBALPRICE: + v = hyd->Ecost; + break; + case EN_GLOBALPATTERN: + v = hyd->Epat; + break; + case EN_DEMANDCHARGE: + v = hyd->Dcost; + break; + case EN_SP_GRAVITY: + v = hyd->SpGrav; + break; + case EN_SP_VISCOS: + v = hyd->Viscos / VISCOS; + break; + case EN_UNBALANCED: + v = hyd->ExtraIter; + break; + case EN_CHECKFREQ: + v = hyd->CheckFreq; + break; + case EN_MAXCHECK: + v = hyd->MaxCheck; + break; + case EN_DAMPLIMIT: + v = hyd->DampLimit; + break; + case EN_SP_DIFFUS: + v = qual->Diffus / DIFFUS; + break; + case EN_BULKORDER: + v = qual->BulkOrder; + break; + case EN_WALLORDER: + v = qual->WallOrder; + break; + case EN_TANKORDER: + v = qual->TankOrder; + break; + case EN_CONCENLIMIT: + v = qual->Climit * p->Ucf[QUALITY]; + break; + + default: + return 251; + } + *value = (double)v; + return 0; +} + +int DLLEXPORT EN_setoption(EN_Project p, int option, double value) +/*---------------------------------------------------------------- +** Input: option = analysis option code (see EN_Option) +** value = analysis option value +** Output: none +** Returns: error code +** Purpose: sets the value for an analysis option +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Hydraul *hyd = &p->hydraul; + Quality *qual = &p->quality; + + int Njuncs = net->Njuncs; + double *Ucf = p->Ucf; + int i, j, pat; + double Ke, n, ucf; + + if (!p->Openflag) return 102; + + // The EN_UNBALANCED option can be < 0 indicating that the simulation + // should be halted if no convergence is reached in EN_TRIALS. Other + // values set the number of additional trials to use with no more + // link status changes to achieve convergence. + if (option == EN_UNBALANCED) + { + hyd->ExtraIter = (int)value; + if (hyd->ExtraIter < 0) hyd->ExtraIter = -1; + return 0; + } + + // All other option values must be non-negative + if (value < 0.0) return 213; + + // Process the speficied option + switch (option) + { + case EN_TRIALS: + if (value < 1.0) return 213; + hyd->MaxIter = (int)value; + break; + + case EN_ACCURACY: + if (value < 1.e-8 || value > 1.e-1) return 213; + hyd->Hacc = value; + break; + + case EN_TOLERANCE: + qual->Ctol = value / Ucf[QUALITY]; + break; + + case EN_EMITEXPON: + if (value <= 0.0) return 213; + n = 1.0 / value; + ucf = pow(Ucf[FLOW], n) / Ucf[PRESSURE]; + for (i = 1; i <= Njuncs; i++) + { + j = EN_getnodevalue(p, i, EN_EMITTER, &Ke); + if (j == 0 && Ke > 0.0) net->Node[i].Ke = ucf / pow(Ke, n); + } + hyd->Qexp = n; + break; + + case EN_DEMANDMULT: + hyd->Dmult = value; + break; + + case EN_HEADERROR: + hyd->HeadErrorLimit = value / Ucf[HEAD]; + break; + + case EN_FLOWCHANGE: + hyd->FlowChangeLimit = value / Ucf[FLOW]; + break; + + case EN_HEADLOSSFORM: + // Can't change if hydraulic solver is open + if (p->hydraul.OpenHflag) return 262; + i = ROUND(value); + if (i < HW || i > CM) return 213; + hyd->Formflag = i; + if (hyd->Formflag == HW) hyd->Hexp = 1.852; + else hyd->Hexp = 2.0; + break; + + case EN_GLOBALEFFIC: + if (value <= 1.0 || value > 100.0) return 213; + hyd->Epump = value; + break; + + case EN_GLOBALPRICE: + hyd->Ecost = value; + break; + + case EN_GLOBALPATTERN: + pat = ROUND(value); + if (pat < 0 || pat > net->Npats) return 205; + hyd->Epat = pat; + break; + + case EN_DEMANDCHARGE: + hyd->Dcost = value; + break; + + case EN_SP_GRAVITY: + if (value <= 0.0) return 213; + Ucf[PRESSURE] *= (value / hyd->SpGrav); + hyd->SpGrav = value; + break; + + case EN_SP_VISCOS: + if (value <= 0.0) return 213; + hyd->Viscos = value * VISCOS; + break; + + case EN_CHECKFREQ: + hyd->CheckFreq = (int)value; + break; + + case EN_MAXCHECK: + hyd->MaxCheck = (int)value; + break; + + case EN_DAMPLIMIT: + hyd->DampLimit = value; + break; + + case EN_SP_DIFFUS: + qual->Diffus = value * DIFFUS; + break; + + case EN_BULKORDER: + qual->BulkOrder = value; + break; + + case EN_WALLORDER: + if (value == 0.0 || value == 1.0) qual->WallOrder = value; + else return 213; + break; + + case EN_TANKORDER: + qual->TankOrder = value; + break; + + case EN_CONCENLIMIT: + qual->Climit = value / p->Ucf[QUALITY]; + break; + + default: + return 251; + } + return 0; +} + +int DLLEXPORT EN_getflowunits(EN_Project p, int *units) +/*---------------------------------------------------------------- +** Input: none +** Output: units = flow units code (see EN_FlowUnits) +** Returns: error code +** Purpose: retrieves the flow units used by a project +**---------------------------------------------------------------- +*/ +{ + *units = -1; + if (!p->Openflag) return 102; + *units = p->parser.Flowflag; + return 0; +} + +int DLLEXPORT EN_setflowunits(EN_Project p, int units) +/*---------------------------------------------------------------- +** Input: units = flow units code (see EN_FlowUnits) +** Output: none +** Returns: error code +** Purpose: sets the flow units used by a project +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + int i, j; + double qfactor, vfactor, hfactor, efactor, xfactor, yfactor; + double *Ucf = p->Ucf; + + if (!p->Openflag) return 102; + + // Determine unit system based on flow units + qfactor = Ucf[FLOW]; + vfactor = Ucf[VOLUME]; + hfactor = Ucf[HEAD]; + efactor = Ucf[ELEV]; + + p->parser.Flowflag = units; + switch (units) + { + case LPS: + case LPM: + case MLD: + case CMH: + case CMD: + p->parser.Unitsflag = SI; + break; + default: + p->parser.Unitsflag = US; + break; + } + + // Revise pressure units depending on flow units + if (p->parser.Unitsflag != SI) p->parser.Pressflag = PSI; + else if (p->parser.Pressflag == PSI) p->parser.Pressflag = METERS; + initunits(p); + + //update curves + for (i = 1; i <= net->Ncurves; i++) + { + switch (net->Curve[i].Type) + { + case VOLUME_CURVE: + xfactor = efactor / Ucf[ELEV]; + yfactor = vfactor / Ucf[VOLUME]; + break; + case HLOSS_CURVE: + case PUMP_CURVE: + xfactor = qfactor / Ucf[FLOW]; + yfactor = hfactor / Ucf[HEAD]; + break; + case EFFIC_CURVE: + xfactor = qfactor / Ucf[FLOW]; + yfactor = 1; + break; + default: + xfactor = 1; + yfactor = 1; + } + + for (j = 0; j < net->Curve[i].Npts; j++) + { + net->Curve[i].X[j] = net->Curve[i].X[j] / xfactor; + net->Curve[i].Y[j] = net->Curve[i].Y[j] / yfactor; + } + } + return 0; +} + +int DLLEXPORT EN_gettimeparam(EN_Project p, int param, long *value) +/*---------------------------------------------------------------- +** Input: param = time parameter code (see EN_TimeParameter) +** Output: value = time parameter value +** Returns: error code +** Purpose: retrieves the value of a time parameter +**---------------------------------------------------------------- +*/ +{ + Report *rpt = &p->report; + Times *time = &p->times; + + int i; + + *value = 0; + if (!p->Openflag) return 102; + if (param < EN_DURATION || param > EN_NEXTEVENTTANK) return 251; + switch (param) + { + case EN_DURATION: + *value = time->Dur; + break; + case EN_HYDSTEP: + *value = time->Hstep; + break; + case EN_QUALSTEP: + *value = time->Qstep; + break; + case EN_PATTERNSTEP: + *value = time->Pstep; + break; + case EN_PATTERNSTART: + *value = time->Pstart; + break; + case EN_REPORTSTEP: + *value = time->Rstep; + break; + case EN_REPORTSTART: + *value = time->Rstart; + break; + case EN_RULESTEP: + *value = time->Rulestep; + break; + case EN_STATISTIC: + *value = rpt->Tstatflag; + break; + case EN_PERIODS: + *value = rpt->Nperiods; + break; + case EN_STARTTIME: + *value = time->Tstart; + break; + case EN_HTIME: + *value = time->Htime; + break; + case EN_QTIME: + *value = time->Qtime; + case EN_HALTFLAG: + break; + case EN_NEXTEVENT: + *value = time->Hstep; // find the lesser of the hydraulic time step length, + // or the time to next full/empty tank + tanktimestep(p, value); + break; + case EN_NEXTEVENTTANK: + *value = time->Hstep; + i = tanktimestep(p, value); + *value = i; + break; + default: + return 251; + } + return 0; +} + +int DLLEXPORT EN_settimeparam(EN_Project p, int param, long value) +/*---------------------------------------------------------------- +** Input: param = time parameter code (see EN_TimeParameter) +** value = time parameter value +** Output: none +** Returns: error code +** Purpose: sets the value of a time parameter +**---------------------------------------------------------------- +*/ +{ + Report *rpt = &p->report; + Times *time = &p->times; + + if (!p->Openflag) return 102; + if (value < 0) return 213; + switch (param) + { + case EN_DURATION: + time->Dur = value; + if (time->Rstart > time->Dur) time->Rstart = 0; + break; + + case EN_HYDSTEP: + if (value == 0) return 213; + time->Hstep = value; + time->Hstep = MIN(time->Pstep, time->Hstep); + time->Hstep = MIN(time->Rstep, time->Hstep); + time->Qstep = MIN(time->Qstep, time->Hstep); + break; + + case EN_QUALSTEP: + if (value == 0) return 213; + time->Qstep = value; + time->Qstep = MIN(time->Qstep, time->Hstep); + break; + + case EN_PATTERNSTEP: + if (value == 0) return 213; + time->Pstep = value; + if (time->Hstep > time->Pstep) time->Hstep = time->Pstep; + break; + + case EN_PATTERNSTART: + time->Pstart = value; + break; + + case EN_REPORTSTEP: + if (value == 0) return 213; + time->Rstep = value; + if (time->Hstep > time->Rstep) time->Hstep = time->Rstep; + break; + + case EN_REPORTSTART: + if (time->Rstart > time->Dur) return 213; + time->Rstart = value; + break; + + case EN_RULESTEP: + if (value == 0) return 213; + time->Rulestep = value; + time->Rulestep = MIN(time->Rulestep, time->Hstep); + break; + + case EN_STATISTIC: + if (value > RANGE) return 213; + rpt->Tstatflag = (char)value; + break; + + case EN_HTIME: + time->Htime = value; + break; + + case EN_QTIME: + time->Qtime = value; + break; + + default: + return 251; + } + return 0; +} + +int DLLEXPORT EN_getqualinfo(EN_Project p, int *qualType, char *chemName, + char *chemUnits, int *traceNode) +/*---------------------------------------------------------------- +** Input: none +** Output: qualType = type of quality analysis to run (see EN_QualityType) +** chemName = name of chemical constituent +** chemUnits = concentration units of constituent +** traceNode = index of node being traced (if applicable) +** Returns: error code +** Purpose: retrieves water quality analysis options +**---------------------------------------------------------------- +*/ +{ + EN_getqualtype(p, qualType, traceNode); + if (p->quality.Qualflag == CHEM) + { + strncpy(chemName, p->quality.ChemName, MAXID); + strncpy(chemUnits, p->quality.ChemUnits, MAXID); + } + else if (p->quality.Qualflag == TRACE) + { + strncpy(chemName, w_TRACE, MAXID); + strncpy(chemUnits, u_PERCENT, MAXID); + } + else if (p->quality.Qualflag == AGE) + { + strncpy(chemName, w_AGE, MAXID); + strncpy(chemUnits, u_HOURS, MAXID); + } + else + { + strncpy(chemName, "", MAXID); + strncpy(chemUnits, "", MAXID); + } + return 0; +} + +int DLLEXPORT EN_getqualtype(EN_Project p, int *qualType, int *traceNode) +/*---------------------------------------------------------------- +** Input: none +** Output: qualType = type of quality analysis to run (see EN_QualityType) +** traceNode = index of node being traced (for qualType = EN_TRACE) +** Output: none +** Returns: error code +** Purpose: retrieves type of quality analysis being made +**---------------------------------------------------------------- +*/ +{ + *traceNode = 0; + if (!p->Openflag) return 102; + *qualType = p->quality.Qualflag; + if (p->quality.Qualflag == TRACE) *traceNode = p->quality.TraceNode; + return 0; +} + +int DLLEXPORT EN_setqualtype(EN_Project p, int qualType, char *chemName, + char *chemUnits, char *traceNode) +/*---------------------------------------------------------------- +** Input: qualType = type of quality analysis to run (see EN_QualityType) +** chemname = name of chemical constituent +** chemunits = concentration units of constituent +** tracenode = ID name of node being traced (if applicable) +** Output: none +** Returns: error code +** Purpose: sets water quality analysis options +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Report *rpt = &p->report; + Quality *qual = &p->quality; + + double *Ucf = p->Ucf; + int i, oldQualFlag, traceNodeIndex; + double ccf = 1.0; + + if (!p->Openflag) return 102; + if (qual->OpenQflag) return 262; + if (qualType < NONE || qualType > TRACE) return 251; + if (qualType == TRACE) + { + traceNodeIndex = findnode(net, traceNode); + if (traceNodeIndex == 0) return 212; + } + + oldQualFlag = qual->Qualflag; + qual->Qualflag = qualType; + qual->Ctol *= Ucf[QUALITY]; + if (qual->Qualflag == CHEM) // Chemical analysis + { + strncpy(qual->ChemName, chemName, MAXID); + strncpy(qual->ChemUnits, chemUnits, MAXID); + strncpy(rpt->Field[QUALITY].Units, qual->ChemUnits, MAXID); + strncpy(rpt->Field[REACTRATE].Units, qual->ChemUnits, MAXID); + strcat(rpt->Field[REACTRATE].Units, t_PERDAY); + ccf = 1.0 / LperFT3; + } + if (qual->Qualflag == TRACE) // Source trace analysis + { + qual->TraceNode = findnode(net, traceNode); + if (qual->TraceNode == 0) return 212; + strncpy(qual->ChemName, w_TRACE, MAXID); + strncpy(qual->ChemUnits, u_PERCENT, MAXID); + strcpy(rpt->Field[QUALITY].Units, u_PERCENT); + } + if (qual->Qualflag == AGE) // Water age analysis + { + strncpy(qual->ChemName, w_AGE, MAXID); + strncpy(qual->ChemUnits, u_HOURS, MAXID); + strcpy(rpt->Field[QUALITY].Units, u_HOURS); + } + + // When changing from CHEM to AGE or TRACE, nodes initial quality + // values must be returned to their original ones + if ((qual->Qualflag == AGE || qual->Qualflag == TRACE) && oldQualFlag == CHEM) + { + for (i = 1; i <= p->network.Nnodes; i++) + { + p->network.Node[i].C0 *= Ucf[QUALITY]; + } + } + + Ucf[QUALITY] = ccf; + Ucf[LINKQUAL] = ccf; + Ucf[REACTRATE] = ccf; + qual->Ctol /= Ucf[QUALITY]; + return 0; +} + +/******************************************************************** + + Node Functions + +********************************************************************/ + +int DLLEXPORT EN_addnode(EN_Project p, char *id, int nodeType, int *index) +/*---------------------------------------------------------------- +** Input: id = node ID name +** nodeType = type of node (see EN_NodeType) +** Output: index = index of newly added node +** Returns: error code +** Purpose: adds a new node to a project +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Hydraul *hyd = &p->hydraul; + Quality *qual = &p->quality; + + int i, nIdx, size; + Stank *tank; + Snode *node; + Scontrol *control; + + // Cannot modify network structure while solvers are active + *index = 0; + if (!p->Openflag) return 102; + if (hyd->OpenHflag || qual->OpenQflag) return 262; + + // Check if id name contains invalid characters + if (!namevalid(id)) return 252; + + // Check if a node with same id already exists + if (EN_getnodeindex(p, id, &i) == 0) return 215; + + // Check for valid node type + if (nodeType < EN_JUNCTION || nodeType > EN_TANK) return 251; + + // Grow node-related arrays to accomodate the new node + size = (net->Nnodes + 2) * sizeof(Snode); + net->Node = (Snode *)realloc(net->Node, size); + size = (net->Nnodes + 2) * sizeof(double); + hyd->NodeDemand = (double *)realloc(hyd->NodeDemand, size); + qual->NodeQual = (double *)realloc(qual->NodeQual, size); + hyd->NodeHead = (double *)realloc(hyd->NodeHead, size); + + // Actions taken when a new Junction is added + if (nodeType == EN_JUNCTION) + { + // shift indices of non-Junction nodes at end of Node array + for (i = net->Nnodes; i > net->Njuncs; i--) + { + hashtable_update(net->NodeHashTable, net->Node[i].ID, i + 1); + net->Node[i + 1] = net->Node[i]; + } + + // set index of new Junction node + net->Njuncs++; + nIdx = net->Njuncs; + node = &net->Node[nIdx]; + node->D = NULL; + adddemand(node, 0.0, 0, NULL); + + // shift indices of Tank array + for (i = 1; i <= net->Ntanks; i++) + { + net->Tank[i].Node += 1; + } + // shift indices of Links, if necessary + for (i = 1; i <= net->Nlinks; i++) + { + if (net->Link[i].N1 > net->Njuncs - 1) net->Link[i].N1 += 1; + if (net->Link[i].N2 > net->Njuncs - 1) net->Link[i].N2 += 1; + } + // shift indices of tanks/reservoir nodes in controls + for (i = 1; i <= net->Ncontrols; ++i) + { + control = &net->Control[i]; + if (control->Node > net->Njuncs - 1) control->Node += 1; + } + // adjust indices of tanks/reservoirs in Rule premises (see RULES.C) + adjusttankrules(p); + } + + // Actions taken when a new Tank/Reservoir is added + else + { + nIdx = net->Nnodes + 1; + node = &net->Node[nIdx]; + node->D = NULL; + net->Ntanks++; + + // resize tanks array + net->Tank = (Stank *)realloc(net->Tank, (net->Ntanks + 1) * sizeof(Stank)); + tank = &net->Tank[net->Ntanks]; + + // set default values for new tank or reservoir + tank->Node = nIdx; + tank->Pat = 0; + if (nodeType == EN_TANK) tank->A = 1.0; + else tank->A = 0; + tank->Hmin = 0; + tank->Hmax = 0; + tank->H0 = 0; + tank->Vmin = 0; + tank->Vmax = 0; + tank->V0 = 0; + tank->Kb = 0; + tank->V = 0; + tank->C = 0; + tank->Pat = 0; + tank->Vcurve = 0; + tank->MixModel = 0; + tank->V1max = 10000; + tank->CanOverflow = FALSE; + } + net->Nnodes++; + p->parser.MaxNodes = net->Nnodes; + strncpy(node->ID, id, MAXID); + + // set default values for new node + node->Type = nodeType; + node->El = 0; + node->S = NULL; + node->C0 = 0; + node->Ke = 0; + node->Rpt = 0; + node->ResultIndex = 0; + node->X = MISSING; + node->Y = MISSING; + node->Comment = NULL; + + // Insert new node into hash table + hashtable_insert(net->NodeHashTable, node->ID, nIdx); + *index = nIdx; + return 0; +} + +int DLLEXPORT EN_deletenode(EN_Project p, int index, int actionCode) +/*---------------------------------------------------------------- +** Input: index = index of the node to delete +** actionCode = how to treat controls that contain the link +** or its incident links: +** EN_UNCONDITIONAL deletes all such controls plus the node, +** EN_CONDITIONAL does not delete the node if it or any of +** its links appear in a control and returns an error code +** Output: none +** Returns: error code +** Purpose: deletes a node from a project +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + int i, nodeType, tankindex; + Snode *node; + + // Cannot modify network structure while solvers are active + if (!p->Openflag) return 102; + if (p->hydraul.OpenHflag || p->quality.OpenQflag) return 262; + + // Check that node exists + if (index <= 0 || index > net->Nnodes) return 203; + if (actionCode < EN_UNCONDITIONAL || actionCode > EN_CONDITIONAL) return 251; + + // Can't delete a water quality trace node + if (index == p->quality.TraceNode) return 260; + + // Do not delete a node contained in a control or is connected to a link + if (actionCode == EN_CONDITIONAL) + { + if (incontrols(p, NODE, index)) return 261; + for (i = 1; i <= net->Nlinks; i++) + { + if (net->Link[i].N1 == index || + net->Link[i].N2 == index) return 259; + } + } + + // Get a reference to the node & its type + node = &net->Node[index]; + EN_getnodetype(p, index, &nodeType); + + // Remove node from its hash table + hashtable_delete(net->NodeHashTable, node->ID); + + // Free memory allocated to node's demands, WQ source & comment + freedemands(node); + free(node->S); + free(node->Comment); + + // Shift position of higher entries in Node & Coord arrays down one + for (i = index; i <= net->Nnodes - 1; i++) + { + net->Node[i] = net->Node[i + 1]; + // ... update node's entry in the hash table + hashtable_update(net->NodeHashTable, net->Node[i].ID, i); + } + + // If deleted node is a tank, remove it from the Tank array + if (nodeType != EN_JUNCTION) + { + tankindex = findtank(net, index); + for (i = tankindex; i <= net->Ntanks - 1; i++) + { + net->Tank[i] = net->Tank[i + 1]; + } + } + + // Shift higher node indices in Tank array down one + for (i = 1; i <= net->Ntanks; i++) + { + if (net->Tank[i].Node > index) net->Tank[i].Node -= 1; + } + + // Delete any links connected to the deleted node + // (Process links in reverse order to maintain their indexing) + for (i = net->Nlinks; i >= 1; i--) + { + if (net->Link[i].N1 == index || + net->Link[i].N2 == index) EN_deletelink(p, i, EN_UNCONDITIONAL); + } + + // Adjust indices of all link end nodes + for (i = 1; i <= net->Nlinks; i++) + { + if (net->Link[i].N1 > index) net->Link[i].N1 -= 1; + if (net->Link[i].N2 > index) net->Link[i].N2 -= 1; + } + + // Delete any control containing the node + for (i = net->Ncontrols; i >= 1; i--) + { + if (net->Control[i].Node == index) EN_deletecontrol(p, i); + } + + // Adjust higher numbered link indices in remaining controls + for (i = 1; i <= net->Ncontrols; i++) + { + if (net->Control[i].Node > index) net->Control[i].Node--; + } + + // Make necessary adjustments to rule-based controls + adjustrules(p, EN_R_NODE, index); + + // Reduce counts of node types + if (nodeType == EN_JUNCTION) net->Njuncs--; + else net->Ntanks--; + net->Nnodes--; + return 0; +} + +int DLLEXPORT EN_getnodeindex(EN_Project p, char *id, int *index) +/*---------------------------------------------------------------- +** Input: id = node ID name +** Output: index = node index +** Returns: error code +** Purpose: retrieves the index of a node +**---------------------------------------------------------------- +*/ +{ + *index = 0; + if (!p->Openflag) return 102; + *index = findnode(&p->network, id); + if (*index == 0) return 203; + else return 0; +} + +int DLLEXPORT EN_getnodeid(EN_Project p, int index, char *id) +/*---------------------------------------------------------------- +** Input: index = node index +** Output: id = node ID name +** Returns: error code +** Purpose: retrieves the name of a node +**---------------------------------------------------------------- +*/ +{ + strcpy(id, ""); + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Nnodes) return 203; + strcpy(id, p->network.Node[index].ID); + return 0; +} + +int DLLEXPORT EN_setnodeid(EN_Project p, int index, char *newid) +/*---------------------------------------------------------------- +** Input: index = node index +** newid = new node ID name +** Output: none +** Returns: error code +** Purpose: sets the ID name of a node +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + // Check for valid arguments + if (index <= 0 || index > net->Nnodes) return 203; + if (!namevalid(newid)) return 252; + + // Check if another node with same name exists + if (hashtable_find(net->NodeHashTable, newid) > 0) return 215; + + // Replace the existing node ID with the new value + hashtable_delete(net->NodeHashTable, net->Node[index].ID); + strncpy(net->Node[index].ID, newid, MAXID); + hashtable_insert(net->NodeHashTable, net->Node[index].ID, index); + return 0; +} + +int DLLEXPORT EN_getnodetype(EN_Project p, int index, int *nodeType) +/*---------------------------------------------------------------- +** Input: index = node index +** Output: nodeType = node type (see EN_NodeType) +** Returns: error code +** Purpose: retrieves the type of a node +**---------------------------------------------------------------- +*/ +{ + *nodeType = -1; + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Nnodes) return 203; + if (index <= p->network.Njuncs) *nodeType = EN_JUNCTION; + else + { + if (p->network.Tank[index - p->network.Njuncs].A == 0.0) + { + *nodeType = EN_RESERVOIR; + } + else *nodeType = EN_TANK; + } + return 0; +} + +int DLLEXPORT EN_getnodevalue(EN_Project p, int index, int property, double *value) +/*---------------------------------------------------------------- +** Input: index = node index +** property = node property code (see EN_NodeProperty) +** Output: value = node property value +** Returns: error code +** Purpose: retrieves a property value for a node +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Hydraul *hyd = &p->hydraul; + Quality *qual = &p->quality; + + double v = 0.0; + Psource source; + + Snode *Node = net->Node; + Stank *Tank = net->Tank; + + int nJuncs = net->Njuncs; + + double *Ucf = p->Ucf; + double *NodeHead = hyd->NodeHead; + double *NodeQual = qual->NodeQual; + + // Check for valid arguments + *value = 0.0; + if (!p->Openflag) return 102; + if (index <= 0 || index > net->Nnodes) return 203; + + // Retrieve requested property + switch (property) + { + case EN_ELEVATION: + v = Node[index].El * Ucf[ELEV]; + break; + + case EN_BASEDEMAND: + // NOTE: primary demand category is first on demand list + if (index <= nJuncs) + { + if (Node[index].D) v = Node[index].D->Base * Ucf[FLOW]; + } + break; + + case EN_PATTERN: + // NOTE: primary demand category is first on demand list + if (index <= nJuncs) + { + if (Node[index].D) v = (double)(Node[index].D->Pat); + } + else v = (double)(Tank[index - nJuncs].Pat); + break; + + case EN_EMITTER: + v = 0.0; + if (Node[index].Ke > 0.0) + { + v = Ucf[FLOW] / pow((Ucf[PRESSURE] * Node[index].Ke), (1.0 / hyd->Qexp)); + } + break; + + case EN_INITQUAL: + v = Node[index].C0 * Ucf[QUALITY]; + break; + + case EN_SOURCEQUAL: + case EN_SOURCETYPE: + case EN_SOURCEMASS: + case EN_SOURCEPAT: + source = Node[index].S; + if (source == NULL) return 240; + if (property == EN_SOURCEQUAL) v = source->C0; + else if (property == EN_SOURCEMASS) v = source->Smass * 60.0; + else if (property == EN_SOURCEPAT) v = source->Pat; + else v = source->Type; + break; + + case EN_TANKLEVEL: + if (index <= nJuncs) return 0; + v = (Tank[index - nJuncs].H0 - Node[index].El) * Ucf[ELEV]; + break; + + case EN_INITVOLUME: + v = 0.0; + if (index > nJuncs) v = Tank[index - nJuncs].V0 * Ucf[VOLUME]; + break; + + case EN_MIXMODEL: + v = MIX1; + if (index > nJuncs) v = Tank[index - nJuncs].MixModel; + break; + + case EN_MIXZONEVOL: + v = 0.0; + if (index > nJuncs) v = Tank[index - nJuncs].V1max * Ucf[VOLUME]; + break; + + case EN_DEMAND: + v = hyd->NodeDemand[index] * Ucf[FLOW]; + break; + + case EN_HEAD: + v = NodeHead[index] * Ucf[HEAD]; + break; + + case EN_PRESSURE: + v = (NodeHead[index] - Node[index].El) * Ucf[PRESSURE]; + break; + + case EN_QUALITY: + v = NodeQual[index] * Ucf[QUALITY]; + break; + + case EN_TANKDIAM: + v = 0.0; + if (index > nJuncs) + { + v = sqrt(4.0 / PI * Tank[index - nJuncs].A) * Ucf[ELEV]; + } + break; + + case EN_MINVOLUME: + v = 0.0; + if (index > nJuncs) v = Tank[index - nJuncs].Vmin * Ucf[VOLUME]; + break; + + case EN_MAXVOLUME: + v = 0.0; + if (index > nJuncs) v = Tank[index - nJuncs].Vmax * Ucf[VOLUME]; + break; + + case EN_VOLCURVE: + v = 0.0; + if (index > nJuncs) v = Tank[index - nJuncs].Vcurve; + break; + + case EN_MINLEVEL: + v = 0.0; + if (index > nJuncs) + { + v = (Tank[index - nJuncs].Hmin - Node[index].El) * Ucf[ELEV]; + } + break; + + case EN_MAXLEVEL: + v = 0.0; + if (index > nJuncs) + { + v = (Tank[index - nJuncs].Hmax - Node[index].El) * Ucf[ELEV]; + } + break; + + case EN_MIXFRACTION: + v = 1.0; + if (index > nJuncs && Tank[index - nJuncs].Vmax > 0.0) + { + v = Tank[index - nJuncs].V1max / Tank[index - nJuncs].Vmax; + } + break; + + case EN_TANK_KBULK: + v = 0.0; + if (index > nJuncs) v = Tank[index - nJuncs].Kb * SECperDAY; + break; + + case EN_TANKVOLUME: + if (index <= nJuncs) return 0; + v = tankvolume(p, index - nJuncs, NodeHead[index]) * Ucf[VOLUME]; + break; + + case EN_CANOVERFLOW: + if (Node[index].Type != TANK) return 0; + v = Tank[index - nJuncs].CanOverflow; + break; + + case EN_DEMANDDEFICIT: + if (index > nJuncs) return 0; + // After an analysis, DemandFlow contains node's required demand + // while NodeDemand contains delivered demand + emitter flow + if (hyd->DemandFlow[index] < 0.0) return 0; + v = (hyd->DemandFlow[index] - + (hyd->NodeDemand[index] - hyd->EmitterFlow[index])) * Ucf[FLOW]; + break; + + default: + return 251; + } + *value = v; + return 0; +} + +int DLLEXPORT EN_setnodevalue(EN_Project p, int index, int property, double value) +/*---------------------------------------------------------------- +** Input: index = node index +** property = node property code (see EN_NodeProperty) +** value = node property value +** Output: none +** Returns: error code +** Purpose: sets a property value for a node +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Hydraul *hyd = &p->hydraul; + Quality *qual = &p->quality; + + Snode *Node = net->Node; + Stank *Tank = net->Tank; + Scurve *curve; + + const int nNodes = net->Nnodes; + const int nJuncs = net->Njuncs; + const int nPats = net->Npats; + + double *Ucf = p->Ucf; + + int i, j, n; + Psource source; + double hTmp; + double vTmp; + + if (!p->Openflag) return 102; + if (index <= 0 || index > nNodes) return 203; + switch (property) + { + case EN_ELEVATION: + if (index <= nJuncs) Node[index].El = value / Ucf[ELEV]; + else + { + value = (value / Ucf[ELEV]) - Node[index].El; + j = index - nJuncs; + Tank[j].H0 += value; + Tank[j].Hmin += value; + Tank[j].Hmax += value; + Node[index].El += value; + hyd->NodeHead[index] += value; + } + break; + + case EN_BASEDEMAND: + // NOTE: primary demand category is first on demand list + if (index <= nJuncs) + { + if (Node[index].D) Node[index].D->Base = value / Ucf[FLOW]; + } + break; + + case EN_PATTERN: + // NOTE: primary demand category is first on demand list + j = ROUND(value); + if (j < 0 || j > nPats) return 205; + if (index <= nJuncs) + { + if (Node[index].D) Node[index].D->Pat = j; + } + else Tank[index - nJuncs].Pat = j; + break; + + case EN_EMITTER: + if (index > nJuncs) return 0; + if (value < 0.0) return 209; + if (value > 0.0) value = pow((Ucf[FLOW] / value), hyd->Qexp) / Ucf[PRESSURE]; + Node[index].Ke = value; + break; + + case EN_INITQUAL: + if (value < 0.0) return 209; + Node[index].C0 = value / Ucf[QUALITY]; + if (index > nJuncs) Tank[index - nJuncs].C = Node[index].C0; + break; + + case EN_SOURCEQUAL: + case EN_SOURCETYPE: + case EN_SOURCEPAT: + if (value < 0.0) return 209; + source = Node[index].S; + if (source == NULL) + { + source = (struct Ssource *)malloc(sizeof(struct Ssource)); + if (source == NULL) return 101; + source->Type = CONCEN; + source->C0 = 0.0; + source->Pat = 0; + Node[index].S = source; + } + if (property == EN_SOURCEQUAL) source->C0 = value; + else if (property == EN_SOURCEPAT) + { + j = ROUND(value); + if (j < 0 || j > nPats) return 205; + source->Pat = j; + } + else // property == EN_SOURCETYPE + { + j = ROUND(value); + if (j < CONCEN || j > FLOWPACED) return 251; + else source->Type = (char)j; + } + break; + + case EN_TANKLEVEL: + if (index <= nJuncs) return 0; + j = index - nJuncs; + if (Tank[j].A == 0.0) /* Tank is a reservoir */ + { + Tank[j].H0 = value / Ucf[ELEV]; + Tank[j].Hmin = Tank[j].H0; + Tank[j].Hmax = Tank[j].H0; + Node[index].El = Tank[j].H0; + hyd->NodeHead[index] = Tank[j].H0; + } + else + { + value = Node[index].El + value / Ucf[ELEV]; + if (value > Tank[j].Hmax || value < Tank[j].Hmin) return 225; + Tank[j].H0 = value; + Tank[j].V0 = tankvolume(p, j, Tank[j].H0); + // Resetting Volume in addition to initial volume + Tank[j].V = Tank[j].V0; + hyd->NodeHead[index] = Tank[j].H0; + } + break; + + case EN_TANKDIAM: + if (value <= 0.0) return 209; // invalid diameter + if (index <= nJuncs) return 0; // node is not a tank + j = index - nJuncs; // tank index + if (Tank[j].A == 0.0) return 0; // tank is a reservoir + value /= Ucf[ELEV]; // diameter in feet + Tank[j].A = PI * SQR(value) / 4.0; // new tank area + if (Tank[j].Vcurve > 0) // tank has a volume curve + { + Tank[j].Vcurve = 0; // remove volume curve + + // Since the volume curve no longer applies we assume that the tank's + // shape below Hmin is cylindrical and Vmin equals area times Hmin + Tank[j].Vmin = Tank[j].A * Tank[j].Hmin; + } + // Since tank's area has changed its volumes must be updated + // NOTE: For a non-volume curve tank we can't change the Vmin + // associated with a Hmin since we don't know the tank's + // shape below Hmin. Vmin can always be changed by setting + // EN_MINVOLUME in a subsequent function call. + Tank[j].V0 = tankvolume(p, j, Tank[j].H0); // new init. volume + vTmp = Tank[j].Vmax; // old max. volume + Tank[j].Vmax = tankvolume(p, j, Tank[j].Hmax); // new max. volume + Tank[j].V1max *= Tank[j].Vmax / vTmp; // new mix zone volume + break; + + case EN_MINVOLUME: + if (value < 0.0) return 209; // invalid volume + if (index <= nJuncs) return 0; // node is not a tank + j = index - nJuncs; // tank index + if (Tank[j].A == 0.0) return 0; // tank is a reservoir + i = Tank[j].Vcurve; // volume curve index + if (i > 0) // tank has a volume curve + { + curve = &net->Curve[i]; // curve object + if (value < curve->Y[0]) return 225; // volume off of curve + value /= Ucf[VOLUME]; // volume in ft3 + hTmp = tankgrade(p, j, value); // head at given volume + if (hTmp > Tank[j].H0 || + hTmp > Tank[j].Hmax) return 225; // invalid water levels + Tank[j].Hmin = hTmp; // new min. head + Tank[j].Vmin = value; // new min. volume + } + else // tank has no volume curve + { + // If the volume supplied by the function is 0 then the tank shape + // below Hmin is assumed to be cylindrical and a new Vmin value is + // computed. Otherwise Vmin is set to the supplied value. + if (value == 0.0) Tank[j].Vmin = Tank[j].A * Tank[j].Hmin; + else Tank[j].Vmin = value / Ucf[VOLUME]; + + // Since Vmin changes the other volumes need updating + Tank[j].V0 = tankvolume(p, j, Tank[j].H0); // new init. volume + vTmp = Tank[j].Vmax; // old max. volume + Tank[j].Vmax = tankvolume(p, j, Tank[j].Hmax); // new max. volume + Tank[j].V1max *= Tank[j].Vmax / vTmp; // new mix zone volume + } + break; + + case EN_VOLCURVE: + // NOTE: Setting EN_VOLCURVE to 0 to remove a volume curve is not valid. + // One should instead set a value for EN_TANKDIAM. + i = ROUND(value); // curve index + if (i <= 0 || + i > net->Ncurves) return 205; // invalid curve index + if (index <= nJuncs) return 0; // node not a tank + j = index - nJuncs; // tank index + if (Tank[j].A == 0.0) return 0; // tank is a reservoir + curve = &net->Curve[i]; // curve object + + // Check that tank's min/max levels lie within curve + value = (Tank[j].Hmin - Node[index].El) * Ucf[ELEV]; + if (value < curve->X[0]) return 225; + value = (Tank[j].Hmax - Node[index].El) * Ucf[ELEV]; + n = curve->Npts - 1; + if (value > curve->X[n]) return 225; + + Tank[j].Vcurve = i; // assign curve to tank + Tank[j].Vmin = tankvolume(p, j, Tank[j].Hmin); // new min. volume + Tank[j].V0 = tankvolume(p, j, Tank[j].H0); // new init. volume + vTmp = Tank[j].Vmax; // old max. volume + Tank[j].Vmax = tankvolume(p, j, Tank[j].Hmax); // new max. volume + Tank[j].V1max *= Tank[j].Vmax / vTmp; // new mix zone volume + Tank[j].A = (curve->Y[n] - curve->Y[0]) / // nominal area + (curve->X[n] - curve->X[0]); + break; + + case EN_MINLEVEL: + if (value < 0.0) return 209; // invalid water level + if (index <= nJuncs) return 0; // node not a tank + j = index - nJuncs; // tank index + if (Tank[j].A == 0.0) return 0; // tank is a reservoir + hTmp = value / Ucf[ELEV] + Node[index].El; // convert level to head + if (hTmp >= Tank[j].Hmax || + hTmp > Tank[j].H0) return 225; // invalid water levels + i = Tank[j].Vcurve; // volume curve index + if (i > 0) // tank has a volume curve + { + curve = &net->Curve[i]; + if (value < curve->X[0]) return 225; // new level is off curve + Tank[j].Vmin = tankvolume(p, j, hTmp); // new min. volume + } + Tank[j].Hmin = hTmp; + // NOTE: We assume that for non-volume curve tanks Vmin doesn't change + // with Hmin. If not the case then a subsequent call setting + // EN_MINVOLUME must be made. + break; + + case EN_MAXLEVEL: + if (value <= 0.0) return 209; // invalid water level + if (index <= nJuncs) return 0; // node not a tank + j = index - nJuncs; // tank index + if (Tank[j].A == 0.0) return 0; // tank is a reservoir + hTmp = value / Ucf[ELEV] + Node[index].El; // convert level to head + if (hTmp < Tank[j].Hmin || + hTmp < Tank[j].H0) return 225; // invalid water levels + i = Tank[j].Vcurve; // volume curve index + if (i > 0) // tank has a volume curve + { + curve = &net->Curve[i]; + n = curve->Npts - 1; // last point on curve + if (value > curve->X[n]) return 225; // new level is off curve + } + Tank[j].Hmax = hTmp; // new max. head + vTmp = Tank[j].Vmax; // old max. volume + Tank[j].Vmax = tankvolume(p, j, hTmp); // new max. volume + Tank[j].V1max *= Tank[j].Vmax / vTmp; // new mix zone volume + break; + + case EN_MIXMODEL: + j = ROUND(value); + if (index <= nJuncs) return 0; + if (j < MIX1 || j > LIFO) return 251; + if (Tank[index - nJuncs].A > 0.0) + { + Tank[index - nJuncs].MixModel = (char)j; + } + break; + + case EN_MIXFRACTION: + if (index <= nJuncs) return 0; + if (value < 0.0 || value > 1.0) return 209; + j = index - nJuncs; + if (Tank[j].A > 0.0) + { + Tank[j].V1max = value * Tank[j].Vmax; + } + break; + + case EN_TANK_KBULK: + if (index <= nJuncs) return 0; + j = index - nJuncs; + if (Tank[j].A > 0.0) + { + Tank[j].Kb = value / SECperDAY; + qual->Reactflag = 1; + } + break; + + case EN_CANOVERFLOW: + if (Node[index].Type != TANK) return 0; + Tank[index - nJuncs].CanOverflow = (value != 0.0); + break; + + default: + return 251; + } + return 0; +} + +int DLLEXPORT EN_setjuncdata(EN_Project p, int index, double elev, + double dmnd, char *dmndpat) +/*---------------------------------------------------------------- +** Input: index = junction node index +** elev = junction elevation +** dmnd = junction primary base demand +** dmndpat = name of primary demand time pattern +** Output: none +** Returns: error code +** Purpose: sets several properties for a junction node +**---------------------------------------------------------------- +*/ +{ + int patIndex = 0; + Snode *node; + + // Check that junction exists + if (!p->Openflag) return 102; + if (index <= 0 || index > p->network.Njuncs) return 203; + + // Check that demand pattern exists + if (dmndpat && strlen(dmndpat) > 0) + { + if (EN_getpatternindex(p, dmndpat, &patIndex) > 0) return 205; + } + + // Assign demand parameters to junction's primary demand category + node = &(p->network.Node[index]); + dmnd /= p->Ucf[FLOW]; + // Category exists - update its properties + if (node->D) + { + (node->D)->Base = dmnd; + (node->D)->Pat = patIndex; + } + // No demand categories exist -- create a new one + else if (!adddemand(node, dmnd, patIndex, NULL)) return 101; + + // Assign new elevation value to junction + node->El = elev / p->Ucf[ELEV]; + return 0; +} + +int DLLEXPORT EN_settankdata(EN_Project p, int index, double elev, + double initlvl, double minlvl, + double maxlvl, double diam, + double minvol, char *volcurve) +/*---------------------------------------------------------------- +** Input: index = tank node index +** elev = tank bottom elevation +** initlvl = initial water depth +** minlvl = minimum water depth +** maxlvl = maximum water depth +** diam = tank diameter +** minvol = tank volume at minimum level +** volCurve = name of curve for volume v. level +** Output: none +** Returns: error code +** Purpose: sets several properties for a tank node +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + int i, j, n, curveIndex = 0; + double area, elevation = elev; + double *Ucf = p->Ucf; + Stank *Tank = net->Tank; + Scurve *curve; + + // Check that tank exists + if (!p->Openflag) return 102; + if (index <= net->Njuncs || index > net->Nnodes) return 203; + j = index - net->Njuncs; + if (Tank[j].A == 0) return 0; // Tank is a Reservoir + + // Check for valid parameter values + if (initlvl < 0.0 || minlvl < 0.0 || maxlvl < 0.0) return 209; + if (minlvl > initlvl || minlvl > maxlvl || initlvl > maxlvl) return 225; + if (diam < 0.0 || minvol < 0.0) return 209; + + // volume curve supplied + if (strlen(volcurve) > 0) + { + for (i = 1; i <= net->Ncurves; i++) + { + if (strcmp(volcurve, net->Curve[i].ID) == 0) + { + curveIndex = i; + break; + } + } + if (curveIndex == 0) return 206; + curve = &net->Curve[curveIndex]; + n = curve->Npts - 1; + if (minlvl < curve->X[0] || maxlvl > curve->X[n]) return 225; + area = (curve->Y[n] - curve->Y[0]) / (curve->X[n] - curve->X[0]); + } + + // Tank diameter supplied + else area = PI * diam * diam / 4.0; + + // Assign parameters to tank object + net->Node[Tank[j].Node].El = elevation; + Tank[j].A = area / Ucf[ELEV] / Ucf[ELEV]; + Tank[j].H0 = elevation + initlvl / Ucf[ELEV]; + Tank[j].Hmin = elevation + minlvl / Ucf[ELEV]; + Tank[j].Hmax = elevation + maxlvl / Ucf[ELEV]; + Tank[j].Vcurve = curveIndex; + if (curveIndex == 0) + { + if (minvol > 0.0) Tank[j].Vmin = minvol / Ucf[VOLUME]; + else Tank[j].Vmin = Tank[j].A * Tank[j].Hmin; + } + else Tank[j].Vmin = tankvolume(p, j, Tank[j].Hmin); + Tank[j].V0 = tankvolume(p, j, Tank[j].H0); + Tank[j].Vmax = tankvolume(p, j, Tank[j].Hmax); + return 0; +} + +int DLLEXPORT EN_getcoord(EN_Project p, int index, double *x, double *y) +/*---------------------------------------------------------------- +** Input: index = node index +** Output: x = node x-coordinate +** y = node y-coordinate +** Returns: error code +** Purpose: retrieves the coordinates of a node +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Snode *node; + + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Nnodes) return 203; + + // check if node has coords + node = &net->Node[index]; + if (node->X == MISSING || + node->Y == MISSING) return 254; + + *x = (double)(node->X); + *y = (double)(node->Y); + return 0; +} + +int DLLEXPORT EN_setcoord(EN_Project p, int index, double x, double y) +/*---------------------------------------------------------------- +** Input: index = node index +** x = node x-coordinate +** y = node y-coordinate +** Output: none +** Returns: error code +** Purpose: sets the coordinates of a node +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Snode *node; + + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Nnodes) return 203; + node = &net->Node[index]; + node->X = x; + node->Y = y; + return 0; +} + +/******************************************************************** + + Nodal Demand Functions + +********************************************************************/ + +int DLLEXPORT EN_getdemandmodel(EN_Project p, int *model, double *pmin, + double *preq, double *pexp) +/*---------------------------------------------------------------- +** Input: none +** Output: model = type of demand model (see EN_DemandModel) +** pmin = minimum pressure for any demand +** preq = required pressure for full demand +** pexp = exponent in pressure dependent demand formula +** Returns: error code +** Purpose: retrieves the parameters of a project's demand model +**---------------------------------------------------------------- +*/ +{ + *model = p->hydraul.DemandModel; + *pmin = p->hydraul.Pmin * p->Ucf[PRESSURE]; + *preq = p->hydraul.Preq * p->Ucf[PRESSURE]; + *pexp = p->hydraul.Pexp; + return 0; +} + +int DLLEXPORT EN_setdemandmodel(EN_Project p, int model, double pmin, + double preq, double pexp) +/*---------------------------------------------------------------- +** Input: model = type of demand model (see EN_DemandModel) +** pmin = minimum pressure for any demand +** preq = required pressure for full demand +** pexp = exponent in pressure dependent demand formula +** Output: none +** Returns: error code +** Purpose: sets the parameters of a project's demand model +**---------------------------------------------------------------- +*/ +{ + if (model < 0 || model > EN_PDA) return 251; + if (model == EN_PDA) + { + if (pexp <= 0.0) return 208; + if (pmin < 0.0) return 208; + if (preq - pmin < MINPDIFF) return 208; + } + p->hydraul.DemandModel = model; + p->hydraul.Pmin = pmin / p->Ucf[PRESSURE]; + p->hydraul.Preq = preq / p->Ucf[PRESSURE]; + p->hydraul.Pexp = pexp; + return 0; +} + +int DLLEXPORT EN_adddemand(EN_Project p, int nodeIndex, double baseDemand, + char *demandPattern, char *demandName) +/*---------------------------------------------------------------- +** Input: nodeIndex = node index +** baseDemand = baseline demand value +** demandPattern = name of demand's time pattern (can be NULL or empty) +** demandName = name of demand's category (can be NULL or empty) +** Returns: error code +** Purpose: adds a new demand category to a junction node +**---------------------------------------------------------------- +*/ +{ + int patIndex = 0; + Snode *node; + + // Check for valid arguments + if (!p->Openflag) return 102; + if (nodeIndex <= 0 || nodeIndex > p->network.Nnodes) return 203; + if (demandPattern && strlen(demandPattern) > 0) + { + if (EN_getpatternindex(p, demandPattern, &patIndex) > 0) return 205; + } + + // Do nothing if node is not a junction + if (nodeIndex > p->network.Njuncs) return 0; + + // Add the new demand to the node's demands list + node = &(p->network.Node[nodeIndex]); + if (!adddemand(node, baseDemand / p->Ucf[FLOW], patIndex, demandName)) return 101; + return 0; +} + +int DLLEXPORT EN_deletedemand(EN_Project p, int nodeIndex, int demandIndex) +/*---------------------------------------------------------------- +** Input: nodeIndex = node index +** demandIndex = index of node's demand to be deleted +** Returns: error code +** Purpose: deletes an existing demand category from a junction node +**---------------------------------------------------------------- +*/ +{ + Pdemand d, dprev; + Snode *node; + int n = 1; + + // Check for valid arguments + if (!p->Openflag) return 102; + if (nodeIndex <= 0 || nodeIndex > p->network.Nnodes) return 203; + + // Only junctions have demands + if (nodeIndex <= p->network.Njuncs) + { + // Find head of node's list of demands + node = &p->network.Node[nodeIndex]; + d = node->D; + if (d == NULL) return 253; + dprev = d; + + // Check if target demand is head of demand list + if (demandIndex == 1) + { + node->D = d->next; + free(d->Name); + free(d); + return 0; + } + + // Otherwise locate target demand in demand list + while (d != NULL && n < demandIndex) + { + dprev = d; + d = d->next; + n++; + } + + // Return error if target demand not found + if (d == NULL) return 253; + + // Link the demands that precede and follow the target + dprev->next = d->next; + + // Delete the target demand + free(d->Name); + free(d); + } + return 0; +} + +int DLLEXPORT EN_getdemandindex(EN_Project p, int nodeIndex, char *demandName, + int *demandIndex) +/*---------------------------------------------------------------- +** Input: nodeIndex = node index +** demandName = name of demand being sought +** Output: demandIndex = index of demand being sought +** Returns: error code +** Purpose: retrieves the position of a named demand category +** in a node's list of demands +**---------------------------------------------------------------- +*/ +{ + Pdemand d; + int n = 0; + int nameEmpty = FALSE; + int found = FALSE; + + // Check for valid arguments + *demandIndex = 0; + if (!p->Openflag) return 102; + if (nodeIndex <= 0 || nodeIndex > p->network.Nnodes) return 203; + if (demandName == NULL) return 253; + + // Check if target name is empty + if (strlen(demandName) == 0) nameEmpty = TRUE; + + // Locate target demand in node's demands list + for (d = p->network.Node[nodeIndex].D; d != NULL; d = d->next) + { + n++; + if (d->Name == NULL) + { + if (nameEmpty) found = TRUE;; + } + else if (strcmp(d->Name, demandName) == 0) found = TRUE; + if (found) break; + } + + // Return target demand's index + if (!found) return 253; + *demandIndex = n; + return 0; +} + +int DLLEXPORT EN_getnumdemands(EN_Project p, int nodeIndex, int *numDemands) +/*---------------------------------------------------------------- +** Input: nodeIndex = node index +** Output: numDemands = number of demand categories +** Returns: error code +** Purpose: retrieves the number of demand categories for a node +**---------------------------------------------------------------- +*/ +{ + Pdemand d; + int n = 0; + + // Check for valid arguments + if (!p->Openflag) return 102; + if (nodeIndex <= 0 || nodeIndex > p->network.Nnodes) return 203; + + // Count the number of demand categories assigned to node + for (d = p->network.Node[nodeIndex].D; d != NULL; d = d->next) n++; + *numDemands = n; + return 0; +} + +int DLLEXPORT EN_getbasedemand(EN_Project p, int nodeIndex, int demandIndex, + double *baseDemand) +/*---------------------------------------------------------------- +** Input: nodeIndex = node index +** demandIndex = demand category index +** Output: baseDemand = baseline demand value +** Returns: error code +** Purpose: retrieves the baseline value for a node's demand category +**---------------------------------------------------------------- +*/ +{ + Pdemand d; + + // Check for valid arguments + *baseDemand = 0.0; + if (!p->Openflag) return 102; + if (nodeIndex <= 0 || nodeIndex > p->network.Nnodes) return 203; + + // Locate target demand in node's demands list + d = finddemand(p->network.Node[nodeIndex].D, demandIndex); + if (d == NULL) return 253; + + // Retrieve target demand's base value + *baseDemand = d->Base * p->Ucf[FLOW]; + return 0; +} + +int DLLEXPORT EN_setbasedemand(EN_Project p, int nodeIndex, int demandIndex, + double baseDemand) +/*---------------------------------------------------------------- +** Input: nodeIndex = node index +** demandIndex = demand category index +** baseDemand = baseline demand value +** Output: none +** Returns: error code +** Purpose: sets the baseline value for a node's demand category +**---------------------------------------------------------------- +*/ +{ + Pdemand d; + + // Check for valid arguments + if (!p->Openflag) return 102; + if (nodeIndex <= 0 || nodeIndex > p->network.Nnodes) return 203; + + // Locate target demand in node's demands list + d = finddemand(p->network.Node[nodeIndex].D, demandIndex); + if (d == NULL) return 253; + + // Assign new base value to target demand + d->Base = baseDemand / p->Ucf[FLOW]; + return 0; +} + +int DLLEXPORT EN_getdemandname(EN_Project p, int nodeIndex, int demandIndex, + char *demandName) +/*---------------------------------------------------------------- +** Input: nodeIndex = node index +** demandIndex = demand category index +** Output: demandname = demand category name +** Returns: error code +** Purpose: retrieves the name assigned to a node's demand category +**---------------------------------------------------------------- +*/ +{ + Pdemand d; + + strcpy(demandName, ""); + + // Check for valid arguments + if (!p->Openflag) return 102; + if (nodeIndex <= 0 || nodeIndex > p->network.Njuncs) return 203; + + // Locate target demand in node's demands list + d = finddemand(p->network.Node[nodeIndex].D, demandIndex); + if (d == NULL) return 253; + + // Retrieve target demand's category name + if (d->Name) strcpy(demandName, d->Name); + return 0; +} + +int DLLEXPORT EN_setdemandname(EN_Project p, int nodeIndex, int demandIndex, + char *demandName) +/*---------------------------------------------------------------- +** Input: nodeIndex = node index +** demandIndex = demand category index +** demandName = name of demand category +** Output: none +** Returns: error code +** Purpose: assigns a name to a node's demand category +**---------------------------------------------------------------- +*/ +{ + Pdemand d; + + // Check for valid arguments + if (!p->Openflag) return 102; + if (nodeIndex <= 0 || nodeIndex > p->network.Njuncs) return 203; + + // Locate target demand in node's demands list + d = finddemand(p->network.Node[nodeIndex].D, demandIndex); + if (d == NULL) return 253; + + // Assign category name to target demand + d->Name = xstrcpy(&d->Name, demandName, MAXID); + return 0; +} + +int DLLEXPORT EN_getdemandpattern(EN_Project p, int nodeIndex, int demandIndex, + int *patIndex) +/*---------------------------------------------------------------- +** Input: nodeIndex = node index +** demandIndex = demand category index +** Output: patIndex = time pattern index +** Returns: error code +** Purpose: retrieves the time pattern assigned to a node's +** demand category +**---------------------------------------------------------------- +*/ +{ + Pdemand d; + + // Check for valid arguments + *patIndex = 0; + if (!p->Openflag) return 102; + if (nodeIndex <= 0 || nodeIndex > p->network.Nnodes) return 203; + + // Locate target demand in node's demand list + d = finddemand(p->network.Node[nodeIndex].D, demandIndex); + if (d == NULL) return 253; + + // Retrieve that demand's pattern index + *patIndex = d->Pat; + return 0; +} + +int DLLEXPORT EN_setdemandpattern(EN_Project p, int nodeIndex, int demandIndex, + int patIndex) +/*---------------------------------------------------------------- +** Input: nodeIndex = node index +** demandIndex = demand category index +** patIndex = time pattern index +** Output: none +** Returns: error code +** Purpose: assigns a time pattern to a node's demand category +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + Pdemand d; + + // Check for valid arguments + if (!p->Openflag) return 102; + if (nodeIndex <= 0 || nodeIndex > net->Nnodes) return 203; + if (patIndex < 0 || patIndex > net->Npats) return 205; + + // Locate target demand in node's demand list + d = finddemand(p->network.Node[nodeIndex].D, demandIndex); + if (d == NULL) return 253; + + // Assign new time pattern to target demand + d->Pat = patIndex; + return 0; +} + +/******************************************************************** + + Link Functions + +********************************************************************/ + +int DLLEXPORT EN_addlink(EN_Project p, char *id, int linkType, + char *fromNode, char *toNode, int *index) +/*---------------------------------------------------------------- +** Input: id = link ID name +** type = link type (see EN_LinkType) +** fromNode = name of link's starting node +** toNode = name of link's ending node +** Output: index = position of new link in Link array +** Returns: error code +** Purpose: adds a new link to a project +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Hydraul *hyd = &p->hydraul; + + int i, n, size, errcode; + int n1, n2; + Slink *link; + Spump *pump; + + // Cannot modify network structure while solvers are active + *index = 0; + if (!p->Openflag) return 102; + if (p->hydraul.OpenHflag || p->quality.OpenQflag) return 262; + + // Check if id name contains invalid characters + if (!namevalid(id)) return 252; + + // Check if a link with same id already exists + if (EN_getlinkindex(p, id, &i) == 0) return 215; + + // Check for valid link type + if (linkType < CVPIPE || linkType > GPV) return 251; + + // Lookup the link's from and to nodes + n1 = hashtable_find(net->NodeHashTable, fromNode); + n2 = hashtable_find(net->NodeHashTable, toNode); + if (n1 == 0 || n2 == 0) return 203; + + // Check that valve link has legal connections + if (linkType > PUMP) + { + errcode = valvecheck(p, 0, linkType, n1, n2); + if (errcode) return errcode; + } + + // Grow link-related arrays to accomodate the new link + net->Nlinks++; + p->parser.MaxLinks = net->Nlinks; + n = net->Nlinks; + size = (n + 1) * sizeof(Slink); + net->Link = (Slink *)realloc(net->Link, size); + size = (n + 1) * sizeof(double); + hyd->LinkFlow = (double *)realloc(hyd->LinkFlow, size); + hyd->LinkSetting = (double *)realloc(hyd->LinkSetting, size); + size = (n + 1) * sizeof(StatusType); + hyd->LinkStatus = (StatusType *)realloc(hyd->LinkStatus, size); + + // Set properties for the new link + link = &net->Link[n]; + strncpy(link->ID, id, MAXID); + + if (linkType <= PIPE) net->Npipes++; + else if (linkType == PUMP) + { + // Grow pump array to accomodate the new link + net->Npumps++; + size = (net->Npumps + 1) * sizeof(Spump); + net->Pump = (Spump *)realloc(net->Pump, size); + pump = &net->Pump[net->Npumps]; + pump->Link = n; + pump->Ptype = NOCURVE; + pump->Q0 = 0; + pump->Qmax = 0; + pump->Hmax = 0; + pump->H0 = 0; + pump->R = 0; + pump->N = 0; + pump->Hcurve = 0; + pump->Ecurve = 0; + pump->Upat = 0; + pump->Epat = 0; + pump->Ecost = 0; + pump->Energy.TotalCost = MISSING; + } + else + { + // Grow valve array to accomodate the new link + net->Nvalves++; + size = (net->Nvalves + 1) * sizeof(Svalve); + net->Valve = (Svalve *)realloc(net->Valve, size); + net->Valve[net->Nvalves].Link = n; + } + + link->Type = linkType; + link->N1 = n1; + link->N2 = n2; + link->Status = OPEN; + + if (linkType == PUMP) + { + link->Kc = 1.0; // Speed factor + link->Km = 0.0; // Horsepower + link->Len = 0.0; + } + else if (linkType <= PIPE) // pipe or cvpipe + { + // 10" diameter new ductile iron pipe with + // length of average city block + link->Diam = 10 / p->Ucf[DIAM]; + switch (hyd->Formflag) + { + case HW: link->Kc = 130; break; + case DW: link->Kc = 0.0005; break; + case CM: link->Kc = 0.01; break; + default: link->Kc = 1.0; + } + link->Km = 0.0; // Loss coeff + link->Len = 330.0; + } + else // Valve + { + link->Diam = 10 / p->Ucf[DIAM]; + link->Kc = 0.0; // Valve setting. + link->Km = 0.0; // Loss coeff + link->Len = 0.0; + link->Status = ACTIVE; + } + link->Kb = 0; + link->Kw = 0; + link->R = 0; + link->Rc = 0; + link->Rpt = 0; + link->ResultIndex = 0; + link->Comment = NULL; + link->Vertices = NULL; + + hashtable_insert(net->LinkHashTable, link->ID, n); + *index = n; + return 0; +} + +int DLLEXPORT EN_deletelink(EN_Project p, int index, int actionCode) +/*---------------------------------------------------------------- +** Input: index = index of the link to delete +** actionCode = how to treat controls that contain the link: +** EN_UNCONDITIONAL deletes all such controls plus the link, +** EN_CONDITIONAL does not delete the link if it appears +** in a control and returns an error code +** Output: none +** Returns: error code +** Purpose: deletes a link from a project +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + int i; + int pumpindex; + int valveindex; + int linkType; + Slink *link; + + // Cannot modify network structure while solvers are active + if (!p->Openflag) return 102; + if (p->hydraul.OpenHflag || p->quality.OpenQflag) return 262; + + // Check that link exists + if (index <= 0 || index > net->Nlinks) return 204; + if (actionCode < EN_UNCONDITIONAL || actionCode > EN_CONDITIONAL) return 251; + + // Deletion will be cancelled if link appears in any controls + if (actionCode == EN_CONDITIONAL) + { + actionCode = incontrols(p, LINK, index); + if (actionCode > 0) return 261; + } + + // Get references to the link and its type + link = &net->Link[index]; + EN_getlinktype(p, index, &linkType); + + // Remove link from its hash table + hashtable_delete(net->LinkHashTable, link->ID); + + // Remove link's comment and vertices + free(link->Comment); + freelinkvertices(link); + + // Shift position of higher entries in Link array down one + for (i = index; i <= net->Nlinks - 1; i++) + { + net->Link[i] = net->Link[i + 1]; + // ... update link's entry in the hash table + hashtable_update(net->LinkHashTable, net->Link[i].ID, i); + } + + // Adjust references to higher numbered links for pumps & valves + for (i = 1; i <= net->Npumps; i++) + { + if (net->Pump[i].Link > index) net->Pump[i].Link -= 1; + } + for (i = 1; i <= net->Nvalves; i++) + { + if (net->Valve[i].Link > index) net->Valve[i].Link -= 1; + } + + // Delete any pump associated with the deleted link + if (linkType == PUMP) + { + pumpindex = findpump(net, index); + for (i = pumpindex; i <= net->Npumps - 1; i++) + { + net->Pump[i] = net->Pump[i + 1]; + } + net->Npumps--; + } + + // Delete any valve (linkType > PUMP) associated with the deleted link + if (linkType > PUMP) + { + valveindex = findvalve(net, index); + for (i = valveindex; i <= net->Nvalves - 1; i++) + { + net->Valve[i] = net->Valve[i + 1]; + } + net->Nvalves--; + } + + // Delete any control containing the link + for (i = net->Ncontrols; i >= 1; i--) + { + if (net->Control[i].Link == index) EN_deletecontrol(p, i); + } + + // Adjust higher numbered link indices in remaining controls + for (i = 1; i <= net->Ncontrols; i++) + { + if (net->Control[i].Link > index) net->Control[i].Link--; + } + + // Make necessary adjustments to rule-based controls + adjustrules(p, EN_R_LINK, index); // see RULES.C + + // Reduce link count by one + net->Nlinks--; + return 0; +} + +int DLLEXPORT EN_getlinkindex(EN_Project p, char *id, int *index) +/*---------------------------------------------------------------- +** Input: id = link ID name +** Output: index = link index +** Returns: error code +** Purpose: retrieves the index of a link +**---------------------------------------------------------------- +*/ +{ + *index = 0; + if (!p->Openflag) return 102; + *index = findlink(&p->network, id); + if (*index == 0) return 204; + else return 0; +} + +int DLLEXPORT EN_getlinkid(EN_Project p, int index, char *id) +/*---------------------------------------------------------------- +** Input: index = link index +** Output: id = link ID name +** Returns: error code +** Purpose: retrieves the ID name of a link +**---------------------------------------------------------------- +*/ +{ + strcpy(id, ""); + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Nlinks) return 204; + strcpy(id, p->network.Link[index].ID); + return 0; +} + +int DLLEXPORT EN_setlinkid(EN_Project p, int index, char *newid) +/*---------------------------------------------------------------- +** Input: index = link index +** id = link ID name +** Output: none +** Returns: error code +** Purpose: sets the ID name of a link +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + // Check for valid arguments + if (index <= 0 || index > net->Nlinks) return 204; + if (!namevalid(newid)) return 252; + + // Check if another link with same name exists + if (hashtable_find(net->LinkHashTable, newid) > 0) return 215; + + // Replace the existing link ID with the new value + hashtable_delete(net->LinkHashTable, net->Link[index].ID); + strncpy(net->Link[index].ID, newid, MAXID); + hashtable_insert(net->LinkHashTable, net->Link[index].ID, index); + return 0; +} + +int DLLEXPORT EN_getlinktype(EN_Project p, int index, int *linkType) +/*---------------------------------------------------------------- +** Input: index = link index +** Output: linkType = link type (see EN_LinkType) +** Returns: error code +** Purpose: retrieves the type code of a link +**---------------------------------------------------------------- +*/ +{ + *linkType = -1; + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Nlinks) return 204; + *linkType = p->network.Link[index].Type; + return 0; +} + +int DLLEXPORT EN_setlinktype(EN_Project p, int *index, int linkType, int actionCode) +/*---------------------------------------------------------------- +** Input: index = link index +** linkType = new link type (see EN_LinkType) +** actionCode = how to treat controls that contain the link: +** EN_UNCONDITIONAL deletes all such controls, +** EN_CONDITIONAL cancels the type change if the link appears +** in a control and returns an error code +** Output: none +** Returns: error code +** Purpose: changes the type of a particular link (e.g. pipe to pump) +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + int i = *index, n1, n2; + char id[MAXID + 1]; + char id1[MAXID + 1]; + char id2[MAXID + 1]; + int errcode; + int oldType; + + // Cannot modify network structure while solvers are active + if (!p->Openflag) return 102; + if (p->hydraul.OpenHflag || p->quality.OpenQflag) return 262; + + // Check for valid input parameters + if (linkType < 0 || linkType > GPV || actionCode < EN_UNCONDITIONAL || + actionCode > EN_CONDITIONAL) + { + return 251; + } + + // Check for valid link index + if (i <= 0 || i > net->Nlinks) return 204; + + // Check if current link type equals new type + EN_getlinktype(p, i, &oldType); + if (oldType == linkType) return 0; + + // Type change will be cancelled if link appears in any controls + if (actionCode == EN_CONDITIONAL) + { + actionCode = incontrols(p, LINK, i); + if (actionCode > 0) return 261; + } + + // Pipe changing from or to having a check valve + if (oldType <= PIPE && linkType <= PIPE) + { + net->Link[i].Type = linkType; + if (linkType == CVPIPE) net->Link[i].Status = OPEN; + return 0; + } + + // Get ID's of link & its end nodes + EN_getlinkid(p, i, id); + EN_getlinknodes(p, i, &n1, &n2); + EN_getnodeid(p, n1, id1); + EN_getnodeid(p, n2, id2); + + // Check for illegal valve connections + errcode = valvecheck(p, i, linkType, n1, n2); + if (errcode) return errcode; + + // Delete the original link (and any controls containing it) + EN_deletelink(p, i, actionCode); + + // Create a new link of new type and old id + errcode = EN_addlink(p, id, linkType, id1, id2, index); + return errcode; +} + +int DLLEXPORT EN_getlinknodes(EN_Project p, int index, int *node1, int *node2) +/*---------------------------------------------------------------- +** Input: index = link index +** Output: node1 = index of link's starting node +** node2 = index of link's ending node +** Returns: error code +** Purpose: retrieves the start and end nodes of a link +**---------------------------------------------------------------- +*/ +{ + *node1 = 0; + *node2 = 0; + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Nlinks) return 204; + *node1 = p->network.Link[index].N1; + *node2 = p->network.Link[index].N2; + return 0; +} + +int DLLEXPORT EN_setlinknodes(EN_Project p, int index, int node1, int node2) +/*---------------------------------------------------------------- +** Input: index = link index +** node1 = index of link's new starting node +** node2 = index of link's new ending node +** Returns: error code +** Purpose: sets the start and end nodes of a link +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + int type, errcode; + + // Cannot modify network structure while solvers are active + if (p->hydraul.OpenHflag || p->quality.OpenQflag) return 262; + + // Check for valid link index + if (index <= 0 || index > net->Nlinks) return 204; + + // Check that nodes exist + if (node1 < 0 || node1 > net->Nnodes) return 203; + if (node2 < 0 || node2 > net->Nnodes) return 203; + + // Check that nodes are not the same + if (node1 == node2) return 222; + + // Do nothing if the new nodes are the same as the old ones + if (node1 == net->Link[index].N1 && node2 == net->Link[index].N2) + return 0; + + // Check for illegal valve connection + type = net->Link[index].Type; + if (type > PUMP) + { + errcode = valvecheck(p, index, type, node1, node2); + if (errcode) return errcode; + } + + // Assign new end nodes to link + net->Link[index].N1 = node1; + net->Link[index].N2 = node2; + return 0; +} + +int DLLEXPORT EN_getlinkvalue(EN_Project p, int index, int property, double *value) +/*---------------------------------------------------------------- +** Input: index = link index +** property = link property code (see EN_LinkProperty) +** Output: value = link property value +** Returns: error code +** Purpose: retrieves a property value for a link +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Hydraul *hyd = &p->hydraul; + + double a, h, q, v = 0.0; + int pmp; + Slink *Link = net->Link; + Spump *Pump = net->Pump; + double *Ucf = p->Ucf; + double *LinkFlow = hyd->LinkFlow; + double *LinkSetting = hyd->LinkSetting; + + // Check for valid arguments + *value = 0.0; + if (!p->Openflag) return 102; + if (index <= 0 || index > net->Nlinks) return 204; + + // Retrieve called-for property + switch (property) + { + case EN_DIAMETER: + if (Link[index].Type == PUMP) v = 0.0; + else v = Link[index].Diam * Ucf[DIAM]; + break; + + case EN_LENGTH: + v = Link[index].Len * Ucf[ELEV]; + break; + + case EN_ROUGHNESS: + if (Link[index].Type <= PIPE) + { + if (hyd->Formflag == DW) v = Link[index].Kc * (1000.0 * Ucf[ELEV]); + else v = Link[index].Kc; + } + else v = 0.0; + break; + + case EN_MINORLOSS: + if (Link[index].Type != PUMP) + { + v = Link[index].Km; + v *= (SQR(Link[index].Diam) * SQR(Link[index].Diam) / 0.02517); + } + else v = 0.0; + break; + + case EN_INITSTATUS: + if (Link[index].Status <= CLOSED) v = 0.0; + else v = 1.0; + break; + + case EN_INITSETTING: + if (Link[index].Type == PIPE || Link[index].Type == CVPIPE) + { + return EN_getlinkvalue(p, index, EN_ROUGHNESS, value); + } + v = Link[index].Kc; + switch (Link[index].Type) + { + case PRV: + case PSV: + case PBV: + v *= Ucf[PRESSURE]; + break; + case FCV: + v *= Ucf[FLOW]; + default: + break; + } + break; + + case EN_KBULK: + v = Link[index].Kb * SECperDAY; + break; + + case EN_KWALL: + v = Link[index].Kw * SECperDAY; + break; + + case EN_FLOW: + if (hyd->LinkStatus[index] <= CLOSED) v = 0.0; + else v = LinkFlow[index] * Ucf[FLOW]; + break; + + case EN_VELOCITY: + if (Link[index].Type == PUMP) v = 0.0; + else if (hyd->LinkStatus[index] <= CLOSED) v = 0.0; + else + { + q = ABS(LinkFlow[index]); + a = PI * SQR(Link[index].Diam) / 4.0; + v = q / a * Ucf[VELOCITY]; + } + break; + + case EN_HEADLOSS: + if (hyd->LinkStatus[index] <= CLOSED) v = 0.0; + else + { + h = hyd->NodeHead[Link[index].N1] - hyd->NodeHead[Link[index].N2]; + if (Link[index].Type != PUMP) h = ABS(h); + v = h * Ucf[HEADLOSS]; + } + break; + + case EN_STATUS: + if (hyd->LinkStatus[index] <= CLOSED) v = 0.0; + else v = 1.0; + break; + + case EN_SETTING: + if (Link[index].Type == PIPE || Link[index].Type == CVPIPE) + { + return EN_getlinkvalue(p, index, EN_ROUGHNESS, value); + } + if (LinkSetting[index] == MISSING) v = 0.0; + else v = LinkSetting[index]; + switch (Link[index].Type) + { + case PRV: + case PSV: + case PBV: + v *= Ucf[PRESSURE]; + break; + case FCV: + v *= Ucf[FLOW]; + default: + break; + } + break; + + case EN_ENERGY: + getenergy(p, index, &v, &a); + break; + + case EN_LINKQUAL: + v = avgqual(p, index) * Ucf[LINKQUAL]; + break; + + case EN_LINKPATTERN: + if (Link[index].Type == PUMP) + { + v = (double)Pump[findpump(&p->network, index)].Upat; + } + break; + + case EN_PUMP_STATE: + v = hyd->LinkStatus[index]; + + if (Link[index].Type == PUMP) + { + pmp = findpump(net, index); + if (hyd->LinkStatus[index] >= OPEN) + { + if (hyd->LinkFlow[index] > hyd->LinkSetting[index] * Pump[pmp].Qmax) + { + v = XFLOW; + } + if (hyd->LinkFlow[index] < 0.0) v = XHEAD; + } + } + break; + + case EN_PUMP_EFFIC: + getenergy(p, index, &a, &v); + break; + + case EN_PUMP_POWER: + v = 0; + if (Link[index].Type == PUMP) + { + pmp = findpump(net, index); + if (Pump[pmp].Ptype == CONST_HP) v = Link[index].Km; // Power in HP or KW + } + break; + + case EN_PUMP_HCURVE: + if (Link[index].Type == PUMP) + { + v = (double)Pump[findpump(&p->network, index)].Hcurve; + } + break; + + case EN_PUMP_ECURVE: + if (Link[index].Type == PUMP) + { + v = (double)Pump[findpump(&p->network, index)].Ecurve; + } + break; + + case EN_PUMP_ECOST: + if (Link[index].Type == PUMP) + { + v = (double)Pump[findpump(&p->network, index)].Ecost; + } + break; + + case EN_PUMP_EPAT: + if (Link[index].Type == PUMP) + { + v = (double)Pump[findpump(&p->network, index)].Epat; + } + break; + + default: + return 251; + } + *value = (double)v; + return 0; +} + +int DLLEXPORT EN_setlinkvalue(EN_Project p, int index, int property, double value) +/*---------------------------------------------------------------- +** Input: index = link index +** property = link property code (see EN_LinkProperty) +** value = property value +** Output: none +** Returns: error code +** Purpose: sets a property value for a link +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Hydraul *hyd = &p->hydraul; + Quality *qual = &p->quality; + + Slink *Link = net->Link; + double *Ucf = p->Ucf; + double *LinkSetting = hyd->LinkSetting; + char s; + double r; + int pumpIndex, patIndex, curveIndex; + + if (!p->Openflag) return 102; + if (index <= 0 || index > net->Nlinks) return 204; + switch (property) + { + case EN_DIAMETER: + if (Link[index].Type != PUMP) + { + if (value <= 0.0) return 211; + value /= Ucf[DIAM]; // Convert to feet + r = Link[index].Diam / value; // Ratio of old to new diam + Link[index].Km *= SQR(r) * SQR(r); // Adjust minor loss factor + Link[index].Diam = value; // Update diameter + resistcoeff(p, index); // Update resistance coeff. + } + break; + + case EN_LENGTH: + if (Link[index].Type <= PIPE) + { + if (value <= 0.0) return 211; + Link[index].Len = value / Ucf[ELEV]; + resistcoeff(p, index); + } + break; + + case EN_ROUGHNESS: + if (Link[index].Type <= PIPE) + { + if (value <= 0.0) return 211; + Link[index].Kc = value; + if (hyd->Formflag == DW) Link[index].Kc /= (1000.0 * Ucf[ELEV]); + resistcoeff(p, index); + } + break; + + case EN_MINORLOSS: + if (Link[index].Type != PUMP) + { + if (value <= 0.0) return 211; + Link[index].Km = 0.02517 * value / SQR(Link[index].Diam) / + SQR(Link[index].Diam); + } + break; + + case EN_INITSTATUS: + case EN_STATUS: + // Cannot set status for a check valve + if (Link[index].Type == CVPIPE) return 207; + s = (char)ROUND(value); + if (s < 0 || s > 1) return 211; + if (property == EN_INITSTATUS) + { + setlinkstatus(p, index, s, &Link[index].Status, &Link[index].Kc); + } + else + { + setlinkstatus(p, index, s, &hyd->LinkStatus[index], &LinkSetting[index]); + } + break; + + case EN_INITSETTING: + case EN_SETTING: + if (value < 0.0) return 211; + if (Link[index].Type == PIPE || Link[index].Type == CVPIPE) + { + return EN_setlinkvalue(p, index, EN_ROUGHNESS, value); + } + else + { + switch (Link[index].Type) + { + case PUMP: + break; + case PRV: + case PSV: + case PBV: + value /= Ucf[PRESSURE]; + break; + case FCV: + value /= Ucf[FLOW]; + break; + case TCV: + break; + case GPV: + return 207; // Cannot modify setting for GPV + default: + return 0; + } + if (property == EN_INITSETTING) + { + setlinksetting(p, index, value, &Link[index].Status, &Link[index].Kc); + } + else + { + setlinksetting(p, index, value, &hyd->LinkStatus[index], + &LinkSetting[index]); + } + } + break; + + case EN_KBULK: + if (Link[index].Type <= PIPE) + { + Link[index].Kb = value / SECperDAY; + qual->Reactflag = 1; + } + break; + + case EN_KWALL: + if (Link[index].Type <= PIPE) + { + Link[index].Kw = value / SECperDAY; + qual->Reactflag = 1; + } + break; + + case EN_LINKPATTERN: + if (Link[index].Type == PUMP) + { + patIndex = ROUND(value); + if (patIndex < 0 || patIndex > net->Npats) return 205; + pumpIndex = findpump(&p->network, index); + net->Pump[pumpIndex].Upat = patIndex; + } + break; + + case EN_PUMP_POWER: + if (Link[index].Type == PUMP) + { + if (value <= 0.0) return 211; + pumpIndex = findpump(&p->network, index); + net->Pump[pumpIndex].Ptype = CONST_HP; + net->Pump[pumpIndex].Hcurve = 0; + net->Link[index].Km = value; + updatepumpparams(p, pumpIndex); + net->Pump[pumpIndex].R /= Ucf[POWER]; + net->Pump[pumpIndex].Q0 /= Ucf[FLOW]; + net->Pump[pumpIndex].Qmax /= Ucf[FLOW]; + net->Pump[pumpIndex].Hmax /= Ucf[HEAD]; + } + break; + + case EN_PUMP_HCURVE: + if (Link[index].Type == PUMP) + { + return EN_setheadcurveindex(p, index, ROUND(value)); + } + break; + + case EN_PUMP_ECURVE: + if (Link[index].Type == PUMP) + { + curveIndex = ROUND(value); + if (curveIndex < 0 || curveIndex > net->Ncurves) return 205; + pumpIndex = findpump(&p->network, index); + net->Pump[pumpIndex].Ecurve = curveIndex; + } + break; + + case EN_PUMP_ECOST: + if (Link[index].Type == PUMP) + { + if (value < 0.0) return 211; + pumpIndex = findpump(&p->network, index); + net->Pump[pumpIndex].Ecost = value; + } + break; + + case EN_PUMP_EPAT: + if (Link[index].Type == PUMP) + { + patIndex = ROUND(value); + if (patIndex < 0 || patIndex > net->Npats) return 205; + pumpIndex = findpump(&p->network, index); + net->Pump[pumpIndex].Epat = patIndex; + } + break; + + default: + return 251; + } + return 0; +} + +int DLLEXPORT EN_setpipedata(EN_Project p, int index, double length, + double diam, double rough, double mloss) +/*---------------------------------------------------------------- +** Input: index = pipe link index +** length = pipe length +** diam = pipe diameter +** rough = pipe roughness coefficient +** mloss = minor loss coefficient +** Output: none +** Returns: error code +** Purpose: sets several properties for a pipe link +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + Slink *Link = net->Link; + double *Ucf = p->Ucf; + double diameter = diam; + + // Check that pipe exists + if (!p->Openflag) return 102; + if (index <= 0 || index > net->Nlinks) return 204; + if (Link[index].Type > PIPE) return 0; + + // Check for valid parameters + if (length <= 0.0 || diam <= 0.0 || rough <= 0.0 || mloss < 0.0) return 211; + + // Assign parameters to pipe + Link[index].Len = length / Ucf[ELEV]; + diameter /= Ucf[DIAM]; + Link[index].Diam = diameter; + Link[index].Kc = rough; + if (p->hydraul.Formflag == DW) Link[index].Kc /= (1000.0 * Ucf[ELEV]); + + // Update minor loss factor & pipe flow resistance + Link[index].Km = 0.02517 * mloss / SQR(Link[index].Diam) / SQR(Link[index].Diam); + resistcoeff(p, index); + return 0; +} + +int DLLEXPORT EN_getvertexcount(EN_Project p, int index, int *count) +/*---------------------------------------------------------------- +** Input: index = link index +** Output: count = number of link's vertex points +** Returns: error code +** Purpose: retrieves number of vertex points in a link +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + Slink *Link = net->Link; + Pvertices vertices; + + // Check that link exists + *count = 0; + if (!p->Openflag) return 102; + if (index <= 0 || index > net->Nlinks) return 204; + + // Set count to number of vertices + vertices = Link[index].Vertices; + if (vertices) *count = vertices->Npts; + return 0; +} + +int DLLEXPORT EN_getvertex(EN_Project p, int index, int vertex, double *x, double *y) +/*---------------------------------------------------------------- +** Input: index = link index +** vertex = index of a link vertex point +** Output: x = vertex point's X-coordinate +** y = vertex point's Y-coordinate +** Returns: error code +** Purpose: retrieves the coordinates of a vertex point in a link +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + Slink *Link = net->Link; + Pvertices vertices; + + // Check that link exists + *x = MISSING; + *y = MISSING; + if (!p->Openflag) return 102; + if (index <= 0 || index > net->Nlinks) return 204; + + // Check that vertex exists + vertices = Link[index].Vertices; + if (vertices == NULL) return 255; + if (vertex <= 0 || vertex > vertices->Npts) return 255; + *x = vertices->X[vertex - 1]; + *y = vertices->Y[vertex - 1]; + return 0; +} + +int DLLEXPORT EN_setvertices(EN_Project p, int index, double *x, double *y, int count) +/*---------------------------------------------------------------- +** Input: index = link index +** x = array of X-coordinates for vertex points +** y = array of Y-coordinates for vertex points +** count = number of vertex points +** Returns: error code +** Purpose: assigns a set of vertex points to a link +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + Slink *link; + int i; + int err = 0; + + // Check that link exists + if (!p->Openflag) return 102; + if (index <= 0 || index > net->Nlinks) return 204; + link = &net->Link[index]; + + // Delete existing set of vertices + freelinkvertices(link); + + // Add each new vertex to the link + for (i = 0; i < count; i++) + { + err = addlinkvertex(link, x[i], y[i]); + if (err) break; + } + if (err) freelinkvertices(link); + return err; +} + +/******************************************************************** + + Pump Functions + +********************************************************************/ + +int DLLEXPORT EN_getpumptype(EN_Project p, int linkIndex, int *pumpType) +/*---------------------------------------------------------------- +** Input: linkIndex = index of a pump link +** Output: pumpType = type of pump head curve (see EN_PumpType) +** Returns: error code +** Purpose: retrieves the type of head curve used by a pump +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + Slink *Link = net->Link; + Spump *Pump = net->Pump; + const int Nlinks = net->Nlinks; + + *pumpType = -1; + if (!p->Openflag) return 102; + if (linkIndex < 1 || linkIndex > Nlinks) return 204; + if (PUMP != Link[linkIndex].Type) return 216; + *pumpType = Pump[findpump(&p->network, linkIndex)].Ptype; + return 0; +} + +int DLLEXPORT EN_getheadcurveindex(EN_Project p, int linkIndex, int *curveIndex) +/*---------------------------------------------------------------- +** Input: linkIndex = index of a pump link +** Output: curveIndex = index of a pump's head curve +** Returns: error code +** Purpose: retrieves the index of a pump's head curve +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + Slink *Link = net->Link; + Spump *Pump = net->Pump; + const int Nlinks = net->Nlinks; + + *curveIndex = 0; + if (!p->Openflag) return 102; + if (linkIndex < 1 || linkIndex > Nlinks) return 204; + if (PUMP != Link[linkIndex].Type) return 216; + *curveIndex = Pump[findpump(net, linkIndex)].Hcurve; + return 0; +} + +int DLLEXPORT EN_setheadcurveindex(EN_Project p, int linkIndex, int curveIndex) +/*---------------------------------------------------------------- +** Input: linkIndex = index of a pump link +** curveIndex = index of a curve +** Output: none +** Returns: error code +** Purpose: assigns a new head curve to a pump +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + double *Ucf = p->Ucf; + int pumpIndex; + int oldCurveIndex; + int newCurveType; + int err = 0; + Spump *pump; + + // Check for valid parameters + if (!p->Openflag) return 102; + if (linkIndex < 1 || linkIndex > net->Nlinks) return 204; + if (PUMP != net->Link[linkIndex].Type) return 0; + if (curveIndex < 0 || curveIndex > net->Ncurves) return 206; + + // Save values that need to be restored in case new curve is invalid + pumpIndex = findpump(net, linkIndex); + pump = &p->network.Pump[pumpIndex]; + oldCurveIndex = pump->Hcurve; + newCurveType = p->network.Curve[curveIndex].Type; + + // Assign the new curve to the pump + pump->Ptype = NOCURVE; + pump->Hcurve = curveIndex; + if (curveIndex == 0) return 0; + + // Update the pump's head curve parameters (which also changes + // the new curve's Type to PUMP_CURVE) + err = updatepumpparams(p, pumpIndex); + + // If the parameter updating failed (new curve was not a valid pump curve) + // restore the pump's original curve and its parameters + if (err > 0) + { + p->network.Curve[curveIndex].Type = newCurveType; + pump->Ptype = NOCURVE; + pump->Hcurve = oldCurveIndex; + if (oldCurveIndex == 0) return err; + updatepumpparams(p, pumpIndex); + } + + // Convert the units of the updated pump parameters to feet and cfs + if (pump->Ptype == POWER_FUNC) + { + pump->H0 /= Ucf[HEAD]; + pump->R *= (pow(Ucf[FLOW], pump->N) / Ucf[HEAD]); + } + pump->Q0 /= Ucf[FLOW]; + pump->Qmax /= Ucf[FLOW]; + pump->Hmax /= Ucf[HEAD]; + + return err; +} + +/******************************************************************** + + Time Pattern Functions + +********************************************************************/ + +int DLLEXPORT EN_addpattern(EN_Project p, char *id) +/*---------------------------------------------------------------- +** Input: id = time pattern ID name +** Output: none +** Returns: error code +** Purpose: adds a new time pattern to a project +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Parser *parser = &p->parser; + + int i, n, err = 0; + Spattern *pat; + + // Check if a pattern with same id already exists + if (!p->Openflag) return 102; + if (EN_getpatternindex(p, id, &i) == 0) return 215; + + // Check if id name contains invalid characters + if (!namevalid(id)) return 252; + + // Expand the project's array of patterns + n = net->Npats + 1; + net->Pattern = (Spattern *)realloc(net->Pattern, (n + 1) * sizeof(Spattern)); + + // Assign properties to the new pattern + pat = &net->Pattern[n]; + strcpy(pat->ID, id); + pat->Comment = NULL; + pat->Length = 1; + pat->F = (double *)calloc(1, sizeof(double)); + if (pat->F == NULL) err = 1; + else pat->F[0] = 1.0; + + // Abort if memory allocation error + if (err) + { + free(pat->F); + return 101; + } + + // Update the number of patterns + net->Npats = n; + parser->MaxPats = n; + return 0; +} + +int DLLEXPORT EN_deletepattern(EN_Project p, int index) +/*---------------------------------------------------------------- +** Input: index = index of the pattern to delete +** Output: none +** Returns: error code +** Purpose: deletes a time pattern from a project +**---------------------------------------------------------------- +*/ +{ + int i; + + Network *net = &p->network; + Parser *parser = &p->parser; + Hydraul *hyd = &p->hydraul; + + // Can't delete a pattern while a solver is active + if (!p->Openflag)return 102; + if (p->hydraul.OpenHflag || p->quality.OpenQflag) return 262; + + // Check that pattern exists + if (index < 1 || index > p->network.Npats) return 205; + + // Adjust references by other objects to patterns + adjustpatterns(net, index); + + // Modify global energy price pattern + if (hyd->Epat == index) hyd->Epat = 0; + else if (hyd->Epat > index) hyd->Epat--; + + // Free the pattern's factor array + FREE(net->Pattern[index].F); + FREE(net->Pattern[index].Comment); + + // Shift the entries in the network's Pattern array + for (i = index; i < net->Npats; i++) net->Pattern[i] = net->Pattern[i+1]; + net->Npats--; + parser->MaxPats--; + return 0; +} + +int DLLEXPORT EN_getpatternindex(EN_Project p, char *id, int *index) +/*---------------------------------------------------------------- +** Input: id = time pattern name +** Output: index = time pattern index +** Returns: error code +** Purpose: retrieves the index of a time pattern +**---------------------------------------------------------------- +*/ +{ + int i; + + *index = 0; + if (!p->Openflag) return 102; + for (i = 1; i <= p->network.Npats; i++) + { + if (strcmp(id, p->network.Pattern[i].ID) == 0) + { + *index = i; + return 0; + } + } + *index = 0; + return 205; +} + +int DLLEXPORT EN_getpatternid(EN_Project p, int index, char *id) +/*---------------------------------------------------------------- +** Input: index = time pattern index +** Output: id = time pattern ID name +** Returns: error code +** Purpose: retrieves the ID name of a time pattern +**---------------------------------------------------------------- +*/ +{ + strcpy(id, ""); + if (!p->Openflag)return 102; + if (index < 1 || index > p->network.Npats) return 205; + strcpy(id, p->network.Pattern[index].ID); + return 0; +} + +int DLLEXPORT EN_setpatternid(EN_Project p, int index, char *id) +/*---------------------------------------------------------------- +** Input: index = time pattern index +** id = time pattern ID name +** Returns: error code +** Purpose: changes the ID name of a time pattern +**---------------------------------------------------------------- +*/ +{ + int i; + + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Npats) return 205; + + // Check if id name contains invalid characters + if (!namevalid(id)) return 252; + + for (i = 1; i <= p->network.Npats; i++) + { + if (i != index && strcmp(id, p->network.Pattern[i].ID) == 0) return 215; + } + strcpy(p->network.Pattern[index].ID, id); + return 0; +} + +int DLLEXPORT EN_getpatternlen(EN_Project p, int index, int *len) +/*---------------------------------------------------------------- +** Input: index = time pattern index +** Output: len = number of periods in a time pattern +** Returns: error code +** Purpose: retrieves the number of time periods in a time pattern +**---------------------------------------------------------------- +*/ +{ + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Npats) return 205; + *len = p->network.Pattern[index].Length; + return 0; +} + +int DLLEXPORT EN_getpatternvalue(EN_Project p, int index, int period, double *value) +/*---------------------------------------------------------------- +** Input: index = time pattern index +** period = time pattern period +** Output: value = pattern factor for a particular time period +** Returns: error code +** Purpose: retrieves the pattern factor for a specific time period +** in a time pattern +**---------------------------------------------------------------- +*/ +{ + *value = 0.0; + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Npats) return 205; + if (period < 1 || period > p->network.Pattern[index].Length) return 251; + *value = (double)p->network.Pattern[index].F[period - 1]; + return 0; +} + +int DLLEXPORT EN_setpatternvalue(EN_Project p, int index, int period, double value) +/*---------------------------------------------------------------- +** Input: index = time pattern index +** period = time pattern period +** value = pattern factor for a particular time period +** Output: none +** Returns: error code +** Purpose: sets the pattern factor for a specific time period +** in a time pattern +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Spattern *Pattern = net->Pattern; + + if (!p->Openflag) return 102; + if (index <= 0 || index > net->Npats) return 205; + if (period <= 0 || period > Pattern[index].Length) return 251; + Pattern[index].F[period - 1] = value; + return 0; +} + +int DLLEXPORT EN_getaveragepatternvalue(EN_Project p, int index, double *value) +/*---------------------------------------------------------------- +** Input: index = time pattern index +** Output: value = average of a time pattern's factors +** Returns: error code +** Purpose: retrieves the average of all pattern factors for a time pattern +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + Spattern *Pattern = net->Pattern; + int i; + + *value = 0.0; + if (!p->Openflag) return 102; + if (index < 1 || index > net->Npats) return 205; + for (i = 0; i < Pattern[index].Length; i++) + { + *value += (double)Pattern[index].F[i]; + } + *value /= (double)Pattern[index].Length; + return 0; +} + +int DLLEXPORT EN_setpattern(EN_Project p, int index, double *values, int len) +/*---------------------------------------------------------------- +** Input: index = time pattern index +** values = an array of pattern factor values +** len = number of time periods contained in f +** Output: none +** Returns: error code +** Purpose: replaces the pattern factors in a time pattern +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + int j; + Spattern *Pattern = net->Pattern; + + // Check for valid arguments + if (!p->Openflag) return 102; + if (index <= 0 || index > net->Npats) return 205; + if (values == NULL) return 205; + if (len <= 0) return 202; + + // Re-set number of time periods & reallocate memory for multipliers + Pattern[index].Length = len; + Pattern[index].F = (double *)realloc(Pattern[index].F, len * sizeof(double)); + if (Pattern[index].F == NULL) return 101; + + // Load multipliers into pattern + for (j = 0; j < len; j++) Pattern[index].F[j] = values[j]; + return 0; +} + +/******************************************************************** + + Data Curve Functions + +********************************************************************/ + +int DLLEXPORT EN_addcurve(EN_Project p, char *id) +/*---------------------------------------------------------------- +** Input: id = data curve ID name +** Output: none +** Returns: error code +** Purpose: adds a new data curve to a project +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + int i, n, err = 0; + Scurve *curve; + + // Check if a curve with same id already exists + if (!p->Openflag) return 102; + if (EN_getcurveindex(p, id, &i) == 0) return 215; + + // Check if id name contains invalid characters + if (!namevalid(id)) return 252; + + // Expand the array of curves + n = net->Ncurves + 1; + net->Curve = (Scurve *) realloc(net->Curve, (n + 1) * sizeof(Scurve)); + + // Set the properties of the new curve + curve = &net->Curve[n]; + strcpy(curve->ID, id); + curve->Comment = NULL; + curve->Capacity = 1; + curve->Npts = 1; + curve->Type = GENERIC_CURVE; + curve->X = (double *)calloc(1, sizeof(double)); + curve->Y = (double *)calloc(1, sizeof(double)); + if (curve->X == NULL) err = 1; + else if (curve->Y == NULL) err = 1; + else + { + curve->X[0] = 1.0; + curve->Y[0] = 1.0; + } + + // Abort if memory allocation error + if (err) + { + free(curve->X); + free(curve->Y); + return 101; + } + + // Update the number of curves + net->Ncurves = n; + p->parser.MaxCurves = n; + return 0; +} + +int DLLEXPORT EN_deletecurve(EN_Project p, int index) +/*---------------------------------------------------------------- +** Input: index = index of the curve to delete +** Output: none +** Returns: error code +** Purpose: deletes a data curve from a project +**---------------------------------------------------------------- +*/ +{ + int i; + + Network *net = &p->network; + Parser *parser = &p->parser; + + // Can't delete a curve while a solver is active + if (!p->Openflag)return 102; + if (p->hydraul.OpenHflag || p->quality.OpenQflag) return 262; + + // Check that curve exists + if (index < 1 || index > p->network.Ncurves) return 205; + + // Adjust references by other objects to curves + adjustcurves(net, index); + + // Free the curve's data arrays + FREE(net->Curve[index].X); + FREE(net->Curve[index].Y); + FREE(net->Curve[index].Comment); + + // Shift the entries in the network's Curve array + for (i = index; i < net->Ncurves; i++) net->Curve[i] = net->Curve[i + 1]; + net->Ncurves--; + parser->MaxCurves--; + return 0; +} + +int DLLEXPORT EN_getcurveindex(EN_Project p, char *id, int *index) +/*---------------------------------------------------------------- +** Input: id = data curve name +** Output: index = data curve index +** Returns: error code +** Purpose: retrieves the index of a data curve +**---------------------------------------------------------------- +*/ +{ + *index = 0; + if (!p->Openflag) return 102; + *index = findcurve(&p->network, id); + if (*index == 0) return 206; + return 0; +} + +int DLLEXPORT EN_getcurveid(EN_Project p, int index, char *id) +/*---------------------------------------------------------------- +** Input: index = data curve index +** Output: id = data curve ID name +** Returns: error code +** Purpose: retrieves the name of a data curve +**---------------------------------------------------------------- +*/ +{ + strcpy(id, ""); + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Ncurves) return 206; + strcpy(id, p->network.Curve[index].ID); + return 0; +} + +int DLLEXPORT EN_setcurveid(EN_Project p, int index, char *id) +/*---------------------------------------------------------------- +** Input: index = data curve index +** id = data curve ID name +** Returns: error code +** Purpose: changes the ID name of a data curve +**---------------------------------------------------------------- +*/ +{ + int i; + + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Ncurves) return 205; + + // Check if id name contains invalid characters + if (!namevalid(id)) return 252; + + for (i = 1; i <= p->network.Ncurves; i++) + { + if (i != index && strcmp(id, p->network.Curve[i].ID) == 0) return 215; + } + strcpy(p->network.Curve[index].ID, id); + return 0; +} + +int DLLEXPORT EN_getcurvelen(EN_Project p, int index, int *len) +/*---------------------------------------------------------------- +** Input: index = data curve index +** Output: len = number of points in a data curve +** Returns: error code +** Purpose: retrieves the number of points in a data curve +**---------------------------------------------------------------- +*/ +{ + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Ncurves) return 206; + *len = p->network.Curve[index].Npts; + return 0; +} + +int DLLEXPORT EN_getcurvetype(EN_Project p, int index, int *type) +/*---------------------------------------------------------------- +** Input: index = data curve index +** Output: type = type of data curve (see EN_CurveType) +** Returns: error code +** Purpose: retrieves the type assigned to a data curve +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + if (!p->Openflag) return 102; + if (index < 1 || index > net->Ncurves) return 206; + *type = net->Curve[index].Type; + return 0; +} + +int DLLEXPORT EN_getcurvevalue(EN_Project p, int curveIndex, int pointIndex, + double *x, double *y) +/*---------------------------------------------------------------- +** Input: curveIndex = data curve index +** pointIndex = index of a data point on the curve +** Output: x = x-value of the point on the curve +** y = y-value of the point on the curve +** Returns: error code +** Purpose: retrieves the value of a specific point on a data curve +**---------------------------------------------------------------- +*/ +{ + *x = 0.0; + *y = 0.0; + if (!p->Openflag) return 102; + if (curveIndex < 1 || curveIndex > p->network.Ncurves) return 206; + if (pointIndex < 1 || pointIndex > p->network.Curve[curveIndex].Npts) return 251; + *x = p->network.Curve[curveIndex].X[pointIndex - 1]; + *y = p->network.Curve[curveIndex].Y[pointIndex - 1]; + return 0; +} + +int DLLEXPORT EN_setcurvevalue(EN_Project p, int curveIndex, int pointIndex, + double x, double y) +/*---------------------------------------------------------------- +** Input: curveIndex = data curve index +** pointIndex = index of a data point on the curve +** x = new x-value for the point on the curve +** y = new y-value for the point on the curve +** Output: none +** Returns: error code +** Purpose: sets the value of a specific point on a data curve +** Note: if pointIndex exceeds the curve's length a new point is added. +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Scurve *curve; + double x1 = -1.e37, x2 = 1.e37; + int n = pointIndex - 1; + + // Check for valid input + if (!p->Openflag) return 102; + if (curveIndex <= 0 || curveIndex > net->Ncurves) return 206; + curve = &net->Curve[curveIndex]; + if (pointIndex <= 0) return 251; + + // Check that new point maintains increasing x values + if (n - 1 >= 0) x1 = curve->X[n-1]; + if (n + 1 < curve->Npts) x2 = curve->X[n+1]; + if (x <= x1 || x >= x2) return 230; + + // Expand curve if need be + if (pointIndex > curve->Npts) pointIndex = curve->Npts + 1; + if (pointIndex >= curve->Capacity) + { + if (resizecurve(curve, curve->Capacity + 10) > 0) return 101; + } + + // Increase curve's number of points if need be + if (pointIndex > curve->Npts) + { + curve->Npts++; + n = curve->Npts - 1; + } + + // Insert new point into curve + curve->X[n] = x; + curve->Y[n] = y; + + // Adjust parameters for pumps using curve as a head curve + return adjustpumpparams(p, curveIndex); +} + +int DLLEXPORT EN_getcurve(EN_Project p, int index, char *id, int *nPoints, + double *xValues, double *yValues) +/*---------------------------------------------------------------- +** Input: index = data curve index +** Output: id = ID name of data curve +** nPoints = number of data points on the curve +** xValues = array of x-values for each data point +** yValues = array of y-values for each data point +** Returns: error code +** Purpose: retrieves the data associated with a data curve +** +** The calling program is responsible for making xValues and +** yValues large enough to hold nPoints data points. +**---------------------------------------------------------------- +*/ +{ + int i; + Scurve *curve; + + if (!p->Openflag) return 102; + if (index <= 0 || index > p->network.Ncurves) return 206; + if (xValues == NULL || yValues == NULL) return 206; + curve = &p->network.Curve[index]; + strncpy(id, curve->ID, MAXID); + *nPoints = curve->Npts; + for (i = 0; i < curve->Npts; i++) + { + xValues[i] = curve->X[i]; + yValues[i] = curve->Y[i]; + } + return 0; +} + +int DLLEXPORT EN_setcurve(EN_Project p, int index, double *xValues, + double *yValues, int nPoints) +/*---------------------------------------------------------------- +** Input: index = data curve index +** xValues = array of x-values +** yValues = array of y-values +** nPoints = number of data points in the x and y arrays +** Returns: error code +** Purpose: replaces a curve's set of data points +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Scurve *curve; + int j; + + // Check for valid arguments + if (!p->Openflag) return 102; + if (index <= 0 || index > net->Ncurves) return 206; + if (xValues == NULL || yValues == NULL) return 206; + if (nPoints <= 0) return 202; + + // Check that x values are increasing + for (j = 1; j < nPoints; j++) if (xValues[j-1] >= xValues[j]) return 230; + + // Expand size of curve's data arrays if need be + curve = &net->Curve[index]; + if (resizecurve(curve, nPoints) > 0) return 101; + + // Load values into curve + curve->Npts = nPoints; + for (j = 0; j < nPoints; j++) + { + curve->X[j] = xValues[j]; + curve->Y[j] = yValues[j]; + } + + // Adjust parameters for pumps using curve as a head curve + return adjustpumpparams(p, index); +} + +/******************************************************************** + + Simple Controls Functions + +********************************************************************/ + +int DLLEXPORT EN_addcontrol(EN_Project p, int type, int linkIndex, double setting, + int nodeIndex, double level, int *index) +/*---------------------------------------------------------------- +** Input: type = type of control (see EN_ControlType) +** linkIndex = index of link being controlled +** setting = link control setting (e.g., pump speed) +** nodeIndex = index of node controlling a link (for level controls) +** level = control activation level (pressure for junction nodes, +** water level for tank nodes or time value for time-based +** control) +** Output: index = the index of the new control +** Returns: error code +** Purpose: adds a new simple control to a project +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Parser *parser = &p->parser; + + char status = ACTIVE; + int n; + long t = 0; + double s = setting, lvl = level; + double *Ucf = p->Ucf; + Scontrol *control; + + + // Check that project exists + if (!p->Openflag) return 102; + + // Check that controlled link exists + if (linkIndex <= 0 || linkIndex > net->Nlinks) return 204; + + // Cannot control check valve + if (net->Link[linkIndex].Type == CVPIPE) return 207; + + // Check for valid parameters + if (type < 0 || type > EN_TIMEOFDAY) return 251; + if (type == EN_LOWLEVEL || type == EN_HILEVEL) + { + if (nodeIndex < 1 || nodeIndex > net->Nnodes) return 203; + } + else nodeIndex = 0; + if (s < 0.0 || lvl < 0.0) return 202; + + // Adjust units of control parameters + switch (net->Link[linkIndex].Type) + { + case PRV: + case PSV: + case PBV: + s /= Ucf[PRESSURE]; + break; + case FCV: + s /= Ucf[FLOW]; + break; + case GPV: + if (s == 0.0) status = CLOSED; + else if (s == 1.0) status = OPEN; + else return 202; + s = net->Link[linkIndex].Kc; + break; + case PIPE: + case PUMP: + status = OPEN; + if (s == 0.0) status = CLOSED; + default: + break; + } + + if (type == LOWLEVEL || type == HILEVEL) + { + if (nodeIndex > net->Njuncs) lvl = net->Node[nodeIndex].El + level / Ucf[ELEV]; + else lvl = net->Node[nodeIndex].El + level / Ucf[PRESSURE]; + } + if (type == TIMER) t = (long)ROUND(lvl); + if (type == TIMEOFDAY) t = (long)ROUND(lvl) % SECperDAY; + + // Expand project's array of controls + n = net->Ncontrols + 1; + net->Control = (Scontrol *)realloc(net->Control, (n + 1) * sizeof(Scontrol)); + + // Set properties of the new control + control = &net->Control[n]; + control->Type = (char)type; + control->Link = linkIndex; + control->Node = nodeIndex; + control->Status = status; + control->Setting = s; + control->Grade = lvl; + control->Time = t; + + // Update number of controls + net->Ncontrols = n; + parser->MaxControls = n; + + // Replace the control's index + *index = n; + return 0; +} + +int DLLEXPORT EN_deletecontrol(EN_Project p, int index) +/*---------------------------------------------------------------- +** Input: index = index of the control +** Output: none +** Returns: error code +** Purpose: deletes a simple control from a project +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + int i; + + if (index <= 0 || index > net->Ncontrols) return 241; + for (i = index; i <= net->Ncontrols - 1; i++) + { + net->Control[i] = net->Control[i + 1]; + } + net->Ncontrols--; + return 0; +} + +int DLLEXPORT EN_getcontrol(EN_Project p, int index, int *type, int *linkIndex, + double *setting, int *nodeIndex, double *level) +/*---------------------------------------------------------------- +** Input: index = index of the control +** Output: type = type of control (see EN_ControlType) +** linkIndex = index of link being controlled +** setting = link control setting (e.g., pump speed) +** nodeIndex = index of node that triggers a level control +** level = trigger level that activates the control (pressure for junction nodes, +** water level for tank nodes or time value for time-based control) +** Returns: error code +** Purpose: Retrieves the properties of a simple control +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + double s, lvl; + double *Ucf = p->Ucf; + Scontrol *control; + Snode *node; + + // Set default return values + s = 0.0; + lvl = 0.0; + *type = 0; + *linkIndex = 0; + *nodeIndex = 0; + + // Check for valid arguments + if (!p->Openflag) return 102; + if (index <= 0 || index > net->Ncontrols) return 241; + + // Retrieve control's type and link index + control = &net->Control[index]; + *type = control->Type; + *linkIndex = control->Link; + + // Retrieve control's setting + s = control->Setting; + if (control->Setting != MISSING) + { + switch (net->Link[*linkIndex].Type) + { + case PRV: + case PSV: + case PBV: + s *= Ucf[PRESSURE]; + break; + case FCV: + s *= Ucf[FLOW]; + default: + break; + } + } + else if (control->Status == OPEN) s = 1.0; + else s = 0.0; + + // Retrieve level value for a node level control + *nodeIndex = control->Node; + if (*nodeIndex > 0) + { + node = &net->Node[*nodeIndex]; + if (*nodeIndex > net->Njuncs) // Node is a tank + { + lvl = (control->Grade - node->El) * Ucf[ELEV]; + } + else // Node is a junction + { + lvl = (control->Grade - node->El) * Ucf[PRESSURE]; + } + } + + // Retrieve level value for a time-based control + else + { + lvl = (double)control->Time; + } + *setting = (double)s; + *level = (double)lvl; + return 0; +} + +int DLLEXPORT EN_setcontrol(EN_Project p, int index, int type, int linkIndex, + double setting, int nodeIndex, double level) +/*---------------------------------------------------------------- +** Input: index = index of the control +** type = type of control (see EN_ControlType) +** linkIndex = index of link being controlled +** setting = link control setting (e.g., pump speed) +** nodeIndex = index of node that triggers the control (for level controls) +** level = trigger level that activates the control (pressure for junction nodes, +** water level for tank nodes or time value for time-based control) +** Output: none +** Returns: error code +** Purpose: Sets the properties of a simple control +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + char status = ACTIVE; + long t = 0; + double s = setting, lvl = level; + double *Ucf = p->Ucf; + Slink *link; + Scontrol *control; + + // Check that project exists + if (!p->Openflag) return 102; + + // Check that control exists + if (index <= 0 || index > net->Ncontrols) return 241; + control = &net->Control[index]; + + // Check that controlled link exists (0 index de-activates the control) + if (linkIndex == 0) + { + control->Link = 0; + return 0; + } + if (linkIndex < 0 || linkIndex > net->Nlinks) return 204; + + // Cannot control check valve + if (net->Link[linkIndex].Type == CVPIPE) return 207; + + // Check for valid control properties + if (type < 0 || type > EN_TIMEOFDAY) return 251; + if (type == EN_LOWLEVEL || type == EN_HILEVEL) + { + if (nodeIndex < 1 || nodeIndex > net->Nnodes) return 203; + } + else nodeIndex = 0; + if (s < 0.0 || lvl < 0.0) return 202; + + // Adjust units of control's properties + link = &net->Link[linkIndex]; + switch (link->Type) + { + case PRV: + case PSV: + case PBV: + s /= Ucf[PRESSURE]; + break; + case FCV: + s /= Ucf[FLOW]; + break; + case GPV: + if (s == 0.0) status = CLOSED; + else if (s == 1.0) status = OPEN; + else return 202; + s = link->Kc; + break; + case PIPE: + case PUMP: + status = OPEN; + if (s == 0.0) status = CLOSED; + default: + break; + } + if (type == LOWLEVEL || type == HILEVEL) + { + if (nodeIndex > net->Njuncs) lvl = net->Node[nodeIndex].El + level / Ucf[ELEV]; + else lvl = net->Node[nodeIndex].El + level / Ucf[PRESSURE]; + } + if (type == TIMER) t = (long)ROUND(lvl); + if (type == TIMEOFDAY) t = (long)ROUND(lvl) % SECperDAY; + + /* Reset control's parameters */ + control->Type = (char)type; + control->Link = linkIndex; + control->Node = nodeIndex; + control->Status = status; + control->Setting = s; + control->Grade = lvl; + control->Time = t; + return 0; +} + +/******************************************************************** + + Rule-Based Controls Functions + +********************************************************************/ + +int DLLEXPORT EN_addrule(EN_Project p, char *rule) +/*---------------------------------------------------------------- +** Input: rule = text of rule being added in the format +** used for the [RULES] section of an EPANET input file +** Output: none +** Returns: error code +** Purpose: adds a new rule to a project +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + Parser *parser = &p->parser; + Rules *rules = &p->rules; + + char *line; + char *nextline; + char line2[MAXLINE+1]; + + // Resize rules array + net->Rule = (Srule *)realloc(net->Rule, (net->Nrules + 2)*sizeof(Srule)); + rules->Errcode = 0; + rules->RuleState = 6; // = r_PRIORITY + + // Extract each line of the rule statement + line = rule; + while (line) + { + // Find where current line ends and next one begins + nextline = strchr(line, '\n'); + if (nextline) *nextline = '\0'; + + // Copy and tokenize the current line + strcpy(line2, line); + strcat(line2, "\n"); // Tokenizer won't work without this + parser->Ntokens = gettokens(line2, parser->Tok, MAXTOKS, parser->Comment); + + // Process the line to build up the rule's contents + if (parser->Ntokens > 0 && *parser->Tok[0] != ';') + { + ruledata(p); // Nrules gets updated in ruledata() + if (rules->Errcode) break; + } + + // Extract next line from the rule statement + if (nextline) *nextline = '\n'; + line = nextline ? (nextline + 1) : NULL; + } + + // Delete new rule entry if there was an error + if (rules->Errcode) deleterule(p, net->Nrules); + + // Re-assign error code 201 (syntax error) to 250 (invalid format) + if (rules->Errcode == 201) rules->Errcode = 250; + return rules->Errcode; +} + +int DLLEXPORT EN_deleterule(EN_Project p, int index) +/*---------------------------------------------------------------- +** Input: index = rule index +** Output: none +** Returns: error code +** Purpose: deletes a rule from a project +**---------------------------------------------------------------- +*/ +{ + if (index < 1 || index > p->network.Nrules) return 257; + deleterule(p, index); + return 0; +} + +int DLLEXPORT EN_getrule(EN_Project p, int index, int *nPremises, + int *nThenActions, int *nElseActions, + double *priority) +/*---------------------------------------------------------------- +** Input: index = rule index +** Output: nPremises = number of premises conditions (IF AND OR) +** nThenActions = number of actions in THEN portion of rule +** nElseActions = number of actions in ELSE portion of rule +** priority = rule priority +** Returns: error code +** Purpose: gets information about a particular rule +**---------------------------------------------------------------- +*/ +{ + Network *net = &p->network; + + int count; + Spremise *premise; + Saction *action; + + if (index < 1 || index > net->Nrules) return 257; + *priority = (double)p->network.Rule[index].priority; + + count = 0; + premise = net->Rule[index].Premises; + while (premise != NULL) + { + count++; + premise = premise->next; + } + *nPremises = count; + + count = 0; + action = net->Rule[index].ThenActions; + while (action != NULL) + { + count++; + action = action->next; + } + *nThenActions = count; + + count = 0; + action = net->Rule[index].ElseActions; + while (action != NULL) + { + count++; + action = action->next; + } + *nElseActions = count; + return 0; +} + +int DLLEXPORT EN_getruleID(EN_Project p, int index, char *id) +/*---------------------------------------------------------------- +** Input: index = rule index +** Output: id = rule ID label +** Returns: error code +** Purpose: retrieves the ID label of a rule +**---------------------------------------------------------------- +*/ +{ + strcpy(id, ""); + if (!p->Openflag) return 102; + if (index < 1 || index > p->network.Nrules) return 257; + strcpy(id, p->network.Rule[index].label); + return 0; +} + +int DLLEXPORT EN_getpremise(EN_Project p, int ruleIndex, int premiseIndex, + int *logop, int *object, int *objIndex, int *variable, + int *relop, int *status, double *value) +/*---------------------------------------------------------------- +** Input: ruleIndex = rule index +** premiseIndex = premise index +** Output: logop = logical operator (IF = 1, AND = 2, OR = 3) +** object = type of object appearing in the premise (see EN_RuleObject) +** objIndex = object's index in Node or Link array +** variable = object variable being tested (see EN_RuleVariable) +** relop = relational operator (see EN_RuleOperator) +** status = object status being tested against (see EN_RuleStatus)) +** value = variable value being tested against +** Returns: error code +** Purpose: retrieves the properties of a rule's premise +**---------------------------------------------------------------- +*/ +{ + Spremise *premises; + Spremise *premise; + + if (ruleIndex < 1 || ruleIndex > p->network.Nrules) return 257; + + premises = p->network.Rule[ruleIndex].Premises; + premise = getpremise(premises, premiseIndex); + if (premise == NULL) return 258; + + *logop = premise->logop; + *object = premise->object; + *objIndex = premise->index; + *variable = premise->variable; + *relop = premise->relop; + *status = premise->status; + *value = (double)premise->value; + return 0; +} + + +int DLLEXPORT EN_setpremise(EN_Project p, int ruleIndex, int premiseIndex, + int logop, int object, int objIndex, int variable, + int relop, int status, double value) +/*---------------------------------------------------------------- +** Input: ruleIndex = rule index +** premiseIndex = premise index +** logop = logical operator (IF = 1, AND = 2, OR = 3) +** object = type of object appearing in the premise (see EN_RuleObject) +** objIndex = object's index in Node or Link array +** variable = object variable being tested (see EN_RuleVariable) +** relop = relational operator (see EN_RuleOperator) +** status = object status being tested against (see EN_RuleStatus)) +** value = variable value being tested against +** Output: none +** Returns: error code +** Purpose: sets the properties of a rule's premise +**---------------------------------------------------------------- +*/ +{ + Spremise *premises; + Spremise *premise; + + if (ruleIndex < 1 || ruleIndex > p->network.Nrules) return 257; + + premises = p->network.Rule[ruleIndex].Premises; + premise = getpremise(premises, premiseIndex); + if (premise == NULL) return 258; + + premise->logop = logop; + premise->object = object; + premise->index = objIndex; + premise->variable = variable; + premise->relop = relop; + premise->status = status; + premise->value = value; + return 0; +} + +int DLLEXPORT EN_setpremiseindex(EN_Project p, int ruleIndex, int premiseIndex, + int objIndex) +/*---------------------------------------------------------------- +** Input: ruleIndex = rule index +** premiseIndex = premise index +** objIndex = object's index in Node or Link array +** Output: none +** Returns: error code +** Purpose: sets the index of an object referred to in a rule's premise +**---------------------------------------------------------------- +*/ +{ + Spremise *premises; + Spremise *premise; + + if (ruleIndex < 1 || ruleIndex > p->network.Nrules) return 257; + + premises = p->network.Rule[ruleIndex].Premises; + premise = getpremise(premises, premiseIndex); + if (premise == NULL) return 258; + + premise->index = objIndex; + return 0; +} + +int DLLEXPORT EN_setpremisestatus(EN_Project p, int ruleIndex, int premiseIndex, int status) +/*---------------------------------------------------------------- +** Input: ruleIndex = rule index +** premiseIndex = premise index +** status = object status being tested against +** (see EN_RuleStatus)) +** Output: none +** Returns: error code +** Purpose: sets the status of an object being tested against +** in a rule's premise +**---------------------------------------------------------------- +*/ +{ + Spremise *premises; + Spremise *premise; + + if (ruleIndex < 1 || ruleIndex > p->network.Nrules) return 257; + + premises = p->network.Rule[ruleIndex].Premises; + premise = getpremise(premises, premiseIndex); + if (premise == NULL) return 258; + + premise->status = status; + return 0; +} + +int DLLEXPORT EN_setpremisevalue(EN_Project p, int ruleIndex, int premiseIndex, double value) +/*---------------------------------------------------------------- +** Input: ruleIndex = rule index +** premiseIndex = premise index +** value = value of object variable being tested against +** Output: none +** Returns: error code +** Purpose: sets the value of object's variable being tested against +** in a rule's premise +**---------------------------------------------------------------- +*/ +{ + Spremise *premises; + Spremise *premise; + + if (ruleIndex < 1 || ruleIndex > p->network.Nrules) return 257; + + premises = p->network.Rule[ruleIndex].Premises; + premise = getpremise(premises, premiseIndex); + if (premise == NULL) return 258; + + premise->value = value; + return 0; +} + +int DLLEXPORT EN_getthenaction(EN_Project p, int ruleIndex, int actionIndex, + int *linkIndex, int *status, double *setting) +/*---------------------------------------------------------------- +** Input: ruleIndex = rule index +** actionIndex = index of a rule's THEN actions +** Output: linkIndex = index of link appearing in the action +** status = status assigned to the link (see EN_RuleStatus)) +** setting = setting assigned to the link +** Returns: error code +** Purpose: retrieves the properties of a rule's THEN action +**---------------------------------------------------------------- +*/ +{ + Saction *actions; + Saction *action; + + if (ruleIndex < 1 || ruleIndex > p->network.Nrules) return 257; + + actions = p->network.Rule[ruleIndex].ThenActions; + action = getaction(actions, actionIndex); + if (action == NULL) return 258; + + *linkIndex = action->link; + *status = action->status; + *setting = (double)action->setting; + return 0; +} + +int DLLEXPORT EN_setthenaction(EN_Project p, int ruleIndex, int actionIndex, + int linkIndex, int status, double setting) +/*---------------------------------------------------------------- +** Input: ruleIndex = rule index +** actionIndex = index of a rule's THEN actions +** linkIndex = index of link appearing in the action +** status = status assigned to the link (see EN_RuleStatus)) +** setting = setting assigned to the link +** Returns: error code +** Purpose: sets the properties of a rule's THEN action +**---------------------------------------------------------------- +*/ +{ + Saction *actions; + Saction *action; + + if (ruleIndex < 1 || ruleIndex > p->network.Nrules) return 257; + + actions = p->network.Rule[ruleIndex].ThenActions; + action = getaction(actions, actionIndex); + if (action == NULL) return 258; + + action->link = linkIndex; + action->status = status; + action->setting = setting; + return 0; +} + +int DLLEXPORT EN_getelseaction(EN_Project p, int ruleIndex, int actionIndex, + int *linkIndex, int *status, double *setting) +/*---------------------------------------------------------------- +** Input: ruleIndex = rule index +** actionIndex = index of a rule's ELSE actions +** Output: linkIndex = index of link appearing in the action +** status = status assigned to the link (see EN_RuleStatus)) +** setting = setting assigned to the link +** Returns: error code +** Purpose: retrieves the properties of a rule's ELSE action +**---------------------------------------------------------------- +*/ +{ + Saction *actions; + Saction *action; + + if (ruleIndex < 1 || ruleIndex > p->network.Nrules) return 257; + + actions = p->network.Rule[ruleIndex].ElseActions; + action = getaction(actions, actionIndex); + if (action == NULL) return 258; + + *linkIndex = action->link; + *status = action->status; + *setting = (double)action->setting; + return 0; +} + +int DLLEXPORT EN_setelseaction(EN_Project p, int ruleIndex, int actionIndex, + int linkIndex, int status, double setting) +/*---------------------------------------------------------------- +** Input: ruleIndex = rule index +** actionIndex = index of a rule's ELSE actions +** linkIndex = index of link appearing in the action +** status = status assigned to the link (see EN_RuleStatus)) +** setting = setting assigned to the link +** Returns: error code +** Purpose: sets the properties of a rule's ELSE action +**---------------------------------------------------------------- +*/ +{ + Saction *actions; + Saction *action; + + if (ruleIndex < 1 || ruleIndex > p->network.Nrules) return 257; + + actions = p->network.Rule[ruleIndex].ElseActions; + action = getaction(actions, actionIndex); + if (action == NULL) return 258; + + action->link = linkIndex; + action->status = status; + action->setting = setting; + return 0; +} + +int DLLEXPORT EN_setrulepriority(EN_Project p, int index, double priority) +/*----------------------------------------------------------------------------- +** Input: index = rule index +** priority = rule priority level +** Output: none +** Returns: error code +** Purpose: sets the priority level for a rule +**----------------------------------------------------------------------------- +*/ +{ + if (index <= 0 || index > p->network.Nrules) return 257; + p->network.Rule[index].priority = priority; + return 0; +} diff --git a/src/epanet2.c b/src/epanet2.c new file mode 100644 index 0000000..f5940cd --- /dev/null +++ b/src/epanet2.c @@ -0,0 +1,865 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: epanet2.c + Description: implementation of the legacy EPANET API functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 11/02/2019 + ****************************************************************************** +*/ + +#include +#include + +#include "types.h" +#include "funcs.h" + +#include "epanet2.h" +#include "epanet2_2.h" + + +// This single global variable is used only when the library is called +// in "legacy mode" with the 2.1-style API. +Project __defaultProject; +Project *_defaultProject = &__defaultProject; + +// Functions for creating and removing default temporary files +void createtmpfiles() +{ + getTmpName(_defaultProject->TmpHydFname); + getTmpName(_defaultProject->TmpOutFname); + getTmpName(_defaultProject->TmpStatFname); +} + +void removetmpfiles() +{ + remove(_defaultProject->TmpHydFname); + remove(_defaultProject->TmpOutFname); + remove(_defaultProject->TmpStatFname); +} + + +/******************************************************************** + + Project Functions + +********************************************************************/ + +int DLLEXPORT ENepanet(const char *inpFile, const char *rptFile, + const char *outFile, void (*pviewprog)(char *)) +{ +/*------------------------------------------------------------------------ + ** Input: inpFile = name of EPANET formatted input file + ** rptFile = name of report file + ** outFile = name of binary output file + ** pviewprog = see note below + ** Output: none + ** Returns: error code + ** Purpose: runs a complete EPANET simulation + ** + ** The pviewprog() argument is a pointer to a callback function + ** that takes a character string (char *) as its only parameter. + ** The function would reside in and be used by the calling + ** program to display the progress messages that EPANET generates + ** as it carries out its computations. If this feature is not + ** needed then the argument should be NULL. + **------------------------------------------------------------------------- + */ + int errcode = 0; + int warncode = 0; + + // Run the project and record any warning + createtmpfiles(); + errcode = EN_runproject(_defaultProject, inpFile, rptFile, outFile, pviewprog); + if (errcode < 100) warncode = errcode; + removetmpfiles(); + + // Return the warning code if the run had no errors + if (warncode) errcode = MAX(errcode, warncode); + return errcode; +} + +int DLLEXPORT ENinit(const char *rptFile, const char *outFile, int unitsType, + int headlossType) +{ + int errcode = 0; + createtmpfiles(); + errcode = EN_init(_defaultProject, rptFile, outFile, unitsType, headlossType); + return errcode; +} + +int DLLEXPORT ENopen(const char *inpFile, const char *rptFile, const char *outFile) +{ + int errcode = 0; + createtmpfiles(); + errcode = EN_open(_defaultProject, inpFile, rptFile, outFile); + return errcode; +} + +int DLLEXPORT ENgettitle(char *line1, char *line2, char *line3) +{ + return EN_gettitle(_defaultProject, line1, line2, line3) ; +} + +int DLLEXPORT ENsettitle(char *line1, char *line2, char *line3) +{ + return EN_settitle(_defaultProject, line1, line2, line3) ; +} + +int DLLEXPORT ENgetcomment(int object, int index, char *comment) +{ + return EN_getcomment(_defaultProject, object, index, comment); +} + +int DLLEXPORT ENsetcomment(int object, int index, char *comment) +{ + return EN_setcomment(_defaultProject, object, index, comment); +} + +int DLLEXPORT ENgetcount(int object, int *count) +{ + return EN_getcount(_defaultProject, object, count); +} + +int DLLEXPORT ENsaveinpfile(const char *filename) +{ + return EN_saveinpfile(_defaultProject, filename); +} + +int DLLEXPORT ENclose() +{ + EN_close(_defaultProject); + removetmpfiles(); + return 0; +} + +/******************************************************************** + + Hydraulic Analysis Functions + +********************************************************************/ + +int DLLEXPORT ENsolveH() { return EN_solveH(_defaultProject); } + +int DLLEXPORT ENsaveH() { return EN_saveH(_defaultProject); } + +int DLLEXPORT ENopenH() { return EN_openH(_defaultProject); } + +int DLLEXPORT ENinitH(int initFlag) { return EN_initH(_defaultProject, initFlag); } + +int DLLEXPORT ENrunH(long *currentTime) { return EN_runH(_defaultProject, currentTime); } + +int DLLEXPORT ENnextH(long *tStep) { return EN_nextH(_defaultProject, tStep); } + +int DLLEXPORT ENcloseH() { return EN_closeH(_defaultProject); } + +int DLLEXPORT ENsavehydfile(char *filename) +{ + return EN_savehydfile(_defaultProject, filename); +} + +int DLLEXPORT ENusehydfile(char *filename) +{ + return EN_usehydfile(_defaultProject, filename); +} + +/******************************************************************** + + Water Quality Analysis Functions + +********************************************************************/ + +int DLLEXPORT ENsolveQ() { return EN_solveQ(_defaultProject); } + +int DLLEXPORT ENopenQ() { return EN_openQ(_defaultProject); } + +int DLLEXPORT ENinitQ(int saveFlag) { return EN_initQ(_defaultProject, saveFlag); } + +int DLLEXPORT ENrunQ(long *currentTime) { return EN_runQ(_defaultProject, currentTime); } + +int DLLEXPORT ENnextQ(long *tStep) { return EN_nextQ(_defaultProject, tStep); } + +int DLLEXPORT ENstepQ(long *timeLeft) { return EN_stepQ(_defaultProject, timeLeft); } + +int DLLEXPORT ENcloseQ() { return EN_closeQ(_defaultProject); } + +/******************************************************************** + + Reporting Functions + +********************************************************************/ + +int DLLEXPORT ENwriteline(char *line) { return EN_writeline(_defaultProject, line); } + +int DLLEXPORT ENreport() { return EN_report(_defaultProject); } + +int DLLEXPORT ENcopyreport(char *filename) +{ + return EN_copyreport(_defaultProject, filename); +} + +int DLLEXPORT ENclearreport() { return EN_clearreport(_defaultProject); } + +int DLLEXPORT ENresetreport() { return EN_resetreport(_defaultProject); } + +int DLLEXPORT ENsetreport(char *format) { return EN_setreport(_defaultProject, format); } + +int DLLEXPORT ENsetstatusreport(int level) +{ + return EN_setstatusreport(_defaultProject, level); +} + +int DLLEXPORT ENgetversion(int *version) { return EN_getversion(version); } + +int DLLEXPORT ENgeterror(int errcode, char *errmsg, int maxLen) +{ + return EN_geterror(errcode, errmsg, maxLen); +} + +int DLLEXPORT ENgetstatistic(int type, EN_API_FLOAT_TYPE *value) +{ + double v = 0.0; + int errcode = EN_getstatistic(_defaultProject, type, &v); + *value = (EN_API_FLOAT_TYPE)v; + return errcode; +} + +int DLLEXPORT ENgetresultindex(int type, int index, int *value) +{ + return EN_getresultindex(_defaultProject, type, index, value); +} + + +/******************************************************************** + + Analysis Options Functions + +********************************************************************/ + +int DLLEXPORT ENgetoption(int option, EN_API_FLOAT_TYPE *value) +{ + double v = 0.0; + int errcode = EN_getoption(_defaultProject, option, &v); + *value = (EN_API_FLOAT_TYPE)v; + return errcode; +} + +int DLLEXPORT ENsetoption(int option, EN_API_FLOAT_TYPE value) +{ + return EN_setoption(_defaultProject, option, value); +} + +int DLLEXPORT ENgetflowunits(int *units) +{ + return EN_getflowunits(_defaultProject, units); +} + +int DLLEXPORT ENsetflowunits(int units) +{ + return EN_setflowunits(_defaultProject, units); +} + +int DLLEXPORT ENgettimeparam(int param, long *value) +{ + return EN_gettimeparam(_defaultProject, param, value); +} + +int DLLEXPORT ENsettimeparam(int param, long value) +{ + return EN_settimeparam(_defaultProject, param, value); +} + +int DLLEXPORT ENgetqualinfo(int *qualType, char *chemName, char *chemUnits, + int *traceNode) +{ + return EN_getqualinfo(_defaultProject, qualType, chemName, chemUnits, traceNode); +} + +int DLLEXPORT ENgetqualtype(int *qualType, int *traceNode) +{ + return EN_getqualtype(_defaultProject, qualType, traceNode); +} + +int DLLEXPORT ENsetqualtype(int qualType, char *chemName, char *chemUnits, + char *traceNode) +{ + return EN_setqualtype(_defaultProject, qualType, chemName, chemUnits, traceNode); +} + +/******************************************************************** + + Node Functions + +********************************************************************/ + +int DLLEXPORT ENaddnode(char *id, int nodeType, int *index) +{ + return EN_addnode(_defaultProject, id, nodeType, index); +} + +int DLLEXPORT ENdeletenode(int index, int actionCode) +{ + return EN_deletenode(_defaultProject, index, actionCode); +} + +int DLLEXPORT ENgetnodeindex(char *id, int *index) +{ + return EN_getnodeindex(_defaultProject, id, index); +} + +int DLLEXPORT ENgetnodeid(int index, char *id) +{ + return EN_getnodeid(_defaultProject, index, id); +} + +int DLLEXPORT ENsetnodeid(int index, char *newid) +{ + return EN_setnodeid(_defaultProject, index, newid); +} + +int DLLEXPORT ENgetnodetype(int index, int *nodeType) +{ + return EN_getnodetype(_defaultProject, index, nodeType); +} + +int DLLEXPORT ENgetnodevalue(int index, int property, EN_API_FLOAT_TYPE *value) +{ + double v = 0.0; + int errcode = EN_getnodevalue(_defaultProject, index, property, &v); + *value = (EN_API_FLOAT_TYPE)v; + return errcode; +} + +int DLLEXPORT ENsetnodevalue(int index, int property, EN_API_FLOAT_TYPE value) +{ + return EN_setnodevalue(_defaultProject, index, property, value); +} + +int DLLEXPORT ENsetjuncdata(int index, EN_API_FLOAT_TYPE elev, EN_API_FLOAT_TYPE dmnd, + char *dmndpat) +{ + return EN_setjuncdata(_defaultProject, index, elev, dmnd, dmndpat); +} + +int DLLEXPORT ENsettankdata(int index, EN_API_FLOAT_TYPE elev, + EN_API_FLOAT_TYPE initlvl, EN_API_FLOAT_TYPE minlvl, + EN_API_FLOAT_TYPE maxlvl, EN_API_FLOAT_TYPE diam, + EN_API_FLOAT_TYPE minvol, char *volcurve) +{ + return EN_settankdata(_defaultProject, index, elev, initlvl, minlvl, maxlvl, + diam, minvol, volcurve); +} + +int DLLEXPORT ENgetcoord(int index, double *x, double *y) +{ + return EN_getcoord(_defaultProject, index, x, y); +} + +int DLLEXPORT ENsetcoord(int index, double x, double y) +{ + return EN_setcoord(_defaultProject, index, x, y); +} + +/******************************************************************** + + Nodal Demand Functions + +********************************************************************/ + +int DLLEXPORT ENgetdemandmodel(int *model, EN_API_FLOAT_TYPE *pmin, + EN_API_FLOAT_TYPE *preq, EN_API_FLOAT_TYPE *pexp) +{ + double pmin2 = 0.0, preq2 = 0.0, pexp2 = 0.0; + int errcode = EN_getdemandmodel(_defaultProject, model, &pmin2, &preq2, &pexp2); + *pmin = (EN_API_FLOAT_TYPE)pmin2; + *preq = (EN_API_FLOAT_TYPE)preq2; + *pexp = (EN_API_FLOAT_TYPE)pexp2; + return errcode; +} + +int DLLEXPORT ENsetdemandmodel(int model, EN_API_FLOAT_TYPE pmin, + EN_API_FLOAT_TYPE preq, EN_API_FLOAT_TYPE pexp) +{ + return EN_setdemandmodel(_defaultProject, model, pmin, preq, pexp); +} + +int DLLEXPORT ENadddemand(int nodeIndex, EN_API_FLOAT_TYPE baseDemand, + char *demandPattern, char *demandName) +{ + return EN_adddemand(_defaultProject, nodeIndex, baseDemand, demandPattern, demandName); +} + +int DLLEXPORT ENdeletedemand(int nodeIndex, int demandIndex) +{ + return EN_deletedemand(_defaultProject, nodeIndex, demandIndex); +} + +int DLLEXPORT ENgetdemandindex(int nodeIndex, char *demandName, int *demandIndex) +{ + return EN_getdemandindex(_defaultProject, nodeIndex, demandName, demandIndex); +} + +int DLLEXPORT ENgetnumdemands(int nodeIndex, int *numDemands) +{ + return EN_getnumdemands(_defaultProject, nodeIndex, numDemands); +} + +int DLLEXPORT ENgetbasedemand(int nodeIndex, int demandIndex, + EN_API_FLOAT_TYPE *baseDemand) +{ + double bd2 = 0.0; + int errcode = EN_getbasedemand(_defaultProject, nodeIndex, demandIndex, &bd2); + *baseDemand = (EN_API_FLOAT_TYPE)bd2; + return errcode; +} + +int DLLEXPORT ENsetbasedemand(int nodeIndex, int demandIndex, + EN_API_FLOAT_TYPE baseDemand) +{ + return EN_setbasedemand(_defaultProject, nodeIndex, demandIndex, baseDemand); +} + +int DLLEXPORT ENsetdemandpattern(int nodeIndex, int demandIndex, int patIndex) +{ + return EN_setdemandpattern(_defaultProject, nodeIndex, demandIndex, patIndex); +} + +int DLLEXPORT ENgetdemandpattern(int nodeIndex, int demandIndex, int *pattIdx) +{ + return EN_getdemandpattern(_defaultProject, nodeIndex, demandIndex, pattIdx); +} + +int DLLEXPORT ENgetdemandname(int nodeIndex, int demandIndex, char *demandName) +{ + return EN_getdemandname(_defaultProject, nodeIndex, demandIndex, demandName); +} + +int DLLEXPORT ENsetdemandname(int nodeIndex, int demandIndex, char *demandName) +{ + return EN_setdemandname(_defaultProject, nodeIndex, demandIndex, demandName); +} + +/******************************************************************** + + Link Functions + +********************************************************************/ + +int DLLEXPORT ENaddlink(char *id, int linkType, char *fromNode, char *toNode, int *index) +{ + return EN_addlink(_defaultProject, id, linkType, fromNode, toNode, index); +} + +int DLLEXPORT ENdeletelink(int index, int actionCode) +{ + return EN_deletelink(_defaultProject, index, actionCode); +} + +int DLLEXPORT ENgetlinkindex(char *id, int *index) +{ + return EN_getlinkindex(_defaultProject, id, index); +} + +int DLLEXPORT ENgetlinkid(int index, char *id) +{ + return EN_getlinkid(_defaultProject, index, id); +} + +int DLLEXPORT ENsetlinkid(int index, char *newid) +{ + return EN_setlinkid(_defaultProject, index, newid); +} + +int DLLEXPORT ENgetlinktype(int index, int *linkType) +{ + return EN_getlinktype(_defaultProject, index, linkType); +} + +int DLLEXPORT ENsetlinktype(int *index, int linkType, int actionCode) +{ + return EN_setlinktype(_defaultProject, index, linkType, actionCode); +} + +int DLLEXPORT ENgetlinknodes(int index, int *node1, int *node2) +{ + return EN_getlinknodes(_defaultProject, index, node1, node2); +} + +int DLLEXPORT ENsetlinknodes(int index, int node1, int node2) +{ + return EN_setlinknodes(_defaultProject, index, node1, node2); +} + +int DLLEXPORT ENgetlinkvalue(int index, int property, EN_API_FLOAT_TYPE *value) +{ + double v = 0.0; + int errcode = EN_getlinkvalue(_defaultProject, index, property, &v); + *value = (EN_API_FLOAT_TYPE)v; + return errcode; +} + +int DLLEXPORT ENsetlinkvalue(int index, int property, EN_API_FLOAT_TYPE value) +{ + return EN_setlinkvalue(_defaultProject, index, property, value); +} + +int DLLEXPORT ENsetpipedata(int index, EN_API_FLOAT_TYPE length, + EN_API_FLOAT_TYPE diam, EN_API_FLOAT_TYPE rough, EN_API_FLOAT_TYPE mloss) +{ + return EN_setpipedata(_defaultProject, index, length, diam, rough, mloss); +} + +int DLLEXPORT ENgetvertexcount(int index, int *count) +{ + return EN_getvertexcount(_defaultProject, index, count); +} + +int DLLEXPORT ENgetvertex(int index, int vertex, double *x, double *y) +{ + return EN_getvertex(_defaultProject, index, vertex, x, y); +} + +int DLLEXPORT ENsetvertices(int index, double *x, double *y, int count) +{ + return EN_setvertices(_defaultProject, index, x, y, count); +} + +/******************************************************************** + + Pump Functions + +********************************************************************/ + +int DLLEXPORT ENgetpumptype(int linkIndex, int *pumpType) +{ + return EN_getpumptype(_defaultProject, linkIndex, pumpType); +} + +int DLLEXPORT ENgetheadcurveindex(int linkIndex, int *curveIndex) +{ + return EN_getheadcurveindex(_defaultProject, linkIndex, curveIndex); +} + +int DLLEXPORT ENsetheadcurveindex(int linkIndex, int curveIndex) +{ + return EN_setheadcurveindex(_defaultProject, linkIndex, curveIndex); +} + +/******************************************************************** + + Time Pattern Functions + +********************************************************************/ + +int DLLEXPORT ENaddpattern(char *id) +{ + return EN_addpattern(_defaultProject, id); +} + +int DLLEXPORT ENdeletepattern(int index) +{ + return EN_deletepattern(_defaultProject, index); +} + +int DLLEXPORT ENgetpatternindex(char *id, int *index) +{ + return EN_getpatternindex(_defaultProject, id, index); +} + +int DLLEXPORT ENgetpatternid(int index, char *id) +{ + return EN_getpatternid(_defaultProject, index, id); +} + +int DLLEXPORT ENsetpatternid(int index, char *id) +{ + return EN_setpatternid(_defaultProject, index, id); +} + +int DLLEXPORT ENgetpatternlen(int index, int *len) +{ + return EN_getpatternlen(_defaultProject, index, len); +} + +int DLLEXPORT ENgetpatternvalue(int index, int period, EN_API_FLOAT_TYPE *value) +{ + double v = 0.0; + int errcode = EN_getpatternvalue(_defaultProject, index, period, &v); + *value = (EN_API_FLOAT_TYPE)v; + return errcode; +} + +int DLLEXPORT ENsetpatternvalue(int index, int period, EN_API_FLOAT_TYPE value) +{ + return EN_setpatternvalue(_defaultProject, index, period, value); +} + +int DLLEXPORT ENgetaveragepatternvalue(int index, EN_API_FLOAT_TYPE *value) +{ + double v; + int errcode = EN_getaveragepatternvalue(_defaultProject, index, &v); + *value = (EN_API_FLOAT_TYPE)v; + return errcode; +} + +int DLLEXPORT ENsetpattern(int index, EN_API_FLOAT_TYPE *values, int len) +{ + double *v = NULL; + int i, errcode; + if (values == NULL) return 206; + v = (double *)calloc(len, sizeof(double)); + if (v) + { + for (i = 0; i < len; i++) v[i] = values[i]; + errcode = EN_setpattern(_defaultProject, index, v, len); + } + else errcode = 101; + free(v); + return errcode; +} + +/******************************************************************** + + Data Curve Functions + +********************************************************************/ + +int DLLEXPORT ENaddcurve(char *id) +{ + return EN_addcurve(_defaultProject, id); +} + +int DLLEXPORT ENdeletecurve(int index) +{ + return EN_deletecurve(_defaultProject, index); +} + +int DLLEXPORT ENgetcurveindex(char *id, int *index) +{ + return EN_getcurveindex(_defaultProject, id, index); +} + +int DLLEXPORT ENgetcurveid(int index, char *id) +{ + return EN_getcurveid(_defaultProject, index, id); +} + +int DLLEXPORT ENsetcurveid(int index, char *id) +{ + return EN_setcurveid(_defaultProject, index, id); +} + +int DLLEXPORT ENgetcurvelen(int index, int *len) +{ + return EN_getcurvelen(_defaultProject, index, len); +} + +int DLLEXPORT ENgetcurvetype(int index, int *type) +{ + return EN_getcurvetype(_defaultProject, index, type); +} + +int DLLEXPORT ENgetcurvevalue(int curveIndex, int pointIndex, EN_API_FLOAT_TYPE *x, + EN_API_FLOAT_TYPE *y) +{ + double xx = 0.0, yy = 0.0; + int errcode = EN_getcurvevalue(_defaultProject, curveIndex, pointIndex, &xx, &yy); + *x = (EN_API_FLOAT_TYPE)xx; + *y = (EN_API_FLOAT_TYPE)yy; + return errcode; +} + +int DLLEXPORT ENsetcurvevalue(int curveIndex, int pointIndex, EN_API_FLOAT_TYPE x, + EN_API_FLOAT_TYPE y) +{ + return EN_setcurvevalue(_defaultProject, curveIndex, pointIndex, x, y); +} + +int DLLEXPORT ENgetcurve(int index, char *id, int *nPoints, + EN_API_FLOAT_TYPE *xValues, EN_API_FLOAT_TYPE *yValues) +{ + int i; + Network *net = &_defaultProject->network; + Scurve *curve; + + if (index <= 0 || index > net->Ncurves) return 206; + if (xValues == NULL || yValues == NULL) return 206; + curve = &net->Curve[index]; + strncpy(id, curve->ID, MAXID); + *nPoints = curve->Npts; + for (i = 0; i < curve->Npts; i++) + { + xValues[i] = (EN_API_FLOAT_TYPE)curve->X[i]; + yValues[i] = (EN_API_FLOAT_TYPE)curve->Y[i]; + } + return 0; +} + +int DLLEXPORT ENsetcurve(int index, EN_API_FLOAT_TYPE *xValues, + EN_API_FLOAT_TYPE *yValues, int nPoints) +{ + double *xx = NULL; + double *yy = NULL; + int i, errcode = 0; + + if (xValues == NULL || yValues == NULL) return 206; + if (nPoints < 1) return 202; + + xx = (double *)calloc(nPoints, sizeof(double)); + yy = (double *)calloc(nPoints, sizeof(double)); + if (xx && yy) + { + for (i = 0; i < nPoints; i++) + { + xx[i] = xValues[i]; + yy[i] = yValues[i]; + } + errcode = EN_setcurve(_defaultProject, index, xx, yy, nPoints); + } + else errcode = 101; + free(xx); + free(yy); + return errcode; +} + +/******************************************************************** + + Simple Controls Functions + +********************************************************************/ + +int DLLEXPORT ENaddcontrol(int type, int linkIndex, EN_API_FLOAT_TYPE setting, + int nodeIndex, EN_API_FLOAT_TYPE level, int *index) +{ + return EN_addcontrol(_defaultProject, type, linkIndex, setting, nodeIndex, + level, index); +} + +int DLLEXPORT ENdeletecontrol(int index) +{ + return EN_deletecontrol(_defaultProject, index); +} + +int DLLEXPORT ENgetcontrol(int index, int *type, int *linkIndex, + EN_API_FLOAT_TYPE *setting, int *nodeIndex, EN_API_FLOAT_TYPE *level) +{ + double setting2 = 0.0, level2 = 0.0; + int errcode = EN_getcontrol(_defaultProject, index, type, linkIndex, &setting2, + nodeIndex, &level2); + *setting = (EN_API_FLOAT_TYPE)setting2; + *level = (EN_API_FLOAT_TYPE)level2; + return errcode; +} + +int DLLEXPORT ENsetcontrol(int index, int type, int linkIndex, + EN_API_FLOAT_TYPE setting, int nodeIndex, EN_API_FLOAT_TYPE level) +{ + return EN_setcontrol(_defaultProject, index, type, linkIndex, setting, + nodeIndex, level); +} + +/******************************************************************** + + Rule-Based Controls Functions + +********************************************************************/ + +int DLLEXPORT ENaddrule(char *rule) +{ + return EN_addrule(_defaultProject, rule); +} + +int DLLEXPORT ENdeleterule(int index) +{ + return EN_deleterule(_defaultProject, index); +} + +int DLLEXPORT ENgetrule(int index, int *nPremises, int *nThenActions, + int *nElseActions, EN_API_FLOAT_TYPE *priority) +{ + double priority2 = 0.0; + int errcode = EN_getrule(_defaultProject, index, nPremises, nThenActions, + nElseActions, &priority2); + *priority = (EN_API_FLOAT_TYPE)priority2; + return errcode; +} + +int DLLEXPORT ENgetruleID(int index, char* id) +{ + return EN_getruleID(_defaultProject, index, id); +} + +int DLLEXPORT ENgetpremise(int ruleIndex, int premiseIndex, int *logop, int *object, + int *objIndex, int *variable, int *relop, int *status, + EN_API_FLOAT_TYPE *value) +{ + double v = 0.0; + int errcode = EN_getpremise(_defaultProject, ruleIndex, premiseIndex, logop, + object, objIndex, variable, relop, status, &v); + *value = (EN_API_FLOAT_TYPE)v; + return errcode; +} + +int DLLEXPORT ENsetpremise(int ruleIndex, int premiseIndex, int logop, int object, + int objIndex, int variable, int relop, int status, EN_API_FLOAT_TYPE value) +{ + return EN_setpremise(_defaultProject, ruleIndex, premiseIndex, logop, object, + objIndex, variable, relop, status, value); +} + +int DLLEXPORT ENsetpremiseindex(int ruleIndex, int premiseIndex, int objIndex) +{ + return EN_setpremiseindex(_defaultProject, ruleIndex, premiseIndex, objIndex); +} + +int DLLEXPORT ENsetpremisestatus(int ruleIndex, int premiseIndex, int status) +{ + return EN_setpremisestatus(_defaultProject, ruleIndex, premiseIndex, status); +} + +int DLLEXPORT ENsetpremisevalue(int ruleIndex, int premiseIndex, EN_API_FLOAT_TYPE value) +{ + return EN_setpremisevalue(_defaultProject, ruleIndex, premiseIndex, value); +} + +int DLLEXPORT ENgetthenaction(int ruleIndex, int actionIndex, int *linkIndex, + int *status, EN_API_FLOAT_TYPE *setting) +{ + double setting2 = 0.0; + int errcode = EN_getthenaction(_defaultProject, ruleIndex, actionIndex, linkIndex, + status, &setting2); + *setting = (EN_API_FLOAT_TYPE)setting2; + return errcode; +} + +int DLLEXPORT ENsetthenaction(int ruleIndex, int actionIndex, int linkIndex, + int status, EN_API_FLOAT_TYPE setting) +{ + return EN_setthenaction(_defaultProject, ruleIndex, actionIndex, linkIndex, + status, setting); +} + +int DLLEXPORT ENgetelseaction(int ruleIndex, int actionIndex, int *linkIndex, + int *status, EN_API_FLOAT_TYPE *setting) +{ + double setting2 = 0.0; + int errcode = EN_getelseaction(_defaultProject, ruleIndex, actionIndex, linkIndex, + status, &setting2); + *setting = (EN_API_FLOAT_TYPE)setting2; + return errcode; +} + +int DLLEXPORT ENsetelseaction(int ruleIndex, int actionIndex, int linkIndex, + int status, EN_API_FLOAT_TYPE setting) +{ + return EN_setelseaction(_defaultProject, ruleIndex, actionIndex, linkIndex, + status, setting); +} + +int DLLEXPORT ENsetrulepriority(int index, EN_API_FLOAT_TYPE priority) +{ + return EN_setrulepriority(_defaultProject, index, priority); +} diff --git a/src/errors.dat b/src/errors.dat new file mode 100644 index 0000000..0930b52 --- /dev/null +++ b/src/errors.dat @@ -0,0 +1,73 @@ +//EPANET 2 Error Messages +DAT(0,"ok") +DAT(101,"insufficient memory available") +DAT(102,"no network data available") +DAT(103,"hydraulic solver not opened") +DAT(104,"no hydraulics for water quality analysis") +DAT(105,"water quality solver not opened") +DAT(106,"no results saved to report on") +DAT(107,"hydraulics supplied from external file") +DAT(108,"cannot use external file while hydraulics solver is active") +DAT(110,"cannot solve network hydraulic equations") +DAT(120,"cannot solve water quality transport equations") + +// These errors apply only to an input file +DAT(200,"one or more errors in input file") +DAT(201,"syntax error") + +// These errors apply to both an input file and to API functions +DAT(202,"illegal numeric value") +DAT(203,"undefined node") +DAT(204,"undefined link") +DAT(205,"undefined time pattern") +DAT(206,"undefined curve") +DAT(207,"attempt to control CV/GPV link") +DAT(208,"illegal PDA pressure limits") +DAT(209,"illegal node property value") +DAT(211,"illegal link property value") +DAT(212,"undefined trace node") +DAT(213,"invalid option value") +DAT(214,"too many characters in input line") +DAT(215,"duplicate ID label") +DAT(216,"reference to undefined pump") +DAT(217,"invalid pump energy data") +DAT(219,"illegal valve connection to tank node") +DAT(220,"illegal valve connection to another valve") +DAT(221,"mis-placed rule clause in rule-based control") +DAT(222,"same start and end nodes for link") + +// These errors apply to network consistency check +DAT(223,"not enough nodes in network") +DAT(224,"no tanks or reservoirs in network") +DAT(225,"invalid lower/upper levels for tank") +DAT(226,"no head curve or power rating for pump") +DAT(227,"invalid head curve for pump") +DAT(230,"nonincreasing x-values for curve") +DAT(233,"network has unconnected node") + +// These errors apply only to API functions +DAT(240,"nonexistent source") +DAT(241,"nonexistent control") +DAT(250,"invalid format") +DAT(251,"invalid parameter code") +DAT(252,"invalid ID name") +DAT(253,"nonexistent demand category") +DAT(254,"node with no coordinates") +DAT(255,"invalid link vertex") +DAT(257,"nonexistent rule") +DAT(258,"nonexistent rule clause") +DAT(259,"attempt to delete a node that still has links connected to it") +DAT(260,"attempt to delete node assigned as a Trace Node") +DAT(261,"attempt to delete a node or link contained in a control") +DAT(262,"attempt to modify network structure while solver is active") + +// File errors +DAT(301,"identical file names") +DAT(302,"cannot open input file") +DAT(303,"cannot open report file") +DAT(304,"cannot open binary output file") +DAT(305,"cannot open hydraulics file") +DAT(306,"hydraulics file does not match network data") +DAT(307,"cannot read hydraulics file") +DAT(308,"cannot save results to file") +DAT(309,"cannot save results to report file") diff --git a/src/funcs.h b/src/funcs.h index 51ccc20..d2bf39e 100755 --- a/src/funcs.h +++ b/src/funcs.h @@ -1,288 +1,193 @@ -/* -************************************************************************** - -FUNCS.H -- Function Prototypes for EPANET Program - -VERSION: 2.00 -DATE: 5/8/00 - 9/25/00 - 10/25/00 - 12/29/00 - 3/1/01 - 2/14/08 (2.00.12) -AUTHOR: L. Rossman - US EPA - NRMRL - -************************************************************************** -*/ - -/*****************************************************************/ -/* Most float arguments have been changed to double - 7/3/07 */ -/*****************************************************************/ - -/* ------- EPANET.C --------------------*/ -/* -** NOTE: The exportable functions that can be called -** via the DLL are prototyped in TOOLKIT.H. -*/ - -#ifndef FUNCS_H -#define FUNCS_H - -void initpointers(void); /* Initializes pointers */ -int allocdata(void); /* Allocates memory */ -void freeTmplist(STmplist *); /* Frees items in linked list */ -void freeFloatlist(SFloatlist *); /* Frees list of floats */ -void freedata(void); /* Frees allocated memory */ -int openfiles(char *,char *,char *); /* Opens input & report files */ -int openhydfile(void); /* Opens hydraulics file */ -int openoutfile(void); /* Opens binary output file */ -int strcomp(char *, char *); /* Compares two strings */ -char* getTmpName(char* fname); /* Gets temporary file name */ //(2.00.12 - LR) -double interp(int, double *, /* Interpolates a data curve */ - double *, double); -int findnode(char *); /* Finds node's index from ID */ -int findlink(char *); /* Finds link's index from ID */ -char* geterrmsg(int); /* Gets text of error message */ -void errmsg(int); /* Reports program error */ -void writecon(char *); /* Writes text to console */ -void writewin(char *); /* Passes text to calling app */ - -/* ------- INPUT1.C --------------------*/ -int getdata(void); /* Gets network data */ -void setdefaults(void); /* Sets default values */ -void initreport(void); /* Initializes report options */ -void adjustdata(void); /* Adjusts input data */ -int inittanks(void); /* Initializes tank levels */ -void initunits(void); /* Determines reporting units */ -void convertunits(void); /* Converts data to std. units*/ - -/* -------- INPUT2.C -------------------*/ -int netsize(void); /* Determines network size */ -int readdata(void); /* Reads in network data */ -int newline(int, char *); /* Processes new line of data */ -int addnodeID(int, char *); /* Adds node ID to data base */ -int addlinkID(int, char *); /* Adds link ID to data base */ -int addpattern(char *); /* Adds pattern to data base */ -int addcurve(char *); /* Adds curve to data base */ -STmplist *findID(char *, STmplist *); /* Locates ID on linked list */ -int unlinked(void); /* Checks for unlinked nodes */ -int getpumpparams(void); /* Computes pump curve coeffs.*/ -int getpatterns(void); /* Gets pattern data from list*/ -int getcurves(void); /* Gets curve data from list */ -int findmatch(char *,char *[]); /* Finds keyword in line */ -int match(char *, char *); /* Checks for word match */ -int gettokens(char *); /* Tokenizes input line */ -int getfloat(char *, double *); /* Converts string to double */ -double hour(char *, char *); /* Converts time to hours */ -int setreport(char *); /* Processes reporting command*/ -void inperrmsg(int,int,char *); /* Input error message */ - -/* ---------- INPUT3.C -----------------*/ -int juncdata(void); /* Processes junction data */ -int tankdata(void); /* Processes tank data */ -int pipedata(void); /* Processes pipe data */ -int pumpdata(void); /* Processes pump data */ -int valvedata(void); /* Processes valve data */ -int patterndata(void); /* Processes pattern data */ -int curvedata(void); /* Processes curve data */ -int coordata(void); /* Processes coordinate data */ -int demanddata(void); /* Processes demand data */ -int controldata(void); /* Processes simple controls */ -int energydata(void); /* Processes energy data */ -int sourcedata(void); /* Processes source data */ -int emitterdata(void); /* Processes emitter data */ -int qualdata(void); /* Processes quality data */ -int reactdata(void); /* Processes reaction data */ -int mixingdata(void); /* Processes tank mixing data */ -int statusdata(void); /* Processes link status data */ -int reportdata(void); /* Processes report options */ -int timedata(void); /* Processes time options */ -int optiondata(void); /* Processes analysis options */ -int optionchoice(int); /* Processes option choices */ -int optionvalue(int); /* Processes option values */ -int getpumpcurve(int); /* Constructs a pump curve */ -int powercurve(double, double, double,/* Coeffs. of power pump curve*/ - double, double, double *, - double *, double *); -int valvecheck(int, int, int); /* Checks valve placement */ -void changestatus(int, char, double); /* Changes status of a link */ - -/* -------------- RULES.C --------------*/ -void initrules(void); /* Initializes rule base */ -void addrule(char *); /* Adds rule to rule base */ -int allocrules(void); /* Allocates memory for rule */ -int ruledata(void); /* Processes rule input data */ -int checkrules(long); /* Checks all rules */ -void freerules(void); /* Frees rule base memory */ - -/* ------------- REPORT.C --------------*/ -int writereport(void); /* Writes formatted report */ -void writelogo(void); /* Writes program logo */ -void writesummary(void); /* Writes network summary */ -void writehydstat(int,double); /* Writes hydraulic status */ -void writeenergy(void); /* Writes energy usage */ -int writeresults(void); /* Writes node/link results */ -void writeheader(int,int); /* Writes heading on report */ -void writeline(char *); /* Writes line to report file */ -void writerelerr(int, double); /* Writes convergence error */ -void writestatchange(int,char,char); /* Writes link status change */ -void writecontrolaction(int, int); /* Writes control action taken*/ -void writeruleaction(int, char *); /* Writes rule action taken */ -int writehydwarn(int,double); /* Writes hydraulic warnings */ -void writehyderr(int); /* Writes hydraulic error msg.*/ -int disconnected(void); /* Checks for disconnections */ -void marknodes(int, int *, char *); /* Identifies connected nodes */ -void getclosedlink(int, char *); /* Finds a disconnecting link */ -void writelimits(int,int); /* Writes reporting limits */ -int checklimits(double *,int,int); /* Checks variable limits */ -void writetime(char *); /* Writes current clock time */ -char *clocktime(char *, long); /* Converts time to hrs:min */ -char *fillstr(char *, char, int); /* Fills string with character*/ -int getnodetype(int); /* Determines node type */ - -/* --------- HYDRAUL.C -----------------*/ -int openhyd(void); /* Opens hydraulics solver */ - -/*** Updated 3/1/01 ***/ -void inithyd(int); /* Re-sets initial conditions */ - -int runhyd(long *); /* Solves 1-period hydraulics */ -int nexthyd(long *); /* Moves to next time period */ -void closehyd(void); /* Closes hydraulics solver */ -int allocmatrix(void); /* Allocates matrix coeffs. */ -void freematrix(void); /* Frees matrix coeffs. */ -void initlinkflow(int, char, double); /* Initializes link flow */ -void setlinkflow(int, double); /* Sets link flow via headloss*/ -void setlinkstatus(int, char, char *, /* Sets link status */ - double *); -void setlinksetting(int, double, /* Sets pump/valve setting */ - char *, double *); -void resistance(int); /* Computes resistance coeff. */ -void demands(void); /* Computes current demands */ -int controls(void); /* Controls link settings */ -long timestep(void); /* Computes new time step */ -void tanktimestep(long *); /* Time till tanks fill/drain */ -void controltimestep(long *); /* Time till control action */ -void ruletimestep(long *); /* Time till rule action */ -void addenergy(long); /* Accumulates energy usage */ -void getenergy(int, double *, double *); /* Computes link energy use */ -void tanklevels(long); /* Computes new tank levels */ -double tankvolume(int,double); /* Finds tank vol. from grade */ -double tankgrade(int,double); /* Finds tank grade from vol. */ -int netsolve(int *,double *); /* Solves network equations */ -int badvalve(int); /* Checks for bad valve */ -int valvestatus(void); /* Updates valve status */ -int linkstatus(void); /* Updates link status */ -char cvstatus(char,double,double); /* Updates CV status */ -char pumpstatus(int,double); /* Updates pump status */ -char prvstatus(int,char,double, /* Updates PRV status */ - double,double); -char psvstatus(int,char,double, /* Updates PSV status */ - double,double); -char fcvstatus(int,char,double, /* Updates FCV status */ - double); -void tankstatus(int,int,int); /* Checks if tank full/empty */ -int pswitch(void); /* Pressure switch controls */ -double newflows(void); /* Updates link flows */ -void newcoeffs(void); /* Computes matrix coeffs. */ -void linkcoeffs(void); /* Computes link coeffs. */ -void nodecoeffs(void); /* Computes node coeffs. */ -void valvecoeffs(void); /* Computes valve coeffs. */ -void pipecoeff(int); /* Computes pipe coeff. */ -double DWcoeff(int, double *); /* Computes D-W coeff. */ -void pumpcoeff(int); /* Computes pump coeff. */ - -/*** Updated 10/25/00 ***/ -/*** Updated 12/29/00 ***/ -void curvecoeff(int,double,double *, /* Computes curve coeffs. */ - double *); - -void gpvcoeff(int); /* Computes GPV coeff. */ -void pbvcoeff(int); /* Computes PBV coeff. */ -void tcvcoeff(int); /* Computes TCV coeff. */ -void prvcoeff(int,int,int); /* Computes PRV coeff. */ -void psvcoeff(int,int,int); /* Computes PSV coeff. */ -void fcvcoeff(int,int,int); /* Computes FCV coeff. */ -void emittercoeffs(void); /* Computes emitter coeffs. */ -double emitflowchange(int); /* Computes new emitter flow */ - -/* ----------- SMATRIX.C ---------------*/ -int createsparse(void); /* Creates sparse matrix */ -int allocsparse(void); /* Allocates matrix memory */ -void freesparse(void); /* Frees matrix memory */ -int buildlists(int); /* Builds adjacency lists */ -int paralink(int, int, int); /* Checks for parallel links */ -void xparalinks(void); /* Removes parallel links */ -void freelists(void); /* Frees adjacency lists */ -void countdegree(void); /* Counts links at each node */ -int reordernodes(void); /* Finds a node re-ordering */ -int mindegree(int, int); /* Finds min. degree node */ -int growlist(int); /* Augments adjacency list */ -int newlink(Padjlist); /* Adds fill-ins for a node */ -int linked(int, int); /* Checks if 2 nodes linked */ -int addlink(int, int, int); /* Creates new fill-in */ -int storesparse(int); /* Stores sparse matrix */ -int ordersparse(int); /* Orders matrix storage */ -void transpose(int,int *,int *, /* Transposes sparse matrix */ - int *,int *,int *,int *,int *); -int linsolve(int, double *, double *, /* Solution of linear eqns. */ - double *); /* via Cholesky factorization */ - -/* ----------- QUALITY.C ---------------*/ -int openqual(void); /* Opens WQ solver system */ -void initqual(void); /* Initializes WQ solver */ -int runqual(long *); /* Gets current WQ results */ -int nextqual(long *); /* Updates WQ by hyd.timestep */ -int stepqual(long *); /* Updates WQ by WQ time step */ -int closequal(void); /* Closes WQ solver system */ -int gethyd(long *, long *); /* Gets next hyd. results */ -char setReactflag(void); /* Checks for reactive chem. */ -void transport(long); /* Transports mass in network */ -void initsegs(void); /* Initializes WQ segments */ -void reorientsegs(void); /* Re-orients WQ segments */ -void updatesegs(long); /* Updates quality in segments*/ -void removesegs(int); /* Removes a WQ segment */ -void addseg(int,double,double); /* Adds a WQ segment to pipe */ -void accumulate(long); /* Sums mass flow into node */ -void updatenodes(long); /* Updates WQ at nodes */ -void sourceinput(long); /* Computes source inputs */ -void release(long); /* Releases mass from nodes */ -void updatetanks(long); /* Updates WQ in tanks */ -void updatesourcenodes(long); /* Updates WQ at source nodes */ -void tankmix1(int, long); /* Complete mix tank model */ -void tankmix2(int, long); /* 2-compartment tank model */ -void tankmix3(int, long); /* FIFO tank model */ -void tankmix4(int, long); /* LIFO tank model */ -double sourcequal(Psource); /* Finds WQ input from source */ -double avgqual(int); /* Finds avg. quality in pipe */ -void ratecoeffs(void); /* Finds wall react. coeffs. */ -double piperate(int); /* Finds wall react. coeff. */ -double pipereact(int,double,double,long);/* Reacts water in a pipe */ -double tankreact(double,double,double, - long); /* Reacts water in a tank */ -double bulkrate(double,double,double); /* Finds bulk reaction rate */ -double wallrate(double,double,double,double);/* Finds wall reaction rate */ - - -/* ------------ OUTPUT.C ---------------*/ -int savenetdata(void); /* Saves basic data to file */ -int savehyd(long *); /* Saves hydraulic solution */ -int savehydstep(long *); /* Saves hydraulic timestep */ -int saveenergy(void); /* Saves energy usage */ -int readhyd(long *); /* Reads hydraulics from file */ -int readhydstep(long *); /* Reads time step from file */ -int saveoutput(void); /* Saves results to file */ -int nodeoutput(int, REAL4 *, double); /* Saves node results to file */ -int linkoutput(int, REAL4 *, double); /* Saves link results to file */ -int savefinaloutput(void); /* Finishes saving output */ -int savetimestat(REAL4 *, char); /* Saves time stats to file */ -int savenetreacts(double, double, - double, double); /* Saves react. rates to file */ -int saveepilog(void); /* Saves output file epilog */ - - -/* ------------ INPFILE.C --------------*/ -int saveinpfile(char *); /* Saves network to text file */ - -#endif +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: funcs.h + Description: prototypes of external functions called by various modules + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 11/15/2019 + ****************************************************************************** +*/ +#ifndef FUNCS_H +#define FUNCS_H + +// ------- PROJECT.C ------------ + +void initpointers(Project *); +int allocdata(Project *); +void freedata(Project *); + +int openfiles(Project *, const char *, const char *,const char *); +int openhydfile(Project *); +int openoutfile(Project *); +void closeoutfile(Project *); + +int buildadjlists(Network *); +void freeadjlists(Network *); + +int incontrols(Project *, int, int); +int valvecheck(Project *, int, int, int, int); +int findnode(Network *, char *); +int findlink(Network *, char *); +int findtank(Network *, int); +int findvalve(Network *, int); +int findpump(Network *, int); +int findpattern(Network *, char *); +int findcurve(Network *, char *); + +Pdemand finddemand(Pdemand, int); +int adddemand(Snode *, double, int, char *); +void freedemands(Snode *); + +int addlinkvertex(Slink *, double, double); +void freelinkvertices(Slink *); + +void adjustpatterns(Network *, int); +void adjustcurves(Network *, int); +int adjustpumpparams(Project *, int); +int resizecurve(Scurve *, int); + +int getcomment(Network *, int, int, char *); +int setcomment(Network *, int, int, const char *); + +int namevalid(const char *); +void getTmpName(char *); +char *xstrcpy(char **, const char *, const size_t n); +int strcomp(const char *, const char *); +double interp(int, double [], double [], double); +char *geterrmsg(int, char *); +void errmsg(Project *, int); +void writewin(void (*vp)(char *), char *); + +// ------- INPUT1.C ---------------- + +int getdata(Project *); +void setdefaults(Project *); +void initreport(Report *); +void adjustdata(Project *); +int inittanks(Project *); +void initunits(Project *); +void convertunits(Project *); + +//-------- INPUT2.C ----------------- + +int netsize(Project *); +int readdata(Project *); +int updatepumpparams(Project *, int); +int findmatch(char *, char *[]); +int match(const char *, const char *); +int gettokens(char *, char **, int, char *); +int getfloat(char *, double *); +double hour(char *, char *); +int setreport(Project *, char *); + +// ------- INPUT3.C ----------------- + +int juncdata(Project *); +int tankdata(Project *); +int pipedata(Project *); +int pumpdata(Project *); +int valvedata(Project *); +int patterndata(Project *); +int curvedata(Project *); +int coordata(Project *); +int demanddata(Project *); +int controldata(Project *); +int energydata(Project *); +int sourcedata(Project *); +int emitterdata(Project *); +int qualdata(Project *); +int reactdata(Project *); +int mixingdata(Project *); +int statusdata(Project *); +int reportdata(Project *); +int timedata(Project *); +int optiondata(Project *); +int vertexdata(Project *); + +// ------- RULES.C ------------------ + +void initrules(Project *); +void addrule(Parser *, char *); +void deleterule(Project *, int); +int allocrules(Project *); +void freerules(Project *); +int ruledata(Project *); +void ruleerrmsg(Project *); +void adjustrules(Project *, int, int); +void adjusttankrules(Project *); +Spremise *getpremise(Spremise *, int); +Saction *getaction(Saction *, int); +int writerule(Project *, FILE *, int); +int checkrules(Project *, long); + +// ------- REPORT.C ----------------- + +int clearreport(Project *); +int copyreport(Project *, char *); +int writereport(Project *); +void writelogo(Project *); +void writesummary(Project *); +void writehydstat(Project *, int, double); +void writeheader(Project *, int,int); +void writeline(Project *, char *); +void writerelerr(Project *, int, double); +void writestatchange(Project *, int,char,char); +void writecontrolaction(Project *, int, int); +void writeruleaction(Project *, int, char *); +int writehydwarn(Project *, int,double); +void writehyderr(Project *, int); +void writemassbalance(Project *); +void writetime(Project *, char *); +char *clocktime(char *, long); + +// ------- HYDRAUL.C ----------------- + +int openhyd(Project *); +void inithyd(Project *, int initFlags); +int runhyd(Project *, long *); +int nexthyd(Project *, long *); +void closehyd(Project *); +void setlinkstatus(Project *, int, char, StatusType *, double *); +void setlinksetting(Project *, int, double, StatusType *, double *); +int tanktimestep(Project *, long *); +void getenergy(Project *, int, double *, double *); +double tankvolume(Project *, int, double); +double tankgrade(Project *, int, double); + +// ------- HYDCOEFFS.C ----------------- + +void resistcoeff(Project *, int); +void headlosscoeffs(Project *); +void matrixcoeffs(Project *); +void emitterheadloss(Project *, int, double *, double *); +void demandheadloss(Project *, int, double, double, double *, double *); + +// ------- QUALITY.C -------------------- + +int openqual(Project *); +int initqual(Project *); +int runqual(Project *, long *); +int nextqual(Project *, long *); +int stepqual(Project *, long *); +int closequal(Project *); +double avgqual(Project *, int); + +// ------- OUTPUT.C --------------------- + +int savenetdata(Project *); +int savehyd(Project *, long *); +int savehydstep(Project *, long *); +int saveenergy(Project *); +int readhyd(Project *, long *); +int readhydstep(Project *, long *); +int saveoutput(Project *); +int savefinaloutput(Project *); + +// ------- INPFILE.C -------------------- + +int saveinpfile(Project *, const char *); + +#endif diff --git a/src/genmmd.c b/src/genmmd.c new file mode 100644 index 0000000..932598c --- /dev/null +++ b/src/genmmd.c @@ -0,0 +1,1000 @@ +/* MULTIPLE MINIMUM DEGREE ROW RE-ORDERING ALGORITHM + * + * Modified to work with Fortran-style arrays and be thread-safe. + * + */ + +#include + +int genmmd(int* neqns, int* xadj, int* adjncy, int* invp, int* perm, + int* delta, int* dhead, int* qsize, int* llist, int* marker, + int* maxint, int* nofsub); + +static int mmdint_(int* neqns, int* xadj, int* adjncy, int* dhead, int* dforw, + int* dbakw, int* qsize, int* llist, int* marker); +static int mmdelm_(int* mdnode, int* xadj, int* adjncy, int* dhead, int* dforw, + int* dbakw, int* qsize, int* llist, int* marker, + int* maxint, int* tag); +static int mmdupd_(int* ehead, int* neqns, int* xadj, int* adjncy, int* delta, + int* mdeg, int* dhead, int* dforw, int* dbakw, int* qsize, + int* llist, int* marker, int* maxint, int* tag); +static int mmdnum_(int* neqns, int* perm, int* invp, int* qsize); + +//============================================================================= + +/* genmmd.f -- translated by f2c (version of 23 April 1993 18:34:30). + You must link the resulting object file with the libraries: + -lf2c -lm (in that order) +*/ + +//#include "f2c.h" + +/* Sivan: I modified INTEGER*2 -> INTEGER*4 */ +/* *************************************************************** */ +/* *************************************************************** */ +/* **** GENMMD ..... MULTIPLE MINIMUM EXTERNAL DEGREE **** */ +/* *************************************************************** */ +/* *************************************************************** */ + +/* AUTHOR - JOSEPH W.H. LIU */ +/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */ + +/* PURPOSE - THIS ROUTINE IMPLEMENTS THE MINIMUM DEGREE */ +/* ALGORITHM. IT MAKES USE OF THE IMPLICIT REPRESENTATION */ +/* OF ELIMINATION GRAPHS BY QUOTIENT GRAPHS, AND THE */ +/* NOTION OF INDISTINGUISHABLE NODES. IT ALSO IMPLEMENTS */ +/* THE MODIFICATIONS BY MULTIPLE ELIMINATION AND MINIMUM */ +/* EXTERNAL DEGREE. */ +/* --------------------------------------------- */ +/* CAUTION - THE ADJACENCY VECTOR ADJNCY WILL BE */ +/* DESTROYED. */ +/* --------------------------------------------- */ + +/* INPUT PARAMETERS - */ +/* NEQNS - NUMBER OF EQUATIONS. */ +/* (XADJ,ADJNCY) - THE ADJACENCY STRUCTURE. */ +/* DELTA - TOLERANCE VALUE FOR MULTIPLE ELIMINATION. */ +/* MAXINT - MAXIMUM MACHINE REPRESENTABLE (SHORT) INTEGER */ +/* (ANY SMALLER ESTIMATE WILL DO) FOR MARKING */ +/* NODES. */ + +/* OUTPUT PARAMETERS - */ +/* PERM - THE MINIMUM DEGREE ORDERING. */ +/* INVP - THE INVERSE OF PERM. */ +/* NOFSUB - AN UPPER BOUND ON THE NUMBER OF NONZERO */ +/* SUBSCRIPTS FOR THE COMPRESSED STORAGE SCHEME. */ + +/* WORKING PARAMETERS - */ +/* DHEAD - VECTOR FOR HEAD OF DEGREE LISTS. */ +/* INVP - USED TEMPORARILY FOR DEGREE FORWARD LINK. */ +/* PERM - USED TEMPORARILY FOR DEGREE BACKWARD LINK. */ +/* QSIZE - VECTOR FOR SIZE OF SUPERNODES. */ +/* LLIST - VECTOR FOR TEMPORARY LINKED LISTS. */ +/* MARKER - A TEMPORARY MARKER VECTOR. */ + +/* PROGRAM SUBROUTINES - */ +/* MMDELM, MMDINT, MMDNUM, MMDUPD. */ + +/* *************************************************************** */ +int genmmd(int* neqns, int* xadj, int* adjncy, int* invp, int* perm, + int* delta, int* dhead, int* qsize, int* llist, int* marker, + int* maxint, int* nofsub) +{ + /* System generated locals */ + int i__1; + + /* Local variables */ + int mdeg = 0, ehead = 0, i = 0, mdlmt = 0, mdnode = 0; + //extern /* Subroutine */ int mmdelm_(), mmdupd_(), mmdint_(), mmdnum_(); + int nextmd = 0, tag = 0, num = 0; + + +/* *************************************************************** */ + +/* INTEGER*2 ADJNCY(1), DHEAD(1) , INVP(1) , LLIST(1) , */ +/* 1 MARKER(1), PERM(1) , QSIZE(1) */ + +/* *************************************************************** */ + + /* Parameter adjustments */ + //--marker; --llist; --qsize; --dhead; --perm; --invp; --adjncy; --xadj; + + /* Function Body */ + if (*neqns <= 0) { + return 0; + } + +/* ------------------------------------------------ */ +/* INITIALIZATION FOR THE MINIMUM DEGREE ALGORITHM. */ +/* ------------------------------------------------ */ + *nofsub = 0; + //mmdint_(neqns, &xadj[1], &adjncy[1], &dhead[1], &invp[1], &perm[1], + // &qsize[1], &llist[1], &marker[1]); + mmdint_(neqns, xadj, adjncy, dhead, invp, perm, qsize, llist, marker); + +/* ---------------------------------------------- */ +/* NUM COUNTS THE NUMBER OF ORDERED NODES PLUS 1. */ +/* ---------------------------------------------- */ + num = 1; + +/* ----------------------------- */ +/* ELIMINATE ALL ISOLATED NODES. */ +/* ----------------------------- */ + nextmd = dhead[1]; +L100: + if (nextmd <= 0) { + goto L200; + } + mdnode = nextmd; + nextmd = invp[mdnode]; + marker[mdnode] = *maxint; + invp[mdnode] = -num; + ++num; + goto L100; + +L200: +/* ---------------------------------------- */ +/* SEARCH FOR NODE OF THE MINIMUM DEGREE. */ +/* MDEG IS THE CURRENT MINIMUM DEGREE; */ +/* TAG IS USED TO FACILITATE MARKING NODES. */ +/* ---------------------------------------- */ + if (num > *neqns) { + goto L1000; + } + tag = 1; + dhead[1] = 0; + mdeg = 2; +L300: + if (dhead[mdeg] > 0) { + goto L400; + } + ++mdeg; + goto L300; +L400: +/* ------------------------------------------------- */ +/* USE VALUE OF DELTA TO SET UP MDLMT, WHICH GOVERNS */ +/* WHEN A DEGREE UPDATE IS TO BE PERFORMED. */ +/* ------------------------------------------------- */ + mdlmt = mdeg + *delta; + ehead = 0; + +L500: + mdnode = dhead[mdeg]; + if (mdnode > 0) { + goto L600; + } + ++mdeg; + if (mdeg > mdlmt) { + goto L900; + } + goto L500; +L600: +/* ---------------------------------------- */ +/* REMOVE MDNODE FROM THE DEGREE STRUCTURE. */ +/* ---------------------------------------- */ + nextmd = invp[mdnode]; + dhead[mdeg] = nextmd; + if (nextmd > 0) { + perm[nextmd] = -mdeg; + } + invp[mdnode] = -num; + *nofsub = *nofsub + mdeg + qsize[mdnode] - 2; + if (num + qsize[mdnode] > *neqns) { + goto L1000; + } +/* ---------------------------------------------- */ +/* ELIMINATE MDNODE AND PERFORM QUOTIENT GRAPH */ +/* TRANSFORMATION. RESET TAG VALUE IF NECESSARY. */ +/* ---------------------------------------------- */ + ++tag; + if (tag < *maxint) { + goto L800; + } + tag = 1; + i__1 = *neqns; + for (i = 1; i <= i__1; ++i) { + if (marker[i] < *maxint) { + marker[i] = 0; + } +/* L700: */ + } +L800: + //mmdelm_(&mdnode, &xadj[1], &adjncy[1], &dhead[1], &invp[1], &perm[1], + // &qsize[1], &llist[1], &marker[1], maxint, &tag); + mmdelm_(&mdnode, xadj, adjncy, dhead, invp, perm, qsize, llist, + marker, maxint, &tag); + num += qsize[mdnode]; + llist[mdnode] = ehead; + ehead = mdnode; + if (*delta >= 0) { + goto L500; + } +L900: +/* ------------------------------------------- */ +/* UPDATE DEGREES OF THE NODES INVOLVED IN THE */ +/* MINIMUM DEGREE NODES ELIMINATION. */ +/* ------------------------------------------- */ + if (num > *neqns) { + goto L1000; + } + //mmdupd_(&ehead, neqns, &xadj[1], &adjncy[1], delta, &mdeg, &dhead[1], + // &invp[1], &perm[1], &qsize[1], &llist[1], &marker[1], maxint, &tag); + mmdupd_(&ehead, neqns, xadj, adjncy, delta, &mdeg, dhead, + invp, perm, qsize, llist, marker, maxint, &tag); + goto L300; + +L1000: + //mmdnum_(neqns, &perm[1], &invp[1], &qsize[1]); + mmdnum_(neqns, perm, invp, qsize); + + //++marker; ++llist; ++qsize; ++dhead; ++perm; ++invp; ++adjncy; ++xadj; + return 0; + +} /* genmmd_ */ + +/* *************************************************************** */ +/* *************************************************************** */ +/* *** MMDINT ..... MULT MINIMUM DEGREE INITIALIZATION *** */ +/* *************************************************************** */ +/* *************************************************************** */ + +/* AUTHOR - JOSEPH W.H. LIU */ +/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */ + +/* PURPOSE - THIS ROUTINE PERFORMS INITIALIZATION FOR THE */ +/* MULTIPLE ELIMINATION VERSION OF THE MINIMUM DEGREE */ +/* ALGORITHM. */ + +/* INPUT PARAMETERS - */ +/* NEQNS - NUMBER OF EQUATIONS. */ +/* (XADJ,ADJNCY) - ADJACENCY STRUCTURE. */ + +/* OUTPUT PARAMETERS - */ +/* (DHEAD,DFORW,DBAKW) - DEGREE DOUBLY LINKED STRUCTURE. */ +/* QSIZE - SIZE OF SUPERNODE (INITIALIZED TO ONE). */ +/* LLIST - LINKED LIST. */ +/* MARKER - MARKER VECTOR. */ + +/* *************************************************************** */ + + +static int mmdint_(int* neqns, int* xadj, int* adjncy, int* dhead, int* dforw, + int* dbakw, int* qsize, int* llist, int* marker) +{ + /* System generated locals */ + int i__1; + + /* Local variables */ + int ndeg = 0, node = 0, fnode = 0; + + +/* *************************************************************** */ + +/* INTEGER*2 ADJNCY(1), DBAKW(1) , DFORW(1) , DHEAD(1) , */ +/* 1 LLIST(1) , MARKER(1), QSIZE(1) */ + +/* *************************************************************** */ + + /* Parameter adjustments */ + //--marker; --llist; --qsize; --dbakw; --dforw; --dhead; --adjncy; --xadj; + + /* Function Body */ + i__1 = *neqns; + for (node = 1; node <= i__1; ++node) { + dhead[node] = 0; + qsize[node] = 1; + marker[node] = 0; + llist[node] = 0; +/* L100: */ + } +/* ------------------------------------------ */ +/* INITIALIZE THE DEGREE DOUBLY LINKED LISTS. */ +/* ------------------------------------------ */ + i__1 = *neqns; + for (node = 1; node <= i__1; ++node) { + ndeg = xadj[node + 1] - xadj[node] + 1; + fnode = dhead[ndeg]; + dforw[node] = fnode; + dhead[ndeg] = node; + if (fnode > 0) { + dbakw[fnode] = node; + } + dbakw[node] = -ndeg; +/* L200: */ + } + return 0; + +} /* mmdint_ */ + +/* *************************************************************** */ +/* *************************************************************** */ +/* ** MMDELM ..... MULTIPLE MINIMUM DEGREE ELIMINATION *** */ +/* *************************************************************** */ +/* *************************************************************** */ + +/* AUTHOR - JOSEPH W.H. LIU */ +/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */ + +/* PURPOSE - THIS ROUTINE ELIMINATES THE NODE MDNODE OF */ +/* MINIMUM DEGREE FROM THE ADJACENCY STRUCTURE, WHICH */ +/* IS STORED IN THE QUOTIENT GRAPH FORMAT. IT ALSO */ +/* TRANSFORMS THE QUOTIENT GRAPH REPRESENTATION OF THE */ +/* ELIMINATION GRAPH. */ + +/* INPUT PARAMETERS - */ +/* MDNODE - NODE OF MINIMUM DEGREE. */ +/* MAXINT - ESTIMATE OF MAXIMUM REPRESENTABLE (SHORT) */ +/* INTEGER. */ +/* TAG - TAG VALUE. */ + +/* UPDATED PARAMETERS - */ +/* (XADJ,ADJNCY) - UPDATED ADJACENCY STRUCTURE. */ +/* (DHEAD,DFORW,DBAKW) - DEGREE DOUBLY LINKED STRUCTURE. */ +/* QSIZE - SIZE OF SUPERNODE. */ +/* MARKER - MARKER VECTOR. */ +/* LLIST - TEMPORARY LINKED LIST OF ELIMINATED NABORS. */ + +/* *************************************************************** */ + +static int mmdelm_(int* mdnode, int* xadj, int* adjncy, int* dhead, int* dforw, + int* dbakw, int* qsize, int* llist, int* marker, + int* maxint, int* tag) +{ + /* System generated locals */ + int i__1, i__2; + + /* Local variables */ + int node = 0, link = 0, rloc = 0, rlmt = 0, i = 0, j = 0, nabor = 0, rnode = 0, elmnt = 0, xqnbr = 0, + istop = 0, jstop = 0, istrt = 0, jstrt = 0, nxnode = 0, pvnode = 0, nqnbrs = 0, npv = 0; + + +/* *************************************************************** */ + +/* INTEGER*2 ADJNCY(1), DBAKW(1) , DFORW(1) , DHEAD(1) , */ +/* 1 LLIST(1) , MARKER(1), QSIZE(1) */ + +/* *************************************************************** */ + +/* ----------------------------------------------- */ +/* FIND REACHABLE SET AND PLACE IN DATA STRUCTURE. */ +/* ----------------------------------------------- */ + /* Parameter adjustments */ + //--marker; --llist; --qsize; --dbakw; --dforw; --dhead; + //--adjncy; --xadj; + + /* Function Body */ + marker[*mdnode] = *tag; + istrt = xadj[*mdnode]; + istop = xadj[*mdnode + 1] - 1; +/* ------------------------------------------------------- */ +/* ELMNT POINTS TO THE BEGINNING OF THE LIST OF ELIMINATED */ +/* NABORS OF MDNODE, AND RLOC GIVES THE STORAGE LOCATION */ +/* FOR THE NEXT REACHABLE NODE. */ +/* ------------------------------------------------------- */ + elmnt = 0; + rloc = istrt; + rlmt = istop; + i__1 = istop; + for (i = istrt; i <= i__1; ++i) { + nabor = adjncy[i]; + if (nabor == 0) { + goto L300; + } + if (marker[nabor] >= *tag) { + goto L200; + } + marker[nabor] = *tag; + if (dforw[nabor] < 0) { + goto L100; + } + adjncy[rloc] = nabor; + ++rloc; + goto L200; +L100: + llist[nabor] = elmnt; + elmnt = nabor; +L200: + ; + } +L300: +/* ----------------------------------------------------- */ +/* MERGE WITH REACHABLE NODES FROM GENERALIZED ELEMENTS. */ +/* ----------------------------------------------------- */ + if (elmnt <= 0) { + goto L1000; + } + adjncy[rlmt] = -elmnt; + link = elmnt; +L400: + jstrt = xadj[link]; + jstop = xadj[link + 1] - 1; + i__1 = jstop; + for (j = jstrt; j <= i__1; ++j) { + node = adjncy[j]; + link = -node; + if (node < 0) { + goto L400; + } else if (node == 0) { + goto L900; + } else { + goto L500; + } +L500: + if (marker[node] >= *tag || dforw[node] < 0) { + goto L800; + } + marker[node] = *tag; +/* --------------------------------- */ +/* USE STORAGE FROM ELIMINATED NODES */ +/* IF NECESSARY. */ +/* --------------------------------- */ +L600: + if (rloc < rlmt) { + goto L700; + } + link = -adjncy[rlmt]; + rloc = xadj[link]; + rlmt = xadj[link + 1] - 1; + goto L600; +L700: + adjncy[rloc] = node; + ++rloc; +L800: + ; + } +L900: + elmnt = llist[elmnt]; + goto L300; +L1000: + if (rloc <= rlmt) { + adjncy[rloc] = 0; + } +/* -------------------------------------------------------- */ +/* FOR EACH NODE IN THE REACHABLE SET, DO THE FOLLOWING ... */ +/* -------------------------------------------------------- */ + link = *mdnode; +L1100: + istrt = xadj[link]; + istop = xadj[link + 1] - 1; + i__1 = istop; + for (i = istrt; i <= i__1; ++i) { + rnode = adjncy[i]; + link = -rnode; + if (rnode < 0) { + goto L1100; + } else if (rnode == 0) { + goto L1800; + } else { + goto L1200; + } +L1200: +/* -------------------------------------------- */ +/* IF RNODE IS IN THE DEGREE LIST STRUCTURE ... */ +/* -------------------------------------------- */ + pvnode = dbakw[rnode]; + if (pvnode == 0 || pvnode == -(*maxint)) { + goto L1300; + } +/* ------------------------------------- */ +/* THEN REMOVE RNODE FROM THE STRUCTURE. */ +/* ------------------------------------- */ + nxnode = dforw[rnode]; + if (nxnode > 0) { + dbakw[nxnode] = pvnode; + } + if (pvnode > 0) { + dforw[pvnode] = nxnode; + } + npv = -pvnode; + if (pvnode < 0) { + dhead[npv] = nxnode; + } +L1300: +/* ---------------------------------------- */ +/* PURGE INACTIVE QUOTIENT NABORS OF RNODE. */ +/* ---------------------------------------- */ + jstrt = xadj[rnode]; + jstop = xadj[rnode + 1] - 1; + xqnbr = jstrt; + i__2 = jstop; + for (j = jstrt; j <= i__2; ++j) { + nabor = adjncy[j]; + if (nabor == 0) { + goto L1500; + } + if (marker[nabor] >= *tag) { + goto L1400; + } + adjncy[xqnbr] = nabor; + ++xqnbr; +L1400: + ; + } +L1500: +/* ---------------------------------------- */ +/* IF NO ACTIVE NABOR AFTER THE PURGING ... */ +/* ---------------------------------------- */ + nqnbrs = xqnbr - jstrt; + if (nqnbrs > 0) { + goto L1600; + } +/* ----------------------------- */ +/* THEN MERGE RNODE WITH MDNODE. */ +/* ----------------------------- */ + qsize[*mdnode] += qsize[rnode]; + qsize[rnode] = 0; + marker[rnode] = *maxint; + dforw[rnode] = -(*mdnode); + dbakw[rnode] = -(*maxint); + goto L1700; +L1600: +/* -------------------------------------- */ +/* ELSE FLAG RNODE FOR DEGREE UPDATE, AND */ +/* ADD MDNODE AS A NABOR OF RNODE. */ +/* -------------------------------------- */ + dforw[rnode] = nqnbrs + 1; + dbakw[rnode] = 0; + adjncy[xqnbr] = *mdnode; + ++xqnbr; + if (xqnbr <= jstop) { + adjncy[xqnbr] = 0; + } + +L1700: + ; + } +L1800: + return 0; + +} /* mmdelm_ */ + +/* *************************************************************** */ +/* *************************************************************** */ +/* ***** MMDUPD ..... MULTIPLE MINIMUM DEGREE UPDATE ***** */ +/* *************************************************************** */ +/* *************************************************************** */ + +/* AUTHOR - JOSEPH W.H. LIU */ +/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */ + +/* PURPOSE - THIS ROUTINE UPDATES THE DEGREES OF NODES */ +/* AFTER A MULTIPLE ELIMINATION STEP. */ + +/* INPUT PARAMETERS - */ +/* EHEAD - THE BEGINNING OF THE LIST OF ELIMINATED */ +/* NODES (I.E., NEWLY FORMED ELEMENTS). */ +/* NEQNS - NUMBER OF EQUATIONS. */ +/* (XADJ,ADJNCY) - ADJACENCY STRUCTURE. */ +/* DELTA - TOLERANCE VALUE FOR MULTIPLE ELIMINATION. */ +/* MAXINT - MAXIMUM MACHINE REPRESENTABLE (SHORT) */ +/* INTEGER. */ + +/* UPDATED PARAMETERS - */ +/* MDEG - NEW MINIMUM DEGREE AFTER DEGREE UPDATE. */ +/* (DHEAD,DFORW,DBAKW) - DEGREE DOUBLY LINKED STRUCTURE. */ +/* QSIZE - SIZE OF SUPERNODE. */ +/* LLIST - WORKING LINKED LIST. */ +/* MARKER - MARKER VECTOR FOR DEGREE UPDATE. */ +/* TAG - TAG VALUE. */ + +/* *************************************************************** */ + +static int mmdupd_(int* ehead, int* neqns, int* xadj, int* adjncy, int* delta, + int* mdeg, int* dhead, int* dforw, int* dbakw, int* qsize, + int* llist, int* marker, int* maxint, int* tag) +{ + /* System generated locals */ + int i__1, i__2; + + /* Local variables */ + int node = 0, mtag = 0, link = 0, mdeg0 = 0, i = 0, j = 0, enode = 0, fnode = 0, nabor = 0, elmnt = 0, + istop = 0, jstop = 0, q2head = 0, istrt = 0, jstrt = 0, qxhead = 0, iq2 = 0, deg = 0, deg0 = 0; + + +/* *************************************************************** */ + +/* INTEGER*2 ADJNCY(1), DBAKW(1) , DFORW(1) , DHEAD(1) , */ +/* 1 LLIST(1) , MARKER(1), QSIZE(1) */ + +/* *************************************************************** */ + + /* Parameter adjustments */ + //--marker; --llist; --qsize; --dbakw; --dforw; --dhead; + //--adjncy; --xadj; + + /* Function Body */ + mdeg0 = *mdeg + *delta; + elmnt = *ehead; +L100: +/* ------------------------------------------------------- */ +/* FOR EACH OF THE NEWLY FORMED ELEMENT, DO THE FOLLOWING. */ +/* (RESET TAG VALUE IF NECESSARY.) */ +/* ------------------------------------------------------- */ + if (elmnt <= 0) { + return 0; + } + mtag = *tag + mdeg0; + if (mtag < *maxint) { + goto L300; + } + *tag = 1; + i__1 = *neqns; + for (i = 1; i <= i__1; ++i) { + if (marker[i] < *maxint) { + marker[i] = 0; + } +/* L200: */ + } + mtag = *tag + mdeg0; +L300: +/* --------------------------------------------- */ +/* CREATE TWO LINKED LISTS FROM NODES ASSOCIATED */ +/* WITH ELMNT: ONE WITH TWO NABORS (Q2HEAD) IN */ +/* ADJACENCY STRUCTURE, AND THE OTHER WITH MORE */ +/* THAN TWO NABORS (QXHEAD). ALSO COMPUTE DEG0, */ +/* NUMBER OF NODES IN THIS ELEMENT. */ +/* --------------------------------------------- */ + q2head = 0; + qxhead = 0; + deg0 = 0; + link = elmnt; +L400: + istrt = xadj[link]; + istop = xadj[link + 1] - 1; + i__1 = istop; + for (i = istrt; i <= i__1; ++i) { + enode = adjncy[i]; + link = -enode; + if (enode < 0) { + goto L400; + } else if (enode == 0) { + goto L800; + } else { + goto L500; + } + +L500: + if (qsize[enode] == 0) { + goto L700; + } + deg0 += qsize[enode]; + marker[enode] = mtag; +/* ---------------------------------- */ +/* IF ENODE REQUIRES A DEGREE UPDATE, */ +/* THEN DO THE FOLLOWING. */ +/* ---------------------------------- */ + if (dbakw[enode] != 0) { + goto L700; + } +/* ---------------------------------------*/ +/* PLACE EITHER IN QXHEAD OR Q2HEAD LISTS.*/ +/* ---------------------------------------*/ + if (dforw[enode] == 2) { + goto L600; + } + llist[enode] = qxhead; + qxhead = enode; + goto L700; +L600: + llist[enode] = q2head; + q2head = enode; +L700: + ; + } +L800: +/* -------------------------------------------- */ +/* FOR EACH ENODE IN Q2 LIST, DO THE FOLLOWING. */ +/* -------------------------------------------- */ + enode = q2head; + iq2 = 1; +L900: + if (enode <= 0) { + goto L1500; + } + if (dbakw[enode] != 0) { + goto L2200; + } + ++(*tag); + deg = deg0; +/* ------------------------------------------ */ +/* IDENTIFY THE OTHER ADJACENT ELEMENT NABOR. */ +/* ------------------------------------------ */ + istrt = xadj[enode]; + nabor = adjncy[istrt]; + if (nabor == elmnt) { + nabor = adjncy[istrt + 1]; + } +/* ------------------------------------------------ */ +/* IF NABOR IS UNELIMINATED, INCREASE DEGREE COUNT. */ +/* ------------------------------------------------ */ + link = nabor; + if (dforw[nabor] < 0) { + goto L1000; + } + deg += qsize[nabor]; + goto L2100; +L1000: +/* -------------------------------------------- */ +/* OTHERWISE, FOR EACH NODE IN THE 2ND ELEMENT, */ +/* DO THE FOLLOWING. */ +/* -------------------------------------------- */ + istrt = xadj[link]; + istop = xadj[link + 1] - 1; + i__1 = istop; + for (i = istrt; i <= i__1; ++i) { + node = adjncy[i]; + link = -node; + if (node == enode) { + goto L1400; + } + if (node < 0) { + goto L1000; + } else if (node == 0) { + goto L2100; + } else { + goto L1100; + } + +L1100: + if (qsize[node] == 0) { + goto L1400; + } + if (marker[node] >= *tag) { + goto L1200; + } +/* ------------------------------------- */ +/* CASE WHEN NODE IS NOT YET CONSIDERED. */ +/* ------------------------------------- */ + marker[node] = *tag; + deg += qsize[node]; + goto L1400; +L1200: +/* ---------------------------------------- */ +/* CASE WHEN NODE IS INDISTINGUISHABLE FROM */ +/* ENODE. MERGE THEM INTO A NEW SUPERNODE. */ +/* ---------------------------------------- */ + if (dbakw[node] != 0) { + goto L1400; + } + if (dforw[node] != 2) { + goto L1300; + } + qsize[enode] += qsize[node]; + qsize[node] = 0; + marker[node] = *maxint; + dforw[node] = -enode; + dbakw[node] = -(*maxint); + goto L1400; +L1300: +/* -------------------------------------- */ +/* CASE WHEN NODE IS OUTMATCHED BY ENODE. */ +/* -------------------------------------- */ + if (dbakw[node] == 0) { + dbakw[node] = -(*maxint); + } +L1400: + ; + } + goto L2100; +L1500: +/* ------------------------------------------------ */ +/* FOR EACH ENODE IN THE QX LIST, DO THE FOLLOWING. */ +/* ------------------------------------------------ */ + enode = qxhead; + iq2 = 0; +L1600: + if (enode <= 0) { + goto L2300; + } + if (dbakw[enode] != 0) { + goto L2200; + } + ++(*tag); + deg = deg0; +/* --------------------------------- */ +/* FOR EACH UNMARKED NABOR OF ENODE, */ +/* DO THE FOLLOWING. */ +/* --------------------------------- */ + istrt = xadj[enode]; + istop = xadj[enode + 1] - 1; + i__1 = istop; + for (i = istrt; i <= i__1; ++i) { + nabor = adjncy[i]; + if (nabor == 0) { + goto L2100; + } + if (marker[nabor] >= *tag) { + goto L2000; + } + marker[nabor] = *tag; + link = nabor; +/* ------------------------------ */ +/* IF UNELIMINATED, INCLUDE IT IN */ +/* DEG COUNT. */ +/* ------------------------------ */ + if (dforw[nabor] < 0) { + goto L1700; + } + deg += qsize[nabor]; + goto L2000; +L1700: +/* ------------------------------- */ +/* IF ELIMINATED, INCLUDE UNMARKED */ +/* NODES IN THIS ELEMENT INTO THE */ +/* DEGREE COUNT. */ +/* ------------------------------- */ + jstrt = xadj[link]; + jstop = xadj[link + 1] - 1; + i__2 = jstop; + for (j = jstrt; j <= i__2; ++j) { + node = adjncy[j]; + link = -node; + if (node < 0) { + goto L1700; + } else if (node == 0) { + goto L2000; + } else { + goto L1800; + } + +L1800: + if (marker[node] >= *tag) { + goto L1900; + } + marker[node] = *tag; + deg += qsize[node]; +L1900: + ; + } +L2000: + ; + } +L2100: +/* ------------------------------------------- */ +/* UPDATE EXTERNAL DEGREE OF ENODE IN DEGREE */ +/* STRUCTURE, AND MDEG (MIN DEG) IF NECESSARY. */ +/* ------------------------------------------- */ + deg = deg - qsize[enode] + 1; + fnode = dhead[deg]; + dforw[enode] = fnode; + dbakw[enode] = -deg; + if (fnode > 0) { + dbakw[fnode] = enode; + } + dhead[deg] = enode; + if (deg < *mdeg) { + *mdeg = deg; + } +L2200: +/* ---------------------------------- */ +/* GET NEXT ENODE IN CURRENT ELEMENT. */ +/* ---------------------------------- */ + enode = llist[enode]; + if (iq2 == 1) { + goto L900; + } + goto L1600; +L2300: +/* ----------------------------- */ +/* GET NEXT ELEMENT IN THE LIST. */ +/* ----------------------------- */ + *tag = mtag; + elmnt = llist[elmnt]; + goto L100; + +} /* mmdupd_ */ + +/* *************************************************************** */ +/* *************************************************************** */ +/* ***** MMDNUM ..... MULTI MINIMUM DEGREE NUMBERING ***** */ +/* *************************************************************** */ +/* *************************************************************** */ + +/* AUTHOR - JOSEPH W.H. LIU */ +/* DEPT OF COMPUTER SCIENCE, YORK UNIVERSITY. */ + +/* PURPOSE - THIS ROUTINE PERFORMS THE FINAL STEP IN */ +/* PRODUCING THE PERMUTATION AND INVERSE PERMUTATION */ +/* VECTORS IN THE MULTIPLE ELIMINATION VERSION OF THE */ +/* MINIMUM DEGREE ORDERING ALGORITHM. */ + +/* INPUT PARAMETERS - */ +/* NEQNS - NUMBER OF EQUATIONS. */ +/* QSIZE - SIZE OF SUPERNODES AT ELIMINATION. */ + +/* UPDATED PARAMETERS - */ +/* INVP - INVERSE PERMUTATION VECTOR. ON INPUT, */ +/* IF QSIZE(NODE)=0, THEN NODE HAS BEEN MERGED */ +/* INTO THE NODE -INVP(NODE); OTHERWISE, */ +/* -INVP(NODE) IS ITS INVERSE LABELLING. */ + +/* OUTPUT PARAMETERS - */ +/* PERM - THE PERMUTATION VECTOR. */ + +/* *************************************************************** */ + +static int mmdnum_(int* neqns, int* perm, int* invp, int* qsize) +{ + /* System generated locals */ + int i__1; + + /* Local variables */ + int node = 0, root = 0, nextf = 0, father = 0, nqsize = 0, num = 0; + + +/* *************************************************************** */ + +/* INTEGER*2 INVP(1) , PERM(1) , QSIZE(1) */ + +/* *************************************************************** */ + + /* Parameter adjustments */ + //--qsize; --invp; --perm; + + /* Function Body */ + i__1 = *neqns; + for (node = 1; node <= i__1; ++node) { + nqsize = qsize[node]; + if (nqsize <= 0) { + perm[node] = invp[node]; + } + if (nqsize > 0) { + perm[node] = -invp[node]; + } +/* L100: */ + } +/* ------------------------------------------------------ */ +/* FOR EACH NODE WHICH HAS BEEN MERGED, DO THE FOLLOWING. */ +/* ------------------------------------------------------ */ + i__1 = *neqns; + for (node = 1; node <= i__1; ++node) { + if (perm[node] > 0) { + goto L500; + } +/* ----------------------------------------- */ +/* TRACE THE MERGED TREE UNTIL ONE WHICH HAS */ +/* NOT BEEN MERGED, CALL IT ROOT. */ +/* ----------------------------------------- */ + father = node; +L200: + if (perm[father] > 0) { + goto L300; + } + father = -perm[father]; + goto L200; +L300: +/* ----------------------- */ +/* NUMBER NODE AFTER ROOT. */ +/* ----------------------- */ + root = father; + num = perm[root] + 1; + invp[node] = -num; + perm[root] = num; +/* ------------------------ */ +/* SHORTEN THE MERGED TREE. */ +/* ------------------------ */ + father = node; +L400: + nextf = -perm[father]; + if (nextf <= 0) { + goto L500; + } + perm[father] = -root; + father = nextf; + goto L400; +L500: + ; + } +/* ---------------------- */ +/* READY TO COMPUTE PERM. */ +/* ---------------------- */ + i__1 = *neqns; + for (node = 1; node <= i__1; ++node) { + num = -invp[node]; + invp[node] = num; + perm[num] = node; +/* L600: */ + } + return 0; + +} /* mmdnum_ */ diff --git a/src/hash.c b/src/hash.c index 425031f..4e0099b 100755 --- a/src/hash.c +++ b/src/hash.c @@ -1,127 +1,177 @@ -/*----------------------------------------------------------------------------- - ** hash.c - ** - ** Implementation of a simple Hash Table for string storage & retrieval - ** - ** Written by L. Rossman - ** Last Updated on 6/19/03 - ** - ** The hash table data structure (HTable) is defined in "hash.h". - ** Interface Functions: - ** HTcreate() - creates a hash table - ** HTinsert() - inserts a string & its index value into a hash table - ** HTfind() - retrieves the index value of a string from a table - ** HTfree() - frees a hash table - ** - ********************************************************************* - ** NOTE: This is a modified version of the original HASH.C module. - ********************************************************************* + /* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: hash.c + Description: implementation of a simple hash table + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 05/15/2019 + ****************************************************************************** */ -#ifndef __APPLE__ -#include -#else #include -#endif #include #include "hash.h" -unsigned int _enHash(char *str); -unsigned int _enHash(char *str) -{ - unsigned int hash = 5381; - unsigned int retHash; - int c; - while ((c = *str++)) { - hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ - } - retHash = hash % ENHASHTABLEMAXSIZE; - return retHash; -} +#define HASHTABLEMAXSIZE 128000 -ENHashTable *ENHashTableCreate() +// An entry in the hash table +typedef struct DataEntryStruct { - int i; - ENHashTable *ht = (ENHashTable *) calloc(ENHASHTABLEMAXSIZE, sizeof(ENHashTable)); - if (ht != NULL) { - for (i=0; i= ENHASHTABLEMAXSIZE ) { - return(0); - } - entry = (ENHashEntry *) malloc(sizeof(ENHashEntry)); - if (entry == NULL) { - return(0); - } - len = strlen(key) + 1; - entry->key = calloc(len, sizeof(char)); - strncpy(entry->key, key, len); - entry->data = data; - entry->next = ht[i]; - ht[i] = entry; - return(1); + size_t size = strlen(s) + 1; + char *p = malloc(size); + if (p) memcpy(p, s, size); + return p; } -int ENHashTableFind(ENHashTable *ht, char *key) +// Create a hash table +HashTable *hashtable_create() { - unsigned int i = _enHash(key); - ENHashEntry *entry; - if ( i >= ENHASHTABLEMAXSIZE ) { - return(NOTFOUND); - } - entry = ht[i]; - while (entry != NULL) - { - if ( strcmp(entry->key,key) == 0 ) { - return(entry->data); + int i; + HashTable *ht = (HashTable *) calloc(HASHTABLEMAXSIZE, sizeof(HashTable)); + if (ht != NULL) + { + for (i = 0; i < HASHTABLEMAXSIZE; i++) ht[i] = NULL; } - entry = entry->next; - } - return(NOTFOUND); + return ht; } -char *ENHashTableFindKey(ENHashTable *ht, char *key) +// Insert an entry into the hash table +int hashtable_insert(HashTable *ht, char *key, int data) { - unsigned int i = _enHash(key); - ENHashEntry *entry; - if ( i >= ENHASHTABLEMAXSIZE ) { - return(NULL); - } - entry = ht[i]; - while (entry != NULL) - { - if ( strcmp(entry->key,key) == 0 ) { - return(entry->key); - } - entry = entry->next; - } - return(NULL); + unsigned int i = gethash(key); + DataEntry *entry; + if ( i >= HASHTABLEMAXSIZE ) return 0; + entry = (DataEntry *) malloc(sizeof(DataEntry)); + if (entry == NULL) return(0); + entry->key = dupstr(key); + entry->data = data; + entry->next = ht[i]; + ht[i] = entry; + return 1; } -void ENHashTableFree(ENHashTable *ht) +// Change the hash table's data entry for a particular key +int hashtable_update(HashTable *ht, char *key, int new_data) { - ENHashEntry *entry, *nextentry; - int i; - for (i=0; i= HASHTABLEMAXSIZE ) return NOTFOUND; entry = ht[i]; while (entry != NULL) { - nextentry = entry->next; - free(entry->key); - free(entry); - entry = nextentry; + if ( strcmp(entry->key, key) == 0 ) + { + entry->data = new_data; + return 1; + } + entry = entry->next; } - } - free(ht); + return NOTFOUND; +} + +// Delete an entry in the hash table +int hashtable_delete(HashTable *ht, char *key) +{ + unsigned int i = gethash(key); + DataEntry *entry, *preventry; + + if ( i >= HASHTABLEMAXSIZE ) return NOTFOUND; + + preventry = NULL; + entry = ht[i]; + while (entry != NULL) + { + if (strcmp(entry->key, key) == 0) + { + if (preventry == NULL) ht[i] = entry->next; + else preventry->next = entry->next; + free(entry->key); + free(entry); + return 1; + } + preventry = entry; + entry = entry->next; + } + return NOTFOUND; +} + +// Find the data for a particular key +int hashtable_find(HashTable *ht, char *key) +{ + unsigned int i = gethash(key); + DataEntry *entry; + + if ( i >= HASHTABLEMAXSIZE ) return NOTFOUND; + entry = ht[i]; + while (entry != NULL) + { + if ( strcmp(entry->key, key) == 0 ) + { + return entry->data; + } + entry = entry->next; + } + return NOTFOUND; +} + +// Find a particular key in the hash table +char *hashtable_findkey(HashTable *ht, char *key) +{ + unsigned int i = gethash(key); + DataEntry *entry; + if ( i >= HASHTABLEMAXSIZE ) return NULL; + entry = ht[i]; + while (entry != NULL) + { + if ( strcmp(entry->key, key) == 0 ) return entry->key; + entry = entry->next; + } + return NULL; +} + +// Delete a hash table and free all of its memory +void hashtable_free(HashTable *ht) +{ + DataEntry *entry, *nextentry; + int i; + + for (i = 0; i < HASHTABLEMAXSIZE; i++) + { + entry = ht[i]; + while (entry != NULL) + { + nextentry = entry->next; + free(entry->key); + free(entry); + entry = nextentry; + } + ht[i] = NULL; + } + free(ht); } diff --git a/src/hash.h b/src/hash.h index 2952ae6..c847e00 100755 --- a/src/hash.h +++ b/src/hash.h @@ -1,28 +1,28 @@ -/* HASH.H -** -** Header file for Hash Table module HASH.C -** +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: hash.h + Description: header for a simple hash table + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 11/27/2018 + ****************************************************************************** */ - #ifndef HASH_H #define HASH_H -#define ENHASHTABLEMAXSIZE 128000 #define NOTFOUND 0 -typedef struct HTentryStruct -{ - char *key; - int data; - struct HTentryStruct *next; -} ENHashEntry; +typedef struct DataEntryStruct *HashTable; -typedef ENHashEntry *ENHashTable; +HashTable *hashtable_create(void); +int hashtable_insert(HashTable *, char *, int); +int hashtable_find(HashTable *, char *); +char *hashtable_findkey(HashTable *, char *); +void hashtable_free(HashTable *); +int hashtable_update(HashTable *ht, char *key, int new_data); +int hashtable_delete(HashTable *ht, char *key); -ENHashTable *ENHashTableCreate(void); -int ENHashTableInsert(ENHashTable *, char *, int); -int ENHashTableFind(ENHashTable *, char *); -char *ENHashTableFindKey(ENHashTable *, char *); -void ENHashTableFree(ENHashTable *); - -#endif \ No newline at end of file +#endif diff --git a/src/hydcoeffs.c b/src/hydcoeffs.c new file mode 100644 index 0000000..9f4ac3d --- /dev/null +++ b/src/hydcoeffs.c @@ -0,0 +1,1151 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: hydcoeffs.c + Description: computes coefficients for a hydraulic solution matrix + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 10/04/2019 + ****************************************************************************** +*/ + +#include +#include +#include +#include + +#include "types.h" +#include "funcs.h" + +// Constants used for computing Darcy-Weisbach friction factor +const double A1 = 3.14159265358979323850e+03; // 1000*PI +const double A2 = 1.57079632679489661930e+03; // 500*PI +const double A3 = 5.02654824574366918160e+01; // 16*PI +const double A4 = 6.28318530717958647700e+00; // 2*PI +const double A8 = 4.61841319859066668690e+00; // 5.74*(PI/4)^.9 +const double A9 = -8.68588963806503655300e-01; // -2/ln(10) +const double AA = -1.5634601348517065795e+00; // -2*.9*2/ln(10) +const double AB = 3.28895476345399058690e-03; // 5.74/(4000^.9) +const double AC = -5.14214965799093883760e-03; // AA*AB + +// Definitions of very small and very big coefficients +const double CSMALL = 1.e-6; +const double CBIG = 1.e8; + +// Exported functions +//void resistcoeff(Project *, int ); +//void headlosscoeffs(Project *); +//void matrixcoeffs(Project *); +//void emitterheadloss(Project *, int, double *, double *); +//void demandheadloss(Project *, int, double, double, double *, double *); + +// Local functions +static void linkcoeffs(Project *pr); +static void nodecoeffs(Project *pr); +static void valvecoeffs(Project *pr); +static void emittercoeffs(Project *pr); +static void demandcoeffs(Project *pr); + +static void pipecoeff(Project *pr, int k); +static void DWpipecoeff(Project *pr, int k); +static double frictionFactor(double q, double e, double s, double *dfdq); + +static void pumpcoeff(Project *pr, int k); +static void curvecoeff(Project *pr, int i, double q, double *h0, double *r); + +static void valvecoeff(Project *pr, int k); +static void gpvcoeff(Project *pr, int k); +static void pbvcoeff(Project *pr, int k); +static void tcvcoeff(Project *pr, int k); +static void prvcoeff(Project *pr, int k, int n1, int n2); +static void psvcoeff(Project *pr, int k, int n1, int n2); +static void fcvcoeff(Project *pr, int k, int n1, int n2); + + +void resistcoeff(Project *pr, int k) +/* +**-------------------------------------------------------------------- +** Input: k = link index +** Output: none +** Purpose: computes link flow resistance coefficient +**-------------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + double e, d, L; + Slink *link = &net->Link[k]; + + switch (link->Type) { + + // ... Link is a pipe. Compute resistance based on headloss formula. + // Friction factor for D-W formula gets included during head loss + // calculation. + case CVPIPE: + case PIPE: + e = link->Kc; // Roughness coeff. + d = link->Diam; // Diameter + L = link->Len; // Length + switch (hyd->Formflag) + { + case HW: + link->R = 4.727 * L / pow(e, hyd->Hexp) / pow(d, 4.871); + break; + case DW: + link->R = L / 2.0 / 32.2 / d / SQR(PI * SQR(d) / 4.0); + break; + case CM: + link->R = SQR(4.0 * e / (1.49 * PI * SQR(d))) * + pow((d / 4.0), -1.333) * L; + } + break; + + // ... Link is a pump. Use huge resistance. + case PUMP: + link->R = CBIG; + break; + + // ... For all other links (e.g. valves) use a small resistance + default: + link->R = CSMALL; + break; + } +} + + +void headlosscoeffs(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: computes coefficients P (1 / head loss gradient) +** and Y (head loss / gradient) for all links. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + int k; + + for (k = 1; k <= net->Nlinks; k++) + { + switch (net->Link[k].Type) + { + case CVPIPE: + case PIPE: + pipecoeff(pr, k); + break; + case PUMP: + pumpcoeff(pr, k); + break; + case PBV: + pbvcoeff(pr, k); + break; + case TCV: + tcvcoeff(pr, k); + break; + case GPV: + gpvcoeff(pr, k); + break; + case FCV: + case PRV: + case PSV: + if (hyd->LinkSetting[k] == MISSING) valvecoeff(pr, k); + else hyd->P[k] = 0.0; + } + } +} + + +void matrixcoeffs(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: computes coefficients of linearized network eqns. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Smatrix *sm = &hyd->smatrix; + + // Reset values of all diagonal coeffs. (Aii), off-diagonal + // coeffs. (Aij), r.h.s. coeffs. (F) and node excess flow (Xflow) + memset(sm->Aii, 0, (net->Nnodes + 1) * sizeof(double)); + memset(sm->Aij, 0, (sm->Ncoeffs + 1) * sizeof(double)); + memset(sm->F, 0, (net->Nnodes + 1) * sizeof(double)); + memset(hyd->Xflow, 0, (net->Nnodes + 1) * sizeof(double)); + + // Compute matrix coeffs. from links, emitters, and nodal demands + linkcoeffs(pr); + emittercoeffs(pr); + demandcoeffs(pr); + + // Update nodal flow balances with demands and add onto r.h.s. coeffs. + nodecoeffs(pr); + + // Finally, find coeffs. for PRV/PSV/FCV control valves whose + // status is not fixed to OPEN/CLOSED + valvecoeffs(pr); +} + + +void linkcoeffs(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: computes coefficients contributed by links to the +** linearized system of hydraulic equations. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Smatrix *sm = &hyd->smatrix; + + int k, n1, n2; + Slink *link; + + // Examine each link of network + for (k = 1; k <= net->Nlinks; k++) + { + if (hyd->P[k] == 0.0) continue; + link = &net->Link[k]; + n1 = link->N1; // Start node of link + n2 = link->N2; // End node of link + + // Update nodal flow excess (Xflow) + // (Flow out of node is (-), flow into node is (+)) + hyd->Xflow[n1] -= hyd->LinkFlow[k]; + hyd->Xflow[n2] += hyd->LinkFlow[k]; + + // Add to off-diagonal coeff. of linear system matrix + sm->Aij[sm->Ndx[k]] -= hyd->P[k]; + + // Update linear system coeffs. associated with start node n1 + // ... node n1 is junction + if (n1 <= net->Njuncs) + { + sm->Aii[sm->Row[n1]] += hyd->P[k]; // Diagonal coeff. + sm->F[sm->Row[n1]] += hyd->Y[k]; // RHS coeff. + } + + // ... node n1 is a tank/reservoir + else sm->F[sm->Row[n2]] += (hyd->P[k] * hyd->NodeHead[n1]); + + // Update linear system coeffs. associated with end node n2 + // ... node n2 is junction + if (n2 <= net->Njuncs) + { + sm->Aii[sm->Row[n2]] += hyd->P[k]; // Diagonal coeff. + sm->F[sm->Row[n2]] -= hyd->Y[k]; // RHS coeff. + } + + // ... node n2 is a tank/reservoir + else sm->F[sm->Row[n1]] += (hyd->P[k] * hyd->NodeHead[n2]); + } +} + + +void nodecoeffs(Project *pr) +/* +**---------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: completes calculation of nodal flow balance array +** (Xflow) & r.h.s. (F) of linearized hydraulic eqns. +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Smatrix *sm = &hyd->smatrix; + + int i; + + // For junction nodes, subtract demand flow from net + // flow excess & add flow excess to RHS array F + for (i = 1; i <= net->Njuncs; i++) + { + hyd->Xflow[i] -= hyd->DemandFlow[i]; + sm->F[sm->Row[i]] += hyd->Xflow[i]; + } +} + + +void valvecoeffs(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: computes coeffs. of the linearized hydraulic eqns. +** contributed by PRVs, PSVs & FCVs whose status is +** not fixed to OPEN/CLOSED +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + int i, k, n1, n2; + Slink *link; + Svalve *valve; + + // Examine each valve + for (i = 1; i <= net->Nvalves; i++) + { + // Find valve's link index + valve = &net->Valve[i]; + k = valve->Link; + + // Coeffs. for fixed status valves have already been computed + if (hyd->LinkSetting[k] == MISSING) continue; + + // Start & end nodes of valve's link + link = &net->Link[k]; + n1 = link->N1; + n2 = link->N2; + + // Call valve-specific function + switch (link->Type) + { + case PRV: + prvcoeff(pr, k, n1, n2); + break; + case PSV: + psvcoeff(pr, k, n1, n2); + break; + case FCV: + fcvcoeff(pr, k, n1, n2); + break; + default: continue; + } + } +} + + +void emittercoeffs(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: computes coeffs. of the linearized hydraulic eqns. +** contributed by emitters. +** +** Note: Emitters consist of a fictitious pipe connected to +** a fictitious reservoir whose elevation equals that +** of the junction. The headloss through this pipe is +** Ke*(Flow)^hyd->Qexp, where Ke = emitter headloss coeff. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Smatrix *sm = &hyd->smatrix; + + int i, row; + double hloss, hgrad; + Snode *node; + + for (i = 1; i <= net->Njuncs; i++) + { + // Skip junctions without emitters + node = &net->Node[i]; + if (node->Ke == 0.0) continue; + + // Find emitter head loss and gradient + emitterheadloss(pr, i, &hloss, &hgrad); + + // Row of solution matrix + row = sm->Row[i]; + + // Addition to matrix diagonal & r.h.s + sm->Aii[row] += 1.0 / hgrad; + sm->F[row] += (hloss + node->El) / hgrad; + + // Update to node flow excess + hyd->Xflow[i] -= hyd->EmitterFlow[i]; + } +} + + +void emitterheadloss(Project *pr, int i, double *hloss, double *hgrad) +/* +**------------------------------------------------------------- +** Input: i = node index +** Output: hloss = head loss across node's emitter +** hgrad = head loss gradient +** Purpose: computes an emitters's head loss and gradient. +**------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + + double ke; + double q; + + // Set adjusted emitter coeff. + ke = MAX(CSMALL, pr->network.Node[i].Ke); + + // Compute gradient of head loss through emitter + q = hyd->EmitterFlow[i]; + *hgrad = hyd->Qexp * ke * pow(fabs(q), hyd->Qexp - 1.0); + + // Use linear head loss function for small gradient + if (*hgrad < hyd->RQtol) + { + *hgrad = hyd->RQtol; + *hloss = (*hgrad) * q; + } + + // Otherwise use normal emitter head loss function + else *hloss = (*hgrad) * q / hyd->Qexp; +} + + +void demandcoeffs(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: computes coeffs. of the linearized hydraulic eqns. +** contributed by pressure dependent demands. +** +** Note: Pressure dependent demands are modelled like emitters +** with Hloss = Preq * (D / Dfull)^(1/Pexp) +** where D (actual demand) is zero for negative pressure +** and is Dfull above pressure Preq. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Smatrix *sm = &hyd->smatrix; + + int i, row; + double dp, // pressure range over which demand can vary (ft) + n, // exponent in head loss v. demand function + hloss, // head loss in supplying demand (ft) + hgrad; // gradient of demand head loss (ft/cfs) + + // Get demand function parameters + if (hyd->DemandModel == DDA) return; + dp = hyd->Preq - hyd->Pmin; + n = 1.0 / hyd->Pexp; + + // Examine each junction node + for (i = 1; i <= net->Njuncs; i++) + { + // Skip junctions with non-positive demands + if (hyd->NodeDemand[i] <= 0.0) continue; + + // Find head loss for demand outflow at node's elevation + demandheadloss(pr, i, dp, n, &hloss, &hgrad); + + // Update row of solution matrix A & its r.h.s. F + if (hgrad > 0.0) + { + row = sm->Row[i]; + sm->Aii[row] += 1.0 / hgrad; + sm->F[row] += (hloss + net->Node[i].El + hyd->Pmin) / hgrad; + } + } +} + +void demandheadloss(Project *pr, int i, double dp, double n, + double *hloss, double *hgrad) +/* +**-------------------------------------------------------------- +** Input: i = junction index +** dp = pressure range for demand function (ft) +** n = exponent in head v. demand function +** Output: hloss = pressure dependent demand head loss (ft) +** hgrad = gradient of head loss (ft/cfs) +** Purpose: computes head loss and its gradient for delivering +** a pressure dependent demand flow. +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + + double d = hyd->DemandFlow[i]; + double dfull = hyd->NodeDemand[i]; + double r = d / dfull; + + // Use lower barrier function for negative demand + if (r <= 0) + { + *hgrad = CBIG; + *hloss = CBIG * d; + } + + // Use power head loss function for demand less than full + else if (r < 1.0) + { + *hgrad = n * dp * pow(r, n - 1.0) / dfull; + // ... use linear function for very small gradient + if (*hgrad < hyd->RQtol) + { + *hgrad = hyd->RQtol; + *hloss = (*hgrad) * d; + } + else *hloss = (*hgrad) * d / n; + } + + // Use upper barrier function for demand above full value + else + { + *hgrad = CBIG; + *hloss = dp + CBIG * (d - dfull); + } +} + + +void pipecoeff(Project *pr, int k) +/* +**-------------------------------------------------------------- +** Input: k = link index +** Output: none +** Purpose: computes P & Y coefficients for pipe k. +** +** P = inverse head loss gradient = 1/hgrad +** Y = flow correction term = hloss / hgrad +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + + double hloss, // Head loss + hgrad, // Head loss gradient + ml, // Minor loss coeff. + q, // Abs. value of flow + r; // Resistance coeff. + + // For closed pipe use headloss formula: hloss = CBIG*q + if (hyd->LinkStatus[k] <= CLOSED) + { + hyd->P[k] = 1.0 / CBIG; + hyd->Y[k] = hyd->LinkFlow[k]; + return; + } + + // Use custom function for Darcy-Weisbach formula + if (hyd->Formflag == DW) + { + DWpipecoeff(pr, k); + return; + } + + q = ABS(hyd->LinkFlow[k]); + ml = pr->network.Link[k].Km; + r = pr->network.Link[k].R; + + // Friction head loss gradient + hgrad = hyd->Hexp * r * pow(q, hyd->Hexp - 1.0); + + // Friction head loss: + // ... use linear function for very small gradient + if (hgrad < hyd->RQtol) + { + hgrad = hyd->RQtol; + hloss = hgrad * q; + } + // ... otherwise use original formula + else hloss = hgrad * q / hyd->Hexp; + + // Contribution of minor head loss + if (ml > 0.0) + { + hloss += ml * q * q; + hgrad += 2.0 * ml * q; + } + + // Adjust head loss sign for flow direction + hloss *= SGN(hyd->LinkFlow[k]); + + // P and Y coeffs. + hyd->P[k] = 1.0 / hgrad; + hyd->Y[k] = hloss / hgrad; +} + + +void DWpipecoeff(Project *pr, int k) +/* +**-------------------------------------------------------------- +** Input: k = link index +** Output: none +** Purpose: computes pipe head loss coeffs. for Darcy-Weisbach +** formula. +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Slink *link = &pr->network.Link[k]; + + double q = ABS(hyd->LinkFlow[k]); + double r = link->R; // Resistance coeff. + double ml = link->Km; // Minor loss coeff. + double e = link->Kc / link->Diam; // Relative roughness + double s = hyd->Viscos * link->Diam; // Viscosity / diameter + double hloss, hgrad, f, dfdq, r1; + + // Compute head loss and its derivative + // ... use Hagen-Poiseuille formula for laminar flow (Re <= 2000) + if (q <= A2 * s) + { + r = 16.0 * PI * s * r; + hloss = hyd->LinkFlow[k] * (r + ml * q); + hgrad = r + 2.0 * ml * q; + } + + // ... otherwise use Darcy-Weisbach formula with friction factor + else + { + dfdq = 0.0; + f = frictionFactor(q, e, s, &dfdq); + r1 = f * r + ml; + hloss = r1 * q * hyd->LinkFlow[k]; + hgrad = (2.0 * r1 * q) + (dfdq * r * q * q); + } + + // Compute P and Y coefficients + hyd->P[k] = 1.0 / hgrad; + hyd->Y[k] = hloss / hgrad; +} + + +double frictionFactor(double q, double e, double s, double *dfdq) +/* +**-------------------------------------------------------------- +** Input: q = |pipe flow| +** e = pipe roughness / diameter +** s = viscosity * pipe diameter +** Output: dfdq = derivative of friction factor w.r.t. flow +** Returns: pipe's friction factor +** Purpose: computes Darcy-Weisbach friction factor and its +** derivative as a function of Reynolds Number (Re). +**-------------------------------------------------------------- +*/ +{ + double f; // friction factor + double x1, x2, x3, x4, + y1, y2, y3, + fa, fb, r; + double w = q / s; // Re*Pi/4 + + // For Re >= 4000 use Swamee & Jain approximation + // of the Colebrook-White Formula + if ( w >= A1 ) + { + y1 = A8 / pow(w, 0.9); + y2 = e / 3.7 + y1; + y3 = A9 * log(y2); + f = 1.0 / (y3*y3); + *dfdq = 1.8 * f * y1 * A9 / y2 / y3 / q; + } + + // Use interpolating polynomials developed by + // E. Dunlop for transition flow from 2000 < Re < 4000. + else + { + y2 = e / 3.7 + AB; + y3 = A9 * log(y2); + fa = 1.0 / (y3*y3); + fb = (2.0 + AC / (y2*y3)) * fa; + r = w / A2; + x1 = 7.0 * fa - fb; + x2 = 0.128 - 17.0 * fa + 2.5 * fb; + x3 = -0.128 + 13.0 * fa - (fb + fb); + x4 = 0.032 - 3.0 * fa + 0.5 *fb; + f = x1 + r * (x2 + r * (x3 + r * x4)); + *dfdq = (x2 + r * (2.0 * x3 + r * 3.0 * x4)) / s / A2; + } + return f; +} + + +void pumpcoeff(Project *pr, int k) +/* +**-------------------------------------------------------------- +** Input: k = link index +** Output: none +** Purpose: computes P & Y coeffs. for pump in link k +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + + int p; // Pump index + double h0, // Shutoff head + q, // Abs. value of flow + r, // Flow resistance coeff. + n, // Flow exponent coeff. + setting, // Pump speed setting + hloss, // Head loss across pump + hgrad; // Head loss gradient + Spump *pump; + + // Use high resistance pipe if pump closed or cannot deliver head + setting = hyd->LinkSetting[k]; + if (hyd->LinkStatus[k] <= CLOSED || setting == 0.0) + { + hyd->P[k] = 1.0 / CBIG; + hyd->Y[k] = hyd->LinkFlow[k]; + return; + } + + // Obtain reference to pump object + q = ABS(hyd->LinkFlow[k]); + p = findpump(&pr->network, k); + pump = &pr->network.Pump[p]; + + // If no pump curve treat pump as an open valve + if (pump->Ptype == NOCURVE) + { + hyd->P[k] = 1.0 / CSMALL; + hyd->Y[k] = hyd->LinkFlow[k]; + return; + } + + // Get pump curve coefficients for custom pump curve + // (Other pump types have pre-determined coeffs.) + if (pump->Ptype == CUSTOM) + { + // Find intercept (h0) & slope (r) of pump curve + // line segment which contains speed-adjusted flow. + curvecoeff(pr, pump->Hcurve, q / setting, &h0, &r); + + // Determine head loss coefficients (negative sign + // converts from pump curve's head gain to head loss) + pump->H0 = -h0; + pump->R = -r; + pump->N = 1.0; + + // Compute head loss and its gradient (with speed adjustment) + hgrad = pump->R * setting ; + hloss = pump->H0 * SQR(setting) + hgrad * hyd->LinkFlow[k]; + } + else + { + // Adjust head loss coefficients for pump speed + h0 = SQR(setting) * pump->H0; + n = pump->N; + if (ABS(n - 1.0) < TINY) n = 1.0; + r = pump->R * pow(setting, 2.0 - n); + + // Constant HP pump + if (pump->Ptype == CONST_HP) + { + // ... compute pump curve's gradient + hgrad = -r / q / q; + // ... use linear curve if gradient too large or too small + if (hgrad > CBIG) + { + hgrad = CBIG; + hloss = -hgrad * hyd->LinkFlow[k]; + } + else if (hgrad < hyd->RQtol) + { + hgrad = hyd->RQtol; + hloss = -hgrad * hyd->LinkFlow[k]; + } + // ... otherwise compute head loss from pump curve + else + { + hloss = r / hyd->LinkFlow[k]; + } + } + + // Compute head loss and its gradient + // ... pump curve is nonlinear + else if (n != 1.0) + { + // ... compute pump curve's gradient + hgrad = n * r * pow(q, n - 1.0); + // ... use linear pump curve if gradient too small + if (hgrad < hyd->RQtol) + { + hgrad = hyd->RQtol; + hloss = h0 + hgrad * hyd->LinkFlow[k]; + } + // ... otherwise compute head loss from pump curve + else hloss = h0 + hgrad * hyd->LinkFlow[k] / n; + } + // ... pump curve is linear + else + { + hgrad = r; + hloss = h0 + hgrad * hyd->LinkFlow[k]; + } + } + + // P and Y coeffs. + hyd->P[k] = 1.0 / hgrad; + hyd->Y[k] = hloss / hgrad; +} + + +void curvecoeff(Project *pr, int i, double q, double *h0, double *r) +/* +**------------------------------------------------------------------- +** Input: i = curve index +** q = flow rate +** Output: *h0 = head at zero flow (y-intercept) +** *r = dHead/dFlow (slope) +** Purpose: computes intercept and slope of head v. flow curve +** at current flow. +**------------------------------------------------------------------- +*/ +{ + int k1, k2, npts; + double *x, *y; + Scurve *curve; + + // Remember that curve is stored in untransformed units + q *= pr->Ucf[FLOW]; + curve = &pr->network.Curve[i]; + x = curve->X; // x = flow + y = curve->Y; // y = head + npts = curve->Npts; + + // Find linear segment of curve that brackets flow q + k2 = 0; + while (k2 < npts && x[k2] < q) k2++; + if (k2 == 0) k2++; + else if (k2 == npts) k2--; + k1 = k2 - 1; + + // Compute slope and intercept of this segment + *r = (y[k2] - y[k1]) / (x[k2] - x[k1]); + *h0 = y[k1] - (*r)*x[k1]; + + // Convert units + *h0 = (*h0) / pr->Ucf[HEAD]; + *r = (*r) * pr->Ucf[FLOW] / pr->Ucf[HEAD]; +} + + +void gpvcoeff(Project *pr, int k) +/* +**-------------------------------------------------------------- +** Input: k = link index +** Output: none +** Purpose: computes P & Y coeffs. for general purpose valve +**-------------------------------------------------------------- +*/ +{ + int i; + double h0, // Intercept of head loss curve segment + r, // Slope of head loss curve segment + q; // Abs. value of flow + + Hydraul *hyd = &pr->hydraul; + + // Treat as a pipe if valve closed + if (hyd->LinkStatus[k] == CLOSED) valvecoeff(pr, k); + + // Otherwise utilize segment of head loss curve + // bracketing current flow (curve index is stored + // in valve's setting) + else + { + // Index of valve's head loss curve + i = (int)ROUND(hyd->LinkSetting[k]); + + // Adjusted flow rate + q = ABS(hyd->LinkFlow[k]); + q = MAX(q, TINY); + + // Intercept and slope of curve segment containing q + curvecoeff(pr, i, q, &h0, &r); + r = MAX(r, TINY); + + // Resulting P and Y coeffs. + hyd->P[k] = 1.0 / r; + hyd->Y[k] = (h0 / r + q) * SGN(hyd->LinkFlow[k]); + } +} + + +void pbvcoeff(Project *pr, int k) +/* +**-------------------------------------------------------------- +** Input: k = link index +** Output: none +** Purpose: computes P & Y coeffs. for pressure breaker valve +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Slink *link = &pr->network.Link[k]; + + // If valve fixed OPEN or CLOSED then treat as a pipe + if (hyd->LinkSetting[k] == MISSING || hyd->LinkSetting[k] == 0.0) + { + valvecoeff(pr, k); + } + + // If valve is active + else + { + // Treat as a pipe if minor loss > valve setting + if (link->Km * SQR(hyd->LinkFlow[k]) > hyd->LinkSetting[k]) + { + valvecoeff(pr, k); + } + // Otherwise force headloss across valve to be equal to setting + else + { + hyd->P[k] = CBIG; + hyd->Y[k] = hyd->LinkSetting[k] * CBIG; + } + } +} + + +void tcvcoeff(Project *pr, int k) +/* +**-------------------------------------------------------------- +** Input: k = link index +** Output: none +** Purpose: computes P & Y coeffs. for throttle control valve +**-------------------------------------------------------------- +*/ +{ + double km; + Hydraul *hyd = &pr->hydraul; + Slink *link = &pr->network.Link[k]; + + // Save original loss coeff. for open valve + km = link->Km; + + // If valve not fixed OPEN or CLOSED, compute its loss coeff. + if (hyd->LinkSetting[k] != MISSING) + { + link->Km = 0.02517 * hyd->LinkSetting[k] / (SQR(link->Diam)*SQR(link->Diam)); + } + + // Then apply usual valve formula + valvecoeff(pr, k); + + // Restore original loss coeff. + link->Km = km; +} + + +void prvcoeff(Project *pr, int k, int n1, int n2) +/* +**-------------------------------------------------------------- +** Input: k = link index +** n1 = upstream node of valve +** n2 = downstream node of valve +** Output: none +** Purpose: computes solution matrix coeffs. for pressure +** reducing valves +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Smatrix *sm = &hyd->smatrix; + + int i, j; // Rows of solution matrix + double hset; // Valve head setting + + i = sm->Row[n1]; // Matrix rows of nodes + j = sm->Row[n2]; + hset = pr->network.Node[n2].El + + hyd->LinkSetting[k]; // Valve setting + + if (hyd->LinkStatus[k] == ACTIVE) + { + + // Set coeffs. to force head at downstream + // node equal to valve setting & force flow + // to equal to flow excess at downstream node. + + hyd->P[k] = 0.0; + hyd->Y[k] = hyd->LinkFlow[k] + hyd->Xflow[n2]; // Force flow balance + sm->F[j] += (hset * CBIG); // Force head = hset + sm->Aii[j] += CBIG; // at downstream node + if (hyd->Xflow[n2] < 0.0) + { + sm->F[i] += hyd->Xflow[n2]; + } + return; + } + + // For OPEN, CLOSED, or XPRESSURE valve + // compute matrix coeffs. using the valvecoeff() function. + + valvecoeff(pr, k); + sm->Aij[sm->Ndx[k]] -= hyd->P[k]; + sm->Aii[i] += hyd->P[k]; + sm->Aii[j] += hyd->P[k]; + sm->F[i] += (hyd->Y[k] - hyd->LinkFlow[k]); + sm->F[j] -= (hyd->Y[k] - hyd->LinkFlow[k]); +} + + +void psvcoeff(Project *pr, int k, int n1, int n2) +/* +**-------------------------------------------------------------- +** Input: k = link index +** n1 = upstream node of valve +** n2 = downstream node of valve +** Output: none +** Purpose: computes solution matrix coeffs. for pressure +** sustaining valve +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Smatrix *sm = &hyd->smatrix; + + int i, j; // Rows of solution matrix + double hset; // Valve head setting + + i = sm->Row[n1]; // Matrix rows of nodes + j = sm->Row[n2]; + hset = pr->network.Node[n1].El + + hyd->LinkSetting[k]; // Valve setting + + if (hyd->LinkStatus[k] == ACTIVE) + { + // Set coeffs. to force head at upstream + // node equal to valve setting & force flow + // equal to flow excess at upstream node. + + hyd->P[k] = 0.0; + hyd->Y[k] = hyd->LinkFlow[k] - hyd->Xflow[n1]; // Force flow balance + sm->F[i] += (hset * CBIG); // Force head = hset + sm->Aii[i] += CBIG; // at upstream node + if (hyd->Xflow[n1] > 0.0) + { + sm->F[j] += hyd->Xflow[n1]; + } + return; + } + + // For OPEN, CLOSED, or XPRESSURE valve + // compute matrix coeffs. using the valvecoeff() function. + + valvecoeff(pr, k); + sm->Aij[sm->Ndx[k]] -= hyd->P[k]; + sm->Aii[i] += hyd->P[k]; + sm->Aii[j] += hyd->P[k]; + sm->F[i] += (hyd->Y[k] - hyd->LinkFlow[k]); + sm->F[j] -= (hyd->Y[k] - hyd->LinkFlow[k]); +} + + +void fcvcoeff(Project *pr, int k, int n1, int n2) +/* +**-------------------------------------------------------------- +** Input: k = link index +** n1 = upstream node of valve +** n2 = downstream node of valve +** Output: none +** Purpose: computes solution matrix coeffs. for flow control +** valve +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Smatrix *sm = &hyd->smatrix; + + int i, j; // Rows in solution matrix + double q; // Valve flow setting + + q = hyd->LinkSetting[k]; + i = sm->Row[n1]; + j = sm->Row[n2]; + + // If valve active, break network at valve and treat + // flow setting as external demand at upstream node + // and external supply at downstream node. + + if (hyd->LinkStatus[k] == ACTIVE) + { + hyd->Xflow[n1] -= q; + hyd->Xflow[n2] += q; + hyd->Y[k] = hyd->LinkFlow[k] - q; + sm->F[i] -= q; + sm->F[j] += q; + hyd->P[k] = 1.0 / CBIG; + sm->Aij[sm->Ndx[k]] -= hyd->P[k]; + sm->Aii[i] += hyd->P[k]; + sm->Aii[j] += hyd->P[k]; + } + + // Otherwise treat valve as an open pipe + + else + { + valvecoeff(pr, k); + sm->Aij[sm->Ndx[k]] -= hyd->P[k]; + sm->Aii[i] += hyd->P[k]; + sm->Aii[j] += hyd->P[k]; + sm->F[i] += (hyd->Y[k] - hyd->LinkFlow[k]); + sm->F[j] -= (hyd->Y[k] - hyd->LinkFlow[k]); + } +} + + +void valvecoeff(Project *pr, int k) +/* +**-------------------------------------------------------------- +** Input: k = link index +** Output: none +** Purpose: computes solution matrix coeffs. for a completely +** open, closed, or throttled control valve. +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Slink *link = &pr->network.Link[k]; + + double flow, q, hloss, hgrad; + + flow = hyd->LinkFlow[k]; + + // Valve is closed. Use a very small matrix coeff. + if (hyd->LinkStatus[k] <= CLOSED) + { + hyd->P[k] = 1.0 / CBIG; + hyd->Y[k] = flow; + return; + } + + // Account for any minor headloss through the valve + if (link->Km > 0.0) + { + q = fabs(flow); + hgrad = 2.0 * link->Km * q; + + // Guard against too small a head loss gradient + if (hgrad < hyd->RQtol) + { + hgrad = hyd->RQtol; + hloss = flow * hgrad; + } + else hloss = flow * hgrad / 2.0; + + // P and Y coeffs. + hyd->P[k] = 1.0 / hgrad; + hyd->Y[k] = hloss / hgrad; + } + + // If no minor loss coeff. specified use a + // low resistance linear head loss relation + else + { + hyd->P[k] = 1.0 / CSMALL; + hyd->Y[k] = flow; + } +} diff --git a/src/hydraul.c b/src/hydraul.c index e9bcbb7..732108c 100755 --- a/src/hydraul.c +++ b/src/hydraul.c @@ -1,2508 +1,1117 @@ -/* -********************************************************************* - -HYDRAUL.C -- Hydraulic Simulator for EPANET Program - -VERSION: 2.00 -DATE: 6/5/00 - 9/7/00 - 10/25/00 - 12/29/00 - 3/1/01 - 11/19/01 - 6/24/02 - 8/15/07 (2.00.11) - 2/14/08 (2.00.12) -AUTHOR: L. Rossman - US EPA - NRMRL - - This module contains the network hydraulic simulator. - It simulates the network's hydraulic behavior over an - an extended period of time and writes its results to the - binary file HydFile. - - The entry points for this module are: - openhyd() -- called from ENopenH() in EPANET.C - inithyd() -- called from ENinitH() in EPANET.C - runhyd() -- called from ENrunH() in EPANET.C - nexthyd() -- called from ENnextH() in EPANET.C - closehyd() -- called from ENcloseH() in EPANET.C - tankvolume() -- called from ENsetnodevalue() in EPANET.C - setlinkstatus(), - setlinksetting(), - resistance()-- all called from ENsetlinkvalue() in EPANET.C - - External functions called by this module are: - createsparse() -- see SMATRIX.C - freesparse() -- see SMATRIX.C - linsolve() -- see SMATRIX.C - checkrules() -- see RULES.C - interp() -- see EPANET.C - savehyd() -- see OUTPUT.C - savehydstep() -- see OUTPUT.C - writehydstat() -- see REPORT.C - writehyderr() -- see REPORT.C - writehydwarn() -- see REPORT.C -******************************************************************* -*/ - -#include -#include -#ifndef __APPLE__ -#include -#else -#include -#endif -#include -#include "hash.h" -#include "text.h" -#include "types.h" -#include "funcs.h" -#define EXTERN extern -#include "vars.h" - -#define QZERO 1.e-6 /* Equivalent to zero flow */ -#define CBIG 1.e8 /* Big coefficient */ -#define CSMALL 1.e-6 /* Small coefficient */ - -/* Constants used for computing Darcy-Weisbach friction factor */ -#define A1 0.314159265359e04 /* 1000*PI */ -#define A2 0.157079632679e04 /* 500*PI */ -#define A3 0.502654824574e02 /* 16*PI */ -#define A4 6.283185307 /* 2*PI */ -#define A8 4.61841319859 /* 5.74*(PI/4)^.9 */ -#define A9 -8.685889638e-01 /* -2/ln(10) */ -#define AA -1.5634601348 /* -2*.9*2/ln(10) */ -#define AB 3.28895476345e-03 /* 5.74/(4000^.9) */ -#define AC -5.14214965799e-03 /* AA*AB */ - -/*** Updated 3/1/01 ***/ -/* Flag used to halt taking further time steps */ -int Haltflag; - -/* Relaxation factor used for updating flow changes */ //(2.00.11 - LR) -double RelaxFactor; //(2.00.11 - LR) - -/* Function to find flow coeffs. through open/closed valves */ //(2.00.11 - LR) -void valvecoeff(int k); //(2.00.11 - LR) - - -int openhyd() -/* - *-------------------------------------------------------------- - * Input: none - * Output: returns error code - * Purpose: opens hydraulics solver system - *-------------------------------------------------------------- -*/ -{ - int i; - int errcode = 0; - ERRCODE(createsparse()); /* See SMATRIX.C */ - ERRCODE(allocmatrix()); /* Allocate solution matrices */ - for (i=1; i<=Nlinks; i++) /* Initialize flows */ - initlinkflow(i,Link[i].Stat,Link[i].Kc); - return(errcode); -} - - -/*** Updated 3/1/01 ***/ -void inithyd(int initflag) -/* -**-------------------------------------------------------------- -** Input: initflag > 0 if link flows should be re-initialized -** = 0 if not -** Output: none -** Purpose: initializes hydraulics solver system -**-------------------------------------------------------------- -*/ -{ - int i,j; - - /* Initialize tanks */ - for (i=1; i<=Ntanks; i++) - { - Tank[i].V = Tank[i].V0; - NodeHead[Tank[i].Node] = Tank[i].H0; - -/*** Updated 10/25/00 ***/ - NodeDemand[Tank[i].Node] = 0.0; - - OldStat[Nlinks+i] = TEMPCLOSED; - } - - /* Initialize emitter flows */ - memset(E,0,(Nnodes+1)*sizeof(double)); - for (i=1; i<=Njuncs; i++) - if (Node[i].Ke > 0.0) E[i] = 1.0; - - /* Initialize links */ - for (i=1; i<=Nlinks; i++) - { - /* Initialize status and setting */ - LinkStatus[i] = Link[i].Stat; - LinkSetting[i] = Link[i].Kc; - - /* Start active control valves in ACTIVE position */ //(2.00.11 - LR) - if ( - (Link[i].Type == PRV || Link[i].Type == PSV - || Link[i].Type == FCV) //(2.00.11 - LR) - && (Link[i].Kc != MISSING) - ) LinkStatus[i] = ACTIVE; //(2.00.11 - LR) - -/*** Updated 3/1/01 ***/ - /* Initialize flows if necessary */ - if (LinkStatus[i] <= CLOSED) Q[i] = QZERO; - else if (ABS(Q[i]) <= QZERO || initflag > 0) - initlinkflow(i, LinkStatus[i], LinkSetting[i]); - - /* Save initial status */ - OldStat[i] = LinkStatus[i]; - } - - /* Reset pump energy usage */ - for (i=1; i<=Npumps; i++) - { - for (j=0; j<6; j++) Pump[i].Energy[j] = 0.0; - } - - /* Re-position hydraulics file */ - if (Saveflag) fseek(HydFile,HydOffset,SEEK_SET); - -/*** Updated 3/1/01 ***/ - /* Initialize current time */ - Haltflag = 0; - Htime = 0; - Hydstep = 0; - Rtime = Rstep; -} - - -int runhyd(long *t) -/* -**-------------------------------------------------------------- -** Input: none -** Output: t = pointer to current time (in seconds) -** Returns: error code -** Purpose: solves network hydraulics in a single time period -**-------------------------------------------------------------- -*/ -{ - int iter; /* Iteration count */ - int errcode; /* Error code */ - double relerr; /* Solution accuracy */ - - /* Find new demands & control actions */ - *t = Htime; - demands(); - controls(); - - /* Solve network hydraulic equations */ - errcode = netsolve(&iter,&relerr); - if (!errcode) - { - /* Report new status & save results */ - if (Statflag) writehydstat(iter,relerr); - - /* solution info */ - _relativeError = relerr; - _iterations = iter; - -/*** Updated 3/1/01 ***/ - /* If system unbalanced and no extra trials */ - /* allowed, then activate the Haltflag. */ - if (relerr > Hacc && ExtraIter == -1) Haltflag = 1; - - /* Report any warning conditions */ - if (!errcode) errcode = writehydwarn(iter,relerr); - } - return(errcode); -} /* end of runhyd */ - - -int nexthyd(long *tstep) -/* -**-------------------------------------------------------------- -** Input: none -** Output: tstep = pointer to time step (in seconds) -** Returns: error code -** Purpose: finds length of next time step & updates tank -** levels and rule-based contol actions -**-------------------------------------------------------------- -*/ -{ - long hydstep; /* Actual time step */ - int errcode = 0; /* Error code */ - -/*** Updated 3/1/01 ***/ - /* Save current results to hydraulics file and */ - /* force end of simulation if Haltflag is active */ - if (Saveflag) errcode = savehyd(&Htime); - if (Haltflag) Htime = Dur; - - /* Compute next time step & update tank levels */ - *tstep = 0; - hydstep = 0; - if (Htime < Dur) hydstep = timestep(); - if (Saveflag) errcode = savehydstep(&hydstep); - - /* Compute pumping energy */ - if (Dur == 0) addenergy(0); - else if (Htime < Dur) addenergy(hydstep); - - /* Update current time. */ - if (Htime < Dur) /* More time remains */ - { - Htime += hydstep; - if (Htime >= Rtime) Rtime += Rstep; - } - else - { - Htime++; /* Force completion of analysis */ - if (OpenQflag) { - Qtime++; // force completion of wq analysis too - } - } - *tstep = hydstep; - return(errcode); -} - - -void closehyd() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: closes hydraulics solver system -**-------------------------------------------------------------- -*/ -{ - freesparse(); /* see SMATRIX.C */ - freematrix(); -} - - -int allocmatrix() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: allocates memory used for solution matrix coeffs. -**-------------------------------------------------------------- -*/ -{ - int errcode = 0; - Aii = (double *) calloc(Nnodes+1,sizeof(double)); - Aij = (double *) calloc(Ncoeffs+1,sizeof(double)); - F = (double *) calloc(Nnodes+1,sizeof(double)); - E = (double *) calloc(Nnodes+1,sizeof(double)); - P = (double *) calloc(Nlinks+1,sizeof(double)); - Y = (double *) calloc(Nlinks+1,sizeof(double)); - X = (double *) calloc(MAX((Nnodes+1),(Nlinks+1)),sizeof(double)); - OldStat = (char *) calloc(Nlinks+Ntanks+1, sizeof(char)); - ERRCODE(MEMCHECK(Aii)); - ERRCODE(MEMCHECK(Aij)); - ERRCODE(MEMCHECK(F)); - ERRCODE(MEMCHECK(E)); - ERRCODE(MEMCHECK(P)); - ERRCODE(MEMCHECK(Y)); - ERRCODE(MEMCHECK(X)); - ERRCODE(MEMCHECK(OldStat)); - return(errcode); -} /* end of allocmatrix */ - - -void freematrix() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: frees memory used for solution matrix coeffs. -**-------------------------------------------------------------- -*/ -{ - free(Aii); - free(Aij); - free(F); - free(E); - free(P); - free(Y); - free(X); - free(OldStat); -} /* end of freematrix */ - - -void initlinkflow(int i, char s, double k) -/* -**-------------------------------------------------------------------- -** Input: i = link index -** s = link status -** k = link setting (i.e., pump speed) -** Output: none -** Purpose: sets initial flow in link to QZERO if link is closed, -** to design flow for a pump, or to flow at velocity of -** 1 fps for other links. -**-------------------------------------------------------------------- -*/ -{ - if (s == CLOSED) Q[i] = QZERO; - else if (Link[i].Type == PUMP) Q[i] = k*Pump[PUMPINDEX(i)].Q0; - else Q[i] = PI*SQR(Link[i].Diam)/4.0; -} - - -/*** Updated 9/7/00 ***/ -void setlinkflow(int k, double dh) -/* -**-------------------------------------------------------------- -** Input: k = link index -** dh = headloss across link -** Output: none -** Purpose: sets flow in link based on current headloss -**-------------------------------------------------------------- -*/ -{ - int i,p; - double h0; - double x,y; - - switch (Link[k].Type) - { - case CV: - case PIPE: - - /* For Darcy-Weisbach formula: */ - /* use approx. inverse of formula. */ - if (Formflag == DW) - { - x = -log(LinkSetting[k]/3.7/Link[k].Diam); - y = sqrt(ABS(dh)/Link[k].R/1.32547); - Q[k] = x*y; - } - - /* For Hazen-Williams or Manning formulas: */ - /* use inverse of formula. */ - else - { - x = ABS(dh)/Link[k].R; - y = 1.0/Hexp; - Q[k] = pow(x,y); - } - - /* Change sign of flow to match sign of headloss */ - if (dh < 0.0) Q[k] = -Q[k]; - break; - - case PUMP: - - /* Convert headloss to pump head gain */ - dh = -dh; - p = PUMPINDEX(k); - - /* For custom pump curve, interpolate from curve */ - if (Pump[p].Ptype == CUSTOM) - { - dh = -dh*Ucf[HEAD]/SQR(LinkSetting[k]); - i = Pump[p].Hcurve; - Q[k] = interp(Curve[i].Npts,Curve[i].Y,Curve[i].X, - dh)*LinkSetting[k]/Ucf[FLOW]; - } - - /* Otherwise use inverse of power curve */ - else - { - h0 = -SQR(LinkSetting[k])*Pump[p].H0; - x = pow(LinkSetting[k],2.0-Pump[p].N); - x = ABS(h0-dh)/(Pump[p].R*x), - y = 1.0/Pump[p].N; - Q[k] = pow(x,y); - } - break; - } -} - - -void setlinkstatus(int index, char value, char *s, double *k) -/*---------------------------------------------------------------- -** Input: index = link index -** value = 0 (CLOSED) or 1 (OPEN) -** s = pointer to link status -** k = pointer to link setting -** Output: none -** Purpose: sets link status to OPEN or CLOSED -**---------------------------------------------------------------- -*/ -{ - /* Status set to open */ - if (value == 1) - { - /* Adjust link setting for pumps & valves */ - if (Link[index].Type == PUMP) *k = 1.0; - -/*** Updated 9/7/00 ***/ - if (Link[index].Type > PUMP - && Link[index].Type != GPV) *k = MISSING; - - /* Reset link flow if it was originally closed */ -// if (*s <= CLOSED) initlinkflow(index, OPEN, *k); - *s = OPEN; - } - - /* Status set to closed */ - else if (value == 0) - { - /* Adjust link setting for pumps & valves */ - if (Link[index].Type == PUMP) *k = 0.0; - -/*** Updated 9/7/00 ***/ - if (Link[index].Type > PUMP - && Link[index].Type != GPV) *k = MISSING; - - /* Reset link flow if it was originally open */ -// if (*s > CLOSED) initlinkflow(index, CLOSED, *k); - *s = CLOSED; - } -} - - -void setlinksetting(int index, double value, char *s, double *k) -/*---------------------------------------------------------------- -** Input: index = link index -** value = pump speed or valve setting -** s = pointer to link status -** k = pointer to link setting -** Output: none -** Purpose: sets pump speed or valve setting, adjusting link -** status and flow when necessary -**---------------------------------------------------------------- -*/ -{ - /* For a pump, status is OPEN if speed > 0, CLOSED otherwise */ - if (Link[index].Type == PUMP) - { - *k = value; - if (value > 0 && *s <= CLOSED) - { - *s = OPEN; -// initlinkflow(index, OPEN, value); - } - if (value == 0 && *s > CLOSED) - { - *s = CLOSED; -// initlinkflow(index, CLOSED, value); - } - } - -/*** Updated 9/7/00 ***/ - /* For FCV, activate it */ - else if (Link[index].Type == FCV) - { -// if (*s <= CLOSED) initlinkflow(index, OPEN, value); - *k = value; - *s = ACTIVE; - } - - /* Open closed control valve with fixed status (setting = MISSING) */ - else - { - if (*k == MISSING && *s <= CLOSED) - { -// initlinkflow(index, OPEN, value); - *s = OPEN; - } - *k = value; - } -} - - -void resistance(int k) -/* -**-------------------------------------------------------------------- -** Input: k = link index -** Output: none -** Purpose: computes link flow resistance -**-------------------------------------------------------------------- -*/ -{ - double e,d,L; - Link[k].R = CSMALL; - //if (Link[k].Type == PIPE || Link[k].Type == CV) //(2.00.11 - LR) - switch (Link[k].Type) - { - - /* Link is a pipe. Compute resistance based on headloss formula. */ - /* Friction factor for D-W formula gets included during solution */ - /* process in pipecoeff() function. */ - case CV: - case PIPE: - e = Link[k].Kc; /* Roughness coeff. */ - d = Link[k].Diam; /* Diameter */ - L = Link[k].Len; /* Length */ - switch(Formflag) - { - case HW: Link[k].R = 4.727*L/pow(e,Hexp)/pow(d,4.871); - break; - case DW: Link[k].R = L/2.0/32.2/d/SQR(PI*SQR(d)/4.0); - break; - case CM: Link[k].R = SQR(4.0*e/(1.49*PI*d*d))* - pow((d/4.0),-1.333)*L; - } - break; - - /* Link is a pump. Use negligible resistance. */ - case PUMP: - Link[k].R = CBIG; //CSMALL; - break; - - - /* Link is a valve. Compute resistance for open valve assuming */ - /* length is 2*diameter and friction factor is 0.02. Use with */ - /* other formulas as well since resistance should be negligible.*/ - -/*** This way of treating valve resistance has been deprecated ***/ //(2.00.11 - LR) -/*** since resulting resistance is not always negligible. ***/ //(2.00.11 - LR) -/* - default: - d = Link[k].Diam; - L = 2.0*d; - Link[k].R = 0.02*L/2.0/32.2/d/SQR(PI*SQR(d)/4.0); - break; -*/ - } -} - - -void demands() -/* -**-------------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: computes demands at nodes during current time period -**-------------------------------------------------------------------- -*/ -{ - int i,j,n; - long k,p; - double djunc, sum; - Pdemand demand; - - /* Determine total elapsed number of pattern periods */ - p = (Htime+Pstart)/Pstep; - - /* Update demand at each node according to its assigned pattern */ - Dsystem = 0.0; /* System-wide demand */ - for (i=1; i<=Njuncs; i++) - { - sum = 0.0; - for (demand = Node[i].D; demand != NULL; demand = demand->next) - { - /* - pattern period (k) = (elapsed periods) modulus - (periods per pattern) - */ - j = demand->Pat; - k = p % (long) Pattern[j].Length; - djunc = (demand->Base)*Pattern[j].F[k]*Dmult; - if (djunc > 0.0) Dsystem += djunc; - sum += djunc; - } - NodeDemand[i] = sum; - } - - /* Update head at fixed grade nodes with time patterns. */ - for (n=1; n<=Ntanks; n++) - { - if (Tank[n].A == 0.0) - { - j = Tank[n].Pat; - if (j > 0) - { - k = p % (long) Pattern[j].Length; - i = Tank[n].Node; - NodeHead[i] = Node[i].El*Pattern[j].F[k]; - } - } - } - - /* Update status of pumps with utilization patterns */ - for (n=1; n<=Npumps; n++) - { - j = Pump[n].Upat; - if (j > 0) - { - i = Pump[n].Link; - k = p % (long) Pattern[j].Length; - setlinksetting(i, Pattern[j].F[k], &LinkStatus[i], &LinkSetting[i]); - } - } -} /* End of demands */ - - -int controls() -/* -**--------------------------------------------------------------------- -** Input: none -** Output: number of links whose setting changes -** Purpose: implements simple controls based on time or tank levels -**--------------------------------------------------------------------- -*/ -{ - int i, k, n, reset, setsum; - double h, vplus; - double v1, v2; - double k1, k2; - char s1, s2; - - /* Examine each control statement */ - setsum = 0; - for (i=1; i<=Ncontrols; i++) - { - /* Make sure that link is defined */ - reset = 0; - if ( (k = Control[i].Link) <= 0) continue; - - /* Link is controlled by tank level */ - if ((n = Control[i].Node) > 0 && n > Njuncs) - { - h = NodeHead[n]; - vplus = ABS(NodeDemand[n]); - v1 = tankvolume(n-Njuncs,h); - v2 = tankvolume(n-Njuncs,Control[i].Grade); - if (Control[i].Type == LOWLEVEL && v1 <= v2 + vplus) - reset = 1; - if (Control[i].Type == HILEVEL && v1 >= v2 - vplus) - reset = 1; - } - - /* Link is time-controlled */ - if (Control[i].Type == TIMER) - { - if (Control[i].Time == Htime) reset = 1; - } - - /* Link is time-of-day controlled */ - if (Control[i].Type == TIMEOFDAY) - { - if ((Htime + Tstart) % SECperDAY == Control[i].Time) reset = 1; - } - - /* Update link status & pump speed or valve setting */ - if (reset == 1) - { - if (LinkStatus[k] <= CLOSED) s1 = CLOSED; - else s1 = OPEN; - s2 = Control[i].Status; - k1 = LinkSetting[k]; - k2 = k1; - if (Link[k].Type > PIPE) k2 = Control[i].Setting; - if (s1 != s2 || k1 != k2) - { - LinkStatus[k] = s2; - LinkSetting[k] = k2; - if (Statflag) writecontrolaction(k,i); - // if (s1 != s2) initlinkflow(k, S[k], K[k]); - setsum++; - } - } - } - return(setsum); -} /* End of controls */ - - -long timestep(void) -/* -**---------------------------------------------------------------- -** Input: none -** Output: returns time step until next change in hydraulics -** Purpose: computes time step to advance hydraulic simulation -**---------------------------------------------------------------- -*/ -{ - long n,t,tstep; - - /* Normal time step is hydraulic time step */ - tstep = Hstep; - - /* Revise time step based on time until next demand period */ - n = ((Htime+Pstart)/Pstep) + 1; /* Next pattern period */ - t = n*Pstep - Htime; /* Time till next period */ - if (t > 0 && t < tstep) tstep = t; - - /* Revise time step based on time until next reporting period */ - t = Rtime - Htime; - if (t > 0 && t < tstep) tstep = t; - - /* Revise time step based on smallest time to fill or drain a tank */ - tanktimestep(&tstep); - - /* Revise time step based on smallest time to activate a control */ - controltimestep(&tstep); - - /* Evaluate rule-based controls (which will also update tank levels) */ - if (Nrules > 0) ruletimestep(&tstep); - else tanklevels(tstep); - return(tstep); -} - - -void tanktimestep(long *tstep) -/* -**----------------------------------------------------------------- -** Input: *tstep = current time step -** Output: *tstep = modified current time step -** Purpose: revises time step based on shortest time to fill or -** drain a tank -**----------------------------------------------------------------- -*/ -{ - int i,n; - double h,q,v; - long t; - - /* (D[n] is net flow rate into (+) or out of (-) tank at node n) */ - for (i=1; i<=Ntanks; i++) - { - if (Tank[i].A == 0.0) continue; /* Skip reservoirs */ - n = Tank[i].Node; - h = NodeHead[n]; /* Current tank grade */ - q = NodeDemand[n]; /* Flow into tank */ - if (ABS(q) <= QZERO) continue; - if (q > 0.0 && h < Tank[i].Hmax) - { - v = Tank[i].Vmax - Tank[i].V; /* Volume to fill */ - } - else if (q < 0.0 && h > Tank[i].Hmin) - { - v = Tank[i].Vmin - Tank[i].V; /* Volume to drain (-) */ - } - else continue; - t = (long)ROUND(v/q); /* Time to fill/drain */ - if (t > 0 && t < *tstep) *tstep = t; - } -} - - -void controltimestep(long *tstep) -/* -**------------------------------------------------------------------ -** Input: *tstep = current time step -** Output: *tstep = modified current time step -** Purpose: revises time step based on shortest time to activate -** a simple control -**------------------------------------------------------------------ -*/ -{ - int i,j,k,n; - double h,q,v; - long t,t1,t2; - - for (i=1; i<=Ncontrols; i++) - { - t = 0; - if ( (n = Control[i].Node) > 0) /* Node control: */ - { - if ((j = n-Njuncs) <= 0) continue; /* Node is a tank */ - h = NodeHead[n]; /* Current tank grade */ - q = NodeDemand[n]; /* Flow into tank */ - if (ABS(q) <= QZERO) continue; - if - ( (h < Control[i].Grade && - Control[i].Type == HILEVEL && /* Tank below hi level */ - q > 0.0) /* & is filling */ - || (h > Control[i].Grade && - Control[i].Type == LOWLEVEL && /* Tank above low level */ - q < 0.0) /* & is emptying */ - ) - { /* Time to reach level */ - v = tankvolume(j,Control[i].Grade)-Tank[j].V; - t = (long)ROUND(v/q); - } - } - - if (Control[i].Type == TIMER) /* Time control: */ - { - if (Control[i].Time > Htime) - t = Control[i].Time - Htime; - } - - if (Control[i].Type == TIMEOFDAY) /* Time-of-day control: */ - { - t1 = (Htime + Tstart) % SECperDAY; - t2 = Control[i].Time; - if (t2 >= t1) t = t2 - t1; - else t = SECperDAY - t1 + t2; - } - - if (t > 0 && t < *tstep) /* Revise time step */ - { - /* Check if rule actually changes link status or setting */ - k = Control[i].Link; - if ( - (Link[k].Type > PIPE && LinkSetting[k] != Control[i].Setting) || - (LinkStatus[k] != Control[i].Status) - ) - *tstep = t; - } - } -} /* End of timestep */ - - -void ruletimestep(long *tstep) -/* -**-------------------------------------------------------------- -** Input: *tstep = current time step (sec) -** Output: *tstep = modified time step -** Purpose: updates next time step by checking if any rules -** will fire before then; also updates tank levels. -**-------------------------------------------------------------- -*/ -{ - long tnow, /* Start of time interval for rule evaluation */ - tmax, /* End of time interval for rule evaluation */ - dt, /* Normal time increment for rule evaluation */ - dt1; /* Actual time increment for rule evaluation */ - - /* Find interval of time for rule evaluation */ - tnow = Htime; - tmax = tnow + *tstep; - - /* If no rules, then time increment equals current time step */ - if (Nrules == 0) - { - dt = *tstep; - dt1 = dt; - } - - /* Otherwise, time increment equals rule evaluation time step and */ - /* first actual increment equals time until next even multiple of */ - /* Rulestep occurs. */ - else - { - dt = Rulestep; - dt1 = Rulestep - (tnow % Rulestep); - } - - /* Make sure time increment is no larger than current time step */ - dt = MIN(dt, *tstep); - dt1 = MIN(dt1, *tstep); - if (dt1 == 0) dt1 = dt; - - /* Step through time, updating tank levels, until either */ - /* a rule fires or we reach the end of evaluation period. */ - /* - ** Note: we are updating the global simulation time (Htime) - ** here because it is used by functions in RULES.C - ** to evaluate rules when checkrules() is called. - ** It is restored to its original value after the - ** rule evaluation process is completed (see below). - ** Also note that dt1 will equal dt after the first - ** time increment is taken. - */ - do - { - Htime += dt1; /* Update simulation clock */ - tanklevels(dt1); /* Find new tank levels */ - if (checkrules(dt1)) break; /* Stop if rules fire */ - dt = MIN(dt, tmax - Htime); /* Update time increment */ - dt1 = dt; /* Update actual increment */ - } while (dt > 0); /* Stop if no time left */ - - /* Compute an updated simulation time step (*tstep) */ - /* and return simulation time to its original value */ - *tstep = Htime - tnow; - Htime = tnow; -} - - -void addenergy(long hstep) -/* -**------------------------------------------------------------- -** Input: hstep = time step (sec) -** Output: none -** Purpose: accumulates pump energy usage -**------------------------------------------------------------- -*/ -{ - int i,j,k; - long m,n; - double c0,c, /* Energy cost (cost/kwh) */ - f0, /* Energy cost factor */ - dt, /* Time interval (hr) */ - e, /* Pump efficiency (fraction) */ - q, /* Pump flow (cfs) */ - p, /* Pump energy (kw) */ - psum = 0.0; /* Total energy (kw) */ - - /* Determine current time interval in hours */ - if (Dur == 0) dt = 1.0; - else if (Htime < Dur) dt = (double) hstep / 3600.0; - else dt = 0.0; - if (dt == 0.0) return; - n = (Htime+Pstart)/Pstep; - - /* Compute default energy cost at current time */ - c0 = Ecost; - f0 = 1.0; - if (Epat > 0) - { - m = n % (long)Pattern[Epat].Length; - f0 = Pattern[Epat].F[m]; - } - - /* Examine each pump */ - for (j=1; j<=Npumps; j++) - { - /* Skip closed pumps */ - k = Pump[j].Link; - if (LinkStatus[k] <= CLOSED) continue; - q = MAX(QZERO, ABS(Q[k])); - - /* Find pump-specific energy cost */ - if (Pump[j].Ecost > 0.0) c = Pump[j].Ecost; - else c = c0; - - if ( (i = Pump[j].Epat) > 0) - { - m = n % (long)Pattern[i].Length; - c *= Pattern[i].F[m]; - } - else c *= f0; - - /* Find pump energy & efficiency */ - getenergy(k,&p,&e); - psum += p; - - /* Update pump's cumulative statistics */ - Pump[j].Energy[0] += dt; /* Time on-line */ - Pump[j].Energy[1] += e*dt; /* Effic.-hrs */ - Pump[j].Energy[2] += p/q*dt; /* kw/cfs-hrs */ - Pump[j].Energy[3] += p*dt; /* kw-hrs */ - Pump[j].Energy[4] = MAX(Pump[j].Energy[4],p); - Pump[j].Energy[5] += c*p*dt; /* cost-hrs. */ - } - - /* Update maximum kw value */ - Emax = MAX(Emax,psum); -} /* End of pumpenergy */ - - -void getenergy(int k, double *kw, double *eff) -/* -**---------------------------------------------------------------- -** Input: k = link index -** Output: *kw = kwatt energy used -** *eff = efficiency (pumps only) -** Purpose: computes flow energy associated with link k -**---------------------------------------------------------------- -*/ -{ - int i,j; - double dh, q, e; - -/*** Updated 6/24/02 ***/ - /* No energy if link is closed */ - if (LinkStatus[k] <= CLOSED) - { - *kw = 0.0; - *eff = 0.0; - return; - } -/*** End of update ***/ - - /* Determine flow and head difference */ - q = ABS(Q[k]); - dh = ABS(NodeHead[Link[k].N1] - NodeHead[Link[k].N2]); - - /* For pumps, find effic. at current flow */ - if (Link[k].Type == PUMP) - { - j = PUMPINDEX(k); - e = Epump; - if ( (i = Pump[j].Ecurve) > 0) - e = interp(Curve[i].Npts,Curve[i].X,Curve[i].Y,q*Ucf[FLOW]); - e = MIN(e, 100.0); - e = MAX(e, 1.0); - e /= 100.0; - } - else e = 1.0; - - /* Compute energy */ - *kw = dh*q*SpGrav/8.814/e*KWperHP; - *eff = e; -} - - -void tanklevels(long tstep) -/* -**---------------------------------------------------------------- -** Input: tstep = current time step -** Output: none -** Purpose: computes new water levels in tanks after current -** time step -**---------------------------------------------------------------- -*/ -{ - int i,n; - double dv; - - for (i=1; i<=Ntanks; i++) - { - - /* Skip reservoirs */ - if (Tank[i].A == 0.0) continue; - - /* Update the tank's volume & water elevation */ - n = Tank[i].Node; - dv = NodeDemand[n]*tstep; - Tank[i].V += dv; - - /*** Updated 6/24/02 ***/ - /* Check if tank full/empty within next second */ - if (Tank[i].V + NodeDemand[n] >= Tank[i].Vmax) { - Tank[i].V = Tank[i].Vmax; - } - else if (Tank[i].V - NodeDemand[n] <= Tank[i].Vmin) { - Tank[i].V = Tank[i].Vmin; - } - NodeHead[n] = tankgrade(i,Tank[i].V); - } -} /* End of tanklevels */ - - -double tankvolume(int i, double h) -/* -**-------------------------------------------------------------------- -** Input: i = tank index -** h = water elevation in tank -** Output: returns water volume in tank -** Purpose: finds water volume in tank i corresponding to elev. h. -**-------------------------------------------------------------------- -*/ -{ - int j; - - /* Use level*area if no volume curve */ - j = Tank[i].Vcurve; - if (j == 0) return(Tank[i].Vmin + (h - Tank[i].Hmin)*Tank[i].A); - - /* If curve exists, interpolate on h to find volume v */ - /* remembering that volume curve is in original units.*/ - else return(interp(Curve[j].Npts, Curve[j].X, Curve[j].Y, - (h-Node[Tank[i].Node].El)*Ucf[HEAD])/Ucf[VOLUME]); - -} /* End of tankvolume */ - - -double tankgrade(int i, double v) -/* -**------------------------------------------------------------------- -** Input: i = tank index -** v = volume in tank -** Output: returns water level in tank -** Purpose: finds water level in tank i corresponding to volume v. -**------------------------------------------------------------------- -*/ -{ - int j; - - /* Use area if no volume curve */ - j = Tank[i].Vcurve; - if (j == 0) return(Tank[i].Hmin + (v - Tank[i].Vmin)/Tank[i].A); - - /* If curve exists, interpolate on volume (originally the Y-variable */ - /* but used here as the X-variable) to find new level above bottom. */ - /* Remember that volume curve is stored in original units. */ - else return(Node[Tank[i].Node].El + - interp(Curve[j].Npts, Curve[j].Y, Curve[j].X, v*Ucf[VOLUME])/Ucf[HEAD]); - -} /* End of tankgrade */ - - -int netsolve(int *iter, double *relerr) -/* -**------------------------------------------------------------------- -** Input: none -** Output: *iter = # of iterations to reach solution -** *relerr = convergence error in solution -** returns error code -** Purpose: solves network nodal equations for heads and flows -** using Todini's Gradient algorithm -** -*** Updated 9/7/00 *** -*** Updated 2.00.11 *** -*** Updated 2.00.12 *** -** Notes: Status checks on CVs, pumps and pipes to tanks are made -** every CheckFreq iteration, up until MaxCheck iterations -** are reached. Status checks on control valves are made -** every iteration if DampLimit = 0 or only when the -** convergence error is at or below DampLimit. If DampLimit -** is > 0 then future computed flow changes are only 60% of -** their full value. A complete status check on all links -** is made when convergence is achieved. If convergence is -** not achieved in MaxIter trials and ExtraIter > 0 then -** another ExtraIter trials are made with no status changes -** made to any links and a warning message is generated. -** -** This procedure calls linsolve() which appears in SMATRIX.C. -**------------------------------------------------------------------- -*/ -{ - int i; /* Node index */ - int errcode = 0; /* Node causing solution error */ - int nextcheck; /* Next status check trial */ - int maxtrials; /* Max. trials for convergence */ - double newerr; /* New convergence error */ - int valveChange; /* Valve status change flag */ - int statChange; - - /* Initialize status checking & relaxation factor */ - nextcheck = CheckFreq; - RelaxFactor = 1.0; - - /* Repeat iterations until convergence or trial limit is exceeded. */ - /* (ExtraIter used to increase trials in case of status cycling.) */ - if (Statflag == FULL) writerelerr(0,0); - maxtrials = MaxIter; - if (ExtraIter > 0) maxtrials += ExtraIter; - *iter = 1; - while (*iter <= maxtrials) - { - /* - ** Compute coefficient matrices A & F and solve A*H = F - ** where H = heads, A = Jacobian coeffs. derived from - ** head loss gradients, & F = flow correction terms. - ** Solution for H is returned in F from call to linsolve(). - */ - newcoeffs(); - errcode = linsolve(Njuncs,Aii,Aij,F); - - /* Take action depending on error code */ - if (errcode < 0) break; /* Memory allocation problem */ - if (errcode > 0) /* Ill-conditioning problem */ - { - /* If control valve causing problem, fix its status & continue, */ - /* otherwise end the iterations with no solution. */ - if (badvalve(Order[errcode])) continue; - else break; - } - - /* Update current solution. */ - /* (Row[i] = row of solution matrix corresponding to node i). */ - for (i=1; i<=Njuncs; i++) NodeHead[i] = F[Row[i]]; /* Update heads */ - newerr = newflows(); /* Update flows */ - *relerr = newerr; - - /* Write convergence error to status report if called for */ - if (Statflag == FULL) writerelerr(*iter,*relerr); - - /* Apply solution damping & check for change in valve status */ - RelaxFactor = 1.0; - valveChange = FALSE; - if ( DampLimit > 0.0 ) - { - if( *relerr <= DampLimit ) - { - RelaxFactor = 0.6; - valveChange = valvestatus(); - } - } - else valveChange = valvestatus(); - - /* Check for convergence */ - if (*relerr <= Hacc) - { - /* We have convergence. Quit if we are into extra iterations. */ - if (*iter > MaxIter) break; - - /* Quit if no status changes occur. */ - statChange = FALSE; - if (valveChange) statChange = TRUE; - if (linkstatus()) statChange = TRUE; - if (pswitch()) statChange = TRUE; - if (!statChange) break; - - /* We have a status change so continue the iterations */ - nextcheck = *iter + CheckFreq; - } - - /* No convergence yet. See if its time for a periodic status */ - /* check on pumps, CV's, and pipes connected to tanks. */ - else if (*iter <= MaxCheck && *iter == nextcheck) - { - linkstatus(); - nextcheck += CheckFreq; - } - (*iter)++; - } - - /* Iterations ended. Report any errors. */ - if (errcode < 0) errcode = 101; /* Memory allocation error */ - else if (errcode > 0) - { - writehyderr(Order[errcode]); /* Ill-conditioned eqns. error */ - errcode = 110; - } - - /* Add any emitter flows to junction demands */ - for (i=1; i<=Njuncs; i++) NodeDemand[i] += E[i]; - return(errcode); -} /* End of netsolve */ - - -int badvalve(int n) -/* -**----------------------------------------------------------------- -** Input: n = node index -** Output: returns 1 if node n belongs to an active control valve, -** 0 otherwise -** Purpose: determines if a node belongs to an active control valve -** whose setting causes an inconsistent set of eqns. If so, -** the valve status is fixed open and a warning condition -** is generated. -**----------------------------------------------------------------- -*/ -{ - int i,k,n1,n2; - for (i=1; i<=Nvalves; i++) - { - k = Valve[i].Link; - n1 = Link[k].N1; - n2 = Link[k].N2; - if (n == n1 || n == n2) - { - if (Link[k].Type == PRV || - Link[k].Type == PSV || - Link[k].Type == FCV) - { - if (LinkStatus[k] == ACTIVE) - { - if (Statflag == FULL) - { - sprintf(Msg,FMT61,clocktime(Atime,Htime),Link[k].ID); - writeline(Msg); - } - if (Link[k].Type == FCV) LinkStatus[k] = XFCV; - else LinkStatus[k] = XPRESSURE; - return(1); - } - } - return(0); - } - } - return(0); -} - - -int valvestatus() -/* -**----------------------------------------------------------------- -** Input: none -** Output: returns 1 if any pressure or flow control valve //(2.00.11 - LR) -** changes status, 0 otherwise //(2.00.11 - LR) -** Purpose: updates status for PRVs & PSVs whose status //(2.00.12 - LR) -** is not fixed to OPEN/CLOSED -**----------------------------------------------------------------- -*/ -{ - int change = FALSE, /* Status change flag */ - i,k, /* Valve & link indexes */ - n1,n2; /* Start & end nodes */ - char s; /* Valve status settings */ - double hset; /* Valve head setting */ - - for (i=1; i<=Nvalves; i++) /* Examine each valve */ - { - k = Valve[i].Link; /* Link index of valve */ - if (LinkSetting[k] == MISSING) continue; /* Valve status fixed */ - n1 = Link[k].N1; /* Start & end nodes */ - n2 = Link[k].N2; - s = LinkStatus[k]; /* Save current status */ - -// if (s != CLOSED /* No change if flow is */ //(2.00.11 - LR) -// && ABS(Q[k]) < Qtol) continue; /* negligible. */ //(2.00.11 - LR) - - switch (Link[k].Type) /* Evaluate new status: */ - { - case PRV: hset = Node[n2].El + LinkSetting[k]; - LinkStatus[k] = prvstatus(k,s,hset,NodeHead[n1],NodeHead[n2]); - break; - case PSV: hset = Node[n1].El + LinkSetting[k]; - LinkStatus[k] = psvstatus(k,s,hset,NodeHead[n1],NodeHead[n2]); - break; - -//// FCV status checks moved back into the linkstatus() function //// //(2.00.12 - LR) -// case FCV: S[k] = fcvstatus(k,s,NodeHead[n1],NodeHead[n2]); //(2.00.12 - LR) -// break; //(2.00.12 - LR) - - default: continue; - } - -/*** Updated 9/7/00 ***/ - /* Do not reset flow in valve if its status changes. */ - /* This strategy improves convergence. */ - - /* Check for status change */ - if (s != LinkStatus[k]) - { - if (Statflag == FULL) writestatchange(k,s,LinkStatus[k]); - change = TRUE; - } - } - return(change); -} /* End of valvestatus() */ - - -/*** Updated 9/7/00 ***/ -int linkstatus() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns 1 if any link changes status, 0 otherwise -** Purpose: determines new status for pumps, CVs, FCVs & pipes //(2.00.12 - LR) -** to tanks. -**-------------------------------------------------------------- -*/ -{ - int change = FALSE, /* Status change flag */ - k, /* Link index */ - n1, /* Start node index */ - n2; /* End node index */ - double dh; /* Head difference */ - char status; /* Current status */ - - /* Examine each link */ - for (k=1; k<=Nlinks; k++) - { - n1 = Link[k].N1; - n2 = Link[k].N2; - dh = NodeHead[n1] - NodeHead[n2]; - - /* Re-open temporarily closed links (status = XHEAD or TEMPCLOSED) */ - status = LinkStatus[k]; - if (status == XHEAD || status == TEMPCLOSED) LinkStatus[k] = OPEN; - - /* Check for status changes in CVs and pumps */ - if (Link[k].Type == CV) LinkStatus[k] = cvstatus(LinkStatus[k],dh,Q[k]); - if (Link[k].Type == PUMP && LinkStatus[k] >= OPEN && LinkSetting[k] > 0.0) //(2.00.11 - LR) - LinkStatus[k] = pumpstatus(k,-dh); - - /* Check for status changes in non-fixed FCVs */ - if (Link[k].Type == FCV && LinkSetting[k] != MISSING) //(2.00.12 - LR)// - LinkStatus[k] = fcvstatus(k,status,NodeHead[n1],NodeHead[n2]); //(2.00.12 - LR)// - - /* Check for flow into (out of) full (empty) tanks */ - if (n1 > Njuncs || n2 > Njuncs) tankstatus(k,n1,n2); - - /* Note change in link status; do not revise link flow */ //(2.00.11 - LR) - if (status != LinkStatus[k]) - { - change = TRUE; - if (Statflag == FULL) writestatchange(k,status,LinkStatus[k]); - - //if (S[k] <= CLOSED) Q[k] = QZERO; //(2.00.11 - LR) - //else setlinkflow(k, dh); //(2.00.11 - LR) - } - } - return(change); -} /* End of linkstatus */ - - -char cvstatus(char s, double dh, double q) -/* -**-------------------------------------------------- -** Input: s = current status -** dh = headloss -** q = flow -** Output: returns new link status -** Purpose: updates status of a check valve. -**-------------------------------------------------- -*/ -{ - /* Prevent reverse flow through CVs */ - if (ABS(dh) > Htol) - { - if (dh < -Htol) return(CLOSED); - else if (q < -Qtol) return(CLOSED); - else return(OPEN); - } - else - { - if (q < -Qtol) return(CLOSED); - else return(s); - } -} - - -char pumpstatus(int k, double dh) -/* -**-------------------------------------------------- -** Input: k = link index -** dh = head gain -** Output: returns new pump status -** Purpose: updates status of an open pump. -**-------------------------------------------------- -*/ -{ - int p; - double hmax; - - /* Prevent reverse flow through pump */ - p = PUMPINDEX(k); - if (Pump[p].Ptype == CONST_HP) hmax = BIG; - else hmax = SQR(LinkSetting[k])*Pump[p].Hmax; - if (dh > hmax + Htol) return(XHEAD); - -/*** Flow higher than pump curve no longer results in a status change ***/ //(2.00.11 - LR) - /* Check if pump cannot deliver flow */ //(2.00.11 - LR) - //if (Q[k] > K[k]*Pump[p].Qmax + Qtol) return(XFLOW); //(2.00.11 - LR) - return(OPEN); -} - - -char prvstatus(int k, char s, double hset, double h1, double h2) -/* -**----------------------------------------------------------- -** Input: k = link index -** s = current status -** hset = valve head setting -** h1 = head at upstream node -** h2 = head at downstream node -** Output: returns new valve status -** Purpose: updates status of a pressure reducing valve. -**----------------------------------------------------------- -*/ -{ - char status; /* New valve status */ - double hml; /* Minor headloss */ - double htol = Htol; - - status = s; - if (LinkSetting[k] == MISSING) return(status); /* Status fixed by user */ - hml = Link[k].Km*SQR(Q[k]); /* Head loss when open */ - -/*** Status rules below have changed. ***/ //(2.00.11 - LR) - - switch (s) - { - case ACTIVE: - if (Q[k] < -Qtol) status = CLOSED; - else if (h1-hml < hset-htol) status = OPEN; //(2.00.11 - LR) - else status = ACTIVE; - break; - case OPEN: - if (Q[k] < -Qtol) status = CLOSED; - else if (h2 >= hset+htol) status = ACTIVE; //(2.00.11 - LR) - else status = OPEN; - break; - case CLOSED: - if ( h1 >= hset+htol //(2.00.11 - LR) - && h2 < hset-htol) status = ACTIVE; //(2.00.11 - LR) - else if (h1 < hset-htol //(2.00.11 - LR) - && h1 > h2+htol) status = OPEN; //(2.00.11 - LR) - else status = CLOSED; - break; - case XPRESSURE: - if (Q[k] < -Qtol) status = CLOSED; - break; - } - return(status); -} - - -char psvstatus(int k, char s, double hset, double h1, double h2) -/* -**----------------------------------------------------------- -** Input: k = link index -** s = current status -** hset = valve head setting -** h1 = head at upstream node -** h2 = head at downstream node -** Output: returns new valve status -** Purpose: updates status of a pressure sustaining valve. -**----------------------------------------------------------- -*/ -{ - char status; /* New valve status */ - double hml; /* Minor headloss */ - double htol = Htol; - - status = s; - if (LinkSetting[k] == MISSING) return(status); /* Status fixed by user */ - hml = Link[k].Km*SQR(Q[k]); /* Head loss when open */ - -/*** Status rules below have changed. ***/ //(2.00.11 - LR) - - switch (s) - { - case ACTIVE: - if (Q[k] < -Qtol) status = CLOSED; - else if (h2+hml > hset+htol) status = OPEN; //(2.00.11 - LR) - else status = ACTIVE; - break; - case OPEN: - if (Q[k] < -Qtol) status = CLOSED; - else if (h1 < hset-htol) status = ACTIVE; //(2.00.11 - LR) - else status = OPEN; - break; - case CLOSED: - if (h2 > hset+htol //(2.00.11 - LR) - && h1 > h2+htol) status = OPEN; //(2.00.11 - LR) - else if (h1 >= hset+htol //(2.00.11 - LR) - && h1 > h2+htol) status = ACTIVE; //(2.00.11 - LR) - else status = CLOSED; - break; - case XPRESSURE: - if (Q[k] < -Qtol) status = CLOSED; - break; - } - return(status); -} - - -char fcvstatus(int k, char s, double h1, double h2) -/* -**----------------------------------------------------------- -** Input: k = link index -** s = current status -** h1 = head at upstream node -** h2 = head at downstream node -** Output: returns new valve status -** Purpose: updates status of a flow control valve. -** -** Valve status changes to XFCV if flow reversal. -** If current status is XFCV and current flow is -** above setting, then valve becomes active. -** If current status is XFCV, and current flow -** positive but still below valve setting, then -** status remains same. -**----------------------------------------------------------- -*/ -{ - char status; /* New valve status */ - status = s; - if (h1 - h2 < -Htol) { - status = XFCV; - } - else if ( Q[k] < -Qtol ) { - status = XFCV; //(2.00.11 - LR) - } - else if (s == XFCV && Q[k] >= LinkSetting[k]) { - status = ACTIVE; - } - return(status); -} - - -/*** Updated 9/7/00 ***/ -/*** Updated 11/19/01 ***/ -void tankstatus(int k, int n1, int n2) -/* -**---------------------------------------------------------------- -** Input: k = link index -** n1 = start node of link -** n2 = end node of link -** Output: none -** Purpose: closes link flowing into full or out of empty tank -**---------------------------------------------------------------- -*/ -{ - int i,n; - double h,q; - - /* Make node n1 be the tank */ - q = Q[k]; - i = n1 - Njuncs; - if (i <= 0) - { - i = n2 - Njuncs; - if (i <= 0) return; - n = n1; - n1 = n2; - n2 = n; - q = -q; - } - h = NodeHead[n1] - NodeHead[n2]; - - /* Skip reservoirs & closed links */ - if (Tank[i].A == 0.0 || LinkStatus[k] <= CLOSED) return; - - /* If tank full, then prevent flow into it */ - if (NodeHead[n1] >= Tank[i].Hmax - Htol) - { - - /* Case 1: Link is a pump discharging into tank */ - if ( Link[k].Type == PUMP ) - { - if (Link[k].N2 == n1) LinkStatus[k] = TEMPCLOSED; - } - - /* Case 2: Downstream head > tank head */ - /* (i.e., an open outflow check valve would close) */ - else if (cvstatus(OPEN, h, q) == CLOSED) LinkStatus[k] = TEMPCLOSED; - } - - /* If tank empty, then prevent flow out of it */ - if (NodeHead[n1] <= Tank[i].Hmin + Htol) - { - - /* Case 1: Link is a pump discharging from tank */ - if ( Link[k].Type == PUMP) - { - if (Link[k].N1 == n1) LinkStatus[k] = TEMPCLOSED; - } - - /* Case 2: Tank head > downstream head */ - /* (i.e., a closed outflow check valve would open) */ - else if (cvstatus(CLOSED, h, q) == OPEN) LinkStatus[k] = TEMPCLOSED; - } -} /* End of tankstatus */ - - -int pswitch() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns 1 if status of any link changes, 0 if not -** Purpose: adjusts settings of links controlled by junction -** pressures after a hydraulic solution is found -**-------------------------------------------------------------- -*/ -{ - int i, /* Control statement index */ - k, /* Link being controlled */ - n, /* Node controlling link */ - reset, /* Flag on control conditions */ - change, /* Flag for status or setting change */ - anychange = 0; /* Flag for 1 or more changes */ - char s; /* Current link status */ - - /* Check each control statement */ - for (i=1; i<=Ncontrols; i++) - { - reset = 0; - if ( (k = Control[i].Link) <= 0) continue; - - /* Determine if control based on a junction, not a tank */ - if ( (n = Control[i].Node) > 0 && n <= Njuncs) - { - /* Determine if control conditions are satisfied */ - if (Control[i].Type == LOWLEVEL - && NodeHead[n] <= Control[i].Grade + Htol ) - reset = 1; - if (Control[i].Type == HILEVEL - && NodeHead[n] >= Control[i].Grade - Htol ) - reset = 1; - } - - /* Determine if control forces a status or setting change */ - if (reset == 1) - { - change = 0; - s = LinkStatus[k]; - if (Link[k].Type == PIPE) - { - if (s != Control[i].Status) change = 1; - } - if (Link[k].Type == PUMP) - { - if (LinkSetting[k] != Control[i].Setting) change = 1; - } - if (Link[k].Type >= PRV) - { - if (LinkSetting[k] != Control[i].Setting) change = 1; - else if (LinkSetting[k] == MISSING && - s != Control[i].Status) change = 1; - } - - /* If a change occurs, update status & setting */ - if (change) - { - LinkStatus[k] = Control[i].Status; - if (Link[k].Type > PIPE) LinkSetting[k] = Control[i].Setting; - if (Statflag == FULL) writestatchange(k,s,LinkStatus[k]); - - /* Re-set flow if status has changed */ -// if (S[k] != s) initlinkflow(k, S[k], K[k]); - anychange = 1; - } - } - } - return(anychange); -} /* End of pswitch */ - - -double newflows() -/* -**---------------------------------------------------------------- -** Input: none -** Output: returns solution convergence error -** Purpose: updates link flows after new nodal heads computed -**---------------------------------------------------------------- -*/ -{ - double dh, /* Link head loss */ - dq; /* Link flow change */ - double dqsum, /* Network flow change */ - qsum; /* Network total flow */ - int k, n, n1, n2; - - /* Initialize net inflows (i.e., demands) at tanks */ - for (n=Njuncs+1; n <= Nnodes; n++) NodeDemand[n] = 0.0; - - /* Initialize sum of flows & corrections */ - qsum = 0.0; - dqsum = 0.0; - - /* Update flows in all links */ - for (k=1; k<=Nlinks; k++) - { - - /* - ** Apply flow update formula: - ** dq = Y - P*(new head loss) - ** P = 1/(dh/dq) - ** Y = P*(head loss based on current flow) - ** where P & Y were computed in newcoeffs(). - */ - - n1 = Link[k].N1; - n2 = Link[k].N2; - dh = NodeHead[n1] - NodeHead[n2]; - dq = Y[k] - P[k]*dh; - - /* Adjust flow change by the relaxation factor */ //(2.00.11 - LR) - dq *= RelaxFactor; //(2.00.11 - LR) - - /* Prevent flow in constant HP pumps from going negative */ - if (Link[k].Type == PUMP) - { - n = PUMPINDEX(k); - if (Pump[n].Ptype == CONST_HP && dq > Q[k]) dq = Q[k]/2.0; - } - Q[k] -= dq; - - /* Update sum of absolute flows & flow corrections */ - qsum += ABS(Q[k]); - dqsum += ABS(dq); - - /* Update net flows to tanks */ - if ( LinkStatus[k] > CLOSED ) //(2.00.12 - LR) - { - if (n1 > Njuncs) NodeDemand[n1] -= Q[k]; - if (n2 > Njuncs) NodeDemand[n2] += Q[k]; - } - - } - - /* Update emitter flows */ - for (k=1; k<=Njuncs; k++) - { - if (Node[k].Ke == 0.0) continue; - dq = emitflowchange(k); - E[k] -= dq; - qsum += ABS(E[k]); - dqsum += ABS(dq); - } - - /* Return ratio of total flow corrections to total flow */ - if (qsum > Hacc) return(dqsum/qsum); - else return(dqsum); - -} /* End of newflows */ - - -void newcoeffs() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: computes coefficients of linearized network eqns. -**-------------------------------------------------------------- -*/ -{ - memset(Aii,0,(Nnodes+1)*sizeof(double)); /* Reset coeffs. to 0 */ - memset(Aij,0,(Ncoeffs+1)*sizeof(double)); - memset(F,0,(Nnodes+1)*sizeof(double)); - memset(X,0,(Nnodes+1)*sizeof(double)); - memset(P,0,(Nlinks+1)*sizeof(double)); - memset(Y,0,(Nlinks+1)*sizeof(double)); - linkcoeffs(); /* Compute link coeffs. */ - emittercoeffs(); /* Compute emitter coeffs.*/ - nodecoeffs(); /* Compute node coeffs. */ - valvecoeffs(); /* Compute valve coeffs. */ -} /* End of newcoeffs */ - - -void linkcoeffs() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: computes solution matrix coefficients for links -**-------------------------------------------------------------- -*/ -{ - int k,n1,n2; - - /* Examine each link of network */ - for (k=1; k<=Nlinks; k++) - { - n1 = Link[k].N1; /* Start node of link */ - n2 = Link[k].N2; /* End node of link */ - - /* Compute P[k] = 1 / (dh/dQ) and Y[k] = h * P[k] */ - /* for each link k (where h = link head loss). */ - /* FCVs, PRVs, and PSVs with non-fixed status */ - /* are analyzed later. */ - - switch (Link[k].Type) - { - case CV: - case PIPE: pipecoeff(k); break; - case PUMP: pumpcoeff(k); break; - case PBV: pbvcoeff(k); break; - case TCV: tcvcoeff(k); break; - case GPV: gpvcoeff(k); break; - case FCV: - case PRV: - case PSV: /* If valve status fixed then treat as pipe */ - /* otherwise ignore the valve for now. */ - if (LinkSetting[k] == MISSING) valvecoeff(k); //pipecoeff(k); //(2.00.11 - LR) - else continue; - break; - default: continue; - } - - /* Update net nodal inflows (X), solution matrix (A) and RHS array (F) */ - /* (Use covention that flow out of node is (-), flow into node is (+)) */ - X[n1] -= Q[k]; - X[n2] += Q[k]; - Aij[Ndx[k]] -= P[k]; /* Off-diagonal coeff. */ - if (n1 <= Njuncs) /* Node n1 is junction */ - { - Aii[Row[n1]] += P[k]; /* Diagonal coeff. */ - F[Row[n1]] += Y[k]; /* RHS coeff. */ - } - else F[Row[n2]] += (P[k]*NodeHead[n1]); /* Node n1 is a tank */ - if (n2 <= Njuncs) /* Node n2 is junction */ - { - Aii[Row[n2]] += P[k]; /* Diagonal coeff. */ - F[Row[n2]] -= Y[k]; /* RHS coeff. */ - } - else F[Row[n1]] += (P[k]*NodeHead[n2]); /* Node n2 is a tank */ - } -} /* End of linkcoeffs */ - - -void nodecoeffs() -/* -**---------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: completes calculation of nodal flow imbalance (X) -** & flow correction (F) arrays -**---------------------------------------------------------------- -*/ -{ - int i; - - /* For junction nodes, subtract demand flow from net */ - /* flow imbalance & add imbalance to RHS array F. */ - for (i=1; i<=Njuncs; i++) - { - X[i] -= NodeDemand[i]; - F[Row[i]] += X[i]; - } -} /* End of nodecoeffs */ - - -void valvecoeffs() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: computes matrix coeffs. for PRVs, PSVs & FCVs -** whose status is not fixed to OPEN/CLOSED -**-------------------------------------------------------------- -*/ -{ - int i,k,n1,n2; - - for (i=1; i<=Nvalves; i++) /* Examine each valve */ - { - k = Valve[i].Link; /* Link index of valve */ - if (LinkSetting[k] == MISSING) continue; /* Valve status fixed */ - n1 = Link[k].N1; /* Start & end nodes */ - n2 = Link[k].N2; - switch (Link[k].Type) /* Call valve-specific */ - { /* function */ - case PRV: prvcoeff(k,n1,n2); break; - case PSV: psvcoeff(k,n1,n2); break; - case FCV: fcvcoeff(k,n1,n2); break; - default: continue; - } - } -} /* End of valvecoeffs */ - - -void emittercoeffs() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: computes matrix coeffs. for emitters -** -** Note: Emitters consist of a fictitious pipe connected to -** a fictitious reservoir whose elevation equals that -** of the junction. The headloss through this pipe is -** Ke*(Flow)^Qexp, where Ke = emitter headloss coeff. -**-------------------------------------------------------------- -*/ -{ - int i; - double ke; - double p; - double q; - double y; - double z; - for (i=1; i<=Njuncs; i++) - { - if (Node[i].Ke == 0.0) continue; - ke = MAX(CSMALL, Node[i].Ke); - q = E[i]; - z = ke*pow(ABS(q),Qexp); - p = Qexp*z/ABS(q); - if (p < RQtol) p = 1.0/RQtol; - else p = 1.0/p; - y = SGN(q)*z*p; - Aii[Row[i]] += p; - F[Row[i]] += y + p*Node[i].El; - X[i] -= q; - } -} - - -double emitflowchange(int i) -/* -**-------------------------------------------------------------- -** Input: i = node index -** Output: returns change in flow at an emitter node -** Purpose: computes flow change at an emitter node -**-------------------------------------------------------------- -*/ -{ - double ke, p; - ke = MAX(CSMALL, Node[i].Ke); - p = Qexp*ke*pow(ABS(E[i]),(Qexp-1.0)); - if (p < RQtol) - p = 1/RQtol; - else - p = 1.0/p; - return(E[i]/Qexp - p*(NodeHead[i] - Node[i].El)); -} - - -void pipecoeff(int k) -/* -**-------------------------------------------------------------- -** Input: k = link index -** Output: none -** Purpose: computes P & Y coefficients for pipe k -** -** P = inverse head loss gradient = 1/(dh/dQ) -** Y = flow correction term = h*P -**-------------------------------------------------------------- -*/ -{ - double hpipe, /* Normal head loss */ - hml, /* Minor head loss */ - ml, /* Minor loss coeff. */ - p, /* q*(dh/dq) */ - q, /* Abs. value of flow */ - r, /* Resistance coeff. */ - r1, /* Total resistance factor */ - f, /* D-W friction factor */ - dfdq; /* Derivative of fric. fact. */ - - /* For closed pipe use headloss formula: h = CBIG*q */ - if (LinkStatus[k] <= CLOSED) - { - P[k] = 1.0/CBIG; - Y[k] = Q[k]; - return; - } - - /* Evaluate headloss coefficients */ - q = ABS(Q[k]); /* Absolute flow */ - ml = Link[k].Km; /* Minor loss coeff. */ - r = Link[k].R; /* Resistance coeff. */ - f = 1.0; /* D-W friction factor */ - if (Formflag == DW) f = DWcoeff(k,&dfdq); - r1 = f*r+ml; - - /* Use large P coefficient for small flow resistance product */ - if (r1*q < RQtol) - { - P[k] = 1.0/RQtol; - Y[k] = Q[k]/Hexp; - return; - } - - /* Compute P and Y coefficients */ - if (Formflag == DW) /* D-W eqn. */ - { - hpipe = r1*SQR(q); /* Total head loss */ - p = 2.0*r1*q; /* |dh/dQ| */ - /* + dfdq*r*q*q;*/ /* Ignore df/dQ term */ - p = 1.0/p; - P[k] = p; - Y[k] = SGN(Q[k])*hpipe*p; - } - else /* H-W or C-M eqn. */ - { - hpipe = r*pow(q,Hexp); /* Friction head loss */ - p = Hexp*hpipe; /* Q*dh(friction)/dQ */ - if (ml > 0.0) - { - hml = ml*q*q; /* Minor head loss */ - p += 2.0*hml; /* Q*dh(Total)/dQ */ - } - else hml = 0.0; - p = Q[k]/p; /* 1 / (dh/dQ) */ - P[k] = ABS(p); - Y[k] = p*(hpipe + hml); - } -} /* End of pipecoeff */ - - -double DWcoeff(int k, double *dfdq) -/* -**-------------------------------------------------------------- -** Input: k = link index -** Output: returns Darcy-Weisbach friction factor -** Purpose: computes Darcy-Weisbach friction factor -** -** Uses interpolating polynomials developed by -** E. Dunlop for transition flow from 2000 < Re < 4000. -** -** df/dq term is ignored as it slows convergence rate. -**-------------------------------------------------------------- -*/ -{ - double q, /* Abs. value of flow */ - f; /* Friction factor */ - double x1,x2,x3,x4, - y1,y2,y3, - fa,fb,r; - double s,w; - - *dfdq = 0.0; - if (Link[k].Type > PIPE) return(1.0); /* Only apply to pipes */ - q = ABS(Q[k]); - s = Viscos*Link[k].Diam; - w = q/s; /* w = Re(Pi/4) */ - if (w >= A1) /* Re >= 4000; Colebrook Formula */ - { - y1 = A8/pow(w,0.9); - y2 = Link[k].Kc/(3.7*Link[k].Diam) + y1; - y3 = A9*log(y2); - f = 1.0/SQR(y3); - /* *dfdq = (2.0+AA*y1/(y2*y3))*f; */ /* df/dq */ - } - else if (w > A2) /* Re > 2000; Interpolation formula */ - { - y2 = Link[k].Kc/(3.7*Link[k].Diam) + AB; - y3 = A9*log(y2); - fa = 1.0/SQR(y3); - fb = (2.0+AC/(y2*y3))*fa; - r = w/A2; - x1 = 7.0*fa - fb; - x2 = 0.128 - 17.0*fa + 2.5*fb; - x3 = -0.128 + 13.0*fa - (fb+fb); - x4 = r*(0.032 - 3.0*fa + 0.5*fb); - f = x1 + r*(x2 + r*(x3+x4)); - /* *dfdq = (x1 + x1 + r*(3.0*x2 + r*(4.0*x3 + 5.0*x4))); */ - } - else if (w > A4) /* Laminar flow: Hagen-Poiseuille Formula */ - { - f = A3*s/q; - /* *dfdq = A3*s; */ - } - else - { - f = 8.0; - *dfdq = 0.0; - } - return(f); -} /* End of DWcoeff */ - - -/*** Updated 10/25/00 ***/ -/*** Updated 12/29/00 ***/ -void pumpcoeff(int k) -/* -**-------------------------------------------------------------- -** Input: k = link index -** Output: none -** Purpose: computes P & Y coeffs. for pump in link k -**-------------------------------------------------------------- -*/ -{ - int p; /* Pump index */ - double h0, /* Shutoff head */ - q, /* Abs. value of flow */ - r, /* Flow resistance coeff. */ - n; /* Flow exponent coeff. */ - - double setting = LinkSetting[k]; - - /* Use high resistance pipe if pump closed or cannot deliver head */ - if (LinkStatus[k] <= CLOSED || setting == 0.0) - { - //pipecoeff(k); //(2.00.11 - LR) - P[k] = 1.0/CBIG; //(2.00.11 - LR) - Y[k] = Q[k]; //(2.00.11 - LR) - return; - } - - q = ABS(Q[k]); - q = MAX(q,TINY); - p = PUMPINDEX(k); - - /* Get pump curve coefficients for custom pump curve. */ - if (Pump[p].Ptype == CUSTOM) - { - /* Find intercept (h0) & slope (r) of pump curve */ - /* line segment which contains speed-adjusted flow. */ - curvecoeff(Pump[p].Hcurve, q/setting, &h0, &r); - - /* Determine head loss coefficients. */ - Pump[p].H0 = -h0; - Pump[p].R = -r; - Pump[p].N = 1.0; - } - - /* Adjust head loss coefficients for pump speed. */ - h0 = SQR(setting)*Pump[p].H0; - n = Pump[p].N; - r = Pump[p].R*pow(setting,2.0-n); - if (n != 1.0) r = n*r*pow(q,n-1.0); - - /* Compute inverse headloss gradient (P) and flow correction factor (Y) */ - P[k] = 1.0/MAX(r,RQtol); - Y[k] = Q[k]/n + P[k]*h0; -} /* End of pumpcoeff */ - - -/*** Updated 10/25/00 ***/ -/*** Updated 12/29/00 ***/ -void curvecoeff(int i, double q, double *h0, double *r) -/* -**------------------------------------------------------------------- -** Input: i = curve index -** q = flow rate -** Output: *h0 = head at zero flow (y-intercept) -** *r = dHead/dFlow (slope) -** Purpose: computes intercept and slope of head v. flow curve -** at current flow. -**------------------------------------------------------------------- -*/ -{ - int k1, k2, npts; - double *x, *y; - - /* Remember that curve is stored in untransformed units */ - q *= Ucf[FLOW]; - x = Curve[i].X; /* x = flow */ - y = Curve[i].Y; /* y = head */ - npts = Curve[i].Npts; - - /* Find linear segment of curve that brackets flow q */ - k2 = 0; - while (k2 < npts && x[k2] < q) k2++; - if (k2 == 0) k2++; - else if (k2 == npts) k2--; - k1 = k2 - 1; - - /* Compute slope and intercept of this segment */ - *r = (y[k2]-y[k1])/(x[k2]-x[k1]); - *h0 = y[k1] - (*r)*x[k1]; - - /* Convert units */ - *h0 = (*h0)/Ucf[HEAD]; - *r = (*r)*Ucf[FLOW]/Ucf[HEAD]; -} /* End of curvecoeff */ - - -void gpvcoeff(int k) -/* -**-------------------------------------------------------------- -** Input: k = link index -** Output: none -** Purpose: computes P & Y coeffs. for general purpose valve -**-------------------------------------------------------------- -*/ -{ - double h0, /* Headloss curve intercept */ - q, /* Abs. value of flow */ - r; /* Flow resistance coeff. */ - -/*** Updated 9/7/00 ***/ - /* Treat as a pipe if valve closed */ - if (LinkStatus[k] == CLOSED) valvecoeff(k); //pipecoeff(k); //(2.00.11 - LR) - - /* Otherwise utilize headloss curve */ - /* whose index is stored in K */ - else - { - /* Find slope & intercept of headloss curve. */ - q = ABS(Q[k]); - q = MAX(q,TINY); - -/*** Updated 10/25/00 ***/ -/*** Updated 12/29/00 ***/ - curvecoeff((int)ROUND(LinkSetting[k]),q,&h0,&r); - - /* Compute inverse headloss gradient (P) */ - /* and flow correction factor (Y). */ - P[k] = 1.0 / MAX(r,RQtol); - Y[k] = P[k]*(h0 + r*q)*SGN(Q[k]); //(2.00.11 - LR) - } -} - - -void pbvcoeff(int k) -/* -**-------------------------------------------------------------- -** Input: k = link index -** Output: none -** Purpose: computes P & Y coeffs. for pressure breaker valve -**-------------------------------------------------------------- -*/ -{ - /* If valve fixed OPEN or CLOSED then treat as a pipe */ - if (LinkSetting[k] == MISSING || LinkSetting[k] == 0.0) valvecoeff(k); //pipecoeff(k); //(2.00.11 - LR) - - /* If valve is active */ - else - { - /* Treat as a pipe if minor loss > valve setting */ - if (Link[k].Km*SQR(Q[k]) > LinkSetting[k]) valvecoeff(k); //pipecoeff(k); //(2.00.11 - LR) - - /* Otherwise force headloss across valve to be equal to setting */ - else - { - P[k] = CBIG; - Y[k] = LinkSetting[k]*CBIG; - } - } -} /* End of pbvcoeff */ - - -void tcvcoeff(int k) -/* -**-------------------------------------------------------------- -** Input: k = link index -** Output: none -** Purpose: computes P & Y coeffs. for throttle control valve -**-------------------------------------------------------------- -*/ -{ - double km; - - /* Save original loss coeff. for open valve */ - km = Link[k].Km; - - /* If valve not fixed OPEN or CLOSED, compute its loss coeff. */ - if (LinkSetting[k] != MISSING) - Link[k].Km = 0.02517*LinkSetting[k]/(SQR(Link[k].Diam)*SQR(Link[k].Diam)); - - /* Then apply usual pipe formulas */ - valvecoeff(k); //pipecoeff(k); //(2.00.11 - LR) - - /* Restore original loss coeff. */ - Link[k].Km = km; -} /* End of tcvcoeff */ - - -void prvcoeff(int k, int n1, int n2) -/* -**-------------------------------------------------------------- -** Input: k = link index -** n1 = upstream node of valve -** n2 = downstream node of valve -** Output: none -** Purpose: computes solution matrix coeffs. for pressure -** reducing valves -**-------------------------------------------------------------- -*/ -{ - int i,j; /* Rows of solution matrix */ - double hset; /* Valve head setting */ - i = Row[n1]; /* Matrix rows of nodes */ - j = Row[n2]; - hset = Node[n2].El + LinkSetting[k]; /* Valve setting */ - - if (LinkStatus[k] == ACTIVE) - { - /* - Set coeffs. to force head at downstream - node equal to valve setting & force flow (when updated in - newflows()) equal to flow imbalance at downstream node. - */ - P[k] = 0.0; - Y[k] = Q[k] + X[n2]; /* Force flow balance */ - F[j] += (hset*CBIG); /* Force head = hset */ - Aii[j] += CBIG; /* at downstream node */ - if (X[n2] < 0.0) F[i] += X[n2]; - return; - } - - /* - For OPEN, CLOSED, or XPRESSURE valve - compute matrix coeffs. using the valvecoeff() function. //(2.00.11 - LR) - */ - valvecoeff(k); /*pipecoeff(k);*/ //(2.00.11 - LR) - Aij[Ndx[k]] -= P[k]; - Aii[i] += P[k]; - Aii[j] += P[k]; - F[i] += (Y[k]-Q[k]); - F[j] -= (Y[k]-Q[k]); -} /* End of prvcoeff */ - - -void psvcoeff(int k, int n1, int n2) -/* -**-------------------------------------------------------------- -** Input: k = link index -** n1 = upstream node of valve -** n2 = downstream node of valve -** Output: none -** Purpose: computes solution matrix coeffs. for pressure -** sustaining valve -**-------------------------------------------------------------- -*/ -{ - int i,j; /* Rows of solution matrix */ - double hset; /* Valve head setting */ - i = Row[n1]; /* Matrix rows of nodes */ - j = Row[n2]; - hset = Node[n1].El + LinkSetting[k]; /* Valve setting */ - - if (LinkStatus[k] == ACTIVE) - { - /* - Set coeffs. to force head at upstream - node equal to valve setting & force flow (when updated in - newflows()) equal to flow imbalance at upstream node. - */ - P[k] = 0.0; - Y[k] = Q[k] - X[n1]; /* Force flow balance */ - F[i] += (hset*CBIG); /* Force head = hset */ - Aii[i] += CBIG; /* at upstream node */ - if (X[n1] > 0.0) F[j] += X[n1]; - return; - } - - /* - For OPEN, CLOSED, or XPRESSURE valve - compute matrix coeffs. using the valvecoeff() function. //(2.00.11 - LR) - */ - valvecoeff(k); /*pipecoeff(k);*/ //(2.00.11 - LR) - Aij[Ndx[k]] -= P[k]; - Aii[i] += P[k]; - Aii[j] += P[k]; - F[i] += (Y[k]-Q[k]); - F[j] -= (Y[k]-Q[k]); -} /* End of psvcoeff */ - - -void fcvcoeff(int k, int n1, int n2) -/* -**-------------------------------------------------------------- -** Input: k = link index -** n1 = upstream node of valve -** n2 = downstream node of valve -** Output: none -** Purpose: computes solution matrix coeffs. for flow control -** valve -**-------------------------------------------------------------- -*/ -{ - int i,j; /* Rows in solution matrix */ - double q; /* Valve flow setting */ - q = LinkSetting[k]; - i = Row[n1]; - j = Row[n2]; - - /* - If valve active, break network at valve and treat - flow setting as external demand at upstream node - and external supply at downstream node. - */ - if (LinkStatus[k] == ACTIVE) - { - X[n1] -= q; - F[i] -= q; - X[n2] += q; - F[j] += q; - /*P[k] = 0.0;*/ - P[k] = 1.0/CBIG; //(2.00.11 - LR) - Aij[Ndx[k]] -= P[k]; //(2.00.11 - LR) - Aii[i] += P[k]; //(2.00.11 - LR) - Aii[j] += P[k]; //(2.00.11 - LR) - Y[k] = Q[k] - q; - } - /* - Otherwise treat valve as an open pipe - */ - else - { - valvecoeff(k); //pipecoeff(k); //(2.00.11 - LR) - Aij[Ndx[k]] -= P[k]; - Aii[i] += P[k]; - Aii[j] += P[k]; - F[i] += (Y[k]-Q[k]); - F[j] -= (Y[k]-Q[k]); - } -} /* End of fcvcoeff */ - - -/*** New function added. ***/ //(2.00.11 - LR) -void valvecoeff(int k) -/* -**-------------------------------------------------------------- -** Input: k = link index -** Output: none -** Purpose: computes solution matrix coeffs. for a completely -** open, closed, or throttled control valve. -**-------------------------------------------------------------- -*/ -{ - double p; - - // Valve is closed. Use a very small matrix coeff. - if (LinkStatus[k] <= CLOSED) - { - P[k] = 1.0/CBIG; - Y[k] = Q[k]; - return; - } - - // Account for any minor headloss through the valve - if (Link[k].Km > 0.0) - { - p = 2.0*Link[k].Km*fabs(Q[k]); - if ( p < RQtol ) p = RQtol; - P[k] = 1.0/p; - Y[k] = Q[k]/2.0; - } - else - { - P[k] = 1.0/RQtol; - Y[k] = Q[k]; - } -} - -/**************** END OF HYDRAUL.C ***************/ - +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: hydraul.c + Description: implements EPANET's hydraulic engine + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 12/05/2019 + ****************************************************************************** +*/ + +#include +#include +#include +#include + +#include "types.h" +#include "funcs.h" +#include "text.h" + +const double QZERO = 1.e-6; // Equivalent to zero flow in cfs + +// Imported functions +extern int createsparse(Project *); +extern void freesparse(Project *); +extern int hydsolve(Project *, int *, double *); + +// Local functions +int allocmatrix(Project *); +void freematrix(Project *); +void initlinkflow(Project *, int, char, double); +void demands(Project *); +int controls(Project *); +long timestep(Project *); +void controltimestep(Project *, long *); +void ruletimestep(Project *, long *); +void addenergy(Project *, long); +void tanklevels(Project *, long); +void resetpumpflow(Project *, int); + +int openhyd(Project *pr) +/* + *-------------------------------------------------------------- + * Input: none + * Output: returns error code + * Purpose: opens hydraulics solver system + *-------------------------------------------------------------- +*/ +{ + int i; + int errcode = 0; + Slink *link; + + // Check for too few nodes & no fixed grade nodes + if (pr->network.Nnodes < 2) errcode = 223; + else if (pr->network.Ntanks == 0) errcode = 224; + + // Allocate memory for sparse matrix structures (see SMATRIX.C) + ERRCODE(createsparse(pr)); + + // Allocate memory for hydraulic variables + ERRCODE(allocmatrix(pr)); + + // Check for unconnected nodes + if (!errcode) for (i = 1; i <= pr->network.Njuncs; i++) + { + if (pr->network.Adjlist[i] == NULL) + { + errcode = 233; + break; + } + } + + // Initialize link flows + if (!errcode) for (i = 1; i <= pr->network.Nlinks; i++) + { + link = &pr->network.Link[i]; + initlinkflow(pr, i, link->Status, link->Kc); + } + return errcode; +} + +void inithyd(Project *pr, int initflag) +/* +**-------------------------------------------------------------- +** Input: initflag > 0 if link flows should be re-initialized +** = 0 if not +** Output: none +** Purpose: initializes hydraulics solver system +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Outfile *out = &pr->outfile; + Times *time = &pr->times; + + int i; + Stank *tank; + Slink *link; + Spump *pump; + + // Initialize tanks + for (i = 1; i <= net->Ntanks; i++) + { + tank = &net->Tank[i]; + tank->V = tank->V0; + hyd->NodeHead[tank->Node] = tank->H0; + hyd->NodeDemand[tank->Node] = 0.0; + hyd->OldStatus[net->Nlinks+i] = TEMPCLOSED; + } + + // Initialize emitter flows + memset(hyd->EmitterFlow,0,(net->Nnodes+1)*sizeof(double)); + for (i = 1; i <= net->Nnodes; i++) + { + net->Node[i].ResultIndex = i; + if (net->Node[i].Ke > 0.0) hyd->EmitterFlow[i] = 1.0; + } + + // Initialize links + for (i = 1; i <= net->Nlinks; i++) + { + link = &net->Link[i]; + link->ResultIndex = i; + + // Initialize status and setting + hyd->LinkStatus[i] = link->Status; + hyd->LinkSetting[i] = link->Kc; + + // Compute flow resistance + resistcoeff(pr, i); + + // Start active control valves in ACTIVE position + if ( + (link->Type == PRV || link->Type == PSV + || link->Type == FCV) && (link->Kc != MISSING) + ) hyd->LinkStatus[i] = ACTIVE; + + // Initialize flows if necessary + if (hyd->LinkStatus[i] <= CLOSED) + { + hyd->LinkFlow[i] = QZERO; + } + else if (ABS(hyd->LinkFlow[i]) <= QZERO || initflag > 0) + { + initlinkflow(pr, i, hyd->LinkStatus[i], hyd->LinkSetting[i]); + } + + // Save initial status + hyd->OldStatus[i] = hyd->LinkStatus[i]; + } + + // Initialize pump energy usage + for (i = 1; i <= net->Npumps; i++) + { + pump = &net->Pump[i]; + pump->Energy.Efficiency = 0.0; + pump->Energy.TimeOnLine = 0.0; + pump->Energy.KwHrs = 0.0; + pump->Energy.KwHrsPerFlow = 0.0; + pump->Energy.MaxKwatts = 0.0; + pump->Energy.TotalCost = 0.0; + } + + // Re-position hydraulics file + if (pr->outfile.Saveflag) + { + fseek(out->HydFile,out->HydOffset,SEEK_SET); + } + + // Initialize current time + hyd->Haltflag = 0; + time->Htime = 0; + time->Hydstep = 0; + time->Rtime = time->Rstep; +} + + +int runhyd(Project *pr, long *t) +/* +**-------------------------------------------------------------- +** Input: none +** Output: t = pointer to current time (in seconds) +** Returns: error code +** Purpose: solves network hydraulics in a single time period +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Times *time = &pr->times; + Report *rpt = &pr->report; + + int iter; // Iteration count + int errcode; // Error code + double relerr; // Solution accuracy + + // Find new demands & control actions + *t = time->Htime; + demands(pr); + controls(pr); + + // Solve network hydraulic equations + errcode = hydsolve(pr,&iter,&relerr); + if (!errcode) + { + // Report new status & save results + if (rpt->Statflag) writehydstat(pr,iter,relerr); + + // If system unbalanced and no extra trials + // allowed, then activate the Haltflag + if (relerr > hyd->Hacc && hyd->ExtraIter == -1) + { + hyd->Haltflag = 1; + } + + // Report any warning conditions + if (!errcode) errcode = writehydwarn(pr,iter,relerr); + } + return errcode; +} + +int nexthyd(Project *pr, long *tstep) +/* +**-------------------------------------------------------------- +** Input: none +** Output: tstep = pointer to time step (in seconds) +** Returns: error code +** Purpose: finds length of next time step & updates tank +** levels and rule-based contol actions +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Times *time = &pr->times; + + long hydstep; // Actual time step + int errcode = 0; // Error code + + // Save current results to hydraulics file and + // force end of simulation if Haltflag is active + if (pr->outfile.Saveflag) errcode = savehyd(pr, &time->Htime); + if (hyd->Haltflag) time->Htime = time->Dur; + + // Compute next time step & update tank levels + *tstep = 0; + hydstep = 0; + if (time->Htime < time->Dur) hydstep = timestep(pr); + if (pr->outfile.Saveflag) errcode = savehydstep(pr,&hydstep); + + // Compute pumping energy + if (time->Dur == 0) addenergy(pr,0); + else if (time->Htime < time->Dur) addenergy(pr,hydstep); + + // More time remains - update current time + if (time->Htime < time->Dur) + { + time->Htime += hydstep; + if (!pr->quality.OpenQflag) + { + if (time->Htime >= time->Rtime) time->Rtime += time->Rstep; + } + } + + // No more time remains - force completion of analysis + else + { + time->Htime++; + if (pr->quality.OpenQflag) time->Qtime++; + } + *tstep = hydstep; + return errcode; +} + + +void closehyd(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: closes hydraulics solver system +**-------------------------------------------------------------- +*/ +{ + freesparse(pr); + freematrix(pr); +} + + +int allocmatrix(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: allocates memory used for solution matrix coeffs. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + int errcode = 0; + + hyd->P = (double *) calloc(net->Nlinks+1,sizeof(double)); + hyd->Y = (double *) calloc(net->Nlinks+1,sizeof(double)); + hyd->DemandFlow = (double *) calloc(net->Nnodes + 1, sizeof(double)); + hyd->EmitterFlow = (double *) calloc(net->Nnodes+1, sizeof(double)); + hyd->Xflow = (double *) calloc(MAX((net->Nnodes+1), (net->Nlinks+1)), + sizeof(double)); + hyd->OldStatus = (StatusType *) calloc(net->Nlinks+net->Ntanks+1, + sizeof(StatusType)); + ERRCODE(MEMCHECK(hyd->P)); + ERRCODE(MEMCHECK(hyd->Y)); + ERRCODE(MEMCHECK(hyd->DemandFlow)); + ERRCODE(MEMCHECK(hyd->EmitterFlow)); + ERRCODE(MEMCHECK(hyd->Xflow)); + ERRCODE(MEMCHECK(hyd->OldStatus)); + return errcode; +} + + +void freematrix(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: frees memory used for solution matrix coeffs. +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + + free(hyd->P); + free(hyd->Y); + free(hyd->DemandFlow); + free(hyd->EmitterFlow); + free(hyd->Xflow); + free(hyd->OldStatus); +} + + +void initlinkflow(Project *pr, int i, char s, double k) +/* +**-------------------------------------------------------------------- +** Input: i = link index +** s = link status +** k = link setting (i.e., pump speed) +** Output: none +** Purpose: sets initial flow in link to QZERO if link is closed, +** to design flow for a pump, or to flow at velocity of +** 1 fps for other links. +**-------------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Network *n = &pr->network; + + Slink *link = &n->Link[i]; + + if (s == CLOSED) + { + hyd->LinkFlow[i] = QZERO; + } + else if (link->Type == PUMP) + { + hyd->LinkFlow[i] = k * n->Pump[findpump(n,i)].Q0; + } + else + { + hyd->LinkFlow[i] = PI * SQR(link->Diam)/4.0; + } +} + + +void setlinkstatus(Project *pr, int index, char value, StatusType *s, double *k) +/*---------------------------------------------------------------- +** Input: index = link index +** value = 0 (CLOSED) or 1 (OPEN) +** s = pointer to link status +** k = pointer to link setting +** Output: none +** Purpose: sets link status to OPEN or CLOSED +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + + Slink *link = &net->Link[index]; + LinkType t = link->Type; + + // Status set to open + if (value == 1) + { + // Adjust link setting for pumps & valves + if (t == PUMP) + { + *k = 1.0; + // Check if a re-opened pump needs its flow reset + if (*s == CLOSED) resetpumpflow(pr, index); + } + if (t > PUMP && t != GPV) *k = MISSING; + *s = OPEN; + } + + // Status set to closed + else if (value == 0) + { + // Adjust link setting for pumps & valves + if (t == PUMP) *k = 0.0; + if (t > PUMP && t != GPV) *k = MISSING; + *s = CLOSED; + } +} + + +void setlinksetting(Project *pr, int index, double value, StatusType *s, + double *k) +/*---------------------------------------------------------------- +** Input: index = link index +** value = pump speed or valve setting +** s = pointer to link status +** k = pointer to link setting +** Output: none +** Purpose: sets pump speed or valve setting, adjusting link +** status and flow when necessary +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + + Slink *link = &net->Link[index]; + LinkType t = link->Type; + + // For a pump, status is OPEN if speed > 0, CLOSED otherwise + if (t == PUMP) + { + *k = value; + if (value > 0 && *s <= CLOSED) + { + // Check if a re-opened pump needs its flow reset + resetpumpflow(pr, index); + *s = OPEN; + } + if (value == 0 && *s > CLOSED) *s = CLOSED; + } + + // For FCV, activate it + else if (t == FCV) + { + *k = value; + *s = ACTIVE; + } + + // Open closed control valve with fixed status (setting = MISSING) + else + { + if (*k == MISSING && *s <= CLOSED) *s = OPEN; + *k = value; + } +} + + +void demands(Project *pr) +/* +**-------------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: computes demands at nodes during current time period +**-------------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Times *time = &pr->times; + + int i ,j, n; + long k, p; + double djunc, sum; + Pdemand demand; + + // Determine total elapsed number of pattern periods + p = (time->Htime + time->Pstart) / time->Pstep; + + // Update demand at each node according to its assigned pattern + hyd->Dsystem = 0.0; // System-wide demand + for (i = 1; i <= net->Njuncs; i++) + { + sum = 0.0; + for (demand = net->Node[i].D; demand != NULL; demand = demand->next) + { + // pattern period (k) = (elapsed periods) modulus (periods per pattern) + j = demand->Pat; + k = p % (long)net->Pattern[j].Length; + djunc = (demand->Base) * net->Pattern[j].F[k] * hyd->Dmult; + if (djunc > 0.0) hyd->Dsystem += djunc; + sum += djunc; + } + hyd->NodeDemand[i] = sum; + + // Initialize pressure dependent demand + hyd->DemandFlow[i] = sum; + } + + // Update head at fixed grade nodes with time patterns + for (n = 1; n <= net->Ntanks; n++) + { + Stank *tank = &net->Tank[n]; + if (tank->A == 0.0) + { + j = tank->Pat; + if (j > 0) + { + k = p % (long) net->Pattern[j].Length; + i = tank->Node; + hyd->NodeHead[i] = net->Node[i].El * net->Pattern[j].F[k]; + } + } + } + + // Update status of pumps with utilization patterns + for (n = 1; n <= net->Npumps; n++) + { + Spump *pump = &net->Pump[n]; + j = pump->Upat; + if (j > 0) + { + i = pump->Link; + k = p % (long) net->Pattern[j].Length; + setlinksetting(pr, i, net->Pattern[j].F[k], &hyd->LinkStatus[i], + &hyd->LinkSetting[i]); + } + } +} + + +int controls(Project *pr) +/* +**--------------------------------------------------------------------- +** Input: none +** Output: number of links whose setting changes +** Purpose: implements simple controls based on time or tank levels +**--------------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Times *time = &pr->times; + + int i, k, n, reset, setsum; + double h, vplus; + double v1, v2; + double k1, k2; + char s1, s2; + Slink *link; + Scontrol *control; + + // Examine each control statement + setsum = 0; + for (i=1; i <= net->Ncontrols; i++) + { + // Make sure that link is defined + control = &net->Control[i]; + reset = 0; + if ( (k = control->Link) <= 0) continue; + link = &net->Link[k]; + + // Link is controlled by tank level + if ((n = control->Node) > 0 && n > net->Njuncs) + { + h = hyd->NodeHead[n]; + vplus = ABS(hyd->NodeDemand[n]); + v1 = tankvolume(pr,n - net->Njuncs,h); + v2 = tankvolume(pr,n - net->Njuncs, control->Grade); + if (control->Type == LOWLEVEL && v1 <= v2 + vplus) reset = 1; + if (control->Type == HILEVEL && v1 >= v2 - vplus) reset = 1; + } + + // Link is time-controlled + if (control->Type == TIMER) + { + if (control->Time == time->Htime) reset = 1; + } + + //* Link is time-of-day controlled + if (control->Type == TIMEOFDAY) + { + if ((time->Htime + time->Tstart) % SECperDAY == control->Time) + { + reset = 1; + } + } + + // Update link status & pump speed or valve setting + if (reset == 1) + { + if (hyd->LinkStatus[k] <= CLOSED) s1 = CLOSED; + else s1 = OPEN; + s2 = control->Status; + k1 = hyd->LinkSetting[k]; + k2 = k1; + if (link->Type > PIPE) k2 = control->Setting; + + // Check if a re-opened pump needs its flow reset + if (link->Type == PUMP && s1 == CLOSED && s2 == OPEN) + resetpumpflow(pr, k); + + if (s1 != s2 || k1 != k2) + { + hyd->LinkStatus[k] = s2; + hyd->LinkSetting[k] = k2; + if (pr->report.Statflag) writecontrolaction(pr,k,i); + setsum++; + } + } + } + return setsum; +} + + +long timestep(Project *pr) +/* +**---------------------------------------------------------------- +** Input: none +** Output: returns time step until next change in hydraulics +** Purpose: computes time step to advance hydraulic simulation +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Times *time = &pr->times; + + long n, t, tstep; + + // Normal time step is hydraulic time step + tstep = time->Hstep; + + // Revise time step based on time until next demand period + // (n = next pattern period, t = time till next period) + n = ((time->Htime + time->Pstart) / time->Pstep) + 1; + t = n * time->Pstep - time->Htime; + if (t > 0 && t < tstep) tstep = t; + + // Revise time step based on time until next reporting period + t = time->Rtime - time->Htime; + if (t > 0 && t < tstep) tstep = t; + + // Revise time step based on smallest time to fill or drain a tank + tanktimestep(pr, &tstep); + + // Revise time step based on smallest time to activate a control + controltimestep(pr, &tstep); + + // Evaluate rule-based controls (which will also update tank levels) + if (net->Nrules > 0) ruletimestep(pr, &tstep); + else tanklevels(pr, tstep); + return tstep; +} + + +int tanktimestep(Project *pr, long *tstep) +/* +**----------------------------------------------------------------- +** Input: *tstep = current time step +** Output: *tstep = modified current time step +** Purpose: revises time step based on shortest time to fill or +** drain a tank +**----------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + int i, n, tankIdx = 0; + double h, q, v; + long t; + Stank *tank; + + // Examine each tank + for (i = 1; i <= net->Ntanks; i++) + { + // Skip reservoirs + tank = &net->Tank[i]; + if (tank->A == 0.0) continue; + + // Get current tank grade (h) & inflow (q) + n = tank->Node; + h = hyd->NodeHead[n]; + q = hyd->NodeDemand[n]; + if (ABS(q) <= QZERO) continue; + + // Find volume to fill/drain tank + if (q > 0.0 && h < tank->Hmax) v = tank->Vmax - tank->V; + else if (q < 0.0 && h > tank->Hmin) v = tank->Vmin - tank->V; + else continue; + + // Find time to fill/drain tank + t = (long)ROUND(v / q); + if (t > 0 && t < *tstep) + { + *tstep = t; + tankIdx = n; + } + } + return tankIdx; +} + + +void controltimestep(Project *pr, long *tstep) +/* +**------------------------------------------------------------------ +** Input: *tstep = current time step +** Output: *tstep = modified current time step +** Purpose: revises time step based on shortest time to activate +** a simple control +**------------------------------------------------------------------ +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + int i, j, k, n; + double h, q, v; + long t, t1, t2; + Slink *link; + Scontrol *control; + + // Examine each control + for (i = 1; i <= net->Ncontrols; i++) + { + t = 0; + control = &net->Control[i]; + + // Control depends on a tank level + if ( (n = control->Node) > 0) + { + // Skip node if not a tank or reservoir + if ((j = n - net->Njuncs) <= 0) continue; + + // Find current head and flow into tank + h = hyd->NodeHead[n]; + q = hyd->NodeDemand[n]; + if (ABS(q) <= QZERO) continue; + + // Find time to reach upper or lower control level + if ( (h < control->Grade && control->Type == HILEVEL && q > 0.0) + || (h > control->Grade && control->Type == LOWLEVEL && q < 0.0) ) + { + v = tankvolume(pr, j, control->Grade) - net->Tank[j].V; + t = (long)ROUND(v/q); + } + } + + // Control is based on elapsed time + if (control->Type == TIMER) + { + if (control->Time > pr->times.Htime) + { + t = control->Time - pr->times.Htime; + } + } + + // Control is based on time of day + if (control->Type == TIMEOFDAY) + { + t1 = (pr->times.Htime + pr->times.Tstart) % SECperDAY; + t2 = control->Time; + if (t2 >= t1) t = t2 - t1; + else t = SECperDAY - t1 + t2; + } + + // Revise the current estimated next time step + if (t > 0 && t < *tstep) + { + // Check if rule actually changes link status or setting + k = control->Link; + link = &net->Link[k]; + if ( (link->Type > PIPE && hyd->LinkSetting[k] != control->Setting) + || (hyd->LinkStatus[k] != control->Status) ) *tstep = t; + } + } +} + + +void ruletimestep(Project *pr, long *tstep) +/* +**-------------------------------------------------------------- +** Input: *tstep = current time step (sec) +** Output: *tstep = modified time step +** Purpose: updates next time step by checking if any rules +** will fire before then; also updates tank levels. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Times *time = &pr->times; + + long tnow, // Start of time interval for rule evaluation + tmax, // End of time interval for rule evaluation + dt, // Normal time increment for rule evaluation + dt1; // Actual time increment for rule evaluation + + // Find interval of time for rule evaluation + tnow = time->Htime; + tmax = tnow + *tstep; + + // If no rules, then time increment equals current time step + if (net->Nrules == 0) + { + dt = *tstep; + dt1 = dt; + } + + // Otherwise, time increment equals rule evaluation time step and + // first actual increment equals time until next even multiple of + // Rulestep occurs. + else + { + dt = time->Rulestep; + dt1 = time->Rulestep - (tnow % time->Rulestep); + } + + // Make sure time increment is no larger than current time step + dt = MIN(dt, *tstep); + dt1 = MIN(dt1, *tstep); + if (dt1 == 0) dt1 = dt; + + // Step through time, updating tank levels, until either + // a rule fires or we reach the end of evaluation period. + // + // Note: we are updating the global simulation time (Htime) + // here because it is used by functions in RULES.C + // to evaluate rules when checkrules() is called. + // It is restored to its original value after the + // rule evaluation process is completed (see below). + // Also note that dt1 will equal dt after the first + // time increment is taken. + // + do + { + time->Htime += dt1; // Update simulation clock + tanklevels(pr, dt1); // Find new tank levels + if (checkrules(pr, dt1)) break; // Stop if any rule fires + dt = MIN(dt, tmax - time->Htime); // Update time increment + dt1 = dt; // Update actual increment + } while (dt > 0); // Stop if no time left + + // Compute an updated simulation time step (*tstep) + // and return simulation time to its original value + *tstep = time->Htime - tnow; + time->Htime = tnow; +} + + +void addenergy(Project *pr, long hstep) +/* +**------------------------------------------------------------- +** Input: hstep = time step (sec) +** Output: none +** Purpose: accumulates pump energy usage +**------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Times *time = &pr->times; + + int i, j, k; + long m, n; + double c0, c, // Energy cost (cost/kwh) + f0, // Energy cost factor + dt, // Time interval (hr) + e, // Pump efficiency (fraction) + q, // Pump flow (cfs) + p, // Pump energy (kw) + psum = 0.0; // Total energy (kw) + Spump *pump; + + // Determine current time interval in hours + if (time->Dur == 0) dt = 1.0; + else if (time->Htime < time->Dur) + { + dt = (double) hstep / 3600.0; + } + else dt = 0.0; + if (dt == 0.0) return; + n = (time->Htime + time->Pstart) / time->Pstep; + + // Compute default energy cost at current time + c0 = hyd->Ecost; + f0 = 1.0; + if (hyd->Epat > 0) + { + m = n % (long)net->Pattern[hyd->Epat].Length; + f0 = net->Pattern[hyd->Epat].F[m]; + } + + // Examine each pump + for (j = 1; j <= net->Npumps; j++) + { + // Skip closed pumps + pump = &net->Pump[j]; + k = pump->Link; + if (hyd->LinkStatus[k] <= CLOSED) continue; + q = MAX(QZERO, ABS(hyd->LinkFlow[k])); + + // Find pump-specific energy cost + if (pump->Ecost > 0.0) c = pump->Ecost; + else c = c0; + if ( (i = pump->Epat) > 0) + { + m = n % (long)net->Pattern[i].Length; + c *= net->Pattern[i].F[m]; + } + else c *= f0; + + // Find pump energy & efficiency + getenergy(pr, k, &p, &e); + psum += p; + + // Update pump's cumulative statistics + pump->Energy.TimeOnLine += dt; + pump->Energy.Efficiency += e * dt; + pump->Energy.KwHrsPerFlow += p / q * dt; + pump->Energy.KwHrs += p * dt; + pump->Energy.MaxKwatts = MAX(pump->Energy.MaxKwatts, p); + pump->Energy.TotalCost += c * p * dt; + } + + // Update maximum kw value + hyd->Emax = MAX(hyd->Emax, psum); +} + + +void getenergy(Project *pr, int k, double *kw, double *eff) +/* +**---------------------------------------------------------------- +** Input: k = link index +** Output: *kw = kwatt energy used +** *eff = efficiency (pumps only) +** Purpose: computes flow energy associated with link k +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + int i, // efficiency curve index + j; // pump index + double dh, // head across pump (ft) + q, // flow through pump (cfs) + e; // pump efficiency + double q4eff; // flow at nominal pump speed of 1.0 + double speed; // current speed setting + Scurve *curve; + Slink *link = &net->Link[k]; + + // No energy if link is closed + if (hyd->LinkStatus[k] <= CLOSED) + { + *kw = 0.0; + *eff = 0.0; + return; + } + + // Determine flow and head difference + q = ABS(hyd->LinkFlow[k]); + dh = ABS(hyd->NodeHead[link->N1] - hyd->NodeHead[link->N2]); + + // For pumps, find effic. at current flow + if (link->Type == PUMP) + { + j = findpump(net, k); + e = hyd->Epump; + speed = hyd->LinkSetting[k]; + if ((i = net->Pump[j].Ecurve) > 0) + { + q4eff = q / speed * pr->Ucf[FLOW]; + curve = &net->Curve[i]; + e = interp(curve->Npts,curve->X, curve->Y, q4eff); + + // Sarbu and Borza pump speed adjustment + e = 100.0 - ((100.0-e) * pow(1.0/speed, 0.1)); + } + e = MIN(e, 100.0); + e = MAX(e, 1.0); + e /= 100.0; + } + else e = 1.0; + + // Compute energy + *kw = dh * q * hyd->SpGrav / 8.814 / e * KWperHP; + *eff = e; +} + + +void tanklevels(Project *pr, long tstep) +/* +**---------------------------------------------------------------- +** Input: tstep = current time step +** Output: none +** Purpose: computes new water levels in tanks after current +** time step +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + int i, n; + double dv; + + for (i = 1; i <= net->Ntanks; i++) + { + Stank *tank = &net->Tank[i]; + if (tank->A == 0.0) continue; // Skip reservoirs + + // Update the tank's volume & water elevation + n = tank->Node; + dv = hyd->NodeDemand[n] * tstep; + tank->V += dv; + + // Check if tank full/empty within next second + if (tank->V + hyd->NodeDemand[n] >= tank->Vmax) + { + tank->V = tank->Vmax; + } + else if (tank->V - hyd->NodeDemand[n] <= tank->Vmin) + { + tank->V = tank->Vmin; + } + hyd->NodeHead[n] = tankgrade(pr, i, tank->V); + } +} + + +double tankvolume(Project *pr, int i, double h) +/* +**-------------------------------------------------------------------- +** Input: i = tank index +** h = water elevation in tank +** Output: returns water volume in tank +** Purpose: finds water volume in tank i corresponding to elev. h. +**-------------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + + int j; + double y, v; + Stank *tank = &net->Tank[i]; + Scurve *curve; + + // Use level*area if no volume curve + j = tank->Vcurve; + if (j == 0) return(tank->Vmin + (h - tank->Hmin) * tank->A); + + // If curve exists, interpolate on h to find volume v + // remembering that volume curve is in original units. + else + { + curve = &net->Curve[j]; + y = (h - net->Node[tank->Node].El) * pr->Ucf[HEAD]; + v = interp(curve->Npts, curve->X, curve->Y, y) / pr->Ucf[VOLUME]; + return v; + } +} + + +double tankgrade(Project *pr, int i, double v) +/* +**------------------------------------------------------------------- +** Input: i = tank index +** v = volume in tank +** Output: returns water level in tank +** Purpose: finds water level in tank i corresponding to volume v. +**------------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + + int j; + double y, h; + Stank *tank = &net->Tank[i]; + + // Use area if no volume curve + j = tank->Vcurve; + if (j == 0) return(tank->Hmin + (v - tank->Vmin) / tank->A); + + // If curve exists, interpolate on volume (originally the Y-variable + // but used here as the X-variable) to find new level above bottom. + // Remember that volume curve is stored in original units. + else + { + Scurve *curve = &net->Curve[j]; + y = interp(curve->Npts, curve->Y, curve->X, v * pr->Ucf[VOLUME]); + h = net->Node[tank->Node].El + y / pr->Ucf[HEAD]; + return h; + } +} + +void resetpumpflow(Project *pr, int i) +/* +**------------------------------------------------------------------- +** Input: i = link index +** Output: none +** Purpose: resets flow in a constant HP pump to its initial value. +**------------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Spump *pump = &net->Pump[findpump(net, i)]; + if (pump->Ptype == CONST_HP) + pr->hydraul.LinkFlow[i] = pump->Q0; +} + diff --git a/src/hydsolver.c b/src/hydsolver.c new file mode 100644 index 0000000..fcb8258 --- /dev/null +++ b/src/hydsolver.c @@ -0,0 +1,720 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: hydsolver.c + Description: computes flows and pressures throughout a pipe network using + Todini's Global Gradient Algorithm + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 07/15/2019 + ****************************************************************************** +*/ + +#include +#include +#include +#include + +#include "types.h" +#include "funcs.h" +#include "text.h" + +// Hydraulic balance error for network being analyzed +typedef struct { + double maxheaderror; + double maxflowerror; + double maxflowchange; + int maxheadlink; + int maxflownode; + int maxflowlink; +} Hydbalance; + +// Exported functions +int hydsolve(Project *, int *, double *); + +// Imported functions +extern int linsolve(Smatrix *, int); //(see SMATRIX.C) +extern int valvestatus(Project *); //(see HYDSTATUS.C) +extern int linkstatus(Project *); //(see HYDSTATUS.C) + +// Local functions +static int badvalve(Project *, int); +static int pswitch(Project *); + +static double newflows(Project *, Hydbalance *); +static void newlinkflows(Project *, Hydbalance *, double *, double *); +static void newemitterflows(Project *, Hydbalance *, double *, double *); +static void newdemandflows(Project *, Hydbalance *, double *, double *); + +static void checkhydbalance(Project *, Hydbalance *); +static int hasconverged(Project *, double *, Hydbalance *); +static int pdaconverged(Project *); +static void reporthydbal(Project *, Hydbalance *); + + +int hydsolve(Project *pr, int *iter, double *relerr) +/* +**------------------------------------------------------------------- +** Input: none +** Output: *iter = # of iterations to reach solution +** *relerr = convergence error in solution +** returns error code +** Purpose: solves network nodal equations for heads and flows +** using Todini's Gradient algorithm +** +** Notes: Status checks on CVs, pumps and pipes to tanks are made +** every CheckFreq iteration, up until MaxCheck iterations +** are reached. Status checks on control valves are made +** every iteration if DampLimit = 0 or only when the +** convergence error is at or below DampLimit. If DampLimit +** is > 0 then future computed flow changes are only 60% of +** their full value. A complete status check on all links +** is made when convergence is achieved. If convergence is +** not achieved in MaxIter trials and ExtraIter > 0 then +** another ExtraIter trials are made with no status changes +** made to any links and a warning message is generated. +** +** This procedure calls linsolve() which appears in SMATRIX.C. +**------------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Smatrix *sm = &hyd->smatrix; + Report *rpt = &pr->report; + + int i; // Node index + int errcode = 0; // Node causing solution error + int nextcheck; // Next status check trial + int maxtrials; // Max. trials for convergence + double newerr; // New convergence error + int valveChange; // Valve status change flag + int statChange; // Non-valve status change flag + Hydbalance hydbal; // Hydraulic balance errors + double fullDemand; // Full demand for a node (cfs) + + // Initialize status checking & relaxation factor + nextcheck = hyd->CheckFreq; + hyd->RelaxFactor = 1.0; + + // Initialize convergence criteria and PDA results + hydbal.maxheaderror = 0.0; + hydbal.maxflowchange = 0.0; + hyd->DeficientNodes = 0; + hyd->DemandReduction = 0.0; + + // Repeat iterations until convergence or trial limit is exceeded. + // (ExtraIter used to increase trials in case of status cycling.) + if (rpt->Statflag == FULL) writerelerr(pr, 0, 0); + maxtrials = hyd->MaxIter; + if (hyd->ExtraIter > 0) maxtrials += hyd->ExtraIter; + *iter = 1; + while (*iter <= maxtrials) + { + // Compute coefficient matrices A & F and solve A*H = F + // where H = heads, A = Jacobian coeffs. derived from + // head loss gradients, & F = flow correction terms. + // Solution for H is returned in F from call to linsolve(). + + headlosscoeffs(pr); + matrixcoeffs(pr); + errcode = linsolve(sm, net->Njuncs); + + // Matrix ill-conditioning problem - if control valve causing problem, + // fix its status & continue, otherwise quit with no solution. + if (errcode > 0) + { + if (badvalve(pr, sm->Order[errcode])) continue; + else break; + } + + // Update current solution. + // (Row[i] = row of solution matrix corresponding to node i) + for (i = 1; i <= net->Njuncs; i++) + { + hyd->NodeHead[i] = sm->F[sm->Row[i]]; // Update heads + } + newerr = newflows(pr, &hydbal); // Update flows + *relerr = newerr; + + // Write convergence error to status report if called for + if (rpt->Statflag == FULL) + { + writerelerr(pr, *iter, *relerr); + } + + // Apply solution damping & check for change in valve status + hyd->RelaxFactor = 1.0; + valveChange = FALSE; + if (hyd->DampLimit > 0.0) + { + if (*relerr <= hyd->DampLimit) + { + hyd->RelaxFactor = 0.6; + valveChange = valvestatus(pr); + } + } + else + { + valveChange = valvestatus(pr); + } + + // Check for convergence + if (hasconverged(pr, relerr, &hydbal)) + { + // We have convergence - quit if we are into extra iterations + if (*iter > hyd->MaxIter) break; + + // Quit if no status changes occur + statChange = FALSE; + if (valveChange) statChange = TRUE; + if (linkstatus(pr)) statChange = TRUE; + if (pswitch(pr)) statChange = TRUE; + if (!statChange) break; + + // We have a status change so continue the iterations + nextcheck = *iter + hyd->CheckFreq; + } + + // No convergence yet - see if its time for a periodic status + // check on pumps, CV's, and pipes connected to tank + else if (*iter <= hyd->MaxCheck && *iter == nextcheck) + { + linkstatus(pr); + nextcheck += hyd->CheckFreq; + } + (*iter)++; + } + + // Iterations ended - report any errors. + if (errcode > 0) + { + writehyderr(pr, sm->Order[errcode]); // Ill-conditioned matrix error + errcode = 110; + } + + // Store actual junction outflow in NodeDemand & full demand in DemandFlow + for (i = 1; i <= net->Njuncs; i++) + { + fullDemand = hyd->NodeDemand[i]; + hyd->NodeDemand[i] = hyd->DemandFlow[i] + hyd->EmitterFlow[i]; + hyd->DemandFlow[i] = fullDemand; + } + + // Save convergence info + hyd->RelativeError = *relerr; + hyd->MaxHeadError = hydbal.maxheaderror; + hyd->MaxFlowChange = hydbal.maxflowchange; + hyd->Iterations = *iter; + return errcode; +} + + +int badvalve(Project *pr, int n) +/* +**----------------------------------------------------------------- +** Input: n = node index +** Output: returns 1 if node n belongs to an active control valve, +** 0 otherwise +** Purpose: determines if a node belongs to an active control valve +** whose setting causes an inconsistent set of eqns. If so, +** the valve status is fixed open and a warning condition +** is generated. +**----------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Report *rpt = &pr->report; + Times *time = &pr->times; + + int i, k, n1, n2; + Slink *link; + LinkType t; + + for (i = 1; i <= net->Nvalves; i++) + { + k = net->Valve[i].Link; + link = &net->Link[k]; + n1 = link->N1; + n2 = link->N2; + if (n == n1 || n == n2) + { + t = link->Type; + if (t == PRV || t == PSV || t == FCV) + { + if (hyd->LinkStatus[k] == ACTIVE) + { + if (rpt->Statflag == FULL) + { + sprintf(pr->Msg, FMT61, + clocktime(rpt->Atime, time->Htime), link->ID); + writeline(pr, pr->Msg); + } + if (link->Type == FCV) hyd->LinkStatus[k] = XFCV; + else hyd->LinkStatus[k] = XPRESSURE; + return 1; + } + } + return 0; + } + } + return 0; +} + + +int pswitch(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns 1 if status of any link changes, 0 if not +** Purpose: adjusts settings of links controlled by junction +** pressures after a hydraulic solution is found +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Report *rpt = &pr->report; + + int i, // Control statement index + k, // Index of link being controlled + n, // Node controlling link k + reset, // Flag on control conditions + change, // Flag for status or setting change + anychange = 0; // Flag for 1 or more control actions + char s; // Current link status + Slink *link; + + // Check each control statement + for (i = 1; i <= net->Ncontrols; i++) + { + reset = 0; + k = net->Control[i].Link; + if (k <= 0) continue; + + // Determine if control based on a junction, not a tank + n = net->Control[i].Node; + if (n > 0 && n <= net->Njuncs) + { + // Determine if control conditions are satisfied + if (net->Control[i].Type == LOWLEVEL && + hyd->NodeHead[n] <= net->Control[i].Grade + hyd->Htol) + { + reset = 1; + } + if (net->Control[i].Type == HILEVEL && + hyd->NodeHead[n] >= net->Control[i].Grade - hyd->Htol) + { + reset = 1; + } + } + + // Determine if control forces a status or setting change + if (reset == 1) + { + link = &net->Link[k]; + change = 0; + s = hyd->LinkStatus[k]; + if (link->Type == PIPE) + { + if (s != net->Control[i].Status) change = 1; + } + if (link->Type == PUMP) + { + if (hyd->LinkSetting[k] != net->Control[i].Setting) change = 1; + } + if (link->Type >= PRV) + { + if (hyd->LinkSetting[k] != net->Control[i].Setting) change = 1; + else if (hyd->LinkSetting[k] == MISSING && s != net->Control[i].Status) + { + change = 1; + } + } + + // If a change occurs, update status & setting + if (change) + { + hyd->LinkStatus[k] = net->Control[i].Status; + if (link->Type > PIPE) + { + hyd->LinkSetting[k] = net->Control[i].Setting; + } + if (rpt->Statflag == FULL) + { + writestatchange(pr, k, s, hyd->LinkStatus[k]); + } + anychange = 1; + } + } + } + return anychange; +} + + +double newflows(Project *pr, Hydbalance *hbal) +/* +**---------------------------------------------------------------- +** Input: hbal = ptr. to hydraulic balance information +** Output: returns solution convergence error +** Purpose: updates link, emitter & demand flows after new +** nodal heads are computed. +**---------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + + double dqsum, // Network flow change + qsum; // Network total flow + + // Initialize sum of flows & corrections + qsum = 0.0; + dqsum = 0.0; + hbal->maxflowchange = 0.0; + hbal->maxflowlink = 1; + hbal->maxflownode = -1; + + // Update flows in all real and virtual links + newlinkflows(pr, hbal, &qsum, &dqsum); + newemitterflows(pr, hbal, &qsum, &dqsum); + newdemandflows(pr, hbal, &qsum, &dqsum); + + // Return ratio of total flow corrections to total flow + if (qsum > hyd->Hacc) return (dqsum / qsum); + else return dqsum; +} + + +void newlinkflows(Project *pr, Hydbalance *hbal, double *qsum, double *dqsum) +/* +**---------------------------------------------------------------- +** Input: hbal = ptr. to hydraulic balance information +** qsum = sum of current system flows +** dqsum = sum of system flow changes +** Output: updates hbal, qsum and dqsum +** Purpose: updates link flows after new nodal heads computed +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + double dh, /* Link head loss */ + dq; /* Link flow change */ + int k, n, n1, n2; + Slink *link; + + // Initialize net inflows (i.e., demands) at fixed grade nodes + for (n = net->Njuncs + 1; n <= net->Nnodes; n++) + { + hyd->NodeDemand[n] = 0.0; + } + + // Examine each link + for (k = 1; k <= net->Nlinks; k++) + { + // Get link and its end nodes + link = &net->Link[k]; + n1 = link->N1; + n2 = link->N2; + + // Apply flow update formula: + // dq = Y - P * (new head loss) + // P = 1 / (previous head loss gradient) + // Y = P * (previous head loss) + // where P & Y were computed in hlosscoeff() in hydcoeffs.c + + dh = hyd->NodeHead[n1] - hyd->NodeHead[n2]; + dq = hyd->Y[k] - hyd->P[k] * dh; + + // Adjust flow change by the relaxation factor + dq *= hyd->RelaxFactor; + + // Prevent flow in constant HP pumps from going negative + if (link->Type == PUMP) + { + n = findpump(net, k); + if (net->Pump[n].Ptype == CONST_HP && dq > hyd->LinkFlow[k]) + { + dq = hyd->LinkFlow[k] / 2.0; + } + } + + // Update link flow and system flow summation + hyd->LinkFlow[k] -= dq; + *qsum += ABS(hyd->LinkFlow[k]); + *dqsum += ABS(dq); + + // Update identity of element with max. flow change + if (ABS(dq) > hbal->maxflowchange) + { + hbal->maxflowchange = ABS(dq); + hbal->maxflowlink = k; + hbal->maxflownode = -1; + } + + // Update net flows to fixed grade nodes + if (hyd->LinkStatus[k] > CLOSED) + { + if (n1 > net->Njuncs) hyd->NodeDemand[n1] -= hyd->LinkFlow[k]; + if (n2 > net->Njuncs) hyd->NodeDemand[n2] += hyd->LinkFlow[k]; + } + } +} + + +void newemitterflows(Project *pr, Hydbalance *hbal, double *qsum, + double *dqsum) +/* +**---------------------------------------------------------------- +** Input: hbal = ptr. to hydraulic balance information +** qsum = sum of current system flows +** dqsum = sum of system flow changes +** Output: updates hbal, qsum and dqsum +** Purpose: updates nodal emitter flows after new nodal heads computed +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + int i; + double hloss, hgrad, dh, dq; + + // Examine each network junction + for (i = 1; i <= net->Njuncs; i++) + { + // Skip junction if it does not have an emitter + if (net->Node[i].Ke == 0.0) continue; + + // Find emitter head loss and gradient + emitterheadloss(pr, i, &hloss, &hgrad); + + // Find emitter flow change + dh = hyd->NodeHead[i] - net->Node[i].El; + dq = (hloss - dh) / hgrad; + dq *= hyd->RelaxFactor; + hyd->EmitterFlow[i] -= dq; + + // Update system flow summation + *qsum += ABS(hyd->EmitterFlow[i]); + *dqsum += ABS(dq); + + // Update identity of element with max. flow change + if (ABS(dq) > hbal->maxflowchange) + { + hbal->maxflowchange = ABS(dq); + hbal->maxflownode = i; + hbal->maxflowlink = -1; + } + } +} + + +void newdemandflows(Project *pr, Hydbalance *hbal, double *qsum, double *dqsum) +/* +**---------------------------------------------------------------- +** Input: hbal = ptr. to hydraulic balance information +** qsum = sum of current system flows +** dqsum = sum of system flow changes +** Output: updates hbal, qsum and dqsum +** Purpose: updates nodal pressure dependent demand flows after +** new nodal heads computed +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + double dp, // pressure range over which demand can vary (ft) + dq, // change in demand flow (cfs) + n, // exponent in head loss v. demand function + hloss, // current head loss through outflow junction (ft) + hgrad, // head loss gradient with respect to flow (ft/cfs) + dh; // new head loss through outflow junction (ft) + int i; + + // Get demand function parameters + if (hyd->DemandModel == DDA) return; + dp = MAX((hyd->Preq - hyd->Pmin), MINPDIFF); + n = 1.0 / hyd->Pexp; + + // Examine each junction + for (i = 1; i <= net->Njuncs; i++) + { + // Skip junctions with no positive demand + if (hyd->NodeDemand[i] <= 0.0) continue; + + // Find change in demand flow (see hydcoeffs.c) + demandheadloss(pr, i, dp, n, &hloss, &hgrad); + dh = hyd->NodeHead[i] - net->Node[i].El - hyd->Pmin; + dq = (hloss - dh) / hgrad; + dq *= hyd->RelaxFactor; + hyd->DemandFlow[i] -= dq; + + // Update system flow summation + *qsum += ABS(hyd->DemandFlow[i]); + *dqsum += ABS(dq); + + // Update identity of element with max. flow change + if (ABS(dq) > hbal->maxflowchange) + { + hbal->maxflowchange = ABS(dq); + hbal->maxflownode = i; + hbal->maxflowlink = -1; + } + } +} + + +void checkhydbalance(Project *pr, Hydbalance *hbal) +/* +**-------------------------------------------------------------- +** Input: hbal = hydraulic balance errors +** Output: none +** Purpose: finds the link with the largest head imbalance +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + int k, n1, n2; + double dh, headerror, headloss; + Slink *link; + + hbal->maxheaderror = 0.0; + hbal->maxheadlink = 1; + headlosscoeffs(pr); + for (k = 1; k <= net->Nlinks; k++) + { + if (hyd->LinkStatus[k] <= CLOSED) continue; + if (hyd->P[k] == 0.0) continue; + link = &net->Link[k]; + n1 = link->N1; + n2 = link->N2; + dh = hyd->NodeHead[n1] - hyd->NodeHead[n2]; + headloss = hyd->Y[k] / hyd->P[k]; + headerror = ABS(dh - headloss); + if (headerror > hbal->maxheaderror) + { + hbal->maxheaderror = headerror; + hbal->maxheadlink = k; + } + } +} + + +int hasconverged(Project *pr, double *relerr, Hydbalance *hbal) +/* +**-------------------------------------------------------------- +** Input: relerr = current total relative flow change +** hbal = current hydraulic balance errors +** Output: returns 1 if system has converged or 0 if not +** Purpose: checks various criteria to see if system has +** become hydraulically balanced +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + + // Check that total relative flow change is small enough + if (*relerr > hyd->Hacc) return 0; + + // Find largest head loss error and absolute flow change + checkhydbalance(pr, hbal); + if (pr->report.Statflag == FULL) + { + reporthydbal(pr, hbal); + } + + // Check that head loss error and flow change criteria are met + if (hyd->HeadErrorLimit > 0.0 && + hbal->maxheaderror > hyd->HeadErrorLimit) return 0; + if (hyd->FlowChangeLimit > 0.0 && + hbal->maxflowchange > hyd->FlowChangeLimit) return 0; + + // Check for pressure driven analysis convergence + if (hyd->DemandModel == PDA) return pdaconverged(pr); + return 1; +} + +int pdaconverged(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns 1 if PDA converged, 0 if not +** Purpose: checks if pressure driven analysis has converged +** and updates total demand deficit +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + + const double TOL = 0.001; + int i, converged = 1; + double totalDemand = 0.0, totalReduction = 0.0; + + hyd->DeficientNodes = 0; + hyd->DemandReduction = 0.0; + + // Add up number of junctions with demand deficits + for (i = 1; i <= pr->network.Njuncs; i++) + { + // Skip nodes whose required demand is non-positive + if (hyd->NodeDemand[i] <= 0.0) continue; + + // Check for negative demand flow or positive demand flow at negative pressure + if (hyd->DemandFlow[i] < -TOL) converged = 0; + if (hyd->DemandFlow[i] > TOL && + hyd->NodeHead[i] - pr->network.Node[i].El - hyd->Pmin < -TOL) + converged = 0; + + // Accumulate total required demand and demand deficit + if (hyd->DemandFlow[i] + 0.0001 < hyd->NodeDemand[i]) + { + hyd->DeficientNodes++; + totalDemand += hyd->NodeDemand[i]; + totalReduction += hyd->NodeDemand[i] - hyd->DemandFlow[i]; + } + } + if (totalDemand > 0.0) + hyd->DemandReduction = totalReduction / totalDemand * 100.0; + return converged; +} + + +void reporthydbal(Project *pr, Hydbalance *hbal) +/* +**-------------------------------------------------------------- +** Input: hbal = current hydraulic balance errors +** Output: none +** Purpose: identifies links with largest flow change and +** largest head loss error. +**-------------------------------------------------------------- +*/ +{ + double qchange = hbal->maxflowchange * pr->Ucf[FLOW]; + double herror = hbal->maxheaderror * pr->Ucf[HEAD]; + int qlink = hbal->maxflowlink; + int qnode = hbal->maxflownode; + int hlink = hbal->maxheadlink; + if (qlink >= 1) + { + sprintf(pr->Msg, FMT66, qchange, pr->network.Link[qlink].ID); + writeline(pr, pr->Msg); + } + else if (qnode >= 1) + { + sprintf(pr->Msg, FMT67, qchange, pr->network.Node[qnode].ID); + writeline(pr, pr->Msg); + } + if (hlink >= 1) + { + sprintf(pr->Msg, FMT68, herror, pr->network.Link[hlink].ID); + writeline(pr, pr->Msg); + } +} diff --git a/src/hydstatus.c b/src/hydstatus.c new file mode 100644 index 0000000..87d45c6 --- /dev/null +++ b/src/hydstatus.c @@ -0,0 +1,476 @@ +/* +****************************************************************************** +Project: OWA EPANET +Version: 2.2 +Module: hydstatus.c +Description: updates hydraulic status of network elements +Authors: see AUTHORS +Copyright: see AUTHORS +License: see LICENSE +Last Updated: 05/15/2019 +****************************************************************************** +*/ + +#include +#include + +#include "types.h" +#include "funcs.h" + +// Exported functions +int valvestatus(Project *); +int linkstatus(Project *); + +// Local functions +static StatusType cvstatus(Project *, StatusType, double, double); +static StatusType pumpstatus(Project *, int, double); +static StatusType prvstatus(Project *, int, StatusType, double, double, double); +static StatusType psvstatus(Project *, int, StatusType, double, double, double); +static StatusType fcvstatus(Project *, int, StatusType, double, double); +static void tankstatus(Project *, int, int, int); + + +int valvestatus(Project *pr) +/* +**----------------------------------------------------------------- +** Input: none +** Output: returns 1 if any pressure or flow control valve +** changes status, 0 otherwise +** Purpose: updates status for PRVs & PSVs whose status +** is not fixed to OPEN/CLOSED +**----------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Report *rpt = &pr->report; + + int change = FALSE, // Status change flag + i, k, // Valve & link indexes + n1, n2; // Start & end nodes + double hset; // Valve head setting + StatusType status; // Valve status settings + Slink *link; + + // Examine each valve + for (i = 1; i <= net->Nvalves; i++) + { + // Get valve's link and its index + k = net->Valve[i].Link; + link = &net->Link[k]; + + // Ignore valve if its status is fixed to OPEN/CLOSED + if (hyd->LinkSetting[k] == MISSING) continue; + + // Get start/end node indexes & save current status + n1 = link->N1; + n2 = link->N2; + status = hyd->LinkStatus[k]; + + // Evaluate valve's new status + switch (link->Type) + { + case PRV: + hset = net->Node[n2].El + hyd->LinkSetting[k]; + hyd->LinkStatus[k] = prvstatus(pr, k, status, hset, + hyd->NodeHead[n1], hyd->NodeHead[n2]); + break; + case PSV: + hset = net->Node[n1].El + hyd->LinkSetting[k]; + hyd->LinkStatus[k] = psvstatus(pr, k, status, hset, + hyd->NodeHead[n1], hyd->NodeHead[n2]); + break; + default: + continue; + } + + // Check for a status change + if (status != hyd->LinkStatus[k]) + { + if (rpt->Statflag == FULL) + { + writestatchange(pr, k, status, hyd->LinkStatus[k]); + } + change = TRUE; + } + } + return change; +} + + +int linkstatus(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns 1 if any link changes status, 0 otherwise +** Purpose: determines new status for pumps, CVs, FCVs & pipes +** to tanks. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Report *rpt = &pr->report; + + int change = FALSE, // Status change flag + k, // Link index + n1, // Start node index + n2; // End node index + double dh; // Head difference across link + StatusType status; // Current status + Slink *link; + + // Examine each link + for (k = 1; k <= net->Nlinks; k++) + { + link = &net->Link[k]; + n1 = link->N1; + n2 = link->N2; + dh = hyd->NodeHead[n1] - hyd->NodeHead[n2]; + + // Re-open temporarily closed links (status = XHEAD or TEMPCLOSED) + status = hyd->LinkStatus[k]; + if (status == XHEAD || status == TEMPCLOSED) + { + hyd->LinkStatus[k] = OPEN; + } + + // Check for status changes in CVs and pumps + if (link->Type == CVPIPE) + { + hyd->LinkStatus[k] = cvstatus(pr, hyd->LinkStatus[k], dh, + hyd->LinkFlow[k]); + } + if (link->Type == PUMP && hyd->LinkStatus[k] >= OPEN && + hyd->LinkSetting[k] > 0.0) + { + hyd->LinkStatus[k] = pumpstatus(pr, k, -dh); + } + + // Check for status changes in non-fixed FCVs + if (link->Type == FCV && hyd->LinkSetting[k] != MISSING) + { + hyd->LinkStatus[k] = fcvstatus(pr, k, status, hyd->NodeHead[n1], + hyd->NodeHead[n2]); + } + + // Check for flow into (out of) full (empty) tanks + if (n1 > net->Njuncs || n2 > net->Njuncs) + { + tankstatus(pr, k, n1, n2); + } + + // Note any change in link status; do not revise link flow + if (status != hyd->LinkStatus[k]) + { + change = TRUE; + if (rpt->Statflag == FULL) + { + writestatchange(pr, k, status, hyd->LinkStatus[k]); + } + } + } + return change; +} + + +StatusType cvstatus(Project *pr, StatusType s, double dh, double q) +/* +**-------------------------------------------------- +** Input: s = current link status +** dh = head loss across link +** q = link flow +** Output: returns new link status +** Purpose: updates status of a check valve link. +**-------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + + // Prevent reverse flow through CVs + if (ABS(dh) > hyd->Htol) + { + if (dh < -hyd->Htol) return CLOSED; + else if (q < -hyd->Qtol) return CLOSED; + else return OPEN; + } + else + { + if (q < -hyd->Qtol) return CLOSED; + else return s; + } +} + + +StatusType pumpstatus(Project *pr, int k, double dh) +/* +**-------------------------------------------------- +** Input: k = link index +** dh = head gain across link +** Output: returns new pump status +** Purpose: updates status of an open pump. +**-------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Network *net = &pr->network; + + int p; + double hmax; + + // Find maximum head (hmax) pump can deliver + p = findpump(net, k); + if (net->Pump[p].Ptype == CONST_HP) + { + // Use huge value for constant HP pump + hmax = BIG; + } + else + { + // Use speed-adjusted shut-off head for other pumps + hmax = SQR(hyd->LinkSetting[k]) * net->Pump[p].Hmax; + } + + // Check if currrent head gain exceeds pump's max. head + if (dh > hmax + hyd->Htol) return XHEAD; + + // No check is made to see if flow exceeds pump's max. flow + return OPEN; +} + + +StatusType prvstatus(Project *pr, int k, StatusType s, double hset, + double h1, double h2) +/* +**----------------------------------------------------------- +** Input: k = link index +** s = current status +** hset = valve head setting +** h1 = head at upstream node +** h2 = head at downstream node +** Output: returns new valve status +** Purpose: updates status of a pressure reducing valve. +**----------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + + StatusType status; // Valve's new status + double hml; // Head loss when fully opened + double htol; + Slink *link; + + htol = hyd->Htol; + link = &pr->network.Link[k]; + + // Head loss when fully open + hml = link->Km * SQR(hyd->LinkFlow[k]); + + // Rules for updating valve's status from current value s + status = s; + switch (s) + { + case ACTIVE: + if (hyd->LinkFlow[k] < -hyd->Qtol) status = CLOSED; + else if (h1 - hml < hset - htol) status = OPEN; + else status = ACTIVE; + break; + + case OPEN: + if (hyd->LinkFlow[k] < -hyd->Qtol) status = CLOSED; + else if (h2 >= hset + htol) status = ACTIVE; + else status = OPEN; + break; + + case CLOSED: + if (h1 >= hset + htol && h2 < hset - htol) status = ACTIVE; + else if (h1 < hset - htol && h1 > h2 + htol) status = OPEN; + else status = CLOSED; + break; + + case XPRESSURE: + if (hyd->LinkFlow[k] < -hyd->Qtol) status = CLOSED; + break; + + default: + break; + } + return status; +} + + +StatusType psvstatus(Project *pr, int k, StatusType s, double hset, + double h1, double h2) +/* +**----------------------------------------------------------- +** Input: k = link index +** s = current status +** hset = valve head setting +** h1 = head at upstream node +** h2 = head at downstream node +** Output: returns new valve status +** Purpose: updates status of a pressure sustaining valve. +**----------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + + StatusType status; // Valve's new status + double hml; // Head loss when fully opened + double htol; + Slink *link; + + htol = hyd->Htol; + link = &pr->network.Link[k]; + + // Head loss when fully open + hml = link->Km * SQR(hyd->LinkFlow[k]); + + // Rules for updating valve's status from current value s + status = s; + switch (s) + { + case ACTIVE: + if (hyd->LinkFlow[k] < -hyd->Qtol) status = CLOSED; + else if (h2 + hml > hset + htol) status = OPEN; + else status = ACTIVE; + break; + + case OPEN: + if (hyd->LinkFlow[k] < -hyd->Qtol) status = CLOSED; + else if (h1 < hset - htol) status = ACTIVE; + else status = OPEN; + break; + + case CLOSED: + if (h2 > hset + htol && h1 > h2 + htol) status = OPEN; + else if (h1 >= hset + htol && h1 > h2 + htol) status = ACTIVE; + else status = CLOSED; + break; + + case XPRESSURE: + if (hyd->LinkFlow[k] < -hyd->Qtol) status = CLOSED; + break; + + default: + break; + } + return status; +} + + +StatusType fcvstatus(Project *pr, int k, StatusType s, double h1, double h2) +/* +**----------------------------------------------------------- +** Input: k = link index +** s = current status +** h1 = head at upstream node +** h2 = head at downstream node +** Output: returns new valve status +** Purpose: updates status of a flow control valve. +** +** Valve status changes to XFCV if flow reversal. +** If current status is XFCV and current flow is +** above setting, then valve becomes active. +** If current status is XFCV, and current flow +** positive but still below valve setting, then +** status remains same. +**----------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + StatusType status; // New valve status + + status = s; + if (h1 - h2 < -hyd->Htol) + { + status = XFCV; + } + else if (hyd->LinkFlow[k] < -hyd->Qtol) + { + status = XFCV; + } + else if (s == XFCV && hyd->LinkFlow[k] >= hyd->LinkSetting[k]) + { + status = ACTIVE; + } + return status; +} + + +void tankstatus(Project *pr, int k, int n1, int n2) +/* +**---------------------------------------------------------------- +** Input: k = link index +** n1 = start node of link +** n2 = end node of link +** Output: none +** Purpose: closes link flowing into full or out of empty tank +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + int i, n; + double h, q; + Stank *tank; + Slink *link = &net->Link[k]; + + // Return if link is closed + if (hyd->LinkStatus[k] <= CLOSED) return; + + // Make node n1 be the tank, reversing flow (q) if need be + q = hyd->LinkFlow[k]; + i = n1 - net->Njuncs; + if (i <= 0) + { + i = n2 - net->Njuncs; + if (i <= 0) return; + n = n1; + n1 = n2; + n2 = n; + q = -q; + } + + // Ignore reservoirs + tank = &net->Tank[i]; + if (tank->A == 0.0) return; + + // Find head difference across link + h = hyd->NodeHead[n1] - hyd->NodeHead[n2]; + + // If tank is full, then prevent flow into it + if (hyd->NodeHead[n1] >= tank->Hmax - hyd->Htol && !tank->CanOverflow) + { + // Case 1: Link is a pump discharging into tank + if (link->Type == PUMP) + { + if (link->N2 == n1) hyd->LinkStatus[k] = TEMPCLOSED; + } + + // Case 2: Downstream head > tank head + // (e.g., an open outflow check valve would close) + else if (cvstatus(pr, OPEN, h, q) == CLOSED) + { + hyd->LinkStatus[k] = TEMPCLOSED; + } + } + + // If tank is empty, then prevent flow out of it + if (hyd->NodeHead[n1] <= tank->Hmin + hyd->Htol) + { + // Case 1: Link is a pump discharging from tank + if (link->Type == PUMP) + { + if (link->N1 == n1) hyd->LinkStatus[k] = TEMPCLOSED; + } + + // Case 2: Tank head > downstream head + // (e.g., a closed outflow check valve would open) + else if (cvstatus(pr, CLOSED, h, q) == OPEN) + { + hyd->LinkStatus[k] = TEMPCLOSED; + } + } +} diff --git a/src/inpfile.c b/src/inpfile.c old mode 100755 new mode 100644 index 5c06fc0..39e361f --- a/src/inpfile.c +++ b/src/inpfile.c @@ -1,651 +1,810 @@ -/* -********************************************************************* - -INPFILE.C -- Save Input Function for EPANET Program - -VERSION: 2.00 -DATE: 5/8/00 - 3/1/01 - 11/19/01 - 6/24/02 - 8/15/07 (2.00.11) - 2/14/08 (2.00.12) -AUTHOR: L. Rossman - US EPA - NRMRL - -This module contains the function saveinpfile() which saves the -data describing a piping network to a file in EPANET's text format. - -******************************************************************** -*/ - -#include -#include -#ifndef __APPLE__ -#include -#else -#include -#endif -#include -#include "hash.h" -#include "text.h" -#include "types.h" -#include "funcs.h" -#define EXTERN extern -#include "vars.h" - -/* Defined in enumstxt.h in EPANET.C */ -extern char *LinkTxt[]; -extern char *FormTxt[]; -extern char *StatTxt[]; -extern char *FlowUnitsTxt[]; -extern char *PressUnitsTxt[]; -extern char *ControlTxt[]; -extern char *SourceTxt[]; -extern char *MixTxt[]; -extern char *TstatTxt[]; -extern char *RptFlagTxt[]; -extern char *SectTxt[]; - - -void saveauxdata(FILE *f) //(2.00.12 - LR) -/* ------------------------------------------------------------- - Writes auxilary data from original input file to new file. ------------------------------------------------------------- -*/ -{ - int sect,newsect; - char *tok; - char line[MAXLINE+1]; - char s[MAXLINE+1]; - - sect = -1; - rewind(InFile); - while (fgets(line,MAXLINE,InFile) != NULL) - { - /* Check if line begins with a new section heading */ - strcpy(s,line); - tok = strtok(s,SEPSTR); - if (tok != NULL && *tok == '[') - { - newsect = findmatch(tok,SectTxt); - if (newsect >= 0) - { - sect = newsect; - if (sect == _END) break; - switch(sect) - { - case _RULES: - case _COORDS: if (Coordflag == FALSE) - { - fprintf(f, "%s", line); - } - break; - case _VERTICES: - case _LABELS: - case _BACKDROP: - case _TAGS: fprintf(f, "%s", line); //(2.00.12 - LR) - } - continue; - } - else continue; - } - - /* Write lines appearing in the section to file */ - switch(sect) - { - case _RULES: - case _COORDS: if (Coordflag == FALSE) - { - fprintf(f, "%s", line); - } - break; - case _VERTICES: - case _LABELS: - case _BACKDROP: - case _TAGS: fprintf(f, "%s", line); //(2.00.12 - LR) - } - } -} - - -//// This function was heavily modified. //// //(2.00.12 - LR) - -int saveinpfile(char *fname) -/* -------------------------------------------------- - Writes network data to text file. -------------------------------------------------- -*/ -{ - int i,j,n; - double d,kc,ke,km,ucf; - char s[MAXLINE+1], s1[MAXLINE+1], s2[MAXLINE+1]; - Pdemand demand; - Psource source; - FILE *f; - -/* Open the new text file */ - - if ((f = fopen(fname,"wt")) == NULL) return(308); - -/* Write [TITLE] section */ - - fprintf(f,"[TITLE]"); - for (i=0; i<3; i++) - { - if (strlen(Title[i]) > 0) fprintf(f,"\n%s",Title[i]); - } - -/* Write [JUNCTIONS] section */ -/* (Leave demands for [DEMANDS] section) */ - - fprintf(f,"\n\n[JUNCTIONS]"); - for (i=1; i<=Njuncs; i++) - fprintf(f,"\n %-31s %12.4f", Node[i].ID, Node[i].El*Ucf[ELEV]); - -/* Write [RESERVOIRS] section */ - - fprintf(f,"\n\n[RESERVOIRS]"); - for (i=1; i<=Ntanks; i++) - { - if (Tank[i].A == 0.0) - { - n = Tank[i].Node; - sprintf(s," %-31s %12.4f",Node[n].ID, Node[n].El*Ucf[ELEV]); - if ((j = Tank[i].Pat) > 0) - sprintf(s1," %-31s",Pattern[j].ID); - else - strcpy(s1,""); - fprintf(f, "\n%s %s", s,s1); - } - } - -/* Write [TANKS] section */ - - fprintf(f,"\n\n[TANKS]"); - for (i=1; i<=Ntanks; i++) - { - if (Tank[i].A > 0.0) - { - n = Tank[i].Node; - sprintf(s," %-31s %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f", - Node[n].ID, - Node[n].El*Ucf[ELEV], - (Tank[i].H0 - Node[n].El)*Ucf[ELEV], - (Tank[i].Hmin - Node[n].El)*Ucf[ELEV], - (Tank[i].Hmax - Node[n].El)*Ucf[ELEV], - sqrt(4.0*Tank[i].A/PI)*Ucf[ELEV], - Tank[i].Vmin*SQR(Ucf[ELEV])*Ucf[ELEV]); - if ((j = Tank[i].Vcurve) > 0) - sprintf(s1,"%-31s",Curve[j].ID); - else - strcpy(s1,""); - fprintf(f, "\n%s %s", s,s1); - } - } - -/* Write [PIPES] section */ - - fprintf(f,"\n\n[PIPES]"); - for (i=1; i<=Nlinks; i++) - { - if (Link[i].Type <= PIPE) - { - d = Link[i].Diam; - kc = Link[i].Kc; - if (Formflag == DW) kc = kc*Ucf[ELEV]*1000.0; - km = Link[i].Km*SQR(d)*SQR(d)/0.02517; - sprintf(s," %-31s %-31s %-31s %12.4f %12.4f", - Link[i].ID, - Node[Link[i].N1].ID, - Node[Link[i].N2].ID, - Link[i].Len*Ucf[LENGTH], - d*Ucf[DIAM]); - if (Formflag == DW) sprintf(s1, "%12.4f %12.4f", kc, km); - else sprintf(s1, "%12.4f %12.4f", kc, km); - if (Link[i].Type == CV) sprintf(s2,"CV"); - else if (Link[i].Stat == CLOSED) sprintf(s2,"CLOSED"); - else strcpy(s2,""); - fprintf(f,"\n%s %s %s",s,s1,s2); - } - } - -/* Write [PUMPS] section */ - - fprintf(f, "\n\n[PUMPS]"); - for (i=1; i<=Npumps; i++) - { - n = Pump[i].Link; - sprintf(s," %-31s %-31s %-31s", - Link[n].ID, - Node[Link[n].N1].ID, - Node[Link[n].N2].ID); - - /* Pump has constant power */ - if (Pump[i].Ptype == CONST_HP) - sprintf(s1, " POWER %.4f", Link[n].Km); - - /* Pump has a head curve */ - else if ((j = Pump[i].Hcurve) > 0) - sprintf(s1, " HEAD %s", Curve[j].ID); - - /* Old format used for pump curve */ - else - { - fprintf(f, "\n%s %12.4f %12.4f %12.4f 0.0 %12.4f",s, - -Pump[i].H0*Ucf[HEAD], - (-Pump[i].H0 - Pump[i].R*pow(Pump[i].Q0,Pump[i].N))*Ucf[HEAD], - Pump[i].Q0*Ucf[FLOW], - Pump[i].Qmax*Ucf[FLOW]); - continue; - } - strcat(s,s1); - - if ((j = Pump[i].Upat) > 0) - sprintf(s1," PATTERN %s",Pattern[j].ID); - else strcpy(s1,""); - strcat(s,s1); - - if (Link[n].Kc != 1.0) - sprintf(s1, " SPEED %.4f", Link[n].Kc); - else strcpy(s1,""); - strcat(s,s1); - - fprintf(f,"\n%s",s); - } - -/* Write [VALVES] section */ - - fprintf(f, "\n\n[VALVES]"); - for (i=1; i<=Nvalves; i++) - { - n = Valve[i].Link; - d = Link[n].Diam; - kc = Link[n].Kc; - if (kc == MISSING) kc = 0.0; - switch (Link[n].Type) - { - case FCV: kc *= Ucf[FLOW]; break; - case PRV: - case PSV: - case PBV: kc *= Ucf[PRESSURE]; break; - } - km = Link[n].Km*SQR(d)*SQR(d)/0.02517; - - sprintf(s," %-31s %-31s %-31s %12.4f %5s", - Link[n].ID, - Node[Link[n].N1].ID, - Node[Link[n].N2].ID, - d*Ucf[DIAM], - LinkTxt[Link[n].Type]); - - if (Link[n].Type == GPV && (j = ROUND(Link[n].Kc)) > 0) - sprintf(s1,"%-31s %12.4f", Curve[j].ID, km); - else sprintf(s1,"%12.4f %12.4f",kc,km); - - fprintf(f, "\n%s %s", s,s1); - } - -/* Write [DEMANDS] section */ - - fprintf(f, "\n\n[DEMANDS]"); - ucf = Ucf[DEMAND]; - for (i=1; i<=Njuncs; i++) - { - for (demand = Node[i].D; demand != NULL; demand = demand->next) - { - sprintf(s," %-31s %14.6f",Node[i].ID,ucf*demand->Base); - if ((j = demand->Pat) > 0) sprintf(s1," %s",Pattern[j].ID); - else strcpy(s1,""); - fprintf(f,"\n%s %s",s,s1); - } - } - -/* Write [EMITTERS] section */ - - fprintf(f, "\n\n[EMITTERS]"); - for (i=1; i<=Njuncs; i++) - { - if (Node[i].Ke == 0.0) continue; - ke = Ucf[FLOW]/pow(Ucf[PRESSURE]*Node[i].Ke,(1.0/Qexp)); - fprintf(f,"\n %-31s %14.6f",Node[i].ID,ke); - } - -/* Write [STATUS] section */ - - fprintf(f, "\n\n[STATUS]"); - for (i=1; i<=Nlinks; i++) - { - if (Link[i].Type <= PUMP) - { - if (Link[i].Stat == CLOSED) - fprintf(f, "\n %-31s %s",Link[i].ID,StatTxt[CLOSED]); - - /* Write pump speed here for pumps with old-style pump curve input */ - else if (Link[i].Type == PUMP) - { - n = PUMPINDEX(i); - if ( - Pump[n].Hcurve == 0 && - Pump[n].Ptype != CONST_HP && - Link[i].Kc != 1.0 - ) - fprintf(f, "\n %-31s %-.4f",Link[i].ID, Link[i].Kc); - } - } - - /* Write fixed-status PRVs & PSVs (setting = MISSING) */ - else if (Link[i].Kc == MISSING) - { - if (Link[i].Stat == OPEN) - fprintf(f, "\n %-31s %s",Link[i].ID,StatTxt[OPEN]); - if (Link[i].Stat == CLOSED) - fprintf(f, "\n%-31s %s",Link[i].ID,StatTxt[CLOSED]); - } - } - -/* Write [PATTERNS] section */ -/* (Use 6 pattern factors per line) */ - - fprintf(f, "\n\n[PATTERNS]"); - for (i=1; i<=Npats; i++) - { - for (j=0; j Njuncs) kc *= Ucf[HEAD]; - else kc *= Ucf[PRESSURE]; - fprintf(f, "\n%s IF NODE %s %s %.4f", s, - Node[n].ID, ControlTxt[Control[i].Type], kc); - break; - - /* Print timer control */ - case TIMER: - fprintf(f, "\n%s AT %s %.4f HOURS", - s, ControlTxt[TIMER], Control[i].Time/3600.); - break; - - /* Print time-of-day control */ - case TIMEOFDAY: - fprintf(f, "\n%s AT %s %s", - s, ControlTxt[TIMEOFDAY], clocktime(Atime, Control[i].Time)); - break; - } - } - -/* Write [QUALITY] section */ -/* (Skip nodes with default quality of 0) */ - - fprintf(f, "\n\n[QUALITY]"); - for (i=1; i<=Nnodes; i++) - { - if (Node[i].C0 == 0.0) continue; - fprintf(f, "\n %-31s %14.6f",Node[i].ID,Node[i].C0*Ucf[QUALITY]); - } - -/* Write [SOURCES] section */ - - fprintf(f, "\n\n[SOURCES]"); - for (i=1; i<=Nnodes; i++) - { - source = Node[i].S; - if (source == NULL) continue; - sprintf(s," %-31s %-8s %14.6f", - Node[i].ID, - SourceTxt[source->Type], - source->C0); - if ((j = source->Pat) > 0) - sprintf(s1,"%s",Pattern[j].ID); - else strcpy(s1,""); - fprintf(f,"\n%s %s",s,s1); - } - -/* Write [MIXING] section */ - - fprintf(f, "\n\n[MIXING]"); - for (i=1; i<=Ntanks; i++) - { - if (Tank[i].A == 0.0) continue; - fprintf(f, "\n %-31s %-8s %12.4f", - Node[Tank[i].Node].ID, - MixTxt[Tank[i].MixModel], - (Tank[i].V1max/Tank[i].Vmax)); - } - -/* Write [REACTIONS] section */ - - fprintf(f, "\n\n[REACTIONS]"); - fprintf(f, "\n ORDER BULK %-.2f", BulkOrder); - fprintf(f, "\n ORDER WALL %-.0f", WallOrder); - fprintf(f, "\n ORDER TANK %-.2f", TankOrder); - fprintf(f, "\n GLOBAL BULK %-.6f", Kbulk*SECperDAY); - fprintf(f, "\n GLOBAL WALL %-.6f", Kwall*SECperDAY); - if (Climit > 0.0) - fprintf(f, "\n LIMITING POTENTIAL %-.6f", Climit); - if (Rfactor != MISSING && Rfactor != 0.0) - fprintf(f, "\n ROUGHNESS CORRELATION %-.6f",Rfactor); - for (i=1; i<=Nlinks; i++) - { - if (Link[i].Type > PIPE) continue; - if (Link[i].Kb != Kbulk) - fprintf(f, "\n BULK %-31s %-.6f",Link[i].ID,Link[i].Kb*SECperDAY); - if (Link[i].Kw != Kwall) - fprintf(f, "\n WALL %-31s %-.6f",Link[i].ID,Link[i].Kw*SECperDAY); - } - for (i=1; i<=Ntanks; i++) - { - if (Tank[i].A == 0.0) continue; - if (Tank[i].Kb != Kbulk) - fprintf(f, "\n TANK %-31s %-.6f",Node[Tank[i].Node].ID, - Tank[i].Kb*SECperDAY); - } - -/* Write [ENERGY] section */ - - fprintf(f, "\n\n[ENERGY]"); - if (Ecost != 0.0) - fprintf(f, "\n GLOBAL PRICE %-.4f", Ecost); - if (Epat != 0) - fprintf(f, "\n GLOBAL PATTERN %s", Pattern[Epat].ID); - fprintf(f, "\n GLOBAL EFFIC %-.4f", Epump); - fprintf(f, "\n DEMAND CHARGE %-.4f", Dcost); - for (i=1; i<=Npumps; i++) - { - if (Pump[i].Ecost > 0.0) - fprintf(f, "\n PUMP %-31s PRICE %-.4f", - Link[Pump[i].Link].ID,Pump[i].Ecost); - if (Pump[i].Epat > 0.0) - fprintf(f, "\n PUMP %-31s PATTERN %s", - Link[Pump[i].Link].ID,Pattern[Pump[i].Epat].ID); - if (Pump[i].Ecurve > 0.0) - fprintf(f, "\n PUMP %-31s EFFIC %s", - Link[Pump[i].Link].ID,Curve[Pump[i].Ecurve].ID); - } - -/* Write [TIMES] section */ - - fprintf(f, "\n\n[TIMES]"); - fprintf(f, "\n DURATION %s",clocktime(Atime,Dur)); - fprintf(f, "\n HYDRAULIC TIMESTEP %s",clocktime(Atime,Hstep)); - fprintf(f, "\n QUALITY TIMESTEP %s",clocktime(Atime,Qstep)); - fprintf(f, "\n REPORT TIMESTEP %s",clocktime(Atime,Rstep)); - fprintf(f, "\n REPORT START %s",clocktime(Atime,Rstart)); - fprintf(f, "\n PATTERN TIMESTEP %s",clocktime(Atime,Pstep)); - fprintf(f, "\n PATTERN START %s",clocktime(Atime,Pstart)); - fprintf(f, "\n RULE TIMESTEP %s",clocktime(Atime,Rulestep)); - fprintf(f, "\n START CLOCKTIME %s",clocktime(Atime,Tstart)); - fprintf(f, "\n STATISTIC %s",TstatTxt[Tstatflag]); - -/* Write [OPTIONS] section */ - - fprintf(f, "\n\n[OPTIONS]"); - fprintf(f, "\n UNITS %s", FlowUnitsTxt[Flowflag]); - fprintf(f, "\n PRESSURE %s", PressUnitsTxt[Pressflag]); - fprintf(f, "\n HEADLOSS %s", FormTxt[Formflag]); - if (DefPat >= 1 && DefPat <= Npats) - fprintf(f, "\n PATTERN %s", Pattern[DefPat].ID); - if (Hydflag == USE) - fprintf(f, "\n HYDRAULICS USE %s", HydFname); - if (Hydflag == SAVE) - fprintf(f, "\n HYDRAULICS SAVE %s", HydFname); - if (ExtraIter == -1) - fprintf(f, "\n UNBALANCED STOP"); - if (ExtraIter >= 0) - fprintf(f, "\n UNBALANCED CONTINUE %d", ExtraIter); - if (Qualflag == CHEM) - fprintf(f, "\n QUALITY %s %s", ChemName, ChemUnits); - if (Qualflag == TRACE) - fprintf(f, "\n QUALITY TRACE %-31s", Node[TraceNode].ID); - if (Qualflag == AGE) - fprintf(f, "\n QUALITY AGE"); - if (Qualflag == NONE) - fprintf(f, "\n QUALITY NONE"); - fprintf(f, "\n DEMAND MULTIPLIER %-.4f", Dmult); - fprintf(f, "\n EMITTER EXPONENT %-.4f", 1.0/Qexp); - fprintf(f, "\n VISCOSITY %-.6f", Viscos/VISCOS); - fprintf(f, "\n DIFFUSIVITY %-.6f", Diffus/DIFFUS); - fprintf(f, "\n SPECIFIC GRAVITY %-.6f", SpGrav); - fprintf(f, "\n TRIALS %-d", MaxIter); - fprintf(f, "\n ACCURACY %-.8f", Hacc); - fprintf(f, "\n TOLERANCE %-.8f", Ctol*Ucf[QUALITY]); - fprintf(f, "\n CHECKFREQ %-d", CheckFreq); - fprintf(f, "\n MAXCHECK %-d", MaxCheck); - fprintf(f, "\n DAMPLIMIT %-.8f", DampLimit); - -/* Write [REPORT] section */ - - fprintf(f, "\n\n[REPORT]"); - fprintf(f, "\n PAGESIZE %d", PageSize); - fprintf(f, "\n STATUS %s", RptFlagTxt[Statflag]); - fprintf(f, "\n SUMMARY %s", RptFlagTxt[Summaryflag]); - fprintf(f, "\n ENERGY %s", RptFlagTxt[Energyflag]); - fprintf(f, "\n MESSAGES %s", RptFlagTxt[Messageflag]); - if (strlen(Rpt2Fname) > 0) - fprintf(f, "\n FILE %s", Rpt2Fname); - switch (Nodeflag) - { - case 0: - fprintf(f, "\n NODES NONE"); - break; - case 1: - fprintf(f, "\n NODES ALL"); - break; - default: - j = 0; - for (i=1; i<=Nnodes; i++) - { - if (Node[i].Rpt == 1) - { - if (j % 5 == 0) fprintf(f, "\n NODES "); - fprintf(f, "%s ", Node[i].ID); - j++; - } - } - } - switch (Linkflag) - { - case 0: - fprintf(f, "\n LINKS NONE"); - break; - case 1: - fprintf(f, "\n LINKS ALL"); - break; - default: - j = 0; - for (i=1; i<=Nlinks; i++) - { - if (Link[i].Rpt == 1) - { - if (j % 5 == 0) fprintf(f, "\n LINKS "); - fprintf(f, "%s ", Link[i].ID); - j++; - } - } - } - for (i=0; i -BIG) - fprintf(f, "\n %-20sABOVE %.6f", Field[i].Name, Field[i].RptLim[HI]); - } - else fprintf(f, "\n %-20sNO", Field[i].Name); - } - fprintf(f, "\n\n"); - -/* Write [COORDINATES] section */ - - if (Coordflag == TRUE) - { - fprintf(f, "\n\n[COORDINATES]"); - for (i=1; i<=Nnodes; i++) - { - if (Coord[i].HaveCoords == TRUE) - { - fprintf(f,"\n %-31s %14.6f %14.6f",Node[i].ID,Coord[i].X,Coord[i].Y); - } - } - fprintf(f, "\n\n"); - } - -/* Save auxilary data to new input file */ - - saveauxdata(f); - -/* Close the new input file */ - - fprintf(f, "\n[END]"); - fclose(f); - return(0); -} - +/* +****************************************************************************** +Project: OWA EPANET +Version: 2.2 +Module: inpfile.c +Description: saves network data to an EPANET formatted text file +Authors: see AUTHORS +Copyright: see AUTHORS +License: see LICENSE +Last Updated: 10/29/2019 +****************************************************************************** +*/ + +#include +#include +#include +#include + +#include "types.h" +#include "funcs.h" +#include "hash.h" +#include "text.h" + +// Defined in enumstxt.h in EPANET.C +extern char *LinkTxt[]; +extern char *FormTxt[]; +extern char *StatTxt[]; +extern char *FlowUnitsTxt[]; +extern char *PressUnitsTxt[]; +extern char *ControlTxt[]; +extern char *SourceTxt[]; +extern char *MixTxt[]; +extern char *TstatTxt[]; +extern char *RptFlagTxt[]; +extern char *SectTxt[]; + +void saveauxdata(Project *pr, FILE *f) +/* +------------------------------------------------------------ + Writes auxilary data from original input file to new file. +------------------------------------------------------------ +*/ +{ + int sect, newsect; + char *tok; + char write; + char line[MAXLINE + 1]; + char s[MAXLINE + 1]; + FILE *InFile = pr->parser.InFile; + + // Re-open the input file + if (InFile == NULL) + { + InFile = fopen(pr->parser.InpFname, "rt"); + if (InFile == NULL) return; + } + rewind(InFile); + sect = -1; + + // Read each line of the input file + while (fgets(line, MAXLINE, InFile) != NULL) + { + strcpy(s, line); + tok = strtok(s, SEPSTR); + if (tok == NULL) continue; + + // Check if line begins with a new section heading + if (*tok == '[') + { + newsect = findmatch(tok, SectTxt); + if (newsect >= 0) + { + sect = newsect; + if (sect == _END) break; + + // Write section heading to file + switch (sect) + { + case _LABELS: + case _BACKDROP: + case _TAGS: + fprintf(f, "\n%s", line); + } + } + } + + // Write line of auxilary data to file + else + { + write = FALSE; + switch (sect) + { + case _TAGS: + if (*tok == ';' || + (match("NODE", tok) && findnode(&pr->network, strtok(NULL, SEPSTR))) || + (match("LINK", tok) && findlink(&pr->network, strtok(NULL, SEPSTR)))) + write = TRUE; + break; + case _LABELS: + case _BACKDROP: + write = TRUE; break; + default: + break; + } + if (write) fprintf(f, "%s", line); + } + } + fclose(InFile); + InFile = NULL; +} + +int saveinpfile(Project *pr, const char *fname) +/* +------------------------------------------------- + Writes network data to text file. +------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + Report *rpt = &pr->report; + Outfile *out = &pr->outfile; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Times *time = &pr->times; + + int i, j, n; + double d, kc, ke, km, ucf; + char s[MAXLINE + 1], s1[MAXLINE + 1], s2[MAXLINE + 1]; + Pdemand demand; + Psource source; + FILE *f; + Slink *link; + Stank *tank; + Snode *node; + Spump *pump; + Scontrol *control; + Scurve *curve; + + // Open the new text file + if ((f = fopen(fname, "wt")) == NULL) return 302; + + // Write [TITLE] section + fprintf(f, s_TITLE); + for (i = 0; i < 3; i++) + { + if (strlen(pr->Title[i]) > 0) fprintf(f, "\n%s", pr->Title[i]); + } + + // Write [JUNCTIONS] section + // (Leave demands for [DEMANDS] section) + fprintf(f, "\n\n"); + fprintf(f, s_JUNCTIONS); + for (i = 1; i <= net->Njuncs; i++) + { + node = &net->Node[i]; + fprintf(f, "\n %-31s %12.4f", node->ID, node->El * pr->Ucf[ELEV]); + if (node->Comment) fprintf(f, " ;%s", node->Comment); + } + + // Write [RESERVOIRS] section + fprintf(f, "\n\n"); + fprintf(f, s_RESERVOIRS); + for (i = 1; i <= net->Ntanks; i++) + { + tank = &net->Tank[i]; + if (tank->A == 0.0) + { + node = &net->Node[tank->Node]; + sprintf(s, " %-31s %12.4f", node->ID, node->El * pr->Ucf[ELEV]); + if ((j = tank->Pat) > 0) sprintf(s1, " %s", net->Pattern[j].ID); + else strcpy(s1, " "); + fprintf(f, "\n%s %-31s", s, s1); + if (node->Comment) fprintf(f, " ;%s", node->Comment); + } + } + + // Write [TANKS] section + fprintf(f, "\n\n"); + fprintf(f, s_TANKS); + for (i = 1; i <= net->Ntanks; i++) + { + tank = &net->Tank[i]; + if (tank->A > 0.0) + { + node = &net->Node[tank->Node]; + sprintf(s, " %-31s %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f", + node->ID, node->El * pr->Ucf[ELEV], + (tank->H0 - node->El) * pr->Ucf[ELEV], + (tank->Hmin - node->El) * pr->Ucf[ELEV], + (tank->Hmax - node->El) * pr->Ucf[ELEV], + sqrt(4.0 * tank->A / PI) * pr->Ucf[ELEV], + tank->Vmin * SQR(pr->Ucf[ELEV]) * pr->Ucf[ELEV]); + if ((j = tank->Vcurve) > 0) sprintf(s1, "%s", net->Curve[j].ID); + else if (tank->CanOverflow) strcpy(s1, "*"); + else strcpy(s1, " "); + fprintf(f, "\n%s %-31s", s, s1); + if (tank->CanOverflow) fprintf(f, " YES "); + if (node->Comment) fprintf(f, " ;%s", node->Comment); + } + } + + // Write [PIPES] section + fprintf(f, "\n\n"); + fprintf(f, s_PIPES); + for (i = 1; i <= net->Nlinks; i++) + { + link = &net->Link[i]; + if (link->Type <= PIPE) + { + d = link->Diam; + kc = link->Kc; + if (hyd->Formflag == DW) kc = kc * pr->Ucf[ELEV] * 1000.0; + km = link->Km * SQR(d) * SQR(d) / 0.02517; + + sprintf(s, " %-31s %-31s %-31s %12.4f %12.4f %12.4f %12.4f", + link->ID, net->Node[link->N1].ID, net->Node[link->N2].ID, + link->Len * pr->Ucf[LENGTH], d * pr->Ucf[DIAM], kc, km); + + if (link->Type == CVPIPE) sprintf(s2, "CV"); + else if (link->Status == CLOSED) sprintf(s2, "CLOSED"); + else strcpy(s2, " "); + fprintf(f, "\n%s %-6s", s, s2); + if (link->Comment) fprintf(f, " ;%s", link->Comment); + } + } + + // Write [PUMPS] section + fprintf(f, "\n\n"); + fprintf(f, s_PUMPS); + for (i = 1; i <= net->Npumps; i++) + { + n = net->Pump[i].Link; + link = &net->Link[n]; + pump = &net->Pump[i]; + sprintf(s, " %-31s %-31s %-31s", link->ID, net->Node[link->N1].ID, + net->Node[link->N2].ID); + + // Pump has constant power + if (pump->Ptype == CONST_HP) sprintf(s1, " POWER %.4f", link->Km); + + // Pump has a head curve + else if ((j = pump->Hcurve) > 0) + { + sprintf(s1, " HEAD %s", net->Curve[j].ID); + } + + // Old format used for pump curve + else + { + fprintf(f, "\n%s %12.4f %12.4f %12.4f 0.0 %12.4f", s, + -pump->H0 * pr->Ucf[HEAD], + (-pump->H0 - pump->R * pow(pump->Q0, pump->N)) * pr->Ucf[HEAD], + pump->Q0 * pr->Ucf[FLOW], pump->Qmax * pr->Ucf[FLOW]); + continue; + } + strcat(s, s1); + + // Optional speed pattern + if ((j = pump->Upat) > 0) + { + sprintf(s1, " PATTERN %s", net->Pattern[j].ID); + strcat(s, s1); + } + + // Optional speed setting + if (link->Kc != 1.0) + { + sprintf(s1, " SPEED %.4f", link->Kc); + strcat(s, s1); + } + + fprintf(f, "\n%s", s); + if (link->Comment) fprintf(f, " ;%s", link->Comment); + + } + + // Write [VALVES] section + fprintf(f, "\n\n"); + fprintf(f, s_VALVES); + for (i = 1; i <= net->Nvalves; i++) + { + n = net->Valve[i].Link; + link = &net->Link[n]; + d = link->Diam; + + // Valve setting + kc = link->Kc; + if (kc == MISSING) kc = 0.0; + switch (link->Type) + { + case FCV: + kc *= pr->Ucf[FLOW]; + break; + case PRV: + case PSV: + case PBV: + kc *= pr->Ucf[PRESSURE]; + break; + default: + break; + } + km = link->Km * SQR(d) * SQR(d) / 0.02517; + + sprintf(s, " %-31s %-31s %-31s %12.4f %5s", + link->ID, net->Node[link->N1].ID, + net->Node[link->N2].ID, d * pr->Ucf[DIAM], + LinkTxt[link->Type]); + + // For GPV, setting = head curve index + if (link->Type == GPV && (j = ROUND(link->Kc)) > 0) + { + sprintf(s1, "%-31s %12.4f", net->Curve[j].ID, km); + } + else sprintf(s1, "%12.4f %12.4f", kc, km); + fprintf(f, "\n%s %s", s, s1); + if (link->Comment) fprintf(f, " ;%s", link->Comment); + } + + + // Write [DEMANDS] section + fprintf(f, "\n\n"); + fprintf(f, s_DEMANDS); + ucf = pr->Ucf[DEMAND]; + for (i = 1; i <= net->Njuncs; i++) + { + node = &net->Node[i]; + for (demand = node->D; demand != NULL; demand = demand->next) + { + sprintf(s, " %-31s %14.6f", node->ID, ucf * demand->Base); + if ((j = demand->Pat) > 0) sprintf(s1, " %-31s", net->Pattern[j].ID); + else strcpy(s1, " "); + fprintf(f, "\n%s %-31s", s, s1); + if (demand->Name) fprintf(f, " ;%s", demand->Name); + } + } + + + // Write [EMITTERS] section + fprintf(f, "\n\n"); + fprintf(f, s_EMITTERS); + for (i = 1; i <= net->Njuncs; i++) + { + node = &net->Node[i]; + if (node->Ke == 0.0) continue; + ke = pr->Ucf[FLOW] / pow(pr->Ucf[PRESSURE] * node->Ke, (1.0 / hyd->Qexp)); + fprintf(f, "\n %-31s %14.6f", node->ID, ke); + } + + // Write [STATUS] section + fprintf(f, "\n\n"); + fprintf(f, s_STATUS); + for (i = 1; i <= net->Nlinks; i++) + { + link = &net->Link[i]; + if (link->Type <= PUMP) + { + if (link->Status == CLOSED) + { + fprintf(f, "\n %-31s %s", link->ID, StatTxt[CLOSED]); + } + + // Write pump speed here for pumps with old-style pump curve input + else if (link->Type == PUMP) + { + n = findpump(net, i); + pump = &net->Pump[n]; + if (pump->Hcurve == 0 && pump->Ptype != CONST_HP && + link->Kc != 1.0) + { + fprintf(f, "\n %-31s %-.4f", link->ID, link->Kc); + } + } + } + + // Write fixed-status PRVs & PSVs (setting = MISSING) + else if (link->Kc == MISSING) + { + if (link->Status == OPEN) + { + fprintf(f, "\n %-31s %s", link->ID, StatTxt[OPEN]); + } + if (link->Status == CLOSED) + { + fprintf(f, "\n%-31s %s", link->ID, StatTxt[CLOSED]); + } + } + } + + // Write [PATTERNS] section + // (Use 6 pattern factors per line) + fprintf(f, "\n\n"); + fprintf(f, s_PATTERNS); + for (i = 1; i <= net->Npats; i++) + { + if (net->Pattern[i].Comment) fprintf(f, "\n;%s", net->Pattern[i].Comment); + for (j = 0; j < net->Pattern[i].Length; j++) + { + if (j % 6 == 0) fprintf(f, "\n %-31s", net->Pattern[i].ID); + fprintf(f, " %12.4f", net->Pattern[i].F[j]); + } + } + + // Write [CURVES] section + fprintf(f, "\n\n"); + fprintf(f, s_CURVES); + for (i = 1; i <= net->Ncurves; i++) + { + if (net->Curve[i].Comment) fprintf(f, "\n;%s", net->Curve[i].Comment); + for (j = 0; j < net->Curve[i].Npts; j++) + { + curve = &net->Curve[i]; + fprintf(f, "\n %-31s %12.4f %12.4f", curve->ID, curve->X[j], curve->Y[j]); + } + } + + // Write [CONTROLS] section + fprintf(f, "\n\n"); + fprintf(f, s_CONTROLS); + for (i = 1; i <= net->Ncontrols; i++) + { + // Check that controlled link exists + control = &net->Control[i]; + if ((j = control->Link) <= 0) continue; + link = &net->Link[j]; + + // Get text of control's link status/setting + if (control->Setting == MISSING) + { + sprintf(s, " LINK %s %s ", link->ID, StatTxt[control->Status]); + } + else + { + kc = control->Setting; + switch (link->Type) + { + case PRV: + case PSV: + case PBV: + kc *= pr->Ucf[PRESSURE]; + break; + case FCV: + kc *= pr->Ucf[FLOW]; + break; + default: + break; + } + sprintf(s, " LINK %s %.4f", link->ID, kc); + } + + switch (control->Type) + { + // Print level control + case LOWLEVEL: + case HILEVEL: + n = control->Node; + node = &net->Node[n]; + kc = control->Grade - node->El; + if (n > net->Njuncs) kc *= pr->Ucf[HEAD]; + else kc *= pr->Ucf[PRESSURE]; + fprintf(f, "\n%s IF NODE %s %s %.4f", s, node->ID, + ControlTxt[control->Type], kc); + break; + + // Print timer control + case TIMER: + fprintf(f, "\n%s AT %s %.4f HOURS", s, ControlTxt[TIMER], + control->Time / 3600.); + break; + + // Print time-of-day control + case TIMEOFDAY: + fprintf(f, "\n%s AT %s %s", s, ControlTxt[TIMEOFDAY], + clocktime(rpt->Atime, control->Time)); + break; + } + } + + // Write [RULES] section + fprintf(f, "\n\n"); + fprintf(f, s_RULES); + for (i = 1; i <= net->Nrules; i++) + { + fprintf(f, "\nRULE %s", pr->network.Rule[i].label); + writerule(pr, f, i); // see RULES.C + fprintf(f, "\n"); + } + + // Write [QUALITY] section + // (Skip nodes with default quality of 0) + fprintf(f, "\n\n"); + fprintf(f, s_QUALITY); + for (i = 1; i <= net->Nnodes; i++) + { + node = &net->Node[i]; + if (node->C0 == 0.0) continue; + fprintf(f, "\n %-31s %14.6f", node->ID, node->C0 * pr->Ucf[QUALITY]); + } + + // Write [SOURCES] section + fprintf(f, "\n\n"); + fprintf(f, s_SOURCES); + for (i = 1; i <= net->Nnodes; i++) + { + node = &net->Node[i]; + source = node->S; + if (source == NULL) continue; + sprintf(s, " %-31s %-8s %14.6f", node->ID, SourceTxt[source->Type], + source->C0); + if ((j = source->Pat) > 0) + { + sprintf(s1, "%s", net->Pattern[j].ID); + } + else strcpy(s1, ""); + fprintf(f, "\n%s %s", s, s1); + } + + // Write [MIXING] section + fprintf(f, "\n\n"); + fprintf(f, s_MIXING); + for (i = 1; i <= net->Ntanks; i++) + { + tank = &net->Tank[i]; + if (tank->A == 0.0) continue; + fprintf(f, "\n %-31s %-8s %12.4f", net->Node[tank->Node].ID, + MixTxt[tank->MixModel], (tank->V1max / tank->Vmax)); + } + + // Write [REACTIONS] section + fprintf(f, "\n\n"); + fprintf(f, s_REACTIONS); + + // General parameters + fprintf(f, "\n ORDER BULK %-.2f", qual->BulkOrder); + fprintf(f, "\n ORDER WALL %-.0f", qual->WallOrder); + fprintf(f, "\n ORDER TANK %-.2f", qual->TankOrder); + fprintf(f, "\n GLOBAL BULK %-.6f", qual->Kbulk * SECperDAY); + fprintf(f, "\n GLOBAL WALL %-.6f", qual->Kwall * SECperDAY); + + if (qual->Climit > 0.0) + { + fprintf(f, "\n LIMITING POTENTIAL %-.6f", qual->Climit * pr->Ucf[QUALITY]); + } + if (qual->Rfactor != MISSING && qual->Rfactor != 0.0) + { + fprintf(f, "\n ROUGHNESS CORRELATION %-.6f", qual->Rfactor); + } + + // Pipe-specific parameters + for (i = 1; i <= net->Nlinks; i++) + { + link = &net->Link[i]; + if (link->Type > PIPE) continue; + if (link->Kb != qual->Kbulk) + { + fprintf(f, "\n BULK %-31s %-.6f", link->ID, link->Kb * SECperDAY); + } + if (link->Kw != qual->Kwall) + { + fprintf(f, "\n WALL %-31s %-.6f", link->ID, link->Kw * SECperDAY); + } + } + + // Tank parameters + for (i = 1; i <= net->Ntanks; i++) + { + tank = &net->Tank[i]; + if (tank->A == 0.0) continue; + if (tank->Kb != qual->Kbulk) + { + fprintf(f, "\n TANK %-31s %-.6f", net->Node[tank->Node].ID, + tank->Kb * SECperDAY); + } + } + + // Write [ENERGY] section + fprintf(f, "\n\n"); + fprintf(f, s_ENERGY); + + // General parameters + if (hyd->Ecost != 0.0) + { + fprintf(f, "\n GLOBAL PRICE %-.4f", hyd->Ecost); + } + if (hyd->Epat != 0) + { + fprintf(f, "\n GLOBAL PATTERN %s", net->Pattern[hyd->Epat].ID); + } + fprintf(f, "\n GLOBAL EFFIC %-.4f", hyd->Epump); + fprintf(f, "\n DEMAND CHARGE %-.4f", hyd->Dcost); + + // Pump-specific parameters + for (i = 1; i <= net->Npumps; i++) + { + pump = &net->Pump[i]; + if (pump->Ecost > 0.0) + { + fprintf(f, "\n PUMP %-31s PRICE %-.4f", net->Link[pump->Link].ID, + pump->Ecost); + } + if (pump->Epat > 0.0) + { + fprintf(f, "\n PUMP %-31s PATTERN %s", net->Link[pump->Link].ID, + net->Pattern[pump->Epat].ID); + } + if (pump->Ecurve > 0.0) + { + fprintf(f, "\n PUMP %-31s EFFIC %s", net->Link[pump->Link].ID, + net->Curve[pump->Ecurve].ID); + } + } + + // Write [TIMES] section + fprintf(f, "\n\n"); + fprintf(f, s_TIMES); + fprintf(f, "\n DURATION %s", clocktime(rpt->Atime, time->Dur)); + fprintf(f, "\n HYDRAULIC TIMESTEP %s", clocktime(rpt->Atime, time->Hstep)); + fprintf(f, "\n QUALITY TIMESTEP %s", clocktime(rpt->Atime, time->Qstep)); + fprintf(f, "\n REPORT TIMESTEP %s", clocktime(rpt->Atime, time->Rstep)); + fprintf(f, "\n REPORT START %s", clocktime(rpt->Atime, time->Rstart)); + fprintf(f, "\n PATTERN TIMESTEP %s", clocktime(rpt->Atime, time->Pstep)); + fprintf(f, "\n PATTERN START %s", clocktime(rpt->Atime, time->Pstart)); + fprintf(f, "\n RULE TIMESTEP %s", clocktime(rpt->Atime, time->Rulestep)); + fprintf(f, "\n START CLOCKTIME %s", clocktime(rpt->Atime, time->Tstart)); + fprintf(f, "\n STATISTIC %s", TstatTxt[rpt->Tstatflag]); + + // Write [OPTIONS] section + fprintf(f, "\n\n"); + fprintf(f, s_OPTIONS); + fprintf(f, "\n UNITS %s", FlowUnitsTxt[parser->Flowflag]); + fprintf(f, "\n PRESSURE %s", PressUnitsTxt[parser->Pressflag]); + fprintf(f, "\n HEADLOSS %s", FormTxt[hyd->Formflag]); + switch (out->Hydflag) + { + case USE: + fprintf(f, "\n HYDRAULICS USE %s", out->HydFname); + break; + case SAVE: + fprintf(f, "\n HYDRAULICS SAVE %s", out->HydFname); + break; + } + if (hyd->ExtraIter == -1) + { + fprintf(f, "\n UNBALANCED STOP"); + } + if (hyd->ExtraIter >= 0) + { + fprintf(f, "\n UNBALANCED CONTINUE %d", hyd->ExtraIter); + } + + switch (qual->Qualflag) + { + case CHEM: + fprintf(f, "\n QUALITY %s %s", + qual->ChemName, qual->ChemUnits); + break; + case TRACE: + fprintf(f, "\n QUALITY TRACE %-31s", + net->Node[qual->TraceNode].ID); + break; + case AGE: + fprintf(f, "\n QUALITY AGE"); + break; + case NONE: + fprintf(f, "\n QUALITY NONE"); + break; + } + + fprintf(f, "\n DEMAND MULTIPLIER %-.4f", hyd->Dmult); + fprintf(f, "\n EMITTER EXPONENT %-.4f", 1.0 / hyd->Qexp); + fprintf(f, "\n VISCOSITY %-.6f", hyd->Viscos / VISCOS); + fprintf(f, "\n DIFFUSIVITY %-.6f", qual->Diffus / DIFFUS); + fprintf(f, "\n SPECIFIC GRAVITY %-.6f", hyd->SpGrav); + fprintf(f, "\n TRIALS %-d", hyd->MaxIter); + fprintf(f, "\n ACCURACY %-.8f", hyd->Hacc); + fprintf(f, "\n TOLERANCE %-.8f", qual->Ctol * pr->Ucf[QUALITY]); + fprintf(f, "\n CHECKFREQ %-d", hyd->CheckFreq); + fprintf(f, "\n MAXCHECK %-d", hyd->MaxCheck); + fprintf(f, "\n DAMPLIMIT %-.8f", hyd->DampLimit); + if (hyd->HeadErrorLimit > 0.0) + { + fprintf(f, "\n HEADERROR %-.8f", + hyd->HeadErrorLimit * pr->Ucf[HEAD]); + } + if (hyd->FlowChangeLimit > 0.0) + { + fprintf(f, "\n FLOWCHANGE %-.8f", + hyd->FlowChangeLimit * pr->Ucf[FLOW]); + } + if (hyd->DemandModel == PDA) + { + fprintf(f, "\n DEMAND MODEL PDA"); + fprintf(f, "\n MINIMUM PRESSURE %-.4f", hyd->Pmin * pr->Ucf[PRESSURE]); + fprintf(f, "\n REQUIRED PRESSURE %-.4f", hyd->Preq * pr->Ucf[PRESSURE]); + fprintf(f, "\n PRESSURE EXPONENT %-.4f", hyd->Pexp); + } + + // Write [REPORT] section + fprintf(f, "\n\n"); + fprintf(f, s_REPORT); + + // General options + fprintf(f, "\n PAGESIZE %d", rpt->PageSize); + fprintf(f, "\n STATUS %s", RptFlagTxt[rpt->Statflag]); + fprintf(f, "\n SUMMARY %s", RptFlagTxt[rpt->Summaryflag]); + fprintf(f, "\n ENERGY %s", RptFlagTxt[rpt->Energyflag]); + fprintf(f, "\n MESSAGES %s", RptFlagTxt[rpt->Messageflag]); + if (strlen(rpt->Rpt2Fname) > 0) + { + fprintf(f, "\n FILE %s", rpt->Rpt2Fname); + } + + // Node reporting + switch (rpt->Nodeflag) + { + case 0: + fprintf(f, "\n NODES NONE"); + break; + case 1: + fprintf(f, "\n NODES ALL"); + break; + default: + j = 0; + for (i = 1; i <= net->Nnodes; i++) + { + node = &net->Node[i]; + if (node->Rpt == 1) + { + if (j % 5 == 0) fprintf(f, "\n NODES "); + fprintf(f, "%s ", node->ID); + j++; + } + } + } + + // Link reporting + switch (rpt->Linkflag) + { + case 0: + fprintf(f, "\n LINKS NONE"); + break; + case 1: + fprintf(f, "\n LINKS ALL"); + break; + default: + j = 0; + for (i = 1; i <= net->Nlinks; i++) + { + link = &net->Link[i]; + if (link->Rpt == 1) + { + if (j % 5 == 0) fprintf(f, "\n LINKS "); + fprintf(f, "%s ", link->ID); + j++; + } + } + } + + // Field formatting options + for (i = 0; i < FRICTION; i++) + { + SField *field = &rpt->Field[i]; + if (field->Enabled == TRUE) + { + fprintf(f, "\n %-20sPRECISION %d", field->Name, field->Precision); + if (field->RptLim[LOW] < BIG) + { + fprintf(f, "\n %-20sBELOW %.6f", field->Name, field->RptLim[LOW]); + } + if (field->RptLim[HI] > -BIG) + { + fprintf(f, "\n %-20sABOVE %.6f", field->Name, field->RptLim[HI]); + } + } + else fprintf(f, "\n %-20sNO",field->Name); + } + + // Write [COORDINATES] section + fprintf(f, "\n\n"); + fprintf(f, s_COORDS); + for (i = 1; i <= net->Nnodes; i++) + { + node = &net->Node[i]; + if (node->X == MISSING || node->Y == MISSING) continue; + fprintf(f, "\n %-31s %14.6f %14.6f", node->ID, node->X, node->Y); + } + + // Write [VERTICES] section + fprintf(f, "\n\n"); + fprintf(f, s_VERTICES); + for (i = 1; i <= net->Nlinks; i++) + { + link = &net->Link[i]; + if (link->Vertices != NULL) + { + for (j = 0; j < link->Vertices->Npts; j++) + fprintf(f, "\n %-31s %14.6f %14.6f", + link->ID, link->Vertices->X[j], link->Vertices->Y[j]); + } + } + + // Save auxilary data to new input file + fprintf(f, "\n"); + saveauxdata(pr, f); + + // Close the new input file + fprintf(f, "\n%s\n", s_END); + fclose(f); + return 0; +} diff --git a/src/input1.c b/src/input1.c old mode 100755 new mode 100644 index 15e1ae8..10a6f95 --- a/src/input1.c +++ b/src/input1.c @@ -1,641 +1,707 @@ -/* -********************************************************************* - -INPUT1.C -- Input Functions for EPANET Program - -VERSION: 2.00 -DATE: 5/30/00 - 9/7/00 - 11/19/01 - 6/24/02 - 2/14/08 (2.00.12) -AUTHOR: L. Rossman - US EPA - NRMRL - - This module initializes, retrieves, and adjusts the input - data for a network simulation. - - The entry point for this module is: - getdata() -- called from ENopen() in EPANET.C. - -********************************************************************* -*/ - -#include -#include -#include -#ifndef __APPLE__ -#include -#endif -#include -#include "hash.h" -#include "text.h" -#include "types.h" -#include "funcs.h" -#define EXTERN extern -#include "vars.h" - -/* - --------------------- Module Global Variables ---------------------- -*/ - -#define MAXITER 200 /* Default max. # hydraulic iterations */ //(2.00.12 - LR) -#define HACC 0.001 /* Default hydraulics convergence ratio */ -#define HTOL 0.0005 /* Default hydraulic head tolerance (ft) */ - -/*** Updated 11/19/01 ***/ -#define QTOL 0.0001 /* Default flow rate tolerance (cfs) */ - -#define AGETOL 0.01 /* Default water age tolerance (hrs) */ -#define CHEMTOL 0.01 /* Default concentration tolerance */ -#define PAGESIZE 0 /* Default uses no page breaks */ -#define SPGRAV 1.0 /* Default specific gravity */ -#define EPUMP 75 /* Default pump efficiency */ -#define DEFPATID "1" /* Default demand pattern ID */ - -/* - These next three parameters are used in the hydraulics solver: -*/ - -#define RQTOL 1E-7 /* Default low flow resistance tolerance */ -#define CHECKFREQ 2 /* Default status check frequency */ -#define MAXCHECK 10 /* Default # iterations for status checks */ -#define DAMPLIMIT 0 /* Default damping threshold */ //(2.00.12 - LR) - -extern char *Fldname[]; /* Defined in enumstxt.h in EPANET.C */ -extern char *RptFlowUnitsTxt[]; - - -int getdata() -/* -**---------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: reads in network data from disk file -**---------------------------------------------------------------- -*/ -{ - int errcode = 0; - setdefaults(); /* Assign default data values */ - initreport(); /* Initialize reporting options */ - rewind(InFile); /* Rewind input file */ - ERRCODE(readdata()); /* Read in network data */ - if (!errcode) adjustdata(); /* Adjust data for default values */ - if (!errcode) initunits(); /* Initialize units on input data */ - ERRCODE(inittanks()); /* Initialize tank volumes */ - if (!errcode) convertunits(); /* Convert units on input data */ - return(errcode); -} /* End of getdata */ - - -void setdefaults() -/* -**---------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: assigns default values to global variables -**---------------------------------------------------------------- -*/ -{ - strncpy(Title[0],"",MAXMSG); - strncpy(Title[1],"",MAXMSG); - strncpy(Title[2],"",MAXMSG); - strncpy(TmpDir,"",MAXFNAME); //(2.00.12 - LR) - strncpy(TmpFname,"",MAXFNAME); //(2.00.12 - LR) - strncpy(HydFname,"",MAXFNAME); - strncpy(MapFname,"",MAXFNAME); - strncpy(ChemName,t_CHEMICAL,MAXID); - strncpy(ChemUnits,u_MGperL,MAXID); - strncpy(DefPatID,DEFPATID,MAXID); - Hydflag = SCRATCH; /* No external hydraulics file */ - Qualflag = NONE; /* No quality simulation */ - Formflag = HW; /* Use Hazen-Williams formula */ - Unitsflag = US; /* US unit system */ - Flowflag = GPM; /* Flow units are gpm */ - Pressflag = PSI; /* Pressure units are psi */ - Tstatflag = SERIES; /* Generate time series output */ - Warnflag = FALSE; /* Warning flag is off */ - Htol = HTOL; /* Default head tolerance */ - Qtol = QTOL; /* Default flow tolerance */ - Hacc = HACC; /* Default hydraulic accuracy */ - Ctol = MISSING; /* No pre-set quality tolerance */ - MaxIter = MAXITER; /* Default max. hydraulic trials */ - ExtraIter = -1; /* Stop if network unbalanced */ - Dur = 0; /* 0 sec duration (steady state) */ - Tstart = 0; /* Starting time of day */ - Pstart = 0; /* Starting pattern period */ - Hstep = 3600; /* 1 hr hydraulic time step */ - Qstep = 0; /* No pre-set quality time step */ - Pstep = 3600; /* 1 hr time pattern period */ - Rstep = 3600; /* 1 hr reporting period */ - Rulestep = 0; /* No pre-set rule time step */ - Rstart = 0; /* Start reporting at time 0 */ - TraceNode = 0; /* No source tracing */ - BulkOrder = 1.0; /* 1st-order bulk reaction rate */ - WallOrder = 1.0; /* 1st-order wall reaction rate */ - TankOrder = 1.0; /* 1st-order tank reaction rate */ - Kbulk = 0.0; /* No global bulk reaction */ - Kwall = 0.0; /* No global wall reaction */ - Climit = 0.0; /* No limiting potential quality */ - Diffus = MISSING; /* Temporary diffusivity */ - Rfactor = 0.0; /* No roughness-reaction factor */ - Viscos = MISSING; /* Temporary viscosity */ - SpGrav = SPGRAV; /* Default specific gravity */ - DefPat = 0; /* Default demand pattern index */ - Epat = 0; /* No energy price pattern */ - Ecost = 0.0; /* Zero unit energy cost */ - Dcost = 0.0; /* Zero energy demand charge */ - Epump = EPUMP; /* Default pump efficiency */ - Emax = 0.0; /* Zero peak energy usage */ - Qexp = 2.0; /* Flow exponent for emitters */ - Dmult = 1.0; /* Demand multiplier */ - RQtol = RQTOL; /* Default hydraulics parameters */ - CheckFreq = CHECKFREQ; - MaxCheck = MAXCHECK; - DampLimit = DAMPLIMIT; //(2.00.12 - LR) -} /* End of setdefaults */ - - -void initreport() -/* -**---------------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: initializes reporting options -**---------------------------------------------------------------------- -*/ -{ - int i; - strncpy(Rpt2Fname,"",MAXFNAME); - PageSize = PAGESIZE; /* Default page size for report */ - Summaryflag = TRUE; /* Write summary report */ - Messageflag = TRUE; /* Report error/warning messages */ - Statflag = FALSE; /* No hydraulic status reports */ - Energyflag = FALSE; /* No energy usage report */ - Nodeflag = 0; /* No reporting on nodes */ - Linkflag = 0; /* No reporting on links */ - for (i=0; i Pstep) Hstep = Pstep; - if (Hstep > Rstep) Hstep = Rstep; - -/* Report start time cannot be greater than simulation duration */ - if (Rstart > Dur) Rstart = 0; - -/* No water quality analysis for steady state run */ - if (Dur == 0) Qualflag = NONE; - -/* If no quality timestep, then make it 1/10 of hydraulic timestep */ - if (Qstep == 0) Qstep = Hstep/10; - -/* If no rule time step then make it 1/10 of hydraulic time step; */ -/* Rule time step cannot be greater than hydraulic time step */ - if (Rulestep == 0) Rulestep = Hstep/10; - Rulestep = MIN(Rulestep, Hstep); - -/* Quality timestep cannot exceed hydraulic timestep */ - Qstep = MIN(Qstep, Hstep); - -/* If no quality tolerance, then use default values */ - if (Ctol == MISSING) - { - if (Qualflag == AGE) Ctol = AGETOL; - else Ctol = CHEMTOL; - } - -/* Determine unit system based on flow units */ - switch (Flowflag) - { - case LPS: /* Liters/sec */ - case LPM: /* Liters/min */ - case MLD: /* megaliters/day */ - case CMH: /* cubic meters/hr */ - case CMD: /* cubic meters/day */ - Unitsflag = SI; - break; - default: - Unitsflag = US; - } - -/* Revise pressure units depending on flow units */ - if (Unitsflag != SI) Pressflag = PSI; - else if (Pressflag == PSI) Pressflag = METERS; - -/* Store value of viscosity & diffusivity */ - ucf = 1.0; - if (Unitsflag == SI) ucf = SQR(MperFT); - - if (Viscos == MISSING) /* No value supplied */ - Viscos = VISCOS; - else if (Viscos > 1.e-3) /* Multiplier supplied */ - Viscos = Viscos*VISCOS; - else /* Actual value supplied */ - Viscos = Viscos/ucf; - - if (Diffus == MISSING) - Diffus = DIFFUS; - else if (Diffus > 1.e-4) - Diffus = Diffus*DIFFUS; - else - Diffus = Diffus/ucf; - -/* - Set exponent in head loss equation and adjust flow-resistance tolerance. -*/ - if (Formflag == HW) Hexp = 1.852; - else Hexp = 2.0; - -/*** Updated 9/7/00 ***/ -/*** No adjustment made to flow-resistance tolerance ***/ - /*RQtol = RQtol/Hexp;*/ - -/* See if default reaction coeffs. apply */ - for (i=1; i<=Nlinks; i++) - { - if (Link[i].Type > PIPE) continue; - if (Link[i].Kb == MISSING) Link[i].Kb = Kbulk; /* Bulk coeff. */ - if (Link[i].Kw == MISSING) /* Wall coeff. */ - { - /* Rfactor is the pipe roughness correlation factor */ - if (Rfactor == 0.0) Link[i].Kw = Kwall; - else if ((Link[i].Kc > 0.0) && (Link[i].Diam > 0.0)) - { - if (Formflag == HW) Link[i].Kw = Rfactor/Link[i].Kc; - if (Formflag == DW) Link[i].Kw = Rfactor/ABS(log(Link[i].Kc/Link[i].Diam)); - if (Formflag == CM) Link[i].Kw = Rfactor*Link[i].Kc; - } - else Link[i].Kw = 0.0; - } - } - for (i=1; i<=Ntanks; i++) - if (Tank[i].Kb == MISSING) Tank[i].Kb = Kbulk; - -/* Use default pattern if none assigned to a demand */ - for (i=1; i<=Nnodes; i++) - { - for (demand = Node[i].D; demand != NULL; demand = demand->next) - if (demand->Pat == 0) demand->Pat = DefPat; - } - -/* Remove QUALITY as a reporting variable if no WQ analysis */ - if (Qualflag == NONE) Field[QUALITY].Enabled = FALSE; - -} /* End of adjustdata */ - - -int inittanks() -/* -**--------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: initializes volumes in non-cylindrical tanks -**--------------------------------------------------------------- -*/ -{ - int i,j,n = 0; - double a; - int errcode = 0, - levelerr; - - for (j=1; j<=Ntanks; j++) - { - - /* Skip reservoirs */ - if (Tank[j].A == 0.0) continue; - - /* Check for valid lower/upper tank levels */ - levelerr = 0; - if (Tank[j].H0 > Tank[j].Hmax || - Tank[j].Hmin > Tank[j].Hmax || - Tank[j].H0 < Tank[j].Hmin - ) levelerr = 1; - - /* Check that tank heights are within volume curve */ - i = Tank[j].Vcurve; - if (i > 0) - { - n = Curve[i].Npts - 1; - if (Tank[j].Hmin < Curve[i].X[0] || - Tank[j].Hmax > Curve[i].X[n] - ) levelerr = 1; - } - - /* Report error in levels if found */ - if (levelerr) - { - sprintf(Msg,ERR225,Node[Tank[j].Node].ID); - writeline(Msg); - errcode = 200; - } - - /* Else if tank has a volume curve, */ - else if (i > 0) - { - /* Find min., max., and initial volumes from curve */ - Tank[j].Vmin = interp(Curve[i].Npts,Curve[i].X, - Curve[i].Y,Tank[j].Hmin); - Tank[j].Vmax = interp(Curve[i].Npts,Curve[i].X, - Curve[i].Y,Tank[j].Hmax); - Tank[j].V0 = interp(Curve[i].Npts,Curve[i].X, - Curve[i].Y,Tank[j].H0); - - /* Find a "nominal" diameter for tank */ - a = (Curve[i].Y[n] - Curve[i].Y[0])/ - (Curve[i].X[n] - Curve[i].X[0]); - Tank[j].A = sqrt(4.0*a/PI); - } - } - return(errcode); -} /* End of inittanks */ - - -void initunits() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: determines unit conversion factors -**-------------------------------------------------------------- -*/ -{ - double dcf, /* distance conversion factor */ - ccf, /* concentration conversion factor */ - qcf, /* flow conversion factor */ - hcf, /* head conversion factor */ - pcf, /* pressure conversion factor */ - wcf; /* energy conversion factor */ - - if (Unitsflag == SI) /* SI units */ - { - strcpy(Field[DEMAND].Units,RptFlowUnitsTxt[Flowflag]); - strcpy(Field[ELEV].Units,u_METERS); - strcpy(Field[HEAD].Units,u_METERS); - if (Pressflag == METERS) strcpy(Field[PRESSURE].Units,u_METERS); - else strcpy(Field[PRESSURE].Units,u_KPA); - strcpy(Field[LENGTH].Units,u_METERS); - strcpy(Field[DIAM].Units,u_MMETERS); - strcpy(Field[FLOW].Units,RptFlowUnitsTxt[Flowflag]); - strcpy(Field[VELOCITY].Units,u_MperSEC); - strcpy(Field[HEADLOSS].Units,u_per1000M); - strcpy(Field[FRICTION].Units,""); - strcpy(Field[POWER].Units,u_KW); - dcf = 1000.0*MperFT; - qcf = LPSperCFS; - if (Flowflag == LPM) qcf = LPMperCFS; - if (Flowflag == MLD) qcf = MLDperCFS; - if (Flowflag == CMH) qcf = CMHperCFS; - if (Flowflag == CMD) qcf = CMDperCFS; - hcf = MperFT; - if (Pressflag == METERS) pcf = MperFT*SpGrav; - else pcf = KPAperPSI*PSIperFT*SpGrav; - wcf = KWperHP; - } - else /* US units */ - { - strcpy(Field[DEMAND].Units,RptFlowUnitsTxt[Flowflag]); - strcpy(Field[ELEV].Units,u_FEET); - strcpy(Field[HEAD].Units,u_FEET); - strcpy(Field[PRESSURE].Units,u_PSI); - strcpy(Field[LENGTH].Units,u_FEET); - strcpy(Field[DIAM].Units,u_INCHES); - strcpy(Field[FLOW].Units,RptFlowUnitsTxt[Flowflag]); - strcpy(Field[VELOCITY].Units,u_FTperSEC); - strcpy(Field[HEADLOSS].Units,u_per1000FT); - strcpy(Field[FRICTION].Units,""); - strcpy(Field[POWER].Units,u_HP); - dcf = 12.0; - qcf = 1.0; - if (Flowflag == GPM) qcf = GPMperCFS; - if (Flowflag == MGD) qcf = MGDperCFS; - if (Flowflag == IMGD)qcf = IMGDperCFS; - if (Flowflag == AFD) qcf = AFDperCFS; - hcf = 1.0; - pcf = PSIperFT*SpGrav; - wcf = 1.0; - } - strcpy(Field[QUALITY].Units,""); - ccf = 1.0; - if (Qualflag == CHEM) - { - ccf = 1.0/LperFT3; - strncpy(Field[QUALITY].Units,ChemUnits,MAXID); - strncpy(Field[REACTRATE].Units,ChemUnits,MAXID); - strcat(Field[REACTRATE].Units,t_PERDAY); - } - else if (Qualflag == AGE) strcpy(Field[QUALITY].Units,u_HOURS); - else if (Qualflag == TRACE) strcpy(Field[QUALITY].Units,u_PERCENT); - Ucf[DEMAND] = qcf; - Ucf[ELEV] = hcf; - Ucf[HEAD] = hcf; - Ucf[PRESSURE] = pcf; - Ucf[QUALITY] = ccf; - Ucf[LENGTH] = hcf; - Ucf[DIAM] = dcf; - Ucf[FLOW] = qcf; - Ucf[VELOCITY] = hcf; - Ucf[HEADLOSS] = hcf; - Ucf[LINKQUAL] = ccf; - Ucf[REACTRATE] = ccf; - Ucf[FRICTION] = 1.0; - Ucf[POWER] = wcf; - Ucf[VOLUME] = hcf*hcf*hcf; - if (Hstep < 1800) /* Report time in mins. */ - { /* if hydraulic time step */ - Ucf[TIME] = 1.0/60.0; /* is less than 1/2 hour. */ - strcpy(Field[TIME].Units,u_MINUTES); - } - else - { - Ucf[TIME] = 1.0/3600.0; - strcpy(Field[TIME].Units,u_HOURS); - } - -} /* End of initunits */ - - -void convertunits() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: converts units of input data -**-------------------------------------------------------------- -*/ -{ - int i,j,k; - double ucf; /* Unit conversion factor */ - Pdemand demand; /* Pointer to demand record */ - -/* Convert nodal elevations & initial WQ */ -/* (WQ source units are converted in QUALITY.C */ - for (i=1; i<=Nnodes; i++) - { - Node[i].El /= Ucf[ELEV]; - Node[i].C0 /= Ucf[QUALITY]; - } - -/* Convert demands */ - for (i=1; i<=Njuncs; i++) - { - for (demand = Node[i].D; demand != NULL; demand = demand->next) - demand->Base /= Ucf[DEMAND]; - } - -/* Convert emitter discharge coeffs. to head loss coeff. */ - ucf = pow(Ucf[FLOW],Qexp)/Ucf[PRESSURE]; - for (i=1; i<=Njuncs; i++) - if (Node[i].Ke > 0.0) Node[i].Ke = ucf/pow(Node[i].Ke,Qexp); - -/* Initialize tank variables (convert tank levels to elevations) */ - for (j=1; j<=Ntanks; j++) - { - i = Tank[j].Node; - Tank[j].H0 = Node[i].El + Tank[j].H0/Ucf[ELEV]; - Tank[j].Hmin = Node[i].El + Tank[j].Hmin/Ucf[ELEV]; - Tank[j].Hmax = Node[i].El + Tank[j].Hmax/Ucf[ELEV]; - Tank[j].A = PI*SQR(Tank[j].A/Ucf[ELEV])/4.0; - Tank[j].V0 /= Ucf[VOLUME]; - Tank[j].Vmin /= Ucf[VOLUME]; - Tank[j].Vmax /= Ucf[VOLUME]; - Tank[j].Kb /= SECperDAY; - Tank[j].V = Tank[j].V0; - Tank[j].C = Node[i].C0; - Tank[j].V1max *= Tank[j].Vmax; - } - -/* Convert WQ option concentration units */ - Climit /= Ucf[QUALITY]; - Ctol /= Ucf[QUALITY]; - -/* Convert global reaction coeffs. */ - Kbulk /= SECperDAY; - Kwall /= SECperDAY; - -/* Convert units of link parameters */ - for (k=1; k<=Nlinks; k++) - { - if (Link[k].Type <= PIPE) - { - /* Convert pipe parameter units: */ - /* - for Darcy-Weisbach formula, convert roughness */ - /* from millifeet (or mm) to ft (or m) */ - /* - for US units, convert diameter from inches to ft */ - if (Formflag == DW) Link[k].Kc /= (1000.0*Ucf[ELEV]); - Link[k].Diam /= Ucf[DIAM]; - Link[k].Len /= Ucf[LENGTH]; - - /* Convert minor loss coeff. from V^2/2g basis to Q^2 basis */ - Link[k].Km = 0.02517*Link[k].Km/SQR(Link[k].Diam)/SQR(Link[k].Diam); - - /* Convert units on reaction coeffs. */ - Link[k].Kb /= SECperDAY; - Link[k].Kw /= SECperDAY; - } - - else if (Link[k].Type == PUMP ) - { - /* Convert units for pump curve parameters */ - i = PUMPINDEX(k); - if (Pump[i].Ptype == CONST_HP) - { - /* For constant hp pump, convert kw to hp */ - if (Unitsflag == SI) Pump[i].R /= Ucf[POWER]; - } - else - { - /* For power curve pumps, convert */ - /* shutoff head and flow coefficient */ - if (Pump[i].Ptype == POWER_FUNC) - { - Pump[i].H0 /= Ucf[HEAD]; - Pump[i].R *= (pow(Ucf[FLOW],Pump[i].N)/Ucf[HEAD]); - } - /* Convert flow range & max. head units */ - Pump[i].Q0 /= Ucf[FLOW]; - Pump[i].Qmax /= Ucf[FLOW]; - Pump[i].Hmax /= Ucf[HEAD]; - } - } - - else - { - /* For flow control valves, convert flow setting */ - /* while for other valves convert pressure setting */ - Link[k].Diam /= Ucf[DIAM]; - Link[k].Km = 0.02517*Link[k].Km/SQR(Link[k].Diam)/SQR(Link[k].Diam); - if (Link[k].Kc != MISSING) switch (Link[k].Type) - { - case FCV: Link[k].Kc /= Ucf[FLOW]; break; - case PRV: - case PSV: - case PBV: Link[k].Kc /= Ucf[PRESSURE]; break; - } - } - - /* Compute flow resistances */ - resistance(k); - } - -/* Convert units on control settings */ - for (i=1; i<=Ncontrols; i++) - { - if ( (k = Control[i].Link) == 0) continue; - if ( (j = Control[i].Node) > 0) - { - /* j = index of controlling node, and if */ - /* j > Njuncs, then control is based on tank level */ - /* otherwise control is based on nodal pressure */ - if (j > Njuncs) - Control[i].Grade = Node[j].El + Control[i].Grade/Ucf[ELEV]; - else Control[i].Grade = Node[j].El + Control[i].Grade/Ucf[PRESSURE]; - } - - /* Convert units on valve settings */ - if (Control[i].Setting != MISSING) switch (Link[k].Type) - { - case PRV: - case PSV: - case PBV: - Control[i].Setting /= Ucf[PRESSURE]; - break; - case FCV: - Control[i].Setting /= Ucf[FLOW]; - } - } -} /* End of convertunits */ - -/************************ END OF INPUT1.C ************************/ - +/* +****************************************************************************** +Project: OWA EPANET +Version: 2.2 +Module: input1.c +Description: retrieves network data from an EPANET input file +Authors: see AUTHORS +Copyright: see AUTHORS +License: see LICENSE +Last Updated: 07/08/2019 +****************************************************************************** +*/ + +#include +#include +#include +#include + +#include "types.h" +#include "funcs.h" +#include "hash.h" +#include "text.h" + +// Default values +#define MAXITER 200 // Default max. # hydraulic iterations +#define HACC 0.001 // Default hydraulics convergence ratio +#define HTOL 0.0005 // Default hydraulic head tolerance (ft) +#define QTOL 0.0001 // Default flow rate tolerance (cfs) +#define AGETOL 0.01 // Default water age tolerance (hrs) +#define CHEMTOL 0.01 // Default concentration tolerance +#define PAGESIZE 0 // Default uses no page breaks +#define SPGRAV 1.0 // Default specific gravity +#define EPUMP 75 // Default pump efficiency +#define DEFPATID "1" // Default demand pattern ID +#define RQTOL 1E-7 // Default low flow resistance tolerance +#define CHECKFREQ 2 // Default status check frequency +#define MAXCHECK 10 // Default # iterations for status checks +#define DAMPLIMIT 0 // Default damping threshold + +// Defined in ENUMSTXT.H +extern char *Fldname[]; +extern char *RptFlowUnitsTxt[]; + +int getdata(Project *pr) +/* +**---------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: reads in network data from disk file +**---------------------------------------------------------------- +*/ +{ + int errcode = 0; + + // Assign default data values & reporting options + setdefaults(pr); + initreport(&pr->report); + + // Read in network data + rewind(pr->parser.InFile); + ERRCODE(readdata(pr)); + + // Adjust data and convert it to internal units + if (!errcode) adjustdata(pr); + if (!errcode) initunits(pr); + ERRCODE(inittanks(pr)); + if (!errcode) convertunits(pr); + return errcode; +} + +void setdefaults(Project *pr) +/* +**---------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: assigns default values to a project's variables +**---------------------------------------------------------------- +*/ +{ + Parser *parser = &pr->parser; + Report *rpt = &pr->report; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Times *time = &pr->times; + Outfile *out = &pr->outfile; + + strncpy(pr->Title[0], "", TITLELEN); + strncpy(pr->Title[1], "", TITLELEN); + strncpy(pr->Title[2], "", TITLELEN); + strncpy(out->HydFname, "", MAXFNAME); + strncpy(pr->MapFname, "", MAXFNAME); + strncpy(qual->ChemName, t_CHEMICAL, MAXID); + strncpy(qual->ChemUnits, u_MGperL, MAXID); + strncpy(parser->DefPatID, DEFPATID, MAXID); + + pr->Warnflag = FALSE; // Warning flag is off + parser->Unitsflag = US; // US unit system + parser->Flowflag = GPM; // Flow units are gpm + parser->Pressflag = PSI; // Pressure units are psi + parser->DefPat = 0; // Default demand pattern index + out->Hydflag = SCRATCH; // No external hydraulics file + rpt->Tstatflag = SERIES; // Generate time series output + + hyd->Formflag = HW; // Use Hazen-Williams formula + hyd->Htol = HTOL; // Default head tolerance + hyd->Qtol = QTOL; // Default flow tolerance + hyd->Hacc = HACC; // Default hydraulic accuracy + hyd->FlowChangeLimit = 0.0; // Default flow change limit + hyd->HeadErrorLimit = 0.0; // Default head error limit + hyd->DemandModel = DDA; // Demand driven analysis + hyd->Pmin = 0.0; // Minimum demand pressure (ft) + hyd->Preq = MINPDIFF; // Required demand pressure (ft) + hyd->Pexp = 0.5; // Pressure function exponent + hyd->MaxIter = MAXITER; // Default max. hydraulic trials + hyd->ExtraIter = -1; // Stop if network unbalanced + hyd->Viscos = MISSING; // Temporary viscosity + hyd->SpGrav = SPGRAV; // Default specific gravity + hyd->Epat = 0; // No energy price pattern + hyd->Ecost = 0.0; // Zero unit energy cost + hyd->Dcost = 0.0; // Zero energy demand charge + hyd->Epump = EPUMP; // Default pump efficiency + hyd->Emax = 0.0; // Zero peak energy usage + hyd->Qexp = 2.0; // Flow exponent for emitters + hyd->Dmult = 1.0; // Demand multiplier + hyd->RQtol = RQTOL; // Default hydraulics parameters + hyd->CheckFreq = CHECKFREQ; + hyd->MaxCheck = MAXCHECK; + hyd->DampLimit = DAMPLIMIT; + + qual->Qualflag = NONE; // No quality simulation + qual->Ctol = MISSING; // No pre-set quality tolerance + qual->TraceNode = 0; // No source tracing + qual->BulkOrder = 1.0; // 1st-order bulk reaction rate + qual->WallOrder = 1.0; // 1st-order wall reaction rate + qual->TankOrder = 1.0; // 1st-order tank reaction rate + qual->Kbulk = 0.0; // No global bulk reaction + qual->Kwall = 0.0; // No global wall reaction + qual->Climit = 0.0; // No limiting potential quality + qual->Diffus = MISSING; // Temporary diffusivity + qual->Rfactor = 0.0; // No roughness-reaction factor + qual->MassBalance.ratio = 0.0; + + time->Dur = 0; // 0 sec duration (steady state) + time->Tstart = 0; // Starting time of day + time->Pstart = 0; // Starting pattern period + time->Hstep = 3600; // 1 hr hydraulic time step + time->Qstep = 0; // No pre-set quality time step + time->Pstep = 3600; // 1 hr time pattern period + time->Rstep = 3600; // 1 hr reporting period + time->Rulestep = 0; // No pre-set rule time step + time->Rstart = 0; // Start reporting at time 0 +} + +void initreport(Report *rpt) +/* +**---------------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: initializes reporting options +**---------------------------------------------------------------------- +*/ +{ + int i; + strncpy(rpt->Rpt2Fname, "", MAXFNAME); + + // Initialize general reporting options + rpt->PageSize = PAGESIZE; // Default page size for report + rpt->Summaryflag = TRUE; // Write summary report + rpt->Messageflag = TRUE; // Report error/warning messages + rpt->Statflag = FALSE; // No hydraulic status reports + rpt->Energyflag = FALSE; // No energy usage report + rpt->Nodeflag = 0; // No reporting on nodes + rpt->Linkflag = 0; // No reporting on links + + // Initialize options for each reported variable field + for (i = 0; i < MAXVAR; i++) + { + strncpy(rpt->Field[i].Name, Fldname[i], MAXID); + rpt->Field[i].Enabled = FALSE; // Not included in report + rpt->Field[i].Precision = 2; // 2 decimal precision + rpt->Field[i].RptLim[LOW] = SQR(BIG); // No reporting limits + rpt->Field[i].RptLim[HI] = -SQR(BIG); + } + rpt->Field[FRICTION].Precision = 3; + + // Set default set of variables reported on + for (i = DEMAND; i <= QUALITY; i++) + { + rpt->Field[i].Enabled = TRUE; + } + for (i = FLOW; i <= HEADLOSS; i++) + { + rpt->Field[i].Enabled = TRUE; + } +} + +void adjustdata(Project *pr) +/* +**---------------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: adjusts project data after input file has been processed +**---------------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Times *time = &pr->times; + Parser *parser = &pr->parser; + Report *rpt = &pr->report; + + int i; + double ucf; // Unit conversion factor + Pdemand demand; // Pointer to demand record + Slink *link; + Snode *node; + Stank *tank; + + // Use 1 hr pattern & report time step if none specified + if (time->Pstep <= 0) time->Pstep = 3600; + if (time->Rstep == 0) time->Rstep = time->Pstep; + + // Hydraulic time step cannot be greater than pattern or report time step + if (time->Hstep <= 0) time->Hstep = 3600; + if (time->Hstep > time->Pstep) time->Hstep = time->Pstep; + if (time->Hstep > time->Rstep) time->Hstep = time->Rstep; + + // Report start time cannot be greater than simulation duration + if (time->Rstart > time->Dur) time->Rstart = 0; + + // No water quality analysis for single period run + if (time->Dur == 0) qual->Qualflag = NONE; + + // If no quality timestep, then make it 1/10 of hydraulic timestep + if (time->Qstep == 0) time->Qstep = time->Hstep / 10; + + // If no rule time step then make it 1/10 of hydraulic time step + // but not greater than hydraulic time step + if (time->Rulestep == 0) time->Rulestep = time->Hstep / 10; + time->Rulestep = MIN(time->Rulestep, time->Hstep); + + // Quality timestep cannot exceed hydraulic timestep + time->Qstep = MIN(time->Qstep, time->Hstep); + + // If no quality tolerance, then use default values + if (qual->Ctol == MISSING) + { + if (qual->Qualflag == AGE) qual->Ctol = AGETOL; + else qual->Ctol = CHEMTOL; + } + + // Determine units system based on flow units + switch (parser->Flowflag) + { + case LPS: // Liters/sec + case LPM: // Liters/min + case MLD: // megaliters/day + case CMH: // cubic meters/hr + case CMD: // cubic meters/day + parser->Unitsflag = SI; + break; + default: + parser->Unitsflag = US; + } + + // Revise pressure units depending on flow units + if (parser->Unitsflag != SI) parser->Pressflag = PSI; + else if (parser->Pressflag == PSI) parser->Pressflag = METERS; + + // Store value of viscosity & diffusivity + ucf = 1.0; + if (parser->Unitsflag == SI) ucf = SQR(MperFT); + if (hyd->Viscos == MISSING) + { + hyd->Viscos = VISCOS; // No viscosity supplied + } + else if (hyd->Viscos > 1.e-3) + { + hyd->Viscos = hyd->Viscos * VISCOS; // Multiplier supplied + } + else hyd->Viscos = hyd->Viscos / ucf; // Actual value supplied + if (qual->Diffus == MISSING) + { + qual->Diffus = DIFFUS; // No viscosity supplied + } + else if (qual->Diffus > 1.e-4) + { + qual->Diffus = qual->Diffus * DIFFUS; // Multiplier supplied + } + else qual->Diffus = qual->Diffus / ucf; // Actual value supplied + + // Set exponent in head loss equation and adjust flow-resistance tolerance. + if (hyd->Formflag == HW) hyd->Hexp = 1.852; + else hyd->Hexp = 2.0; + + // See if default reaction coeffs. apply + for (i = 1; i <= net->Nlinks; i++) + { + link = &net->Link[i]; + if (link->Type > PIPE) continue; + if (link->Kb == MISSING) link->Kb = qual->Kbulk; // Bulk coeff. + if (link->Kw == MISSING) // Wall coeff. + { + // Rfactor is the pipe roughness correlation factor + if (qual->Rfactor == 0.0) link->Kw = qual->Kwall; + else if ((link->Kc > 0.0) && (link->Diam > 0.0)) + { + if (hyd->Formflag == HW) link->Kw = qual->Rfactor / link->Kc; + if (hyd->Formflag == DW) + { + link->Kw = qual->Rfactor / ABS(log(link->Kc / link->Diam)); + } + if (hyd->Formflag == CM) link->Kw = qual->Rfactor * link->Kc; + } + else link->Kw = 0.0; + } + } + for (i = 1; i <= net->Ntanks; i++) + { + tank = &net->Tank[i]; + if (tank->Kb == MISSING) tank->Kb = qual->Kbulk; + } + + // Use default pattern if none assigned to a demand + parser->DefPat = findpattern(net, parser->DefPatID); + if (parser->DefPat > 0) for (i = 1; i <= net->Nnodes; i++) + { + node = &net->Node[i]; + for (demand = node->D; demand != NULL; demand = demand->next) + { + if (demand->Pat == 0) demand->Pat = parser->DefPat; + } + } + + // Remove QUALITY as a reporting variable if no WQ analysis + if (qual->Qualflag == NONE) rpt->Field[QUALITY].Enabled = FALSE; +} + +int inittanks(Project *pr) +/* +**--------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: initializes volumes in non-cylindrical tanks +**--------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + + int i, j, n = 0; + double a; + int errcode = 0, levelerr; + char errmsg[MAXMSG+1] = ""; + Stank *tank; + Scurve *curve; + + for (j = 1; j <= net->Ntanks; j++) + { + tank = &net->Tank[j]; + if (tank->A == 0.0) continue; // Skip reservoirs + + // Check for valid lower/upper tank levels + levelerr = 0; + if (tank->H0 > tank->Hmax || + tank->Hmin > tank->Hmax || + tank->H0 < tank->Hmin + ) levelerr = 1; + + // Check that tank heights are within volume curve + i = tank->Vcurve; + if (i > 0) + { + curve = &net->Curve[i]; + n = curve->Npts - 1; + if (tank->Hmin < curve->X[0] || tank->Hmax > curve->X[n]) + { + levelerr = 1; + } + + else + { + // Find min., max., and initial volumes from curve + tank->Vmin = interp(curve->Npts, curve->X, curve->Y, tank->Hmin); + tank->Vmax = interp(curve->Npts, curve->X, curve->Y, tank->Hmax); + tank->V0 = interp(curve->Npts, curve->X, curve->Y, tank->H0); + + // Find a "nominal" diameter for tank + a = (curve->Y[n] - curve->Y[0]) / (curve->X[n] - curve->X[0]); + tank->A = sqrt(4.0 * a / PI); + } + } + + // Report error in levels if found + if (levelerr) + { + sprintf(pr->Msg, "Error 225: %s node %s", geterrmsg(225, errmsg), + net->Node[tank->Node].ID); + writeline(pr, pr->Msg); + errcode = 200; + } + } + return errcode; +} + +void initunits(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: determines unit conversion factors +**-------------------------------------------------------------- +*/ +{ + Parser *parser = &pr->parser; + Report *rpt = &pr->report; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Times *time = &pr->times; + + double dcf, // distance conversion factor + ccf, // concentration conversion factor + qcf, // flow conversion factor + hcf, // head conversion factor + pcf, // pressure conversion factor + wcf; // energy conversion factor + + if (parser->Unitsflag == SI) // SI units + { + strcpy(rpt->Field[DEMAND].Units, RptFlowUnitsTxt[parser->Flowflag]); + strcpy(rpt->Field[ELEV].Units, u_METERS); + strcpy(rpt->Field[HEAD].Units, u_METERS); + if (parser->Pressflag == METERS) strcpy(rpt->Field[PRESSURE].Units, u_METERS); + else strcpy(rpt->Field[PRESSURE].Units, u_KPA); + strcpy(rpt->Field[LENGTH].Units, u_METERS); + strcpy(rpt->Field[DIAM].Units, u_MMETERS); + strcpy(rpt->Field[FLOW].Units, RptFlowUnitsTxt[parser->Flowflag]); + strcpy(rpt->Field[VELOCITY].Units, u_MperSEC); + strcpy(rpt->Field[HEADLOSS].Units, u_per1000M); + strcpy(rpt->Field[FRICTION].Units, ""); + strcpy(rpt->Field[POWER].Units, u_KW); + + dcf = 1000.0 * MperFT; + qcf = LPSperCFS; + if (parser->Flowflag == LPM) qcf = LPMperCFS; + if (parser->Flowflag == MLD) qcf = MLDperCFS; + if (parser->Flowflag == CMH) qcf = CMHperCFS; + if (parser->Flowflag == CMD) qcf = CMDperCFS; + + hcf = MperFT; + if (parser->Pressflag == METERS) pcf = MperFT * hyd->SpGrav; + else pcf = KPAperPSI * PSIperFT * hyd->SpGrav; + wcf = KWperHP; + } + else // US units + { + strcpy(rpt->Field[DEMAND].Units, RptFlowUnitsTxt[parser->Flowflag]); + strcpy(rpt->Field[ELEV].Units, u_FEET); + strcpy(rpt->Field[HEAD].Units, u_FEET); + strcpy(rpt->Field[PRESSURE].Units, u_PSI); + strcpy(rpt->Field[LENGTH].Units, u_FEET); + strcpy(rpt->Field[DIAM].Units, u_INCHES); + strcpy(rpt->Field[FLOW].Units, RptFlowUnitsTxt[parser->Flowflag]); + strcpy(rpt->Field[VELOCITY].Units, u_FTperSEC); + strcpy(rpt->Field[HEADLOSS].Units, u_per1000FT); + strcpy(rpt->Field[FRICTION].Units, ""); + strcpy(rpt->Field[POWER].Units, u_HP); + + dcf = 12.0; + qcf = 1.0; + if (parser->Flowflag == GPM) qcf = GPMperCFS; + if (parser->Flowflag == MGD) qcf = MGDperCFS; + if (parser->Flowflag == IMGD) qcf = IMGDperCFS; + if (parser->Flowflag == AFD) qcf = AFDperCFS; + hcf = 1.0; + pcf = PSIperFT * hyd->SpGrav; + wcf = 1.0; + } + + strcpy(rpt->Field[QUALITY].Units, ""); + ccf = 1.0; + if (qual->Qualflag == CHEM) + { + ccf = 1.0 / LperFT3; + strncpy(rpt->Field[QUALITY].Units, qual->ChemUnits, MAXID); + strncpy(rpt->Field[REACTRATE].Units, qual->ChemUnits, MAXID); + strcat(rpt->Field[REACTRATE].Units, t_PERDAY); + } + else if (qual->Qualflag == AGE) strcpy(rpt->Field[QUALITY].Units, u_HOURS); + else if (qual->Qualflag == TRACE) strcpy(rpt->Field[QUALITY].Units, u_PERCENT); + + pr->Ucf[DEMAND] = qcf; + pr->Ucf[ELEV] = hcf; + pr->Ucf[HEAD] = hcf; + pr->Ucf[PRESSURE] = pcf; + pr->Ucf[QUALITY] = ccf; + pr->Ucf[LENGTH] = hcf; + pr->Ucf[DIAM] = dcf; + pr->Ucf[FLOW] = qcf; + pr->Ucf[VELOCITY] = hcf; + pr->Ucf[HEADLOSS] = hcf; + pr->Ucf[LINKQUAL] = ccf; + pr->Ucf[REACTRATE] = ccf; + pr->Ucf[FRICTION] = 1.0; + pr->Ucf[POWER] = wcf; + pr->Ucf[VOLUME] = hcf * hcf * hcf; + + // Report time in minutes if hyd. time step < 1/2 hr. + if (time->Hstep < 1800) + { + pr->Ucf[TIME] = 1.0 / 60.0; + strcpy(rpt->Field[TIME].Units, u_MINUTES); + } + else + { + pr->Ucf[TIME] = 1.0 / 3600.0; + strcpy(rpt->Field[TIME].Units, u_HOURS); + } +} + +void convertunits(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: converts units of input data +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Parser *parser = &pr->parser; + + int i, j, k; + double ucf; // Unit conversion factor + Pdemand demand; // Pointer to demand record + Snode *node; + Stank *tank; + Slink *link; + Spump *pump; + Scontrol *control; + + // Convert nodal elevations & initial WQ + // (WQ source units are converted in QUALITY.C + for (i = 1; i <= net->Nnodes; i++) + { + node = &net->Node[i]; + node->El /= pr->Ucf[ELEV]; + node->C0 /= pr->Ucf[QUALITY]; + } + + // Convert demands + for (i = 1; i <= net->Njuncs; i++) + { + node = &net->Node[i]; + for (demand = node->D; demand != NULL; demand = demand->next) + { + demand->Base /= pr->Ucf[DEMAND]; + } + } + + // Convert PDA pressure limits + hyd->Pmin /= pr->Ucf[PRESSURE]; + hyd->Preq /= pr->Ucf[PRESSURE]; + + // Convert emitter discharge coeffs. to head loss coeff. + ucf = pow(pr->Ucf[FLOW], hyd->Qexp) / pr->Ucf[PRESSURE]; + for (i = 1; i <= net->Njuncs; i++) + { + node = &net->Node[i]; + if (node->Ke > 0.0) node->Ke = ucf / pow(node->Ke, hyd->Qexp); + } + + // Initialize tank variables (convert tank levels to elevations) + for (j = 1; j <= net->Ntanks; j++) + { + tank = &net->Tank[j]; + i = tank->Node; + node = &net->Node[i]; + tank->H0 = node->El + tank->H0 / pr->Ucf[ELEV]; + tank->Hmin = node->El + tank->Hmin / pr->Ucf[ELEV]; + tank->Hmax = node->El + tank->Hmax / pr->Ucf[ELEV]; + tank->A = PI * SQR(tank->A / pr->Ucf[ELEV]) / 4.0; + tank->V0 /= pr->Ucf[VOLUME]; + tank->Vmin /= pr->Ucf[VOLUME]; + tank->Vmax /= pr->Ucf[VOLUME]; + tank->Kb /= SECperDAY; + tank->V = tank->V0; + tank->C = node->C0; + tank->V1max *= tank->Vmax; + } + + // Convert hydraulic convergence criteria + hyd->FlowChangeLimit /= pr->Ucf[FLOW]; + hyd->HeadErrorLimit /= pr->Ucf[HEAD]; + + // Convert water quality concentration options + qual->Climit /= pr->Ucf[QUALITY]; + qual->Ctol /= pr->Ucf[QUALITY]; + + // Convert global reaction coeffs. + qual->Kbulk /= SECperDAY; + qual->Kwall /= SECperDAY; + + // Convert units of link parameters + for (k = 1; k <= net->Nlinks; k++) + { + link = &net->Link[k]; + if (link->Type <= PIPE) + { + // Convert D-W roughness from millifeet (or mm) to ft + if (hyd->Formflag == DW) link->Kc /= (1000.0 * pr->Ucf[ELEV]); + link->Diam /= pr->Ucf[DIAM]; + link->Len /= pr->Ucf[LENGTH]; + + // Convert minor loss coeff. from V^2/2g basis to Q^2 basis + link->Km = 0.02517 * link->Km / SQR(link->Diam) / SQR(link->Diam); + + // Convert units on reaction coeffs. + link->Kb /= SECperDAY; + link->Kw /= SECperDAY; + } + + else if (link->Type == PUMP) + { + // Convert units for pump curve parameters + i = findpump(net, k); + pump = &net->Pump[i]; + if (pump->Ptype == CONST_HP) + { + // For constant hp pump, convert kw to hp + if (parser->Unitsflag == SI) pump->R /= pr->Ucf[POWER]; + } + else + { + // For power curve pumps, convert shutoff head and flow coeff. + if (pump->Ptype == POWER_FUNC) + { + pump->H0 /= pr->Ucf[HEAD]; + pump->R *= (pow(pr->Ucf[FLOW], pump->N) / pr->Ucf[HEAD]); + } + + // Convert flow range & max. head units + pump->Q0 /= pr->Ucf[FLOW]; + pump->Qmax /= pr->Ucf[FLOW]; + pump->Hmax /= pr->Ucf[HEAD]; + } + } + else + { + // For flow control valves, convert flow setting + // while for other valves convert pressure setting + link->Diam /= pr->Ucf[DIAM]; + link->Km = 0.02517 * link->Km / SQR(link->Diam) / SQR(link->Diam); + if (link->Kc != MISSING) switch (link->Type) + { + case FCV: + link->Kc /= pr->Ucf[FLOW]; + break; + case PRV: + case PSV: + case PBV: + link->Kc /= pr->Ucf[PRESSURE]; + break; + default: + break; + } + } + } + + // Convert units on control settings + for (i = 1; i <= net->Ncontrols; i++) + { + control = &net->Control[i]; + if ((k = control->Link) == 0) continue; + link = &net->Link[k]; + if ((j = control->Node) > 0) + { + node = &net->Node[j]; + // control is based on tank level + if (j > net->Njuncs) + { + control->Grade = node->El + control->Grade / pr->Ucf[ELEV]; + } + // control is based on nodal pressure + else control->Grade = node->El + control->Grade / pr->Ucf[PRESSURE]; + } + + // Convert units on valve settings + if (control->Setting != MISSING) + { + switch (link->Type) + { + case PRV: + case PSV: + case PBV: + control->Setting /= pr->Ucf[PRESSURE]; + break; + case FCV: + control->Setting /= pr->Ucf[FLOW]; + default: + break; + } + } + } +} diff --git a/src/input2.c b/src/input2.c old mode 100755 new mode 100644 index aa03cdc..766ce24 --- a/src/input2.c +++ b/src/input2.c @@ -1,981 +1,864 @@ -/* -********************************************************************** - -INPUT2.C -- Input data file interpreter for EPANET - -VERSION: 2.00 -DATE: 5/30/00 - 9/7/00 - 10/25/00 -AUTHOR: L. Rossman - US EPA - NRMRL - -This module reads and interprets the input data from file InFile. - -The entry points for this module are: - netsize() -- called from ENopen() in EPANET.C - readdata() -- called from getdata() in INPUT1.C - -The following utility functions are all called from INPUT3.C - addnodeID() - addlinkID() - findID() - getfloat() - -********************************************************************** -*/ - -#include -#include -#include -#ifndef __APPLE__ -#include -#endif -#include -#include "hash.h" -#include "text.h" -#include "types.h" -#include "funcs.h" -#define EXTERN extern -#include "vars.h" - -#define MAXERRS 10 /* Max. input errors reported */ - -int Ntokens, /* Number of tokens in input line */ - Ntitle; /* Number of title lines */ -char *Tok[MAXTOKS]; /* Array of token strings */ - - /* Used in INPUT3.C: */ -STmplist *PrevPat; /* Pointer to pattern list element */ -STmplist *PrevCurve; /* Pointer to curve list element */ - - /* Defined in enumstxt.h in EPANET.C */ -extern char *SectTxt[]; /* Input section keywords */ -extern char *RptSectTxt[]; - - -int netsize() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: determines number of system components -**-------------------------------------------------------------- -*/ -{ - char line[MAXLINE+1]; /* Line from input data file */ - char *tok; /* First token of line */ - int sect,newsect; /* Input data sections */ - int errcode = 0; /* Error code */ - -/* Initialize network component counts */ - MaxJuncs = 0; - MaxTanks = 0; - MaxPipes = 0; - MaxPumps = 0; - MaxValves = 0; - MaxControls = 0; - MaxRules = 0; - MaxCurves = 0; - sect = -1; - -/* Add a default pattern 0 */ - MaxPats = -1; - addpattern(""); - -/* Make pass through data file counting number of each component */ - while (fgets(line,MAXLINE,InFile) != NULL) - { - /* Skip blank lines & those beginning with a comment */ - tok = strtok(line,SEPSTR); - if (tok == NULL) continue; - if (*tok == ';') continue; - - /* Check if line begins with a new section heading */ - if (*tok == '[') - { - newsect = findmatch(tok,SectTxt); - if (newsect >= 0) - { - sect = newsect; - if (sect == _END) break; - continue; - } - else continue; - } - - /* Add to count of current component */ - switch(sect) - { - case _JUNCTIONS: MaxJuncs++; break; - case _RESERVOIRS: - case _TANKS: MaxTanks++; break; - case _PIPES: MaxPipes++; break; - case _PUMPS: MaxPumps++; break; - case _VALVES: MaxValves++; break; - case _CONTROLS: MaxControls++; break; - case _RULES: addrule(tok); break; /* See RULES.C */ - case _PATTERNS: errcode = addpattern(tok); - break; - case _CURVES: errcode = addcurve(tok); - break; - } - if (errcode) break; - } - - MaxNodes = MaxJuncs + MaxTanks; - MaxLinks = MaxPipes + MaxPumps + MaxValves; - if (MaxPats < 1) MaxPats = 1; - if (!errcode) - { - if (MaxJuncs < 1) errcode = 223; /* Not enough nodes */ - else if (MaxTanks == 0) errcode = 224; /* No tanks */ - } - return(errcode); -} /* End of netsize */ - - -int readdata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: reads contents of input data file -**-------------------------------------------------------------- -*/ -{ - char line[MAXLINE+1], /* Line from input data file */ - wline[MAXLINE+1]; /* Working copy of input line */ - int sect,newsect, /* Data sections */ - errcode = 0, /* Error code */ - inperr,errsum; /* Error code & total error count */ - -/* Allocate input buffer */ - X = (double *) calloc(MAXTOKS, sizeof(double)); - ERRCODE(MEMCHECK(X)); - - if (!errcode) - { - - /* Initialize number of network components */ - Ntitle = 0; - Nnodes = 0; - Njuncs = 0; - Ntanks = 0; - Nlinks = 0; - Npipes = 0; - Npumps = 0; - Nvalves = 0; - Ncontrols = 0; - Nrules = 0; - Ncurves = MaxCurves; - Npats = MaxPats; - PrevPat = NULL; - PrevCurve = NULL; - - sect = -1; - errsum = 0; - - /* Read each line from input file. */ - while (fgets(line,MAXLINE,InFile) != NULL) - { - - /* Make copy of line and scan for tokens */ - strcpy(wline,line); - Ntokens = gettokens(wline); - - /* Skip blank lines and comments */ - if (Ntokens == 0) continue; - if (*Tok[0] == ';') continue; - - /* Check if max. length exceeded */ - if (strlen(line) >= MAXLINE) - { - sprintf(Msg,ERR214); - writeline(Msg); - writeline(line); - errsum++; - } - - /* Check if at start of a new input section */ - if (*Tok[0] == '[') - { - newsect = findmatch(Tok[0],SectTxt); - if (newsect >= 0) - { - sect = newsect; - if (sect == _END) break; - continue; - } - else - { - inperrmsg(201,sect,line); - errsum++; - break; - } - } - - /* Otherwise process next line of input in current section */ - else - { - if (sect >=0) //for cases were no section is present on the top of the input file - { - inperr = newline(sect,line); - if (inperr > 0) - { - inperrmsg(inperr,sect,line); - errsum++; - } - } - else - { - errcode = 200; - break; - } - } - - /* Stop if reach end of file or max. error count */ - if (errsum == MAXERRS) break; - } /* End of while */ - - /* Check for errors */ - if (errsum > 0) errcode = 200; - } - -/* Check for unlinked nodes */ - if (!errcode) errcode = unlinked(); - -/* Get pattern & curve data from temp. lists */ - if (!errcode) errcode = getpatterns(); - if (!errcode) errcode = getcurves(); - if (!errcode) errcode = getpumpparams(); - -/* Free input buffer */ - free(X); - return(errcode); - -} /* End of readdata */ - - -int newline(int sect, char *line) -/* -**-------------------------------------------------------------- -** Input: sect = current section of input file -** *line = line read from input file -** Output: returns error code or 0 if no error found -** Purpose: processes a new line of data from input file -**-------------------------------------------------------------- -*/ -{ - int n; - switch (sect) - { - case _TITLE: if (Ntitle < 3) - { - n = (int)strlen(line); - if (line[n-1] == 10) line[n-1] = ' '; - strncpy(Title[Ntitle],line,MAXMSG); - Ntitle++; - } - return(0); - case _JUNCTIONS: return(juncdata()); - case _RESERVOIRS: - case _TANKS: return(tankdata()); - case _PIPES: return(pipedata()); - case _PUMPS: return(pumpdata()); - case _VALVES: return(valvedata()); - case _PATTERNS: return(patterndata()); - case _CURVES: return(curvedata()); - case _DEMANDS: return(demanddata()); - case _CONTROLS: return(controldata()); - case _RULES: return(ruledata()); /* See RULES.C */ - case _SOURCES: return(sourcedata()); - case _EMITTERS: return(emitterdata()); - case _QUALITY: return(qualdata()); - case _STATUS: return(statusdata()); - case _ROUGHNESS: return(0); - case _ENERGY: return(energydata()); - case _REACTIONS: return(reactdata()); - case _MIXING: return(mixingdata()); - case _REPORT: return(reportdata()); - case _TIMES: return(timedata()); - case _OPTIONS: return(optiondata()); - - /* Data in these sections are not used for any computations */ - case _COORDS: if (Coordflag == TRUE) - { - return(coordata()); - } - else return(0); - case _LABELS: return(0); - case _TAGS: return(0); - case _VERTICES: return(0); - case _BACKDROP: return(0); - } - return(201); -} /* end of newline */ - - -int getpumpparams(void) -/* -**------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: computes & checks pump curve parameters -**-------------------------------------------------------------- -*/ -{ - int i, j = 0, k, m, n = 0; - double a,b,c, - h0 = 0.0, h1 = 0.0, h2 = 0.0, q1 = 0.0, q2 = 0.0; - - for (i=1; i<=Npumps; i++) - { - k = Pump[i].Link; - if (Pump[i].Ptype == CONST_HP) /* Constant Hp pump */ - { - Pump[i].H0 = 0.0; - Pump[i].R = -8.814*Link[k].Km; - Pump[i].N = -1.0; - Pump[i].Hmax = BIG; /* No head limit */ - Pump[i].Qmax = BIG; /* No flow limit */ - Pump[i].Q0 = 1.0; /* Init. flow = 1 cfs */ - continue; - } - - /* Set parameters for pump curves */ - else if (Pump[i].Ptype == NOCURVE) /* Pump curve specified */ - { - j = Pump[i].Hcurve; /* Get index of head curve */ - if (j == 0) - { /* Error: No head curve */ - sprintf(Msg,ERR226,Link[k].ID); - writeline(Msg); - return(200); - } - n = Curve[j].Npts; - if (n == 1) /* Only a single h-q point */ - { /* supplied so use generic */ - Pump[i].Ptype = POWER_FUNC; /* power function curve. */ - q1 = Curve[j].X[0]; - h1 = Curve[j].Y[0]; - h0 = 1.33334*h1; - q2 = 2.0*q1; - h2 = 0.0; - } - else if (n == 3 - && Curve[j].X[0] == 0.0) /* 3 h-q points supplied with */ - { /* shutoff head so use fitted */ - Pump[i].Ptype = POWER_FUNC; /* power function curve. */ - h0 = Curve[j].Y[0]; - q1 = Curve[j].X[1]; - h1 = Curve[j].Y[1]; - q2 = Curve[j].X[2]; - h2 = Curve[j].Y[2]; - } - else Pump[i].Ptype = CUSTOM; /* Else use custom pump curve.*/ - - /* Compute shape factors & limits of power function pump curves */ - if (Pump[i].Ptype == POWER_FUNC) - { - if (!powercurve(h0,h1,h2,q1,q2,&a,&b,&c)) - { /* Error: Invalid curve */ - sprintf(Msg,ERR227,Link[k].ID); - writeline(Msg); - return(200); - } - else - { - Pump[i].H0 = -a; - Pump[i].R = -b; - Pump[i].N = c; - Pump[i].Q0 = q1; - Pump[i].Qmax = pow((-a/b),(1.0/c)); - Pump[i].Hmax = h0; - } - } - } - - /* Assign limits to custom pump curves */ - if (Pump[i].Ptype == CUSTOM) - { - for (m=1; m= Curve[j].Y[m-1]) - { /* Error: Invalid curve */ - sprintf(Msg,ERR227,Link[k].ID); - writeline(Msg); - return(200); - } - } - Pump[i].Qmax = Curve[j].X[n-1]; - Pump[i].Q0 = (Curve[j].X[0] + Pump[i].Qmax)/2.0; - Pump[i].Hmax = Curve[j].Y[0]; - } - } /* Next pump */ - return(0); -} - - -int addnodeID(int n, char *id) -/* -**------------------------------------------------------------- -** Input: n = node index -** id = ID label -** Output: returns 0 if ID already in use, 1 if not -** Purpose: adds a node ID to the Node Hash Table -**-------------------------------------------------------------- -*/ -{ - if (findnode(id)) return(0); /* see EPANET.C */ - strncpy(Node[n].ID, id, MAXID); - ENHashTableInsert(NodeHashTable, Node[n].ID, n); /* see HASH.C */ - return(1); -} - - -int addlinkID(int n, char *id) -/* -**------------------------------------------------------------- -** Input: n = link index -** id = ID label -** Output: returns 0 if ID already in use, 1 if not -** Purpose: adds a link ID to the Link Hash Table -**-------------------------------------------------------------- -*/ -{ - if (findlink(id)) return(0); /* see EPANET.C */ - strncpy(Link[n].ID, id, MAXID); - ENHashTableInsert(LinkHashTable, Link[n].ID, n); /* see HASH.C */ - return(1); -} - - -int addpattern(char *id) -/* -**------------------------------------------------------------- -** Input: id = pattern ID label -** Output: returns error code -** Purpose: adds a new pattern to the database -**-------------------------------------------------------------- -*/ -{ - STmplist *p; - -/* Check if ID is same as last one processed */ - if (Patlist != NULL && strcmp(id,Patlist->ID) == 0) return(0); - -/* Check that pattern was not already created */ - if (findID(id,Patlist) == NULL) - { - - /* Update pattern count & create new list element */ - (MaxPats)++; - p = (STmplist *) malloc(sizeof(STmplist)); - if (p == NULL) return(101); - - /* Initialize list element properties */ - else - { - p->i = MaxPats; - strncpy(p->ID,id,MAXID); - p->x = NULL; - p->y = NULL; - p->next = Patlist; - Patlist = p; - } - } - return(0); -} - - -int addcurve(char *id) -/* -**------------------------------------------------------------- -** Input: id = curve ID label -** Output: returns error code -** Purpose: adds a new curve to the database -**-------------------------------------------------------------- -*/ -{ - STmplist *c; - -/* Check if ID is same as last one processed */ - if (Curvelist != NULL && strcmp(id,Curvelist->ID) == 0) return(0); - -/* Check that curve was not already created */ - if (findID(id,Curvelist) == NULL) - { - - /* Update curve count & create new list element */ - (MaxCurves)++; - c = (STmplist *) malloc(sizeof(STmplist)); - if (c == NULL) return(101); - - /* Initialize list element properties */ - else - { - c->i = MaxCurves; - strncpy(c->ID,id,MAXID); - c->x = NULL; - c->y = NULL; - c->next = Curvelist; - Curvelist = c; - } - } - return(0); -} - - -STmplist *findID(char *id, STmplist *list) -/* -**------------------------------------------------------------- -** Input: id = ID label -** list = pointer to head of a temporary list -** Output: returns list item with requested ID label -** Purpose: searches for item in temporary list -**------------------------------------------------------------- -*/ -{ - STmplist *item; - for (item = list; item != NULL; item = item->next) - { - if (strcmp(item->ID,id) == 0) - { - return(item); - } - } - return(NULL); -} - - -int unlinked() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code if any unlinked junctions found -** Purpose: checks for unlinked junctions in network -** -** NOTE: unlinked tanks have no effect on computations. -**-------------------------------------------------------------- -*/ -{ - char *marked; - int i,err, errcode; - errcode = 0; - err = 0; - marked = (char *) calloc(Nnodes+1,sizeof(char)); - ERRCODE(MEMCHECK(marked)); - if (!errcode) - { - memset(marked,0,(Nnodes+1)*sizeof(char)); - for (i=1; i<=Nlinks; i++) /* Mark end nodes of each link */ - { - marked[Link[i].N1]++; - marked[Link[i].N2]++; - } - for (i=1; i<=Njuncs; i++) /* Check each junction */ - { - if (marked[i] == 0) /* If not marked then error */ - { - err++; - sprintf(Msg,ERR233,Node[i].ID); - writeline(Msg); - } - if (err >= MAXERRS) break; - } - if (err > 0) errcode = 200; - } - free(marked); - return(errcode); -} /* End of unlinked */ - - -int getpatterns(void) -/* -**----------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: retrieves pattern data from temporary linked list -**------------------------------------------------------------- -*/ -{ - int i,j; - SFloatlist *f; - STmplist *pat; - -/* Start at head of list */ - pat = Patlist; - -/* Traverse list of patterns */ - while (pat != NULL) - { - - /* Get index of current pattern in Pattern array */ - i = pat->i; - - /* Check if this is the default pattern */ - if (strcmp(pat->ID, DefPatID) == 0) DefPat = i; - if (i >= 0 && i <= MaxPats) - { - /* Save pattern ID */ - strcpy(Pattern[i].ID, pat->ID); - - /* Give pattern a length of at least 1 */ - if (Pattern[i].Length == 0) Pattern[i].Length = 1; - Pattern[i].F = (double *) calloc(Pattern[i].Length, sizeof(double)); - if (Pattern[i].F == NULL) return(101); - - /* Start at head of pattern multiplier list */ - /* (which holds multipliers in reverse order)*/ - f = pat->x; - j = Pattern[i].Length - 1; - - /* Use at least one multiplier equal to 1.0 */ - if (f == NULL) Pattern[i].F[0] = 1.0; - - /* Traverse list, storing multipliers in Pattern array */ - else while (f != NULL && j >= 0) - { - Pattern[i].F[j] = f->value; - f = f->next; - j--; - } - } - pat = pat->next; - } - return(0); -} - - -int getcurves(void) -/* -**----------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: retrieves curve data from temporary linked list -**----------------------------------------------------------- -*/ -{ - int i,j; - double x; - SFloatlist *fx, *fy; - STmplist *c; - -/* Start at head of curve list */ - c = Curvelist; - -/* Traverse list of curves */ - while (c != NULL) - { - i = c->i; - if (i >= 1 && i <= MaxCurves) - { - - /* Save curve ID */ - strcpy(Curve[i].ID, c->ID); - - /* Check that curve has data points */ - if (Curve[i].Npts <= 0) - { - sprintf(Msg,ERR230,c->ID); - writeline(Msg); - return(200); - } - - /* Allocate memory for curve data */ - Curve[i].X = (double *) calloc(Curve[i].Npts, sizeof(double)); - Curve[i].Y = (double *) calloc(Curve[i].Npts, sizeof(double)); - if (Curve[i].X == NULL || Curve[i].Y == NULL) return(101); - - /* Traverse list of x,y data */ - x = BIG; - fx = c->x; - fy = c->y; - j = Curve[i].Npts - 1; - while (fx != NULL && fy != NULL && j >= 0) - { - - /* Check that x data is in ascending order */ - if (fx->value >= x) - { - sprintf(Msg,ERR230,c->ID); - writeline(Msg); - return(200); - } - x = fx->value; - - /* Save x,y data in Curve structure */ - Curve[i].X[j] = fx->value; - fx = fx->next; - Curve[i].Y[j] = fy->value; - fy = fy->next; - j--; - } - } - c = c->next; - } - return(0); -} - - -int findmatch(char *line, char *keyword[]) -/* -**-------------------------------------------------------------- -** Input: *line = line from input file -** *keyword[] = list of NULL terminated keywords -** Output: returns index of matching keyword or -** -1 if no match found -** Purpose: determines which keyword appears on input line -**-------------------------------------------------------------- -*/ -{ - int i = 0; - while (keyword[i] != NULL) - { - if (match(line,keyword[i])) return(i); - i++; - } - return(-1); -} /* end of findmatch */ - - - -int match(char *str, char *substr) -/* -**-------------------------------------------------------------- -** Input: *str = string being searched -** *substr = substring being searched for -** Output: returns 1 if substr found in str, 0 if not -** Purpose: sees if substr matches any part of str -** -** (Not case sensitive) -**-------------------------------------------------------------- -*/ -{ - int i,j; - -/*** Updated 9/7/00 ***/ -/* Fail if substring is empty */ - if (!substr[0]) return(0); - -/* Skip leading blanks of str. */ - for (i=0; str[i]; i++) - if (str[i] != ' ') break; - -/* Check if substr matches remainder of str. */ - for (i=i,j=0; substr[j]; i++,j++) - if (!str[i] || UCHAR(str[i]) != UCHAR(substr[j])) - return(0); - return(1); -} /* end of match */ - - -/*** Updated 10/25/00 ***/ -/* The gettokens function has been totally re-written. */ - -int gettokens(char *s) -/* -**-------------------------------------------------------------- -** Input: *s = string to be tokenized -** Output: returns number of tokens in s -** Purpose: scans string for tokens, saving pointers to them -** in module global variable Tok[] -** -** Tokens can be separated by the characters listed in SEPSTR -** (spaces, tabs, newline, carriage return) which is defined -** in TYPES.H. Text between quotes is treated as a single token. -**-------------------------------------------------------------- -*/ -{ - int len, m, n; - char *c; - -/* Begin with no tokens */ - for (n=0; n 0 && n < MAXTOKS) - { - m = (int)strcspn(s,SEPSTR); /* Find token length */ - len -= m+1; /* Update length of s */ - if (m == 0) s++; /* No token found */ - else - { - if (*s == '"') /* Token begins with quote */ - { - s++; /* Start token after quote */ - m = (int)strcspn(s,"\"\n\r"); /* Find end quote (or EOL) */ - } - s[m] = '\0'; /* Null-terminate the token */ - Tok[n] = s; /* Save pointer to token */ - n++; /* Update token count */ - s += m+1; /* Begin next token */ - } - } - return(n); -} /* End of gettokens */ - - -double hour(char *time, char *units) -/* -**--------------------------------------------------------- -** Input: *time = string containing a time value -** *units = string containing time units -** Output: returns numerical value of time in hours, -** or -1 if an error occurs -** Purpose: converts time from units to hours -**--------------------------------------------------------- -*/ -{ - int n; - double y[3]; - char *s; - -/* Separate clock time into hrs, min, sec. */ - for (n=0; n<3; n++) y[n] = 0.0; - n = 0; - s = strtok(time,":"); - while (s != NULL && n <= 3) - { - if (!getfloat(s,&y[n])) return(-1.0); - s = strtok(NULL,":"); - n++; - } - -/* If decimal time with units attached then convert to hours. */ - if (n == 1) - { - /*if (units[0] == '\0') return(y[0]);*/ - if (strlen(units) == 0) return(y[0]); - if (match(units,w_SECONDS)) return(y[0]/3600.0); - if (match(units,w_MINUTES)) return(y[0]/60.0); - if (match(units,w_HOURS)) return(y[0]); - if (match(units,w_DAYS)) return(y[0]*24.0); - } - -/* Convert hh:mm:ss format to decimal hours */ - if (n > 1) y[0] = y[0] + y[1]/60.0 + y[2]/3600.0; - -/* If am/pm attached then adjust hour accordingly */ -/* (12 am is midnight, 12 pm is noon) */ - if (units[0] == '\0') return(y[0]); - if (match(units,w_AM)) - { - if (y[0] >= 13.0) return(-1.0); - if (y[0] >= 12.0) return(y[0]-12.0); - else return(y[0]); - } - if (match(units,w_PM)) - { - if (y[0] >= 13.0) return(-1.0); - if (y[0] >= 12.0) return(y[0]); - else return(y[0]+12.0); - } - return(-1.0); -} /* end of hour */ - - -int getfloat(char *s, double *y) -/* -**----------------------------------------------------------- -** Input: *s = character string -** Output: *y = floating point number -** returns 1 if conversion successful, 0 if not -** Purpose: converts string to floating point number -**----------------------------------------------------------- -*/ -{ - char *endptr; - *y = (double) strtod(s,&endptr); - if (*endptr > 0) return(0); - return(1); -} - - -int setreport(char *s) -/* -**----------------------------------------------------------- -** Input: *s = report format command -** Output: none -** Returns: error code -** Purpose: processes a report formatting command -** issued by the ENsetreport function -**----------------------------------------------------------- -*/ -{ - Ntokens = gettokens(s); - return(reportdata()); -} - - -void inperrmsg(int err, int sect, char *line) -/* -**------------------------------------------------------------- -** Input: err = error code -** sect = input data section -** *line = line from input file -** Output: none -** Purpose: displays input error message -**------------------------------------------------------------- -*/ -{ - char fmt[MAXMSG+1]; - char id[MAXMSG+1]; - -/* Retrieve ID label of object with input error */ -/* (No ID used for CONTROLS or REPORT sections).*/ - if (sect == _CONTROLS || sect == _REPORT) strcpy(id,""); - else if (sect == _ENERGY) strcpy(id,Tok[1]); - else strcpy(id,Tok[0]); - -/* Copy error messge to string variable fmt */ - switch (err) - { - case 201: strcpy(fmt,ERR201); break; - case 202: strcpy(fmt,ERR202); break; - case 203: strcpy(fmt,ERR203); break; - case 204: strcpy(fmt,ERR204); break; - case 205: strcpy(fmt,ERR205); break; - case 206: strcpy(fmt,ERR206); break; - case 207: strcpy(fmt,ERR207); break; - case 208: strcpy(fmt,ERR208); break; - case 209: strcpy(fmt,ERR209); break; - case 210: strcpy(fmt,ERR210); break; - case 211: strcpy(fmt,ERR211); break; - case 212: strcpy(fmt,ERR212); break; - case 213: strcpy(id,""); - strcpy(fmt,ERR213); break; - case 214: strcpy(id,""); - strcpy(fmt,ERR214); break; - case 215: strcpy(fmt,ERR215); break; - case 216: strcpy(fmt,ERR216); break; - case 217: strcpy(fmt,ERR217); break; - case 219: strcpy(fmt,ERR219); break; - case 220: strcpy(fmt,ERR220); break; - -/*** Updated 10/25/00 ***/ - case 222: strcpy(fmt,ERR222); break; - - default: return; - } - -/* Write error message to Report file */ - sprintf(Msg,fmt,RptSectTxt[sect],id); - writeline(Msg); - -/* Echo input line for syntax errors, and */ -/* errors in CONTROLS and OPTIONS sections. */ - if (sect == _CONTROLS || err == 201 || err == 213) writeline(line); - else writeline(""); -} - -/********************** END OF INPUT2.C ************************/ - - +/* +****************************************************************************** +Project: OWA EPANET +Version: 2.2 +Module: input2.c +Description: reads and interprets network data from an EPANET input file +Authors: see AUTHORS +Copyright: see AUTHORS +License: see LICENSE +Last Updated: 10/29/2019 +****************************************************************************** +*/ + +#include +#include +#include +#include + +#include "types.h" +#include "funcs.h" +#include "hash.h" +#include "text.h" + +#define MAXERRS 10 // Max. input errors reported + +extern char *SectTxt[]; // Input section keywords (see ENUMSTXT.H) + +// Exported functions +int addnodeID(Network *n, int, char *); +int addlinkID(Network *n, int, char *); + +// Imported functions +extern int powercurve(double, double, double, double, double, double *, + double *, double *); + +// Local functions +static int newline(Project *, int, char *); +static int addpattern(Network *, char *); +static int addcurve(Network *, char *); +static int unlinked(Project *); +static int getpumpparams(Project *); +static void inperrmsg(Project *, int, int, char *); + + +int netsize(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: determines number of network objects +**-------------------------------------------------------------- +*/ +{ + Parser *parser = &pr->parser; + + char line[MAXLINE + 1]; // Line from input data file + char *tok; // First token of line + int sect, newsect; // Input data sections + int errcode = 0; // Error code + Spattern *pattern; + + // Initialize object counts + parser->MaxJuncs = 0; + parser->MaxTanks = 0; + parser->MaxPipes = 0; + parser->MaxPumps = 0; + parser->MaxValves = 0; + parser->MaxControls = 0; + parser->MaxRules = 0; + parser->MaxCurves = 0; + sect = -1; + + + // Add a "dummy" time pattern with index of 0 and a single multiplier + // of 1.0 to be used by all demands not assigned a pattern + pr->network.Npats = -1; + errcode = addpattern(&pr->network, ""); + if (errcode) return errcode; + pattern = &pr->network.Pattern[0]; + pattern->Length = 1; + pattern[0].F = (double *)calloc(1, sizeof(double)); + pattern[0].F[0] = 1.0; + parser->MaxPats = pr->network.Npats; + + // Make a pass through input file counting number of each object + if (parser->InFile == NULL) return 0; + while (fgets(line, MAXLINE, parser->InFile) != NULL) + { + // Skip blank lines & those beginning with a comment + tok = strtok(line, SEPSTR); + if (tok == NULL) continue; + if (*tok == ';') continue; + + // Check if line begins with a new section heading + if (tok[0] == '[') + { + newsect = findmatch(tok, SectTxt); + if (newsect >= 0) + { + sect = newsect; + if (sect == _END) break; + continue; + } + else continue; + } + + // Add to count of current object + switch (sect) + { + case _JUNCTIONS: parser->MaxJuncs++; break; + case _RESERVOIRS: + case _TANKS: parser->MaxTanks++; break; + case _PIPES: parser->MaxPipes++; break; + case _PUMPS: parser->MaxPumps++; break; + case _VALVES: parser->MaxValves++; break; + case _CONTROLS: parser->MaxControls++; break; + case _RULES: addrule(parser,tok); break; + case _PATTERNS: + errcode = addpattern(&pr->network, tok); + parser->MaxPats = pr->network.Npats; + break; + case _CURVES: + errcode = addcurve(&pr->network, tok); + parser->MaxCurves = pr->network.Ncurves; + break; + } + if (errcode) break; + } + + parser->MaxNodes = parser->MaxJuncs + parser->MaxTanks; + parser->MaxLinks = parser->MaxPipes + parser->MaxPumps + parser->MaxValves; + if (parser->MaxPats < 1) parser->MaxPats = 1; + if (!errcode) + { + if (parser->MaxJuncs < 1) errcode = 223; // Not enough nodes + else if (parser->MaxTanks == 0) errcode = 224; // No tanks + } + return errcode; +} + +int readdata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: reads contents of input data file +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + char line[MAXLINE + 1], // Line from input data file + wline[MAXLINE + 1]; // Working copy of input line + int sect, newsect, // Data sections + errcode = 0, // Error code + inperr, errsum; // Error code & total error count + + // Allocate input buffer + parser->X = (double *)calloc(MAXTOKS, sizeof(double)); + ERRCODE(MEMCHECK(parser->X)); + if (errcode) return errcode; + + // Initialize actual number of network components + parser->Ntitle = 0; + net->Nnodes = 0; + net->Njuncs = 0; + net->Ntanks = 0; + net->Nlinks = 0; + net->Npipes = 0; + net->Npumps = 0; + net->Nvalves = 0; + net->Ncontrols = 0; + net->Nrules = 0; + + // Patterns & Curves were created previously in netsize() + parser->MaxPats = net->Npats; + parser->MaxCurves = net->Ncurves; + parser->PrevPat = NULL; + parser->PrevCurve = NULL; + + // Initialize full line comment, input data section and error count + parser->LineComment[0] = '\0'; + sect = -1; + errsum = 0; + + // Read each line from input file + while (fgets(line, MAXLINE, parser->InFile) != NULL) + { + // Make copy of line and scan for tokens + strcpy(wline, line); + parser->Ntokens = gettokens(wline, parser->Tok, MAXTOKS, parser->Comment); + + // Skip blank lines and those filled with a comment + parser->ErrTok = -1; + if (parser->Ntokens == 0) + { + // Store full line comment for Patterns and Curves + if (sect == _PATTERNS || sect == _CURVES) + { + strncpy(parser->LineComment, parser->Comment, MAXMSG); + } + continue; + } + + // Apply full line comment for Patterns and Curves + if (sect == _PATTERNS || sect == _CURVES) + { + strcpy(parser->Comment, parser->LineComment); + } + parser->LineComment[0] = '\0'; + + // Check if max. line length exceeded + if (strlen(line) >= MAXLINE) + { + sprintf(pr->Msg, "%s section: %s", geterrmsg(214, pr->Msg), SectTxt[sect]); + writeline(pr, pr->Msg); + writeline(pr, line); + errsum++; + } + + // Check if at start of a new input section + if (parser->Tok[0][0] == '[') + { + newsect = findmatch(parser->Tok[0], SectTxt); + if (newsect >= 0) + { + sect = newsect; + if (sect == _END) break; + continue; + } + else + { + inperrmsg(pr, 201, sect, line); + errsum++; + break; + } + } + + // Otherwise process next line of input in current section + else + { + if (sect >= 0) + { + inperr = newline(pr, sect, line); + if (inperr > 0) + { + inperrmsg(pr, inperr, sect, line); + errsum++; + } + } + else + { + errcode = 200; + break; + } + } + + // Stop if reach end of file or max. error count + if (errsum == MAXERRS) break; + } + + // Check for errors + if (errsum > 0) errcode = 200; + + // Check for unlinked nodes + if (!errcode) errcode = unlinked(pr); + + // Determine pump curve parameters + if (!errcode) errcode = getpumpparams(pr); + + // Free input buffer + free(parser->X); + return errcode; +} + +int newline(Project *pr, int sect, char *line) +/* +**-------------------------------------------------------------- +** Input: sect = current section of input file +** *line = line read from input file +** Output: returns error code or 0 if no error found +** Purpose: processes a new line of data from input file +** +** Note: The xxxdata() functions appear in INPUT3.c. +**-------------------------------------------------------------- +*/ +{ + Parser *parser = &pr->parser; + int n; + + switch (sect) + { + case _TITLE: + if (parser->Ntitle < 3) + { + n = (int)strlen(line); + if (line[n - 1] == 10) + line[n - 1] = '\0'; + strncpy(pr->Title[parser->Ntitle], line, TITLELEN); + parser->Ntitle++; + } + return 0; + case _JUNCTIONS: return (juncdata(pr)); + case _RESERVOIRS: + case _TANKS: return (tankdata(pr)); + case _PIPES: return (pipedata(pr)); + case _PUMPS: return (pumpdata(pr)); + case _VALVES: return (valvedata(pr)); + case _PATTERNS: return (patterndata(pr)); + case _CURVES: return (curvedata(pr)); + case _DEMANDS: return (demanddata(pr)); + case _CONTROLS: return (controldata(pr)); + case _RULES: + if (ruledata(pr) > 0) + { + ruleerrmsg(pr); + return 200; + } + else return 0; + case _SOURCES: return (sourcedata(pr)); + case _EMITTERS: return (emitterdata(pr)); + case _QUALITY: return (qualdata(pr)); + case _STATUS: return (statusdata(pr)); + case _ROUGHNESS: return (0); + case _ENERGY: return (energydata(pr)); + case _REACTIONS: return (reactdata(pr)); + case _MIXING: return (mixingdata(pr)); + case _REPORT: return (reportdata(pr)); + case _TIMES: return (timedata(pr)); + case _OPTIONS: return (optiondata(pr)); + case _COORDS: return (coordata(pr)); + case _VERTICES: return (vertexdata(pr)); + + // Data in these sections are not used for any computations + case _LABELS: + case _TAGS: + case _BACKDROP: + return (0); + } + return 201; +} + +int getpumpparams(Project *pr) +/* +**------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: computes pump curve coefficients for all pumps +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + int i, k, errcode = 0; + char errmsg[MAXMSG+1]; + + for (i = 1; i <= net->Npumps; i++) + { + errcode = updatepumpparams(pr, i); + if (errcode) + { + k = net->Pump[i].Link; + sprintf(pr->Msg, "Error %d: %s %s", + errcode, geterrmsg(errcode, errmsg), net->Link[k].ID); + writeline(pr, pr->Msg); + return 200; + } + } + return 0; +} + +int updatepumpparams(Project *pr, int pumpindex) +/* +**------------------------------------------------------------- +** Input: pumpindex = index of a pump +** Output: returns error code +** Purpose: computes & checks a pump's head curve coefficients +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Spump *pump; + Scurve *curve; + + int m; + int curveindex; + int npts = 0; + int errcode = 0; + double a, b, c, h0 = 0.0, h1 = 0.0, h2 = 0.0, q1 = 0.0, q2 = 0.0; + + pump = &net->Pump[pumpindex]; + if (pump->Ptype == CONST_HP) // Constant Hp pump + { + pump->H0 = 0.0; + pump->R = -8.814 * net->Link[pump->Link].Km; + pump->N = -1.0; + pump->Hmax = BIG; // No head limit + pump->Qmax = BIG; // No flow limit + pump->Q0 = 1.0; // Init. flow = 1 cfs + return errcode; + } + + else if (pump->Ptype == NOCURVE) // Pump curve specified + { + curveindex = pump->Hcurve; + if (curveindex == 0) return 226; + curve = &net->Curve[curveindex]; + curve->Type = PUMP_CURVE; + npts = curve->Npts; + + // Generic power function curve + if (npts == 1) + { + pump->Ptype = POWER_FUNC; + q1 = curve->X[0]; + h1 = curve->Y[0]; + h0 = 1.33334 * h1; + q2 = 2.0 * q1; + h2 = 0.0; + } + + // 3 point curve with shutoff head + else if (npts == 3 && curve->X[0] == 0.0) + { + pump->Ptype = POWER_FUNC; + h0 = curve->Y[0]; + q1 = curve->X[1]; + h1 = curve->Y[1]; + q2 = curve->X[2]; + h2 = curve->Y[2]; + } + + // Custom pump curve + else + { + pump->Ptype = CUSTOM; + for (m = 1; m < npts; m++) + { + if (curve->Y[m] >= curve->Y[m - 1]) return 227; + } + pump->Qmax = curve->X[npts - 1]; + pump->Q0 = (curve->X[0] + pump->Qmax) / 2.0; + pump->Hmax = curve->Y[0]; + } + + // Compute shape factors & limits of power function curves + if (pump->Ptype == POWER_FUNC) + { + if (!powercurve(h0, h1, h2, q1, q2, &a, &b, &c)) return 227; + else + { + pump->H0 = -a; + pump->R = -b; + pump->N = c; + pump->Q0 = q1; + pump->Qmax = pow((-a / b), (1.0 / c)); + pump->Hmax = h0; + } + } + } + return 0; +} + + +int addnodeID(Network *net, int n, char *id) +/* +**------------------------------------------------------------- +** Input: n = node index +** id = ID label +** Output: returns 0 if ID already in use, 1 if not +** Purpose: adds a node ID to the Node Hash Table +**-------------------------------------------------------------- +*/ +{ + if (findnode(net,id)) + return 215; // duplicate id + if (strlen(id) > MAXID) + return 252; // invalid format (too long) + strncpy(net->Node[n].ID, id, MAXID); + hashtable_insert(net->NodeHashTable, net->Node[n].ID, n); + return 0; +} + +int addlinkID(Network *net, int n, char *id) +/* +**------------------------------------------------------------- +** Input: n = link index +** id = ID label +** Output: returns 0 if ID already in use, 1 if not +** Purpose: adds a link ID to the Link Hash Table +**-------------------------------------------------------------- +*/ +{ + if (findlink(net,id)) + return 215; // duplicate id + if (strlen(id) > MAXID) + return 252; // invalid formt (too long); + strncpy(net->Link[n].ID, id, MAXID); + hashtable_insert(net->LinkHashTable, net->Link[n].ID, n); + return 0; +} + +int addpattern(Network *network, char *id) +/* +**------------------------------------------------------------- +** Input: id = pattern ID label +** Output: returns error code +** Purpose: adds a new pattern to the database +**-------------------------------------------------------------- +*/ +{ + int n = network->Npats; + Spattern *pattern; + + // Check if pattern was already created + if (n > 0) + { + if (strcmp(id, network->Pattern[n].ID) == 0) return 0; + if (findpattern(network, id) > 0) return 0; + } + if (strlen(id) > MAXID) return 252; + + // Update pattern count & add a new pattern to the database + n = n + 2; + network->Pattern = (Spattern *)realloc(network->Pattern, n * sizeof(Spattern)); + if (network->Pattern == NULL) return 101; + (network->Npats)++; + + // Initialize the pattern + pattern = &network->Pattern[network->Npats]; + strncpy(pattern->ID, id, MAXID); + pattern->Comment = NULL; + pattern->Length = 0; + pattern->F = NULL; + return 0; +} + +int addcurve(Network *network, char *id) +/* +**------------------------------------------------------------- +** Input: id = curve ID label +** Output: returns error code +** Purpose: adds a new curve to the database +**-------------------------------------------------------------- +*/ +{ + int n = network->Ncurves; + Scurve *curve; + + // Check if was already created + if (n > 0) + { + if (strcmp(id, network->Curve[n].ID) == 0) return 0; + if (findcurve(network, id) > 0) return 0; + } + if (strlen(id) > MAXID) return 252; + + n = n + 2; + network->Curve = (Scurve *)realloc(network->Curve, n * sizeof(Scurve)); + if (network->Curve == NULL) return 101; + (network->Ncurves)++; + + // Initialize the curve + curve = &network->Curve[network->Ncurves]; + strncpy(curve->ID, id, MAXID); + curve->Type = GENERIC_CURVE; + curve->Comment = NULL; + curve->Capacity = 0; + curve->Npts = 0; + curve->X = NULL; + curve->Y = NULL; + return 0; +} + +int unlinked(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code if any unlinked junctions found +** Purpose: checks for unlinked junctions in network +** +** NOTE: unlinked tanks have no effect on computations. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + int *marked; + int i, err, errcode; + + errcode = 0; + err = 0; + + // Create an array to record number of links incident on each node + marked = (int *)calloc(net->Nnodes + 1, sizeof(int)); + ERRCODE(MEMCHECK(marked)); + if (errcode) return errcode; + memset(marked, 0, (net->Nnodes + 1) * sizeof(int)); + + // Mark end nodes of each link + for (i = 1; i <= net->Nlinks; i++) + { + marked[net->Link[i].N1]++; + marked[net->Link[i].N2]++; + } + + // Check each junction + for (i = 1; i <= net->Njuncs; i++) + { + // If not marked then error + if (marked[i] == 0) + { + err++; + sprintf(pr->Msg, "Error 233: %s %s", geterrmsg(233, pr->Msg), net->Node[i].ID); + writeline(pr, pr->Msg); + } + if (err >= MAXERRS) break; + } + if (err > 0) errcode = 200; + free(marked); + return errcode; +} + +int findmatch(char *line, char *keyword[]) +/* +**-------------------------------------------------------------- +** Input: *line = line from input file +** *keyword[] = list of NULL terminated keywords +** Output: returns index of matching keyword or +** -1 if no match found +** Purpose: determines which keyword appears on input line +**-------------------------------------------------------------- +*/ +{ + int i = 0; + while (keyword[i] != NULL) + { + if (match(line, keyword[i])) return i; + i++; + } + return -1; +} + +int match(const char *str, const char *substr) +/* +**-------------------------------------------------------------- +** Input: *str = string being searched +** *substr = substring being searched for +** Output: returns 1 if substr found in str, 0 if not +** Purpose: sees if substr matches any part of str +** +** (Not case sensitive) +**-------------------------------------------------------------- +*/ +{ + int i, j; + + // Fail if substring is empty + if (!substr[0]) return 0; + + // Skip leading blanks of str + for (i = 0; str[i]; i++) + { + if (str[i] != ' ') break; + } + + // Check if substr matches remainder of str + for (j = 0; substr[j]; i++, j++) + { + if (!str[i] || UCHAR(str[i]) != UCHAR(substr[j])) return 0; + } + return 1; +} + +int gettokens(char *s, char** Tok, int maxToks, char *comment) +/* + **-------------------------------------------------------------- + ** Input: *s = string to be tokenized + ** Output: returns number of tokens in s + ** Purpose: scans string for tokens, saving pointers to them + ** in module global variable Tok[] + ** + ** Tokens can be separated by the characters listed in SEPSTR + ** (spaces, tabs, newline, carriage return) which is defined + ** in TYPES.H. Text between quotes is treated as a single token. + **-------------------------------------------------------------- + */ +{ + int n; + size_t len, m; + char *c, *c2; + + // clear comment + comment[0] = '\0'; + + // Begin with no tokens + for (n=0; n 0) + { + len = strcspn(c2, "\n\r"); + len = MIN(len, MAXMSG); + strncpy(comment, c2, len); + comment[MIN(len,MAXMSG)] = '\0'; + } + } + *c = '\0'; + } + len = (int)strlen(s); + + // Scan s for tokens until nothing left + while (len > 0 && n < MAXTOKS) + { + m = (int)strcspn(s,SEPSTR); // Find token length + if (m == len) // s is last token + { + Tok[n] = s; + n++; + break; + } + len -= m+1; // Update length of s + if (m == 0) s++; // No token found + else + { + if (*s == '"') // Token begins with quote + { + s++; // Start token after quote + m = (int)strcspn(s,"\"\n\r"); // Find end quote (or EOL) + } + s[m] = '\0'; // Null-terminate the token + Tok[n] = s; // Save pointer to token + n++; // Update token count + s += m+1; // Begin next token + } + } + return n; +} + +double hour(char *time, char *units) +/* +**--------------------------------------------------------- +** Input: *time = string containing a time value +** *units = string containing time units +** Output: returns numerical value of time in hours, +** or -1 if an error occurs +** Purpose: converts time from units to hours +**--------------------------------------------------------- +*/ +{ + int n; + double y[3]; + char *s; + + // Separate clock time into hrs, min, sec + for (n = 0; n < 3; n++) y[n] = 0.0; + n = 0; + s = strtok(time, ":"); + while (s != NULL && n <= 3) + { + if (!getfloat(s, &y[n])) return -1.0; + s = strtok(NULL, ":"); + n++; + } + + // If decimal time with units attached then convert to hours + if (n == 1) + { + if (strlen(units) == 0) return (y[0]); + if (match(units, w_SECONDS)) return (y[0] / 3600.0); + if (match(units, w_MINUTES)) return (y[0] / 60.0); + if (match(units, w_HOURS)) return (y[0]); + if (match(units, w_DAYS)) return (y[0] * 24.0); + } + + // Convert hh:mm:ss format to decimal hours + if (n > 1) y[0] = y[0] + y[1] / 60.0 + y[2] / 3600.0; + + // If am/pm attached then adjust hour accordingly + // (12 am is midnight, 12 pm is noon) + if (units[0] == '\0') return y[0]; + if (match(units, w_AM)) + { + if (y[0] >= 13.0) return -1.0; + if (y[0] >= 12.0) return (y[0] - 12.0); + else return (y[0]); + } + if (match(units, w_PM)) + { + if (y[0] >= 13.0) return -1.0; + if (y[0] >= 12.0) return y[0]; + else return (y[0] + 12.0); + } + return -1.0; +} + +int getfloat(char *s, double *y) +/* +**----------------------------------------------------------- +** Input: *s = character string +** Output: *y = floating point number +** returns 1 if conversion successful, 0 if not +** Purpose: converts string to floating point number +**----------------------------------------------------------- +*/ +{ + char *endptr; + *y = (double)strtod(s, &endptr); + if (*endptr > 0) return 0; + return 1; +} + +int setreport(Project *pr, char *s) +/* +**----------------------------------------------------------- +** Input: *s = report format command +** Output: none +** Returns: error code +** Purpose: processes a report formatting command +** issued by the ENsetreport function +**----------------------------------------------------------- +*/ +{ + Parser *parser = &pr->parser; + parser->Ntokens = gettokens(s, parser->Tok, MAXTOKS, parser->Comment); + return reportdata(pr); +} + +void inperrmsg(Project *pr, int err, int sect, char *line) +/* +**------------------------------------------------------------- +** Input: err = error code +** sect = input data section +** *line = line from input file +** Output: none +** Purpose: displays input reader error message +**------------------------------------------------------------- +*/ +{ + Parser *parser = &pr->parser; + + char errStr[MAXMSG + 1] = ""; + char tok[MAXMSG + 1]; + + // Get token associated with input error + if (parser->ErrTok >= 0) strcpy(tok, parser->Tok[parser->ErrTok]); + else strcpy(tok, ""); + + // write error message to report file + sprintf(pr->Msg, "Error %d: %s %s in %s section:", + err, geterrmsg(err, errStr), tok, SectTxt[sect]); + writeline(pr, pr->Msg); + + // Echo input line + writeline(pr, line); +} diff --git a/src/input3.c b/src/input3.c old mode 100755 new mode 100644 index 4ab3487..28570fc --- a/src/input3.c +++ b/src/input3.c @@ -1,1895 +1,2170 @@ -/* -********************************************************************** - -INPUT3.C -- Input data parser for EPANET - -VERSION: 2.00 -DATE: 5/30/00 - 9/7/00 - 10/25/00 - 3/1/01 - 6/24/02 - 8/15/07 (2.00.11) - 2/14/08 (2.00.12) -AUTHOR: L. Rossman - US EPA - NRMRL - -This module parses data from each line of input from file InFile. -All functions in this module are called from newline() in INPUT2.C. - -********************************************************************** -*/ - -#include -#include -#include -#ifndef __APPLE__ -#include -#endif -#include -#include "hash.h" -#include "text.h" -#include "types.h" -#include "funcs.h" -#define EXTERN extern -#include "vars.h" - -/* Defined in enumstxt.h in EPANET.C */ -extern char *MixTxt[]; -extern char *Fldname[]; - -/* Defined in INPUT2.C */ -extern char *Tok[MAXTOKS]; -extern STmplist *PrevPat; -extern STmplist *PrevCurve; -extern int Ntokens; - - -int juncdata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes junction data -** Format: -** [JUNCTIONS] -** id elev. (demand) (demand pattern) -**-------------------------------------------------------------- -*/ -{ - int n, p = 0; - double el,y = 0.0; - Pdemand demand; - STmplist *pat; - -/* Add new junction to data base */ - n = Ntokens; - if (Nnodes == MaxNodes) return(200); - Njuncs++; - Nnodes++; - if (!addnodeID(Njuncs,Tok[0])) return(215); - -/* Check for valid data */ - if (n < 2) return(201); - if (!getfloat(Tok[1],&el)) return(202); - if (n >= 3 && !getfloat(Tok[2],&y)) return(202); - if (n >= 4) - { - pat = findID(Tok[3],Patlist); - if (pat == NULL) return(205); - p = pat->i; - } - -/* Save junction data */ - Node[Njuncs].El = el; - Node[Njuncs].C0 = 0.0; - Node[Njuncs].S = NULL; - Node[Njuncs].Ke = 0.0; - Node[Njuncs].Rpt = 0; - -/* Create a new demand record */ -/*** Updated 6/24/02 ***/ - if (n >= 3) - { - demand = (struct Sdemand *) malloc(sizeof(struct Sdemand)); - if (demand == NULL) return(101); - demand->Base = y; - demand->Pat = p; - demand->next = Node[Njuncs].D; - Node[Njuncs].D = demand; - NodeDemand[Njuncs] = y; - } - else NodeDemand[Njuncs] = MISSING; -/*** end of update ***/ - return(0); -} /* end of juncdata */ - - -int tankdata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes tank & reservoir data -** Format: -** [RESERVOIRS] -** id elev (pattern) -** [TANKS] -** id elev (pattern) -** id elev initlevel minlevel maxlevel diam (minvol vcurve) -**-------------------------------------------------------------- -*/ -{ - int i, /* Node index */ - n, /* # data items */ - p = 0, /* Fixed grade time pattern index */ - vcurve = 0; /* Volume curve index */ - double el = 0.0, /* Elevation */ - initlevel = 0.0, /* Initial level */ - minlevel = 0.0, /* Minimum level */ - maxlevel = 0.0, /* Maximum level */ - minvol = 0.0, /* Minimum volume */ - diam = 0.0, /* Diameter */ - area; /* X-sect. area */ - STmplist *t; - -/* Add new tank to data base */ - n = Ntokens; - if (Ntanks == MaxTanks - || Nnodes == MaxNodes) return(200); - Ntanks++; - Nnodes++; - i = MaxJuncs + Ntanks; /* i = node index. */ - if (!addnodeID(i,Tok[0])) return(215); /* Add ID to database. */ - -/* Check for valid data */ - if (n < 2) return(201); /* Too few fields. */ - if (!getfloat(Tok[1],&el)) return(202); /* Read elevation */ - if (n <= 3) /* Tank is reservoir.*/ - { - if (n == 3) /* Pattern supplied */ - { - t = findID(Tok[2],Patlist); - if (t == NULL) return(205); - p = t->i; - } - } - else if (n < 6) return(201); /* Too few fields for tank.*/ - else - { - /* Check for valid input data */ - if (!getfloat(Tok[2],&initlevel)) return(202); - if (!getfloat(Tok[3],&minlevel)) return(202); - if (!getfloat(Tok[4],&maxlevel)) return(202); - if (!getfloat(Tok[5],&diam)) return(202); - if (diam < 0.0) return(202); - if (n >= 7 - && !getfloat(Tok[6],&minvol)) return(202); - - /* If volume curve supplied check it exists */ - if (n == 8) - { - t = findID(Tok[7],Curvelist); - if (t == NULL) return(202); - vcurve = t->i; - } - } - - Node[i].Rpt = 0; - Node[i].El = el; /* Elevation. */ - Node[i].C0 = 0.0; /* Init. quality. */ - Node[i].S = NULL; /* WQ source data */ - Node[i].Ke = 0.0; /* Emitter coeff. */ - Tank[Ntanks].Node = i; /* Node index. */ - Tank[Ntanks].H0 = initlevel; /* Init. level. */ - Tank[Ntanks].Hmin = minlevel; /* Min. level. */ - Tank[Ntanks].Hmax = maxlevel; /* Max level. */ - Tank[Ntanks].A = diam; /* Diameter. */ - Tank[Ntanks].Pat = p; /* Fixed grade pattern. */ - Tank[Ntanks].Kb = MISSING; /* Reaction coeff. */ - /* - ******************************************************************* - NOTE: The min, max, & initial volumes set here are based on a - nominal tank diameter. They will be modified in INPUT1.C if - a volume curve is supplied for this tank. - ******************************************************************* - */ - area = PI*SQR(diam)/4.0; - Tank[Ntanks].Vmin = area*minlevel; - if (minvol > 0.0) Tank[Ntanks].Vmin = minvol; - Tank[Ntanks].V0 = Tank[Ntanks].Vmin + area*(initlevel - minlevel); - Tank[Ntanks].Vmax = Tank[Ntanks].Vmin + area*(maxlevel - minlevel); - - Tank[Ntanks].Vcurve = vcurve; /* Volume curve */ - Tank[Ntanks].MixModel = MIX1; /* Completely mixed */ - Tank[Ntanks].V1max = 1.0; /* Compart. size ratio */ - return(0); -} /* end of tankdata */ - - -int pipedata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes pipe data -** Format: -** [PIPE] -** id node1 node2 length diam rcoeff (lcoeff) (status) -**-------------------------------------------------------------- -*/ -{ - int j1, /* Start-node index */ - j2, /* End-node index */ - n; /* # data items */ - char type = PIPE, /* Link type */ - status = OPEN; /* Link status */ - double length, /* Link length */ - diam, /* Link diameter */ - rcoeff, /* Roughness coeff. */ - lcoeff = 0.0; /* Minor loss coeff. */ - -/* Add new pipe to data base */ - n = Ntokens; - if (Nlinks == MaxLinks) return(200); - Npipes++; - Nlinks++; - if (!addlinkID(Nlinks,Tok[0])) return(215); - -/* Check for valid data */ - if (n < 6) return(201); - if ((j1 = findnode(Tok[1])) == 0 || - (j2 = findnode(Tok[2])) == 0 - ) return(203); - -/*** Updated 10/25/00 ***/ - if (j1 == j2) return(222); - - if (!getfloat(Tok[3],&length) || - !getfloat(Tok[4],&diam) || - !getfloat(Tok[5],&rcoeff) - ) return(202); - - if (length <= 0.0 || - diam <= 0.0 || - rcoeff <= 0.0 - ) return(202); - - /* Case where either loss coeff. or status supplied */ - if (n == 7) - { - if (match(Tok[6],w_CV)) type = CV; - else if (match(Tok[6],w_CLOSED)) status = CLOSED; - else if (match(Tok[6],w_OPEN)) status = OPEN; - else if (!getfloat(Tok[6],&lcoeff)) return(202); - } - - /* Case where both loss coeff. and status supplied */ - if (n == 8) - { - if (!getfloat(Tok[6],&lcoeff)) return(202); - if (match(Tok[7],w_CV)) type = CV; - else if (match(Tok[7],w_CLOSED)) status = CLOSED; - else if (match(Tok[7],w_OPEN)) status = OPEN; - else return(202); - } - if (lcoeff < 0.0) return(202); - -/* Save pipe data */ - Link[Nlinks].N1 = j1; /* Start-node index */ - Link[Nlinks].N2 = j2; /* End-node index */ - Link[Nlinks].Len = length; /* Length */ - Link[Nlinks].Diam = diam; /* Diameter */ - Link[Nlinks].Kc = rcoeff; /* Rough. coeff */ - Link[Nlinks].Km = lcoeff; /* Loss coeff */ - Link[Nlinks].Kb = MISSING; /* Bulk coeff */ - Link[Nlinks].Kw = MISSING; /* Wall coeff */ - Link[Nlinks].Type = type; /* Link type */ - Link[Nlinks].Stat = status; /* Link status */ - Link[Nlinks].Rpt = 0; /* Report flag */ - return(0); -} /* end of pipedata */ - - -int pumpdata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes pump data -** Formats: -** [PUMP] -** (Version 1.x Format): -** id node1 node2 power -** id node1 node2 h1 q1 -** id node1 node2 h0 h1 q1 h2 q2 -** (Version 2 Format): -** id node1 node2 KEYWORD value {KEYWORD value ...} -** where KEYWORD = [POWER,HEAD,PATTERN,SPEED] -**-------------------------------------------------------------- -*/ -{ - int j, - j1, /* Start-node index */ - j2, /* End-node index */ - m, n; /* # data items */ - double y; - STmplist *t; /* Pattern record */ - -/* Add new pump to data base */ - n = Ntokens; - if (Nlinks == MaxLinks || - Npumps == MaxPumps - ) return(200); - Nlinks++; - Npumps++; - if (!addlinkID(Nlinks,Tok[0])) return(215); - -/* Check for valid data */ - if (n < 4) return(201); - if ((j1 = findnode(Tok[1])) == 0 || - (j2 = findnode(Tok[2])) == 0 - ) return(203); - -/*** Updated 10/25/00 ***/ - if (j1 == j2) return(222); - -/* Save pump data */ - Link[Nlinks].N1 = j1; /* Start-node index. */ - Link[Nlinks].N2 = j2; /* End-node index. */ - Link[Nlinks].Diam = Npumps; /* Pump index. */ - Link[Nlinks].Len = 0.0; /* Link length. */ - Link[Nlinks].Kc = 1.0; /* Speed factor. */ - Link[Nlinks].Km = 0.0; /* Horsepower. */ - Link[Nlinks].Kb = 0.0; - Link[Nlinks].Kw = 0.0; - Link[Nlinks].Type = PUMP; /* Link type. */ - Link[Nlinks].Stat = OPEN; /* Link status. */ - Link[Nlinks].Rpt = 0; /* Report flag. */ - Pump[Npumps].Link = Nlinks; /* Link index. */ - Pump[Npumps].Ptype = NOCURVE; /* Type of pump curve */ - Pump[Npumps].Hcurve = 0; /* Pump curve index */ - Pump[Npumps].Ecurve = 0; /* Effic. curve index */ - Pump[Npumps].Upat = 0; /* Utilization pattern*/ - Pump[Npumps].Ecost = 0.0; /* Unit energy cost */ - Pump[Npumps].Epat = 0; /* Energy cost pattern*/ - -/* If 4-th token is a number then input follows Version 1.x format */ -/* so retrieve pump curve parameters */ - if (getfloat(Tok[3],&X[0])) - { - m = 1; - for (j=4; ji; - } - else if (match(Tok[m-1],w_PATTERN)) /* Speed/status pattern */ - { - t = findID(Tok[m],Patlist); - if (t == NULL) return(205); - Pump[Npumps].Upat = t->i; - } - else if (match(Tok[m-1],w_SPEED)) /* Speed setting */ - { - if (!getfloat(Tok[m],&y)) return(202); - if (y < 0.0) return(202); - Link[Nlinks].Kc = y; - } - else return(201); - m = m + 2; /* Skip to next keyword token */ - } - return(0); -} /* end of pumpdata */ - - -int valvedata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes valve data -** Format: -** [VALVE] -** id node1 node2 diam type setting (lcoeff) -**-------------------------------------------------------------- -*/ -{ - int j1, /* Start-node index */ - j2, /* End-node index */ - n; /* # data items */ - char status = ACTIVE, /* Valve status */ - type; /* Valve type */ - double diam = 0.0, /* Valve diameter */ - setting, /* Valve setting */ - lcoeff = 0.0; /* Minor loss coeff. */ - STmplist *t; /* Curve record */ - -/* Add new valve to data base */ - n = Ntokens; - if (Nlinks == MaxLinks || - Nvalves == MaxValves - ) return(200); - Nvalves++; - Nlinks++; - if (!addlinkID(Nlinks,Tok[0])) return(215); - -/* Check for valid data */ - if (n < 6) return(201); - if ((j1 = findnode(Tok[1])) == 0 || - (j2 = findnode(Tok[2])) == 0 - ) return(203); - -/*** Updated 10/25/00 ***/ - if (j1 == j2) return(222); - - if (match(Tok[4],w_PRV)) type = PRV; - else if (match(Tok[4],w_PSV)) type = PSV; - else if (match(Tok[4],w_PBV)) type = PBV; - else if (match(Tok[4],w_FCV)) type = FCV; - else if (match(Tok[4],w_TCV)) type = TCV; - else if (match(Tok[4],w_GPV)) type = GPV; - else return(201); /* Illegal valve type.*/ - if (!getfloat(Tok[3],&diam)) return(202); - if (diam <= 0.0) return(202); /* Illegal diameter.*/ - if (type == GPV) /* Headloss curve for GPV */ - { - t = findID(Tok[5],Curvelist); - if (t == NULL) return(206); - setting = t->i; - -/*** Updated 9/7/00 ***/ - status = OPEN; - - } - else if (!getfloat(Tok[5],&setting)) return(202); - if (n >= 7 && - !getfloat(Tok[6],&lcoeff) - ) return(202); - -/* Check that PRV, PSV, or FCV not connected to a tank & */ -/* check for illegal connections between pairs of valves.*/ - if ((j1 > Njuncs || j2 > Njuncs) && - (type == PRV || type == PSV || type == FCV) - ) return(219); - if (!valvecheck(type,j1,j2)) return(220); - -/* Save valve data */ - Link[Nlinks].N1 = j1; /* Start-node index. */ - Link[Nlinks].N2 = j2; /* End-node index. */ - Link[Nlinks].Diam = diam; /* Valve diameter. */ - Link[Nlinks].Len = 0.0; /* Link length. */ - Link[Nlinks].Kc = setting; /* Valve setting. */ - Link[Nlinks].Km = lcoeff; /* Loss coeff */ - Link[Nlinks].Kb = 0.0; - Link[Nlinks].Kw = 0.0; - Link[Nlinks].Type = type; /* Valve type. */ - Link[Nlinks].Stat = status; /* Valve status. */ - Link[Nlinks].Rpt = 0; /* Report flag. */ - Valve[Nvalves].Link = Nlinks; /* Link index. */ - return(0); -} /* end of valvedata */ - - -int patterndata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes time pattern data -** Format: -** [PATTERNS] -** id mult1 mult2 ..... -**-------------------------------------------------------------- -*/ -{ - int i,n; - double x; - SFloatlist *f; - STmplist *p; - n = Ntokens - 1; - if (n < 1) return(201); /* Too few values */ - if ( /* Check for new pattern */ - PrevPat != NULL && - strcmp(Tok[0],PrevPat->ID) == 0 - ) p = PrevPat; - else p = findID(Tok[0],Patlist); - if (p == NULL) return(205); - for (i=1; i<=n; i++) /* Add multipliers to list */ - { - if (!getfloat(Tok[i],&x)) return(202); - f = (SFloatlist *) malloc(sizeof(SFloatlist)); - if (f == NULL) return(101); - f->value = x; - f->next = p->x; - p->x = f; - } - Pattern[p->i].Length += n; /* Save # multipliers for pattern */ - PrevPat = p; /* Set previous pattern pointer */ - return(0); -} /* end of patterndata */ - - -int curvedata() -/* -**------------------------------------------------------ -** Input: none -** Output: returns error code -** Purpose: processes curve data -** Format: -** [CURVES] -** CurveID x-value y-value -**------------------------------------------------------ -*/ -{ - double x,y; - SFloatlist *fx, *fy; - STmplist *c; - - /* Check for valid curve ID */ - if (Ntokens < 3) return(201); - if ( - PrevCurve != NULL && - strcmp(Tok[0],PrevCurve->ID) == 0 - ) c = PrevCurve; - else c = findID(Tok[0],Curvelist); - if (c == NULL) return(205); - - /* Check for valid data */ - if (!getfloat(Tok[1],&x)) return(202); - if (!getfloat(Tok[2],&y)) return(202); - - /* Add new data point to curve's linked list */ - fx = (SFloatlist *) malloc(sizeof(SFloatlist)); - fy = (SFloatlist *) malloc(sizeof(SFloatlist)); - if (fx == NULL || fy == NULL) return(101); - fx->value = x; - fx->next = c->x; - c->x = fx; - fy->value = y; - fy->next = c->y; - c->y = fy; - Curve[c->i].Npts++; - - /* Save the pointer to this curve */ - PrevCurve = c; - return(0); -} - -int coordata() -/* - **-------------------------------------------------------------- - ** Input: none - ** Output: returns error code - ** Purpose: processes coordinate data - ** Format: - ** [COORD] - ** id x y - **-------------------------------------------------------------- - */ -{ - double x, y; - int j; - - /* Check for valid node ID */ - if (Ntokens < 3) return(201); - - /* Check for valid data */ - if ((j = findnode(Tok[0])) == 0) return(203); - if (!getfloat(Tok[1],&x)) return(202); - if (!getfloat(Tok[2],&y)) return(202); - - /* Save coord data */ - strncpy(Coord[j].ID, Node[j].ID, MAXID); - Coord[j].X = x; - Coord[j].Y = y; - Coord[j].HaveCoords = TRUE; - - return(0); -} /* end of coordata */ - -int demanddata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes node demand data -** Format: -** [DEMANDS] -** MULTIPLY factor -** node base_demand (pattern) -** -** NOTE: Demands entered in this section replace those -** entered in the [JUNCTIONS] section -**-------------------------------------------------------------- -*/ -{ - int j,n,p = 0; - double y; - Pdemand demand; - STmplist *pat; - -/* Extract data from tokens */ - n = Ntokens; - if (n < 2) return(201); - if (!getfloat(Tok[1],&y)) return(202); - -/* If MULTIPLY command, save multiplier */ - if (match(Tok[0],w_MULTIPLY)) - { - if (y <= 0.0) return(202); - else Dmult = y; - return(0); - } - -/* Otherwise find node (and pattern) being referenced */ - if ((j = findnode(Tok[0])) == 0) return(208); - if (j > Njuncs) return(208); - if (n >= 3) - { - pat = findID(Tok[2],Patlist); - if (pat == NULL) return(205); - p = pat->i; - } - -/* Replace any demand entered in [JUNCTIONS] section */ -/* (Such demand was temporarily stored in D[]) */ - -/*** Updated 6/24/02 ***/ - demand = Node[j].D; - if (demand && NodeDemand[j] != MISSING) - { - demand->Base = y; - demand->Pat = p; - NodeDemand[j] = MISSING; - } -/*** End of update ***/ - -/* Otherwise add a new demand to this junction */ - else - { - demand = (struct Sdemand *) malloc(sizeof(struct Sdemand)); - if (demand == NULL) return(101); - demand->Base = y; - demand->Pat = p; - demand->next = Node[j].D; - Node[j].D = demand; - } - return(0); -} /* end of demanddata */ - - -int controldata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes simple controls -** Formats: -** [CONTROLS] -** LINK linkID setting IF NODE nodeID {BELOW/ABOVE} level -** LINK linkID setting AT TIME value (units) -** LINK linkID setting AT CLOCKTIME value (units) -** (0) (1) (2) (3) (4) (5) (6) (7) -**-------------------------------------------------------------- -*/ -{ - int i = 0, /* Node index */ - k, /* Link index */ - n; /* # data items */ - char status = ACTIVE, /* Link status */ - type; /* Link or control type */ - double setting = MISSING, /* Link setting */ - time = 0.0, /* Simulation time */ - level = 0.0; /* Pressure or tank level */ - -/* Check for sufficient number of input tokens */ - n = Ntokens; - if (n < 6) return(201); - -/* Check that controlled link exists */ - k = findlink(Tok[1]); - if (k == 0) return(204); - type = Link[k].Type; - if (type == CV) return(207); /* Cannot control check valve. */ - -/*** Updated 9/7/00 ***/ -/* Parse control setting into a status level or numerical setting. */ - if (match(Tok[2],w_OPEN)) - { - status = OPEN; - if (type == PUMP) setting = 1.0; - if (type == GPV) setting = Link[k].Kc; - } - else if (match(Tok[2],w_CLOSED)) - { - status = CLOSED; - if (type == PUMP) setting = 0.0; - if (type == GPV) setting = Link[k].Kc; - } - else if (type == GPV) return(206); - else if (!getfloat(Tok[2],&setting)) return(202); - -/*** Updated 3/1/01 ***/ -/* Set status for pump in case speed setting was supplied */ -/* or for pipe if numerical setting was supplied */ - - if (type == PUMP || type == PIPE) - { - if (setting != MISSING) - { - if (setting < 0.0) return(202); - else if (setting == 0.0) status = CLOSED; - else status = OPEN; - } - } - -/* Determine type of control */ - if (match(Tok[4],w_TIME)) type = TIMER; - else if (match(Tok[4],w_CLOCKTIME)) type = TIMEOFDAY; - else - { - if (n < 8) return(201); - if ((i = findnode(Tok[5])) == 0) return(203); - if (match(Tok[6],w_BELOW)) type = LOWLEVEL; - else if (match(Tok[6],w_ABOVE)) type = HILEVEL; - else return(201); - } - -/* Parse control level or time */ - switch (type) - { - case TIMER: - case TIMEOFDAY: - if (n == 6) time = hour(Tok[5],""); - if (n == 7) time = hour(Tok[5],Tok[6]); - if (time < 0.0) return(201); - break; - case LOWLEVEL: - case HILEVEL: - if (!getfloat(Tok[7],&level)) return(202); - break; - } - -/* Fill in fields of control data structure */ - Ncontrols++; - if (Ncontrols > MaxControls) return(200); - Control[Ncontrols].Link = k; - Control[Ncontrols].Node = i; - Control[Ncontrols].Type = type; - Control[Ncontrols].Status = status; - Control[Ncontrols].Setting = setting; - Control[Ncontrols].Time = (long)(3600.0*time); - if (type == TIMEOFDAY) - Control[Ncontrols].Time %= SECperDAY; - Control[Ncontrols].Grade = level; - return(0); -} /* end of controldata */ - - -int sourcedata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes water quality source data -** Formats: -** [SOURCE] -** node sourcetype quality (pattern start stop) -** -** NOTE: units of mass-based source are mass/min -**-------------------------------------------------------------- -*/ -{ - int i, /* Token with quality value */ - j, /* Node index */ - n, /* # data items */ - p = 0; /* Time pattern */ - char type = CONCEN; /* Source type */ - double c0 = 0; /* Init. quality */ - STmplist *pat; - Psource source; - - n = Ntokens; - if (n < 2) return(201); - if ((j = findnode(Tok[0])) == 0) return(203); - /* NOTE: Under old format, SourceType not supplied so let */ - /* i = index of token that contains quality value. */ - i = 2; - if (match(Tok[1],w_CONCEN)) type = CONCEN; - else if (match(Tok[1],w_MASS)) type = MASS; - else if (match(Tok[1],w_SETPOINT)) type = SETPOINT; - else if (match(Tok[1],w_FLOWPACED)) type = FLOWPACED; - else i = 1; - if (!getfloat(Tok[i],&c0)) return(202); /* Illegal WQ value */ - - if (n > i+1 && strlen(Tok[i+1]) > 0 && strcmp(Tok[i+1], "*") != 0 ) //(2.00.11 - LR) - { - pat = findID(Tok[i+1],Patlist); - if (pat == NULL) return(205); /* Illegal pattern. */ - p = pat->i; - } - - source = (struct Ssource *) malloc(sizeof(struct Ssource)); - if (source == NULL) return(101); - source->C0 = c0; - source->Pat = p; - source->Type = type; - Node[j].S = source; - return(0); -} /* end of sourcedata */ - - -int emitterdata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes junction emitter data -** Format: -** [EMITTER] -** node K -**-------------------------------------------------------------- -*/ -{ - int j, /* Node index */ - n; /* # data items */ - double k; /* Flow coeff, */ - - n = Ntokens; - if (n < 2) return(201); - if ((j = findnode(Tok[0])) == 0) return(203); - if (j > Njuncs) return(209); /* Not a junction.*/ - if (!getfloat(Tok[1],&k)) return(202); - if (k < 0.0) return(202); - Node[j].Ke = k; - return(0); -} - - -int qualdata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes initial water quality data -** Formats: -** [QUALITY] -** node initqual -** node1 node2 initqual -**-------------------------------------------------------------- -*/ -{ - int j,n; - long i,i0,i1; - double c0; - - if (Nnodes == 0) return(208); /* No nodes defined yet */ - n = Ntokens; - if (n < 2) return(0); - if (n == 2) /* Single node entered */ - { - if ( (j = findnode(Tok[0])) == 0) return(0); - if (!getfloat(Tok[1],&c0)) return(209); - Node[j].C0 = c0; - } - else /* Node range entered */ - { - if (!getfloat(Tok[2],&c0)) return(209); - - /* If numerical range supplied, then use numerical comparison */ - if ((i0 = atol(Tok[0])) > 0 && (i1 = atol(Tok[1])) > 0) - { - for (j=1; j<=Nnodes; j++) - { - i = atol(Node[j].ID); - if (i >= i0 && i <= i1) Node[j].C0 = c0; - } - } - else - { - for (j=1; j<=Nnodes; j++) - if ((strcmp(Tok[0],Node[j].ID) <= 0) && - (strcmp(Tok[1],Node[j].ID) >= 0) - ) Node[j].C0 = c0; - } - } - return(0); -} /* end of qualdata */ - - -int reactdata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes reaction coeff. data -** Formats: -** [REACTIONS] -** ORDER {BULK/WALL/TANK} value -** GLOBAL BULK coeff -** GLOBAL WALL coeff -** BULK link1 (link2) coeff -** WALL link1 (link2) coeff -** TANK node1 (node2) coeff -** LIMITING POTENTIAL value -** ROUGHNESS CORRELATION value -**-------------------------------------------------------------- -*/ -{ - int item,j,n; - long i,i1,i2; - double y; - -/* Skip line if insufficient data */ - n = Ntokens; - if (n < 3) return(0); - -/* Process input depending on keyword */ - if (match(Tok[0],w_ORDER)) /* Reaction order */ - { - if (!getfloat(Tok[n-1],&y)) return(213); - if (match(Tok[1],w_BULK)) BulkOrder = y; - else if (match(Tok[1],w_TANK)) TankOrder = y; - else if (match(Tok[1],w_WALL)) - { - if (y == 0.0) WallOrder = 0.0; - else if (y == 1.0) WallOrder = 1.0; - else return(213); - } - else return(213); - return(0); - } - if (match(Tok[0],w_ROUGHNESS)) /* Roughness factor */ - { - if (!getfloat(Tok[n-1],&y)) return(213); - Rfactor = y; - return(0); - } - if (match(Tok[0],w_LIMITING)) /* Limiting potential */ - { - if (!getfloat(Tok[n-1],&y)) return(213); - /*if (y < 0.0) return(213);*/ - Climit = y; - return(0); - } - if (match(Tok[0],w_GLOBAL)) /* Global rates */ - { - if (!getfloat(Tok[n-1],&y)) return(213); - if (match(Tok[1],w_BULK)) Kbulk = y; - else if (match(Tok[1],w_WALL)) Kwall = y; - else return(201); - return(0); - } - if (match(Tok[0],w_BULK)) item = 1; /* Individual rates */ - else if (match(Tok[0],w_WALL)) item = 2; - else if (match(Tok[0],w_TANK)) item = 3; - else return(201); - strcpy(Tok[0],Tok[1]); /* Save id in Tok[0] */ - if (item == 3) /* Tank rates */ - { - if (!getfloat(Tok[n-1],&y)) return(209); /* Rate coeff. */ - if (n == 3) - { - if ( (j = findnode(Tok[1])) <= Njuncs) return(0); - Tank[j-Njuncs].Kb = y; - } - else - { - /* If numerical range supplied, then use numerical comparison */ - if ((i1 = atol(Tok[1])) > 0 && (i2 = atol(Tok[2])) > 0) - { - for (j=Njuncs+1; j<=Nnodes; j++) - { - i = atol(Node[j].ID); - if (i >= i1 && i <= i2) Tank[j-Njuncs].Kb = y; - } - } - else for (j=Njuncs+1; j<=Nnodes; j++) - if ((strcmp(Tok[1],Node[j].ID) <= 0) && - (strcmp(Tok[2],Node[j].ID) >= 0) - ) Tank[j-Njuncs].Kb = y; - } - } - else /* Link rates */ - { - if (!getfloat(Tok[n-1],&y)) return(211); /* Rate coeff. */ - if (Nlinks == 0) return(0); - if (n == 3) /* Single link */ - { - if ( (j = findlink(Tok[1])) == 0) return(0); - if (item == 1) Link[j].Kb = y; - else Link[j].Kw = y; - } - else /* Range of links */ - { - /* If numerical range supplied, then use numerical comparison */ - if ((i1 = atol(Tok[1])) > 0 && (i2 = atol(Tok[2])) > 0) - { - for (j=1; j<=Nlinks; j++) - { - i = atol(Link[j].ID); - if (i >= i1 && i <= i2) - { - if (item == 1) Link[j].Kb = y; - else Link[j].Kw = y; - } - } - } - else for (j=1; j<=Nlinks; j++) - if ((strcmp(Tok[1],Link[j].ID) <= 0) && - (strcmp(Tok[2],Link[j].ID) >= 0) ) - { - if (item == 1) Link[j].Kb = y; - else Link[j].Kw = y; - } - } - } - return(0); -} /* end of reactdata */ - - -int mixingdata() -/* -**------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes tank mixing data -** Format: -** [MIXING] -** TankID MixModel FractVolume -**------------------------------------------------------------- -*/ -{ - int i,j,n; - double v; - - if (Nnodes == 0) return(208); /* No nodes defined yet */ - n = Ntokens; - if (n < 2) return(0); - if ( (j = findnode(Tok[0])) <= Njuncs) return(0); - if ( (i = findmatch(Tok[1],MixTxt)) < 0) return(201); - v = 1.0; - if ( (i == MIX2) && - (n == 3) && - (!getfloat(Tok[2],&v)) /* Get frac. vol. for 2COMP model */ - ) return(209); - if (v == 0.0) v = 1.0; /* v can't be zero */ - n = j - Njuncs; - if (Tank[n].A == 0.0) return(0); /* Tank is a reservoir */ - Tank[n].MixModel = (char)i; - Tank[n].V1max = v; - return(0); -} - - -int statusdata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes link initial status data -** Formats: -** [STATUS] -** link value -** link1 (link2) value -**-------------------------------------------------------------- -*/ -{ - int j,n; - long i,i0,i1; - double y = 0.0; - char status = ACTIVE; - - if (Nlinks == 0) return(210); - n = Ntokens - 1; - if (n < 1) return(201); - -/* Check for legal status setting */ - if (match(Tok[n],w_OPEN)) status = OPEN; - else if (match(Tok[n],w_CLOSED)) status = CLOSED; - else if (!getfloat(Tok[n],&y)) return(211); - if (y < 0.0) return(211); - -/* Single link ID supplied */ - if (n == 1) - { - if ( (j = findlink(Tok[0])) == 0) return(0); - /* Cannot change status of a Check Valve */ - if (Link[j].Type == CV) return(211); - -/*** Updated 9/7/00 ***/ - /* Cannot change setting for a GPV */ - if (Link[j].Type == GPV - && status == ACTIVE) return(211); - - changestatus(j,status,y); - } - -/* Range of ID's supplied */ - else - { - /* Numerical range supplied */ - if ((i0 = atol(Tok[0])) > 0 && (i1 = atol(Tok[1])) > 0) - { - for (j=1; j<=Nlinks; j++) - { - i = atol(Link[j].ID); - if (i >= i0 && i <= i1) changestatus(j,status,y); - } - } - else - for (j=1; j<=Nlinks; j++) - if ( (strcmp(Tok[0],Link[j].ID) <= 0) && - (strcmp(Tok[1],Link[j].ID) >= 0) - ) changestatus(j,status,y); - } - return(0); -} /* end of statusdata */ - - -int energydata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes pump energy data -** Formats: -** [ENERGY] -** GLOBAL {PRICE/PATTERN/EFFIC} value -** PUMP id {PRICE/PATTERN/EFFIC} value -** DEMAND CHARGE value -**-------------------------------------------------------------- -*/ -{ - int j,k,n; - double y; - STmplist *t; - -/* Check for sufficient data */ - n = Ntokens; - if (n < 3) return(201); - -/* Check first keyword */ - if (match(Tok[0],w_DMNDCHARGE)) /* Demand charge */ - { - if (!getfloat(Tok[2], &y)) return(213); - Dcost = y; - return(0); - } - if (match(Tok[0],w_GLOBAL)) /* Global parameter */ - { - j = 0; - } - else if (match(Tok[0],w_PUMP)) /* Pump-specific parameter */ - { - if (n < 4) return(201); - k = findlink(Tok[1]); /* Check that pump exists */ - if (k == 0) return(216); - if (Link[k].Type != PUMP) return(216); - j = PUMPINDEX(k); - } - else return(201); - -/* Find type of energy parameter */ - if (match(Tok[n-2],w_PRICE)) /* Energy price */ - { - if (!getfloat(Tok[n-1],&y)) - { - if (j == 0) return(213); - else return(217); - } - if (j == 0) Ecost = y; - else Pump[j].Ecost = y; - return(0); - } - else if (match(Tok[n-2],w_PATTERN)) /* Price pattern */ - { - t = findID(Tok[n-1],Patlist); /* Check if pattern exists */ - if (t == NULL) - { - if (j == 0) return(213); - else return(217); - } - if (j == 0) Epat = t->i; - else Pump[j].Epat = t->i; - return(0); - } - else if (match(Tok[n-2],w_EFFIC)) /* Pump efficiency */ - { - if (j == 0) - { - if (!getfloat(Tok[n-1], &y)) return(213); - if (y <= 0.0) return(213); - Epump = y; - } - else - { - t = findID(Tok[n-1],Curvelist); /* Check if curve exists */ - if (t == NULL) return(217); - Pump[j].Ecurve = t->i; - } - return(0); - } - return(201); -} - - -int reportdata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes report options data -** Formats: -** PAGE linesperpage -** STATUS {NONE/YES/FULL} -** SUMMARY {YES/NO} -** MESSAGES {YES/NO} -** ENERGY {NO/YES} -** NODES {NONE/ALL} -** NODES node1 node2 ... -** LINKS {NONE/ALL} -** LINKS link1 link2 ... -** FILE filename -** variable {YES/NO} -** variable {BELOW/ABOVE/PRECISION} value -**-------------------------------------------------------------- -*/ -{ - int i,j,n; - double y; - - n = Ntokens - 1; - if (n < 1) return(201); - -/* Value for page size */ - if (match(Tok[0],w_PAGE)) - { - if (!getfloat(Tok[n],&y)) return(213); - if (y < 0.0 || y > 255.0) return(213); - PageSize = (int) y; - return(0); - } - -/* Request that status reports be written */ - if (match(Tok[0],w_STATUS)) - { - if (match(Tok[n],w_NO)) Statflag = FALSE; - if (match(Tok[n],w_YES)) Statflag = TRUE; - if (match(Tok[n],w_FULL)) Statflag = FULL; - return(0); - } - -/* Request summary report */ - if (match(Tok[0],w_SUMMARY)) - { - if (match(Tok[n],w_NO)) Summaryflag = FALSE; - if (match(Tok[n],w_YES)) Summaryflag = TRUE; - return(0); - } - -/* Request error/warning message reporting */ - if (match(Tok[0],w_MESSAGES)) - { - if (match(Tok[n],w_NO)) Messageflag = FALSE; - if (match(Tok[n],w_YES)) Messageflag = TRUE; - return(0); - } - - -/* Request an energy usage report */ - if (match(Tok[0],w_ENERGY)) - { - if (match(Tok[n],w_NO)) Energyflag = FALSE; - if (match(Tok[n],w_YES)) Energyflag = TRUE; - return(0); - } - -/* Particular reporting nodes specified */ - if (match(Tok[0],w_NODE)) - { - if (match(Tok[n],w_NONE)) Nodeflag = 0; /* No nodes */ - else if (match(Tok[n],w_ALL)) Nodeflag = 1; /* All nodes */ - else - { - if (Nnodes == 0) return(208); - for (i=1; i<=n; i++) - { - if ( (j = findnode(Tok[i])) == 0) return(208); - Node[j].Rpt = 1; - } - Nodeflag = 2; - } - return(0); - } - -/* Particular reporting links specified */ - if (match(Tok[0],w_LINK)) - { - if (match(Tok[n],w_NONE)) Linkflag = 0; - else if (match(Tok[n],w_ALL)) Linkflag = 1; - else - { - if (Nlinks == 0) return(210); - for (i=1; i<=n; i++) - { - if ( (j = findlink(Tok[i])) == 0) return(210); - Link[j].Rpt = 1; - } - Linkflag = 2; - } - return(0); - } - -/* Check if input is a reporting criterion. */ - -/*** Special case needed to distinguish "HEAD" from "HEADLOSS" ***/ //(2.00.11 - LR) - if (strcomp(Tok[0], t_HEADLOSS)) i = HEADLOSS; - else i = findmatch(Tok[0],Fldname); //(2.00.11 - LR) - if (i >= 0) //(2.00.11 - LR) -/*****************************************************************/ //(2.00.11 - LR) - { - if (i > FRICTION) return(201); - if (Ntokens == 1 || match(Tok[1],w_YES)) - { - Field[i].Enabled = TRUE; - return(0); - } - if (match(Tok[1],w_NO)) - { - Field[i].Enabled = FALSE; - return(0); - } - if (Ntokens < 3) return(201); - if (match(Tok[1],w_BELOW)) j = LOW; /* Get relation operator */ - else if (match(Tok[1],w_ABOVE)) j = HI; /* or precision keyword */ - else if (match(Tok[1],w_PRECISION)) j = PREC; - else return(201); - if (!getfloat(Tok[2],&y)) return(201); - if (j == PREC) - { - Field[i].Enabled = TRUE; - Field[i].Precision = ROUND(y); - } - else Field[i].RptLim[j] = y; /* Report limit value */ - return(0); - } - -/* Name of external report file */ - if (match(Tok[0],w_FILE)) - { - strncpy(Rpt2Fname,Tok[1],MAXFNAME); - return(0); - } - -/* If get to here then return error condition */ - return(201); -} /* end of reportdata */ - - -int timedata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes time options data -** Formats: -** STATISTIC {NONE/AVERAGE/MIN/MAX/RANGE} -** DURATION value (units) -** HYDRAULIC TIMESTEP value (units) -** QUALITY TIMESTEP value (units) -** MINIMUM TRAVELTIME value (units) -** RULE TIMESTEP value (units) -** PATTERN TIMESTEP value (units) -** PATTERN START value (units) -** REPORT TIMESTEP value (units) -** REPORT START value (units) -** START CLOCKTIME value (AM PM) -**------------------------------------------------------------- -*/ -{ - int n; - long t; - double y; - - n = Ntokens - 1; - if (n < 1) return(201); - -/* Check if setting time statistic flag */ - if (match(Tok[0],w_STATISTIC)) - { - if (match(Tok[n],w_NONE)) Tstatflag = SERIES; - else if (match(Tok[n],w_NO)) Tstatflag = SERIES; - else if (match(Tok[n],w_AVG)) Tstatflag = AVG; - else if (match(Tok[n],w_MIN)) Tstatflag = MIN; - else if (match(Tok[n],w_MAX)) Tstatflag = MAX; - else if (match(Tok[n],w_RANGE)) Tstatflag = RANGE; - else return(201); - return(0); - } - -/* Convert text time value to numerical value in seconds */ -/* Examples: -** 5 = 5 * 3600 sec -** 5 MINUTES = 5 * 60 sec -** 13:50 = 13*3600 + 50*60 sec -** 1:50 pm = (12+1)*3600 + 50*60 sec -*/ - - if (!getfloat(Tok[n],&y)) - { - if ( (y = hour(Tok[n],"")) < 0.0) - { - if ( (y = hour(Tok[n-1],Tok[n])) < 0.0) return(213); - } - } - t = (long)(3600.0*y+0.5); -/* Process the value assigned to the matched parameter */ - if (match(Tok[0],w_DURATION)) Dur = t; /* Simulation duration */ - else if (match(Tok[0],w_HYDRAULIC)) Hstep = t; /* Hydraulic time step */ - else if (match(Tok[0],w_QUALITY)) Qstep = t; /* Quality time step */ - else if (match(Tok[0],w_RULE)) Rulestep = t; /* Rule time step */ - else if (match(Tok[0],w_MINIMUM)) return(0); /* Not used anymore */ - else if (match(Tok[0],w_PATTERN)) - { - if (match(Tok[1],w_TIME)) Pstep = t; /* Pattern time step */ - else if (match(Tok[1],w_START)) Pstart = t; /* Pattern start time */ - else return(201); - } - else if (match(Tok[0],w_REPORT)) - { - if (match(Tok[1],w_TIME)) Rstep = t; /* Reporting time step */ - else if (match(Tok[1],w_START)) Rstart = t; /* Reporting start time */ - else return(201); - } /* Simulation start time*/ - else if (match(Tok[0],w_START)) Tstart = t % SECperDAY; - else return(201); - return(0); -} /* end of timedata */ - - -int optiondata() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: processes [OPTIONS] data -**-------------------------------------------------------------- -*/ -{ - int i,n; - - n = Ntokens - 1; - i = optionchoice(n); /* Option is a named choice */ - if (i >= 0) return(i); - return(optionvalue(n)); /* Option is a numerical value */ -} /* end of optiondata */ - - -int optionchoice(int n) -/* -**-------------------------------------------------------------- -** Input: n = index of last input token saved in Tok[] -** Output: returns error code or 0 if option belongs to -** those listed below, or -1 otherwise -** Purpose: processes fixed choice [OPTIONS] data -** Formats: -** UNITS CFS/GPM/MGD/IMGD/AFD/LPS/LPM/MLD/CMH/CMD/SI -** PRESSURE PSI/KPA/M -** HEADLOSS H-W/D-W/C-M -** HYDRAULICS USE/SAVE filename -** QUALITY NONE/AGE/TRACE/CHEMICAL (TraceNode) -** MAP filename -** VERIFY filename -** UNBALANCED STOP/CONTINUE {Niter} -** PATTERN id -**-------------------------------------------------------------- -*/ -{ - /* Check if 1st token matches a parameter name and */ - /* process the input for the matched parameter */ - if (n < 0) return(201); - if (match(Tok[0],w_UNITS)) - { - if (n < 1) return(0); - else if (match(Tok[1],w_CFS)) Flowflag = CFS; - else if (match(Tok[1],w_GPM)) Flowflag = GPM; - else if (match(Tok[1],w_AFD)) Flowflag = AFD; - else if (match(Tok[1],w_MGD)) Flowflag = MGD; - else if (match(Tok[1],w_IMGD)) Flowflag = IMGD; - else if (match(Tok[1],w_LPS)) Flowflag = LPS; - else if (match(Tok[1],w_LPM)) Flowflag = LPM; - else if (match(Tok[1],w_CMH)) Flowflag = CMH; - else if (match(Tok[1],w_CMD)) Flowflag = CMD; - else if (match(Tok[1],w_MLD)) Flowflag = MLD; - else if (match(Tok[1],w_SI)) Flowflag = LPS; - else return(201); - } - else if (match(Tok[0],w_PRESSURE)) - { - if (n < 1) return(0); - else if (match(Tok[1],w_PSI)) Pressflag = PSI; - else if (match(Tok[1],w_KPA)) Pressflag = KPA; - else if (match(Tok[1],w_METERS)) Pressflag = METERS; - else return(201); - } - else if (match(Tok[0],w_HEADLOSS)) - { - if (n < 1) return(0); - else if (match(Tok[1],w_HW)) Formflag = HW; - else if (match(Tok[1],w_DW)) Formflag = DW; - else if (match(Tok[1],w_CM)) Formflag = CM; - else return(201); - } - else if (match(Tok[0],w_HYDRAULIC)) - { - if (n < 2) return(0); - else if (match(Tok[1],w_USE)) Hydflag = USE; - else if (match(Tok[1],w_SAVE)) Hydflag = SAVE; - else return(201); - strncpy(HydFname,Tok[2],MAXFNAME); - } - else if (match(Tok[0],w_QUALITY)) - { - if (n < 1) return(0); - else if (match(Tok[1],w_NONE)) Qualflag = NONE; - else if (match(Tok[1],w_CHEM)) Qualflag = CHEM; - else if (match(Tok[1],w_AGE)) Qualflag = AGE; - else if (match(Tok[1],w_TRACE)) Qualflag = TRACE; - else - { - Qualflag = CHEM; - strncpy(ChemName,Tok[1],MAXID); - if (n >= 2) strncpy(ChemUnits,Tok[2],MAXID); - } - if (Qualflag == TRACE) /* Source tracing option */ - { - /* Copy Trace Node ID to Tok[0] for error reporting */ - strcpy(Tok[0],""); - if (n < 2) return(212); - strcpy(Tok[0],Tok[2]); - TraceNode = findnode(Tok[2]); - if (TraceNode == 0) return(212); - strncpy(ChemName,u_PERCENT,MAXID); - strncpy(ChemUnits,Tok[2],MAXID); - } - if (Qualflag == AGE) - { - strncpy(ChemName,w_AGE,MAXID); - strncpy(ChemUnits,u_HOURS,MAXID); - } - } - else if (match(Tok[0],w_MAP)) - { - if (n < 1) return(0); - strncpy(MapFname,Tok[1],MAXFNAME); /* Map file name */ - } - else if (match(Tok[0],w_VERIFY)) - { - /* Backward compatibility for verification file */ - } - else if (match(Tok[0],w_UNBALANCED)) /* Unbalanced option */ - { - if (n < 1) return(0); - if (match(Tok[1],w_STOP)) ExtraIter = -1; - else if (match(Tok[1],w_CONTINUE)) - { - if (n >= 2) ExtraIter = atoi(Tok[2]); - else ExtraIter = 0; - } - else return(201); - } - else if (match(Tok[0],w_PATTERN)) /* Pattern option */ - { - if (n < 1) return(0); - strncpy(DefPatID,Tok[1],MAXID); - } - else return(-1); - return(0); -} /* end of optionchoice */ - - -int optionvalue(int n) -/* -**------------------------------------------------------------- -** Input: *line = line read from input file -** Output: returns error code -** Purpose: processes numerical value [OPTIONS] data -** Formats: -** DEMAND MULTIPLIER value -** EMITTER EXPONENT value -** VISCOSITY value -** DIFFUSIVITY value -** SPECIFIC GRAVITY value -** TRIALS value -** ACCURACY value -** TOLERANCE value -** SEGMENTS value (not used) -** ------ Undocumented Options ----- -** HTOL value -** QTOL value -** RQTOL value -** CHECKFREQ value -** MAXCHECK value -** DAMPLIMIT value //(2.00.12 - LR) -**-------------------------------------------------------------- -*/ -{ - int nvalue = 1; /* Index of token with numerical value */ - double y; - -/* Check for obsolete SEGMENTS keyword */ - if (match(Tok[0],w_SEGMENTS)) return(0); - -/* Check for missing value (which is permissible) */ - if (match(Tok[0],w_SPECGRAV) || match(Tok[0],w_EMITTER) - || match(Tok[0],w_DEMAND)) nvalue = 2; - if (n < nvalue) return(0); - -/* Check for valid numerical input */ - if (!getfloat(Tok[nvalue],&y)) return(213); - -/* Check for WQ tolerance option (which can be 0) */ - if (match(Tok[0],w_TOLERANCE)) - { - if (y < 0.0) return(213); - Ctol = y; /* Quality tolerance*/ - return(0); - } - -/* Check for Diffusivity option */ - if (match(Tok[0],w_DIFFUSIVITY)) - { - if (y < 0.0) return(213); - Diffus = y; - return(0); - } - -/* Check for Damping Limit option */ //(2.00.12 - LR) - if (match(Tok[0],w_DAMPLIMIT)) - { - DampLimit = y; - return(0); - } - -/* All other options must be > 0 */ - if (y <= 0.0) return(213); - -/* Assign value to specified option */ - if (match(Tok[0],w_VISCOSITY)) Viscos = y; /* Viscosity */ - else if (match(Tok[0],w_SPECGRAV)) SpGrav = y; /* Spec. gravity */ - else if (match(Tok[0],w_TRIALS)) MaxIter = (int)y; /* Max. trials */ - else if (match(Tok[0],w_ACCURACY)) /* Accuracy */ - { - y = MAX(y,1.e-5); - y = MIN(y,1.e-1); - Hacc = y; - } - else if (match(Tok[0],w_HTOL)) Htol = y; - else if (match(Tok[0],w_QTOL)) Qtol = y; - else if (match(Tok[0],w_RQTOL)) - { - if (y >= 1.0) return(213); - RQtol = y; - } - else if (match(Tok[0],w_CHECKFREQ)) CheckFreq = (int)y; - else if (match(Tok[0],w_MAXCHECK)) MaxCheck = (int)y; - else if (match(Tok[0],w_EMITTER)) Qexp = 1.0/y; - else if (match(Tok[0],w_DEMAND)) Dmult = y; - else return(201); - return(0); -} /* end of optionvalue */ - - -int getpumpcurve(int n) -/* -**-------------------------------------------------------- -** Input: n = number of parameters for pump curve -** Output: returns error code -** Purpose: processes pump curve data for Version 1.1- -** style input data -** Notes: -** 1. Called by pumpdata() in INPUT3.C -** 2. Current link index & pump index of pump being -** processed is found in global variables Nlinks -** and Npumps, respectively -** 3. Curve data read from input line is found in -** global variables X[0],...X[n-1] -**--------------------------------------------------------- -*/ -{ - double a,b,c,h0,h1,h2,q1,q2; - - if (n == 1) /* Const. HP curve */ - { - if (X[0] <= 0.0) return(202); - Pump[Npumps].Ptype = CONST_HP; - Link[Nlinks].Km = X[0]; - } - else - { - if (n == 2) /* Generic power curve */ - { - q1 = X[1]; - h1 = X[0]; - h0 = 1.33334*h1; - q2 = 2.0*q1; - h2 = 0.0; - } - else if (n >= 5) /* 3-pt. power curve */ - { - h0 = X[0]; - h1 = X[1]; - q1 = X[2]; - h2 = X[3]; - q2 = X[4]; - } - else return(202); - Pump[Npumps].Ptype = POWER_FUNC; - if (!powercurve(h0,h1,h2,q1,q2,&a,&b,&c)) return(206); - Pump[Npumps].H0 = -a; - Pump[Npumps].R = -b; - Pump[Npumps].N = c; - Pump[Npumps].Q0 = q1; - Pump[Npumps].Qmax = pow((-a/b),(1.0/c)); - Pump[Npumps].Hmax = h0; - } - return(0); -} - - -int powercurve(double h0, double h1, double h2, double q1, - double q2, double *a, double *b, double *c) -/* -**--------------------------------------------------------- -** Input: h0 = shutoff head -** h1 = design head -** h2 = head at max. flow -** q1 = design flow -** q2 = max. flow -** Output: *a, *b, *c = pump curve coeffs. (H = a-bQ^c), -** Returns 1 if sucessful, 0 otherwise. -** Purpose: computes coeffs. for pump curve -**---------------------------------------------------------- -*/ -{ - double h4,h5; - if ( - h0 < TINY || - h0 - h1 < TINY || - h1 - h2 < TINY || - q1 < TINY || - q2 - q1 < TINY - ) return(0); - *a = h0; - h4 = h0 - h1; - h5 = h0 - h2; - *c = log(h5/h4)/log(q2/q1); - if (*c <= 0.0 || *c > 20.0) return(0); - *b = -h4/pow(q1,*c); - - /*** Updated 6/24/02 ***/ - if (*b >= 0.0) return(0); - - return(1); -} - - -int valvecheck(int type, int j1, int j2) -/* -**-------------------------------------------------------------- -** Input: type = valve type -** j1 = index of upstream node -** j2 = index of downstream node -** Output: returns 1 for legal connection, 0 otherwise -** Purpose: checks for legal connections between PRVs & PSVs -**-------------------------------------------------------------- -*/ -{ - int k, vk, vj1, vj2, vtype; - - /* Examine each existing valve */ - for (k=1; k<=Nvalves; k++) - { - vk = Valve[k].Link; - vj1 = Link[vk].N1; - vj2 = Link[vk].N2; - vtype = Link[vk].Type; - - /* Cannot have two PRVs sharing downstream nodes or in series */ - if (vtype == PRV && type == PRV) - { - if (vj2 == j2 || - vj2 == j1 || - vj1 == j2 ) return(0); - } - - /* Cannot have two PSVs sharing upstream nodes or in series */ - if (vtype == PSV && type == PSV) - { - if (vj1 == j1 || - vj1 == j2 || - vj2 == j1 ) return(0); - } - - /* Cannot have PSV connected to downstream node of PRV */ - if (vtype == PSV && type == PRV && vj1 == j2) return(0); - if (vtype == PRV && type == PSV && vj2 == j1) return(0); - -/*** Updated 3/1/01 ***/ - /* Cannot have PSV connected to downstream node of FCV */ - /* nor have PRV connected to upstream node of FCV */ - if (vtype == FCV && type == PSV && vj2 == j1) return(0); - if (vtype == FCV && type == PRV && vj1 == j2) return(0); - -/*** Updated 4/14/05 ***/ - if (vtype == PSV && type == FCV && vj1 == j2) return (0); - if (vtype == PRV && type == FCV && vj2 == j1) return (0); - } - return(1); -} /* End of valvecheck */ - - -void changestatus(int j, char status, double y) -/* -**-------------------------------------------------------------- -** Input: j = link index -** status = status setting (OPEN, CLOSED) -** y = numerical setting (pump speed, valve -** setting) -** Output: none -** Purpose: changes status or setting of a link -** -** NOTE: If status = ACTIVE, then a numerical setting (y) was -** supplied. If status = OPEN/CLOSED, then numerical -** setting is 0. -**-------------------------------------------------------------- -*/ -{ - if (Link[j].Type == PIPE || Link[j].Type == GPV) - { - if (status != ACTIVE) Link[j].Stat = status; - } - else if (Link[j].Type == PUMP) - { - if (status == ACTIVE) - { - Link[j].Kc = y; - status = OPEN; - if (y == 0.0) status = CLOSED; - } - else if (status == OPEN) Link[j].Kc = 1.0; - Link[j].Stat = status; - } - else if (Link[j].Type >= PRV) - { - Link[j].Kc = y; - Link[j].Stat = status; - if (status != ACTIVE) Link[j].Kc = MISSING; - } -} /* end of changestatus */ - -/********************** END OF INPUT3.C ************************/ - +/* +****************************************************************************** +Project: OWA EPANET +Version: 2.2 +Module: input3.c +Description: parses network data from a line of an EPANET input file +Authors: see AUTHORS +Copyright: see AUTHORS +License: see LICENSE +Last Updated: 11/29/2019 +****************************************************************************** +*/ + +#include +#include +#include +#include + +#include "types.h" +#include "funcs.h" +#include "hash.h" +#include "text.h" + +// Defined in ENUMSTXT.H +extern char *MixTxt[]; +extern char *Fldname[]; +extern char *DemandModelTxt[]; + +// Exported functions +int powercurve(double, double, double, double, double, double *, double *, + double *); + +// Imported Functions +extern int addnodeID(Network *, int, char *); +extern int addlinkID(Network *, int, char *); + +// Local functions +static int optionchoice(Project *, int); +static int optionvalue(Project *, int); +static int getpumpcurve(Project *, int); +static void changestatus(Network *, int, StatusType, double); +static int setError(Parser *, int, int); + + +int setError(Parser *parser, int tokindex, int errcode) +/* +**-------------------------------------------------------------- +** Input: tokindex = index of input line token +** errcode = an error code +** Output: returns error code +** Purpose: records index of token from line of input associated +** with an error +**-------------------------------------------------------------- +*/ +{ + parser->ErrTok = tokindex; + return errcode; +} + +int juncdata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes junction data +** Format: +** [JUNCTIONS] +** id elev. (demand) (demand pattern) +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + Hydraul *hyd = &pr->hydraul; + + int p = 0; // time pattern index + int n; // number of tokens + int njuncs; // number of network junction nodes + double el, // elevation + y = 0.0; // base demand + Snode *node; + int err = 0; + + // Add new junction to data base + n = parser->Ntokens; + if (net->Nnodes == parser->MaxNodes) return 200; + net->Njuncs++; + net->Nnodes++; + njuncs = net->Njuncs; + err = addnodeID(net, net->Njuncs, parser->Tok[0]); + if (err) return setError(parser, 0, err); + + // Check for valid data + if (n < 2) return 201; + if (!getfloat(parser->Tok[1], &el)) return setError(parser, 1, 202); + if (n >= 3 && !getfloat(parser->Tok[2], &y)) return setError(parser, 2, 202); + if (n >= 4) + { + p = findpattern(net, parser->Tok[3]); + if (p < 0) return setError(parser, 3, 205); + } + + // Save junction data + node = &net->Node[njuncs]; + node->X = MISSING; + node->Y = MISSING; + node->El = el; + node->C0 = 0.0; + node->S = NULL; + node->Ke = 0.0; + node->Rpt = 0; + node->ResultIndex = 0; + node->Type = JUNCTION; + node->Comment = xstrcpy(&node->Comment, parser->Comment, MAXMSG); + + // Create a demand for the junction and use NodeDemand as an indicator + // to be used when processing demands from the [DEMANDS] section + if (!adddemand(node, y, p, NULL)) return 101; + hyd->NodeDemand[njuncs] = y; + return 0; +} + +int tankdata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes tank & reservoir data +** Format: +** [RESERVOIRS] +** id elev (pattern) +** [TANKS] +** id elev (pattern) +** id elev initlevel minlevel maxlevel diam (minvol vcurve) +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int i, // Node index + n, // # data items + pattern = 0, // Time pattern index + curve = 0, // Curve index + overflow = FALSE;// Overflow indicator + + double el = 0.0, // Elevation + initlevel = 0.0, // Initial level + minlevel = 0.0, // Minimum level + maxlevel = 0.0, // Maximum level + minvol = 0.0, // Minimum volume + diam = 0.0, // Diameter + area; // X-sect. area + Snode *node; + Stank *tank; + + int err = 0; + + // Add new tank to data base + n = parser->Ntokens; + if (net->Ntanks == parser->MaxTanks || + net->Nnodes == parser->MaxNodes) return 200; + net->Ntanks++; + net->Nnodes++; + + i = parser->MaxJuncs + net->Ntanks; + err = addnodeID(net, i, parser->Tok[0]); + if (err) return setError(parser, 0, err); + + // Check for valid data + if (n < 2) return 201; + if (!getfloat(parser->Tok[1], &el)) return setError(parser, 1, 202); + + // Tank is reservoir + if (n <= 3) + { + // Head pattern supplied + if (n == 3) + { + pattern = findpattern(net, parser->Tok[2]); + if (pattern < 0) return setError(parser, 2, 205); + } + } + else if (n < 6) return 201; + + // Tank is a storage tank + else + { + if (!getfloat(parser->Tok[2], &initlevel)) return setError(parser, 2, 202); + if (!getfloat(parser->Tok[3], &minlevel)) return setError(parser, 3, 202); + if (!getfloat(parser->Tok[4], &maxlevel)) return setError(parser, 4, 202); + if (!getfloat(parser->Tok[5], &diam)) return setError(parser, 5, 202); + if (n >= 7 && !getfloat(parser->Tok[6], &minvol)) return setError(parser, 6, 202); + + // If volume curve supplied check it exists + if (n >= 8) + { + if (strlen(parser->Tok[7]) > 0 && *(parser->Tok[7]) != '*') + { + curve = findcurve(net, parser->Tok[7]); + if (curve == 0) return setError(parser, 7, 206); + net->Curve[curve].Type = VOLUME_CURVE; + } + } + + // Parse overflow indicator if present + if (n >= 9) + { + if (match(parser->Tok[8], w_YES)) overflow = TRUE; + else if (match(parser->Tok[8], w_NO)) overflow = FALSE; + else return setError(parser, 8, 213); + } + + if (initlevel < 0.0) return setError(parser, 2, 209); + if (minlevel < 0.0) return setError(parser, 3, 209); + if (maxlevel < 0.0) return setError(parser, 4, 209); + if (diam < 0.0) return setError(parser, 5, 209); + if (minvol < 0.0) return setError(parser, 6, 209); + } + node = &net->Node[i]; + tank = &net->Tank[net->Ntanks]; + + node->X = MISSING; + node->Y = MISSING; + node->Rpt = 0; + node->ResultIndex = 0; + node->El = el; + node->C0 = 0.0; + node->S = NULL; + node->Ke = 0.0; + node->Type = (diam == 0) ? RESERVOIR : TANK; + node->Comment = xstrcpy(&node->Comment, parser->Comment, MAXMSG); + tank->Node = i; + tank->H0 = initlevel; + tank->Hmin = minlevel; + tank->Hmax = maxlevel; + tank->A = diam; + tank->Pat = pattern; + tank->Kb = MISSING; + tank->CanOverflow = overflow; + + //******************************************************************* + // NOTE: The min, max, & initial volumes set here are based on a + // nominal tank diameter. They will be modified in INPUT1.C if + // a volume curve is supplied for this tank. + //******************************************************************* + area = PI * SQR(diam) / 4.0; + tank->Vmin = area * minlevel; + if (minvol > 0.0) tank->Vmin = minvol; + tank->V0 = tank->Vmin + area * (initlevel - minlevel); + tank->Vmax = tank->Vmin + area * (maxlevel - minlevel); + + tank->Vcurve = curve; + tank->MixModel = MIX1; // Completely mixed + tank->V1max = 1.0; // Mixing compartment size fraction + return 0; +} + +int pipedata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes pipe data +** Format: +** [PIPE] +** id node1 node2 length diam rcoeff (lcoeff) (status) +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int j1, // Start-node index + j2, // End-node index + n; // # data items + double length, // Pipe length + diam, // Pipe diameter + rcoeff, // Roughness coeff. + lcoeff = 0.0; // Minor loss coeff + LinkType type = PIPE; // Link type + StatusType status = OPEN; // Link status + Slink *link; + int err = 0; + + // Add new pipe to data base + n = parser->Ntokens; + if (net->Nlinks == parser->MaxLinks) return 200; + net->Npipes++; + net->Nlinks++; + err = addlinkID(net, net->Nlinks, parser->Tok[0]); + if (err) return setError(parser, 0, err); + + // Check for valid data + if (n < 6) return 201; + if ((j1 = findnode(net, parser->Tok[1])) == 0) return setError(parser, 1, 203); + if ((j2 = findnode(net, parser->Tok[2])) == 0) return setError(parser, 2, 203); + if (j1 == j2) return setError(parser, 0, 222); + + if (!getfloat(parser->Tok[3], &length)) return setError(parser, 3, 202); + if (length <= 0.0) return setError(parser, 3, 211); + if (!getfloat(parser->Tok[4], &diam)) return setError(parser, 4, 202); + if (diam <= 0.0) return setError(parser, 4, 211); + if (!getfloat(parser->Tok[5], &rcoeff)) return setError(parser, 5, 202); + if (rcoeff <= 0.0) setError(parser, 5, 211); + + // Either a loss coeff. or a status is supplied + if (n == 7) + { + if (match(parser->Tok[6], w_CV)) type = CVPIPE; + else if (match(parser->Tok[6], w_CLOSED)) status = CLOSED; + else if (match(parser->Tok[6], w_OPEN)) status = OPEN; + else if (!getfloat(parser->Tok[6], &lcoeff)) return setError(parser, 6, 202); + } + + // Both a loss coeff. and a status is supplied + if (n == 8) + { + if (!getfloat(parser->Tok[6], &lcoeff)) return setError(parser, 6, 202); + if (match(parser->Tok[7], w_CV)) type = CVPIPE; + else if (match(parser->Tok[7], w_CLOSED)) status = CLOSED; + else if (match(parser->Tok[7], w_OPEN)) status = OPEN; + else return setError(parser, 7, 213); + } + if (lcoeff < 0.0) return setError(parser, 6, 211); + + // Save pipe data + link = &net->Link[net->Nlinks]; + link->N1 = j1; + link->N2 = j2; + link->Len = length; + link->Diam = diam; + link->Kc = rcoeff; + link->Km = lcoeff; + link->Kb = MISSING; + link->Kw = MISSING; + link->Type = type; + link->Status = status; + link->Rpt = 0; + link->ResultIndex = 0; + link->Comment = xstrcpy(&link->Comment, parser->Comment, MAXMSG); + return 0; +} + +int pumpdata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes pump data +** Formats: +** [PUMP] +** (Version 1.x Format): +** id node1 node2 power +** id node1 node2 h1 q1 +** id node1 node2 h0 h1 q1 h2 q2 +** (Version 2 Format): +** id node1 node2 KEYWORD value {KEYWORD value ...} +** where KEYWORD = [POWER,HEAD,PATTERN,SPEED] +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int j, m, // Token array indexes + j1, // Start-node index + j2, // End-node index + n, // # data items + c, p; // Curve & Pattern indexes + double y; + Slink *link; + Spump *pump; + int err = 0; + + /* Add new pump to data base */ + n = parser->Ntokens; + if (net->Nlinks == parser->MaxLinks || + net->Npumps == parser->MaxPumps) return 200; + net->Nlinks++; + net->Npumps++; + err = addlinkID(net, net->Nlinks, parser->Tok[0]); + if (err) return setError(parser, 0, err); + + // Check for valid data + if (n < 3) return 201; + if ((j1 = findnode(net, parser->Tok[1])) == 0) return setError(parser, 1, 203); + if ((j2 = findnode(net, parser->Tok[2])) == 0) return setError(parser, 2, 203); + if (j1 == j2) return setError(parser, 0, 222); + + // Save pump data + link = &net->Link[net->Nlinks]; + pump = &net->Pump[net->Npumps]; + + link->N1 = j1; + link->N2 = j2; + link->Diam = 0; + link->Len = 0.0; + link->Kc = 1.0; + link->Km = 0.0; + link->Kb = 0.0; + link->Kw = 0.0; + link->Type = PUMP; + link->Status = OPEN; + link->Rpt = 0; + link->ResultIndex = 0; + link->Comment = xstrcpy(&link->Comment, parser->Comment, MAXMSG); + pump->Link = net->Nlinks; + pump->Ptype = NOCURVE; // NOCURVE is a placeholder + pump->Hcurve = 0; + pump->Ecurve = 0; + pump->Upat = 0; + pump->Ecost = 0.0; + pump->Epat = 0; + if (n < 4) return 0; + + // If 4-th token is a number then input follows Version 1.x format + // so retrieve pump curve parameters + if (getfloat(parser->Tok[3], &parser->X[0])) + { + m = 1; + for (j = 4; j < n; j++) + { + if (!getfloat(parser->Tok[j], &parser->X[m])) return setError(parser, j, 202); + m++; + } + return (getpumpcurve(pr, m)); + } + + // Otherwise input follows Version 2 format + // so retrieve keyword/value pairs + m = 4; + while (m < n) + { + if (match(parser->Tok[m - 1], w_POWER)) // Const. HP curve + { + y = atof(parser->Tok[m]); + if (y <= 0.0) return setError(parser, m, 202); + pump->Ptype = CONST_HP; + link->Km = y; + } + else if (match(parser->Tok[m - 1], w_HEAD)) // Custom pump curve + { + c = findcurve(net, parser->Tok[m]); + if (c == 0) return setError(parser, m, 206); + pump->Hcurve = c; + } + else if (match(parser->Tok[m - 1], w_PATTERN)) // Speed/status pattern + { + p = findpattern(net, parser->Tok[m]); + if (p < 0) return setError(parser, m, 205); + pump->Upat = p; + } + else if (match(parser->Tok[m - 1], w_SPEED)) // Speed setting + { + if (!getfloat(parser->Tok[m], &y)) return setError(parser, m, 202); + if (y < 0.0) return setError(parser, m, 211); + link->Kc = y; + } + else return 201; + m = m + 2; // Move to next keyword token + } + return 0; +} + +int valvedata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes valve data +** Format: +** [VALVE] +** id node1 node2 diam type setting (lcoeff) +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int c, // Curve index + j1, // Start-node index + j2, // End-node index + n; // # data items + char status = ACTIVE, // Valve status + type; // Valve type + double diam = 0.0, // Valve diameter + setting, // Valve setting + lcoeff = 0.0; // Minor loss coeff. + Slink *link; + int err = 0; + + // Add new valve to data base + n = parser->Ntokens; + if (net->Nlinks == parser->MaxLinks || + net->Nvalves == parser->MaxValves) return 200; + net->Nvalves++; + net->Nlinks++; + err = addlinkID(net, net->Nlinks, parser->Tok[0]); + if (err) return setError(parser, 0, err); + + // Check for valid data + if (n < 6) + return 201; + if ((j1 = findnode(net, parser->Tok[1])) == 0) + return setError(parser, 1, 203); + if ((j2 = findnode(net, parser->Tok[2])) == 0) + return setError(parser, 2, 203); + if (j1 == j2) + return setError(parser, 0, 222); + + if (match(parser->Tok[4], w_PRV)) + type = PRV; + else if (match(parser->Tok[4], w_PSV)) + type = PSV; + else if (match(parser->Tok[4], w_PBV)) + type = PBV; + else if (match(parser->Tok[4], w_FCV)) + type = FCV; + else if (match(parser->Tok[4], w_TCV)) + type = TCV; + else if (match(parser->Tok[4], w_GPV)) + type = GPV; + else + return setError(parser, 4, 213); + + if (!getfloat(parser->Tok[3], &diam)) return setError(parser, 3, 202); + if (diam <= 0.0) return setError(parser, 3, 211); + + // Find headloss curve for GPV + if (type == GPV) + { + c = findcurve(net, parser->Tok[5]); + if (c == 0) return setError(parser, 5, 206); + setting = c; + net->Curve[c].Type = HLOSS_CURVE; + status = OPEN; + } + else if (!getfloat(parser->Tok[5], &setting)) return setError(parser, 5, 202); + if (n >= 7 && !getfloat(parser->Tok[6], &lcoeff)) return setError(parser, 6, 202); + + // Check for illegal connections + if (valvecheck(pr, net->Nlinks, type, j1, j2)) + { + if (j1 > net->Njuncs) return setError(parser, 1, 219); + else if (j2 > net->Njuncs) return setError(parser, 2, 219); + else return setError(parser, -1, 220); + } + + // Save valve data + link = &net->Link[net->Nlinks]; + link->N1 = j1; + link->N2 = j2; + link->Diam = diam; + link->Len = 0.0; + link->Kc = setting; + link->Km = lcoeff; + link->Kb = 0.0; + link->Kw = 0.0; + link->Type = type; + link->Status = status; + link->Rpt = 0; + link->ResultIndex = 0; + link->Comment = xstrcpy(&link->Comment, parser->Comment, MAXMSG); + net->Valve[net->Nvalves].Link = net->Nlinks; + return 0; +} + +int patterndata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes time pattern data +** Format: +** [PATTERNS] +** id mult1 mult2 ..... +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int i, j, n, n1; + double x; + Spattern *pattern; + + // "n" is the number of pattern factors contained in the line + n = parser->Ntokens - 1; + if (n < 1) return 201; + + // Check if previous input line was for the same pattern + if (parser->PrevPat && strcmp(parser->Tok[0], parser->PrevPat->ID) == 0) + { + pattern = parser->PrevPat; + } + + // Otherwise retrieve pattern from the network's Pattern array + else + { + i = findpattern(net, parser->Tok[0]); + if (i <= 0) return setError(parser, 0, 205); + pattern = &(net->Pattern[i]); + if (pattern->Comment == NULL && parser->Comment[0]) + { + pattern->Comment = xstrcpy(&pattern->Comment, parser->Comment, MAXMSG); + } + } + + // Expand size of the pattern's factors array + n1 = pattern->Length; + pattern->Length += n; + pattern->F = realloc(pattern->F, pattern->Length * sizeof(double)); + + // Add parsed multipliers to the pattern + for (j = 1; j <= n; j++) + { + if (!getfloat(parser->Tok[j], &x)) return setError(parser, j, 202); + pattern->F[n1 + j - 1] = x; + } + + // Save a reference to this pattern for processing additional pattern data + parser->PrevPat = pattern; + return 0; +} + +int curvedata(Project *pr) +/* +**------------------------------------------------------ +** Input: none +** Output: returns error code +** Purpose: processes curve data +** Format: +** [CURVES] +** CurveID x-value y-value +**------------------------------------------------------ +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int i; + double x, y; + Scurve *curve; + + // Check for valid data + if (parser->Ntokens < 3) return 201; + if (!getfloat(parser->Tok[1], &x)) return setError(parser, 1, 202); + if (!getfloat(parser->Tok[2], &y)) return setError(parser, 2, 202); + + // Check if previous input line was for the same curve + if (parser->PrevCurve && strcmp(parser->Tok[0], parser->PrevCurve->ID) == 0) + { + curve = parser->PrevCurve; + } + + // Otherwise retrieve curve from the network's Curve array + else + { + i = findcurve(net, parser->Tok[0]); + if (i == 0) return setError(parser, 0, 206); + curve = &(net->Curve[i]); + if (curve->Comment == NULL && parser->Comment[0]) + { + curve->Comment = xstrcpy(&curve->Comment, parser->Comment, MAXMSG); + } + } + + // Expand size of data arrays if need be + if (curve->Capacity == curve->Npts) + { + if (resizecurve(curve, curve->Capacity + 10) > 0) return 101; + } + + // Add new data point to curve + curve->X[curve->Npts] = x; + curve->Y[curve->Npts] = y; + curve->Npts++; + + // Save a reference to this curve for processing additional curve data + parser->PrevCurve = curve; + return 0; +} + +int coordata(Project *pr) +/* + **-------------------------------------------------------------- + ** Input: none + ** Output: returns error code + ** Purpose: processes coordinate data + ** Format: + ** [COORD] + ** id x y + **-------------------------------------------------------------- + */ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int j; + double x, y; + Snode *node; + + // Check for valid node ID + if (parser->Ntokens < 3) return 201; + if ((j = findnode(net, parser->Tok[0])) == 0) return setError(parser, 0, 203); + + // Check for valid data + if (!getfloat(parser->Tok[1], &x)) return setError(parser, 1, 202); + if (!getfloat(parser->Tok[2], &y)) return setError(parser, 2, 202); + + // Save coord data + node = &net->Node[j]; + node->X = x; + node->Y = y; + return 0; +} + +int vertexdata(Project *pr) +/* + **-------------------------------------------------------------- + ** Input: none + ** Output: returns error code + ** Purpose: processes link vertex data + ** Format: + ** [VERTICES] + ** id x y + **-------------------------------------------------------------- + */ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int j; + double x, y; + + // Check for valid link ID + if (parser->Ntokens < 3) return 201; + if ((j = findlink(net, parser->Tok[0])) == 0) return setError(parser, 0, 204); + + // Check for valid coordinate data + if (!getfloat(parser->Tok[1], &x)) return setError(parser, 1, 202); + if (!getfloat(parser->Tok[2], &y)) return setError(parser, 2, 202); + + // Add to link's list of vertex points + return addlinkvertex(&net->Link[j], x, y); +} + + +int demanddata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes node demand data +** Format: +** [DEMANDS] +** MULTIPLY factor +** node base_demand (pattern) +** +** NOTE: Demands entered in this section replace those +** entered in the [JUNCTIONS] section +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Parser *parser = &pr->parser; + + int j, n, p = 0; + double y; + + Pdemand demand; + + // Extract data from tokens + n = parser->Ntokens; + if (n < 2) return 201; + if (!getfloat(parser->Tok[1], &y)) return setError(parser, 1, 202); + + // If MULTIPLY command, save multiplier + if (match(parser->Tok[0], w_MULTIPLY)) + { + if (y <= 0.0) return setError(parser, 1, 213); + else hyd->Dmult = y; + return 0; + } + + // Otherwise find node (and pattern) being referenced + if ((j = findnode(net, parser->Tok[0])) == 0) return setError(parser, 0, 203); + if (j > net->Njuncs) return 0; + if (n >= 3) + { + p = findpattern(net, parser->Tok[2]); + if (p < 0) return setError(parser, 2, 205); + } + + // Replace any demand entered in [JUNCTIONS] section + demand = net->Node[j].D; + if (demand && hyd->NodeDemand[j] != MISSING) + { + // First category encountered will overwrite demand category + // created when junction was read from [JUNCTIONS] section + demand->Base = y; + demand->Pat = p; + if (parser->Comment[0]) + { + demand->Name = xstrcpy(&demand->Name, parser->Comment, MAXID); + } + hyd->NodeDemand[j] = MISSING; // marker - next iteration will append a new category. + } + + // Otherwise add new demand to junction + else if (!adddemand(&net->Node[j], y, p, parser->Comment) > 0) return 101; + return 0; +} + +int controldata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes simple controls +** Formats: +** [CONTROLS] +** LINK linkID setting IF NODE nodeID {BELOW/ABOVE} level +** LINK linkID setting AT TIME value (units) +** LINK linkID setting AT CLOCKTIME value (units) +** (0) (1) (2) (3) (4) (5) (6) (7) +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int i = 0, // Node index + k, // Link index + n; // # data items + double setting = MISSING, // Link setting + time = 0.0, // Simulation time + level = 0.0; // Pressure or tank level + StatusType status = ACTIVE; // Link status + ControlType ctltype; // Control type + LinkType linktype; // Link type + Scontrol *control; + + // Check for sufficient number of input tokens + n = parser->Ntokens; + if (n < 6) return 201; + + // Check that controlled link exists + k = findlink(net, parser->Tok[1]); + if (k == 0) return setError(parser, 1, 204); + + // Cannot control a check valve + linktype = net->Link[k].Type; + if (linktype == CVPIPE) return setError(parser, 1, 207); + + // Parse control setting into a status level or numerical setting + if (match(parser->Tok[2], w_OPEN)) + { + status = OPEN; + if (linktype == PUMP) setting = 1.0; + if (linktype == GPV) setting = net->Link[k].Kc; + } + else if (match(parser->Tok[2], w_CLOSED)) + { + status = CLOSED; + if (linktype == PUMP) setting = 0.0; + if (linktype == GPV) setting = net->Link[k].Kc; + } + else if (linktype == GPV) return setError(parser, 1, 207); + else if (!getfloat(parser->Tok[2], &setting)) return setError(parser, 2, 202); + + // Set status for pump in case speed setting was supplied + // or for pipe if numerical setting was supplied + if (linktype == PUMP || linktype == PIPE) + { + if (setting != MISSING) + { + if (setting < 0.0) return setError(parser, 2, 211); + else if (setting == 0.0) status = CLOSED; + else status = OPEN; + } + } + + // Determine type of control + if (match(parser->Tok[4], w_TIME)) ctltype = TIMER; + else if (match(parser->Tok[4], w_CLOCKTIME)) ctltype = TIMEOFDAY; + else + { + if (n < 8) return 201; + if ((i = findnode(net, parser->Tok[5])) == 0) return setError(parser, 5, 203); + if (match(parser->Tok[6], w_BELOW)) ctltype = LOWLEVEL; + else if (match(parser->Tok[6], w_ABOVE)) ctltype = HILEVEL; + else return setError(parser, 6, 213); + } + + // Parse control level or time + switch (ctltype) + { + case TIMER: + case TIMEOFDAY: + if (n == 6) time = hour(parser->Tok[5], ""); + if (n == 7) time = hour(parser->Tok[5], parser->Tok[6]); + if (time < 0.0) return setError(parser, 5, 213); + break; + case LOWLEVEL: + case HILEVEL: + if (!getfloat(parser->Tok[7], &level)) return setError(parser, 7, 202); + break; + } + + // Fill in fields of control data structure + net->Ncontrols++; + if (net->Ncontrols > parser->MaxControls) return 200; + control = &net->Control[net->Ncontrols]; + control->Link = k; + control->Node = i; + control->Type = ctltype; + control->Status = status; + control->Setting = setting; + control->Time = (long)(3600.0 * time); + if (ctltype == TIMEOFDAY) control->Time %= SECperDAY; + control->Grade = level; + return 0; +} + +int sourcedata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes water quality source data +** Formats: +** [SOURCE] +** node sourcetype quality (pattern) +** +** NOTE: units of mass-based source are mass/min +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int i, // Token with quality value + j, // Node index + n, // # data items + p = 0; // Time pattern index + char type = CONCEN; // Source type + double c0 = 0; // Initial quality + Psource source; + + // Check for enough tokens & that source node exists + n = parser->Ntokens; + if (n < 2) return 201; + if ((j = findnode(net, parser->Tok[0])) == 0) return setError(parser, 0, 203); + + // Parse source type + // NOTE: Under old 1.1 format, SourceType not supplied so + // let i = index of token that contains quality value + i = 2; + if (match(parser->Tok[1], w_CONCEN)) type = CONCEN; + else if (match(parser->Tok[1], w_MASS)) type = MASS; + else if (match(parser->Tok[1], w_SETPOINT)) type = SETPOINT; + else if (match(parser->Tok[1], w_FLOWPACED)) type = FLOWPACED; + else i = 1; + + // Parse source quality + if (!getfloat(parser->Tok[i], &c0)) + { + if (i == 1) return setError(parser, i, 213); + else return setError(parser, i, 202); + } + + // Parse optional source time pattern + if (n > i + 1 && strlen(parser->Tok[i + 1]) > 0 && + strcmp(parser->Tok[i + 1], "*") != 0) + { + p = findpattern(net, parser->Tok[i + 1]); + if (p < 0) return setError(parser, i + 1, 205); + } + + // Destroy any existing source assigned to node + if (net->Node[j].S != NULL) free(net->Node[j].S); + + // Create a new source & assign it to the node + source = (struct Ssource *)malloc(sizeof(struct Ssource)); + if (source == NULL) return 101; + source->C0 = c0; + source->Pat = p; + source->Type = type; + net->Node[j].S = source; + return 0; +} + +int emitterdata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes junction emitter data +** Format: +** [EMITTER] +** node Ke +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int j, // Node index + n; // # data items + double k; // Flow coeff. + + // Check that node exists & is a junction + n = parser->Ntokens; + if (n < 2) return 201; + if ((j = findnode(net, parser->Tok[0])) == 0) return setError(parser, 0, 203); + if (j > net->Njuncs) return 0; + + // Parse emitter flow coeff. + if (!getfloat(parser->Tok[1], &k)) return setError(parser, 1, 202); + if (k < 0.0) return setError(parser, 1, 209); + net->Node[j].Ke = k; + return 0; +} + +int qualdata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes initial water quality data +** Formats: +** [QUALITY] +** node initqual +** node1 node2 initqual +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int j, n; + long i, i1, i2; + double c0; + Snode *Node = net->Node; + + if (net->Nnodes == 0) return setError(parser, 0, 203); // No nodes defined yet + n = parser->Ntokens; + if (n < 2) return 0; + + // Single node name supplied + if (n == 2) + { + if ((j = findnode(net,parser->Tok[0])) == 0) return setError(parser, 0, 203); + if (!getfloat(parser->Tok[1], &c0)) return setError(parser, 1, 202); + if (c0 < 0.0) return setError(parser, 1, 209); + Node[j].C0 = c0; + } + + // Range of node names supplied + else + { + // Parse quality value + if (!getfloat(parser->Tok[2], &c0)) return setError(parser, 2, 202); + if (c0 < 0.0) return setError(parser, 2, 209); + + // If numerical node names supplied, then use numerical comparison + // to find which nodes are assigned the quality value + if ((i1 = atol(parser->Tok[0])) > 0 && + (i2 = atol(parser->Tok[1])) > 0) + { + for (j = 1; j <= net->Nnodes; j++) + { + i = atol(Node[j].ID); + if (i >= i1 && i <= i2) Node[j].C0 = c0; + } + } + + // Otherwise use lexicographic comparison + else + { + for (j = 1; j <= net->Nnodes; j++) + { + if ((strcmp(parser->Tok[0], Node[j].ID) <= 0) && + (strcmp(parser->Tok[1], Node[j].ID) >= 0) + ) Node[j].C0 = c0; + } + } + } + return 0; +} + +int reactdata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes reaction coeff. data +** Formats: +** [REACTIONS] +** ORDER {BULK/WALL/TANK} value +** GLOBAL BULK coeff +** GLOBAL WALL coeff +** BULK link1 (link2) coeff +** WALL link1 (link2) coeff +** TANK node1 (node2) coeff +** LIMITING POTENTIAL value +** ROUGHNESS CORRELATION value +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + Parser *parser = &pr->parser; + + int item, j, n; + long i, i1, i2; + double y; + + // Skip line if insufficient data + n = parser->Ntokens; + if (n < 3) return 0; + + // Keyword is ORDER + if (match(parser->Tok[0], w_ORDER)) + { + if (!getfloat(parser->Tok[n - 1], &y)) return setError(parser, n-1, 202); + if (match(parser->Tok[1], w_BULK)) qual->BulkOrder = y; + else if (match(parser->Tok[1], w_TANK)) qual->TankOrder = y; + else if (match(parser->Tok[1], w_WALL)) + { + if (y == 0.0) qual->WallOrder = 0.0; + else if (y == 1.0) qual->WallOrder = 1.0; + else return setError(parser, n-1, 213); + } + else return setError(parser, 1, 213); + return 0; + } + + // Keyword is ROUGHNESS + if (match(parser->Tok[0], w_ROUGHNESS)) + { + if (!getfloat(parser->Tok[n - 1], &y)) return setError(parser, n-1, 202); + qual->Rfactor = y; + return 0; + } + + // Keyword is LIMITING + if (match(parser->Tok[0], w_LIMITING)) + { + if (!getfloat(parser->Tok[n - 1], &y)) return setError(parser, n-1, 202); + qual->Climit = y; + return 0; + } + + // Keyword is GLOBAL + if (match(parser->Tok[0], w_GLOBAL)) + { + if (!getfloat(parser->Tok[n - 1], &y)) return setError(parser, n-1, 202); + if (match(parser->Tok[1], w_BULK)) qual->Kbulk = y; + else if (match(parser->Tok[1], w_WALL)) qual->Kwall = y; + else return setError(parser, 1, 213); + return 0; + } + + // Keyword is BULK, WALL or TANK + if (match(parser->Tok[0], w_BULK)) item = 1; + else if (match(parser->Tok[0], w_WALL)) item = 2; + else if (match(parser->Tok[0], w_TANK)) item = 3; + else return setError(parser, 0, 213); + + // Case where tank rate coeffs. are being set + if (item == 3) + { + // Get the rate coeff. value + if (!getfloat(parser->Tok[n - 1], &y)) return setError(parser, n-1, 202); + + // Case where just a single tank is specified + if (n == 3) + { + if ((j = findnode(net,parser->Tok[1])) <= net->Njuncs) return 0; + net->Tank[j - net->Njuncs].Kb = y; + } + + // Case where a numerical range of tank IDs is specified + else if ((i1 = atol(parser->Tok[1])) > 0 && + (i2 = atol(parser->Tok[2])) > 0) + { + for (j = net->Njuncs + 1; j <= net->Nnodes; j++) + { + i = atol(net->Node[j].ID); + if (i >= i1 && i <= i2) net->Tank[j - net->Njuncs].Kb = y; + } + } + + // Case where a general range of tank IDs is specified + else for (j = net->Njuncs + 1; j <= net->Nnodes; j++) + { + if ((strcmp(parser->Tok[1], net->Node[j].ID) <= 0) && + (strcmp(parser->Tok[2], net->Node[j].ID) >= 0) + ) net->Tank[j - net->Njuncs].Kb = y; + } + } + + // Case where pipe rate coeffs. are being set + else + { + // Get the rate coeff. value + if (!getfloat(parser->Tok[n - 1], &y)) return setError(parser, n-1, 202); + if (net->Nlinks == 0) return 0; + + // Case where just a single link is specified + if (n == 3) + { + if ((j = findlink(net, parser->Tok[1])) == 0) return 0; + if (item == 1) net->Link[j].Kb = y; + else net->Link[j].Kw = y; + } + + // Case where a numerical range of link IDs is specified + else if ((i1 = atol(parser->Tok[1])) > 0 && + (i2 = atol(parser->Tok[2])) > 0) + { + for (j = 1; j <= net->Nlinks; j++) + { + i = atol(net->Link[j].ID); + if (i >= i1 && i <= i2) + { + if (item == 1) net->Link[j].Kb = y; + else net->Link[j].Kw = y; + } + } + } + + // Case where a general range of link IDs is specified + else for (j = 1; j <= net->Nlinks; j++) + { + if ((strcmp(parser->Tok[1], net->Link[j].ID) <= 0) && + (strcmp(parser->Tok[2], net->Link[j].ID) >= 0)) + { + if (item == 1) net->Link[j].Kb = y; + else net->Link[j].Kw = y; + } + } + } + return 0; +} + +int mixingdata(Project *pr) +/* +**------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes tank mixing data +** Format: +** [MIXING] +** TankID MixModel FractVolume +**------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int i, // Tank index + j, // Node index + m, // Type of mixing model + n; // Number of data items + double v; // Mixing zone volume fraction + + // Check for valid data + if (net->Nnodes == 0) return setError(parser, 0, 203); + n = parser->Ntokens; + if (n < 2) return 0; + j = findnode(net, parser->Tok[0]); + if (j == 0) return setError(parser, 0, 203); + if (j <= net->Njuncs) return 0; + if ((m = findmatch(parser->Tok[1], MixTxt)) < 0) return setError(parser, 1, 213); + + // Find mixing zone volume fraction (which can't be 0) + v = 1.0; + if ((m == MIX2) && (n == 3) && + (!getfloat(parser->Tok[2], &v))) return setError(parser, 2, 202); + if (v == 0.0) v = 1.0; + + // Assign mixing data to tank (return if tank is a reservoir) + i = j - net->Njuncs; + if (net->Tank[i].A == 0.0) return 0; + net->Tank[i].MixModel = (char)m; + net->Tank[i].V1max = v; + return 0; +} + +int statusdata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes link initial status data +** Formats: +** [STATUS] +** link value +** link1 (link2) value +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + int j, n; + long i, i1, i2; + double y = 0.0; + char status = ACTIVE; + + if (net->Nlinks == 0) return setError(parser, 0, 204); + n = parser->Ntokens - 1; + if (n < 1) return 201; + + // Check for legal status setting + if (match(parser->Tok[n], w_OPEN)) status = OPEN; + else if (match(parser->Tok[n], w_CLOSED)) status = CLOSED; + else + { + if (!getfloat(parser->Tok[n], &y)) return setError(parser, n, 202); + if (y < 0.0) return setError(parser, n, 211); + } + + // A single link ID was supplied + if (n == 1) + { + if ((j = findlink(net, parser->Tok[0])) == 0) return setError(parser, 0, 204); + + // Cannot change status of a Check Valve + if (net->Link[j].Type == CVPIPE) return setError(parser, 0, 207); + + // Cannot change setting for a GPV + if (net->Link[j].Type == GPV && status == ACTIVE) return setError(parser, 0, 207); + changestatus(net, j, status, y); + } + + // A range of numerical link ID's was supplied + else if ((i1 = atol(parser->Tok[0])) > 0 && + (i2 = atol(parser->Tok[1])) > 0) + { + for (j = 1; j <= net->Nlinks; j++) + { + i = atol(net->Link[j].ID); + if (i >= i1 && i <= i2) changestatus(net, j, status, y); + } + } + + // A range of general link ID's was supplied + else for (j = 1; j <= net->Nlinks; j++) + { + if ((strcmp(parser->Tok[0], net->Link[j].ID) <= 0) && + (strcmp(parser->Tok[1], net->Link[j].ID) >= 0) + ) changestatus(net, j, status, y); + } + return 0; +} + +int energydata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes pump energy data +** Formats: +** [ENERGY] +** GLOBAL {PRICE/PATTERN/EFFIC} value +** PUMP id {PRICE/PATTERN/EFFIC} value +** DEMAND CHARGE value +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Parser *parser = &pr->parser; + + int j, k, n, p, c; + double y; + + Slink *Link = net->Link; + Spump *Pump = net->Pump; + + // Check for sufficient data + n = parser->Ntokens; + if (n < 3) return 201; + + // First keyword is DEMAND + if (match(parser->Tok[0], w_DMNDCHARGE)) + { + if (!getfloat(parser->Tok[2], &y)) return setError(parser, 2, 202); + if (y < 0.0) return setError(parser, 2, 213); + hyd->Dcost = y; + return 0; + } + + // First keyword is GLOBAL (remaining data refer to global options) + if (match(parser->Tok[0], w_GLOBAL)) + { + j = 0; + } + + // First keyword is PUMP (remaining data refer to a specific pump) + else if (match(parser->Tok[0], w_PUMP)) + { + if (n < 4) return 201; + k = findlink(net,parser->Tok[1]); + if (k == 0) return setError(parser, 1, 216); + if (Link[k].Type != PUMP) return setError(parser, 1, 216); + j = findpump(net, k); + } + else return setError(parser, 0, 213); + + // PRICE parameter being set + if (match(parser->Tok[n - 2], w_PRICE)) + { + if (!getfloat(parser->Tok[n - 1], &y)) return setError(parser, n-1, 202); + if (y < 0.0) return setError(parser, n-1, 217); + if (j == 0) hyd->Ecost = y; + else Pump[j].Ecost = y; + return 0; + } + + // Price PATTERN being set + else if (match(parser->Tok[n - 2], w_PATTERN)) + { + p = findpattern(net, parser->Tok[n - 1]); + if (p < 0) return setError(parser, n - 1, 205); + if (j == 0) hyd->Epat = p; + else Pump[j].Epat = p; + return 0; + } + + // Pump EFFIC being set + else if (match(parser->Tok[n - 2], w_EFFIC)) + { + if (j == 0) + { + if (!getfloat(parser->Tok[n - 1], &y)) return setError(parser, n - 1, 202); + if (y <= 0.0) return setError(parser, n - 1, 217); + hyd->Epump = y; + } + else + { + c = findcurve(net, parser->Tok[n - 1]); + if (c == 0) return setError(parser, n - 1, 206); + Pump[j].Ecurve = c; + net->Curve[c].Type = EFFIC_CURVE; + } + return 0; + } + return 201; +} + +int reportdata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes report options data +** Formats: +** PAGE linesperpage +** STATUS {NONE/YES/FULL} +** SUMMARY {YES/NO} +** MESSAGES {YES/NO} +** ENERGY {NO/YES} +** NODES {NONE/ALL} +** NODES node1 node2 ... +** LINKS {NONE/ALL} +** LINKS link1 link2 ... +** FILE filename +** variable {YES/NO} +** variable {BELOW/ABOVE/PRECISION} value +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Report *rpt = &pr->report; + Parser *parser = &pr->parser; + + int i, j, n; + double y; + + n = parser->Ntokens - 1; + if (n < 1) return 201; + + // Value for page size + if (match(parser->Tok[0], w_PAGE)) + { + if (!getfloat(parser->Tok[n], &y)) return setError(parser, n, 202); + if (y < 0.0 || y > 255.0) return setError(parser, n, 213); + rpt->PageSize = (int)y; + return 0; + } + + // Request that status reports be written + if (match(parser->Tok[0], w_STATUS)) + { + if (match(parser->Tok[n], w_NO)) rpt->Statflag = FALSE; + if (match(parser->Tok[n], w_YES)) rpt->Statflag = TRUE; + if (match(parser->Tok[n], w_FULL)) rpt->Statflag = FULL; + return 0; + } + + // Request summary report + if (match(parser->Tok[0], w_SUMMARY)) + { + if (match(parser->Tok[n], w_NO)) rpt->Summaryflag = FALSE; + if (match(parser->Tok[n], w_YES)) rpt->Summaryflag = TRUE; + return 0; + } + + // Request error/warning message reporting + if (match(parser->Tok[0], w_MESSAGES)) + { + if (match(parser->Tok[n], w_NO)) rpt->Messageflag = FALSE; + if (match(parser->Tok[n], w_YES)) rpt->Messageflag = TRUE; + return 0; + } + + // Request an energy usage report + if (match(parser->Tok[0], w_ENERGY)) + { + if (match(parser->Tok[n], w_NO)) rpt->Energyflag = FALSE; + if (match(parser->Tok[n], w_YES)) rpt->Energyflag = TRUE; + return 0; + } + + // Particular reporting nodes specified + if (match(parser->Tok[0], w_NODE)) + { + if (match(parser->Tok[n], w_NONE)) rpt->Nodeflag = 0; // No nodes + else if (match(parser->Tok[n], w_ALL)) rpt->Nodeflag = 1; // All nodes + else + { + if (net->Nnodes == 0) return setError(parser, 1, 203); + for (i = 1; i <= n; i++) + { + if ((j = findnode(net, parser->Tok[i])) == 0) return setError(parser, i, 203); + net->Node[j].Rpt = 1; + } + rpt->Nodeflag = 2; + } + return 0; + } + + // Particular reporting links specified + if (match(parser->Tok[0], w_LINK)) + { + if (match(parser->Tok[n], w_NONE)) rpt->Linkflag = 0; + else if (match(parser->Tok[n], w_ALL)) rpt->Linkflag = 1; + else + { + if (net->Nlinks == 0) return setError(parser, 1, 204); + for (i = 1; i <= n; i++) + { + if ((j = findlink(net, parser->Tok[i])) == 0) return setError(parser, i, 204); + net->Link[j].Rpt = 1; + } + rpt->Linkflag = 2; + } + return 0; + } + + // Report fields specified + // Special case needed to distinguish "HEAD" from "HEADLOSS" + if (strcomp(parser->Tok[0], t_HEADLOSS)) i = HEADLOSS; + else i = findmatch(parser->Tok[0], Fldname); + if (i >= 0) + { + if (i > FRICTION) return setError(parser, 0, 213); + if (parser->Ntokens == 1 || match(parser->Tok[1], w_YES)) + { + rpt->Field[i].Enabled = TRUE; + return 0; + } + + if (match(parser->Tok[1], w_NO)) + { + rpt->Field[i].Enabled = FALSE; + return 0; + } + + // Get field qualifier type + if (parser->Ntokens < 3) return 201; + if (match(parser->Tok[1], w_BELOW)) j = LOW; + else if (match(parser->Tok[1], w_ABOVE)) j = HI; + else if (match(parser->Tok[1], w_PRECISION)) j = PREC; + else return setError(parser, 1, 213); + + // Get field qualifier value + if (!getfloat(parser->Tok[2], &y)) return setError(parser, 2, 202); + if (j == PREC) + { + rpt->Field[i].Enabled = TRUE; + rpt->Field[i].Precision = ROUND(y); + } + else rpt->Field[i].RptLim[j] = y; + return (0); + } + + // Name of external report file + if (match(parser->Tok[0], w_FILE)) + { + strncpy(rpt->Rpt2Fname, parser->Tok[1], MAXFNAME); + return 0; + } + + // If get to here then return error condition + return 201; +} + +int timedata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes time options data +** Formats: +** STATISTIC {NONE/AVERAGE/MIN/MAX/RANGE} +** DURATION value (units) +** HYDRAULIC TIMESTEP value (units) +** QUALITY TIMESTEP value (units) +** MINIMUM TRAVELTIME value (units) +** RULE TIMESTEP value (units) +** PATTERN TIMESTEP value (units) +** PATTERN START value (units) +** REPORT TIMESTEP value (units) +** REPORT START value (units) +** START CLOCKTIME value (AM PM) +**------------------------------------------------------------- +*/ +{ + Report *rpt = &pr->report; + Parser *parser = &pr->parser; + Times *time = &pr->times; + + int n; + long t; + double y; + + n = parser->Ntokens - 1; + if (n < 1) return 201; + + // Check if setting report time statistic flag + if (match(parser->Tok[0], w_STATISTIC)) + { + if (match(parser->Tok[n], w_NONE)) rpt->Tstatflag = SERIES; + else if (match(parser->Tok[n], w_NO)) rpt->Tstatflag = SERIES; + else if (match(parser->Tok[n], w_AVG)) rpt->Tstatflag = AVG; + else if (match(parser->Tok[n], w_MIN)) rpt->Tstatflag = MIN; + else if (match(parser->Tok[n], w_MAX)) rpt->Tstatflag = MAX; + else if (match(parser->Tok[n], w_RANGE)) rpt->Tstatflag = RANGE; + else return setError(parser, n, 213); + return 0; + } + + // Convert text time value to numerical value in seconds + // Examples: + // 5 = 5 * 3600 sec + // 5 MINUTES = 5 * 60 sec + // 13:50 = 13*3600 + 50*60 sec + // 1:50 pm = (12+1)*3600 + 50*60 sec + + if (!getfloat(parser->Tok[n], &y)) + { + if ((y = hour(parser->Tok[n], "")) < 0.0) + { + if ((y = hour(parser->Tok[n - 1], parser->Tok[n])) < 0.0) + { + return setError(parser, n-1, 213); + } + } + } + t = (long)(3600.0 * y + 0.5); + + /// Process the value assigned to the matched parameter + if (match(parser->Tok[0], w_DURATION)) time->Dur = t; + else if (match(parser->Tok[0], w_HYDRAULIC)) time->Hstep = t; + else if (match(parser->Tok[0], w_QUALITY) ) time->Qstep = t; + else if (match(parser->Tok[0], w_RULE)) time->Rulestep = t; + else if (match(parser->Tok[0], w_MINIMUM)) return 0; // Not used anymore + else if (match(parser->Tok[0], w_PATTERN)) + { + if (match(parser->Tok[1], w_TIME)) time->Pstep = t; + else if (match(parser->Tok[1], w_START)) time->Pstart = t; + else return setError(parser, 1, 213); + } + else if (match(parser->Tok[0], w_REPORT)) + { + if (match(parser->Tok[1], w_TIME)) time->Rstep = t; + else if (match(parser->Tok[1], w_START)) time->Rstart = t; + else return setError(parser, 1, 213); + } + else if (match(parser->Tok[0], w_START)) time->Tstart = t % SECperDAY; + else return setError(parser, 0, 213); + return 0; +} + +int optiondata(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: processes [OPTIONS] data +**-------------------------------------------------------------- +*/ +{ + int i, n; + Parser *parser = &pr->parser; + + // Option is a named choice + n = parser->Ntokens - 1; + i = optionchoice(pr, n); + if (i >= 0) return i; + + // Option is a numerical value + return (optionvalue(pr, n)); +} + +int optionchoice(Project *pr, int n) +/* +**-------------------------------------------------------------- +** Input: n = index of last input token +** Output: returns error code or 0 if option belongs to +** those listed below, or -1 otherwise +** Purpose: processes fixed choice [OPTIONS] data +** Formats: +** UNITS CFS/GPM/MGD/IMGD/AFD/LPS/LPM/MLD/CMH/CMD/SI +** PRESSURE PSI/KPA/M +** HEADLOSS H-W/D-W/C-M +** HYDRAULICS USE/SAVE filename +** QUALITY NONE/AGE/TRACE/CHEMICAL (TraceNode) +** MAP filename +** VERIFY filename +** UNBALANCED STOP/CONTINUE {Niter} +** PATTERN id +** DEMAND MODEL DDA/PDA +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Parser *parser = &pr->parser; + Outfile *out = &pr->outfile; + + int choice; + + // Check if 1st token matches a parameter name and + // process the input for the matched parameter + if (n < 0) return 201; + + // Flow UNITS + if (match(parser->Tok[0], w_UNITS)) + { + if (n < 1) return 0; + else if (match(parser->Tok[1], w_CFS)) parser->Flowflag = CFS; + else if (match(parser->Tok[1], w_GPM)) parser->Flowflag = GPM; + else if (match(parser->Tok[1], w_AFD)) parser->Flowflag = AFD; + else if (match(parser->Tok[1], w_MGD)) parser->Flowflag = MGD; + else if (match(parser->Tok[1], w_IMGD)) parser->Flowflag = IMGD; + else if (match(parser->Tok[1], w_LPS)) parser->Flowflag = LPS; + else if (match(parser->Tok[1], w_LPM)) parser->Flowflag = LPM; + else if (match(parser->Tok[1], w_CMH)) parser->Flowflag = CMH; + else if (match(parser->Tok[1], w_CMD)) parser->Flowflag = CMD; + else if (match(parser->Tok[1], w_MLD)) parser->Flowflag = MLD; + else if (match(parser->Tok[1], w_SI)) parser->Flowflag = LPS; + else return setError(parser, 1, 213); + } + + // PRESSURE units + else if (match(parser->Tok[0], w_PRESSURE)) + { + if (n < 1) return 0; + else if (match(parser->Tok[1], w_EXPONENT)) return -1; + else if (match(parser->Tok[1], w_PSI)) parser->Pressflag = PSI; + else if (match(parser->Tok[1], w_KPA)) parser->Pressflag = KPA; + else if (match(parser->Tok[1], w_METERS)) parser->Pressflag = METERS; + else return setError(parser, 1, 213); + } + + // HEADLOSS formula + else if (match(parser->Tok[0], w_HEADLOSS)) + { + if (n < 1) return 0; + else if (match(parser->Tok[1], w_HW)) hyd->Formflag = HW; + else if (match(parser->Tok[1], w_DW)) hyd->Formflag = DW; + else if (match(parser->Tok[1], w_CM)) hyd->Formflag = CM; + else return setError(parser, 1, 213); + } + + // HYDRUALICS USE/SAVE file option + else if (match(parser->Tok[0], w_HYDRAULIC)) + { + if (n < 2) return 0; + else if (match(parser->Tok[1], w_USE)) out->Hydflag = USE; + else if (match(parser->Tok[1], w_SAVE)) out->Hydflag = SAVE; + else return setError(parser, 1, 213); + strncpy(out->HydFname, parser->Tok[2], MAXFNAME); + } + + // Water QUALITY option + else if (match(parser->Tok[0], w_QUALITY)) + { + if (n < 1) return 0; + else if (match(parser->Tok[1], w_NONE)) qual->Qualflag = NONE; + else if (match(parser->Tok[1], w_CHEM)) qual->Qualflag = CHEM; + else if (match(parser->Tok[1], w_AGE)) qual->Qualflag = AGE; + else if (match(parser->Tok[1], w_TRACE)) qual->Qualflag = TRACE; + else + { + qual->Qualflag = CHEM; + strncpy(qual->ChemName, parser->Tok[1], MAXID); + if (n >= 2) strncpy(qual->ChemUnits, parser->Tok[2], MAXID); + } + if (qual->Qualflag == TRACE) + { + // Copy Trace Node ID to parser->Tok[0] for error reporting + strcpy(parser->Tok[0], ""); + if (n < 2) return 201; + strcpy(parser->Tok[0], parser->Tok[2]); + qual->TraceNode = findnode(net, parser->Tok[2]); + if (qual->TraceNode == 0) return setError(parser, 2, 212); + strncpy(qual->ChemName, u_PERCENT, MAXID); + strncpy(qual->ChemUnits, parser->Tok[2], MAXID); + } + if (qual->Qualflag == AGE) + { + strncpy(qual->ChemName, w_AGE, MAXID); + strncpy(qual->ChemUnits, u_HOURS, MAXID); + } + } + + // MAP file name + else if (match(parser->Tok[0], w_MAP)) + { + if (n < 1) return 0; + strncpy(pr->MapFname, parser->Tok[1], MAXFNAME); + } + + else if (match(parser->Tok[0], w_VERIFY)) + { + // Deprecated + } + + // Hydraulics UNBALANCED option + else if (match(parser->Tok[0], w_UNBALANCED)) + { + if (n < 1) return 0; + if (match(parser->Tok[1], w_STOP)) hyd->ExtraIter = -1; + else if (match(parser->Tok[1], w_CONTINUE)) + { + if (n >= 2) hyd->ExtraIter = atoi(parser->Tok[2]); + else hyd->ExtraIter = 0; + } + else return setError(parser, 1, 213); + } + + // Default demand PATTERN + else if (match(parser->Tok[0], w_PATTERN)) + { + if (n < 1) return 0; + strncpy(parser->DefPatID, parser->Tok[1], MAXID); + } + + // DEMAND model + else if (match(parser->Tok[0], w_DEMAND)) + { + if (n < 2) return 0; + if (!match(parser->Tok[1], w_MODEL)) return -1; + choice = findmatch(parser->Tok[2], DemandModelTxt); + if (choice < 0) return setError(parser, 2, 213); + hyd->DemandModel = choice; + } + + // Return -1 if keyword did not match any option + else return -1; + return 0; +} + +int optionvalue(Project *pr, int n) +/* +**------------------------------------------------------------- +** Input: *line = line read from input file +** Output: returns error code +** Purpose: processes numerical value [OPTIONS] data +** Formats: +** DEMAND MULTIPLIER value +** EMITTER EXPONENT value +** VISCOSITY value +** DIFFUSIVITY value +** SPECIFIC GRAVITY value +** TRIALS value +** ACCURACY value + +** HEADERROR value +** FLOWCHANGE value +** MINIMUM PRESSURE value +** REQUIRED PRESSURE value +** PRESSURE EXPONENT value + +** TOLERANCE value +** SEGMENTS value (not used) +** ------ Undocumented Options ----- +** HTOL value +** QTOL value +** RQTOL value +** CHECKFREQ value +** MAXCHECK value +** DAMPLIMIT value +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Parser *parser = &pr->parser; + + int nvalue = 1; // Index of token with numerical value + double y; + char* tok0 = parser->Tok[0]; + + // Check for deprecated SEGMENTS keyword + if (match(tok0, w_SEGMENTS)) return 0; + + // Check for missing value (which is permissible) + if (match(tok0, w_SPECGRAV) || match(tok0, w_EMITTER) || + match(tok0, w_DEMAND) || match(tok0, w_MINIMUM) || + match(tok0, w_REQUIRED) || match(tok0, w_PRESSURE) || + match(tok0, w_PRECISION) + ) nvalue = 2; + if (n < nvalue) return 0; + + // Check for valid numerical input + if (!getfloat(parser->Tok[nvalue], &y)) return setError(parser, nvalue, 202); + + // Quality tolerance option (which can be 0) + if (match(tok0, w_TOLERANCE)) + { + if (y < 0.0) return setError(parser, nvalue, 213); + qual->Ctol = y; + return 0; + } + + // Diffusivity + if (match(tok0, w_DIFFUSIVITY)) + { + if (y < 0.0) return setError(parser, nvalue, 213); + qual->Diffus = y; + return 0; + } + + // Hydraulic damping limit option */ + if (match(tok0, w_DAMPLIMIT)) + { + hyd->DampLimit = y; + return 0; + } + + // Flow change limit + else if (match(tok0, w_FLOWCHANGE)) + { + if (y < 0.0) return setError(parser, nvalue, 213); + hyd->FlowChangeLimit = y; + return 0; + } + + // Head loss error limit + else if (match(tok0, w_HEADERROR)) + { + if (y < 0.0) return setError(parser, nvalue, 213); + hyd->HeadErrorLimit = y; + return 0; + } + + // Pressure dependent demand parameters + else if (match(tok0, w_MINIMUM)) + { + if (y < 0.0) return setError(parser, nvalue, 213); + // Required pressure still at default value + if (hyd->Preq == MINPDIFF) + hyd->Preq = y + MINPDIFF; + // Required pressure already entered + else if (hyd->Preq - y < MINPDIFF) + return setError(parser, nvalue, 208); + hyd->Pmin = y; + return 0; + } + else if (match(tok0, w_REQUIRED)) + { + if (y < 0.0) return setError(parser, nvalue, 213); + if (y - hyd->Pmin < MINPDIFF) + return setError(parser, nvalue, 208); + hyd->Preq = y; + return 0; + } + else if (match(tok0, w_PRESSURE)) + { + if (y < 0.0) return setError(parser, nvalue, 213); + hyd->Pexp = y; + return 0; + } + + // All other options must be > 0 + if (y <= 0.0) return setError(parser, nvalue, 213); + + // Assign value to all other options + if (match(tok0, w_VISCOSITY)) hyd->Viscos = y; + else if (match(tok0, w_SPECGRAV)) hyd->SpGrav = y; + else if (match(tok0, w_TRIALS)) hyd->MaxIter = (int)y; + else if (match(tok0, w_ACCURACY)) + { + y = MAX(y, 1.e-5); + y = MIN(y, 1.e-1); + hyd->Hacc = y; + } + else if (match(tok0, w_HTOL)) hyd->Htol = y; + else if (match(tok0, w_QTOL)) hyd->Qtol = y; + else if (match(tok0, w_RQTOL)) + { + if (y >= 1.0) return 213; + hyd->RQtol = y; + } + else if (match(tok0, w_CHECKFREQ)) hyd->CheckFreq = (int)y; + else if (match(tok0, w_MAXCHECK)) hyd->MaxCheck = (int)y; + else if (match(tok0, w_EMITTER)) hyd->Qexp = 1.0 / y; + else if (match(tok0, w_DEMAND)) hyd->Dmult = y; + else return 201; + return 0; +} + +int getpumpcurve(Project *pr, int n) +/* +**-------------------------------------------------------- +** Input: n = number of parameters for pump curve +** Output: returns error code +** Purpose: processes pump curve data for Version 1.1- +** style input data +** Notes: +** 1. Called by pumpdata() in INPUT3.C +** 2. Current link index & pump index of pump being +** processed is found in network variables Nlinks +** and Npumps, respectively +** 3. Curve data read from input line is found in +** parser's array X[0],...X[n-1] +**--------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + + double a, b, c, h0, h1, h2, q1, q2; + Spump *pump = &net->Pump[net->Npumps]; + + // Constant HP curve + if (n == 1) + { + if (parser->X[0] <= 0.0) return 202; + pump->Ptype = CONST_HP; + net->Link[net->Nlinks].Km = parser->X[0]; + } + + // Power function curve + else + { + // Single point power curve + if (n == 2) + { + q1 = parser->X[1]; + h1 = parser->X[0]; + h0 = 1.33334 * h1; + q2 = 2.0 * q1; + h2 = 0.0; + } + + // 3-point power curve + else if (n >= 5) + { + h0 = parser->X[0]; + h1 = parser->X[1]; + q1 = parser->X[2]; + h2 = parser->X[3]; + q2 = parser->X[4]; + } + else return 202; + pump->Ptype = POWER_FUNC; + if (!powercurve(h0, h1, h2, q1, q2, &a, &b, &c)) return 206; + pump->H0 = -a; + pump->R = -b; + pump->N = c; + pump->Q0 = q1; + pump->Qmax = pow((-a / b), (1.0 / c)); + pump->Hmax = h0; + } + return 0; +} + +int powercurve(double h0, double h1, double h2, double q1, double q2, + double *a, double *b, double *c) +/* +**--------------------------------------------------------- +** Input: h0 = shutoff head +** h1 = design head +** h2 = head at max. flow +** q1 = design flow +** q2 = max. flow +** Output: *a, *b, *c = pump curve coeffs. (H = a-bQ^c), +** Returns 1 if sucessful, 0 otherwise. +** Purpose: computes coeffs. for pump curve +**---------------------------------------------------------- +*/ +{ + double h4, h5; + + if (h0 < TINY || h0 - h1 < TINY || h1 - h2 < TINY || + q1 < TINY || q2 - q1 < TINY + ) return 0; + *a = h0; + h4 = h0 - h1; + h5 = h0 - h2; + *c = log(h5 / h4) / log(q2 / q1); + if (*c <= 0.0 || *c > 20.0) return 0; + *b = -h4 / pow(q1, *c); + if (*b >= 0.0) return 0; + return 1; +} + +void changestatus(Network *net, int j, StatusType status, double y) +/* +**-------------------------------------------------------------- +** Input: j = link index +** status = status setting (OPEN, CLOSED) +** y = numerical setting (pump speed, valve +** setting) +** Output: none +** Purpose: changes status or setting of a link +** +** NOTE: If status = ACTIVE, then a numerical setting (y) was +** supplied. If status = OPEN/CLOSED, then numerical +** setting is 0. +**-------------------------------------------------------------- +*/ +{ + Slink *link = &net->Link[j]; + + if (link->Type == PIPE || link->Type == GPV) + { + if (status != ACTIVE) link->Status = status; + } + else if (link->Type == PUMP) + { + if (status == ACTIVE) + { + link->Kc = y; + status = OPEN; + if (y == 0.0) status = CLOSED; + } + else if (status == OPEN) link->Kc = 1.0; + link->Status = status; + } + else if (link->Type >= PRV) + { + link->Kc = y; + link->Status = status; + if (status != ACTIVE) link->Kc = MISSING; + } +} diff --git a/src/mempool.c b/src/mempool.c index b31ba13..d6c7f61 100755 --- a/src/mempool.c +++ b/src/mempool.c @@ -1,205 +1,142 @@ -/* mempool.c -** -** A simple fast memory allocation package. -** -** By Steve Hill in Graphics Gems III, David Kirk (ed.), -** Academic Press, Boston, MA, 1992 -** -** Modified by Lew Rossman, 8/13/94. -** -** AllocInit() - create an alloc pool, returns the old pool handle -** Alloc() - allocate memory -** AllocReset() - reset the current pool -** AllocSetPool() - set the current pool -** AllocFree() - free the memory used by the current pool. -** -*/ - -#include -#ifndef __APPLE__ -#include -#endif -#include "mempool.h" - -/* -** ALLOC_BLOCK_SIZE - adjust this size to suit your installation - it -** should be reasonably large otherwise you will be mallocing a lot. -*/ - -#define ALLOC_BLOCK_SIZE 64000 /*(62*1024)*/ - -/* -** alloc_hdr_t - Header for each block of memory. -*/ - -typedef struct alloc_hdr_s -{ - struct alloc_hdr_s *next; /* Next Block */ - char *block, /* Start of block */ - *free, /* Next free in block */ - *end; /* block + block size */ -} alloc_hdr_t; - -/* -** alloc_root_t - Header for the whole pool. -*/ - -typedef struct alloc_root_s -{ - alloc_hdr_t *first, /* First header in pool */ - *current; /* Current header */ -} alloc_root_t; - -/* -** root - Pointer to the current pool. -*/ - -static alloc_root_t *root; - - -/* -** AllocHdr() -** -** Private routine to allocate a header and memory block. -*/ - -static alloc_hdr_t *AllocHdr(void); - -static alloc_hdr_t * AllocHdr() -{ - alloc_hdr_t *hdr; - char *block; - - block = (char *) malloc(ALLOC_BLOCK_SIZE); - hdr = (alloc_hdr_t *) malloc(sizeof(alloc_hdr_t)); - - if (hdr == NULL || block == NULL) return(NULL); - hdr->block = block; - hdr->free = block; - hdr->next = NULL; - hdr->end = block + ALLOC_BLOCK_SIZE; - - return(hdr); -} - - -/* -** AllocInit() -** -** Create a new memory pool with one block. -** Returns pointer to the new pool. -*/ - -DLLEXPORT alloc_handle_t * AllocInit() -{ - alloc_handle_t *newpool; - root = (alloc_root_t *) malloc(sizeof(alloc_root_t)); - if (root == NULL) return(NULL); - if ( (root->first = AllocHdr()) == NULL) return(NULL); - root->current = root->first; - newpool = (alloc_handle_t *) root; - return(newpool); -} - - -/* -** Alloc() -** -** Use as a direct replacement for malloc(). Allocates -** memory from the current pool. -*/ - -DLLEXPORT char *Alloc(long size) -{ - alloc_hdr_t *hdr = root->current; - char *ptr; - - /* - ** Align to 4 byte boundary - should be ok for most machines. - ** Change this if your machine has weird alignment requirements. - */ - size = (size + 3) & 0xfffffffc; - - ptr = hdr->free; - hdr->free += size; - - /* Check if the current block is exhausted. */ - - if (hdr->free >= hdr->end) - { - /* Is the next block already allocated? */ - - if (hdr->next != NULL) - { - /* re-use block */ - hdr->next->free = hdr->next->block; - root->current = hdr->next; - } - else - { - /* extend the pool with a new block */ - if ( (hdr->next = AllocHdr()) == NULL) return(NULL); - root->current = hdr->next; - } - - /* set ptr to the first location in the next block */ - ptr = root->current->free; - root->current->free += size; - } - - /* Return pointer to allocated memory. */ - - return(ptr); -} - - -/* -** AllocSetPool() -** -** Change the current pool. Return the old pool. -*/ - -DLLEXPORT alloc_handle_t * AllocSetPool(alloc_handle_t *newpool) -{ - alloc_handle_t *old = (alloc_handle_t *) root; - root = (alloc_root_t *) newpool; - return(old); -} - - -/* -** AllocReset() -** -** Reset the current pool for re-use. No memory is freed, -** so this is very fast. -*/ - -DLLEXPORT void AllocReset() -{ - root->current = root->first; - root->current->free = root->current->block; -} - - -/* -** AllocFreePool() -** -** Free the memory used by the current pool. -** Don't use where AllocReset() could be used. -*/ - -DLLEXPORT void AllocFreePool() -{ - alloc_hdr_t *tmp, - *hdr = root->first; - - while (hdr != NULL) - { - tmp = hdr->next; - free((char *) hdr->block); - free((char *) hdr); - hdr = tmp; - } - free((char *) root); - root = NULL; -} +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: mempool.c + Description: a simple fast poooled memory allocation package + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 05/15/2019 + + This module is based code by Steve Hill in Graphics Gems III, + David Kirk (ed.), Academic Press, Boston, MA, 1992 + ****************************************************************************** +*/ + +#include + +#include "mempool.h" + +/* +** ALLOC_BLOCK_SIZE - adjust this size to suit your installation - it +** should be reasonably large otherwise you will be mallocing a lot. +*/ + +#define ALLOC_BLOCK_SIZE 64000 /*(62*1024)*/ + +struct MemBlock +{ + struct MemBlock *next; // Next block + char *block, // Start of block + *free, // Next free position in block + *end; // block + block size +}; + +struct Mempool +{ + struct MemBlock *first; + struct MemBlock *current; +}; + +static struct MemBlock* createMemBlock() +{ + struct MemBlock* memBlock = malloc(sizeof(struct MemBlock)); + if (memBlock) + { + memBlock->block = malloc(ALLOC_BLOCK_SIZE * sizeof(char)); + if (memBlock->block == NULL) + { + free(memBlock); + return NULL; + } + memBlock->free = memBlock->block; + memBlock->next = NULL; + memBlock->end = memBlock->block + ALLOC_BLOCK_SIZE; + } + return memBlock; +} + + +static void deleteMemBlock(struct MemBlock* memBlock) +{ + free(memBlock->block); + free(memBlock); +} + + +struct Mempool * mempool_create() +{ + struct Mempool *mempool; + mempool = (struct Mempool *)malloc(sizeof(struct Mempool)); + if (mempool == NULL) return NULL; + mempool->first = createMemBlock(); + mempool->current = mempool->first; + if (mempool->first == NULL) return NULL; + return mempool; +} + +void mempool_delete(struct Mempool *mempool) +{ + if (mempool == NULL) return; + while (mempool->first) + { + mempool->current = mempool->first->next; + deleteMemBlock(mempool->first); + mempool->first = mempool->current; + } + free(mempool); + mempool = NULL; +} + +void mempool_reset(struct Mempool *mempool) +{ + mempool->current = mempool->first; + mempool->current->free = mempool->current->block; +} + + +char * mempool_alloc(struct Mempool *mempool, size_t size) +{ + char* ptr; + + /* + ** Align to 4 byte boundary - should be ok for most machines. + ** Change this if your machine has weird alignment requirements. + */ + size = (size + 3) & 0xfffffffc; + + if (!mempool->current) return NULL; + ptr = mempool->current->free; + mempool->current->free += size; + + // Check if the current block is exhausted + + if (mempool->current->free >= mempool->current->end) + { + // Is the next block already allocated? + + if (mempool->current->next) + { + // re-use block + mempool->current->next->free = mempool->current->next->block; + mempool->current = mempool->current->next; + } + else + { + // extend the pool with a new block + mempool->current->next = createMemBlock(); + if (!mempool->current->next) return NULL; + mempool->current = mempool->current->next; + } + + // set ptr to the first location in the next block + + ptr = mempool->current->free; + mempool->current->free += size; + } + + // Return pointer to allocated memory + + return ptr; +} diff --git a/src/mempool.h b/src/mempool.h index ca04993..35a0210 100755 --- a/src/mempool.h +++ b/src/mempool.h @@ -1,43 +1,24 @@ /* -** mempool.h -** -** Header for mempool.c -** -** The type alloc_handle_t provides an opaque reference to the -** alloc pool - only the alloc routines know its structure. + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: mempool.h + Description: header for a simple pooled memory allocator + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 11/27/2018 + ****************************************************************************** */ #ifndef MEMPOOL_H #define MEMPOOL_H -#ifndef DLLEXPORT - #ifdef DLL - #ifdef __cplusplus - #define DLLEXPORT extern "C" __declspec(dllexport) - #else - #define DLLEXPORT __declspec(dllexport) __stdcall - #endif - #elif defined(CYGWIN) - #define DLLEXPORT __stdcall - #else - #ifdef __cplusplus - #define DLLEXPORT - #else - #define DLLEXPORT - #endif - #endif -#endif +struct Mempool; - -typedef struct -{ - long dummy; -} alloc_handle_t; - -DLLEXPORT alloc_handle_t *AllocInit(void); -DLLEXPORT char *Alloc(long); -DLLEXPORT alloc_handle_t *AllocSetPool(alloc_handle_t *); -DLLEXPORT void AllocReset(void); -DLLEXPORT void AllocFreePool(void); +struct Mempool * mempool_create(); +void mempool_delete(struct Mempool *mempool); +void mempool_reset(struct Mempool *mempool); +char * mempool_alloc(struct Mempool *mempool, size_t size); #endif \ No newline at end of file diff --git a/src/outfile/CMakeLists.txt b/src/outfile/CMakeLists.txt new file mode 100644 index 0000000..04587f9 --- /dev/null +++ b/src/outfile/CMakeLists.txt @@ -0,0 +1,48 @@ +# +# CMakeLists.txt - CMake configuration file for epanet-output library +# +# Created: March 9, 2018 +# Author: Michael E. Tryby +# US EPA ORD/NRMRL +# + + +# Sets for output directory for executables and libraries. +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + + +set(CMAKE_C_VISIBILITY_PRESET hidden) +set(CMAKE_CXX_VISIBILITY_PRESET hidden) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) +set(CMAKE_INCLUDE_CURRENT_DIR ON) + + +# Disable deprecation & link to multi-threaded static runtime library +IF (MSVC) + add_definitions(-D_CRT_SECURE_NO_DEPRECATE -MT) +ENDIF (MSVC) + + +# configure file groups +set(EPANET_OUT_SOURCES src/epanet_output.c + ../util/errormanager.c + ../util/filemanager.c + ../util/cstr_helper.c) + + +# the binary output file API +add_library(epanet-output SHARED ${EPANET_OUT_SOURCES}) +target_include_directories(epanet-output PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR}/../) + +include(GenerateExportHeader) +generate_export_header(epanet-output + BASE_NAME epanet_output + EXPORT_MACRO_NAME EXPORT_OUT_API + EXPORT_FILE_NAME epanet_output_export.h + STATIC_DEFINE SHARED_EXPORTS_BUILT_AS_STATIC) + +file(COPY ${CMAKE_CURRENT_BINARY_DIR}/epanet_output_export.h DESTINATION + ${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/src/outfile/include/epanet_output.h b/src/outfile/include/epanet_output.h new file mode 100644 index 0000000..9c06522 --- /dev/null +++ b/src/outfile/include/epanet_output.h @@ -0,0 +1,82 @@ +/* + * epanet_output.h - EPANET Output API + * + * Created on: Jun 4, 2014 + * + * Author: Michael E. Tryby + * US EPA - ORD/NRMRL + */ + +#ifndef EPANET_OUTPUT_H_ +#define EPANET_OUTPUT_H_ +/* Epanet Results binary file API */ + + +#define MAXFNAME 259 // Max characters in file name +#define MAXID 31 // Max characters in ID name + + +// This is an opaque pointer to struct. Do not access variables. +typedef void* ENR_Handle; + + +#include "epanet_output_enums.h" +#include "epanet_output_export.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +int EXPORT_OUT_API ENR_init(ENR_Handle* p_handle_out); + +int EXPORT_OUT_API ENR_open(ENR_Handle p_handle_in, const char* path); + +int EXPORT_OUT_API ENR_getVersion(ENR_Handle p_handle_in, int* int_out); + +int EXPORT_OUT_API ENR_getNetSize(ENR_Handle p_handle_in, int** int_out, int* int_dim); + +int EXPORT_OUT_API ENR_getUnits(ENR_Handle p_handle_in, ENR_Units t_enum, int* int_out); + +int EXPORT_OUT_API ENR_getTimes(ENR_Handle p_handle_in, ENR_Time t_enum, int* int_out); + +int EXPORT_OUT_API ENR_getElementName(ENR_Handle p_handle_in, ENR_ElementType t_enum, + int elementIndex, char** string_out, int* slen); + +int EXPORT_OUT_API ENR_getEnergyUsage(ENR_Handle p_handle_in, int pumpIndex, + int* int_out, float** float_out, int* int_dim); + +int EXPORT_OUT_API ENR_getNetReacts(ENR_Handle p_handle_in, float** float_out, int* int_dim); + + +int EXPORT_OUT_API ENR_getNodeSeries(ENR_Handle p_handle_in, int nodeIndex, ENR_NodeAttribute t_enum, + int startPeriod, int endPeriod, float** outValueSeries, int* dim); + +int EXPORT_OUT_API ENR_getLinkSeries(ENR_Handle p_handle_in, int linkIndex, ENR_LinkAttribute t_enum, + int startPeriod, int endPeriod, float** outValueSeries, int* dim); + +int EXPORT_OUT_API ENR_getNodeAttribute(ENR_Handle p_handle_in, int periodIndex, + ENR_NodeAttribute t_enum, float** outValueArray, int* dim); + +int EXPORT_OUT_API ENR_getLinkAttribute(ENR_Handle p_handle_in, int periodIndex, + ENR_LinkAttribute t_enum, float** outValueArray, int* dim); + +int EXPORT_OUT_API ENR_getNodeResult(ENR_Handle p_handle_in, int periodIndex, int nodeIndex, + float** float_out, int* int_dim); + +int EXPORT_OUT_API ENR_getLinkResult(ENR_Handle p_handle_in, int periodIndex, int linkIndex, + float** float_out, int* int_dim); + +int EXPORT_OUT_API ENR_close(ENR_Handle* p_handle_out); + +void EXPORT_OUT_API ENR_free(void** array); + +void EXPORT_OUT_API ENR_clearError(ENR_Handle p_handle_in); + +int EXPORT_OUT_API ENR_checkError(ENR_Handle p_handle_in, char** msg_buffer); + +#ifdef __cplusplus +} +#endif + +#endif /* EPANET_OUTPUT_H_ */ diff --git a/src/outfile/include/epanet_output_enums.h b/src/outfile/include/epanet_output_enums.h new file mode 100644 index 0000000..0fa012f --- /dev/null +++ b/src/outfile/include/epanet_output_enums.h @@ -0,0 +1,79 @@ +/* + * epanet_output_enums.h - EPANET Output API enums + * + * Created on: March 11, 2019 + * + * Author: Michael E. Tryby + * US EPA - ORD/NRMRL + */ + + +#ifndef EPANET_OUTPUT_ENUMS_H_ +#define EPANET_OUTPUT_ENUMS_H_ + + +typedef enum { + ENR_node = 1, + ENR_link = 2 +} ENR_ElementType; + +typedef enum { + ENR_flowUnits = 1, + ENR_pressUnits = 2, + ENR_qualUnits = 3 +} ENR_Units; + +typedef enum { + ENR_CFS = 0, + ENR_GPM = 1, + ENR_MGD = 2, + ENR_IMGD = 3, + ENR_AFD = 4, + ENR_LPS = 5, + ENR_LPM = 6, + ENR_MLD = 7, + ENR_CMH = 8, + ENR_CMD = 9 +} ENR_FlowUnits; + +typedef enum { + ENR_PSI = 0, + ENR_MTR = 1, + ENR_KPA = 2 +} ENR_PressUnits; + +typedef enum { + ENR_NONE = 0, + ENR_MGL = 1, + ENR_UGL = 2, + ENR_HOURS = 3, + ENR_PRCNT = 4 +} ENR_QualUnits; + +typedef enum { + ENR_reportStart = 1, + ENR_reportStep = 2, + ENR_simDuration = 3, + ENR_numPeriods = 4 +}ENR_Time; + +typedef enum { + ENR_demand = 1, + ENR_head = 2, + ENR_pressure = 3, + ENR_quality = 4 +} ENR_NodeAttribute; + +typedef enum { + ENR_flow = 1, + ENR_velocity = 2, + ENR_headloss = 3, + ENR_avgQuality = 4, + ENR_status = 5, + ENR_setting = 6, + ENR_rxRate = 7, + ENR_frctnFctr = 8 +} ENR_LinkAttribute; + + +#endif /* EPANET_OUTPUT_ENUMS_H_ */ diff --git a/src/outfile/src/epanet_output.c b/src/outfile/src/epanet_output.c new file mode 100644 index 0000000..7d46e03 --- /dev/null +++ b/src/outfile/src/epanet_output.c @@ -0,0 +1,939 @@ +//----------------------------------------------------------------------------- +// +// epanet_output.c -- API for reading results from EPANET binary output file +// +// Version: 0.40 +// Date 04/02/2019 +// 09/06/2017 +// 06/17/2016 +// 08/05/2014 +// 05/21/2014 +// +// Author: Michael E. Tryby +// US EPA - ORD/NRMRL +// +// Modified: Maurizio Cingi +// University of Modena +// +// Purpose: Output API provides an interface for retrieving results from an +// EPANET binary output file. +// +// Output data in the binary file are aligned on a 4 byte word size. +// Therefore all values both integers and reals are 32 bits in length. +// +// All values returned by the output API are indexed from 0 to n-1. This +// differs from how node and link elements are indexed by the binary file +// writer found in EPANET. Times correspond to reporting periods are indexed +// from 0 to number of reporting periods minus one. Node and link elements +// are indexed from 0 to nodeCount minus one and 0 to linkCount minus one +// respectively. +// +// The Output API functions provide a convenient way to select "slices" of +// data from the output file. As such they return arrays of data. The API +// functions automatically allocate memory for the array to be returned. The +// caller is responsible for deallocating memory. The function ENR_free() is +// provided for that purpose. +// +//----------------------------------------------------------------------------- + +#include +#include +#include + +#include "util/errormanager.h" +#include "util/filemanager.h" + +#include "epanet_output.h" +#include "messages.h" + + +// NOTE: These depend on machine data model and may change when porting +#define INT4 int // Must be a 4 byte / 32 bit integer type +#define REAL4 float // Must be a 4 byte / 32 bit real type +#define WORDSIZE 4 // Memory alignment 4 byte word size for both int and real + +#define MINNREC 14 // Minimum allowable number of records +#define PROLOGUE 884 // Preliminary fixed length section of header +#define MAXID_P1 32 // EPANET max characters in ID name PLUS 1 +#define MAXMSG_P1 80 // EPANET max characters in message text PLUS 1 + +#define NELEMENTTYPES 5 // Number of element types +#define NENERGYRESULTS 6 // Number of energy results +#define NNODERESULTS 4 // number of result fields for nodes +#define NLINKRESULTS 8 // number of result fields for links +#define NREACTRESULTS 4 // number of net reaction results + +#define MEMCHECK(x) (((x) == NULL) ? 411 : 0 ) + +// Typedefs for opaque pointer +typedef struct data_s { + INT4 nodeCount, tankCount, linkCount, pumpCount, valveCount, nPeriods; + F_OFF outputStartPos; // starting file position of output data + F_OFF bytesPerPeriod; // bytes saved per simulation time period + + error_handle_t *error_handle; + file_handle_t *file_handle; +} data_t; + +//----------------------------------------------------------------------------- +// Local functions +//----------------------------------------------------------------------------- +void errorLookup(int errcode, char* errmsg, int length); +int validateFile(ENR_Handle); +float getNodeValue(ENR_Handle, int, int, int); +float getLinkValue(ENR_Handle, int, int, int); + +float *newFloatArray(int n); +int *newIntArray(int n); +char *newCharArray(int n); + + +int EXPORT_OUT_API ENR_init(ENR_Handle *dp_handle) +// Purpose: Initialized pointer for the opaque ENR_Handle. +// +// Returns: Error code 0 on success, -1 on failure +// +// Note: The existence of this function has been carefully considered. +// Don't change it. +// +{ + int errorcode = 0; + data_t* p_data; + + // Allocate memory for private data + p_data = (data_t*)calloc(1, sizeof(data_t)); + + if (p_data != NULL){ + p_data->error_handle = create_error_manager(&errorLookup); + p_data->file_handle = create_file_manager(); + *dp_handle = p_data; + } + else + errorcode = -1; + + // TODO: Need to handle errors during initialization better. + return errorcode; +} + +int EXPORT_OUT_API ENR_close(ENR_Handle *p_handle) +/*------------------------------------------------------------------------ + ** Input: *p_handle = pointer to ENR_Handle struct + ** + ** Returns: Error code 0 on success, -1 on failure + ** + ** Purpose: Close the output binary file, dellocate ENR_Handle struc + ** and nullify pointer to ENR_Handle struct + ** + ** NOTE: ENR_close must be called before program end + ** after calling ENR_close data in ENR_Handle struct are no more + ** accessible + **------------------------------------------------------------------------- + */ +{ + data_t* p_data; + int errorcode = 0; + + p_data = (data_t*)(*p_handle); + + if (p_data == NULL || p_data->file_handle == NULL) + errorcode = -1; + + else + { + close_file(p_data->file_handle); + + delete_error_manager(p_data->error_handle); + delete_file_manager(p_data->file_handle); + + free(p_data); + + *p_handle = NULL; + } + + return errorcode; +} + +int EXPORT_OUT_API ENR_open(ENR_Handle p_handle, const char* path) +/*------------------------------------------------------------------------ + ** Input: path + ** Output: p_handle = pointer to ENR_Handle struct + ** Returns: warning / error code + ** Purpose: Opens the output binary file and reads prologue and epilogue + ** + ** NOTE: ENR_init must be called before anyother ENR_* functions + **------------------------------------------------------------------------- + */ +{ + int err, errorcode = 0; + F_OFF bytecount; + data_t* p_data; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + else + { + // Attempt to open binary output file for reading only + if ((open_file(p_data->file_handle, path, "rb")) != 0) + errorcode = 434; + + // Perform checks to insure the file is valid + else if ((err = validateFile(p_data)) != 0) errorcode = err; + + // If a warning is encountered read file header + if (errorcode < 400 ) { + // read network size + seek_file(p_data->file_handle, 2*WORDSIZE, SEEK_SET); + read_file(&(p_data->nodeCount), WORDSIZE, 1, p_data->file_handle); + read_file(&(p_data->tankCount), WORDSIZE, 1, p_data->file_handle); + read_file(&(p_data->linkCount), WORDSIZE, 1, p_data->file_handle); + read_file(&(p_data->pumpCount), WORDSIZE, 1, p_data->file_handle); + read_file(&(p_data->valveCount), WORDSIZE, 1, p_data->file_handle); + + // Compute positions and offsets for retrieving data + // fixed portion of header + title section + filenames + chem names + bytecount = PROLOGUE; + // node names + link names + bytecount += MAXID_P1*p_data->nodeCount + MAXID_P1*p_data->linkCount; + // network connectivity + tank nodes + tank areas + bytecount += 3*WORDSIZE*p_data->linkCount + 2*WORDSIZE*p_data->tankCount; + // node elevations + link lengths and link diameters + bytecount += WORDSIZE*p_data->nodeCount + 2*WORDSIZE*p_data->linkCount; + // pump energy summary + bytecount += 7*WORDSIZE*p_data->pumpCount + WORDSIZE; + p_data->outputStartPos= bytecount; + + p_data->bytesPerPeriod = NNODERESULTS*WORDSIZE*p_data->nodeCount + + NLINKRESULTS*WORDSIZE*p_data->linkCount; + } + } + // If error close the binary file + if (errorcode > 400) { + set_error(p_data->error_handle, errorcode); + ENR_close(&p_handle); + } + + return errorcode; +} + +int EXPORT_OUT_API ENR_getVersion(ENR_Handle p_handle, int* version) +/*------------------------------------------------------------------------ + ** Input: p_handle = pointer to ENR_Handle struct + ** Output: version Epanet version + ** Returns: error code + ** + ** Purpose: Returns Epanet version that wrote EBOFile + **--------------element codes------------------------------------------- + */ +{ + int errorcode = 0; + data_t* p_data; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + else + { + seek_file(p_data->file_handle, 1*WORDSIZE, SEEK_SET); + if (read_file(version, WORDSIZE, 1, p_data->file_handle) != 1) + errorcode = 436; + } + + return set_error(p_data->error_handle, errorcode); +} + +int EXPORT_OUT_API ENR_getNetSize(ENR_Handle p_handle, int** elementCount, int* length) +/*------------------------------------------------------------------------ + ** Input: p_handle = pointer to ENR_Handle struct + ** Output: array of element counts (nodes, tanks, links, pumps, valves) + ** Returns: error code + ** Purpose: Returns an array of count values + **------------------------------------------------------------------------- + */ +{ + int errorcode = 0; + int* temp = newIntArray(NELEMENTTYPES); + data_t* p_data; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + else + { + temp[0] = p_data->nodeCount; + temp[1] = p_data->tankCount; + temp[2] = p_data->linkCount; + temp[3] = p_data->pumpCount; + temp[4] = p_data->valveCount; + + *elementCount = temp; + *length = NELEMENTTYPES; + } + + return set_error(p_data->error_handle, errorcode); +} + +int EXPORT_OUT_API ENR_getUnits(ENR_Handle p_handle, ENR_Units code, int* unitFlag) +/*------------------------------------------------------------------------ + ** Input: p_handle = pointer to ENR_Handle struct + ** code + ** Output: count + ** Returns: unitFlag + ** Purpose: Returns pressure or flow unit flag + **--------------pressure unit flags---------------------------------------- + ** 0 = psi + ** 1 = meters + ** 2 = kPa + **------------------flow unit flags---------------------------------------- + ** 0 = cubic feet/second + ** 1 = gallons/minute + ** 2 = million gallons/day + ** 3 = Imperial million gallons/day + ** 4 = acre-ft/day + ** 5 = liters/second + ** 6 = liters/minute + ** 7 = megaliters/day + ** 8 = cubic meters/hour + ** 9 = cubic meters/day + **------------------------------------------------------------------------- + */ +{ + int errorcode = 0; + F_OFF offset; + char temp[MAXID_P1]; + data_t* p_data; + + *unitFlag = -1; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + else + { + switch (code) + { + case ENR_flowUnits: + seek_file(p_data->file_handle, 9*WORDSIZE, SEEK_SET); + read_file(unitFlag, WORDSIZE, 1, p_data->file_handle); + break; + + case ENR_pressUnits: + seek_file(p_data->file_handle, 10*WORDSIZE, SEEK_SET); + read_file(unitFlag, WORDSIZE, 1, p_data->file_handle); + break; + + case ENR_qualUnits: + offset = 7*WORDSIZE; + seek_file(p_data->file_handle, offset, SEEK_SET); + read_file(unitFlag, WORDSIZE, 1, p_data->file_handle); + + if (*unitFlag == 0) *unitFlag = ENR_NONE; + + else if (*unitFlag == 1) { + offset = 15*WORDSIZE + 3*MAXMSG_P1 + 2*(MAXFNAME+1) + MAXID_P1; + seek_file(p_data->file_handle, offset, SEEK_SET); + read_file(temp, MAXID_P1, 1, p_data->file_handle); + + if (!strcmp(temp, "mg/L")) *unitFlag = ENR_MGL; + else *unitFlag = ENR_UGL; + } + + else if (*unitFlag == 2) *unitFlag = ENR_HOURS; + + else *unitFlag = ENR_PRCNT; + + break; + + default: errorcode = 421; + } + } + return set_error(p_data->error_handle, errorcode); +} + +int EXPORT_OUT_API ENR_getTimes(ENR_Handle p_handle, ENR_Time code, int* time) +/*------------------------------------------------------------------------ + ** Input: p_handle = pointer to ENR_Handle struct + ** code = element code + ** Output: time + ** Returns: error code + ** Purpose: Returns report and simulation time related parameters. + **------------------------------------------------------------------------- + */ +{ + int errorcode = 0; + data_t* p_data; + + *time = -1; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + else + { + switch (code) + { + case ENR_reportStart: + seek_file(p_data->file_handle, 12*WORDSIZE, SEEK_SET); + read_file(time, WORDSIZE, 1, p_data->file_handle); + break; + + case ENR_reportStep: + seek_file(p_data->file_handle, 13*WORDSIZE, SEEK_SET); + read_file(time, WORDSIZE, 1, p_data->file_handle); + break; + + case ENR_simDuration: + seek_file(p_data->file_handle, 14*WORDSIZE, SEEK_SET); + read_file(time, WORDSIZE, 1, p_data->file_handle); + break; + + case ENR_numPeriods: + *time = p_data->nPeriods; + break; + + default: + errorcode = 421; + } + } + return set_error(p_data->error_handle, errorcode); +} + +int EXPORT_OUT_API ENR_getChemData(ENR_Handle p_handle, char** name, int* length) +{ + return 0; +} + +int EXPORT_OUT_API ENR_getElementName(ENR_Handle p_handle, ENR_ElementType type, + int elementIndex, char** name, int* length) +/*------------------------------------------------------------------------ + ** Input: p_handle = pointer to ENR_Handle struct + ** type = ENR_node or ENR_link + ** elementIndex from 1 to nodeCount or 1 to linkCount + ** Output: name = elementName + ** Returns: error code + ** Purpose: Retrieves Name of a specified node or link element + ** NOTE: 'name' must be able to hold MAXID characters + ** TODO: Takes EPANET indexing from 1 to n not 0 to n-1 + **------------------------------------------------------------------------- + */ +{ + F_OFF offset; + int errorcode = 0; + char* temp; + data_t* p_data; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + /* Allocate memory for name */ + else if MEMCHECK(temp = newCharArray(MAXID_P1)) errorcode = 411; + + else + { + switch (type) + { + case ENR_node: + if (elementIndex < 1 || elementIndex > p_data->nodeCount) + errorcode = 423; + else offset = PROLOGUE + (elementIndex - 1)*MAXID_P1; + break; + + case ENR_link: + if (elementIndex < 1 || elementIndex > p_data->linkCount) + errorcode = 423; + else + offset = PROLOGUE + p_data->nodeCount*MAXID_P1 + + (elementIndex - 1)*MAXID_P1; + break; + + default: + errorcode = 421; + } + + if (!errorcode) + { + seek_file(p_data->file_handle, offset, SEEK_SET); + read_file(temp, 1, MAXID_P1, p_data->file_handle); + + *name = temp; + *length = MAXID_P1; + } + } + + return set_error(p_data->error_handle, errorcode); +} + +int EXPORT_OUT_API ENR_getEnergyUsage(ENR_Handle p_handle, int pumpIndex, + int* linkIndex, float** outValues, int* length) +/* + * Purpose: Returns pump energy usage statistics. + * + * Energy usage statistics: + * 0 = pump utilization + * 1 = avg. efficiency + * 2 = avg. kW/flow + * 3 = avg. kwatts + * 4 = peak kwatts + * 5 = cost/day + */ +{ + F_OFF offset; + int errorcode = 0; + float* temp; + data_t* p_data; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + // Check for valid pump index + else if (pumpIndex < 1 || pumpIndex > p_data->pumpCount) errorcode = 423; + // Check memory for outValues + else if MEMCHECK(temp = newFloatArray(NENERGYRESULTS)) errorcode = 411; + + else + { + // Position offset to start of pump energy summary + offset = p_data->outputStartPos - (p_data->pumpCount*(WORDSIZE + 6*WORDSIZE) + WORDSIZE); + // Adjust offset by pump index + offset += (pumpIndex - 1)*(WORDSIZE + 6*WORDSIZE); + + // Power summary is 1 int and 6 floats for each pump + seek_file(p_data->file_handle, offset, SEEK_SET); + read_file(linkIndex, WORDSIZE, 1, p_data->file_handle); + read_file(temp, WORDSIZE, 6, p_data->file_handle); + + *outValues = temp; + *length = NENERGYRESULTS; + } + return set_error(p_data->error_handle, errorcode); +} + +int EXPORT_OUT_API ENR_getNetReacts(ENR_Handle p_handle, float** outValues, int* length) +/* + * Purpose: Returns network wide average reaction rates and average + * source mass inflow: + * 0 = bulk + * 1 = wall + * 2 = tank + * 3 = source + */ +{ + F_OFF offset; + int errorcode = 0; + float* temp; + data_t* p_data; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + // Check memory for outValues + else if MEMCHECK(temp = newFloatArray(NREACTRESULTS)) errorcode = 411; + + else + { + // Reaction summary is 4 floats located right before epilogue. + // This offset is relative to the end of the file. + offset = - 3*WORDSIZE - 4*WORDSIZE; + seek_file(p_data->file_handle, offset, SEEK_END); + read_file(temp, WORDSIZE, 4, p_data->file_handle); + + *outValues = temp; + *length = NREACTRESULTS; + } + return set_error(p_data->error_handle, errorcode); +} + +void EXPORT_OUT_API ENR_free(void** array) +// +// Purpose: Frees memory allocated by API calls +// +{ + if (array != NULL) { + free(*array); + *array = NULL; + } +} + +int EXPORT_OUT_API ENR_getNodeSeries(ENR_Handle p_handle, int nodeIndex, ENR_NodeAttribute attr, + int startPeriod, int endPeriod, float** outValueSeries, int* dim) +// +// Purpose: Get time series results for particular attribute. Specify series +// start and length using seriesStart and seriesLength respectively. +// +// NOTE: The node index argument corresponds to the EPANET node index from 1 to +// nnodes. The series returned is indexed from 0 to nperiods - 1. +// +{ + int k, length, errorcode = 0; + float* temp; + data_t* p_data; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + else if (nodeIndex < 1 || nodeIndex > p_data->nodeCount) errorcode = 423; + else if (startPeriod < 0 || endPeriod >= p_data->nPeriods || + endPeriod <= startPeriod) errorcode = 422; + // Check memory for outValues + else if MEMCHECK(temp = newFloatArray(length = endPeriod - startPeriod)) errorcode = 411; + else + { + // loop over and build time series + for (k = 0; k < length; k++) + temp[k] = getNodeValue(p_handle, startPeriod + k, + nodeIndex, attr); + + *outValueSeries = temp; + *dim = length; + } + return set_error(p_data->error_handle, errorcode); +} + +int EXPORT_OUT_API ENR_getLinkSeries(ENR_Handle p_handle, int linkIndex, ENR_LinkAttribute attr, + int startPeriod, int endPeriod, float** outValueSeries, int* dim) +// +// Purpose: Get time series results for particular attribute. Specify series +// start and length using seriesStart and seriesLength respectively. +// +// NOTE: +// The link index argument corresponds to the EPANET link index from 1 to +// nlinks. The series returned is indexed from 0 to nperiods - 1. +// +{ + int k, length, errorcode = 0; + float* temp; + data_t* p_data; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + else if (linkIndex < 1 || linkIndex > p_data->linkCount) errorcode = 423; + else if (startPeriod < 0 || endPeriod >= p_data->nPeriods || + endPeriod <= startPeriod) errorcode = 422; + // Check memory for outValues + else if MEMCHECK(temp = newFloatArray(length = endPeriod - startPeriod)) errorcode = 411; + else + { + // loop over and build time series + for (k = 0; k < length; k++) + temp[k] = getLinkValue(p_handle, startPeriod + k, linkIndex, attr); + + *outValueSeries = temp; + *dim = length; + } + return set_error(p_data->error_handle, errorcode); +} + +int EXPORT_OUT_API ENR_getNodeAttribute(ENR_Handle p_handle, int periodIndex, + ENR_NodeAttribute attr, float** outValueArray, int* length) +// +// Purpose: +// For all nodes at given time, get a particular attribute +// +// Returns: +// Error code +// OutValueArray of results is indexed from 0 to nodeCount +// +// Warning: +// Caller must free memory allocated for outValueArray +// +// NOTE: +// The array returned is indexed from 0 to nnodes - 1. So to access +// node values by their EPANET index, the index value must be +// decremented by one. +// +{ + F_OFF offset; + int errorcode = 0; + float * temp; + data_t* p_data; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + // if the time index is out of range return an error + else if (periodIndex < 0 || periodIndex >= p_data->nPeriods) errorcode = 422; + // Check memory for outValues + else if MEMCHECK(temp = newFloatArray(p_data->nodeCount)) errorcode = 411; + + else + { + // calculate byte offset to start time for series + offset = p_data->outputStartPos + (periodIndex)*p_data->bytesPerPeriod; + // add offset for node and attribute + offset += ((attr - 1)*p_data->nodeCount)*WORDSIZE; + + seek_file(p_data->file_handle, offset, SEEK_SET); + read_file(temp, WORDSIZE, p_data->nodeCount, p_data->file_handle); + + *outValueArray = temp; + *length = p_data->nodeCount; + } + + return set_error(p_data->error_handle, errorcode); +} + +int EXPORT_OUT_API ENR_getLinkAttribute(ENR_Handle p_handle, int periodIndex, + ENR_LinkAttribute attr, float** outValueArray, int* length) +// +// Purpose: +// For all links at given time, get a particular attribute +// +// Returns: +// Error code +// OutValueArray of results is indexed from 0 to linkCount +// +// Warning: +// Caller must free memory allocated for outValueArray +// +// NOTE: +// The array returned is indexed from 0 to nlinks - 1. So to access +// link values by their EPANET index, the index value must be +// decremented by one. +// +{ + F_OFF offset; + int errorcode = 0; + float* temp; + data_t* p_data; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + // if the time index is out of range return an error + else if (periodIndex < 0 || periodIndex >= p_data->nPeriods) errorcode = 422; + // Check memory for outValues + else if MEMCHECK(temp = newFloatArray(p_data->linkCount)) errorcode = 411; + + else + { + // calculate byte offset to start time for series + offset = p_data->outputStartPos + (periodIndex)*p_data->bytesPerPeriod + + (NNODERESULTS*p_data->nodeCount)*WORDSIZE; + // add offset for link and attribute + offset += ((attr - 1)*p_data->linkCount)*WORDSIZE; + + seek_file(p_data->file_handle, offset, SEEK_SET); + read_file(temp, WORDSIZE, p_data->linkCount, p_data->file_handle); + + *outValueArray = temp; + *length = p_data->linkCount; + } + + return set_error(p_data->error_handle, errorcode); +} + +int EXPORT_OUT_API ENR_getNodeResult(ENR_Handle p_handle, int periodIndex, + int nodeIndex, float** outValueArray, int* length) +// +// Purpose: For a node at given time, get all attributes. +// +// NOTE: +// +{ + int j, errorcode = 0; + float* temp; + data_t* p_data; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + else if (periodIndex < 0 || periodIndex >= p_data->nPeriods) errorcode = 422; + else if (nodeIndex < 1 || nodeIndex > p_data->nodeCount) errorcode = 423; + else if MEMCHECK(temp = newFloatArray(NNODERESULTS)) errorcode = 411; + else + { + for (j = 0; j < NNODERESULTS; j++) + temp[j] = getNodeValue(p_handle, periodIndex, nodeIndex, j); + + *outValueArray = temp; + *length = NNODERESULTS; + } + + return set_error(p_data->error_handle, errorcode); +} + +int EXPORT_OUT_API ENR_getLinkResult(ENR_Handle p_handle, int periodIndex, + int linkIndex, float** outValueArray, int* length) +// +// Purpose: For a link at given time, get all attributes +// +{ + int j, errorcode = 0; + float* temp; + data_t* p_data; + + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + else if (periodIndex < 0 || periodIndex >= p_data->nPeriods) errorcode = 422; + else if (linkIndex < 1 || linkIndex > p_data->linkCount) errorcode = 423; + else if MEMCHECK(temp = newFloatArray(NLINKRESULTS)) errorcode = 411; + else + { + for (j = 0; j < NLINKRESULTS; j++) + temp[j] = getLinkValue(p_handle, periodIndex, linkIndex, j); + + *outValueArray = temp; + *length = NLINKRESULTS; + } + return set_error(p_data->error_handle, errorcode); +} + +void EXPORT_OUT_API ENR_clearError(ENR_Handle p_handle) +{ + data_t* p_data; + + p_data = (data_t*)p_handle; + clear_error(p_data->error_handle); +} + +int EXPORT_OUT_API ENR_checkError(ENR_Handle p_handle, char** msg_buffer) +{ + data_t* p_data; + p_data = (data_t*)p_handle; + + if (p_data == NULL) return -1; + + return check_error(p_data->error_handle, msg_buffer); +} + + +void errorLookup(int errcode, char* dest_msg, int dest_len) +// +// Purpose: takes error code returns error message +// +{ + const char* msg; + + switch (errcode) + { + case 10: msg = WARN10; + break; + case 411: msg = ERR411; + break; + case 412: msg = ERR412; + break; + case 421: msg = ERR421; + break; + case 422: msg = ERR422; + break; + case 423: msg = ERR423; + break; + case 434: msg = ERR434; + break; + case 435: msg = ERR435; + break; + case 436: msg = ERR436; + break; + default: msg = ERRERR; + } + + strncpy(dest_msg, msg, MSG_MAXLEN); +} + +int validateFile(ENR_Handle p_handle) +// Returns: +// Error code: 435, 436 +// Warning code: 10 +{ + INT4 magic1, magic2, hydcode; + int errorcode = 0; + F_OFF filepos; + data_t* p_data; + + p_data = (data_t*)p_handle; + + // Read magic number from beginning of file + seek_file(p_data->file_handle, 0L, SEEK_SET); + read_file(&magic1, WORDSIZE, 1, p_data->file_handle); + + // Fast forward to end and read file epilogue + seek_file(p_data->file_handle, -3*WORDSIZE, SEEK_END); + read_file(&(p_data->nPeriods), WORDSIZE, 1, p_data->file_handle); + read_file(&hydcode, WORDSIZE, 1, p_data->file_handle); + read_file(&magic2, WORDSIZE, 1, p_data->file_handle); + + filepos = tell_file(p_data->file_handle); + + // Is the file an EPANET binary file? + if (magic1 != magic2) errorcode = 435; + // Does the binary file contain results? + else if (filepos < MINNREC*WORDSIZE || p_data->nPeriods == 0) + errorcode = 436; + // Issue warning if there were problems with the model run. + else if (hydcode != 0) errorcode = 10; + + return errorcode; +} + +float getNodeValue(ENR_Handle p_handle, int periodIndex, int nodeIndex, + int attr) +// +// Purpose: Retrieves an attribute value at a specified node and time +// +{ + F_OFF offset; + REAL4 y; + data_t* p_data; + + p_data = (data_t*)p_handle; + + // calculate byte offset to start time for series + offset = p_data->outputStartPos + periodIndex*p_data->bytesPerPeriod; + // add byte position for attribute and node + offset += ((attr - 1)*p_data->nodeCount + (nodeIndex - 1))*WORDSIZE; + + seek_file(p_data->file_handle, offset, SEEK_SET); + read_file(&y, WORDSIZE, 1, p_data->file_handle); + + return y; +} + +float getLinkValue(ENR_Handle p_handle, int periodIndex, int linkIndex, + int attr) +// +// Purpose: Retrieves an attribute value at a specified link and time +// +{ + F_OFF offset; + REAL4 y; + data_t* p_data; + + p_data = (data_t*)p_handle; + + // Calculate byte offset to start time for series + offset = p_data->outputStartPos + periodIndex*p_data->bytesPerPeriod + + (NNODERESULTS*p_data->nodeCount)*WORDSIZE; + // add byte position for attribute and link + offset += ((attr - 1)*p_data->linkCount + (linkIndex - 1))*WORDSIZE; + + seek_file(p_data->file_handle, offset, SEEK_SET); + read_file(&y, WORDSIZE, 1, p_data->file_handle); + + return y; +} + +float* newFloatArray(int n) +// +// Warning: Caller must free memory allocated by this function. +// +{ + return (float*) malloc((n)*sizeof(float)); +} + +int* newIntArray(int n) +// +// Warning: Caller must free memory allocated by this function. +// +{ + return (int*) malloc((n)*sizeof(int)); +} + +char* newCharArray(int n) +// +// Warning: Caller must free memory allocated by this function. +// +{ + return (char*) malloc((n)*sizeof(char)); +} diff --git a/src/outfile/src/messages.h b/src/outfile/src/messages.h new file mode 100644 index 0000000..bc04a7d --- /dev/null +++ b/src/outfile/src/messages.h @@ -0,0 +1,29 @@ +/* + * messages.h - EPANET + * + * Created on: June 1, 2017 + * + * Author: Michael E. Tryby + * US EPA - ORD/NRMRL + */ + +#ifndef MESSAGES_H_ +#define MESSAGES_H_ +/*------------------- Error Messages --------------------*/ +#define MSG_MAXLEN 53 + +#define WARN10 "Warning: model run issued warnings" + +#define ERR411 "Input Error 411: no memory allocated for results" +#define ERR412 "Input Error 412: binary file hasn't been opened" +#define ERR421 "Input Error 421: invalid parameter code" +#define ERR422 "Input Error 422: reporting period index out of range" +#define ERR423 "Input Error 423: element index out of range" + +#define ERR434 "File Error 434: unable to open binary file" +#define ERR435 "File Error 435: invalid binary file type" +#define ERR436 "File Error 436: no results in binary file" + +#define ERRERR "Error: An unknown error has occurred" + +#endif /* MESSAGES_H_ */ diff --git a/src/output.c b/src/output.c old mode 100755 new mode 100644 index ced8c73..1e9a6ab --- a/src/output.c +++ b/src/output.c @@ -1,707 +1,852 @@ -/* -********************************************************************* - -OUTPUT.C -- Binary File Transfer Routines for EPANET Program - -VERSION: 2.00 -DATE: 5/8/00 - 8/15/07 (2.00.11) -AUTHOR: L. Rossman - US EPA - NRMRL - -******************************************************************** -*/ - -#include -#include -#ifndef __APPLE__ -#include -#else -#include -#endif -#include -#include "text.h" -#include "types.h" -#include "funcs.h" -#define EXTERN extern -#include "hash.h" -#include "vars.h" - -/* Macro to write x[1] to x[n] to file OutFile: */ -#define FSAVE(n) (fwrite(x+1,sizeof(REAL4),(n),OutFile)) - -int savenetdata() -/* -**--------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: saves input data in original units to binary -** output file using fixed-sized (4-byte) records -**--------------------------------------------------------------- -*/ -{ - int i,nmax; - INT4 *ibuf; - REAL4 *x; - int errcode = 0; - - /* Allocate buffer arrays */ - nmax = MAX(Nnodes,Nlinks) + 1; - nmax = MAX(nmax,15); - ibuf = (INT4 *) calloc(nmax, sizeof(INT4)); - x = (REAL4 *) calloc(nmax, sizeof(REAL4)); - ERRCODE(MEMCHECK(ibuf)); - ERRCODE(MEMCHECK(x)); - - if (!errcode) - { - /* Write integer variables to OutFile */ - ibuf[0] = MAGICNUMBER; - -/*** CODEVERSION replaces VERSION ***/ //(2.00.11 - LR) - ibuf[1] = CODEVERSION; //(2.00.11 - LR) - - ibuf[2] = Nnodes; - ibuf[3] = Ntanks; - ibuf[4] = Nlinks; - ibuf[5] = Npumps; - ibuf[6] = Nvalves; - ibuf[7] = Qualflag; - ibuf[8] = TraceNode; - ibuf[9] = Flowflag; - ibuf[10] = Pressflag; - ibuf[11] = Tstatflag; - ibuf[12] = Rstart; - ibuf[13] = Rstep; - ibuf[14] = Dur; - fwrite(ibuf,sizeof(INT4),15,OutFile); - - /* Write string variables to OutFile */ - fwrite(Title[0],sizeof(char),MAXMSG+1,OutFile); - fwrite(Title[1],sizeof(char),MAXMSG+1,OutFile); - fwrite(Title[2],sizeof(char),MAXMSG+1,OutFile); - fwrite(InpFname,sizeof(char),MAXFNAME+1,OutFile); - fwrite(Rpt2Fname,sizeof(char),MAXFNAME+1,OutFile); - fwrite(ChemName,sizeof(char),MAXID+1,OutFile); - fwrite(Field[QUALITY].Units,sizeof(char),MAXID+1,OutFile); - - /* Write node ID information to OutFile */ - for (i=1; i<=Nnodes; i++) - fwrite(Node[i].ID, MAXID+1, 1, OutFile); - - /* Write link information to OutFile */ - /* (Note: first transfer values to buffer array,*/ - /* then fwrite buffer array at offset of 1 ) */ - for (i=1; i<=Nlinks; i++) - fwrite(Link[i].ID, MAXID+1, 1, OutFile); - for (i=1; i<=Nlinks; i++) ibuf[i] = Link[i].N1; - fwrite(ibuf+1,sizeof(INT4),Nlinks,OutFile); - for (i=1; i<=Nlinks; i++) ibuf[i] = Link[i].N2; - fwrite(ibuf+1,sizeof(INT4),Nlinks,OutFile); - for (i=1; i<=Nlinks; i++) ibuf[i] = Link[i].Type; - fwrite(ibuf+1,sizeof(INT4),Nlinks,OutFile); - - /* Write tank information to OutFile.*/ - for (i=1; i<=Ntanks; i++) ibuf[i] = Tank[i].Node; - fwrite(ibuf+1,sizeof(INT4),Ntanks,OutFile); - for (i=1; i<=Ntanks; i++) x[i] = (REAL4)Tank[i].A; - FSAVE(Ntanks); - - /* Save node elevations to OutFile.*/ - for (i=1; i<=Nnodes; i++) x[i] = (REAL4)(Node[i].El*Ucf[ELEV]); - FSAVE(Nnodes); - - /* Save link lengths & diameters to OutFile.*/ - for (i=1; i<=Nlinks; i++) x[i] = (REAL4)(Link[i].Len*Ucf[ELEV]); - FSAVE(Nlinks); - for (i=1; i<=Nlinks; i++) - { - if (Link[i].Type != PUMP) - x[i] = (REAL4)(Link[i].Diam*Ucf[DIAM]); - else - x[i] = 0.0f; - } - if (FSAVE(Nlinks) < (unsigned)Nlinks) errcode = 308; - } - - /* Free memory used for buffer arrays */ - free(ibuf); - free(x); - return(errcode); -} - - -int savehyd(long *htime) -/* -**-------------------------------------------------------------- -** Input: *htime = current time -** Output: returns error code -** Purpose: saves current hydraulic solution to file HydFile -** in binary format -**-------------------------------------------------------------- -*/ -{ - int i; - INT4 t; - int errcode = 0; - REAL4 *x = (REAL4 *) calloc(MAX(Nnodes,Nlinks) + 1, sizeof(REAL4)); - if ( x == NULL ) return 101; - - /* Save current time (htime) */ - t = *htime; - fwrite(&t,sizeof(INT4),1,HydFile); - - /* Save current nodal demands (D) */ - for (i=1; i<=Nnodes; i++) x[i] = (REAL4)NodeDemand[i]; - fwrite(x+1,sizeof(REAL4),Nnodes,HydFile); - - /* Copy heads (H) to buffer of floats (x) and save buffer */ - for (i=1; i<=Nnodes; i++) x[i] = (REAL4)NodeHead[i]; - fwrite(x+1,sizeof(REAL4),Nnodes,HydFile); - - /* Force flow in closed links to be zero then save flows */ - for (i=1; i<=Nlinks; i++) - { - if (LinkStatus[i] <= CLOSED) x[i] = 0.0f; - else x[i] = (REAL4)Q[i]; - - } - fwrite(x+1,sizeof(REAL4),Nlinks,HydFile); - - /* Copy link status to buffer of floats (x) & write buffer */ - for (i=1; i<=Nlinks; i++) x[i] = (REAL4)LinkStatus[i]; - fwrite(x+1,sizeof(REAL4),Nlinks,HydFile); - - /* Save link settings & check for successful write-to-disk */ - /* (We assume that if any of the previous fwrites failed, */ - /* then this one will also fail.) */ - for (i=1; i<=Nlinks; i++) x[i] = (REAL4)LinkSetting[i]; - if (fwrite(x+1,sizeof(REAL4),Nlinks,HydFile) < (unsigned)Nlinks) - errcode = 308; - free(x); - fflush(HydFile); /* added TNT */ - return(errcode); -} /* End of savehyd */ - - -int savehydstep(long *hydstep) -/* -**-------------------------------------------------------------- -** Input: *hydstep = next time step -** Output: returns error code -** Purpose: saves next hydraulic timestep to file HydFile -** in binary format -**-------------------------------------------------------------- -*/ -{ - INT4 t; - int errcode = 0; - t = *hydstep; - if (fwrite(&t,sizeof(INT4),1,HydFile) < 1) errcode = 308; - if (t == 0) fputc(EOFMARK, HydFile); - fflush(HydFile); /* added TNT */ - return(errcode); -} - - -int saveenergy() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: saves energy usage by each pump to OutFile -** in binary format -**-------------------------------------------------------------- -*/ -{ - int i,j; - INT4 index; - REAL4 x[6]; /* work array */ - double hdur, /* total duration in hours */ - t; /* pumping duration */ - - hdur = Dur / 3600.0; - for (i=1; i<=Npumps; i++) - { - if (hdur == 0.0) - { - for (j=0; j<5; j++) x[j] = (REAL4)Pump[i].Energy[j]; - x[5] = (REAL4)(Pump[i].Energy[5]*24.0); - } - else - { - t = Pump[i].Energy[0]; - x[0] = (REAL4)(t/hdur); - x[1] = 0.0f; - x[2] = 0.0f; - x[3] = 0.0f; - x[4] = 0.0f; - if (t > 0.0) - { - x[1] = (REAL4)(Pump[i].Energy[1]/t); - x[2] = (REAL4)(Pump[i].Energy[2]/t); - x[3] = (REAL4)(Pump[i].Energy[3]/t); - } - x[4] = (REAL4)Pump[i].Energy[4]; - x[5] = (REAL4)(Pump[i].Energy[5]*24.0/hdur); - } - x[0] *= 100.0f; - x[1] *= 100.0f; - /* Compute Kw-hr per MilGal (or per cubic meter) */ - if (Unitsflag == SI) x[2] *= (REAL4)(1000.0/LPSperCFS/3600.0); - else x[2] *= (REAL4)(1.0e6/GPMperCFS/60.0); - for (j=0; j<6; j++) Pump[i].Energy[j] = x[j]; - index = Pump[i].Link; - if (fwrite(&index,sizeof(INT4),1,OutFile) < 1) return(308); - if (fwrite(x, sizeof(REAL4), 6, OutFile) < 6) return(308); - } - Emax = Emax*Dcost; - x[0] = (REAL4)Emax; - if (fwrite(&x[0], sizeof(REAL4), 1, OutFile) < 1) return(308); - return(0); -} - - -int readhyd(long *hydtime) -/* -**-------------------------------------------------------------- -** Input: none -** Output: *hydtime = time of hydraulic solution -** Returns: 1 if successful, 0 if not -** Purpose: reads hydraulic solution from file HydFile -** -** NOTE: A hydraulic solution consists of the current time -** (hydtime), nodal demands (D) and heads (H), link -** flows (Q), link status (S), and link settings (K). -**-------------------------------------------------------------- -*/ -{ - int i; - INT4 t; - int result = 1; - REAL4 *x = (REAL4 *) calloc(MAX(Nnodes,Nlinks) + 1, sizeof(REAL4)); - if ( x == NULL ) return 0; - - if (fread(&t,sizeof(INT4),1,HydFile) < 1) result = 0; - *hydtime = t; - - if (fread(x+1,sizeof(REAL4),Nnodes,HydFile) < (unsigned)Nnodes) result = 0; - else for (i=1; i<=Nnodes; i++) NodeDemand[i] = x[i]; - - if (fread(x+1,sizeof(REAL4),Nnodes,HydFile) < (unsigned)Nnodes) result = 0; - else for (i=1; i<=Nnodes; i++) NodeHead[i] = x[i]; - - if (fread(x+1,sizeof(REAL4),Nlinks,HydFile) < (unsigned)Nlinks) result = 0; - else for (i=1; i<=Nlinks; i++) Q[i] = x[i]; - - if (fread(x+1,sizeof(REAL4),Nlinks,HydFile) < (unsigned)Nlinks) result = 0; - else for (i=1; i<=Nlinks; i++) LinkStatus[i] = (char) x[i]; - - if (fread(x+1,sizeof(REAL4),Nlinks,HydFile) < (unsigned)Nlinks) result = 0; - else for (i=1; i<=Nlinks; i++) LinkSetting[i] = x[i]; - - free(x); - return result; -} /* End of readhyd */ - - -int readhydstep(long *hydstep) -/* -**-------------------------------------------------------------- -** Input: none -** Output: *hydstep = next hydraulic time step (sec) -** Returns: 1 if successful, 0 if not -** Purpose: reads hydraulic time step from file HydFile -**-------------------------------------------------------------- -*/ -{ - INT4 t; - if (fread(&t,sizeof(INT4),1,HydFile) < 1) return(0); - *hydstep = t; - return(1); -} /* End of readhydstep */ - - -int saveoutput() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: writes simulation results to output file -**-------------------------------------------------------------- -*/ -{ - int j; - int errcode = 0; - REAL4 *x = (REAL4 *) calloc(MAX(Nnodes,Nlinks) + 1, sizeof(REAL4)); - if ( x == NULL ) return 101; - - /* Write out node results, then link results */ - for (j=DEMAND; j<=QUALITY; j++) ERRCODE(nodeoutput(j,x,Ucf[j])); - for (j=FLOW; j<=FRICTION; j++) ERRCODE(linkoutput(j,x,Ucf[j])); - free(x); - return(errcode); -} /* End of saveoutput */ - - -int nodeoutput(int j, REAL4 *x, double ucf) -/* -**-------------------------------------------------------------- -** Input: j = type of node variable -** *x = buffer for node values -** ucf = units conversion factor -** Output: returns error code -** Purpose: writes results for node variable j to output file -**----------------------------------------------------------------- -*/ -{ - int i; - - /* Load computed results (in proper units) into buffer x */ - switch(j) - { - case DEMAND: for (i=1; i<=Nnodes; i++) - x[i] = (REAL4)(NodeDemand[i]*ucf); - break; - case HEAD: for (i=1; i<=Nnodes; i++) - x[i] = (REAL4)(NodeHead[i]*ucf); - break; - case PRESSURE: for (i=1; i<=Nnodes; i++) - x[i] = (REAL4)((NodeHead[i] - Node[i].El)*ucf); - break; - case QUALITY: for (i=1; i<=Nnodes; i++) - x[i] = (REAL4)(NodeQual[i]*ucf); - } - - /* Write x[1] to x[Nnodes] to output file */ - if (fwrite(x+1,sizeof(REAL4),Nnodes,TmpOutFile) < (unsigned)Nnodes) - return(308); - return(0); -} /* End of nodeoutput */ - - -int linkoutput(int j, REAL4 *x, double ucf) -/* -**---------------------------------------------------------------- -** Input: j = type of link variable -** *x = buffer for link values -** ucf = units conversion factor -** Output: returns error code -** Purpose: writes results for link variable j to output file -**---------------------------------------------------------------- -*/ -{ - int i; - double a,h,q,f; - - /* Load computed results (in proper units) into buffer x */ - switch(j) - { - case FLOW: for (i=1; i<=Nlinks; i++) - x[i] = (REAL4)(Q[i]*ucf); - break; - case VELOCITY: for (i=1; i<=Nlinks; i++) - { - if (Link[i].Type == PUMP) x[i] = 0.0f; - else - { - q = ABS(Q[i]); - a = PI*SQR(Link[i].Diam)/4.0; - x[i] = (REAL4)(q/a*ucf); - } - } - break; - case HEADLOSS: for (i=1; i<=Nlinks; i++) - { - if (LinkStatus[i] <= CLOSED) x[i] = 0.0f; - else - { - h = NodeHead[Link[i].N1] - NodeHead[Link[i].N2]; - if (Link[i].Type != PUMP) h = ABS(h); - if (Link[i].Type <= PIPE) - x[i] = (REAL4)(1000.0*h/Link[i].Len); - else x[i] = (REAL4)(h*ucf); - } - } - break; - case LINKQUAL: for (i=1; i<=Nlinks; i++) - x[i] = (REAL4)(avgqual(i)*ucf); - break; - case STATUS: for (i=1; i<=Nlinks; i++) - x[i] = (REAL4)LinkStatus[i]; - break; - case SETTING: for (i=1; i<=Nlinks; i++) - { - double setting = LinkSetting[i]; - if (setting != MISSING) - switch (Link[i].Type) - { - case CV: - case PIPE: x[i] = (REAL4)setting; - break; - case PUMP: x[i] = (REAL4)setting; - break; - case PRV: - case PSV: - case PBV: x[i] = (REAL4)(setting*Ucf[PRESSURE]); - break; - case FCV: x[i] = (REAL4)(setting*Ucf[FLOW]); - break; - case TCV: x[i] = (REAL4)setting; - break; - default: x[i] = 0.0f; - } - else x[i] = 0.0f; - } - break; - case REACTRATE: /* Overall reaction rate in mass/L/day */ - if (Qualflag == NONE) memset(x,0,(Nlinks+1 )*sizeof(REAL4)); - else for (i=1; i<=Nlinks; i++) x[i] = (REAL4)(PipeRateCoeff[i]*ucf); - break; - case FRICTION: /* f = 2ghd/(Lu^2) where f = friction factor */ - /* u = velocity, g = grav. accel., h = head */ - /*loss, d = diam., & L = pipe length */ - for (i=1; i<=Nlinks; i++) - { - if (Link[i].Type <= PIPE && ABS(Q[i]) > TINY) - { - h = ABS(NodeHead[Link[i].N1] - NodeHead[Link[i].N2]); - f = 39.725*h*pow(Link[i].Diam,5)/Link[i].Len/SQR(Q[i]); - x[i] = (REAL4)f; - } - else x[i] = 0.0f; - } - break; - } - - /* Write x[1] to x[Nlinks] to output file */ - if (fwrite(x+1,sizeof(REAL4),Nlinks,TmpOutFile) < (unsigned)Nlinks) - return(308); - return(0); -} /* End of linkoutput */ - - -int savefinaloutput() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: saves time series statistics, reaction rates & -** epilog to output file. -**-------------------------------------------------------------- -*/ -{ - int errcode = 0; - REAL4 *x; - -/* Save time series statistic if computed */ - if (Tstatflag != SERIES && TmpOutFile != NULL) - { - x = (REAL4 *) calloc(MAX(Nnodes,Nlinks) + 1, sizeof(REAL4)); - if ( x == NULL ) return 101; - ERRCODE(savetimestat(x,NODEHDR)); - ERRCODE(savetimestat(x,LINKHDR)); - if (!errcode) Nperiods = 1; - fclose(TmpOutFile); - TmpOutFile=NULL; - free(x); - } - -/* Save avg. reaction rates & file epilog */ - if (OutFile != NULL) - { - ERRCODE(savenetreacts(Wbulk,Wwall,Wtank,Wsource)); - ERRCODE(saveepilog()); - } - return(errcode); -} - - -int savetimestat(REAL4 *x, char objtype) -/* -**-------------------------------------------------------------- -** Input: *x = buffer for node values -** objtype = NODEHDR (for nodes) or LINKHDR (for links) -** Output: returns error code -** Purpose: computes time series statistic for nodes or links -** and saves to normal output file. -** -** NOTE: This routine is dependent on how the output reporting -** variables were assigned to FieldType in TYPES.H. -**-------------------------------------------------------------- -*/ -{ - int n, n1, n2; - int i, j, p, errcode = 0; - long startbyte, skipbytes; - float *stat1, *stat2, xx; - -/* - Compute number of bytes in temp output file to skip over (skipbytes) - when moving from one time period to the next for a particular variable. -*/ - if (objtype == NODEHDR) - { - /* - For nodes, we start at 0 and skip over node output for all - node variables minus 1 plus link output for all link variables. - */ - startbyte = 0; - skipbytes = (Nnodes*(QUALITY-DEMAND) + - Nlinks*(FRICTION-FLOW+1))*sizeof(REAL4); - n = Nnodes; - n1 = DEMAND; - n2 = QUALITY; - } - else - { - /* - For links, we start at the end of all node variables and skip - over node output for all node variables plus link output for - all link variables minus 1. - */ - startbyte = Nnodes*(QUALITY-DEMAND+1)*sizeof(REAL4); - skipbytes = (Nnodes*(QUALITY-DEMAND+1) + - Nlinks*(FRICTION-FLOW))*sizeof(REAL4); - n = Nlinks; - n1 = FLOW; - n2 = FRICTION; - } - stat1 = (float *) calloc(n+1, sizeof(float)); - stat2 = (float *) calloc(n+1, sizeof(float)); - ERRCODE(MEMCHECK(stat1)); - ERRCODE(MEMCHECK(stat2)); - - /* Process each output reporting variable */ - if (!errcode) - { - for (j=n1; j<=n2; j++) - { - - /* Initialize stat arrays */ - if (Tstatflag == AVG) memset(stat1, 0, (n+1)*sizeof(float)); - else for (i=1; i<=n; i++) - { - stat1[i] = -MISSING; /* +1E10 */ - stat2[i] = MISSING; /* -1E10 */ - } - - /* Position temp output file at start of output */ - fseek(TmpOutFile, startbyte + (j-n1)*n*sizeof(REAL4), SEEK_SET); - - /* Process each time period */ - for (p=1; p<=Nperiods; p++) - { - - /* Get output results for time period & update stats */ - fread(x+1, sizeof(REAL4), n, TmpOutFile); - for (i=1; i<=n; i++) - { - xx = x[i]; - if (objtype == LINKHDR) - { - if (j == FLOW) xx = ABS(xx); - if (j == STATUS) - { - if (xx >= OPEN) xx = 1.0; - else xx = 0.0; - } - } - if (Tstatflag == AVG) stat1[i] += xx; - else - { - stat1[i] = MIN(stat1[i], xx); - stat2[i] = MAX(stat2[i], xx); - } - } - - /* Advance file to next period */ - if (p < Nperiods) fseek(TmpOutFile, skipbytes, SEEK_CUR); - } - - /* Compute resultant stat & save to regular output file */ - switch (Tstatflag) - { - case AVG: for (i=1; i<=n; i++) x[i] = stat1[i]/(float)Nperiods; - break; - case MIN: for (i=1; i<=n; i++) x[i] = stat1[i]; - break; - case MAX: for (i=1; i<=n; i++) x[i] = stat2[i]; - break; - case RANGE: for (i=1; i<=n; i++) x[i] = stat2[i] - stat1[i]; - break; - } - if (objtype == LINKHDR && j == STATUS) - { - for (i=1; i<=n; i++) - { - if (x[i] < 0.5f) x[i] = CLOSED; - else x[i] = OPEN; - } - } - if (fwrite(x+1, sizeof(REAL4), n, OutFile) < (unsigned) n) errcode = 308; - - /* Update internal output variables where applicable */ - if (objtype == NODEHDR) switch (j) - { - case DEMAND: for (i=1; i<=n; i++) NodeDemand[i] = x[i]/Ucf[DEMAND]; - break; - case HEAD: for (i=1; i<=n; i++) NodeHead[i] = x[i]/Ucf[HEAD]; - break; - case QUALITY: for (i=1; i<=n; i++) NodeQual[i] = x[i]/Ucf[QUALITY]; - break; - } - else if (j == FLOW) for (i=1; i<=n; i++) Q[i] = x[i]/Ucf[FLOW]; - } - } - - /* Free allocated memory */ - free(stat1); - free(stat2); - return(errcode); -} - - -int savenetreacts(double wbulk, double wwall, double wtank, double wsource) -/* -**----------------------------------------------------- -** Writes average network-wide reaction rates (in -** mass/hr) to binary output file. -**----------------------------------------------------- -*/ -{ - int errcode = 0; - double t; - REAL4 w[4]; - if (Dur > 0) t = (double)Dur/3600.; - else t = 1.; - w[0] = (REAL4)(wbulk/t); - w[1] = (REAL4)(wwall/t); - w[2] = (REAL4)(wtank/t); - w[3] = (REAL4)(wsource/t); - if (fwrite(w,sizeof(REAL4),4,OutFile) < 4) errcode = 308; - return(errcode); -} - - -int saveepilog() -/* -**------------------------------------------------- -** Writes Nperiods, Warnflag, & Magic Number to -** end of binary output file. -**------------------------------------------------- -*/ -{ - int errcode = 0; - INT4 i; - i = Nperiods; - if (fwrite(&i,sizeof(INT4),1,OutFile) < 1) errcode = 308; - i = Warnflag; - if (fwrite(&i,sizeof(INT4),1,OutFile) < 1) errcode = 308; - i = MAGICNUMBER; - if (fwrite(&i,sizeof(INT4),1,OutFile) < 1) errcode = 308; - return(errcode); -} - - -/********************** END OF OUTPUT.C **********************/ +/* +****************************************************************************** +Project: OWA EPANET +Version: 2.2 +Module: output.c +Description: binary file read/write routines +Authors: see AUTHORS +Copyright: see AUTHORS +License: see LICENSE +Last Updated: 05/13/2019 +****************************************************************************** +*/ + +#include +#include +#include +#include + +#include "types.h" +#include "funcs.h" +#include "hash.h" +#include "text.h" + +// Local functions +static int nodeoutput(Project *, int, REAL4 *, double); +static int linkoutput(Project *, int, REAL4 *, double); +static int savetimestat(Project *, REAL4 *, HdrType); +static int savenetreacts(Project *, double, double, double, double); +static int saveepilog(Project *); + +// Functions to write/read x[1] to x[n] to/from binary file +size_t f_save(REAL4 *x, int n, FILE *file) +{ + return fwrite(x + 1, sizeof(REAL4), n, file); +} +size_t f_read(REAL4 *x, int n, FILE *file) +{ + return fread(x + 1, sizeof(REAL4), n, file); +} + +int savenetdata(Project *pr) +/* +**--------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: saves input data in original units to binary +** output file using fixed-sized (4-byte) records +**--------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Outfile *out = &pr->outfile; + Report *rpt = &pr->report; + Quality *qual = &pr->quality; + Parser *parser = &pr->parser; + Times *time = &pr->times; + + int i, nmax; + int errcode = 0; + INT4 *ibuf; + REAL4 *x; + Snode *node; + FILE *outFile = out->OutFile; + + // Allocate buffer arrays + nmax = MAX(net->Nnodes, net->Nlinks) + 1; + nmax = MAX(nmax, 15); + ibuf = (INT4 *)calloc(nmax, sizeof(INT4)); + x = (REAL4 *)calloc(nmax, sizeof(REAL4)); + ERRCODE(MEMCHECK(ibuf)); + ERRCODE(MEMCHECK(x)); + + // Write prolog section of binary output file + if (!errcode) + { + // Write integer variables to outFile + ibuf[0] = MAGICNUMBER; + ibuf[1] = 20012; // keep version at 2.00.12 so that GUI will run + ibuf[2] = net->Nnodes; + ibuf[3] = net->Ntanks; + ibuf[4] = net->Nlinks; + ibuf[5] = net->Npumps; + ibuf[6] = net->Nvalves; + ibuf[7] = qual->Qualflag; + ibuf[8] = qual->TraceNode; + ibuf[9] = parser->Flowflag; + ibuf[10] = parser->Pressflag; + ibuf[11] = rpt->Tstatflag; + ibuf[12] = (INT4)time->Rstart; + ibuf[13] = (INT4)time->Rstep; + ibuf[14] = (INT4)time->Dur; + fwrite(ibuf, sizeof(INT4), 15, outFile); + + // Write string variables to outFile + fwrite(pr->Title[0], sizeof(char), TITLELEN + 1, outFile); + fwrite(pr->Title[1], sizeof(char), TITLELEN + 1, outFile); + fwrite(pr->Title[2], sizeof(char), TITLELEN + 1, outFile); + fwrite(parser->InpFname, sizeof(char), MAXFNAME + 1, outFile); + fwrite(rpt->Rpt2Fname, sizeof(char), MAXFNAME + 1, outFile); + fwrite(qual->ChemName, sizeof(char), MAXID + 1, outFile); + fwrite(rpt->Field[QUALITY].Units, sizeof(char), MAXID + 1, outFile); + + // Write node ID information to outFile + for (i = 1; i <= net->Nnodes; i++) + { + node = &net->Node[i]; + fwrite(node->ID, MAXID + 1, 1, outFile); + } + + // Write link information to outFile + // (Note: first transfer values to buffer array, + // then fwrite buffer array at offset of 1 ) + for (i = 1; i <= net->Nlinks; i++) + { + fwrite(net->Link[i].ID, MAXID + 1, 1, outFile); + } + + for (i = 1; i <= net->Nlinks; i++) ibuf[i] = net->Link[i].N1; + fwrite(ibuf + 1, sizeof(INT4), net->Nlinks, outFile); + + for (i = 1; i <= net->Nlinks; i++) ibuf[i] = net->Link[i].N2; + fwrite(ibuf + 1, sizeof(INT4), net->Nlinks, outFile); + + for (i = 1; i <= net->Nlinks; i++) ibuf[i] = net->Link[i].Type; + fwrite(ibuf + 1, sizeof(INT4), net->Nlinks, outFile); + + // Write tank information to outFile + for (i = 1; i <= net->Ntanks; i++) ibuf[i] = net->Tank[i].Node; + fwrite(ibuf + 1, sizeof(INT4), net->Ntanks, outFile); + + for (i = 1; i <= net->Ntanks; i++) x[i] = (REAL4)net->Tank[i].A; + f_save(x, net->Ntanks, outFile); + + // Save node elevations to outFile + for (i = 1; i <= net->Nnodes; i++) + { + x[i] = (REAL4)(net->Node[i].El * pr->Ucf[ELEV]); + } + f_save(x, net->Nnodes, outFile); + + // Save link lengths & diameters to outFile + for (i = 1; i <= net->Nlinks; i++) + { + x[i] = (REAL4)(net->Link[i].Len * pr->Ucf[ELEV]); + } + f_save(x, net->Nlinks, outFile); + + for (i = 1; i <= net->Nlinks; i++) + { + if (net->Link[i].Type != PUMP) + { + x[i] = (REAL4)(net->Link[i].Diam * pr->Ucf[DIAM]); + } + else x[i] = 0.0f; + } + if (f_save(x, net->Nlinks, outFile) < (unsigned)net->Nlinks) errcode = 308; + } + + // Free memory used for buffer arrays + free(ibuf); + free(x); + return errcode; +} + +int savehyd(Project *pr, long *htime) +/* +**-------------------------------------------------------------- +** Input: *htime = current time +** Output: returns error code +** Purpose: saves current hydraulic solution to file HydFile +** in binary format +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Outfile *out = &pr->outfile; + Hydraul *hyd = &pr->hydraul; + + int i; + INT4 t; + int errcode = 0; + REAL4 *x; + FILE *HydFile = out->HydFile; + + x = (REAL4 *)calloc(MAX(net->Nnodes, net->Nlinks) + 1, sizeof(REAL4)); + if (x == NULL) return 101; + + // Save current time (htime) + t = (INT4)(*htime); + fwrite(&t, sizeof(INT4), 1, HydFile); + + // Save current nodal demands (D) + for (i = 1; i <= net->Nnodes; i++) x[i] = (REAL4)hyd->NodeDemand[i]; + fwrite(x + 1, sizeof(REAL4), net->Nnodes, HydFile); + //f_save(x, net->Nnodes, HydFile); + + // Save current nodal heads + for (i = 1; i <= net->Nnodes; i++) x[i] = (REAL4)hyd->NodeHead[i]; + fwrite(x + 1, sizeof(REAL4), net->Nnodes, HydFile); + //f_save(x, net->Nnodes, HydFile); + + // Force flow in closed links to be zero then save flows + for (i = 1; i <= net->Nlinks; i++) + { + if (hyd->LinkStatus[i] <= CLOSED) x[i] = 0.0f; + else x[i] = (REAL4)hyd->LinkFlow[i]; + } + fwrite(x + 1, sizeof(REAL4), net->Nlinks, HydFile); + //f_save(x, net->Nlinks, HydFile); + + // Save link status + for (i = 1; i <= net->Nlinks; i++) x[i] = (REAL4)hyd->LinkStatus[i]; + fwrite(x + 1, sizeof(REAL4), net->Nlinks, HydFile); + //f_save(x, net->Nlinks, HydFile); + + // Save link settings & check for successful write-to-disk + // (We assume that if any of the previous fwrites failed, + // then this one will also fail.) + for (i = 1; i <= net->Nlinks; i++) x[i] = (REAL4)hyd->LinkSetting[i]; + if (fwrite(x + 1, sizeof(REAL4), net->Nlinks, HydFile) < + (unsigned)net->Nlinks + ) errcode = 308; + //if (f_save(x, net->Nlinks, HydFile) < (unsigned)net->Nlinks) errcode = 308; + free(x); + fflush(HydFile); + return errcode; +} + +int savehydstep(Project *pr, long *hydstep) +/* +**-------------------------------------------------------------- +** Input: *hydstep = next time step +** Output: returns error code +** Purpose: saves next hydraulic timestep to file HydFile +** in binary format +**-------------------------------------------------------------- +*/ +{ + Outfile *out = &pr->outfile; + + INT4 t; + int errcode = 0; + + t = (INT4)(*hydstep); + if (fwrite(&t, sizeof(INT4), 1, out->HydFile) < 1) errcode = 308; + if (t == 0) fputc(EOFMARK, out->HydFile); + fflush(out->HydFile); + return errcode; +} + +int saveenergy(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: saves energy usage by each pump to outFile +** in binary format +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Outfile *out = &pr->outfile; + Parser *parser = &pr->parser; + Times *time = &pr->times; + + int i; + INT4 index; + REAL4 x[6]; // work array + double hdur, // total simulation duration in hours + t; // total pumping time duration + Spump *pump; + FILE *outFile = out->OutFile; + + hdur = time->Dur / 3600.0; + for (i = 1; i <= net->Npumps; i++) + { + pump = &net->Pump[i]; + if (hdur == 0.0) pump->Energy.TotalCost *= 24.0; + else + { + // ... convert total hrs. online to fraction of total time online + t = pump->Energy.TimeOnLine; //currently holds total hrs. online + pump->Energy.TimeOnLine = t / hdur; + + // ... convert cumulative values to time-averaged ones + if (t > 0.0) + { + pump->Energy.Efficiency /= t; + pump->Energy.KwHrsPerFlow /= t; + pump->Energy.KwHrs /= t; + } + + // ... convert total cost to cost per day + pump->Energy.TotalCost *= 24.0 / hdur; + } + + // ... express time online and avg. efficiency as percentages + pump->Energy.TimeOnLine *= 100.0; + pump->Energy.Efficiency *= 100.0; + + // ... compute KWH per Million Gallons or per Cubic Meter + if (parser->Unitsflag == SI) + { + pump->Energy.KwHrsPerFlow *= (1000. / LPSperCFS / 3600.); + } + else pump->Energy.KwHrsPerFlow *= (1.0e6 / GPMperCFS / 60.); + + // ... save energy stats to REAL4 work array + x[0] = (REAL4)pump->Energy.TimeOnLine; + x[1] = (REAL4)pump->Energy.Efficiency; + x[2] = (REAL4)pump->Energy.KwHrsPerFlow; + x[3] = (REAL4)pump->Energy.KwHrs; + x[4] = (REAL4)pump->Energy.MaxKwatts; + x[5] = (REAL4)pump->Energy.TotalCost; + + // ... save energy results to output file + index = pump->Link; + if (fwrite(&index, sizeof(INT4), 1, outFile) < 1) return 308; + if (fwrite(x, sizeof(REAL4), 6, outFile) < 6) return 308; + } + + // ... compute and save demand charge + hyd->Emax = hyd->Emax * hyd->Dcost; + x[0] = (REAL4)hyd->Emax; + if (fwrite(&x[0], sizeof(REAL4), 1, outFile) < 1) return 308; + return (0); +} + +int readhyd(Project *pr, long *hydtime) +/* +**-------------------------------------------------------------- +** Input: none +** Output: *hydtime = time of hydraulic solution +** Returns: 1 if successful, 0 if not +** Purpose: reads hydraulic solution from file HydFile +** +** NOTE: A hydraulic solution consists of the current time +** (hydtime), nodal demands (D) and heads (H), link +** flows (Q), link status (S), and link settings (K). +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Outfile *out = &pr->outfile; + + int i; + INT4 t; + int result = 1; + REAL4 *x; + FILE *HydFile = out->HydFile; + + x = (REAL4 *)calloc(MAX(net->Nnodes, net->Nlinks) + 1, sizeof(REAL4)); + if (x == NULL) return 0; + + if (fread(&t, sizeof(INT4), 1, HydFile) < 1) result = 0; + *hydtime = t; + + if (f_read(x, net->Nnodes, HydFile) < (unsigned)net->Nnodes) result = 0; + else for (i = 1; i <= net->Nnodes; i++) hyd->NodeDemand[i] = x[i]; + + if (f_read(x, net->Nnodes, HydFile) < (unsigned)net->Nnodes) result = 0; + else for (i = 1; i <= net->Nnodes; i++) hyd->NodeHead[i] = x[i]; + + if (f_read(x, net->Nlinks, HydFile) < (unsigned)net->Nlinks) result = 0; + else for (i = 1; i <= net->Nlinks; i++) hyd->LinkFlow[i] = x[i]; + + if (f_read(x, net->Nlinks, HydFile) < (unsigned)net->Nlinks) result = 0; + else for (i = 1; i <= net->Nlinks; i++) hyd->LinkStatus[i] = (char)x[i]; + + if (f_read(x, net->Nlinks, HydFile) < (unsigned)net->Nlinks) result = 0; + else for (i = 1; i <= net->Nlinks; i++) hyd->LinkSetting[i] = x[i]; + + free(x); + return result; +} + +int readhydstep(Project *pr, long *hydstep) +/* +**-------------------------------------------------------------- +** Input: none +** Output: *hydstep = next hydraulic time step (sec) +** Returns: 1 if successful, 0 if not +** Purpose: reads hydraulic time step from file HydFile +**-------------------------------------------------------------- +*/ +{ + FILE *hydFile = pr->outfile.HydFile; + INT4 t; + + if (fread(&t, sizeof(INT4), 1, hydFile) < 1) return 0; + *hydstep = t; + return 1; +} + +int saveoutput(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: writes simulation results to output file +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + + int j; + int errcode = 0; + REAL4 *x; + + x = (REAL4 *)calloc(MAX(net->Nnodes, net->Nlinks) + 1, sizeof(REAL4)); + if (x == NULL) return 101; + + // Write out node results, then link results + for (j = DEMAND; j <= QUALITY; j++) ERRCODE(nodeoutput(pr, j, x, pr->Ucf[j])); + for (j = FLOW; j <= FRICTION; j++) ERRCODE(linkoutput(pr, j, x, pr->Ucf[j])); + free(x); + return errcode; +} + +int nodeoutput(Project *pr, int j, REAL4 *x, double ucf) +/* +**-------------------------------------------------------------- +** Input: j = type of node variable +** *x = buffer for node values +** ucf = units conversion factor +** Output: returns error code +** Purpose: writes results for node variable j to output file +**----------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Outfile *out = &pr->outfile; + + int i; + FILE *outFile = out->TmpOutFile; + + // Load computed results (in proper units) into buffer x + switch (j) + { + case DEMAND: + for (i = 1; i <= net->Nnodes; i++) + { + x[i] = (REAL4)(hyd->NodeDemand[i] * ucf); + } + break; + + case HEAD: + for (i = 1; i <= net->Nnodes; i++) + { + x[i] = (REAL4)(hyd->NodeHead[i] * ucf); + } + break; + + case PRESSURE: + for (i = 1; i <= net->Nnodes; i++) + { + x[i] = (REAL4)((hyd->NodeHead[i] - net->Node[i].El) * ucf); + } + break; + + case QUALITY: + for (i = 1; i <= net->Nnodes; i++) + { + x[i] = (REAL4)(qual->NodeQual[i] * ucf); + } + } + + // Write x[1] to x[net->Nnodes] to output file + if (f_save(x, net->Nnodes, outFile) < (unsigned)net->Nnodes) return 308; + return 0; +} + +int linkoutput(Project *pr, int j, REAL4 *x, double ucf) +/* +**---------------------------------------------------------------- +** Input: j = type of link variable +** *x = buffer for link values +** ucf = units conversion factor +** Output: returns error code +** Purpose: writes results for link variable j to output file +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Outfile *out = &pr->outfile; + + int i; + double a, h, q, f, setting; + FILE *outFile = out->TmpOutFile; + + // Load computed results (in proper units) into buffer x + switch (j) + { + case FLOW: + for (i = 1; i <= net->Nlinks; i++) + { + x[i] = (REAL4)(hyd->LinkFlow[i] * ucf); + } + break; + + case VELOCITY: + for (i = 1; i <= net->Nlinks; i++) + { + if (net->Link[i].Type == PUMP) x[i] = 0.0f; + else + { + q = ABS(hyd->LinkFlow[i]); + a = PI * SQR(net->Link[i].Diam) / 4.0; + x[i] = (REAL4)(q / a * ucf); + } + } + break; + + case HEADLOSS: + for (i = 1; i <= net->Nlinks; i++) + { + if (hyd->LinkStatus[i] <= CLOSED) x[i] = 0.0f; + else + { + h = hyd->NodeHead[net->Link[i].N1] - + hyd->NodeHead[net->Link[i].N2]; + if (net->Link[i].Type != PUMP) h = ABS(h); + if (net->Link[i].Type <= PIPE) + { + x[i] = (REAL4)(1000.0 * h / net->Link[i].Len); + } + else x[i] = (REAL4)(h * ucf); + } + } + break; + + case LINKQUAL: + for (i = 1; i <= net->Nlinks; i++) + { + x[i] = (REAL4)(avgqual(pr,i) * ucf); + } + break; + + case STATUS: + for (i = 1; i <= net->Nlinks; i++) + { + x[i] = (REAL4)hyd->LinkStatus[i]; + } + break; + + case SETTING: + for (i = 1; i <= net->Nlinks; i++) + { + setting = hyd->LinkSetting[i]; + if (setting != MISSING) switch (net->Link[i].Type) + { + case CVPIPE: + case PIPE: + x[i] = (REAL4)setting; break; + case PUMP: + x[i] = (REAL4)setting; break; + case PRV: + case PSV: + case PBV: + x[i] = (REAL4)(setting * pr->Ucf[PRESSURE]); break; + case FCV: + x[i] = (REAL4)(setting * pr->Ucf[FLOW]); break; + case TCV: + x[i] = (REAL4)setting; break; + default: x[i] = 0.0f; + } + else x[i] = 0.0f; + } + break; + + case REACTRATE: // Overall reaction rate in mass/L/day + if (qual->Qualflag == NONE) + { + memset(x, 0, (net->Nlinks + 1) * sizeof(REAL4)); + } + else for (i = 1; i <= net->Nlinks; i++) + { + x[i] = (REAL4)(qual->PipeRateCoeff[i] * ucf); + } + break; + + case FRICTION: // Friction factor + // f = 2ghd/(Lu^2) where f = friction factor + // u = velocity, g = grav. accel., h = head loss + //loss, d = diam., & L = pipe length + for (i = 1; i <= net->Nlinks; i++) + { + if (net->Link[i].Type <= PIPE && ABS(hyd->LinkFlow[i]) > TINY) + { + h = ABS(hyd->NodeHead[net->Link[i].N1] - + hyd->NodeHead[net->Link[i].N2]); + f = 39.725 * h * pow(net->Link[i].Diam, 5) / + net->Link[i].Len / SQR(hyd->LinkFlow[i]); + x[i] = (REAL4)f; + } + else x[i] = 0.0f; + } + break; + } + + // Write x[1] to x[net->Nlinks] to output file + if (f_save(x, net->Nlinks, outFile) < (unsigned)net->Nlinks) return 308; + return 0; +} + +int savefinaloutput(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: saves time series statistics, reaction rates & +** epilog to output file. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Outfile *out = &pr->outfile; + Report *rpt = &pr->report; + Quality *qual = &pr->quality; + + int errcode = 0; + REAL4 *x; + FILE *outFile = out->OutFile; + + // Save time series statistic if computed + if (rpt->Tstatflag != SERIES && out->TmpOutFile != NULL) + { + x = (REAL4 *)calloc(MAX(net->Nnodes, net->Nlinks) + 1, sizeof(REAL4)); + if (x == NULL) return 101; + ERRCODE(savetimestat(pr, x, NODEHDR)); + ERRCODE(savetimestat(pr, x, LINKHDR)); + if (!errcode) rpt->Nperiods = 1; + fclose(out->TmpOutFile); + out->TmpOutFile = NULL; + free(x); + } + + // Save avg. reaction rates & file epilog + if (outFile != NULL) + { + ERRCODE(savenetreacts(pr, qual->Wbulk, qual->Wwall, qual->Wtank, + qual->Wsource)); + ERRCODE(saveepilog(pr)); + } + return errcode; +} + +int savetimestat(Project *pr, REAL4 *x, HdrType objtype) +/* +**-------------------------------------------------------------- +** Input: *x = buffer for node values +** objtype = NODEHDR (for nodes) or LINKHDR (for links) +** Output: returns error code +** Purpose: computes time series statistic for nodes or links +** and saves to normal output file. +** +** NOTE: This routine is dependent on how the output reporting +** variables were assigned to FieldType in TYPES.H. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Outfile *out = &pr->outfile; + Report *rpt = &pr->report; + + int n, n1, n2; + int i, j, p, errcode = 0; + long startbyte, skipbytes; + float *stat1, *stat2, xx; + FILE *outFile = out->OutFile; + + // Compute number of bytes in temp output file to skip over (skipbytes) + // when moving from one time period to the next for a particular variable + if (objtype == NODEHDR) + { + // For nodes, we start at 0 and skip over node output for all + // node variables minus 1 plus link output for all link variables. + startbyte = 0; + skipbytes = (net->Nnodes * (QUALITY - DEMAND) + + net->Nlinks * (FRICTION - FLOW + 1)) * sizeof(REAL4); + n = net->Nnodes; + n1 = DEMAND; + n2 = QUALITY; + } + else + { + // For links, we start at the end of all node variables and skip + // over node output for all node variables plus link output for + // all link variables minus 1 + startbyte = net->Nnodes * (QUALITY - DEMAND + 1) * sizeof(REAL4); + skipbytes = (net->Nnodes * (QUALITY - DEMAND + 1) + + net->Nlinks * (FRICTION - FLOW)) * sizeof(REAL4); + n = net->Nlinks; + n1 = FLOW; + n2 = FRICTION; + } + stat1 = (float *)calloc(n + 1, sizeof(float)); + stat2 = (float *)calloc(n + 1, sizeof(float)); + ERRCODE(MEMCHECK(stat1)); + ERRCODE(MEMCHECK(stat2)); + + // Process each output reporting variable + if (!errcode) for (j = n1; j <= n2; j++) + { + // Initialize stat arrays + if (rpt->Tstatflag == AVG) memset(stat1, 0, (n + 1) * sizeof(float)); + else for (i = 1; i <= n; i++) + { + stat1[i] = -MISSING; + stat2[i] = MISSING; + } + + // Position temp output file at start of output + fseek(out->TmpOutFile, startbyte + (j - n1) * n * sizeof(REAL4), + SEEK_SET); + + // Process each time period + for (p = 1; p <= rpt->Nperiods; p++) + { + // Get output results for time period & update stats + f_read(x, n, out->TmpOutFile); + for (i = 1; i <= n; i++) + { + xx = x[i]; + if (objtype == LINKHDR) + { + if (j == FLOW) xx = ABS(xx); + if (j == STATUS) + { + if (xx >= OPEN) xx = 1.0; + else xx = 0.0; + } + } + if (rpt->Tstatflag == AVG) stat1[i] += xx; + else + { + stat1[i] = MIN(stat1[i], xx); + stat2[i] = MAX(stat2[i], xx); + } + } + + // Advance file to next period + if (p < rpt->Nperiods) fseek(out->TmpOutFile, skipbytes, SEEK_CUR); + } + + // Compute resultant stat & save to regular output file + switch (rpt->Tstatflag) + { + case AVG: + for (i = 1; i <= n; i++) x[i] = stat1[i] / (float)rpt->Nperiods; + break; + case MIN: + for (i = 1; i <= n; i++) x[i] = stat1[i]; + break; + case MAX: + for (i = 1; i <= n; i++) x[i] = stat2[i]; + break; + case RANGE: + for (i = 1; i <= n; i++) x[i] = stat2[i] - stat1[i]; + break; + } + if (objtype == LINKHDR && j == STATUS) + { + for (i = 1; i <= n; i++) + { + if (x[i] < 0.5f) x[i] = CLOSED; + else x[i] = OPEN; + } + } + if (f_save(x, n, outFile) < (unsigned)n) errcode = 308; + + // Update internal output variables where applicable + if (objtype == NODEHDR) switch (j) + { + case DEMAND: + for (i = 1; i <= n; i++) hyd->NodeDemand[i] = x[i] / pr->Ucf[DEMAND]; + break; + case HEAD: + for (i = 1; i <= n; i++) hyd->NodeHead[i] = x[i] / pr->Ucf[HEAD]; + break; + case QUALITY: + for (i = 1; i <= n; i++) qual->NodeQual[i] = x[i] / pr->Ucf[QUALITY]; + break; + } + else if (j == FLOW) + { + for (i = 1; i <= n; i++) hyd->LinkFlow[i] = x[i] / pr->Ucf[FLOW]; + } + } + + // Free allocated memory + free(stat1); + free(stat2); + return errcode; +} + +int savenetreacts(Project *pr, double wbulk, double wwall, double wtank, double wsource) +/* +**----------------------------------------------------- +** Writes average network-wide reaction rates (in +** mass/hr) to binary output file. +**----------------------------------------------------- +*/ +{ + Outfile *out = &pr->outfile; + Times *time = &pr->times; + + int errcode = 0; + double t; + REAL4 w[4]; + FILE *outFile = out->OutFile; + + if (time->Dur > 0) t = (double)time->Dur / 3600.; + else t = 1.; + w[0] = (REAL4)(wbulk / t); + w[1] = (REAL4)(wwall / t); + w[2] = (REAL4)(wtank / t); + w[3] = (REAL4)(wsource / t); + if (fwrite(w, sizeof(REAL4), 4, outFile) < 4) errcode = 308; + return errcode; +} + +int saveepilog(Project *pr) +/* +**------------------------------------------------- +** Writes Nperiods, Warnflag, & Magic Number to +** end of binary output file. +**------------------------------------------------- +*/ +{ + Outfile *out = &pr->outfile; + Report *rpt = &pr->report; + + int errcode = 0; + INT4 i; + FILE *outFile = out->OutFile; + + i = rpt->Nperiods; + if (fwrite(&i, sizeof(INT4), 1, outFile) < 1) errcode = 308; + i = pr->Warnflag; + if (fwrite(&i, sizeof(INT4), 1, outFile) < 1) errcode = 308; + i = MAGICNUMBER; if (fwrite(&i, sizeof(INT4), 1, outFile) < 1) errcode = 308; + return errcode; +} diff --git a/src/project.c b/src/project.c new file mode 100644 index 0000000..2d19729 --- /dev/null +++ b/src/project.c @@ -0,0 +1,1359 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: project.c + Description: project data management routines + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 11/15/2019 + ****************************************************************************** +*/ + +#include +#include +#include +#include + +//*** For the Windows SDK _tempnam function ***// +#ifdef _WIN32 +#include +#endif + +#include "types.h" +#include "funcs.h" + + +int openfiles(Project *pr, const char *f1, const char *f2, const char *f3) +/*---------------------------------------------------------------- +** Input: f1 = pointer to name of input file +** f2 = pointer to name of report file +** f3 = pointer to name of binary output file +** Output: none +** Returns: error code +** Purpose: opens input & report files +**---------------------------------------------------------------- +*/ +{ + // Initialize file pointers to NULL + pr->parser.InFile = NULL; + pr->report.RptFile = NULL; + pr->outfile.OutFile = NULL; + pr->outfile.HydFile = NULL; + pr->outfile.TmpOutFile = NULL; + + // Save file names + strncpy(pr->parser.InpFname, f1, MAXFNAME); + strncpy(pr->report.Rpt1Fname, f2, MAXFNAME); + strncpy(pr->outfile.OutFname, f3, MAXFNAME); + if (strlen(f3) > 0) pr->outfile.Outflag = SAVE; + else + { + pr->outfile.Outflag = SCRATCH; + strcpy(pr->outfile.OutFname, pr->TmpOutFname); + } + + // Check that file names are not identical + if (strlen(f1) > 0 && (strcomp(f1, f2) || strcomp(f1, f3))) return 301; + if (strlen(f3) > 0 && strcomp(f2, f3)) return 301; + + // Attempt to open input and report files + if (strlen(f1) > 0) + { + if ((pr->parser.InFile = fopen(f1, "rt")) == NULL) return 302; + } + if (strlen(f2) == 0) pr->report.RptFile = stdout; + else + { + pr->report.RptFile = fopen(f2, "wt"); + if (pr->report.RptFile == NULL) return 303; + } + writelogo(pr); + return 0; +} + +int openhydfile(Project *pr) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Returns: error code +** Purpose: opens file that saves hydraulics solution +**---------------------------------------------------------------- +*/ +{ + const int Nnodes = pr->network.Nnodes; + const int Ntanks = pr->network.Ntanks; + const int Nlinks = pr->network.Nlinks; + const int Nvalves = pr->network.Nvalves; + const int Npumps = pr->network.Npumps; + + INT4 nsize[6]; // Temporary array + INT4 magic; + INT4 version; + int errcode = 0; + + // If HydFile currently open, then close it if its not a scratch file + if (pr->outfile.HydFile != NULL) + { + if (pr->outfile.Hydflag == SCRATCH) return 0; + fclose(pr->outfile.HydFile); + pr->outfile.HydFile = NULL; + } + + // Use Hydflag to determine the type of hydraulics file to use. + // Write error message if the file cannot be opened. + pr->outfile.HydFile = NULL; + switch (pr->outfile.Hydflag) + { + case SCRATCH: + strcpy(pr->outfile.HydFname, pr->TmpHydFname); + pr->outfile.HydFile = fopen(pr->outfile.HydFname, "w+b"); + break; + case SAVE: + pr->outfile.HydFile = fopen(pr->outfile.HydFname, "w+b"); + break; + case USE: + pr->outfile.HydFile = fopen(pr->outfile.HydFname, "rb"); + break; + } + if (pr->outfile.HydFile == NULL) return 305; + + // If a previous hydraulics solution is not being used, then + // save the current network size parameters to the file. + if (pr->outfile.Hydflag != USE) + { + magic = MAGICNUMBER; + version = ENGINE_VERSION; + nsize[0] = Nnodes; + nsize[1] = Nlinks; + nsize[2] = Ntanks; + nsize[3] = Npumps; + nsize[4] = Nvalves; + nsize[5] = (int)pr->times.Dur; + fwrite(&magic, sizeof(INT4), 1, pr->outfile.HydFile); + fwrite(&version, sizeof(INT4), 1, pr->outfile.HydFile); + fwrite(nsize, sizeof(INT4), 6, pr->outfile.HydFile); + } + + // If a previous hydraulics solution is being used, then + // make sure its network size parameters match those of + // the current network + if (pr->outfile.Hydflag == USE) + { + fread(&magic, sizeof(INT4), 1, pr->outfile.HydFile); + if (magic != MAGICNUMBER) return 306; + fread(&version, sizeof(INT4), 1, pr->outfile.HydFile); + if (version != ENGINE_VERSION) return 306; + if (fread(nsize, sizeof(INT4), 6, pr->outfile.HydFile) < 6) return 306; + if (nsize[0] != Nnodes || nsize[1] != Nlinks || nsize[2] != Ntanks || + nsize[3] != Npumps || nsize[4] != Nvalves || + nsize[5] != pr->times.Dur + ) return 306; + pr->outfile.SaveHflag = TRUE; + } + + // Save current position in hydraulics file + // where storage of hydraulic results begins + pr->outfile.HydOffset = ftell(pr->outfile.HydFile); + return errcode; +} + +int openoutfile(Project *pr) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Returns: error code +** Purpose: opens binary output file. +**---------------------------------------------------------------- +*/ +{ + int errcode = 0; + + // Close output file if already opened + closeoutfile(pr); + + // Try to open binary output file + pr->outfile.OutFile = fopen(pr->outfile.OutFname, "w+b"); + if (pr->outfile.OutFile == NULL) return 304; + + // Save basic network data & energy usage results + ERRCODE(savenetdata(pr)); + pr->outfile.OutOffset1 = ftell(pr->outfile.OutFile); + ERRCODE(saveenergy(pr)); + pr->outfile.OutOffset2 = ftell(pr->outfile.OutFile); + + // Open temporary file if computing time series statistic + if (!errcode) + { + if (pr->report.Tstatflag != SERIES) + { + pr->outfile.TmpOutFile = fopen(pr->TmpStatFname, "w+b"); + if (pr->outfile.TmpOutFile == NULL) errcode = 304; + } + else pr->outfile.TmpOutFile = pr->outfile.OutFile; + } + return errcode; +} + +void closeoutfile(Project *pr) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: closes binary output file. +**---------------------------------------------------------------- +*/ +{ + if (pr->outfile.TmpOutFile != pr->outfile.OutFile) + { + if (pr->outfile.TmpOutFile != NULL) + { + fclose(pr->outfile.TmpOutFile); + pr->outfile.TmpOutFile = NULL; + } + } + if (pr->outfile.OutFile != NULL) + { + if (pr->outfile.OutFile == pr->outfile.TmpOutFile) + { + pr->outfile.TmpOutFile = NULL; + } + fclose(pr->outfile.OutFile); + pr->outfile.OutFile = NULL; + } +} + +void initpointers(Project *pr) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: initializes data array pointers to NULL +**---------------------------------------------------------------- +*/ +{ + Network* nw = &pr->network; + nw->Nnodes = 0; + nw->Ntanks = 0; + nw->Njuncs = 0; + nw->Nlinks = 0; + nw->Npipes = 0; + nw->Npumps = 0; + nw->Nvalves = 0; + nw->Ncontrols = 0; + nw->Nrules = 0; + nw->Npats = 0; + nw->Ncurves = 0; + + pr->hydraul.NodeDemand = NULL; + pr->hydraul.NodeHead = NULL; + pr->hydraul.LinkFlow = NULL; + pr->hydraul.LinkStatus = NULL; + pr->hydraul.LinkSetting = NULL; + pr->hydraul.OldStatus = NULL; + pr->hydraul.P = NULL; + pr->hydraul.Y = NULL; + pr->hydraul.Xflow = NULL; + + pr->quality.NodeQual = NULL; + pr->quality.PipeRateCoeff = NULL; + + pr->network.Node = NULL; + pr->network.Link = NULL; + pr->network.Tank = NULL; + pr->network.Pump = NULL; + pr->network.Valve = NULL; + pr->network.Pattern = NULL; + pr->network.Curve = NULL; + pr->network.Control = NULL; + pr->network.Adjlist = NULL; + pr->network.NodeHashTable = NULL; + pr->network.LinkHashTable = NULL; + + pr->hydraul.smatrix.Aii = NULL; + pr->hydraul.smatrix.Aij = NULL; + pr->hydraul.smatrix.F = NULL; + pr->hydraul.smatrix.Order = NULL; + pr->hydraul.smatrix.Row = NULL; + pr->hydraul.smatrix.Ndx = NULL; + pr->hydraul.smatrix.XLNZ = NULL; + pr->hydraul.smatrix.NZSUB = NULL; + pr->hydraul.smatrix.LNZ = NULL; + + initrules(pr); +} + +int allocdata(Project *pr) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Returns: error code +** Purpose: allocates memory for network data structures +**---------------------------------------------------------------- +*/ +{ + int n; + int errcode = 0; + + // Allocate node & link ID hash tables + pr->network.NodeHashTable = hashtable_create(); + pr->network.LinkHashTable = hashtable_create(); + ERRCODE(MEMCHECK(pr->network.NodeHashTable)); + ERRCODE(MEMCHECK(pr->network.LinkHashTable)); + + // Allocate memory for network nodes + //************************************************************* + // NOTE: Because network components of a given type are indexed + // starting from 1, their arrays must be sized 1 + // element larger than the number of components. + //************************************************************* + if (!errcode) + { + n = pr->parser.MaxNodes + 1; + pr->network.Node = (Snode *)calloc(n, sizeof(Snode)); + pr->hydraul.NodeDemand = (double *)calloc(n, sizeof(double)); + pr->hydraul.NodeHead = (double *)calloc(n, sizeof(double)); + pr->quality.NodeQual = (double *)calloc(n, sizeof(double)); + ERRCODE(MEMCHECK(pr->network.Node)); + ERRCODE(MEMCHECK(pr->hydraul.NodeDemand)); + ERRCODE(MEMCHECK(pr->hydraul.NodeHead)); + ERRCODE(MEMCHECK(pr->quality.NodeQual)); + } + + // Allocate memory for network links + if (!errcode) + { + n = pr->parser.MaxLinks + 1; + pr->network.Link = (Slink *)calloc(n, sizeof(Slink)); + pr->hydraul.LinkFlow = (double *)calloc(n, sizeof(double)); + pr->hydraul.LinkSetting = (double *)calloc(n, sizeof(double)); + pr->hydraul.LinkStatus = (StatusType *)calloc(n, sizeof(StatusType)); + ERRCODE(MEMCHECK(pr->network.Link)); + ERRCODE(MEMCHECK(pr->hydraul.LinkFlow)); + ERRCODE(MEMCHECK(pr->hydraul.LinkSetting)); + ERRCODE(MEMCHECK(pr->hydraul.LinkStatus)); + } + + // Allocate memory for tanks, sources, pumps, valves, and controls + // (memory for Patterns and Curves arrays expanded as each is added) + if (!errcode) + { + pr->network.Tank = + (Stank *)calloc(pr->parser.MaxTanks + 1, sizeof(Stank)); + pr->network.Pump = + (Spump *)calloc(pr->parser.MaxPumps + 1, sizeof(Spump)); + pr->network.Valve = + (Svalve *)calloc(pr->parser.MaxValves + 1, sizeof(Svalve)); + pr->network.Control = + (Scontrol *)calloc(pr->parser.MaxControls + 1, sizeof(Scontrol)); + ERRCODE(MEMCHECK(pr->network.Tank)); + ERRCODE(MEMCHECK(pr->network.Pump)); + ERRCODE(MEMCHECK(pr->network.Valve)); + ERRCODE(MEMCHECK(pr->network.Control)); + } + + // Initialize pointers used in nodes and links + if (!errcode) + { + for (n = 0; n <= pr->parser.MaxNodes; n++) + { + pr->network.Node[n].D = NULL; // node demand + pr->network.Node[n].S = NULL; // node source + pr->network.Node[n].Comment = NULL; + } + for (n = 0; n <= pr->parser.MaxLinks; n++) + { + pr->network.Link[n].Vertices = NULL; + pr->network.Link[n].Comment = NULL; + } + } + + // Allocate memory for rule base (see RULES.C) + if (!errcode) errcode = allocrules(pr); + return errcode; +} + +void freedata(Project *pr) +/*---------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: frees memory allocated for network data structures. +**---------------------------------------------------------------- +*/ +{ + int j; + + // Free memory for computed results + free(pr->hydraul.NodeDemand); + free(pr->hydraul.NodeHead); + free(pr->hydraul.LinkFlow); + free(pr->hydraul.LinkSetting); + free(pr->hydraul.LinkStatus); + free(pr->quality.NodeQual); + + // Free memory used for nodal adjacency lists + freeadjlists(&pr->network); + + // Free memory for node data + if (pr->network.Node != NULL) + { + for (j = 1; j <= pr->network.Nnodes; j++) + { + // Free memory used for demands and WQ source data + freedemands(&(pr->network.Node[j])); + free(pr->network.Node[j].S); + free(pr->network.Node[j].Comment); + } + free(pr->network.Node); + } + + // Free memory for link data + if (pr->network.Link != NULL) + { + for (j = 1; j <= pr->network.Nlinks; j++) + { + freelinkvertices(&pr->network.Link[j]); + free(pr->network.Link[j].Comment); + } + } + free(pr->network.Link); + + // Free memory for other network objects + free(pr->network.Tank); + free(pr->network.Pump); + free(pr->network.Valve); + free(pr->network.Control); + + // Free memory for time patterns + if (pr->network.Pattern != NULL) + { + for (j = 0; j <= pr->network.Npats; j++) + { + free(pr->network.Pattern[j].F); + free(pr->network.Pattern[j].Comment); + } + free(pr->network.Pattern); + } + + // Free memory for curves + if (pr->network.Curve != NULL) + { + // There is no Curve[0] + for (j = 1; j <= pr->network.Ncurves; j++) + { + free(pr->network.Curve[j].X); + free(pr->network.Curve[j].Y); + free(pr->network.Curve[j].Comment); + } + free(pr->network.Curve); + } + + // Free memory for rule base (see RULES.C) + freerules(pr); + + // Free hash table memory + if (pr->network.NodeHashTable != NULL) + { + hashtable_free(pr->network.NodeHashTable); + } + if (pr->network.LinkHashTable != NULL) + { + hashtable_free(pr->network.LinkHashTable); + } +} + +Pdemand finddemand(Pdemand d, int index) +/*---------------------------------------------------------------- +** Input: d = pointer to start of a list of demands +** index = the position of the demand to retrieve +** Output: none +** Returns: the demand at the requested position +** Purpose: finds the demand at a given position in a demand list +**---------------------------------------------------------------- +*/ +{ + int n = 1; + if (index <= 0)return NULL; + while (d) + { + if (n == index) break; + n++; + d = d->next; + } + return d; +} + +int adddemand(Snode *node, double dbase, int dpat, char *dname) +/*---------------------------------------------------------------- +** Input: node = a network junction node +** dbase = base demand value +** dpat = demand pattern index +** dname = name of demand category +** Output: returns TRUE if successful, FALSE if not +** Purpose: adds a new demand category to a node. +**---------------------------------------------------------------- +*/ +{ + Pdemand demand, lastdemand; + + // Create a new demand struct + demand = (struct Sdemand *)malloc(sizeof(struct Sdemand)); + if (demand == NULL) return FALSE; + + // Assign it the designated properties + demand->Base = dbase; + demand->Pat = dpat; + demand->Name = NULL; + if (dname && strlen(dname) > 0) xstrcpy(&demand->Name, dname, MAXID); + demand->next = NULL; + + // If node has no demands make this its first demand category + if (node->D == NULL) node->D = demand; + + // Otherwise append this demand to the end of the node's demands list + else + { + lastdemand = node->D; + while (lastdemand->next) lastdemand = lastdemand->next; + lastdemand->next = demand; + } + return TRUE; +} + +void freedemands(Snode *node) +/*---------------------------------------------------------------- +** Input: node = a network junction node +** Output: node +** Purpose: frees the memory used for a node's list of demands. +**---------------------------------------------------------------- +*/ +{ + Pdemand nextdemand; + Pdemand demand = node->D; + while (demand != NULL) + { + nextdemand = demand->next; + free(demand->Name); + free(demand); + demand = nextdemand; + } + node->D = NULL; +} + +int addlinkvertex(Slink *link, double x, double y) +/*---------------------------------------------------------------- +** Input: link = pointer to a network link +** x = x-coordinate of a new vertex +** y = y-coordiante of a new vertex +** Returns: an error code +** Purpose: adds to a link's collection of vertex points. +**---------------------------------------------------------------- +*/ +{ + static int CHUNKSIZE = 5; + int n; + Pvertices vertices; + if (link->Vertices == NULL) + { + vertices = (struct Svertices *) malloc(sizeof(struct Svertices)); + if (vertices == NULL) return 101; + vertices->Npts = 0; + vertices->Capacity = CHUNKSIZE; + vertices->X = (double *) calloc(vertices->Capacity, sizeof(double)); + vertices->Y = (double *) calloc(vertices->Capacity, sizeof(double)); + link->Vertices = vertices; + } + vertices = link->Vertices; + if (vertices->Npts >= vertices->Capacity) + { + vertices->Capacity += CHUNKSIZE; + vertices->X = realloc(vertices->X, vertices->Capacity * sizeof(double)); + vertices->Y = realloc(vertices->Y, vertices->Capacity * sizeof(double)); + } + if (vertices->X == NULL || vertices->Y == NULL) return 101; + n = vertices->Npts; + vertices->X[n] = x; + vertices->Y[n] = y; + vertices->Npts++; + return 0; +} + +void freelinkvertices(Slink *link) +/*---------------------------------------------------------------- +** Input: vertices = list of link vertex points +** Output: none +** Purpose: frees the memory used for a link's list of vertices. +**---------------------------------------------------------------- +*/ +{ + if (link->Vertices) + { + free(link->Vertices->X); + free(link->Vertices->Y); + free(link->Vertices); + link->Vertices = NULL; + } +} + +int buildadjlists(Network *net) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: builds linked list of links adjacent to each node +**-------------------------------------------------------------- +*/ +{ + int i, j, k; + int errcode = 0; + Padjlist alink; + + // Create an array of adjacency lists + freeadjlists(net); + net->Adjlist = (Padjlist *)calloc(net->Nnodes + 1, sizeof(Padjlist)); + if (net->Adjlist == NULL) return 101; + for (i = 0; i <= net->Nnodes; i++) net->Adjlist[i] = NULL; + + // For each link, update adjacency lists of its end nodes + for (k = 1; k <= net->Nlinks; k++) + { + i = net->Link[k].N1; + j = net->Link[k].N2; + + // Include link in start node i's list + alink = (struct Sadjlist *) malloc(sizeof(struct Sadjlist)); + if (alink == NULL) + { + errcode = 101; + break; + } + alink->node = j; + alink->link = k; + alink->next = net->Adjlist[i]; + net->Adjlist[i] = alink; + + // Include link in end node j's list + alink = (struct Sadjlist *) malloc(sizeof(struct Sadjlist)); + if (alink == NULL) + { + errcode = 101; + break; + } + alink->node = i; + alink->link = k; + alink->next = net->Adjlist[j]; + net->Adjlist[j] = alink; + } + if (errcode) freeadjlists(net); + return errcode; +} + + +void freeadjlists(Network *net) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: frees memory used for nodal adjacency lists +**-------------------------------------------------------------- +*/ +{ + int i; + Padjlist alink; + + if (net->Adjlist == NULL) return; + for (i = 0; i <= net->Nnodes; i++) + { + for (alink = net->Adjlist[i]; alink != NULL; alink = net->Adjlist[i]) + { + net->Adjlist[i] = alink->next; + free(alink); + } + } + FREE(net->Adjlist); +} + +int incontrols(Project *pr, int objType, int index) +/*---------------------------------------------------------------- +** Input: objType = type of object (either NODE or LINK) +** index = the object's index +** Output: none +** Returns: 1 if any controls contain the object; 0 if not +** Purpose: determines if any simple or rule-based controls +** contain a particular node or link. +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + + int i, ruleObject; + Spremise *premise; + Saction *action; + + // Check simple controls + for (i = 1; i <= net->Ncontrols; i++) + { + if (objType == NODE && net->Control[i].Node == index) return 1; + if (objType == LINK && net->Control[i].Link == index) return 1; + } + + // Check rule-based controls + for (i = 1; i <= net->Nrules; i++) + { + // Convert objType to a rule object type + if (objType == NODE) ruleObject = 6; + else ruleObject = 7; + + // Check rule's premises + premise = net->Rule[i].Premises; + while (premise != NULL) + { + if (ruleObject == premise->object && premise->index == index) return 1; + premise = premise->next; + } + + // Rule actions only need to be checked for link objects + if (objType == LINK) + { + // Check rule's THEN actions + action = net->Rule[i].ThenActions; + while (action != NULL) + { + if (action->link == index) return 1; + action = action->next; + } + + // Check rule's ELSE actions + action = net->Rule[i].ElseActions; + while (action != NULL) + { + if (action->link == index) return 1; + action = action->next; + } + } + } + return 0; +} + +int valvecheck(Project *pr, int index, int type, int j1, int j2) +/* +**-------------------------------------------------------------- +** Input: index = link index +** type = valve type +** j1 = index of upstream node +** j2 = index of downstream node +** Output: returns an error code +** Purpose: checks for illegal connections between valves +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + + int k, vj1, vj2; + LinkType vtype; + Slink *link; + Svalve *valve; + + if (type == PRV || type == PSV || type == FCV) + { + // Can't be connected to a fixed grade node + if (j1 > net->Njuncs || j2 > net->Njuncs) return 219; + + // Examine each existing valve + for (k = 1; k <= net->Nvalves; k++) + { + valve = &net->Valve[k]; + if (valve->Link == index) continue; + link = &net->Link[valve->Link]; + vj1 = link->N1; + vj2 = link->N2; + vtype = link->Type; + + // Cannot have two PRVs sharing downstream nodes or in series + if (vtype == PRV && type == PRV) + { + if (vj2 == j2 || vj2 == j1 || vj1 == j2) return 220; + } + + // Cannot have two PSVs sharing upstream nodes or in series + if (vtype == PSV && type == PSV) + { + if (vj1 == j1 || vj1 == j2 || vj2 == j1) return 220; + } + + // Cannot have PSV connected to downstream node of PRV + if (vtype == PSV && type == PRV && vj1 == j2) return 220; + if (vtype == PRV && type == PSV && vj2 == j1) return 220; + + // Cannot have PSV connected to downstream node of FCV + // nor have PRV connected to upstream node of FCV + if (vtype == FCV && type == PSV && vj2 == j1) return 220; + if (vtype == FCV && type == PRV && vj1 == j2) return 220; + if (vtype == PSV && type == FCV && vj1 == j2) return 220; + if (vtype == PRV && type == FCV && vj2 == j1) return 220; + } + } + return 0; +} + +int findnode(Network *network, char *id) +/*---------------------------------------------------------------- +** Input: id = node ID +** Output: none +** Returns: index of node with given ID, or 0 if ID not found +** Purpose: uses hash table to find index of node with given ID +**---------------------------------------------------------------- +*/ +{ + return (hashtable_find(network->NodeHashTable, id)); +} + +int findlink(Network *network, char *id) +/*---------------------------------------------------------------- +** Input: id = link ID +** Output: none +** Returns: index of link with given ID, or 0 if ID not found +** Purpose: uses hash table to find index of link with given ID +**---------------------------------------------------------------- +*/ +{ + return (hashtable_find(network->LinkHashTable, id)); +} + +int findtank(Network *network, int index) +/*---------------------------------------------------------------- +** Input: index = node index +** Output: none +** Returns: index of tank with given node id, or NOTFOUND if tank not found +** Purpose: for use in the deletenode function +**---------------------------------------------------------------- +*/ +{ + int i; + for (i = 1; i <= network->Ntanks; i++) + { + if (network->Tank[i].Node == index) return i; + } + return NOTFOUND; +} + +int findpump(Network *network, int index) +/*---------------------------------------------------------------- +** Input: index = link ID +** Output: none +** Returns: index of pump with given link id, or NOTFOUND if pump not found +** Purpose: for use in the deletelink function +**---------------------------------------------------------------- +*/ +{ + int i; + for (i = 1; i <= network->Npumps; i++) + { + if (network->Pump[i].Link == index) return i; + } + return NOTFOUND; +} + +int findvalve(Network *network, int index) +/*---------------------------------------------------------------- +** Input: index = link ID +** Output: none +** Returns: index of valve with given link id, or NOTFOUND if valve not found +** Purpose: for use in the deletelink function +**---------------------------------------------------------------- +*/ +{ + int i; + for (i = 1; i <= network->Nvalves; i++) + { + if (network->Valve[i].Link == index) return i; + } + return NOTFOUND; +} + +int findpattern(Network *network, char *id) +/*---------------------------------------------------------------- +** Input: id = time pattern ID +** Output: none +** Returns: time pattern index, or -1 if pattern not found +** Purpose: finds index of time pattern given its ID +**---------------------------------------------------------------- +*/ +{ + int i; + + // Don't forget to include the "dummy" pattern 0 in the search + for (i = 0; i <= network->Npats; i++) + { + if (strcmp(id, network->Pattern[i].ID) == 0) return i; + } + return -1; +} + +int findcurve(Network *network, char *id) +/*---------------------------------------------------------------- +** Input: id = data curve ID +** Output: none +** Returns: data curve index, or 0 if curve not found +** Purpose: finds index of data curve given its ID +**---------------------------------------------------------------- +*/ +{ + int i; + for (i = 1; i <= network->Ncurves; i++) + { + if (strcmp(id, network->Curve[i].ID) == 0) return i; + } + return 0; +} + +void adjustpattern(int *pat, int index) +/*---------------------------------------------------------------- +** Local function that modifies a reference to a deleted time pattern +**---------------------------------------------------------------- +*/ +{ + if (*pat == index) *pat = 0; + else if (*pat > index) (*pat)--; +} + +void adjustpatterns(Network *network, int index) +/*---------------------------------------------------------------- +** Input: index = index of time pattern being deleted +** Output: none +** Purpose: modifies references made to a deleted time pattern +**---------------------------------------------------------------- +*/ +{ + int j; + Pdemand demand; + Psource source; + + // Adjust patterns used by junctions + for (j = 1; j <= network->Nnodes; j++) + { + // Adjust demand patterns + for (demand = network->Node[j].D; demand != NULL; demand = demand->next) + { + adjustpattern(&demand->Pat, index); + } + // Adjust WQ source patterns + source = network->Node[j].S; + if (source) adjustpattern(&source->Pat, index); + } + + // Adjust patterns used by reservoir tanks + for (j = 1; j <= network->Ntanks; j++) + { + adjustpattern(&network->Tank[j].Pat, index); + } + + // Adjust patterns used by pumps + for (j = 1; j <= network->Npumps; j++) + { + adjustpattern(&network->Pump[j].Upat, index); + adjustpattern(&network->Pump[j].Epat, index); + } +} + +void adjustcurve(int *curve, int index) +/*---------------------------------------------------------------- +** Local function that modifies a reference to a deleted data curve +**---------------------------------------------------------------- +*/ +{ + if (*curve == index) *curve = 0; + else if (*curve > index) (*curve)--; +} + +void adjustcurves(Network *network, int index) +/*---------------------------------------------------------------- +** Input: index = index of data curve being deleted +** Output: none +** Purpose: modifies references made to a deleted data curve +**---------------------------------------------------------------- +*/ +{ + int j, k, setting; + + // Adjust tank volume curves + for (j = 1; j <= network->Ntanks; j++) + { + adjustcurve(&network->Tank[j].Vcurve, index); + } + + // Adjust pump curves + for (j = 1; j <= network->Npumps; j++) + { + adjustcurve(&network->Pump[j].Hcurve, index); + adjustcurve(&network->Pump[j].Ecurve, index); + } + + // Adjust GPV curves + for (j = 1; j <= network->Nvalves; j++) + { + k = network->Valve[j].Link; + if (network->Link[k].Type == GPV) + { + setting = INT(network->Link[k].Kc); + adjustcurve(&setting, index); + network->Link[k].Kc = setting; + } + } +} + +int adjustpumpparams(Project *pr, int curveIndex) +/*---------------------------------------------------------------- +** Input: curveIndex = index of a data curve +** Output: returns an error code +** Purpose: updates head curve parameters for pumps using a +** curve whose data have been modified. +**---------------------------------------------------------------- +*/ +{ + Network *network = &pr->network; + + double *Ucf = pr->Ucf; + int j, err = 0; + Spump *pump; + + // Check each pump + for (j = 1; j <= network->Npumps; j++) + { + // Pump uses curve as head curve + pump = &network->Pump[j]; + if ( curveIndex == pump->Hcurve) + { + // Update its head curve parameters + pump->Ptype = NOCURVE; + err = updatepumpparams(pr, curveIndex); + if (err > 0) break; + + // Convert parameters to internal units + if (pump->Ptype == POWER_FUNC) + { + pump->H0 /= Ucf[HEAD]; + pump->R *= (pow(Ucf[FLOW], pump->N) / Ucf[HEAD]); + } + pump->Q0 /= Ucf[FLOW]; + pump->Qmax /= Ucf[FLOW]; + pump->Hmax /= Ucf[HEAD]; + } + } + return err; +} + + +int resizecurve(Scurve *curve, int size) +/*---------------------------------------------------------------- +** Input: curve = a data curve object +** size = desired number of curve data points +** Output: error code +** Purpose: resizes a data curve to a desired size +**---------------------------------------------------------------- +*/ +{ + double *x; + double *y; + + if (curve->Capacity < size) + { + x = (double *)realloc(curve->X, size * sizeof(double)); + if (x == NULL) return 101; + y = (double *)realloc(curve->Y, size * sizeof(double)); + if (y == NULL) + { + free(x); + return 101; + } + curve->X = x; + curve->Y = y; + curve->Capacity = size; + } + return 0; +} + +int getcomment(Network *network, int object, int index, char *comment) +//---------------------------------------------------------------- +// Input: object = a type of network object +// index = index of the specified object +// comment = the object's comment string +// Output: error code +// Purpose: gets the comment string assigned to an object. +//---------------------------------------------------------------- +{ + char *currentcomment; + + // Get pointer to specified object's comment + switch (object) + { + case NODE: + if (index < 1 || index > network->Nnodes) return 251; + currentcomment = network->Node[index].Comment; + break; + case LINK: + if (index < 1 || index > network->Nlinks) return 251; + currentcomment = network->Link[index].Comment; + break; + case TIMEPAT: + if (index < 1 || index > network->Npats) return 251; + currentcomment = network->Pattern[index].Comment; + break; + case CURVE: + if (index < 1 || index > network->Ncurves) return 251; + currentcomment = network->Curve[index].Comment; + break; + default: + strcpy(comment, ""); + return 251; + } + + // Copy the object's comment to the returned string + if (currentcomment) strcpy(comment, currentcomment); + else comment[0] = '\0'; + return 0; +} + +int setcomment(Network *network, int object, int index, const char *newcomment) +//---------------------------------------------------------------- +// Input: object = a type of network object +// index = index of the specified object +// newcomment = new comment string +// Output: error code +// Purpose: sets the comment string of an object. +//---------------------------------------------------------------- +{ + char *comment; + + switch (object) + { + case NODE: + if (index < 1 || index > network->Nnodes) return 251; + comment = network->Node[index].Comment; + network->Node[index].Comment = xstrcpy(&comment, newcomment, MAXMSG); + return 0; + + case LINK: + if (index < 1 || index > network->Nlinks) return 251; + comment = network->Link[index].Comment; + network->Link[index].Comment = xstrcpy(&comment, newcomment, MAXMSG); + return 0; + + case TIMEPAT: + if (index < 1 || index > network->Npats) return 251; + comment = network->Pattern[index].Comment; + network->Pattern[index].Comment = xstrcpy(&comment, newcomment, MAXMSG); + return 0; + + case CURVE: + if (index < 1 || index > network->Ncurves) return 251; + comment = network->Curve[index].Comment; + network->Curve[index].Comment = xstrcpy(&comment, newcomment, MAXMSG); + return 0; + + default: return 251; + } +} + +int namevalid(const char *name) +//---------------------------------------------------------------- +// Input: name = name used to ID an object +// Output: returns TRUE if name is valid, FALSE if not +// Purpose: checks that an object's ID name is valid. +//---------------------------------------------------------------- +{ + size_t n = strlen(name); + if (n < 1 || n > MAXID || strpbrk(name, " ;") || name[0] == '"') return FALSE; + return TRUE; +} + +void getTmpName(char *fname) +//---------------------------------------------------------------- +// Input: fname = file name string +// Output: an unused file name +// Purpose: creates a temporary file name with an "en" prefix +// or a blank name if an error occurs. +//---------------------------------------------------------------- +{ +#ifdef _WIN32 + + char* name = NULL; + + // --- use Windows _tempnam function to get a pointer to an + // unused file name that begins with "en" + strcpy(fname, ""); + name = _tempnam(NULL, "en"); + if (name) + { + // --- copy the file name to fname + if (strlen(name) < MAXFNAME) strncpy(fname, name, MAXFNAME); + + // --- free the pointer returned by _tempnam + free(name); + } + // --- for non-Windows systems: +#else + // --- use system function mkstemp() to create a temporary file name +/* + int f = -1; + strcpy(fname, "enXXXXXX"); + f = mkstemp(fname); + close(f); + remove(fname); +*/ + strcpy(fname, "enXXXXXX"); + FILE *f = fdopen(mkstemp(fname), "r"); + if (f == NULL) strcpy(fname, ""); + else fclose(f); + remove(fname); +#endif +} + +char *xstrcpy(char **s1, const char *s2, const size_t n) +//---------------------------------------------------------------- +// Input: s1 = destination string +// s2 = source string +// n = maximum size of strings +// Output: none +// Purpose: like strcpy except for dynamic strings. +// Note: The calling program is responsible for ensuring that +// s1 points to a valid memory location or is NULL. E.g., +// the following code will likely cause a segment fault: +// char *s; +// s = xstrcpy(s, "Some text"); +// while this would work correctly: +// char *s = NULL; +// s = xstrcpy(s, "Some text"); +//---------------------------------------------------------------- +{ + size_t n1 = 0, n2 = 0; + + // Find size of source string + if (s2) n2 = strlen(s2); + if (n2 > n) n2 = n; + + // Source string is empty -- free destination string + if (n2 == 0) + { + free(*s1); + *s1 = NULL; + return NULL; + } + + // See if size of destination string needs to grow + if (*s1) n1 = strlen(*s1); + if (n2 > n1) *s1 = realloc(*s1, (n2 + 1) * sizeof(char)); + + // Copy the source string into the destination string + strncpy(*s1, s2, n2+1); + return *s1; +} + +int strcomp(const char *s1, const char *s2) +/*--------------------------------------------------------------- +** Input: s1 = character string +** s2 = character string +** Output: none +** Returns: 1 if s1 is same as s2, 0 otherwise +** Purpose: case insensitive comparison of strings s1 & s2 +**--------------------------------------------------------------- +*/ +{ + int i; + for (i = 0; UCHAR(s1[i]) == UCHAR(s2[i]); i++) + { + if (!s1[i + 1] && !s2[i + 1]) return 1; + } + return 0; +} + +double interp(int n, double x[], double y[], double xx) +/*---------------------------------------------------------------- +** Input: n = number of data pairs defining a curve +** x = x-data values of curve +** y = y-data values of curve +** xx = specified x-value +** Output: none +** Returns: y-value on curve at x = xx +** Purpose: uses linear interpolation to find y-value on a +** data curve corresponding to specified x-value. +** NOTE: does not extrapolate beyond endpoints of curve. +**---------------------------------------------------------------- +*/ +{ + int k, m; + double dx, dy; + + m = n - 1; // Highest data index + if (xx <= x[0]) return (y[0]); // xx off low end of curve + for (k = 1; k <= m; k++) // Bracket xx on curve + { + if (x[k] >= xx) // Interp. over interval + { + dx = x[k] - x[k - 1]; + dy = y[k] - y[k - 1]; + if (ABS(dx) < TINY) return (y[k]); + else return (y[k] - (x[k] - xx) * dy / dx); + } + } + return (y[m]); // xx off high end of curve +} + +char *geterrmsg(int errcode, char *msg) +/*---------------------------------------------------------------- +** Input: errcode = error code +** Output: none +** Returns: pointer to string with error message +** Purpose: retrieves text of error message +**---------------------------------------------------------------- +*/ +{ + switch (errcode) + { + +//#define DAT(code,string) case code: sprintf(msg, "%s", string); break; +#define DAT(code,string) case code: strcpy(msg, string); break; +#include "errors.dat" +#undef DAT + + default: + strcpy(msg, ""); + } + return (msg); +} + +void errmsg(Project *pr, int errcode) +/*---------------------------------------------------------------- +** Input: errcode = error code +** Output: none +** Purpose: writes error message to report file +**---------------------------------------------------------------- +*/ +{ + char errmsg[MAXMSG + 1] = ""; + if (errcode == 309) /* Report file write error - */ + { /* Do not write msg to file. */ + + } + else if (pr->report.RptFile != NULL && pr->report.Messageflag && errcode > 100) + { + sprintf(pr->Msg, "Error %d: %s", errcode, geterrmsg(errcode, errmsg)); + writeline(pr, pr->Msg); + } +} + +void writewin(void(*vp)(char *), char *s) +/*---------------------------------------------------------------- +** Input: text string +** Output: none +** Purpose: passes character string to viewprog() in +** application which calls the EPANET DLL +**---------------------------------------------------------------- +*/ +{ + char progmsg[MAXMSG + 1]; + if (vp != NULL) + { + strncpy(progmsg, s, MAXMSG); + vp(progmsg); + } +} diff --git a/src/quality.c b/src/quality.c old mode 100755 new mode 100644 index 86f7701..05d6519 --- a/src/quality.c +++ b/src/quality.c @@ -1,1787 +1,685 @@ -/* -******************************************************************************* - -QUALITY.C -- Water Quality Simulator for EPANET Program - -VERSION: 2.00 -DATE: 5/29/00 - 9/7/00 - 10/25/00 - 8/15/07 (2.00.11) - 2/14/08 (2.00.12) -AUTHOR: L. Rossman - US EPA - NRMRL - - This module contains the network water quality simulator. - - For each time period, hydraulic results are read in from the - binary file HydFile, hydraulic and water quality results are - written to the binary output file OutFile (if the current period - is a reporting period), and the water quality is transported - and reacted over the duration of the time period. - - The entry points for this module are: - openqual() -- called from ENopenQ() in EPANET.C - initqual() -- called from ENinitQ() in EPANET.C - runqual() -- called from ENrunQ() in EPANET.C - nextqual() -- called from ENnextQ() in EPANET.C - stepqual() -- called from ENstepQ() in EPANET.C - closequal() -- called from ENcloseQ() in EPANET.C - - Calls are made to: - AllocInit() - Alloc() - AllocFree() - in MEMPOOL.C to utilize a memory pool to prevent excessive malloc'ing - when constantly creating and destroying pipe sub-segments during - the water quality transport calculations. - - Calls are also made to: - readhyd() - readhydstep() - savenetdata() - saveoutput() - savefinaloutput() - in OUTPUT.C to retrieve hydraulic results and save all results. - -******************************************************************************* -*/ - -#include -#include -#ifndef __APPLE__ -#include -#else -#include -#endif -#include -#include "hash.h" -#include "text.h" -#include "types.h" -#include "funcs.h" -#define EXTERN extern -#include "vars.h" -#include "mempool.h" - -/* -** Macros to identify upstream & downstream nodes of a link -** under the current flow and to compute link volume -*/ -#define UP_NODE(x) ( (FlowDir[(x)]=='+') ? Link[(x)].N1 : Link[(x)].N2 ) -#define DOWN_NODE(x) ( (FlowDir[(x)]=='+') ? Link[(x)].N2 : Link[(x)].N1 ) -#define LINKVOL(k) ( 0.785398*Link[(k)].Len*SQR(Link[(k)].Diam) ) - -Pseg FreeSeg; /* Pointer to unused segment */ -Pseg *FirstSeg, /* First (downstream) segment in each pipe */ - *LastSeg; /* Last (upstream) segment in each pipe */ -char *FlowDir; /* Flow direction for each pipe */ -double *VolIn; /* Total volume inflow to node */ -double *MassIn; /* Total mass inflow to node */ -double Sc; /* Schmidt Number */ -double Bucf; /* Bulk reaction units conversion factor */ -double Tucf; /* Tank reaction units conversion factor */ - -/*** Moved to vars.h ***/ //(2.00.12 - LR) -//char Reactflag; /* Reaction indicator */ - -char OutOfMemory; /* Out of memory indicator */ -static alloc_handle_t *SegPool; // Memory pool for water quality segments //(2.00.11 - LR) - - -int openqual() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: opens WQ solver system -**-------------------------------------------------------------- -*/ -{ - int errcode = 0; - int n; - - /* Allocate memory pool for WQ segments */ - OutOfMemory = FALSE; - SegPool = AllocInit(); //(2.00.11 - LR) - if (SegPool == NULL) errcode = 101; //(2.00.11 - LR) - - /* Allocate scratch array & reaction rate array*/ - TempQual = (double *) calloc(MAX((Nnodes+1),(Nlinks+1)),sizeof(double)); - PipeRateCoeff = (double *) calloc((Nlinks+1), sizeof(double)); - ERRCODE(MEMCHECK(TempQual)); - ERRCODE(MEMCHECK(PipeRateCoeff)); - - /* Allocate memory for WQ solver */ - n = Nlinks+Ntanks+1; - FirstSeg = (Pseg *) calloc(n, sizeof(Pseg)); - LastSeg = (Pseg *) calloc(n, sizeof(Pseg)); - FlowDir = (char *) calloc(n, sizeof(char)); - n = Nnodes+1; - VolIn = (double *) calloc(n, sizeof(double)); - MassIn = (double *) calloc(n, sizeof(double)); - ERRCODE(MEMCHECK(FirstSeg)); - ERRCODE(MEMCHECK(LastSeg)); - ERRCODE(MEMCHECK(FlowDir)); - ERRCODE(MEMCHECK(VolIn)); - ERRCODE(MEMCHECK(MassIn)); - return(errcode); -} - -/* Local function to compute unit conversion factor for bulk reaction rates */ - double getucf(double order) - { - if (order < 0.0) order = 0.0; - if (order == 1.0) return(1.0); - else return(1./pow(LperFT3,(order-1.0))); - } - - -void initqual() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: re-initializes WQ solver system -**-------------------------------------------------------------- -*/ -{ - int i; - - /* Initialize quality, tank volumes, & source mass flows */ - for (i=1; i<=Nnodes; i++) NodeQual[i] = Node[i].C0; - for (i=1; i<=Ntanks; i++) Tank[i].C = Node[Tank[i].Node].C0; - for (i=1; i<=Ntanks; i++) Tank[i].V = Tank[i].V0; - for (i=1; i<=Nnodes; i++) { - if (Node[i].S != NULL) Node[i].S->Smass = 0.0; - } - - QTankVolumes = calloc(Ntanks, sizeof(double)); // keep track of previous step's tank volumes. - QLinkFlow = calloc(Nlinks, sizeof(double)); // keep track of previous step's link flows. - - /* Set WQ parameters */ - Bucf = 1.0; - Tucf = 1.0; - Reactflag = 0; - if (Qualflag != NONE) - { - /* Initialize WQ at trace node (if applicable) */ - if (Qualflag == TRACE) NodeQual[TraceNode] = 100.0; - - /* Compute Schmidt number */ - if (Diffus > 0.0) - Sc = Viscos/Diffus; - else - Sc = 0.0; - - /* Compute unit conversion factor for bulk react. coeff. */ - Bucf = getucf(BulkOrder); - Tucf = getucf(TankOrder); - - /* Check if modeling a reactive substance */ - Reactflag = setReactflag(); - - /* Reset memory pool */ - FreeSeg = NULL; - AllocSetPool(SegPool); //(2.00.11 - LR) - AllocReset(); //(2.00.11 - LR) - } - - /* Initialize avg. reaction rates */ - Wbulk = 0.0; - Wwall = 0.0; - Wtank = 0.0; - Wsource = 0.0; - - /* Re-position hydraulics file */ - if (!OpenHflag) { - fseek(HydFile,HydOffset,SEEK_SET); - } - - - /* Set elapsed times to zero */ - Htime = 0; - Qtime = 0; - Rtime = Rstart; - Nperiods = 0; - - initsegs(); -} - - -int runqual(long *t) -/* -**-------------------------------------------------------------- -** Input: none -** Output: t = pointer to current simulation time (sec) -** Returns: error code -** Purpose: retrieves hydraulics for next hydraulic time step -** (at time *t) and saves current results to file -**-------------------------------------------------------------- -*/ -{ - long hydtime; /* Hydraulic solution time */ - long hydstep; /* Hydraulic time step */ - int errcode = 0; - int i; - - /* Update reported simulation time */ - *t = Qtime; - - /* Read hydraulic solution from hydraulics file */ - if (Qtime == Htime) - { - errcode = gethyd(&hydtime, &hydstep); - if (!OpenHflag) { // test for sequential vs stepwise - // sequential - Htime = hydtime + hydstep; - } - else { - // stepwise calculation - hydraulic results are already in memory - for (i=1; i<= Ntanks; ++i) { - QTankVolumes[i-1] = Tank[i].V; - } - - for (i=1; i<= Nlinks; ++i) - { - if (LinkStatus[i] <= CLOSED) { - QLinkFlow[i-1] = Q[i]; - } - } - - } - } - else { - // stepwise calculation - for (i=1; i<= Ntanks; ++i) { - QTankVolumes[i-1] = Tank[i].V; - } - - for (i=1; i<= Nlinks; ++i) - { - if (LinkStatus[i] <= CLOSED) { - QLinkFlow[i-1] = Q[i]; - } - } - - } - - return(errcode); -} - - -int nextqual(long *tstep) -/* -**-------------------------------------------------------------- -** Input: none -** Output: tstep = pointer to time step (sec) -** Returns: error code -** Purpose: updates WQ conditions until next hydraulic -** solution occurs (after *tstep secs.) -**-------------------------------------------------------------- -*/ -{ - long hydstep; /* Hydraulic solution time step */ - int errcode = 0; - double *tankVolumes; - int i; - - /* Determine time step */ - *tstep = 0; - - // hydstep = Htime - Qtime; - - if (Htime <= Dur) hydstep = Htime - Qtime; - else hydstep = 0; - - // if we're operating in stepwise mode, capture the tank levels so we can restore them later. - if (OpenHflag) { - tankVolumes = calloc(Ntanks, sizeof(double)); - for (i=1; i<=Ntanks; ++i) { - if (Tank[i].A != 0) { // skip reservoirs - tankVolumes[i-1] = Tank[i].V; - } - } - - // restore the previous step's tank volumes - for (i=1; i<=Ntanks; i++) { - if (Tank[i].A != 0) { // skip reservoirs again - int n = Tank[i].Node; - Tank[i].V = QTankVolumes[i-1]; - NodeHead[n] = tankgrade(i,Tank[i].V); - } - } - - // restore the previous step's pipe link flows - for (i=1; i<=Nlinks; i++) { - if (LinkStatus[i] <= CLOSED) { - Q[i] = 0.0; - } - } - - } - - /* Perform water quality routing over this time step */ - if (Qualflag != NONE && hydstep > 0) transport(hydstep); - - /* Update current time */ - if (OutOfMemory) errcode = 101; - if (!errcode) *tstep = hydstep; - Qtime += hydstep; - - /* Save final output if no more time steps */ - if (!errcode && Saveflag && *tstep == 0) errcode = savefinaloutput(); - - // restore tank levels to post-runH state, if needed. - if (OpenHflag) { - for (i=1; i<=Ntanks; i++) { - if (Tank[i].A != 0) { // skip reservoirs again - int n = Tank[i].Node; - Tank[i].V = tankVolumes[i-1]; - NodeHead[n] = tankgrade(i,Tank[i].V); - } - } - - for (i=1; i<=Nlinks; ++i) { - if (LinkStatus[i] <= CLOSED) { - Q[i] = QLinkFlow[i-1]; - } - } - - free(tankVolumes); - } - - return(errcode); -} - - -int stepqual(long *tleft) -/* -**-------------------------------------------------------------- -** Input: none -** Output: tleft = pointer to time left in simulation -** Returns: error code -** Purpose: updates WQ conditions over a single WQ time step -**-------------------------------------------------------------- -*/ -{ long dt, hstep, t, tstep; - int errcode = 0; - tstep = Qstep; - do - { - dt = tstep; - hstep = Htime - Qtime; - if (hstep < dt) - { - dt = hstep; - if (Qualflag != NONE) transport(dt); - Qtime += dt; - errcode = runqual(&t); - Qtime = t; - } - else - { - if (Qualflag != NONE) transport(dt); - Qtime += dt; - } - tstep -= dt; - if (OutOfMemory) errcode = 101; - } while (!errcode && tstep > 0); - *tleft = Dur - Qtime; - if (!errcode && Saveflag && *tleft == 0) errcode = savefinaloutput(); - return(errcode); -} - - -int closequal() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: closes WQ solver system -**-------------------------------------------------------------- -*/ -{ - int errcode = 0; - - /* Free memory pool */ - if ( SegPool ) //(2.00.11 - LR) - { //(2.00.11 - LR) - AllocSetPool(SegPool); //(2.00.11 - LR) - AllocFreePool(); //(2.00.11 - LR) - } //(2.00.11 - LR) - - free(FirstSeg); - free(LastSeg); - free(FlowDir); - free(VolIn); - free(MassIn); - free(PipeRateCoeff); - free(TempQual); - free(QTankVolumes); - free(QLinkFlow); - return(errcode); -} - - -int gethyd(long *hydtime, long *hydstep) -/* -**----------------------------------------------------------- -** Input: none -** Output: hydtime = pointer to hydraulic solution time -** hydstep = pointer to hydraulic time step -** Returns: error code -** Purpose: retrieves hydraulic solution and hydraulic -** time step for next hydraulic event -** -** NOTE: when this function is called, WQ results have -** already been updated to the point in time when -** the next hydraulic event occurs. -**----------------------------------------------------------- -*/ -{ - int errcode = 0; - - // if hydraulics are not open, then we're operating in sequential mode. - // else hydraulics are open, so use the hydraulic results in memory rather than reading from the temp file. - if (!OpenHflag) { - /* Read hydraulic results from file */ - if (!readhyd(hydtime)) return(307); - if (!readhydstep(hydstep)) return(307); - Htime = *hydtime; - } - - /* Save current results to output file */ - if (Htime >= Rtime) - { - if (Saveflag) - { - errcode = saveoutput(); - Nperiods++; - } - Rtime += Rstep; - } - - /* If simulating WQ: */ - if (Qualflag != NONE && Qtime < Dur) - { - - /* Compute reaction rate coeffs. */ - if (Reactflag && Qualflag != AGE) { - ratecoeffs(); - } - - /* Initialize pipe segments (at time 0) or */ - /* else re-orient segments if flow reverses.*/ - //if (Qtime == 0) - // initsegs(); - //else - // if hydraulics are open, or if we're in sequential mode (where qtime can increase) - if (OpenHflag || Qtime != 0) { - reorientsegs(); - } - - } - return(errcode); -} - - -char setReactflag() -/* -**----------------------------------------------------------- -** Input: none -** Output: returns 1 for reactive WQ constituent, 0 otherwise -** Purpose: checks if reactive chemical being simulated -**----------------------------------------------------------- -*/ -{ - int i; - if (Qualflag == TRACE) return(0); - else if (Qualflag == AGE) return(1); - else - { - for (i=1; i<=Nlinks; i++) - { - if (Link[i].Type <= PIPE) - { - if (Link[i].Kb != 0.0 || Link[i].Kw != 0.0) return(1); - } - } - for (i=1; i<=Ntanks; i++) - if (Tank[i].Kb != 0.0) return(1); - } - return(0); -} - - -void transport(long tstep) -/* -**-------------------------------------------------------------- -** Input: tstep = length of current time step -** Output: none -** Purpose: transports constituent mass through pipe network -** under a period of constant hydraulic conditions. -**-------------------------------------------------------------- -*/ -{ - long qtime, dt; - - /* Repeat until elapsed time equals hydraulic time step */ - - AllocSetPool(SegPool); //(2.00.11 - LR) - qtime = 0; - while (!OutOfMemory && qtime < tstep) - { /* Qstep is quality time step */ - dt = MIN(Qstep,tstep-qtime); /* Current time step */ - qtime += dt; /* Update elapsed time */ - if (Reactflag) updatesegs(dt); /* Update quality in inner link segs */ - accumulate(dt); /* Accumulate flow at nodes */ - updatenodes(dt); /* Update nodal quality */ - sourceinput(dt); /* Compute inputs from sources */ - release(dt); /* Release new nodal flows */ - } - updatesourcenodes(tstep); /* Update quality at source nodes */ - -} - - -void initsegs() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: initializes water quality segments -**-------------------------------------------------------------- -*/ -{ - int j,k; - double c,v; - - /* Examine each link */ - for (k=1; k<=Nlinks; k++) - { - - /* Establish flow direction */ - FlowDir[k] = '+'; - if (Q[k] < 0.) { - FlowDir[k] = '-'; - } - - /* Set segs to zero */ - LastSeg[k] = NULL; - FirstSeg[k] = NULL; - - /* Find quality of downstream node */ - j = DOWN_NODE(k); - if (j <= Njuncs) c = NodeQual[j]; - else c = Tank[j-Njuncs].C; - - /* Fill link with single segment with this quality */ - addseg(k,LINKVOL(k),c); - } - - /* Initialize segments in tanks that use them */ - for (j=1; j<=Ntanks; j++) - { - - /* Skip reservoirs & complete mix tanks */ - if (Tank[j].A == 0.0 - || Tank[j].MixModel == MIX1) continue; - - /* Tank segment pointers are stored after those for links */ - k = Nlinks + j; - c = Tank[j].C; - LastSeg[k] = NULL; - FirstSeg[k] = NULL; - - /* Add 2 segments for 2-compartment model */ - if (Tank[j].MixModel == MIX2) - { - v = MAX(0,Tank[j].V-Tank[j].V1max); - addseg(k,v,c); - v = Tank[j].V - v; - addseg(k,v,c); - } - - /* Add one segment for FIFO & LIFO models */ - else - { - v = Tank[j].V; - addseg(k,v,c); - } - } -} - - -void reorientsegs() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: re-orients segments (if flow reverses) -**-------------------------------------------------------------- -*/ -{ - Pseg seg, nseg, pseg; - int k; - char newdir; - - /* Examine each link */ - for (k=1; k<=Nlinks; k++) - { - - /* Find new flow direction */ - newdir = '+'; - if (Q[k] == 0.0) { - newdir = FlowDir[k]; - } - else if (Q[k] < 0.0) { - newdir = '-'; - } - - /* If direction changes, then reverse order of segments */ - /* (first to last) and save new direction */ - if (newdir != FlowDir[k]) - { - seg = FirstSeg[k]; - FirstSeg[k] = LastSeg[k]; - LastSeg[k] = seg; - pseg = NULL; - while (seg != NULL) - { - nseg = seg->prev; - seg->prev = pseg; - pseg = seg; - seg = nseg; - } - FlowDir[k] = newdir; - } - } -} - - -void updatesegs(long dt) -/* -**------------------------------------------------------------- -** Input: t = time from last WQ segment update -** Output: none -** Purpose: reacts material in pipe segments up to time t -**------------------------------------------------------------- -*/ -{ - int k; - Pseg seg; - double cseg, rsum, vsum; - - /* Examine each link in network */ - for (k=1; k<=Nlinks; k++) - { - - /* Skip zero-length links (pumps & valves) */ - rsum = 0.0; - vsum = 0.0; - if (Link[k].Len == 0.0) continue; - - /* Examine each segment of the link */ - seg = FirstSeg[k]; - while (seg != NULL) - { - - /* React segment over time dt */ - cseg = seg->c; - seg->c = pipereact(k,seg->c,seg->v,dt); - - /* Accumulate volume-weighted reaction rate */ - if (Qualflag == CHEM) - { - rsum += ABS((seg->c - cseg))*seg->v; - vsum += seg->v; - } - seg = seg->prev; - } - - /* Normalize volume-weighted reaction rate */ - if (vsum > 0.0) PipeRateCoeff[k] = rsum/vsum/dt*SECperDAY; - else PipeRateCoeff[k] = 0.0; - } -} - - -void removesegs(int k) -/* -**------------------------------------------------------------- -** Input: k = link index -** Output: none -** Purpose: removes all segments in link k -**------------------------------------------------------------- -*/ -{ - Pseg seg; - seg = FirstSeg[k]; - while (seg != NULL) - { - FirstSeg[k] = seg->prev; - seg->prev = FreeSeg; - FreeSeg = seg; - seg = FirstSeg[k]; - } - LastSeg[k] = NULL; -} - - -void addseg(int k, double v, double c) -/* -**------------------------------------------------------------- -** Input: k = link segment -** v = segment volume -** c = segment quality -** Output: none -** Purpose: adds a segment to start of link k (i.e., upstream -** of current last segment). -**------------------------------------------------------------- -*/ -{ - Pseg seg; - - if (FreeSeg != NULL) - { - seg = FreeSeg; - FreeSeg = seg->prev; - } - else - { - seg = (struct Sseg *) Alloc(sizeof(struct Sseg)); - if (seg == NULL) - { - OutOfMemory = TRUE; - return; - } - } - seg->v = v; - seg->c = c; - seg->prev = NULL; - if (FirstSeg[k] == NULL) FirstSeg[k] = seg; - if (LastSeg[k] != NULL) LastSeg[k]->prev = seg; - LastSeg[k] = seg; -} - - -void accumulate(long dt) -/* -**------------------------------------------------------------- -** Input: dt = current WQ time step -** Output: none -** Purpose: accumulates mass flow at nodes and updates nodal -** quality -**------------------------------------------------------------- -*/ -{ - int i,j,k; - double cseg,v,vseg; - Pseg seg; - - /* Re-set memory used to accumulate mass & volume */ - memset(VolIn,0,(Nnodes+1)*sizeof(double)); - memset(MassIn,0,(Nnodes+1)*sizeof(double)); - memset(TempQual,0,(Nnodes+1)*sizeof(double)); - - /* Compute average conc. of segments adjacent to each node */ - /* (For use if there is no transport through the node) */ - for (k=1; k<=Nlinks; k++) - { - j = DOWN_NODE(k); /* Downstream node */ - if (FirstSeg[k] != NULL) /* Accumulate concentrations */ - { - MassIn[j] += FirstSeg[k]->c; - VolIn[j]++; - } - j = UP_NODE(k); /* Upstream node */ - if (LastSeg[k] != NULL) /* Accumulate concentrations */ - { - MassIn[j] += LastSeg[k]->c; - VolIn[j]++; - } - } - - for (k=1; k<=Nnodes; k++) { - if (VolIn[k] > 0.0) { - TempQual[k] = MassIn[k]/VolIn[k]; - } - } - - /* Move mass from first segment of each pipe into downstream node */ - memset(VolIn,0,(Nnodes+1)*sizeof(double)); - memset(MassIn,0,(Nnodes+1)*sizeof(double)); - for (k=1; k<=Nlinks; k++) - { - i = UP_NODE(k); /* Upstream node */ - j = DOWN_NODE(k); /* Downstream node */ - v = ABS(Q[k])*dt; /* Flow volume */ - -//// Start of deprecated code segment //// //(2.00.12 - LR) - - /* If link volume < flow volume, then transport upstream */ - /* quality to downstream node and remove all link segments. */ -/* if (LINKVOL(k) < v) - { - VolIn[j] += v; - seg = FirstSeg[k]; - cseg = NodeQuali]; - if (seg != NULL) cseg = seg->c; - MassIn[j] += v*cseg; - removesegs(k); - } -*/ - /* Otherwise remove flow volume from leading segments */ - /* and accumulate flow mass at downstream node */ - //else - -//// End of deprecated code segment. //// //(2.00.12 - LR) - - while (v > 0.0) //(2.00.12 - LR) - { - /* Identify leading segment in pipe */ - seg = FirstSeg[k]; - if (seg == NULL) break; - - /* Volume transported from this segment is */ - /* minimum of flow volume & segment volume */ - /* (unless leading segment is also last segment) */ - vseg = seg->v; - vseg = MIN(vseg,v); - if (seg == LastSeg[k]) vseg = v; - - /* Update volume & mass entering downstream node */ - cseg = seg->c; - VolIn[j] += vseg; - MassIn[j] += vseg*cseg; - - /* Reduce flow volume by amount transported */ - v -= vseg; - - /* If all of segment's volume was transferred, then */ - /* replace leading segment with the one behind it */ - /* (Note that the current seg is recycled for later use.) */ - if (v >= 0.0 && vseg >= seg->v) - { - FirstSeg[k] = seg->prev; - if (FirstSeg[k] == NULL) LastSeg[k] = NULL; - seg->prev = FreeSeg; - FreeSeg = seg; - } - - /* Otherwise reduce segment's volume */ - else - { - seg->v -= vseg; - } - } /* End while */ - } /* Next link */ -} - - -void updatenodes(long dt) -/* -**--------------------------------------------------------------------------- -** Input: dt = current WQ time step -** Output: none -** Purpose: updates concentration at all nodes to mixture of accumulated -** inflow from connecting pipes. -** -** Note: Does not account for source flow effects. TempQual[i] contains -** average concen. of segments adjacent to node i, used in case -** there was no inflow into i. -**--------------------------------------------------------------------------- -*/ -{ - int i; - - /* Update junction quality */ - for (i=1; i<=Njuncs; i++) - { - if (NodeDemand[i] < 0.0) { - VolIn[i] -= NodeDemand[i]*dt; - } - if (VolIn[i] > 0.0) { - NodeQual[i] = MassIn[i]/VolIn[i]; - } - else { - NodeQual[i] = TempQual[i]; - } - } - - /* Update tank quality */ - updatetanks(dt); - - /* For flow tracing, set source node concen. to 100. */ - if (Qualflag == TRACE) NodeQual[TraceNode] = 100.0; -} - - -void sourceinput(long dt) -/* -**--------------------------------------------------------------------- -** Input: dt = current WQ time step -** Output: none -** Purpose: computes contribution (if any) of mass additions from WQ -** sources at each node. -**--------------------------------------------------------------------- -*/ -{ - int j,n; - double massadded = 0.0, s, volout; - double qout, qcutoff; - Psource source; - - /* Establish a flow cutoff which indicates no outflow from a node */ - qcutoff = 10.0*TINY; - - /* Zero-out the work array TempQual */ - memset(TempQual,0,(Nnodes+1)*sizeof(double)); - if (Qualflag != CHEM) return; - - /* Consider each node */ - for (n=1; n<=Nnodes; n++) - { - double thisDemand = NodeDemand[n]; - /* Skip node if no WQ source */ - source = Node[n].S; - if (source == NULL) continue; - if (source->C0 == 0.0) continue; - - /* Find total flow volume leaving node */ - if (n <= Njuncs) volout = VolIn[n]; /* Junctions */ - else volout = VolIn[n] - (thisDemand * dt); /* Tanks */ - qout = volout / (double) dt; - - /* Evaluate source input only if node outflow > cutoff flow */ - if (qout > qcutoff) - { - - /* Mass added depends on type of source */ - s = sourcequal(source); - switch(source->Type) - { - /* Concen. Source: */ - /* Mass added = source concen. * -(demand) */ - case CONCEN: - - /* Only add source mass if demand is negative */ - if (thisDemand < 0.0) - { - massadded = -s*thisDemand*dt; - - /* If node is a tank then set concen. to 0. */ - /* (It will be re-set to true value in updatesourcenodes()) */ - if (n > Njuncs) NodeQual[n] = 0.0; - } - else massadded = 0.0; - break; - - /* Mass Inflow Booster Source: */ - case MASS: - massadded = s*dt; - break; - - /* Setpoint Booster Source: */ - /* Mass added is difference between source */ - /* & node concen. times outflow volume */ - case SETPOINT: - if (s > NodeQual[n]) { - massadded = (s-NodeQual[n])*volout; - } - else { - massadded = 0.0; - } - break; - - /* Flow-Paced Booster Source: */ - /* Mass added = source concen. times outflow volume */ - case FLOWPACED: - massadded = s*volout; - break; - } - - /* Source concen. contribution = (mass added / outflow volume) */ - TempQual[n] = massadded/volout; - - /* Update total mass added for time period & simulation */ - source->Smass += massadded; - if (Htime >= Rstart) Wsource += massadded; - } - } - - /* Add mass inflows from reservoirs to Wsource*/ - if (Htime >= Rstart) - { - for (j=1; j<=Ntanks; j++) - { - if (Tank[j].A == 0.0) - { - n = Njuncs + j; - volout = VolIn[n] - NodeDemand[n]*dt; - if (volout > 0.0) Wsource += volout*NodeQual[n]; - } - } - } -} - - -void release(long dt) -/* -**--------------------------------------------------------- -** Input: dt = current WQ time step -** Output: none -** Purpose: creates new segments in outflow links from nodes. -**--------------------------------------------------------- -*/ -{ - int k,n; - double c,q,v; - Pseg seg; - - /* Examine each link */ - for (k=1; k<=Nlinks; k++) - { - - /* Ignore links with no flow */ - if (Q[k] == 0.0) continue; - - /* Find flow volume released to link from upstream node */ - /* (NOTE: Flow volume is allowed to be > link volume.) */ - n = UP_NODE(k); - q = ABS(Q[k]); - v = q*dt; - - /* Include source contribution in quality released from node. */ - c = NodeQual[n] + TempQual[n]; - - /* If link has a last seg, check if its quality */ - /* differs from that of the flow released from node.*/ - if ( (seg = LastSeg[k]) != NULL) - { - /* Quality of seg close to that of node */ - if (ABS(seg->c - c) < Ctol) - { - seg->c = (seg->c*seg->v + c*v) / (seg->v + v); //(2.00.11 - LR) - seg->v += v; - } - - /* Otherwise add a new seg to end of link */ - else addseg(k,v,c); - } - - /* If link has no segs then add a new one. */ - else addseg(k,LINKVOL(k),c); - } -} - - -void updatesourcenodes(long dt) -/* -**--------------------------------------------------- -** Input: dt = current WQ time step -** Output: none -** Purpose: updates quality at source nodes. -** (TempQual[n] = concen. added by source at node n) -**--------------------------------------------------- -*/ -{ - int i,n; - Psource source; - - if (Qualflag != CHEM) return; - - /* Examine each WQ source node */ - for (n=1; n<=Nnodes; n++) - { - source = Node[n].S; - if (source == NULL) continue; - - /* Add source to current node concen. */ - NodeQual[n] += TempQual[n]; - - /* For tanks, node concen. = internal concen. */ - if (n > Njuncs) - { - i = n - Njuncs; - if (Tank[i].A > 0.0) NodeQual[n] = Tank[i].C; - } - - /* Normalize mass added at source to time step */ - source->Smass /= (double)dt; - } -} - - -void updatetanks(long dt) -/* -**--------------------------------------------------- -** Input: dt = current WQ time step -** Output: none -** Purpose: updates tank volumes & concentrations -**--------------------------------------------------- -*/ -{ - int i,n; - - /* Examine each reservoir & tank */ - for (i=1; i<=Ntanks; i++) - { - n = Tank[i].Node; - /* Use initial quality for reservoirs */ - if (Tank[i].A == 0.0) - { - NodeQual[n] = Node[n].C0; - } - /* Update tank WQ based on mixing model */ - else { - switch(Tank[i].MixModel) - { - case MIX2: tankmix2(i,dt); break; - case FIFO: tankmix3(i,dt); break; - case LIFO: tankmix4(i,dt); break; - default: tankmix1(i,dt); break; - } - - } - } -} - - -//// Deprecated version of tankmix1 //// //(2.00.12 - LR) -//void tankmix1(int i, long dt) -/* -**--------------------------------------------- -** Input: i = tank index -** dt = current WQ time step -** Output: none -** Purpose: complete mix tank model -**--------------------------------------------- -*/ -//{ -// int n; -// double cin; - -// /* Blend inflow with contents */ -// n = Tank[i].Node; -// if (VolIn[n] > 0.0) cin = MassIn[n]/VolIn[n]; -// else cin = 0.0; -// if (Tank[i].V > 0.0) -// Tank[i].C = tankreact(Tank[i].C,Tank[i].V,Tank[i].Kb,dt) + -// (cin - Tank[i].C)*VolIn[n]/Tank[i].V; -// else Tank[i].C = cin; -// Tank[i].C = MAX(0.0, Tank[i].C); - -// /* Update tank volume & nodal quality */ -// Tank[i].V += D[n]*dt; -// NodeQual[n] = Tank[i].C; -//} - - -//// New version of tankmix1 //// //(2.00.12 - LR) -void tankmix1(int i, long dt) -/* -**--------------------------------------------- -** Input: i = tank index -** dt = current WQ time step -** Output: none -** Purpose: complete mix tank model -**--------------------------------------------- -*/ -{ - int n; - double cin; - double c, cmax, vold, vin; - - /* React contents of tank */ - c = tankreact(Tank[i].C,Tank[i].V,Tank[i].Kb,dt); - - /* Determine tank & volumes */ - vold = Tank[i].V; - n = Tank[i].Node; - Tank[i].V += NodeDemand[n]*dt; - vin = VolIn[n]; - - /* Compute inflow concen. */ - if (vin > 0.0) cin = MassIn[n]/vin; - else cin = 0.0; - cmax = MAX(c, cin); - - /* Mix inflow with tank contents */ - if (vin > 0.0) c = (c*vold + cin*vin)/(vold + vin); - c = MIN(c, cmax); - c = MAX(c, 0.0); - Tank[i].C = c; - NodeQual[n] = Tank[i].C; -} - -/*** Updated 10/25/00 ***/ -//// New version of tankmix2 //// //(2.00.12 - LR) -void tankmix2(int i, long dt) -/* -**------------------------------------------------ -** Input: i = tank index -** dt = current WQ time step -** Output: none -** Purpose: 2-compartment tank model -** (seg1 = mixing zone, -** seg2 = ambient zone) -**------------------------------------------------ -*/ -{ - int k,n; - double cin, /* Inflow quality */ - vin, /* Inflow volume */ - vt, /* Transferred volume */ - vnet, /* Net volume change */ - v1max; /* Full mixing zone volume */ - Pseg seg1,seg2; /* Compartment segments */ - - /* Identify segments for each compartment */ - k = Nlinks + i; - seg1 = LastSeg[k]; - seg2 = FirstSeg[k]; - if (seg1 == NULL || seg2 == NULL) return; - - /* React contents of each compartment */ - seg1->c = tankreact(seg1->c,seg1->v,Tank[i].Kb,dt); - seg2->c = tankreact(seg2->c,seg2->v,Tank[i].Kb,dt); - - /* Find inflows & outflows */ - n = Tank[i].Node; - vnet = NodeDemand[n]*dt; - vin = VolIn[n]; - if (vin > 0.0) cin = MassIn[n]/vin; - else cin = 0.0; - v1max = Tank[i].V1max; - - /* Tank is filling */ - vt = 0.0; - if (vnet > 0.0) - { - vt = MAX(0.0, (seg1->v + vnet - v1max)); - if (vin > 0.0) - { - seg1->c = ((seg1->c)*(seg1->v) + cin*vin) / (seg1->v + vin); - } - if (vt > 0.0) - { - seg2->c = ((seg2->c)*(seg2->v) + (seg1->c)*vt) / (seg2->v + vt); - } - } - - /* Tank is emptying */ - if (vnet < 0.0) - { - if (seg2->v > 0.0) - { - vt = MIN(seg2->v, (-vnet)); - } - if (vin + vt > 0.0) - { - seg1->c = ((seg1->c)*(seg1->v) + cin*vin + (seg2->c)*vt) / - (seg1->v + vin + vt); - } - } - - /* Update segment volumes */ - if (vt > 0.0) - { - seg1->v = v1max; - if (vnet > 0.0) seg2->v += vt; - else seg2->v = MAX(0.0, ((seg2->v)-vt)); - } - else - { - seg1->v += vnet; - seg1->v = MIN(seg1->v, v1max); - seg1->v = MAX(0.0, seg1->v); - seg2->v = 0.0; - } - Tank[i].V += vnet; - Tank[i].V = MAX(0.0, Tank[i].V); - - /* Use quality of mixed compartment (seg1) to */ - /* represent quality of tank since this is where */ - /* outflow begins to flow from */ - Tank[i].C = seg1->c; - NodeQual[n] = Tank[i].C; -} - - -void tankmix3(int i, long dt) -/* -**---------------------------------------------------------- -** Input: i = tank index -** dt = current WQ time step -** Output: none -** Purpose: First-In-First-Out (FIFO) tank model -**---------------------------------------------------------- -*/ -{ - int k,n; - double vin,vnet,vout,vseg; - double cin,vsum,csum; - Pseg seg; - - k = Nlinks + i; - if (LastSeg[k] == NULL || FirstSeg[k] == NULL) return; - - /* React contents of each compartment */ - if (Reactflag) - { - seg = FirstSeg[k]; - while (seg != NULL) - { - seg->c = tankreact(seg->c,seg->v,Tank[i].Kb,dt); - seg = seg->prev; - } - } - - /* Find inflows & outflows */ - n = Tank[i].Node; - vnet = NodeDemand[n]*dt; - vin = VolIn[n]; - vout = vin - vnet; - if (vin > 0.0) cin = MassIn[n]/VolIn[n]; - else cin = 0.0; - Tank[i].V += vnet; - Tank[i].V = MAX(0.0, Tank[i].V); //(2.00.12 - LR) - - /* Withdraw flow from first segment */ - vsum = 0.0; - csum = 0.0; - while (vout > 0.0) - { - seg = FirstSeg[k]; - if (seg == NULL) break; - vseg = seg->v; /* Flow volume from leading seg */ - vseg = MIN(vseg,vout); - if (seg == LastSeg[k]) vseg = vout; - vsum += vseg; - csum += (seg->c)*vseg; - vout -= vseg; /* Remaining flow volume */ - if (vout >= 0.0 && vseg >= seg->v) /* Seg used up */ - { - if (seg->prev) //(2.00.12 - LR) - { //(2.00.12 - LR) - FirstSeg[k] = seg->prev; - //if (FirstSeg[k] == NULL) LastSeg[k] = NULL; //(2.00.12 - LR) - seg->prev = FreeSeg; - FreeSeg = seg; - } //(2.00.12 - LR) - } - else /* Remaining volume in segment */ - { - seg->v -= vseg; - } - } - - /* Use quality withdrawn from 1st segment */ - /* to represent overall quality of tank */ - if (vsum > 0.0) Tank[i].C = csum/vsum; - else Tank[i].C = FirstSeg[k]->c; - NodeQual[n] = Tank[i].C; - - /* Add new last segment for new flow entering tank */ - if (vin > 0.0) - { - if ( (seg = LastSeg[k]) != NULL) - { - /* Quality is the same, so just add flow volume to last seg */ - if (ABS(seg->c - cin) < Ctol) seg->v += vin; - - /* Otherwise add a new seg to tank */ - else addseg(k,vin,cin); - } - - /* If no segs left then add a new one. */ - else addseg(k,vin,cin); - } -} - - -void tankmix4(int i, long dt) -/* -**---------------------------------------------------------- -** Input: i = tank index -** dt = current WQ time step -** Output: none -** Purpose: Last In-First Out (LIFO) tank model -**---------------------------------------------------------- -*/ -{ - int k, n; - double vin, vnet, cin, vsum, csum, vseg; - Pseg seg, tmpseg; - - k = Nlinks + i; - if (LastSeg[k] == NULL || FirstSeg[k] == NULL) return; - - /* React contents of each compartment */ - if (Reactflag) - { - seg = LastSeg[k]; - while (seg != NULL) - { - seg->c = tankreact(seg->c,seg->v,Tank[i].Kb,dt); - seg = seg->prev; - } - } - - /* Find inflows & outflows */ - n = Tank[i].Node; - vnet = NodeDemand[n]*dt; - vin = VolIn[n]; - if (vin > 0.0) cin = MassIn[n]/VolIn[n]; - else cin = 0.0; - Tank[i].V += vnet; - Tank[i].V = MAX(0.0, Tank[i].V); //(2.00.12 - LR) - Tank[i].C = LastSeg[k]->c; - - /* If tank filling, then create new last seg */ - if (vnet > 0.0) - { - if ( (seg = LastSeg[k]) != NULL) - { - /* Quality is the same, so just add flow volume to last seg */ - if (ABS(seg->c - cin) < Ctol) seg->v += vnet; - - /* Otherwise add a new last seg to tank */ - /* which points to old last seg */ - else - { - tmpseg = seg; - LastSeg[k] = NULL; - addseg(k,vnet,cin); - LastSeg[k]->prev = tmpseg; - } - } - - /* If no segs left then add a new one. */ - else addseg(k,vnet,cin); - - /* Update reported tank quality */ - Tank[i].C = LastSeg[k]->c; - } - - /* If net emptying then remove last segments until vnet consumed */ - else if (vnet < 0.0) - { - vsum = 0.0; - csum = 0.0; - vnet = -vnet; - while (vnet > 0.0) - { - seg = LastSeg[k]; - if (seg == NULL) break; - vseg = seg->v; - vseg = MIN(vseg,vnet); - if (seg == FirstSeg[k]) vseg = vnet; - vsum += vseg; - csum += (seg->c)*vseg; - vnet -= vseg; - if (vnet >= 0.0 && vseg >= seg->v) /* Seg used up */ - { - if (seg->prev) //(2.00.12 - LR) - { //(2.00.12 - LR) - LastSeg[k] = seg->prev; - //if (LastSeg[k] == NULL) FirstSeg[k] = NULL; //(2.00.12 - LR) - seg->prev = FreeSeg; - FreeSeg = seg; - } //(2.00.12 - LR) - } - else /* Remaining volume in segment */ - { - seg->v -= vseg; - } - } - /* Reported tank quality is mixture of flow released and any inflow */ - Tank[i].C = (csum + MassIn[n])/(vsum + vin); - } - NodeQual[n] = Tank[i].C; -} - - -double sourcequal(Psource source) -/* -**-------------------------------------------------------------- -** Input: j = source index -** Output: returns source WQ value -** Purpose: determines source concentration in current time period -**-------------------------------------------------------------- -*/ -{ - int i; - long k; - double c; - - /* Get source concentration (or mass flow) in original units */ - c = source->C0; - - /* Convert mass flow rate from min. to sec. */ - /* and convert concen. from liters to cubic feet */ - if (source->Type == MASS) c /= 60.0; - else c /= Ucf[QUALITY]; - - /* Apply time pattern if assigned */ - i = source->Pat; - if (i == 0) return(c); - k = ((Qtime+Pstart)/Pstep) % (long)Pattern[i].Length; - return(c*Pattern[i].F[k]); -} - - -double avgqual(int k) -/* -**-------------------------------------------------------------- -** Input: k = link index -** Output: returns WQ value -** Purpose: computes average quality in link k -**-------------------------------------------------------------- -*/ -{ - double vsum = 0.0, - msum = 0.0; - Pseg seg; - - if (Qualflag == NONE) return(0.); - seg = FirstSeg[k]; - while (seg != NULL) - { - vsum += seg->v; - msum += (seg->c)*(seg->v); - seg = seg->prev; - } - if (vsum > 0.0 && Qtime > 0) return(msum/vsum); - else return( (NodeQual[Link[k].N1] + NodeQual[Link[k].N2])/2. ); -} - - -void ratecoeffs() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: determines wall reaction coeff. for each pipe -**-------------------------------------------------------------- -*/ -{ - int k; - double kw; - - for (k=1; k<=Nlinks; k++) - { - kw = Link[k].Kw; - if (kw != 0.0) kw = piperate(k); - Link[k].Rc = kw; - PipeRateCoeff[k] = 0.0; - } -} /* End of ratecoeffs */ - - -double piperate(int k) -/* -**-------------------------------------------------------------- -** Input: k = link index -** Output: returns reaction rate coeff. for 1st-order wall -** reactions or mass transfer rate coeff. for 0-order -** reactions -** Purpose: finds wall reaction rate coeffs. -**-------------------------------------------------------------- -*/ -{ - double a,d,u,kf,kw,y,Re,Sh; - - d = Link[k].Diam; /* Pipe diameter, ft */ - -/* Ignore mass transfer if Schmidt No. is 0 */ - if (Sc == 0.0) - { - if (WallOrder == 0.0) return(BIG); - else return(Link[k].Kw*(4.0/d)/Ucf[ELEV]); - } - -/* Compute Reynolds No. */ - a = PI*d*d/4.0; - u = ABS(Q[k])/a; - Re = u*d/Viscos; - -/* Compute Sherwood No. for stagnant flow */ -/* (mass transfer coeff. = Diffus./radius) */ - if (Re < 1.0) Sh = 2.0; - -/* Compute Sherwood No. for turbulent flow */ -/* using the Notter-Sleicher formula. */ - else if (Re >= 2300.0) - Sh = 0.0149*pow(Re,0.88)*pow(Sc,0.333); - -/* Compute Sherwood No. for laminar flow */ -/* using Graetz solution formula. */ - else - { - y = d/Link[k].Len*Re*Sc; - Sh = 3.65+0.0668*y/(1.0+0.04*pow(y,0.667)); - } - -/* Compute mass transfer coeff. (in ft/sec) */ - kf = Sh*Diffus/d; - -/* For zero-order reaction, return mass transfer coeff. */ - if (WallOrder == 0.0) return(kf); - -/* For first-order reaction, return apparent wall coeff. */ - kw = Link[k].Kw/Ucf[ELEV]; /* Wall coeff, ft/sec */ - kw = (4.0/d)*kw*kf/(kf+ABS(kw)); /* Wall coeff, 1/sec */ - return(kw); -} /* End of piperate */ - - -double pipereact(int k, double c, double v, long dt) -/* -**------------------------------------------------------------ -** Input: k = link index -** c = current WQ in segment -** v = segment volume -** dt = time step -** Output: returns new WQ value -** Purpose: computes new quality in a pipe segment after -** reaction occurs -**------------------------------------------------------------ -*/ -{ - double cnew, dc, dcbulk, dcwall, rbulk, rwall; - - /* For water age (hrs), update concentration by timestep */ - if (Qualflag == AGE) return(c+(double)dt/3600.0); - - /* Otherwise find bulk & wall reaction rates */ - rbulk = bulkrate(c,Link[k].Kb,BulkOrder)*Bucf; - rwall = wallrate(c,Link[k].Diam,Link[k].Kw,Link[k].Rc); - - /* Find change in concentration over timestep */ - dcbulk = rbulk*(double)dt; - dcwall = rwall*(double)dt; - - /* Update cumulative mass reacted */ - if (Htime >= Rstart) - { - Wbulk += ABS(dcbulk)*v; - Wwall += ABS(dcwall)*v; - } - - /* Update concentration */ - dc = dcbulk + dcwall; - cnew = c + dc; - cnew = MAX(0.0,cnew); - return(cnew); -} - - -double tankreact(double c, double v, double kb, long dt) -/* -**------------------------------------------------------- -** Input: c = current WQ in tank -** v = tank volume -** kb = reaction coeff. -** dt = time step -** Output: returns new WQ value -** Purpose: computes new quality in a tank after -** reaction occurs -**------------------------------------------------------- -*/ -{ - double cnew, dc, rbulk; - -/*** Updated 9/7/00 ***/ - /* If no reaction then return current WQ */ - if (!Reactflag) return(c); - - /* For water age, update concentration by timestep */ - if (Qualflag == AGE) return(c + (double)dt/3600.0); - - /* Find bulk reaction rate */ - rbulk = bulkrate(c,kb,TankOrder)*Tucf; - - /* Find concentration change & update quality */ - dc = rbulk*(double)dt; - if (Htime >= Rstart) Wtank += ABS(dc)*v; - cnew = c + dc; - cnew = MAX(0.0,cnew); - return(cnew); -} - - -double bulkrate(double c, double kb, double order) -/* -**----------------------------------------------------------- -** Input: c = current WQ concentration -** kb = bulk reaction coeff. -** order = bulk reaction order -** Output: returns bulk reaction rate -** Purpose: computes bulk reaction rate (mass/volume/time) -**----------------------------------------------------------- -*/ -{ - double c1; - - /* Find bulk reaction potential taking into account */ - /* limiting potential & reaction order. */ - - /* Zero-order kinetics: */ - if (order == 0.0) c = 1.0; - - /* Michaelis-Menton kinetics: */ - else if (order < 0.0) - { - c1 = Climit + SGN(kb)*c; - if (ABS(c1) < TINY) c1 = SGN(c1)*TINY; - c = c/c1; - } - - /* N-th order kinetics: */ - else - { - /* Account for limiting potential */ - if (Climit == 0.0) c1 = c; - else c1 = MAX(0.0, SGN(kb)*(Climit-c)); - - /* Compute concentration potential */ - if (order == 1.0) c = c1; - else if (order == 2.0) c = c1*c; - else c = c1*pow(MAX(0.0,c),order-1.0); - } - - /* Reaction rate = bulk coeff. * potential) */ - if (c < 0) c = 0; - return(kb*c); -} - - -double wallrate(double c, double d, double kw, double kf) -/* -**------------------------------------------------------------ -** Input: c = current WQ concentration -** d = pipe diameter -** kw = intrinsic wall reaction coeff. -** kf = mass transfer coeff. for 0-order reaction -** (ft/sec) or apparent wall reaction coeff. -** for 1-st order reaction (1/sec) -** Output: returns wall reaction rate in mass/ft3/sec -** Purpose: computes wall reaction rate -**------------------------------------------------------------ -*/ -{ - if (kw == 0.0 || d == 0.0) return(0.0); - if (WallOrder == 0.0) /* 0-order reaction */ - { - kf = SGN(kw)*c*kf; /* Mass transfer rate (mass/ft2/sec)*/ - kw = kw*SQR(Ucf[ELEV]); /* Reaction rate (mass/ft2/sec) */ - if (ABS(kf) < ABS(kw)) /* Reaction mass transfer limited */ - kw = kf; - return(kw*4.0/d); /* Reaction rate (mass/ft3/sec) */ - } - else return(c*kf); /* 1st-order reaction */ -} - -/************************* End of QUALITY.C ***************************/ +/* +****************************************************************************** +Project: OWA EPANET +Version: 2.2 +Module: quality.c +Description: implements EPANET's water quality engine +Authors: see AUTHORS +Copyright: see AUTHORS +License: see LICENSE +Last Updated: 05/15/2019 +****************************************************************************** +*/ + +#include +#include +#include +#include + +#include "mempool.h" +#include "types.h" +#include "funcs.h" + +// Stagnant flow tolerance +const double Q_STAGNANT = 0.005 / GPMperCFS; // 0.005 gpm = 1.114e-5 cfs + +// Exported functions +double findsourcequal(Project *, int, double, long); + +// Imported functions +extern char setreactflag(Project *); +extern double getucf(double); +extern void ratecoeffs(Project *); +extern void initsegs(Project *); +extern void reversesegs(Project *, int); +extern int sortnodes(Project *); +extern void transport(Project *, long); + +// Local functions +static double sourcequal(Project *, Psource); +static void evalmassbalance(Project *); +static double findstoredmass(Project *); +static int flowdirchanged(Project *); + + +int openqual(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: opens water quality solver +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + int errcode = 0; + int n; + + // Return if no quality analysis requested + if (qual->Qualflag == NONE) return errcode; + + // Build nodal adjacency lists if they don't already exist + if (net->Adjlist == NULL) + { + errcode = buildadjlists(net); + if (errcode ) return errcode; + } + + // Create a memory pool for water quality segments + qual->OutOfMemory = FALSE; + qual->SegPool = mempool_create(); + if (qual->SegPool == NULL) errcode = 101; + + // Allocate arrays for link flow direction & reaction rates + n = net->Nlinks + 1; + qual->FlowDir = (FlowDirection *)calloc(n, sizeof(FlowDirection)); + qual->PipeRateCoeff = (double *)calloc(n, sizeof(double)); + + // Allocate arrays used for volume segments in links & tanks + n = net->Nlinks + net->Ntanks + 1; + qual->FirstSeg = (Pseg *)calloc(n, sizeof(Pseg)); + qual->LastSeg = (Pseg *)calloc(n, sizeof(Pseg)); + + // Allocate memory for topologically sorted nodes + qual->SortedNodes = (int *)calloc(n, sizeof(int)); + + ERRCODE(MEMCHECK(qual->FlowDir)); + ERRCODE(MEMCHECK(qual->PipeRateCoeff)); + ERRCODE(MEMCHECK(qual->FirstSeg)); + ERRCODE(MEMCHECK(qual->LastSeg)); + ERRCODE(MEMCHECK(qual->SortedNodes)); + return errcode; +} + + +int initqual(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: re-initializes water quality solver +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Times *time = &pr->times; + + int i; + int errcode = 0; + + // Re-position hydraulics file + if (!hyd->OpenHflag) + { + fseek(pr->outfile.HydFile, pr->outfile.HydOffset, SEEK_SET); + } + + // Set elapsed times to zero + time->Qtime = 0; + time->Htime = 0; + time->Rtime = time->Rstart; + pr->report.Nperiods = 0; + + // Initialize node quality + for (i = 1; i <= net->Nnodes; i++) + { + if (qual->Qualflag == TRACE) qual->NodeQual[i] = 0.0; + else qual->NodeQual[i] = net->Node[i].C0; + if (net->Node[i].S != NULL) net->Node[i].S->Smass = 0.0; + } + if (qual->Qualflag == NONE) return errcode; + + // Initialize tank quality + for (i = 1; i <= net->Ntanks; i++) + { + net->Tank[i].C = qual->NodeQual[net->Tank[i].Node]; + } + + // Initialize quality at trace node (if applicable) + if (qual->Qualflag == TRACE) qual->NodeQual[qual->TraceNode] = 100.0; + + // Compute Schmidt number + if (qual->Diffus > 0.0) qual->Sc = hyd->Viscos / qual->Diffus; + else qual->Sc = 0.0; + + // Compute unit conversion factor for bulk react. coeff. + qual->Bucf = getucf(qual->BulkOrder); + qual->Tucf = getucf(qual->TankOrder); + + // Check if modeling a reactive substance + qual->Reactflag = setreactflag(pr); + + // Reset memory pool used for pipe & tank segments + qual->FreeSeg = NULL; + mempool_reset(qual->SegPool); + + // Create initial set of pipe & tank segments + initsegs(pr); + + // Initialize link flow direction indicator + for (i = 1; i <= net->Nlinks; i++) qual->FlowDir[i] = ZERO_FLOW; + + // Initialize avg. reaction rates + qual->Wbulk = 0.0; + qual->Wwall = 0.0; + qual->Wtank = 0.0; + qual->Wsource = 0.0; + + // Initialize mass balance components + qual->MassBalance.initial = findstoredmass(pr); + qual->MassBalance.inflow = 0.0; + qual->MassBalance.outflow = 0.0; + qual->MassBalance.reacted = 0.0; + qual->MassBalance.final = 0.0; + qual->MassBalance.ratio = 0.0; + return errcode; +} + + +int runqual(Project *pr, long *t) +/* +**-------------------------------------------------------------- +** Input: none +** Output: t = current simulation time (sec) +** Returns: error code +** Purpose: retrieves hydraulics for next hydraulic time step +** (at time t) and saves current results to file +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Times *time = &pr->times; + + long hydtime = 0; // Hydraulic solution time + long hydstep = 0; // Hydraulic time step + int errcode = 0; + + // Update reported simulation time + *t = time->Qtime; + + // Read hydraulic solution from hydraulics file + if (time->Qtime == time->Htime) + { + // Read hydraulic results from file + if (!hyd->OpenHflag) + { + if (!readhyd(pr, &hydtime)) return 307; + if (!readhydstep(pr, &hydstep)) return 307; + time->Htime = hydtime; + } + + // Save current results to output file + if (time->Htime >= time->Rtime) + { + if (pr->outfile.Saveflag) + { + errcode = saveoutput(pr); + pr->report.Nperiods++; + } + time->Rtime += time->Rstep; + } + if (errcode) return errcode; + + // If simulating water quality + if (qual->Qualflag != NONE && time->Qtime < time->Dur) + { + // ... compute reaction rate coeffs. + if (qual->Reactflag && qual->Qualflag != AGE) ratecoeffs(pr); + + // ... topologically sort network nodes if flow directions change + if (flowdirchanged(pr) == TRUE) + { + errcode = sortnodes(pr); + } + } + if (!hyd->OpenHflag) time->Htime = hydtime + hydstep; + } + return errcode; +} + + +int nextqual(Project *pr, long *tstep) +/* +**-------------------------------------------------------------- +** Input: none +** Output: tstep = time step (sec) over which quality was updated +** Returns: error code +** Purpose: updates water quality in network until next hydraulic +** event occurs (after tstep secs.) +**-------------------------------------------------------------- +*/ +{ + Quality *qual = &pr->quality; + Times *time = &pr->times; + + long hydstep; // Time step until next hydraulic event + long dt, qtime; + int errcode = 0; + + // Find time step till next hydraulic event + *tstep = 0; + hydstep = 0; + if (time->Htime <= time->Dur) hydstep = time->Htime - time->Qtime; + + // Perform water quality routing over this time step + if (qual->Qualflag != NONE && hydstep > 0) + { + // Repeat over each quality time step until tstep is reached + qtime = 0; + while (!qual->OutOfMemory && qtime < hydstep) + { + dt = MIN(time->Qstep, hydstep - qtime); + qtime += dt; + transport(pr, dt); + } + if (qual->OutOfMemory) errcode = 101; + } + + // Update mass balance ratio + evalmassbalance(pr); + + // Update current time + if (!errcode) *tstep = hydstep; + time->Qtime += hydstep; + + // If no more time steps remain + if (!errcode && *tstep == 0) + { + // ... report overall mass balance + if (qual->Qualflag != NONE && pr->report.Statflag) + { + writemassbalance(pr); + } + + // ... write the final portion of the binary output file + if (pr->outfile.Saveflag) errcode = savefinaloutput(pr); + } + return errcode; +} + + +int stepqual(Project *pr, long *tleft) +/* +**-------------------------------------------------------------- +** Input: none +** Output: tleft = time left in simulation +** Returns: error code +** Purpose: updates quality conditions over a single +** quality time step +**-------------------------------------------------------------- +*/ +{ + Quality *qual = &pr->quality; + Times *time = &pr->times; + + long dt, hstep, t, tstep; + int errcode = 0; + + tstep = time->Qstep; + do + { + // Set local time step to quality time step + dt = tstep; + + // Find time step until next hydraulic event + hstep = time->Htime - time->Qtime; + + // If next hydraulic event occurs before end of local time step + if (hstep < dt) + { + // ... adjust local time step to next hydraulic event + dt = hstep; + + // ... transport quality over local time step + if (qual->Qualflag != NONE) transport(pr, dt); + time->Qtime += dt; + + // ... quit if running quality concurrently with hydraulics + if (pr->hydraul.OpenHflag) break; + + // ... otherwise call runqual() to update hydraulics + errcode = runqual(pr, &t); + time->Qtime = t; + } + + // Otherwise transport quality over current local time step + else + { + if (qual->Qualflag != NONE) transport(pr, dt); + time->Qtime += dt; + } + + // Reduce quality time step by local time step + tstep -= dt; + if (qual->OutOfMemory) errcode = 101; + + } while (!errcode && tstep > 0); + + // Update mass balance ratio + evalmassbalance(pr); + + // Update total simulation time left + *tleft = time->Dur - time->Qtime; + + // If no more time steps remain + if (!errcode && *tleft == 0) + { + // ... report overall mass balance + if (qual->Qualflag != NONE && pr->report.Statflag) + { + writemassbalance(pr); + } + + // ... write the final portion of the binary output file + if (pr->outfile.Saveflag) errcode = savefinaloutput(pr); + } + return errcode; +} + + +int closequal(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: closes water quality solver +**-------------------------------------------------------------- +*/ +{ + Quality *qual = &pr->quality; + int errcode = 0; + + if (qual->Qualflag != NONE) + { + if (qual->SegPool) mempool_delete(qual->SegPool); + FREE(qual->FirstSeg); + FREE(qual->LastSeg); + FREE(qual->PipeRateCoeff); + FREE(qual->FlowDir); + FREE(qual->SortedNodes); + } + return errcode; +} + + +double avgqual(Project *pr, int k) +/* +**-------------------------------------------------------------- +** Input: k = link index +** Output: returns quality concentration +** Purpose: computes current average quality in link k +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + double vsum = 0.0, msum = 0.0; + Pseg seg; + + if (qual->Qualflag == NONE) return 0.0; + + // Sum up the quality and volume in each segment of the link + if (qual->FirstSeg != NULL) + { + seg = qual->FirstSeg[k]; + while (seg != NULL) + { + vsum += seg->v; + msum += (seg->c) * (seg->v); + seg = seg->prev; + } + } + + // Compute average quality if link has volume + if (vsum > 0.0) return (msum / vsum); + + // Otherwise use the average quality of the link's end nodes + else + { + return ((qual->NodeQual[net->Link[k].N1] + + qual->NodeQual[net->Link[k].N2]) / 2.); + } +} + + +double findsourcequal(Project *pr, int n, double volout, long tstep) +/* +**--------------------------------------------------------------------- +** Input: n = node index +** volout = volume of node outflow over time step +** tstep = current quality time step +** Output: returns concentration added by an external quality source. +** Purpose: computes contribution (if any) of mass addition from an +** external quality source at a node. +**--------------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Times *time = &pr->times; + + double massadded = 0.0, c; + Psource source; + + // Sources only apply to CHEMICAL analyses + if (qual->Qualflag != CHEM) return 0.0; + + // Return 0 if node is not a quality source or has no outflow + source = net->Node[n].S; + if (source == NULL) return 0.0; + if (source->C0 == 0.0) return 0.0; + if (volout / tstep <= Q_STAGNANT) return 0.0; + + // Added source concentration depends on source type + c = sourcequal(pr, source); + switch (source->Type) + { + // Concentration Source: + case CONCEN: + if (net->Node[n].Type == JUNCTION) + { + // ... source requires a negative demand at the node + if (hyd->NodeDemand[n] < 0.0) + { + c = -c * hyd->NodeDemand[n] * tstep / volout; + } + else c = 0.0; + } + break; + + // Mass Inflow Booster Source: + case MASS: + // ... convert source input from mass/sec to concentration + c = c * tstep / volout; + break; + + // Setpoint Booster Source: + // Source quality is difference between source strength + // & node quality + case SETPOINT: + c = MAX(c - qual->NodeQual[n], 0.0); + break; + + // Flow-Paced Booster Source: + // Source quality equals source strength + case FLOWPACED: + break; + } + + // Source mass added over time step = source concen. * outflow volume + massadded = c * volout; + + // Update source's total mass added + source->Smass += massadded; + + // Update Wsource + if (time->Htime >= time->Rstart) + { + qual->Wsource += massadded; + } + return c; +} + + +double sourcequal(Project *pr, Psource source) +/* +**-------------------------------------------------------------- +** Input: source = a water quality source object +** Output: returns strength of quality source +** Purpose: determines source strength in current time period +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Times *time = &pr->times; + + int i; + long k; + double c; + + // Get source concentration (or mass flow) in original units + c = source->C0; + + // Convert mass flow rate from min. to sec. + // and convert concen. from liters to cubic feet + if (source->Type == MASS) c /= 60.0; + else c /= pr->Ucf[QUALITY]; + + // Apply time pattern if assigned + i = source->Pat; + if (i == 0) return c; + k = ((time->Qtime + time->Pstart) / time->Pstep) % + (long)net->Pattern[i].Length; + return (c * net->Pattern[i].F[k]); +} + + +void evalmassbalance(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: computes the overall mass balance ratio of a +** quality constituent. +**-------------------------------------------------------------- +*/ +{ + Quality *qual = &pr->quality; + + double massin; + double massout; + double massreacted; + + if (qual->Qualflag == NONE) qual->MassBalance.ratio = 1.0; + else + { + qual->MassBalance.final = findstoredmass(pr); + massin = qual->MassBalance.initial + qual->MassBalance.inflow; + massout = qual->MassBalance.outflow + qual->MassBalance.final; + massreacted = qual->MassBalance.reacted; + if (massreacted > 0.0) massout += massreacted; + else massin -= massreacted; + if (massin == 0.0) qual->MassBalance.ratio = 1.0; + else qual->MassBalance.ratio = massout / massin; + } +} + + +double findstoredmass(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns total constituent mass stored in the network +** Purpose: finds the current mass of a constituent stored in +** all pipes and tanks. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + int i, k; + double totalmass = 0.0; + Pseg seg; + + // Mass residing in each pipe + for (k = 1; k <= net->Nlinks; k++) + { + // Sum up the quality and volume in each segment of the link + seg = qual->FirstSeg[k]; + while (seg != NULL) + { + totalmass += (seg->c) * (seg->v); + seg = seg->prev; + } + } + + // Mass residing in each tank + for (i = 1; i <= net->Ntanks; i++) + { + // ... skip reservoirs + if (net->Tank[i].A == 0.0) continue; + + // ... add up mass in each volume segment + else + { + k = net->Nlinks + i; + seg = qual->FirstSeg[k]; + while (seg != NULL) + { + totalmass += seg->c * seg->v; + seg = seg->prev; + } + } + } + return totalmass; +} + +int flowdirchanged(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns TRUE if flow direction changes in any link +** Purpose: finds new flow directions for each network link. +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + + int k; + int result = FALSE; + int newdir; + int olddir; + double q; + + // Examine each network link + for (k = 1; k <= pr->network.Nlinks; k++) + { + // Determine sign (+1 or -1) of new flow rate + olddir = qual->FlowDir[k]; + q = (hyd->LinkStatus[k] <= CLOSED) ? 0.0 : hyd->LinkFlow[k]; + newdir = SGN(q); + + // Indicate if flow is negligible + if (fabs(q) < Q_STAGNANT) newdir = 0; + + // Reverse link's volume segments if flow direction changes sign + if (newdir * olddir < 0) reversesegs(pr, k); + + // If flow direction changes either sign or magnitude then set + // result to true (e.g., if a link's positive flow becomes + // negligible then the network still needs to be re-sorted) + if (newdir != olddir) result = TRUE; + + // ... replace old flow direction with the new direction + qual->FlowDir[k] = newdir; + } + return result; +} diff --git a/src/qualreact.c b/src/qualreact.c new file mode 100644 index 0000000..1042527 --- /dev/null +++ b/src/qualreact.c @@ -0,0 +1,743 @@ +/* +****************************************************************************** +Project: OWA EPANET +Version: 2.2 +Module: qualreact.c +Description: computes water quality reactions within pipes and tanks +Authors: see AUTHORS +Copyright: see AUTHORS +License: see LICENSE +Last Updated: 05/15/2019 +****************************************************************************** +*/ + +#include +#include +#include +#include "types.h" + +// Exported functions +char setreactflag(Project *); +double getucf(double); +void ratecoeffs(Project *); +void reactpipes(Project *, long); +void reacttanks(Project *, long); +double mixtank(Project *, int, double, double ,double); + +// Imported functions +extern void addseg(Project *, int, double, double); +extern void reversesegs(Project *, int); + +// Local functions +static double piperate(Project *, int); +static double pipereact(Project *, int, double, double, long); +static double tankreact(Project *, double, double, double, long); +static double bulkrate(Project *, double, double, double); +static double wallrate(Project *, double, double, double, double); + +static void tankmix1(Project *, int, double, double, double); +static void tankmix2(Project *, int, double, double, double); +static void tankmix3(Project *, int, double, double, double); +static void tankmix4(Project *, int, double, double, double); + + +char setreactflag(Project *pr) +/* +**----------------------------------------------------------- +** Input: none +** Output: returns 1 for reactive WQ constituent, 0 otherwise +** Purpose: checks if reactive chemical being simulated +**----------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + int i; + + if (pr->quality.Qualflag == TRACE) return 0; + else if (pr->quality.Qualflag == AGE) return 1; + else + { + for (i = 1; i <= net->Nlinks; i++) + { + if (net->Link[i].Type <= PIPE) + { + if (net->Link[i].Kb != 0.0 || net->Link[i].Kw != 0.0) return 1; + } + } + for (i = 1; i <= net->Ntanks; i++) + { + if (net->Tank[i].Kb != 0.0) return 1; + } + } + return 0; +} + + +double getucf(double order) +/* +**-------------------------------------------------------------- +** Input: order = bulk reaction order +** Output: returns a unit conversion factor +** Purpose: converts bulk reaction rates from per Liter to +** per FT3 basis +**-------------------------------------------------------------- +*/ +{ + if (order < 0.0) order = 0.0; + if (order == 1.0) return (1.0); + else return (1. / pow(LperFT3, (order - 1.0))); +} + + +void ratecoeffs(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: determines wall reaction coeff. for each pipe +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + int k; + double kw; + + for (k = 1; k <= net->Nlinks; k++) + { + kw = net->Link[k].Kw; + if (kw != 0.0) kw = piperate(pr, k); + net->Link[k].Rc = kw; + qual->PipeRateCoeff[k] = 0.0; + } +} + + +void reactpipes(Project *pr, long dt) +/* +**-------------------------------------------------------------- +** Input: dt = time step +** Output: none +** Purpose: reacts water within each pipe over a time step. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + int k; + Pseg seg; + double cseg, rsum, vsum; + + // Examine each link in network + for (k = 1; k <= net->Nlinks; k++) + { + // Skip non-pipe links (pumps & valves) + if (net->Link[k].Type != PIPE) continue; + rsum = 0.0; + vsum = 0.0; + + // Examine each segment of the pipe + seg = qual->FirstSeg[k]; + while (seg != NULL) + { + // React segment over time dt + cseg = seg->c; + seg->c = pipereact(pr, k, seg->c, seg->v, dt); + + // Update reaction component of mass balance + qual->MassBalance.reacted += (cseg - seg->c) * seg->v; + + // Accumulate volume-weighted reaction rate + if (qual->Qualflag == CHEM) + { + rsum += fabs(seg->c - cseg) * seg->v; + vsum += seg->v; + } + seg = seg->prev; + } + + // Normalize volume-weighted reaction rate + if (vsum > 0.0) qual->PipeRateCoeff[k] = rsum / vsum / dt * SECperDAY; + else qual->PipeRateCoeff[k] = 0.0; + } +} + + +void reacttanks(Project *pr, long dt) +/* +**-------------------------------------------------------------- +** Input: dt = time step +** Output: none +** Purpose: reacts water within each tank over a time step. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + int i, k; + double c; + Pseg seg; + Stank *tank; + + // Examine each tank in network + for (i = 1; i <= net->Ntanks; i++) + { + // Skip reservoirs + tank = &net->Tank[i]; + if (tank->A == 0.0) continue; + + // k is segment chain belonging to tank i + k = net->Nlinks + i; + + // React each volume segment in the chain + seg = qual->FirstSeg[k]; + while (seg != NULL) + { + c = seg->c; + seg->c = tankreact(pr, seg->c, seg->v, tank->Kb, dt); + qual->MassBalance.reacted += (c - seg->c) * seg->v; + seg = seg->prev; + } + } +} + + +double piperate(Project *pr, int k) +/* +**-------------------------------------------------------------- +** Input: k = link index +** Output: returns reaction rate coeff. for 1st-order wall +** reactions or mass transfer rate coeff. for 0-order +** reactions +** Purpose: finds wall reaction rate coeffs. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + + double a, d, u, q, kf, kw, y, Re, Sh; + + d = net->Link[k].Diam; // Pipe diameter, ft + + // Ignore mass transfer if Schmidt No. is 0 + if (qual->Sc == 0.0) + { + if (qual->WallOrder == 0.0) return BIG; + else return (net->Link[k].Kw * (4.0 / d) / pr->Ucf[ELEV]); + } + + // Compute Reynolds No. + // Flow rate made consistent with how its saved to hydraulics file + q = (hyd->LinkStatus[k] <= CLOSED) ? 0.0 : hyd->LinkFlow[k]; + a = PI * d * d / 4.0; // pipe area + u = fabs(q) / a; // flow velocity + Re = u * d / hyd->Viscos; // Reynolds number + + // Compute Sherwood No. for stagnant flow + // (mass transfer coeff. = Diffus./radius) + if (Re < 1.0) Sh = 2.0; + + // Compute Sherwood No. for turbulent flow using the Notter-Sleicher formula. + else if (Re >= 2300.0) Sh = 0.0149 * pow(Re, 0.88) * pow(qual->Sc, 0.333); + + // Compute Sherwood No. for laminar flow using Graetz solution formula. + else + { + y = d / net->Link[k].Len * Re * qual->Sc; + Sh = 3.65 + 0.0668 * y / (1.0 + 0.04 * pow(y, 0.667)); + } + + // Compute mass transfer coeff. (in ft/sec) + kf = Sh * qual->Diffus / d; + + // For zero-order reaction, return mass transfer coeff. + if (qual->WallOrder == 0.0) return kf; + + // For first-order reaction, return apparent wall coeff. + kw = net->Link[k].Kw / pr->Ucf[ELEV]; // Wall coeff, ft/sec + kw = (4.0 / d) * kw * kf / (kf + fabs(kw)); // Wall coeff, 1/sec + return kw; +} + + +double pipereact(Project *pr, int k, double c, double v, long dt) +/* +**------------------------------------------------------------ +** Input: k = link index +** c = current quality in segment +** v = segment volume +** dt = time step +** Output: returns new WQ value +** Purpose: computes new quality in a pipe segment after +** reaction occurs +**------------------------------------------------------------ +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + double cnew, dc, dcbulk, dcwall, rbulk, rwall; + + // For water age (hrs), update concentration by timestep + if (qual->Qualflag == AGE) + { + dc = (double)dt / 3600.0; + cnew = c + dc; + cnew = MAX(0.0, cnew); + return cnew; + } + + // Otherwise find bulk & wall reaction rates + rbulk = bulkrate(pr, c, net->Link[k].Kb, qual->BulkOrder) * qual->Bucf; + rwall = wallrate(pr, c, net->Link[k].Diam, net->Link[k].Kw, net->Link[k].Rc); + + // Find change in concentration over timestep + dcbulk = rbulk * (double)dt; + dcwall = rwall * (double)dt; + + // Update cumulative mass reacted + if (pr->times.Htime >= pr->times.Rstart) + { + qual->Wbulk += fabs(dcbulk) * v; + qual->Wwall += fabs(dcwall) * v; + } + + // Update concentration + dc = dcbulk + dcwall; + cnew = c + dc; + cnew = MAX(0.0, cnew); + return cnew; +} + + +double tankreact(Project *pr, double c, double v, double kb, long dt) +/* +**------------------------------------------------------- +** Input: c = current quality in tank +** v = tank volume +** kb = reaction coeff. +** dt = time step +** Output: returns new WQ value +** Purpose: computes new quality in a tank after +** reaction occurs +**------------------------------------------------------- +*/ +{ + Quality *qual = &pr->quality; + + double cnew, dc, rbulk; + + // For water age, update concentration by timestep + if (qual->Qualflag == AGE) + { + dc = (double)dt / 3600.0; + } + + // For chemical analysis apply bulk reaction rate + else + { + // Find bulk reaction rate + rbulk = bulkrate(pr, c, kb, qual->TankOrder) * qual->Tucf; + + // Find concentration change & update quality + dc = rbulk * (double)dt; + if (pr->times.Htime >= pr->times.Rstart) + { + qual->Wtank += fabs(dc) * v; + } + } + cnew = c + dc; + cnew = MAX(0.0, cnew); + return cnew; +} + + +double bulkrate(Project *pr, double c, double kb, double order) +/* +**----------------------------------------------------------- +** Input: c = current WQ concentration +** kb = bulk reaction coeff. +** order = bulk reaction order +** Output: returns bulk reaction rate +** Purpose: computes bulk reaction rate (mass/volume/time) +**----------------------------------------------------------- +*/ +{ + Quality *qual = &pr->quality; + + double c1; + + // Find bulk reaction potential taking into account + // limiting potential & reaction order. + + // Zero-order kinetics: + if (order == 0.0) c = 1.0; + + // Michaelis-Menton kinetics: + else if (order < 0.0) + { + c1 = qual->Climit + SGN(kb) * c; + if (fabs(c1) < TINY) c1 = SGN(c1) * TINY; + c = c / c1; + } + + // N-th order kinetics: + else + { + // Account for limiting potential + if (qual->Climit == 0.0) c1 = c; + else c1 = MAX(0.0, SGN(kb) * (qual->Climit - c)); + + // Compute concentration potential + if (order == 1.0) c = c1; + else if (order == 2.0) c = c1 * c; + else c = c1 * pow(MAX(0.0, c), order - 1.0); + } + + // Reaction rate = bulk coeff. * potential + if (c < 0) c = 0; + return kb * c; +} + + +double wallrate(Project *pr, double c, double d, double kw, double kf) +/* +**------------------------------------------------------------ +** Input: c = current WQ concentration +** d = pipe diameter +** kw = intrinsic wall reaction coeff. +** kf = mass transfer coeff. for 0-order reaction +** (ft/sec) or apparent wall reaction coeff. +** for 1-st order reaction (1/sec) +** Output: returns wall reaction rate in mass/ft3/sec +** Purpose: computes wall reaction rate +**------------------------------------------------------------ +*/ +{ + Quality *qual = &pr->quality; + + if (kw == 0.0 || d == 0.0) return (0.0); + + if (qual->WallOrder == 0.0) // 0-order reaction */ + { + kf = SGN(kw) * c * kf; //* Mass transfer rate (mass/ft2/sec) + kw = kw * SQR(pr->Ucf[ELEV]); // Reaction rate (mass/ft2/sec) + if (fabs(kf) < fabs(kw)) kw = kf; // Reaction mass transfer limited + return (kw * 4.0 / d); // Reaction rate (mass/ft3/sec) + } + else return (c * kf); // 1st-order reaction +} + + +double mixtank(Project *pr, int n, double volin, double massin, double volout) +/* +**------------------------------------------------------------ +** Input: n = node index +** volin = inflow volume to tank over time step +** massin = mass inflow to tank over time step +** volout = outflow volume from tank over time step +** Output: returns new quality for tank +** Purpose: mixes inflow with tank's contents to update its quality. +**------------------------------------------------------------ +*/ +{ + Network *net = &pr->network; + + int i; + double vnet; + i = n - net->Njuncs; + vnet = volin - volout; + switch (net->Tank[i].MixModel) + { + case MIX1: tankmix1(pr, i, volin, massin, vnet); break; + case MIX2: tankmix2(pr, i, volin, massin, vnet); break; + case FIFO: tankmix3(pr, i, volin, massin, vnet); break; + case LIFO: tankmix4(pr, i, volin, massin, vnet); break; + } + return net->Tank[i].C; +} + + +void tankmix1(Project *pr, int i, double vin, double win, double vnet) +/* +**--------------------------------------------- +** Input: i = tank index +** vin = inflow volume +** win = mass inflow +** vnet = inflow - outflow +** Output: none +** Purpose: updates quality in a complete mix tank model +**--------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + int k; + double vnew; + Pseg seg; + Stank *tank = &net->Tank[i]; + + k = net->Nlinks + i; + seg = qual->FirstSeg[k]; + if (seg) + { + vnew = seg->v + vin; + if (vnew > 0.0) seg->c = (seg->c * seg->v + win) / vnew; + seg->v += vnet; + seg->v = MAX(0.0, seg->v); + tank->C = seg->c; + } +} + + +void tankmix2(Project *pr, int i, double vin, double win, double vnet) +/* +**------------------------------------------------ +** Input: i = tank index +** vin = inflow volume +** win = mass inflow +** vnet = inflow - outflow +** Output: none +** Purpose: updates quality in a 2-compartment tank model +**------------------------------------------------ +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + int k; + double vt, // Transferred volume + vmz; // Full mixing zone volume + Pseg mixzone, // Mixing zone segment + stagzone; // Stagnant zone segment + Stank *tank = &pr->network.Tank[i]; + + // Identify segments for each compartment + k = net->Nlinks + i; + mixzone = qual->LastSeg[k]; + stagzone = qual->FirstSeg[k]; + if (mixzone == NULL || stagzone == NULL) return; + + // Full mixing zone volume + vmz = tank->V1max; + + // Tank is filling + vt = 0.0; + if (vnet > 0.0) + { + vt = MAX(0.0, (mixzone->v + vnet - vmz)); + if (vin > 0.0) + { + mixzone->c = ((mixzone->c) * (mixzone->v) + win) / + (mixzone->v + vin); + } + if (vt > 0.0) + { + stagzone->c = ((stagzone->c) * (stagzone->v) + + (mixzone->c) * vt) / (stagzone->v + vt); + } + } + + // Tank is emptying + else if (vnet < 0.0) + { + if (stagzone->v > 0.0) vt = MIN(stagzone->v, (-vnet)); + if (vin + vt > 0.0) + { + mixzone->c = ((mixzone->c) * (mixzone->v) + win + + (stagzone->c) * vt) / (mixzone->v + vin + vt); + } + } + + // Update segment volumes + if (vt > 0.0) + { + mixzone->v = vmz; + if (vnet > 0.0) stagzone->v += vt; + else stagzone->v = MAX(0.0, ((stagzone->v) - vt)); + } + else + { + mixzone->v += vnet; + mixzone->v = MIN(mixzone->v, vmz); + mixzone->v = MAX(0.0, mixzone->v); + stagzone->v = 0.0; + } + + // Use quality of mixing zone to represent quality of + // tank since this is where outflow begins to flow from + tank->C = mixzone->c; +} + + +void tankmix3(Project *pr, int i, double vin, double win, double vnet) +/* +**---------------------------------------------------------- +** Input: i = tank index +** vin = inflow volume +** win = mass inflow +** vnet = inflow - outflow +** Output: none +** Purpose: Updates quality in a First-In-First-Out (FIFO) tank model. +**---------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + int k; + double vout, vseg; + double cin, vsum, wsum; + Pseg seg; + Stank *tank = &pr->network.Tank[i]; + + k = net->Nlinks + i; + if (qual->LastSeg[k] == NULL || qual->FirstSeg[k] == NULL) return; + + // Add new last segment for flow entering the tank + if (vin > 0.0) + { + // ... increase segment volume if inflow has same quality as segment + cin = win / vin; + seg = qual->LastSeg[k]; + if (fabs(seg->c - cin) < qual->Ctol) seg->v += vin; + + // ... otherwise add a new last segment to the tank + else addseg(pr, k, vin, cin); + } + + // Withdraw flow from first segment + vsum = 0.0; + wsum = 0.0; + vout = vin - vnet; + while (vout > 0.0) + { + seg = qual->FirstSeg[k]; + if (seg == NULL) break; + vseg = seg->v; // Flow volume from leading seg + vseg = MIN(vseg, vout); + if (seg == qual->LastSeg[k]) vseg = vout; + vsum += vseg; + wsum += (seg->c) * vseg; + vout -= vseg; // Remaining flow volume + if (vout >= 0.0 && vseg >= seg->v) // Seg used up + { + if (seg->prev) + { + qual->FirstSeg[k] = seg->prev; + seg->prev = qual->FreeSeg; + qual->FreeSeg = seg; + } + } + else seg->v -= vseg; // Remaining volume in segment + } + + // Use quality withdrawn from 1st segment + // to represent overall quality of tank + if (vsum > 0.0) tank->C = wsum / vsum; + else if (qual->FirstSeg[k] == NULL) tank->C = 0.0; + else tank->C = qual->FirstSeg[k]->c; +} + + +void tankmix4(Project *pr, int i, double vin, double win, double vnet) +/* +**---------------------------------------------------------- +** Input: i = tank index +** vin = inflow volume +** win = mass inflow +** vnet = inflow - outflow +** Output: none +** Purpose: Updates quality in a Last In-First Out (LIFO) tank model. +**---------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + int k; + double cin, vsum, wsum, vseg; + Pseg seg; + Stank *tank = &pr->network.Tank[i]; + + k = net->Nlinks + i; + if (qual->LastSeg[k] == NULL || qual->FirstSeg[k] == NULL) return; + + // Find inflows & outflows + if (vin > 0.0) cin = win / vin; + else cin = 0.0; + + // If tank filling, then create new last seg + tank->C = qual->LastSeg[k]->c; + seg = qual->LastSeg[k]; + if (vnet > 0.0) + { + // ... inflow quality is same as last segment's quality, + // so just add inflow volume to last segment + if (fabs(seg->c - cin) < qual->Ctol) seg->v += vnet; + + // ... otherwise add a new last segment with inflow quality + else addseg(pr, k, vnet, cin); + + // Update reported tank quality + tank->C = qual->LastSeg[k]->c; + } + + // If tank emptying then remove last segments until vnet consumed + else if (vnet < 0.0) + { + vsum = 0.0; + wsum = 0.0; + vnet = -vnet; + + // Reverse segment chain so segments are processed from last to first + reversesegs(pr, k); + + // While there is still volume to remove + while (vnet > 0.0) + { + // ... start with reversed first segment + seg = qual->FirstSeg[k]; + if (seg == NULL) break; + + // ... find volume to remove from it + vseg = seg->v; + vseg = MIN(vseg, vnet); + if (seg == qual->LastSeg[k]) vseg = vnet; + + // ... update total volume & mass removed + vsum += vseg; + wsum += (seg->c) * vseg; + + // ... update remiaing volume to remove + vnet -= vseg; + + // ... if no more volume left in current segment + if (vnet >= 0.0 && vseg >= seg->v) + { + // ... replace current segment with previous one + if (seg->prev) + { + qual->FirstSeg[k] = seg->prev; + seg->prev = qual->FreeSeg; + qual->FreeSeg = seg; + } + } + + // ... otherwise reduce volume of current segment + else seg->v -= vseg; + } + + // Restore original orientation of segment chain + reversesegs(pr, k); + + // Reported tank quality is mixture of flow released and any inflow + tank->C = (wsum + win) / (vsum + vin); + } +} diff --git a/src/qualroute.c b/src/qualroute.c new file mode 100644 index 0000000..592f92f --- /dev/null +++ b/src/qualroute.c @@ -0,0 +1,694 @@ +/* +****************************************************************************** +Project: OWA EPANET +Version: 2.2 +Module: qualroute.c +Description: computes water quality transport over a single time step +Authors: see AUTHORS +Copyright: see AUTHORS +License: see LICENSE +Last Updated: 05/15/2019 +****************************************************************************** +*/ + +#include +#include +#include + +#include "mempool.h" +#include "types.h" + +// Macro to compute the volume of a link +#define LINKVOL(k) (0.785398 * net->Link[(k)].Len * SQR(net->Link[(k)].Diam)) + +// Macro to get link flow compatible with flow saved to hydraulics file +#define LINKFLOW(k) ((hyd->LinkStatus[k] <= CLOSED) ? 0.0 : hyd->LinkFlow[k]) + +// Exported functions +int sortnodes(Project *); +void transport(Project *, long); +void initsegs(Project *); +void reversesegs(Project *, int); +void addseg(Project *, int, double, double); + +// Imported functions +extern double findsourcequal(Project *, int, double, long); +extern void reactpipes(Project *, long); +extern void reacttanks(Project *, long); +extern double mixtank(Project *, int, double, double, double); + +// Local functions +static void evalnodeinflow(Project *, int, long, double *, double *); +static void evalnodeoutflow(Project *, int, double, long); +static double findnodequal(Project *, int, double, double, double, long); +static double noflowqual(Project *, int); +static void updatemassbalance(Project *, int, double, double, long); +static int selectnonstacknode(Project *, int, int *); + + +void transport(Project *pr, long tstep) +/* +**-------------------------------------------------------------- +** Input: tstep = length of current time step +** Output: none +** Purpose: transports constituent mass through the pipe network +** under a period of constant hydraulic conditions. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + + int j, k, m, n; + double volin, massin, volout, nodequal; + Padjlist alink; + + // React contents of each pipe and tank + if (qual->Reactflag) + { + reactpipes(pr, tstep); + reacttanks(pr, tstep); + } + + // Analyze each node in topological order + for (j = 1; j <= net->Nnodes; j++) + { + // ... index of node to be processed + n = qual->SortedNodes[j]; + + // ... zero out mass & flow volumes for this node + volin = 0.0; + massin = 0.0; + volout = 0.0; + + // ... examine each link with flow into the node + for (alink = net->Adjlist[n]; alink != NULL; alink = alink->next) + { + // ... k is index of next link incident on node n + k = alink->link; + + // ... link has flow into node - add it to node's inflow + // (m is index of link's downstream node) + m = net->Link[k].N2; + if (qual->FlowDir[k] < 0) m = net->Link[k].N1; + if (m == n) + { + evalnodeinflow(pr, k, tstep, &volin, &massin); + } + + // ... link has flow out of node - add it to node's outflow + else volout += fabs(LINKFLOW(k)); + } + + // ... if node is a junction, add on any external outflow (e.g., demands) + if (net->Node[n].Type == JUNCTION) + { + volout += MAX(0.0, hyd->NodeDemand[n]); + } + + // ... convert from outflow rate to volume + volout *= tstep; + + // ... find the concentration of flow leaving the node + nodequal = findnodequal(pr, n, volin, massin, volout, tstep); + + // ... examine each link with flow out of the node + for (alink = net->Adjlist[n]; alink != NULL; alink = alink->next) + { + // ... link k incident on node n has upstream node m equal to n + k = alink->link; + m = net->Link[k].N1; + if (qual->FlowDir[k] < 0) m = net->Link[k].N2; + if (m == n) + { + // ... send flow at new node concen. into link + evalnodeoutflow(pr, k, nodequal, tstep); + } + } + updatemassbalance(pr, n, massin, volout, tstep); + } +} + +void evalnodeinflow(Project *pr, int k, long tstep, double *volin, + double *massin) +/* +**-------------------------------------------------------------- +** Input: k = link index +** tstep = quality routing time step +** Output: volin = flow volume entering a node +** massin = constituent mass entering a node +** Purpose: adds the contribution of a link's outflow volume +** and constituent mass to the total inflow into its +** downstream node over a time step. +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + + double q, v, vseg; + Pseg seg; + + // Get flow rate (q) and flow volume (v) through link + q = LINKFLOW(k); + v = fabs(q) * tstep; + + // Transport flow volume v from link's leading segments into downstream + // node, removing segments once their full volume is consumed + while (v > 0.0) + { + seg = qual->FirstSeg[k]; + if (!seg) break; + + // ... volume transported from first segment is smaller of + // remaining flow volume & segment volume + vseg = seg->v; + vseg = MIN(vseg, v); + + // ... update total volume & mass entering downstream node + *volin += vseg; + *massin += vseg * seg->c; + + // ... reduce remaining flow volume by amount transported + v -= vseg; + + // ... if all of segment's volume was transferred + if (v >= 0.0 && vseg >= seg->v) + { + // ... replace this leading segment with the one behind it + qual->FirstSeg[k] = seg->prev; + if (qual->FirstSeg[k] == NULL) qual->LastSeg[k] = NULL; + + // ... recycle the used up segment + seg->prev = qual->FreeSeg; + qual->FreeSeg = seg; + } + + // ... otherwise just reduce this segment's volume + else seg->v -= vseg; + } +} + + +double findnodequal(Project *pr, int n, double volin, + double massin, double volout, long tstep) +/* +**-------------------------------------------------------------- +** Input: n = node index +** volin = flow volume entering node +** massin = mass entering node +** volout = flow volume leaving node +** tstep = length of current time step +** Output: returns water quality in a node's outflow +** Purpose: computes a node's new quality from its inflow +** volume and mass, including any source contribution. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + + // Node is a junction - update its water quality + if (net->Node[n].Type == JUNCTION) + { + // ... dilute inflow with any external negative demand + volin -= MIN(0.0, hyd->NodeDemand[n]) * tstep; + + // ... new concen. is mass inflow / volume inflow + if (volin > 0.0) qual->NodeQual[n] = massin / volin; + + // ... if no inflow adjust quality for reaction in connecting pipes + else if (qual->Reactflag) qual->NodeQual[n] = noflowqual(pr, n); + } + + // Node is a tank - use its mixing model to update its quality + else if (net->Node[n].Type == TANK) + { + qual->NodeQual[n] = mixtank(pr, n, volin, massin, volout); + } + + // Add any external quality source onto node's concen. + qual->SourceQual = 0.0; + + // For source tracing analysis find tracer added at source node + if (qual->Qualflag == TRACE) + { + if (n == qual->TraceNode) + { + // ... quality added to network is difference between tracer + // concentration (100 mg/L) and current node quality + if (net->Node[n].Type == RESERVOIR) qual->SourceQual = 100.0; + else qual->SourceQual = MAX(100.0 - qual->NodeQual[n], 0.0); + qual->NodeQual[n] = 100.0; + } + return qual->NodeQual[n]; + } + + // Find quality contribued by any external chemical source + else qual->SourceQual = findsourcequal(pr, n, volout, tstep); + if (qual->SourceQual == 0.0) return qual->NodeQual[n]; + + // Combine source quality with node quality + switch (net->Node[n].Type) + { + case JUNCTION: + qual->NodeQual[n] += qual->SourceQual; + return qual->NodeQual[n]; + + case TANK: + return qual->NodeQual[n] + qual->SourceQual; + + case RESERVOIR: + qual->NodeQual[n] = qual->SourceQual; + return qual->SourceQual; + } + return qual->NodeQual[n]; +} + + +double noflowqual(Project *pr, int n) +/* +**-------------------------------------------------------------- +** Input: n = node index +** Output: quality for node n +** Purpose: sets the quality for a junction node that has no +** inflow to the average of the quality in its +** adjoining link segments. +** Note: this function is only used for reactive substances. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + int k, inflow, kount = 0; + double c = 0.0; + FlowDirection dir; + Padjlist alink; + + // Examine each link incident on the node + for (alink = net->Adjlist[n]; alink != NULL; alink = alink->next) + { + // ... index of an incident link + k = alink->link; + dir = qual->FlowDir[k]; + + // Node n is link's downstream node - add quality + // of link's first segment to average + if (net->Link[k].N2 == n && dir >= 0) inflow = TRUE; + else if (net->Link[k].N1 == n && dir < 0) inflow = TRUE; + else inflow = FALSE; + if (inflow == TRUE && qual->FirstSeg[k] != NULL) + { + c += qual->FirstSeg[k]->c; + kount++; + } + + // Node n is link's upstream node - add quality + // of link's last segment to average + else if (inflow == FALSE && qual->LastSeg[k] != NULL) + { + c += qual->LastSeg[k]->c; + kount++; + } + } + if (kount > 0) c = c / (double)kount; + return c; +} + + +void evalnodeoutflow(Project *pr, int k, double c, long tstep) +/* +**-------------------------------------------------------------- +** Input: k = link index +** c = quality from upstream node +** tstep = time step +** Output: none +** Purpose: releases flow volume and mass from the upstream +** node of a link over a time step. +**-------------------------------------------------------------- +*/ +{ + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + + double v; + Pseg seg; + + // Find flow volume (v) released over time step + v = fabs(LINKFLOW(k)) * tstep; + if (v == 0.0) return; + + // Release flow and mass into upstream end of the link + + // ... case where link has a last (most upstream) segment + seg = qual->LastSeg[k]; + if (seg) + { + // ... if node quality close to segment quality then mix + // the nodal outflow volume with the segment's volume + if (fabs(seg->c - c) < qual->Ctol) + { + seg->c = (seg->c*seg->v + c*v) / (seg->v + v); + seg->v += v; + } + + // ... otherwise add a new segment at upstream end of link + else addseg(pr, k, v, c); + } + + // ... link has no segments so add one + else addseg(pr, k, v, c); +} + + +void updatemassbalance(Project *pr, int n, double massin, + double volout, long tstep) +/* +**-------------------------------------------------------------- +** Input: n = node index +** massin = mass inflow to node +** volout = outflow volume from node +** Output: none +** Purpose: Adds a node's external mass inflow and outflow +** over the current time step to the network's +** overall mass balance. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + + double masslost = 0.0, + massadded = 0.0; + + switch (net->Node[n].Type) + { + // Junctions lose mass from outflow demand & gain it from source inflow + case JUNCTION: + masslost = MAX(0.0, hyd->NodeDemand[n]) * tstep * qual->NodeQual[n]; + massadded = qual->SourceQual * volout; + break; + + // Reservoirs add mass from quality source if specified or from a fixed + // initial quality + case RESERVOIR: + masslost = massin; + if (qual->SourceQual > 0.0) massadded = qual->SourceQual * volout; + else massadded = qual->NodeQual[n] * volout; + break; + + // Tanks add mass only from external source inflow + case TANK: + massadded = qual->SourceQual * volout; + break; + } + qual->MassBalance.outflow += masslost; + qual->MassBalance.inflow += massadded; +} + + +int sortnodes(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns an error code +** Purpose: topologically sorts nodes from upstream to downstream. +** Note: links with negligible flow are ignored since they can +** create spurious cycles that cause the sort to fail. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + int i, j, k, n; + int *indegree = NULL; + int *stack = NULL; + int stacksize = 0; + int numsorted = 0; + int errcode = 0; + FlowDirection dir; + Padjlist alink; + + // Allocate an array to count # links with inflow to each node + // and for a stack to hold nodes waiting to be processed + indegree = (int *)calloc(net->Nnodes + 1, sizeof(int)); + stack = (int *)calloc(net->Nnodes + 1, sizeof(int)); + if (indegree && stack) + { + // Count links with "non-negligible" inflow to each node + for (k = 1; k <= net->Nlinks; k++) + { + dir = qual->FlowDir[k]; + if (dir == POSITIVE) n = net->Link[k].N2; + else if (dir == NEGATIVE) n = net->Link[k].N1; + else continue; + indegree[n]++; + } + + // Place nodes with no inflow onto a stack + for (i = 1; i <= net->Nnodes; i++) + { + if (indegree[i] == 0) + { + stacksize++; + stack[stacksize] = i; + } + } + + // Examine each node on the stack until none are left + while (numsorted < net->Nnodes) + { + // ... if stack is empty then a cycle exists + if (stacksize == 0) + { + // ... add a non-sorted node connected to a sorted one to stack + j = selectnonstacknode(pr, numsorted, indegree); + if (j == 0) break; // This shouldn't happen. + indegree[j] = 0; + stacksize++; + stack[stacksize] = j; + } + + // ... make the last node added to the stack the next + // in sorted order & remove it from the stack + i = stack[stacksize]; + stacksize--; + numsorted++; + qual->SortedNodes[numsorted] = i; + + // ... for each outflow link from this node reduce the in-degree + // of its downstream node + for (alink = net->Adjlist[i]; alink != NULL; alink = alink->next) + { + // ... k is the index of the next link incident on node i + k = alink->link; + + // ... skip link if flow is negligible + if (qual->FlowDir[k] == 0) continue; + + // ... link has flow out of node (downstream node n not equal to i) + n = net->Link[k].N2; + if (qual->FlowDir[k] < 0) n = net->Link[k].N1; + + // ... reduce degree of node n + if (n != i && indegree[n] > 0) + { + indegree[n]--; + + // ... no more degree left so add node n to stack + if (indegree[n] == 0) + { + stacksize++; + stack[stacksize] = n; + } + } + } + } + } + else errcode = 101; + if (numsorted < net->Nnodes) errcode = 120; + FREE(indegree); + FREE(stack); + return errcode; +} + + +int selectnonstacknode(Project *pr, int numsorted, int *indegree) +/* +**-------------------------------------------------------------- +** Input: numsorted = number of nodes that have been sorted +** indegree = number of inflow links to each node +** Output: returns a node index +** Purpose: selects a next node for sorting when a cycle exists. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + int i, m, n; + Padjlist alink; + + // Examine each sorted node in last in - first out order + for (i = numsorted; i > 0; i--) + { + // For each link connected to the sorted node + m = qual->SortedNodes[i]; + for (alink = net->Adjlist[m]; alink != NULL; alink = alink->next) + { + // ... n is the node of link k opposite to node m + n = alink->node; + + // ... select node n if it still has inflow links + if (indegree[n] > 0) return n; + } + } + + // If no node was selected by the above process then return the + // first node that still has inflow links remaining + for (i = 1; i <= net->Nnodes; i++) + { + if (indegree[i] > 0) return i; + } + + // If all else fails return 0 indicating that no node was selected + return 0; +} + + +void initsegs(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: initializes water quality volume segments in each +** pipe and tank. +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Quality *qual = &pr->quality; + + int j, k; + double c, v, v1; + + // Add one segment with assigned downstream node quality to each pipe + for (k = 1; k <= net->Nlinks; k++) + { + qual->FirstSeg[k] = NULL; + qual->LastSeg[k] = NULL; + if (net->Link[k].Type == PIPE) + { + v = LINKVOL(k); + j = net->Link[k].N2; + c = qual->NodeQual[j]; + addseg(pr, k, v, c); + } + } + + // Initialize segments in tanks + for (j = 1; j <= net->Ntanks; j++) + { + // Skip reservoirs + if (net->Tank[j].A == 0.0) continue; + + // Establish initial tank quality & volume + k = net->Tank[j].Node; + c = net->Node[k].C0; + v = net->Tank[j].V0; + + // Create one volume segment for entire tank + k = net->Nlinks + j; + qual->FirstSeg[k] = NULL; + qual->LastSeg[k] = NULL; + addseg(pr, k, v, c); + + // Create a 2nd segment for the 2-compartment tank model + if (net->Tank[j].MixModel == MIX2) + { + // ... mixing zone segment + v1 = MAX(0, v - net->Tank[j].V1max); + qual->FirstSeg[k]->v = v1; + + // ... stagnant zone segment + v = v - v1; + addseg(pr, k, v, c); + } + } +} + + +void reversesegs(Project *pr, int k) +/* +**-------------------------------------------------------------- +** Input: k = link index +** Output: none +** Purpose: re-orients a link's segments when flow reverses. +**-------------------------------------------------------------- +*/ +{ + Quality *qual = &pr->quality; + Pseg seg, nseg, pseg; + + seg = qual->FirstSeg[k]; + qual->FirstSeg[k] = qual->LastSeg[k]; + qual->LastSeg[k] = seg; + pseg = NULL; + while (seg != NULL) + { + nseg = seg->prev; + seg->prev = pseg; + pseg = seg; + seg = nseg; + } +} + + +void addseg(Project *pr, int k, double v, double c) +/* +**------------------------------------------------------------- +** Input: k = segment chain index +** v = segment volume +** c = segment quality +** Output: none +** Purpose: adds a segment to the start of a link +** upstream of its current last segment. +**------------------------------------------------------------- +*/ +{ + Quality *qual = &pr->quality; + Pseg seg; + + // Grab the next free segment from the segment pool if available + if (qual->FreeSeg != NULL) + { + seg = qual->FreeSeg; + qual->FreeSeg = seg->prev; + } + + // Otherwise allocate a new segment + else + { + seg = (struct Sseg *) mempool_alloc(qual->SegPool, sizeof(struct Sseg)); + if (seg == NULL) + { + qual->OutOfMemory = TRUE; + return; + } + } + + // Assign volume and quality to the segment + seg->v = v; + seg->c = c; + + // Add the new segment to the end of the segment chain + seg->prev = NULL; + if (qual->FirstSeg[k] == NULL) qual->FirstSeg[k] = seg; + if (qual->LastSeg[k] != NULL) qual->LastSeg[k]->prev = seg; + qual->LastSeg[k] = seg; +} diff --git a/src/report.c b/src/report.c old mode 100755 new mode 100644 index 15555c3..8fc6d16 --- a/src/report.c +++ b/src/report.c @@ -1,1240 +1,1489 @@ -/* -********************************************************************* - -REPORT.C -- Reporting Routines for EPANET Program - -VERSION: 2.00 -DATE: 5/30/00 - 6/24/02 - 8/15/07 (2.00.11) - 2/14/08 (2.00.12) -AUTHOR: L. Rossman - US EPA - NRMRL - -This module contains various procedures (all beginning with -'write') that are called from other modules to write formatted -output to a report file. - -It also contains function disconnected(), called from writehydwarn() -and writehyderr(), that checks if a hydraulic solution causes a -network to become disconnected. - -The function writeline(S) is used throughout to write a -formatted string S to the report file. - -******************************************************************** -*/ - -#include -#include -#ifndef __APPLE__ -#include -#else -#include -#endif -#include -#include -#include "hash.h" -#include "text.h" -#include "types.h" -#include "funcs.h" -#define EXTERN extern -#include "vars.h" - -#define MAXCOUNT 10 /* Max. # of disconnected nodes listed */ -long LineNum; /* Current line number */ -long PageNum; /* Current page number */ -char DateStamp[26]; /* Current date & time */ -char Fprinterr; /* File write error flag */ - -/* Defined in enumstxt.h in EPANET.C */ -extern char *NodeTxt[]; -extern char *LinkTxt[]; -extern char *StatTxt[]; -extern char *TstatTxt[]; -extern char *RptFormTxt[]; - -typedef REAL4 *Pfloat; -void writenodetable(Pfloat *); -void writelinktable(Pfloat *); - - -int writereport() -/* -**------------------------------------------------------ -** Input: none -** Output: returns error code -** Purpose: writes formatted output report to file -** -** Calls strcomp() from the EPANET.C module. -**------------------------------------------------------ -*/ -{ - char tflag; - FILE *tfile; - int errcode = 0; - - /* If no secondary report file specified then */ - /* write formatted output to primary report file. */ - Fprinterr = FALSE; - if (Rptflag && strlen(Rpt2Fname) == 0 && RptFile != NULL) - { - writecon(FMT17); - writecon(Rpt1Fname); - if (Energyflag) writeenergy(); - errcode = writeresults(); - } - - /* A secondary report file was specified */ - else if (strlen(Rpt2Fname) > 0) - { - - /* If secondary report file has same name as either input */ - /* or primary report file then use primary report file. */ - if (strcomp(Rpt2Fname,InpFname) || - strcomp(Rpt2Fname,Rpt1Fname)) - { - writecon(FMT17); - writecon(Rpt1Fname); - if (Energyflag) writeenergy(); - errcode = writeresults(); - } - - /* Otherwise write report to secondary report file. */ - else - { - - /* Try to open file */ - tfile = RptFile; - tflag = Rptflag; - if ((RptFile = fopen(Rpt2Fname,"wt")) == NULL) - { - RptFile = tfile; - Rptflag = tflag; - errcode = 303; - } - - /* Write full formatted report to file */ - else - { - Rptflag = 1; - writecon(FMT17); - writecon(Rpt2Fname); - writelogo(); - if (Summaryflag) writesummary(); - if (Energyflag) writeenergy(); - errcode = writeresults(); - fclose(RptFile); - RptFile = tfile; - Rptflag = tflag; - } - } - } - - /* Special error handler for write-to-file error */ - if (Fprinterr) errmsg(309); - return(errcode); -} /* End of writereport */ - - -void writelogo() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: writes program logo to report file. -**-------------------------------------------------------------- -*/ -{ - int i; - int version; - int major; - int minor; - char s[80]; - time_t timer; /* time_t structure & functions time() & */ - /* ctime() are defined in time.h */ - - version = CODEVERSION; - major= version/10000; - minor= (version%10000)/100; - - time(&timer); - strcpy(DateStamp,ctime(&timer)); - PageNum = 1; - LineNum = 2; - fprintf(RptFile,FMT18); - fprintf(RptFile,"%s",DateStamp); - writeline(LOGO1); - writeline(LOGO2); - writeline(LOGO3); - writeline(LOGO4); - sprintf(s,LOGO5, major , minor); - writeline(s); - writeline(LOGO6); - writeline(""); -} /* End of writelogo */ - - -void writesummary() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: writes summary system information to report file -**-------------------------------------------------------------- -*/ -{ - char s[MAXFNAME+1]; - int i; - int nres = 0; - - for (i=0; i<3; i++) - { - if (strlen(Title[i]) > 0) - { - sprintf(s,"%-.70s",Title[i]); - writeline(s); - } - } - writeline(" "); - sprintf(s,FMT19,InpFname); - writeline(s); - sprintf(s,FMT20,Njuncs); - writeline(s); - for (i=1; i<=Ntanks; i++) - if (Tank[i].A == 0.0) nres++; - sprintf(s,FMT21a,nres); - writeline(s); - sprintf(s,FMT21b,Ntanks-nres); - writeline(s); - sprintf(s,FMT22,Npipes); - writeline(s); - sprintf(s,FMT23,Npumps); - writeline(s); - sprintf(s,FMT24,Nvalves); - writeline(s); - sprintf(s,FMT25,RptFormTxt[Formflag]); - writeline(s); - sprintf(s,FMT26,Hstep*Ucf[TIME],Field[TIME].Units); - writeline(s); - sprintf(s,FMT27,Hacc); - writeline(s); - - sprintf(s,FMT27a,CheckFreq); //(2.00.12 - LR) - writeline(s); //(2.00.12 - LR) - sprintf(s,FMT27b,MaxCheck); //(2.00.12 - LR) - writeline(s); //(2.00.12 - LR) - sprintf(s,FMT27c,DampLimit); //(2.00.12 - LR) - writeline(s); //(2.00.12 - LR) - - sprintf(s,FMT28,MaxIter); - writeline(s); - if (Qualflag == NONE || Dur == 0.0) - sprintf(s,FMT29); - else if (Qualflag == CHEM) - sprintf(s,FMT30,ChemName); - else if (Qualflag == TRACE) - sprintf(s,FMT31,Node[TraceNode].ID); - else if (Qualflag == AGE) - sprintf(s,FMT32); - writeline(s); - if (Qualflag != NONE && Dur > 0) - { - sprintf(s,FMT33,(float)Qstep/60.0); - writeline(s); - sprintf(s,FMT34,Ctol*Ucf[QUALITY],Field[QUALITY].Units); - writeline(s); - } - sprintf(s,FMT36,SpGrav); - writeline(s); - sprintf(s,FMT37a,Viscos/VISCOS); - writeline(s); - sprintf(s,FMT37b,Diffus/DIFFUS); - writeline(s); - sprintf(s,FMT38,Dmult); - writeline(s); - sprintf(s,FMT39,Dur*Ucf[TIME],Field[TIME].Units); - writeline(s); - if (Rptflag) - { - sprintf(s,FMT40); - writeline(s); - if (Nodeflag == 0) writeline(FMT41); - if (Nodeflag == 1) writeline(FMT42); - if (Nodeflag == 2) writeline(FMT43); - writelimits(DEMAND,QUALITY); - if (Linkflag == 0) writeline(FMT44); - if (Linkflag == 1) writeline(FMT45); - if (Linkflag == 2) writeline(FMT46); - writelimits(DIAM,HEADLOSS); - } - writeline(" "); -} /* End of writesummary */ - - -void writehydstat(int iter, double relerr) -/* -**-------------------------------------------------------------- -** Input: iter = # iterations to find hydraulic solution -** relerr = convergence error in hydraulic solution -** Output: none -** Purpose: writes hydraulic status report for solution found -** at current time period to report file -**-------------------------------------------------------------- -*/ -{ - int i,n; - char newstat; - char s1[MAXLINE+1]; - -/*** Updated 6/24/02 ***/ - char atime[13]; - - /* Display system status */ - strcpy(atime,clocktime(Atime,Htime)); - if (iter > 0) - { - if (relerr <= Hacc) - sprintf(s1,FMT58,atime,iter); - else - sprintf(s1,FMT59,atime,iter,relerr); - writeline(s1); - } - - /* - Display status changes for tanks. - D[n] is net inflow to tank at node n. - Old tank status is stored in OldStat[] - at indexes Nlinks+1 to Nlinks+Ntanks. - */ - for (i=1; i<=Ntanks; i++) - { - n = Tank[i].Node; - if (ABS(NodeDemand[n]) < 0.001) newstat = CLOSED; - else if (NodeDemand[n] > 0.0) newstat = FILLING; - else if (NodeDemand[n] < 0.0) newstat = EMPTYING; - else newstat = OldStat[Nlinks+i]; - if (newstat != OldStat[Nlinks+i]) - { - if (Tank[i].A > 0.0) - sprintf(s1,FMT50,atime,Node[n].ID,StatTxt[newstat], - (NodeHead[n]-Node[n].El)*Ucf[HEAD],Field[HEAD].Units); - else sprintf(s1,FMT51,atime,Node[n].ID,StatTxt[newstat]); - writeline(s1); - OldStat[Nlinks+i] = newstat; - } - } - - /* Display status changes for links */ - for (i=1; i<=Nlinks; i++) - { - if (LinkStatus[i] != OldStat[i]) - { - if (Htime == 0) - sprintf(s1,FMT52,atime,LinkTxt[Link[i].Type],Link[i].ID, - StatTxt[LinkStatus[i]]); - else sprintf(s1,FMT53,atime,LinkTxt[Link[i].Type],Link[i].ID, - StatTxt[OldStat[i]],StatTxt[LinkStatus[i]]); - writeline(s1); - OldStat[i] = LinkStatus[i]; - } - } - writeline(" "); -} /* End of writehydstat */ - - -void writeenergy() -/* -**------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: writes energy usage report to report file -**------------------------------------------------------------- -*/ -{ - int j; - double csum; - char s[MAXLINE+1]; - if (Npumps == 0) return; - writeline(" "); - writeheader(ENERHDR,0); - csum = 0.0; - for (j=1; j<=Npumps; j++) - { - csum += Pump[j].Energy[5]; - if (LineNum == (long)PageSize) writeheader(ENERHDR,1); - sprintf(s,"%-8s %6.2f %6.2f %9.2f %9.2f %9.2f %9.2f", - Link[Pump[j].Link].ID,Pump[j].Energy[0],Pump[j].Energy[1], - Pump[j].Energy[2],Pump[j].Energy[3],Pump[j].Energy[4], - Pump[j].Energy[5]); - writeline(s); - } - fillstr(s,'-',63); - writeline(s); - -/*** Updated 6/24/02 ***/ - sprintf(s,FMT74,"",Emax*Dcost); - writeline(s); - sprintf(s,FMT75,"",csum+Emax*Dcost); -/*** End of update ***/ - - writeline(s); - writeline(" "); -} /* End of writeenergy */ - - -int writeresults() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: writes simulation results to report file -**-------------------------------------------------------------- -*/ -{ - Pfloat *x; /* Array of pointers to floats */ - int j,m,n,np,nnv,nlv; - int errcode = 0; - - /* - **----------------------------------------------------------- - ** NOTE: The OutFile contains results for 4 node variables - ** (demand, head, pressure, & quality) and 8 link - ** variables (flow, velocity, headloss, quality, - ** status, setting, reaction rate & friction factor) - ** at each reporting time. - **----------------------------------------------------------- - */ - - /* Return if no output file */ - if (OutFile == NULL) return(106); - - /* Return if no nodes or links selected for reporting */ - /* or if no node or link report variables enabled. */ - if (!Nodeflag && !Linkflag) return(errcode); - nnv = 0; - for (j=ELEV; j<=QUALITY; j++) nnv += Field[j].Enabled; - nlv = 0; - for (j=LENGTH; j<=FRICTION; j++) nlv += Field[j].Enabled; - if (nnv == 0 && nlv == 0) return(errcode); - - /* Allocate memory for output variables. */ - /* m = larger of # node variables & # link variables */ - /* n = larger of # nodes & # links */ - m = MAX( (QUALITY-DEMAND+1), (FRICTION-FLOW+1) ); - n = MAX( (Nnodes+1), (Nlinks+1)); - x = (Pfloat *) calloc(m, sizeof(Pfloat)); - ERRCODE( MEMCHECK(x) ); - if (errcode) return(errcode); - for (j=0; j 0 && Nodeflag > 0) writenodetable(x); - - /* Read in link results & write link table. */ - for (j=FLOW; j<=FRICTION; j++) - fread((x[j-FLOW])+1,sizeof(REAL4),Nlinks,OutFile); - if (nlv > 0 && Linkflag > 0) writelinktable(x); - Htime += Rstep; - } - - /* Free allocated memory */ - for (j=0; j 1.e6) sprintf(s1, "%10.2e", y[j]); - else sprintf(s1, "%10.*f", Field[j].Precision, y[j]); -/*** End of update ***/ - - strcat(s, s1); - } - } - - /* Note if node is a reservoir/tank */ - if (i > Njuncs) - { - strcat(s, " "); - strcat(s, NodeTxt[getnodetype(i)]); - } - - /* Write results for node */ - writeline(s); - } - } - writeline(" "); -} - - -void writelinktable(Pfloat *x) -/* -**--------------------------------------------------------------- -** Input: x = pointer to link results for current time -** Output: none -** Purpose: writes link results for current time to report file -**--------------------------------------------------------------- -*/ -{ - int i,j,k; - char s[MAXLINE+1],s1[16]; - double y[MAXVAR]; - - /* Write table header */ - writeheader(LINKHDR,0); - - /* For each link: */ - for (i=1; i<=Nlinks; i++) - { - - /* Place results for each link variable in y */ - y[LENGTH] = Link[i].Len*Ucf[LENGTH]; - y[DIAM] = Link[i].Diam*Ucf[DIAM]; - for (j=FLOW; j<=FRICTION; j++) y[j] = *((x[j-FLOW])+i); - - /* Check if link gets reported on */ - if ((Linkflag == 1 || Link[i].Rpt) && checklimits(y,DIAM,FRICTION)) - { - - /* Check if new page needed */ - if (LineNum == (long)PageSize) writeheader(LINKHDR,1); - - /* Add link ID and each reported field to string s */ - sprintf(s,"%-15s",Link[i].ID); - for (j=LENGTH; j<=FRICTION; j++) - { - if (Field[j].Enabled == TRUE) - { - if (j == STATUS) - { - if (y[j] <= CLOSED) k = CLOSED; - else if (y[j] == ACTIVE) k = ACTIVE; - else k = OPEN; - sprintf(s1, "%10s", StatTxt[k]); - } - -/*** Updated 6/24/02 ***/ - else - { - if (fabs(y[j]) > 1.e6) sprintf(s1, "%10.2e", y[j]); - else sprintf(s1, "%10.*f", Field[j].Precision, y[j]); - } -/*** End of update ***/ - - strcat(s, s1); - } - } - - /* Note if link is a pump or valve */ - if ( (j = Link[i].Type) > PIPE) - { - strcat(s, " "); - strcat(s, LinkTxt[j]); - } - - /* Write results for link */ - writeline(s); - } - } - writeline(" "); -} - - -void writeheader(int type, int contin) -/* -**-------------------------------------------------------------- -** Input: type = table type -** contin = table continuation flag -** Output: none -** Purpose: writes column headings for output report tables -**-------------------------------------------------------------- -*/ -{ - char s[MAXLINE+1],s1[MAXLINE+1],s2[MAXLINE+1],s3[MAXLINE+1]; - int i,n; - - /* Move to next page if < 11 lines remain on current page. */ - if (Rptflag && LineNum+11 > (long)PageSize) - { - while (LineNum < (long)PageSize) writeline(" "); - } - writeline(" "); - - /* Hydraulic Status Table */ - if (type == STATHDR) - { - sprintf(s,FMT49); - if (contin) strcat(s,t_CONTINUED); - writeline(s); - fillstr(s,'-',70); - writeline(s); - } - - /* Energy Usage Table */ - if (type == ENERHDR) - { - if (Unitsflag == SI) strcpy(s1,t_perM3); - else strcpy(s1,t_perMGAL); - sprintf(s,FMT71); - if (contin) strcat(s,t_CONTINUED); - writeline(s); - fillstr(s,'-',63); - writeline(s); - sprintf(s,FMT72); - writeline(s); - sprintf(s,FMT73,s1); - writeline(s); - fillstr(s,'-',63); - writeline(s); - } - - /* Node Results Table */ - if (type == NODEHDR) - { - if (Tstatflag == RANGE) sprintf(s,FMT76,t_DIFFER); - else if (Tstatflag != SERIES) sprintf(s,FMT76,TstatTxt[Tstatflag]); - else if (Dur == 0) sprintf(s,FMT77); - else sprintf(s,FMT78,clocktime(Atime,Htime)); - if (contin) strcat(s,t_CONTINUED); - writeline(s); - n = 15; - sprintf(s2,"%15s",""); - strcpy(s,t_NODEID); - sprintf(s3,"%-15s",s); - for (i=ELEV; i MaxIter && relerr <= Hacc) - { - sprintf(Msg,WARN02,clocktime(Atime,Htime)); - if (Messageflag) writeline(Msg); - flag = 2; - } - - /* Check for negative pressures */ - for (i=1; i<=Njuncs; i++) - { - if (NodeHead[i] < Node[i].El && NodeDemand[i] > 0.0) - { - sprintf(Msg,WARN06,clocktime(Atime,Htime)); - if (Messageflag) writeline(Msg); - flag = 6; - break; - } - } - - /* Check for abnormal valve condition */ - for (i=1; i<=Nvalves; i++) - { - j = Valve[i].Link; - if (LinkStatus[j] >= XFCV) - { - sprintf(Msg,WARN05,LinkTxt[Link[j].Type],Link[j].ID, - StatTxt[LinkStatus[j]],clocktime(Atime,Htime)); - if (Messageflag) writeline(Msg); - flag = 5; - } - } - - /* Check for abnormal pump condition */ - for (i=1; i<=Npumps; i++) - { - j = Pump[i].Link; - s = LinkStatus[j]; //(2.00.11 - LR) - if (LinkStatus[j] >= OPEN) //(2.00.11 - LR) - { //(2.00.11 - LR) - if (Q[j] > LinkSetting[j]*Pump[i].Qmax) s = XFLOW; //(2.00.11 - LR) - if (Q[j] < 0.0) s = XHEAD; //(2.00.11 - LR) - } //(2.00.11 - LR) - if (s == XHEAD || s == XFLOW) //(2.00.11 - LR) - { - sprintf(Msg,WARN04,Link[j].ID,StatTxt[s], //(2.00.11 - LR) - clocktime(Atime,Htime)); - if (Messageflag) writeline(Msg); - flag = 4; - } - } - - /* Check if system is unbalanced */ - if (iter > MaxIter && relerr > Hacc) - { - sprintf(Msg,WARN01,clocktime(Atime,Htime)); - if (ExtraIter == -1) strcat(Msg,t_HALTED); - if (Messageflag) writeline(Msg); - flag = 1; - } - - /* Check for disconnected network */ - /* & update global warning flag */ - if (flag > 0) - { - disconnected(); - Warnflag = flag; - } - return(flag); -} /* End of writehydwarn */ - - -void writehyderr(int errnode) -/* -**----------------------------------------------------------- -** Input: none -** Output: none -** Purpose: outputs status & checks connectivity when -** network hydraulic equations cannot be solved. -**----------------------------------------------------------- -*/ -{ - sprintf(Msg,FMT62,clocktime(Atime,Htime),Node[errnode].ID); - if (Messageflag) writeline(Msg); - writehydstat(0,0); - disconnected(); -} /* End of writehyderr */ - - -int disconnected() -/* -**------------------------------------------------------------------- -** Input: None -** Output: Returns number of disconnected nodes -** Purpose: Tests current hydraulic solution to see if any closed -** links have caused the network to become disconnected. -**------------------------------------------------------------------- -*/ -{ - int i, j; - int count, mcount; - int errcode = 0; - int *nodelist; - char *marked; - - /* Allocate memory for node list & marked list */ - nodelist = (int *) calloc(Nnodes+1,sizeof(int)); - marked = (char *) calloc(Nnodes+1,sizeof(char)); - ERRCODE(MEMCHECK(nodelist)); - ERRCODE(MEMCHECK(marked)); - if (errcode) return(0); - - /* Place tanks on node list and marked list */ - for (i=1; i<=Ntanks; i++) - { - j = Njuncs + i; - nodelist[i] = j; - marked[j] = 1; - } - - /* Place junctions with negative demands on the lists */ - mcount = Ntanks; - for (i=1; i<=Njuncs; i++) - { - if (NodeDemand[i] < 0.0) - { - mcount++; - nodelist[mcount] = i; - marked[i] = 1; - } - } - - /* Mark all nodes that can be connected to tanks */ - /* and count number of nodes remaining unmarked. */ - marknodes(mcount,nodelist,marked); - j = 0; - count = 0; - for (i=1; i<=Njuncs; i++) - { - if (!marked[i] && NodeDemand[i] != 0.0) /* Skip if no demand */ - { - count++; - if (count <= MAXCOUNT && Messageflag) - { - sprintf(Msg,WARN03a,Node[i].ID,clocktime(Atime,Htime)); - writeline(Msg); - } - j = i; /* Last unmarked node */ - } - } - - /* Report number of unmarked nodes and find closed link */ - /* on path from node j back to a tank. */ - if (count > 0 && Messageflag) - { - if (count > MAXCOUNT) - { - sprintf(Msg, WARN03b, count-MAXCOUNT, clocktime(Atime,Htime)); - writeline(Msg); - } - getclosedlink(j,marked); - } - - /* Free allocated memory */ - free(nodelist); - free(marked); - return(count); -} /* End of disconnected() */ - - -void marknodes(int m, int *nodelist, char *marked) -/* -**---------------------------------------------------------------- -** Input: m = number of source nodes -** nodelist[] = list of nodes to be traced from -** marked[] = TRUE if node connected to source -** Output: None. -** Purpose: Marks all junction nodes connected to tanks. -**---------------------------------------------------------------- -*/ -{ - int i, j, k, n; - Padjlist alink; - - /* Scan each successive entry of node list */ - n = 1; - while (n <= m ) - { - - /* Scan all nodes connected to current node */ - i = nodelist[n]; - for (alink = Adjlist[i]; alink != NULL; alink = alink->next) - { - - /* Get indexes of connecting link and node */ - k = alink->link; - j = alink->node; - if (marked[j]) continue; - - /* Check if valve connection is in correct direction */ - switch (Link[k].Type) - { - case CV: - case PRV: - case PSV: if (j == Link[k].N1) continue; - } - - /* Mark connection node if link not closed */ - if (LinkStatus[k] > CLOSED) - { - marked[j] = 1; - m++; - nodelist[m] = j; - } - } - n++; - } -} /* End of marknodes() */ - - -void getclosedlink(int i, char *marked) -/* -**---------------------------------------------------------------- -** Input: i = junction index -** marked[] = marks nodes already examined -** Output: None. -** Purpose: Determines if a closed link connects to junction i. -**---------------------------------------------------------------- -*/ -{ - int j,k; - Padjlist alink; - marked[i] = 2; - for (alink = Adjlist[i]; alink != NULL; alink = alink->next) - { - k = alink->link; - j = alink->node; - if (marked[j] == 2) continue; - if (marked[j] == 1) - { - sprintf(Msg, WARN03c, Link[k].ID); - writeline(Msg); - return; - } - else getclosedlink(j,marked); - } -} - - -void writelimits(int j1, int j2) -/* -**-------------------------------------------------------------- -** Input: j1 = index of first output variable -** j2 = index of last output variable -** Output: none -** Purpose: writes reporting criteria to output report -**-------------------------------------------------------------- -*/ -{ - int j; - for (j=j1; j<=j2; j++) - { - if (Field[j].RptLim[LOW] < BIG) - { - sprintf(Msg,FMT47, - Field[j].Name,Field[j].RptLim[LOW],Field[j].Units); - writeline(Msg); - } - if (Field[j].RptLim[HI] > -BIG) - { - sprintf(Msg,FMT48, - Field[j].Name,Field[j].RptLim[HI],Field[j].Units); - writeline(Msg); - } - } -} /* End of writelimits */ - - -int checklimits(double *y, int j1, int j2) -/* -**-------------------------------------------------------------- -** Input: *y = array of output results -** j1 = index of first output variable -** j2 = index of last output variable -** Output: returns 1 if criteria met, 0 otherwise -** Purpose: checks if output reporting criteria is met -**-------------------------------------------------------------- -*/ -{ - int j; - for (j=j1; j<=j2; j++) - { - if (y[j] > Field[j].RptLim[LOW] - || y[j] < Field[j].RptLim[HI]) return(0); - } - return(1); -} /* End of checklim */ - - -void writetime(char *fmt) -/* -**---------------------------------------------------------------- -** Input: fmt = format string -** Output: none -** Purpose: writes starting/ending time of a run to report file -**---------------------------------------------------------------- -*/ -{ - time_t timer; - time(&timer); - sprintf(Msg, fmt, ctime(&timer)); - writeline(Msg); -} - - -char *clocktime(char *atime, long seconds) -/* -**-------------------------------------------------------------- -** Input: seconds = time in seconds -** Output: atime = time in hrs:min -** (returns pointer to atime) -** Purpose: converts time in seconds to hours:minutes format -**-------------------------------------------------------------- -*/ -{ -/*** Updated 6/24/02 ***/ - int h,m,s; - h = seconds/3600; - m = (seconds % 3600) / 60; - s = seconds - 3600*h - 60*m; - sprintf(atime, "%01d:%02d:%02d", h,m,s); - return(atime); -} /* End of clocktime */ - - -char *fillstr(char *s, char ch, int n) -/* -**--------------------------------------------------------- -** Fills n bytes of s to character ch. -** NOTE: does not check for overwriting s. -**--------------------------------------------------------- -*/ -{ - int i; - for (i=0; i<=n; i++) s[i] = ch; - s[n+1] = '\0'; - return(s); -} - - -int getnodetype(int i) -/* -**--------------------------------------------------------- -** Determines type of node with index i -** (junction = 0, reservoir = 1, tank = 2). -**--------------------------------------------------------- -*/ -{ - if (i <= Njuncs) return(0); - if (Tank[i-Njuncs].A == 0.0) return(1); - return(2); -} - -/********************* END OF REPORT.C ********************/ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: report.c + Description: procedures for writing formatted text to a report file + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 07/22/2019 + ****************************************************************************** +*/ + +#include +#include +#include + +#ifdef _WIN32 +#define snprintf _snprintf +#endif + +#include +#include + +#include "types.h" +#include "funcs.h" +#include "hash.h" +#include "text.h" + +#define MAXCOUNT 10 // Max. # of disconnected nodes listed + +// Defined in ENUMSTXT.H +extern char *NodeTxt[]; +extern char *LinkTxt[]; +extern char *StatTxt[]; +extern char *TstatTxt[]; +extern char *RptFormTxt[]; +extern char *DemandModelTxt[]; + +// Local functions +typedef REAL4 *Pfloat; +static void writenodetable(Project *, Pfloat *); +static void writelinktable(Project *, Pfloat *); +static void writeenergy(Project *); +static int writeresults(Project *); +static int disconnected(Project *); +static void marknodes(Project *, int, int *, char *); +static void getclosedlink(Project *, int, char *); +static void writelimits(Project *, int, int); +static int checklimits(Report *, double *, int, int); +static char *fillstr(char *, char, int); +static int getnodetype(Network *, int); + +int clearreport(Project *pr) +/* +**------------------------------------------------------ +** Input: none +** Output: returns error code +** Purpose: clears contents of a project's report file +**------------------------------------------------------ +*/ +{ + Report *rpt = &pr->report; + if (rpt->RptFile == NULL) return 0; + if (freopen(rpt->Rpt1Fname, "w", rpt->RptFile) == NULL) return 303; + writelogo(pr); + return 0; +} + +int copyreport(Project* pr, char *filename) +/* +**------------------------------------------------------ +** Input: filename = name of file to copy to +** Output: returns error code +** Purpose: copies contents of a project's report file +**------------------------------------------------------ +*/ +{ + FILE *tfile; + int c; + Report *rpt = &pr->report; + + // Check that project's report file exists + if (rpt->RptFile == NULL) return 0; + + // Open the new destination file + tfile = fopen(filename, "w"); + if (tfile == NULL) return 303; + + // Re-open project's report file in read mode + fclose(rpt->RptFile); + rpt->RptFile = fopen(rpt->Rpt1Fname, "r"); + + // Copy contents of project's report file + if (rpt->RptFile) + { + while ((c = fgetc(rpt->RptFile)) != EOF) fputc(c, tfile); + fclose(rpt->RptFile); + } + + // Close destination file + fclose(tfile); + + // Re-open project's report file in append mode + rpt->RptFile = fopen(rpt->Rpt1Fname, "a"); + if (rpt->RptFile == NULL) return 303; + return 0; +} + +int writereport(Project *pr) +/* +**------------------------------------------------------ +** Input: none +** Output: returns error code +** Purpose: writes formatted output report to file +**------------------------------------------------------ +*/ +{ + Report *rpt = &pr->report; + Parser *parser = &pr->parser; + + int tflag; + FILE *tfile; + int errcode = 0; + + // If no secondary report file specified then + // write formatted output to primary report file + rpt->Fprinterr = FALSE; + if (rpt->Rptflag && strlen(rpt->Rpt2Fname) == 0 && rpt->RptFile != NULL) + { + if (rpt->Energyflag) writeenergy(pr); + errcode = writeresults(pr); + } + + // A secondary report file was specified + else if (strlen(rpt->Rpt2Fname) > 0) + { + // If secondary report file has same name as either input + // or primary report file then use primary report file. + if (strcomp(rpt->Rpt2Fname, parser->InpFname) || + strcomp(rpt->Rpt2Fname, rpt->Rpt1Fname)) + { + if (rpt->Energyflag) writeenergy(pr); + errcode = writeresults(pr); + } + + // Otherwise write report to secondary report file + else + { + // Try to open file + tfile = rpt->RptFile; + tflag = rpt->Rptflag; + if ((rpt->RptFile = fopen(rpt->Rpt2Fname, "wt")) == NULL) + { + rpt->RptFile = tfile; + rpt->Rptflag = tflag; + errcode = 303; + } + + // Write full formatted report to file + else + { + rpt->Rptflag = 1; + writelogo(pr); + if (rpt->Summaryflag) writesummary(pr); + if (rpt->Energyflag) writeenergy(pr); + errcode = writeresults(pr); + fclose(rpt->RptFile); + rpt->RptFile = tfile; + rpt->Rptflag = tflag; + } + } + } + + // Special error handler for write-to-file error + if (rpt->Fprinterr) errmsg(pr, 309); + return errcode; +} + +void writelogo(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: writes program logo to report file. +**-------------------------------------------------------------- +*/ +{ + Report *rpt = &pr->report; + + int version; + int major; + int minor; + char s[80]; + time_t timer; // time_t structure & functions time() & + // ctime() are defined in time.h + + version = CODEVERSION; + major = version / 10000; + minor = (version % 10000) / 100; + + time(&timer); + strcpy(rpt->DateStamp, ctime(&timer)); + rpt->PageNum = 1; + rpt->LineNum = 2; + fprintf(rpt->RptFile, FMT18); + fprintf(rpt->RptFile, "%s", rpt->DateStamp); + writeline(pr, LOGO1); + writeline(pr, LOGO2); + writeline(pr, LOGO3); + writeline(pr, LOGO4); + sprintf(s, LOGO5, major, minor); + writeline(pr, s); + writeline(pr, LOGO6); + writeline(pr, ""); +} + +void writesummary(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: writes summary system information to report file +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Quality *qual = &pr->quality; + Report *rpt = &pr->report; + Parser *parser = &pr->parser; + Times *time = &pr->times; + + char s[MAXLINE + 1]; + int i; + int nres = 0; + + for (i = 0; i < 3; i++) + { + if (strlen(pr->Title[i]) > 0) + { + sprintf(s, "%-.70s", pr->Title[i]); + writeline(pr, s); + } + } + writeline(pr, " "); + sprintf(s, FMT19, parser->InpFname); + writeline(pr, s); + sprintf(s, FMT20, net->Njuncs); + writeline(pr, s); + for (i = 1; i <= net->Ntanks; i++) if (net->Tank[i].A == 0.0) nres++; + sprintf(s, FMT21a, nres); + writeline(pr, s); + sprintf(s, FMT21b, net->Ntanks - nres); + writeline(pr, s); + sprintf(s, FMT22, net->Npipes); + writeline(pr, s); + sprintf(s, FMT23, net->Npumps); + writeline(pr, s); + sprintf(s, FMT24, net->Nvalves); + writeline(pr, s); + sprintf(s, FMT25, RptFormTxt[hyd->Formflag]); + writeline(pr, s); + sprintf(s, FMT25a, DemandModelTxt[hyd->DemandModel]); + writeline(pr, s); + sprintf(s, FMT26, time->Hstep * pr->Ucf[TIME], rpt->Field[TIME].Units); + writeline(pr, s); + sprintf(s, FMT27, hyd->Hacc); + writeline(pr, s); + + if (hyd->HeadErrorLimit > 0.0) + { + sprintf(s, FMT27d, hyd->HeadErrorLimit*pr->Ucf[HEAD], rpt->Field[HEAD].Units); + writeline(pr, s); + } + if (hyd->FlowChangeLimit > 0.0) + { + sprintf(s, FMT27e, hyd->FlowChangeLimit*pr->Ucf[FLOW], rpt->Field[FLOW].Units); + writeline(pr, s); + } + + sprintf(s, FMT27a, hyd->CheckFreq); + writeline(pr, s); + sprintf(s, FMT27b, hyd->MaxCheck); + writeline(pr, s); + sprintf(s, FMT27c, hyd->DampLimit); + writeline(pr, s); + sprintf(s, FMT28, hyd->MaxIter); + writeline(pr, s); + + if (qual->Qualflag == NONE || time->Dur == 0.0) sprintf(s, FMT29); + else if (qual->Qualflag == CHEM) sprintf(s, FMT30, qual->ChemName); + else if (qual->Qualflag == TRACE) sprintf(s, FMT31, net->Node[qual->TraceNode].ID); + else if (qual->Qualflag == AGE) printf(s, FMT32); + writeline(pr, s); + if (qual->Qualflag != NONE && time->Dur > 0) + { + sprintf(s, FMT33, (float)time->Qstep / 60.0); + writeline(pr, s); + sprintf(s, FMT34, qual->Ctol * pr->Ucf[QUALITY], rpt->Field[QUALITY].Units); + writeline(pr, s); + } + + sprintf(s, FMT36, hyd->SpGrav); + writeline(pr, s); + sprintf(s, FMT37a, hyd->Viscos / VISCOS); + writeline(pr, s); + sprintf(s, FMT37b, qual->Diffus / DIFFUS); + writeline(pr, s); + sprintf(s, FMT38, hyd->Dmult); + writeline(pr, s); + sprintf(s, FMT39, time->Dur * pr->Ucf[TIME], rpt->Field[TIME].Units); + writeline(pr, s); + + if (rpt->Rptflag) + { + sprintf(s, FMT40); + writeline(pr, s); + if (rpt->Nodeflag == 0) writeline(pr, FMT41); + if (rpt->Nodeflag == 1) writeline(pr, FMT42); + if (rpt->Nodeflag == 2) writeline(pr, FMT43); + writelimits(pr, DEMAND, QUALITY); + if (rpt->Linkflag == 0) writeline(pr, FMT44); + if (rpt->Linkflag == 1) writeline(pr, FMT45); + if (rpt->Linkflag == 2) writeline(pr, FMT46); + writelimits(pr, DIAM, HEADLOSS); + } + writeline(pr, " "); +} + +void writehydstat(Project *pr, int iter, double relerr) +/* +**-------------------------------------------------------------- +** Input: iter = # iterations to find hydraulic solution +** relerr = convergence error in hydraulic solution +** Output: none +** Purpose: writes hydraulic status report for solution found +** at current time period to report file +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Report *rpt = &pr->report; + Times *time = &pr->times; + + int i, n; + double *NodeDemand; + char s1[MAXLINE + 1]; + char atime[13]; + StatusType newstat; + Stank *Tank = net->Tank; + Slink *Link = net->Link; + + // Display system status + strcpy(atime, clocktime(rpt->Atime, time->Htime)); + if (iter > 0) + { + if (relerr <= hyd->Hacc) sprintf(s1, FMT58, atime, iter); + else sprintf(s1, FMT59, atime, iter, relerr); + writeline(pr, s1); + if (hyd->DemandModel == PDA && hyd->DeficientNodes > 0) + { + if (hyd->DeficientNodes == 1) + sprintf(s1, FMT69a, hyd->DemandReduction); + else + sprintf(s1, FMT69b, hyd->DeficientNodes, hyd->DemandReduction); + writeline(pr, s1); + } + } + + // Display status changes for tanks: + // D[n] is net inflow to tank at node n; + // old tank status is stored in OldStatus[] + // at indexes Nlinks+1 to Nlinks+Ntanks. + for (i = 1; i <= net->Ntanks; i++) + { + n = net->Tank[i].Node; + NodeDemand = hyd->NodeDemand; + if (ABS(NodeDemand[n]) < 0.001) newstat = CLOSED; + else if (NodeDemand[n] < 0.0) newstat = EMPTYING; + else if (NodeDemand[n] > 0.0) + { + if (Tank[i].A > 0.0 && ABS(hyd->NodeHead[n] - Tank[i].Hmax) < 0.001) + newstat = OVERFLOWING; + else newstat = FILLING; + } + else newstat = hyd->OldStatus[net->Nlinks + i]; + if (newstat != hyd->OldStatus[net->Nlinks + i]) + { + if (Tank[i].A > 0.0) + { + snprintf(s1, MAXLINE, FMT50, atime, net->Node[n].ID, StatTxt[newstat], + (hyd->NodeHead[n] - net->Node[n].El) * pr->Ucf[HEAD], + rpt->Field[HEAD].Units); + } + else + { + snprintf(s1, MAXLINE, FMT51, atime, net->Node[n].ID, StatTxt[newstat]); + } + writeline(pr, s1); + hyd->OldStatus[net->Nlinks + i] = newstat; + } + } + + // Display status changes for links + for (i = 1; i <= net->Nlinks; i++) + { + if (hyd->LinkStatus[i] != hyd->OldStatus[i]) + { + if (time->Htime == 0) + { + sprintf(s1, FMT52, atime, LinkTxt[(int)net->Link[i].Type], + net->Link[i].ID, StatTxt[(int)hyd->LinkStatus[i]]); + } + else sprintf(s1, FMT53, atime, LinkTxt[Link[i].Type], net->Link[i].ID, + StatTxt[hyd->OldStatus[i]], StatTxt[hyd->LinkStatus[i]]); + writeline(pr, s1); + hyd->OldStatus[i] = hyd->LinkStatus[i]; + } + } + writeline(pr, " "); +} + +void writemassbalance(Project *pr) +/* +**------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: writes water quality mass balance ratio +** (Outflow + Final Storage) / Inflow + Initial Storage) +** to report file. +**------------------------------------------------------------- +*/ +{ + Quality *qual = &pr->quality; + + char s1[MAXMSG+1]; + char *units[] = {"", " (mg)", " (ug)", " (hrs)"}; + int kunits = 0; + + if (qual->Qualflag == TRACE) kunits = 1; + else if (qual->Qualflag == AGE) kunits = 3; + else + { + if (match(qual->ChemUnits, "mg")) kunits = 1; + else if (match(qual->ChemUnits, "ug")) kunits = 2; + } + + snprintf(s1, MAXMSG, "Water Quality Mass Balance%s", units[kunits]); + writeline(pr, s1); + snprintf(s1, MAXMSG, "================================"); + writeline(pr, s1); + snprintf(s1, MAXMSG, "Initial Mass: %12.5e", qual->MassBalance.initial); + writeline(pr, s1); + snprintf(s1, MAXMSG, "Mass Inflow: %12.5e", qual->MassBalance.inflow); + writeline(pr, s1); + snprintf(s1, MAXMSG, "Mass Outflow: %12.5e", qual->MassBalance.outflow); + writeline(pr, s1); + snprintf(s1, MAXMSG, "Mass Reacted: %12.5e", qual->MassBalance.reacted); + writeline(pr, s1); + snprintf(s1, MAXMSG, "Final Mass: %12.5e", qual->MassBalance.final); + writeline(pr, s1); + snprintf(s1, MAXMSG, "Mass Ratio: %-.5f", qual->MassBalance.ratio); + writeline(pr, s1); + snprintf(s1, MAXMSG, "================================\n"); + writeline(pr, s1); +} + +void writeenergy(Project *pr) +/* +**------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: writes energy usage report to report file +**------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Report *rpt = &pr->report; + + int j; + double csum; + char s[MAXLINE + 1]; + Spump *pump; + + if (net->Npumps == 0) return; + writeline(pr, " "); + writeheader(pr,ENERHDR, 0); + + csum = 0.0; + for (j = 1; j <= net->Npumps; j++) + { + pump = &net->Pump[j]; + csum += pump->Energy.TotalCost; + if (rpt->LineNum == (long)rpt->PageSize) writeheader(pr, ENERHDR, 1); + + sprintf(s, "%-8s %6.2f %6.2f %9.2f %9.2f %9.2f %9.2f", + net->Link[pump->Link].ID, pump->Energy.TimeOnLine, + pump->Energy.Efficiency, pump->Energy.KwHrsPerFlow, + pump->Energy.KwHrs, pump->Energy.MaxKwatts, + pump->Energy.TotalCost); + writeline(pr, s); + } + + fillstr(s, '-', 63); + writeline(pr, s); + sprintf(s, FMT74, "", hyd->Emax * hyd->Dcost); + writeline(pr, s); + sprintf(s, FMT75, "", csum + hyd->Emax * hyd->Dcost); + writeline(pr, s); + writeline(pr, " "); +} + +int writeresults(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: writes simulation results to report file +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Outfile *out = &pr->outfile; + Report *rpt = &pr->report; + Times *time = &pr->times; + + int j, m, n, + np, // Reporting period counter + nnv, // # node variables reported on + nlv; // # link variables reported on + int errcode = 0; + Pfloat *x; // Array of pointers to floats (i.e., a 2-D array) + FILE *outFile = out->OutFile; + + //----------------------------------------------------------- + // NOTE: The OutFile contains results for 4 node variables + // (demand, head, pressure, & quality) and 8 link + // variables (flow, velocity, headloss, quality, + // status, setting, reaction rate & friction factor) + // at each reporting time. + //----------------------------------------------------------- + + // Return if no nodes or links selected for reporting + // or if no node or link report variables enabled + if (!rpt->Nodeflag && !rpt->Linkflag) return errcode; + + nnv = 0; + for (j = ELEV; j <= QUALITY; j++) nnv += rpt->Field[j].Enabled; + nlv = 0; + for (j = LENGTH; j <= FRICTION; j++) nlv += rpt->Field[j].Enabled; + if (nnv == 0 && nlv == 0) return errcode; + + // Return if no output file + if (outFile == NULL) outFile = fopen(pr->outfile.OutFname, "rb"); + if (outFile == NULL) return 106; + + // Allocate memory for output variables: + // m = larger of # node variables & # link variables + // n = larger of # nodes & # links + m = MAX((QUALITY - DEMAND + 1), (FRICTION - FLOW + 1)); + n = MAX((net->Nnodes + 1), (net->Nlinks + 1)); + x = (Pfloat *)calloc(m, sizeof(Pfloat)); + ERRCODE(MEMCHECK(x)); + if (errcode) return errcode; + for (j = 0; j < m; j++) + { + x[j] = (REAL4 *)calloc(n, sizeof(REAL4)); + if (x[j] == NULL) errcode = 101; + } + if (!errcode) + { + // Re-position output file & initialize report time + fseek(outFile, out->OutOffset2, SEEK_SET); + time->Htime = time->Rstart; + + // For each reporting time: + for (np = 1; np <= rpt->Nperiods; np++) + { + // Read in node results & write node table + // (Remember to offset x[j] by 1 because array is zero-based) + for (j = DEMAND; j <= QUALITY; j++) + { + fread((x[j - DEMAND]) + 1, sizeof(REAL4), net->Nnodes, outFile); + } + if (nnv > 0 && rpt->Nodeflag > 0) writenodetable(pr, x); + + // Read in link results & write link table + for (j = FLOW; j <= FRICTION; j++) + { + fread((x[j - FLOW]) + 1, sizeof(REAL4), net->Nlinks, outFile); + } + if (nlv > 0 && rpt->Linkflag > 0) writelinktable(pr, x); + time->Htime += time->Rstep; + } + } + + // Free output file + if (outFile != NULL) + { + fclose(outFile); + outFile = NULL; + } + + // Free allocated memory + for (j = 0; j < m; j++) free(x[j]); + free(x); + return errcode; +} + +void writenodetable(Project *pr, Pfloat *x) +/* +**--------------------------------------------------------------- +** Input: x = pointer to node results for current time +** Output: none +** Purpose: writes node results for current time to report file +**--------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Report *rpt = &pr->report; + + int i, j; + char s[MAXLINE + 1], s1[16]; + double y[MAXVAR]; + Snode *node; + + // Write table header + writeheader(pr, NODEHDR, 0); + + // For each node: + for (i = 1; i <= net->Nnodes; i++) + { + // Place node's results for each variable in y + node = &net->Node[i]; + y[ELEV] = node->El * pr->Ucf[ELEV]; + for (j = DEMAND; j <= QUALITY; j++) y[j] = *((x[j - DEMAND]) + i); + + // Check if node gets reported on + if ((rpt->Nodeflag == 1 || node->Rpt) && + checklimits(rpt, y, ELEV, QUALITY)) + { + // Check if new page needed + if (rpt->LineNum == (long)rpt->PageSize) writeheader(pr, NODEHDR, 1); + + // Add node ID and each reported field to string s + sprintf(s, "%-15s", node->ID); + for (j = ELEV; j <= QUALITY; j++) + { + if (rpt->Field[j].Enabled == TRUE) + { + if (fabs(y[j]) > 1.e6) sprintf(s1, "%10.2e", y[j]); + else sprintf(s1, "%10.*f", rpt->Field[j].Precision, y[j]); + strcat(s, s1); + } + } + + // Note if node is a reservoir/tank + if (i > net->Njuncs) + { + strcat(s, " "); + strcat(s, NodeTxt[getnodetype(net, i)]); + } + + // Write results for node to report file + writeline(pr, s); + } + } + writeline(pr, " "); +} + +void writelinktable(Project *pr, Pfloat *x) +/* +**--------------------------------------------------------------- +** Input: x = pointer to link results for current time +** Output: none +** Purpose: writes link results for current time to report file +**--------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Report *rpt = &pr->report; + + int i, j, k; + char s[MAXLINE + 1], s1[16]; + double y[MAXVAR]; + double *Ucf = pr->Ucf; + Slink *Link = net->Link; + + // Write table header + writeheader(pr, LINKHDR, 0); + + // For each link: + for (i = 1; i <= net->Nlinks; i++) + { + // Place results for each link variable in y + y[LENGTH] = Link[i].Len * Ucf[LENGTH]; + y[DIAM] = Link[i].Diam * Ucf[DIAM]; + for (j = FLOW; j <= FRICTION; j++) y[j] = *((x[j - FLOW]) + i); + + // Check if link gets reported on + if ((rpt->Linkflag == 1 || Link[i].Rpt) && checklimits(rpt, y, DIAM, FRICTION)) + { + // Check if new page needed + if (rpt->LineNum == (long)rpt->PageSize) writeheader(pr, LINKHDR, 1); + + // Add link ID and each reported field to string s + sprintf(s, "%-15s", Link[i].ID); + for (j = LENGTH; j <= FRICTION; j++) + { + if (rpt->Field[j].Enabled == TRUE) + { + if (j == STATUS) + { + if (y[j] <= CLOSED) k = CLOSED; + else if (y[j] == ACTIVE) k = ACTIVE; + else k = OPEN; + sprintf(s1, "%10s", StatTxt[k]); + } + else + { + if (fabs(y[j]) > 1.e6) sprintf(s1, "%10.2e", y[j]); + else sprintf(s1, "%10.*f", rpt->Field[j].Precision, y[j]); + } + strcat(s, s1); + } + } + + // Note if link is a pump or valve + if ((j = Link[i].Type) > PIPE) + { + strcat(s, " "); + strcat(s, LinkTxt[j]); + } + + // Write results for link + writeline(pr, s); + } + } + writeline(pr, " "); +} + +void writeheader(Project *pr, int type, int contin) +/* +**-------------------------------------------------------------- +** Input: type = table type +** contin = table continuation flag +** Output: none +** Purpose: writes column headings for output report tables +**-------------------------------------------------------------- +*/ +{ + Report *rpt = &pr->report; + Quality *qual = &pr->quality; + Parser *parser = &pr->parser; + Times *time = &pr->times; + + char s[MAXLINE + 1], s1[MAXLINE + 1], s2[MAXLINE + 1], s3[MAXLINE + 1]; + int i, n; + + // Move to next page if < 11 lines remain on current page + if (rpt->Rptflag && rpt->LineNum + 11 > (long)rpt->PageSize) + { + while (rpt->LineNum < (long)rpt->PageSize) writeline(pr, " "); + } + writeline(pr, " "); + + // Hydraulic Status Table + if (type == STATHDR) + { + sprintf(s, FMT49); + if (contin) strcat(s, t_CONTINUED); + writeline(pr, s); + fillstr(s, '-', 70); + writeline(pr, s); + } + + // Energy Usage Table + if (type == ENERHDR) + { + if (parser->Unitsflag == SI) strcpy(s1, t_perM3); + else strcpy(s1, t_perMGAL); + sprintf(s, FMT71); + if (contin) strcat(s, t_CONTINUED); + writeline(pr, s); + fillstr(s, '-', 63); + writeline(pr, s); + sprintf(s, FMT72); + writeline(pr, s); + sprintf(s, FMT73, s1); + writeline(pr, s); + fillstr(s, '-', 63); + writeline(pr, s); + } + + // Node Results Table + if (type == NODEHDR) + { + if (rpt->Tstatflag == RANGE) sprintf(s, FMT76, t_DIFFER); + else if (rpt->Tstatflag != SERIES) + { + sprintf(s, FMT76, TstatTxt[rpt->Tstatflag]); + } + else if (time->Dur == 0) sprintf(s, FMT77); + else sprintf(s, FMT78, clocktime(rpt->Atime, time->Htime)); + if (contin) strcat(s, t_CONTINUED); + writeline(pr, s); + + n = 15; + sprintf(s2, "%15s", ""); + strcpy(s, t_NODEID); + sprintf(s3, "%-15s", s); + + for (i = ELEV; i < QUALITY; i++) + { + if (rpt->Field[i].Enabled == TRUE) + { + n += 10; + sprintf(s, "%10s", rpt->Field[i].Name); + strcat(s2, s); + sprintf(s, "%10s", rpt->Field[i].Units); + strcat(s3, s); + } + } + + if (rpt->Field[QUALITY].Enabled == TRUE) + { + n += 10; + sprintf(s, "%10s", qual->ChemName); + strcat(s2, s); + sprintf(s, "%10s", qual->ChemUnits); + strcat(s3, s); + } + fillstr(s1, '-', n); + writeline(pr, s1); + writeline(pr, s2); + writeline(pr, s3); + writeline(pr, s1); + } + + // Link Results Table + if (type == LINKHDR) + { + if (rpt->Tstatflag == RANGE) sprintf(s, FMT79, t_DIFFER); + else if (rpt->Tstatflag != SERIES) + { + sprintf(s, FMT79, TstatTxt[rpt->Tstatflag]); + } + else if (time->Dur == 0) sprintf(s, FMT80); + else sprintf(s, FMT81, clocktime(rpt->Atime, time->Htime)); + if (contin) strcat(s, t_CONTINUED); + writeline(pr, s); + + n = 15; + sprintf(s2, "%15s", ""); + strcpy(s, t_LINKID); + sprintf(s3, "%-15s", s); + for (i = LENGTH; i <= FRICTION; i++) + { + if (rpt->Field[i].Enabled == TRUE) + { + n += 10; + sprintf(s, "%10s", rpt->Field[i].Name); + strcat(s2, s); + sprintf(s, "%10s", rpt->Field[i].Units); + strcat(s3, s); + } + } + fillstr(s1, '-', n); + writeline(pr, s1); + writeline(pr, s2); + writeline(pr, s3); + writeline(pr, s1); + } +} + +void writeline(Project *pr, char *s) +/* +**-------------------------------------------------------------- +** Input: *s = text string +** Output: none +** Purpose: writes a line of output to report file +**-------------------------------------------------------------- +*/ +{ + Report *rpt = &pr->report; + + if (rpt->RptFile == NULL) return; + if (rpt->Rptflag) + { + if (rpt->LineNum == (long)rpt->PageSize) + { + rpt->PageNum++; + if (fprintf(rpt->RptFile, FMT82, (int)rpt->PageNum, pr->Title[0]) < 0) + { + rpt->Fprinterr = TRUE; + } + rpt->LineNum = 3; + } + } + if (fprintf(rpt->RptFile, "\n %s", s) < 0) rpt->Fprinterr = TRUE; + rpt->LineNum++; +} + +void writerelerr(Project *pr, int iter, double relerr) +/* +**----------------------------------------------------------------- +** Input: iter = current iteration of hydraulic solution +** relerr = current convergence error +** Output: none +** Purpose: writes out convergence status of hydraulic solution +**----------------------------------------------------------------- +*/ +{ + Report *rpt = &pr->report; + Times *time = &pr->times; + + if (iter == 0) + { + sprintf(pr->Msg, FMT64, clocktime(rpt->Atime, time->Htime)); + writeline(pr, pr->Msg); + } + else + { + sprintf(pr->Msg, FMT65, iter, relerr); + writeline(pr, pr->Msg); + } +} + +void writestatchange(Project *pr, int k, char s1, char s2) +/* +**-------------------------------------------------------------- +** Input: k = link index +** s1 = old link status +** s2 = new link status +** Output: none +** Purpose: writes change in link status to output report +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + int j1, j2; + double setting; + double *Ucf = pr->Ucf; + double *LinkSetting = hyd->LinkSetting; + Slink *Link = net->Link; + + // We have a pump/valve setting change instead of a status change + if (s1 == s2) + { + setting = LinkSetting[k]; + switch (Link[k].Type) + { + case PRV: + case PSV: + case PBV: + setting *= Ucf[PRESSURE]; + break; + case FCV: + setting *= Ucf[FLOW]; + break; + default: + break; + } + sprintf(pr->Msg, FMT56, LinkTxt[Link[k].Type], Link[k].ID, setting); + writeline(pr, pr->Msg); + return; + } + + // We have a status change - write the old & new status types + if (s1 == ACTIVE) j1 = ACTIVE; + else if (s1 <= CLOSED) j1 = CLOSED; + else j1 = OPEN; + if (s2 == ACTIVE) j2 = ACTIVE; + else if (s2 <= CLOSED) j2 = CLOSED; + else j2 = OPEN; + if (j1 != j2) + { + sprintf(pr->Msg, FMT57, LinkTxt[Link[k].Type], Link[k].ID, StatTxt[j1], + StatTxt[j2]); + writeline(pr, pr->Msg); + } +} + +void writecontrolaction(Project *pr, int k, int i) +/* +---------------------------------------------------------------- +** Input: k = link index +** i = control index +** Output: none +** Purpose: writes control action taken to status report +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Report *rpt = &pr->report; + Times *time = &pr->times; + + int n; + Snode *Node = net->Node; + Slink *Link = net->Link; + Scontrol *Control = net->Control; + + switch (Control[i].Type) + { + case LOWLEVEL: + case HILEVEL: + n = Control[i].Node; + sprintf(pr->Msg, FMT54, clocktime(rpt->Atime, time->Htime), + LinkTxt[Link[k].Type], Link[k].ID, + NodeTxt[getnodetype(net, n)], Node[n].ID); + break; + + case TIMER: + case TIMEOFDAY: + sprintf(pr->Msg, FMT55, clocktime(rpt->Atime, time->Htime), + LinkTxt[Link[k].Type], Link[k].ID); + break; + default: + return; + } + writeline(pr, pr->Msg); +} + +void writeruleaction(Project *pr, int k, char *ruleID) +/* +**-------------------------------------------------------------- +** Input: k = link index +** *ruleID = rule ID +** Output: none +** Purpose: writes rule action taken to status report +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Report *rpt = &pr->report; + Times *time = &pr->times; + + Slink *Link = net->Link; + + sprintf(pr->Msg, FMT63, clocktime(rpt->Atime, time->Htime), + LinkTxt[Link[k].Type], Link[k].ID, ruleID); + writeline(pr, pr->Msg); +} + +int writehydwarn(Project *pr, int iter, double relerr) +/* +**-------------------------------------------------------------- +** Input: iter = # iterations to find hydraulic solution +** Output: warning flag code +** Purpose: writes hydraulic warning message to report file +** +** Note: Warning conditions checked in following order: +** 1. System balanced but unstable +** 2. Negative pressures +** 3. FCV cannot supply flow or PRV/PSV cannot maintain pressure +** 4. Pump out of range +** 5. Network disconnected +** 6. System unbalanced +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Report *rpt = &pr->report; + Times *time = &pr->times; + + int i, j; + char flag = 0; + int s; + Snode *node; + Slink *link; + Spump *pump; + + // Check if system unstable + if (iter > hyd->MaxIter && relerr <= hyd->Hacc) + { + sprintf(pr->Msg, WARN02, clocktime(rpt->Atime, time->Htime)); + if (rpt->Messageflag) writeline(pr, pr->Msg); + flag = 2; + } + + // Check for pressure deficient nodes + if (hyd->DemandModel == DDA) + { + hyd->DeficientNodes = 0; + for (i = 1; i <= net->Njuncs; i++) + { + node = &net->Node[i]; + if (hyd->NodeHead[i] < node->El && hyd->NodeDemand[i] > 0.0) + hyd->DeficientNodes++; + } + if (hyd->DeficientNodes > 0) + { + if (rpt->Messageflag) + { + sprintf(pr->Msg, WARN06, clocktime(rpt->Atime, time->Htime)); + writeline(pr, pr->Msg); + } + flag = 6; + } + } + + // Check for abnormal valve condition + for (i = 1; i <= net->Nvalves; i++) + { + j = net->Valve[i].Link; + link = &net->Link[j]; + if (hyd->LinkStatus[j] >= XFCV) + { + if (rpt->Messageflag) + { + sprintf(pr->Msg, WARN05, LinkTxt[link->Type], link->ID, + StatTxt[hyd->LinkStatus[j]], + clocktime(rpt->Atime, time->Htime)); + writeline(pr, pr->Msg); + } + flag = 5; + } + } + + // Check for abnormal pump condition + for (i = 1; i <= net->Npumps; i++) + { + pump = &net->Pump[i]; + j = pump->Link; + s = hyd->LinkStatus[j]; + if (hyd->LinkStatus[j] >= OPEN) + { + if (hyd->LinkFlow[j] > hyd->LinkSetting[j] * pump->Qmax) s = XFLOW; + if (hyd->LinkFlow[j] < 0.0) s = XHEAD; + } + if (s == XHEAD || s == XFLOW) + { + if (rpt->Messageflag) + { + sprintf(pr->Msg, WARN04, net->Link[j].ID, StatTxt[s], + clocktime(rpt->Atime, time->Htime)); + writeline(pr, pr->Msg); + } + flag = 4; + } + } + + // Check if system is unbalanced + if (iter > hyd->MaxIter && relerr > hyd->Hacc) + { + if (rpt->Messageflag) + { + sprintf(pr->Msg, WARN01, clocktime(rpt->Atime, time->Htime)); + if (hyd->ExtraIter == -1) strcat(pr->Msg, t_HALTED); + writeline(pr, pr->Msg); + } + flag = 1; + } + + // Check for disconnected network & update project's warning flag + if (flag > 0) + { + disconnected(pr); + pr->Warnflag = flag; + if (rpt->Messageflag) writeline(pr, " "); + } + return flag; +} + +void writehyderr(Project *pr, int errnode) +/* +**----------------------------------------------------------- +** Input: none +** Output: none +** Purpose: outputs status & checks connectivity when +** network hydraulic equations cannot be solved. +**----------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Report *rpt = &pr->report; + Times *time = &pr->times; + + Snode *Node = net->Node; + + if (rpt->Messageflag) + { + sprintf(pr->Msg, FMT62, clocktime(rpt->Atime, time->Htime), + Node[errnode].ID); + writeline(pr, pr->Msg); + } + writehydstat(pr, 0, 0); + disconnected(pr); +} + +int disconnected(Project *pr) +/* +**------------------------------------------------------------------- +** Input: None +** Output: Returns number of disconnected nodes +** Purpose: Tests current hydraulic solution to see if any closed +** links have caused the network to become disconnected. +**------------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Report *rpt = &pr->report; + Times *time = &pr->times; + + int i, j; + int count, mcount; + int errcode = 0; + int *nodelist; + char *marked; + Snode *node; + + // Allocate memory for node list & marked list + nodelist = (int *)calloc(net->Nnodes + 1, sizeof(int)); + marked = (char *)calloc(net->Nnodes + 1, sizeof(char)); + ERRCODE(MEMCHECK(nodelist)); + ERRCODE(MEMCHECK(marked)); + + // If allocation fails return with 0 nodes disconnected + if (errcode) + { + free(nodelist); + free(marked); + return (0); + } + + // Place tanks on node list and marked list + for (i = 1; i <= net->Ntanks; i++) + { + j = net->Njuncs + i; + nodelist[i] = j; + marked[j] = 1; + } + + // Place junctions with negative demands on the lists + mcount = net->Ntanks; + for (i = 1; i <= net->Njuncs; i++) + { + if (hyd->NodeDemand[i] < 0.0) + { + mcount++; + nodelist[mcount] = i; + marked[i] = 1; + } + } + + // Mark all nodes that can be connected to tanks + // and count number of nodes remaining unmarked + marknodes(pr, mcount, nodelist, marked); + j = 0; + count = 0; + for (i = 1; i <= net->Njuncs; i++) + { + node = &net->Node[i]; + if (!marked[i] && hyd->NodeDemand[i] != 0.0) + { + count++; + if (count <= MAXCOUNT && rpt->Messageflag) + { + sprintf(pr->Msg, WARN03a, node->ID, + clocktime(rpt->Atime, time->Htime)); + writeline(pr, pr->Msg); + } + j = i; // Last unmarked node + } + } + + // Report number of unmarked nodes and find closed link + // on path from node j back to a tank + if (count > 0 && rpt->Messageflag) + { + if (count > MAXCOUNT) + { + sprintf(pr->Msg, WARN03b, count - MAXCOUNT, + clocktime(rpt->Atime, time->Htime)); + writeline(pr, pr->Msg); + } + getclosedlink(pr, j, marked); + } + + // Free allocated memory + free(nodelist); + free(marked); + return count; +} + +void marknodes(Project *pr, int m, int *nodelist, char *marked) +/* +**---------------------------------------------------------------- +** Input: m = number of source nodes +** nodelist[] = list of nodes to be traced from +** marked[] = TRUE if node connected to source +** Output: None. +** Purpose: Marks all junction nodes connected to tanks. +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + int i, j, k, n; + Padjlist alink; + + // Scan each successive entry of node list + n = 1; + while (n <= m) + { + // Scan all nodes connected to current node + i = nodelist[n]; + for (alink = net->Adjlist[i]; alink != NULL; alink = alink->next) + { + // Get indexes of connecting link and node + k = alink->link; + j = alink->node; + if (marked[j]) continue; + + // Check if valve connection is in correct direction + switch (net->Link[k].Type) + { + case CVPIPE: + case PRV: + case PSV: + if (j == net->Link[k].N1) continue; + break; + default: + break; + } + + // Mark connection node if link not closed + if (hyd->LinkStatus[k] > CLOSED) + { + marked[j] = 1; + m++; + nodelist[m] = j; + } + } + n++; + } +} + +void getclosedlink(Project *pr, int i, char *marked) +/* +**---------------------------------------------------------------- +** Input: i = junction index +** marked[] = marks nodes already examined +** Output: None. +** Purpose: Determines if a closed link connects to junction i. +**---------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + + int j, k; + Padjlist alink; + + marked[i] = 2; + for (alink = net->Adjlist[i]; alink != NULL; alink = alink->next) + { + k = alink->link; + j = alink->node; + if (marked[j] == 2) continue; + if (marked[j] == 1) + { + sprintf(pr->Msg, WARN03c, net->Link[k].ID); + writeline(pr, pr->Msg); + return; + } + else getclosedlink(pr, j, marked); + } +} + +void writelimits(Project *pr, int j1, int j2) +/* +**-------------------------------------------------------------- +** Input: j1 = index of first output variable +** j2 = index of last output variable +** Output: none +** Purpose: writes reporting criteria to output report +**-------------------------------------------------------------- +*/ +{ + Report *rpt = &pr->report; + int j; + + for (j = j1; j <= j2; j++) + { + if (rpt->Field[j].RptLim[LOW] < BIG) + { + sprintf(pr->Msg, FMT47, rpt->Field[j].Name, + rpt->Field[j].RptLim[LOW], + rpt->Field[j].Units); + writeline(pr, pr->Msg); + } + if (rpt->Field[j].RptLim[HI] > -BIG) + { + sprintf(pr->Msg, FMT48, rpt->Field[j].Name, + rpt->Field[j].RptLim[HI], + rpt->Field[j].Units); + writeline(pr, pr->Msg); + } + } +} + +int checklimits(Report *rpt, double *y, int j1, int j2) +/* +**-------------------------------------------------------------- +** Input: *y = array of output results +** j1 = index of first output variable +** j2 = index of last output variable +** Output: returns 1 if criteria met, 0 otherwise +** Purpose: checks if output reporting criteria is met +**-------------------------------------------------------------- +*/ +{ + int j; + for (j = j1; j <= j2; j++) + { + if (y[j] > rpt->Field[j].RptLim[LOW] || + y[j] < rpt->Field[j].RptLim[HI] + ) return 0; + } + return 1; +} + +void writetime(Project *pr, char *fmt) +/* +**---------------------------------------------------------------- +** Input: fmt = format string +** Output: none +** Purpose: writes starting/ending time of a run to report file +**---------------------------------------------------------------- +*/ +{ + time_t timer; + time(&timer); + sprintf(pr->Msg, fmt, ctime(&timer)); + writeline(pr, pr->Msg); +} + +char *clocktime(char *atime, long seconds) +/* +**-------------------------------------------------------------- +** Input: seconds = time in seconds +** Output: atime = time in hrs:min +** (returns pointer to atime) +** Purpose: converts time in seconds to hours:minutes format +**-------------------------------------------------------------- +*/ +{ + long h, m, s; + h = seconds / 3600; + m = seconds % 3600 / 60; + s = seconds - 3600 * h - 60 * m; + sprintf(atime, "%01d:%02d:%02d", (int)h, (int)m, (int)s); + return atime; +} + +char *fillstr(char *s, char ch, int n) +/* +**--------------------------------------------------------- +** Fills n bytes of s to character ch. +** NOTE: does not check for overwriting s. +**--------------------------------------------------------- +*/ +{ + int i; + for (i = 0; i <= n; i++) s[i] = ch; + s[n + 1] = '\0'; + return (s); +} + +int getnodetype(Network *net, int i) +/* +**--------------------------------------------------------- +** Determines type of node with index i +** (junction = 0, reservoir = 1, tank = 2). +**--------------------------------------------------------- +*/ +{ + if (i <= net->Njuncs) return 0; + if (net->Tank[i - net->Njuncs].A == 0.0) return 1; + return 2; +} diff --git a/src/rules.c b/src/rules.c old mode 100755 new mode 100644 index 7ad038f..68b8de6 --- a/src/rules.c +++ b/src/rules.c @@ -1,971 +1,1362 @@ -/* -********************************************************************** - -RULES.C -- Rule processor module for EPANET - -VERSION: 2.00 -DATE: 5/8/00 - 9/7/00 - 10/25/00 - 3/1/01 - 8/15/07 (2.00.11) -AUTHOR: L. Rossman - US EPA - NRMRL - - The entry points for this module are: - initrules() -- called from ENopen() in EPANET.C - addrule() -- called from netsize() in INPUT2.C - allocrules() -- called from allocdata() in EPANET.C - ruledata() -- called from newline() in INPUT2.C - freerules() -- called from freedata() in EPANET.C - checkrules() -- called from ruletimestep() in HYDRAUL.C - -********************************************************************** -*/ -#include -#include -#ifndef __APPLE__ -#include -#else -#include -#endif -#include "hash.h" -#include "text.h" -#include "types.h" -#include "funcs.h" -#define EXTERN extern -#include "vars.h" - -struct Premise /* Rule Premise Clause */ -{ - int logop; /* Logical operator */ - int object; /* Node or link */ - int index; /* Object's index */ - int variable; /* Pressure, flow, etc. */ - int relop; /* Relational operator */ - int status; /* Variable's status */ - double value; /* Variable's value */ - struct Premise *next; -}; - -struct Action /* Rule Action Clause */ -{ - int link; /* Link index */ - int status; /* Link's status */ - double setting; /* Link's setting */ - struct Action *next; -}; - -struct aRule /* Control Rule Structure */ -{ - char label[MAXID+1]; /* Rule character label */ - double priority; /* Priority level */ - struct Premise *Pchain; /* Linked list of premises */ - struct Action *Tchain; /* Linked list of actions if true */ - struct Action *Fchain; /* Linked list of actions if false */ - struct aRule *next; -}; - -struct ActItem /* Action list item */ -{ - int ruleindex; /* Index of rule action belongs to */ - struct Action *action; /* An action structure */ - struct ActItem *next; -}; - -struct aRule *Rule; /* Array of rules */ -struct ActItem *ActList; /* Linked list of action items */ -int RuleState; /* State of rule interpreter */ -long Time1; /* Start of rule evaluation time interval (sec) */ -struct Premise *Plast; /* Previous premise clause */ - -enum Rulewords {r_RULE,r_IF,r_AND,r_OR,r_THEN,r_ELSE,r_PRIORITY,r_ERROR}; -char *Ruleword[] = {w_RULE,w_IF,w_AND,w_OR,w_THEN,w_ELSE,w_PRIORITY,NULL}; - -enum Varwords {r_DEMAND, r_HEAD, r_GRADE, r_LEVEL, r_PRESSURE, - r_FLOW, r_STATUS, r_SETTING, r_POWER, r_TIME, - r_CLOCKTIME, r_FILLTIME, r_DRAINTIME}; -char *Varword[] = {w_DEMAND, w_HEAD, w_GRADE, w_LEVEL, w_PRESSURE, - w_FLOW, w_STATUS, w_SETTING, w_POWER,w_TIME, - w_CLOCKTIME,w_FILLTIME,w_DRAINTIME, NULL}; - -enum Objects {r_JUNC,r_RESERV,r_TANK,r_PIPE,r_PUMP,r_VALVE, - r_NODE,r_LINK,r_SYSTEM}; -char *Object[] = {w_JUNC,w_RESERV,w_TANK,w_PIPE,w_PUMP,w_VALVE, - w_NODE,w_LINK,w_SYSTEM,NULL}; - -/* NOTE: place "<=" & ">=" before "<" & ">" so that findmatch() works correctly. */ -enum Operators { EQ, NE, LE, GE, LT, GT, IS, NOT, BELOW, ABOVE}; -char *Operator[] = {"=","<>","<=",">=","<",">",w_IS,w_NOT,w_BELOW,w_ABOVE,NULL}; - -enum Values {IS_NUMBER,IS_OPEN,IS_CLOSED,IS_ACTIVE}; -char *Value[] = {"XXXX", w_OPEN, w_CLOSED, w_ACTIVE,NULL}; - -/* External variables declared in INPUT2.C */ -extern char *Tok[MAXTOKS]; -extern int Ntokens; - -/* -** Local function prototypes are defined here and not in FUNCS.H -** because some of them utilize the Premise and Action structures -** defined locally in this module. -*/ -void newrule(void); -int newpremise(int); -int newaction(void); -int newpriority(void); -int evalpremises(int); -void updateactlist(int, struct Action *); -int checkaction(int, struct Action *); -int checkpremise(struct Premise *); -int checktime(struct Premise *); -int checkstatus(struct Premise *); -int checkvalue(struct Premise *); -int takeactions(void); -void clearactlist(void); -void clearrules(void); -void ruleerrmsg(int); - - -void initrules() -/* -**-------------------------------------------------------------- -** Initializes rule base. -** Called by ENopen() in EPANET.C module -**-------------------------------------------------------------- -*/ -{ - RuleState = r_PRIORITY; - Rule = NULL; -} - - -void addrule(char *tok) -/* -**-------------------------------------------------------------- -** Updates rule count if RULE keyword found in line of input. -** Called by netsize() in INPUT2.C module. -**-------------------------------------------------------------- -*/ -{ - if (match(tok,w_RULE)) MaxRules++; -} - - -int allocrules() -/* -**-------------------------------------------------------------- -** Allocates memory for rule-based controls. -** Called by allocdata() in EPANET.C module. -**-------------------------------------------------------------- -*/ -{ - Rule = (struct aRule *) calloc(MaxRules+1,sizeof(struct aRule)); - if (Rule == NULL) return(101); - else return(0); -} - - -void freerules() -/* -**-------------------------------------------------------------- -** Frees memory used for rule-based controls. -** Called by freedata() in EPANET.C module. -**-------------------------------------------------------------- -*/ -{ - clearrules(); - free(Rule); -} - - -int checkrules(long dt) -/* -**----------------------------------------------------- -** Checks which rules should fire at current time. -** Called by ruletimestep() in HYDRAUL.C. -**----------------------------------------------------- -*/ -{ - int i, - r; /* Number of actions actually taken */ - - /* Start of rule evaluation time interval */ - Time1 = Htime - dt + 1; - - /* Iterate through each rule */ - ActList = NULL; - r = 0; - for (i=1; i<=Nrules; i++) - { - /* If premises true, add THEN clauses to action list. */ - if (evalpremises(i) == TRUE) updateactlist(i,Rule[i].Tchain); - - /* If premises false, add ELSE actions to list. */ - else - { - if (Rule[i].Fchain != NULL) updateactlist(i,Rule[i].Fchain); - } - } - - /* Execute actions then clear list. */ - if (ActList != NULL) r = takeactions(); - clearactlist(); - return(r); -} - - -int ruledata() -/* -**-------------------------------------------------------------- -** Parses a line from [RULES] section of input. -** Called by newline() in INPUT2.C module. -** Tok[] is global array of tokens parsed from input line. -**-------------------------------------------------------------- -*/ -{ - int key, /* Keyword code */ - err; - - /* Exit if current rule has an error */ - if (RuleState == r_ERROR) return(0); - - /* Find the key word that begins the rule statement */ - err = 0; - key = findmatch(Tok[0],Ruleword); - switch (key) - { - case -1: err = 201; /* Unrecognized keyword */ - break; - case r_RULE: Nrules++; - newrule(); - RuleState = r_RULE; - break; - case r_IF: if (RuleState != r_RULE) - { - err = 221; /* Mis-placed IF clause */ - break; - } - RuleState = r_IF; - err = newpremise(r_AND); - break; - case r_AND: if (RuleState == r_IF) err = newpremise(r_AND); - else if (RuleState == r_THEN || RuleState == r_ELSE) - err = newaction(); - else err = 221; - break; - case r_OR: if (RuleState == r_IF) err = newpremise(r_OR); - else err = 221; - break; - case r_THEN: if (RuleState != r_IF) - { - err = 221; /* Mis-placed THEN clause */ - break; - } - RuleState = r_THEN; - err = newaction(); - break; - case r_ELSE: if (RuleState != r_THEN) - { - err = 221; /* Mis-placed ELSE clause */ - break; - } - RuleState = r_ELSE; - err = newaction(); - break; - case r_PRIORITY: if (RuleState != r_THEN && RuleState != r_ELSE) - { - err = 221; - break; - } - RuleState = r_PRIORITY; - err = newpriority(); - break; - default: err = 201; - } - - /* Set RuleState to r_ERROR if errors found */ - if (err) - { - RuleState = r_ERROR; - ruleerrmsg(err); - err = 200; - } - return(err); -} - - -void clearactlist() -/* -**---------------------------------------------------------- -** Clears memory used for action list -**---------------------------------------------------------- -*/ -{ - struct ActItem *a; - struct ActItem *anext; - a = ActList; - while (a != NULL) - { - anext = a->next; - free(a); - a = anext; - } -} - - -void clearrules() -/* -**----------------------------------------------------------- -** Clears memory used for premises & actions for all rules -**----------------------------------------------------------- -*/ -{ - struct Premise *p; - struct Premise *pnext; - struct Action *a; - struct Action *anext; - int i; - for (i=1; i<=Nrules; i++) - { - p = Rule[i].Pchain; - while (p != NULL) - { - pnext = p->next; - free(p); - p = pnext; - } - a = Rule[i].Tchain; - while (a != NULL) - { - anext = a->next; - free(a); - a = anext; - } - a = Rule[i].Fchain; - while (a != NULL) - { - anext = a->next; - free(a); - a = anext; - } - } -} - - -void newrule() -/* -**---------------------------------------------------------- -** Adds new rule to rule base -**---------------------------------------------------------- -*/ -{ - strncpy(Rule[Nrules].label, Tok[1], MAXID); - Rule[Nrules].Pchain = NULL; - Rule[Nrules].Tchain = NULL; - Rule[Nrules].Fchain = NULL; - Rule[Nrules].priority = 0.0; - Plast = NULL; -} - - -int newpremise(int logop) -/* -**-------------------------------------------------------------------- -** Adds new premise to current rule. -** Formats are: -** IF/AND/OR -** IF/AND/OR SYSTEM (units) -** -** Calls findmatch() and hour() in INPUT2.C. -** Calls findnode() and findlink() in EPANET.C. -**--------------------------------------------------------------------- -*/ -{ - int i,j,k,m,r,s,v; - double x; - struct Premise *p; - - /* Check for correct number of tokens */ - if (Ntokens != 5 && Ntokens != 6) return(201); - - /* Find network object & id if present */ - i = findmatch(Tok[1],Object); - if (i == r_SYSTEM) - { - j = 0; - v = findmatch(Tok[2],Varword); - if (v != r_DEMAND && v != r_TIME && v != r_CLOCKTIME) return(201); - } - else - { - v = findmatch(Tok[3],Varword); - if (v < 0) return(201); - switch (i) - { - case r_NODE: - case r_JUNC: - case r_RESERV: - case r_TANK: k = r_NODE; break; - case r_LINK: - case r_PIPE: - case r_PUMP: - case r_VALVE: k = r_LINK; break; - default: return(201); - } - i = k; - if (i == r_NODE) - { - j = findnode(Tok[2]); - if (j == 0) return(203); - switch (v) - { - case r_DEMAND: - case r_HEAD: - case r_GRADE: - case r_LEVEL: - case r_PRESSURE: break; - -/*** Updated 9/7/00 ***/ - case r_FILLTIME: - case r_DRAINTIME: if (j <= Njuncs) return(201); break; - - default: return(201); - } - } - else - { - j = findlink(Tok[2]); - if (j == 0) return(204); - switch (v) - { - case r_FLOW: - case r_STATUS: - case r_SETTING: break; - default: return(201); - } - } - } - - /* Parse relational operator (r) and check for synonyms */ - if (i == r_SYSTEM) m = 3; - else m = 4; - k = findmatch(Tok[m],Operator); - if (k < 0) return(201); - switch(k) - { - case IS: r = EQ; break; - case NOT: r = NE; break; - case BELOW: r = LT; break; - case ABOVE: r = GT; break; - default: r = k; - } - - /* Parse for status (s) or numerical value (x) */ - s = 0; - x = MISSING; - if (v == r_TIME || v == r_CLOCKTIME) - { - if (Ntokens == 6) - x = hour(Tok[4],Tok[5])*3600.; - else - x = hour(Tok[4],"")*3600.; - if (x < 0.0) return(202); - } - else if ((k = findmatch(Tok[Ntokens-1],Value)) > IS_NUMBER) s = k; - else - { - if (!getfloat(Tok[Ntokens-1],&x)) return(202); - if (v == r_FILLTIME || v == r_DRAINTIME) x = x*3600.0; //(2.00.11 - LR) - } - - - - /* Create new premise structure */ - p = (struct Premise *) malloc(sizeof(struct Premise)); - if (p == NULL) return(101); - p->object = i; - p->index = j; - p->variable = v; - p->relop = r; - p->logop = logop; - p->status = s; - p->value = x; - - /* Add premise to current rule's premise list */ - p->next = NULL; - if (Plast == NULL) Rule[Nrules].Pchain = p; - else Plast->next = p; - Plast = p; - return(0); -} - - -int newaction() -/* -**---------------------------------------------------------- -** Adds new action to current rule. -** Format is: -** THEN/ELSE/AND LINK IS -** -** Calls findlink() from EPANET.C. -** Calls getfloat() and findmatch() from INPUT2.C. -**---------------------------------------------------------- -*/ -{ - int j,k,s; - double x; - struct Action *a; - - /* Check for correct number of tokens */ - if (Ntokens != 6) return(201); - - /* Check that link exists */ - j = findlink(Tok[2]); - if (j == 0) return(204); - -/*** Updated 9/7/00 ***/ - /* Cannot control a CV */ - if (Link[j].Type == CV) return(207); - - /* Find value for status or setting */ - s = -1; - x = MISSING; - if ((k = findmatch(Tok[5],Value)) > IS_NUMBER) s = k; - else - { - if (!getfloat(Tok[5],&x)) return(202); - if (x < 0.0) return(202); - } - -/*** Updated 9/7/00 ***/ - /* Cannot change setting for a GPV ***/ - if (x != MISSING && Link[j].Type == GPV) return(202); - -/*** Updated 3/1/01 ***/ - /* Set status for pipe in case setting was specified */ - if (x != MISSING && Link[j].Type == PIPE) - { - if (x == 0.0) s = IS_CLOSED; - else s = IS_OPEN; - x = MISSING; - } - - /* Create a new action structure */ - a = (struct Action *) malloc(sizeof(struct Action)); - if (a == NULL) return(101); - a->link = j; - a->status = s; - a->setting = x; - - /* Add action to current rule's action list */ - if (RuleState == r_THEN) - { - a->next = Rule[Nrules].Tchain; - Rule[Nrules].Tchain = a; - } - else - { - a->next = Rule[Nrules].Fchain; - Rule[Nrules].Fchain = a; - } - return(0); -} - - -int newpriority() -/* -**--------------------------------------------------- -** Adds priority rating to current rule -**--------------------------------------------------- -*/ -{ - double x; - if (!getfloat(Tok[1],&x)) return(202); - Rule[Nrules].priority = x; - return(0); -} - - -int evalpremises(int i) -/* -**---------------------------------------------------------- -** Checks if premises to rule i are true -**---------------------------------------------------------- -*/ -{ - int result; - struct Premise *p; - - result = TRUE; - p = Rule[i].Pchain; - while (p != NULL) - { - if (p->logop == r_OR) - { - if (result == FALSE) - { - result = checkpremise(p); - } - } - else - { - if (result == FALSE) return(FALSE); - result = checkpremise(p); - } - p = p->next; - } - return(result); -} - - -int checkpremise(struct Premise *p) -/* -**---------------------------------------------------------- -** Checks if a particular premise is true -**---------------------------------------------------------- -*/ -{ - if (p->variable == r_TIME || p->variable == r_CLOCKTIME) - return(checktime(p)); - else if (p->status > IS_NUMBER) - return(checkstatus(p)); - else - return(checkvalue(p)); -} - - -int checktime(struct Premise *p) -/* -**------------------------------------------------------------ -** Checks if condition on system time holds -**------------------------------------------------------------ -*/ -{ - char flag; - long t1,t2,x; - - /* Get start and end of rule evaluation time interval */ - if (p->variable == r_TIME) - { - t1 = Time1; - t2 = Htime; - } - else if (p->variable == r_CLOCKTIME) - { - t1 = (Time1 + Tstart) % SECperDAY; - t2 = (Htime + Tstart) % SECperDAY; - } - else return(0); - - /* Test premise's time */ - x = (long)(p->value); - switch (p->relop) - { - /* For inequality, test against current time */ - case LT: if (t2 >= x) return(0); break; - case LE: if (t2 > x) return(0); break; - case GT: if (t2 <= x) return(0); break; - case GE: if (t2 < x) return(0); break; - - /* For equality, test if within interval */ - case EQ: - case NE: - flag = FALSE; - if (t2 < t1) /* E.g., 11:00 am to 1:00 am */ - { - if (x >= t1 || x <= t2) flag = TRUE; - } - else - { - if (x >= t1 && x <= t2) flag = TRUE; - } - if (p->relop == EQ && flag == FALSE) return(0); - if (p->relop == NE && flag == TRUE) return(0); - break; - } - - /* If we get to here then premise was satisfied */ - return(1); -} - - -int checkstatus(struct Premise *p) -/* -**------------------------------------------------------------ -** Checks if condition on link status holds -**------------------------------------------------------------ -*/ -{ - char i; - int j; - switch (p->status) - { - case IS_OPEN: - case IS_CLOSED: - case IS_ACTIVE: - i = LinkStatus[p->index]; - if (i <= CLOSED) j = IS_CLOSED; - else if (i == ACTIVE) j = IS_ACTIVE; - else j = IS_OPEN; - if (j == p->status && - p->relop == EQ) return(1); - if (j != p->status && - p->relop == NE) return(1); - } - return(0); -} - - -int checkvalue(struct Premise *p) -/* -**---------------------------------------------------------- -** Checks if numerical condition on a variable is true. -** Uses tolerance of 0.001 when testing conditions. -**---------------------------------------------------------- -*/ -{ - int i,j,v; - double x, - tol = 1.e-3; - - i = p->index; - v = p->variable; - switch (v) - { - -/*** Updated 10/25/00 ***/ - case r_DEMAND: if (p->object == r_SYSTEM) x = Dsystem*Ucf[DEMAND]; - else x = NodeDemand[i]*Ucf[DEMAND]; - break; - - case r_HEAD: - case r_GRADE: x = NodeHead[i]*Ucf[HEAD]; - break; - case r_PRESSURE: x = (NodeHead[i]-Node[i].El)*Ucf[PRESSURE]; - break; - case r_LEVEL: x = (NodeHead[i]-Node[i].El)*Ucf[HEAD]; - break; - case r_FLOW: x = ABS(Q[i])*Ucf[FLOW]; - break; - case r_SETTING: if (LinkSetting[i] == MISSING) return(0); - x = LinkSetting[i]; - switch (Link[i].Type) - { - case PRV: - case PSV: - case PBV: x = x*Ucf[PRESSURE]; break; - case FCV: x = x*Ucf[FLOW]; break; - } - break; - case r_FILLTIME: if (i <= Njuncs) return(0); - j = i-Njuncs; - if (Tank[j].A == 0.0) return(0); - if (NodeDemand[i] <= TINY) return(0); - x = (Tank[j].Vmax - Tank[j].V)/NodeDemand[i]; - break; - case r_DRAINTIME: if (i <= Njuncs) return(0); - j = i-Njuncs; - if (Tank[j].A == 0.0) return(0); - if (NodeDemand[i] >= -TINY) return(0); - x = (Tank[j].Vmin - Tank[j].V)/NodeDemand[i]; - break; - default: return(0); - } - switch (p->relop) - { - case EQ: if (ABS(x - p->value) > tol) return(0); - break; - case NE: if (ABS(x - p->value) < tol) return(0); - break; - case LT: if (x > p->value + tol) return(0); break; - case LE: if (x > p->value - tol) return(0); break; - case GT: if (x < p->value - tol) return(0); break; - case GE: if (x < p->value + tol) return(0); break; - } - return(1); -} - - -void updateactlist(int i, struct Action *actions) -/* -**--------------------------------------------------- -** Adds rule's actions to action list -**--------------------------------------------------- -*/ -{ - struct ActItem *item; - struct Action *a; - - /* Iterate through each action of Rule i */ - a = actions; - while (a != NULL) - { - /* Add action to list if not already on it */ - if (!checkaction(i,a)) - { - item = (struct ActItem *) malloc(sizeof(struct ActItem)); - if (item != NULL) - { - item->action = a; - item->ruleindex = i; - item->next = ActList; - ActList = item; - } - } - a = a->next; - } -} - - -int checkaction(int i, struct Action *a) -/* -**----------------------------------------------------------- -** Checks if an action is already on the Action List -**----------------------------------------------------------- -*/ -{ - int i1,k,k1; - struct ActItem *item; - struct Action *a1; - - /* Search action list for link named in action */ - k = a->link; /* Action applies to link k */ - item = ActList; - while (item != NULL) - { - a1 = item->action; - i1 = item->ruleindex; - k1 = a1->link; - - /* If link on list then replace action if rule has higher priority. */ - if (k1 == k) - { - if (Rule[i].priority > Rule[i1].priority) - { - item->action = a; - item->ruleindex = i; - } - return(1); - } - item = item->next; - } - return(0); -} - - -int takeactions() -/* -**----------------------------------------------------------- -** Implements actions on action list -**----------------------------------------------------------- -*/ -{ - struct Action *a; - struct ActItem *item; - char flag; - int k, s, n; - double tol = 1.e-3, - v, x; - - n = 0; - item = ActList; - while (item != NULL) - { - flag = FALSE; - a = item->action; - k = a->link; - s = LinkStatus[k]; - v = LinkSetting[k]; - x = a->setting; - - /* Switch link from closed to open */ - if (a->status == IS_OPEN && s <= CLOSED) - { - setlinkstatus(k, 1, &LinkStatus[k], &LinkSetting[k]); - flag = TRUE; - } - - /* Switch link from not closed to closed */ - else if (a->status == IS_CLOSED && s > CLOSED) - { - setlinkstatus(k, 0, &LinkStatus[k], &LinkSetting[k]); - flag = TRUE; - } - - /* Change link's setting */ - else if (x != MISSING) - { - switch(Link[k].Type) - { - case PRV: - case PSV: - case PBV: x = x/Ucf[PRESSURE]; break; - case FCV: x = x/Ucf[FLOW]; break; - } - if (ABS(x-v) > tol) - { - setlinksetting(k, x, &LinkStatus[k], &LinkSetting[k]); - flag = TRUE; - } - } - - /* Report rule action */ - if (flag == TRUE) - { - n++; - if (Statflag) writeruleaction(k,Rule[item->ruleindex].label); - } - - /* Move to next action on list */ - item = item->next; - } - return(n); -} - - -void ruleerrmsg(int err) -/* -**----------------------------------------------------------- -** Reports error message -**----------------------------------------------------------- -*/ -{ - int i; - char label[81]; - char fmt[256]; - switch (err) - { - case 201: strcpy(fmt,R_ERR201); break; - case 202: strcpy(fmt,R_ERR202); break; - case 203: strcpy(fmt,R_ERR203); break; - case 204: strcpy(fmt,R_ERR204); break; - -/*** Updated on 9/7/00 ***/ - case 207: strcpy(fmt,R_ERR207); break; - - case 221: strcpy(fmt,R_ERR221); break; - default: return; - } - if (Nrules > 0) - { - strcpy(label,t_RULE); - strcat(label," "); - strcat(label,Rule[Nrules].label); - } - else strcpy(label,t_RULES_SECT); - sprintf(Msg,fmt); - strcat(Msg,label); - strcat(Msg,":"); - writeline(Msg); - strcpy(fmt,Tok[0]); - for (i=1; i +#include +#include + +#include "types.h" +#include "funcs.h" +#include "hash.h" +#include "text.h" + +#ifdef _WIN32 +#define snprintf _snprintf +#endif + +enum Rulewords { + r_RULE, + r_IF, + r_AND, + r_OR, + r_THEN, + r_ELSE, + r_PRIORITY, + r_ERROR +}; +char *Ruleword[] = {w_RULE, w_IF, w_AND, w_OR, + w_THEN, w_ELSE, w_PRIORITY, NULL}; + +enum Varwords { + r_DEMAND, + r_HEAD, + r_GRADE, + r_LEVEL, + r_PRESSURE, + r_FLOW, + r_STATUS, + r_SETTING, + r_POWER, + r_TIME, + r_CLOCKTIME, + r_FILLTIME, + r_DRAINTIME +}; +char *Varword[] = {w_DEMAND, w_HEAD, w_GRADE, w_LEVEL, w_PRESSURE, + w_FLOW, w_STATUS, w_SETTING, w_POWER, w_TIME, + w_CLOCKTIME, w_FILLTIME, w_DRAINTIME, NULL}; + +enum Objects { + r_JUNC, + r_RESERV, + r_TANK, + r_PIPE, + r_PUMP, + r_VALVE, + r_NODE, + r_LINK, + r_SYSTEM +}; +char *Object[] = {w_JUNC, w_RESERV, w_TANK, w_PIPE, w_PUMP, + w_VALVE, w_NODE, w_LINK, w_SYSTEM, NULL}; + +// NOTE: place "<=" & ">=" before "<" & ">" so that findmatch() works correctly. +enum Operators { EQ, NE, LE, GE, LT, GT, IS, NOT, BELOW, ABOVE }; +char *Operator[] = {"=", "<>", "<=", ">=", "<", ">", + w_IS, w_NOT, w_BELOW, w_ABOVE, NULL}; + +enum Values { IS_NUMBER, IS_OPEN, IS_CLOSED, IS_ACTIVE }; +char *Value[] = {"XXXX", w_OPEN, w_CLOSED, w_ACTIVE, NULL}; + +// Local functions +static void newrule(Project *); +static int newpremise(Project *, int); +static int newaction(Project *); +static int newpriority(Project *); + +static int evalpremises(Project *, int); +static int checkpremise(Project *, Spremise *); +static int checktime(Project *, Spremise *); +static int checkstatus(Project *, Spremise *); +static int checkvalue(Project *, Spremise *); + +static int onactionlist(Project *, int, Saction *); +static void updateactionlist(Project *, int, Saction *); +static int takeactions(Project *); +static void clearactionlist(Rules *); +static void clearrule(Project *, int); + +static void writepremise(Spremise *, FILE *, Network *); +static void writeaction(Saction *, FILE *, Network *); +static void getobjtxt(int, int, char *); +static void gettimetxt(double, char *); + + +void initrules(Project *pr) +//-------------------------------------------------------------- +// Initializes rule base. +//-------------------------------------------------------------- +{ + pr->rules.RuleState = r_PRIORITY; + pr->rules.LastPremise = NULL; + pr->rules.LastThenAction = NULL; + pr->rules.LastElseAction = NULL; + pr->rules.ActionList = NULL; + pr->network.Rule = NULL; +} + +void addrule(Parser *parser, char *tok) +//-------------------------------------------------------------- +// Updates rule count if RULE keyword found in line of input. +//-------------------------------------------------------------- +{ + if (match(tok, w_RULE)) parser->MaxRules++; +} + +void deleterule(Project *pr, int index) +//----------------------------------------------------------- +// Deletes a specific rule +//----------------------------------------------------------- +{ + Network *net = &pr->network; + + int i; + Srule *lastRule; + + // Free memory allocated to rule's premises & actions + clearrule(pr, index); + + // Shift position of higher indexed rules down one + for (i = index; i <= net->Nrules - 1; i++) + { + net->Rule[i] = net->Rule[i + 1]; + } + + // Remove premises & actions from last (inactive) entry in Rule array + lastRule = &net->Rule[net->Nrules]; + lastRule->Premises = NULL; + lastRule->ThenActions = NULL; + lastRule->ElseActions = NULL; + + // Reduce active rule count by one + net->Nrules--; +} + +int allocrules(Project *pr) +//-------------------------------------------------------------- +// Allocates memory for rule-based controls. +//-------------------------------------------------------------- +{ + Network *net = &pr->network; + int n = pr->parser.MaxRules + 1; + + net->Rule = (Srule *)calloc(n, sizeof(Srule)); + if (net->Rule == NULL) return 101; + return 0; +} + +void freerules(Project *pr) +//-------------------------------------------------------------- +// Frees memory used for rule-based controls. +//-------------------------------------------------------------- +{ + int i; + + // Already freed + if (pr->network.Rule == NULL) + return; + + for (i = 1; i <= pr->network.Nrules; i++) clearrule(pr, i); + free(pr->network.Rule); + pr->network.Rule = NULL; +} + +int ruledata(Project *pr) +//-------------------------------------------------------------- +// Parses a line from [RULES] section of input. +//-------------------------------------------------------------- +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + Rules *rules = &pr->rules; + + int key, // Keyword code + err; + char **Tok = parser->Tok; // Tokenized line of a rule statement + + // Exit if current rule has an error + if (rules->RuleState == r_ERROR) return 0; + + // Find the key word that begins the rule statement + err = 0; + key = findmatch(Tok[0], Ruleword); + switch (key) + { + case -1: + err = 201; // Unrecognized keyword + break; + + case r_RULE: + // Missing the rule label + if (parser->Ntokens != 2) + { + err = 201; + break; + } + net->Nrules++; + newrule(pr); + rules->RuleState = r_RULE; + rules->Errcode = 0; + break; + + case r_IF: + if (rules->RuleState != r_RULE) + { + err = 221; // Mis-placed IF clause + break; + } + rules->RuleState = r_IF; + err = newpremise(pr, r_AND); + break; + + case r_AND: + if (rules->RuleState == r_IF) err = newpremise(pr, r_AND); + else if (rules->RuleState == r_THEN || rules->RuleState == r_ELSE) + { + err = newaction(pr); + } + else err = 221; + break; + + case r_OR: + if (rules->RuleState == r_IF) err = newpremise(pr, r_OR); + else err = 221; + break; + + case r_THEN: + if (rules->RuleState != r_IF) + { + err = 221; // Mis-placed THEN clause + break; + } + rules->RuleState = r_THEN; + err = newaction(pr); + break; + + case r_ELSE: + if (rules->RuleState != r_THEN) + { + err = 221; // Mis-placed ELSE clause + break; + } + rules->RuleState = r_ELSE; + err = newaction(pr); + break; + + case r_PRIORITY: + if (rules->RuleState != r_THEN && rules->RuleState != r_ELSE) + { + err = 221; + break; + } + rules->RuleState = r_PRIORITY; + err = newpriority(pr); + break; + + default: + err = 201; + } + + // Set RuleState to r_ERROR if errors found + if (err) + { + rules->RuleState = r_ERROR; + rules->Errcode = err; + err = 200; + } + return err; +} + +void ruleerrmsg(Project *pr) +//----------------------------------------------------------- +// Report a rule parsing error message +//----------------------------------------------------------- +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + Rules *rules = &pr->rules; + + int i; + char label[MAXMSG + 1]; + char msg[MAXLINE + 1]; + char **Tok = parser->Tok; + + // Get text of error message + switch (rules->Errcode) + { + case 201: strcpy(msg, R_ERR201); break; + case 202: strcpy(msg, R_ERR202); break; + case 203: strcpy(msg, R_ERR203); break; + case 204: strcpy(msg, R_ERR204); break; + case 207: strcpy(msg, R_ERR207); break; + case 221: strcpy(msg, R_ERR221); break; + default: return; + } + + // Get label of rule being parsed + if (net->Nrules > 0) + { + strncpy(label, t_RULE, MAXMSG); + strncat(label, " ", MAXMSG); + strncat(label, net->Rule[net->Nrules].label, MAXMSG); + } + else strncpy(label, t_RULES_SECT, MAXMSG); + + // Write rule label and error message to status report + snprintf(pr->Msg, MAXMSG, "%s", msg); + strncat(pr->Msg, label, MAXMSG); + strncat(pr->Msg, ":", MAXMSG); + writeline(pr, pr->Msg); + + // Write text of rule clause being parsed to status report + strcpy(msg, Tok[0]); + for (i = 1; i < parser->Ntokens; i++) + { + strncat(msg, " ", MAXLINE); + strncat(msg, Tok[i], MAXLINE); + } + writeline(pr, msg); +} + +void adjustrules(Project *pr, int objtype, int index) +//----------------------------------------------------------- +// Adjusts rules when a specific node or link is deleted. +//----------------------------------------------------------- +{ + Network *net = &pr->network; + + int i, delete; + Spremise *p; + Saction *a; + + // Delete rules that refer to objtype and index + for (i = net->Nrules; i >= 1; i--) + { + delete = FALSE; + p = net->Rule[i].Premises; + while (p != NULL && !delete) + { + if (objtype == p->object && p->index == index) delete = TRUE; + p = p->next; + } + if (objtype == r_LINK) + { + a = net->Rule[i].ThenActions; + while (a != NULL && !delete) + { + if (a->link == index) delete = TRUE; + a = a->next; + } + a = net->Rule[i].ElseActions; + while (a != NULL && !delete) + { + if (a->link == index) delete = TRUE; + a = a->next; + } + } + if (delete) deleterule(pr, i); + } + + // Adjust all higher object indices to reflect deletion of object index + for (i = 1; i <= net->Nrules; i++) + { + p = net->Rule[i].Premises; + while (p != NULL) + { + if (objtype == p->object && p->index > index) p->index--; + p = p->next; + } + if (objtype == r_LINK) + { + a = net->Rule[i].ThenActions; + while (a != NULL) + { + if (a->link > index) a->link--; + a = a->next; + } + a = net->Rule[i].ElseActions; + while (a != NULL) + { + if (a->link > index) a->link--; + a = a->next; + } + } + } +} + +void adjusttankrules(Project *pr) +//----------------------------------------------------------- +// Adjusts tank indices in rule premises. +//----------------------------------------------------------- +{ + Network *net = &pr->network; + + int i, njuncs; + Spremise *p; + + njuncs = net->Njuncs; + for (i = 1; i <= net->Nrules; i++) + { + p = net->Rule[i].Premises; + while (p != NULL) + { + if (p->object == r_NODE && p->index > njuncs) p->index++; + p = p->next; + } + } +} + +Spremise *getpremise(Spremise *premises, int i) +//---------------------------------------------------------- +// Return the i-th premise in a rule +//---------------------------------------------------------- +{ + int count = 0; + Spremise *p; + + p = premises; + while (p != NULL) + { + count++; + if (count == i) break; + p = p->next; + } + return p; +} + +Saction *getaction(Saction *actions, int i) +//---------------------------------------------------------- +// Return the i-th action from a rule's action list +//---------------------------------------------------------- +{ + int count = 0; + Saction *a; + + a = actions; + while (a != NULL) + { + count++; + if (count == i) break; + a = a->next; + } + return a; +} + +int writerule(Project *pr, FILE *f, int ruleIndex) +//----------------------------------------------------------------------------- +// Write a rule to an INP file. +//----------------------------------------------------------------------------- +{ + Network *net = &pr->network; + + Srule *rule = &net->Rule[ruleIndex]; + Spremise *p; + Saction *a; + + // Write each premise clause to the file + p = rule->Premises; + fprintf(f, "\nIF "); + while (p != NULL) + { + writepremise(p, f, net); + p = p->next; + if (p) fprintf(f, "\n%-5s", Ruleword[p->logop]); + } + + // Write each THEN action clause to the file + a = rule->ThenActions; + if (a) fprintf(f, "\nTHEN "); + while (a != NULL) + { + writeaction(a, f, net); + a = a->next; + if (a) fprintf(f, "\nAND "); + } + + // Write each ELSE action clause to the file + a = rule->ElseActions; + if (a) fprintf(f, "\nELSE "); + while (a != NULL) + { + writeaction(a, f, net); + a = a->next; + if (a) fprintf(f, "\nAND "); + } + + // Write the rule's priority to the file + if (rule->priority > 0) fprintf(f, "\nPRIORITY %f", rule->priority); + return 0; +} + +int checkrules(Project *pr, long dt) +//----------------------------------------------------- +// Checks which rules should fire at current time. +//----------------------------------------------------- +{ + Network *net = &pr->network; + Times *time = &pr->times; + Rules *rules = &pr->rules; + + int i; + int actionCount = 0; // Number of actions actually taken + + // Start of rule evaluation time interval + rules->Time1 = time->Htime - dt + 1; + + // Iterate through each rule + rules->ActionList = NULL; + for (i = 1; i <= net->Nrules; i++) + { + // If premises true, add THEN clauses to action list + if (evalpremises(pr, i) == TRUE) + { + updateactionlist(pr, i, net->Rule[i].ThenActions); + } + + // If premises false, add ELSE actions to list + else + { + if (net->Rule[i].ElseActions != NULL) + { + updateactionlist(pr, i, net->Rule[i].ElseActions); + } + } + } + + // Execute actions then clear action list + if (rules->ActionList != NULL) actionCount = takeactions(pr); + clearactionlist(rules); + return actionCount; +} + +void newrule(Project *pr) +//---------------------------------------------------------- +// Adds a new rule to the project +//---------------------------------------------------------- +{ + Network *net = &pr->network; + + char **Tok = pr->parser.Tok; + Srule *rule = &net->Rule[net->Nrules]; + + strncpy(rule->label, Tok[1], MAXID); + rule->Premises = NULL; + rule->ThenActions = NULL; + rule->ElseActions = NULL; + rule->priority = 0.0; + pr->rules.LastPremise = NULL; + pr->rules.LastThenAction = NULL; + pr->rules.LastElseAction = NULL; +} + +int newpremise(Project *pr, int logop) +//-------------------------------------------------------------------- +// Adds new premise to current rule. +// Formats are: +// IF/AND/OR +// IF/AND/OR SYSTEM (units) +//--------------------------------------------------------------------- +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + Rules *rules = &pr->rules; + + int i, j, k, m, r, s, v; + double x; + char **Tok = parser->Tok; + Spremise *p; + + // Check for correct number of tokens + if (parser->Ntokens != 5 && parser->Ntokens != 6) return 201; + + // Find network object & id if present + i = findmatch(Tok[1], Object); + if (i == r_SYSTEM) + { + j = 0; + v = findmatch(Tok[2], Varword); + if (v != r_DEMAND && v != r_TIME && v != r_CLOCKTIME) return 201; + } + else + { + v = findmatch(Tok[3], Varword); + if (v < 0) return (201); + switch (i) + { + case r_NODE: + case r_JUNC: + case r_RESERV: + case r_TANK: + k = r_NODE; + break; + case r_LINK: + case r_PIPE: + case r_PUMP: + case r_VALVE: + k = r_LINK; + break; + default: + return 201; + } + i = k; + if (i == r_NODE) + { + j = findnode(net, Tok[2]); + if (j == 0) return 203; + switch (v) + { + case r_DEMAND: + case r_HEAD: + case r_GRADE: + case r_LEVEL: + case r_PRESSURE: + break; + case r_FILLTIME: + case r_DRAINTIME: + if (j <= net->Njuncs) return 201; + break; + default: + return 201; + } + } + else + { + j = findlink(net, Tok[2]); + if (j == 0) return 204; + switch (v) + { + case r_FLOW: + case r_STATUS: + case r_SETTING: + break; + default: + return 201; + } + } + } + + // Parse relational operator (r) and check for synonyms + if (i == r_SYSTEM) m = 3; + else m = 4; + k = findmatch(Tok[m], Operator); + if (k < 0) return 201; + switch (k) + { + case IS: + r = EQ; + break; + case NOT: + r = NE; + break; + case BELOW: + r = LT; + break; + case ABOVE: + r = GT; + break; + default: + r = k; + } + + // Parse for status (s) or numerical value (x) + s = 0; + x = MISSING; + if (v == r_TIME || v == r_CLOCKTIME) + { + if (parser->Ntokens == 6) x = hour(Tok[4], Tok[5]) * 3600.; + else x = hour(Tok[4], "") * 3600.; + if (x < 0.0) return 202; + } + else if ((k = findmatch(Tok[parser->Ntokens - 1], Value)) > IS_NUMBER) s = k; + else + { + if (!getfloat(Tok[parser->Ntokens - 1], &x)) + return (202); + if (v == r_FILLTIME || v == r_DRAINTIME) x = x * 3600.0; + } + + // Create new premise structure + p = (Spremise *)malloc(sizeof(Spremise)); + if (p == NULL) return 101; + p->object = i; + p->index = j; + p->variable = v; + p->relop = r; + p->logop = logop; + p->status = s; + p->value = x; + + // Add premise to current rule's premise list + p->next = NULL; + if (rules->LastPremise == NULL) net->Rule[net->Nrules].Premises = p; + else rules->LastPremise->next = p; + rules->LastPremise = p; + return 0; +} + +int newaction(Project *pr) +//---------------------------------------------------------- +// Adds new action to current rule. +// Format is: +// THEN/ELSE/AND LINK IS +//---------------------------------------------------------- +{ + Network *net = &pr->network; + Parser *parser = &pr->parser; + Rules *rules = &pr->rules; + + int j, k, s; + double x; + Saction *a; + char **Tok = parser->Tok; + + // Check for correct number of tokens + if (parser->Ntokens != 6) return 201; + + // Check that link exists + j = findlink(net, Tok[2]); + if (j == 0) return 204; + + // Cannot control a CV + if (net->Link[j].Type == CVPIPE) return 207; + + // Find value for status or setting + s = -1; + x = MISSING; + if ((k = findmatch(Tok[5], Value)) > IS_NUMBER) s = k; + else + { + if (!getfloat(Tok[5], &x)) return 202; + if (x < 0.0) return 202; + } + + // Cannot change setting for a GPV + if (x != MISSING && net->Link[j].Type == GPV) return 202; + + // Set status for pipe in case setting was specified + if (x != MISSING && net->Link[j].Type == PIPE) + { + if (x == 0.0) s = IS_CLOSED; + else s = IS_OPEN; + x = MISSING; + } + + // Create a new action structure + a = (Saction *)malloc(sizeof(Saction)); + if (a == NULL) return 101; + a->link = j; + a->status = s; + a->setting = x; + + // Add action to current rule's action list + if (rules->RuleState == r_THEN) + { + a->next = NULL; + if (rules->LastThenAction == NULL) + { + net->Rule[net->Nrules].ThenActions = a; + } + else rules->LastThenAction->next = a; + rules->LastThenAction = a; + } + else + { + a->next = NULL; + if (rules->LastElseAction == NULL) + { + net->Rule[net->Nrules].ElseActions = a; + } + else rules->LastElseAction->next = a; + rules->LastElseAction = a; + } + return 0; +} + +int newpriority(Project *pr) +//--------------------------------------------------- +// Adds priority rating to current rule +//--------------------------------------------------- +{ + Network *net = &pr->network; + + double x; + char **Tok = pr->parser.Tok; + + if (!getfloat(Tok[1], &x)) return 202; + net->Rule[net->Nrules].priority = x; + return 0; +} + +int evalpremises(Project *pr, int i) +//---------------------------------------------------------- +// Checks if premises to rule i are true +//---------------------------------------------------------- +{ + Network *net = &pr->network; + + int result; + Spremise *p; + + result = TRUE; + p = net->Rule[i].Premises; + while (p != NULL) + { + if (p->logop == r_OR) + { + if (result == FALSE) result = checkpremise(pr, p); + } + else + { + if (result == FALSE) return (FALSE); + result = checkpremise(pr, p); + } + p = p->next; + } + return result; +} + +int checkpremise(Project *pr, Spremise *p) +//---------------------------------------------------------- +// Checks if a particular premise is true +//---------------------------------------------------------- +{ + if (p->variable == r_TIME || + p->variable == r_CLOCKTIME) return (checktime(pr,p)); + else if (p->status > IS_NUMBER) return (checkstatus(pr,p)); + else return (checkvalue(pr,p)); +} + +int checktime(Project *pr, Spremise *p) +//------------------------------------------------------------ +// Checks if condition on system time holds +//------------------------------------------------------------ +{ + Times *time = &pr->times; + Rules *rules = &pr->rules; + + char flag; + long t1, t2, x; + + // Get start and end of rule evaluation time interval + if (p->variable == r_TIME) + { + t1 = rules->Time1; + t2 = time->Htime; + } + else if (p->variable == r_CLOCKTIME) + { + t1 = (rules->Time1 + time->Tstart) % SECperDAY; + t2 = (time->Htime + time->Tstart) % SECperDAY; + } + else return (0); + + // Test premise's time + x = (long)(p->value); + switch (p->relop) + { + // For inequality, test against current time + case LT: + if (t2 >= x) return (0); + break; + case LE: + if (t2 > x) return (0); + break; + case GT: + if (t2 <= x) return (0); + break; + case GE: + if (t2 < x) return (0); + break; + + // For equality, test if within interval + case EQ: + case NE: + flag = FALSE; + if (t2 < t1) // E.g., 11:00 am to 1:00 am + { + if (x >= t1 || x <= t2) + flag = TRUE; + } + else + { + if (x >= t1 && x <= t2) + flag = TRUE; + } + if (p->relop == EQ && flag == FALSE) return (0); + if (p->relop == NE && flag == TRUE) return (0); + break; + } + + // If we get to here then premise was satisfied + return 1; +} + +int checkstatus(Project *pr, Spremise *p) +//------------------------------------------------------------ +// Checks if condition on link status holds +//------------------------------------------------------------ +{ + Hydraul *hyd = &pr->hydraul; + + char i; + int j; + + switch (p->status) + { + case IS_OPEN: + case IS_CLOSED: + case IS_ACTIVE: + i = hyd->LinkStatus[p->index]; + if (i <= CLOSED) j = IS_CLOSED; + else if (i == ACTIVE) j = IS_ACTIVE; + else j = IS_OPEN; + if (j == p->status && p->relop == EQ) return 1; + if (j != p->status && p->relop == NE) return 1; + } + return 0; +} + +int checkvalue(Project *pr, Spremise *p) +//---------------------------------------------------------- +// Checks if numerical condition on a variable is true. +// Uses tolerance of 0.001 when testing conditions. +//---------------------------------------------------------- +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + + int i, j, v; + double x, // A variable's value + tol = 1.e-3; // Equality tolerance + int Njuncs = net->Njuncs; + double *Ucf = pr->Ucf; + double *NodeDemand = hyd->NodeDemand; + double *LinkFlow = hyd->LinkFlow; + double *LinkSetting = hyd->LinkSetting; + Snode *Node = net->Node; + Slink *Link = net->Link; + Stank *Tank = net->Tank; + + // Find the value being checked + i = p->index; + v = p->variable; + switch (v) + { + case r_DEMAND: + if (p->object == r_SYSTEM) x = hyd->Dsystem * Ucf[DEMAND]; + else x = NodeDemand[i] * Ucf[DEMAND]; + break; + + case r_HEAD: + case r_GRADE: + x = hyd->NodeHead[i] * Ucf[HEAD]; + break; + + case r_PRESSURE: + x = (hyd->NodeHead[i] - Node[i].El) * Ucf[PRESSURE]; + break; + + case r_LEVEL: + x = (hyd->NodeHead[i] - Node[i].El) * Ucf[HEAD]; + break; + + case r_FLOW: + x = ABS(LinkFlow[i]) * Ucf[FLOW]; + break; + + case r_SETTING: + if (LinkSetting[i] == MISSING) return 0; + x = LinkSetting[i]; + switch (Link[i].Type) + { + case PRV: + case PSV: + case PBV: + x = x * Ucf[PRESSURE]; + break; + case FCV: + x = x * Ucf[FLOW]; + break; + default: + break; + } + break; + + case r_FILLTIME: + if (i <= Njuncs) return 0; + j = i - Njuncs; + if (Tank[j].A == 0.0) return 0; + if (NodeDemand[i] <= TINY) return 0; + x = (Tank[j].Vmax - Tank[j].V) / NodeDemand[i]; + break; + + case r_DRAINTIME: + if (i <= Njuncs) return 0; + j = i - Njuncs; + if (Tank[j].A == 0.0) return 0; + if (NodeDemand[i] >= -TINY) return 0; + x = (Tank[j].Vmin - Tank[j].V) / NodeDemand[i]; + break; + + default: + return 0; + } + + // Compare value x against the premise + switch (p->relop) + { + case EQ: if (ABS(x - p->value) > tol) return 0; break; + case NE: if (ABS(x - p->value) < tol) return 0; break; + case LT: if (x > p->value + tol) return 0; break; + case LE: if (x > p->value - tol) return 0; break; + case GT: if (x < p->value - tol) return 0; break; + case GE: if (x < p->value + tol) return 0; break; + } + return 1; +} + +void updateactionlist(Project *pr, int i, Saction *actions) +//--------------------------------------------------- +// Adds rule's actions to action list +//-------------------------------------------------- +{ + Rules *rules = &pr->rules; + + SactionList *actionItem; + Saction *a; + + // Iterate through each action of Rule i + a = actions; + while (a != NULL) + { + // Add action to list if its link not already on it + if (!onactionlist(pr, i, a)) + { + actionItem = (SactionList *)malloc(sizeof(SactionList)); + if (actionItem != NULL) + { + actionItem->action = a; + actionItem->ruleIndex = i; + actionItem->next = rules->ActionList; + rules->ActionList = actionItem; + } + } + a = a->next; + } +} + +int onactionlist(Project *pr, int i, Saction *a) +//----------------------------------------------------------------------------- +// Checks if action a from rule i can be added to the action list +//----------------------------------------------------------------------------- +{ + Network *net = &pr->network; + + int link, i1; + SactionList *actionItem; + Saction *a1; + + // Search action list for link included in action a + link = a->link; + actionItem = pr->rules.ActionList; + while (actionItem != NULL) + { + a1 = actionItem->action; + i1 = actionItem->ruleIndex; + + // Link appears in list + if (link == a1->link) + { + // Replace its action with 'a' if rule i has higher priority + if (net->Rule[i].priority > net->Rule[i1].priority) + { + actionItem->action = a; + actionItem->ruleIndex = i; + } + + // Return indicating that 'a' should not be added to action list + return 1; + } + actionItem = actionItem->next; + } + + // Return indicating that it's ok to add 'a' to the action list + return 0; +} + +int takeactions(Project *pr) +//----------------------------------------------------------- +// Implements actions on action list +//----------------------------------------------------------- +{ + Network *net = &pr->network; + Hydraul *hyd = &pr->hydraul; + Report *rpt = &pr->report; + Rules *rules = &pr->rules; + + char flag; + int k, s, n; + double tol = 1.e-3, v, x; + Saction *a; + SactionList *actionItem; + + n = 0; + actionItem = rules->ActionList; + while (actionItem != NULL) + { + flag = FALSE; + a = actionItem->action; + k = a->link; + s = hyd->LinkStatus[k]; + v = hyd->LinkSetting[k]; + x = a->setting; + + // Switch link from closed to open + if (a->status == IS_OPEN && s <= CLOSED) + { + setlinkstatus(pr, k, 1, &hyd->LinkStatus[k], &hyd->LinkSetting[k]); + flag = TRUE; + } + + // Switch link from not closed to closed + else if (a->status == IS_CLOSED && s > CLOSED) + { + setlinkstatus(pr, k, 0, &hyd->LinkStatus[k], &hyd->LinkSetting[k]); + flag = TRUE; + } + + // Change link's setting + else if (x != MISSING) + { + switch (net->Link[k].Type) + { + case PRV: + case PSV: + case PBV: + x = x / pr->Ucf[PRESSURE]; + break; + case FCV: + x = x / pr->Ucf[FLOW]; + break; + default: + break; + } + if (ABS(x - v) > tol) + { + setlinksetting(pr, k, x, &hyd->LinkStatus[k], + &hyd->LinkSetting[k]); + flag = TRUE; + } + } + + // Report rule action + if (flag == TRUE) + { + n++; + if (rpt->Statflag) + { + writeruleaction(pr, k, net->Rule[actionItem->ruleIndex].label); + } + } + + // Move to next action on list + actionItem = actionItem->next; + } + return n; +} + +void clearactionlist(Rules *rules) +//---------------------------------------------------------- +// Clears memory used for action list +//---------------------------------------------------------- +{ + SactionList *nextItem; + SactionList *actionItem; + actionItem = rules->ActionList; + while (actionItem != NULL) + { + nextItem = actionItem->next; + free(actionItem); + actionItem = nextItem; + } +} + +void clearrule(Project *pr, int i) +//----------------------------------------------------------- +// Clears memory used by a rule for premises & actions +//----------------------------------------------------------- +{ + Network *net = &pr->network; + + Spremise *p; + Spremise *pnext; + Saction *a; + Saction *anext; + + p = net->Rule[i].Premises; + while (p != NULL) + { + pnext = p->next; + free(p); + p = pnext; + } + a = net->Rule[i].ThenActions; + while (a != NULL) + { + anext = a->next; + free(a); + a = anext; + } + a = net->Rule[i].ElseActions; + while (a != NULL) + { + anext = a->next; + free(a); + a = anext; + } +} + + +void writepremise(Spremise *p, FILE *f, Network *net) +//----------------------------------------------------------------------------- +// Write a rule's premise clause to an INP file. +//----------------------------------------------------------------------------- +{ + char s_obj[20]; + char s_id[MAXID + 1]; + char s_value[20]; + int subtype; + + // Get the type name & ID of object referred to in the premise + if (p->object == r_NODE) + { + subtype = net->Node[p->index].Type; + getobjtxt(r_NODE, subtype, s_obj); + strcpy(s_id, net->Node[p->index].ID); + } + else if (p->object == r_LINK) + { + subtype = net->Link[p->index].Type; + getobjtxt(r_LINK, subtype, s_obj); + strcpy(s_id, net->Link[p->index].ID); + } + else + { + strcpy(s_obj, "SYSTEM"); + strcpy(s_id, ""); + } + + // If premise has no value field, use its status field as a value + if (p->value == MISSING) strcpy(s_value, Value[p->status]); + + // Otherwise get text of premise's value field + else + { + // For time values convert from seconds to hr:min:sec + switch (p->variable) + { + case r_CLOCKTIME: + case r_DRAINTIME: + case r_FILLTIME: + case r_TIME: + gettimetxt(p->value, s_value); + break; + default: sprintf(s_value, "%.4f", p->value); + } + } + + // Write the premise clause to the file + fprintf(f, "%s %s %s %s %s", s_obj, s_id, Varword[p->variable], + Operator[p->relop], s_value); +} + +void writeaction(Saction *a, FILE *f, Network *net) +//----------------------------------------------------------------------------- +// Write a rule's action clause to an INP file. +//----------------------------------------------------------------------------- +{ + char s_id[MAXID + 1]; + char s_obj[20]; + char s_var[20]; + char s_value[20]; + int subtype; + + subtype = net->Link[a->link].Type; + getobjtxt(r_LINK, subtype, s_obj); + strcpy(s_id, net->Link[a->link].ID); + if (a->setting == MISSING) + { + strcpy(s_var, "STATUS"); + strcpy(s_value, Value[a->status]); + } + else + { + strcpy(s_var, "SETTING"); + sprintf(s_value, "%.4f", a->setting); + } + fprintf(f, "%s %s %s = %s", s_obj, s_id, s_var, s_value); +} + +void getobjtxt(int objtype, int subtype, char *objtxt) +//----------------------------------------------------------------------------- +// Retrieve the text label for a specific type of object. +//----------------------------------------------------------------------------- +{ + if (objtype == r_NODE) + { + switch (subtype) + { + case JUNCTION: strcpy(objtxt, "JUNCTION"); break; + case RESERVOIR: strcpy(objtxt, "RESERVOIR"); break; + case TANK: strcpy(objtxt, "TANK"); break; + default: strcpy(objtxt, "NODE"); + } + } + else if (objtype == r_LINK) + { + switch (subtype) + { + case CVPIPE: + case PIPE: strcpy(objtxt, "PIPE"); break; + case PUMP: strcpy(objtxt, "PUMP"); break; + default: strcpy(objtxt, "VALVE"); + } + } + else strcpy(objtxt, "SYSTEM"); +} + +void gettimetxt(double secs, char *timetxt) +//----------------------------------------------------------------------------- +// Convert number of seconds to a text string in hrs:min:sec format. +//----------------------------------------------------------------------------- +{ + int hours = 0, minutes = 0, seconds = 0; + hours = (int)secs / 3600; + if (hours > 24 * 7) sprintf(timetxt, "%.4f", secs / 3600.0); + else + { + minutes = (int)((secs - 3600 * hours) / 60); + seconds = (int)(secs - 3600 * hours - minutes * 60); + sprintf(timetxt, "%d:%02d:%02d", hours, minutes, seconds); + } +} diff --git a/src/smatrix.c b/src/smatrix.c index 7b0e7f3..67e1f53 100755 --- a/src/smatrix.c +++ b/src/smatrix.c @@ -1,754 +1,871 @@ -/* -******************************************************************* - -SMATRIX.C -- Sparse matrix routines for EPANET program. - -VERSION: 2.00 -DATE: 5/8/00 -AUTHOR: L. Rossman - US EPA - NRMRL - -This module contains the sparse matrix routines used to solve -a network's hydraulic equations. The entry points into this -module are: - createsparse() -- called from openhyd() in HYDRAUL.C - freesparse() -- called from closehyd() in HYDRAUL.C - linsolve() -- called from netsolve() in HYDRAUL.C - -Createsparse() does the following: - 1. for each node, builds an adjacency list that identifies - all links connected to the node (see buildlists()) - 2. re-orders the network's nodes to minimize the number - of non-zero entries in the hydraulic solution matrix - (see reorder()) - 3. converts the adjacency lists into a compact scheme - for storing the non-zero coeffs. in the lower diagonal - portion of the solution matrix (see storesparse()) -Freesparse() frees the memory used for the sparse matrix. -Linsolve() solves the linearized system of hydraulic equations. - -******************************************************************** -*/ - -#include -#include -#ifndef __APPLE__ -#include -#else -#include -#endif -#include -#include "hash.h" -#include "text.h" -#include "types.h" -#include "funcs.h" -#define EXTERN extern -#include "vars.h" - -int *Degree; /* Number of links adjacent to each node */ - - -int createsparse() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: creates sparse representation of coeff. matrix -**-------------------------------------------------------------- -*/ -{ - int errcode = 0; - - /* Allocate data structures */ - ERRCODE(allocsparse()); - if (errcode) return(errcode); - - /* Build node-link adjacency lists with parallel links removed. */ - Degree = (int *) calloc(Nnodes+1, sizeof(int)); - ERRCODE(MEMCHECK(Degree)); - ERRCODE(buildlists(TRUE)); - if (!errcode) - { - xparalinks(); /* Remove parallel links */ - countdegree(); /* Find degree of each junction */ - } /* (= # of adjacent links) */ - - /* Re-order nodes to minimize number of non-zero coeffs. */ - /* in factorized solution matrix. At same time, adjacency */ - /* list is updated with links representing non-zero coeffs. */ - Ncoeffs = Nlinks; - ERRCODE(reordernodes()); - - /* Allocate memory for sparse storage of positions of non-zero */ - /* coeffs. and store these positions in vector NZSUB. */ - ERRCODE(storesparse(Njuncs)); - - /* Free memory used for adjacency lists and sort */ - /* row indexes in NZSUB to optimize linsolve(). */ - if (!errcode) freelists(); - ERRCODE(ordersparse(Njuncs)); - - /* Re-build adjacency lists without removing parallel */ - /* links for use in future connectivity checking. */ - ERRCODE(buildlists(FALSE)); - - /* Free allocated memory */ - free(Degree); - return(errcode); -} /* End of createsparse */ - - -int allocsparse() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns error code -** Purpose: allocates memory for indexing the solution matrix -**-------------------------------------------------------------- -*/ -{ - int errcode = 0; - Adjlist = (Padjlist *) calloc(Nnodes+1, sizeof(Padjlist)); - Order = (int *) calloc(Nnodes+1, sizeof(int)); - Row = (int *) calloc(Nnodes+1, sizeof(int)); - Ndx = (int *) calloc(Nlinks+1, sizeof(int)); - ERRCODE(MEMCHECK(Adjlist)); - ERRCODE(MEMCHECK(Order)); - ERRCODE(MEMCHECK(Row)); - ERRCODE(MEMCHECK(Ndx)); - return(errcode); -} - - -void freesparse() -/* -**---------------------------------------------------------------- -** Input: None -** Output: None -** Purpose: Frees memory used for sparse matrix storage -**---------------------------------------------------------------- -*/ -{ - freelists(); - free(Adjlist); - free(Order); - free(Row); - free(Ndx); - free(XLNZ); - free(NZSUB); - free(LNZ); -} /* End of freesparse */ - - -int buildlists(int paraflag) -/* -**-------------------------------------------------------------- -** Input: paraflag = TRUE if list marks parallel links -** Output: returns error code -** Purpose: builds linked list of links adjacent to each node -**-------------------------------------------------------------- -*/ -{ - int i,j,k; - int pmark = 0; - int errcode = 0; - Padjlist alink; - - /* For each link, update adjacency lists of its end nodes */ - for (k=1; k<=Nlinks; k++) - { - i = Link[k].N1; - j = Link[k].N2; - if (paraflag) pmark = paralink(i,j,k); /* Parallel link check */ - - /* Include link in start node i's list */ - alink = (struct Sadjlist *) malloc(sizeof(struct Sadjlist)); - if (alink == NULL) return(101); - if (!pmark) alink->node = j; - else alink->node = 0; /* Parallel link marker */ - alink->link = k; - alink->next = Adjlist[i]; - Adjlist[i] = alink; - - /* Include link in end node j's list */ - alink = (struct Sadjlist *) malloc(sizeof(struct Sadjlist)); - if (alink == NULL) return(101); - if (!pmark) alink->node = i; - else alink->node = 0; /* Parallel link marker */ - alink->link = k; - alink->next = Adjlist[j]; - Adjlist[j] = alink; - } - return(errcode); -} /* End of buildlists */ - - -int paralink(int i, int j, int k) -/* -**-------------------------------------------------------------- -** Input: i = index of start node of link -** j = index of end node of link -** k = link index -** Output: returns 1 if link k parallels another link, else 0 -** Purpose: checks for parallel links between nodes i and j -** -**-------------------------------------------------------------- -*/ -{ - Padjlist alink; - for (alink = Adjlist[i]; alink != NULL; alink = alink->next) - { - if (alink->node == j) /* Link || to k (same end nodes) */ - { - Ndx[k] = alink->link; /* Assign Ndx entry to this link */ - return(1); - } - } - Ndx[k] = k; /* Ndx entry if link not parallel */ - return(0); -} /* End of paralink */ - - -void xparalinks() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: removes parallel links from nodal adjacency lists -**-------------------------------------------------------------- -*/ -{ - int i; - Padjlist alink, /* Current item in adjacency list */ - blink; /* Previous item in adjacency list */ - - /* Scan adjacency list of each node */ - for (i=1; i<=Nnodes; i++) - { - alink = Adjlist[i]; /* First item in list */ - blink = NULL; - while (alink != NULL) - { - if (alink->node == 0) /* Parallel link marker found */ - { - if (blink == NULL) /* This holds at start of list */ - { - Adjlist[i] = alink->next; - free(alink); /* Remove item from list */ - alink = Adjlist[i]; - } - else /* This holds for interior of list */ - { - blink->next = alink->next; - free(alink); /* Remove item from list */ - alink = blink->next; - } - } - else - { - blink = alink; /* Move to next item in list */ - alink = alink->next; - } - } - } -} /* End of xparalinks */ - - -void freelists() -/* -**-------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: frees memory used for nodal adjacency lists -**-------------------------------------------------------------- -*/ -{ - int i; - Padjlist alink; - - for (i=0; i<=Nnodes; i++) - { - for (alink = Adjlist[i]; alink != NULL; alink = Adjlist[i]) - { - Adjlist[i] = alink->next; - free(alink); - } - } -} /* End of freelists */ - - -void countdegree() -/* -**---------------------------------------------------------------- -** Input: none -** Output: none -** Purpose: counts number of nodes directly connected to each node -**---------------------------------------------------------------- -*/ -{ - int i; - Padjlist alink; - memset(Degree,0,(Nnodes+1)*sizeof(int)); - - /* NOTE: For purposes of node re-ordering, Tanks (nodes with */ - /* indexes above Njuncs) have zero degree of adjacency. */ - - for (i=1; i<=Njuncs; i++) - for (alink = Adjlist[i]; alink != NULL; alink = alink->next) - if (alink->node > 0) Degree[i]++; -} - - -int reordernodes() -/* -**-------------------------------------------------------------- -** Input: none -** Output: returns 1 if successful, 0 if not -** Purpose: re-orders nodes to minimize # of non-zeros that -** will appear in factorized solution matrix -**-------------------------------------------------------------- -*/ -{ - int k, knode, m, n; - for (k=1; k<=Nnodes; k++) - { - Row[k] = k; - Order[k] = k; - } - n = Njuncs; - for (k=1; k<=n; k++) /* Examine each junction */ - { - m = mindegree(k,n); /* Node with lowest degree */ - knode = Order[m]; /* Node's index */ - if (!growlist(knode)) return(101); /* Augment adjacency list */ - Order[m] = Order[k]; /* Switch order of nodes */ - Order[k] = knode; - Degree[knode] = 0; /* In-activate node */ - } - for (k=1; k<=n; k++) /* Assign nodes to rows of */ - Row[Order[k]] = k; /* coeff. matrix */ - return(0); -} /* End of reordernodes */ - - -int mindegree(int k, int n) -/* -**-------------------------------------------------------------- -** Input: k = first node in list of active nodes -** n = total number of junction nodes -** Output: returns node index with fewest direct connections -** Purpose: finds active node with fewest direct connections -**-------------------------------------------------------------- -*/ -{ - int i, m; - int min = n, - imin = n; - - for (i=k; i<=n; i++) - { - m = Degree[Order[i]]; - if (m < min) - { - min = m; - imin = i; - } - } - return(imin); -} /* End of mindegree */ - - -int growlist(int knode) -/* -**-------------------------------------------------------------- -** Input: knode = node index -** Output: returns 1 if successful, 0 if not -** Purpose: creates new entries in knode's adjacency list for -** all unlinked pairs of active nodes that are -** adjacent to knode -**-------------------------------------------------------------- -*/ -{ - int node; - Padjlist alink; - - /* Iterate through all nodes connected to knode */ - for (alink = Adjlist[knode]; alink != NULL; alink = alink -> next) - { - node = alink->node; /* End node of connecting link */ - if (Degree[node] > 0) /* End node is active */ - { - Degree[node]--; /* Reduce degree of adjacency */ - if (!newlink(alink)) /* Add to adjacency list */ - return(0); - } - } - return(1); -} /* End of growlist */ - - -int newlink(Padjlist alink) -/* -**-------------------------------------------------------------- -** Input: alink = element of node's adjacency list -** Output: returns 1 if successful, 0 if not -** Purpose: links end of current adjacent link to end nodes of -** all links that follow it on adjacency list -**-------------------------------------------------------------- -*/ -{ - int inode, jnode; - Padjlist blink; - - /* Scan all entries in adjacency list that follow anode. */ - inode = alink->node; /* End node of connection to anode */ - for (blink = alink->next; blink != NULL; blink = blink->next) - { - jnode = blink->node; /* End node of next connection */ - - /* If jnode still active, and inode not connected to jnode, */ - /* then add a new connection between inode and jnode. */ - if (Degree[jnode] > 0) /* jnode still active */ - { - if (!linked(inode,jnode)) /* inode not linked to jnode */ - { - - /* Since new connection represents a non-zero coeff. */ - /* in the solution matrix, update the coeff. count. */ - Ncoeffs++; - - /* Update adjacency lists for inode & jnode to */ - /* reflect the new connection. */ - if (!addlink(inode,jnode,Ncoeffs)) return(0); - if (!addlink(jnode,inode,Ncoeffs)) return(0); - Degree[inode]++; - Degree[jnode]++; - } - } - } - return(1); -} /* End of newlink */ - - -int linked(int i, int j) -/* -**-------------------------------------------------------------- -** Input: i = node index -** j = node index -** Output: returns 1 if nodes i and j are linked, 0 if not -** Purpose: checks if nodes i and j are already linked. -**-------------------------------------------------------------- -*/ -{ - Padjlist alink; - for (alink = Adjlist[i]; alink != NULL; alink = alink->next) - if (alink->node == j) return(1); - return(0); -} /* End of linked */ - - -int addlink(int i, int j, int n) -/* -**-------------------------------------------------------------- -** Input: i = node index -** j = node index -** n = link index -** Output: returns 1 if successful, 0 if not -** Purpose: augments node i's adjacency list with node j -**-------------------------------------------------------------- -*/ -{ - Padjlist alink; - alink = (struct Sadjlist *) malloc(sizeof(struct Sadjlist)); - if (alink == NULL) return(0); - alink->node = j; - alink->link = n; - alink->next = Adjlist[i]; - Adjlist[i] = alink; - return(1); -} /* End of addlink */ - - -int storesparse(int n) -/* -**-------------------------------------------------------------- -** Input: n = number of rows in solution matrix -** Output: returns error code -** Purpose: stores row indexes of non-zeros of each column of -** lower triangular portion of factorized matrix -**-------------------------------------------------------------- -*/ -{ - Padjlist alink; - int i, ii, j, k, l, m; - int errcode = 0; - - /* Allocate sparse matrix storage */ - XLNZ = (int *) calloc(n+2, sizeof(int)); - NZSUB = (int *) calloc(Ncoeffs+2, sizeof(int)); - LNZ = (int *) calloc(Ncoeffs+2, sizeof(int)); - ERRCODE(MEMCHECK(XLNZ)); - ERRCODE(MEMCHECK(NZSUB)); - ERRCODE(MEMCHECK(LNZ)); - if (errcode) return(errcode); - - /* Generate row index pointers for each column of matrix */ - k = 0; - XLNZ[1] = 1; - for (i=1; i<=n; i++) /* column */ - { - m = 0; - ii = Order[i]; - for (alink = Adjlist[ii]; alink != NULL; alink = alink->next) - { - j = Row[alink->node]; /* row */ - l = alink->link; - if (j > i && j <= n) - { - m++; - k++; - NZSUB[k] = j; - LNZ[k] = l; - } - } - XLNZ[i+1] = XLNZ[i] + m; - } - return(errcode); -} /* End of storesparse */ - - -int ordersparse(int n) -/* -**-------------------------------------------------------------- -** Input: n = number of rows in solution matrix -** Output: returns eror code -** Purpose: puts row indexes in ascending order in NZSUB -**-------------------------------------------------------------- -*/ -{ - int i, k; - int *xlnzt, *nzsubt, *lnzt, *nzt; - int errcode = 0; - - xlnzt = (int *) calloc(n+2, sizeof(int)); - nzsubt = (int *) calloc(Ncoeffs+2, sizeof(int)); - lnzt = (int *) calloc(Ncoeffs+2, sizeof(int)); - nzt = (int *) calloc(n+2, sizeof(int)); - ERRCODE(MEMCHECK(xlnzt)); - ERRCODE(MEMCHECK(nzsubt)); - ERRCODE(MEMCHECK(lnzt)); - ERRCODE(MEMCHECK(nzt)); - if (!errcode) - { - - /* Count # non-zeros in each row */ - for (i=1; i<=n; i++) nzt[i] = 0; - for (i=1; i<=n; i++) - { - for (k=XLNZ[i]; k= istrt) - { - - /* Before modification, update vectors 'first' */ - /* and 'link' for future modification steps. */ - first[k] = istrt; - isub = NZSUB[istrt]; - link[k] = link[isub]; - link[isub] = k; - - /* The actual mod is saved in vector 'temp'. */ - for (i=istrt; i<=istop; i++) - { - isub = NZSUB[i]; - temp[isub] += Aij[LNZ[i]]*ljk; - } - } - k = newk; - } - - /* Apply the modifications accumulated */ - /* in 'temp' to column L(*,j). */ - diagj = Aii[j] - diagj; - if (diagj <= 0.0) /* Check for ill-conditioning */ - { - errcode = j; - goto ENDLINSOLVE; - } - diagj = sqrt(diagj); - Aii[j] = diagj; - istrt = XLNZ[j]; - istop = XLNZ[j+1] - 1; - if (istop >= istrt) - { - first[j] = istrt; - isub = NZSUB[istrt]; - link[j] = link[isub]; - link[isub] = j; - for (i=istrt; i<=istop; i++) - { - isub = NZSUB[i]; - bj = (Aij[LNZ[i]] - temp[isub])/diagj; - Aij[LNZ[i]] = bj; - temp[isub] = 0.0; - } - } - } /* next j */ - - /* Foward substitution */ - for (j=1; j<=n; j++) - { - bj = B[j]/Aii[j]; - B[j] = bj; - istrt = XLNZ[j]; - istop = XLNZ[j+1] - 1; - if (istop >= istrt) - { - for (i=istrt; i<=istop; i++) - { - isub = NZSUB[i]; - B[isub] -= Aij[LNZ[i]]*bj; - } - } - } - - /* Backward substitution */ - for (j=n; j>=1; j--) - { - bj = B[j]; - istrt = XLNZ[j]; - istop = XLNZ[j+1] - 1; - if (istop >= istrt) - { - for (i=istrt; i<=istop; i++) - { - isub = NZSUB[i]; - bj -= Aij[LNZ[i]]*B[isub]; - } - } - B[j] = bj/Aii[j]; - } - -ENDLINSOLVE: - free(temp); - free(link); - free(first); - return(errcode); -} /* End of linsolve */ - - -/************************ END OF SMATRIX.C ************************/ - +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: smatrix.c + Description: solves a sparse set of linear equations + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 05/15/2019 + ****************************************************************************** +*/ +/* + This module contains the sparse matrix routines used to solve a network's + hydraulic equations. The functions exported by this module are: + createsparse() -- called from openhyd() in HYDRAUL.C + freesparse() -- called from closehyd() in HYDRAUL.C + linsolve() -- called from netsolve() in HYDRAUL.C +*/ + +#include +#include +#include +#include +#include + +#include //For optional timer macros + +#include "text.h" +#include "types.h" +#include "funcs.h" + +// The multiple minimum degree re-ordering routine (see genmmd.c) +extern int genmmd(int *neqns, int *xadj, int *adjncy, int *invp, int *perm, + int *delta, int *dhead, int *qsize, int *llist, int *marker, + int *maxint, int *nofsub); + +// Exported functions +int createsparse(Project *); +void freesparse(Project *); +int linsolve(Smatrix *, int); + +// Local functions +static int allocsmatrix(Smatrix *, int, int); +static int alloclinsolve(Smatrix *, int); +static int localadjlists(Network *, Smatrix *); +static int paralink(Network *, Smatrix *, int, int, int k); +static void xparalinks(Network *); +static int reordernodes(Project *); +static int factorize(Project *); +static int growlist(Project *, int); +static int newlink(Project *, Padjlist); +static int linked(Network *, int, int); +static int addlink(Network *, int, int, int); +static int storesparse(Project *, int); +static int sortsparse(Smatrix *, int); +static void transpose(int, int *, int *, int *, int *, + int *, int *, int *); + + +/************************************************************************* +* Timer macros +**************************************************************************/ + //#define cleartimer(tmr) (tmr = 0.0) + //#define starttimer(tmr) (tmr -= ((double) clock()/CLOCKS_PER_SEC)); + //#define stoptimer(tmr) (tmr += ((double) clock()/CLOCKS_PER_SEC)); + //#define gettimer(tmr) (tmr) + + +/************************************************************************* +* The following data type implements a timer +**************************************************************************/ +// typedef double timer; +// timer SmatrixTimer; + + +int createsparse(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: creates sparse representation of coeff. matrix +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Smatrix *sm = &pr->hydraul.smatrix; + + int errcode = 0; + +// cleartimer(SmatrixTimer); +// starttimer(SmatrixTimer); + + // Allocate sparse matrix data structures + errcode = allocsmatrix(sm, net->Nnodes, net->Nlinks); + if (errcode) return errcode; + + // Build a local version of node-link adjacency lists + // with parallel links removed + errcode = localadjlists(net, sm); + if (errcode) return errcode; + + // Re-order nodes to minimize number of non-zero coeffs. + // in factorized solution matrix + ERRCODE(reordernodes(pr)); + + // Factorize solution matrix by updating adjacency lists + // with non-zero connections due to fill-ins + sm->Ncoeffs = net->Nlinks; + ERRCODE(factorize(pr)); + + // Allocate memory for sparse storage of positions of non-zero + // coeffs. and store these positions in vector NZSUB + ERRCODE(storesparse(pr, net->Njuncs)); + + // Free memory used for local adjacency lists and sort + // row indexes in NZSUB to optimize linsolve() + freeadjlists(net); + ERRCODE(sortsparse(sm, net->Njuncs)); + + // Allocate memory used by linear eqn. solver + ERRCODE(alloclinsolve(sm, net->Nnodes)); + + // Re-build adjacency lists for future use + ERRCODE(buildadjlists(net)); + return errcode; +} + + +int allocsmatrix(Smatrix *sm, int Nnodes, int Nlinks) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: allocates memory for representing a sparse matrix +**-------------------------------------------------------------- +*/ +{ + int errcode = 0; + + // Memory for linear eqn. solver allocated in alloclinsolve(). + sm->Aij = NULL; + sm->Aii = NULL; + sm->F = NULL; + sm->temp = NULL; + sm->link = NULL; + sm->first = NULL; + + // Memory for representing sparse matrix data structure + sm->Order = (int *) calloc(Nnodes+1, sizeof(int)); + sm->Row = (int *) calloc(Nnodes+1, sizeof(int)); + sm->Ndx = (int *) calloc(Nlinks+1, sizeof(int)); + ERRCODE(MEMCHECK(sm->Order)); + ERRCODE(MEMCHECK(sm->Row)); + ERRCODE(MEMCHECK(sm->Ndx)); + return errcode; +} + + +int alloclinsolve(Smatrix *sm, int n) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: allocates memory used by linear eqn. solver. +**-------------------------------------------------------------- +*/ +{ + int errcode = 0; + n = n + 1; // All arrays are 1-based + + sm->Aij = (double *)calloc(sm->Ncoeffs + 1, sizeof(double)); + sm->Aii = (double *)calloc(n, sizeof(double)); + sm->F = (double *)calloc(n, sizeof(double)); + sm->temp = (double *)calloc(n, sizeof(double)); + sm->link = (int *)calloc(n, sizeof(int)); + sm->first = (int *)calloc(n, sizeof(int)); + ERRCODE(MEMCHECK(sm->Aij)); + ERRCODE(MEMCHECK(sm->Aii)); + ERRCODE(MEMCHECK(sm->F)); + ERRCODE(MEMCHECK(sm->temp)); + ERRCODE(MEMCHECK(sm->link)); + ERRCODE(MEMCHECK(sm->first)); + return errcode; +} + + +void freesparse(Project *pr) +/* +**---------------------------------------------------------------- +** Input: None +** Output: None +** Purpose: Frees memory used for sparse matrix storage +**---------------------------------------------------------------- +*/ +{ + Smatrix *sm = &pr->hydraul.smatrix; + +// stoptimer(SmatrixTimer); +// printf("\n"); +// printf("\n Processing Time = %7.3f s", gettimer(SmatrixTimer)); +// printf("\n"); + + FREE(sm->Order); + FREE(sm->Row); + FREE(sm->Ndx); + FREE(sm->XLNZ); + FREE(sm->NZSUB); + FREE(sm->LNZ); + + FREE(sm->Aij); + FREE(sm->Aii); + FREE(sm->F); + FREE(sm->temp); + FREE(sm->link); + FREE(sm->first); +} + + +int localadjlists(Network *net, Smatrix *sm) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: builds linked list of non-parallel links adjacent to each node +**-------------------------------------------------------------- +*/ +{ + int i, j, k; + int pmark = 0; // parallel link marker + int errcode = 0; + Padjlist alink; + + // Create an array of adjacency lists + freeadjlists(net); + net->Adjlist = (Padjlist *)calloc(net->Nnodes + 1, sizeof(Padjlist)); + if (net->Adjlist == NULL) return 101; + + // For each link, update adjacency lists of its end nodes + for (k = 1; k <= net->Nlinks; k++) + { + i = net->Link[k].N1; + j = net->Link[k].N2; + pmark = paralink(net, sm, i, j, k); // Parallel link check + + // Include link in start node i's list + alink = (struct Sadjlist *) malloc(sizeof(struct Sadjlist)); + if (alink == NULL) return(101); + if (!pmark) alink->node = j; + else alink->node = 0; // Parallel link marker + alink->link = k; + alink->next = net->Adjlist[i]; + net->Adjlist[i] = alink; + + // Include link in end node j's list + alink = (struct Sadjlist *) malloc(sizeof(struct Sadjlist)); + if (alink == NULL) return(101); + if (!pmark) alink->node = i; + else alink->node = 0; // Parallel link marker + alink->link = k; + alink->next = net->Adjlist[j]; + net->Adjlist[j] = alink; + } + + // Remove parallel links from adjacency lists + xparalinks(net); + return errcode; +} + + +int paralink(Network *net, Smatrix *sm, int i, int j, int k) +/* +**-------------------------------------------------------------- +** Input: i = index of start node of link +** j = index of end node of link +** k = link index +** Output: returns 1 if link k parallels another link, else 0 +** Purpose: checks for parallel links between nodes i and j +** +**-------------------------------------------------------------- +*/ +{ + Padjlist alink; + for (alink = net->Adjlist[i]; alink != NULL; alink = alink->next) + { + // Link || to k (same end nodes) + if (alink->node == j) + { + // Assign Ndx entry to this link + sm->Ndx[k] = alink->link; + return(1); + } + } + // Ndx entry if link not parallel + sm->Ndx[k] = k; + return(0); +} + + +void xparalinks(Network *net) +/* +**-------------------------------------------------------------- +** Input: none +** Output: none +** Purpose: removes parallel links from nodal adjacency lists +**-------------------------------------------------------------- +*/ +{ + int i; + Padjlist alink, // Current item in adjacency list + blink; // Previous item in adjacency list + + // Scan adjacency list of each node + for (i = 1; i <= net->Nnodes; i++) + { + alink = net->Adjlist[i]; // First item in list + blink = NULL; + while (alink != NULL) + { + if (alink->node == 0) // Parallel link marker found + { + if (blink == NULL) // This holds at start of list + { + net->Adjlist[i] = alink->next; + free(alink); // Remove item from list + alink = net->Adjlist[i]; + } + else // This holds for interior of list + { + blink->next = alink->next; + free(alink); // Remove item from list + alink = blink->next; + } + } + else + { + blink = alink; // Move to next item in list + alink = alink->next; + } + } + } +} + + +int reordernodes(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns 1 if successful, 0 if not +** Purpose: re-orders nodes to minimize # of non-zeros that +** will appear in factorized solution matrix +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Smatrix *sm = &pr->hydraul.smatrix; + + int k, knode, m, njuncs, nlinks; + int delta = -1; + int nofsub = 0; + int maxint = INT_MAX; //defined in limits.h + int errcode; + Padjlist alink; + + // Local versions of node adjacency lists + int *adjncy = NULL; + int *xadj = NULL; + + // Work arrays + int *dhead = NULL; + int *qsize = NULL; + int *llist = NULL; + int *marker = NULL; + + // Default ordering + for (k = 1; k <= net->Nnodes; k++) + { + sm->Row[k] = k; + sm->Order[k] = k; + } + njuncs = net->Njuncs; + nlinks = net->Nlinks; + + // Allocate memory + adjncy = (int *) calloc(2*nlinks+1, sizeof(int)); + xadj = (int *) calloc(njuncs+2, sizeof(int)); + dhead = (int *) calloc(njuncs+1, sizeof(int)); + qsize = (int *) calloc(njuncs + 1, sizeof(int)); + llist = (int *) calloc(njuncs + 1, sizeof(int)); + marker = (int *) calloc(njuncs + 1, sizeof(int)); + if (adjncy && xadj && dhead && qsize && llist && marker) + { + // Create local versions of node adjacency lists + xadj[1] = 1; + m = 1; + for (k = 1; k <= njuncs; k++) + { + for (alink = net->Adjlist[k]; alink != NULL; alink = alink->next) + { + knode = alink->node; + if (knode > 0 && knode <= njuncs) + { + adjncy[m] = knode; + m++; + } + } + xadj[k+1] = m; + } + + // Generate a multiple minimum degree node re-ordering + genmmd(&njuncs, xadj, adjncy, sm->Row, sm->Order, &delta, + dhead, qsize, llist, marker, &maxint, &nofsub); + errcode = 0; + } + else errcode = 101; //insufficient memory + + // Free memory + FREE(adjncy); + FREE(xadj); + FREE(dhead); + FREE(qsize); + FREE(llist); + FREE(marker); + return errcode; +} + + +int factorize(Project *pr) +/* +**-------------------------------------------------------------- +** Input: none +** Output: returns error code +** Purpose: symbolically factorizes the solution matrix in +** terms of its adjacency lists +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Smatrix *sm = &pr->hydraul.smatrix; + + int k, knode; + int errcode = 0; + Padjlist alink; + + // Find degree of each junction node + sm->Degree = (int *)calloc(net->Nnodes + 1, sizeof(int)); + if (sm->Degree == NULL) return 101; + + // NOTE: For purposes of node re-ordering, Tanks (nodes with + // indexes above Njuncs) have zero degree of adjacency. + + for (k = 1; k <= net->Njuncs; k++) + { + for (alink = net->Adjlist[k]; alink != NULL; alink = alink->next) + { + if (alink->node > 0) sm->Degree[k]++; + } + } + + // Augment each junction's adjacency list to account for + // new connections created when solution matrix is solved. + // NOTE: Only junctions (indexes <= Njuncs) appear in solution matrix. + for (k = 1; k <= net->Njuncs; k++) // Examine each junction + { + knode = sm->Order[k]; // Re-ordered index + if (!growlist(pr, knode)) // Augment adjacency list + { + errcode = 101; + break; + } + sm->Degree[knode] = 0; // In-activate node + } + free(sm->Degree); + return errcode; +} + + +int growlist(Project *pr, int knode) +/* +**-------------------------------------------------------------- +** Input: knode = node index +** Output: returns 1 if successful, 0 if not +** Purpose: creates new entries in knode's adjacency list for +** all unlinked pairs of active nodes that are +** adjacent to knode +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Smatrix *sm = &pr->hydraul.smatrix; + + int node; + Padjlist alink; + + // Iterate through all nodes connected to knode + for (alink = net->Adjlist[knode]; alink != NULL; alink = alink -> next) + { + node = alink->node; // End node of connecting link + if (node > 0 && sm->Degree[node] > 0) // End node is active + { + sm->Degree[node]--; // Reduce degree of adjacency + if (!newlink(pr, alink)) // Add to adjacency list + { + return 0; + } + } + } + return 1; +} + + +int newlink(Project *pr, Padjlist alink) +/* +**-------------------------------------------------------------- +** Input: alink = element of node's adjacency list +** Output: returns 1 if successful, 0 if not +** Purpose: links end of current adjacent link to end nodes of +** all links that follow it on adjacency list +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Smatrix *sm = &pr->hydraul.smatrix; + + int inode, jnode; + Padjlist blink; + + // Scan all entries in adjacency list that follow anode. + inode = alink->node; // End node of connection to anode + for (blink = alink->next; blink != NULL; blink = blink->next) + { + jnode = blink->node; // End node of next connection + + // If jnode still active, and inode not connected to jnode, + // then add a new connection between inode and jnode. + if (jnode > 0 && sm->Degree[jnode] > 0) // jnode still active + { + if (!linked(net, inode, jnode)) // inode not linked to jnode + { + // Since new connection represents a non-zero coeff. + // in the solution matrix, update the coeff. count. + sm->Ncoeffs++; + + // Update adjacency lists for inode & jnode to + // reflect the new connection. + if (!addlink(net, inode, jnode, sm->Ncoeffs)) return 0; + if (!addlink(net, jnode, inode, sm->Ncoeffs)) return 0; + sm->Degree[inode]++; + sm->Degree[jnode]++; + } + } + } + return 1; +} + + +int linked(Network *net, int i, int j) +/* +**-------------------------------------------------------------- +** Input: i = node index +** j = node index +** Output: returns 1 if nodes i and j are linked, 0 if not +** Purpose: checks if nodes i and j are already linked. +**-------------------------------------------------------------- +*/ +{ + Padjlist alink; + for (alink = net->Adjlist[i]; alink != NULL; alink = alink->next) + { + if (alink->node == j) return 1; + } + return 0; +} + + +int addlink(Network *net, int i, int j, int n) +/* +**-------------------------------------------------------------- +** Input: i = node index +** j = node index +** n = link index +** Output: returns 1 if successful, 0 if not +** Purpose: augments node i's adjacency list with node j +**-------------------------------------------------------------- +*/ +{ + Padjlist alink; + alink = (struct Sadjlist *) malloc(sizeof(struct Sadjlist)); + if (alink == NULL) return 0; + alink->node = j; + alink->link = n; + alink->next = net->Adjlist[i]; + net->Adjlist[i] = alink; + return 1; +} + + +int storesparse(Project *pr, int n) +/* +**-------------------------------------------------------------- +** Input: n = number of rows in solution matrix +** Output: returns error code +** Purpose: stores row indexes of non-zeros of each column of +** lower triangular portion of factorized matrix +**-------------------------------------------------------------- +*/ +{ + Network *net = &pr->network; + Smatrix *sm = &pr->hydraul.smatrix; + + int i, ii, j, k, l, m; + int errcode = 0; + Padjlist alink; + + // Allocate sparse matrix storage + sm->XLNZ = (int *) calloc(n+2, sizeof(int)); + sm->NZSUB = (int *) calloc(sm->Ncoeffs+2, sizeof(int)); + sm->LNZ = (int *) calloc(sm->Ncoeffs+2, sizeof(int)); + ERRCODE(MEMCHECK(sm->XLNZ)); + ERRCODE(MEMCHECK(sm->NZSUB)); + ERRCODE(MEMCHECK(sm->LNZ)); + if (errcode) return errcode; + + // Generate row index pointers for each column of matrix + k = 0; + sm->XLNZ[1] = 1; + for (i = 1; i <= n; i++) // column + { + m = 0; + ii = sm->Order[i]; + for (alink = net->Adjlist[ii]; alink != NULL; alink = alink->next) + { + if (alink->node == 0) continue; + j = sm->Row[alink->node]; // row + l = alink->link; + if (j > i && j <= n) + { + m++; + k++; + sm->NZSUB[k] = j; + sm->LNZ[k] = l; + } + } + sm->XLNZ[i+1] = sm->XLNZ[i] + m; + } + return errcode; +} + + +int sortsparse(Smatrix *sm, int n) +/* +**-------------------------------------------------------------- +** Input: n = number of rows in solution matrix +** Output: returns eror code +** Purpose: puts row indexes in ascending order in NZSUB +**-------------------------------------------------------------- +*/ +{ + int i, k; + int *xlnzt, *nzsubt, *lnzt, *nzt; + int errcode = 0; + + int *LNZ = sm->LNZ; + int *XLNZ = sm->XLNZ; + int *NZSUB = sm->NZSUB; + + xlnzt = (int *) calloc(n+2, sizeof(int)); + nzsubt = (int *) calloc(sm->Ncoeffs+2, sizeof(int)); + lnzt = (int *) calloc(sm->Ncoeffs+2, sizeof(int)); + nzt = (int *) calloc(n+2, sizeof(int)); + ERRCODE(MEMCHECK(xlnzt)); + ERRCODE(MEMCHECK(nzsubt)); + ERRCODE(MEMCHECK(lnzt)); + ERRCODE(MEMCHECK(nzt)); + if (!errcode) + { + // Count # non-zeros in each row + for (i = 1; i <= n; i++) nzt[i] = 0; + for (i = 1; i <= n; i++) + { + for (k = XLNZ[i]; k < XLNZ[i+1]; k++) nzt[NZSUB[k]]++; + } + xlnzt[1] = 1; + for (i = 1; i <= n; i++) xlnzt[i+1] = xlnzt[i] + nzt[i]; + + // Transpose matrix twice to order column indexes + transpose(n, XLNZ, NZSUB, LNZ, xlnzt, nzsubt, lnzt, nzt); + transpose(n, xlnzt, nzsubt, lnzt, XLNZ, NZSUB, LNZ, nzt); + } + + // Reclaim memory + free(xlnzt); + free(nzsubt); + free(lnzt); + free(nzt); + return errcode; +} + + +void transpose(int n, int *il, int *jl, int *xl, int *ilt, int *jlt, + int *xlt, int *nzt) +/* +**--------------------------------------------------------------------- +** Input: n = matrix order +** il,jl,xl = sparse storage scheme for original matrix +** nzt = work array +** Output: ilt,jlt,xlt = sparse storage scheme for transposed matrix +** Purpose: Determines sparse storage scheme for transpose of a matrix +**--------------------------------------------------------------------- +*/ +{ + int i, j, k, kk; + + for (i = 1; i <= n; i++) nzt[i] = 0; + for (i = 1; i <= n; i++) + { + for (k = il[i]; k < il[i+1]; k++) + { + j = jl[k]; + kk = ilt[j] + nzt[j]; + jlt[kk] = i; + xlt[kk] = xl[k]; + nzt[j]++; + } + } +} + + +int linsolve(Smatrix *sm, int n) +/* +**-------------------------------------------------------------- +** Input: sm = sparse matrix struct + n = number of equations +** Output: sm->F = solution values +** returns 0 if solution found, or index of +** equation causing system to be ill-conditioned +** Purpose: solves sparse symmetric system of linear +** equations using Cholesky factorization +** +** NOTE: This procedure assumes that the solution matrix has +** been symbolically factorized with the positions of +** the lower triangular, off-diagonal, non-zero coeffs. +** stored in the following integer arrays: +** XLNZ (start position of each column in NZSUB) +** NZSUB (row index of each non-zero in each column) +** LNZ (position of each NZSUB entry in Aij array) +** +** This procedure has been adapted from subroutines GSFCT and +** GSSLV in the book "Computer Solution of Large Sparse +** Positive Definite Systems" by A. George and J. W-H Liu +** (Prentice-Hall, 1981). +**-------------------------------------------------------------- +*/ +{ + double *Aii = sm->Aii; + double *Aij = sm->Aij; + double *B = sm->F; + double *temp = sm->temp; + int *LNZ = sm->LNZ; + int *XLNZ = sm->XLNZ; + int *NZSUB = sm->NZSUB; + int *link = sm->link; + int *first = sm->first; + + int i, istop, istrt, isub, j, k, kfirst, newk; + double bj, diagj, ljk; + + memset(temp, 0, (n + 1) * sizeof(double)); + memset(link, 0, (n + 1) * sizeof(int)); + memset(first, 0, (n + 1) * sizeof(int)); + + // Begin numerical factorization of matrix A into L + // Compute column L(*,j) for j = 1,...n + for (j = 1; j <= n; j++) + { + // For each column L(*,k) that affects L(*,j): + diagj = 0.0; + newk = link[j]; + k = newk; + while (k != 0) + { + // Outer product modification of L(*,j) by + // L(*,k) starting at first[k] of L(*,k) + newk = link[k]; + kfirst = first[k]; + ljk = Aij[LNZ[kfirst]]; + diagj += ljk*ljk; + istrt = kfirst + 1; + istop = XLNZ[k+1] - 1; + if (istop >= istrt) + { + + // Before modification, update vectors 'first' + // and 'link' for future modification steps + first[k] = istrt; + isub = NZSUB[istrt]; + link[k] = link[isub]; + link[isub] = k; + + // The actual mod is saved in vector 'temp' + for (i = istrt; i <= istop; i++) + { + isub = NZSUB[i]; + temp[isub] += Aij[LNZ[i]]*ljk; + } + } + k = newk; + } + + // Apply the modifications accumulated + // in 'temp' to column L(*,j) + diagj = Aii[j] - diagj; + if (diagj <= 0.0) // Check for ill-conditioning + { + return j; + } + diagj = sqrt(diagj); + Aii[j] = diagj; + istrt = XLNZ[j]; + istop = XLNZ[j+1] - 1; + if (istop >= istrt) + { + first[j] = istrt; + isub = NZSUB[istrt]; + link[j] = link[isub]; + link[isub] = j; + for (i = istrt; i <= istop; i++) + { + isub = NZSUB[i]; + bj = (Aij[LNZ[i]] - temp[isub])/diagj; + Aij[LNZ[i]] = bj; + temp[isub] = 0.0; + } + } + } // next j + + // Foward substitution + for (j = 1; j <= n; j++) + { + bj = B[j]/Aii[j]; + B[j] = bj; + istrt = XLNZ[j]; + istop = XLNZ[j+1] - 1; + if (istop >= istrt) + { + for (i = istrt; i <= istop; i++) + { + isub = NZSUB[i]; + B[isub] -= Aij[LNZ[i]]*bj; + } + } + } + + // Backward substitution + for (j = n; j >= 1; j--) + { + bj = B[j]; + istrt = XLNZ[j]; + istop = XLNZ[j+1] - 1; + if (istop >= istrt) + { + for (i = istrt; i <= istop; i++) + { + isub = NZSUB[i]; + bj -= Aij[LNZ[i]]*B[isub]; + } + } + B[j] = bj/Aii[j]; + } + return 0; +} diff --git a/src/text.h b/src/text.h index 4f3225a..a4ac84b 100755 --- a/src/text.h +++ b/src/text.h @@ -1,539 +1,497 @@ -/* -**************************************************** - - String Constants for EPANET Program - -VERSION: 2.00 -DATE: 5/8/00 - 10/25/00 - 8/15/07 (2.00.11) - 2/14/08 (2.00.12) -AUTHOR: L. Rossman - US EPA - NRMRL - -**************************************************** -*/ -/* ------------ Keyword Dictionary ---------- */ -#ifndef TEXT_H -#define TEXT_H - -#define w_USE "USE" -#define w_SAVE "SAVE" - -#define w_NONE "NONE" -#define w_ALL "ALL" - -#define w_CHEM "CHEM" -#define w_AGE "AGE" -#define w_TRACE "TRACE" - -#define w_SYSTEM "SYST" -#define w_JUNC "Junc" -#define w_RESERV "Reser" -#define w_TANK "Tank" -#define w_CV "CV" -#define w_PIPE "Pipe" -#define w_PUMP "Pump" -#define w_VALVE "Valve" -#define w_PRV "PRV" -#define w_PSV "PSV" -#define w_PBV "PBV" -#define w_FCV "FCV" -#define w_TCV "TCV" -#define w_GPV "GPV" - -#define w_OPEN "OPEN" -#define w_CLOSED "CLOSED" -#define w_ACTIVE "ACTIVE" -#define w_TIME "TIME" -#define w_ABOVE "ABOVE" -#define w_BELOW "BELOW" -#define w_PRECISION "PREC" -#define w_IS "IS" -#define w_NOT "NOT" - -#define w_ADD "ADD" -#define w_MULTIPLY "MULT" - -#define w_LIMITING "LIMIT" -#define w_ORDER "ORDER" -#define w_GLOBAL "GLOB" -#define w_BULK "BULK" -#define w_WALL "WALL" - -#define w_PAGE "PAGE" -#define w_STATUS "STATUS" -#define w_SUMMARY "SUMM" -#define w_MESSAGES "MESS" -#define w_ENERGY "ENER" -#define w_NODE "NODE" -#define w_LINK "LINK" -#define w_FILE "FILE" -#define w_YES "YES" -#define w_NO "NO" -#define w_FULL "FULL" - -#define w_HW "H-W" -#define w_DW "D-W" -#define w_CM "C-M" - -#define w_CFS "CFS" -#define w_GPM "GPM" -#define w_MGD "MGD" -#define w_IMGD "IMGD" -#define w_AFD "AFD" -#define w_LPS "LPS" -#define w_LPM "LPM" -#define w_MLD "MLD" -#define w_CMH "CMH" -#define w_CMD "CMD" -#define w_SI "SI" - -#define w_PSI "PSI" -#define w_KPA "KPA" -#define w_METERS "METERS" - -#define w_ELEV "ELEV" -#define w_DEMAND "DEMA" -#define w_HEAD "HEAD" -#define w_PRESSURE "PRES" -#define w_QUALITY "QUAL" - -#define w_DIAM "DIAM" -#define w_FLOW "FLOW" -#define w_ROUGHNESS "ROUG" -#define w_VELOCITY "VELO" -#define w_HEADLOSS "HEADL" -#define w_SETTING "SETT" -#define w_POWER "POWE" -#define w_VOLUME "VOLU" -#define w_CLOCKTIME "CLOCKTIME" -#define w_FILLTIME "FILL" -#define w_DRAINTIME "DRAI" -#define w_GRADE "GRADE" -#define w_LEVEL "LEVEL" - -#define w_DURATION "DURA" -#define w_HYDRAULIC "HYDR" -#define w_MINIMUM "MINI" -#define w_PATTERN "PATT" -#define w_REPORT "REPO" -#define w_START "STAR" - -#define w_UNITS "UNIT" -#define w_MAP "MAP" -#define w_VERIFY "VERI" -#define w_VISCOSITY "VISC" -#define w_DIFFUSIVITY "DIFF" -#define w_SPECGRAV "SPEC" -#define w_TRIALS "TRIAL" -#define w_ACCURACY "ACCU" -#define w_SEGMENTS "SEGM" -#define w_TOLERANCE "TOLER" -#define w_EMITTER "EMIT" - -#define w_PRICE "PRICE" -#define w_DMNDCHARGE "DEMAN" - -#define w_HTOL "HTOL" -#define w_QTOL "QTOL" -#define w_RQTOL "RQTOL" -#define w_CHECKFREQ "CHECKFREQ" -#define w_MAXCHECK "MAXCHECK" -#define w_DAMPLIMIT "DAMPLIMIT" //(2.00.12 - LR) - -#define w_SECONDS "SEC" -#define w_MINUTES "MIN" -#define w_HOURS "HOU" -#define w_DAYS "DAY" -#define w_AM "AM" -#define w_PM "PM" - -#define w_CONCEN "CONCEN" -#define w_MASS "MASS" -#define w_SETPOINT "SETPOINT" -#define w_FLOWPACED "FLOWPACED" - -#define w_PATTERN "PATT" -#define w_CURVE "CURV" - -#define w_EFFIC "EFFI" -#define w_HEAD "HEAD" -#define w_POWER "POWE" -#define w_SPEED "SPEE" - -#define w_MIXED "MIXED" -#define w_2COMP "2COMP" -#define w_FIFO "FIFO" -#define w_LIFO "LIFO" - -#define w_STATISTIC "STAT" -#define w_AVG "AVERAGE" -#define w_MIN "MINIMUM" -#define w_MAX "MAXIMUM" -#define w_RANGE "RANGE" - -#define w_UNBALANCED "UNBA" -#define w_STOP "STOP" -#define w_CONTINUE "CONT" - -#define w_RULE "RULE" -#define w_IF "IF" -#define w_AND "AND" -#define w_OR "OR" -#define w_THEN "THEN" -#define w_ELSE "ELSE" -#define w_PRIORITY "PRIO" - -/* ---------Input Section Names ---------- */ -#define s_TITLE "[TITL" -#define s_JUNCTIONS "[JUNC" -#define s_RESERVOIRS "[RESE" -#define s_TANKS "[TANK" -#define s_PIPES "[PIPE" -#define s_PUMPS "[PUMP" -#define s_VALVES "[VALV" -#define s_CONTROLS "[CONT" -#define s_RULES "[RULE" -#define s_DEMANDS "[DEMA" -#define s_SOURCES "[SOUR" -#define s_EMITTERS "[EMIT" -#define s_PATTERNS "[PATT" -#define s_CURVES "[CURV" -#define s_QUALITY "[QUAL" -#define s_STATUS "[STAT" -#define s_ROUGHNESS "[ROUG" -#define s_ENERGY "[ENER" -#define s_REACTIONS "[REAC" -#define s_MIXING "[MIXI" -#define s_REPORT "[REPO" -#define s_TIMES "[TIME" -#define s_OPTIONS "[OPTI" -#define s_COORDS "[COOR" -#define s_VERTICES "[VERT" -#define s_LABELS "[LABE" -#define s_BACKDROP "[BACK" -#define s_TAGS "[TAGS" -#define s_END "[END" - -/* ---------------- Units ---------------- */ -/*** Limit units to MAXID or less characters ***/ -#define u_CFS "cfs" -#define u_GPM "gpm" -#define u_AFD "a-f/d" -#define u_MGD "mgd" -#define u_IMGD "Imgd" -#define u_LPS "L/s" -#define u_LPM "Lpm" -#define u_CMH "m3/h" -#define u_CMD "m3/d" -#define u_MLD "ML/d" -#define u_MGperL "mg/L" -#define u_UGperL "ug/L" -#define u_HOURS "hrs" -#define u_MINUTES "min" -#define u_PERCENT "% from" -#define u_METERS "m" -#define u_MMETERS "mm" -#define u_MperSEC "m/s" -#define u_SQMperSEC "sq m/sec" -#define u_per1000M "/1000m" -#define u_KW "kw" -#define u_FEET "ft" -#define u_INCHES "in" -#define u_PSI "psi" -#define u_KPA "kPa" -#define u_FTperSEC "fps" -#define u_SQFTperSEC "sq ft/sec" -#define u_per1000FT "/1000ft" -#define u_HP "hp" - -/* -------------- Curve Types ----------------- */ -#define c_HEADLOSS "HEADLOSS" -#define c_PUMP "PUMP" -#define c_EFFIC "EFFIC" -#define c_VOLUME "VOLUME" - -/* ------------------ Text Phrases ------------------- */ -#define t_ABOVE "above" -#define t_BELOW "below" -#define t_HW "Hazen-Williams" -#define t_DW "Darcy-Weisbach" -#define t_CM "Chezy-Manning" -#define t_CHEMICAL "Chemical" -#define t_XHEAD "closed because cannot deliver head" -#define t_TEMPCLOSED "temporarily closed" -#define t_CLOSED "closed" -#define t_OPEN "open" -#define t_ACTIVE "active" -#define t_XFLOW "open but exceeds maximum flow" -#define t_XFCV "open but cannot deliver flow" -#define t_XPRESSURE "open but cannot deliver pressure" -#define t_FILLING "filling" -#define t_EMPTYING "emptying" - -#define t_ELEV "Elevation" -#define t_DEMAND "Demand" -#define t_HEAD "Head" -#define t_PRESSURE "Pressure" -#define t_QUALITY "Quality" -#define t_LENGTH "Length" -#define t_DIAM "Diameter" -#define t_FLOW "Flow" -#define t_VELOCITY "Velocity" -#define t_HEADLOSS "Headloss" -#define t_LINKQUAL "Quality" -#define t_LINKSTATUS "State" -#define t_SETTING "Setting" -#define t_REACTRATE "Reaction" -#define t_FRICTION "F-Factor" - -#define t_NODEID "Node" -#define t_LINKID "Link" -#define t_PERDAY "/day" - -#define t_JUNCTION "Junction" -#define t_RESERVOIR "Reservoir" -#define t_TANK "Tank" -#define t_PIPE "Pipe" -#define t_PUMP "Pump" -#define t_VALVE "Valve" -#define t_CONTROL "Control" -#define t_RULE "Rule" -#define t_DEMANDFOR "Demand for Node" -#define t_SOURCE "Source" -#define t_EMITTER "Emitter" -#define t_PATTERN "Pattern" -#define t_CURVE "Curve" -#define t_STATUS "Status" -#define t_ROUGHNESS "Roughness" -#define t_ENERGY "Energy" -#define t_REACTION "Reaction" -#define t_MIXING "Mixing" -#define t_REPORT "Report" -#define t_TIME "Times" -#define t_OPTION "Options" -#define t_RULES_SECT "[RULES] section" -#define t_HALTED " EXECUTION HALTED." -#define t_FUNCCALL "function call" -#define t_CONTINUED " (continued)" -#define t_perM3 " /m3" -#define t_perMGAL "/Mgal" -#define t_DIFFER "DIFFERENTIAL" - - -/* ------------------ Format Messages ------------------*/ -#define LOGO1 \ -"******************************************************************" -#define LOGO2 \ -"* E P A N E T *" -#define LOGO3 \ -"* Hydraulic and Water Quality *" -#define LOGO4 \ -"* Analysis for Pipe Networks *" -#define LOGO5 \ -"* Version %d.%d *" -#define LOGO6 \ -"******************************************************************" -#define FMT01 "\n... EPANET Version %d.%d\n" -#define FMT02 "\n o Retrieving network data" -#define FMT03 "\n Correct syntax is:\n epanet \n" -#define FMT04 "\n Cannot use duplicate file names." -#define FMT05 "\n Cannot open input file " -#define FMT06 "\n Cannot open report file " -#define FMT07 "\n Cannot open output file " -#define FMT08 "\n Cannot open temporary output file" -#define FMT09 "\n\n... EPANET completed.\n" -#define FMT10 "\n\n... EPANET completed. There are warnings.\n" -#define FMT11 "\n\n... EPANET completed. There are errors.\n" -#define FMT14 "\n o Computing hydraulics at hour " -#define FMT15 "\n o Computing water quality at hour " -#define FMT16 "\n o Transferring results to file" -#define FMT17 "\n o Writing output report to " -#define FMT18 " Page 1 " -#define FMT19 " Input Data File ................... %s" -#define FMT20 " Number of Junctions................ %-d" -#define FMT21a " Number of Reservoirs............... %-d" -#define FMT21b " Number of Tanks ................... %-d" -#define FMT22 " Number of Pipes ................... %-d" -#define FMT23 " Number of Pumps ................... %-d" -#define FMT24 " Number of Valves .................. %-d" -#define FMT25 " Headloss Formula .................. %s" -#define FMT26 " Hydraulic Timestep ................ %-.2f %s" -#define FMT27 " Hydraulic Accuracy ................ %-.6f" - -#define FMT27a " Status Check Frequency ............ %-d" //(2.00.12 - LR) -#define FMT27b " Maximum Trials Checked ............ %-d" //(2.00.12 - LR) -#define FMT27c " Damping Limit Threshold ........... %-.6f" //(2.00.12 - LR) - -#define FMT28 " Maximum Trials .................... %-d" -#define FMT29 " Quality Analysis .................. None" -#define FMT30 " Quality Analysis .................. %s" -#define FMT31 " Quality Analysis .................. Trace From Node %s" -#define FMT32 " Quality Analysis .................. Age" -#define FMT33 " Water Quality Time Step ........... %-.2f min" -#define FMT34 " Water Quality Tolerance ........... %-.2f %s" -#define FMT36 " Specific Gravity .................. %-.2f" -#define FMT37a " Relative Kinematic Viscosity ...... %-.2f" -#define FMT37b " Relative Chemical Diffusivity ..... %-.2f" -#define FMT38 " Demand Multiplier ................. %-.2f" -#define FMT39 " Total Duration .................... %-.2f %s" -#define FMT40 " Reporting Criteria:" -#define FMT41 " No Nodes" -#define FMT42 " All Nodes" -#define FMT43 " Selected Nodes" -#define FMT44 " No Links" -#define FMT45 " All Links" -#define FMT46 " Selected Links" -#define FMT47 " with %s below %-.2f %s" -#define FMT48 " with %s above %-.2f %s" - -/* ---------- Status Report Format Strings ------------ */ -#define FMT49 "Hydraulic Status:" - -/*** Updated 6/24/02 ***/ -#define FMT50 "%10s: Tank %s is %s at %-.2f %s" -#define FMT51 "%10s: Reservoir %s is %s" -#define FMT52 "%10s: %s %s %s" -#define FMT53 "%10s: %s %s changed from %s to %s" -#define FMT54 "%10s: %s %s changed by %s %s control" -#define FMT55 "%10s: %s %s changed by timer control" -#define FMT56 " %s %s setting changed to %-.2f" -#define FMT57 " %s %s switched from %s to %s" -#define FMT58 "%10s: Balanced after %-d trials" -#define FMT59 "%10s: Unbalanced after %-d trials (flow change = %-.6f)" - -#define FMT60a " Max. flow imbalance is %.4f %s at Node %s" //(2.00.12 - LR) -#define FMT60b " Max. head imbalance is %.4f %s at Link %s" //(2.00.12 - LR) - -#define FMT61 "%10s: Valve %s caused ill-conditioning" -#define FMT62 "%10s: System ill-conditioned at node %s" -#define FMT63 "%10s: %s %s changed by rule %s" -#define FMT64 "%10s: Balancing the network:" -#define FMT65 " Trial %2d: relative flow change = %-.6f" -/*** End of update ***/ - -/* -------------------- Energy Report Table ------------------- */ -#define FMT71 "Energy Usage:" -#define FMT72 \ - " Usage Avg. Kw-hr Avg. Peak Cost" -#define FMT73 \ - "Pump Factor Effic. %s Kw Kw /day" -#define FMT74 "%38s Demand Charge: %9.2f" -#define FMT75 "%38s Total Cost: %9.2f" - -/* -------------------- Node Report Table --------------------- */ -#define FMT76 "%s Node Results:" -#define FMT77 "Node Results:" -#define FMT78 "Node Results at %s hrs:" - -/* -------------------- Link Report Table --------------------- */ -#define FMT79 "%s Link Results:" -#define FMT80 "Link Results:" -#define FMT81 "Link Results at %s hrs:" -#define FMT82 "\n\f\n Page %-d %60.60s\n" - -/* ------------------- Progress Messages ---------------------- */ -#define FMT100 "Retrieving network data..." -#define FMT101 "Computing hydraulics at hour %s" -#define FMT102 "Computing water quality at hour %s" -#define FMT103 "Saving results to file..." -#define FMT104 "Analysis begun %s" -#define FMT105 "Analysis ended %s" - -/*------------------- Error Messages --------------------*/ -#define ERR101 "System Error 101: insufficient memory available." -#define ERR102 "System Error 102: no network data available." -#define ERR103 "System Error 103: hydraulics not initialized." -#define ERR104 "System Error 104: no hydraulics for water quality analysis." -#define ERR105 "System Error 105: water quality not initialized." -#define ERR106 "System Error 106: no results saved to report on." -#define ERR107 "System Error 107: hydraulics supplied from external file." -#define ERR108 "System Error 108: cannot use external file while hydraulics solver is active." -#define ERR109 "System Error 109: cannot change time parameter when solver is active." -#define ERR110 "System Error 110: cannot solve network hydraulic equations." -#define ERR120 "System Error 120: cannot solve water quality transport equations." - -#define ERR200 "Input Error 200: one or more errors in input file." -#define ERR201 \ - "Input Error 201: syntax error in following line of [%s] section:" -#define ERR202 "Input Error 202: %s %s contains illegal numeric value." -#define ERR203 "Input Error 203: %s %s refers to undefined node." -#define ERR204 "Input Error 204: %s %s refers to undefined link." -#define ERR205 "Input Error 205: %s %s refers to undefined time pattern." -#define ERR206 "Input Error 206: %s %s refers to undefined curve." -#define ERR207 "Input Error 207: %s %s attempts to control a CV." - -#define ERR208 "Input Error 208: %s specified for undefined Node %s." -#define ERR209 "Input Error 209: illegal %s value for Node %s." -#define ERR210 "Input Error 210: %s specified for undefined Link %s." -#define ERR211 "Input Error 211: illegal %s value for Link %s." -#define ERR212 "Input Error 212: trace node %.0s %s is undefined." -#define ERR213 "Input Error 213: illegal option value in [%s] section:" -#define ERR214 \ - "Input Error 214: following line of [%s] section contains too many characters:" -#define ERR215 "Input Error 215: %s %s is a duplicate ID." -#define ERR216 "Input Error 216: %s data specified for undefined Pump %s." -#define ERR217 "Input Error 217: invalid %s data for Pump %s." -#define ERR219 "Input Error 219: %s %s illegally connected to a tank." -#define ERR220 "Input Error 220: %s %s illegally connected to another valve." - -/*** Updated on 10/25/00 ***/ -#define ERR222 "Input Error 222: %s %s has same start and end nodes." - -#define ERR223 "Input Error 223: not enough nodes in network" -#define ERR224 "Input Error 224: no tanks or reservoirs in network." -#define ERR225 "Input Error 225: invalid lower/upper levels for Tank %s." -#define ERR226 "Input Error 226: no head curve supplied for Pump %s." -#define ERR227 "Input Error 227: invalid head curve for Pump %s." -#define ERR230 "Input Error 230: Curve %s has nonincreasing x-values." -#define ERR233 "Input Error 233: Node %s is unconnected." -#define ERR240 "Input Error 240: %s %s refers to undefined source." -#define ERR241 "Input Error 241: %s %s refers to undefined control." -#define ERR250 "Input Error 250: function call contains invalid format." -#define ERR251 "Input Error 251: function call contains invalid parameter code." - -#define ERR253 "Input Error 253: Function call error - No such demand category index." -#define ERR254 "Input Error 254: Function call error - Node have no coordinates." -#define ERR255 "Input Error 255: Function call error - Coordinates were not loaded." - -#define ERR301 "File Error 301: identical file names." -#define ERR302 "File Error 302: cannot open input file." -#define ERR303 "File Error 303: cannot open report file." -#define ERR304 "File Error 304: cannot open binary output file." -#define ERR305 "File Error 305: cannot open hydraulics file." -#define ERR306 "File Error 306: hydraulics file does not match network data." -#define ERR307 "File Error 307: cannot read hydraulics file." -#define ERR308 "File Error 308: cannot save results to file." -#define ERR309 "File Error 309: cannot save results to report file." - -#define ERR401 "Sync Error 401: Qstep is not dividable by Hstep. Can't sync." - -#define R_ERR201 "Input Error 201: syntax error in following line of " -#define R_ERR202 "Input Error 202: illegal numeric value in following line of " -#define R_ERR203 "Input Error 203: undefined node in following line of " -#define R_ERR204 "Input Error 204: undefined link in following line of " -#define R_ERR207 "Input Error 207: attempt to control a CV in following line of " - -#define R_ERR221 "Input Error 221: mis-placed clause in following line of " - -/*-------------------- Specific Warning Messages -------------------------*/ -#define WARN01 "WARNING: System unbalanced at %s hrs." -#define WARN02 \ -"WARNING: Maximum trials exceeded at %s hrs. System may be unstable." -#define WARN03a "WARNING: Node %s disconnected at %s hrs" -#define WARN03b "WARNING: %d additional nodes disconnected at %s hrs" -#define WARN03c "WARNING: System disconnected because of Link %s" -#define WARN04 "WARNING: Pump %s %s at %s hrs." -#define WARN05 "WARNING: %s %s %s at %s hrs." -#define WARN06 "WARNING: Negative pressures at %s hrs." - -/*-------------------- General Warning Messages -------------------------*/ -#define WARN1 "WARNING: System hydraulically unbalanced." -#define WARN2 "WARNING: System may be hydraulically unstable." -#define WARN3 "WARNING: System disconnected." -#define WARN4 "WARNING: Pumps cannot deliver enough flow or head." -#define WARN5 "WARNING: Valves cannot deliver enough flow." -#define WARN6 "WARNING: System has negative pressures." - -#endif \ No newline at end of file +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: text.h + Description: string constants used throughout EPANET + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 07/15/2019 + ****************************************************************************** +*/ + +#ifndef TEXT_H +#define TEXT_H + +//------- Keyword Dictionary ------------------------------ + +#define w_USE "USE" +#define w_SAVE "SAVE" + +#define w_NONE "NONE" +#define w_ALL "ALL" + +#define w_CHEM "CHEM" +#define w_AGE "AGE" +#define w_TRACE "TRACE" + +#define w_SYSTEM "SYSTEM" +#define w_JUNC "Junc" +#define w_RESERV "Reser" +#define w_TANK "Tank" +#define w_CV "CV" +#define w_PIPE "Pipe" +#define w_PUMP "Pump" +#define w_VALVE "Valve" +#define w_PRV "PRV" +#define w_PSV "PSV" +#define w_PBV "PBV" +#define w_FCV "FCV" +#define w_TCV "TCV" +#define w_GPV "GPV" + +#define w_OPEN "OPEN" +#define w_CLOSED "CLOSED" +#define w_ACTIVE "ACTIVE" +#define w_TIME "TIME" +#define w_ABOVE "ABOVE" +#define w_BELOW "BELOW" +#define w_PRECISION "PREC" +#define w_IS "IS" +#define w_NOT "NOT" + +#define w_ADD "ADD" +#define w_MULTIPLY "MULT" + +#define w_LIMITING "LIMIT" +#define w_ORDER "ORDER" +#define w_GLOBAL "GLOB" +#define w_BULK "BULK" +#define w_WALL "WALL" + +#define w_PAGE "PAGE" +#define w_STATUS "STATUS" +#define w_SUMMARY "SUMM" +#define w_MESSAGES "MESS" +#define w_ENERGY "ENER" +#define w_NODE "NODE" +#define w_LINK "LINK" +#define w_FILE "FILE" +#define w_YES "YES" +#define w_NO "NO" +#define w_FULL "FULL" + +#define w_HW "H-W" +#define w_DW "D-W" +#define w_CM "C-M" + +#define w_CFS "CFS" +#define w_GPM "GPM" +#define w_MGD "MGD" +#define w_IMGD "IMGD" +#define w_AFD "AFD" +#define w_LPS "LPS" +#define w_LPM "LPM" +#define w_MLD "MLD" +#define w_CMH "CMH" +#define w_CMD "CMD" +#define w_SI "SI" + +#define w_PSI "PSI" +#define w_KPA "KPA" +#define w_METERS "METERS" + +#define w_ELEV "ELEV" +#define w_DEMAND "DEMAND" +#define w_HEAD "HEAD" +#define w_PRESSURE "PRESSURE" +#define w_QUALITY "QUAL" + +#define w_DIAM "DIAM" +#define w_FLOW "FLOW" +#define w_ROUGHNESS "ROUG" +#define w_VELOCITY "VELO" +#define w_HEADLOSS "HEADL" +#define w_SETTING "SETTING" +#define w_POWER "POWER" +#define w_VOLUME "VOLU" +#define w_CLOCKTIME "CLOCKTIME" +#define w_FILLTIME "FILLTIME" +#define w_DRAINTIME "DRAINTIME" +#define w_GRADE "GRADE" +#define w_LEVEL "LEVEL" + +#define w_DURATION "DURA" +#define w_HYDRAULIC "HYDR" +#define w_MINIMUM "MINI" +#define w_PATTERN "PATT" +#define w_REPORT "REPO" +#define w_START "STAR" + +#define w_UNITS "UNIT" +#define w_MAP "MAP" +#define w_VERIFY "VERI" +#define w_VISCOSITY "VISC" +#define w_DIFFUSIVITY "DIFF" +#define w_SPECGRAV "SPEC" +#define w_TRIALS "TRIAL" +#define w_ACCURACY "ACCU" +#define w_SEGMENTS "SEGM" +#define w_TOLERANCE "TOLER" +#define w_EMITTER "EMIT" + +#define w_PRICE "PRICE" +#define w_DMNDCHARGE "DEMAN" + +#define w_HTOL "HTOL" +#define w_QTOL "QTOL" +#define w_RQTOL "RQTOL" +#define w_CHECKFREQ "CHECKFREQ" +#define w_MAXCHECK "MAXCHECK" +#define w_DAMPLIMIT "DAMPLIMIT" + +#define w_FLOWCHANGE "FLOWCHANGE" +#define w_HEADERROR "HEADERROR" + +#define w_MODEL "MODEL" +#define w_DDA "DDA" +#define w_PDA "PDA" +#define w_REQUIRED "REQ" +#define w_EXPONENT "EXP" + +#define w_SECONDS "SEC" +#define w_MINUTES "MIN" +#define w_HOURS "HOU" +#define w_DAYS "DAY" +#define w_AM "AM" +#define w_PM "PM" + +#define w_CONCEN "CONCEN" +#define w_MASS "MASS" +#define w_SETPOINT "SETPOINT" +#define w_FLOWPACED "FLOWPACED" + +#define w_PATTERN "PATT" +#define w_CURVE "CURV" + +#define w_EFFIC "EFFI" +#define w_HEAD "HEAD" +#define w_POWER "POWER" +#define w_SPEED "SPEE" + +#define w_MIXED "MIXED" +#define w_2COMP "2COMP" +#define w_FIFO "FIFO" +#define w_LIFO "LIFO" + +#define w_STATISTIC "STAT" +#define w_AVG "AVERAGE" +#define w_MIN "MINIMUM" +#define w_MAX "MAXIMUM" +#define w_RANGE "RANGE" + +#define w_UNBALANCED "UNBA" +#define w_STOP "STOP" +#define w_CONTINUE "CONT" + +#define w_RULE "RULE" +#define w_IF "IF" +#define w_AND "AND" +#define w_OR "OR" +#define w_THEN "THEN" +#define w_ELSE "ELSE" +#define w_PRIORITY "PRIO" + +// ------ Input File Section Names ------------------------ + +#define s_TITLE "[TITLE]" +#define s_JUNCTIONS "[JUNCTIONS]" +#define s_RESERVOIRS "[RESERVOIRS]" +#define s_TANKS "[TANKS]" +#define s_PIPES "[PIPES]" +#define s_PUMPS "[PUMPS]" +#define s_VALVES "[VALVES]" +#define s_CONTROLS "[CONTROLS]" +#define s_RULES "[RULES]" +#define s_DEMANDS "[DEMANDS]" +#define s_SOURCES "[SOURCES]" +#define s_EMITTERS "[EMITTERS]" +#define s_PATTERNS "[PATTERNS]" +#define s_CURVES "[CURVES]" +#define s_QUALITY "[QUALITY]" +#define s_STATUS "[STATUS]" +#define s_ROUGHNESS "[ROUGHNESS]" +#define s_ENERGY "[ENERGY]" +#define s_REACTIONS "[REACTIONS]" +#define s_MIXING "[MIXING]" +#define s_REPORT "[REPORT]" +#define s_TIMES "[TIMES]" +#define s_OPTIONS "[OPTIONS]" +#define s_COORDS "[COORDINATES]" +#define s_VERTICES "[VERTICES]" +#define s_LABELS "[LABELS]" +#define s_BACKDROP "[BACKDROP]" +#define s_TAGS "[TAGS]" +#define s_END "[END]" + +//------- Units ------------------------------------------- + +#define u_CFS "cfs" +#define u_GPM "gpm" +#define u_AFD "a-f/d" +#define u_MGD "mgd" +#define u_IMGD "Imgd" +#define u_LPS "L/s" +#define u_LPM "Lpm" +#define u_CMH "m3/h" +#define u_CMD "m3/d" +#define u_MLD "ML/d" +#define u_MGperL "mg/L" +#define u_UGperL "ug/L" +#define u_HOURS "hrs" +#define u_MINUTES "min" +#define u_PERCENT "% from" +#define u_METERS "m" +#define u_MMETERS "mm" +#define u_MperSEC "m/s" +#define u_SQMperSEC "sq m/sec" +#define u_per1000M "/1000m" +#define u_KW "kw" +#define u_FEET "ft" +#define u_INCHES "in" +#define u_PSI "psi" +#define u_KPA "kPa" +#define u_FTperSEC "fps" +#define u_SQFTperSEC "sq ft/sec" +#define u_per1000FT "/1000ft" +#define u_HP "hp" + +//------- Curve Types ------------------------------------- + +#define c_HEADLOSS "HEADLOSS" +#define c_PUMP "PUMP" +#define c_EFFIC "EFFIC" +#define c_VOLUME "VOLUME" + +//------- Text Phrases ------------------------------------ + +#define t_ABOVE "above" +#define t_BELOW "below" +#define t_HW "Hazen-Williams" +#define t_DW "Darcy-Weisbach" +#define t_CM "Chezy-Manning" +#define t_CHEMICAL "Chemical" +#define t_XHEAD "closed because cannot deliver head" +#define t_TEMPCLOSED "temporarily closed" +#define t_CLOSED "closed" +#define t_OPEN "open" +#define t_ACTIVE "active" +#define t_XFLOW "open but exceeds maximum flow" +#define t_XFCV "open but cannot deliver flow" +#define t_XPRESSURE "open but cannot deliver pressure" +#define t_FILLING "filling" +#define t_EMPTYING "emptying" +#define t_OVERFLOWING "overflowing" + +#define t_ELEV "Elevation" +#define t_DEMAND "Demand" +#define t_HEAD "Head" +#define t_PRESSURE "Pressure" +#define t_QUALITY "Quality" +#define t_LENGTH "Length" +#define t_DIAM "Diameter" +#define t_FLOW "Flow" +#define t_VELOCITY "Velocity" +#define t_HEADLOSS "Headloss" +#define t_LINKQUAL "Quality" +#define t_LINKSTATUS "State" +#define t_SETTING "Setting" +#define t_REACTRATE "Reaction" +#define t_FRICTION "F-Factor" + +#define t_NODEID "Node" +#define t_LINKID "Link" +#define t_PERDAY "/day" + +#define t_JUNCTION "Junction" +#define t_RESERVOIR "Reservoir" +#define t_TANK "Tank" +#define t_PIPE "Pipe" +#define t_PUMP "Pump" +#define t_VALVE "Valve" +#define t_CONTROL "Control" +#define t_RULE "Rule" +#define t_DEMANDFOR "Demand for Node" +#define t_SOURCE "Source" +#define t_EMITTER "Emitter" +#define t_PATTERN "Pattern" +#define t_CURVE "Curve" +#define t_STATUS "Status" +#define t_ROUGHNESS "Roughness" +#define t_ENERGY "Energy" +#define t_REACTION "Reaction" +#define t_MIXING "Mixing" +#define t_REPORT "Report" +#define t_TIME "Times" +#define t_OPTION "Options" +#define t_RULES_SECT "[RULES] section" +#define t_HALTED " EXECUTION HALTED." +#define t_FUNCCALL "function call" +#define t_CONTINUED " (continued)" +#define t_perM3 " /m3" +#define t_perMGAL "/Mgal" +#define t_DIFFER "DIFFERENTIAL" +#define t_FIXED "Fixed Demands" +#define t_POWER "Power Function" +#define t_ORIFICE "Orifice Flow" + + +//----- Summary Report Format Strings --------------------- + +#define LOGO1 \ +"******************************************************************" +#define LOGO2 \ +"* E P A N E T *" +#define LOGO3 \ +"* Hydraulic and Water Quality *" +#define LOGO4 \ +"* Analysis for Pipe Networks *" +#define LOGO5 \ +"* Version %d.%d *" +#define LOGO6 \ +"******************************************************************" +#define FMT02 "\n o Retrieving network data" +#define FMT04 "\n Cannot use duplicate file names." +#define FMT05 "\n Cannot open input file " +#define FMT06 "\n Cannot open report file " +#define FMT07 "\n Cannot open output file " +#define FMT08 "\n Cannot open temporary output file" +#define FMT14 "\n o Computing hydraulics at hour " +#define FMT15 "\n o Computing water quality at hour " +#define FMT16 "\n o Transferring results to file" +#define FMT17 "\n o Writing output report to " +#define FMT18 " Page 1 " +#define FMT19 " Input Data File ................... %s" +#define FMT20 " Number of Junctions................ %-d" +#define FMT21a " Number of Reservoirs............... %-d" +#define FMT21b " Number of Tanks ................... %-d" +#define FMT22 " Number of Pipes ................... %-d" +#define FMT23 " Number of Pumps ................... %-d" +#define FMT24 " Number of Valves .................. %-d" +#define FMT25 " Headloss Formula .................. %s" +#define FMT25a " Nodal Demand Model ................ %s" +#define FMT26 " Hydraulic Timestep ................ %-.2f %s" +#define FMT27 " Hydraulic Accuracy ................ %-.6f" + +#define FMT27a " Status Check Frequency ............ %-d" +#define FMT27b " Maximum Trials Checked ............ %-d" +#define FMT27c " Damping Limit Threshold ........... %-.6f" + +#define FMT27d " Headloss Error Limit .............. %-.6f %s" +#define FMT27e " Flow Change Limit ................. %-.6f %s" + +#define FMT28 " Maximum Trials .................... %-d" +#define FMT29 " Quality Analysis .................. None" +#define FMT30 " Quality Analysis .................. %s" +#define FMT31 " Quality Analysis .................. Trace From Node %s" +#define FMT32 " Quality Analysis .................. Age" +#define FMT33 " Water Quality Time Step ........... %-.2f min" +#define FMT34 " Water Quality Tolerance ........... %-.2f %s" +#define FMT36 " Specific Gravity .................. %-.2f" +#define FMT37a " Relative Kinematic Viscosity ...... %-.2f" +#define FMT37b " Relative Chemical Diffusivity ..... %-.2f" +#define FMT38 " Demand Multiplier ................. %-.2f" +#define FMT39 " Total Duration .................... %-.2f %s" +#define FMT40 " Reporting Criteria:" +#define FMT41 " No Nodes" +#define FMT42 " All Nodes" +#define FMT43 " Selected Nodes" +#define FMT44 " No Links" +#define FMT45 " All Links" +#define FMT46 " Selected Links" +#define FMT47 " with %s below %-.2f %s" +#define FMT48 " with %s above %-.2f %s" + +//----- Status Report Format Strings ---------------------- + +#define FMT49 "Hydraulic Status:" +#define FMT50 "%10s: Tank %s is %s at %-.2f %s" +#define FMT51 "%10s: Reservoir %s is %s" +#define FMT52 "%10s: %s %s %s" +#define FMT53 "%10s: %s %s changed from %s to %s" +#define FMT54 "%10s: %s %s changed by %s %s control" +#define FMT55 "%10s: %s %s changed by timer control" +#define FMT56 " %s %s setting changed to %-.2f" +#define FMT57 " %s %s switched from %s to %s" +#define FMT58 "%10s: Balanced after %-d trials" +#define FMT59 "%10s: Unbalanced after %-d trials (flow change = %-.6f)" + +#define FMT60a " Max. flow imbalance is %.4f %s at Node %s" +#define FMT60b " Max. head imbalance is %.4f %s at Link %s" + +#define FMT61 "%10s: Valve %s caused ill-conditioning" +#define FMT62 "%10s: System ill-conditioned at node %s" +#define FMT63 "%10s: %s %s changed by rule %s" +#define FMT64 "%10s: Balancing the network:\n" +#define FMT65 " Trial %2d: relative flow change = %-.6f" +#define FMT66 " maximum flow change = %.4f for Link %s" +#define FMT67 " maximum flow change = %.4f for Node %s" +#define FMT68 " maximum head error = %.4f for Link %s\n" +#define FMT69a " 1 node had its demand reduced by a total of %.2f%%" +#define FMT69b " %-d nodes had demands reduced by a total of %.2f%%" + +//----- Energy Report Table ------------------------------- + +#define FMT71 "Energy Usage:" +#define FMT72 \ + " Usage Avg. Kw-hr Avg. Peak Cost" +#define FMT73 \ + "Pump Factor Effic. %s Kw Kw /day" +#define FMT74 "%38s Demand Charge: %9.2f" +#define FMT75 "%38s Total Cost: %9.2f" + +//----- Node Report Table --------------------------------- + +#define FMT76 "%s Node Results:" +#define FMT77 "Node Results:" +#define FMT78 "Node Results at %s hrs:" + +//----- Link Report Table --------------------------------- + +#define FMT79 "%s Link Results:" +#define FMT80 "Link Results:" +#define FMT81 "Link Results at %s hrs:" +#define FMT82 "\n\f\n Page %-d %60.60s\n" + +//----- Progress Messages --------------------------------- + +#define FMT100 " Retrieving network data ... " +#define FMT101 " Computing hydraulics at hour %-10s " +#define FMT102 " Computing water quality at hour %-10s " +#define FMT103 " Writing output report ... " +#define FMT106 " Transferring results to file ... " +#define FMT104 "Analysis begun %s" +#define FMT105 "Analysis ended %s" + +//----- Rule Error Messages ------------------------------- + +#define R_ERR201 "Input Error 201: syntax error in following line of " +#define R_ERR202 "Input Error 202: illegal numeric value in following line of " +#define R_ERR203 "Input Error 203: undefined node in following line of " +#define R_ERR204 "Input Error 204: undefined link in following line of " +#define R_ERR207 "Input Error 207: attempt to control a CV in following line of " +#define R_ERR221 "Input Error 221: mis-placed clause in following line of " + +//----- Specific Warning Messages ------------------------- + +#define WARN01 "WARNING: System unbalanced at %s hrs." +#define WARN02 \ +"WARNING: Maximum trials exceeded at %s hrs. System may be unstable." +#define WARN03a "WARNING: Node %s disconnected at %s hrs" +#define WARN03b "WARNING: %d additional nodes disconnected at %s hrs" +#define WARN03c "WARNING: System disconnected because of Link %s" +#define WARN04 "WARNING: Pump %s %s at %s hrs." +#define WARN05 "WARNING: %s %s %s at %s hrs." +#define WARN06 "WARNING: Negative pressures at %s hrs." + +//----- General Warning Messages -------------------------- + +#define WARN1 "WARNING: System hydraulically unbalanced." +#define WARN2 "WARNING: System may be hydraulically unstable." +#define WARN3 "WARNING: System disconnected." +#define WARN4 "WARNING: Pumps cannot deliver enough flow or head." +#define WARN5 "WARNING: Valves cannot deliver enough flow." +#define WARN6 "WARNING: System has negative pressures." + +#endif diff --git a/src/types.h b/src/types.h index b2312b6..713adc2 100755 --- a/src/types.h +++ b/src/types.h @@ -1,465 +1,874 @@ -/* -*********************************************************************** - -TYPES.H -- Global constants and data types for EPANET program - -VERSION: 2.00 -DATE: 5/8/00 - 9/7/00 - 10/25/00 - 3/1/01 - 12/6/01 - 6/24/02 - 8/15/07 (2.00.11) - 2/14/08 (2.00.12) -AUTHOR: L. Rossman - US EPA - NRMRL - -********************************************************************** -*/ -#ifndef TYPES_H -#define TYPES_H - -/*********************************************************/ -/* All floats have been re-declared as doubles (7/3/07). */ -/*********************************************************/ -/* -------------------------------------------- - Definition of 4-byte integers & reals -------------------------------------------- -*/ -typedef float REAL4; //(2.00.11 - LR) -typedef int INT4; //(2.00.12 - LR) - -/* ------------------------------ - Global Constants ------------------------------ -*/ -/*** Updated ***/ -#define CODEVERSION 20100 -#define MAGICNUMBER 516114521 -#define ENGINE_VERSION 201 -#define EOFMARK 0x1A /* Use 0x04 for UNIX systems */ -#define MAXTITLE 3 /* Max. # title lines */ -#define MAXID 31 /* Max. # characters in ID name */ //(2.00.11 - LR) -#define MAXMSG 79 /* Max. # characters in message text */ -#define MAXLINE 255 /* Max. # characters read from input line */ -#define MAXFNAME 259 /* Max. # characters in file name */ -#define MAXTOKS 40 /* Max. items per line of input */ -#define TZERO 1.E-4 /* Zero time tolerance */ -#define TRUE 1 -#define FALSE 0 -#define FULL 2 -#define BIG 1.E10 -#define TINY 1.E-6 -#define MISSING -1.E10 -#define PI 3.141592654 - -/*** Updated 9/7/00 ***/ -/* Various conversion factors */ -#define GPMperCFS 448.831 -#define AFDperCFS 1.9837 -#define MGDperCFS 0.64632 -#define IMGDperCFS 0.5382 -#define LPSperCFS 28.317 -#define LPMperCFS 1699.0 -#define CMHperCFS 101.94 -#define CMDperCFS 2446.6 -#define MLDperCFS 2.4466 -#define M3perFT3 0.028317 -#define LperFT3 28.317 -#define MperFT 0.3048 -#define PSIperFT 0.4333 -#define KPAperPSI 6.895 -#define KWperHP 0.7457 -#define SECperDAY 86400 - -#define DIFFUS 1.3E-8 /* Diffusivity of chlorine */ - /* @ 20 deg C (sq ft/sec) */ -#define VISCOS 1.1E-5 /* Kinematic viscosity of water */ - /* @ 20 deg C (sq ft/sec) */ - -#define SEPSTR " \t\n\r" /* Token separator characters */ - -/* ---------------------------------------------------------------------- - Macro to test for successful allocation of memory ---------------------------------------------------------------------- -*/ -#define MEMCHECK(x) (((x) == NULL) ? 101 : 0 ) -#define FREE(x) (free((x))) - -/* ---------------------------------------------------------------------- - Conversion macros to be used in place of functions ---------------------------------------------------------------------- -*/ -#define INT(x) ((int)(x)) /* integer portion of x */ -#define FRAC(x) ((x)-(int)(x)) /* fractional part of x */ -#define ABS(x) (((x)<0) ? -(x) : (x)) /* absolute value of x */ -#define MIN(x,y) (((x)<=(y)) ? (x) : (y)) /* minimum of x and y */ -#define MAX(x,y) (((x)>=(y)) ? (x) : (y)) /* maximum of x and y */ -#define ROUND(x) (((x)>=0) ? (int)((x)+.5) : (int)((x)-.5)) - /* round-off of x */ -#define MOD(x,y) ((x)%(y)) /* x modulus y */ -#define SQR(x) ((x)*(x)) /* x-squared */ -#define SGN(x) (((x)<0) ? (-1) : (1)) /* sign of x */ -#define UCHAR(x) (((x) >= 'a' && (x) <= 'z') ? ((x)&~32) : (x)) - /* uppercase char of x */ -/* ------------------------------------------------------- - Macro to evaluate function x with error checking - (Fatal errors are numbered higher than 100) ------------------------------------------------------- -*/ -#define ERRCODE(x) (errcode = ((errcode>100) ? (errcode) : (x))) - -/* ------------------------------------------------------- - Macro to find Pump index of Link[x] - (Diameter = pump index for pump links) ------------------------------------------------------- -*/ -#define PUMPINDEX(x) (ROUND(Link[(x)].Diam)) - -/* ------------------------------------------------------- - Global Data Structures ------------------------------------------------------- -*/ - -struct IDstring /* Holds component ID labels */ -{ - char ID[MAXID+1]; -}; - -struct Floatlist /* Element of list of floats */ -{ - double value; - struct Floatlist *next; -}; -typedef struct Floatlist SFloatlist; - -struct Tmplist /* Element of temp list for Pattern & Curve data */ -{ - int i; - char ID[MAXID+1]; - SFloatlist *x; - SFloatlist *y; - struct Tmplist *next; -}; -typedef struct Tmplist STmplist; - -typedef struct /* TIME PATTERN OBJECT */ -{ - char ID[MAXID+1]; /* Pattern ID */ - int Length; /* Pattern length */ - double *F; /* Pattern factors */ -} Spattern; - -typedef struct /* CURVE OBJECT */ -{ - char ID[MAXID+1]; /* Curve ID */ - int Type; /* Curve type */ - int Npts; /* Number of points */ - double *X; /* X-values */ - double *Y; /* Y-values */ -} Scurve; - -typedef struct /* Coord OBJECT */ -{ - char ID[MAXID+1]; /* Coord ID */ - double X; /* X-value */ - double Y; /* Y-value */ - char HaveCoords; /* Coordinates flag */ -} Scoord; - -struct Sdemand /* DEMAND CATEGORY OBJECT */ -{ - double Base; /* Baseline demand */ - int Pat; /* Pattern index */ - struct Sdemand *next; /* Next record */ -}; -typedef struct Sdemand *Pdemand; /* Pointer to demand object */ - -struct Ssource /* WQ SOURCE OBJECT */ -{ - /*int Node;*/ /* Node index of source */ - double C0; /* Base concentration/mass */ - int Pat; /* Pattern index */ - double Smass; /* Actual mass flow rate */ - char Type; /* SourceType (see below) */ -}; -typedef struct Ssource *Psource; /* Pointer to WQ source object */ - -typedef struct /* NODE OBJECT */ -{ - char ID[MAXID+1]; /* Node ID */ - double El; /* Elevation */ - Pdemand D; /* Demand pointer */ - Psource S; /* Source pointer */ - double C0; /* Initial quality */ - double Ke; /* Emitter coeff. */ - char Rpt; /* Reporting flag */ -} Snode; - -typedef struct /* LINK OBJECT */ -{ - char ID[MAXID+1]; /* Link ID */ - int N1; /* Start node index */ - int N2; /* End node index */ - double Diam; /* Diameter */ - double Len; /* Length */ - double Kc; /* Roughness */ - double Km; /* Minor loss coeff. */ - double Kb; /* Bulk react. coeff */ - double Kw; /* Wall react. coeff */ - double R; /* Flow resistance */ - double Rc; /* Reaction cal */ - char Type; /* Link type */ - char Stat; /* Initial status */ - char Rpt; /* Reporting flag */ -} Slink; - -typedef struct /* TANK OBJECT */ -{ - int Node; /* Node index of tank */ - double A; /* Tank area */ - double Hmin; /* Minimum water elev */ - double Hmax; /* Maximum water elev */ - double H0; /* Initial water elev */ - double Vmin; /* Minimum volume */ - double Vmax; /* Maximum volume */ - double V0; /* Initial volume */ - double Kb; /* Reaction coeff. (1/days) */ - double V; /* Tank volume */ - double C; /* Concentration */ - int Pat; /* Fixed grade time pattern */ - int Vcurve; /* Vol.- elev. curve index */ - char MixModel; /* Type of mixing model */ - /* (see MixType below) */ - double V1max; /* Mixing compartment size */ -} Stank; - -typedef struct /* PUMP OBJECT */ -{ - int Link; /* Link index of pump */ - int Ptype; /* Pump curve type */ - /* (see PumpType below) */ - double Q0; /* Initial flow */ - double Qmax; /* Maximum flow */ - double Hmax; /* Maximum head */ - double H0; /* Shutoff head */ - double R; /* Flow coeffic. */ - double N; /* Flow exponent */ - int Hcurve; /* Head v. flow curve index */ - int Ecurve; /* Effic. v. flow curve index */ - int Upat; /* Utilization pattern index */ - int Epat; /* Energy cost pattern index */ - double Ecost; /* Unit energy cost */ - double Energy[6]; /* Energy usage statistics: */ - /* 0 = pump utilization */ - /* 1 = avg. efficiency */ - /* 2 = avg. kW/flow */ - /* 3 = avg. kwatts */ - /* 4 = peak kwatts */ - /* 5 = cost/day */ -} Spump; - -typedef struct /* VALVE OBJECT */ -{ - int Link; /* Link index of valve */ -} Svalve; - -typedef struct /* CONTROL STATEMENT */ -{ - int Link; /* Link index */ - int Node; /* Control node index */ - long Time; /* Control time */ - double Grade; /* Control grade */ - double Setting; /* New link setting */ - char Status; /* New link status */ - char Type; /* Control type */ - /* (see ControlType below) */ -} Scontrol; - -struct Sadjlist /* NODE ADJACENCY LIST ITEM */ -{ - int node; /* Index of connecting node */ - int link; /* Index of connecting link */ - struct Sadjlist *next; /* Next item in list */ -}; -/* Pointer to adjacency list item */ -typedef struct Sadjlist *Padjlist; - -struct Sseg /* PIPE SEGMENT record used */ -{ /* for WQ routing */ - double v; /* Segment volume */ - double c; /* Water quality value */ - struct Sseg *prev; /* Record for previous segment */ -}; -typedef struct Sseg *Pseg; /* Pointer to pipe segment */ - -typedef struct /* FIELD OBJECT of report table */ -{ - char Name[MAXID+1]; /* Name of reported variable */ - char Units[MAXID+1]; /* Units of reported variable */ - char Enabled; /* Enabled if in table */ - int Precision; /* Number of decimal places */ - double RptLim[2]; /* Lower/upper report limits */ -} SField; - - -/* ----------------------------------------------- - Global Enumeration Variables ----------------------------------------------- -*/ - enum Hydtype /* Hydraulics solution option: */ - {USE, /* use from previous run */ - SAVE, /* save after current run */ - SCRATCH}; /* use temporary file */ - - enum QualType /* Water quality analysis option: */ - {NONE, /* no quality analysis */ - CHEM, /* analyze a chemical */ - AGE, /* analyze water age */ - TRACE}; /* trace % of flow from a source */ - - enum NodeType /* Type of node: */ - {JUNC, /* junction */ - RESERV, /* reservoir */ - TANK}; /* tank */ - - enum LinkType /* Type of link: */ - {CV, /* pipe with check valve */ - PIPE, /* regular pipe */ - PUMP, /* pump */ - PRV, /* pressure reducing valve */ - PSV, /* pressure sustaining valve */ - PBV, /* pressure breaker valve */ - FCV, /* flow control valve */ - TCV, /* throttle control valve */ - GPV}; /* general purpose valve */ - - enum CurveType /* Type of curve: */ - {V_CURVE, /* volume curve */ - P_CURVE, /* pump curve */ - E_CURVE, /* efficiency curve */ - H_CURVE}; /* head loss curve */ - - enum PumpType /* Type of pump curve: */ - {CONST_HP, /* constant horsepower */ - POWER_FUNC, /* power function */ - CUSTOM, /* user-defined custom curve */ - NOCURVE}; - - enum SourceType /* Type of source quality input */ - {CONCEN, /* inflow concentration */ - MASS, /* mass inflow booster */ - SETPOINT, /* setpoint booster */ - FLOWPACED}; /* flow paced booster */ - - enum ControlType /* Control condition type: */ - {LOWLEVEL, /* act when grade below set level */ - HILEVEL, /* act when grade above set level */ - TIMER, /* act when set time reached */ - TIMEOFDAY}; /* act when time of day occurs */ - - enum StatType /* Link/Tank status: */ - {XHEAD, /* pump cannot deliver head (closed) */ - TEMPCLOSED, /* temporarily closed */ - CLOSED, /* closed */ - OPEN, /* open */ - ACTIVE, /* valve active (partially open) */ - XFLOW, /* pump exceeds maximum flow */ - XFCV, /* FCV cannot supply flow */ - XPRESSURE, /* valve cannot supply pressure */ - FILLING, /* tank filling */ - EMPTYING}; /* tank emptying */ - - enum FormType /* Head loss formula: */ - {HW, /* Hazen-Williams */ - DW, /* Darcy-Weisbach */ - CM}; /* Chezy-Manning */ - - enum UnitsType /* Unit system: */ - {US, /* US */ - SI}; /* SI (metric) */ - - enum FlowUnitsType /* Flow units: */ - {CFS, /* cubic feet per second */ - GPM, /* gallons per minute */ - MGD, /* million gallons per day */ - IMGD, /* imperial million gal. per day */ - AFD, /* acre-feet per day */ - LPS, /* liters per second */ - LPM, /* liters per minute */ - MLD, /* megaliters per day */ - CMH, /* cubic meters per hour */ - CMD}; /* cubic meters per day */ - - enum PressUnitsType /* Pressure units: */ - {PSI, /* pounds per square inch */ - KPA, /* kiloPascals */ - METERS}; /* meters */ - - enum RangeType /* Range limits: */ - {LOW, /* lower limit */ - HI, /* upper limit */ - PREC}; /* precision */ - - enum MixType /* Tank mixing regimes */ - {MIX1, /* 1-compartment model */ - MIX2, /* 2-compartment model */ - FIFO, /* First in, first out model */ - LIFO}; /* Last in, first out model */ - - enum TstatType /* Time series statistics */ - {SERIES, /* none */ - AVG, /* time-averages */ - MIN, /* minimum values */ - MAX, /* maximum values */ - RANGE}; /* max - min values */ - -#define MAXVAR 21 /* Max. # types of network variables */ - /* (equals # items enumed below) */ - enum FieldType /* Network variables: */ - {ELEV, /* nodal elevation */ - DEMAND, /* nodal demand flow */ - HEAD, /* nodal hydraulic head */ - PRESSURE, /* nodal pressure */ - QUALITY, /* nodal water quality */ - - LENGTH, /* link length */ - DIAM, /* link diameter */ - FLOW, /* link flow rate */ - VELOCITY, /* link flow velocity */ - HEADLOSS, /* link head loss */ - LINKQUAL, /* avg. water quality in link */ - STATUS, /* link status */ - SETTING, /* pump/valve setting */ - REACTRATE, /* avg. reaction rate in link */ - FRICTION, /* link friction factor */ - - POWER, /* pump power output */ - TIME, /* simulation time */ - VOLUME, /* tank volume */ - CLOCKTIME, /* simulation time of day */ - FILLTIME, /* time to fill a tank */ - DRAINTIME}; /* time to drain a tank */ - -enum SectType {_TITLE,_JUNCTIONS,_RESERVOIRS,_TANKS,_PIPES,_PUMPS, - _VALVES,_CONTROLS,_RULES,_DEMANDS,_SOURCES,_EMITTERS, - _PATTERNS,_CURVES,_QUALITY,_STATUS,_ROUGHNESS,_ENERGY, - _REACTIONS,_MIXING,_REPORT,_TIMES,_OPTIONS, - _COORDS,_VERTICES,_LABELS,_BACKDROP,_TAGS,_END}; - -enum HdrType /* Type of table heading */ - {STATHDR, /* Hydraulic Status */ - ENERHDR, /* Energy Usage */ - NODEHDR, /* Node Results */ - LINKHDR}; /* Link Results */ - -#endif \ No newline at end of file +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: types.h + Description: symbolic constants and data types used throughout EPANET + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 10/29/2019 + ****************************************************************************** +*/ + +#ifndef TYPES_H +#define TYPES_H + +#include + +#include "hash.h" + +/* +------------------------------------------- + Definition of 4-byte integers & reals +------------------------------------------- +*/ +typedef float REAL4; +typedef int INT4; + +/* +---------------------------------------------- + Various constants +---------------------------------------------- +*/ +#define CODEVERSION 20200 +#define MAGICNUMBER 516114521 +#define ENGINE_VERSION 201 // Used for binary hydraulics file +#define EOFMARK 0x1A // Use 0x04 for UNIX systems +#define MAXTITLE 3 // Max. # title lines +#define TITLELEN 79 // Max. # characters in a title line +#define MAXID 31 // Max. # characters in ID name +#define MAXMSG 255 // Max. # characters in message text +#define MAXLINE 1024 // Max. # characters read from input line +#define MAXFNAME 259 // Max. # characters in file name +#define MAXTOKS 40 // Max. items per line of input +#define TRUE 1 +#define FALSE 0 +#define FULL 2 +#define BIG 1.E10 +#define TINY 1.E-6 +#define MISSING -1.E10 // Missing value indicator +#define DIFFUS 1.3E-8 // Diffusivity of chlorine + // @ 20 deg C (sq ft/sec) +#define VISCOS 1.1E-5 // Kinematic viscosity of water + // @ 20 deg C (sq ft/sec) +#define MINPDIFF 0.1 // PDA min. pressure difference (psi or m) +#define SEPSTR " \t\n\r" // Token separator characters +#ifdef M_PI + #define PI M_PI +#else + #define PI 3.141592654 +#endif + +/* +---------------------------------------------- + Flow units conversion factors +---------------------------------------------- +*/ +#define GPMperCFS 448.831 +#define AFDperCFS 1.9837 +#define MGDperCFS 0.64632 +#define IMGDperCFS 0.5382 +#define LPSperCFS 28.317 +#define LPMperCFS 1699.0 +#define CMHperCFS 101.94 +#define CMDperCFS 2446.6 +#define MLDperCFS 2.4466 +#define M3perFT3 0.028317 +#define LperFT3 28.317 +#define MperFT 0.3048 +#define PSIperFT 0.4333 +#define KPAperPSI 6.895 +#define KWperHP 0.7457 +#define SECperDAY 86400 + +/* +--------------------------------------------------------------------- + Macros to test for successful allocation of memory and to free it +--------------------------------------------------------------------- +*/ +#define MEMCHECK(x) (((x) == NULL) ? 101 : 0 ) +#define FREE(x) do { free(x); (x) = NULL; } while(0) + +/* +--------------------------------------------------------------------- + Conversion macros to be used in place of functions +--------------------------------------------------------------------- +*/ +#define INT(x) ((int)(x)) // integer portion of x +#define FRAC(x) ((x)-(int)(x)) // fractional part of x +#define ABS(x) (((x)<0) ? -(x) : (x)) // absolute value of x +#define MIN(x,y) (((x)<=(y)) ? (x) : (y)) // minimum of x and y +#define MAX(x,y) (((x)>=(y)) ? (x) : (y)) // maximum of x and y +#define ROUND(x) (((x)>=0) ? (int)((x)+.5) : (int)((x)-.5)) + // round-off of x +#define MOD(x,y) ((x)%(y)) // x modulus y +#define SQR(x) ((x)*(x)) // x-squared +#define SGN(x) (((x)<0) ? (-1) : (1)) // sign of x +#define UCHAR(x) (((x) >= 'a' && (x) <= 'z') ? ((x)&~32) : (x)) + // uppercase char of x +/* +------------------------------------------------------ + Macro to evaluate function x with error checking + (Fatal errors are numbered higher than 100) +------------------------------------------------------ +*/ +#define ERRCODE(x) (errcode = ((errcode>100) ? (errcode) : (x))) + +/* +---------------------------------------------- + Enumerated Data Types +---------------------------------------------- +*/ + +typedef enum { + NODE, + LINK, + TIMEPAT, + CURVE, + CONTROL, + RULE +} ObjectType; + +typedef enum { + JUNCTION, + RESERVOIR, + TANK +} NodeType; + +typedef enum { + CVPIPE, // pipe with check valve + PIPE, // pipe + PUMP, // pump + PRV, // pressure reducing valve + PSV, // pressure sustaining valve + PBV, // pressure breaker valve + FCV, // flow control valve + TCV, // throttle control valve + GPV // general purpose valve +} LinkType; + +typedef enum { + USE, // use hydraulics file from previous run + SAVE, // save hydraulics file after current run + SCRATCH // use temporary hydraulics file +} HydFiletype; + +typedef enum { + NONE, // no quality analysis + CHEM, // analyze a chemical + AGE, // analyze water age + TRACE // trace % of flow from a source +} QualType; + +typedef enum { + VOLUME_CURVE, // volume curve + PUMP_CURVE, // pump curve + EFFIC_CURVE, // efficiency curve + HLOSS_CURVE, // head loss curve + GENERIC_CURVE // generic curve +} CurveType; + +typedef enum { + CONST_HP, // constant horsepower + POWER_FUNC, // power function + CUSTOM, // user-defined custom curve + NOCURVE +} PumpType; + +typedef enum { + CONCEN, // inflow concentration + MASS, // mass inflow booster + SETPOINT, // setpoint booster + FLOWPACED // flow paced booster +} SourceType; + +typedef enum { + LOWLEVEL, // act when grade below set level + HILEVEL, // act when grade above set level + TIMER, // act when set time reached + TIMEOFDAY // act when time of day occurs +} ControlType; + +typedef enum { + XHEAD, // pump cannot deliver head (closed) + TEMPCLOSED, // temporarily closed + CLOSED, // closed + OPEN, // open + ACTIVE, // valve active (partially open) + XFLOW, // pump exceeds maximum flow + XFCV, // FCV cannot supply flow + XPRESSURE, // valve cannot supply pressure + FILLING, // tank filling + EMPTYING, // tank emptying + OVERFLOWING // tank overflowing +} StatusType; + +typedef enum { + HW, // Hazen-Williams + DW, // Darcy-Weisbach + CM // Chezy-Manning +} HeadLossType; + +typedef enum { + US, // US + SI // SI (metric) +} UnitsType; + +typedef enum { + CFS, // cubic feet per second + GPM, // gallons per minute + MGD, // million gallons per day + IMGD, // imperial million gal. per day + AFD, // acre-feet per day + LPS, // liters per second + LPM, // liters per minute + MLD, // megaliters per day + CMH, // cubic meters per hour + CMD // cubic meters per day +} FlowUnitsType; + +typedef enum { + PSI, // pounds per square inch + KPA, // kiloPascals + METERS // meters +} PressureUnitsType; + +typedef enum { + LOW, // lower limit + HI, // upper limit + PREC // precision +} RangeType; + +typedef enum { + MIX1, // complete mix model + MIX2, // 2-compartment model + FIFO, // first in, first out model + LIFO // last in, first out model +} MixType; + +typedef enum { + SERIES, // point time series + AVG, // time-averages + MIN, // minimum values + MAX, // maximum values + RANGE // max - min values +} StatisticType; + +typedef enum { + ELEV = 0, // nodal elevation + DEMAND, // nodal demand flow + HEAD, // nodal hydraulic head + PRESSURE, // nodal pressure + QUALITY, // nodal water quality + + LENGTH, // link length + DIAM, // link diameter + FLOW, // link flow rate + VELOCITY, // link flow velocity + HEADLOSS, // link head loss + LINKQUAL, // avg. water quality in link + STATUS, // link status + SETTING, // pump/valve setting + REACTRATE, // avg. reaction rate in link + FRICTION, // link friction factor + + POWER, // pump power output + TIME, // simulation time + VOLUME, // tank volume + CLOCKTIME, // simulation time of day + FILLTIME, // time to fill a tank + DRAINTIME, // time to drain a tank + MAXVAR // total number of variable fields +} FieldType; + +typedef enum { + _TITLE, _JUNCTIONS, _RESERVOIRS, _TANKS, _PIPES, _PUMPS, + _VALVES, _CONTROLS, _RULES, _DEMANDS, _SOURCES, _EMITTERS, + _PATTERNS, _CURVES, _QUALITY, _STATUS, _ROUGHNESS, _ENERGY, + _REACTIONS, _MIXING, _REPORT, _TIMES, _OPTIONS, + _COORDS, _VERTICES, _LABELS, _BACKDROP, _TAGS, _END +} SectionType; + +typedef enum { + STATHDR, // hydraulic status header + ENERHDR, // energy usage header + NODEHDR, // node results header + LINKHDR // link results header +} HdrType; + +typedef enum { + NEGATIVE = -1, // flow in reverse of pre-assigned direction + ZERO_FLOW = 0, // zero flow + POSITIVE = 1 // flow in pre-assigned direction +} FlowDirection; + +typedef enum { + DDA, // demand driven analysis + PDA // pressure driven analysis +} DemandModelType; + +/* +------------------------------------------------------ + Fundamental Data Structures +------------------------------------------------------ +*/ + +struct IDstring // Holds component ID label +{ + char ID[MAXID+1]; +}; + +typedef struct // Time Pattern Object +{ + char ID[MAXID+1]; // pattern ID + char *Comment; // pattern comment + int Length; // pattern length + double *F; // pattern factors +} Spattern; + +typedef struct // Curve Object +{ + char ID[MAXID+1]; // curve ID + char *Comment; // curve comment + CurveType Type; // curve type + int Npts; // number of points + int Capacity; // size of X & Y arrays + double *X; // x-values + double *Y; // y-values +} Scurve; + +struct Sdemand // Demand List Item +{ + double Base; // baseline demand + int Pat; // pattern index + char *Name; // demand category name + struct Sdemand *next; // next demand list item +}; +typedef struct Sdemand *Pdemand; // Pointer to demand list + +typedef struct // Energy Usage Object +{ + double TimeOnLine; // hours pump is online + double Efficiency; // total time wtd. efficiency + double KwHrsPerFlow; // total kw-hrs per unit of flow + double KwHrs; // total kw-hrs consumed + double MaxKwatts; // max. kw consumed + double TotalCost; // total pumping cost +} Senergy; + +struct Ssource // Water Quality Source Object +{ + double C0; // base concentration/mass + int Pat; // pattern index + double Smass; // actual mass flow rate + SourceType Type; // type of source +}; +typedef struct Ssource *Psource; // Pointer to source object + +struct Svertices // Coordinates of a link's vertices +{ + double *X; // array of x-coordinates + double *Y; // array of y-coordinates + int Npts; // number of vertex points + int Capacity; // capacity of coordinate arrays +}; +typedef struct Svertices *Pvertices; // Pointer to a link's vertices + +typedef struct // Node Object +{ + char ID[MAXID+1]; // node ID + double X; // x-coordinate + double Y; // y-coordinate + double El; // elevation + Pdemand D; // demand pointer + Psource S; // source pointer + double C0; // initial quality + double Ke; // emitter coeff. + int Rpt; // reporting flag + int ResultIndex; // saved result index + NodeType Type; // node type + char *Comment; // node comment +} Snode; + +typedef struct // Link Object +{ + char ID[MAXID+1]; // link ID + int N1; // start node index + int N2; // end node index + double Diam; // diameter + double Len; // length + double Kc; // roughness + double Km; // minor loss coeff. + double Kb; // bulk react. coeff. + double Kw; // wall react. coef. + double R; // flow resistance + double Rc; // reaction coeff. + LinkType Type; // link type + StatusType Status; // initial status + Pvertices Vertices; // internal vertex coordinates + int Rpt; // reporting flag + int ResultIndex; // saved result index + char *Comment; // link comment +} Slink; + +typedef struct // Tank Object +{ + int Node; // node index of tank + double A; // tank area + double Hmin; // minimum water elev + double Hmax; // maximum water elev + double H0; // initial water elev + double Vmin; // minimum volume + double Vmax; // maximum volume + double V0; // initial volume + double Kb; // bulk reaction coeff. + double V; // tank volume + double C; // concentration + int Pat; // fixed grade time pattern + int Vcurve; // volume v. elev. curve index + MixType MixModel; // type of mixing model + double V1max; // mixing compartment size + int CanOverflow; // tank can overflow or not +} Stank; + +typedef struct // Pump Object +{ + int Link; // link index of pump + int Ptype; // pump curve type + double Q0; // initial flow + double Qmax; // maximum flow + double Hmax; // maximum head + double H0; // shutoff head + double R; // flow coeffic. + double N; // flow exponent + int Hcurve; // head v. flow curve index + int Ecurve; // effic. v. flow curve index + int Upat; // utilization pattern index + int Epat; // energy cost pattern index + double Ecost; // unit energy cost + Senergy Energy; // energy usage statistics +} Spump; + +typedef struct // Valve Object +{ + int Link; // link index of valve +} Svalve; + +typedef struct // Control Statement +{ + int Link; // link index + int Node; // control node index + long Time; // control time + double Grade; // control grade + double Setting; // new link setting + StatusType Status; // new link status + ControlType Type; // control type +} Scontrol; + +typedef struct // Field Object of Report Table +{ + char Name[MAXID+1]; // name of reported variable + char Units[MAXID+1]; // units of reported variable + int Enabled; // enabled if in table + int Precision; // number of decimal places + double RptLim[2]; // lower/upper report limits +} SField; + +struct Sadjlist // Node Adjacency List Item +{ + int node; // index of connecting node + int link; // index of connecting link + struct Sadjlist *next; // next item in list +}; +typedef struct Sadjlist *Padjlist; // Pointer to adjacency list + +struct Sseg // Pipe Segment List Item +{ + double v; // segment volume + double c; // segment water quality + struct Sseg *prev; // previous segment in list +}; +typedef struct Sseg *Pseg; // Pointer to pipe segment list + +typedef struct s_Premise // Rule Premise Clause +{ + int logop; // logical operator (IF, AND, OR) + int object; // NODE or LINK + int index; // object's index + int variable; // pressure, flow, etc. + int relop; // relational operator (=, >, <, etc.) + int status; // variable's status (OPEN, CLOSED) + double value; // variable's value + struct s_Premise *next; // next premise clause +} Spremise; + +typedef struct s_Action // Rule Action Clause +{ + int link; // link index + int status; // link's status + double setting; // link's setting + struct s_Action *next; +} Saction; + +typedef struct // Control Rule Structure +{ + char label[MAXID+1]; // rule label + double priority; // priority level + Spremise *Premises; // list of premises + Saction *ThenActions; // list of THEN actions + Saction *ElseActions; // list of ELSE actions +} Srule; + +typedef struct s_ActionItem // Action List Item +{ + int ruleIndex; // index of rule action belongs to + Saction *action; // an action clause + struct s_ActionItem *next; // next action on the list +} SactionList; + +typedef struct // Mass Balance Components +{ + double initial; // initial mass in system + double inflow; // mass inflow to system + double outflow; // mass outflow from system + double reacted; // mass reacted in system + double final; // final mass in system + double ratio; // ratio of mass added to mass lost +} SmassBalance; + +/* +------------------------------------------------------ + Wrapper Data Structures +------------------------------------------------------ +*/ + +// Input File Parser Wrapper +typedef struct { + FILE *InFile; // Input file handle + + char + DefPatID[MAXID + 1], // Default demand pattern ID + InpFname[MAXFNAME + 1], // Input file name + *Tok[MAXTOKS], // Array of token strings + Comment[MAXMSG + 1], // Comment text + LineComment[MAXMSG + 1]; // Full line comment + + int + MaxNodes, // Node count from input file */ + MaxLinks, // Link count " " " + MaxJuncs, // Junction count " " " + MaxPipes, // Pipe count " " " + MaxTanks, // Tank count " " " + MaxPumps, // Pump count " " " + MaxValves, // Valve count " " " + MaxControls, // Control count " " " + MaxRules, // Rule count " " " + MaxPats, // Pattern count " " " + MaxCurves, // Curve count " " " + Ntokens, // Number of tokens in line of input + Ntitle, // Number of title lines + ErrTok, // Index of error-producing token + Unitsflag, // Unit system flag + Flowflag, // Flow units flag + Pressflag, // Pressure units flag + DefPat; // Default demand pattern + + Spattern *PrevPat; // Previous pattern processed + Scurve *PrevCurve; // Previous curve processed + double *X; // Temporary array for curve data + +} Parser; + +// Time Step Wrapper +typedef struct { + + long + Tstart, // Starting time of day + Hstep, // Nominal hyd. time step + Pstep, // Time pattern time step + Pstart, // Starting pattern time + Rstep, // Reporting time step + Rstart, // Time when reporting starts + Rtime, // Next reporting time + Htime, // Current hyd. time + Hydstep, // Actual hydraulic time step + Qstep, // Quality time step + Qtime, // Current quality time + Rulestep, // Rule evaluation time step + Dur; // Duration of simulation + +} Times; + +// Reporting Wrapper +typedef struct { + + FILE *RptFile; // Report file handle + + int + Nperiods, // Number of reporting periods + PageSize, // Lines/page in output report/ + Rptflag, // Report flag + Tstatflag, // Report time series statistic flag + Summaryflag, // Report summary flag + Messageflag, // Error/warning message flag + Statflag, // Status report flag + Energyflag, // Energy report flag + Nodeflag, // Node report flag + Linkflag, // Link report flag + Fprinterr; // File write error flag + + long + LineNum, // Current line number + PageNum; // Current page number + + char + Atime[13], // Clock time (hrs:min:sec) + Rpt1Fname[MAXFNAME+1], // Primary report file name + Rpt2Fname[MAXFNAME+1], // Secondary report file name + DateStamp[26]; // Current date & time + + SField Field[MAXVAR]; // Output reporting fields + +} Report; + +// Output File Wrapper +typedef struct { + + char + HydFname[MAXFNAME+1], // Hydraulics file name + OutFname[MAXFNAME+1]; // Binary output file name + + int + Outflag, // Output file flag + Hydflag, // Hydraulics flag + SaveHflag, // Hydraulic results saved flag + SaveQflag, // Quality results saved flag + Saveflag; // General purpose save flag + + long + HydOffset, // Hydraulics file byte offset + OutOffset1, // 1st output file byte offset + OutOffset2; // 2nd output file byte offset + + FILE + *OutFile, // Output file handle + *HydFile, // Hydraulics file handle + *TmpOutFile; // Temporary file handle + +} Outfile; + +// Rule-Based Controls Wrapper +typedef struct { + + SactionList *ActionList; // Linked list of action items + int RuleState; // State of rule interpreter + int Errcode; // Rule parser error code + long Time1; // Start of rule evaluation time interval + Spremise *LastPremise; // Previous premise clause + Saction *LastThenAction; // Previous THEN action + Saction *LastElseAction; // Previous ELSE action + +} Rules; + +// Sparse Matrix Wrapper +typedef struct { + + double + *Aii, // Diagonal matrix coeffs. + *Aij, // Non-zero, off-diagonal matrix coeffs. + *F, // Right hand side vector + *temp; // Array used by linear eqn. solver + + int + Ncoeffs, // Number of non-zero matrix coeffs + *Order, // Node-to-row of re-ordered matrix + *Row, // Row-to-node of re-ordered matrix + *Ndx, // Index of link's coeff. in Aij + *XLNZ, // Start position of each column in NZSUB + *NZSUB, // Row index of each coeff. in each column + *LNZ, // Position of each coeff. in Aij array + *Degree, // Number of links adjacent to each node + *link, // Array used by linear eqn. solver + *first; // Array used by linear eqn. solver + +} Smatrix; + +// Hydraulics Solver Wrapper +typedef struct { + + double + *NodeHead, // Node hydraulic heads + *NodeDemand, // Node demand + emitter flows + *DemandFlow, // Work array of demand flows + *EmitterFlow, // Emitter outflows + *LinkFlow, // Link flows + *LinkSetting, // Link settings + Htol, // Hydraulic head tolerance + Qtol, // Flow rate tolerance + RQtol, // Flow resistance tolerance + Hexp, // Exponent in headloss formula + Qexp, // Exponent in emitter formula + Pexp, // Exponent in demand formula + Pmin, // Pressure needed for any demand + Preq, // Pressure needed for full demand + Dmult, // Demand multiplier + Hacc, // Relative flow change limit + FlowChangeLimit, // Absolute flow change limit + HeadErrorLimit, // Hydraulic head error limit + DampLimit, // Solution damping threshold + Viscos, // Kin. viscosity (sq ft/sec) + SpGrav, // Specific gravity + Epump, // Global pump efficiency + Dsystem, // Total system demand + Ecost, // Base energy cost per kwh + Dcost, // Energy demand charge/kw/day + Emax, // Peak energy usage + RelativeError, // Total flow change / total flow + MaxHeadError, // Max. error for link head loss + MaxFlowChange, // Max. change in link flow + DemandReduction, // % demand reduction at pressure deficient nodes + RelaxFactor, // Relaxation factor for flow updating + *P, // Inverse of head loss derivatives + *Y, // Flow correction factors + *Xflow; // Inflow - outflow at each node + + int + Epat, // Energy cost time pattern + DemandModel, // Fixed or pressure dependent + Formflag, // Head loss formula flag + Iterations, // Number of hydraulic trials taken + MaxIter, // Max. hydraulic trials allowed + ExtraIter, // Extra hydraulic trials + CheckFreq, // Hydraulic trials between status checks + MaxCheck, // Hydraulic trials limit on status checks + OpenHflag, // Hydraulic system opened flag + Haltflag, // Flag to halt simulation + DeficientNodes; // Number of pressure deficient nodes + + StatusType + *LinkStatus, // Link status + *OldStatus; // Previous link/tank status + + Smatrix smatrix; // Sparse matrix storage + +} Hydraul; + +// Forward declaration of the Mempool structure defined in mempool.h +struct Mempool; + +// Water Quality Solver Wrapper +typedef struct { + + int + Qualflag, // Water quality analysis flag + OpenQflag, // Quality system opened flag + Reactflag, // Reaction indicator + OutOfMemory, // Out of memory indicator + TraceNode, // Source node for flow tracing + *SortedNodes; // Topologically sorted node indexes + + char + ChemName[MAXID + 1], // Name of chemical + ChemUnits[MAXID + 1]; // Units of chemical + + double + Ctol, // Water quality tolerance + Diffus, // Diffusivity (sq ft/sec) + Wbulk, // Avg. bulk reaction rate + Wwall, // Avg. wall reaction rate + Wtank, // Avg. tank reaction rate + Wsource, // Avg. mass inflow + Rfactor, // Roughness-reaction factor + Sc, // Schmidt Number + Bucf, // Bulk reaction units conversion factor + Tucf, // Tank reaction units conversion factor + BulkOrder, // Bulk flow reaction order + WallOrder, // Pipe wall reaction order + TankOrder, // Tank reaction order + Kbulk, // Global bulk reaction coeff. + Kwall, // Global wall reaction coeff. + Climit, // Limiting potential quality + SourceQual, // External source quality + *NodeQual, // Reported node quality state + *PipeRateCoeff; // Pipe reaction rate coeffs. + + struct Mempool + *SegPool; // Memory pool for water quality segments + + Pseg + FreeSeg, // Pointer to unused segment + *FirstSeg, // First (downstream) segment in each pipe + *LastSeg; // Last (upstream) segment in each pipe + + FlowDirection + *FlowDir; // Flow direction for each pipe + + SmassBalance + MassBalance; // Mass balance components + +} Quality; + +// Pipe Network Wrapper +typedef struct { + + int + Nnodes, // Number of network nodes + Ntanks, // Number of tanks + Njuncs, // Number of junction nodes + Nlinks, // Number of network links + Npipes, // Number of pipes + Npumps, // Number of pumps + Nvalves, // Number of valves + Ncontrols, // Number of simple controls + Nrules, // Number of control rules + Npats, // Number of time patterns + Ncurves; // Number of data curves + + Snode *Node; // Node array + Slink *Link; // Link array + Stank *Tank; // Tank array + Spump *Pump; // Pump array + Svalve *Valve; // Valve array + Spattern *Pattern; // Time pattern array + Scurve *Curve; // Data curve array + Scontrol *Control; // Simple controls array + Srule *Rule; // Rule-based controls array + HashTable + *NodeHashTable, // Hash table for Node ID names + *LinkHashTable; // Hash table for Link ID names + Padjlist *Adjlist; // Node adjacency lists + +} Network; + +// Overall Project Wrapper +typedef struct Project { + + Network network; // Pipe network wrapper + Parser parser; // Input file parser wrapper + Times times; // Time step wrapper + Report report; // Reporting wrapper + Outfile outfile; // Output file wrapper + Rules rules; // Rule-based controls wrapper + Hydraul hydraul; // Hydraulics solver wrapper + Quality quality; // Water quality solver wrapper + + double Ucf[MAXVAR]; // Unit conversion factors + + int + Openflag, // Project open flag + Warnflag; // Warning flag + + char + Msg[MAXMSG+1], // General-purpose string: errors, messages + Title[MAXTITLE][TITLELEN+1], // Project title + MapFname[MAXFNAME+1], // Map file name + TmpHydFname[MAXFNAME+1], // Temporary hydraulics file name + TmpOutFname[MAXFNAME+1], // Temporary output file name + TmpStatFname[MAXFNAME+1]; // Temporary statistic file name + + void (* viewprog) (char *); // Pointer to progress viewing function + +} Project, *EN_Project; + +#endif diff --git a/src/util/cstr_helper.c b/src/util/cstr_helper.c new file mode 100644 index 0000000..e02239b --- /dev/null +++ b/src/util/cstr_helper.c @@ -0,0 +1,59 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: util/cstr_helper.c + Description: Provides C string helper functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 04/02/2019 + ****************************************************************************** +*/ + +#include +#include + +#include "cstr_helper.h" + + +int cstr_duplicate(char **dest, const char *source) +// Duplicates source string +{ + size_t size = 1 + strlen(source); + *dest = (char *) calloc(size, sizeof(char)); + + if (*dest == NULL) + return -1; + else { +#ifdef _MSC_VER + strncpy_s(*dest, size, source, size); +#else + strncpy(*dest, source, size); +#endif + } + return 0; +} + + +bool cstr_isvalid(const char *element_id) +// Determines if invalid characters are present in an element id string +{ + const char *invalid_chars = " \";"; + + // if invalid char is present a pointer to it is returned else NULL + if (strpbrk(element_id, invalid_chars)) + return false; + else + return true; +} + + +bool cstr_isnullterm(const char *source) +// Determines if the string passed is null terminated or not +{ + if (strchr(source, '\0')) + return true; + else + return false; +} diff --git a/src/util/cstr_helper.h b/src/util/cstr_helper.h new file mode 100644 index 0000000..05399f0 --- /dev/null +++ b/src/util/cstr_helper.h @@ -0,0 +1,38 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: util/cstr_helper.h + Description: Provides C string helper functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 04/02/2019 + ****************************************************************************** +*/ + +#ifndef CSTR_HELPER_H_ +#define CSTR_HELPER_H_ + + +#include + + +#if defined(__cplusplus) +extern "C" { +#endif + + +int cstr_duplicate(char **dest, const char *source); + +bool cstr_isvalid(const char *element_id); + +bool cstr_isnullterm(const char *source); + + +#if defined(__cplusplus) +} +#endif + + +#endif /* CSTR_HELPER_H_ */ diff --git a/src/util/errormanager.c b/src/util/errormanager.c new file mode 100644 index 0000000..57c19de --- /dev/null +++ b/src/util/errormanager.c @@ -0,0 +1,91 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: util/errormanager.c + Description: Provides a simple interface for managing errors + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 04/02/2019 + ****************************************************************************** +*/ + +//#ifdef _WIN32 +//#define _CRTDBG_MAP_ALLOC +//#include +//#include +//#else +#include +//#endif +#include + +#include "errormanager.h" + + +typedef struct error_s { + int error_status; + void (*p_msg_lookup)(int, char*, int); +} error_handle_t; + + +error_handle_t *create_error_manager(void (*p_error_message)(int, char*, int)) +// +// Purpose: Constructs a new error handle. +// +{ + error_handle_t *error_handle; + error_handle = (error_handle_t*)calloc(1, sizeof(error_handle_t)); + + error_handle->p_msg_lookup = p_error_message; + + return error_handle; +} + +void delete_error_manager(error_handle_t *error_handle) +// +// Purpose: Destroys the error handle. +// +{ + free(error_handle); +} + +int set_error(error_handle_t *error_handle, int error_code) +// +// Purpose: Sets an error code in the handle. +// +{ + // If the error code is 0 no action is taken and 0 is returned. + // This is a feature not a bug. + if (error_code) + error_handle->error_status = error_code; + + return error_code; +} + +int check_error(error_handle_t *error_handle, char **error_message) +// +// Purpose: Returns the error message or NULL. +// +// Note: Caller must free memory allocated by check_error +// +{ int error_code = error_handle->error_status; + char *temp = NULL; + + if (error_code != 0) { + temp = (char*) calloc(ERR_MAXMSG + 1, sizeof(char)); + + if (temp) + error_handle->p_msg_lookup(error_code, temp, ERR_MAXMSG); + } + *error_message = temp; + return error_code; +} + +void clear_error(error_handle_t *error_handle) +// +// Purpose: Clears the error from the handle. +// +{ + error_handle->error_status = 0; +} diff --git a/src/util/errormanager.h b/src/util/errormanager.h new file mode 100644 index 0000000..49823a9 --- /dev/null +++ b/src/util/errormanager.h @@ -0,0 +1,39 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: util/errormanager.h + Description: Provides a simple interface for managing errors + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 04/02/2019 + ****************************************************************************** +*/ + +#ifndef ERRORMANAGER_H_ +#define ERRORMANAGER_H_ + +#define ERR_MAXMSG 256 + + +#if defined(__cplusplus) +extern "C" { +#endif + +// Forward declaration +typedef struct error_s error_handle_t; + +error_handle_t* create_error_manager(void (*p_error_message)(int, char*, int)); +void delete_error_manager(error_handle_t* error_handle); + +int set_error(error_handle_t* error_handle, int error_code); +int check_error(error_handle_t* error_handle, char **error_message); +void clear_error(error_handle_t* error_handle); + + +#if defined(__cplusplus) +} +#endif + +#endif /* ERRORMANAGER_H_ */ diff --git a/src/util/filemanager.c b/src/util/filemanager.c new file mode 100644 index 0000000..79a45d2 --- /dev/null +++ b/src/util/filemanager.c @@ -0,0 +1,211 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: util/filemanager.c + Description: Provides a simple interface for managing files + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 04/01/2019 + ****************************************************************************** +*/ + + +// MSVC ONLY +#ifdef _DEBUG + #define _CRTDBG_MAP_ALLOC + #include + #include +#else + #include +#endif + +#include + +#include "filemanager.h" + + +typedef struct file_s { + char *filename; // Assumes this is a null terminated string + FILE *file; +} file_handle_t; + + +// local (private) functions +int _fopen(FILE **f, const char *name, const char *mode); +int _get_temp_filename(char **tempname); + + +file_handle_t *create_file_manager() { + + file_handle_t *file_handle; + file_handle = (file_handle_t *)calloc(1, sizeof(file_handle_t)); + + file_handle->filename = NULL; + file_handle->file = NULL; + + return file_handle; +} + +void delete_file_manager(file_handle_t *file_handle) { + + if (file_handle->file != NULL) + close_file(file_handle); + + free(file_handle->filename); + free(file_handle); +} + + +int get_filename(file_handle_t *file_handle, char **filename) +// +// BE AWARE: The memory allocated here must be freed by the caller +// +{ + return cstr_duplicate(filename, file_handle->filename); +} + + +int open_file(file_handle_t *file_handle, const char *filename, const char *file_mode) { + int error = 0; + + if (filename == NULL) + _get_temp_filename(&(file_handle->filename)); + else + cstr_duplicate(&(file_handle->filename), filename); + + if (file_mode == NULL) + error = -1; + else { + error = _fopen(&(file_handle->file), file_handle->filename, file_mode); + } + + return error; +} + +int seek_file(file_handle_t *file_handle, F_OFF offset, int whence) +{ +#ifdef _MSC_VER // Windows (32-bit and 64-bit) +#define FSEEK64 _fseeki64 +#else // Other platforms +#define FSEEK64 fseeko +#endif + + return FSEEK64(file_handle->file, offset, whence); +} + +F_OFF tell_file(file_handle_t *file_handle) +{ +#ifdef _MSC_VER // Windows (32-bit and 64-bit) +#define FTELL64 _ftelli64 +#else // Other platforms +#define FTELL64 ftello +#endif + + return FTELL64(file_handle->file); +} + +// Read and write to a binary file +size_t read_file(void *ptr, size_t size, size_t nmemb, file_handle_t *file_handle) +{ + return fread(ptr, size, nmemb, file_handle->file); +} + +size_t write_file(const void * ptr, size_t size, size_t count, file_handle_t *file_handle) +{ + return fwrite(ptr, size, count, file_handle->file); +} + + +// print and get from a text file +int printf_file(file_handle_t *file_handle, const char *format, ... ) +{ + int error = 0; + va_list args; + + va_start(args, format); + error = vfprintf(file_handle->file, format, args); + va_end(args); + + return error; +} + +int gets_file(char *str, int num, file_handle_t *file_handle) +{ + fgets(str, num, file_handle->file); + return 0; +} + + +int close_file(file_handle_t *file_handle) { + int error = 0; + + if (file_handle->file != NULL) { + error = fclose(file_handle->file); + file_handle->file = NULL; + } + return error; +} + +int remove_file(file_handle_t *file_handle) { + return remove(file_handle->filename); +} + + +bool is_valid(file_handle_t *file_handle) +{ + if ((file_handle->filename == NULL && file_handle->file == NULL) || + (cstr_isnullterm(file_handle->filename) && file_handle != NULL)) + return true; + else + return false; +} + + +int _fopen(FILE **f, const char *name, const char *mode) +// +// Purpose: Substitute for fopen_s on platforms where it doesn't exist +// Note: fopen_s is part of C++11 standard +// +{ + int ret = 0; + +#ifdef _MSC_VER + ret = (int)fopen_s(f, name, mode); +#else + *f = fopen(name, mode); + if (!*f) + ret = -1; +#endif + return ret; +} + +int _get_temp_filename(char **tempname) +{ + int error = 0; + +#ifdef _MSC_VER + char *name = NULL; + + // --- use Windows _tempnam function to get a pointer to an + // unused file name that begins with "en" + if ((name = _tempnam(name, "en")) == NULL) { + error = -1; + return error; + } + else + cstr_duplicate(tempname, name); + + // --- free the pointer returned by _tempnam + if (name) + free(name); + + // --- for non-Windows systems: +#else + // --- use system function mkstemp() to create a temporary file name + cstr_duplicate(tempname, "enXXXXXX"); + error = mkstemp(*tempname); +#endif + return error; +} diff --git a/src/util/filemanager.h b/src/util/filemanager.h new file mode 100644 index 0000000..a3866c3 --- /dev/null +++ b/src/util/filemanager.h @@ -0,0 +1,81 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: util/filemanager.h + Description: Provides a simple interface for managing files + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 04/01/2019 + ****************************************************************************** +*/ + +#ifndef FILEMANAGER_H_ +#define FILEMANAGER_H_ + + +#include +#include + +#include "cstr_helper.h" + + +// F_OFF Must be a 8 byte / 64 bit integer for large file support +#ifdef _MSC_VER // Windows (32-bit and 64-bit) +#define F_OFF __int64 +#else // Other platforms +#define F_OFF off_t +#endif + +#define FILE_MAXNAME 259 + + +#if defined(__cplusplus) +extern "C" { +#endif + +// Forward declariation of file_handle_t +typedef struct file_s file_handle_t; + + +file_handle_t *create_file_manager(); + +void delete_file_manager(file_handle_t *file_handle); + + +int get_filename(file_handle_t *file_handle, char **filename); + + +int open_file(file_handle_t *file_handle, const char *filename, const char *file_mode); + +int seek_file(file_handle_t *file_handle, F_OFF offset, int whence); + +F_OFF tell_file(file_handle_t *file_handle); + + +// Functions for working with binary files +size_t read_file(void *ptr, size_t size, size_t nmemb, file_handle_t *file_handle); + +size_t write_file(const void *ptr, size_t size, size_t count, file_handle_t *file_handle); + + +// Functions for working with text files +int printf_file(file_handle_t *file_handle, const char *format, ... ); + +int gets_file(char *str, int num, file_handle_t *file_handle); + + +int close_file(file_handle_t *file_handle); + +int remove_file(file_handle_t *file_handle); + + +bool is_valid(file_handle_t *file_handle); + + +#if defined(__cplusplus) +} +#endif + +#endif /* FILEMANAGER_H_ */ diff --git a/src/vars.h b/src/vars.h deleted file mode 100755 index 1b95d1a..0000000 --- a/src/vars.h +++ /dev/null @@ -1,211 +0,0 @@ -/* -************************************************************************ - Global Variables for EPANET Program - -VERSION: 2.00 -DATE: 5/8/00 - 6/24/02 - 2/14/08 (2.00.12) -AUTHOR: L. Rossman - US EPA - NRMRL - -************************************************************************ -*/ -#ifndef VARS_H -#define VARS_H - -#include -#include "hash.h" - -EXTERN FILE *InFile, /* Input file pointer */ - *OutFile, /* Output file pointer */ - *RptFile, /* Report file pointer */ - *HydFile, /* Hydraulics file pointer */ - *TmpOutFile; /* Temporary file handle */ -EXTERN long HydOffset, /* Hydraulics file byte offset */ - OutOffset1, /* 1st output file byte offset */ - OutOffset2; /* 2nd output file byte offset */ -EXTERN char Msg[MAXMSG+1], /* Text of output message */ - InpFname[MAXFNAME+1], /* Input file name */ - Rpt1Fname[MAXFNAME+1], /* Primary report file name */ - Rpt2Fname[MAXFNAME+1], /* Secondary report file name */ - HydFname[MAXFNAME+1], /* Hydraulics file name */ - OutFname[MAXFNAME+1], /* Binary output file name */ - MapFname[MAXFNAME+1], /* Map file name */ - TmpFname[MAXFNAME+1], /* Temporary file name */ //(2.00.12 - LR) - TmpDir[MAXFNAME+1], /* Temporary directory name */ //(2.00.12 - LR) - Title[MAXTITLE][MAXMSG+1], /* Problem title */ - ChemName[MAXID+1], /* Name of chemical */ - ChemUnits[MAXID+1], /* Units of chemical */ - DefPatID[MAXID+1], /* Default demand pattern ID */ - -/*** Updated 6/24/02 ***/ - Atime[13], /* Clock time (hrs:min:sec) */ - - Outflag, /* Output file flag */ //(2.00.12 - LR) - Hydflag, /* Hydraulics flag */ - Qualflag, /* Water quality flag */ - Reactflag, /* Reaction indicator */ //(2.00.12 - LR) - Unitsflag, /* Unit system flag */ - Flowflag, /* Flow units flag */ - Pressflag, /* Pressure units flag */ - Formflag, /* Hydraulic formula flag */ - Rptflag, /* Report flag */ - Summaryflag, /* Report summary flag */ - Messageflag, /* Error/warning message flag */ - Statflag, /* Status report flag */ - Energyflag, /* Energy report flag */ - Nodeflag, /* Node report flag */ - Linkflag, /* Link report flag */ - Tstatflag, /* Time statistics flag */ - Warnflag, /* Warning flag */ - Openflag, /* Input processed flag */ - OpenHflag, /* Hydraul. system opened flag */ - SaveHflag, /* Hydraul. results saved flag */ - OpenQflag, /* Quality system opened flag */ - SaveQflag, /* Quality results saved flag */ - Saveflag, /* General purpose save flag */ - Coordflag; /* Load coordinates flag */ -EXTERN int MaxNodes, /* Node count from input file */ - MaxLinks, /* Link count from input file */ - MaxJuncs, /* Junction count */ - MaxPipes, /* Pipe count */ - MaxTanks, /* Tank count */ - MaxPumps, /* Pump count */ - MaxValves, /* Valve count */ - MaxControls, /* Control count */ - MaxRules, /* Rule count */ - MaxPats, /* Pattern count */ - MaxCurves, /* Curve count */ - Nnodes, /* Number of network nodes */ - Ntanks, /* Number of tanks */ - Njuncs, /* Number of junction nodes */ - Nlinks, /* Number of network links */ - Npipes, /* Number of pipes */ - Npumps, /* Number of pumps */ - Nvalves, /* Number of valves */ - Ncontrols, /* Number of simple controls */ - Nrules, /* Number of control rules */ - Npats, /* Number of time patterns */ - Ncurves, /* Number of data curves */ - Nperiods, /* Number of reporting periods */ - Ncoeffs, /* Number of non-0 matrix coeffs*/ - DefPat, /* Default demand pattern */ - Epat, /* Energy cost time pattern */ - MaxIter, /* Max. hydraulic trials */ - ExtraIter, /* Extra hydraulic trials */ - TraceNode, /* Source node for flow tracing */ - PageSize, /* Lines/page in output report */ - CheckFreq, /* Hydraulics solver parameter */ - MaxCheck; /* Hydraulics solver parameter */ -EXTERN double Ucf[MAXVAR], /* Unit conversion factors */ - Ctol, /* Water quality tolerance */ - Htol, /* Hydraulic head tolerance */ - Qtol, /* Flow rate tolerance */ - RQtol, /* Flow resistance tolerance */ - Hexp, /* Exponent in headloss formula */ - Qexp, /* Exponent in orifice formula */ - Dmult, /* Demand multiplier */ - Hacc, /* Hydraulics solution accuracy */ - DampLimit, /* Solution damping threshold */ //(2.00.12 - LR) - BulkOrder, /* Bulk flow reaction order */ - WallOrder, /* Pipe wall reaction order */ - TankOrder, /* Tank reaction order */ - Kbulk, /* Global bulk reaction coeff. */ - Kwall, /* Global wall reaction coeff. */ - Climit, /* Limiting potential quality */ - Rfactor, /* Roughness-reaction factor */ - Diffus, /* Diffusivity (sq ft/sec) */ - Viscos, /* Kin. viscosity (sq ft/sec) */ - SpGrav, /* Specific gravity */ - Ecost, /* Base energy cost per kwh */ - Dcost, /* Energy demand charge/kw/day */ - Epump, /* Global pump efficiency */ - Emax, /* Peak energy usage */ - Dsystem, /* Total system demand */ - Wbulk, /* Avg. bulk reaction rate */ - Wwall, /* Avg. wall reaction rate */ - Wtank, /* Avg. tank reaction rate */ - Wsource; /* Avg. mass inflow */ -EXTERN long Tstart, /* Starting time of day (sec) */ - Hstep, /* Nominal hyd. time step (sec) */ - Qstep, /* Quality time step (sec) */ - Pstep, /* Time pattern time step (sec) */ - Pstart, /* Starting pattern time (sec) */ - Rstep, /* Reporting time step (sec) */ - Rstart, /* Time when reporting starts */ - Rtime, /* Next reporting time */ - Htime, /* Current hyd. time (sec) */ - Qtime, /* Current quality time (sec) */ - Hydstep, /* Actual hydraulic time step */ - Rulestep, /* Rule evaluation time step */ - Dur; /* Duration of simulation (sec) */ -EXTERN SField Field[MAXVAR]; /* Output reporting fields */ - -/* Array pointers not allocated and freed in same routine */ -EXTERN char *LinkStatus, /* Link status */ - *OldStat; /* Previous link/tank status */ -EXTERN double *NodeDemand, /* Node actual demand */ - *NodeQual, /* Node actual quality */ - *E, /* Emitter flows */ - *LinkSetting, /* Link settings */ - *Q, /* Link flows */ - *PipeRateCoeff, /* Pipe reaction rate */ - *X, /* General purpose array */ - *TempQual; /* General purpose array for water quality */ -EXTERN double *NodeHead; /* Node heads */ -EXTERN double *QTankVolumes; -EXTERN double *QLinkFlow; -EXTERN STmplist *Patlist; /* Temporary time pattern list */ -EXTERN STmplist *Curvelist; /* Temporary list of curves */ -EXTERN Spattern *Pattern; /* Time patterns */ -EXTERN Scurve *Curve; /* Curve data */ -EXTERN Scoord *Coord; /* Coordinate data */ -EXTERN Snode *Node; /* Node data */ -EXTERN Slink *Link; /* Link data */ -EXTERN Stank *Tank; /* Tank data */ -EXTERN Spump *Pump; /* Pump data */ -EXTERN Svalve *Valve; /* Valve data */ -EXTERN Scontrol *Control; /* Control data */ -EXTERN ENHashTable *NodeHashTable, *LinkHashTable; /* Hash tables for ID labels */ -EXTERN Padjlist *Adjlist; /* Node adjacency lists */ -EXTERN double _relativeError; -EXTERN int _iterations; /* Info about hydraulic solution */ - -/* -** NOTE: Hydraulic analysis of the pipe network at a given point in time -** is done by repeatedly solving a linearized version of the -** equations for conservation of flow & energy: -** -** A*H = F -** -** where H = vector of heads (unknowns) at each node, -** F = vector of right-hand side coeffs. -** A = square matrix of coeffs. -** and both A and F are updated at each iteration until there is -** negligible change in pipe flows. -** -** Each row (or column) of A corresponds to a junction in the pipe -** network. Each link (pipe, pump or valve) in the network has a -** non-zero entry in the row-column of A that corresponds to its -** end points. This results in A being symmetric and very sparse. -** The following arrays are used to efficiently manage this sparsity: -*/ - -EXTERN double *Aii, /* Diagonal coeffs. of A */ - *Aij, /* Non-zero, off-diagonal coeffs. of A */ - *F; /* Right hand side coeffs. */ -EXTERN double *P, /* Inverse headloss derivatives */ - *Y; /* Flow correction factors */ -EXTERN int *Order, /* Node-to-row of A */ - *Row, /* Row-to-node of A */ - *Ndx; /* Index of link's coeff. in Aij */ -/* -** The following arrays store the positions of the non-zero coeffs. -** of the lower triangular portion of A whose values are stored in Aij: -*/ -EXTERN int *XLNZ, /* Start position of each column in NZSUB */ - *NZSUB, /* Row index of each coeff. in each column */ - *LNZ; /* Position of each coeff. in Aij array */ - -#endif \ No newline at end of file diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..995d01f --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,75 @@ +# +# CMakeLists.txt - CMake configuration file for epanet/tests +# +# Created: February 13, 2018 +# +# Modified by: Michael E. Tryby +# US EPA ORD/NRMRL +# + + +# Sets for output directory for executables and libraries. +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + +if(UNIX) + set(CMAKE_CXX_FLAGS "-std=c++11") +endif(UNIX) + + +add_executable(test_net_builder test_net_builder.cpp) +target_link_libraries(test_net_builder ${Boost_LIBRARIES} epanet2) +add_test(NAME test_net_builder + COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_net_builder + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data) + + +set(toolkit_test_srcs + test_toolkit.cpp + test_project.cpp + test_hydraulics.cpp + test_quality.cpp + test_report.cpp + test_analysis.cpp + test_node.cpp + test_demand.cpp + test_link.cpp +# test_pump.cpp + test_pattern.cpp + test_curve.cpp + test_control.cpp + test_overflow.cpp + test_pda.cpp +) + +add_executable(test_toolkit ${toolkit_test_srcs}) +target_link_libraries(test_toolkit ${Boost_LIBRARIES} epanet2) +add_test(NAME test_toolkit + COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_toolkit + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data) + + + +add_executable(test_reent test_reent.cpp) + +IF(MSVC) + target_link_libraries(test_reent ${Boost_LIBRARIES} epanet2) +ELSE(TRUE) + target_link_libraries(test_reent ${Boost_LIBRARIES} pthread epanet2) +ENDIF(MSVC) + +add_test(NAME test_reent + COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_reent + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data) + + +# ctest doesn't like tests added in subdirectories so adding them here +add_test(NAME test_errormanager + COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_errormanager) + +add_test(NAME test_filemanager + COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_filemanager + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/outfile/data) + +add_test(NAME test_output + COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_output + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/outfile/data) diff --git a/tests/network_tests/net1/net1.enb b/tests/data/example1.out similarity index 87% rename from tests/network_tests/net1/net1.enb rename to tests/data/example1.out index 489729c..416c98b 100644 Binary files a/tests/network_tests/net1/net1.enb and b/tests/data/example1.out differ diff --git a/tests/data/example_0.inp b/tests/data/example_0.inp new file mode 100644 index 0000000..3be1e96 --- /dev/null +++ b/tests/data/example_0.inp @@ -0,0 +1,481 @@ +[TITLE] +EPANET Example Network 3 +Example showing how the percent of Lake water in a dual-source +system changes over time. + +[JUNCTIONS] +;ID Elev Demand Pattern + 10 147 0 ; + 15 32 1 3 ; + 20 129 0 ; + 35 12.5 1 4 ; + 40 131.9 0 ; + 50 116.5 0 ; + 60 0 0 ; + 601 0 0 ; + 61 0 0 ; + 101 42 189.95 ; + 103 43 133.2 ; + 105 28.5 135.37 ; + 107 22 54.64 ; + 109 20.3 231.4 ; + 111 10 141.94 ; + 113 2 20.01 ; + 115 14 52.1 ; + 117 13.6 117.71 ; + 119 2 176.13 ; + 120 0 0 ; + 121 -2 41.63 ; + 123 11 1 2 ; + 125 11 45.6 ; + 127 56 17.66 ; + 129 51 0 ; + 131 6 42.75 ; + 139 31 5.89 ; + 141 4 9.85 ; + 143 -4.5 6.2 ; + 145 1 27.63 ; + 147 18.5 8.55 ; + 149 16 27.07 ; + 151 33.5 144.48 ; + 153 66.2 44.17 ; + 157 13.1 51.79 ; + 159 6 41.32 ; + 161 4 15.8 ; + 163 5 9.42 ; + 164 5 0 ; + 166 -2 2.6 ; + 167 -5 14.56 ; + 169 -5 0 ; + 171 -4 39.34 ; + 173 -4 0 ; + 177 8 58.17 ; + 179 8 0 ; + 181 8 0 ; + 183 11 0 ; + 184 16 0 ; + 185 16 25.65 ; + 187 12.5 0 ; + 189 4 107.92 ; + 191 25 81.9 ; + 193 18 71.31 ; + 195 15.5 0 ; + 197 23 17.04 ; + 199 -2 119.32 ; + 201 0.1 44.61 ; + 203 2 1 5 ; + 204 21 0 ; + 205 21 65.36 ; + 206 1 0 ; + 207 9 69.39 ; + 208 16 0 ; + 209 -2 0.87 ; + 211 7 8.67 ; + 213 7 13.94 ; + 215 7 92.19 ; + 217 6 24.22 ; + 219 4 41.32 ; + 225 8 22.8 ; + 229 10.5 64.18 ; + 231 5 16.48 ; + 237 14 15.61 ; + 239 13 44.61 ; + 241 13 0 ; + 243 14 4.34 ; + 247 18 70.38 ; + 249 18 0 ; + 251 30 24.16 ; + 253 36 54.52 ; + 255 27 40.39 ; + 257 17 0 ; + 259 25 0 ; + 261 0 0 ; + 263 0 0 ; + 265 0 0 ; + 267 21 0 ; + 269 0 0 ; + 271 6 0 ; + 273 8 0 ; + 275 10 0 ; + +[RESERVOIRS] +;ID Head Pattern + River 220.0 ; + Lake 167.0 ; + +[TANKS] +;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve + 1 131.9 13.1 .1 32.1 85 0 ; + 2 116.5 23.5 6.5 40.3 50 0 ; + 3 129.0 29.0 4.0 35.5 164 0 ; + +[PIPES] +;ID Node1 Node2 Length Diameter Roughness MinorLoss Status + 20 3 20 99 99 199 0 Open ; + 40 1 40 99 99 199 0 Open ; + 50 2 50 99 99 199 0 Open ; + 60 River 60 1231 24 140 0 Open ; + 101 10 101 14200 18 110 0 Open ; + 103 101 103 1350 16 130 0 Open ; + 105 101 105 2540 12 130 0 Open ; + 107 105 107 1470 12 130 0 Open ; + 109 103 109 3940 16 130 0 Open ; + 111 109 111 2000 12 130 0 Open ; + 112 115 111 1160 12 130 0 Open ; + 113 111 113 1680 12 130 0 Open ; + 114 115 113 2000 8 130 0 Open ; + 115 107 115 1950 8 130 0 Open ; + 116 113 193 1660 12 130 0 Open ; + 117 263 105 2725 12 130 0 Open ; + 119 115 117 2180 12 130 0 Open ; + 120 119 120 730 12 130 0 Open ; + 121 120 117 1870 12 130 0 Open ; + 122 121 120 2050 8 130 0 Open ; + 123 121 119 2000 30 141 0 Open ; + 125 123 121 1500 30 141 0 Open ; + 129 121 125 930 24 130 0 Open ; + 131 125 127 3240 24 130 0 Open ; + 133 20 127 785 20 130 0 Open ; + 135 127 129 900 24 130 0 Open ; + 137 129 131 6480 16 130 0 Open ; + 145 129 139 2750 8 130 0 Open ; + 147 139 141 2050 8 130 0 Open ; + 149 143 141 1400 8 130 0 Open ; + 151 15 143 1650 8 130 0 Open ; + 153 145 141 3510 12 130 0 Open ; + 155 147 145 2200 12 130 0 Open ; + 159 147 149 880 12 130 0 Open ; + 161 149 151 1020 8 130 0 Open ; + 163 151 153 1170 12 130 0 Open ; + 169 125 153 4560 8 130 0 Open ; + 171 119 151 3460 12 130 0 Open ; + 173 119 157 2080 30 141 0 Open ; + 175 157 159 2910 30 141 0 Open ; + 177 159 161 2000 30 141 0 Open ; + 179 161 163 430 30 141 0 Open ; + 180 163 164 150 14 130 0 Open ; + 181 164 166 490 14 130 0 Open ; + 183 265 169 590 30 141 0 Open ; + 185 167 169 60 8 130 0 Open ; + 186 187 204 99.9 8 130 0 Open ; + 187 169 171 1270 30 141 0 Open ; + 189 171 173 50 30 141 0 Open ; + 191 271 171 760 24 130 0 Open ; + 193 35 181 30 24 130 0 Open ; + 195 181 177 30 12 130 0 Open ; + 197 177 179 30 12 130 0 Open ; + 199 179 183 210 12 130 0 Open ; + 201 40 179 1190 12 130 0 Open ; + 202 185 184 99.9 8 130 0 Open ; + 203 183 185 510 8 130 0 Open ; + 204 184 205 4530. 12 130 0 Open ; + 205 204 185 1325. 12 130 0 Open ; + 207 189 183 1350 12 130 0 Open ; + 209 189 187 500 8 130 0 Open ; + 211 169 269 646 12 130 0 Open ; + 213 191 187 2560 12 130 0 Open ; + 215 267 189 1230 12 130 0 Open ; + 217 191 193 520 12 130 0 Open ; + 219 193 195 360 12 130 0 Open ; + 221 161 195 2300 8 130 0 Open ; + 223 197 191 1150 12 130 0 Open ; + 225 111 197 2790 12 130 0 Open ; + 229 173 199 4000 24 141 0 Open ; + 231 199 201 630 24 141 0 Open ; + 233 201 203 120 24 130 0 Open ; + 235 199 273 725 12 130 0 Open ; + 237 205 207 1200 12 130 0 Open ; + 238 207 206 450 12 130 0 Open ; + 239 275 207 1430 12 130 0 Open ; + 240 206 208 510 12 130 0 Open ; + 241 208 209 885 12 130 0 Open ; + 243 209 211 1210 16 130 0 Open ; + 245 211 213 990 16 130 0 Open ; + 247 213 215 4285 16 130 0 Open ; + 249 215 217 1660 16 130 0 Open ; + 251 217 219 2050 14 130 0 Open ; + 257 217 225 1560 12 130 0 Open ; + 261 213 229 2200 8 130 0 Open ; + 263 229 231 1960 12 130 0 Open ; + 269 211 237 2080 12 130 0 Open ; + 271 237 229 790 8 130 0 Open ; + 273 237 239 510 12 130 0 Open ; + 275 239 241 35 12 130 0 Open ; + 277 241 243 2200 12 130 0 Open ; + 281 241 247 445 10 130 0 Open ; + 283 239 249 430 12 130 0 Open ; + 285 247 249 10 12 130 0 Open ; + 287 247 255 1390 10 130 0 Open ; + 289 50 255 925 10 130 0 Open ; + 291 255 253 1100 10 130 0 Open ; + 293 255 251 1100 8 130 0 Open ; + 295 249 251 1450 12 130 0 Open ; + 297 120 257 645 8 130 0 Open ; + 299 257 259 350 8 130 0 Open ; + 301 259 263 1400 8 130 0 Open ; + 303 257 261 1400 8 130 0 Open ; + 305 117 261 645 12 130 0 Open ; + 307 261 263 350 12 130 0 Open ; + 309 265 267 1580 8 130 0 Open ; + 311 193 267 1170 12 130 0 Open ; + 313 269 189 646 12 130 0 Open ; + 315 181 271 260 24 130 0 Open ; + 317 273 275 2230 8 130 0 Open ; + 319 273 205 645 12 130 0 Open ; + 321 163 265 1200 30 141 0 Open ; + 323 201 275 300 12 130 0 Open ; + 325 269 271 1290 8 130 0 Open ; + 329 61 123 45500 30 140 0 Open ; + 330 60 601 1 30 140 0 Closed ; + 333 601 61 1 30 140 0 Open ; + +[PUMPS] +;ID Node1 Node2 Parameters + 10 Lake 10 HEAD 1 ; + 335 60 61 HEAD 2 ; + +[VALVES] +;ID Node1 Node2 Diameter Type Setting MinorLoss + +[TAGS] + +[DEMANDS] +;Junction Demand Pattern Category + +[STATUS] +;ID Status/Setting + 10 Closed + +[PATTERNS] +;ID Multipliers +;General Default Demand Pattern + 1 1.34 1.94 1.46 1.44 .76 .92 + 1 .85 1.07 .96 1.1 1.08 1.19 + 1 1.16 1.08 .96 .83 .79 .74 + 1 .64 .64 .85 .96 1.24 1.67 +;Demand Pattern for Node 123 + 2 0 0 0 0 0 1219 + 2 0 0 0 1866 1836 1818 + 2 1818 1822 1822 1817 1824 1816 + 2 1833 1817 1830 1814 1840 1859 +;Demand Pattern for Node 15 + 3 620 620 620 620 620 360 + 3 360 0 0 0 0 360 + 3 360 360 360 360 0 0 + 3 0 0 0 0 360 360 +;Demand Pattern for Node 35 + 4 1637 1706 1719 1719 1791 1819 + 4 1777 1842 1815 1825 1856 1801 + 4 1819 1733 1664 1620 1613 1620 + 4 1616 1647 1627 1627 1671 1668 +;Demand Pattern for Node 203 + 5 4439 4531 4511 4582 4531 4582 + 5 4572 4613 4643 4643 4592 4613 + 5 4531 4521 4449 4439 4449 4460 + 5 4439 4419 4368 4399 4470 4480 + +[CURVES] +;ID X-Value Y-Value +;PUMP: Pump Curve for Pump 10 (Lake Source) + 1 0 104. + 1 2000. 92. + 1 4000. 63. +;PUMP: Pump Curve for Pump 335 (River Source) + 2 0 200. + 2 8000. 138. + 2 14000. 86. + +[CONTROLS] +;Lake source operates only part of the day +Link 10 OPEN AT TIME 1 +Link 10 CLOSED AT TIME 15 + +;Pump 335 controlled by level in Tank 1 +;When pump is closed, bypass pipe is opened +Link 335 OPEN IF Node 1 BELOW 17.1 +Link 335 CLOSED IF Node 1 ABOVE 19.1 +Link 330 CLOSED IF Node 1 BELOW 17.1 +Link 330 OPEN IF Node 1 ABOVE 19.1 + + +[RULES] + +[ENERGY] + Global Efficiency 75 + Global Price 0.0 + Demand Charge 0.0 + +[EMITTERS] +;Junction Coefficient + +[QUALITY] +;Node InitQual + +[SOURCES] +;Node Type Quality Pattern + +[REACTIONS] +;Type Pipe/Tank Coefficient + + +[REACTIONS] + Order Bulk 1 + Order Tank 1 + Order Wall 1 + Global Bulk 0.0 + Global Wall 0.0 + Limiting Potential 0.0 + Roughness Correlation 0.0 + +[MIXING] +;Tank Model + +[TIMES] + Duration 24:00 + Hydraulic Timestep 1:00 + Quality Timestep 0:05 + Pattern Timestep 1:00 + Pattern Start 0:00 + Report Timestep 1:00 + Report Start 0:00 + Start ClockTime 12 am + Statistic None + +[REPORT] + Status Yes + Summary No + Page 0 + +[OPTIONS] + Units GPM + Headloss H-W + Specific Gravity 1.0 + Viscosity 1.0 + Trials 40 + Accuracy 0.001 + CHECKFREQ 2 + MAXCHECK 10 + DAMPLIMIT 0 + Unbalanced Continue 10 + Pattern 1 + Demand Multiplier 1.0 + Emitter Exponent 0.5 + Quality Trace Lake + Diffusivity 1.0 + Tolerance 0.01 + +[COORDINATES] +;Node X-Coord Y-Coord + 10 9.00 27.85 + 15 38.68 23.76 + 20 29.44 26.91 + 35 25.46 10.52 + 40 27.02 9.81 + 50 33.01 3.01 + 60 23.90 29.94 + 601 23.00 29.49 + 61 23.71 29.03 + 101 13.81 22.94 + 103 12.96 21.31 + 105 16.97 21.28 + 107 18.45 20.46 + 109 17.64 18.92 + 111 20.21 17.53 + 113 22.04 16.61 + 115 20.98 19.18 + 117 21.69 21.28 + 119 23.70 22.76 + 120 22.08 23.10 + 121 23.54 25.50 + 123 23.37 27.31 + 125 24.59 25.64 + 127 29.29 26.40 + 129 30.32 26.39 + 131 37.89 29.55 + 139 33.28 24.54 + 141 35.68 23.08 + 143 37.47 21.97 + 145 33.02 19.29 + 147 30.24 20.38 + 149 29.62 20.74 + 151 28.29 21.39 + 153 28.13 22.63 + 157 24.85 20.16 + 159 23.12 17.50 + 161 25.10 15.28 + 163 25.39 14.98 + 164 25.98 15.14 + 166 26.48 15.13 + 167 25.88 12.98 + 169 25.68 12.74 + 171 26.65 11.80 + 173 26.87 11.59 + 177 25.92 10.59 + 179 25.71 10.40 + 181 25.72 10.74 + 183 25.45 10.18 + 184 25.15 9.52 + 185 25.01 9.67 + 187 23.64 11.04 + 189 24.15 11.37 + 191 22.10 14.07 + 193 22.88 14.35 + 195 23.18 14.72 + 197 20.97 15.18 + 199 29.42 8.44 + 201 30.89 8.57 + 203 31.14 8.89 + 204 23.80 10.90 + 205 29.20 6.46 + 206 31.66 6.64 + 207 31.00 6.61 + 208 32.54 6.81 + 209 33.76 6.59 + 211 34.20 5.54 + 213 35.26 6.16 + 215 39.95 8.73 + 217 42.11 8.67 + 219 44.86 9.32 + 225 43.53 7.38 + 229 36.16 3.49 + 231 38.38 2.54 + 237 35.37 3.08 + 239 35.76 2.31 + 241 35.87 2.11 + 243 37.04 0.00 + 247 35.02 2.05 + 249 35.02 1.81 + 251 34.15 1.10 + 253 32.17 1.88 + 255 33.51 2.45 + 257 21.17 23.32 + 259 20.80 23.40 + 261 20.79 21.45 + 263 20.32 21.57 + 265 25.39 13.60 + 267 23.38 12.95 + 269 25.03 12.14 + 271 25.97 11.00 + 273 29.16 7.38 + 275 31.07 8.29 + River 24.15 31.06 + Lake 8.00 27.53 + 1 27.46 9.84 + 2 32.99 3.45 + 3 29.41 27.27 + +[VERTICES] +;Link X-Coord Y-Coord + +[LABELS] +;X-Coord Y-Coord Label & Anchor Node + 8.00 29.42 "LAKE" + 25.00 31.10 "RIVER" + +[BACKDROP] + DIMENSIONS 6.16 -1.55 46.70 32.61 + UNITS None + FILE + OFFSET 0.00 0.00 + +[END] diff --git a/tests/network_tests/net1/net1.inp b/tests/data/example_1.inp similarity index 100% rename from tests/network_tests/net1/net1.inp rename to tests/data/example_1.inp diff --git a/tests/data/net1.inp b/tests/data/net1.inp new file mode 100644 index 0000000..4df5bbf --- /dev/null +++ b/tests/data/net1.inp @@ -0,0 +1,178 @@ +[TITLE] + EPANET Example Network 1 +A simple example of modeling chlorine decay. Both bulk and +wall reactions are included. + +[JUNCTIONS] +;ID Elev Demand Pattern + 10 710 0 ; + 11 710 150 ; + 12 700 150 ; + 13 695 100 ; + 21 700 150 ; + 22 695 200 ; + 23 690 150 ; + 31 700 100 ; + 32 710 100 ; + +[RESERVOIRS] +;ID Head Pattern + 9 800 ; + +[TANKS] +;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve + 2 850 120 100 150 50.5 0 ; + +[PIPES] +;ID Node1 Node2 Length Diameter Roughness MinorLoss Status + 10 10 11 10530 18 100 0 Open ; + 11 11 12 5280 14 100 0 Open ; + 12 12 13 5280 10 100 0 Open ; + 21 21 22 5280 10 100 0 Open ; + 22 22 23 5280 12 100 0 Open ; + 31 31 32 5280 6 100 0 Open ; + 110 2 12 200 18 100 0 Open ; + 111 11 21 5280 10 100 0 Open ; + 112 12 22 5280 12 100 0 Open ; + 113 13 23 5280 8 100 0 Open ; + 121 21 31 5280 8 100 0 Open ; + 122 22 32 5280 6 100 0 Open ; + +[PUMPS] +;ID Node1 Node2 Parameters + 9 9 10 HEAD 1 ; + +[VALVES] +;ID Node1 Node2 Diameter Type Setting MinorLoss + +[TAGS] + +[DEMANDS] +;Junction Demand Pattern Category + +[STATUS] +;ID Status/Setting + +[PATTERNS] +;ID Multipliers +;Demand Pattern + 1 1.0 1.2 1.4 1.6 1.4 1.2 + 1 1.0 0.8 0.6 0.4 0.6 0.8 + +[CURVES] +;ID X-Value Y-Value +;PUMP: Pump Curve for Pump 9 + 1 1500 250 + +[CONTROLS] + LINK 9 OPEN IF NODE 2 BELOW 110 + LINK 9 CLOSED IF NODE 2 ABOVE 140 + + +[RULES] + +[ENERGY] + Global Efficiency 75 + Global Price 0.0 + Demand Charge 0.0 + +[EMITTERS] +;Junction Coefficient + +[QUALITY] +;Node InitQual + 10 0.5 + 11 0.5 + 12 0.5 + 13 0.5 + 21 0.5 + 22 0.5 + 23 0.5 + 31 0.5 + 32 0.5 + 9 1.0 + 2 1.0 + +[SOURCES] +;Node Type Quality Pattern + +[REACTIONS] +;Type Pipe/Tank Coefficient + + +[REACTIONS] + Order Bulk 1 + Order Tank 1 + Order Wall 1 + Global Bulk -.5 + Global Wall -1 + Limiting Potential 0.0 + Roughness Correlation 0.0 + +[MIXING] +;Tank Model + +[TIMES] + Duration 24:00 + Hydraulic Timestep 1:00 + Quality Timestep 0:05 + Pattern Timestep 2:00 + Pattern Start 0:00 + Report Timestep 1:00 + Report Start 0:00 + Start ClockTime 12 am + Statistic None + +[REPORT] + Status Yes + Summary No + Page 0 + +[OPTIONS] + Units GPM + Headloss H-W + Specific Gravity 1.0 + Viscosity 1.0 + Trials 40 + Accuracy 0.001 + CHECKFREQ 2 + MAXCHECK 10 + DAMPLIMIT 0 + Unbalanced Continue 10 + Pattern 1 + Demand Multiplier 1.0 + Emitter Exponent 0.5 + Quality Chlorine mg/L + Diffusivity 1.0 + Tolerance 0.01 + +[COORDINATES] +;Node X-Coord Y-Coord + 10 20.00 70.00 + 11 30.00 70.00 + 12 50.00 70.00 + 13 70.00 70.00 + 21 30.00 40.00 + 22 50.00 40.00 + 23 70.00 40.00 + 31 30.00 10.00 + 32 50.00 10.00 + 9 10.00 70.00 + 2 50.00 90.00 + +[VERTICES] +;Link X-Coord Y-Coord + +[LABELS] +;X-Coord Y-Coord Label & Anchor Node + 6.99 73.63 "Source" + 13.48 68.13 "Pump" + 43.85 91.21 "Tank" + +[BACKDROP] + DIMENSIONS 7.00 6.00 73.00 94.00 + UNITS None + FILE + OFFSET 0.00 0.00 + +[END] diff --git a/tests/data/net1.out b/tests/data/net1.out new file mode 100644 index 0000000..6cede26 Binary files /dev/null and b/tests/data/net1.out differ diff --git a/tests/outfile/CMakeLists.txt b/tests/outfile/CMakeLists.txt new file mode 100644 index 0000000..6d0b730 --- /dev/null +++ b/tests/outfile/CMakeLists.txt @@ -0,0 +1,14 @@ + +if(UNIX) + set(CMAKE_CXX_FLAGS "-std=c++11") +endif(UNIX) + +# Sets for output directory for executables and libraries +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + + +add_executable(test_output test_output.cpp) +target_include_directories(test_output PUBLIC ../../src/outfile/include) +target_link_libraries(test_output ${Boost_LIBRARIES} epanet-output) diff --git a/tests/outfile/data/enP1kAlM b/tests/outfile/data/enP1kAlM new file mode 100644 index 0000000..e69de29 diff --git a/tests/outfile/data/example1.out b/tests/outfile/data/example1.out new file mode 100644 index 0000000..416c98b Binary files /dev/null and b/tests/outfile/data/example1.out differ diff --git a/tests/outfile/test_output.cpp b/tests/outfile/test_output.cpp new file mode 100644 index 0000000..bcae21d --- /dev/null +++ b/tests/outfile/test_output.cpp @@ -0,0 +1,367 @@ +/* + * test_output.cpp + * + * Created: 8/4/2017 + * Author: Michael E. Tryby + * US EPA - ORD/NRMRL + * + * Unit testing for EPANET Output API. +*/ + +#define BOOST_TEST_MODULE "output" + +#include +#include +#include +#include + +#include + +#include "epanet_output.h" +//#include "epanet2_2.h" + + +boost::test_tools::predicate_result check_cdd_float(std::vector& test, + std::vector& ref, long cdd_tol){ + float tmp, min_cdd = 10.0; + + // TODO: What if the vectors aren't the same length? + + std::vector::iterator test_it; + std::vector::iterator ref_it; + + for (test_it = test.begin(), ref_it = ref.begin(); + (test_it < test.end()) && (ref_it < ref.end()); + ++test_it, ++ref_it) + { + if (*test_it != *ref_it) { + // Compute log absolute error + tmp = abs(*test_it - *ref_it); + if (tmp < 1.0e-7f) + tmp = 1.0e-7f; + + else if (tmp > 2.0f) + tmp = 1.0f; + + tmp = -log10(tmp); + if (tmp < 0.0f) + tmp = 0.0f; + + if (tmp < min_cdd) + min_cdd = tmp; + } + } + + return floor(min_cdd) >= cdd_tol; +} + +boost::test_tools::predicate_result check_string(std::string test, std::string ref) +{ + if (ref.compare(test) == 0) + return true; + else + return false; +} + + +#define DATA_PATH_OUTPUT "./example1.out" + +//#define DATA_PATH_INP "./net1.inp" +//#define DATA_PATH_RPT "./test.rpt" +//#define DATA_PATH_OUT "./test.out" + + +BOOST_AUTO_TEST_SUITE (test_output_auto) + +BOOST_AUTO_TEST_CASE(OpenCloseTest) { + std::string path = std::string(DATA_PATH_OUTPUT); + + ENR_Handle p_handle = NULL; + ENR_init(&p_handle); + + int error = ENR_open(p_handle, path.c_str()); + BOOST_REQUIRE(error == 0); + + error = ENR_close(&p_handle); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(p_handle == NULL); +} + + +// // Test access to output file with the project open +// BOOST_AUTO_TEST_CASE(AccessTest){ +// +// std::string path_inp(DATA_PATH_NET1); +// std::string path_rpt(DATA_PATH_RPT); +// std::string path_out(DATA_PATH_OUT); +// +// EN_Project ph = NULL; +// ENR_Handle p_handle = NULL; +// +// EN_createproject(&ph); +// +// int error = EN_open(ph, path_inp.c_str(), path_rpt.c_str(), path_out.c_str()); +// BOOST_REQUIRE(error == 0); +// +// error = EN_solveH(ph); +// BOOST_REQUIRE(error == 0); +// +// error = EN_solveQ(ph); +// BOOST_REQUIRE(error == 0); +// +// error = EN_report(ph); +// BOOST_REQUIRE(error == 0); +// +// +// // Access to output file prior to project close +// error = ENR_init(&p_handle); +// BOOST_REQUIRE(error == 0); +// error = ENR_open(p_handle, path_out.c_str()); +// BOOST_REQUIRE(error == 0); +// error = ENR_close(&p_handle); +// BOOST_REQUIRE(error == 0); +// +// +// error = EN_close(ph); +// BOOST_REQUIRE(error == 0); +// +// EN_deleteproject(&ph); +// } + + +BOOST_AUTO_TEST_SUITE_END() + + +struct FixtureOutput{ + FixtureOutput() { + path = std::string(DATA_PATH_OUTPUT); + + error = ENR_init(&p_handle); + ENR_clearError(p_handle); + error = ENR_open(p_handle, path.c_str()); + + array = NULL; + array_dim = 0; + } + ~FixtureOutput() { + free((void*)array); + error = ENR_close(&p_handle); + } + + std::string path; + int error; + ENR_Handle p_handle; + + float* array; + int array_dim; +}; + + +BOOST_AUTO_TEST_SUITE(test_output_fixture) + +BOOST_FIXTURE_TEST_CASE(test_getNetSize, FixtureOutput) +{ + int *i_array = NULL; + + error = ENR_getNetSize(p_handle, &i_array, &array_dim); + BOOST_REQUIRE(error == 0); + + // nodes, tanks, links, pumps, valves + std::vector test; + test.assign(i_array, i_array + array_dim); + + std::vector ref = {11,2,13,1,0}; + + BOOST_CHECK_EQUAL_COLLECTIONS(ref.begin(), ref.end(), test.begin(), test.end()); + + free((void*)i_array); +} + +BOOST_FIXTURE_TEST_CASE(test_getUnits, FixtureOutput) { + int flag; + + error = ENR_getUnits(p_handle, ENR_qualUnits, &flag); + BOOST_REQUIRE(error == 0); + + BOOST_CHECK_EQUAL(flag, ENR_MGL); +} + +BOOST_FIXTURE_TEST_CASE(test_getElementName, FixtureOutput) { + char* name; + int length, index = 1; + + error = ENR_getElementName(p_handle, ENR_node, index, &name, &length); + BOOST_REQUIRE(error == 0); + + std::string test (name); + std::string ref ("10"); + BOOST_CHECK(check_string(test, ref)); + + free((void *)name); +} + +BOOST_FIXTURE_TEST_CASE(test_getNodeAttribute, FixtureOutput) { + + error = ENR_getNodeAttribute(p_handle, 1, ENR_quality, &array, &array_dim); + BOOST_REQUIRE(error == 0); + + std::vector ref_vec = { 1.0f, + 0.44407997f, + 0.43766347f, + 0.42827705f, + 0.41342604f, + 0.42804748f, + 0.44152543f, + 0.40502965f, + 0.38635802f, + 1.0f, + 0.96745253f}; + + std::vector test_vec; + test_vec.assign(array, array + array_dim); + + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); +} + +BOOST_FIXTURE_TEST_CASE(test_getLinkAttribute, FixtureOutput) { + + error = ENR_getLinkAttribute(p_handle, 1, ENR_flow, &array ,&array_dim); + BOOST_REQUIRE(error == 0); + + std::vector ref_vec = { 1848.5812f, + 1220.4274f, + 130.11162f, + 187.6893f, + 119.8884f, + 40.464489f, + -748.58112f, + 478.15378f, + 191.73459f, + 30.111609f, + 140.46449f, + 59.535515f, + 1848.5812f}; + + std::vector test_vec; + test_vec.assign(array, array + array_dim); + + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); +} + +BOOST_FIXTURE_TEST_CASE(test_getNodeResult, FixtureOutput) { + + error = ENR_getNodeResult(p_handle, 1, 2, &array, &array_dim); + BOOST_REQUIRE(error == 0); + + std::vector ref_vec = {0.041142918f, + 150.0f, + 987.98358f, + 120.45029f}; + + std::vector test_vec; + test_vec.assign(array, array + array_dim); + + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); +} + +BOOST_FIXTURE_TEST_CASE(test_getLinkResult, FixtureOutput) { + + error = ENR_getLinkResult(p_handle, 24, 13, &array, &array_dim); + BOOST_REQUIRE(error == 0); + + std::vector ref_vec = {0.58586824f, + 1892.2433f, + 0.0f, + -200.71875f, + 1.0f, + 3.0f, + 1.0f, + 0.0f}; + + std::vector test_vec; + test_vec.assign(array, array + array_dim); + + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); +} + +BOOST_FIXTURE_TEST_CASE(test_getNodeSeries, FixtureOutput){ + + error = ENR_getNodeSeries(p_handle, 2, ENR_pressure, 0, 10, &array, &array_dim); + BOOST_REQUIRE(error == 0); + + std::vector ref_vec = {119.25731f, + 120.45029f, + 121.19854f, + 122.00622f, + 122.37414f, + 122.8122f, + 122.82034f, + 122.90379f, + 123.40434f, + 123.81807f}; + + std::vector test_vec; + test_vec.assign(array, array + array_dim); + + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); +} + +BOOST_FIXTURE_TEST_CASE(test_getLinkSeries, FixtureOutput) { + + error = ENR_getLinkSeries(p_handle, 2, ENR_flow, 0, 10, &array, &array_dim); + BOOST_REQUIRE(error == 0); + + std::vector ref_vec = {1234.2072f, + 1220.4274f, + 1164.4f, + 1154.8175f, + 1100.0635f, + 1094.759f, + 1041.7854f, + 1040.7617f, + 1087.556f, + 1082.5011f}; + + std::vector test_vec; + test_vec.assign(array, array + array_dim); + + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); +} + +BOOST_FIXTURE_TEST_CASE(test_getNetReacts, FixtureOutput) { + + error = ENR_getNetReacts(p_handle, &array, &array_dim); + BOOST_REQUIRE(error == 0); + + std::vector ref_vec = {18806.59f, + 85424.438f, + 115174.05f, + 238972.66f}; + + std::vector test_vec; + test_vec.assign(array, array + array_dim); + + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 2)); +} + +BOOST_FIXTURE_TEST_CASE(test_getEnergyUsage, FixtureOutput) { + + int linkIdx; + + error = ENR_getEnergyUsage(p_handle, 1, &linkIdx, &array, &array_dim); + BOOST_REQUIRE(error == 0); + + std::vector ref_vec = {57.712959f, + 75.0f, + 880.41583f, + 96.254318f, + 96.707115f, + 0.0f}; + + std::vector test_vec; + test_vec.assign(array, array + array_dim); + + BOOST_CHECK(check_cdd_float(test_vec, ref_vec, 3)); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/scripts/vb6_binary_files_compare/BinaryCompare.vbp b/tests/scripts/vb6_binary_files_compare/BinaryCompare.vbp deleted file mode 100644 index 2c450f7..0000000 --- a/tests/scripts/vb6_binary_files_compare/BinaryCompare.vbp +++ /dev/null @@ -1,35 +0,0 @@ -Type=Exe -Form=frmMain.frm -Module=basShellSync; ShellSync.bas -Module=basNetRes; basNetRes.bas -IconForm="frmMain" -Startup="frmMain" -HelpFile="" -Title="Testing" -ExeName32="BinaryCompare.exe" -Command32="" -Name="BinaryCompare" -HelpContextID="0" -CompatibleMode="0" -MajorVer=1 -MinorVer=0 -RevisionVer=1 -AutoIncrementVer=1 -ServerSupportFiles=0 -VersionComments="by Elad Salomons" -CompilationType=0 -OptimizationType=0 -FavorPentiumPro(tm)=0 -CodeViewDebugInfo=0 -NoAliasing=0 -BoundsCheck=0 -OverflowCheck=0 -FlPointCheck=0 -FDIVCheck=0 -UnroundedFP=0 -StartMode=0 -Unattended=0 -Retained=0 -ThreadPerObject=0 -MaxNumberOfThreads=1 -DebugStartupOption=0 diff --git a/tests/scripts/vb6_binary_files_compare/ShellSync.bas b/tests/scripts/vb6_binary_files_compare/ShellSync.bas deleted file mode 100644 index 02c9f49..0000000 --- a/tests/scripts/vb6_binary_files_compare/ShellSync.bas +++ /dev/null @@ -1,39 +0,0 @@ -Attribute VB_Name = "basShellSync" -Option Explicit - -Private Const INFINITE = &HFFFFFFFF -Private Const SYNCHRONIZE = &H100000 -Private Const PROCESS_QUERY_INFORMATION = &H400& - -Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long -Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long -Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long -Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long -Public Function ShellSync(ByVal PathName As String, ByVal WindowStyle As VbAppWinStyle) As Long -'----------------------------------------------------------------------------------------------- -'Shell and wait. Return exit code result, raise an -'exception on any error. -Dim lngPid As Long -Dim lngHandle As Long -Dim lngExitCode As Long - -lngPid = Shell(PathName, WindowStyle) -If lngPid <> 0 Then - lngHandle = OpenProcess(SYNCHRONIZE Or PROCESS_QUERY_INFORMATION, 0, lngPid) - If lngHandle <> 0 Then - WaitForSingleObject lngHandle, INFINITE - If GetExitCodeProcess(lngHandle, lngExitCode) <> 0 Then - ShellSync = lngExitCode - CloseHandle lngHandle - Else - CloseHandle lngHandle - Err.Raise &H8004AA00, "ShellSync", "Failed to retrieve exit code, error " & CStr(Err.LastDllError) - End If - Else - Err.Raise &H8004AA01, "ShellSync", "Failed to open child process" - End If -Else - Err.Raise &H8004AA02, "ShellSync", "Failed to Shell child process" -End If - -End Function diff --git a/tests/scripts/vb6_binary_files_compare/basNetRes.bas b/tests/scripts/vb6_binary_files_compare/basNetRes.bas deleted file mode 100644 index 386858c..0000000 --- a/tests/scripts/vb6_binary_files_compare/basNetRes.bas +++ /dev/null @@ -1,188 +0,0 @@ -Attribute VB_Name = "basNetRes" -Public Type typNetRes - nNodes As Long - nLinks As Long - - NodesID() As String - LinksID() As String - - NodesDemand() As Single - NodesHead() As Single - NodesPressure() As Single - NodesQuality() As Single - - LinksFlow() As Single - LinksHeadloss() As Single - LinksQuality() As Single - LinksSetting() As Single - LinksStatus() As Single - LinksVelocity() As Single - -End Type -Public Function ReadOutputFile(OutFile As String, NetRes As typNetRes) -'--------------------------------------------------------------------------------------- -Dim i As Long, F As Long, r As Long, nRep As Long, j As Long -Dim tmpArr() As Single -Dim pos As Long, N As Long -Dim tmpLong As Long, tmpSingle As Single -Dim ReportingTimeStep As Long, ReportingStartTime As Long -Dim SimulationDuration As Long -Dim ProblemTitletLine As String * 80 -Dim NumberOfNodes As Long -Dim NumberOfLinks As Long -Dim NumberOfReservoirsAndTanks As Long -Dim NumberOfPumps As Long -Dim NumberOfValves As Long -Dim WaterQualityOption As Long -Dim FlowUnitsOption As Long, PressureUnitsOption As Long -Dim NameOfFile As String * 260, tmpString32 As String * 32 -Dim ii As Long -Dim WarningFlag As Long - -With NetRes - pos = 1: N = 0 - F = FreeFile - Open OutFile For Binary As #F - Get #F, pos, tmpLong: pos = pos + 4 - Get #F, pos, tmpLong: pos = pos + 4 - Get #F, pos, NumberOfNodes: pos = pos + 4 - Get #F, pos, NumberOfReservoirsAndTanks: pos = pos + 4 - Get #F, pos, NumberOfLinks: pos = pos + 4 - Get #F, pos, NumberOfPumps: pos = pos + 4 - Get #F, pos, NumberOfValves: pos = pos + 4 - Get #F, pos, WaterQualityOption: pos = pos + 4 - Get #F, pos, tmpLong: pos = pos + 4 - Get #F, pos, FlowUnitsOption: pos = pos + 4 - Get #F, pos, PressureUnitsOption: pos = pos + 4 - Get #F, pos, tmpLong: pos = pos + 4 - Get #F, pos, ReportingStartTime: pos = pos + 4 - Get #F, pos, ReportingTimeStep: pos = pos + 4 - Get #F, pos, SimulationDuration: pos = pos + 4 - Get #F, pos, ProblemTitletLine: pos = pos + 80 - Get #F, pos, ProblemTitletLine: pos = pos + 80 - Get #F, pos, ProblemTitletLine: pos = pos + 80 - Get #F, pos, NameOfFile: pos = pos + 260 - Get #F, pos, NameOfFile: pos = pos + 260 - Get #F, pos, tmpString32: pos = pos + 32 - Get #F, pos, tmpString32: pos = pos + 32 - .nNodes = NumberOfNodes - .nLinks = NumberOfLinks - ReDim .NodesID(.nNodes) - For j = 1 To NumberOfNodes - Get #F, pos, tmpString32: pos = pos + 32 - i = InStr(1, tmpString32, Chr(0)) - .NodesID(j) = Mid(tmpString32, 1, i - 1) - Next j - ReDim .LinksID(.nLinks) - For j = 1 To NumberOfLinks - Get #F, pos, tmpString32: pos = pos + 32 - i = InStr(1, tmpString32, Chr(0)) - .LinksID(j) = Mid(tmpString32, 1, i - 1) - Next j - For j = 1 To NumberOfLinks * 3 'Index of Start Node of Each Link + Index of End Node of Each Link + Type Code of Each Link - Get #F, pos, tmpLong: pos = pos + 4 - Next j - For j = 1 To NumberOfReservoirsAndTanks 'Node Index of Each Tank - Get #F, pos, tmpLong: pos = pos + 4 - Next j - For j = 1 To NumberOfReservoirsAndTanks 'Cross-Sectional Area of Each Tank - Get #F, pos, tmpSingle: pos = pos + 4 - Next j - For j = 1 To NumberOfNodes 'Elevation of Each Node - Get #F, pos, tmpSingle: pos = pos + 4 - Next j - For j = 1 To NumberOfLinks 'Length of Each Link - Get #F, pos, tmpSingle: pos = pos + 4 - Next j - For j = 1 To NumberOfLinks 'Diameter of Each Link - Get #F, pos, tmpSingle: pos = pos + 4 - Next j - For j = 1 To NumberOfPumps 'Energy Use Section - Get #F, pos, tmpLong: pos = pos + 4 'Pump Index in List of Links - Get #F, pos, tmpSingle: pos = pos + 4 'Pump Utilization (%) - Get #F, pos, tmpSingle: pos = pos + 4 'Average Efficiency (%) - Get #F, pos, tmpSingle: pos = pos + 4 'Average Kwatts/Million Gallons (/Meter3) - Get #F, pos, tmpSingle: pos = pos + 4 'Average Kwatts - Get #F, pos, tmpSingle: pos = pos + 4 'Peak Kwatts - Get #F, pos, tmpSingle: pos = pos + 4 'Average Cost Per Day - Next j - Get #F, pos, tmpSingle: pos = pos + 4 'Overall Peak Energy Usage - - 'reporting - nRep = SimulationDuration / ReportingTimeStep + 1 - ReDim tmpArr(nRep) - ReDim .NodesDemand(.nNodes, nRep) - ReDim .NodesHead(.nNodes, nRep) - ReDim .NodesPressure(.nNodes, nRep) - ReDim .NodesQuality(.nNodes, nRep) - - ReDim .LinksFlow(.nLinks, nRep) - ReDim .LinksHeadloss(.nLinks, nRep) - ReDim .LinksQuality(.nLinks, nRep) - ReDim .LinksSetting(.nLinks, nRep) - ReDim .LinksStatus(.nLinks, nRep) - ReDim .LinksVelocity(.nLinks, nRep) - - For r = 1 To nRep - For j = 1 To NumberOfNodes 'Demand at Each Node - Get #F, pos, tmpSingle: pos = pos + 4 - .NodesDemand(j, r) = tmpSingle - Next j - For j = 1 To NumberOfNodes 'Hydraulic Head at Each Node - Get #F, pos, tmpSingle: pos = pos + 4 - .NodesHead(j, r) = tmpSingle - Next j - For j = 1 To NumberOfNodes 'Pressure at Each Node - Get #F, pos, tmpSingle: pos = pos + 4 - .NodesPressure(j, r) = tmpSingle - Next j - For j = 1 To NumberOfNodes 'Water Quality at Each Node - Get #F, pos, tmpSingle: pos = pos + 4 - .NodesPressure(j, r) = tmpSingle - Next j - For j = 1 To NumberOfLinks 'Flow in Each Link - Get #F, pos, tmpSingle: pos = pos + 4 - .LinksFlow(j, r) = tmpSingle - Next j - For j = 1 To NumberOfLinks 'Velocity in Each Link - Get #F, pos, tmpSingle: pos = pos + 4 - .LinksVelocity(j, r) = tmpSingle - Next j - For j = 1 To NumberOfLinks 'Headloss per 1000 Units of Length for Each Link - Get #F, pos, tmpSingle: pos = pos + 4 - .LinksHeadloss(j, r) = tmpSingle - Next j - For j = 1 To NumberOfLinks 'Average Water Quality in Each Link - Get #F, pos, tmpSingle: pos = pos + 4 - .LinksQuality(j, r) = tmpSingle - Next j - For j = 1 To NumberOfLinks 'Status Code for Each Link - Get #F, pos, tmpSingle: pos = pos + 4 - .LinksStatus(j, r) = tmpSingle - Next j - For j = 1 To NumberOfLinks 'Setting for Each Link - Get #F, pos, tmpSingle: pos = pos + 4 - .LinksSetting(j, r) = tmpSingle - Next j - For j = 1 To NumberOfLinks 'Reaction Rate for Each Link (mass/L/day) - Get #F, pos, tmpSingle: pos = pos + 4 - Next j - For j = 1 To NumberOfLinks 'Friction Factor for Each Link - Get #F, pos, tmpSingle: pos = pos + 4 - Next j - Next r - - 'Epilog Section - Get #F, pos, tmpSingle: pos = pos + 4 'Average bulk reaction rate (mass/hr) - Get #F, pos, tmpSingle: pos = pos + 4 'Average wall reaction rate (mass/hr) - Get #F, pos, tmpSingle: pos = pos + 4 'Average tank reaction rate (mass/hr) - Get #F, pos, tmpSingle: pos = pos + 4 'Average source inflow rate (mass/hr) - Get #F, pos, tmpLong: pos = pos + 4 'Number of Reporting Periods - Get #F, pos, WarningFlag: pos = pos + 4 'Warning Flag - Get #F, pos, tmpLong: pos = pos + 4 'Magic Number ( = 516114521) - - Close #F -End With - -End Function - diff --git a/tests/scripts/vb6_binary_files_compare/frmMain.frm b/tests/scripts/vb6_binary_files_compare/frmMain.frm deleted file mode 100644 index b655734..0000000 --- a/tests/scripts/vb6_binary_files_compare/frmMain.frm +++ /dev/null @@ -1,179 +0,0 @@ -VERSION 5.00 -Begin VB.Form frmMain - Caption = "Form1" - ClientHeight = 5304 - ClientLeft = 48 - ClientTop = 396 - ClientWidth = 9648 - LinkTopic = "Form1" - ScaleHeight = 5304 - ScaleWidth = 9648 - StartUpPosition = 3 'Windows Default - Begin VB.ListBox List1 - Height = 4272 - Left = 1680 - TabIndex = 1 - Top = 360 - Width = 7092 - End - Begin VB.CommandButton cmdRun - Caption = "RUN" - Height = 372 - Left = 360 - TabIndex = 0 - Top = 360 - Width = 972 - End -End -Attribute VB_Name = "frmMain" -Attribute VB_GlobalNameSpace = False -Attribute VB_Creatable = False -Attribute VB_PredeclaredId = True -Attribute VB_Exposed = False -Option Explicit - -Dim NetName As String - -Dim net1 As typNetRes -Dim net2 As typNetRes - -Private Sub CompareVersions(NetName As String) -'----------------------------------------------- -Dim i As Long -Dim v1 As Single, v2 As Single -Dim T As Long -Dim L As Long -Dim maxDiff As Single -Dim diff As Single -Dim nRep As Long -Dim F As Long - -i = ShellSync("epanet2d.exe nets\" & NetName & ".inp nets\" & NetName & "_1.rep nets\" & NetName & "_1.out", vbNormalFocus) -i = ReadOutputFile("nets\" & NetName & "_1.out", net1) - -i = ShellSync("epanet2.exe nets\" & NetName & ".inp nets\" & NetName & "_2.rep nets\" & NetName & "_2.out", vbNormalFocus) -i = ReadOutputFile("nets\" & NetName & "_2.out", net2) - -F = FreeFile -Open App.Path & "\Nets\" & NetName & ".dif" For Output As #F - -nRep = UBound(net1.LinksFlow, 2) - -maxDiff = 100: diff = 101 -For L = 1 To net1.nLinks - For T = 1 To nRep - v1 = net1.LinksFlow(L, T) - v2 = net2.LinksFlow(L, T) - If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10)) - If diff < maxDiff Then maxDiff = diff - Next T -Next L -Print #F, "Links Flow max diff = " & Format(maxDiff, "0") - -maxDiff = 100: diff = 101 -For L = 1 To net1.nLinks - For T = 1 To nRep - v1 = net1.LinksHeadloss(L, T) - v2 = net2.LinksHeadloss(L, T) - If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10)) - If diff < maxDiff Then maxDiff = diff - Next T -Next L -Print #F, "Links Headloss max diff = " & Format(maxDiff, "0") - -maxDiff = 100: diff = 101 -For L = 1 To net1.nLinks - For T = 1 To nRep - v1 = net1.LinksQuality(L, T) - v2 = net2.LinksQuality(L, T) - If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10)) - If diff < maxDiff Then maxDiff = diff - Next T -Next L -Print #F, "Links Quality max diff = " & Format(maxDiff, "0") - -maxDiff = 100: diff = 101 -For L = 1 To net1.nLinks - For T = 1 To nRep - v1 = net1.LinksVelocity(L, T) - v2 = net2.LinksVelocity(L, T) - If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10)) - If diff < maxDiff Then maxDiff = diff - Next T -Next L -Print #F, "Links Velocity max diff = " & Format(maxDiff, "0") - -maxDiff = 100: diff = 101 -For L = 1 To net1.nNodes - For T = 1 To nRep - v1 = net1.NodesDemand(L, T) - v2 = net2.NodesDemand(L, T) - If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10)) - If diff < maxDiff Then maxDiff = diff - Next T -Next L -Print #F, "Nodes Demand max diff = " & Format(maxDiff, "0") - -maxDiff = 100: diff = 101 -For L = 1 To net1.nNodes - For T = 1 To nRep - v1 = net1.NodesHead(L, T) - v2 = net2.NodesHead(L, T) - If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10)) - If diff < maxDiff Then maxDiff = diff - Next T -Next L -Print #F, "Nodes Head max diff = " & Format(maxDiff, "0") - -maxDiff = 100: diff = 101 -For L = 1 To net1.nNodes - For T = 1 To nRep - v1 = net1.NodesPressure(L, T) - v2 = net2.NodesPressure(L, T) - If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2)) / Log(10)) - If diff < maxDiff Then maxDiff = diff - Next T -Next L -Print #F, "Nodes Pressure max diff = " & Format(maxDiff, "0") - -maxDiff = 100: diff = 101 -For L = 1 To net1.nNodes - For T = 1 To nRep - v1 = net1.NodesQuality(L, T) - v2 = net2.NodesQuality(L, T) - If Abs(v1 - v2) > 0 Then diff = -Round(Log(Abs(v1 - v2))) / Log(10) - If diff < maxDiff Then maxDiff = diff - Next T -Next L -Print #F, "Nodes Quality max diff = " & Format(maxDiff, "0") - -Close #F - -End Sub - -Private Sub cmdRun_Click() -'---------------------------------------------- -Dim fName As String - -fName = Dir(App.Path & "\Nets\*.inp") -If fName <> "" Then - Do - List1.AddItem fName: DoEvents - fName = StrReverse(fName) - fName = Mid(fName, 5) - fName = StrReverse(fName) - Call CompareVersions(fName) - fName = Dir - Loop Until fName = "" -End If - -End Sub - - -Private Sub Form_Load() - -List1.Clear - -End Sub - - diff --git a/tests/scripts/vb6_binary_files_compare/nets/Net2.dif b/tests/scripts/vb6_binary_files_compare/nets/Net2.dif deleted file mode 100644 index 07aed4e..0000000 --- a/tests/scripts/vb6_binary_files_compare/nets/Net2.dif +++ /dev/null @@ -1,8 +0,0 @@ -Links Flow max diff = 3 -Links Headloss max diff = 4 -Links Quality max diff = 3 -Links Velocity max diff = 6 -Nodes Demand max diff = 3 -Nodes Head max diff = 5 -Nodes Pressure max diff = 3 -Nodes Quality max diff = 100 diff --git a/tests/scripts/vb6_binary_files_compare/nets/Net2.inp b/tests/scripts/vb6_binary_files_compare/nets/Net2.inp deleted file mode 100644 index 4b55887..0000000 --- a/tests/scripts/vb6_binary_files_compare/nets/Net2.inp +++ /dev/null @@ -1,311 +0,0 @@ -[TITLE] -EPANET Example Network 2 -Example of modeling a 55-hour fluoride tracer study. -Measured fluoride data is contained in the file Net2-FL.dat -and should be registered with the project to produce a -Calibration Report (select Calibration Data from the Project -menu). - -[JUNCTIONS] -;ID Elev Demand Pattern - 1 50 -694.4 2 ; - 2 100 8 ; - 3 60 14 ; - 4 60 8 ; - 5 100 8 ; - 6 125 5 ; - 7 160 4 ; - 8 110 9 ; - 9 180 14 ; - 10 130 5 ; - 11 185 34.78 ; - 12 2100 16 ; - 13 210 2 ; - 14 200 2 ; - 15 190 2 ; - 16 150 20 ; - 17 180 20 ; - 18 100 20 ; - 19 150 5 ; - 20 170 19 ; - 21 150 16 ; - 22 200 10 ; - 23 230 8 ; - 24 190 11 ; - 25 230 6 ; - 27 130 8 ; - 28 110 0 ; - 29 110 7 ; - 30 130 3 ; - 31 190 17 ; - 32 110 17 ; - 33 180 1.5 ; - 34 190 1.5 ; - 35 110 0 ; - 36 110 1 ; - -[RESERVOIRS] -;ID Head Pattern - -[TANKS] -;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve - 26 235 56.7 50 70 50 0 ; - -[PIPES] -;ID Node1 Node2 Length Diameter Roughness MinorLoss Status - 1 1 2 2400 12 100 0 Open ; - 2 2 5 800 12 100 0 Open ; - 3 2 3 1300 8 100 0 Open ; - 4 3 4 1200 8 100 0 Open ; - 5 4 5 1000 12 100 0 Open ; - 6 5 6 1200 12 100 0 Open ; - 7 6 7 2700 12 100 0 Open ; - 8 7 8 1200 12 140 0 Open ; - 9 7 9 400 12 100 0 Open ; - 10 8 10 1000 8 140 0 Open ; - 11 9 11 700 12 100 0 Open ; - 12 11 12 1900 12 100 0 Open ; - 13 12 13 600 12 100 0 Open ; - 14 13 14 400 12 100 0 Open ; - 15 14 15 300 12 100 0 Open ; - 16 13 16 1500 8 100 0 Open ; - 17 15 17 1500 8 100 0 Open ; - 18 16 17 600 8 100 0 Open ; - 19 17 18 700 12 100 0 Open ; - 20 18 32 350 12 100 0 Open ; - 21 16 19 1400 8 100 0 Open ; - 22 14 20 1100 12 100 0 Open ; - 23 20 21 1300 8 100 0 Open ; - 24 21 22 1300 8 100 0 Open ; - 25 20 22 1300 8 100 0 Open ; - 26 24 23 600 12 100 0 Open ; - 27 15 24 250 12 100 0 Open ; - 28 23 25 300 12 100 0 Open ; - 29 25 26 200 12 100 0 Open ; - 30 25 31 600 12 100 0 Open ; - 31 31 27 400 8 100 0 Open ; - 32 27 29 400 8 100 0 Open ; - 34 29 28 700 8 100 0 Open ; - 35 22 33 1000 8 100 0 Open ; - 36 33 34 400 8 100 0 Open ; - 37 32 19 500 8 100 0 Open ; - 38 29 35 500 8 100 0 Open ; - 39 35 30 1000 8 100 0 Open ; - 40 28 35 700 8 100 0 Open ; - 41 28 36 300 8 100 0 Open ; - -[PUMPS] -;ID Node1 Node2 Parameters - -[VALVES] -;ID Node1 Node2 Diameter Type Setting MinorLoss - -[TAGS] - -[DEMANDS] -;Junction Demand Pattern Category - -[STATUS] -;ID Status/Setting - -[PATTERNS] -;ID Multipliers -;Demand Pattern - 1 1.26 1.04 .97 .97 .89 1.19 - 1 1.28 .67 .67 1.34 2.46 .97 - 1 .92 .68 1.43 .61 .31 .78 - 1 .37 .67 1.26 1.56 1.19 1.26 - 1 .6 1.1 1.03 .73 .88 1.06 - 1 .99 1.72 1.12 1.34 1.12 .97 - 1 1.04 1.15 .91 .61 .68 .46 - 1 .51 .74 1.12 1.34 1.26 .97 - 1 .82 1.37 1.03 .81 .88 .81 - 1 .81 -;Pump Station Outflow Pattern - 2 .96 .96 .96 .96 .96 .96 - 2 .62 0 0 0 0 0 - 2 .8 1 1 1 1 .15 - 2 0 0 0 0 0 0 - 2 .55 .92 .92 .92 .92 .9 - 2 .9 .45 0 0 0 0 - 2 0 .7 1 1 1 1 - 2 .2 0 0 0 0 0 - 2 0 .74 .92 .92 .92 .92 - 2 .92 -;Pump Station Fluoride Pattern - 3 .98 1.02 1.05 .99 .64 .46 - 3 .35 .35 .35 .35 .35 .35 - 3 .17 .17 .13 .13 .13 .15 - 3 .15 .15 .15 .15 .15 .15 - 3 .15 .12 .1 .08 .11 .09 - 3 .09 .08 .08 .08 .08 .08 - 3 .08 .09 .07 .07 .09 .09 - 3 .09 .09 .09 .09 .09 .09 - 3 .09 .08 .35 .72 .82 .92 - 3 1 - -[CURVES] -;ID X-Value Y-Value - -[CONTROLS] - - -[RULES] - - -[ENERGY] - Global Efficiency 75 - Global Price 0.0 - Demand Charge 0.0 - -[EMITTERS] -;Junction Coefficient - -[QUALITY] -;Node InitQual - 1 1.0 - 2 1.0 - 3 1.0 - 4 1.0 - 5 1.0 - 6 1.0 - 7 1.0 - 8 1.0 - 9 1.0 - 10 1.0 - 11 1.0 - 12 1.0 - 13 1.0 - 14 1.0 - 15 1.0 - 16 1.0 - 17 1.0 - 18 1.0 - 19 1.0 - 20 1.0 - 21 1.0 - 22 1.0 - 23 1.0 - 24 1.0 - 25 1.0 - 27 1.0 - 28 1.0 - 29 1.0 - 30 1.0 - 31 1.0 - 32 1.0 - 33 1.0 - 34 1.0 - 35 1.0 - 36 1.0 - 26 1.0 - -[SOURCES] -;Node Type Quality Pattern - 1 CONCEN 1.0 3 - -[REACTIONS] -;Type Pipe/Tank Coefficient - - -[REACTIONS] - Order Bulk 1 - Order Tank 1 - Order Wall 1 - Global Bulk 0.0 - Global Wall 0.0 - Limiting Potential 0.0 - Roughness Correlation 0.0 - -[MIXING] -;Tank Model - -[TIMES] - Duration 55:00 - Hydraulic Timestep 1:00 - Quality Timestep 0:05 - Pattern Timestep 1:00 - Pattern Start 0:00 - Report Timestep 1:00 - Report Start 0:00 - Start ClockTime 8 am - Statistic NONE - -[REPORT] - Status Full - Summary No - Page 0 - -[OPTIONS] - Units GPM - Headloss H-W - Specific Gravity 1.0 - Viscosity 1.0 - Trials 40 - Accuracy 0.001 - CHECKFREQ 2 - MAXCHECK 10 - DAMPLIMIT 0 - Unbalanced Continue 10 - Pattern 1 - Demand Multiplier 1.0 - Emitter Exponent 0.5 - Quality Fluoride mg/L - Diffusivity 1.0 - Tolerance 0.01 - -[COORDINATES] -;Node X-Coord Y-Coord - 1 21.00 4.00 - 2 19.00 20.00 - 3 11.00 21.00 - 4 14.00 28.00 - 5 19.00 25.00 - 6 28.00 23.00 - 7 36.00 39.00 - 8 38.00 30.00 - 9 36.00 42.00 - 10 37.00 23.00 - 11 37.00 49.00 - 12 39.00 60.00 - 13 38.00 64.00 - 14 38.00 66.00 - 15 37.00 69.00 - 16 27.00 65.00 - 17 27.00 69.00 - 18 23.00 68.00 - 19 21.00 59.00 - 20 45.00 68.00 - 21 51.00 62.00 - 22 54.00 69.00 - 23 35.00 74.00 - 24 37.00 71.00 - 25 35.00 76.00 - 27 39.00 87.00 - 28 49.00 85.00 - 29 42.00 86.00 - 30 47.00 80.00 - 31 37.00 80.00 - 32 23.00 64.00 - 33 56.00 73.00 - 34 56.00 77.00 - 35 43.00 81.00 - 36 53.00 87.00 - 26 33.00 76.00 - -[VERTICES] -;Link X-Coord Y-Coord - -[LABELS] -;X-Coord Y-Coord Label & Anchor Node - 24.00 7.00 "Pump" - 24.00 4.00 "Station" - 26.76 77.42 "Tank" - -[BACKDROP] - DIMENSIONS 8.75 -0.15 58.25 91.15 - UNITS None - FILE - OFFSET 0.00 0.00 - -[END] diff --git a/tests/scripts/vb6_binary_files_compare/readme.txt b/tests/scripts/vb6_binary_files_compare/readme.txt deleted file mode 100644 index e78e456..0000000 --- a/tests/scripts/vb6_binary_files_compare/readme.txt +++ /dev/null @@ -1,12 +0,0 @@ -The program will run all INP files in the Nets sub-directory. -A report, binary output files and a .dif file will be created for each INP file. -The report is the min(—log10(abs(X1-X2))) where X1 and X2 are the results arrays obtains from the two binary files. - -Files needed in the code directory: -epanet2d.exe is the official EPANET standalone version. -epanet2.exe is the current development version (the one being tested). - -How to use: run the program and click the RUN button. - -By Elad Salomons -email: selad@optiwater.com \ No newline at end of file diff --git a/tests/test_analysis.cpp b/tests/test_analysis.cpp new file mode 100644 index 0000000..b3c9a93 --- /dev/null +++ b/tests/test_analysis.cpp @@ -0,0 +1,79 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_analysis.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +//#define BOOST_ALL_DYN_LINK +#include + +#include "test_toolkit.hpp" + + +BOOST_AUTO_TEST_SUITE (test_analysis) + +BOOST_FIXTURE_TEST_CASE(test_anlys_getoption, FixtureOpenClose) +{ + int i; + + std::vector test(23); + double *array = test.data(); + + std::vector ref = {40.0, 0.001, 0.01, 0.5, 1.0, 0.0, 0.0, 0.0, 75.0, 0.0, 0.0, 0.0, + 1.0, 1.0, 10.0, 2.0, 10.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0}; + + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_solveQ(ph); + BOOST_REQUIRE(error == 0); + + + for (i=EN_TRIALS; i<=EN_CONCENLIMIT; i++) { + error = EN_getoption(ph, i, array++); + BOOST_REQUIRE(error == 0); + } + + BOOST_CHECK_EQUAL_COLLECTIONS(ref.begin(), ref.end(), test.begin(), test.end()); + + double temp; + error = EN_getoption(ph, 25, &temp); + BOOST_CHECK(error == 251); +} + +BOOST_FIXTURE_TEST_CASE(test_anlys_gettimeparam, FixtureOpenClose) +{ + int i; + + std::vector test(16); + long *array = test.data(); + + std::vector ref = {86400, 3600, 300, 7200, 0, 3600, 0, 360, 0, 25, 0, 86400, 86400, 0, 3600, 0}; + + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_solveQ(ph); + BOOST_REQUIRE(error == 0); + + + for (i=EN_DURATION; i<=EN_NEXTEVENTTANK; i++) { + error = EN_gettimeparam(ph, i, array++); + BOOST_REQUIRE(error == 0); + } + + BOOST_CHECK_EQUAL_COLLECTIONS(ref.begin(), ref.end(), test.begin(), test.end()); + + long temp; + error = EN_gettimeparam(ph, 18, &temp); + BOOST_CHECK(error == 251); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_control.cpp b/tests/test_control.cpp new file mode 100644 index 0000000..32b3f5f --- /dev/null +++ b/tests/test_control.cpp @@ -0,0 +1,85 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_control.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +/* +This is a test for the API functions that adds rules and deletes +nodes and links from a project. Deletion can be conditional on +node or link appearing in any simple or rule-based controls. +*/ + +#include + +#include "test_toolkit.hpp" + + +char R1[] = "RULE 1 \n IF NODE 2 LEVEL < 100 \n THEN LINK 9 STATUS = OPEN"; +char R2[] = "RULE 2\nIF SYSTEM TIME = 4\nTHEN LINK 9 STATUS = CLOSED\nAND LINK 31 STATUS = CLOSED"; +char R3[] = "RULE 3\nIF NODE 23 PRESSURE ABOVE 140\nAND NODE 2 LEVEL > 120\n" + "THEN LINK 113 STATUS = CLOSED\nELSE LINK 22 STATUS = CLOSED"; + + +BOOST_AUTO_TEST_SUITE (test_controls) + +BOOST_FIXTURE_TEST_CASE(test_add_get_rule, FixtureOpenClose) +{ + int ruleCount, nP, nTA, nEA; + int link113, node23, link22, pump9_before, pump9_after; + double priority; + + + // Add the 3 rules to the project + error = EN_addrule(ph, R1); + BOOST_REQUIRE(error == 0); + error = EN_addrule(ph, R2); + BOOST_REQUIRE(error == 0); + error = EN_addrule(ph, R3); + BOOST_REQUIRE(error == 0); + + // Check that rules were added + error = EN_getcount(ph, EN_RULECOUNT, &ruleCount); + BOOST_CHECK(ruleCount == 3); + + // Check the number of clauses in rule 3 + error = EN_getrule(ph, 3, &nP, &nTA, &nEA, &priority); + BOOST_CHECK(nP == 2); + BOOST_CHECK(nTA == 1); + BOOST_CHECK(nTA == 1); + + // Try to delete link 113 conditionally which will fail + // because it's in rule 3 + EN_getlinkindex(ph, (char *)"113", &link113); + error = EN_deletelink(ph, link113, EN_CONDITIONAL); + BOOST_REQUIRE(error == 261); + + // Delete node 23 unconditionally which will result in the + // deletion of rule 3 as well as links 22 and 113 + EN_getnodeindex(ph, (char *)"23", &node23); + EN_getlinkindex(ph, (char *)"22", &link22); + EN_getlinkindex(ph, (char *)"9", &pump9_before); + error = EN_deletenode(ph, node23, EN_UNCONDITIONAL); + BOOST_REQUIRE(error == 0); + + // Check that there are now only 2 rules + error = EN_getcount(ph, EN_RULECOUNT, &ruleCount); + BOOST_CHECK(ruleCount == 2); + + // Check that link 22 no longer exists + error = EN_getlinkindex(ph, (char *)"22", &link22); + BOOST_CHECK(error > 0); + + // Check that the index of pump9 has been reduced by 2 + error = EN_getlinkindex(ph, (char *)"9", &pump9_after); + BOOST_CHECK(pump9_before - pump9_after == 2); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_curve.cpp b/tests/test_curve.cpp new file mode 100644 index 0000000..6712cdf --- /dev/null +++ b/tests/test_curve.cpp @@ -0,0 +1,92 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_curve.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +#include + +#include "test_toolkit.hpp" + + +BOOST_AUTO_TEST_SUITE (curve) + +BOOST_FIXTURE_TEST_CASE(test_curve_comments, FixtureOpenClose) +{ + int index; + char comment[EN_MAXMSG + 1]; + + // Set curve comments + error = EN_getcurveindex(ph, (char *)"1", &index); + BOOST_REQUIRE(error == 0); + error = EN_setcomment(ph, EN_CURVE, index, (char *)"Curve 1"); + BOOST_REQUIRE(error == 0); + + // Check curve comments + error = EN_getcurveindex(ph, (char *)"1", &index); + BOOST_REQUIRE(error == 0); + error = EN_getcomment(ph, EN_CURVE, index, comment); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(check_string(comment, (char *)"Curve 1")); + + // Test of EN_setcurve and EN_getcurve + int i; + char id1[] = "NewCurve"; + int n1 = 5; + double X1[] = {16.88889, 19.5, 22.13889, 25.94445, 33.33334}; + double Y1[] = {156.7, 146.5, 136.2, 117.9, 50.0}; + int n2; + double X2[5], Y2[5]; + char id2[EN_MAXID+1]; + + // Add data to a new curve + error = EN_addcurve(ph, id1); + BOOST_REQUIRE(error == 0); + error = EN_getcurveindex(ph, id1, &i); + BOOST_REQUIRE(error == 0); + error = EN_setcurve(ph, i, X1, Y1, n1); + BOOST_REQUIRE(error == 0); + + // Retrieve data from curve + error = EN_getcurve(ph, i, id2, &n2, X2, Y2); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(check_string(id2, id1)); + BOOST_REQUIRE(n2 == n1); + for (i = 0; i < n1; i++) + { + BOOST_CHECK(X1[i] == X2[i]); + BOOST_CHECK(Y1[i] == Y2[i]); + } +} + + +BOOST_FIXTURE_TEST_CASE(test_curve_id_isvalid, FixtureInitClose) +{ + int index; + + error = EN_addcurve(ph, (char *)"C1"); + BOOST_REQUIRE(error == 0); + + error = EN_addcurve(ph, (char *)"C 2"); + BOOST_REQUIRE(error == 252); + + error = EN_addcurve(ph, (char *)"\"C2"); + BOOST_REQUIRE(error == 252); + + error = EN_addcurve(ph, (char *)"C;2"); + BOOST_REQUIRE(error == 252); + + EN_getcurveindex(ph, (char *)"C1", &index); + error = EN_setcurveid(ph, index, (char *)"C;2"); + BOOST_REQUIRE(error == 252); +} + + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_demand.cpp b/tests/test_demand.cpp new file mode 100644 index 0000000..d6ad4d2 --- /dev/null +++ b/tests/test_demand.cpp @@ -0,0 +1,126 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_demand.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +#include + +#include "test_toolkit.hpp" + + +BOOST_AUTO_TEST_SUITE (test_demand) + + +BOOST_AUTO_TEST_CASE(test_categories_save) +{ + int error = 0; + int Nindex, ndem; + + EN_Project ph = NULL; + + error = EN_createproject(&ph); + error = EN_open(ph, DATA_PATH_NET1, DATA_PATH_RPT, DATA_PATH_OUT); + + error = EN_getnodeindex(ph, (char *)"12", &Nindex); + BOOST_REQUIRE(error == 0); + error = EN_getnumdemands(ph, Nindex, &ndem); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(ndem == 1); + + char demname[31]; + error = EN_getdemandname(ph, Nindex, ndem, demname); + BOOST_REQUIRE(error == 0); + + error = EN_setdemandname(ph, Nindex, ndem, (char *)"CUB_SCOUT_MOTOR_POOL"); + BOOST_REQUIRE(error == 0); + error = EN_saveinpfile(ph, "net1_dem_cat.inp"); + BOOST_REQUIRE(error == 0); + + error = EN_close(ph); + BOOST_REQUIRE(error == 0); + error = EN_deleteproject(ph); + BOOST_REQUIRE(error == 0); +} + + +BOOST_AUTO_TEST_CASE(test_categories_reopen, * boost::unit_test::depends_on("test_demand/test_categories_save")) +{ + int error = 0; + int Nindex, ndem; + + EN_Project ph = NULL; + + BOOST_TEST_CHECKPOINT("Reopening saved input file"); + error = EN_createproject(&ph); + BOOST_REQUIRE(error == 0); + error = EN_open(ph, "net1_dem_cat.inp", DATA_PATH_RPT, DATA_PATH_OUT); + BOOST_REQUIRE(error == 0); + + error = EN_getnodeindex(ph, (char *)"12", &Nindex); + BOOST_REQUIRE(error == 0); + error = EN_getnumdemands(ph, Nindex, &ndem); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(ndem == 1); + + char demname[31]; + error = EN_getdemandname(ph, Nindex, ndem, demname); + BOOST_CHECK(error == 0); + + BOOST_CHECK(check_string(demname, "CUB_SCOUT_MOTOR_POOL")); + + error = EN_close(ph); + BOOST_REQUIRE(error == 0); + error = EN_deleteproject(ph); + BOOST_REQUIRE(error == 0); +} + +BOOST_FIXTURE_TEST_CASE(test_adddemand, FixtureSingleNode) +{ + int Dindex, nD1, nD2; + + error = EN_adddemand(ph, node_qhut, 100.0, "PrimaryPattern", "PrimaryDemand"); + BOOST_CHECK(error != 0); + + error = EN_addpattern(ph, (char *)"PrimaryPattern"); + BOOST_REQUIRE(error == 0); + + error = EN_adddemand(ph, node_qhut, 100.0, "PrimaryPattern", "PrimaryDemand"); + BOOST_CHECK(error == 0); + + error = EN_addpattern(ph, (char *)"SecondaryPattern"); + BOOST_REQUIRE(error == 0); + + error = EN_adddemand(ph, node_qhut, 10.0, "SecondaryPattern", "SecondaryDemand"); + BOOST_CHECK(error == 0); + + error = EN_addpattern(ph, (char *)"TertiaryPattern"); + BOOST_REQUIRE(error == 0); + + error = EN_adddemand(ph, node_qhut, 1.0, "TertiaryPattern", "TertiaryDemand"); + BOOST_CHECK(error == 0); + + error = EN_getnumdemands(ph, node_qhut, &nD1); + BOOST_REQUIRE(error == 0); + + error = EN_getdemandindex(ph, node_qhut, "TertiaryDemand", &Dindex); + BOOST_CHECK(error == 0); + BOOST_CHECK(Dindex == nD1); + + error = EN_deletedemand(ph, node_qhut, Dindex); + BOOST_CHECK(error == 0); + + error = EN_getnumdemands(ph, node_qhut, &nD2); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(nD1 - nD2 == 1); +} + + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_hydraulics.cpp b/tests/test_hydraulics.cpp new file mode 100644 index 0000000..8fe81a0 --- /dev/null +++ b/tests/test_hydraulics.cpp @@ -0,0 +1,84 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_hydraulics.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +#include +#include + +#include "test_toolkit.hpp" + + +BOOST_AUTO_TEST_SUITE (test_hydraulics) + +BOOST_FIXTURE_TEST_CASE(test_solveH, FixtureOpenClose) +{ + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); +} + +BOOST_FIXTURE_TEST_CASE(test_hyd_step, FixtureOpenClose) +{ + int flag = 00; + long t, tstep; + + error = EN_openH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_initH(ph, flag); + BOOST_REQUIRE(error == 0); + + do { + error = EN_runH(ph, &t); + BOOST_REQUIRE(error == 0); + + error = EN_nextH(ph, &tstep); + BOOST_REQUIRE(error == 0); + + } while (tstep > 0); + + error = EN_closeH(ph); + BOOST_REQUIRE(error == 0); +} + +BOOST_FIXTURE_TEST_CASE(test_hydr_save, FixtureOpenClose) +{ + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_saveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_report(ph); + BOOST_REQUIRE(error == 0); +} + +BOOST_FIXTURE_TEST_CASE(test_hydr_savefile, FixtureOpenClose) +{ + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_savehydfile(ph, "test_savefile.hyd"); + BOOST_REQUIRE(error == 0); + + BOOST_CHECK(boost::filesystem::exists("test_savefile.hyd") == true); +} + +BOOST_FIXTURE_TEST_CASE(test_hydr_usefile, FixtureOpenClose, * boost::unit_test::depends_on("test_hydraulics/test_hydr_savefile")) +{ + error = EN_usehydfile(ph, "test_savefile.hyd"); + BOOST_REQUIRE(error == 0); + + error = EN_solveQ(ph); + BOOST_REQUIRE(error == 0); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_link.cpp b/tests/test_link.cpp new file mode 100644 index 0000000..e56693b --- /dev/null +++ b/tests/test_link.cpp @@ -0,0 +1,236 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_link.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +#include + +#include + +#include "test_toolkit.hpp" + + +BOOST_AUTO_TEST_SUITE (test_link) + + +BOOST_FIXTURE_TEST_CASE(test_adddelete_link, FixtureInitClose) +{ + int index; + + // Build a network + EN_addnode(ph, (char *)"N1", EN_JUNCTION, &index); + EN_addnode(ph, (char *)"N2", EN_JUNCTION, &index); + EN_addnode(ph, (char *)"N3", EN_RESERVOIR, &index); + + error = EN_addlink(ph, (char *)"L1", EN_PUMP, (char *)"N3", (char *)"N1", &index); + BOOST_REQUIRE(error == 0); + + error = EN_addlink(ph, (char *)"L2", EN_PIPE, (char *)"N1", (char *)"N3", &index); + BOOST_REQUIRE(error == 0); + + error = EN_getlinkindex(ph, (char *)"L2", &index); + BOOST_REQUIRE(error == 0); + error = EN_deletelink(ph, index, EN_UNCONDITIONAL); + BOOST_REQUIRE(error == 0); + + error = EN_addlink(ph, (char *)"L3", EN_PIPE, (char *)"N1", (char *)"N2", &index); + BOOST_REQUIRE(error == 0); + + error = EN_getlinkindex(ph, (char *)"L1", &index); + BOOST_REQUIRE(error == 0); + error = EN_deletelink(ph, index, EN_UNCONDITIONAL); + BOOST_REQUIRE(error == 0); + error = EN_getlinkindex(ph, (char *)"L3", &index); + BOOST_REQUIRE(error == 0); + error = EN_deletelink(ph, index, EN_UNCONDITIONAL); + BOOST_REQUIRE(error == 0); + +} + +BOOST_FIXTURE_TEST_CASE(test_link_id_isvalid, FixtureInitClose) +{ + int index; + + // Build a network + EN_addnode(ph, (char *)"N1", EN_JUNCTION, &index); + EN_addnode(ph, (char *)"N2", EN_JUNCTION, &index); + EN_addnode(ph, (char *)"N3", EN_RESERVOIR, &index); + + error = EN_addlink(ph, (char *)"L1", EN_PUMP, (char *)"N1", (char *)"N2", &index); + BOOST_REQUIRE(error == 0); + + error = EN_addlink(ph, (char *)"L 2", EN_PIPE, (char *)"N1", (char *)"N2", &index); + BOOST_REQUIRE(error == 252); + + error = EN_addlink(ph, (char *)"\"L2", EN_PIPE, (char *)"N1", (char *)"N2", &index); + BOOST_REQUIRE(error == 252); + + error = EN_addlink(ph, (char *)"L;2", EN_PIPE, (char *)"N1", (char *)"N2", &index); + BOOST_REQUIRE(error == 252); + + EN_getlinkindex(ph, (char *)"L1", &index); + error = EN_setlinkid(ph, index, (char *)"L;1"); + BOOST_REQUIRE(error == 252); +} + +BOOST_AUTO_TEST_CASE(test_setlinktype) +{ + int error = 0; + int p113, n31, p121, n113_1, n113_2; + double q113 = 0.0, p31 = 0.0, diam; + + EN_Project ph = NULL; + EN_createproject(&ph); + + error = EN_open(ph, DATA_PATH_NET1, DATA_PATH_RPT, ""); + BOOST_REQUIRE(error == 0); + + // Change duration to 0 + error = EN_settimeparam(ph, EN_DURATION, 0); + BOOST_REQUIRE(error == 0); + + // Get indexes of pipe 113 and node 31 + error = EN_getlinkindex(ph, (char *)"113", &p113); + BOOST_REQUIRE(error == 0); + error = EN_getnodeindex(ph, (char *)"31", &n31); + BOOST_REQUIRE(error == 0); + + // Reverse pipe 113 and give it a check valve + error = EN_getlinknodes(ph, p113, &n113_1, &n113_2); + BOOST_REQUIRE(error == 0); + error = EN_setlinknodes(ph, p113, n113_2, n113_1); + BOOST_REQUIRE(error == 0); + error = EN_setlinktype(ph, &p113, EN_CVPIPE, 0); + BOOST_REQUIRE(error == 0); + + // Get index & diameter of pipe 121 connected to node 31 + error = EN_getlinkindex(ph, (char *)"121", &p121); + BOOST_REQUIRE(error == 0); + error = EN_getlinkvalue(ph, p121, EN_DIAMETER, &diam); + BOOST_REQUIRE(error == 0); + + // Replace it with a PRV + error = EN_setlinktype(ph, &p121, EN_PRV, 0); + BOOST_REQUIRE(error == 0); + + // Set diameter & setting of new PRV + error = EN_setlinkvalue(ph, p121, EN_INITSETTING, 100); + BOOST_REQUIRE(error == 0); + error = EN_setlinkvalue(ph, p121, EN_DIAMETER, diam); + BOOST_REQUIRE(error == 0); + + // Solve for hydraulics + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + // Get flow in link 113 and pressure at node 31 + error = EN_getlinkvalue(ph, p113, EN_FLOW, &q113); + BOOST_REQUIRE(error == 0); + error = EN_getnodevalue(ph, n31, EN_PRESSURE, &p31); + BOOST_REQUIRE(error == 0); + + // Require that link 113 flow be 0 + q113 = fabs(q113); + BOOST_REQUIRE(q113 < 0.001); + + // Require that node 31 pressure be 100 + p31 = fabs(p31 - 100.0f); + BOOST_REQUIRE(p31 < 0.001); + + // Close and delete project + error = EN_close(ph); + BOOST_REQUIRE(error == 0); + EN_deleteproject(ph); +} + + +BOOST_AUTO_TEST_CASE(test_link_setid_save) +{ + int error = 0; + + EN_Project ph = NULL; + EN_createproject(&ph); + + error = EN_open(ph, DATA_PATH_NET1, DATA_PATH_RPT, ""); + BOOST_REQUIRE(error == 0); + + // Test of illegal link name change + char newid_3[] = "Illegal; link name"; + error = EN_setlinkid(ph, 3, newid_3); + BOOST_REQUIRE(error > 0); + + // Test of legal link name change + char newid_4[] = "Link3"; + error = EN_setlinkid(ph, 3, newid_4); + BOOST_REQUIRE(error == 0); + + // Save the project + error = EN_saveinpfile(ph, "net1_setid.inp"); + BOOST_REQUIRE(error == 0); + + error = EN_close(ph); + BOOST_REQUIRE(error == 0); + EN_deleteproject(ph); +} + +BOOST_AUTO_TEST_CASE(test_link_setid_reopen, * boost::unit_test::depends_on("test_link/test_link_setid_save")) +{ + int error = 0; + int index; + + EN_Project ph = NULL; + + // Re-open the saved project + EN_createproject(&ph); + error = EN_open(ph, "net1_setid.inp", DATA_PATH_RPT, ""); + BOOST_REQUIRE(error == 0); + + // Check that 3rd link has its new name + error = EN_getlinkindex(ph, (char *)"Link3", &index); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(index == 3); + + error = EN_close(ph); + BOOST_REQUIRE(error == 0); + EN_deleteproject(ph); +} + +BOOST_FIXTURE_TEST_CASE(test_link_comments, FixtureOpenClose) +{ + int index; + char comment[EN_MAXMSG + 1]; + + // Set link comments + error = EN_getlinkindex(ph, (char *)"11", &index); + BOOST_REQUIRE(error == 0); + error = EN_setcomment(ph, EN_LINK, index, (char *)"P11"); + BOOST_REQUIRE(error == 0); + + error = EN_getlinkindex(ph, (char *)"9", &index); + BOOST_REQUIRE(error == 0); + error = EN_setcomment(ph, EN_LINK, index, (char *)"Pump9"); + BOOST_REQUIRE(error == 0); + + // Check link comments + error = EN_getlinkindex(ph, (char *)"11", &index); + BOOST_REQUIRE(error == 0); + error = EN_getcomment(ph, EN_LINK, index, comment); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(check_string(comment, (char *)"P11")); + + error = EN_getlinkindex(ph, (char *)"9", &index); + BOOST_REQUIRE(error == 0); + error = EN_getcomment(ph, EN_LINK, index, comment); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(check_string(comment, (char *)"Pump9")); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_net_builder.cpp b/tests/test_net_builder.cpp new file mode 100644 index 0000000..2d15e86 --- /dev/null +++ b/tests/test_net_builder.cpp @@ -0,0 +1,414 @@ +/* +****************************************************************************** +Project: OWA EPANET +Version: 2.2 +Module: test_net_builder.cpp +Description: Tests EPANET toolkit api functions +Authors: see AUTHORS +Copyright: see AUTHORS +License: see LICENSE +Last Updated: 04/12/2019 +****************************************************************************** +*/ + + +#define BOOST_TEST_MODULE net_builder + +#ifdef _DEBUG +#define _CRTDBG_MAP_ALLOC +#include +#include +#else +#include +#endif + +#include + +#include "epanet2_2.h" + + +#define DATA_PATH_TMP "./tmp.inp" +#define DATA_PATH_RPT "./test.rpt" +#define DATA_PATH_OUT "./test.out" + + +struct FixtureInitClose { + FixtureInitClose() { + error = 0; + ph = NULL; + + EN_createproject(&ph); + EN_init(ph, DATA_PATH_RPT, DATA_PATH_OUT, EN_GPM, EN_HW); + } + + ~FixtureInitClose() { + EN_close(ph); + EN_deleteproject(ph); + } + int error; + EN_Project ph; +}; + + +BOOST_AUTO_TEST_SUITE(test_net_builder) + + +// BOOST_AUTO_TEST_CASE(net_builder_I) +// { +// int error = 0; +// int flag = 00; +// long t, tstep; +// int i, ind, Lindex, Nindex, Cindex; +// double h_orig, h_build, h_build_loaded; +// +// // first we load Net1.inp, run it and record the head in Tank 2 at the end of the simulation (h_orig) +// EN_Project ph = NULL; +// EN_createproject(&ph); +// +// std::string path_inp = std::string(DATA_PATH_NET1); +// std::string path_rpt = std::string(DATA_PATH_RPT); +// std::string path_out = std::string(DATA_PATH_OUT); +// +// error = EN_open(ph, path_inp.c_str(), path_rpt.c_str(), path_out.c_str()); +// BOOST_REQUIRE(error == 0); +// +// error = EN_getnodeindex(ph, (char *)"2", &Nindex); +// BOOST_REQUIRE(error == 0); +// +// error = EN_openH(ph); +// BOOST_REQUIRE(error == 0); +// +// error = EN_initH(ph, flag); +// BOOST_REQUIRE(error == 0); +// +// do { +// error = EN_runH(ph, &t); +// BOOST_REQUIRE(error == 0); +// +// // this is the head at the end of the simulation after loading the original Net1.inp +// error = EN_getnodevalue(ph, Nindex, EN_HEAD, &h_orig); +// BOOST_REQUIRE(error == 0); +// +// error = EN_nextH(ph, &tstep); +// BOOST_REQUIRE(error == 0); +// +// } while (tstep > 0); +// +// error = EN_closeH(ph); +// BOOST_REQUIRE(error == 0); +// +// error = EN_close(ph); +// BOOST_REQUIRE(error == 0); +// +// EN_deleteproject(&ph); +// } + +BOOST_FIXTURE_TEST_CASE(test_build_net1, FixtureInitClose) +{ + int flag = 00; + long t, tstep; + int i, ind, Lindex, Nindex, Cindex; + double h_build; + + // now we build Net1 from scratch... + char juncs[9][10] = { "10", "11", "12", "13", "21", "22", "23", "31", "32" }; + double e[9] = { 710, 710, 700, 695, 700, 695, 690, 700, 710 }; + double d[9] = { 0, 150, 150, 100, 150, 200, 150, 100, 100 }; + double X[9] = { 20, 30, 50, 70, 30, 50, 70, 30, 50 }; + double Y[9] = { 70, 70, 70, 70, 40, 40, 40, 10, 10 }; + double L[12] = { 10530, 5280, 5280, 5280, 5280, 5280, 200, 5280, 5280, 5280, 5280, 5280 }; + double dia[12] = { 18, 14, 10, 10, 12, 6, 18, 10, 12, 8, 8, 6 }; + double P[12] = { 1.0f, 1.2f, 1.4f, 1.6f, 1.4f, 1.2f, 1.0f, 0.8f, 0.6f, 0.4f, 0.6f, 0.8f }; + + error = EN_addpattern(ph, (char *)"pat1"); + BOOST_REQUIRE(error == 0); + error = EN_setpattern(ph, 1, P, 12); + BOOST_REQUIRE(error == 0); + //error = EN_setoption(ph, EN_DEFDEMANDPAT, 1); + //BOOST_REQUIRE(error == 0); + for (i = 0; i < 9; i++) + { + error = EN_addnode(ph, juncs[i], EN_JUNCTION, &ind); + BOOST_REQUIRE(error == 0); + error = EN_setnodevalue(ph, i + 1, EN_ELEVATION, e[i]); + BOOST_REQUIRE(error == 0); + error = EN_setnodevalue(ph, i + 1, EN_BASEDEMAND, d[i]); + BOOST_REQUIRE(error == 0); + error = EN_setnodevalue(ph, i+1, EN_PATTERN, 1); + BOOST_REQUIRE(error == 0); + error = EN_setcoord(ph, i + 1, X[i], Y[i]); + BOOST_REQUIRE(error == 0); + //error = EN_setdemandpattern(ph, i + 1, 1, 1); + //BOOST_REQUIRE(error == 0); + } + error = EN_addnode(ph, (char *)"9", EN_RESERVOIR, &ind); + BOOST_REQUIRE(error == 0); + error = EN_setcoord(ph, 10, 10, 70); + BOOST_REQUIRE(error == 0); + error = EN_setnodevalue(ph, 10, EN_ELEVATION, 800); + BOOST_REQUIRE(error == 0); + + error = EN_addnode(ph, (char *)"2", EN_TANK, &ind); + BOOST_REQUIRE(error == 0); + error = EN_setcoord(ph, 11, 50, 90); + BOOST_REQUIRE(error == 0); + error = EN_setnodevalue(ph, 11, EN_TANKDIAM, 50.5); + BOOST_REQUIRE(error == 0); + error = EN_setnodevalue(ph, 11, EN_ELEVATION, 850); + BOOST_REQUIRE(error == 0); + error = EN_setnodevalue(ph, 11, EN_MAXLEVEL, 150); + BOOST_REQUIRE(error == 0); + error = EN_setnodevalue(ph, 11, EN_TANKLEVEL, 120); + BOOST_REQUIRE(error == 0); + error = EN_setnodevalue(ph, 11, EN_MINLEVEL, 100); + BOOST_REQUIRE(error == 0); + error = EN_setnodevalue(ph, 11, EN_MIXFRACTION, 1); + BOOST_REQUIRE(error == 0); + + error = EN_addlink(ph, (char *)"10", EN_PIPE, (char *)"10", (char *)"11", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"11", EN_PIPE, (char *)"11", (char *)"12", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"12", EN_PIPE, (char *)"12", (char *)"13", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"21", EN_PIPE, (char *)"21", (char *)"22", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"22", EN_PIPE, (char *)"22", (char *)"23", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"31", EN_PIPE, (char *)"31", (char *)"32", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"110", EN_PIPE, (char *)"2", (char *)"12", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"111", EN_PIPE, (char *)"11", (char *)"21", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"112", EN_PIPE, (char *)"12", (char *)"22", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"113", EN_PIPE, (char *)"13", (char *)"23", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"121", EN_PIPE, (char *)"21", (char *)"31", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"122", EN_PIPE, (char *)"22", (char *)"32", &ind); + BOOST_REQUIRE(error == 0); + for (i = 0; i < 12; i++) + { + error = EN_setlinkvalue(ph, i + 1, EN_LENGTH, L[i]); + BOOST_REQUIRE(error == 0); + error = EN_setlinkvalue(ph, i + 1, EN_DIAMETER, dia[i]); + BOOST_REQUIRE(error == 0); + } + + error = EN_addlink(ph, (char *)"9", EN_PUMP, (char *)"9", (char *)"10", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addcurve(ph, (char *)"1"); + BOOST_REQUIRE(error == 0); + error = EN_setcurvevalue(ph, 1, 1, 1500, 250); + BOOST_REQUIRE(error == 0); + error = EN_getlinkindex(ph, (char *)"9", &ind); + BOOST_REQUIRE(error == 0); + error = EN_setheadcurveindex(ph, ind, 1); + BOOST_REQUIRE(error == 0); + + error = EN_settimeparam(ph, EN_DURATION, 24 * 3600); + BOOST_REQUIRE(error == 0); + error = EN_settimeparam(ph, EN_PATTERNSTEP, 2 * 3600); + BOOST_REQUIRE(error == 0); + + error = EN_getlinkindex(ph, (char *)"9", &Lindex); + BOOST_REQUIRE(error == 0); + error = EN_getnodeindex(ph, (char *)"2", &Nindex); + BOOST_REQUIRE(error == 0); + + // Add controls + error = EN_addcontrol(ph, EN_LOWLEVEL, Lindex, 1, Nindex, 110, &Cindex); + BOOST_REQUIRE(error == 0); + error = EN_addcontrol(ph, EN_HILEVEL, Lindex, 0, Nindex, 140, &Cindex); + BOOST_REQUIRE(error == 0); + + error = EN_openH(ph); + BOOST_REQUIRE(error == 0); + error = EN_initH(ph, 0); + BOOST_REQUIRE(error == 0); + do { + error = EN_runH(ph, &t); + BOOST_REQUIRE(error == 0); + // this is the head at the end of the simulation after building the network *without* saving it to file + error = EN_getnodevalue(ph, Nindex, EN_HEAD, &h_build); + BOOST_REQUIRE(error == 0); + error = EN_nextH(ph, &tstep); + BOOST_REQUIRE(error == 0); + } while (tstep > 0); + error = EN_closeH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_saveinpfile(ph, "net_builder.inp"); + BOOST_REQUIRE(error == 0); +} + +BOOST_AUTO_TEST_CASE(test_open_net1, * boost::unit_test::depends_on("test_net_builder/test_build_net1")) +{ + int error = 0; + int flag = 00; + long t, tstep; + int Nindex = -1; + double h_orig = 0.0, h_build = 0.0, h_build_loaded = 0.0; + + + EN_Project ph = NULL; + + // now we load the netwok we just built and saved + EN_createproject(&ph); + error = EN_open(ph, "net_builder.inp", DATA_PATH_RPT, DATA_PATH_OUT); + BOOST_REQUIRE(error == 0); + + error = EN_getnodeindex(ph, (char *)"2", &Nindex); + BOOST_REQUIRE(error == 0); + + error = EN_openH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_initH(ph, flag); + BOOST_REQUIRE(error == 0); + + do { + error = EN_runH(ph, &t); + BOOST_REQUIRE(error == 0); + // this is the head at the end of the simulation after building the network and saving it to file + error = EN_getnodevalue(ph, Nindex, EN_HEAD, &h_build_loaded); + BOOST_REQUIRE(error == 0); + error = EN_nextH(ph, &tstep); + BOOST_REQUIRE(error == 0); + + } while (tstep > 0); + + error = EN_closeH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_close(ph); + BOOST_REQUIRE(error == 0); + + EN_deleteproject(ph); + + //--------------------------------------------------------------------- + // if we got this far we can compare results + + // compare the original to the build & saved network + // BOOST_CHECK(abs(h_orig - h_build_loaded) < 0.0001); + + // compare the original to the build without saving + // BOOST_CHECK(abs(h_orig - h_build) < 0.0001); +} + + +BOOST_FIXTURE_TEST_CASE(test_save_net2, FixtureInitClose) +{ + //char id[EN_MAXID+1]; + double p1_1, p2_1; // p1_2, p2_2; + double q1_1, q2_1; // q1_2, q2_2; + int ind; + + // Build a network + error = EN_addnode(ph, (char *)"N1", EN_JUNCTION, &ind); + BOOST_REQUIRE(error == 0); + error = EN_addnode(ph, (char *)"N2", EN_JUNCTION, &ind); + BOOST_REQUIRE(error == 0); + error = EN_addnode(ph, (char *)"N3", EN_RESERVOIR, &ind); + BOOST_REQUIRE(error == 0); + error = EN_addnode(ph, (char *)"N4", EN_TANK, &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"L1", EN_PUMP, (char *)"N3", (char *)"N1", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"L2", EN_PIPE, (char *)"N1", (char *)"N3", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addlink(ph, (char *)"L3", EN_PIPE, (char *)"N1", (char *)"N2", &ind); + BOOST_REQUIRE(error == 0); + error = EN_addcurve(ph, (char *)"C1"); + BOOST_REQUIRE(error == 0); + + // Set network data using the new helper functions + error = EN_setcurvevalue(ph, 1, 1, 1500, 250); + BOOST_REQUIRE(error == 0); + error = EN_setjuncdata(ph, 1, 700, 500, (char *)""); + BOOST_REQUIRE(error == 0); + error = EN_setjuncdata(ph, 2, 710, 500, (char *)""); + BOOST_REQUIRE(error == 0); + error = EN_setnodevalue(ph, 3, EN_ELEVATION, 800); + BOOST_REQUIRE(error == 0); + error = EN_settankdata(ph, 4, 850, 120, 100, 150, 50.5, 0, (char *)""); + BOOST_REQUIRE(error == 0); + error = EN_setlinkvalue(ph, 1, EN_PUMP_HCURVE, 1); + BOOST_REQUIRE(error == 0); + error = EN_setpipedata(ph, 2, 10560, 12, 100, 0); + BOOST_REQUIRE(error == 0); + error = EN_setpipedata(ph, 3, 5280, 14, 100, 0); + BOOST_REQUIRE(error == 0); + + // Run hydraulics + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + // Save results + error = EN_getnodevalue(ph, 1, EN_PRESSURE, &p1_1); + BOOST_REQUIRE(error == 0); + error = EN_getnodevalue(ph, 2, EN_PRESSURE, &p2_1); + BOOST_REQUIRE(error == 0); + error = EN_getlinkvalue(ph, 1, EN_FLOW, &q1_1); + BOOST_REQUIRE(error == 0); + error = EN_getlinkvalue(ph, 2, EN_FLOW, &q2_1); + BOOST_REQUIRE(error == 0); + + // Save project + error = EN_saveinpfile(ph, "netbuilder_test2.inp"); + BOOST_REQUIRE(error == 0); +} + + +BOOST_AUTO_TEST_CASE(test_reopen_net2, *boost::unit_test::depends_on("test_net_builder/test_save_net2")) +{ + int error, index; + + double p1_2, p2_2; + double q1_2, q2_2; + + // Open the saved project file + EN_Project ph = NULL; + error = EN_createproject(&ph); + BOOST_REQUIRE(error == 0); + error = EN_open(ph, "netbuilder_test2.inp", DATA_PATH_RPT, DATA_PATH_OUT); + BOOST_REQUIRE(error == 0); + + // Run hydraulics + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + // Save these new results + error = EN_getnodevalue(ph, 1, EN_PRESSURE, &p1_2); + BOOST_REQUIRE(error == 0); + error = EN_getnodevalue(ph, 2, EN_PRESSURE, &p2_2); + BOOST_REQUIRE(error == 0); + error = EN_getlinkindex(ph, (char *)"L1", &index); + BOOST_REQUIRE(error == 0); + error = EN_getlinkvalue(ph, index, EN_FLOW, &q1_2); + BOOST_REQUIRE(error == 0); + error = EN_getlinkindex(ph, (char *)"L2", &index); + BOOST_REQUIRE(error == 0); + error = EN_getlinkvalue(ph, index, EN_FLOW, &q2_2); + BOOST_REQUIRE(error == 0); + + // Display old & new results + //cout << "\n Node N1 Pressure: " << p1_1 << " " << p1_2; + //cout << "\n Node N2 Pressure: " << p2_1 << " " << p2_2; + //cout << "\n Link L1 Flow: " << q1_1 << " " << q1_2; + //cout << "\n Link L2 Flow: " << q2_1 << " " << q2_2; + + // Compare old & new results + // BOOST_CHECK(abs(p1_1 - p1_2) < 1.e-5); + // BOOST_CHECK(abs(q1_1 - q1_2) < 1.e-5); + // BOOST_CHECK(abs(p2_1 - p2_2) < 1.e-5); + // BOOST_CHECK(abs(q2_1 - q2_2) < 1.e-5); + + // Close project + EN_close(ph); + EN_deleteproject(ph); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_networks.sh b/tests/test_networks.sh deleted file mode 100755 index a6527b8..0000000 --- a/tests/test_networks.sh +++ /dev/null @@ -1,35 +0,0 @@ -#! /bin/bash -test_networks() -{ -returnValue=0 -for d in network_tests/*/ ; do - for netfile in `ls $d*.inp`; do - officialBinFile=${netfile%.*}.enb - candidateBinFile=${netfile%.*}-candidate.enb - echo "testing $netfile with known good binary output $officialBinFile" - if ../build/CMake/buildproducts/bin/runepanet $netfile ${netfile%.*}-candidate.rpt $candidateBinFile - then - echo "epanet run for $netfile SUCCESS" - else - echo "epanet run for $netfile FAILED" - returnValue=1 - fi - if python ENBinaryOutDiff.py $officialBinFile $candidateBinFile - then - echo "binary output for $netfile PASSED" - else - echo "binary output for $netfile FAILED" - returnValue=1 - fi - echo "+++++" - done -done -return $returnValue -} - -cp ../build/CMake/buildproducts/bin/libENBinaryOut.* ./libENBinaryOut.so -cp ../tools/outputapi/*.py ./ - - - -test_networks diff --git a/tests/test_node.cpp b/tests/test_node.cpp new file mode 100644 index 0000000..aa3e21e --- /dev/null +++ b/tests/test_node.cpp @@ -0,0 +1,356 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_node.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +#include + +#include "test_toolkit.hpp" + + +BOOST_AUTO_TEST_SUITE (test_node) + + +BOOST_FIXTURE_TEST_CASE(test_adddelete_node, FixtureInitClose) +{ + int index; + + error = EN_addnode(ph, (char *)"N2", EN_JUNCTION, &index); + BOOST_REQUIRE(error == 0); + error = EN_addnode(ph, (char *)"N4", EN_TANK, &index); + BOOST_REQUIRE(error == 0); + error = EN_addnode(ph, (char *)"N3", EN_RESERVOIR, &index); + BOOST_REQUIRE(error == 0); + error = EN_addnode(ph, (char *)"N1", EN_JUNCTION, &index); + BOOST_REQUIRE(error == 0); + + error = EN_getnodeindex(ph, (char *)"N1", &index); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(index == 2); + error = EN_getnodeindex(ph, (char *)"N2", &index); + BOOST_REQUIRE(error == 0); + error = EN_deletenode(ph, index, EN_UNCONDITIONAL); + BOOST_REQUIRE(error == 0); + + error = EN_getnodeindex(ph, (char *)"N4", &index); + BOOST_REQUIRE(error == 0); + error = EN_deletenode(ph, index, EN_UNCONDITIONAL); + BOOST_REQUIRE(error == 0); + error = EN_getnodeindex(ph, (char *)"N3", &index); + BOOST_REQUIRE(error == 0); + error = EN_deletenode(ph, index, EN_UNCONDITIONAL); + BOOST_REQUIRE(error == 0); + +} + +BOOST_FIXTURE_TEST_CASE(test_node_validate_id, FixtureInitClose) +{ + int index; + + error = EN_addnode(ph, (char *)"N2", EN_JUNCTION, &index); + BOOST_REQUIRE(error == 0); + + error = EN_addnode(ph, (char *)"N 3", EN_JUNCTION, &index); + BOOST_REQUIRE(error == 252); + + error = EN_addnode(ph, (char *)"\"N3", EN_JUNCTION, &index); + BOOST_REQUIRE(error == 252); + + error = EN_addnode(ph, (char *)"N;3", EN_JUNCTION, &index); + BOOST_REQUIRE(error == 252); + + EN_getnodeindex(ph, (char *)"N2", &index); + error = EN_setnodeid(ph, index, (char *)"N;2"); + BOOST_REQUIRE(error = 252); +} + + +BOOST_FIXTURE_TEST_CASE(test_junc_props, FixtureOpenClose) +{ + int index; + const auto props = { + EN_ELEVATION, + EN_BASEDEMAND, + EN_PATTERN, + EN_EMITTER, + EN_INITQUAL, + }; + const size_t num_props = 5; + + std::vector test (num_props); + double *value = test.data(); + + error = EN_getnodeindex(ph, (char *)"11", &index); + std::vector ref = {710.0, 150.0, 1.0, 0.0, 0.5}; + + + // Ranged for loop iterates over property set + for (EN_NodeProperty p : props) { + error = EN_getnodevalue(ph, index, p, value++); + BOOST_REQUIRE(error == 0); + } + + BOOST_CHECK(check_cdd_double(test, ref, 3)); +} + +BOOST_FIXTURE_TEST_CASE(test_tank_props, FixtureOpenClose) +{ + int index; + const auto props = { + EN_ELEVATION, + EN_TANKLEVEL, + EN_MINLEVEL, + EN_MAXLEVEL, + EN_TANKDIAM, + EN_MINVOLUME + }; + const size_t num_props = 6; + + std::vector test (num_props); + double *value = test.data(); + + error = EN_getnodeindex(ph, (char *)"2", &index); + std::vector ref = {850.0, 120.0, 100.0, 150.0, 50.5, 200296.167}; + + // Ranged for loop iterates over property set + for (EN_NodeProperty p : props) { + error = EN_getnodevalue(ph, index, p, value++); + BOOST_REQUIRE(error == 0); + } + + BOOST_CHECK(check_cdd_double(test, ref, 3)); +} + +BOOST_AUTO_TEST_SUITE_END() + + + + +BOOST_AUTO_TEST_SUITE(node_props_after_step) + +BOOST_FIXTURE_TEST_CASE(test_junc_props, FixtureAfterStep) +{ + int index; + const auto props = { + EN_DEMAND, + EN_HEAD, + EN_PRESSURE, + EN_QUALITY + }; + const size_t num_props = 4; + + std::vector test (num_props); + double *value = test.data(); + + error = EN_getnodeindex(ph, (char *)"11", &index); + std::vector ref = {179.999, 991.574, 122.006, 0.857}; + + + // Ranged for loop iterates over property set + for (EN_NodeProperty p : props) { + error = EN_getnodevalue(ph, index, p, value++); + BOOST_REQUIRE(error == 0); + } + + BOOST_CHECK(check_cdd_double(test, ref, 3)); +} + +BOOST_FIXTURE_TEST_CASE(test_tank_props, FixtureAfterStep) +{ + int index; + const auto props = { + EN_DEMAND, + EN_HEAD, + EN_PRESSURE, + EN_QUALITY + }; + const size_t num_props = 4; + + std::vector test (num_props); + double *value = test.data(); + + error = EN_getnodeindex(ph, (char *)"2", &index); + std::vector ref = {505.383, 978.138, 55.522, 0.911}; + + // Ranged for loop iterates over property set + for (EN_NodeProperty p : props) { + error = EN_getnodevalue(ph, index, p, value++); + BOOST_REQUIRE(error == 0); + } + + BOOST_CHECK(check_cdd_double(test, ref, 3)); +} +BOOST_AUTO_TEST_SUITE_END() + + +BOOST_AUTO_TEST_SUITE(setid_save_reopen) + +BOOST_AUTO_TEST_CASE(test_setid_save) +{ + int error = 0; + + EN_Project ph = NULL; + EN_createproject(&ph); + + error = EN_open(ph, DATA_PATH_NET1, DATA_PATH_RPT, ""); + BOOST_REQUIRE(error == 0); + + // Test of illegal node name change + char newid_1[] = "Illegal; node name"; + error = EN_setnodeid(ph, 3, newid_1); + BOOST_REQUIRE(error > 0); + + // Test of legal node name change + char newid_2[] = "Node3"; + error = EN_setnodeid(ph, 3, newid_2); + BOOST_REQUIRE(error == 0); + + // Save the project + error = EN_saveinpfile(ph, "net1_setid.inp"); + BOOST_REQUIRE(error == 0); + + error = EN_close(ph); + BOOST_REQUIRE(error == 0); + EN_deleteproject(ph); + +} + +BOOST_AUTO_TEST_CASE(test_setid_reopen, * boost::unit_test::depends_on("setid_save_reopen/test_setid_save")) +{ + int error = 0; + int index; + + EN_Project ph = NULL; + + // Re-open the saved project + EN_createproject(&ph); + error = EN_open(ph, "net1_setid.inp", DATA_PATH_RPT, ""); + BOOST_REQUIRE(error == 0); + + // Check that 3rd node has its new name + error = EN_getnodeindex(ph, (char *)"Node3", &index); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(index == 3); + + + error = EN_close(ph); + BOOST_REQUIRE(error == 0); + EN_deleteproject(ph); +} + +BOOST_AUTO_TEST_SUITE_END() + + +BOOST_AUTO_TEST_SUITE(node_comments) + +BOOST_FIXTURE_TEST_CASE(test_node_comments, FixtureOpenClose) +{ + int index; + char comment[EN_MAXMSG + 1]; + + // Add comments to selected objects + error = EN_getnodeindex(ph, (char *)"11", &index); + BOOST_REQUIRE(error == 0); + error = EN_setcomment(ph, EN_NODE, index, (char *)"J11"); + BOOST_REQUIRE(error == 0); + + error = EN_getnodeindex(ph, (char *)"23", &index); + BOOST_REQUIRE(error == 0); + error = EN_setcomment(ph, EN_NODE, index, (char *)"Junc23"); + BOOST_REQUIRE(error == 0); + + // Check comments + error = EN_getnodeindex(ph, (char *)"11", &index); + BOOST_REQUIRE(error == 0); + error = EN_getcomment(ph, EN_NODE, index, comment); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(check_string(comment, (char *)"J11")); + + error = EN_getnodeindex(ph, (char *)"23", &index); + BOOST_REQUIRE(error == 0); + error = EN_getcomment(ph, EN_NODE, index, comment); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(check_string(comment, (char *)"Junc23")); +} + +BOOST_FIXTURE_TEST_CASE(test_replace_comment, FixtureOpenClose) +{ + int index; + char comment[EN_MAXMSG + 1]; + + // Replace short comment with longer one and vice versa + error = EN_getnodeindex(ph, (char *)"11", &index); + BOOST_REQUIRE(error == 0); + error = EN_setcomment(ph, EN_NODE, index, (char *)"Junction11"); + BOOST_REQUIRE(error == 0); + error = EN_getcomment(ph, EN_NODE, index, comment); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(check_string(comment, (char *)"Junction11")); + + error = EN_setcomment(ph, EN_NODE, index, (char *)"J11"); + BOOST_REQUIRE(error == 0); + error = EN_getcomment(ph, EN_NODE, index, comment); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(check_string(comment, (char *)"J11")); +} + +BOOST_FIXTURE_TEST_CASE(test_save_comment, FixtureOpenClose) +{ + int index; + + // Add comments to selected objects + error = EN_getnodeindex(ph, (char *)"11", &index); + BOOST_REQUIRE(error == 0); + error = EN_setcomment(ph, EN_NODE, index, (char *)"J11"); + BOOST_REQUIRE(error == 0); + + error = EN_getnodeindex(ph, (char *)"23", &index); + BOOST_REQUIRE(error == 0); + error = EN_setcomment(ph, EN_NODE, index, (char *)"Junc23"); + BOOST_REQUIRE(error == 0); + + error = EN_saveinpfile(ph, DATA_PATH_TMP); + BOOST_REQUIRE(error == 0); +} + +BOOST_AUTO_TEST_CASE(test_reopen_comment, * boost::unit_test::depends_on("node_comments/test_save_comment")) +{ + int error, index; + char comment[EN_MAXMSG + 1]; + + // Create & load a project + EN_Project ph = NULL; + EN_createproject(&ph); + + error = EN_open(ph, DATA_PATH_TMP, DATA_PATH_RPT, ""); + BOOST_REQUIRE(error == 0); + + // Check that comments were saved & read correctly + // Check comments + error = EN_getnodeindex(ph, (char *)"11", &index); + BOOST_REQUIRE(error == 0); + error = EN_getcomment(ph, EN_NODE, index, comment); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(check_string(comment, (char *)"J11")); + + error = EN_getnodeindex(ph, (char *)"23", &index); + BOOST_REQUIRE(error == 0); + error = EN_getcomment(ph, EN_NODE, index, comment); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(check_string(comment, (char *)"Junc23")); + + // Close project + EN_close(ph); + EN_deleteproject(ph); +} + + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_overflow.cpp b/tests/test_overflow.cpp new file mode 100644 index 0000000..5ad60a4 --- /dev/null +++ b/tests/test_overflow.cpp @@ -0,0 +1,119 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_overflow.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 06/16/2019 + ****************************************************************************** +*/ + +/* + Tests the EN_CANOVERFLOW option for Tank nodes +*/ + +#include + +#include "test_toolkit.hpp" + +BOOST_AUTO_TEST_SUITE (test_overflow) + +BOOST_AUTO_TEST_CASE(test_tank_overflow) + +{ + int error = 0; + int Nindex, Lindex; + double level, spillage, spillage2, inflow; + char testFile[] = "test_overflow.inp"; + + EN_Project ph = NULL; + + error = EN_createproject(&ph); + error = EN_open(ph, DATA_PATH_NET1, DATA_PATH_RPT, ""); + + // Get index of the tank and its inlet/outlet pipe + error = EN_getnodeindex(ph, (char *)"2", &Nindex); + BOOST_REQUIRE(error == 0); + error = EN_getlinkindex(ph, (char *)"110", &Lindex); + BOOST_REQUIRE(error == 0); + + // Set initial & maximum level to 130 + error = EN_setnodevalue(ph, Nindex, EN_TANKLEVEL, 130); + BOOST_REQUIRE(error == 0); + error = EN_setnodevalue(ph, Nindex, EN_MAXLEVEL, 130); + BOOST_REQUIRE(error == 0); + + // Set duration to 1 hr + error = EN_settimeparam(ph, EN_DURATION, 3600); + BOOST_REQUIRE(error == 0); + + // Solve hydraulics with default of no tank spillage allowed + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + // Check that tank remains full + error = EN_getnodevalue(ph, Nindex, EN_TANKLEVEL, &level); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(abs(level - 130.0) < 0.0001); + + // Check that there is no spillage + error = EN_getnodevalue(ph, Nindex, EN_DEMAND, &spillage); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(abs(spillage) < 0.0001); + + // Check that inflow link is closed + error = EN_getlinkvalue(ph, Lindex, EN_FLOW, &inflow); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(abs(inflow) < 0.0001); + + // Turn tank overflow option on + error = EN_setnodevalue(ph, Nindex, EN_CANOVERFLOW, 1); + BOOST_REQUIRE(error == 0); + + // Solve hydraulics again + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + // Check that tank remains full + error = EN_getnodevalue(ph, Nindex, EN_TANKLEVEL, &level); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(abs(level - 130.0) < 0.0001); + + // Check that there is spillage equal to tank inflow + // (inflow has neg. sign since tank is start node of inflow pipe) + error = EN_getnodevalue(ph, Nindex, EN_DEMAND, &spillage); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(spillage > 0.0001); + error = EN_getlinkvalue(ph, Lindex, EN_FLOW, &inflow); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(abs(-inflow - spillage) < 0.0001); + + // Save project to file and then close it + error = EN_saveinpfile(ph, testFile); + BOOST_REQUIRE(error == 0); + error = EN_close(ph); + BOOST_REQUIRE(error == 0); + + // Re-open saved file & run it + error = EN_open(ph, testFile, DATA_PATH_RPT, ""); + BOOST_REQUIRE(error == 0); + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + // Check that tank spillage has same value as before + error = EN_getnodevalue(ph, Nindex, EN_DEMAND, &spillage2); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(abs(spillage - spillage2) < 0.0001); + + // Clean up + error = EN_close(ph); + BOOST_REQUIRE(error == 0); + error = EN_deleteproject(ph); + BOOST_REQUIRE(error == 0); + +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_pattern.cpp b/tests/test_pattern.cpp new file mode 100644 index 0000000..4d98ba3 --- /dev/null +++ b/tests/test_pattern.cpp @@ -0,0 +1,216 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_pattern.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +#include + +#include "test_toolkit.hpp" + + +BOOST_AUTO_TEST_SUITE (pattern) + +BOOST_FIXTURE_TEST_CASE(test_set_get_default_pattern, FixtureOpenClose) +{ + // Assign the default pattern index + int defPatIdx = 1; + int patIdx; + + // Rename the default pattern + error = EN_setpatternid(ph, defPatIdx, (char *)"Pat1"); + BOOST_REQUIRE(error == 0); + + error = EN_getpatternindex(ph, (char *)"Pat1", &patIdx); + BOOST_REQUIRE(error == 0); + + BOOST_CHECK(defPatIdx == patIdx); +} + +BOOST_FIXTURE_TEST_CASE(test_add_delete, FixtureOpenClose) +{ + double f2[] = { 2.1, 2.2 }; + double f3[] = { 3.1, 3.2, 3.3, 3.4 }; + + // Add 2 new patterns + error = EN_addpattern(ph, (char *)"Pat2"); + BOOST_REQUIRE(error == 0); + error = EN_addpattern(ph, (char *)"Pat3"); + BOOST_REQUIRE(error == 0); + + error = EN_setpattern(ph, 2, f2, 2); + BOOST_REQUIRE(error == 0); + error = EN_setpattern(ph, 3, f3, 4); + BOOST_REQUIRE(error == 0); + + // Delete Pat2 + error = EN_deletepattern(ph, 2); + BOOST_REQUIRE(error == 0); + + // Check that there are now 2 patterns + int n; + error = EN_getcount(ph, EN_PATCOUNT, &n); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(n == 2); +} + + +BOOST_AUTO_TEST_CASE(test_add_set) +{ + std::string path_inp(DATA_PATH_NET1); + std::string path_rpt(DATA_PATH_RPT); + std::string path_out(DATA_PATH_OUT); + std::string inp_save("net1_setid.inp"); + + int error = 0; + + EN_Project ph = NULL; + EN_createproject(&ph); + + error = EN_open(ph, path_inp.c_str(), path_rpt.c_str(), ""); + BOOST_REQUIRE(error == 0); + + // Assign the default pattern index + int n, defPatIdx = 1; + int patIdx; + + // Rename the default pattern + EN_setpatternid(ph, defPatIdx, (char *)"Pat1"); + EN_getpatternindex(ph, (char *)"Pat1", &patIdx); + BOOST_REQUIRE(defPatIdx == patIdx); + + // Add 2 new patterns + EN_addpattern(ph, (char *)"Pat2"); + EN_addpattern(ph, (char *)"Pat3"); + double f2[] = {2.1, 2.2}; + double f3[] = {3.1, 3.2, 3.3, 3.4}; + EN_setpattern(ph, 2, f2, 2); + EN_setpattern(ph, 3, f3, 4); + + // Assign Pat3 to 3rd junction + EN_setdemandpattern(ph, 3, 1, 3); + + // Delete Pat2 + EN_deletepattern(ph, 2); + + //Check that there are now 2 patterns + EN_getcount(ph, EN_PATCOUNT, &n); + BOOST_REQUIRE(n == 2); + + // Check that Pat3 with 4 factors is still assigned to 3rd junction + EN_getdemandpattern(ph, 3, 1, &patIdx); + EN_getpatternlen(ph, patIdx, &n); + BOOST_REQUIRE(n == 4); + + // Delete the default pattern + EN_deletepattern(ph, defPatIdx); + + // Check that junction 4 has no pattern + EN_getdemandpattern(ph, 4, 1, &patIdx); + BOOST_REQUIRE(patIdx == 0); + + // And that junction 3 still uses Pat3 + EN_getdemandpattern(ph, 3, 1, &patIdx); + char patID[EN_MAXID+1]; + EN_getpatternid(ph, patIdx, patID); + BOOST_REQUIRE(strcmp(patID, "Pat3") == 0); + + // Re-name the pump's (Link 9) head curve + int pumpIdx; + char pumpID[] = "9"; + int curveIdx; + char newCurveID[] = "PumpHeadCurve"; + EN_getlinkindex(ph, pumpID, &pumpIdx); + EN_getheadcurveindex(ph, pumpIdx, &curveIdx); + EN_setcurveid(ph, curveIdx, newCurveID); + + // Check that rename was successful + char curveID[EN_MAXID + 1]; + EN_getcurveid(ph, curveIdx, curveID); + BOOST_REQUIRE(strcmp(curveID, newCurveID) == 0); + + // Add two new curves + double x2[] = {0.0, 1.0, 2.0}; + double y2[] = {400.0, 60.0, 30.0}; + double x3[] = {2000.0}; + double y3[] = {100.0}; + char curve2[] = "Curve2"; + char curve3[] = "Curve3"; + EN_addcurve(ph, curve2); + EN_setcurve(ph, 2, x2, y2, 3); + EN_addcurve(ph, curve3); + EN_setcurve(ph, 3, x3, y3, 1); + + // Assign Curve3 to pump's head curve + EN_getcurveindex(ph, curve3, &curveIdx); + EN_setheadcurveindex(ph, pumpIdx, curveIdx); + + // Delete Curve2 + EN_getcurveindex(ph, curve2, &curveIdx); + EN_deletecurve(ph, curveIdx); + + // Check that pump's head curve is still Curve3 + EN_getheadcurveindex(ph, pumpIdx, &curveIdx); + EN_getcurveid(ph, curveIdx, curveID); + BOOST_REQUIRE(strcmp(curveID, curve3) == 0); + + // And that it contains the correct data + double x, y; + EN_getcurvevalue(ph, curveIdx, 1, &x, &y); + BOOST_REQUIRE(x == x3[0]); + BOOST_REQUIRE(y == y3[0]); + + EN_close(ph); + EN_deleteproject(ph); +} + +BOOST_FIXTURE_TEST_CASE(test_pattern_comments, FixtureOpenClose) +{ + int index; + char comment[EN_MAXMSG + 1]; + + // Set pattern comment + error = EN_getpatternindex(ph, (char *)"1", &index); + BOOST_REQUIRE(error == 0); + error = EN_setcomment(ph, EN_TIMEPAT, index, (char *)"Time Pattern 1"); + BOOST_REQUIRE(error == 0); + + // Check pattern comment + error = EN_getpatternindex(ph, (char *)"1", &index); + BOOST_REQUIRE(error == 0); + error = EN_getcomment(ph, EN_TIMEPAT, index, comment); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(check_string(comment, (char *)"Time Pattern 1")); +} + +BOOST_FIXTURE_TEST_CASE(test_pat_id_isvalid, FixtureInitClose) +{ + int index; + + error = EN_addpattern(ph, (char *)"P1"); + BOOST_REQUIRE(error == 0); + + error = EN_addpattern(ph, (char *)"P 2"); + BOOST_REQUIRE(error == 252); + + error = EN_addpattern(ph, (char *)"\"P2"); + BOOST_REQUIRE(error == 252); + + error = EN_addpattern(ph, (char *)"P;2"); + BOOST_REQUIRE(error == 252); + + EN_getpatternindex(ph, (char *)"P1", &index); + error = EN_setpatternid(ph, index, (char *)"P;1"); + BOOST_REQUIRE(error == 252); + +} + + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_pda.cpp b/tests/test_pda.cpp new file mode 100644 index 0000000..b7c1636 --- /dev/null +++ b/tests/test_pda.cpp @@ -0,0 +1,90 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_pda.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 07/20/2019 + ****************************************************************************** +*/ + +/* + Tests the Pressure Driven Analysis option +*/ + +#include + +#include "test_toolkit.hpp" + +BOOST_AUTO_TEST_SUITE (test_pda) + +BOOST_AUTO_TEST_CASE(test_pda_model) + +{ + int error = 0; + int index; + double count, reduction; + + EN_Project ph = NULL; + error = EN_createproject(&ph); + error = EN_open(ph, DATA_PATH_NET1, DATA_PATH_RPT, ""); + + // Set Demand Multiplier to 10 to cause negative pressures + error = EN_setoption(ph, EN_DEMANDMULT, 10); + BOOST_REQUIRE(error == 0); + + // Run single period analysis + error = EN_settimeparam(ph, EN_DURATION, 0); + BOOST_REQUIRE(error == 0); + + // Solve hydraulics with default DDA option + // which will return with neg. pressure warning code + error = EN_solveH(ph); + BOOST_REQUIRE(error == 6); + + // Check that 4 demand nodes have negative pressures + error = EN_getstatistic(ph, EN_DEFICIENTNODES, &count); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(count == 4); + + // Switch to PDA with pressure limits of 20 - 100 psi + error = EN_setdemandmodel(ph, EN_PDA, 20, 100, 0.5); + BOOST_REQUIRE(error == 0); + + // Solve hydraulics again + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + // Check that 6 nodes had demand reductions totaling 32.66% + error = EN_getstatistic(ph, EN_DEFICIENTNODES, &count); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(count == 6); + error = EN_getstatistic(ph, EN_DEMANDREDUCTION, &reduction); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(abs(reduction - 32.66) < 0.01); + + // Check that Junction 12 had full demand + error = EN_getnodeindex(ph, (char *)"12", &index); + BOOST_REQUIRE(error == 0); + error = EN_getnodevalue(ph, index, EN_DEMANDDEFICIT, &reduction); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(abs(reduction) < 0.01); + + // Check that Junction 21 had a demand deficit of 413.67 + error = EN_getnodeindex(ph, (char *)"21", &index); + BOOST_REQUIRE(error == 0); + error = EN_getnodevalue(ph, index, EN_DEMANDDEFICIT, &reduction); + BOOST_REQUIRE(error == 0); + BOOST_REQUIRE(abs(reduction - 413.67) < 0.01); + + // Clean up + error = EN_close(ph); + BOOST_REQUIRE(error == 0); + error = EN_deleteproject(ph); + BOOST_REQUIRE(error == 0); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_project.cpp b/tests/test_project.cpp new file mode 100644 index 0000000..627afbd --- /dev/null +++ b/tests/test_project.cpp @@ -0,0 +1,281 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_project.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +#include + +#include +#include + +#include "test_toolkit.hpp" + + +BOOST_AUTO_TEST_SUITE (test_project) + +BOOST_AUTO_TEST_CASE (test_create_delete) +{ + int error = 0; + EN_Project ph = NULL; + + error = EN_createproject(&ph); + + BOOST_REQUIRE(error == 0); + BOOST_CHECK(ph != NULL); + + error = EN_deleteproject(ph); + + BOOST_REQUIRE(error == 0); +} + +BOOST_AUTO_TEST_CASE (test_open_close) +{ + int error; + + EN_Project ph = NULL; + + EN_createproject(&ph); + + error = EN_open(ph, DATA_PATH_NET1, DATA_PATH_RPT, DATA_PATH_OUT); + BOOST_REQUIRE(error == 0); + + error = EN_close(ph); + BOOST_REQUIRE(error == 0); + + EN_deleteproject(ph); +} + +BOOST_AUTO_TEST_CASE(test_init_close) +{ + EN_Project ph = NULL; + EN_createproject(&ph); + + int error = EN_init(ph, DATA_PATH_RPT, DATA_PATH_OUT, EN_GPM, EN_HW); + BOOST_REQUIRE(error == 0); + + error = EN_close(ph); + BOOST_REQUIRE(error == 0); + + EN_deleteproject(ph); +} + +BOOST_AUTO_TEST_CASE(test_save) +{ + int error; + + EN_Project ph_save; + + EN_createproject(&ph_save); + error = EN_open(ph_save, DATA_PATH_NET1, DATA_PATH_RPT, DATA_PATH_OUT); + BOOST_REQUIRE(error == 0); + + error = EN_saveinpfile(ph_save, "test_reopen.inp"); + BOOST_REQUIRE(error == 0); + + BOOST_CHECK(boost::filesystem::exists("test_reopen.inp") == true); + + error = EN_close(ph_save); + BOOST_REQUIRE(error == 0); + EN_deleteproject(ph_save); +} + +BOOST_AUTO_TEST_CASE(test_reopen, * boost::unit_test::depends_on("test_project/test_save")) +{ + int error; + + EN_Project ph_reopen; + + EN_createproject(&ph_reopen); + error = EN_open(ph_reopen, "test_reopen.inp", DATA_PATH_RPT, DATA_PATH_OUT); + BOOST_REQUIRE(error == 0); + + error = EN_close(ph_reopen); + BOOST_REQUIRE(error == 0); + EN_deleteproject(ph_reopen); +} + +BOOST_AUTO_TEST_CASE(test_run) +{ + int error; + + EN_Project ph; + + EN_createproject(&ph); + + error = EN_runproject(ph, DATA_PATH_NET1, DATA_PATH_RPT, DATA_PATH_OUT, NULL); + BOOST_REQUIRE(error == 0); + + EN_deleteproject(ph); +} + +BOOST_AUTO_TEST_SUITE_END() + + +BOOST_AUTO_TEST_SUITE(test_proj_fixture) + +BOOST_FIXTURE_TEST_CASE(test_title, FixtureOpenClose) +{ + // How is the API user supposed to know array size? + char c_test[3][80]; + + // ref is an automatic variable and therefore doesn't need to be deleted + std::string ref[3] = { + " EPANET Example Network 1", + "A simple example of modeling chlorine decay. Both bulk and", + "wall reactions are included. "}; + + error = EN_gettitle(ph, c_test[0], c_test[1], c_test[2]); + BOOST_REQUIRE(error == 0); + + for (int i = 0; i < 3; i++) { + std::string test (c_test[i]); + BOOST_CHECK(check_string(test, ref[i])); + } + + // Need a test for EN_settitle +} + +BOOST_FIXTURE_TEST_CASE(test_getcount, FixtureOpenClose) +{ + int i; + + std::vector test(7); + int *array = test.data(); + + std::vector ref = { 11, 2, 13, 1, 1, 2, 0 }; + + for (i=EN_NODECOUNT; i<=EN_RULECOUNT; i++) { + error = EN_getcount(ph, i, array++); + BOOST_REQUIRE(error == 0); + } + + BOOST_CHECK_EQUAL_COLLECTIONS(ref.begin(), ref.end(), test.begin(), test.end()); + + error = EN_getcount(ph, 7, &i); + BOOST_CHECK(error == 251); +} + +BOOST_FIXTURE_TEST_CASE(test_setdemandpattern, FixtureOpenClose) +{ + int i, j, pat_index, pat_index_2, numDemands, nnodes; + char newpat[] = "new_pattern"; + + // get the number of nodes + error = EN_getcount(ph, EN_NODECOUNT, &nnodes); + BOOST_REQUIRE(error == 0); + + // add a new pattern + error = EN_addpattern(ph, newpat); + BOOST_REQUIRE(error == 0); + + // get the new patterns index, should be as the number of patterns + error = EN_getpatternindex(ph, newpat, &pat_index); + BOOST_REQUIRE(error == 0); + + for (i = 1; i <= nnodes; i++) { + // get the number of demand categories + error = EN_getnumdemands(ph, i, &numDemands); + BOOST_REQUIRE(error == 0); + + for (j = 1; j <= numDemands; j++) { + // set demand patterns + error = EN_setdemandpattern(ph, i, j, pat_index); + BOOST_REQUIRE(error == 0); + // get demand patterns should be the same with set + error = EN_getdemandpattern(ph, i, j, &pat_index_2); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(pat_index == pat_index_2); + } + } +} + +BOOST_FIXTURE_TEST_CASE(test_addpattern, FixtureOpenClose) +{ + int pat_index, n_patterns_1, n_patterns_2; + char newpat[] = "new_pattern"; + + // get the number of current patterns + error = EN_getcount(ph, EN_PATCOUNT, &n_patterns_1); + BOOST_REQUIRE(error == 0); + + // add a new pattern + error = EN_addpattern(ph, newpat); + BOOST_REQUIRE(error == 0); + + // get the new patterns count, shoul dbe the old one + 1 + error = EN_getcount(ph, EN_PATCOUNT, &n_patterns_2); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(n_patterns_1 + 1 == n_patterns_2); + + // gwt the new patterns index, should be as the number of patterns + error = EN_getpatternindex(ph, newpat, &pat_index); + BOOST_CHECK(pat_index == n_patterns_2); +} + +BOOST_FIXTURE_TEST_CASE(test_add_control, FixtureOpenClose) +{ + int flag = 00; + long t, tstep; + double h1, h2; + int Cindex; + + // run with original controls + error = EN_openH(ph); + BOOST_REQUIRE(error == 0); + error = EN_initH(ph, flag); + BOOST_REQUIRE(error == 0); + do { + error = EN_runH(ph, &t); + BOOST_REQUIRE(error == 0); + error = EN_getnodevalue(ph, 11, EN_HEAD, &h1); // get the tank head + BOOST_REQUIRE(error == 0); + error = EN_nextH(ph, &tstep); + BOOST_REQUIRE(error == 0); + } while (tstep > 0); + + error = EN_closeH(ph); + BOOST_REQUIRE(error == 0); + + // disable current controls + error = EN_setcontrol(ph, 1, 0, 0, 0, 0, 0); + BOOST_REQUIRE(error == 0); + error = EN_setcontrol(ph, 2, 1, 0, 0, 0, 0); + BOOST_REQUIRE(error == 0); + + // add new controls + error = EN_addcontrol(ph, 0, 13, 1, 11, 110, &Cindex); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(Cindex == 3); + error = EN_addcontrol(ph, 1, 13, 0, 11, 140, &Cindex); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(Cindex == 4); + + // run with new controls + error = EN_openH(ph); + BOOST_REQUIRE(error == 0); + error = EN_initH(ph, flag); + BOOST_REQUIRE(error == 0); + do { + error = EN_runH(ph, &t); + BOOST_REQUIRE(error == 0); + error = EN_getnodevalue(ph, 11, EN_HEAD, &h2); // get the tank head + BOOST_REQUIRE(error == 0); + error = EN_nextH(ph, &tstep); + BOOST_REQUIRE(error == 0); + } while (tstep > 0); + + error = EN_closeH(ph); + BOOST_REQUIRE(error == 0); + + BOOST_CHECK(abs(h1 - h2) < 1.e-5); // end head should be the same with new controls +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_quality.cpp b/tests/test_quality.cpp new file mode 100644 index 0000000..973732a --- /dev/null +++ b/tests/test_quality.cpp @@ -0,0 +1,100 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_quality.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +#include + +#include "test_toolkit.hpp" + + +BOOST_AUTO_TEST_SUITE (test_quality) + +BOOST_FIXTURE_TEST_CASE(test_solveQ, FixtureOpenClose) +{ + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_solveQ(ph); + BOOST_REQUIRE(error == 0); + + error = EN_report(ph); + BOOST_REQUIRE(error == 0); +} + +BOOST_FIXTURE_TEST_CASE(test_qual_step, FixtureOpenClose) +{ + int flag = 0; + long t, tstep; + + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_openQ(ph); + BOOST_REQUIRE(error == 0); + + error = EN_initQ(ph, flag); + BOOST_REQUIRE(error == 0); + + do { + error = EN_runQ(ph, &t); + BOOST_REQUIRE(error == 0); + + error = EN_stepQ(ph, &tstep); + BOOST_REQUIRE(error == 0); + + } while (tstep > 0); + + error = EN_closeQ(ph); + BOOST_REQUIRE(error == 0); +} + +BOOST_FIXTURE_TEST_CASE(test_progressive_step, FixtureOpenClose) +{ + int flag = EN_NOSAVE; + long t, tstep_h, tstep_q; + + error = EN_openH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_initH(ph, flag); + BOOST_REQUIRE(error == 0); + + error = EN_openQ(ph); + BOOST_REQUIRE(error == 0); + + error = EN_initQ(ph, flag); + BOOST_REQUIRE(error == 0); + + do { + error = EN_runH(ph, &t); + BOOST_REQUIRE(error == 0); + + error = EN_runQ(ph, &t); + BOOST_REQUIRE(error == 0); + + error = EN_nextH(ph, &tstep_h); + BOOST_REQUIRE(error == 0); + + error = EN_nextQ(ph, &tstep_q); + BOOST_REQUIRE(error == 0); + + } while (tstep_h > 0); + + error = EN_closeH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_closeQ(ph); + BOOST_REQUIRE(error == 0); + +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_reent.cpp b/tests/test_reent.cpp new file mode 100644 index 0000000..c82754f --- /dev/null +++ b/tests/test_reent.cpp @@ -0,0 +1,68 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_reent.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +#include + +#include +#include +#include + +#include "epanet2_2.h" + +#define NUM_THREADS 2 + +using namespace std; + +void epanet_thread(long i) +{ + int errorcode = 0; + EN_Project ph; + + string prefix = "example_"; + string suffix = ".inp"; + string input = prefix + to_string(static_cast(i)) + suffix; + + suffix = ".rpt"; + string report = prefix + to_string(static_cast(i)) + suffix; + + suffix = ".out"; + string output = prefix + to_string(static_cast(i)) + suffix; + + printf("Thread #%ld starting EPANET ...\n", i); + + EN_createproject(&ph); + errorcode = EN_runproject(ph, input.c_str(), report.c_str(), output.c_str(), NULL); + EN_deleteproject(ph); + + printf("Thread #%ld EPANET done. Status = %d\n", i, errorcode); +} + +int main(int argc, char *argv[]) +{ + long i; + boost::thread *threads[NUM_THREADS]; + + for (i = 0; i < NUM_THREADS; i++) { + threads[i] = new boost::thread(epanet_thread, i); + printf("Main: creating thread %ld.\n", i); + } + + for (i = 0; i < NUM_THREADS; i++) { + threads[i]->join(); + printf("Main: joining thread %ld.\n", i); + delete threads[i]; + } + + printf("Main: program completed. Exiting.\n"); + return(0); +} diff --git a/tests/test_report.cpp b/tests/test_report.cpp new file mode 100644 index 0000000..5b5850c --- /dev/null +++ b/tests/test_report.cpp @@ -0,0 +1,49 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_report.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +#include + +#include "test_toolkit.hpp" + + +BOOST_AUTO_TEST_SUITE (test_report) + +BOOST_FIXTURE_TEST_CASE(test_rprt_anlysstats, FixtureOpenClose) +{ + int i; + + std::vector test(5); + double *array = test.data(); + + std::vector ref = {3.0, 7.0799498320679432e-06, 1.6680242187483429e-08, + 0.0089173150106518495, 0.99999998187144024}; + + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_solveQ(ph); + BOOST_REQUIRE(error == 0); + + + for (i=EN_ITERATIONS; i<=EN_MASSBALANCE; i++) { + error = EN_getstatistic(ph, i, array++); + BOOST_REQUIRE(error == 0); + } + BOOST_CHECK(check_cdd_double(test, ref, 3)); + + double temp; + error = EN_getstatistic(ph, 8, &temp); + BOOST_CHECK(error == 251); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/test_toolkit.cpp b/tests/test_toolkit.cpp new file mode 100644 index 0000000..110460a --- /dev/null +++ b/tests/test_toolkit.cpp @@ -0,0 +1,65 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_toolkit.cpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +#define BOOST_TEST_MODULE toolkit + +#include + +#include + +#include "test_toolkit.hpp" + + +// Custom test to check the minimum number of correct decimal digits between +// the test and the ref vectors. +boost::test_tools::predicate_result check_cdd_double(std::vector& test, + std::vector& ref, long cdd_tol){ + double tmp, min_cdd = 10.0; + + // TODO: What if the vectors aren't the same length? + + std::vector::iterator test_it; + std::vector::iterator ref_it; + + for (test_it = test.begin(), ref_it = ref.begin(); + (test_it < test.end()) && (ref_it < ref.end()); + ++test_it, ++ref_it) + { + if (*test_it != *ref_it) { + // Compute log absolute error + tmp = abs(*test_it - *ref_it); + if (tmp < 1.0e-7) + tmp = 1.0e-7; + + else if (tmp > 2.0) + tmp = 1.0; + + tmp = -log10(tmp); + if (tmp < 0.0) + tmp = 0.0; + + if (tmp < min_cdd) + min_cdd = tmp; + } + } + + return floor(min_cdd) >= cdd_tol; +} + +boost::test_tools::predicate_result check_string(std::string test, std::string ref) +{ + if (ref.compare(test) == 0) + return true; + else + return false; +} diff --git a/tests/test_toolkit.hpp b/tests/test_toolkit.hpp new file mode 100644 index 0000000..3d6c49e --- /dev/null +++ b/tests/test_toolkit.hpp @@ -0,0 +1,130 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_toolkit.hpp + Description: Tests EPANET toolkit api functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 03/21/2019 + ****************************************************************************** +*/ + +#ifndef TEST_TOOLKIT_HPP +#define TEST_TOOLKIT_HPP + +#include "epanet2_2.h" + + +#define DATA_PATH_NET1 "./net1.inp" +#define DATA_PATH_TMP "./tmp.inp" +#define DATA_PATH_RPT "./test.rpt" +#define DATA_PATH_OUT "./test.out" + +struct FixtureOpenClose{ + FixtureOpenClose() { + error = 0; + ph = NULL; + + EN_createproject(&ph); + error = EN_open(ph, DATA_PATH_NET1, DATA_PATH_RPT, DATA_PATH_OUT); + } + + ~FixtureOpenClose() { + error = EN_close(ph); + EN_deleteproject(ph); + } + + int error; + EN_Project ph; +}; + + +struct FixtureInitClose { + FixtureInitClose() { + error = 0; + ph = NULL; + + EN_createproject(&ph); + EN_init(ph, DATA_PATH_RPT, DATA_PATH_OUT, EN_GPM, EN_HW); + } + + ~FixtureInitClose() { + EN_close(ph); + EN_deleteproject(ph); + } + int error; + EN_Project ph; +}; + + +struct FixtureAfterStep{ + FixtureAfterStep() { + error = 0; + ph = NULL; + + flag = 0; + tstop = 10800; + + EN_createproject(&ph); + error = EN_open(ph, DATA_PATH_NET1, DATA_PATH_RPT, DATA_PATH_OUT); + + error = EN_solveH(ph); + BOOST_REQUIRE(error == 0); + + error = EN_openQ(ph); + BOOST_REQUIRE(error == 0); + + error = EN_initQ(ph, flag); + BOOST_REQUIRE(error == 0); + + do { + error = EN_runQ(ph, &t); + BOOST_REQUIRE(error == 0); + + error = EN_stepQ(ph, &tstep); + BOOST_REQUIRE(error == 0); + + } while (tstep > 0 && t < tstop); + } + + ~FixtureAfterStep() { + error = EN_closeQ(ph); + BOOST_REQUIRE(error == 0); + + error = EN_close(ph); + EN_deleteproject(ph); + } + + int error, flag; + long t, tstep, tstop; + EN_Project ph; +}; + +struct FixtureSingleNode { + FixtureSingleNode() { + error = 0; + ph = NULL; + + EN_createproject(&ph); + EN_init(ph, DATA_PATH_RPT, DATA_PATH_OUT, EN_GPM, EN_HW); + + EN_addnode(ph, (char *)"CUB_SCOUT_QUONSET_HUT", EN_JUNCTION, &node_qhut); + } + + ~FixtureSingleNode() { + EN_close(ph); + EN_deleteproject(ph); + } + int error, index, node_qhut; + EN_Project ph; +}; + + +boost::test_tools::predicate_result check_cdd_double(std::vector& test, + std::vector& ref, long cdd_tol); +boost::test_tools::predicate_result check_string(std::string test, std::string ref); + + +#endif //TEST_TOOLKIT_HPP diff --git a/tests/util/CMakeLists.txt b/tests/util/CMakeLists.txt new file mode 100644 index 0000000..7072f35 --- /dev/null +++ b/tests/util/CMakeLists.txt @@ -0,0 +1,28 @@ + +if(UNIX) + set(CMAKE_CXX_FLAGS "-std=c++11") +endif(UNIX) + +# Sets for output directory for executables and libraries +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + + +add_executable(test_cstrhelper ./test_cstrhelper.cpp + ../../src/util/cstr_helper.c) +target_include_directories(test_cstrhelper PUBLIC ../../src/) +target_link_libraries(test_cstrhelper ${Boost_LIBRARIES}) + + +add_executable(test_errormanager ./test_errormanager.cpp + ../../src/util/errormanager.c) +target_include_directories(test_errormanager PUBLIC ../../src/) +target_link_libraries(test_errormanager ${Boost_LIBRARIES}) + + +add_executable(test_filemanager ./test_filemanager.cpp + ../../src/util/filemanager.c + ../../src/util/cstr_helper.c) +target_include_directories(test_filemanager PUBLIC ../../src/) +target_link_libraries(test_filemanager ${Boost_LIBRARIES}) diff --git a/tests/util/test_cstrhelper.cpp b/tests/util/test_cstrhelper.cpp new file mode 100644 index 0000000..2688a74 --- /dev/null +++ b/tests/util/test_cstrhelper.cpp @@ -0,0 +1,57 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: test_cstrhelper.cpp + Description: tests for C string helper functions + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 04/16/2019 + ****************************************************************************** +*/ + +#include + +#define BOOST_TEST_MODULE cstr_helper +#include + +#include "util/cstr_helper.h" + + +boost::test_tools::predicate_result check_string(std::string test, std::string ref) +{ + if (ref.compare(test) == 0) + return true; + else + return false; +} + + +BOOST_AUTO_TEST_SUITE(test_cstrhelper) + + +BOOST_AUTO_TEST_CASE(test_duplicate) { + + std::string source = "I will be rewarded for good behavior."; + char *dest = NULL; + + cstr_duplicate(&dest, source.c_str()); + BOOST_CHECK(check_string(dest, source)); + BOOST_CHECK(cstr_isnullterm(dest) == true); + + free(dest); +} + + +BOOST_AUTO_TEST_CASE(test_isvalid) { + + BOOST_CHECK(cstr_isvalid("big tank") == false); + BOOST_CHECK(cstr_isvalid("big\"tank") == false); + BOOST_CHECK(cstr_isvalid("big;tank") == false); + + BOOST_CHECK(cstr_isvalid("big-tank") == true); +} + + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/util/test_errormanager.cpp b/tests/util/test_errormanager.cpp new file mode 100644 index 0000000..8e70774 --- /dev/null +++ b/tests/util/test_errormanager.cpp @@ -0,0 +1,81 @@ + + +#define BOOST_TEST_MODULE errormanager + +#include + +#include "util/errormanager.h" + + +#define MESSAGE_STRING "This is unit testing!" + + +void mock_lookup(int errcode, char *errmsg, int len) +{ + char *msg = NULL; + + if (errcode == 100) { + msg = (char *)MESSAGE_STRING; + } + else { + msg = (char *)""; + } + strncpy(errmsg, msg, len); +} + +boost::test_tools::predicate_result check_string(std::string test, std::string ref) +{ + if (ref.compare(test) == 0) + return true; + else + return false; +} + + +BOOST_AUTO_TEST_SUITE(test_errormanager) + +BOOST_AUTO_TEST_CASE (test_create_destroy) +{ + error_handle_t *error_handle = NULL; + error_handle = create_error_manager(&mock_lookup); + + delete_error_manager(error_handle); +} + + +struct Fixture{ + Fixture() { + error_message = NULL; + error_handle = create_error_manager(&mock_lookup); + } + ~Fixture() { + delete_error_manager(error_handle); + free(error_message); + } + int error; + error_handle_t *error_handle; + char *error_message; +}; + + +BOOST_FIXTURE_TEST_CASE (test_set_clear, Fixture) +{ + error = set_error(error_handle, 100); + BOOST_CHECK(error == 100); + + clear_error(error_handle); + error = check_error(error_handle, &error_message); + BOOST_CHECK(error == 0); + BOOST_CHECK(error_message == NULL); +} + +BOOST_FIXTURE_TEST_CASE(test_set_check, Fixture) +{ + error = set_error(error_handle, 100); + BOOST_CHECK(error == 100); + + error = check_error(error_handle, &error_message); + BOOST_CHECK(check_string(error_message, MESSAGE_STRING)); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/util/test_filemanager.cpp b/tests/util/test_filemanager.cpp new file mode 100644 index 0000000..7e17577 --- /dev/null +++ b/tests/util/test_filemanager.cpp @@ -0,0 +1,97 @@ +/* + ****************************************************************************** + Project: OWA EPANET + Version: 2.2 + Module: util/test_filemanager.cpp + Description: Tests for util/filemanager.c + Authors: see AUTHORS + Copyright: see AUTHORS + License: see LICENSE + Last Updated: 04/01/2019 + ****************************************************************************** +*/ + +#define BOOST_TEST_MODULE filemanager + +#include +#include + +#include "util/filemanager.h" + + +#define DATA_PATH_OUTPUT "./example1.out" + + +boost::test_tools::predicate_result check_string(std::string test, std::string ref) +{ + if (ref.compare(test) == 0) + return true; + else + return false; +} + + +BOOST_AUTO_TEST_SUITE(test_filemanager) + + +BOOST_AUTO_TEST_CASE (test_create_destroy) +{ + file_handle_t *file_handle = NULL; + + file_handle = create_file_manager(); + BOOST_CHECK(file_handle != NULL); + BOOST_CHECK(is_valid(file_handle) == true); + + delete_file_manager(file_handle); +} + +BOOST_AUTO_TEST_CASE(test_open_close) +{ + int error = 0; + file_handle_t *file_handle = NULL; + + file_handle = create_file_manager(); + BOOST_CHECK(file_handle != NULL); + + error = open_file(file_handle, DATA_PATH_OUTPUT, "rb"); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(is_valid(file_handle) == true); + + error = close_file(file_handle); + BOOST_REQUIRE(error == 0); + + delete_file_manager(file_handle); +} + +struct Fixture{ + Fixture() { + error = 0; + file_handle = NULL; + + file_handle = create_file_manager(); + open_file(file_handle, NULL, "wt"); + } + ~Fixture() { + close_file(file_handle); + delete_file_manager(file_handle); + } + int error; + file_handle_t *file_handle; +}; + +BOOST_FIXTURE_TEST_CASE(test_temp_file, Fixture) +{ + char *filename; + + printf_file(file_handle, "%s", "This is a test."); + + error = get_filename(file_handle, &filename); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(is_valid(file_handle) == true); + + BOOST_CHECK(boost::filesystem::exists(filename) == true); + + free(filename); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/tools/.gitignore b/tools/.gitignore new file mode 100644 index 0000000..8b82c98 --- /dev/null +++ b/tools/.gitignore @@ -0,0 +1,27 @@ +# Python compiler files +*.py[cd] + +# Python distribution and packaging +build/ +dist/ +temp/ +*.cfg +*.egg-info/ +*.whl + +# SWIG generated files +epanet_output_wrap.c +epanet_output.py + +# C compiler +*.o +*.dll +*.exe + +# Eclipse project files and directories +.metadata/ +.settings/ +Release/ +.project +.cproject +.pydevproject diff --git a/tools/BuildAndTest.md b/tools/BuildAndTest.md new file mode 100644 index 0000000..a37121e --- /dev/null +++ b/tools/BuildAndTest.md @@ -0,0 +1,183 @@ +## Building OWA EPANET From Source on Windows +by Michael E. Tryby + +Created on: March 13, 2018 + + +### Introduction + +Building OWA's fork of EPANET from source is a basic skill that all developers +interested in contributing to the project should know how to perform. This +document describes the build process step-by-step. You will learn 1) how to +configure your machine to build the project locally; 2) how to obtain the +project files using git; 3) how to use cmake to generate build files and build +the project; and 4) how to use ctest and nrtest to perform unit and regression +testing on the build artifacts produced. Be advised, you will need local admin +privileges on your machine to follow this tutorial. Let’s begin! + +### Dependencies + +Before the project can be built the required tools must be installed. The OWA +EPANET project adheres to a platform compiler policy - for each platform there +is a designated compiler. The platform compiler for Windows is Visual +Studio cl, for Linux gcc, and for Mac OS clang. These instructions describe how +to build EPANET on Windows. CMake is a cross platform build, testing, and packaging +tool that is used to automate the EPANET build workflow. Boost is a free portable +peer-reviewed C++ library. Unit tests are linked with Boost unit test libraries. +Lastly, git is a free and open source distributed version control system. Git must +be installed to obtain the project source code from the OWA EPANET repository +found on GitHub. + +### Summary of Build Dependencies + - Platform Compiler + - Windows: Visual Studio 10.0 32-bit cl (version 16.00.40219.01 for 80x86) + - CMake (version 3.0.0 or greater) + - Boost Libraries (version 1.58 or greater) + - git (version 2.6.0 or greater) + +### Build Procedure +1. Install Dependencies + * A. Install Visual Studio 2010 Express and SP1 + Our current benchmark platform and compiler is Windows 32-bit Visual Studio 10 + 2010. Older versions of Visual Studio are available for download here: + + https://www.visualstudio.com/vs/older-downloads/ + + A service pack for Visual Studio 10 2010 is available here: + + https://www.microsoft.com/en-us/download/details.aspx?id=34677 + + * B. Install Boost + Boost binaries for Windows offer a convenient installation solution. Be sure to + select for download the boost installer exe that corresponds to the version of Visual Studio you have installed. + + https://sourceforge.net/projects/boost/files/boost-binaries/1.58.0/ + + Although newer version of Boost are available, a link to Boost 1.58 is provided. This is the library version that the unit tests have been written against. Older versions of Boost may not work. The default install location for the Boost + Libraries is C:\local\boost_1_58_0 + + * C. Install Chocolatey, CMake, and git + Chocolatey is a Windows package manager that makes installing some of these + dependencies a little easier. When working with Chocolatey it is useful to have + local admin privileges. Chocolatey is available here: + + https://chocolatey.org/install + + Once Chocolately is installed, from a command prompt running with admin privileges + issue the following commands + ``` + \>choco install -y cmake --installargs 'ADD_CMAKE_TO_PATH=User' + \>choco install -y git --installargs /GitOnlyOnPath + \>refreshenv + ``` + + * D. Common Problems + Using chocolatey requires a command prompt with admin privileges. + Check to make sure installed applications are on the command path. + Make note of the Boost Library install location. + + +2. Build The Project + As administrator open a Visual Studio 2010 Command Prompt. Change directories to + the location where you wish to build the EPANET project. Now we will issue a series + of commands to create a parent directory for the project root and clone the project + from OWA's GitHub repository. + + * A. Clone the EPANET Repository + ``` + \>mkdir OWA + \>cd OWA + \>git clone --branch=dev https://github.com/OpenWaterAnalytics/EPANET.git + \>cd EPANET + ``` + The present working directory is now the project root EPANET. The directory contains + the same files that are visibly present in the GitHub Repo by browsing to the URL + https://github.com/OpenWaterAnalytics/EPANET/tree/dev. + + Now we will create a build products directory and generate the platform build + file using cmake. + + * B. Generate the build files + ``` + \>mkdir buildprod + \>cd buildprod + \>set BOOST_ROOT=C:\local\boost_1_58_0 + \>cmake -G "Visual Studio 10 2010" -DBOOST_ROOT="%BOOST_ROOT%" -DBoost_USE_STATIC_LIBS="ON" .. + ``` + + Now that the dependencies have been installed and the build system has been + generated, building EPANET is a simple CMake command. + + * C. Build EPANET + \>cmake --build . --config Debug + + * D. Common Problems + CMake may not be able to find the project CMakeLists.txt file or the Boost + library install location. + + +3. Testing + Unit Testing uses Boost Unit Test library and CMake ctest as the test runner. + Cmake has been configured to register tests with ctest as part of the build process. + + * A. Unit Testing + ``` + \>cd tests + \>ctest -C Debug + ``` + The unit tests run quietly. Ctest redirects stdout to a log file which can be + found in the "tests\Testing\Temporary" folder. This is useful when a test fails. + + Regression testing is somewhat more complicated because it relies on Python + to execute EPANET for each test and compare the binary files and report files. + To run regression tests first python and any required packages must be installed. + If Python is already installed on your local machine the installation of + miniconda can be skipped. + + * B. Installing Regression Testing Dependencies + ``` + cd ..\.. + \>choco install -y miniconda --installargs '/AddToPath=1' + \>choco install -y curl + \>choco install -y 7zip + \>refreshenv + \>pip install -r tools/requirements-appveyor.txt + ``` + + With Python and the necessary dependencies installed, regression testing can be run + using the before-test and run-nrtest helper scripts found in the tools folder. The script + before-test stages the test and benchmark files for nrtest. The script run-nrtest calls + nrtest execute and nrtest compare to perform the regression test. + + To run the executable under test, nrtest needs the absolute path to it and a + unique identifier for it such as the version number. The project cmake build places build + artifacts in the buildprod\bin\ folder. On Windows the build configuration "Debug" or + "Release" must also be indicated. On Windows it is also necessary to specify the path to + the Python Scripts folder so the nrtest execute and compare commands can be found. You + need to substitute bracketed fields below like "" with the values for + your setup. + + * C. Regression Testing + ``` + \>tools\before-test.cmd + \>tools\run-nrtest.cmd + ``` + + * D. Common Problems + The batch file before-test.cmd needs to run with admin privileges. The nrtest script complains when it can't find manifest files. + +That concludes this tutorial on building OWA EPANET from source on Windows. +You have learned how to configure your machine satisfying project dependencies +and how to acquire, build, and test EPANET on your local machine. To be sure, +there is a lot more to learn, but this is a good start! Learn more about project +build and testing dependencies by following the links provided below. + +### Further Reading + * Visual Studio - https://msdn.microsoft.com/en-us/library/dd831853(v=vs.100).aspx + * CMake - https://cmake.org/documentation/ + * Boost - http://www.boost.org/doc/ + * git - https://git-scm.com/doc + * Miniconda - https://conda.io/docs/user-guide/index.html + * curl - https://curl.haxx.se/ + * 7zip - https://www.7-zip.org/ + * nrtest - https://nrtest.readthedocs.io/en/latest/ diff --git a/tools/app-config.sh b/tools/app-config.sh new file mode 100755 index 0000000..3883ddf --- /dev/null +++ b/tools/app-config.sh @@ -0,0 +1,46 @@ +#! /bin/bash + +# +# app-config.sh - Generates nrtest app configuration file for test executable +# +# Date Created: 3/19/2018 +# +# Author: Michael E. Tryby +# US EPA - ORD/NRMRL +# +# Arguments: +# 1 - absolute path to test executable +# +# NOT IMPLEMENTED YET +# 2 - test executable version number +# 3 - build description +# + +unameOut="$(uname -s)" +case "${unameOut}" in + Linux*) ;& + Darwin*) abs_build_path=$1 + test_cmd="runepanet" + ;; + + MINGW*) ;& + MSYS*) # Remove leading '/c' from file path for nrtest + abs_build_path="$( echo "$1" | sed -e 's#/c##' )" + test_cmd="runepanet.exe" + ;; + + *) # Machine unknown +esac + +version="" +build_description="" + +cat< nul +7z x benchmark.zip -obenchmark\ > nul +7z e benchmark.zip -o. manifest.json -r > nul + + +:: set up symlink for tests directory +mklink /D .\tests .\epanet-example-networks-%LATEST_TAG:~1%\epanet-tests > nul + + +:: generate json configuration file for software under test +mkdir apps +%SCRIPT_HOME%\gen-config.cmd %SUT_PATH% %PLATFORM% %SUT_BUILD_ID% %SUT_VERSION% > apps\epanet-%SUT_BUILD_ID%.json diff --git a/tools/before-test.sh b/tools/before-test.sh new file mode 100755 index 0000000..16917ac --- /dev/null +++ b/tools/before-test.sh @@ -0,0 +1,103 @@ +#! /bin/bash + +# +# before-test.sh - Prepares Travis CI worker to run epanet regression tests +# +# Date Created: 04/04/2018 +# +# Author: Michael E. Tryby +# US EPA - ORD/NRMRL +# +# Arguments: +# 1 - (platform) +# 2 - (build id for reference) +# 3 - (build id for software under test) +# 4 - (version id for software under test) +# 5 - (relative path regression test file staging location) +# +# Note: +# Tests and benchmark files are stored in the epanet-example-networks repo. +# This script retreives them using a stable URL associated with a release on +# GitHub and stages the files for nrtest to run. The script assumes that +# before-test.sh and gen-config.sh are located together in the same folder. + + +if [ -z "$1" ]; then + unset PLATFORM; +else + PLATFORM=$1; +fi + +if [ -z "$2" ]; then + echo "ERROR: REF_BUILD_ID must be defined"; exit 1; +else + REF_BUILD_ID=$2; +fi + +if [ -z "$3" ]; then + SUT_BUILD_ID="local"; +else + SUT_BUILD_ID=$3; +fi + +if [ -z "$4" ]; then + SUT_VERSION="unknown"; +else + SUT_VERSION=$4; fi + +if [ -z "$5" ]; then + TEST_HOME="nrtestsuite"; +else + TEST_HOME=$5; fi + + +echo INFO: Staging files for regression testing + + +SCRIPT_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +BUILD_HOME="$(dirname "$SCRIPT_HOME")" + + +SUT_PATH=(`find "$BUILD_HOME" -name "bin" -type d`) + +# TODO: determine platform + +# hack to determine latest tag from GitHub +LATEST_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/releases/latest" +LATEST_TAG="$(curl -sI "${LATEST_URL}" | grep -Po 'tag\/\K(v\S+)')" + +TEST_URL="https://codeload.github.com/OpenWaterAnalytics/epanet-example-networks/tar.gz/${LATEST_TAG}" +BENCH_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/releases/download/${LATEST_TAG}/benchmark-${PLATFORM}-${REF_BUILD_ID}.tar.gz" + + +# create a clean directory for staging regression tests +# create a clean directory for staging regression tests +if [ -d "${TEST_HOME}" ]; then + rm -rf "${TEST_HOME}" +fi +mkdir "${TEST_HOME}" +cd "${TEST_HOME}" || exit 1 + + +# retrieve epanet-examples for regression testing +if ! curl -fsSL -o examples.tar.gz "${TEST_URL}"; then + echo "ERROR: curl - ${TEST_URL}" & exit 2 +fi + +# retrieve epanet benchmark results +if ! curl -fsSL -o benchmark.tar.gz "${BENCH_URL}"; then + echo "ERROR: curl - ${BENCH_URL}" & exit 3 +fi + +# extract tests, benchmarks, and manifest +tar xzf examples.tar.gz +ln -s "epanet-example-networks-${LATEST_TAG:1}/epanet-tests" tests + +mkdir benchmark +tar xzf benchmark.tar.gz -C benchmark +tar xzf benchmark.tar.gz --wildcards --no-anchored --strip-components=1 '*/manifest.json' -C . + + +# generate json configuration file for software under test +mkdir apps +${SCRIPT_HOME}/gen-config.sh ${SUT_PATH} ${PLATFORM} ${SUT_BUILD_ID} ${SUT_VERSION} > apps/epanet-${SUT_BUILD_ID}.json diff --git a/tools/gen-config.cmd b/tools/gen-config.cmd new file mode 100644 index 0000000..760ac60 --- /dev/null +++ b/tools/gen-config.cmd @@ -0,0 +1,41 @@ +:: +:: gen-config.cmd - Generated nrtest app configuration file for test executable +:: +:: Date Created: 1/8/2018 +:: +:: Author: Michael E. Tryby +:: US EPA - ORD/NRMRL +:: +:: Arguments: +:: 1 - absolute path to test executable (valid path seperator for nrtest is "/") +:: 2 - (platform) +:: 3 - (build identifier for SUT) +:: 4 - (commit hash string) + +@echo off +setlocal + +:: swmm target created by the cmake build script +set TEST_CMD=runepanet.exe + +:: remove quotes from path and convert backward to forward slash +set ABS_BUILD_PATH=%~1 +set ABS_BUILD_PATH=%ABS_BUILD_PATH:\=/% + +IF [%2]==[] ( set "PLATFORM=unknown" +) ELSE ( set "PLATFORM=%~2" ) + +IF [%3]==[] ( set "BUILD_ID=unknown" +) ELSE ( set "BUILD_ID=%~3" ) + +IF [%4]==[] ( set "VERSION=unknown" +) ELSE ( set "VERSION=%~4" ) + + +echo { +echo "name" : "epanet", +echo "version" : "%VERSION%", +echo "description" : "%PLATFORM% %BUILD_ID%", +echo "setup_script" : "", +echo "exe" : "%ABS_BUILD_PATH%/%TEST_CMD%" +echo } diff --git a/tools/gen-config.sh b/tools/gen-config.sh new file mode 100755 index 0000000..cb9620c --- /dev/null +++ b/tools/gen-config.sh @@ -0,0 +1,42 @@ +#! /bin/bash + +# +# gen-config.sh - Generates nrtest app configuration file for test executable +# +# Date Created: 10/16/2017 +# +# Author: Michael E. Tryby +# US EPA - ORD/NRMRL +# +# Arguments: +# 1 - absolute path to test executable +# 2 - platform +# 3 - SUT build id +# 4 - SUT version id +# + +unameOut="$(uname -s)" +case "${unameOut}" in + Linux*) ;& + Darwin*) abs_build_path=$1 + test_cmd="runepanet" + ;; + + MINGW*) ;& + MSYS*) # Remove leading '/c' from file path for nrtest + abs_build_path="$( echo "$1" | sed -e 's#/c##' )" + test_cmd="runepanet.exe" + ;; + + *) # Machine unknown +esac + +cat< 0: + print('%d differences found\n' % notclose) + isclose = False + + return isclose + + + +from nrtest.testsuite import TestSuite +from nrtest.compare import compare_testsuite, validate_testsuite + +def nrtest_compare(path_test, path_ref, (comp_args)): + + ts_new = TestSuite.read_benchmark(path_test) + ts_old = TestSuite.read_benchmark(path_ref) + + if not validate_testsuite(ts_new) or not validate_testsuite(ts_old): + exit(1) + + try: +# logging.info('Found %i tests' % len(ts_new.tests)) + compatible = compare_testsuite(ts_new, ts_old, comp_args[0], comp_args[1]) + except KeyboardInterrupt: +# logging.warning('Process interrupted by user') + compatible = False +# else: +# logging.info('Finished') + + # Non-zero exit code indicates failure + exit(not compatible) + +def nrtest_execute(app_path, test_path, output_path): + import logging + import glob + from os import listdir + from os.path import exists, isfile, isdir, join + from nrtest.execute import execute_testsuite, validate_testsuite + +# for path in test_path + [app_path]: +# if not exists(path): +# logging.error('Could not find path: "%s"' % path) + + test_dirs = glob.glob(test_path) + test_files = [p for p in test_path if isfile(p)] + test_files += [p for d in test_dirs for p in glob.glob(d + '*.json')] +# if p.endswith('.json')] + + test_files = list(set(test_files)) # remove duplicates + + ts = TestSuite.read_config(app_path, test_files, output_path) + + if not validate_testsuite(ts): + exit(1) + + try: + logging.info('Found %i tests' % len(test_files)) + success = execute_testsuite(ts) + ts.write_manifest() + except KeyboardInterrupt: + logging.warning('Process interrupted by user') + success = False + else: + logging.info('Finished') + + # Non-zero exit code indicates failure + exit(not success) + + +import report_diff as rd + +if __name__ == "__main__": +# app_path = "apps\\swmm-5.1.11.json" +# test_path = "tests\\examples\\example1.json" +# output_path = "benchmarks\\test\\" +# nrtest_execute(app_path, test_path, output_path) + +# test_path = "C:\\Users\\mtryby\\Workspace\\GitRepo\\Local\\epanet-testsuite\\benchmarks\\v2011a" +# ref_path = "C:\\Users\\mtryby\\Workspace\\GitRepo\\Local\\epanet-testsuite\\benchmarks\\v2012" +# print(nrtest_compare(test_path, ref_path, (0.001, 0.0))) + + benchmark_path = "C:\\Users\\mtryby\\Workspace\\GitRepo\\michaeltryby\\epanet-lr\\nrtestsuite\\benchmarks\\" + path_test = benchmark_path + "epanet-220dev\\example2\\example2.out" + path_ref = benchmark_path + "epanet-2012\\example2\\example2.out" + + #result_compare(path_test, path_ref, (0.001, 0.0)) + rd.report_diff(path_test, path_ref, 2) + \ No newline at end of file diff --git a/tools/nrtest-epanet/nrtest_epanet/__init__.py b/tools/nrtest-epanet/nrtest_epanet/__init__.py new file mode 100644 index 0000000..22d6fe6 --- /dev/null +++ b/tools/nrtest-epanet/nrtest_epanet/__init__.py @@ -0,0 +1,166 @@ +# -*- coding: utf-8 -*- + +# +# __init__.py - nrtest_epanet module +# +# Author: Michael E. Tryby +# US EPA - ORD/NRMRL +# + +''' +Numerical regression testing (nrtest) plugin for comparing EPANET binary results +files and EPANET text based report files. +''' + +# system imports +import itertools as it + +# third party imports +import header_detail_footer as hdf +import numpy as np + +# project import +import nrtest_epanet.output_reader as ordr + + +__author__ = "Michael Tryby" +__copyright__ = "None" +__credits__ = "Colleen Barr, Maurizio Cingi, Mark Gray, David Hall, Bryant McDonnell" +__license__ = "CC0 1.0 Universal" + +__version__ = "0.5.0" +__date__ = "September 6, 2017" + +__maintainer__ = "Michael Tryby" +__email__ = "tryby.michael@epa.gov" +__status = "Development" + + +def epanet_allclose_compare(path_test, path_ref, rtol, atol): + ''' + Compares results in two EPANET binary files using the comparison criteria + described in the numpy assert_allclose documentation. + + (test_value - ref_value) <= atol + rtol * abs(ref_value) + + Returns true if all of the results in the two binary files meet the + comparison criteria; otherwise, an AssertionError is thrown. + + Numpy allclose is quite expensive to evaluate. Test and reference results + are checked to see if they are equal before being compared using the + allclose criteria. This reduces comparison times significantly. + + Arguments: + path_test - path to result file being tested + path_ref - path to reference result file + rtol - relative tolerance + atol - absolute tolerance + + Returns: + True + + Raises: + ValueError() + AssertionError() + ... + ''' + for (test, ref) in it.izip(ordr.output_generator(path_test), + ordr.output_generator(path_ref)): + + if len(test[0]) != len(ref[0]): + raise ValueError('Inconsistent lengths') + + # Skip over arrays that are equal + if np.array_equal(test[0], ref[0]): + continue + else: + np.testing.assert_allclose(test[0], ref[0], rtol, atol) + + return True + + +def epanet_mincdd_compare(path_test, path_ref, rtol, atol): + ''' + Compares the results of two EPANET binary files using a correct decimal + digits (cdd) comparison criteria: + + min cdd(test, ref) >= atol + + Returns true if min cdd in the file is greater than or equal to atol, + otherwise an AssertionError is thrown. + + Arguments: + path_test - path to result file being testedgit + path_ref - path to reference result file + rtol - ignored + atol - minimum allowable cdd value (i.e. 3) + + Returns: + True + + Raises: + ValueError() + AssertionError() + ''' + min_cdd = 100.0 + + for (test, ref) in it.izip(ordr.output_generator(path_test), + ordr.output_generator(path_ref)): + + if len(test[0]) != len(ref[0]): + raise ValueError('Inconsistent lengths') + + # Skip over arrays that are equal + if np.array_equal(test[0], ref[0]): + continue + else: + diff = np.fabs(np.subtract(test[0], ref[0])) + idx = np.unravel_index(np.argmax(diff), diff.shape) + + if diff[idx] != 0.0: + tmp = - np.log10(diff[idx]) + + if tmp < min_cdd: + min_cdd = tmp; + + if np.floor(min_cdd) >= atol: + return True + else: + raise AssertionError('min_cdd=%d less than atol=%g' % (min_cdd, atol)) + + +def epanet_report_compare(path_test, path_ref, rtol, atol): + ''' + Compares results in two report files ignoring contents of header and footer. + + Note: Header is 11 lines with report summary turned off. This test will fail + if the report summary is turned on because a time stamp is being written + immediately after it. + + Arguments: + path_test - path to result file being tested + path_ref - path to reference result file + rtol - ignored + atol - ignored + + Returns: + True or False + + Raises: + HeaderError() + FooterError() + RunTimeError() + ... + ''' + HEADER = 10 + FOOTER = 2 + + with open(path_test ,'r') as ftest, open(path_ref, 'r') as fref: + + for (test_line, ref_line) in it.izip(hdf.parse(ftest, HEADER, FOOTER)[1], + hdf.parse(fref, HEADER, FOOTER)[1]): + + if test_line != ref_line: + return False + + return True diff --git a/tools/nrtest-epanet/nrtest_epanet/output_reader.py b/tools/nrtest-epanet/nrtest_epanet/output_reader.py new file mode 100644 index 0000000..6877d91 --- /dev/null +++ b/tools/nrtest-epanet/nrtest_epanet/output_reader.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- + +# +# output_reader.py +# +# Date Created: Aug 31, 2016 +# +# Author: Michael E. Tryby +# US EPA - ORD/NRMRL +# +''' +The module output_reader provides the class used to implement the output +generator. +''' + +# project import +import epanet_output as oapi + + +def output_generator(path_ref): + ''' + The output_generator is designed to iterate over an EPANET binary file and + yield element attributes. It is useful for comparing contents of binary + files for numerical regression testing. + + The generator yields a Python tuple containing an array of element + attributes and a tuple containing the element type, period, and attribute. + + Arguments: + path_ref - path to result file + + Raises: + Exception() + ... + ''' + with OutputReader(path_ref) as br: + + for period_index in range(0, br.report_periods()): + for element_type in oapi.ElementType: + for attribute in br.elementAttributes[element_type]: + + yield (br.element_attribute(element_type, period_index, attribute), + (element_type, period_index, attribute)) + + +class OutputReader(): + ''' + Provides a minimal API used to implement output_generator. + ''' + def __init__(self, filename): + self.filepath = filename + self.handle = None + self.elementAttributes = {oapi.ElementType.NODE: oapi.NodeAttribute, + oapi.ElementType.LINK: oapi.LinkAttribute} + + self.getElementAttribute = {oapi.ElementType.NODE: oapi.enr_get_node_attribute, + oapi.ElementType.LINK: oapi.enr_get_link_attribute} + + def __enter__(self): + self.handle = oapi.enr_init() + oapi.enr_open(self.handle, self.filepath.encode()) + return self + + def __exit__(self, type, value, traceback): + self.handle = oapi.enr_close() + + def report_periods(self): + return oapi.enr_get_times(self.handle, oapi.Time.NUM_PERIODS) + + def element_attribute(self, element_type, time_index, attribute): + return self.getElementAttribute[element_type](self.handle, time_index, attribute) diff --git a/tools/nrtest-epanet/report_diff.py b/tools/nrtest-epanet/report_diff.py new file mode 100644 index 0000000..b82d746 --- /dev/null +++ b/tools/nrtest-epanet/report_diff.py @@ -0,0 +1,102 @@ +# -*- coding: utf-8 -*- + +# +# report_diff.py +# +# Date Created: July 11, 2018 +# +# Author: Michael E. Tryby +# US EPA - ORD/NRMRL +# + +# system imports +import itertools as it + +# third party imports +import numpy as np + +# project imports +import nrtest_epanet.output_reader as ordr + + +def _binary_diff(path_test, path_ref, min_cdd): + for (test, ref) in it.izip(ordr.output_generator(path_test), + ordr.output_generator(path_ref)): + + if len(test[0]) != len(ref[0]): + raise ValueError('Inconsistent lengths') + + # Skip over arrays that are equal + if np.array_equal(test[0], ref[0]): + continue + else: + lre = _log_relative_error(test[0], ref[0]) + idx = np.unravel_index(np.argmin(lre), lre.shape) + + if lre[idx] < min_cdd: + _print_diff(idx, lre, test, ref) + + return + + +def _log_relative_error(q, c): + ''' + Computes log relative error, a measure of numerical accuracy. + + Single precision machine epsilon is between 2^-24 and 2^-23. + + Reference: + McCullough, B. D. "Assessing the Reliability of Statistical Software: Part I." + The American Statistician, vol. 52, no. 4, 1998, pp. 358-366. + ''' + diff = np.subtract(q, c) + tmp_c = np.copy(c) + + # If ref value is small compute absolute error + tmp_c[np.fabs(tmp_c) < 1.0e-6] = 1.0 + re = np.fabs(diff)/np.fabs(tmp_c) + + # If re is tiny set lre to number of digits + re[re < 1.0e-7] = 1.0e-7 + # If re is very large set lre to zero + re[re > 2.0] = 1.0 + + lre = np.negative(np.log10(re)) + + # If lre is negative set to zero + lre[lre < 1.0] = 0.0 + + return lre + + +def _print_diff(idx, lre, test, ref): + + idx_val = (idx[0], ref[1]) + test_val = (test[0][idx[0]]) + ref_val = (ref[0][idx[0]]) + diff_val = (test_val - ref_val) + lre_val = (lre[idx[0]]) + + print("Idx: %s\nSut: %e Ref: %e Diff: %e LRE: %.2f\n" + % (idx_val, test_val, ref_val, diff_val, lre_val)) + + +def report(args): + _binary_diff(args.test, args.ref, args.mincdd) + + +if __name__ == '__main__': + from argparse import ArgumentParser + + parser = ArgumentParser(description='EPANET benchmark difference reporting') + parser.set_defaults(func=report) + parser.add_argument('-t', '--test', default=None, + help='Path to test benchmark') + parser.add_argument('-r', '--ref', default=None, + help='Path to reference benchmark') + parser.add_argument('-mc', '--mincdd', type=int, default=3, + help='Minimum correct decimal digits') + + args = parser.parse_args() + args.func(args) + \ No newline at end of file diff --git a/tools/nrtest-epanet/setup.py b/tools/nrtest-epanet/setup.py new file mode 100644 index 0000000..4c7dfd7 --- /dev/null +++ b/tools/nrtest-epanet/setup.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +# +# setup.py +# +# Created on Aug 30, 2016 +# Author: Michael E. Tryby +# US EPA - ORD/NRMRL +# +''' Setup up script for nrtest_epanet package. ''' + +try: + from setuptools import setup +except ImportError: + from distutils.core import setup + +entry_points = { + 'nrtest.compare': [ + 'epanet allclose = nrtest_epanet:epanet_allclose_compare', + 'epanet mincdd = nrtest_epanet:epanet_mincdd_compare', + 'epanet report = nrtest_epanet:epanet_report_compare', + # Add entry point for new comparison functions here + ] +} + +setup( + name='nrtest-epanet', + version='0.5.0', + description="EPANET extension for nrtest", + + author="Michael E. Tryby", + author_email='tryby.michael@epa.gov', + url='https://github.com/USEPA', + + packages=['nrtest_epanet',], + entry_points=entry_points, + + install_requires=[ + 'header_detail_footer>=2.3', + 'nrtest>=0.2.0', + 'numpy>=1.7.0', + 'epanet_output' + ], + keywords='nrtest_epanet' +) diff --git a/tools/outputapi/ENBinaryOutDiff.py b/tools/outputapi/ENBinaryOutDiff.py deleted file mode 100644 index 9754a2a..0000000 --- a/tools/outputapi/ENBinaryOutDiff.py +++ /dev/null @@ -1 +0,0 @@ -''' Compares Two EPANET binary output files. Author: Bryant E. McDonnell Date: 12/16/2015 Compares the absolute value of two values against a given threshold value. ******************* Command Line Arguments: python <*.out 1> <*.out 2> Returns True / False (Pass / Fail, respectively) ******************* ''' import sys import os from math import log from ENOutputWrapper import * def BinCompare(args): # Some Error Checking for Command Line Arguments.... if len(args) < 3: raise Exception("Not Enough Input Arguments: python <*.out 1> <*.out 2>") # if not args[1].endswith('.out') or not args[2].endswith('.out'): # raise Exception("Wrong file extension: python <*.out 1> <*.out 2>") print(sys.argv[1],sys.argv[2]) dllLoc = '' if (sys.platform == 'linux2' or sys.platform == 'darwin'): dllLoc = os.getcwd() + '/libENBinaryOut.so' else: raise Exception("only implemented on mac/linux") BinFile1 = OutputObject(dllLoc) BinFile1.OpenOutputFile(args[1]) BinFile1.get_NetSize() BinFile1.get_Times() BinFile2 = OutputObject(dllLoc) BinFile2.OpenOutputFile(args[2]) ####ENR_NodeAttribute; ##ENR_demand = 0 ##ENR_head = 1 ##ENR_pressure = 2 ##ENR_quality = 3 NumberOfNodeAttr = 4 ####ENR_LinkAttribute; ##ENR_flow = 0 ##ENR_velocity = 1 ##ENR_headloss = 2 ##ENR_avgQuality = 3 ##ENR_status = 4 ##ENR_setting = 5 ##ENR_rxRate = 6 ##ENT_frctnFctr = 7 NumberOfLinkAttr = 8 NumberOfPeriods = BinFile1.numPeriods # Set Tolerances for each attribute # demand, head, pressure, quality NodeAttributeTolerances = [1e-6, 1e-6, 1e-6, 1e-6] # flow, velocity, headloss, avgQuality, status, setting, rxRate, frctnFctr LinkAttributeTolerances = [1e-6, 1e-6, 1e-6, 1e-6, 1e-6, 1e-6, 1e-6, 1e-6] #Compare Node Attributes for nodeAttrInd in range(NumberOfNodeAttr): for TSind in range(NumberOfPeriods): #Get 1 attribute for all nodes at time t NodeAttributeOut1 = BinFile1.get_NodeAttribute(nodeAttrInd, TSind) #Get 1 attribute for all nodes at time t NodeAttributeOut2 = BinFile2.get_NodeAttribute(nodeAttrInd, TSind) for Nodeind, NodeAttrVal in enumerate(NodeAttributeOut1): if abs(NodeAttrVal - NodeAttributeOut2[Nodeind]) > 0: diff = abs(NodeAttrVal - NodeAttributeOut2[Nodeind] ) if diff > NodeAttributeTolerances[nodeAttrInd]: print("Node {0} attribute {1} exceeded tolerance. value 1 = {2} :: value 2 = {3} :: delta = {4}".format(Nodeind, nodeAttrInd, NodeAttrVal, NodeAttributeOut2[Nodeind], diff) ) return False #Compare Link Attributes for linkAttrInd in range(NumberOfLinkAttr): for TSind in range(NumberOfPeriods): #Get 1 attribute for all links at time t LinkAttributeOut1 = BinFile1.get_LinkAttribute(linkAttrInd, TSind) #Get 1 attribute for all links at time t LinkAttributeOut2 = BinFile2.get_LinkAttribute(linkAttrInd, TSind) for linkind, LinkAttrVal in enumerate(LinkAttributeOut1): if abs(LinkAttrVal - LinkAttributeOut2[linkind]) > 0: diff = abs(LinkAttrVal - LinkAttributeOut2[linkind] ) if diff > LinkAttributeTolerances[linkAttrInd]: print("Link {0} attribute {1} exceeded tolerance. value 1 = {2} :: value 2 = {3} :: delta = {4}".format(linkind, linkAttrInd, LinkAttrVal, LinkAttributeOut2[linkind], diff) ) return False return True if __name__ == '__main__': if(BinCompare(sys.argv)): sys.exit(0) else: sys.exit(1) \ No newline at end of file diff --git a/tools/outputapi/ENOutputWrapper.py b/tools/outputapi/ENOutputWrapper.py deleted file mode 100644 index 8f934d4..0000000 --- a/tools/outputapi/ENOutputWrapper.py +++ /dev/null @@ -1 +0,0 @@ -''' Wrapper for EPANET Output API. Author: Bryant E. McDonnell Date: 12/7/2015 Language: Anglais ''' from ctypes import * ##ENR_ElementType; ENR_node = 1 ENR_link = 2 ##ENR_ApiFunction; ENR_getSeries = 1 ENR_getAttribute = 2 ENR_getResult = 3 ##ENR_ElementCount; ENR_nodeCount = 1 ENR_tankCount = 2 ENR_linkCount = 3 ENR_pumpCount = 4 ENR_valveCount = 5 ##ENR_Unit; ENR_flowUnits = 1 ENR_pressUnits = 2 ##ENR_Time; ENR_reportStart = 1 ENR_reportStep = 2 ENR_simDuration = 3 ENR_numPeriods = 4 ##ENR_NodeAttribute; ENR_demand = 0 ENR_head = 1 ENR_pressure = 2 ENR_quality = 3 ##ENR_LinkAttribute; ENR_flow = 0 ENR_velocity = 1 ENR_headloss = 2 ENR_avgQuality = 3 ENR_status = 4 ENR_setting = 5 ENR_rxRate = 6 ENT_frctnFctr = 7 #Used just to pull the Pointer of the ENResultsAPI struct class _Opaque(Structure): ''' Used soley for passing the pointer to the enrapi struct to API ''' pass class OutputObject: def __init__(self, dllLoc): ''' Instantiate python Wrapper Object and build Wrapper functions. ''' try: self.DLL = CDLL(dllLoc) except: raise Exception('Failed to Open Linked Library') ###ENResultsAPI* DLLEXPORT ENR_alloc(void); self._enrapiFunc = self.DLL.ENR_alloc self._enrapiFunc.restype = POINTER(_Opaque) ###int DLLEXPORT ENR_open(ENResultsAPI* enrapi, const char* path); self._OpenFunc = self.DLL.ENR_open ###int DLLEXPORT ENR_getNetSize(ENResultsAPI* enrapi, ENR_ElementCount code, int* count); self._GetNetSize = self.DLL.ENR_getNetSize ###int DLLEXPORT ENR_getUnits(ENResultsAPI* enrapi, ENR_Unit code, int* unitFlag); self._GetUnits = self.DLL.ENR_getUnits self._GetUnits.argtypes = [POINTER(_Opaque), c_int, POINTER(c_int)] self._GetUnits.restype = c_int ###int DLLEXPORT ENR_getTimes(ENResultsAPI* enrapi, ENR_Time code, int* time) self._getTimes = self.DLL.ENR_getTimes ###float* ENR_newOutValueSeries(ENResultsAPI* enrapi, int seriesStart, ### int seriesLength, int* length, int* errcode); self._newOutValueSeries = self.DLL.ENR_newOutValueSeries self._newOutValueSeries.argtypes = [POINTER(_Opaque), c_int, c_int, POINTER(c_int), POINTER(c_int)] self._newOutValueSeries.restype = POINTER(c_float) ###float* ENR_newOutValueArray(ENResultsAPI* enrapi, ENR_ApiFunction func, ### ENR_ElementType type, int* length, int* errcode); self._newOutValueArray = self.DLL.ENR_newOutValueArray self._newOutValueArray.argtypes = [POINTER(_Opaque), c_int, c_int, POINTER(c_int), POINTER(c_int)] self._newOutValueArray.restype = POINTER(c_float) ###int DLLEXPORT ENR_getNodeSeries(ENResultsAPI* enrapi, int nodeIndex, ENR_NodeAttribute attr, ### int timeIndex, int length, float* outValueSeries, int* len); self._getNodeSeries = self.DLL.ENR_getNodeSeries ###int DLLEXPORT ENR_getLinkSeries(ENResultsAPI* enrapi, int linkIndex, ENR_LinkAttribute attr, ### int timeIndex, int length, float* outValueSeries); self._getLinkSeries = self.DLL.ENR_getLinkSeries ###int DLLEXPORT ENR_getNodeAttribute(ENResultsAPI* enrapi, int timeIndex, ### ENR_NodeAttribute attr, float* outValueArray); self._getNodeAttribute = self.DLL.ENR_getNodeAttribute ###int DLLEXPORT ENT_getLinkAttribute(ENResultsAPI* enrapi, int timeIndex, ### ENR_LinkAttribute attr, float* outValueArray); self._getLinkAttribute = self.DLL.ENR_getLinkAttribute ###int DLLEXPORT ENR_getNodeResult(ENResultsAPI* enrapi, int timeIndex, int nodeIndex, ### float* outValueArray); self._getNodeResult = self.DLL.ENR_getNodeResult ###int DLLEXPORT ENR_getLinkResult(ENResultsAPI* enrapi, int timeIndex, int linkIndex, ### float* outValueArray); self._getLinkResult = self.DLL.ENR_getLinkResult ###int DLLEXPORT ENR_free(float *array); self._free = self.DLL.ENR_free ###int DLLEXPORT ENR_close(ENResultsAPI* enrapi); self._CloseOut = self.DLL.ENR_close ###int DLLEXPORT ENR_errMessage(int errcode, char* errmsg, int n); self._RetErrMessage = self.DLL.ENR_errMessage def OpenOutputFile(self, binfile): ''' 1) Initializes the opaque pointer to enrapi struct. 2) Opens the output file. ''' self.enrapi = self._enrapiFunc() ret = self._OpenFunc(self.enrapi, binfile) if ret != 0: self.CloseOutputFile() raise Exception('Failed to open OutputFile') ##Update Function at a later date ## def RaiseError(self, ErrNo): ## ErMsg = c_char_p(256) ## ## self._RetErrMessage(ErrNo , ErMsg, 256) ## ## print ErMsg def get_Units(self): ''' Purpose: Returns pressure and flow units ''' unit = c_int() self._GetUnits(self.enrapi, ENR_flowUnits, unit) self.flowUnits = unit.value unit = c_int() self._GetUnits(self.enrapi, ENR_pressUnits, unit) self.pressUnits = unit.value def get_NetSize(self): ''' Populates object attributes with the water object counts ''' count = c_int() self._GetNetSize(self.enrapi, ENR_nodeCount, byref(count)) self.nodeCount = count.value count = c_int() self._GetNetSize(self.enrapi, ENR_tankCount, byref(count)) self.tankCount = count.value count = c_int() self._GetNetSize(self.enrapi, ENR_linkCount, byref(count)) self.linkCount = count.value count = c_int() self._GetNetSize(self.enrapi, ENR_pumpCount, byref(count)) self.pumpCount = count.value count = c_int() self._GetNetSize(self.enrapi, ENR_valveCount, byref(count)) self.valveCount = count.value def get_Times(self): ''' Purpose: Returns report and simulation time related parameters. ''' temp = c_int() self._getTimes(self.enrapi, ENR_reportStart, byref(temp)) self.reportStart = temp.value temp = c_int() self._getTimes(self.enrapi, ENR_reportStep, byref(temp)) self.reportStep = temp.value temp = c_int() self._getTimes(self.enrapi, ENR_simDuration, byref(temp)) self.simDuration = temp.value temp = c_int() self._getTimes(self.enrapi, ENR_numPeriods, byref(temp)) self.numPeriods = temp.value def get_NodeSeries(self, NodeInd, NodeAttr, SeriesStartInd = 0, SeriesLen = -1): ''' Purpose: Get time series results for particular attribute. Specify series start and length using seriesStart and seriesLength respectively. SeriesLen = -1 Default input: Gets data from Series Start Ind to end ''' if not hasattr(self, 'numPeriods'): self.get_Times() if SeriesLen > self.numPeriods : raise Exception("Outside Number of TimeSteps") elif SeriesLen == -1: SeriesLen = self.numPeriods sLength = c_int() ErrNo1 = c_int() SeriesPtr = self._newOutValueSeries(self.enrapi, SeriesStartInd,\ SeriesLen, byref(sLength), byref(ErrNo1)) ErrNo2 = self._getNodeSeries(self.enrapi, NodeInd, NodeAttr, \ SeriesStartInd, sLength.value, SeriesPtr) BldArray = [SeriesPtr[i] for i in range(sLength.value)] self._free(SeriesPtr) return BldArray def get_LinkSeries(self, LinkInd, LinkAttr, SeriesStartInd = 0, SeriesLen = -1): ''' Purpose: Get time series results for particular attribute. Specify series start and length using seriesStart and seriesLength respectively. SeriesLen = -1 Default input: Gets data from Series Start Ind to end ''' if not hasattr(self, 'numPeriods'): self.get_Times() if SeriesLen > self.numPeriods : raise Exception("Outside Number of TimeSteps") elif SeriesLen == -1: SeriesLen = self.numPeriods sLength = c_int() ErrNo1 = c_int() SeriesPtr = self._newOutValueSeries(self.enrapi, SeriesStartInd,\ SeriesLen, byref(sLength), byref(ErrNo1)) ErrNo2 = self._getLinkSeries(self.enrapi, LinkInd, LinkAttr, \ SeriesStartInd, sLength.value, SeriesPtr) BldArray = [SeriesPtr[i] for i in range(sLength.value)] ret = self._free(SeriesPtr) return BldArray def get_NodeAttribute(self, NodeAttr, TimeInd): ''' Purpose: For all nodes at given time, get a particular attribute ''' if not hasattr(self, 'nodeCount'): self.get_NetSize() alength = c_int() ErrNo1 = c_int() ValArrayPtr = self._newOutValueArray(self.enrapi, ENR_getAttribute,\ ENR_node, byref(alength), byref(ErrNo1)) ErrNo2 = self._getNodeAttribute(self.enrapi, TimeInd, NodeAttr, ValArrayPtr) BldArray = [ValArrayPtr[i] for i in range(alength.value)] self._free(ValArrayPtr) return BldArray def get_LinkAttribute(self, LinkAttr, TimeInd): ''' Purpose: For all links at given time, get a particular attribute ''' if not hasattr(self, 'linkCount'): self.get_NetSize() alength = c_int() ErrNo1 = c_int() ValArrayPtr = self._newOutValueArray(self.enrapi, ENR_getAttribute,\ ENR_link, byref(alength), byref(ErrNo1)) ErrNo2 = self._getLinkAttribute(self.enrapi, TimeInd, LinkAttr, ValArrayPtr) BldArray = [ValArrayPtr[i] for i in range(alength.value)] self._free(ValArrayPtr) return BldArray def get_NodeResult(self, NodeInd, TimeInd): ''' Purpose: For a node at given time, get all attributes ''' alength = c_int() ErrNo1 = c_int() ValArrayPtr = self._newOutValueArray(self.enrapi, ENR_getResult,\ ENR_node, byref(alength), byref(ErrNo1)) ErrNo2 = self._getNodeResult(self.enrapi, TimeInd, NodeInd, ValArrayPtr) BldArray = [ValArrayPtr[i] for i in range(alength.value)] self._free(ValArrayPtr) return BldArray def get_LinkResult(self, LinkInd, TimeInd): ''' Purpose: For a link at given time, get all attributes ''' alength = c_int() ErrNo1 = c_int() ValArrayPtr = self._newOutValueArray(self.enrapi, ENR_getResult,\ ENR_link, byref(alength), byref(ErrNo1)) ErrNo2 = self._getLinkResult(self.enrapi, TimeInd, LinkInd, ValArrayPtr) BldArray = [ValArrayPtr[i] for i in range(alength.value)] self._free(ValArrayPtr) return BldArray def CloseOutputFile(self): ''' Call to close binary file. ''' ret = self._CloseOut(self.enrapi) if ret != 0: raise Exception('Failed to Close *.out file') if __name__ in "__main__": dllLoc = 'outputAPI.dll' binfile = 'C:\\PROJECTCODE\\EPANEToutputAPI\\Net3.out' print("Testing Wrapper...") print("Test Network 3...") print("-->Instantiating DLL Object / Opening DLL") self = OutputObject(dllLoc) print("...Opened DLL") print("\n-->Reading Binary File") self.OpenOutputFile(binfile) print("...Opened Bin File") print("\n-->get_NodeSeries") LENTest = -1 demands = self.get_NodeSeries(0,ENR_demand, 0, LENTest) head = self.get_NodeSeries(0,ENR_head, 0, LENTest) pressure = self.get_NodeSeries(0,ENR_pressure, 0, LENTest) quality = self.get_NodeSeries(0,ENR_quality, 0, LENTest) print('\t'.join(["ind","demand","head","pressure","quality"])) for ind, val in enumerate(demands): print ind, val, head[ind], pressure[ind], quality[ind] print("\n-->get_LinkSeries") flow = self.get_LinkSeries(0,ENR_flow) velocity =self.get_LinkSeries(0,ENR_velocity) headloss =self.get_LinkSeries(0,ENR_headloss) avgQuality=self.get_LinkSeries(0,ENR_avgQuality) status=self.get_LinkSeries(0,ENR_status) setting=self.get_LinkSeries(0,ENR_setting) rxRate=self.get_LinkSeries(0,ENR_rxRate) frctnFctr =self.get_LinkSeries(0,ENT_frctnFctr) print('\t'.join(["ind","flow","velocity","headloss","avgQuality",\ "status","setting","rxRate","frctnFctr"])) for ind, val in enumerate(flow): print ind, val, velocity[ind],headloss[ind],avgQuality[ind],status[ind],setting[ind],rxRate[ind],frctnFctr[ind] print("\n-->get_NodeAttribute") demand_1 = self.get_NodeAttribute(ENR_demand,0) head_1 = self.get_NodeAttribute(ENR_head,0) pressure_1 = self.get_NodeAttribute(ENR_pressure,0) quality_1 = self.get_NodeAttribute(ENR_quality,0) print('\t'.join(["ind","demand","head","pressure","quality"])) for ind, val in enumerate(demand_1): print ind, val, head_1[ind], pressure_1[ind], quality_1[ind] print("\n-->get_LinkAttribute") flow1 = self.get_LinkAttribute(ENR_flow,0) velocity1 =self.get_LinkAttribute(ENR_velocity,0) headloss1 =self.get_LinkAttribute(ENR_headloss,0) avgQuality1=self.get_LinkAttribute(ENR_avgQuality,0) status1=self.get_LinkAttribute(ENR_status,0) setting1=self.get_LinkAttribute(ENR_setting,0) rxRate1=self.get_LinkAttribute(ENR_rxRate,0) frctnFctr1 =self.get_LinkAttribute(ENT_frctnFctr,0) print('\t'.join(["ind","flow","velocity","headloss","avgQuality",\ "status","setting","rxRate","frctnFctr"])) for ind, val in enumerate(flow1): print ind, val, velocity1[ind],headloss1[ind],avgQuality1[ind],status1[ind],setting1[ind],rxRate1[ind],frctnFctr1[ind] print("\n-->Object Counts") print("Nodes") print(self.nodeCount) print("Nodes") print(self.nodeCount) print("Tanks") print(self.tankCount) print("Links") print(self.linkCount) print("Pumps") print(self.pumpCount) print("Values") print(self.valveCount) print("\n-->get_NodeResult") print(self.get_NodeResult(96,24)) print("\n-->get_LinkResult") print(self.get_LinkResult(0,0)) print("\n-->get_Units") self.get_Units() print("...flow unit code") print(self.flowUnits) print("...pressure unit code") print(self.pressUnits) print("\n-->Closing Binary File") self.CloseOutputFile() print("...Closed Binary File") \ No newline at end of file diff --git a/tools/outputapi/outputapi.c b/tools/outputapi/outputapi.c deleted file mode 100644 index 3c99440..0000000 --- a/tools/outputapi/outputapi.c +++ /dev/null @@ -1,502 +0,0 @@ -//----------------------------------------------------------------------------- -// -// outputapi.c -- API for reading results from EPANet binary output file -// -// Version: 0.10 -// Date: 08/05/14 -// Date: 05/21/14 -// -// Author: Michael E. Tryby -// US EPA - NRMRL -// -// Purpose: Output API provides an interface for retrieving results from -// an EPANet binary output file. -// -//----------------------------------------------------------------------------- - -#include -#include -#include -#include -#include "outputapi.h" - -#define INT4 int -#define REAL4 float -#define RECORDSIZE 4 // number of bytes per file record - -#define MEMCHECK(x) (((x) == NULL) ? 411 : 0 ) - -#define MINNREC 14 // minimum allowable number of records -#define NNODERESULTS 4 // number of result fields for nodes -#define NLINKRESULTS 8 // number of result fields for links - - -struct ENResultsAPI { - char name[MAXFNAME + 1]; // file path/name - bool isOpened; // current state (CLOSED = 0, OPEN = 1) - FILE *file; // FILE structure pointer - - INT4 nodeCount, tankCount, linkCount, pumpCount, valveCount; - INT4 reportStart, reportStep, simDuration, nPeriods; - - INT4 flowFlag, pressFlag; - - INT4 outputStartPos; // starting file position of output data - INT4 bytesPerPeriod; // bytes saved per simulation time period -}; - -//----------------------------------------------------------------------------- -// Local functions -//----------------------------------------------------------------------------- -float getNodeValue(ENResultsAPI*, int, int, ENR_NodeAttribute); -float getLinkValue(ENResultsAPI*, int, int, ENR_LinkAttribute); - - -ENResultsAPI* DLLEXPORT ENR_alloc(void) -{ - return malloc(sizeof(struct ENResultsAPI)); -} - -int DLLEXPORT ENR_open(ENResultsAPI* enrapi, const char* path) -// -// Purpose: Open the output binary file and read epilogue -// -{ - int magic1, magic2, errCode, version; - - strncpy(enrapi->name, path, MAXFNAME); - enrapi->isOpened = false; - - // Attempt to open binary output file for reading only - if ((enrapi->file = fopen(path, "rb")) == NULL) - return 434; - else - enrapi->isOpened = true; - - // Fast forward to end and check for minimum number of records - fseek(enrapi->file, 0L, SEEK_END); - if (ftell(enrapi->file) < MINNREC*RECORDSIZE) { - fclose(enrapi->file); - // Error run terminated no results in binary file - return 435; - } - - // Fast forward to end and read file epilogue - fseek(enrapi->file, -3*RECORDSIZE, SEEK_END); - fread(&(enrapi->nPeriods), RECORDSIZE, 1, enrapi->file); - fread(&errCode, RECORDSIZE, 1, enrapi->file); - fread(&magic2, RECORDSIZE, 1, enrapi->file); - - // Rewind and read magic number from beginning of file - fseek(enrapi->file, 0L, SEEK_SET); - fread(&magic1, RECORDSIZE, 1, enrapi->file); - - // Perform error checks - if (magic1 != magic2 || errCode != 0 || enrapi->nPeriods == 0) { - fclose(enrapi->file); - // Error run terminated no results in binary file - return 435; - } - - // Otherwise read network size - fread(&version, RECORDSIZE, 1, enrapi->file); - fread(&(enrapi->nodeCount), RECORDSIZE, 1, enrapi->file); - fread(&(enrapi->tankCount), RECORDSIZE, 1, enrapi->file); - fread(&(enrapi->linkCount), RECORDSIZE, 1, enrapi->file); - fread(&(enrapi->pumpCount), RECORDSIZE, 1, enrapi->file); - - // Jump ahead and read flow and pressure units - fseek(enrapi->file, 3*RECORDSIZE, SEEK_CUR); - fread(&(enrapi->flowFlag), RECORDSIZE, 1, enrapi->file); - fread(&(enrapi->pressFlag), RECORDSIZE, 1, enrapi->file); - - // Jump ahead and read time information - fseek(enrapi->file, RECORDSIZE, SEEK_CUR); - fread(&(enrapi->reportStart), RECORDSIZE, 1, enrapi->file); - fread(&(enrapi->reportStep), RECORDSIZE, 1, enrapi->file); - fread(&(enrapi->simDuration), RECORDSIZE, 1, enrapi->file); - - // Compute positions and offsets for retrieving data - enrapi->outputStartPos = 884; - enrapi->outputStartPos += 32*enrapi->nodeCount + 32*enrapi->linkCount; - enrapi->outputStartPos += 12*enrapi->linkCount+ 8*enrapi->tankCount - + 4*enrapi->nodeCount + 8*enrapi->linkCount; - enrapi->outputStartPos += 28*enrapi->pumpCount + 4; - - enrapi->bytesPerPeriod = 16*enrapi->nodeCount + 32*enrapi->linkCount; - - return 0; -} - -int DLLEXPORT ENR_getNetSize(ENResultsAPI* enrapi, ENR_ElementCount code, int* count) -// -// Purpose: Returns network size -// -{ - *count = -1; - if (enrapi->isOpened) { - switch (code) - { - case ENR_nodeCount: *count = enrapi->nodeCount; break; - case ENR_tankCount: *count = enrapi->tankCount; break; - case ENR_linkCount: *count = enrapi->linkCount; break; - case ENR_pumpCount: *count = enrapi->pumpCount; break; - case ENR_valveCount: *count = enrapi->valveCount; break; - default: return 421; - } - return 0; - } - return 412; -} - -int DLLEXPORT ENR_getUnits(ENResultsAPI* enrapi, ENR_Unit code, int* unitFlag) -// -// Purpose: Returns pressure and flow units -// -{ - *unitFlag = -1; - if (enrapi->isOpened) { - switch (code) - { - case ENR_flowUnits: *unitFlag = enrapi->flowFlag; break; - case ENR_pressUnits: *unitFlag = enrapi->pressFlag; break; - default: return 421; - } - return 0; - } - return 412; -} - -int DLLEXPORT ENR_getTimes(ENResultsAPI* enrapi, ENR_Time code, int* time) -// -// Purpose: Returns report and simulation time related parameters. -// -{ - *time = -1; - if (enrapi->isOpened) { - switch (code) - { - case ENR_reportStart: *time = enrapi->reportStart; break; - case ENR_reportStep: *time = enrapi->reportStep; break; - case ENR_simDuration: *time = enrapi->simDuration; break; - case ENR_numPeriods: *time = enrapi->nPeriods; break; - default: return 421; - } - return 0; - } - return 412; -} - - -float* ENR_newOutValueSeries(ENResultsAPI* enrapi, int seriesStart, - int seriesLength, int* length, int* errcode) -// -// Purpose: Allocates memory for outValue Series. -// -// Warning: Caller must free memory allocated by this function using ENR_free(). -// -{ - int size; - float* array; - - if (enrapi->isOpened) { - - size = seriesLength - seriesStart; - if (size > enrapi->nPeriods) - size = enrapi->nPeriods; - - // Allocate memory for outValues - array = (float*) calloc(size + 1, sizeof(float)); - *errcode = (MEMCHECK(array)); - - *length = size; - return array; - } - *errcode = 412; - return NULL; -} - -float* ENR_newOutValueArray(ENResultsAPI* enrapi, ENR_ApiFunction func, - ENR_ElementType type, int* length, int* errcode) -// -// Purpose: Allocates memory for outValue Array. -// -// Warning: Caller must free memory allocated by this function using ENR_free(). -// -{ - int size; - float* array; - - if (enrapi->isOpened) { - switch (func) - { - case ENR_getAttribute: - if (type == ENR_node) - size = enrapi->nodeCount; - else - size = enrapi->linkCount; - break; - case ENR_getResult: - if (type == ENR_node) - size = NNODERESULTS; - else - size = NLINKRESULTS; - break; - default: *errcode = 421; - return NULL; - } - - // Allocate memory for outValues - array = (float*) calloc(size, sizeof(float)); - *errcode = (MEMCHECK(array)); - - *length = size; - return array; - } - *errcode = 412; - return NULL; -} - - -int DLLEXPORT ENR_getNodeSeries(ENResultsAPI* enrapi, int nodeIndex, ENR_NodeAttribute attr, - int seriesStart, int seriesLength, float* outValueSeries, int* length) -// -// What if timeIndex 0? length 0? -// -// Purpose: Get time series results for particular attribute. Specify series -// start and length using seriesStart and seriesLength respectively. -// -{ - int k; - - if (enrapi->isOpened) { - - // Check memory for outValues - if (outValueSeries == NULL) return 411; - - // loop over and build time series - for (k = 0; k <= seriesLength; k++) - outValueSeries[k] = getNodeValue(enrapi, seriesStart + 1 + k, - nodeIndex, attr); - - return 0; - } - // Error no results to report on binary file not opened - return 412; -} - -int DLLEXPORT ENR_getLinkSeries(ENResultsAPI* enrapi, int linkIndex, ENR_LinkAttribute attr, - int seriesStart, int seriesLength, float* outValueSeries) -// -// What if timeIndex 0? length 0? -// -// Purpose: Get time series results for particular attribute. Specify series -// start and length using seriesStart and seriesLength respectively. -// -{ - int k; - - if (enrapi->isOpened) { - // Check memory for outValues - if (outValueSeries == NULL) return 411; - - // loop over and build time series - for (k = 0; k <= seriesLength; k++) - outValueSeries[k] = getLinkValue(enrapi, seriesStart +1 + k, - linkIndex, attr); - - return 0; - } - // Error no results to report on binary file not opened - return 412; -} - - -int DLLEXPORT ENR_getNodeAttribute(ENResultsAPI* enrapi, int timeIndex, - ENR_NodeAttribute attr, float* outValueArray) -// -// Purpose: For all nodes at given time, get a particular attribute -// -{ - INT4 offset; - - if (enrapi->isOpened) { - // Check memory for outValues - if (outValueArray == NULL) return 411; - - // calculate byte offset to start time for series - offset = enrapi->outputStartPos + (timeIndex)*enrapi->bytesPerPeriod; - // add offset for node and attribute - offset += (attr*enrapi->nodeCount)*RECORDSIZE; - - fseek(enrapi->file, offset, SEEK_SET); - fread(outValueArray, RECORDSIZE, enrapi->nodeCount, enrapi->file); - - return 0; - } - // Error no results to report on binary file not opened - return 412; -} - -int DLLEXPORT ENR_getLinkAttribute(ENResultsAPI* enrapi, int timeIndex, - ENR_LinkAttribute attr, float* outValueArray) -// -// Purpose: For all links at given time, get a particular attribute -// -{ - INT4 offset; - - if (enrapi->isOpened) { - // Check memory for outValues - if (outValueArray == NULL) return 411; - - // calculate byte offset to start time for series - offset = enrapi->outputStartPos + (timeIndex)*enrapi->bytesPerPeriod - + (NNODERESULTS*enrapi->nodeCount)*RECORDSIZE; - // add offset for link and attribute - offset += (attr*enrapi->linkCount)*RECORDSIZE; - - fseek(enrapi->file, offset, SEEK_SET); - fread(outValueArray, RECORDSIZE, enrapi->linkCount, enrapi->file); - - return 0; - } - // Error no results to report on binary file not opened - return 412; -} - -int DLLEXPORT ENR_getNodeResult(ENResultsAPI* enrapi, int timeIndex, int nodeIndex, - float* outValueArray) -// -// Purpose: For a node at given time, get all attributes -// -{ - int j; - - if (enrapi->isOpened) { - // Check memory for outValues - if (outValueArray == NULL) return 411; - - for (j = 0; j < NNODERESULTS; j++) - outValueArray[j] = getNodeValue(enrapi, timeIndex + 1, nodeIndex, j); - - return 0; - } - // Error no results to report on binary file not opened - return 412; -} - -int DLLEXPORT ENR_getLinkResult(ENResultsAPI* enrapi, int timeIndex, int linkIndex, - float* outValueArray) -// -// Purpose: For a link at given time, get all attributes -// -{ - int j; - - if (enrapi->isOpened) { - // Check memory for outValues - if (outValueArray == NULL) return 411; - - for (j = 0; j < NLINKRESULTS; j++) - outValueArray[j] = getLinkValue(enrapi, timeIndex + 1, linkIndex, j); - - return 0; - } - // Error no results to report on binary file not opened - return 412; -} - -int DLLEXPORT ENR_free(float* array) -// -// Purpose: frees memory allocated using ENR_newOutValueSeries() or -// ENR_newOutValueArray() -// -{ - if (array != NULL) - free(array); - - return 0; -} - - -int DLLEXPORT ENR_close(ENResultsAPI* enrapi) -// -// Purpose: Clean up after and close Output API -// -{ - if (enrapi->isOpened) { - fclose(enrapi->file); - free(enrapi); - } - // Error binary file not opened - else return 412; - - return 0; -} - - -int DLLEXPORT ENR_errMessage(int errcode, char* errmsg, int n) -// -// Purpose: takes error code returns error message -// -// Input Error 411: no memory allocated for results -// Input Error 412: no results binary file hasn't been opened -// Input Error 421: invalid parameter code -// File Error 434: unable to open binary output file -// File Error 435: run terminated no results in binary file -{ - switch (errcode) - { - case 411: strncpy(errmsg, ERR411, n); break; - case 412: strncpy(errmsg, ERR412, n); break; - case 421: strncpy(errmsg, ERR421, n); break; - case 434: strncpy(errmsg, ERR434, n); break; - case 435: strncpy(errmsg, ERR435, n); break; - default: return 421; - } - - return 0; -} - - -float getNodeValue(ENResultsAPI* enrapi, int timeIndex, int nodeIndex, - ENR_NodeAttribute attr) -// -// Purpose: Retrieves an attribute value at a specified node and time -// -{ - REAL4 y; - INT4 offset; - - // calculate byte offset to start time for series - offset = enrapi->outputStartPos + (timeIndex - 1)*enrapi->bytesPerPeriod; - // add bytepos for node and attribute - offset += (nodeIndex + attr*enrapi->nodeCount)*RECORDSIZE; - - fseek(enrapi->file, offset, SEEK_SET); - fread(&y, RECORDSIZE, 1, enrapi->file); - - return y; -} - -float getLinkValue(ENResultsAPI* enrapi, int timeIndex, int linkIndex, - ENR_LinkAttribute attr) -// -// Purpose: Retrieves an attribute value at a specified link and time -// -{ - REAL4 y; - INT4 offset; - - // Calculate byte offset to start time for series - offset = enrapi->outputStartPos + (timeIndex - 1)*enrapi->bytesPerPeriod - + (NNODERESULTS*enrapi->nodeCount)*RECORDSIZE; - // add bytepos for link and attribute - offset += (linkIndex + attr*enrapi->linkCount)*RECORDSIZE; - - fseek(enrapi->file, offset, SEEK_SET); - fread(&y, RECORDSIZE, 1, enrapi->file); - - return y; -} diff --git a/tools/outputapi/outputapi.h b/tools/outputapi/outputapi.h deleted file mode 100644 index 3494c07..0000000 --- a/tools/outputapi/outputapi.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * outputapi.h - * - * Created on: Jun 4, 2014 - * Author: mtryby - */ - -#ifndef OUTPUTAPI_H_ -#define OUTPUTAPI_H_ - -#define MAXFNAME 259 - -/*------------------- Error Messages --------------------*/ -#define ERR411 "Input Error 411: no memory allocated for results." -#define ERR412 "Input Error 412: no results; binary file hasn't been opened." -#define ERR421 "Input Error 421: invalid parameter code." -#define ERR434 "File Error 434: unable to open binary output file." -#define ERR435 "File Error 435: run terminated; no results in binary file." - - -/* Epanet Results binary file API */ -typedef struct ENResultsAPI ENResultsAPI; // opaque struct object - -typedef enum { - ENR_node = 1, - ENR_link = 2 -} ENR_ElementType; - -typedef enum { - ENR_getSeries = 1, - ENR_getAttribute = 2, - ENR_getResult = 3 -} ENR_ApiFunction; - -typedef enum { - ENR_nodeCount = 1, - ENR_tankCount = 2, - ENR_linkCount = 3, - ENR_pumpCount = 4, - ENR_valveCount = 5 -} ENR_ElementCount; - -typedef enum { - ENR_flowUnits = 1, - ENR_pressUnits = 2 -} ENR_Unit; - -typedef enum { - ENR_reportStart = 1, - ENR_reportStep = 2, - ENR_simDuration = 3, - ENR_numPeriods = 4 -}ENR_Time; - -typedef enum { - ENR_demand = 0, - ENR_head = 1, - ENR_pressure = 2, - ENR_quality = 3 -} ENR_NodeAttribute; - -typedef enum { - ENR_flow = 0, - ENR_velocity = 1, - ENR_headloss = 2, - ENR_avgQuality = 3, - ENR_status = 4, - ENR_setting = 5, - ENR_rxRate = 6, - ENT_frctnFctr = 7 -} ENR_LinkAttribute; - - -#ifdef WINDOWS - #ifdef __cplusplus - #define DLLEXPORT extern "C" __declspec(dllexport) __stdcall - #else - #define DLLEXPORT __declspec(dllexport) __stdcall - #endif -#else - #ifdef __cplusplus - #define DLLEXPORT extern "C" - #else - #define DLLEXPORT - #endif -#endif - - -ENResultsAPI* DLLEXPORT ENR_alloc(void); - -int DLLEXPORT ENR_open(ENResultsAPI* enrapi, const char* path); - -int DLLEXPORT ENR_getNetSize(ENResultsAPI* enrapi, ENR_ElementCount code, int* count); -int DLLEXPORT ENR_getUnits(ENResultsAPI* enrapi, ENR_Unit code, int* unitFlag); - -float* ENR_newOutValueSeries(ENResultsAPI* enrapi, int seriesStart, - int seriesLength, int* length, int* errcode); -float* ENR_newOutValueArray(ENResultsAPI* enrapi, ENR_ApiFunction func, - ENR_ElementType type, int* length, int* errcode); - -int DLLEXPORT ENR_getNodeSeries(ENResultsAPI* enrapi, int nodeIndex, ENR_NodeAttribute attr, - int timeIndex, int length, float* outValueSeries, int* len); -int DLLEXPORT ENR_getLinkSeries(ENResultsAPI* enrapi, int linkIndex, ENR_LinkAttribute attr, - int timeIndex, int length, float* outValueSeries); - -int DLLEXPORT ENR_getNodeAttribute(ENResultsAPI* enrapi, int timeIndex, - ENR_NodeAttribute attr, float* outValueArray); -int DLLEXPORT ENT_getLinkAttribute(ENResultsAPI* enrapi, int timeIndex, - ENR_LinkAttribute attr, float* outValueArray); - -int DLLEXPORT ENR_getNodeResult(ENResultsAPI* enrapi, int timeIndex, int nodeIndex, - float* outValueArray); -int DLLEXPORT ENR_getLinkResult(ENResultsAPI* enrapi, int timeIndex, int linkIndex, - float* outValueArray); - -int DLLEXPORT ENR_free(float *array); -int DLLEXPORT ENR_close(ENResultsAPI* enrapi); -int DLLEXPORT ENR_errMessage(int errcode, char* errmsg, int n); - - -#endif /* OUTPUTAPI_H_ */ - diff --git a/tools/requirements-appveyor.txt b/tools/requirements-appveyor.txt new file mode 100644 index 0000000..95ea643 --- /dev/null +++ b/tools/requirements-appveyor.txt @@ -0,0 +1,19 @@ +# +# requirements-appveyor.txt +# +# Date Created: 10/10/2017 +# Author: Michael E. Tryby +# US EPA ORD/NRMRL +# +# Useful for configuring a python environment to run epanet-nrtestsuite +# on AppVeyor CI. +# +# command: +# $ pip install --src build/packages -r tools/requirements-appveyor.txt +# + +nrtest>=0.2.3 + +-f https://github.com/OpenWaterAnalytics/epanet-python/releases/download/v0.1.0-alpha/epanet_output-0.1.0a0-cp27-cp27m-win32.whl + +-e ./tools/nrtest-epanet diff --git a/tools/requirements.txt b/tools/requirements.txt new file mode 100644 index 0000000..e7d302f --- /dev/null +++ b/tools/requirements.txt @@ -0,0 +1,16 @@ +# +# requirements.txt +# +# Date Created: 10/10/2017 +# Author: Michael E. Tryby +# US EPA ORD/NRMRL +# +# Useful for configuring a python environment to run epanet-nrtestsuite. +# +# command: +# $ pip install --src build/packages -r tools/requirements.txt +# + +nrtest>=0.2.3 +#-e ./tools/epanet-output +#-e ./tools/nrtest-epanet diff --git a/tools/run-nrtest.cmd b/tools/run-nrtest.cmd new file mode 100644 index 0000000..743d105 --- /dev/null +++ b/tools/run-nrtest.cmd @@ -0,0 +1,64 @@ +:: +:: run_nrtest.cmd - Runs numerical regression test +:: +:: Date Created: 1/8/2018 +:: +:: Author: Michael E. Tryby +:: US EPA - ORD/NRMRL +:: +:: Arguments: +:: 1 - (REF build identifier) +:: 2 - (SUT build identifier) +:: 3 - (test suite path) +:: + +@echo off +setlocal + + +:: Check existence and apply default arguments +IF [%1]==[] ( echo "ERROR: REF_BUILD_ID must be defined" & exit /B 1 +) ELSE ( set "REF_BUILD_ID=%~1" ) + +IF [%2]==[] ( set "SUT_BUILD_ID=local" +) ELSE ( set "SUT_BUILD_ID=%~2" ) + +IF [%3]==[] ( set "TEST_SUITE_PATH=nrtestsuite" +) ELSE ( set "TEST_SUITE_PATH=%~3" ) + + +:: determine location of python Scripts folder +FOR /F "tokens=*" %%G IN ('where python') DO ( + set PYTHON_DIR=%%~dpG +) +set "NRTEST_SCRIPT_PATH=%PYTHON_DIR%Scripts" + + +set NRTEST_EXECUTE_CMD=python %NRTEST_SCRIPT_PATH%\nrtest execute +set TEST_APP_PATH=apps\epanet-%SUT_BUILD_ID%.json +set TESTS=tests\examples tests\exeter tests\large tests\network_one tests\press_depend tests\small tests\tanks tests\valves +set TEST_OUTPUT_PATH=benchmark\epanet-%SUT_BUILD_ID% + +set NRTEST_COMPARE_CMD=python %NRTEST_SCRIPT_PATH%\nrtest compare +set REF_OUTPUT_PATH=benchmark\epanet-%REF_BUILD_ID% +set RTOL_VALUE=0.01 +set ATOL_VALUE=0.0 + +:: change current directory to test suite +cd %TEST_SUITE_PATH% + +:: if present clean test benchmark results +if exist %TEST_OUTPUT_PATH% ( + rmdir /s /q %TEST_OUTPUT_PATH% +) + +echo INFO: Creating SUT %SUT_BUILD_ID% artifacts +set NRTEST_COMMAND=%NRTEST_EXECUTE_CMD% %TEST_APP_PATH% %TESTS% -o %TEST_OUTPUT_PATH% +:: if there is an error exit the script with error value 1 +%NRTEST_COMMAND% || exit /B 1 + +echo. + +echo INFO: Comparing SUT artifacts to REF %REF_BUILD_ID% +set NRTEST_COMMAND=%NRTEST_COMPARE_CMD% %TEST_OUTPUT_PATH% %REF_OUTPUT_PATH% --rtol %RTOL_VALUE% --atol %ATOL_VALUE% -o benchmark\receipt.json +%NRTEST_COMMAND% diff --git a/tools/run-nrtest.sh b/tools/run-nrtest.sh new file mode 100755 index 0000000..cefeac6 --- /dev/null +++ b/tools/run-nrtest.sh @@ -0,0 +1,98 @@ +#! /bin/bash + +# +# run-nrtest.sh - Runs numerical regression test +# +# Date Created: 10/16/2017 +# +# Author: Michael E. Tryby +# US EPA - ORD/NRMRL +# +# Arguments: +# 1 - REF build identifier +# 2 - SUT build identifier +# 3 - relative path to location there test suite is staged +# + +run-nrtest() +{ + +return_value=0 + +test_suite_path=$4 + + +nrtest_execute_cmd="nrtest execute" +sut_app_path="apps/epanet-$3.json" +tests="tests/examples tests/exeter tests/large tests/network_one tests/small tests/tanks tests/valves" +sut_output_path="benchmark/epanet-$3" + +nrtest_compare_cmd="nrtest compare" +ref_output_path="benchmark/epanet-$2" +rtol_value=0.1 +atol_value=0.0 + + +# change current directory to test_suite +cd ${test_suite_path} + +# clean test benchmark results +rm -rf ${test_output_path} + +echo INFO: Creating test benchmark +nrtest_command="${nrtest_execute_cmd} ${sut_app_path} ${tests} -o ${sut_output_path}" +echo INFO: "$nrtest_command" +return_value=$( $nrtest_command ) + +if [ $1 = 'true' ]; then + echo + echo INFO: Comparing test and ref benchmarks + nrtest_command="${nrtest_compare_cmd} ${sut_output_path} ${ref_output_path} --rtol ${rtol_value} --atol ${atol_value} --output benchmark\receipt.json" + echo INFO: "$nrtest_command" + return_value=$( $nrtest_command ) +fi + +return $return_value +} + +print_usage() { + echo " " + echo "run-nrtest.sh - generates artifacts for SUT and performes benchmark comparison " + echo " " + echo "options:" + echo "-c don't compare SUT and REF artifacts" + echo "-r ref_build id REF build identifier" + echo "-s sut build id SUT build identifier" + echo "-t test_path relative path to location where test suite is staged" + echo " " +} + +# Default option values +compare='true' +ref_build_id='unknown' +sut_build_id='local' +test_path='nrtestsuite' + +while getopts "cr:s:t:" flag; do + case "${flag}" in + c ) compare='false' ;; + r ) ref_build_id=${OPTARG} ;; + s ) sut_build_id=${OPTARG} ;; + t ) test_path="${OPTARG}" ;; + \? ) print_usage + exit 1 ;; + esac +done +shift $(($OPTIND - 1)) + + +# determine ref_build_id from manifest file +if [[ $ref_build_id == 'unknown' ]] && [[ $compare == 'true' ]]; then + description=(`cat ${test_path}/manifest.json | jq '.Application.description | splits(" ")'`) + ref_build_id=${description[1]//\"/} +fi + +# Invoke command +run_command="run-nrtest ${compare} ${ref_build_id} ${sut_build_id} ${test_path}" +echo INFO: "$run_command" +$run_command diff --git a/tools/test-config.sh b/tools/test-config.sh new file mode 100644 index 0000000..8cbaef4 --- /dev/null +++ b/tools/test-config.sh @@ -0,0 +1,43 @@ +#! /bin/bash + +# +# test-config.sh - Generates nrtest test configuration file for test case. +# +# Date Created: 3/19/2018 +# +# Author: Michael E. Tryby +# US EPA - ORD/NRMRL +# +# Arguments: +# 1 - name +# 2 - version +# 3 - description +# +# Suggested Usage: +# $ for file in .//*; do ./test-config.sh $file 1.0 > "${file%.*}.json"; done +# + +filename="$1" +name="${filename%.*}" +version="$2" +description="$3" + +cat< ../AUTHORS \ No newline at end of file +' + +echo "\n\nSome commits are co-authored:\n" + +git log | grep Co-Author diff --git a/win_build/Makefile.bat b/win_build/Makefile.bat new file mode 100644 index 0000000..2364f69 --- /dev/null +++ b/win_build/Makefile.bat @@ -0,0 +1,56 @@ +rem : Compilation script for Microsoft SDK 7.1 + +rem : set path to Windows SDK +Set Reg.Key=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows +Set Reg.Val=CurrentInstallFolder +Set Build_PATH=%CD% + +rem : set path for source EPANET files +cd ..\..\include +Set H_PATH=%CD% +cd ..\src +Set SRC_PATH=%CD% + +rem : set Windows SDK Path from registry +For /F "Tokens=2*" %%A In ('Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| Find /I "%Reg.Val%"' ) Do Call Set SDK_PATH=%%B + + +rem : 64 bit +rem : check pc architecture +Set Reg.Qry=HKLM\Hardware\Description\System\CentralProcessor\0 +REG.exe Query %Reg.Qry% > checkOS.tmp +Find /i "x86" < checkOS.tmp > StringCheck.tmp +If %ERRORLEVEL% == 1 ( + CALL "%SDK_PATH%bin\"SetEnv.cmd /x64 /release + rem : create epanet2.dll + cl -o epanet2.dll epanet.c epanet2.c hash.c hydraul.c hydcoeffs.c hydstatus.c hydsolver.c inpfile.c input1.c input2.c input3.c mempool.c output.c project.c quality.c qualroute.c qualreact.c report.c rules.c smatrix.c genmmd.c /O2 /Depanet2_EXPORTS /I ..\include /I ..\run /link /DLL + rem : create runepanet.exe + cl -o runepanet.exe epanet.c epanet2.c ..\run\main.c hash.c hydraul.c hydcoeffs.c hydstatus.c hydsolver.c inpfile.c input1.c input2.c input3.c mempool.c output.c project.c quality.c qualroute.c qualreact.c report.c rules.c smatrix.c genmmd.c /O2 /Depanet2_EXPORTS /I ..\include /I ..\run /I ..\src /link + md "%Build_PATH%"\64bit + move /y "%SRC_PATH%"\*.dll "%Build_PATH%"\64bit + move /y "%SRC_PATH%"\*.exe "%Build_PATH%"\64bit + move /y "%SRC_PATH%"\epanet2.lib "%Build_PATH%"\64bit + rem copy "%H_PATH%"\*.h "%Build_PATH%"\64bit +) + +rem : 32 bit with DEF +CALL "%SDK_PATH%bin\"SetEnv.cmd /x86 /release +echo "32 bit with epanet2.def mapping" +rem : create epanet2.dll +cl -o epanet2.dll epanet.c epanet2.c hash.c hydraul.c hydcoeffs.c hydstatus.c hydsolver.c inpfile.c input1.c input2.c input3.c mempool.c output.c project.c quality.c qualroute.c qualreact.c report.c rules.c smatrix.c genmmd.c /O2 /Depanet2_EXPORTS /I ..\include /I ..\run /link /DLL /def:..\include\epanet2.def /MAP +rem : create runepanet.exe +cl -o runepanet.exe epanet.c epanet2.c ..\run\main.c hash.c hydraul.c hydcoeffs.c hydstatus.c hydsolver.c inpfile.c input1.c input2.c input3.c mempool.c output.c project.c quality.c qualroute.c qualreact.c report.c rules.c smatrix.c genmmd.c /O2 /Depanet2_EXPORTS /I ..\include /I ..\run /I ..\src /link +md "%Build_PATH%"\32bit +move /y "%SRC_PATH%"\*.dll "%Build_PATH%"\32bit +move /y "%SRC_PATH%"\*.exe "%Build_PATH%"\32bit +move /y "%SRC_PATH%"\epanet2.lib "%Build_PATH%"\32bit + + +rem : a bit of housekeeping and cleaning +del "%SRC_PATH%"\*.obj +del "%SRC_PATH%"\*.exp +del "%SRC_PATH%"\*.lib +del "%SRC_PATH%"\*.map +del "%SRC_PATH%"\*.tmp + +cd "%Build_PATH%" diff --git a/win_build/Makefile2.bat b/win_build/Makefile2.bat new file mode 100644 index 0000000..354186f --- /dev/null +++ b/win_build/Makefile2.bat @@ -0,0 +1,42 @@ +rem : rem : Compilation script (Visual Studio 2017/2019 with CMAKE) + +rem : set the path to CMAKE +SET CMAKE_PATH=cmake.exe + +SET Build_PATH=%CD% + +rem : the directory where the program will be compiled to +SET COMPILE_PATH_TMP=%Build_PATH%\tmp\ +SET COMPILE_PATH_WIN64=%Build_PATH%\64bit\ +SET COMPILE_PATH_WIN32=%Build_PATH%\32bit\ + +rem : CMAKE the root directory of the EPANET project +rem : 32 bit +MKDIR "%COMPILE_PATH_TMP%" +CD "%COMPILE_PATH_TMP%" +%CMAKE_PATH% ../../ -A Win32 +%CMAKE_PATH% --build . --config Release + +MKDIR "%COMPILE_PATH_WIN32%" +XCOPY "%COMPILE_PATH_TMP%bin\Release\epanet2.dll" "%COMPILE_PATH_WIN32%epanet2.dll*" /y +XCOPY "%COMPILE_PATH_TMP%bin\Release\runepanet.exe" "%COMPILE_PATH_WIN32%runepanet.exe*" /y +XCOPY "%COMPILE_PATH_TMP%lib\Release\epanet2.lib" "%COMPILE_PATH_WIN32%epanet2.lib*" /y + +CD "%Build_PATH%" +RMDIR /s /q "%COMPILE_PATH_TMP%" + +rem : CMAKE the root directory of the EPANET project +rem : 64 bit +MKDIR "%COMPILE_PATH_TMP%" +CD "%COMPILE_PATH_TMP%" +%CMAKE_PATH% ../../ -A x64 +%CMAKE_PATH% --build . --config Release + +MKDIR "%COMPILE_PATH_WIN64%" +XCOPY "%COMPILE_PATH_TMP%bin\Release\epanet2.dll" "%COMPILE_PATH_WIN64%epanet2.dll*" /y +XCOPY "%COMPILE_PATH_TMP%bin\Release\runepanet.exe" "%COMPILE_PATH_WIN64%runepanet.exe*" /y +XCOPY "%COMPILE_PATH_TMP%lib\Release\epanet2.lib" "%COMPILE_PATH_WIN64%epanet2.lib*" /y + +CD "%Build_PATH%" +RMDIR /s /q "%COMPILE_PATH_TMP%" +