diff -Nru calligra-2.9.7/3rdparty/kdchart/src/KDChartLayoutItems.cpp calligra-2.9.11/3rdparty/kdchart/src/KDChartLayoutItems.cpp --- calligra-2.9.7/3rdparty/kdchart/src/KDChartLayoutItems.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/3rdparty/kdchart/src/KDChartLayoutItems.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -673,7 +673,7 @@ Qt::Orientations KDChart::HorizontalLineLayoutItem::expandingDirections() const { - return Qt::Vertical|Qt::Horizontal; // Grow both vertically, and horizontally + return Qt::Horizontal; // Grow horizontally } QRect KDChart::HorizontalLineLayoutItem::geometry() const @@ -724,7 +724,7 @@ Qt::Orientations KDChart::VerticalLineLayoutItem::expandingDirections() const { - return Qt::Vertical|Qt::Vertical; // Grow both vertically, and horizontally + return Qt::Vertical; // Grow vertically } QRect KDChart::VerticalLineLayoutItem::geometry() const diff -Nru calligra-2.9.7/3rdparty/kdchart/src/KDChartStockDiagram_p.cpp calligra-2.9.11/3rdparty/kdchart/src/KDChartStockDiagram_p.cpp --- calligra-2.9.7/3rdparty/kdchart/src/KDChartStockDiagram_p.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/3rdparty/kdchart/src/KDChartStockDiagram_p.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -290,7 +290,7 @@ if ( ( angle >= 0 && angle < 90 ) || ( angle >= 180 && angle < 270 ) ) reversedOrder = true; // Z-order is from left to right - if ( ( angle >= 90 && angle < 180 ) || ( angle >= 270 && angle < 0 ) ) + if ( ( angle >= 90 && angle < 180 ) || ( angle >= 270 && angle <= 360 ) ) reversedOrder = false; } diff -Nru calligra-2.9.7/active/calligraactive.desktop calligra-2.9.11/active/calligraactive.desktop --- calligra-2.9.7/active/calligraactive.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/active/calligraactive.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -4,7 +4,6 @@ Name[bs]=Calligra aktivno Name[ca]=Calligra Active Name[ca@valencia]=Calligra Active -Name[cs]=Calligra Active Name[da]=Calligra Active Name[de]=Calligra Active Name[el]=Calligra Active @@ -13,7 +12,6 @@ Name[et]=Calligra Active Name[eu]=Calligra Active Name[fi]=Calligra Active -Name[fr]=Calligra Active Name[gl]=Calligra Active Name[hu]=Calligra Active Name[ia]=Calligra Active diff -Nru calligra-2.9.7/active/CMakeLists.txt calligra-2.9.11/active/CMakeLists.txt --- calligra-2.9.7/active/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/active/CMakeLists.txt 2016-02-02 19:53:13.000000000 +0000 @@ -69,4 +69,4 @@ install(TARGETS calligraactive RUNTIME DESTINATION bin) install(FILES calligraactive.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) -install(DIRECTORY qml DESTINATION share/calligraactive) +install(DIRECTORY qml DESTINATION ${SHARE_INSTALL_PREFIX}/calligraactive) diff -Nru calligra-2.9.7/braindump/data/braindump.appdata.xml calligra-2.9.11/braindump/data/braindump.appdata.xml --- calligra-2.9.7/braindump/data/braindump.appdata.xml 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/braindump/data/braindump.appdata.xml 2016-02-02 19:53:13.000000000 +0000 @@ -6,6 +6,7 @@ Braindump Braindump Braindump + Braindump Braindump Braindump Braindump @@ -33,6 +34,7 @@

Braindump je alat za slanje i organizaciju sadržaja vašeg mozga (ideja, crteža, slika, teksta...) na računar. Radi tako što vam dopušta da kreirate i uređujete table koja su beskonačna platna na koje možete dodati tekstove, slike, dijagrame, crteže itd.

El Braindump és una eina per a bolcar i organitzar el contingut del cervell (idees, dibuixos, imatges, texts…) a l'ordinador. Funciona permetent crear i editar pissarres, que tenen llenços infinits en els quals es pot afegir texts, imatges, diagrames, dibuixos, etc.

+

El Braindump és una eina per a bolcar i organitzar el contingut del cervell (idees, dibuixos, imatges, texts…) a l'ordinador. Funciona permetent crear i editar pissarres, que tenen llenços infinits en els quals es pot afegir texts, imatges, diagrames, dibuixos, etc.

Braindump is a tool to dump and organise the content of your brain (ideas, drawings, images, texts…) to your computer. It works by allowing to create and edit whiteboards, which are infinite canvas on which you can add texts, images, charts, drawings, etc.

Braindump es una herramienta para volcar y organizar el contenido de su cerebro (ideas, dibujos, imágenes, texto...) en su equipo. Permite crear y editar pizarras en blanco, es decir, lienzos infinitos en los que puede añadir textos, imágenes, diagramas, dibujos, etc.

Braindump on tööriist sinu ajus peituva sisu (mõtted, joonised, pildid, tekst jms) esitamiseks ja korraldamiseks arvutis. See võimaldab luua ja muuta nõndanimetatud valgetahvleid, mis kujutavad endast piiramata lõuendeid, kuhu lisada teksti, pilte, skeeme, diagramme, joonistusi ja kõike muud vajalikku.

diff -Nru calligra-2.9.7/braindump/data/braindump.desktop calligra-2.9.11/braindump/data/braindump.desktop --- calligra-2.9.7/braindump/data/braindump.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/braindump/data/braindump.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -42,7 +42,7 @@ Name=Braindump Name[bs]=Braindump Name[ca]=Braindump -Name[ca@valencia]=Memoràndum +Name[ca@valencia]=Braindump Name[cs]=Braindump Name[da]=Braindump Name[de]=Braindump diff -Nru calligra-2.9.7/braindump/data/braindump_extensions.desktop calligra-2.9.11/braindump/data/braindump_extensions.desktop --- calligra-2.9.7/braindump/data/braindump_extensions.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/braindump/data/braindump_extensions.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -4,7 +4,7 @@ Comment=Extensions for Braindump Comment[bs]=Ekstenzije za Braindump Comment[ca]=Extensions per al Braindump -Comment[ca@valencia]=Extensions per a Braindump +Comment[ca@valencia]=Extensions per al Braindump Comment[cs]=Rozšíření pro Braindump Comment[da]=Udvidelser til Braindump Comment[de]=Erweiterungen für Braindump diff -Nru calligra-2.9.7/cmake/modules/MacroCalligraAddBenchmark.cmake calligra-2.9.11/cmake/modules/MacroCalligraAddBenchmark.cmake --- calligra-2.9.7/cmake/modules/MacroCalligraAddBenchmark.cmake 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/cmake/modules/MacroCalligraAddBenchmark.cmake 2016-02-02 19:53:13.000000000 +0000 @@ -48,7 +48,7 @@ # .bat because of rpath handling set(_executable "${loc}.bat") else() - if (Q_WS_MAC AND NOT _nogui) + if (APPLE AND NOT _nogui) set(_executable ${EXECUTABLE_OUTPUT_PATH}/${_test_NAME}.app/Contents/MacOS/${_test_NAME}) else () # .shell because of rpath handling diff -Nru calligra-2.9.7/CMakeLists.txt calligra-2.9.11/CMakeLists.txt --- calligra-2.9.7/CMakeLists.txt 2015-08-29 14:41:46.000000000 +0000 +++ calligra-2.9.11/CMakeLists.txt 2016-02-02 19:53:13.000000000 +0000 @@ -27,14 +27,14 @@ # define common versions of Calligra applications, used to generate calligraversion.h # update these version for every release: -set(CALLIGRA_VERSION_STRING "2.9.7") +set(CALLIGRA_VERSION_STRING "2.9.11") set(CALLIGRA_VERSION_MAJOR 2) set(CALLIGRA_STABLE_VERSION_MINOR 9) -set(CALLIGRA_VERSION_RELEASE 7) # 89 for Alpha, increase for next test releases, set 0 for first Stable, etc. +set(CALLIGRA_VERSION_RELEASE 11) # 89 for Alpha, increase for next test releases, set 0 for first Stable, etc. #set(CALLIGRA_ALPHA 1) # uncomment only for Alpha #set(CALLIGRA_BETA 1) # uncomment only for Beta #set(CALLIGRA_RC 1) # uncomment only for RC -set(CALLIGRA_YEAR 2015) # update every year +set(CALLIGRA_YEAR 2016) # update every year if(NOT DEFINED CALLIGRA_ALPHA AND NOT DEFINED CALLIGRA_BETA AND NOT DEFINED CALLIGRA_RC) set(CALLIGRA_STABLE 1) # do not edit @@ -249,7 +249,7 @@ ## Test for sqlite ## set(SQLITE_MIN_VERSION 3.6.16) -set(SQLITE_RECOMMENDED_VERSION 3.8.7) +set(SQLITE_RECOMMENDED_VERSION 3.8.11) set(SQLITE_LOAD_EXTENSION_REQUIRED ON) macro_optional_find_package(CalligraSqlite ${SQLITE_MIN_VERSION}) macro_bool_to_01(SQLITE_FOUND HAVE_SQLITE) @@ -272,6 +272,7 @@ macro_optional_find_package(OpenEXR) macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR) +macro_log_feature(OPENEXR_FOUND "OpenEXR" "High dynamic-range (HDR) image file format" "http://www.openexr.com" FALSE "" "Required by the Krita OpenEXR filter") ## ## Look for OpenGL diff -Nru calligra-2.9.7/debian/calligraactive.install calligra-2.9.11/debian/calligraactive.install --- calligra-2.9.7/debian/calligraactive.install 2015-11-25 08:22:18.000000000 +0000 +++ calligra-2.9.11/debian/calligraactive.install 2016-10-12 20:17:50.000000000 +0000 @@ -1,64 +1 @@ -usr/share/calligraactive/qml/AboutCalligraActive.qml -usr/share/calligraactive/qml/AboutCalligraActive.qml -usr/share/calligraactive/qml/AboutCalligraActive.qml -usr/share/calligraactive/qml/Button.qml -usr/share/calligraactive/qml/Button.qml -usr/share/calligraactive/qml/Button.qml -usr/share/calligraactive/qml/Button.qml -usr/share/calligraactive/qml/CanvasContainer.qml -usr/share/calligraactive/qml/CanvasContainer.qml -usr/share/calligraactive/qml/CanvasContainer.qml -usr/share/calligraactive/qml/Doc.qml -usr/share/calligraactive/qml/Doc.qml -usr/share/calligraactive/qml/Doc.qml -usr/share/calligraactive/qml/DocumentTypeSelector.qml -usr/share/calligraactive/qml/DocumentTypeSelector.qml -usr/share/calligraactive/qml/DocumentTypeSelector.qml -usr/share/calligraactive/qml/FindToolbar.qml -usr/share/calligraactive/qml/FindToolbar.qml -usr/share/calligraactive/qml/FindToolbar.qml -usr/share/calligraactive/qml/FindToolbar.qml -usr/share/calligraactive/qml/HomeScreen.qml -usr/share/calligraactive/qml/HomeScreen.qml -usr/share/calligraactive/qml/HomeScreen.qml -usr/share/calligraactive/qml/HomeScreen.qml -usr/share/calligraactive/qml/PresentationCenterOverlay.qml -usr/share/calligraactive/qml/PresentationCenterOverlay.qml -usr/share/calligraactive/qml/PresentationCenterOverlay.qml -usr/share/calligraactive/qml/PresentationCenterOverlay.qml -usr/share/calligraactive/qml/PresentationLeftToolbar.qml -usr/share/calligraactive/qml/PresentationLeftToolbar.qml -usr/share/calligraactive/qml/PresentationLeftToolbar.qml -usr/share/calligraactive/qml/PresentationRightToolbar.qml -usr/share/calligraactive/qml/PresentationRightToolbar.qml -usr/share/calligraactive/qml/PresentationRightToolbar.qml -usr/share/calligraactive/qml/PresentationTopToolbar.qml -usr/share/calligraactive/qml/PresentationTopToolbar.qml -usr/share/calligraactive/qml/PresentationTopToolbar.qml -usr/share/calligraactive/qml/RecentFiles.qml -usr/share/calligraactive/qml/RecentFiles.qml -usr/share/calligraactive/qml/RecentFiles.qml -usr/share/calligraactive/qml/SlideSelector.qml -usr/share/calligraactive/qml/SlideSelector.qml -usr/share/calligraactive/qml/SlideSelector.qml -usr/share/calligraactive/qml/SlideSelector.qml -usr/share/calligraactive/qml/SpreadsheetLeftToolbar.qml -usr/share/calligraactive/qml/SpreadsheetLeftToolbar.qml -usr/share/calligraactive/qml/SpreadsheetLeftToolbar.qml -usr/share/calligraactive/qml/SpreadsheetRightToolbar.qml -usr/share/calligraactive/qml/SpreadsheetRightToolbar.qml -usr/share/calligraactive/qml/SpreadsheetRightToolbar.qml -usr/share/calligraactive/qml/Test.qml -usr/share/calligraactive/qml/Test.qml -usr/share/calligraactive/qml/Test.qml -usr/share/calligraactive/qml/Test.qml -usr/share/calligraactive/qml/TextDocumentCenterOverlay.qml -usr/share/calligraactive/qml/TextDocumentCenterOverlay.qml -usr/share/calligraactive/qml/TextDocumentCenterOverlay.qml -usr/share/calligraactive/qml/TextDocumentEditingToolbar.qml -usr/share/calligraactive/qml/TextDocumentEditingToolbar.qml -usr/share/calligraactive/qml/TextDocumentEditingToolbar.qml -usr/share/calligraactive/qml/TextDocumentEditingToolbar.qml -usr/share/calligraactive/qml/Toolbars.qml -usr/share/calligraactive/qml/Toolbars.qml -usr/share/calligraactive/qml/Toolbars.qml +usr/share/calligraactive/qml/* diff -Nru calligra-2.9.7/debian/calligragemini.install calligra-2.9.11/debian/calligragemini.install --- calligra-2.9.7/debian/calligragemini.install 2015-11-25 08:22:18.000000000 +0000 +++ calligra-2.9.11/debian/calligragemini.install 1970-01-01 00:00:00.000000000 +0000 @@ -1,296 +0,0 @@ -usr/bin/calligragemini -usr/bin/calligrageminithumbnailhelper -usr/lib/calligra/imports/Calligra/Gemini/Dropbox/libcalligrageminidropboxplugin.so -usr/lib/calligra/imports/Calligra/Gemini/Dropbox/qmldir -usr/lib/calligra/imports/org/calligra/CalligraComponents/libcalligraqtquickcomponentsplugin.so -usr/lib/calligra/imports/org/calligra/CalligraComponents/qmldir -usr/share/applications/kde4/calligragemini.desktop -usr/share/icons/hicolor/1024x1024/apps/calligragemini.png -usr/share/icons/hicolor/128x128/apps/calligragemini.png -usr/share/icons/hicolor/16x16/apps/calligragemini.png -usr/share/icons/hicolor/22x22/apps/calligragemini.png -usr/share/icons/hicolor/256x256/apps/calligragemini.png -usr/share/icons/hicolor/32x32/apps/calligragemini.png -usr/share/icons/hicolor/48x48/apps/calligragemini.png -usr/share/icons/hicolor/512x512/apps/calligragemini.png -usr/share/icons/hicolor/64x64/apps/calligragemini.png -usr/share/kde4/apps/calligragemini/calligragemini.qml -usr/share/kde4/apps/calligragemini/qml/MainPage.qml -usr/share/kde4/apps/calligragemini/qml/PresentationDJMode.qml -usr/share/kde4/apps/calligragemini/qml/StageDocumentPage.qml -usr/share/kde4/apps/calligragemini/qml/WelcomePage.qml -usr/share/kde4/apps/calligragemini/qml/WordsDocumentPage.qml -usr/share/kde4/apps/calligragemini/qml/components/BusyIndicator.qml -usr/share/kde4/apps/calligragemini/qml/components/Button.qml -usr/share/kde4/apps/calligragemini/qml/components/CategorySwitcher.qml -usr/share/kde4/apps/calligragemini/qml/components/CheckBox.qml -usr/share/kde4/apps/calligragemini/qml/components/CohereButton.qml -usr/share/kde4/apps/calligragemini/qml/components/ColorSwatch.qml -usr/share/kde4/apps/calligragemini/qml/components/Dialog.qml -usr/share/kde4/apps/calligragemini/qml/components/Divider.qml -usr/share/kde4/apps/calligragemini/qml/components/DropShadow.qml -usr/share/kde4/apps/calligragemini/qml/components/ExpandingListView.qml -usr/share/kde4/apps/calligragemini/qml/components/Header.qml -usr/share/kde4/apps/calligragemini/qml/components/Label.qml -usr/share/kde4/apps/calligragemini/qml/components/ListItem.qml -usr/share/kde4/apps/calligragemini/qml/components/MessageStack.qml -usr/share/kde4/apps/calligragemini/qml/components/NewImageList.qml -usr/share/kde4/apps/calligragemini/qml/components/NewsList.qml -usr/share/kde4/apps/calligragemini/qml/components/Page.qml -usr/share/kde4/apps/calligragemini/qml/components/PageStack.js -usr/share/kde4/apps/calligragemini/qml/components/PageStack.qml -usr/share/kde4/apps/calligragemini/qml/components/PanelTextField.qml -usr/share/kde4/apps/calligragemini/qml/components/ProgressBar.qml -usr/share/kde4/apps/calligragemini/qml/components/RangeInput.qml -usr/share/kde4/apps/calligragemini/qml/components/RecentFilesList.qml -usr/share/kde4/apps/calligragemini/qml/components/ScrollDecorator.qml -usr/share/kde4/apps/calligragemini/qml/components/Shadow.qml -usr/share/kde4/apps/calligragemini/qml/components/Slider.qml -usr/share/kde4/apps/calligragemini/qml/components/TextField.qml -usr/share/kde4/apps/calligragemini/qml/components/TextFieldMultiline.qml -usr/share/kde4/apps/calligragemini/qml/components/Tooltip.qml -usr/share/kde4/apps/calligragemini/qml/components/VirtualKeyboard.qml -usr/share/kde4/apps/calligragemini/qml/panels/ImageToolsPanel.qml -usr/share/kde4/apps/calligragemini/qml/panels/NotesPanel.qml -usr/share/kde4/apps/calligragemini/qml/panels/OptionsPanel.qml -usr/share/kde4/apps/calligragemini/qml/panels/TextStylePanel.qml -usr/share/kde4/apps/calligragemini/qml/panels/notespanelpages/NotesPanelAddCustom.qml -usr/share/kde4/apps/calligragemini/qml/panels/notespanelpages/NotesPanelMain.qml -usr/share/kde4/apps/calligragemini/qml/panels/notespanelpages/NotesPanelSummary.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/CustomDocWords.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/TemplatesWords.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/VariantSelector.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/WelcomePageCloud.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/WelcomePageCustom.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/WelcomePageFilebrowser.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/WelcomePageRecent.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/WelcomePageStage.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/WelcomePageWords.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/AddDropbox.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/AddGit.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/AddWebdav.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/CloudAccounts.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/Dropbox.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/EditDetailsBase.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/EditGit.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/Git.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/RemoveAccountDlg.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/Webdav.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/dropbox/DropboxWebView.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/dropbox/FileNavigator.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/dropbox/InfoBanner.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/dropbox/LoginPage.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/dropbox/SetupPage.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/git/CreateCheckout.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/git/GetUserCredentials.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/git/RepositoryContent.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/git/createCheckoutContainer.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/git/repositoryContentContainer.qml -usr/share/kde4/apps/calligragemini/qml/welcomepages/cloud/git/userCredentialsContainer.qml -usr/share/kde4/apps/calligragemini/themes/default/colors.js -usr/share/kde4/apps/calligragemini/themes/default/fonts.js -usr/share/kde4/apps/calligragemini/themes/default/fonts/PermanentMarker.ttf -usr/share/kde4/apps/calligragemini/themes/default/fonts/SourceSansPro-Black.otf -usr/share/kde4/apps/calligragemini/themes/default/fonts/SourceSansPro-BlackIt.otf -usr/share/kde4/apps/calligragemini/themes/default/fonts/SourceSansPro-Bold.otf -usr/share/kde4/apps/calligragemini/themes/default/fonts/SourceSansPro-BoldIt.otf -usr/share/kde4/apps/calligragemini/themes/default/fonts/SourceSansPro-ExtraLight.otf -usr/share/kde4/apps/calligragemini/themes/default/fonts/SourceSansPro-ExtraLightIt.otf -usr/share/kde4/apps/calligragemini/themes/default/fonts/SourceSansPro-It.otf -usr/share/kde4/apps/calligragemini/themes/default/fonts/SourceSansPro-Light.otf -usr/share/kde4/apps/calligragemini/themes/default/fonts/SourceSansPro-LightIt.otf -usr/share/kde4/apps/calligragemini/themes/default/fonts/SourceSansPro-Regular.otf -usr/share/kde4/apps/calligragemini/themes/default/fonts/SourceSansPro-Semibold.otf -usr/share/kde4/apps/calligragemini/themes/default/fonts/SourceSansPro-SemiboldIt.otf -usr/share/kde4/apps/calligragemini/themes/default/icons/A4landscape-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/A4portrait-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/Arrow-Back-FileBrowse-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/Arrow-ScrollDown-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/Arrow-ScrollUp-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/Calligra-MockIcon-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/ColorPalettes-1-04.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/ColorPalettes-Blue-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/ColorPalettes-Magenta-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/ColorPalettes-Red-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/ColorPalettes-gold-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/Presentaton-Blue.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/Presentaton-Gold.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/Presentaton-Magenta.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/Presentaton-Red.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-AddComment-Inline-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Comment-DragHandle-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Exit-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-FXTransition-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-FillLabel-Green-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-FillLabel-Neutral-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-FillLabel-Red-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-FillLabel-Yellow-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Highlighter-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-IMGTOOLS-Brightness-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-IMGTOOLS-Contrast-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-IMGTOOLS-Crop-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-IMGTOOLS-ReplaceImage-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-IMGTOOLS-SliderHandle-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-IMGTOOLS-Sliders-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-IMGTOOLS-Transparency-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-IMGTOOLS-Wand-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-AddNote-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-AddPhotoComment-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-AddShape-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-AddSlide-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-AddVoiceComment-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-Animations-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-Bold-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-BulletList-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-Cloud-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-DesktopMode-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-Fill.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-Find-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-Help-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-Image.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-ImageAdjustment-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-Italic-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-Lines.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-MenuBack-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-MyDocuments-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-NewDocument-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-NewPresentation-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-NewSketch-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-NewSpreadsheet-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-NotesSummary-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-OK-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-Options-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-OptionsWhite-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-Pen.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-PlayPresentation-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-RecentDocuments-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-Shadow.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-SmallX.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-SpellCheck-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-TextAlignment-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-TextBox-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-TextStyle-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Icon-Underline-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Label-Green-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Label-Red-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Label-SelectedRing-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Label-Yellow-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-LargeSelectedFill-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-NextSlide-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-NotesSummary-Counter-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Nudge-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-Pointer-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/SVG-PreviousSlide-1.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/add-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/add.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/apply-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/apply.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/back.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/camera-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/cancel-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/checker-small.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/close.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/color_wheel.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/colorpicker.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/combo-arrows-white.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/crop-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/crop.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/delete-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/delete.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/down.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/edit.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/erase.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/fileclip-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/fileclip.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/filenew-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/filenew.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/fileopen-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/fileopen.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/filesave.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/filesaveas.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/fileshare.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/fill-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/fill.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/filter_delete-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/filter_load-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/filter_save-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/forward.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/gradient-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/gradient.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/help.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/intel-Words-Handle-cursor.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/krita_sketch.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/layer_filter-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/layer_group-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/layer_paint-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/locked_off-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/locked_off-small.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/locked_on-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/locked_on-small.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/minimize.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/mirror_c-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/mirror_h-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/mirror_v-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/move-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/move.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/paint-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/paint.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/palette-add-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/palette-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/palette-delete-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/palette.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/redo.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/select-add.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/select-apply.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/select-area.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/select-color.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/select-deselect.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/select-hide.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/select-intersect.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/select-polygon.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/select-rectangle.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/select-replace.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/select-reselect.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/select-show.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/select-sub.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/settings.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/switch.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/transform-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/transform.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/undo.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/up.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/visible_off-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/visible_off-small.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/visible_off.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/visible_on-black.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/visible_on-small.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/visible_on.svg -usr/share/kde4/apps/calligragemini/themes/default/icons/web.svg -usr/share/kde4/apps/calligragemini/themes/default/images/Sticker-A.svg -usr/share/kde4/apps/calligragemini/themes/default/images/Sticker-Apple.svg -usr/share/kde4/apps/calligragemini/themes/default/images/Sticker-ArrowTarget.svg -usr/share/kde4/apps/calligragemini/themes/default/images/Sticker-B.svg -usr/share/kde4/apps/calligragemini/themes/default/images/Sticker-C.svg -usr/share/kde4/apps/calligragemini/themes/default/images/Sticker-D.svg -usr/share/kde4/apps/calligragemini/themes/default/images/Sticker-F.svg -usr/share/kde4/apps/calligragemini/themes/default/images/Sticker-Feather.svg -usr/share/kde4/apps/calligragemini/themes/default/images/Sticker-Lightbulb.svg -usr/share/kde4/apps/calligragemini/themes/default/images/Sticker-OK.svg -usr/share/kde4/apps/calligragemini/themes/default/images/Sticker-Ribbon.svg -usr/share/kde4/apps/calligragemini/themes/default/images/Sticker-ThumbsUp.svg -usr/share/kde4/apps/calligragemini/themes/default/images/busyindicator.png -usr/share/kde4/apps/calligragemini/themes/default/images/divider.png -usr/share/kde4/apps/calligragemini/themes/default/images/drop-corners.png -usr/share/kde4/apps/calligragemini/themes/default/images/drop-shadows.png -usr/share/kde4/apps/calligragemini/themes/default/images/header_krita_sketch.png -usr/share/kde4/apps/calligragemini/themes/default/images/header_krita_sketch_light.png -usr/share/kde4/apps/calligragemini/themes/default/images/intel-Stage-Slide-PieChart-Default.svg -usr/share/kde4/apps/calligragemini/themes/default/images/intel-Stage-Slide-PieChart-PieceTappedOn.svg -usr/share/kde4/apps/calligragemini/themes/default/images/intel-Words-Note-Circle-Green.svg -usr/share/kde4/apps/calligragemini/themes/default/images/intel-Words-Note-Circle-Red.svg -usr/share/kde4/apps/calligragemini/themes/default/images/intel-Words-Note-Circle-Yellow.svg -usr/share/kde4/apps/calligragemini/themes/default/images/kritasketch.png -usr/share/kde4/apps/calligragemini/themes/default/images/shadow.png -usr/share/kde4/apps/calligragemini/themes/default/sizes.js -usr/share/kde4/apps/calligragemini/themes/default/theme.qml -usr/share/kde4/apps/kritagemini/input/kritadefault.profile diff -Nru calligra-2.9.7/debian/calligra-libs.install calligra-2.9.11/debian/calligra-libs.install --- calligra-2.9.7/debian/calligra-libs.install 2015-11-25 08:22:18.000000000 +0000 +++ calligra-2.9.11/debian/calligra-libs.install 2016-10-12 20:17:50.000000000 +0000 @@ -38,53 +38,29 @@ usr/lib/kde4/kopabackgroundtool.so usr/lib/kde4/koreport_barcodeplugin.so usr/lib/kde4/koreport_chartplugin.so -usr/lib/libbasicflakes.so.14 -usr/lib/libbasicflakes.so.14.0.0 -usr/lib/libcalligradb.so.14 -usr/lib/libcalligradb.so.14.0.0 -usr/lib/libcalligrakdchart.so.14 -usr/lib/libcalligrakdchart.so.14.0.0 -usr/lib/libflake.so.14 -usr/lib/libflake.so.14.0.0 -usr/lib/libkformula.so.14 -usr/lib/libkformula.so.14.0.0 -usr/lib/libkokross.so.14 -usr/lib/libkokross.so.14.0.0 -usr/lib/libkomain.so.14 -usr/lib/libkomain.so.14.0.0 -usr/lib/libkomsooxml.so.14 -usr/lib/libkomsooxml.so.14.0.0 -usr/lib/libkoodf.so.14 -usr/lib/libkoodf.so.14.0.0 -usr/lib/libkoodf2.so.14 -usr/lib/libkoodf2.so.14.0.0 -usr/lib/libkoodfreader.so.14 -usr/lib/libkoodfreader.so.14.0.0 -usr/lib/libkopageapp.so.14 -usr/lib/libkopageapp.so.14.0.0 -usr/lib/libkoplugin.so.14 -usr/lib/libkoplugin.so.14.0.0 -usr/lib/libkoproperty.so.14 -usr/lib/libkoproperty.so.14.0.0 -usr/lib/libkordf.so.14 -usr/lib/libkordf.so.14.0.0 -usr/lib/libkoreport.so.14 -usr/lib/libkoreport.so.14.0.0 -usr/lib/libkotext.so.14 -usr/lib/libkotext.so.14.0.0 -usr/lib/libkotextlayout.so.14 -usr/lib/libkotextlayout.so.14.0.0 -usr/lib/libkovectorimage.so.14 -usr/lib/libkovectorimage.so.14.0.0 -usr/lib/libkoversion.so.14 -usr/lib/libkoversion.so.14.0.0 -usr/lib/libkowidgets.so.14 -usr/lib/libkowidgets.so.14.0.0 -usr/lib/libkowidgetutils.so.14 -usr/lib/libkowidgetutils.so.14.0.0 -usr/lib/libkundo2.so.14 -usr/lib/libkundo2.so.14.0.0 -usr/lib/libpigmentcms.so.14 -usr/lib/libpigmentcms.so.14.0.0 +usr/lib/libbasicflakes.so.* +usr/lib/libcalligradb.so.* +usr/lib/libcalligrakdchart.so.* +usr/lib/libflake.so.* +usr/lib/libkformula.so.* +usr/lib/libkokross.so.* +usr/lib/libkomain.so.* +usr/lib/libkomsooxml.so.* +usr/lib/libkoodf.so.* +usr/lib/libkoodf2.so.* +usr/lib/libkoodfreader.so.* +usr/lib/libkopageapp.so.* +usr/lib/libkoplugin.so.* +usr/lib/libkoproperty.so.* +usr/lib/libkordf.so.* +usr/lib/libkoreport.so.* +usr/lib/libkotext.so.* +usr/lib/libkotextlayout.so.* +usr/lib/libkovectorimage.so.* +usr/lib/libkoversion.so.* +usr/lib/libkowidgets.so.* +usr/lib/libkowidgetutils.so.* +usr/lib/libkundo2.so.* +usr/lib/libpigmentcms.so.* usr/share/kde4/services/calligra/calligradocinfopropspage.desktop usr/share/kde4/services/calligra/koreport_chartplugin.desktop diff -Nru calligra-2.9.7/debian/changelog calligra-2.9.11/debian/changelog --- calligra-2.9.7/debian/changelog 2016-08-18 13:32:33.000000000 +0000 +++ calligra-2.9.11/debian/changelog 2016-10-12 20:17:50.000000000 +0000 @@ -1,3 +1,32 @@ +calligra (1:2.9.11-0ubuntu1) yakkety; urgency=medium + + [ Clive Johnston ] + * New upstream bugfix release + - Fix install files + - Fix typo in control file (fonst-lyx) + - Add new build deps + - Remove calligramini.install as it is no longer + supported upstream + - Fix not-installed + - Remove upstream_qmax.diff - applied upstream + - Set QT version to 4 + - Add qt-kde-team/2/ import to rules + - Set PRODUCTSET=desktop in rules + + [ José Manuel Santamaría Lema ] + * Fix openexr building: + - Re-add libopenexr-dev build dependency. + - Add dont_use_eigen3_namespace.diff + * Add okular-backend-odt package. + * Add patches from debian to fix possible FTBFS'es: + - upstream_Fix-compilation-of-PsCommentLexer.cpp-on-platforms-w.patch + - upstream_fix-arm-FTBFS.patch + * Remove kde-runtime-dbg package, migrate to -dbgsym. + * Add fix_fbtfs_armfh_opengl.diff + * Update installed files in debian/rules to skip some files on armhf. + + -- José Manuel Santamaría Lema Wed, 12 Oct 2016 21:17:50 +0100 + calligra (1:2.9.7-0ubuntu18) yakkety; urgency=medium * Compile without libopenexr-dev to avoid ambiguous references between diff -Nru calligra-2.9.7/debian/control calligra-2.9.11/debian/control --- calligra-2.9.7/debian/control 2016-08-18 13:31:22.000000000 +0000 +++ calligra-2.9.11/debian/control 2016-10-12 20:17:50.000000000 +0000 @@ -8,6 +8,7 @@ Build-Depends: cauchy-dev, cmake (>= 2.6.2), debhelper (>= 9), + default-jdk, freetds-dev, kdelibs5-dev (>= 4:4.4.0), kdepimlibs5-dev (>= 4:4.4.3), @@ -20,6 +21,7 @@ libfftw3-dev, libfontconfig1-dev, libfreetype6-dev, + libgit2-dev, libglew-dev [!armel !armhf !arm64], libglib2.0-dev, libgsl-dev, @@ -27,13 +29,13 @@ libjpeg-dev, libkactivities-dev, libkdcraw-dev (>= 4:4.4.3), + libkf5kdelibs4support-dev, liblcms2-dev, + libmarble-dev, libmysqlclient-dev, libodfgen-dev, libopencolorio-dev [!armhf], -# Disable building with libopenexr-dev, as it contains half class in global namesapce -# which is ambigious when used with libeigen3-dev's Eigen::half_impl::half -# libopenexr-dev, + libopenexr-dev, libopenjpeg-dev, libphononexperimental-dev, libpng-dev, @@ -56,15 +58,17 @@ libxbase64-dev, libxi-dev, okular-dev (>= 4:4.12.90), + pkg-config, pkg-kde-tools (>= 0.9), + postgresql-server-dev-all, pstoedit, shared-desktop-ontologies, shared-mime-info, zlib1g-dev Standards-Version: 3.9.6 Homepage: http://www.calligra-suite.org/ -Vcs-Browser: http://bazaar.launchpad.net/~kubuntu-packagers/kubuntu-packaging/calligra -Vcs-Bzr: https://code.launchpad.net/~kubuntu-packagers/kubuntu-packaging/calligra +Vcs-Browser: https://code.launchpad.net/~kubuntu-packagers/kubuntu-packaging/+git/calligra +Vcs-Git: git://git.launchpad.net/~kubuntu-packagers/kubuntu-packaging/+git/calligra X-Debian-Vcs-Git: git://git.debian.org/pkg-kde/kde-std/calligra.git X-Debian-Vcs-Browser: http://git.debian.org/?p=pkg-kde/kde-std/calligra.git @@ -301,22 +305,6 @@ . This package is part of the Calligra Suite. -Package: calligragemini -Architecture: amd64 i386 -Depends: calligra-libs (= ${binary:Version}), - calligrastage (>= ${source:Version}), - calligrawords (>= ${source:Version}), - libqtwebkit-qmlwebkitplugin, - ${misc:Depends}, - ${shlibs:Depends} -Suggests: khelpcenter -Replaces: calligra-libs (<< 1:2.9.2-0ubuntu2~) -Breaks: calligra-libs (<< 1:2.9.2-0ubuntu2~) -Homepage: http://www.calligra-suite.org/krita/ -Description: responsive user interface for Calligra - Calligra Gemini has a UI which can switch between tablet and desktop - layout. - Package: calligrasheets Architecture: any Section: math @@ -504,7 +492,7 @@ Depends: calligra-data (>= ${source:Version}), ${misc:Depends}, ${shlibs:Depends} -Recommends: fonst-lyx, libqca2-plugin-ossl, python, ruby +Recommends: fonts-lyx, libqca2-plugin-ossl, python, ruby Suggests: texlive, wordnet Description: common libraries and binaries for the Calligra Suite This package provides the libraries and binaries that are shared amongst @@ -546,15 +534,19 @@ . This package is part of the Calligra Suite. -Package: calligra-dbg -Section: debug +Package: okular-backend-odt Architecture: any -Priority: extra -Depends: calligra-libs (= ${binary:Version}), kde-runtime-dbg, ${misc:Depends} -Description: debugging symbols for Calligra - This package contains the debugging symbols associated with Calligra. - They will automatically be used by gdb for debugging calligra-related - issues. +Section: graphics +Depends: calligra-libs (= ${binary:Version}), + ${misc:Depends}, + ${shlibs:Depends} +Breaks: okular-backend-odp (<< 1:2.9.11) +Replaces: okular-backend-odp (<< 1:2.9.11) +Recommends: okular +Enhances: okular +Description: Okular backend for ODT documents + This package provides a backend for Okular to view OpenDocument Text + (ODT) documents, but also DOC, DOCX and WPD documents. . This package is part of the Calligra Suite. diff -Nru calligra-2.9.7/debian/kexi.install calligra-2.9.11/debian/kexi.install --- calligra-2.9.7/debian/kexi.install 2015-11-25 08:22:18.000000000 +0000 +++ calligra-2.9.11/debian/kexi.install 2016-10-12 20:17:50.000000000 +0000 @@ -1,4 +1,5 @@ usr/bin/kexi +usr/lib/kde4/kexidb_pqxxsqldriver.so usr/lib/kde4/kexihandler_csv_importexport.so usr/lib/kde4/kexihandler_form.so usr/lib/kde4/kexihandler_migration.so @@ -7,6 +8,7 @@ usr/lib/kde4/kexihandler_script.so usr/lib/kde4/kexihandler_table.so usr/lib/kde4/keximigrate_mdb.so +usr/lib/kde4/keximigrate_pqxx.so usr/lib/kde4/keximigrate_txt.so usr/lib/kde4/kformdesigner_containers.so usr/lib/kde4/kformdesigner_kexidbwidgets.so @@ -52,8 +54,10 @@ usr/share/kde4/apps/kexi usr/share/kde4/config/kexirc usr/share/kde4/services/calligra/kexicsv_importexporthandler.desktop +usr/share/kde4/services/calligra/kexidb_pqxxsqldriver.desktop usr/share/kde4/services/calligra/kexiformhandler.desktop usr/share/kde4/services/calligra/keximigrate_mdb.desktop +usr/share/kde4/services/calligra/keximigrate_pqxx.desktop usr/share/kde4/services/calligra/keximigrate_txt.desktop usr/share/kde4/services/calligra/keximigrationhandler.desktop usr/share/kde4/services/calligra/kexiqueryhandler.desktop diff -Nru calligra-2.9.7/debian/krita-data.install calligra-2.9.11/debian/krita-data.install --- calligra-2.9.7/debian/krita-data.install 2015-11-25 08:22:18.000000000 +0000 +++ calligra-2.9.11/debian/krita-data.install 2016-10-12 20:17:50.000000000 +0000 @@ -2,16 +2,10 @@ usr/share/applications/kde4/krita_heightmap.desktop usr/share/applications/kde4/krita_tga.desktop usr/share/color/icc/krita/ -usr/share/icons/hicolor/1024x1024/apps/calligrakrita.png -usr/share/icons/hicolor/128x128/apps/calligrakrita.png -usr/share/icons/hicolor/16x16/apps/calligrakrita.png -usr/share/icons/hicolor/22x22/apps/calligrakrita.png -usr/share/icons/hicolor/256x256/apps/calligrakrita.png -usr/share/icons/hicolor/32x32/apps/calligrakrita.png -usr/share/icons/hicolor/48x48/apps/calligrakrita.png -usr/share/icons/hicolor/512x512/apps/calligrakrita.png -usr/share/icons/hicolor/64x64/apps/calligrakrita.png -usr/share/icons/hicolor/scalable/apps/calligrakrita.svgz +usr/share/icons/hicolor/*/apps/calligrakrita2.png +usr/share/icons/hicolor/*/apps/kritagemini.png +usr/share/icons/hicolor/*/apps/kritasketch.png +usr/share/icons/hicolor/scalable/apps/calligrakrita2.svgz usr/share/kde4/apps/calligra/icons/hicolor/128x128/actions/template_DIN_A3_landscape.png usr/share/kde4/apps/calligra/icons/hicolor/128x128/actions/template_DIN_A4_portrait.png usr/share/kde4/apps/calligra/icons/hicolor/128x128/actions/template_ratio_1610.png diff -Nru calligra-2.9.7/debian/not-installed calligra-2.9.11/debian/not-installed --- calligra-2.9.7/debian/not-installed 2015-11-25 08:22:18.000000000 +0000 +++ calligra-2.9.11/debian/not-installed 2016-10-12 20:17:50.000000000 +0000 @@ -1,4 +1,6 @@ # symlinks of private libraries +./usr/lib/libkritaglobal.so +./usr/lib/libkritapsd.so ./usr/lib/libkexicore.so ./usr/lib/libkundo2.so ./usr/lib/libplanworkapp.so @@ -111,529 +113,11 @@ ./usr/share/kde4/apps/formulashape/fonts/cmex10.ttf # add dependency on karbon, words and sheets to calligra-libs; too generic -./usr/bin/cstester -./usr/bin/cstrunner ./usr/bin/visualimagecompare ./usr/share/kde4/apps/cmake/modules/FindCalligraLibs.cmake #unused headers -./usr/include/KoPABackgroundTool.h -./usr/include/kexi/forms/objecttree.h -./usr/include/kexi/forms/widgetfactory.h -./usr/include/kexi/forms/widgetwithsubpropertiesinterface.h -./usr/include/kexi/forms/FormWidgetInterface.h -./usr/include/kexi/forms/WidgetTreeWidget.h -./usr/include/kexi/forms/WidgetInfo.h -./usr/include/kexi/forms/widgetlibrary.h -./usr/include/kexi/forms/FormWidget.h -./usr/include/stage/part/KPrPageData.h -./usr/include/stage/part/KPrDeclarations.h -./usr/include/stage/part/KPrCustomSlideShows.h -./usr/include/stage/part/KPrPresentationTool.h -./usr/include/stage/part/KPrShapeAnimations.h -./usr/include/stage/part/KPrPage.h -./usr/include/stage/part/stage_export.h -./usr/include/stage/part/KPrAnimationDirector.h -./usr/include/stage/part/KPrDocument.h -./usr/include/stage/part/KPrNotes.h -./usr/include/stage/part/KPrViewModePresentation.h -./usr/include/stage/part/KPrView.h -./usr/include/stage/part/pagelayout/KPrPlaceholders.h -./usr/include/stage/part/animations/KPrShapeAnimation.h -./usr/include/stage/part/animations/KPrAnimationStep.h -./usr/include/stage/part/animations/KPrAnimationData.h -./usr/include/sheets/Condition.h -./usr/include/sheets/calligra_sheets_limits.h -./usr/include/sheets/PointStorage.h -./usr/include/sheets/RowColumnFormat.h -./usr/include/sheets/DocBase.h -./usr/include/sheets/Currency.h -./usr/include/sheets/RectStorage.h -./usr/include/sheets/ValueConverter.h -./usr/include/sheets/Map.h -./usr/include/sheets/Region.h -./usr/include/sheets/Value.h -./usr/include/sheets/Sheet.h -./usr/include/sheets/PrintSettings.h -./usr/include/sheets/Number.h -./usr/include/sheets/ProtectableObject.h -./usr/include/sheets/OdfLoadingContext.h -./usr/include/sheets/Global.h -./usr/include/sheets/Style.h -./usr/include/sheets/RowFormatStorage.h -./usr/include/sheets/calligra_sheets_export.h -./usr/include/sheets/ValueStorage.h -./usr/include/sheets/ValueCalc.h -./usr/include/sheets/RTree.h -./usr/include/sheets/Cell.h -./usr/include/sheets/Format.h -./usr/include/sheets/CellStorage.h -./usr/include/sheets/commands/SortManipulator.h -./usr/include/sheets/commands/DataManipulators.h -./usr/include/sheets/commands/AbstractRegionCommand.h -./usr/include/sheets/part/View.h -./usr/include/sheets/part/CellTool.h -./usr/include/sheets/part/CanvasBase.h -./usr/include/sheets/part/Find.h -./usr/include/sheets/part/Part.h -./usr/include/sheets/part/CanvasItem.h -./usr/include/sheets/part/Doc.h -./usr/include/sheets/part/ToolRegistry.h -./usr/include/sheets/part/Headers.h -./usr/include/sheets/part/HeaderItems.h -./usr/include/sheets/database/Database.h -./usr/include/sheets/database/Filter.h -./usr/include/sheets/ui/SheetView.h -./usr/include/sheets/ui/Selection.h -./usr/include/sheets/ui/CellEditorBase.h -./usr/include/sheets/ui/CellToolBase.h -./usr/include/krita/kis_generator.h -./usr/include/krita/kis_transform_worker.h -./usr/include/krita/kis_convolution_worker.h -./usr/include/krita/kis_config_widget.h -./usr/include/krita/kis_serializable_configuration.h -./usr/include/krita/kis_filter.h -./usr/include/krita/kis_base_node.h -./usr/include/krita/kis_node_facade.h -./usr/include/krita/kis_cubic_curve.h -./usr/include/krita/kis_global.h -./usr/include/krita/kis_processing_information.h -./usr/include/krita/kis_mask.h -./usr/include/krita/kis_generator_registry.h -./usr/include/krita/kis_selection.h -./usr/include/krita/kis_node.h -./usr/include/krita/kis_paintop_options_widget.h -./usr/include/krita/kis_ui_types.h -./usr/include/krita/kis_canvas2.h -./usr/include/krita/kis_painter.h -./usr/include/krita/kis_coordinates_converter.h -./usr/include/krita/kis_paint_device.h -./usr/include/krita/kis_paintop_option.h -./usr/include/krita/kis_view2.h -./usr/include/krita/krita_export.h -./usr/include/krita/kis_shared_ptr_vector.h -./usr/include/krita/kis_multi_double_filter_widget.h -./usr/include/krita/kis_multi_integer_filter_widget.h -./usr/include/krita/kis_properties_configuration.h -./usr/include/krita/kis_canvas_decoration.h -./usr/include/krita/kis_cursor.h -./usr/include/krita/kis_transaction.h -./usr/include/krita/kis_paintop_options_model.h -./usr/include/krita/kis_debug.h -./usr/include/krita/kis_tiled_data_manager.h -./usr/include/krita/kis_filter_registry.h -./usr/include/krita/kis_filter_configuration.h -./usr/include/krita/kis_base_processor.h -./usr/include/krita/kis_convolution_kernel.h -./usr/include/krita/kis_shared.h -./usr/include/krita/kis_multi_bool_filter_widget.h -./usr/include/krita/kis_node_graph_listener.h -./usr/include/krita/kis_filter_strategy.h -./usr/include/krita/kis_canvas_resource_provider.h -./usr/include/krita/kis_convolution_painter.h -./usr/include/krita/kis_perspectivetransform_worker.h -./usr/include/krita/fill_processing_visitor.h -./usr/include/krita/kis_shared_ptr.h -./usr/include/krita/kis_distance_information.h -./usr/include/krita/kis_image.h -./usr/include/krita/kis_warptransform_worker.h -./usr/include/krita/kis_types.h -./usr/include/krita/kis_default_bounds.h -./usr/include/krita/kis_tool.h -./usr/include/words/part/KWViewMode.h -./usr/include/words/part/KWCanvasBase.h -./usr/include/words/part/KWDocument.h -./usr/include/words/part/KWView.h -./usr/include/words/part/KWPageStyle.h -./usr/include/words/part/KWViewModeNormal.h -./usr/include/words/part/KWApplicationConfig.h -./usr/include/words/part/KWPage.h -./usr/include/words/part/words_export.h -./usr/include/words/part/KWPageManager.h -./usr/include/words/part/KWCanvas.h -./usr/include/words/part/Words.h -./usr/include/words/part/KWCanvasItem.h -./usr/include/words/part/frames/KWTextFrameSet.h -./usr/include/words/part/frames/KWFrame.h -./usr/include/words/part/frames/KWFrameLayout.h -./usr/include/words/part/frames/KWFrameSet.h -./usr/include/calligra/KoViewAdaptor.h -./usr/include/calligra/KoPathPointInsertCommand.h -./usr/include/calligra/KoOdfTextProperties.h -./usr/include/calligra/KoSection.h -./usr/include/calligra/KoToolManager.h -./usr/include/calligra/KoCompositeOp.h -./usr/include/calligra/KoHistogramProducer.h -./usr/include/calligra/KoShapeDeleteCommand.h -./usr/include/calligra/KoPathShapeMarkerCommand.h -./usr/include/calligra/KoToolProxy.h -./usr/include/calligra/KoColumn.h -./usr/include/calligra/KoOdfNotesConfiguration.h -./usr/include/calligra/KoDualColorButton.h -./usr/include/calligra/KoShapeOdfSaveHelper.h -./usr/include/calligra/KoLineStyleSelector.h -./usr/include/calligra/KoToolBase.h -./usr/include/calligra/KoSharedSavingData.h -./usr/include/calligra/KoFilterEffect.h -./usr/include/calligra/KoShadowStyle.h -./usr/include/calligra/KoFilterEffectConfigWidgetBase.h -./usr/include/calligra/KoPageFormat.h -./usr/include/calligra/KoPointedAt.h -./usr/include/calligra/KoColorSpace.h -./usr/include/calligra/kundo2view.h -./usr/include/calligra/KoTextBlockData.h -./usr/include/calligra/KoStandardAction.h -./usr/include/calligra/KoPagePreviewWidget.h -./usr/include/calligra/KoShapeApplicationData.h -./usr/include/calligra/KoAnchorInlineObject.h -./usr/include/calligra/KoGenChange.h -./usr/include/calligra/KoOdfReadStore.h -./usr/include/calligra/KoChartInterface.h -./usr/include/calligra/KoShapeTransformCommand.h -./usr/include/calligra/KoDocument.h -./usr/include/calligra/KoPageLayoutWidget.h -./usr/include/calligra/KoShapePainter.h -./usr/include/calligra/KoOdf.h -./usr/include/calligra/KoBasicHistogramProducers.h -./usr/include/calligra/KoDocumentRdf.h -./usr/include/calligra/KoPencilTool.h -./usr/include/calligra/KoShapeAlignCommand.h -./usr/include/calligra/KoDeferredShapeFactoryBase.h -./usr/include/calligra/KoOdfWriteStore.h -./usr/include/calligra/KoDockWidgetTitleBarButton.h -./usr/include/calligra/KoID.h -./usr/include/calligra/kowidgets_export.h -./usr/include/calligra/DebugPigment.h -./usr/include/calligra/KoPageLayoutDialog.h -./usr/include/calligra/flake_export.h -./usr/include/calligra/KoShapeSavingContext.h -./usr/include/calligra/KoShapeShadowCommand.h -./usr/include/calligra/KoPACanvas.h -./usr/include/calligra/KoPageApp.h -./usr/include/calligra/KoTblStyle.h -./usr/include/calligra/KoImageCollection.h -./usr/include/calligra/KoShapeContainer.h -./usr/include/calligra/KoShapeConfigWidgetBase.h -./usr/include/calligra/KoPointerEvent.h -./usr/include/calligra/KoColorSpaceMaths.h -./usr/include/calligra/KoShapeFactoryBase.h -./usr/include/calligra/KoXyzColorSpaceTraits.h -./usr/include/calligra/KoGuidesData.h -./usr/include/calligra/calligraversion.h -./usr/include/calligra/KoGenChanges.h -./usr/include/calligra/KoColorSpaceTraits.h -./usr/include/calligra/KoGlobal.h -./usr/include/calligra/KoZoomAction.h -./usr/include/calligra/kordf_export.h -./usr/include/calligra/KoGenericRegistryModel.h -./usr/include/calligra/KoColorConversionTransformationFactory.h -./usr/include/calligra/KoFindOptionSet.h -./usr/include/calligra/KoTextEditingRegistry.h -./usr/include/calligra/KoPart.h -./usr/include/calligra/KoToolSelection.h -./usr/include/calligra/KoDrag.h -./usr/include/calligra/KoInlineObject.h -./usr/include/calligra/KoTextInlineRdf.h -./usr/include/calligra/KoXmlNS.h -./usr/include/calligra/KoStyleStack.h -./usr/include/calligra/KoBookmark.h -./usr/include/calligra/KoResourceServerAdapter.h -./usr/include/calligra/KoSemanticStylesheet.h -./usr/include/calligra/KoTextRdfCore.h -./usr/include/calligra/KoXYColorSelector.h -./usr/include/calligra/KoZoomHandler.h -./usr/include/calligra/KoTextTableTemplate.h -./usr/include/calligra/KoColumns.h -./usr/include/calligra/KoPAPageBase.h -./usr/include/calligra/KoShapeBackgroundCommand.h -./usr/include/calligra/calligragitversion.h -./usr/include/calligra/kopageapp_export.h -./usr/include/calligra/KoTextDocumentLayout.h -./usr/include/calligra/KoPAViewMode.h -./usr/include/calligra/KoRdfSemanticItem.h -./usr/include/calligra/KoDataCenterBase.h -./usr/include/calligra/KoColorSpaceConstants.h -./usr/include/calligra/KoPADocument.h -./usr/include/calligra/KoSelection.h -./usr/include/calligra/KoFilterChainLinkList.h -./usr/include/calligra/KoOdfLineNumberingConfiguration.h -./usr/include/calligra/KoProgressProxy.h -./usr/include/calligra/KoTextPaste.h -./usr/include/calligra/KoPAView.h -./usr/include/calligra/KoLabColorSpaceTraits.h -./usr/include/calligra/KoFindToolbar.h -./usr/include/calligra/KoUniColorDialog.h -./usr/include/calligra/KoPACanvasItem.h -./usr/include/calligra/KoImageData.h -./usr/include/calligra/KoShapeStrokeModel.h -./usr/include/calligra/kotext_export.h -./usr/include/calligra/KoConfig.h -./usr/include/calligra/KoCanvasResourceManager.h -./usr/include/calligra/kundo2group.h -./usr/include/calligra/KoTextShapeData.h -./usr/include/calligra/KoOdfManifestEntry.h -./usr/include/calligra/KoStyleThumbnailer.h -./usr/include/calligra/KoTextMeta.h -./usr/include/calligra/RdfSemanticTreeWidgetSelectAction.h -./usr/include/calligra/KoCanvasObserverBase.h -./usr/include/calligra/KoShapeContainerModel.h -./usr/include/calligra/KoFileDialogHelper.h -./usr/include/calligra/KoRdfSemanticItemRegistry.h -./usr/include/calligra/kowidgetutils_export.h -./usr/include/calligra/KoTextEditor.h -./usr/include/calligra/KoOdfLoadingContext.h -./usr/include/calligra/KoOdfParagraphProperties.h -./usr/include/calligra/KoColorSpaceFactory.h -./usr/include/calligra/KoOdfStyleManager.h -./usr/include/calligra/KoCell.h -./usr/include/calligra/KoTextEditingFactory.h -./usr/include/calligra/KoOasisSettings.h -./usr/include/calligra/KoPathPointTypeCommand.h -./usr/include/calligra/KoStore.h -./usr/include/calligra/KoPASavingContext.h -./usr/include/calligra/RdfForward.h -./usr/include/calligra/KoDocumentInfo.h -./usr/include/calligra/KoFlake.h -./usr/include/calligra/kundo2stack.h -./usr/include/calligra/KoDockWidgetTitleBar.h -./usr/include/calligra/KoUpdater.h -./usr/include/calligra/KoShapeGroup.h -./usr/include/calligra/KoVersionDialog.h -./usr/include/calligra/KoLoadingShapeUpdater.h -./usr/include/calligra/KoOdfStyle.h -./usr/include/calligra/KoGenStyles.h -./usr/include/calligra/KoRow.h -./usr/include/calligra/KoColumnStyle.h -./usr/include/calligra/KoTable.h -./usr/include/calligra/koodf2_export.h -./usr/include/calligra/KoTextRangeManager.h -./usr/include/calligra/KoZoomController.h -./usr/include/calligra/KoPathSegmentTypeCommand.h -./usr/include/calligra/KoCopyController.h -./usr/include/calligra/KoEventActionRemoveCommand.h -./usr/include/calligra/KoFilterEffectFactoryBase.h -./usr/include/calligra/KoStyle.h -./usr/include/calligra/KoGenericRegistry.h -./usr/include/calligra/KoDragOdfSaveHelper.h -./usr/include/calligra/KoInsets.h -./usr/include/calligra/KoAnnotationManager.h -./usr/include/calligra/KoGrayColorSpaceTraits.h -./usr/include/calligra/KoTextRange.h -./usr/include/calligra/KoColorPopupAction.h -./usr/include/calligra/KoParameterToPathCommand.h -./usr/include/calligra/KoInlineObjectRegistry.h -./usr/include/calligra/KoOdfGraphicStyles.h -./usr/include/calligra/KoInlineObjectFactoryBase.h -./usr/include/calligra/KoGridData.h -./usr/include/calligra/KoOdfBibliographyConfiguration.h -./usr/include/calligra/KoXmlReader.h -./usr/include/calligra/KoDocumentEntry.h -./usr/include/calligra/KoUnit.h -./usr/include/calligra/KoColorProfile.h -./usr/include/calligra/KoGenStyle.h -./usr/include/calligra/KoRdfSemanticItemViewSite.h -./usr/include/calligra/KoToolRegistry.h -./usr/include/calligra/KoLabDarkenColorTransformation.h -./usr/include/calligra/KoResourceServerProvider.h -./usr/include/calligra/KoShapeShearCommand.h -./usr/include/calligra/KoProgressUpdater.h -./usr/include/calligra/KoTextLayoutRootArea.h -./usr/include/calligra/kotextlayout_export.h -./usr/include/calligra/KoGroupButton.h -./usr/include/calligra/KoEventActionAddCommand.h -./usr/include/calligra/KoRdfSemanticItemFactoryBase.h -./usr/include/calligra/KoFillConfigWidget.h -./usr/include/calligra/kundo2command.h -./usr/include/calligra/KoDpi.h -./usr/include/calligra/pigment_export.h -./usr/include/calligra/KoInputDevice.h -./usr/include/calligra/KoColorTransformationFactory.h -./usr/include/calligra/KoCanvasControllerWidget.h -./usr/include/calligra/KoFindOption.h -./usr/include/calligra/KoYcbcrColorSpaceTraits.h -./usr/include/calligra/KoRTree.h -./usr/include/calligra/KoResourceServerObserver.h -./usr/include/calligra/KoTextSoftPageBreak.cpp -./usr/include/calligra/KoColorSpaceRegistry.h -./usr/include/calligra/KoFallBackColorTransformation.h -./usr/include/calligra/KoColorSpaceAbstract.h -./usr/include/calligra/KoFilter.h -./usr/include/calligra/KoPathControlPointMoveCommand.h -./usr/include/calligra/KoResourceSelector.h -./usr/include/calligra/KoShapeGroupCommand.h -./usr/include/calligra/KoTextCommandBase.h -./usr/include/calligra/KoShapeManagerPaintingStrategy.h -./usr/include/calligra/KoSubpathRemoveCommand.h -./usr/include/calligra/KoRdfSemanticTree.h -./usr/include/calligra/KoOpacityConfigWidget.h -./usr/include/calligra/KoPathFillRuleCommand.h -./usr/include/calligra/KoOdfDocument.h -./usr/include/calligra/KoColorTransformation.h -./usr/include/calligra/KoShapeMoveCommand.h -./usr/include/calligra/KoColorPatch.h -./usr/include/calligra/KoFilterVertex.h -./usr/include/calligra/KoMainWindow.h -./usr/include/calligra/KoZoomInput.h -./usr/include/calligra/KoColorConversionTransformation.h -./usr/include/calligra/KoDockFactoryBase.h -./usr/include/calligra/Ko3dScene.h -./usr/include/calligra/KoCmykColorSpaceTraits.h -./usr/include/calligra/KoOdfPaste.h -./usr/include/calligra/KoBorder.h -./usr/include/calligra/KoMixColorsOp.h -./usr/include/calligra/kundo2qstack.h -./usr/include/calligra/KoFilterEffectStack.h -./usr/include/calligra/KoPABackgroundTool.h -./usr/include/calligra/KoPAUtil.h -./usr/include/calligra/KoTextPage.h -./usr/include/calligra/KoShapeSizeCommand.h -./usr/include/calligra/basicflakes_export.h -./usr/include/calligra/KoViewConverter.h -./usr/include/calligra/KoCanvasSupervisor.h -./usr/include/calligra/KoFilterManager.h -./usr/include/calligra/KoResourceItemChooserContextMenu.h -./usr/include/calligra/komain_export.h -./usr/include/calligra/KoRowStyle.h -./usr/include/calligra/KoShadowConfigWidget.h -./usr/include/calligra/KoPositionSelector.h -./usr/include/calligra/KoShapeManager.h -./usr/include/calligra/KoPathReverseCommand.h -./usr/include/calligra/KoUniColorChooser.h -./usr/include/calligra/KoElementReference.h -./usr/include/calligra/KoTableTemplate.h -./usr/include/calligra/KoOdfGraphicProperties.h -./usr/include/calligra/KoPALoadingContext.h -./usr/include/calligra/KoFilterEffectLoadingContext.h -./usr/include/calligra/KoPAViewModeNormal.h -./usr/include/calligra/KoColorModelStandardIds.h -./usr/include/calligra/KoToolFactoryBase.h -./usr/include/calligra/KoStoreDevice.h -./usr/include/calligra/KoFindBase.h -./usr/include/calligra/KoIntegerMaths.h -./usr/include/calligra/KoShapeCreateCommand.h -./usr/include/calligra/KoXmlReaderForward.h -./usr/include/calligra/KoShapeReorderCommand.h -./usr/include/calligra/KoPAPageContainerModel.h -./usr/include/calligra/KoShapeStrokeCommand.h -./usr/include/calligra/KoCanvasController.h -./usr/include/calligra/KoShapeUserData.h -./usr/include/calligra/KoColorTransformationFactoryRegistry.h -./usr/include/calligra/KoShapeLoadingContext.h -./usr/include/calligra/KoPAViewBase.h -./usr/include/calligra/KoResourceItemChooser.h -./usr/include/calligra/KoApplicationAdaptor.h -./usr/include/calligra/KoResourceTagStore.h -./usr/include/calligra/KoZoomMode.h -./usr/include/calligra/KoTextLayoutArea.h -./usr/include/calligra/KoDocumentRdfEditWidget.h -./usr/include/calligra/KoCreatePathTool.h -./usr/include/calligra/KoFindText.h -./usr/include/calligra/KoRawCellChild.h -./usr/include/calligra/KoShapeLayer.h -./usr/include/calligra/KoChannelInfo.h -./usr/include/calligra/KoEmbeddedDocumentSaver.h -./usr/include/calligra/KoPAMasterPage.h -./usr/include/calligra/RdfSemanticTreeWidgetAction.h -./usr/include/calligra/KoShapeDistributeCommand.h -./usr/include/calligra/KoConnectionPoint.h -./usr/include/calligra/KoList.h -./usr/include/calligra/KoOdfStyleProperties.h -./usr/include/calligra/KoInteractionTool.h -./usr/include/calligra/KoEditColorSetDialog.h -./usr/include/calligra/KoRdfPrefixMapping.h -./usr/include/calligra/kundo2model.h -./usr/include/calligra/KoPageLayout.h -./usr/include/calligra/KoCutController.h -./usr/include/calligra/KoVariable.h -./usr/include/calligra/KoFrameShape.h -./usr/include/calligra/KoShapeRenameCommand.h -./usr/include/calligra/KoTextShapeDataBase.h -./usr/include/calligra/KoView.h -./usr/include/calligra/KoFindMatch.h -./usr/include/calligra/KoSizeGroup.h -./usr/include/calligra/KoOdfStylesReader.h -./usr/include/calligra/KoPathPointRemoveCommand.h -./usr/include/calligra/KoShapeAnchor.h -./usr/include/calligra/KoDockRegistry.h -./usr/include/calligra/KoColorSlider.h -./usr/include/calligra/KoColorConversionTransformationAbstractFactory.h -./usr/include/calligra/kundo2_export.h -./usr/include/calligra/KoPathPointMoveCommand.h -./usr/include/calligra/KoDocumentSectionModel.h -./usr/include/calligra/KoDocumentRdfBase.h -./usr/include/calligra/KoShapeBasedDocumentBase.h -./usr/include/calligra/KoFilterGraph.h -./usr/include/calligra/KoProperties.h -./usr/include/calligra/KoPathSegment.h -./usr/include/calligra/KoFontFace.h -./usr/include/calligra/KoTextBlockBorderData.h -./usr/include/calligra/KoTriangleColorSelector.h -./usr/include/calligra/KoShapeRegistry.h -./usr/include/calligra/KoOdfNumberStyles.h -./usr/include/calligra/KoApplication.h -./usr/include/calligra/KoShapeUngroupCommand.h -./usr/include/calligra/KoStrokeConfigWidget.h -./usr/include/calligra/KoPACanvasBase.h -./usr/include/calligra/KoBookmarkManager.h -./usr/include/calligra/KoProgressBar.h -./usr/include/calligra/KoPanTool.h -./usr/include/calligra/KoCellStyle.h -./usr/include/calligra/KoFilterEffectRegistry.h -./usr/include/calligra/KoPrintJob.h -./usr/include/calligra/KoOdfNumberDefinition.h -./usr/include/calligra/KoFilterEntry.h -./usr/include/calligra/KoTextLocator.h -./usr/include/calligra/KoChartModel.h -./usr/include/calligra/KoColor.h -./usr/include/calligra/KoTextDocument.h -./usr/include/calligra/KoXmlWriter.h -./usr/include/calligra/KoPathPointMergeCommand.h -./usr/include/calligra/KoText.h -./usr/include/calligra/KoSemanticStylesheetsEditor.h -./usr/include/calligra/KoShapeContainerDefaultModel.h -./usr/include/calligra/KoColorSpaceEngine.h -./usr/include/calligra/koodf_export.h -./usr/include/calligra/KoRdfSemanticTreeWidgetItem.h -./usr/include/calligra/KoMixColorsOpImpl.h -./usr/include/calligra/KoResourceTaggingManager.h -./usr/include/calligra/KoAnchorTextRange.h -./usr/include/calligra/KoTextEditingPlugin.h -./usr/include/calligra/KoPathCombineCommand.h -./usr/include/calligra/MacSupport.h -./usr/include/calligra/KoVariableManager.h -./usr/include/calligra/KoPAPage.h -./usr/include/calligra/KoDocumentResourceManager.h -./usr/include/calligra/KoConvolutionOp.h -./usr/include/calligra/KoInlineTextObjectManager.h -./usr/include/calligra/KoModeBoxFactory.h -./usr/include/calligra/KoDom.h -./usr/include/calligra/KoRgbColorSpaceTraits.h -./usr/include/calligra/KoResourceServer.h -./usr/include/calligra/KoCanvasBase.h -./usr/include/calligra/KoShapeController.h -./usr/include/calligra/KoShape.h -./usr/include/calligra/KoColorSetWidget.h -./usr/include/calligra/KoPageWidgetItem.h -./usr/include/calligra/KoFilterChain.h -./usr/include/calligra/KoFilterEffectRenderContext.h -./usr/include/calligra/changetracker/KoChangeTrackerElement.h -./usr/include/calligra/changetracker/KoDeletedColumnData.cpp -./usr/include/calligra/changetracker/KoDeletedRowColumnDataStore.h -./usr/include/calligra/changetracker/KoDeletedRowData.cpp -./usr/include/calligra/changetracker/KoChangeTracker.h -./usr/include/calligra/changetracker/KoDeletedCellData.cpp -./usr/include/calligra/styles/KoTableCellStyle.h -./usr/include/calligra/styles/KoTableRowStyle.h -./usr/include/calligra/styles/KoTableColumnStyle.h -./usr/include/calligra/styles/KoTableStyle.h -./usr/include/calligra/styles/KoCharacterStyle.h -./usr/include/calligra/styles/KoSectionStyle.h -./usr/include/calligra/styles/KoListLevelProperties.h -./usr/include/calligra/styles/KoListStyle.h -./usr/include/calligra/styles/KoStyleManager.h -./usr/include/calligra/styles/KoParagraphStyle.h -./usr/include/calligra/KoFileDialog.h ./usr/include/calligra/KoTriangleColorSelector.h ./usr/include/calligra/KoColorSpaceAbstract.h ./usr/include/calligra/KoShapeShearCommand.h @@ -738,7 +222,6 @@ ./usr/include/calligra/KoZoomInput.h ./usr/include/calligra/KoShapePainter.h ./usr/include/calligra/KoOdfPaste.h -./usr/include/calligra/KoDom.h ./usr/include/calligra/KoTextDocument.h ./usr/include/calligra/KoShapeManager.h ./usr/include/calligra/KoRdfSemanticItemFactoryBase.h @@ -992,10 +475,12 @@ ./usr/include/krita/kis_image.h ./usr/include/krita/kis_base_processor.h ./usr/include/krita/kis_locked_properties.h +./usr/include/krita/kritaui_export.h ./usr/include/krita/kis_filter.h ./usr/include/krita/kis_properties_configuration.h ./usr/include/krita/kis_shared.h ./usr/include/krita/kis_locked_properties_server.h +./usr/include/krita/kritaimage_export.h ./usr/include/krita/kis_perspectivetransform_worker.h ./usr/include/krita/kis_paintop_options_model.h ./usr/include/krita/kis_canvas_decoration.h @@ -1033,7 +518,6 @@ ./usr/include/krita/kis_transaction.h ./usr/include/krita/kis_filter_strategy.h ./usr/include/krita/kis_mask.h -./usr/include/krita/krita_export.h ./usr/include/krita/kis_paintop_option.h ./usr/include/krita/kis_transform_worker.h ./usr/include/krita/kis_node.h @@ -1124,6 +608,8 @@ #installed in debian/rules ./usr/share/kde4/services/krita_lutdocker.desktop ./usr/lib/kde4/kritalutdocker.so +./usr/lib/calligra/imports/org/krita/draganddrop/libdraganddropplugin.so +./usr/lib/calligra/imports/org/krita/draganddrop/qmldir # they are in the .install files but get reported as missing because # they are moved by dh_movelibkdeinit @@ -1143,3 +629,5 @@ ./usr/bin/cstester ./usr/share/applications/kde4/calligraactive.desktop +./usr/share/kde4/apps/kritagemini/input/kritadefault.profile +./usr/share/kde4/apps/kritasketch/input/kritadefault.profile diff -Nru calligra-2.9.7/debian/okular-backend-odp.install calligra-2.9.11/debian/okular-backend-odp.install --- calligra-2.9.7/debian/okular-backend-odp.install 2015-11-25 08:22:18.000000000 +0000 +++ calligra-2.9.11/debian/okular-backend-odp.install 2016-10-12 20:17:50.000000000 +0000 @@ -1,17 +1,10 @@ usr/lib/kde4/okularGenerator_odp.so -usr/lib/kde4/okularGenerator_odt.so -usr/share/applications/kde4/okularApplication_doc_calligra.desktop -usr/share/applications/kde4/okularApplication_docx_calligra.desktop usr/share/applications/kde4/okularApplication_odp.desktop -usr/share/applications/kde4/okularApplication_odt.desktop -usr/share/applications/kde4/okularApplication_wpd_calligra.desktop -usr/share/kde4/services/libokularGenerator_doc_calligra.desktop -usr/share/kde4/services/libokularGenerator_docx_calligra.desktop +usr/share/applications/kde4/okularApplication_powerpoint_calligra.desktop +usr/share/applications/kde4/okularApplication_pptx_calligra.desktop usr/share/kde4/services/libokularGenerator_odp.desktop -usr/share/kde4/services/libokularGenerator_odt.desktop -usr/share/kde4/services/libokularGenerator_wpd_calligra.desktop -usr/share/kde4/services/okularDoc_calligra.desktop -usr/share/kde4/services/okularDocx_calligra.desktop +usr/share/kde4/services/libokularGenerator_powerpoint_calligra.desktop +usr/share/kde4/services/libokularGenerator_pptx_calligra.desktop usr/share/kde4/services/okularOdp.desktop -usr/share/kde4/services/okularOdt.desktop -usr/share/kde4/services/okularWpd_calligra.desktop +usr/share/kde4/services/okularPowerpoint_calligra.desktop +usr/share/kde4/services/okularPptx_calligra.desktop diff -Nru calligra-2.9.7/debian/okular-backend-odt.install calligra-2.9.11/debian/okular-backend-odt.install --- calligra-2.9.7/debian/okular-backend-odt.install 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/debian/okular-backend-odt.install 2016-10-12 20:17:50.000000000 +0000 @@ -0,0 +1,13 @@ +usr/lib/kde4/okularGenerator_odt.so +usr/share/applications/kde4/okularApplication_doc_calligra.desktop +usr/share/applications/kde4/okularApplication_docx_calligra.desktop +usr/share/applications/kde4/okularApplication_odt.desktop +usr/share/applications/kde4/okularApplication_wpd_calligra.desktop +usr/share/kde4/services/libokularGenerator_doc_calligra.desktop +usr/share/kde4/services/libokularGenerator_docx_calligra.desktop +usr/share/kde4/services/libokularGenerator_odt.desktop +usr/share/kde4/services/libokularGenerator_wpd_calligra.desktop +usr/share/kde4/services/okularDoc_calligra.desktop +usr/share/kde4/services/okularDocx_calligra.desktop +usr/share/kde4/services/okularOdt.desktop +usr/share/kde4/services/okularWpd_calligra.desktop diff -Nru calligra-2.9.7/debian/patches/dont_use_eigen3_namespace.diff calligra-2.9.11/debian/patches/dont_use_eigen3_namespace.diff --- calligra-2.9.7/debian/patches/dont_use_eigen3_namespace.diff 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/debian/patches/dont_use_eigen3_namespace.diff 2016-10-12 20:17:50.000000000 +0000 @@ -0,0 +1,481 @@ +From: Boudewijn Rempt +From: José Manuel Santamaría Lema +Description: This patch is a backported version of this commit + http://quickgit.kde.org/?p=krita.git&a=commitdiff&h=2db4438671e17002c7b02e3ad3a5208930765e4f + which fixes the building with openexr and eigen3. +--- a/krita/image/kis_convolution_kernel.cc ++++ b/krita/image/kis_convolution_kernel.cc +@@ -26,7 +26,7 @@ + struct KisConvolutionKernel::Private { + qreal offset; + qreal factor; +- Matrix data; ++ Eigen::Matrix data; + }; + + KisConvolutionKernel::KisConvolutionKernel(quint32 _width, quint32 _height, qreal _offset, qreal _factor) : d(new Private) +@@ -72,12 +72,12 @@ void KisConvolutionKernel::setFactor(qre + d->factor = factor; + } + +-Matrix& KisConvolutionKernel::data() ++Eigen::Matrix& KisConvolutionKernel::data() + { + return d->data; + } + +-const Matrix* KisConvolutionKernel::data() const ++const Eigen::Matrix* KisConvolutionKernel::data() const + { + return &(d->data); + } +@@ -86,7 +86,7 @@ KisConvolutionKernelSP KisConvolutionKer + { + KisConvolutionKernelSP kernel = new KisConvolutionKernel(image.width(), image.height(), 0, 0); + +- Matrix& data = kernel->data(); ++ Eigen::Matrix& data = kernel->data(); + #if QT_VERSION >= 0x040700 + const quint8* itImage = image.constBits(); + #else +@@ -121,7 +121,7 @@ KisConvolutionKernelSP KisConvolutionKer + qreal xc = 0.5 * width - 0.5; + qreal yc = 0.5 * height - 0.5; + +- Matrix& data = kernel->data(); ++ Eigen::Matrix& data = kernel->data(); + qreal factor = 0; + + // dbgImage << ppVar(xc) << ppVar(yc); +@@ -141,9 +141,9 @@ KisConvolutionKernelSP KisConvolutionKer + return kernel; + } + +-KisConvolutionKernelSP KisConvolutionKernel::fromMatrix(Matrix matrix, qreal offset, qreal factor) ++KisConvolutionKernelSP KisConvolutionKernel::fromMatrix(Eigen::Matrix matrix, qreal offset, qreal factor) + { +- KisConvolutionKernelSP kernel = new KisConvolutionKernel(matrix.cols(), matrix.rows(), offset, factor); ++ KisConvolutionKernelSP kernel = new KisConvolutionKernel(matrix.cols(), matrix.rows(), offset, factor); + kernel->data() = matrix; + + return kernel; +--- a/krita/image/kis_convolution_kernel.h ++++ b/krita/image/kis_convolution_kernel.h +@@ -25,8 +25,6 @@ + #include "kritaimage_export.h" + #include "kis_types.h" + +-using namespace Eigen; +- + class KisMaskGenerator; + class QImage; + +@@ -46,12 +44,12 @@ public: + qreal offset() const; + qreal factor() const; + void setFactor(qreal); +- Matrix& data(); +- const Matrix * data() const; ++ Eigen::Matrix& data(); ++ const Eigen::Matrix * data() const; + + static KisConvolutionKernelSP fromQImage(const QImage& image); + static KisConvolutionKernelSP fromMaskGenerator(KisMaskGenerator *, qreal angle = 0.0); +- static KisConvolutionKernelSP fromMatrix(Matrix matrix, qreal offset, qreal factor); ++ static KisConvolutionKernelSP fromMatrix(Eigen::Matrix matrix, qreal offset, qreal factor); + private: + struct Private; + Private* const d; +--- a/krita/image/kis_gaussian_kernel.cpp ++++ b/krita/image/kis_gaussian_kernel.cpp +@@ -33,11 +33,11 @@ int KisGaussianKernel::kernelSizeFromRad + } + + +-Matrix ++Eigen::Matrix + KisGaussianKernel::createHorizontalMatrix(qreal radius) + { + int kernelSize = kernelSizeFromRadius(radius); +- Matrix matrix(1, kernelSize); ++ Eigen::Matrix matrix(1, kernelSize); + + const qreal sigma = sigmaFromRadius(radius); + const qreal multiplicand = 1 / (sqrt(2 * M_PI * sigma * sigma)); +@@ -58,11 +58,11 @@ KisGaussianKernel::createHorizontalMatri + return matrix; + } + +-Matrix ++Eigen::Matrix + KisGaussianKernel::createVerticalMatrix(qreal radius) + { + int kernelSize = kernelSizeFromRadius(radius); +- Matrix matrix(kernelSize, 1); ++ Eigen::Matrix matrix(kernelSize, 1); + + const qreal sigma = sigmaFromRadius(radius); + const qreal multiplicand = 1 / (sqrt(2 * M_PI * sigma * sigma)); +@@ -86,14 +86,14 @@ KisGaussianKernel::createVerticalMatrix( + KisConvolutionKernelSP + KisGaussianKernel::createHorizontalKernel(qreal radius) + { +- Matrix matrix = createHorizontalMatrix(radius); ++ Eigen::Matrix matrix = createHorizontalMatrix(radius); + return KisConvolutionKernel::fromMatrix(matrix, 0, matrix.sum()); + } + + KisConvolutionKernelSP + KisGaussianKernel::createVerticalKernel(qreal radius) + { +- Matrix matrix = createVerticalMatrix(radius); ++ Eigen::Matrix matrix = createVerticalMatrix(radius); + return KisConvolutionKernel::fromMatrix(matrix, 0, matrix.sum()); + } + +--- a/krita/image/kis_gaussian_kernel.h ++++ b/krita/image/kis_gaussian_kernel.h +@@ -23,17 +23,16 @@ + #include "kis_types.h" + + #include +-using namespace Eigen; + + class QRect; + + class KRITAIMAGE_EXPORT KisGaussianKernel + { + public: +- static Matrix ++ static Eigen::Matrix + createHorizontalMatrix(qreal radius); + +- static Matrix ++ static Eigen::Matrix + createVerticalMatrix(qreal radius); + + static KisConvolutionKernelSP +--- a/krita/image/kis_selection_filters.cpp ++++ b/krita/image/kis_selection_filters.cpp +@@ -187,7 +187,7 @@ KUndo2MagicString KisDilateSelectionFilt + QRect KisDilateSelectionFilter::changeRect(const QRect& rect) + { + const qint32 radius = 1; +- return rect.adjusted(-radius, -radius, radius, radius); ++ return rect.adjusted(-radius, -radius, radius, radius); + } + + void KisDilateSelectionFilter::process(KisPixelSelectionSP pixelSelection, const QRect& rect) +@@ -483,7 +483,7 @@ void KisFeatherSelectionFilter::process( + { + // compute horizontal kernel + const uint kernelSize = m_radius * 2 + 1; +- Matrix gaussianMatrix(1, kernelSize); ++ Eigen::Matrix gaussianMatrix(1, kernelSize); + + const qreal multiplicand = 1 / (2 * M_PI * m_radius * m_radius); + const qreal exponentMultiplicand = 1 / (2 * m_radius * m_radius); +--- a/krita/image/tests/kis_convolution_painter_test.cpp ++++ b/krita/image/tests/kis_convolution_painter_test.cpp +@@ -56,9 +56,9 @@ KisPaintDeviceSP initAsymTestDevice(QRec + return dev; + } + +-Matrix initSymmFilter(qreal &offset, qreal &factor) ++Eigen::Matrix initSymmFilter(qreal &offset, qreal &factor) + { +- Matrix filter; ++ Eigen::Matrix filter; + filter(0,0) = 1.0 / 21; + filter(0,1) = 3.0 / 21; + filter(0,2) = 1.0 / 21; +@@ -77,9 +77,9 @@ Matrix initSymmFilter(qreal + return filter; + } + +-Matrix initAsymmFilter(qreal &offset, qreal &factor) ++Eigen::Matrix initAsymmFilter(qreal &offset, qreal &factor) + { +- Matrix filter; ++ Eigen::Matrix filter; + filter(0,0) = 1.0; + filter(1,0) = 2.0; + filter(2,0) = 1.0; +@@ -144,7 +144,7 @@ void KisConvolutionPainterTest::testSymm + { + qreal offset = 0.0; + qreal factor = 1.0; +- Matrix filter = initSymmFilter(offset, factor); ++ Eigen::Matrix filter = initSymmFilter(offset, factor); + + QRect imageRect; + int pixelSize = 0; +@@ -172,7 +172,7 @@ void KisConvolutionPainterTest::testAsym + { + qreal offset = 0.0; + qreal factor = 1.0; +- Matrix filter = initAsymmFilter(offset, factor); ++ Eigen::Matrix filter = initAsymmFilter(offset, factor); + + QRect imageRect; + int pixelSize = -1; +@@ -317,7 +317,7 @@ void KisConvolutionPainterTest::testGaus + + + qreal horizontalRadius = 5, verticalRadius = 5; +- ++ + for(int i = 0; i < 3 ; i++, horizontalRadius+=5, verticalRadius+=5) + { + QTime timer; +--- a/krita/plugins/extensions/dockers/advancedcolorselector/kis_color_selector_ring.cpp ++++ b/krita/plugins/extensions/dockers/advancedcolorselector/kis_color_selector_ring.cpp +@@ -21,7 +21,6 @@ + #include + + #include +-using namespace Eigen; + #include + + #include "KoColor.h" +@@ -53,10 +52,10 @@ bool KisColorSelectorRing::containsPoint + int innerRadiusSquared = innerRadius(); + outerRadiusSquared*=outerRadiusSquared; + innerRadiusSquared*=innerRadiusSquared; +- +- +- Vector2i relativeVector(x-width()/2, y-height()/2); +- ++ ++ ++ Eigen::Vector2i relativeVector(x-width()/2, y-height()/2); ++ + if(relativeVector.squaredNorm() < outerRadiusSquared + && relativeVector.squaredNorm() > innerRadiusSquared) { + return true; +@@ -72,13 +71,13 @@ void KisColorSelectorRing::paint(QPainte + colorCache(); + paintCache(); + } +- ++ + int size = qMin(width(), height()); + if(m_cachedSize!=size) { + m_cachedSize=size; + paintCache(); + } +- ++ + painter->drawImage(width()/2-m_pixelCache.width()/2, + height()/2-m_pixelCache.height()/2, + m_pixelCache); +@@ -139,17 +138,17 @@ void KisColorSelectorRing::setColor(cons + void KisColorSelectorRing::paintCache() + { + QImage cache(m_cachedSize, m_cachedSize, QImage::Format_ARGB32_Premultiplied); +- +- Vector2i center(cache.width()/2., cache.height()/2.); +- ++ ++ Eigen::Vector2i center(cache.width()/2., cache.height()/2.); ++ + for(int x=0; x innerRadius()-1) + { +--- a/krita/plugins/filters/blur/kis_gaussian_blur_filter.h ++++ b/krita/plugins/filters/blur/kis_gaussian_blur_filter.h +@@ -26,8 +26,6 @@ + + #include + +-using namespace Eigen; +- + class KisGaussianBlurFilter : public KisFilter + { + public: +--- a/krita/plugins/filters/blur/kis_lens_blur_filter.cpp ++++ b/krita/plugins/filters/blur/kis_lens_blur_filter.cpp +@@ -159,7 +159,7 @@ void KisLensBlurFilter::processImpl(KisP + imagePainter.drawPolygon(transformedIris, Qt::WindingFill); + + // construct kernel from image +- Matrix irisKernel(kernelHeight, kernelWidth); ++ Eigen::Matrix irisKernel(kernelHeight, kernelWidth); + for (int j = 0; j < kernelHeight; ++j) { + for (int i = 0; i < kernelWidth; ++i) { + irisKernel(j, i) = qRed(kernelRepresentation.pixel(i, j)); +--- a/krita/plugins/filters/blur/kis_lens_blur_filter.h ++++ b/krita/plugins/filters/blur/kis_lens_blur_filter.h +@@ -1,4 +1,4 @@ +-/* ++/* + * This file is part of Krita + * + * Copyright (c) 2010 Edward Apap +@@ -27,8 +27,6 @@ + + #include + +-using namespace Eigen; +- + class KisLensBlurFilter : public KisFilter + { + public: +--- a/krita/plugins/filters/blur/kis_motion_blur_filter.cpp ++++ b/krita/plugins/filters/blur/kis_motion_blur_filter.cpp +@@ -113,7 +113,7 @@ void KisMotionBlurFilter::processImpl(Ki + QPointF(kernelWidth / 2 + halfWidth, kernelHeight / 2 - halfHeight)); + + // construct kernel from image +- Matrix motionBlurKernel(kernelHeight, kernelWidth); ++ Eigen::Matrix motionBlurKernel(kernelHeight, kernelWidth); + for (int j = 0; j < kernelHeight; ++j) { + for (int i = 0; i < kernelWidth; ++i) { + motionBlurKernel(j, i) = qRed(kernelRepresentation.pixel(i, j)); +--- a/krita/plugins/filters/blur/kis_motion_blur_filter.h ++++ b/krita/plugins/filters/blur/kis_motion_blur_filter.h +@@ -1,4 +1,4 @@ +-/* ++/* + * This file is part of Krita + * + * Copyright (c) 2010 Edward Apap +@@ -27,8 +27,6 @@ + + #include + +-using namespace Eigen; +- + class KisMotionBlurFilter : public KisFilter + { + public: +--- a/krita/plugins/filters/convolutionfilters/convolutionfilters.cpp ++++ b/krita/plugins/filters/convolutionfilters/convolutionfilters.cpp +@@ -36,8 +36,6 @@ + + #include + +-using namespace Eigen; +- + K_PLUGIN_FACTORY(KritaConvolutionFiltersFactory, registerPlugin();) + K_EXPORT_PLUGIN(KritaConvolutionFiltersFactory("krita")) + +@@ -69,7 +67,7 @@ KisSharpenFilter::KisSharpenFilter() + setSupportsPainting(true); + setShowConfigurationWidget(false); + +- Matrix kernelMatrix(3, 3); ++ Eigen::Matrix kernelMatrix(3, 3); + kernelMatrix << 0, -2, 0, + -2, 11, -2, + 0, -2, 0; +@@ -83,7 +81,7 @@ KisMeanRemovalFilter::KisMeanRemovalFilt + setSupportsPainting(false); + setShowConfigurationWidget(false); + +- Matrix kernelMatrix(3, 3); ++ Eigen::Matrix kernelMatrix(3, 3); + kernelMatrix << -1, -1, -1, + -1, 9, -1, + -1, -1, -1; +@@ -97,7 +95,7 @@ KisEmbossLaplascianFilter::KisEmbossLapl + setSupportsPainting(false); + setShowConfigurationWidget(false); + +- Matrix kernelMatrix(3, 3); ++ Eigen::Matrix kernelMatrix(3, 3); + kernelMatrix << -1, 0, -1, + 0, 4, 0, + -1, 0, -1; +@@ -112,7 +110,7 @@ KisEmbossInAllDirectionsFilter::KisEmbos + setSupportsPainting(false); + setShowConfigurationWidget(false); + +- Matrix kernelMatrix(3, 3); ++ Eigen::Matrix kernelMatrix(3, 3); + kernelMatrix << -1, -1, -1, + -1, 8, -1, + -1, -1, -1; +@@ -127,7 +125,7 @@ KisEmbossHorizontalVerticalFilter::KisEm + setSupportsPainting(false); + setShowConfigurationWidget(false); + +- Matrix kernelMatrix(3, 3); ++ Eigen::Matrix kernelMatrix(3, 3); + kernelMatrix << 0, -1, 0, + -1, 4, -1, + 0, -1, 0; +@@ -142,7 +140,7 @@ KisEmbossVerticalFilter::KisEmbossVertic + setSupportsPainting(false); + setShowConfigurationWidget(false); + +- Matrix kernelMatrix(3, 3); ++ Eigen::Matrix kernelMatrix(3, 3); + kernelMatrix << 0, -1, 0, + 0, 2, 0, + 0, -1, 0; +@@ -157,7 +155,7 @@ KisEmbossHorizontalFilter::KisEmbossHori + setSupportsPainting(false); + setShowConfigurationWidget(false); + +- Matrix kernelMatrix(3, 3); ++ Eigen::Matrix kernelMatrix(3, 3); + kernelMatrix << 0, 0, 0, + -1, 2, -1, + 0, 0, 0; +@@ -172,7 +170,7 @@ KisEmbossDiagonalFilter::KisEmbossDiagon + setSupportsPainting(false); + setShowConfigurationWidget(false); + +- Matrix kernelMatrix(3, 3); ++ Eigen::Matrix kernelMatrix(3, 3); + kernelMatrix << -1, 0, -1, + 0, 4, 0, + -1, 0, -1; +@@ -188,7 +186,7 @@ KisTopEdgeDetectionFilter::KisTopEdgeDet + setSupportsPainting(false); + setShowConfigurationWidget(false); + +- Matrix kernelMatrix(3, 3); ++ Eigen::Matrix kernelMatrix(3, 3); + kernelMatrix << 1, 1, 1, + 0, 0, 0, + -1, -1, -1; +@@ -203,7 +201,7 @@ KisRightEdgeDetectionFilter::KisRightEdg + setSupportsPainting(false); + setShowConfigurationWidget(false); + +- Matrix kernelMatrix(3, 3); ++ Eigen::Matrix kernelMatrix(3, 3); + kernelMatrix << -1, 0, 1, + -1, 0, 1, + -1, 0, 1; +@@ -217,7 +215,7 @@ KisBottomEdgeDetectionFilter::KisBottomE + setSupportsPainting(false); + setShowConfigurationWidget(false); + +- Matrix kernelMatrix(3, 3); ++ Eigen::Matrix kernelMatrix(3, 3); + kernelMatrix << -1, -1, -1, + 0, 0, 0, + 1, 1, 1; +@@ -231,7 +229,7 @@ KisLeftEdgeDetectionFilter::KisLeftEdgeD + setSupportsPainting(false); + setShowConfigurationWidget(false); + +- Matrix kernelMatrix(3, 3); ++ Eigen::Matrix kernelMatrix(3, 3); + kernelMatrix << 1, 0, -1, + 1, 0, -1, + 1, 0, -1; diff -Nru calligra-2.9.7/debian/patches/fix_fbtfs_armfh_opengl.diff calligra-2.9.11/debian/patches/fix_fbtfs_armfh_opengl.diff --- calligra-2.9.7/debian/patches/fix_fbtfs_armfh_opengl.diff 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/debian/patches/fix_fbtfs_armfh_opengl.diff 2016-10-12 20:17:50.000000000 +0000 @@ -0,0 +1,12 @@ +--- a/krita/ui/canvas/kis_canvas2.cpp ++++ b/krita/ui/canvas/kis_canvas2.cpp +@@ -406,7 +406,9 @@ void KisCanvas2::createOpenGLCanvas() + void KisCanvas2::createCanvas(bool useOpenGL) + { + m_d->prescaledProjection = 0; ++#ifdef HAVE_OPENGL + m_d->openGLImageTextures = 0; ++#endif + + KisConfig cfg; + QDesktopWidget dw; diff -Nru calligra-2.9.7/debian/patches/series calligra-2.9.11/debian/patches/series --- calligra-2.9.7/debian/patches/series 2015-11-25 08:22:18.000000000 +0000 +++ calligra-2.9.11/debian/patches/series 2016-10-12 20:17:50.000000000 +0000 @@ -3,4 +3,7 @@ xbase64.diff kubuntu_qtquick-plugin-directory.diff libwps-0.4.diff -upstream_qmax.diff +dont_use_eigen3_namespace.diff +upstream_fix-arm-FTBFS.patch +upstream_Fix-compilation-of-PsCommentLexer.cpp-on-platforms-w.patch +fix_fbtfs_armfh_opengl.diff diff -Nru calligra-2.9.7/debian/patches/upstream_fix-arm-FTBFS.patch calligra-2.9.11/debian/patches/upstream_fix-arm-FTBFS.patch --- calligra-2.9.7/debian/patches/upstream_fix-arm-FTBFS.patch 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/debian/patches/upstream_fix-arm-FTBFS.patch 2016-10-12 20:17:50.000000000 +0000 @@ -0,0 +1,25 @@ +From 04d61e92515f19cbd2dbb0cc06d4340ba4514a8a Mon Sep 17 00:00:00 2001 +From: Rex Dieter +Date: Sat, 11 Jun 2016 09:49:41 -0500 +Subject: [PATCH] fix arm FTBFS + +--- + libs/flake/KoSnapStrategy.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libs/flake/KoSnapStrategy.cpp b/libs/flake/KoSnapStrategy.cpp +index fd9de8e..e644e35 100644 +--- a/libs/flake/KoSnapStrategy.cpp ++++ b/libs/flake/KoSnapStrategy.cpp +@@ -181,7 +181,7 @@ bool ExtensionSnapStrategy::snap(const QPointF &mousePosition, KoSnapProxy * pro + Q_ASSERT(isfinite(maxSnapDistance)); + + const qreal maxDistance = maxSnapDistance * maxSnapDistance; +- qreal minDistances[2] = { HUGE_VAL, HUGE_VAL }; ++ qreal minDistances[2] = { (qreal)HUGE_VAL, (qreal)HUGE_VAL }; + + QPointF snappedPoints[2] = { mousePosition, mousePosition }; + QPointF startPoints[2]; +-- +2.9.3 + diff -Nru calligra-2.9.7/debian/patches/upstream_Fix-compilation-of-PsCommentLexer.cpp-on-platforms-w.patch calligra-2.9.11/debian/patches/upstream_Fix-compilation-of-PsCommentLexer.cpp-on-platforms-w.patch --- calligra-2.9.7/debian/patches/upstream_Fix-compilation-of-PsCommentLexer.cpp-on-platforms-w.patch 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/debian/patches/upstream_Fix-compilation-of-PsCommentLexer.cpp-on-platforms-w.patch 2016-10-12 20:17:50.000000000 +0000 @@ -0,0 +1,29 @@ +From 956bb80db4f300e4f8edeaf19d24fd61eb1932b2 Mon Sep 17 00:00:00 2001 +From: "Friedrich W. H. Kossebau" +Date: Mon, 31 Aug 2015 13:47:07 +0200 +Subject: [PATCH] Fix compilation of PsCommentLexer.cpp on platforms where char + is unsigned + +REVIEW: 124883 + +Thanks Tom Hall for the fix +--- + filters/karbon/eps/PsCommentLexer.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/filters/karbon/eps/PsCommentLexer.cpp b/filters/karbon/eps/PsCommentLexer.cpp +index 6487df6..dd928d6 100644 +--- a/filters/karbon/eps/PsCommentLexer.cpp ++++ b/filters/karbon/eps/PsCommentLexer.cpp +@@ -63,7 +63,7 @@ const char*statetoa(State state) + + typedef struct { + State oldState; +- char c; ++ signed char c; + State newState; + Action action; + } Transition; +-- +2.9.3 + diff -Nru calligra-2.9.7/debian/patches/upstream_qmax.diff calligra-2.9.11/debian/patches/upstream_qmax.diff --- calligra-2.9.7/debian/patches/upstream_qmax.diff 2015-11-25 08:22:18.000000000 +0000 +++ calligra-2.9.11/debian/patches/upstream_qmax.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -commit d0a0a91947dbd40ae13af0f960ef0705825c0a5c -Author: Rex Dieter -Date: Fri Sep 4 07:45:53 2015 -0500 - - fix arm FTBFS (and qreal != double assumptions) - -diff --git a/krita/plugins/paintops/chalk/kis_chalk_paintop_settings.cpp b/krita/plugins/paintops/chalk/kis_chalk_paintop_settings.cpp -index 5b1eddd..f6cfd67 100644 ---- a/krita/plugins/paintops/chalk/kis_chalk_paintop_settings.cpp -+++ b/krita/plugins/paintops/chalk/kis_chalk_paintop_settings.cpp -@@ -51,7 +51,7 @@ QPainterPath KisChalkPaintOpSettings::brushOutline(const KisPaintInformation &in - - QPainterPath tiltLine; - QLineF tiltAngle(QPointF(0.0,0.0), QPointF(0.0,size)); -- tiltAngle.setLength(qMax(size*0.5, qreal(50.0)) * (1 - info.tiltElevation(info, 60.0, 60.0, true))); -+ tiltAngle.setLength(qMax(size*qreal(0.5), qreal(50.0)) * (1 - info.tiltElevation(info, 60.0, 60.0, true))); - tiltAngle.setAngle((360.0 - fmod(KisPaintInformation::tiltDirection(info, true) * 360.0 + 270.0, 360.0))-3.0); - tiltLine.moveTo(tiltAngle.p1()); - tiltLine.lineTo(tiltAngle.p2()); -diff --git a/krita/plugins/paintops/libpaintop/kis_brush_based_paintop_settings.cpp b/krita/plugins/paintops/libpaintop/kis_brush_based_paintop_settings.cpp -index fe1f24d..1798805 100644 ---- a/krita/plugins/paintops/libpaintop/kis_brush_based_paintop_settings.cpp -+++ b/krita/plugins/paintops/libpaintop/kis_brush_based_paintop_settings.cpp -@@ -73,7 +73,7 @@ QPainterPath KisBrushBasedPaintOpSettings::brushOutlineImpl(const KisPaintInform - QPainterPath realOutline = brush->outline(); - QPainterPath tiltLine; - QLineF tiltAngle(realOutline.boundingRect().center(), realOutline.boundingRect().topLeft()); -- tiltAngle.setLength(qMax(realOutline.boundingRect().width()*0.5, qreal(50.0)) * (1 - info.tiltElevation(info, 60.0, 60.0, true))); -+ tiltAngle.setLength(qMax(realOutline.boundingRect().width()*qreal(0.5), qreal(50.0)) * (1 - info.tiltElevation(info, 60.0, 60.0, true))); - tiltAngle.setAngle((360.0 - fmod(KisPaintInformation::tiltDirection(info, true) * 360.0 + 270.0, 360.0))-3.0); - tiltLine.moveTo(tiltAngle.p1()); - tiltLine.lineTo(tiltAngle.p2()); -diff --git a/krita/plugins/paintops/sketch/kis_sketch_paintop_settings.cpp b/krita/plugins/paintops/sketch/kis_sketch_paintop_settings.cpp -index 4af0b39..8136c60 100644 ---- a/krita/plugins/paintops/sketch/kis_sketch_paintop_settings.cpp -+++ b/krita/plugins/paintops/sketch/kis_sketch_paintop_settings.cpp -@@ -62,7 +62,7 @@ QPainterPath KisSketchPaintOpSettings::brushOutline(const KisPaintInformation &i - path = ellipseOutline(diameter, diameter, 1.0, 0.0/*brush->scale(), brush->angle()*/); - QPainterPath tiltLine; - QLineF tiltAngle(path.boundingRect().center(), path.boundingRect().topLeft()); -- tiltAngle.setLength(qMax(diameter*0.5, qreal(50.0)) * (1 - info.tiltElevation(info, 60.0, 60.0, true))); -+ tiltAngle.setLength(qMax(diameter*qreal(0.5), qreal(50.0)) * (1 - info.tiltElevation(info, 60.0, 60.0, true))); - tiltAngle.setAngle((360.0 - fmod(KisPaintInformation::tiltDirection(info, true) * 360.0 + 270.0, 360.0))-3.0); - tiltLine.moveTo(tiltAngle.p1()); - tiltLine.lineTo(tiltAngle.p2()); diff -Nru calligra-2.9.7/debian/rules calligra-2.9.11/debian/rules --- calligra-2.9.7/debian/rules 2015-11-25 08:22:18.000000000 +0000 +++ calligra-2.9.11/debian/rules 2016-10-12 20:17:50.000000000 +0000 @@ -1,4 +1,6 @@ #!/usr/bin/make -f +export QT_SELECT=4 +include /usr/share/pkg-kde-tools/qt-kde-team/2/debian-qt-kde.mk lib_pkgs := calligra-libs @@ -11,23 +13,21 @@ dh $@ --parallel --with kde --with sodeps override_dh_auto_configure: - dh_auto_configure -Skde -- -DKDE4_BUILD_TESTS=OFF -DPRODUCTSET=ALL + dh_auto_configure -Skde -- -DKDE4_BUILD_TESTS=OFF -DPRODUCTSET=DESKTOP override_dh_install: dh_movelibkdeinit dh_install --list-missing - #lut and open gl are !arm, this needs made more eloquent -ifeq ($(DEB_HOST_ARCH),i386) - dh_install --autodest -pkrita usr/lib/kde4/kritalutdocker.so - dh_install --autodest -pkrita usr/share/kde4/services/calligra/krita_lutdocker.desktop -endif -ifeq ($(DEB_HOST_ARCH),amd64) + # On armhf we are building without OpenGL support +ifneq ($(DEB_HOST_ARCH),armhf) dh_install --autodest -pkrita usr/lib/kde4/kritalutdocker.so dh_install --autodest -pkrita usr/share/kde4/services/calligra/krita_lutdocker.desktop + dh_install --autodest -pkrita usr/lib/calligra/imports/org/krita/draganddrop/libdraganddropplugin.so + dh_install --autodest -pkrita usr/lib/calligra/imports/org/krita/draganddrop/qmldir endif override_dh_strip: - dh_strip --dbg-package=calligra-dbg + dh_strip --dbgsym-migration='calligra-dbg (<< 1:2.9.11)' override_dh_shlibdeps: dh_shlibdeps $(addprefix -p,$(lib_pkgs)) -- -xkde-runtime -xkdepim-runtime diff -Nru calligra-2.9.7/devtools/scripts/CMakeLists.txt calligra-2.9.11/devtools/scripts/CMakeLists.txt --- calligra-2.9.7/devtools/scripts/CMakeLists.txt 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/devtools/scripts/CMakeLists.txt 2016-02-02 16:57:46.000000000 +0000 @@ -4,7 +4,6 @@ # Stores the list of all files from PATH_TO_TEST_FILES in the variable list_of_test_files set(PATH_TO_TEST_FILES "" CACHE FILEPATH "This variable is used to set the path to the calligra conversion and validation test files - used under calligra/tools/scripts/") -message( status ${PATH_TO_TEST_FILES} ) if ( EXISTS ${PATH_TO_TEST_FILES} ) file(GLOB_RECURSE list_of_test_files RELATIVE ${PATH_TO_TEST_FILES} "${PATH_TO_TEST_FILES}/*") Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/doc/calligra/index.cache.bz2 and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/doc/calligra/index.cache.bz2 differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/doc/kexi/index.cache.bz2 and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/doc/kexi/index.cache.bz2 differ diff -Nru calligra-2.9.7/extras/okularodpgenerator/libokularGenerator_odp.desktop calligra-2.9.11/extras/okularodpgenerator/libokularGenerator_odp.desktop --- calligra-2.9.7/extras/okularodpgenerator/libokularGenerator_odp.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/extras/okularodpgenerator/libokularGenerator_odp.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -11,8 +11,6 @@ Name[es]=Documento de presentación OpenDocument Name[et]=OpenDocumenti esitlusdokument Name[eu]=OpenDocument aurkezpen-dokumentua -Name[fi]=OpenDocument-esitystiedosto -Name[fr]=Présentation OpenDocument Name[ga]=Cáipéis Láithreoireachta OpenDocument Name[gl]=Documento de presentación OpenDocument Name[hu]=OpenDocument bemutató @@ -43,7 +41,6 @@ Comment[bs]=Odp za okular Comment[ca]=ODP per a l'Okular Comment[ca@valencia]=ODP per a l'Okular -Comment[cs]=Odp pro Okular Comment[da]=ODP til Okular Comment[de]=ODP für Okular Comment[el]=Odp για το okular @@ -51,8 +48,6 @@ Comment[es]=Odp para Okular Comment[et]=ODP Okularile Comment[eu]=ODP Okular-erako -Comment[fi]=ODP Okulariin -Comment[fr]=ODP pour Okular Comment[ga]=Odp le haghaidh okular Comment[gl]=ODP para Okular Comment[hu]=ODP az Okularhoz diff -Nru calligra-2.9.7/extras/okularodtgenerator/libokularGenerator_odt.desktop calligra-2.9.11/extras/okularodtgenerator/libokularGenerator_odt.desktop --- calligra-2.9.7/extras/okularodtgenerator/libokularGenerator_odt.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/extras/okularodtgenerator/libokularGenerator_odt.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,14 +3,13 @@ Name=OpenDocument Text Document Name[bs]=OtvoriDokument tekstualni dokument Name[ca]=Document de text OpenDocument -Name[cs]=Textový dokument OpenDocument +Name[ca@valencia]=Document de text OpenDocument Name[da]=OpenDocument tekstdokument Name[de]=OpenDocument-Text-Dokument Name[en_GB]=OpenDocument Text Document Name[es]=Documento de texto OpenDocument Name[et]=OpenDocumenti tekstidokument -Name[fi]=OpenDocument-tekstitiedosto -Name[fr]=Document texte OpenDocument +Name[gl]=Documento de texto de OpenDocument Name[ia]=Documento de texto de OpenDocument Name[it]=Documento di testo OpenDocument Name[ja]=OpenDocument テキスト文書 @@ -27,16 +26,15 @@ Comment=Odt for okular Comment[bs]=Odt za okular Comment[ca]=ODT per a l'Okular -Comment[cs]=Odt pro Okular +Comment[ca@valencia]=ODT per a l'Okular Comment[da]=Odt til okular Comment[de]=Odt für Okular -Comment[en_GB]=ODT for okular +Comment[en_GB]=Odt for okular Comment[es]=Odt para Okular Comment[et]=ODT Okularile -Comment[fi]=ODT Okulariin -Comment[fr]=ODP pour Okular +Comment[gl]=ODT para Okular. Comment[ia]=Odt pro Okular -Comment[it]=Odt per Okular +Comment[it]=ODT per Okular Comment[ja]=Okular 用 ODT Comment[nb]=Odt for Okular Comment[nl]=Odt voor okular diff -Nru calligra-2.9.7/extras/okularodtgenerator/OkularOdtGenerator.cpp calligra-2.9.11/extras/okularodtgenerator/OkularOdtGenerator.cpp --- calligra-2.9.7/extras/okularodtgenerator/OkularOdtGenerator.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/extras/okularodtgenerator/OkularOdtGenerator.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,7 @@ /* This file is part of the KDE project Copyright (C) 2010 KO GmbH Copyright (C) 2012 Sven Langkamp + Copyright (C) 2015-2016 Friedrich W. H. Kossebau This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -75,18 +76,24 @@ static Okular::DocumentViewport calculateViewport( const QTextBlock &block, KoTextDocumentLayout* textDocumentLayout ) { - KoTextLayoutRootArea *a = textDocumentLayout->rootAreaForPosition(block.position()); + KoTextLayoutRootArea *rootArea = textDocumentLayout->rootAreaForPosition(block.position()); + + QRectF rect = textDocumentLayout->blockBoundingRect( block ); + rect.translate(-(rootArea->referenceRect().topLeft())); + + KoShape *shape = rootArea->associatedShape(); + rect.translate(shape->absolutePosition(KoFlake::TopLeftCorner)); + + KWPage* page = static_cast(rootArea->page()); + rect.translate(static_cast(0.0), -(page->offsetInDocument())); - const QRectF rect = textDocumentLayout->blockBoundingRect( block ); - KWPage* page = static_cast(a->page()); const qreal pageHeight = page->height(); const qreal pageWidth = page->width(); const int pageNumber = page->pageNumber(); - const int yOffset = qRound( rect.y() - a->referenceRect().y() ); Okular::DocumentViewport viewport( pageNumber-1 ); - viewport.rePos.normalizedX = (double)rect.x() / (double)pageWidth; - viewport.rePos.normalizedY = (double)yOffset / (double)pageHeight; + viewport.rePos.normalizedX = static_cast(rect.x()) / static_cast(pageWidth); + viewport.rePos.normalizedY = static_cast(rect.y()) / static_cast(pageHeight); viewport.rePos.enabled = true; viewport.rePos.pos = Okular::DocumentViewport::TopLeft; @@ -165,46 +172,41 @@ QStack< QPair > parentNodeStack; parentNodeStack.push( qMakePair( 0, parentNode ) ); - KoTextDocumentLayout* textDocumentayout = static_cast(m_doc->mainFrameSet()->document()->documentLayout()); + QTextDocument* textDocument = m_doc->mainFrameSet()->document(); + KoTextDocumentLayout* textDocumentLayout = static_cast(textDocument->documentLayout()); - foreach (KWFrameSet *fs, m_doc->frameSets()) { - KWTextFrameSet *tfs = dynamic_cast(fs); - if (tfs == 0) continue; - - QTextDocument *doc = tfs->document(); - QTextBlock block = doc->begin(); - while (block.isValid()) { - int blockLevel = block.blockFormat().intProperty(KoParagraphStyle::OutlineLevel); - - // no blockLevel? - if (blockLevel == 0) { - block = block.next(); - continue; - } + QTextBlock block = textDocument->begin(); + for (; block.isValid(); block = block.next()) { + int blockLevel = 0; + if (block.blockFormat().hasProperty(KoParagraphStyle::OutlineLevel)) { + blockLevel = block.blockFormat().intProperty(KoParagraphStyle::OutlineLevel); + } + + // no blockLevel yet? + if (blockLevel == 0) { + continue; + } - Okular::DocumentViewport viewport = calculateViewport( block, textDocumentayout ); + Okular::DocumentViewport viewport = calculateViewport( block, textDocumentLayout ); - QDomElement item = m_documentSynopsis.createElement( block.text() ); - item.setAttribute( "Viewport", viewport.toString() ); + QDomElement item = m_documentSynopsis.createElement( block.text() ); + item.setAttribute( "Viewport", viewport.toString() ); - // we need a parent, which has to be at a higher heading level than this heading level - // so we just work through the stack - while ( ! parentNodeStack.isEmpty() ) { - int parentLevel = parentNodeStack.top().first; - if ( parentLevel < blockLevel ) { - // this is OK as a parent - parentNode = parentNodeStack.top().second; - break; - } else { - // we'll need to be further into the stack - parentNodeStack.pop(); - } + // we need a parent, which has to be at a higher heading level than this heading level + // so we just work through the stack + while ( ! parentNodeStack.isEmpty() ) { + int parentLevel = parentNodeStack.top().first; + if ( parentLevel < blockLevel ) { + // this is OK as a parent + parentNode = parentNodeStack.top().second; + break; + } else { + // we'll need to be further into the stack + parentNodeStack.pop(); } - parentNode.appendChild( item ); - parentNodeStack.push( qMakePair( blockLevel, QDomNode(item) ) ); - - block = block.next(); } + parentNode.appendChild( item ); + parentNodeStack.push( qMakePair( blockLevel, QDomNode(item) ) ); } return true; diff -Nru calligra-2.9.7/extras/properties/CMakeLists.txt calligra-2.9.11/extras/properties/CMakeLists.txt --- calligra-2.9.7/extras/properties/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/extras/properties/CMakeLists.txt 2016-02-02 19:53:13.000000000 +0000 @@ -6,7 +6,7 @@ kde4_add_plugin(calligradocinfopropspage ${calligradocinfopropspage_PART_SRCS}) -target_link_libraries(calligradocinfopropspage ${KDE4_KFILE_LIBS} kowidgets) +target_link_libraries(calligradocinfopropspage ${KDE4_KFILE_LIBS} ${KDE4_KIO_LIBS} kowidgets) install(TARGETS calligradocinfopropspage DESTINATION ${PLUGIN_INSTALL_DIR}) diff -Nru calligra-2.9.7/extras/quickprint/krita_print.desktop calligra-2.9.11/extras/quickprint/krita_print.desktop --- calligra-2.9.7/extras/quickprint/krita_print.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/extras/quickprint/krita_print.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -12,7 +12,6 @@ Name[bs]=Štampaj... Name[ca]=Imprimeix... Name[ca@valencia]=Imprimeix... -Name[cs]=Tisk... Name[cy]=Argraffu... Name[da]=Udskriv... Name[de]=Drucken ... @@ -23,8 +22,6 @@ Name[et]=Trükkimine... Name[eu]=Inprimatu... Name[fa]=چاپ... -Name[fi]=Tulosta… -Name[fr]=Impression... Name[fy]=Printsje... Name[ga]=Priontáil... Name[gl]=Imprimir… diff -Nru calligra-2.9.7/filters/flow/wpg/import/calligra_filter_wpg2odg.desktop calligra-2.9.11/filters/flow/wpg/import/calligra_filter_wpg2odg.desktop --- calligra-2.9.7/filters/flow/wpg/import/calligra_filter_wpg2odg.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/flow/wpg/import/calligra_filter_wpg2odg.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -14,6 +14,7 @@ Name[eu]=Flow-ren WPG inportazio-iragazkia Name[fi]=Flow’n WPG-tuontisuodatin Name[fr]=Filtre d'importation WPG +Name[gl]=Filtro para Flow de importación de WPG Name[hu]=Flow WPG importszűrő Name[it]=Filtro di importazione WPG per Flow Name[ja]=Flow WPG インポートフィルタ diff -Nru calligra-2.9.7/filters/karbon/image/calligra_filter_karbon2image.desktop calligra-2.9.11/filters/karbon/image/calligra_filter_karbon2image.desktop --- calligra-2.9.7/filters/karbon/image/calligra_filter_karbon2image.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/karbon/image/calligra_filter_karbon2image.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -2,12 +2,14 @@ Type=Service Name=Karbon JPEG/PNG Export Filter Name[ca]=Filtre d'exportació JPEG/PNG per al Karbon +Name[ca@valencia]=Filtre d'exportació JPEG/PNG per al Karbon Name[cs]=Exportní filtr do formátu JPEG/PNG pro Karbon Name[de]=Karbon JPEG-/PNG-Exportfilter Name[en_GB]=Karbon JPEG/PNG Export Filter Name[es]=Filtro de Karbon de exportación a JPEG/PNG Name[et]=Karboni JPEG/PNG ekspordifilter Name[fi]=Karbonin JPEG/PNG-vientisuodatin +Name[gl]=Filtro para Karbon de exportación de JPEG e PNG Name[it]=Filtro di esportazione JPEG/PNG per Karbon Name[ja]=Karbon JPEG/PNG エクスポートフィルタ Name[nb]=JPEG/PNG-eksportfilter for Karbon diff -Nru calligra-2.9.7/filters/karbon/karbon1.x/karbon_karbon1x_thumbnail.desktop calligra-2.9.11/filters/karbon/karbon1.x/karbon_karbon1x_thumbnail.desktop --- calligra-2.9.7/filters/karbon/karbon1.x/karbon_karbon1x_thumbnail.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/karbon/karbon1.x/karbon_karbon1x_thumbnail.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -3,7 +3,7 @@ Name=Karbon 14 Drawings Name[bs]=Karbon 14 crteži Name[ca]=Dibuixos del Karbon 14 -Name[ca@valencia]=Dibuixos del Karbon 14 +Name[ca@valencia]=Dibuixos del Karbon 14 Name[cs]=Kresby Karbon 14 Name[da]=Karbon 14-tegninger Name[de]=Karbon 14 Zeichnungen diff -Nru calligra-2.9.7/filters/karbon/xfig/karbon_xfig_thumbnail.desktop calligra-2.9.11/filters/karbon/xfig/karbon_xfig_thumbnail.desktop --- calligra-2.9.7/filters/karbon/xfig/karbon_xfig_thumbnail.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/karbon/xfig/karbon_xfig_thumbnail.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -3,7 +3,7 @@ Name=XFig Images Name[bs]=XFig slike Name[ca]=Imatges del XFig -Name[ca@valencia]=Imatges de l'XFig +Name[ca@valencia]=Imatges del XFig Name[cs]=Obrázky XFig Name[da]=XFig-billeder Name[de]=XFig-Bilder diff -Nru calligra-2.9.7/filters/libmsooxml/KoOdfExporter.cpp calligra-2.9.11/filters/libmsooxml/KoOdfExporter.cpp --- calligra-2.9.7/filters/libmsooxml/KoOdfExporter.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libmsooxml/KoOdfExporter.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -41,7 +41,7 @@ //------------------------------------------ -class Q_DECL_HIDDEN KoOdfExporter::Private +class KoOdfExporter::Private { public: Private() {} diff -Nru calligra-2.9.7/filters/libmsooxml/MsooXmlRelationships.cpp calligra-2.9.11/filters/libmsooxml/MsooXmlRelationships.cpp --- calligra-2.9.7/filters/libmsooxml/MsooXmlRelationships.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libmsooxml/MsooXmlRelationships.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -30,7 +30,7 @@ using namespace MSOOXML; -class Q_DECL_HIDDEN MsooXmlRelationships::Private +class MsooXmlRelationships::Private { public: Private() diff -Nru calligra-2.9.7/filters/libmsooxml/VmlDrawingReader.cpp calligra-2.9.11/filters/libmsooxml/VmlDrawingReader.cpp --- calligra-2.9.7/filters/libmsooxml/VmlDrawingReader.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libmsooxml/VmlDrawingReader.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -43,7 +43,7 @@ { } -class Q_DECL_HIDDEN VmlDrawingReader::Private +class VmlDrawingReader::Private { public: Private() { diff -Nru calligra-2.9.7/filters/libodf2/KoOdfGraphicProperties.cpp calligra-2.9.11/filters/libodf2/KoOdfGraphicProperties.cpp --- calligra-2.9.7/filters/libodf2/KoOdfGraphicProperties.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodf2/KoOdfGraphicProperties.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -37,7 +37,7 @@ // private class -class Q_DECL_HIDDEN KoOdfGraphicProperties::Private +class KoOdfGraphicProperties::Private { public: Private() {}; diff -Nru calligra-2.9.7/filters/libodf2/KoOdfHeaderFooterProperties.cpp calligra-2.9.11/filters/libodf2/KoOdfHeaderFooterProperties.cpp --- calligra-2.9.7/filters/libodf2/KoOdfHeaderFooterProperties.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodf2/KoOdfHeaderFooterProperties.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -37,7 +37,7 @@ // private class -class Q_DECL_HIDDEN KoOdfHeaderFooterProperties::Private +class KoOdfHeaderFooterProperties::Private { public: Private() {}; diff -Nru calligra-2.9.7/filters/libodf2/KoOdfListLevelProperties.cpp calligra-2.9.11/filters/libodf2/KoOdfListLevelProperties.cpp --- calligra-2.9.7/filters/libodf2/KoOdfListLevelProperties.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodf2/KoOdfListLevelProperties.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -37,7 +37,7 @@ // private class -class Q_DECL_HIDDEN KoOdfListLevelProperties::Private +class KoOdfListLevelProperties::Private { public: Private() diff -Nru calligra-2.9.7/filters/libodf2/KoOdfListStyle.cpp calligra-2.9.11/filters/libodf2/KoOdfListStyle.cpp --- calligra-2.9.7/filters/libodf2/KoOdfListStyle.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodf2/KoOdfListStyle.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -38,7 +38,7 @@ // ================================================================ // class KoOdfListStyle -class Q_DECL_HIDDEN KoOdfListStyle::Private +class KoOdfListStyle::Private { public: Private(); diff -Nru calligra-2.9.7/filters/libodf2/KoOdfPageLayout.cpp calligra-2.9.11/filters/libodf2/KoOdfPageLayout.cpp --- calligra-2.9.7/filters/libodf2/KoOdfPageLayout.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodf2/KoOdfPageLayout.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -40,7 +40,7 @@ // class KoOdfPageLayout -class Q_DECL_HIDDEN KoOdfPageLayout::Private +class KoOdfPageLayout::Private { public: Private(); diff -Nru calligra-2.9.7/filters/libodf2/KoOdfPageLayoutProperties.cpp calligra-2.9.11/filters/libodf2/KoOdfPageLayoutProperties.cpp --- calligra-2.9.7/filters/libodf2/KoOdfPageLayoutProperties.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodf2/KoOdfPageLayoutProperties.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -37,7 +37,7 @@ // private class -class Q_DECL_HIDDEN KoOdfPageLayoutProperties::Private +class KoOdfPageLayoutProperties::Private { public: Private() {}; diff -Nru calligra-2.9.7/filters/libodf2/KoOdfParagraphProperties.cpp calligra-2.9.11/filters/libodf2/KoOdfParagraphProperties.cpp --- calligra-2.9.7/filters/libodf2/KoOdfParagraphProperties.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodf2/KoOdfParagraphProperties.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -37,7 +37,7 @@ // private class -class Q_DECL_HIDDEN KoOdfParagraphProperties::Private +class KoOdfParagraphProperties::Private { public: Private(); diff -Nru calligra-2.9.7/filters/libodf2/KoOdfStyleBase.cpp calligra-2.9.11/filters/libodf2/KoOdfStyleBase.cpp --- calligra-2.9.7/filters/libodf2/KoOdfStyleBase.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodf2/KoOdfStyleBase.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -40,7 +40,7 @@ // class KoOdfStyleBase -class Q_DECL_HIDDEN KoOdfStyleBase::Private +class KoOdfStyleBase::Private { public: Private(KoOdfStyleBase::StyleType type); diff -Nru calligra-2.9.7/filters/libodf2/KoOdfStyle.cpp calligra-2.9.11/filters/libodf2/KoOdfStyle.cpp --- calligra-2.9.7/filters/libodf2/KoOdfStyle.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodf2/KoOdfStyle.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -40,7 +40,7 @@ // class KoOdfStyle -class Q_DECL_HIDDEN KoOdfStyle::Private +class KoOdfStyle::Private { public: Private(); diff -Nru calligra-2.9.7/filters/libodf2/KoOdfStyleManager.cpp calligra-2.9.11/filters/libodf2/KoOdfStyleManager.cpp --- calligra-2.9.7/filters/libodf2/KoOdfStyleManager.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodf2/KoOdfStyleManager.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -43,7 +43,7 @@ // class KoOdfStyleManager -class Q_DECL_HIDDEN KoOdfStyleManager::Private +class KoOdfStyleManager::Private { public: Private() {}; diff -Nru calligra-2.9.7/filters/libodf2/KoOdfStyleProperties.cpp calligra-2.9.11/filters/libodf2/KoOdfStyleProperties.cpp --- calligra-2.9.7/filters/libodf2/KoOdfStyleProperties.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodf2/KoOdfStyleProperties.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -34,7 +34,7 @@ // private class -class Q_DECL_HIDDEN KoOdfStyleProperties::Private +class KoOdfStyleProperties::Private { public: Private() {}; diff -Nru calligra-2.9.7/filters/libodf2/KoOdfTextProperties.cpp calligra-2.9.11/filters/libodf2/KoOdfTextProperties.cpp --- calligra-2.9.7/filters/libodf2/KoOdfTextProperties.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodf2/KoOdfTextProperties.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -37,7 +37,7 @@ // private class -class Q_DECL_HIDDEN KoOdfTextProperties::Private +class KoOdfTextProperties::Private { public: Private() {}; diff -Nru calligra-2.9.7/filters/libodf2/KoXmlStreamReader.cpp calligra-2.9.11/filters/libodf2/KoXmlStreamReader.cpp --- calligra-2.9.7/filters/libodf2/KoXmlStreamReader.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodf2/KoXmlStreamReader.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -35,7 +35,7 @@ // class KoXmlStreamReader and Private class -class Q_DECL_HIDDEN KoXmlStreamReader::Private +class KoXmlStreamReader::Private { public: Private(KoXmlStreamReader *qq); @@ -406,7 +406,7 @@ // class KoXmlStreamAttribute and Private class -class Q_DECL_HIDDEN KoXmlStreamAttribute::Private +class KoXmlStreamAttribute::Private { public: Private(const QXmlStreamAttribute *attr, const KoXmlStreamReader *r); @@ -564,7 +564,7 @@ // class KoXmlStreamAttributes and Private class -class Q_DECL_HIDDEN KoXmlStreamAttributes::Private : public QSharedData +class KoXmlStreamAttributes::Private : public QSharedData { public: Private(const KoXmlStreamReader *r, const QXmlStreamAttributes &qa); diff -Nru calligra-2.9.7/filters/libodfreader/OdfReaderContext.cpp calligra-2.9.11/filters/libodfreader/OdfReaderContext.cpp --- calligra-2.9.7/filters/libodfreader/OdfReaderContext.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodfreader/OdfReaderContext.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -34,7 +34,7 @@ // class OdfReaderContext::Private -class Q_DECL_HIDDEN OdfReaderContext::Private +class OdfReaderContext::Private { public: Private(KoStore *store); diff -Nru calligra-2.9.7/filters/libodfreader/OdfTextReaderBackend.cpp calligra-2.9.11/filters/libodfreader/OdfTextReaderBackend.cpp --- calligra-2.9.7/filters/libodfreader/OdfTextReaderBackend.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodfreader/OdfTextReaderBackend.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -33,7 +33,7 @@ // class OdfTextReaderBackend::Private -class Q_DECL_HIDDEN OdfTextReaderBackend::Private +class OdfTextReaderBackend::Private { public: Private(); diff -Nru calligra-2.9.7/filters/libodfreader/OdtReaderBackend.cpp calligra-2.9.11/filters/libodfreader/OdtReaderBackend.cpp --- calligra-2.9.7/filters/libodfreader/OdtReaderBackend.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/libodfreader/OdtReaderBackend.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -33,7 +33,7 @@ // class OdtReaderBackend::Private -class Q_DECL_HIDDEN OdtReaderBackend::Private +class OdtReaderBackend::Private { public: Private(); diff -Nru calligra-2.9.7/filters/plan/mpxj/import/calligra_filter_mpp2plan.desktop calligra-2.9.11/filters/plan/mpxj/import/calligra_filter_mpp2plan.desktop --- calligra-2.9.7/filters/plan/mpxj/import/calligra_filter_mpp2plan.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/plan/mpxj/import/calligra_filter_mpp2plan.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -4,7 +4,6 @@ Name[bs]=MS Project uvozni filter Name[ca]=Filtre d'importació de MS Project Name[ca@valencia]=Filtre d'importació de MS Project -Name[cs]=Importní filtr MS Project Name[da]=MS Project-importfilter Name[de]=MS-Projekt-Importfilter Name[el]=Φίλτρο εισαγωγής MS Project @@ -13,7 +12,6 @@ Name[et]=MS Projecti impordifilter Name[eu]=MS Project inportazio-iragazkia Name[fi]=MS Project -tuontisuodatin -Name[fr]=Filtre d'importation MS Project Name[gl]=Filtro de importación de MS Project Name[hu]=MS Projekt importszűrő Name[it]=Filtro di importazione MS Project diff -Nru calligra-2.9.7/filters/plan/mpxj/import/calligra_filter_mpx2plan.desktop calligra-2.9.11/filters/plan/mpxj/import/calligra_filter_mpx2plan.desktop --- calligra-2.9.7/filters/plan/mpxj/import/calligra_filter_mpx2plan.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/plan/mpxj/import/calligra_filter_mpx2plan.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -4,7 +4,6 @@ Name[bs]=MS Project uvozni Filter razmjene Name[ca]=Filtre d'importació de MS Project Exchange Name[ca@valencia]=Filtre d'importació de MS Project Exchange -Name[cs]=Importní filtr Microsoft Project Exchange Name[da]=MS Project Exchange-importfilter Name[de]=MS-Projekt-Exchange-Importfilter Name[el]=Φίλτρο εισαγωγής του MS Project Exchange @@ -13,7 +12,6 @@ Name[et]=MS Project Exchange'i impordifilter Name[eu]=MS Project Exchange inportazio-iragazkia Name[fi]=MS Project Exchange -tuontisuodatin -Name[fr]=Filtre d'importation MS Project Exchange Name[gl]=Filtro de importación de MS Project Name[hu]=MS Projekt Exchange importszűrő Name[it]=Filtro di importazione MS Project Exchange diff -Nru calligra-2.9.7/filters/plan/mpxj/import/calligra_filter_planner2plan.desktop calligra-2.9.11/filters/plan/mpxj/import/calligra_filter_planner2plan.desktop --- calligra-2.9.7/filters/plan/mpxj/import/calligra_filter_planner2plan.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/plan/mpxj/import/calligra_filter_planner2plan.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -4,7 +4,6 @@ Name[bs]=Planner uvozni filter Name[ca]=Filtre d'importació del Planner Name[ca@valencia]=Filtre d'importació del Planner -Name[cs]=Importní filtr Planner Name[da]=Planner-importfilter Name[de]=Planner-Importfilter Name[el]=Φίλτρο εισαγωγής Planner @@ -13,7 +12,6 @@ Name[et]=Planneri impordifilter Name[eu]=Planner inportazio-iragazkia Name[fi]=Planner-tuontisuodatin -Name[fr]=Filtre d'importation Planner Name[gl]=Filtro de importación de Planner Name[hu]=Planner importszűrő Name[it]=Filtro di importazione di Planner diff -Nru calligra-2.9.7/filters/sheets/csv/calligra_filter_csv2sheets.desktop calligra-2.9.11/filters/sheets/csv/calligra_filter_csv2sheets.desktop --- calligra-2.9.7/filters/sheets/csv/calligra_filter_csv2sheets.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/sheets/csv/calligra_filter_csv2sheets.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -7,7 +7,7 @@ Name[bs]=CSV uvozni filter za KSpread Name[ca]=Filtre d'importació CSV per al KSpread Name[ca@valencia]=Filtre d'importació CSV per al KSpread -Name[cs]=CSV importní filtr pro KSpread +Name[cs]=Exportní filtr CSV pro KSpread Name[cy]=Hidlen Fewnforio CSV i Kontour Name[da]=CSV-importfilter for KSpread Name[de]=KSpread CSV-Importfilter diff -Nru calligra-2.9.7/filters/sheets/csv/calligra_filter_sheets2csv.desktop calligra-2.9.11/filters/sheets/csv/calligra_filter_sheets2csv.desktop --- calligra-2.9.7/filters/sheets/csv/calligra_filter_sheets2csv.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/sheets/csv/calligra_filter_sheets2csv.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -7,7 +7,6 @@ Name[bs]=CSV izvozni filter za KSpread Name[ca]=Filtre d'exportació CSV per al KSpread Name[ca@valencia]=Filtre d'exportació CSV per al KSpread -Name[cs]=CSV exportní filtr pro KSpread Name[cy]=Hidlen Allforio CSV i Kontour Name[da]=CSV-eksportfilter for KSpread Name[de]=KSpread CSV-Exportfilter @@ -19,7 +18,6 @@ Name[eu]=CSV esportazio-iragazkia KSpread-erako Name[fa]=پالایه صادرات CSV برای KSpread Name[fi]=KSpreadin CSV-vientisuodatin -Name[fr]=Filtre d'exportation CSV de KSpread Name[fy]=CSV-Eksportfilter foar KSpread Name[ga]=Scagaire Easpórtála CSV le haghaidh KSpread Name[gl]=Filtro para KSpread de exportación de CSV diff -Nru calligra-2.9.7/filters/sheets/gnumeric/calligra_filter_gnumeric2sheets.desktop calligra-2.9.11/filters/sheets/gnumeric/calligra_filter_gnumeric2sheets.desktop --- calligra-2.9.7/filters/sheets/gnumeric/calligra_filter_gnumeric2sheets.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/sheets/gnumeric/calligra_filter_gnumeric2sheets.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -12,7 +12,7 @@ Name[da]=GNUmeric-importfilter for KSpread Name[de]=KSpread GNUmeric-Importfilter Name[el]=Φίλτρο εισαγωγής GNUMERIC για το KSpread -Name[en_GB]=GNUmeric Import Filter for KSpread +Name[en_GB]=GNUMERIC Import Filter for KSpread Name[eo]=GNUmeric-importfiltrilo por KSpread Name[es]=Filtro de KSpread de importación de GNUmeric Name[et]=KSpreadi GNUmerici impordifilter diff -Nru calligra-2.9.7/filters/stage/keynote/import/calligra_filter_key2odp.desktop calligra-2.9.11/filters/stage/keynote/import/calligra_filter_key2odp.desktop --- calligra-2.9.7/filters/stage/keynote/import/calligra_filter_key2odp.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/stage/keynote/import/calligra_filter_key2odp.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -3,6 +3,7 @@ Name=Stage Apple Keynote Import Filter Name[bs]=Uvodna faza Apple uvoznog filtera Name[ca]=Filtre d'importació de l'Apple Keynote per l'Stage +Name[ca@valencia]=Filtre d'importació de l'Apple Keynote per l'Stage Name[cs]=Importní filtr Apple Keynote do Stage Name[da]=Apple Keynote-importfilter til Stage Name[de]=Stage-Importfilter für Apple Keynote @@ -11,6 +12,7 @@ Name[et]=Stage'i Apple Keynote'i impordifilter Name[fi]=Stagen Apple Keynote -tuontisuodatin Name[fr]=Filtre d'importation Apple Keynote de Stage +Name[gl]=Filtro para Krita de importación de ora Name[it]=Filtro di importazione Apple Keynote per Stage Name[ja]=Stage Apple Keynote インポートフィルタ Name[nb]=Apple Keynote importfilter for Stage diff -Nru calligra-2.9.7/filters/stage/keynote/import/stage_key_thumbnail.desktop calligra-2.9.11/filters/stage/keynote/import/stage_key_thumbnail.desktop --- calligra-2.9.7/filters/stage/keynote/import/stage_key_thumbnail.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/stage/keynote/import/stage_key_thumbnail.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -3,6 +3,7 @@ Name=Apple Keynote Documents Name[bs]=Apple uvodni dokumenti Name[ca]=Documents de l'Apple Keynote +Name[ca@valencia]=Documents de l'Apple Keynote Name[cs]=Dokumenty Apple Keynote Name[da]=Apple Keynote-dokumenter Name[de]=Apple Keynote Dokumente @@ -11,6 +12,7 @@ Name[et]=Apple Keynote'i dokumendid Name[fi]=Apple Keynote -tiedostot Name[fr]=Documents Apple Keynote +Name[gl]=Documentos de Apple Keynote Name[it]=Documenti Apple Keynote Name[ja]=Apple Keynote 文書 Name[nb]=Apple Keynote-dokumenter diff -Nru calligra-2.9.7/filters/stage/powerpoint/calligra_filter_ppt2odp.desktop calligra-2.9.11/filters/stage/powerpoint/calligra_filter_ppt2odp.desktop --- calligra-2.9.7/filters/stage/powerpoint/calligra_filter_ppt2odp.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/stage/powerpoint/calligra_filter_ppt2odp.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -6,7 +6,6 @@ Name[bs]=Microsoft PowerPoint unosni Filter za KPresenter Name[ca]=Filtre d'importació Microsoft PowerPoint per al KPresenter Name[ca@valencia]=Filtre d'importació Microsoft PowerPoint per al KPresenter -Name[cs]=Importní filtr Microsoft PowerPoint pro KPresenter Name[cy]=Hidlen Fewnforio Microsoft PowerPoint i KPresenter Name[da]=Microsoft Powerpoint importfilter til KPresenter Name[de]=KPresenter MS-PowerPoint-Importfilter @@ -17,7 +16,6 @@ Name[eu]=Microsoft PowerPoint inportazio-iragazkia KPresenter-erako Name[fa]=پالایه واردات Microsoft PowerPoint برای KPresenter Name[fi]=KPresenterin Microsoft PowerPoint -tuontisuodatin -Name[fr]=Filtre d'importation Microsoft PowerPoint pour KPresenter Name[fy]=Microsoft PowerPoint-Ymportfilter foar KPresenter Name[ga]=Scagaire Iompórtála Microsoft PowerPoint le haghaidh KSpread Name[gl]=Filtro de para KPresenter importación de Microsoft PowerPoint diff -Nru calligra-2.9.7/filters/stage/powerpoint/CMakeLists.txt calligra-2.9.11/filters/stage/powerpoint/CMakeLists.txt --- calligra-2.9.7/filters/stage/powerpoint/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/stage/powerpoint/CMakeLists.txt 2016-02-02 19:53:13.000000000 +0000 @@ -29,7 +29,7 @@ install( FILES stage_powerpoint_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR}) endif() -if(SHOULD_BUILD_OKULARGENERATOR_PPT) +if(SHOULD_BUILD_OKULAR_GENERATOR_PPT) install( FILES libokularGenerator_powerpoint_calligra.desktop okularPowerpoint_calligra.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) install( PROGRAMS okularApplication_powerpoint_calligra.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) endif() diff -Nru calligra-2.9.7/filters/stage/powerpoint/libokularGenerator_powerpoint_calligra.desktop calligra-2.9.11/filters/stage/powerpoint/libokularGenerator_powerpoint_calligra.desktop --- calligra-2.9.7/filters/stage/powerpoint/libokularGenerator_powerpoint_calligra.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/stage/powerpoint/libokularGenerator_powerpoint_calligra.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,15 +3,15 @@ Name=Microsoft PowerPoint Presentation Name[bs]=Microsoft PowerPoint prezentacija Name[ca]=Presentacions del Microsoft PowerPoint -Name[cs]=Prezentace Microsoft PowerPoint +Name[ca@valencia]=Presentacions del Microsoft PowerPoint Name[da]=Microsoft Powerpoint-præsentation Name[de]=Microsoft-Powerpoint-Präsentation Name[en_GB]=Microsoft PowerPoint Presentation Name[es]=Presentación Microsoft Powerpoint Name[et]=Microsoft PowerPointi esitlus -Name[fi]=Microsoft Powerpoint -esitys -Name[fr]=Présentation Microsoft PowerPoint -Name[it]=Presentazione Microsoft PowerPoint +Name[fi]=Microsoft PowerPoint -esitys +Name[gl]=Presentación de Microsoft PowerPoint +Name[it]=Presentazione di Microsoft PowerPoint Name[ja]=Microsoft Powerpoint プレゼンテーション Name[nb]=Microsoft Powerpoint presentasjon Name[nl]=Microsoft Powerpoint-presentaties @@ -26,14 +26,13 @@ Comment=PPT for Okular Comment[bs]=PPT za Okular Comment[ca]=PPT per a l'Okular -Comment[cs]=PPT pro Okular +Comment[ca@valencia]=PPT per a l'Okular Comment[da]=PPT til Okular Comment[de]=PPT für Okular Comment[en_GB]=PPT for Okular Comment[es]=PPT para Okular Comment[et]=PPT Okularile -Comment[fi]=PPT Okulariin -Comment[fr]=PPT pour Okular +Comment[gl]=PPT para Okular. Comment[ia]=PPT pro Okular Comment[it]=PPT per Okular Comment[ja]=Okular 用 PPT diff -Nru calligra-2.9.7/filters/stage/powerpoint/PptToOdp.cpp calligra-2.9.11/filters/stage/powerpoint/PptToOdp.cpp --- calligra-2.9.7/filters/stage/powerpoint/PptToOdp.cpp 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/stage/powerpoint/PptToOdp.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1702,7 +1702,7 @@ // style:vertical-pos list_level_properties.set_style_vertical_pos("middle"); // style:vertical-rel - list_level_properties.set_style_vertical_pos("line"); + list_level_properties.set_style_vertical_rel("line"); // svg:x // svg:y } diff -Nru calligra-2.9.7/filters/stage/pptx/calligra_filter_pptx2odp.desktop calligra-2.9.11/filters/stage/pptx/calligra_filter_pptx2odp.desktop --- calligra-2.9.7/filters/stage/pptx/calligra_filter_pptx2odp.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/stage/pptx/calligra_filter_pptx2odp.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -5,7 +5,6 @@ Name[bs]=MS PowerPoint 2007 unosni Filter za KPresenter Name[ca]=Filtre d'importació Microsoft PowerPoint 2007 per al KPresenter Name[ca@valencia]=Filtre d'importació Microsoft PowerPoint 2007 per al KPresenter -Name[cs]=Importní filtr MS PowerPoint 2007 pro KPresenter Name[da]=MS Powerpoint 2007 importfilter til KPresenter Name[de]=KPresenter MS-PowerPoint-2007-Importfilter Name[el]=Φίλτρο εισαγωγής MS PowerPoint 2007 PowerPoint για το KPresenter @@ -14,7 +13,6 @@ Name[et]=KPresenteri MS PowerPoint 2007 impordifilter Name[eu]=MS PowerPoint 2007 inportazio-iragazkia KPresenter-erako Name[fi]=KPresenterin Microsoft PowerPoint 2007 -tuontisuodatin -Name[fr]=Filtre d'importation Microsoft PowerPoint 2007 pour KPresenter Name[ga]=Scagaire Iompórtála Microsoft PowerPoint 2007 le haghaidh KPresenter Name[gl]=Filtro para KPresenter de importación de Microsoft PowerPoint 2007 Name[hu]=Microsoft PowerPoint 2007 importszűrő a KPresenterhez diff -Nru calligra-2.9.7/filters/stage/pptx/CMakeLists.txt calligra-2.9.11/filters/stage/pptx/CMakeLists.txt --- calligra-2.9.7/filters/stage/pptx/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/stage/pptx/CMakeLists.txt 2016-02-02 19:53:13.000000000 +0000 @@ -43,7 +43,7 @@ install( FILES stage_pptx_thumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR}) endif() -if(SHOULD_BUILD_OKULARGENERATOR_PPTX) +if(SHOULD_BUILD_OKULAR_GENERATOR_PPTX) install( FILES libokularGenerator_pptx_calligra.desktop okularPptx_calligra.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) install( PROGRAMS okularApplication_pptx_calligra.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} ) endif() diff -Nru calligra-2.9.7/filters/stage/pptx/libokularGenerator_pptx_calligra.desktop calligra-2.9.11/filters/stage/pptx/libokularGenerator_pptx_calligra.desktop --- calligra-2.9.7/filters/stage/pptx/libokularGenerator_pptx_calligra.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/stage/pptx/libokularGenerator_pptx_calligra.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,15 +3,15 @@ Name=Microsoft PowerPoint Presentation Name[bs]=Microsoft PowerPoint prezentacija Name[ca]=Presentacions del Microsoft PowerPoint -Name[cs]=Prezentace Microsoft PowerPoint +Name[ca@valencia]=Presentacions del Microsoft PowerPoint Name[da]=Microsoft Powerpoint-præsentation Name[de]=Microsoft-Powerpoint-Präsentation Name[en_GB]=Microsoft PowerPoint Presentation Name[es]=Presentación Microsoft Powerpoint Name[et]=Microsoft PowerPointi esitlus -Name[fi]=Microsoft Powerpoint -esitys -Name[fr]=Présentation Microsoft PowerPoint -Name[it]=Presentazione Microsoft PowerPoint +Name[fi]=Microsoft PowerPoint -esitys +Name[gl]=Presentación de Microsoft PowerPoint +Name[it]=Presentazione di Microsoft PowerPoint Name[ja]=Microsoft Powerpoint プレゼンテーション Name[nb]=Microsoft Powerpoint presentasjon Name[nl]=Microsoft Powerpoint-presentaties @@ -26,14 +26,13 @@ Comment=PPTX for Okular Comment[bs]=PPTX za Okular Comment[ca]=PPTX per a l'Okular -Comment[cs]=PPTX pro Okular +Comment[ca@valencia]=PPTX per a l'Okular Comment[da]=PPTX til Okular Comment[de]=PPTX für Okular Comment[en_GB]=PPTX for Okular Comment[es]=PPTX para Okular Comment[et]=PPTX Okularile -Comment[fi]=PPTX Okulariin -Comment[fr]=PPTX pour Okular +Comment[gl]=PPTX para Okular. Comment[ia]=PPTX pro Okular Comment[it]=PPTX per Okular Comment[ja]=Okular 用 PPTX diff -Nru calligra-2.9.7/filters/words/docx/export/calligra_filter_odt2docx.desktop calligra-2.9.11/filters/words/docx/export/calligra_filter_odt2docx.desktop --- calligra-2.9.7/filters/words/docx/export/calligra_filter_odt2docx.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/filters/words/docx/export/calligra_filter_odt2docx.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -3,6 +3,7 @@ Name=MS Word DOCX Export Filter Name[bs]=MS Word DOCX izvozni filter Name[ca]=Filtre d'exportació DOCX per al Word de MS +Name[ca@valencia]=Filtre d'exportació DOCX per al Word de MS Name[cs]=Exportní filtr MS Word DOCX Name[da]=MS Word DOCX-eksportfilter Name[de]=MS Word DOCX-Exportfilter @@ -11,6 +12,7 @@ Name[et]=MS Wordi DOCX-i ekspordifilter Name[fi]=MS Word DOCX -vientisuodatin Name[fr]=Filtre d'exportation de MS Word DOCX +Name[gl]=Filtro de rxportación de MS Word DOCX Name[it]=Filtro di esportazione DOCX per MS Word Name[ja]=Microsoft Word DOCX エクスポートフィルタ Name[nb]=MS Word DOCX eksportfilter diff -Nru calligra-2.9.7/filters/words/docx/import/libokularGenerator_docx_calligra.desktop calligra-2.9.11/filters/words/docx/import/libokularGenerator_docx_calligra.desktop --- calligra-2.9.7/filters/words/docx/import/libokularGenerator_docx_calligra.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/words/docx/import/libokularGenerator_docx_calligra.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -37,14 +37,13 @@ Comment=DOCX for Okular Comment[bs]=DOCX za Okular Comment[ca]=DOCX per a l'Okular -Comment[cs]=DOCX pro Okular +Comment[ca@valencia]=DOCX per a l'Okular Comment[da]=DOCX til Okular Comment[de]=DOCX für Okular Comment[en_GB]=DOCX for Okular Comment[es]=DOCX para Okular Comment[et]=DOCX Okularile -Comment[fi]=DOCX Okulariin -Comment[fr]=DOCX pour Okular +Comment[gl]=DOCX para Okular. Comment[ia]=DOCX pro Okular Comment[it]=DOCX per Okular Comment[ja]=Okular 用 DOCX diff -Nru calligra-2.9.7/filters/words/msword-odf/libokularGenerator_doc_calligra.desktop calligra-2.9.11/filters/words/msword-odf/libokularGenerator_doc_calligra.desktop --- calligra-2.9.7/filters/words/msword-odf/libokularGenerator_doc_calligra.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/words/msword-odf/libokularGenerator_doc_calligra.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name=Microsoft Word Documents Name[bs]=Microsoft Word dokumenti Name[ca]=Documents del Microsoft Word -Name[ca@valencia]=Documents del Microsoft Word +Name[ca@valencia]=Documents del Microsoft Word Name[cs]=Dokumenty Microsoft Word Name[da]=Microsoft Word-dokumenter Name[de]=Microsoft Word Dokumente @@ -36,14 +36,13 @@ Comment=DOC for Okular Comment[bs]=DOC za Okular Comment[ca]=DOC per a l'Okular -Comment[cs]=DOC pro Okular +Comment[ca@valencia]=DOC per a l'Okular Comment[da]=DOC til Okular Comment[de]=DOC für Okular Comment[en_GB]=DOC for Okular Comment[es]=DOC para Okular Comment[et]=DOC Okularile -Comment[fi]=DOC Okulariin -Comment[fr]=DOCpour Okular +Comment[gl]=DOC para Okular. Comment[ia]=DOC pro Okular Comment[it]=DOC per Okular Comment[ja]=Okular 用 DOC diff -Nru calligra-2.9.7/filters/words/msword-odf/words_msword_thumbnail.desktop calligra-2.9.11/filters/words/msword-odf/words_msword_thumbnail.desktop --- calligra-2.9.7/filters/words/msword-odf/words_msword_thumbnail.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/words/msword-odf/words_msword_thumbnail.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -3,7 +3,7 @@ Name=Microsoft Word Documents Name[bs]=Microsoft Word dokumenti Name[ca]=Documents del Microsoft Word -Name[ca@valencia]=Documents del Microsoft Word +Name[ca@valencia]=Documents del Microsoft Word Name[cs]=Dokumenty Microsoft Word Name[da]=Microsoft Word-dokumenter Name[de]=Microsoft Word Dokumente diff -Nru calligra-2.9.7/filters/words/wiki/export/calligra_filter_odt2wiki.desktop calligra-2.9.11/filters/words/wiki/export/calligra_filter_odt2wiki.desktop --- calligra-2.9.7/filters/words/wiki/export/calligra_filter_odt2wiki.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/words/wiki/export/calligra_filter_odt2wiki.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -3,6 +3,7 @@ Name=Words Wiki Export Filter Name[bs]=Word-ov Wiki izvozni filter Name[ca]=Filtre d'exportació Wiki per al Words +Name[ca@valencia]=Filtre d'exportació Wiki per al Words Name[cs]=Exportní filtr Words Wiki Name[da]=Words Wiki-eksportfilter Name[de]=Words Wiki-Exportfilter @@ -10,6 +11,7 @@ Name[es]=Filtro de Words de exportación a Wiki Name[et]=Wordsi Wiki ekspordifilter Name[fi]=Wordsin Wiki-vientisuodatin +Name[gl]=Filtro para Words de exportación de wiki Name[it]=Filtro di esportazione Wiki per Words Name[ja]=Words Wiki エクスポートフィルタ Name[nb]=Wiki eksportfilter for Words diff -Nru calligra-2.9.7/filters/words/wordperfect/import/libokularGenerator_wpd_calligra.desktop calligra-2.9.11/filters/words/wordperfect/import/libokularGenerator_wpd_calligra.desktop --- calligra-2.9.7/filters/words/wordperfect/import/libokularGenerator_wpd_calligra.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/filters/words/wordperfect/import/libokularGenerator_wpd_calligra.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -34,13 +34,13 @@ Comment=WPD for Okular Comment[bs]=WPD za Okular Comment[ca]=WPD per a l'Okular -Comment[cs]=WPD pro Okular +Comment[ca@valencia]=WPD per a l'Okular Comment[da]=WPD til Okular Comment[de]=WPD für Okular Comment[en_GB]=WPD for Okular Comment[es]=WPD para Okular Comment[et]=WPD Okularile -Comment[fi]=WPD Okulariin +Comment[gl]=WPD para Okular. Comment[ia]=WPD pro Okular Comment[it]=WPD per Okular Comment[ja]=Okular 用 WPD diff -Nru calligra-2.9.7/flow/part/CMakeLists.txt calligra-2.9.11/flow/part/CMakeLists.txt --- calligra-2.9.7/flow/part/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/part/CMakeLists.txt 2016-02-02 19:53:13.000000000 +0000 @@ -54,3 +54,6 @@ ### GUI files ### install( FILES flow.rc DESTINATION ${DATA_INSTALL_DIR}/flow) install( FILES flowrc DESTINATION ${CONFIG_INSTALL_DIR} ) +if(APPLE) + install( FILES ${CMAKE_CURRENT_BINARY_DIR}/flow_KDEINIT_SRCS.icns DESTINATION ${BUNDLE_INSTALL_DIR}/calligraflow.app/Contents/Resources) +endif() diff -Nru calligra-2.9.7/flow/part/flow.appdata.xml calligra-2.9.11/flow/part/flow.appdata.xml --- calligra-2.9.7/flow/part/flow.appdata.xml 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/part/flow.appdata.xml 2016-02-02 19:53:13.000000000 +0000 @@ -6,6 +6,7 @@ Flow Flow Flow + Flow Flow Flow Flow @@ -14,6 +15,7 @@ Flow Flow Flow + Flow Flow (Fluxo) Flow Flow @@ -29,12 +31,14 @@ Flowchart & Diagram Editing Uređivanje dijagrama i organigrama Edició de diagrames de fluxos i diagrames + Edició de diagrames de fluxos i diagrames Programm zum Erstellen von Diagrammen Flowchart & Diagram Editing Edición de gráficos y diagramas de flujo Voo- ja muud skeemid Vuokaavio- ja diagrammimuokkaus Édition de diagrammes + Editor de diagramas Modifica de diagramma de fluxo & diagramma Diagrammi di flusso e modifica di diagrammi フローチャートおよびダイアグラム図の作成 @@ -54,12 +58,14 @@

Calligra Flow je jednostavan alat za crtanje dijagrama i organigrama sa bliskom integracijom s drugim Calligra aplikacijama. Omogućava vam da crtate mrežne dijagrame, organizacione dijagrame, dijagrame toka i drugo.

El Calligra Flow és una aplicació fàcil d'utilitzar per fer diagrames i diagrames de flux amb una estreta integració amb altres aplicacions del Calligra. Permet crear diagrames de xarxa, diagrames d'organització, diagrames de flux i més.

+

El Calligra Flow és una aplicació fàcil d'utilitzar per fer diagrames i diagrames de flux amb una estreta integració amb altres aplicacions del Calligra. Permet crear diagrames de xarxa, diagrames d'organització, diagrames de flux i més.

Calligra Flow ist ein einfach zu verwendendes Programm für Diagramme und Flussdiagramme mit enger Integration in andere Calligra-Programme. Mit diesem Programm können Sie Netzwerkdiagramme, Organisationsdiagramme, Flussdiagramme und andere Diagramme erstellen und bearbeiten

Calligra Flow is an easy to use diagramming and flowcharting application with tight integration to the other Calligra applications. It enables you to create network diagrams, organisation charts, flowcharts and more.

Calligra Flow es una aplicación de fácil uso que sirve para crear diagramas de flujo y gráficos, y que goza de una alta integración con el resto de aplicaciones de Calligra. Le permite crear diagramas de red, gráficos de organización, gráficos de flujo y más.

Calligra Flow on hõlpsasti kasutatav voo- ja muude skeemide rakendus, mis on tihedalt seotud muude Calligra rakendustega. See võimaldab luua võrguskeeme, organisatsiooniskeeme, vooskeeme jms.

Calligra Flow on helppokäyttöinen diagrammi- ja vuokaaviosovellus, joka integroituu tiukasti muihin Calligra-sovelluksiin. Sillä voit luoda verkko-, organisaatio- ja vuokaavioita sekä muita.

-

Calligra Flow est une application de diagrammes et d'organigrammes facile à utiliser fortement intégrée avec les autres application Calligra. Elle vous permet de créer des plans de réseaux, des organigrammes, des graphiques, et autres.

+

Calligra Flow est une application de diagrammes et d'organigrammes facile à utiliser fortement intégrée avec les autres application Calligra. Elle vous permet de créer des plans de réseaux, des organigrammes, des graphiques, et autres.

+

Calligra Flow é un programa de diagramas fácil de usar e completamente integrado co resto de programas de Calligra. Permítelle crear diagramas de rede, gráficas de organización, diagramas de fluxo, e moito máis.

Calligra Flow es un application facile de usar pro facer diagrammas e diagrammas de fluxo con un forte integration con altere applicationes de Calligra. Illo permitte te crear diagrammas de rete, graphicos de organisation, diagrammas de fluxo e alteres.

Calligra Flow è un'applicazione di facile utilizzo per creare diagrammi di flusso e altro con una stretta integrazione con le altre applicazioni di Calligra. Ti consente di creare diagrammi di rete, organigrammi, diagrammi di flusso e altro.

Calligra Flow は簡単にダイアグラムやフローチャートを作成する事ができるアプリケーションです。作成した図は他の Calligra アプリケーションでも使用する事ができます。

@@ -75,6 +81,7 @@

Features:

Svojstva:

Característiques:

+

Característiques:

Vlastnosti:

Funktionen:

Features:

@@ -82,6 +89,7 @@

Omadused:

Ominaisuuksia:

Fonctionnalités :

+

Funcionalidades:

Characteristicas

Funzionalità:

機能:

@@ -98,12 +106,14 @@
  • Create network diagrams, organisation charts, flowcharts and more
  • Kreirajte mrežne dijagrame, organizacione dijagrame, dijagrame toka i drugo
  • Crea diagrames de xarxa, diagrames d'organització, diagrames de flux i més
  • +
  • Crea diagrames de xarxa, diagrames d'organització, diagrames de flux i més
  • Erstellung von Netzwerkdiagrammen, Organisationsdiagrammen, Flussdiagrammen und mehr
  • Create network diagrams, organisation charts, flowcharts and more
  • Crea diagramas de red, gráficos de organización, gráficos de flujo y más
  • Võrguskeemide, organisatsiooniskeemide, vooskeemide ja muude skeemide loomine
  • Verkko-, organisaatio- ja vuokaavioiden sekä muiden luonti
  • Créez des plans de réseaux, des organigrammes, des graphiques et autres
  • +
  • Cree diagramas de rede, gráficas de organización, diagramas de fluxo, e moito máis.
  • Crea diagrammas de rete, graphicos de organisation, diagrammas de fluxo e alteres.
  • Crea diagrammi di rete, organigrammi, diagrammi di flusso e altro
  • ネットワークダイアグラム、組織図、フローチャートなどの作成
  • @@ -119,12 +129,14 @@
  • Scriptable stencil creation using Python
  • Skriptno kreiranje likova za crtanje koristeći Python
  • Creació de patrons amb scripts usant el Python
  • +
  • Creació de patrons amb scripts usant el Python
  • Skriptfähige Erstellung von Schablonen mittels Python
  • Scriptable stencil creation using Python
  • Creación de plantillas mediante scripts utilizando Python
  • Skriptitav trafarettide loomine Pythoni abil
  • Skriptattava sapluunojen luonti Pythonilla
  • Création de pochoirs programmable en utilisant le langage Python
  • +
  • Cree pinceis con Python.
  • Creation de stencil de script usante Python
  • Creazione forme con script utilizzando Python
  • Python スクリプトでのステンシルの作成
  • @@ -140,12 +152,14 @@
  • Support for Dia stencils.
  • Podrška za Dia šablone.
  • Implementació de patrons del Dia.
  • +
  • Implementació de patrons del Dia.
  • Unterstützung für Dia-Schablonen.
  • Support for Dia stencils.
  • Admite las plantillas de Dia.
  • Dia trafarettide toetamine
  • Dian sapluunojen tuki
  • Prise en charge des pochoirs issus de Dia.
  • +
  • Compatíbel con pinceis de Dia.
  • Supporto pro stencils de Dia.
  • Supporta le forme di Dia.
  • Dia ステンシルのサポート
  • diff -Nru calligra-2.9.7/flow/part/FlowView.cpp calligra-2.9.11/flow/part/FlowView.cpp --- calligra-2.9.7/flow/part/FlowView.cpp 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/flow/part/FlowView.cpp 2016-02-02 16:57:46.000000000 +0000 @@ -66,4 +66,11 @@ selectionChanged(); } +void FlowView::replaceActivePage(KoPAPageBase *page, KoPAPageBase *newActivePage) +{ + if (page == activePage() ) { + viewMode()->updateActivePage(newActivePage); + } +} + #include "FlowView.moc" diff -Nru calligra-2.9.7/flow/part/FlowView.h calligra-2.9.11/flow/part/FlowView.h --- calligra-2.9.7/flow/part/FlowView.h 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/flow/part/FlowView.h 2016-02-02 16:57:46.000000000 +0000 @@ -40,6 +40,8 @@ /// Called when the doc emits updateGui void updateGui(); + void replaceActivePage(KoPAPageBase *page, KoPAPageBase *newActivePage); + protected: /// Creates and initializes the GUI. void initializeGUI(); diff -Nru calligra-2.9.7/flow/plugins/dockers/flowdockersplugin.desktop calligra-2.9.11/flow/plugins/dockers/flowdockersplugin.desktop --- calligra-2.9.7/flow/plugins/dockers/flowdockersplugin.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/plugins/dockers/flowdockersplugin.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Flow Dockers plugin Name[bs]=Dodatak za plutajuće dokere Name[ca]=Connector d'acobladors per al Flow -Name[ca@valencia]=Connector de Dockers per al Flow +Name[ca@valencia]=Connector d'acobladors per al Flow Name[da]=Dokker-plugin til Flow Name[de]=Flow-Docker-Modul Name[el]=Πρόσθετο προσάρτησης του Flow @@ -11,7 +11,6 @@ Name[et]=Flow dokkide plugin Name[eu]=Flow-ren panelen plugina Name[fi]=Flow’n telakkaliitännäinen -Name[fr]=Module externe pour Flow en panneaux Name[gl]=Complemento para Flow de docas Name[hu]=Flow dokkoló bővítmény Name[it]=Estensione per le aree di aggancio di Flow diff -Nru calligra-2.9.7/flow/stencils/Assorted/arrow-turn-up.desktop calligra-2.9.11/flow/stencils/Assorted/arrow-turn-up.desktop --- calligra-2.9.7/flow/stencils/Assorted/arrow-turn-up.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Assorted/arrow-turn-up.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[ru]=Стрелка, поворачивающая вверх Name[sk]=Šípka otočiť hore Name[sv]=Uppåtsvängd pil +Name[tr]=Yukarı-Dönen Ok Name[uk]=Стрілка «поворот вгору» Name[x-test]=xxTurn-Up Arrowxx Name[zh_CN]=翻折箭头 diff -Nru calligra-2.9.7/flow/stencils/Assorted/cross-maltese.desktop calligra-2.9.11/flow/stencils/Assorted/cross-maltese.desktop --- calligra-2.9.7/flow/stencils/Assorted/cross-maltese.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Assorted/cross-maltese.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -30,6 +30,7 @@ Name[sk]=Maltézsky kríž Name[sl]=Malteški križ Name[sv]=Malteserkors +Name[tr]=Malta Haçı Name[ug]=مالتا كىروسى Name[uk]=Мальтійський хрест Name[x-test]=xxMaltese Crossxx diff -Nru calligra-2.9.7/flow/stencils/Assorted/cross-swiss.desktop calligra-2.9.11/flow/stencils/Assorted/cross-swiss.desktop --- calligra-2.9.7/flow/stencils/Assorted/cross-swiss.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Assorted/cross-swiss.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -30,6 +30,7 @@ Name[sk]=Švajčiarsky kríž Name[sl]=Švicarski križ Name[sv]=Schweizerkors +Name[tr]=Haç Name[ug]=شىۋېتسىيە كىروسى Name[uk]=Швейцарський хрест Name[x-test]=xxSwiss Crossxx diff -Nru calligra-2.9.7/flow/stencils/Assorted/octagon.desktop calligra-2.9.11/flow/stencils/Assorted/octagon.desktop --- calligra-2.9.7/flow/stencils/Assorted/octagon.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Assorted/octagon.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -8,7 +8,7 @@ Name[da]=Oktogon Name[de]=Achteck Name[el]=Οκτάγωνο -Name[en_GB]=Octogon +Name[en_GB]=Octagon Name[es]=Octógono Name[et]=Kaheksanurk Name[eu]=Oktogonoa diff -Nru calligra-2.9.7/flow/stencils/Assorted/star8curved.desktop calligra-2.9.11/flow/stencils/Assorted/star8curved.desktop --- calligra-2.9.7/flow/stencils/Assorted/star8curved.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Assorted/star8curved.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=Krivková osemcípa hviezda Name[sl]=Ukrivljena osemkraka zvezda Name[sv]=Rundad åttauddig stjärna +Name[tr]=Eğimli Sekiz Noktalı Yıldız Name[uk]=Викривлена восьмикутна зірка Name[x-test]=xxCurved Eight Point Starxx Name[zh_CN]=曲边八角星 diff -Nru calligra-2.9.7/flow/stencils/Assorted/star8sharp.desktop calligra-2.9.11/flow/stencils/Assorted/star8sharp.desktop --- calligra-2.9.7/flow/stencils/Assorted/star8sharp.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Assorted/star8sharp.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=Ostrá osemcípa hviezda Name[sl]=Ostra osemkraka zvezda Name[sv]=Spetsig åttauddig stjärna +Name[tr]=Keskin Sekiz Noktalı Yıldız Name[uk]=Зірка з вісьмома гострими променями Name[x-test]=xxSharp Eight Point Starxx Name[zh_CN]=八角星 diff -Nru calligra-2.9.7/flow/stencils/BPMN/Activity-Looping.desktop calligra-2.9.11/flow/stencils/BPMN/Activity-Looping.desktop --- calligra-2.9.7/flow/stencils/BPMN/Activity-Looping.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/Activity-Looping.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Activity-Looping Name[bs]=Aktivnost petlje Name[ca]=Activitat-bucle -Name[ca@valencia]=Activitat-enllaçada +Name[ca@valencia]=Activitat-bucle Name[da]=Aktivitetsløkke Name[de]=Aktivitäten-Schleife Name[el]=Βρόχος-δραστηριότητας @@ -23,6 +23,7 @@ Name[ru]=Циклическое действие Name[sk]=Slučkovanie aktivít Name[sv]=Upprepad-aktivitet +Name[tr]=Aktivite-Döngü Name[uk]=Циклічна дія Name[x-test]=xxActivity-Loopingxx Name[zh_CN]=活动-循环 diff -Nru calligra-2.9.7/flow/stencils/BPMN/Ad-Hoc-Collapsed-Sub-Process.desktop calligra-2.9.11/flow/stencils/BPMN/Ad-Hoc-Collapsed-Sub-Process.desktop --- calligra-2.9.7/flow/stencils/BPMN/Ad-Hoc-Collapsed-Sub-Process.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/Ad-Hoc-Collapsed-Sub-Process.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Ad-Hoc-Collapsed-Sub-Process Name[bs]=Ad hoc prošireni subproces Name[ca]=Subprocés col·lapsat ad-hoc -Name[ca@valencia]=Sub-procés col·lapsat ad-hoc +Name[ca@valencia]=Subprocés col·lapsat ad-hoc Name[da]=Ad-Hoc-Collapsed-Sub-Process Name[de]=Ad-Hoc - Zugeklappter Teilprozess Name[el]=Ειδική-περίπτωση-κατάρρευσης-υπο-διεργασίας @@ -23,6 +23,7 @@ Name[ru]=Свёрнутый Ad-hoc подпроцесс Name[sk]=Ad-Hoc-Collapsed-Sub-Process Name[sv]=Ad-hoc-sammanslagen-delprocess +Name[tr]=Ad-Hoc-Çöken-Alt-Süreç Name[uk]=Спеціально згорнутий підпроцес Name[x-test]=xxAd-Hoc-Collapsed-Sub-Processxx Name[zh_CN]=特设-折叠子进程 diff -Nru calligra-2.9.7/flow/stencils/BPMN/Collapsed-Sub-Process.desktop calligra-2.9.11/flow/stencils/BPMN/Collapsed-Sub-Process.desktop --- calligra-2.9.7/flow/stencils/BPMN/Collapsed-Sub-Process.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/Collapsed-Sub-Process.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Collapsed-Sub-Process Name[bs]=Prošireni subproces Name[ca]=Subprocés col·lapsat -Name[ca@valencia]=Sub-procés col·lapsat +Name[ca@valencia]=Subprocés col·lapsat Name[da]=Collapsed-Sub-Process Name[de]=Zugeklappter Teilprozess Name[el]=Κατάρρευση-υπο-διεργασίας diff -Nru calligra-2.9.7/flow/stencils/BPMN/Compensation-Collapsed-Sub-Process.desktop calligra-2.9.11/flow/stencils/BPMN/Compensation-Collapsed-Sub-Process.desktop --- calligra-2.9.7/flow/stencils/BPMN/Compensation-Collapsed-Sub-Process.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/Compensation-Collapsed-Sub-Process.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Compensation-Collapsed-Sub-Process Name[bs]=Kompenzirano-prošireni subproces Name[ca]=Subprocés col·lapsat de compensació -Name[ca@valencia]=Sub-procés col·lapsat de compensació +Name[ca@valencia]=Subprocés col·lapsat de compensació Name[da]=Compensation-Collapsed-Sub-Process Name[de]=Kompensation - Zugeklappter Teilprozess Name[el]=Αντιστάθμιση-σε-κατάρρευση-υπο-διεργασίας @@ -22,6 +22,7 @@ Name[ru]=Компенсационно свёрнутый подпроцесс Name[sk]=Compensation-Collapsed-Sub-Process Name[sv]=Kompensation-sammanslagen-delprocess +Name[tr]=Düzeltme-Çöken-Alt-Süreç Name[uk]=Компенсаційно згорнутий підпроцес Name[x-test]=xxCompensation-Collapsed-Sub-Processxx Name[zh_CN]=补偿-折叠子进程 diff -Nru calligra-2.9.7/flow/stencils/BPMN/Compensation.desktop calligra-2.9.11/flow/stencils/BPMN/Compensation.desktop --- calligra-2.9.7/flow/stencils/BPMN/Compensation.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/Compensation.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Компенсация Name[sk]=Kompenzácia Name[sv]=Kompensation +Name[tr]=Geri Alma Name[uk]=Компенсація Name[x-test]=xxCompensationxx Name[zh_CN]=补偿 diff -Nru calligra-2.9.7/flow/stencils/BPMN/End-Event-Compensation.desktop calligra-2.9.11/flow/stencils/BPMN/End-Event-Compensation.desktop --- calligra-2.9.7/flow/stencils/BPMN/End-Event-Compensation.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/End-Event-Compensation.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Компенсация завершения события Name[sk]=End-Event-Compensation Name[sv]=Sluthändelse-kompensation +Name[tr]=Son-Etkinlik-Düzeltme Name[uk]=Компенсація кінцевої події Name[x-test]=xxEnd-Event-Compensationxx Name[zh_CN]=结束事件-补偿 diff -Nru calligra-2.9.7/flow/stencils/BPMN/Gateway-Exclusive-XOR-Data-Based.desktop calligra-2.9.11/flow/stencils/BPMN/Gateway-Exclusive-XOR-Data-Based.desktop --- calligra-2.9.7/flow/stencils/BPMN/Gateway-Exclusive-XOR-Data-Based.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/Gateway-Exclusive-XOR-Data-Based.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Оператор исключающего ИЛИ, управляемый данными Name[sk]=Gateway-Exclusive-XOR-Data-Based Name[sv]=Port-exklusiv-eller-databaserad +Name[tr]=Ağ Geçidi-Harici-XOR-Veri-Tabanlı Name[uk]=Шлюз виключного АБО на основі даних Name[x-test]=xxGateway-Exclusive-XOR-Data-Basedxx Name[zh_CN]=网关-独占 XOR 数据为基础 diff -Nru calligra-2.9.7/flow/stencils/BPMN/Gateway-Exclusive-XOR-Event-Based.desktop calligra-2.9.11/flow/stencils/BPMN/Gateway-Exclusive-XOR-Event-Based.desktop --- calligra-2.9.7/flow/stencils/BPMN/Gateway-Exclusive-XOR-Event-Based.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/Gateway-Exclusive-XOR-Event-Based.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Оператор исключающего ИЛИ, управляемый событиями Name[sk]=Gateway-Exclusive-XOR-Event-Based Name[sv]=Port-exklusiv-eller-händelsebaserad +Name[tr]=Ağ Geçidi-Harici-XOR-Olay-Tabanlı Name[uk]=Шлюз виключного АБО на основі подій Name[x-test]=xxGateway-Exclusive-XOR-Event-Basedxx Name[zh_CN]=网关-独占 XOR 事件为基础 diff -Nru calligra-2.9.7/flow/stencils/BPMN/Gateway-Inclusive-OR.desktop calligra-2.9.11/flow/stencils/BPMN/Gateway-Inclusive-OR.desktop --- calligra-2.9.7/flow/stencils/BPMN/Gateway-Inclusive-OR.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/Gateway-Inclusive-OR.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Оператор включающего ИЛИ Name[sk]=Gateway-Inclusive-OR Name[sv]=Port-inklusiv-eller +Name[tr]=Ağ Geçidi-Dahili-OR Name[uk]=Шлюз включного АБО Name[x-test]=xxGateway-Inclusive-ORxx Name[zh_CN]=网关-包含 OR diff -Nru calligra-2.9.7/flow/stencils/BPMN/Gateway-Parallel-AND.desktop calligra-2.9.11/flow/stencils/BPMN/Gateway-Parallel-AND.desktop --- calligra-2.9.7/flow/stencils/BPMN/Gateway-Parallel-AND.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/Gateway-Parallel-AND.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Оператор И Name[sk]=Gateway-Parallel-AND Name[sv]=Port-parallell-och +Name[tr]=Ağ Geçidi-Paralel-AND Name[uk]=Шлюз паралельного ТА Name[x-test]=xxGateway-Parallel-ANDxx Name[zh_CN]=网关-并行 AND diff -Nru calligra-2.9.7/flow/stencils/BPMN/Intermediate-Event-Compensation.desktop calligra-2.9.11/flow/stencils/BPMN/Intermediate-Event-Compensation.desktop --- calligra-2.9.7/flow/stencils/BPMN/Intermediate-Event-Compensation.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/Intermediate-Event-Compensation.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Промежуточное событие - компенсация Name[sk]=Intermediate-Event-Compensation Name[sv]=Mellanliggande-händelse-kompensation +Name[tr]=Orta Düzey-Olay-Düzeltme Name[uk]=Компенсація проміжної події Name[x-test]=xxIntermediate-Event-Compensationxx Name[zh_CN]=中间事件-补偿 diff -Nru calligra-2.9.7/flow/stencils/BPMN/Looping-Collapsed-Sub-Process.desktop calligra-2.9.11/flow/stencils/BPMN/Looping-Collapsed-Sub-Process.desktop --- calligra-2.9.7/flow/stencils/BPMN/Looping-Collapsed-Sub-Process.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/Looping-Collapsed-Sub-Process.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Looping-Collapsed-Sub-Process Name[bs]=Ponavljajući prošireni subproces Name[ca]=Bucle-Subprocés-Col·lapsat -Name[ca@valencia]=Llaçant-Sub-Procés-Col·lapsat +Name[ca@valencia]=Bucle-Subprocés-Col·lapsat Name[da]=Looping-Collapsed-Sub-Process Name[de]=Schleife - Zugeklappter Teilprozess Name[el]=Βρόχος-υπο-διεργασίας-σε-κατάρρευση @@ -22,6 +22,7 @@ Name[ru]=Циклический свёрнутый подпроцесс Name[sk]=Looping-Collapsed-Sub-Process Name[sv]=Upprepad-sammanslagen-delprocess +Name[tr]=Döngü-Çöken-Alt-Süreç Name[uk]=Циклічно згорнутий підпроцес Name[x-test]=xxLooping-Collapsed-Sub-Processxx Name[zh_CN]=循环-折叠子进程 diff -Nru calligra-2.9.7/flow/stencils/BPMN/Multiple-Instance-Collapsed-Sub-Process.desktop calligra-2.9.11/flow/stencils/BPMN/Multiple-Instance-Collapsed-Sub-Process.desktop --- calligra-2.9.7/flow/stencils/BPMN/Multiple-Instance-Collapsed-Sub-Process.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/Multiple-Instance-Collapsed-Sub-Process.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Multiple-Instance-Collapsed-Sub-Process Name[bs]=Višestruko instancirani prošireni subproces Name[ca]=Subprocés-Col·lapsat-Múltiples-Instàncies -Name[ca@valencia]=Sub-procés-Col·lapsat-Múltiples-Instàncies +Name[ca@valencia]=Subprocés-Col·lapsat-Múltiples-Instàncies Name[da]=Multiple-Instance-Collapsed-Sub-Process Name[de]=Zugeklappter Teilprozess - Parallele Mehrfachausführung Name[el]=Πολλαπλές-περιπτώσεις-υπο-διεργασιών-σε-κατάρρευση @@ -22,6 +22,7 @@ Name[ru]=Многоэкземплярный свёрнутый подпроцесс Name[sk]=Multiple-Instance-Collapsed-Sub-Process Name[sv]=Flerinstans-sammanslagen-delprocess +Name[tr]=Çoklu-Örnek-Çöken-Alt-Süreç Name[uk]=Декілька екземплярів згорнутих підпроцесів Name[x-test]=xxMultiple-Instance-Collapsed-Sub-Processxx Name[zh_CN]=多重实例-折叠子进程 diff -Nru calligra-2.9.7/flow/stencils/BPMN/Multiple-Instance-Task.desktop calligra-2.9.11/flow/stencils/BPMN/Multiple-Instance-Task.desktop --- calligra-2.9.7/flow/stencils/BPMN/Multiple-Instance-Task.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/BPMN/Multiple-Instance-Task.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Задача со множественными вхождениями Name[sk]=Multiple-Instance-Task Name[sv]=Flerinstans-uppgift +Name[tr]=Çoklu-Örnek-Görev Name[uk]=Декілька екземплярів задачі Name[x-test]=xxMultiple-Instance-Taskxx Name[zh_CN]=多重实例-任务 diff -Nru calligra-2.9.7/flow/stencils/Building_Site/circle_diagonal_quarters_filled.desktop calligra-2.9.11/flow/stencils/Building_Site/circle_diagonal_quarters_filled.desktop --- calligra-2.9.7/flow/stencils/Building_Site/circle_diagonal_quarters_filled.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Building_Site/circle_diagonal_quarters_filled.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Окружность с заполненными по диагонали четвертями Name[sk]=Kružnica diagonálne štvrtiny vyplnené Name[sv]=Cirkel diagonala fjärdedelar fyllda +Name[tr]=Köşegen Çeyrekleri Dolu Daire Name[uk]=Коло з заповненими діагональними чвертями Name[x-test]=xxCircle Diagonal Quarters Filledxx Name[zh_CN]=对角四分填充圆 diff -Nru calligra-2.9.7/flow/stencils/Building_Site/collection.desktop calligra-2.9.11/flow/stencils/Building_Site/collection.desktop --- calligra-2.9.7/flow/stencils/Building_Site/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Building_Site/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[sk]=Vytváranie siete Name[sl]=Gradbišče Name[sv]=Byggplats +Name[tr]=İnşaat Alanı Name[uk]=Планування будівництва Name[x-test]=xxBuilding Sitexx Name[zh_CN]=建筑场地 diff -Nru calligra-2.9.7/flow/stencils/Building_Site/pre_silo.desktop calligra-2.9.11/flow/stencils/Building_Site/pre_silo.desktop --- calligra-2.9.7/flow/stencils/Building_Site/pre_silo.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Building_Site/pre_silo.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Pre-Silo Name[bs]=Pre-silos Name[ca]=Sitja prèvia -Name[ca@valencia]=Pre-Silo +Name[ca@valencia]=Sitja prèvia Name[da]=Pre-Silo Name[de]=Zementsilo Name[el]=Pre-Silo @@ -23,6 +23,7 @@ Name[ru]=Предварительная ёмкость Name[sk]=Pre-Silo Name[sv]=Försilo +Name[tr]=Çimento-ambarı Name[uk]=Бункер для цементу Name[x-test]=xxPre-Siloxx Name[zh_CN]=预设存储 diff -Nru calligra-2.9.7/flow/stencils/Building_Site/proportioning_batcher.desktop calligra-2.9.11/flow/stencils/Building_Site/proportioning_batcher.desktop --- calligra-2.9.7/flow/stencils/Building_Site/proportioning_batcher.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Building_Site/proportioning_batcher.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Proportioning Batcher Name[bs]=Proporcionalni serijalizer Name[ca]=Dosificador proporcionat -Name[ca@valencia]=Proporcionat Batcher +Name[ca@valencia]=Dosificador proporcionat Name[da]=Proportioning Batcher Name[de]=Dosieranlage Name[el]=Συσκευή δοσολογίας diff -Nru calligra-2.9.7/flow/stencils/Building_Site/road_rotated_tee.desktop calligra-2.9.11/flow/stencils/Building_Site/road_rotated_tee.desktop --- calligra-2.9.7/flow/stencils/Building_Site/road_rotated_tee.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Building_Site/road_rotated_tee.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Перевёрнутая Т-образная дорога Name[sk]=Cestný otočený prierez Name[sv]=Roterad t-vägkorsning +Name[tr]=Döndürülmüş T şeklinde Yol Name[uk]=Перехрестя у формі повернутої «Т» Name[x-test]=xxRoad Rotated Teexx Name[zh_CN]=旋转后的丁字路口 diff -Nru calligra-2.9.7/flow/stencils/Building_Site/road_tee.desktop calligra-2.9.11/flow/stencils/Building_Site/road_tee.desktop --- calligra-2.9.7/flow/stencils/Building_Site/road_tee.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Building_Site/road_tee.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Т-образная дорога Name[sk]=Cestný prierez Name[sv]=T-vägkorsning +Name[tr]=T şeklinde Yol Name[uk]=Перехрестя у формі «Т» Name[x-test]=xxRoad Teexx Name[zh_CN]=丁字路口 diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Organizador_Rack_1U.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Organizador_Rack_1U.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Organizador_Rack_1U.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Organizador_Rack_1U.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Кабельный организатор 1U Name[sk]=OrganizadorRack1U Name[sv]=Organizador-rack 1U +Name[tr]=OrganizadorRack1U Name[uk]=Стійка Organizador 1U Name[x-test]=xxOrganizadorRack1Uxx Name[zh_TW]=OrganizadorRack1U diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Organizador_Rack_2U.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Organizador_Rack_2U.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Organizador_Rack_2U.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Organizador_Rack_2U.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Кабельный организатор 2U Name[sk]=OrganizadorRack2U Name[sv]=Organizador-rack 2U +Name[tr]=OrganizadorRack2U Name[uk]=Стійка Organizador 2U Name[x-test]=xxOrganizadorRack2Uxx Name[zh_TW]=OrganizadorRack2U diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Organizer_Rack_1U.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Organizer_Rack_1U.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Organizer_Rack_1U.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Organizer_Rack_1U.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Кабельный органайзер 1U Name[sk]=OrganizerRack1U Name[sv]=Organiseringsrack 1U +Name[tr]=OrganizerRack1U Name[uk]=Стійка Organizer 1U Name[x-test]=xxOrganizerRack1Uxx Name[zh_TW]=OrganizerRack1U diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Organizer_Rack_2U.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Organizer_Rack_2U.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Organizer_Rack_2U.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Organizer_Rack_2U.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Кабельный органайзер 2U Name[sk]=OrganizerRack2U Name[sv]=Organiseringsrack 1U +Name[tr]=OrganizerRack2U Name[uk]=Стійка Organizer 2U Name[x-test]=xxOrganizerRack2Uxx Name[zh_TW]=OrganizerRack2U diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_1U.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_1U.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_1U.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_1U.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Сървърен шкаф 1U Name[bs]=ServerRack1U Name[ca]=ServidorRack1U -Name[ca@valencia]=ServerRack1U +Name[ca@valencia]=ServidorRack1U Name[cs]=ServerRack1U Name[da]=ServerRack1U Name[de]=ServerRack 1 HE diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_2U.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_2U.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_2U.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_2U.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Сървърен шкаф 2U Name[bs]=ServerRack2U Name[ca]=ServidorRack2U -Name[ca@valencia]=ServerRack2U +Name[ca@valencia]=ServidorRack2U Name[cs]=ServerRack2U Name[da]=ServerRack2U Name[de]=ServerRack 2 HE diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_2U_Slow.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_2U_Slow.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_2U_Slow.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_2U_Slow.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=ServerRack2USlow Name[bs]=ServerRack2USlow Name[ca]=ServidorRack2USlow -Name[ca@valencia]=ServerRack2USlow +Name[ca@valencia]=ServidorRack2USlow Name[da]=ServerRack2USlow Name[de]=ServerRack2USlow Name[el]=ServerRack2USlow diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_2U_Very_Slow.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_2U_Very_Slow.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_2U_Very_Slow.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_2U_Very_Slow.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=ServerRack2UVerySlow Name[bs]=ServerRack2UVerySlow Name[ca]=ServidorRack2UVerySlow -Name[ca@valencia]=ServerRack2UVerySlow +Name[ca@valencia]=ServidorRack2UVerySlow Name[da]=ServerRack2UVerySlow Name[de]=ServerRack2UVerySlow Name[el]=ServerRack2UVerySlow diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_3U.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_3U.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_3U.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_3U.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Сървърен шкаф 3U Name[bs]=ServerRack3U Name[ca]=ServidorRack3U -Name[ca@valencia]=ServerRack3U +Name[ca@valencia]=ServidorRack3U Name[cs]=ServerRack3U Name[da]=ServerRack3U Name[de]=ServerRack 3 HE diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_3U_Slow_Density.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_3U_Slow_Density.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_3U_Slow_Density.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_3U_Slow_Density.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=ServerRack3USlowDensity Name[bs]=ServerRack3USlowDensity Name[ca]=ServidorRack3USlowDensity -Name[ca@valencia]=ServerRack3USlowDensity +Name[ca@valencia]=ServidorRack3USlowDensity Name[da]=ServerRack3USlowDensity Name[de]=ServerRack3USlowDensity Name[el]=ServerRack3USlowDensity diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_4U.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_4U.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_4U.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_4U.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Сървърен шкаф 4U Name[bs]=ServerRack4U Name[ca]=ServidorRack4U -Name[ca@valencia]=ServerRack4U +Name[ca@valencia]=ServidorRack4U Name[cs]=ServerRack4U Name[da]=ServerRack4U Name[de]=ServerRack 4 HE diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_4U_Right_Capacity.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_4U_Right_Capacity.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_4U_Right_Capacity.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_4U_Right_Capacity.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=ServerRack4URightCapacity Name[bs]=ServerRack4URightCapacity Name[ca]=ServidorRack4URightCapacity -Name[ca@valencia]=ServerRack4URightCapacity +Name[ca@valencia]=ServidorRack4URightCapacity Name[da]=ServerRack4URightCapacity Name[de]=ServerRack4URightCapacity Name[el]=ServerRack4URightCapacity diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_4U_Slow_Capacity.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_4U_Slow_Capacity.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_4U_Slow_Capacity.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_4U_Slow_Capacity.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=ServerRack4USlowCapacity Name[bs]=ServerRack4USlowCapacity Name[ca]=ServidorRack4USlowCapacity -Name[ca@valencia]=ServerRack4USlowCapacity +Name[ca@valencia]=ServidorRack4USlowCapacity Name[da]=ServerRack4USlowCapacity Name[de]=ServerRack4USlowCapacity Name[el]=ServerRack4USlowCapacity diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_4U_Very_Right_Capacity.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_4U_Very_Right_Capacity.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_4U_Very_Right_Capacity.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_4U_Very_Right_Capacity.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=ServerRack4UVeryRightCapacity Name[bs]=ServerRack4UVeryRightCapacity Name[ca]=ServidorRack4UVeryRightCapacity -Name[ca@valencia]=ServerRack4UVeryRightCapacity +Name[ca@valencia]=ServidorRack4UVeryRightCapacity Name[da]=ServerRack4UVeryRightCapacity Name[de]=ServerRack4UVeryRightCapacity Name[el]=ServerRack4UVeryRightCapacity diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_5U.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_5U.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_5U.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_5U.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Сървърен шкаф 5U Name[bs]=ServerRack5U Name[ca]=ServidorRack5U -Name[ca@valencia]=ServerRack5U +Name[ca@valencia]=ServidorRack5U Name[cs]=ServerRack5U Name[da]=ServerRack5U Name[de]=ServerRack 5 HE diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_5U_Right_Density.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_5U_Right_Density.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Server_Rack_5U_Right_Density.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Server_Rack_5U_Right_Density.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=ServerRack5URightDensity Name[bs]=ServerRack5URightDensity Name[ca]=ServidorRack5URightDensity -Name[ca@valencia]=ServerRack5URightDensity +Name[ca@valencia]=ServidorRack5URightDensity Name[da]=ServerRack5URightDensity Name[de]=ServerRack5URightDensity Name[el]=ServerRack5URightDensity diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Switch_Rack_50P.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Switch_Rack_50P.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Switch_Rack_50P.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Switch_Rack_50P.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Стойка коммутаторов на 16 портов Name[sk]=SwitchRack50P Name[sv]=Kopplingsskåp 50P +Name[tr]=SwitchRack50P Name[uk]=Стійка комутаторів 50P Name[x-test]=xxSwitchRack50Pxx Name[zh_TW]=交換器機架 50P diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Telephone_exchange.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Telephone_exchange.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Telephone_exchange.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Telephone_exchange.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Телефонная станция Name[sk]=TelephoneExchange Name[sv]=Telefonväxel +Name[tr]=Santral Name[uk]=Телефонна станція Name[x-test]=xxTelephoneExchangexx Name[zh_TW]=電話交換器 diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Voice_Painel_20P.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Voice_Painel_20P.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Voice_Painel_20P.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Voice_Painel_20P.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Телефонная панель на 20 портов Name[sk]=VoicePanel20P Name[sv]=Röstpanel 20P +Name[tr]=VoicePanel20P Name[uk]=Голосова панель 20P Name[x-test]=xxVoicePanel20Pxx Name[zh_TW]=語音面板 20P diff -Nru calligra-2.9.7/flow/stencils/Central_Data_Processing/Voice_Painel_50P.desktop calligra-2.9.11/flow/stencils/Central_Data_Processing/Voice_Painel_50P.desktop --- calligra-2.9.7/flow/stencils/Central_Data_Processing/Voice_Painel_50P.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Central_Data_Processing/Voice_Painel_50P.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Телефонная панель на 50 портов Name[sk]=VoicePanel50P Name[sv]=Röstpanel 50P +Name[tr]=VoicePanel50P Name[uk]=Голосова панель 50P Name[x-test]=xxVoicePanel50Pxx Name[zh_TW]=語音面板 50P diff -Nru calligra-2.9.7/flow/stencils/ChemEng/ACgen.desktop calligra-2.9.11/flow/stencils/ChemEng/ACgen.desktop --- calligra-2.9.7/flow/stencils/ChemEng/ACgen.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/ACgen.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Генератор переменного тока Name[sk]=ACgen Name[sv]=växelströmsgenerator +Name[tr]=Alternatif Akım Üreticisi Name[uk]=Генератор змінного струму Name[x-test]=xxACgenxx Name[zh_TW]=ACgen diff -Nru calligra-2.9.7/flow/stencils/ChemEng/airforced.desktop calligra-2.9.11/flow/stencils/ChemEng/airforced.desktop --- calligra-2.9.7/flow/stencils/ChemEng/airforced.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/airforced.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Воздушный вентилятор с принудительным затягиванием Name[sk]=airforced Name[sv]=fläktluft +Name[tr]=havadestekli Name[uk]=Охолоджувач з примусовим виводом повітря Name[x-test]=xxairforcedxx Name[zh_TW]=airforced diff -Nru calligra-2.9.7/flow/stencils/ChemEng/airinduced.desktop calligra-2.9.11/flow/stencils/ChemEng/airinduced.desktop --- calligra-2.9.7/flow/stencils/ChemEng/airinduced.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/airinduced.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Воздушный вентилятор с принудительным отводом Name[sk]=airinduced Name[sv]=självdrag +Name[tr]=havaemici Name[uk]=Охолоджувач з примусовим затягуванням повітря Name[x-test]=xxairinducedxx Name[zh_TW]=airinduced diff -Nru calligra-2.9.7/flow/stencils/ChemEng/autoclave.desktop calligra-2.9.11/flow/stencils/ChemEng/autoclave.desktop --- calligra-2.9.7/flow/stencils/ChemEng/autoclave.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/autoclave.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Автоклав Name[sk]=autoclave Name[sv]=autoklav +Name[tr]=otoklav Name[uk]=Автоклав Name[x-test]=xxautoclavexx Name[zh_TW]=autoclave diff -Nru calligra-2.9.7/flow/stencils/ChemEng/bigtraycol.desktop calligra-2.9.11/flow/stencils/ChemEng/bigtraycol.desktop --- calligra-2.9.7/flow/stencils/ChemEng/bigtraycol.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/bigtraycol.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Большой резервуар Name[sk]=bigtraycol Name[sv]=kolonn stora bottnar +Name[tr]=büyük çekmece kolonu Name[uk]=Тарільчата колона, детально Name[x-test]=xxbigtraycolxx Name[zh_TW]=bigtraycol diff -Nru calligra-2.9.7/flow/stencils/ChemEng/coilv.desktop calligra-2.9.11/flow/stencils/ChemEng/coilv.desktop --- calligra-2.9.7/flow/stencils/ChemEng/coilv.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/coilv.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Спираль вертикальная Name[sk]=coilv Name[sv]=spole vertikal +Name[tr]=yataybobin Name[uk]=Вертикальний нагрівальний або охолоджувальний змійовик Name[x-test]=xxcoilvxx Name[zh_TW]=coilv diff -Nru calligra-2.9.7/flow/stencils/ChemEng/collection.desktop calligra-2.9.11/flow/stencils/ChemEng/collection.desktop --- calligra-2.9.7/flow/stencils/ChemEng/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Химическая инженерия Name[sk]=ChemEng Name[sv]=Kemiteknik +Name[tr]=KimMüh Name[uk]=Хімічна промисловість Name[x-test]=xxChemEngxx Name[zh_CN]=化学工程 diff -Nru calligra-2.9.7/flow/stencils/ChemEng/compr.desktop calligra-2.9.11/flow/stencils/ChemEng/compr.desktop --- calligra-2.9.7/flow/stencils/ChemEng/compr.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/compr.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Компрессор Name[sk]=compr Name[sv]=kompressor +Name[tr]=kompresör Name[uk]=Компресор або турбіна Name[x-test]=xxcomprxx Name[zh_TW]=compr diff -Nru calligra-2.9.7/flow/stencils/ChemEng/coveredtank.desktop calligra-2.9.11/flow/stencils/ChemEng/coveredtank.desktop --- calligra-2.9.7/flow/stencils/ChemEng/coveredtank.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/coveredtank.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Резервуар с крышкой Name[sk]=coveredtank Name[sv]=täckt tank +Name[tr]=kapalıdepo Name[uk]=Резервуар з кришкою Name[x-test]=xxcoveredtankxx Name[zh_TW]=coveredtank diff -Nru calligra-2.9.7/flow/stencils/ChemEng/cyclone.desktop calligra-2.9.11/flow/stencils/ChemEng/cyclone.desktop --- calligra-2.9.7/flow/stencils/ChemEng/cyclone.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/cyclone.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Центробежный сепаратор Name[sk]=cyklón Name[sv]=cyklon +Name[tr]=siklon Name[uk]=Центробіжний вентилятор Name[x-test]=xxcyclonexx Name[zh_TW]=cyclone diff -Nru calligra-2.9.7/flow/stencils/ChemEng/displa.desktop calligra-2.9.11/flow/stencils/ChemEng/displa.desktop --- calligra-2.9.7/flow/stencils/ChemEng/displa.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/displa.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Крутящий насос или компрессор с положительным смещением Name[sk]=displa Name[sv]=fördelare +Name[tr]=dönerpompa Name[uk]=Обертальний насос або компресор з додатним зміщенням Name[x-test]=xxdisplaxx Name[zh_TW]=displa diff -Nru calligra-2.9.7/flow/stencils/ChemEng/fan.desktop calligra-2.9.11/flow/stencils/ChemEng/fan.desktop --- calligra-2.9.7/flow/stencils/ChemEng/fan.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/fan.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -32,6 +32,7 @@ Name[sk]=ventilátor Name[sl]=ventilator Name[sv]=fläkt +Name[tr]=fan Name[uk]=Вентилятор або розмішувач Name[x-test]=xxfanxx Name[zh_CN]=风扇 diff -Nru calligra-2.9.7/flow/stencils/ChemEng/fluidcont.desktop calligra-2.9.11/flow/stencils/ChemEng/fluidcont.desktop --- calligra-2.9.7/flow/stencils/ChemEng/fluidcont.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/fluidcont.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=contentor de fluido Name[sk]=fluidcont Name[sv]=vätskebehållare +Name[tr]=sıvı teması tankı Name[uk]=Проста посудина для рідини Name[x-test]=xxfluidcontxx Name[zh_TW]=fluidcont diff -Nru calligra-2.9.7/flow/stencils/ChemEng/pneum.desktop calligra-2.9.11/flow/stencils/ChemEng/pneum.desktop --- calligra-2.9.7/flow/stencils/ChemEng/pneum.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/pneum.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Пневматический Name[sk]=pneum Name[sv]=pneum +Name[tr]=basınçlı hava hattı Name[uk]=Пневматична лінія Name[x-test]=xxpneumxx Name[zh_TW]=pneum diff -Nru calligra-2.9.7/flow/stencils/ChemEng/pneumv.desktop calligra-2.9.11/flow/stencils/ChemEng/pneumv.desktop --- calligra-2.9.7/flow/stencils/ChemEng/pneumv.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/pneumv.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=pneum-v Name[sk]=pneumv Name[sv]=pneum vertikal +Name[tr]=Basınçlı hava hattı dikey Name[uk]=Пневматична вертикальна лінія Name[x-test]=xxpneumvxx Name[zh_TW]=pneumv diff -Nru calligra-2.9.7/flow/stencils/ChemEng/pnuemv.desktop calligra-2.9.11/flow/stencils/ChemEng/pnuemv.desktop --- calligra-2.9.7/flow/stencils/ChemEng/pnuemv.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/pnuemv.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=pnuem-v Name[sk]=pnuemv Name[sv]=pnuem vertikal +Name[tr]=Basınçlı hava hattı dikey Name[uk]=Пневматична вертикальна лінія Name[x-test]=xxpnuemvxx Name[zh_TW]=pnuemv diff -Nru calligra-2.9.7/flow/stencils/ChemEng/recipr.desktop calligra-2.9.11/flow/stencils/ChemEng/recipr.desktop --- calligra-2.9.7/flow/stencils/ChemEng/recipr.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/recipr.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Взаимный Name[sk]=recipr Name[sv]=kolv +Name[tr]=pistonlu komprasör Name[uk]=Поршневий компресор або насос Name[x-test]=xxreciprxx Name[zh_TW]=recipr diff -Nru calligra-2.9.7/flow/stencils/ChemEng/regval.desktop calligra-2.9.11/flow/stencils/ChemEng/regval.desktop --- calligra-2.9.7/flow/stencils/ChemEng/regval.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/regval.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=valor-reg Name[sk]=regval Name[sv]=reglerventil +Name[tr]=düzenleyici valf Name[uk]=Регульований клапан Name[x-test]=xxregvalxx Name[zh_TW]=regval diff -Nru calligra-2.9.7/flow/stencils/ChemEng/regvalv.desktop calligra-2.9.11/flow/stencils/ChemEng/regvalv.desktop --- calligra-2.9.7/flow/stencils/ChemEng/regvalv.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/regvalv.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=valor-reg-v Name[sk]=regvalv Name[sv]=reglerventil vertikal +Name[tr]=düzenleyici valf dikey Name[uk]=Регульований клапан, вертикальний Name[x-test]=xxregvalvxx Name[zh_TW]=regvalv diff -Nru calligra-2.9.7/flow/stencils/ChemEng/SaT-fixedtube.desktop calligra-2.9.11/flow/stencils/ChemEng/SaT-fixedtube.desktop --- calligra-2.9.7/flow/stencils/ChemEng/SaT-fixedtube.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/SaT-fixedtube.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=tubo fixo de SaT Name[sk]=SaT-fixedtube Name[sv]=tubpanna fasttub +Name[tr]=IsıDeğiştirici-sabitboru Name[uk]=Обмінник з фіксованим зведенням Name[x-test]=xxSaT-fixedtubexx Name[zh_TW]=SaT-fixedtube diff -Nru calligra-2.9.7/flow/stencils/ChemEng/SaT-floatinghead.desktop calligra-2.9.11/flow/stencils/ChemEng/SaT-floatinghead.desktop --- calligra-2.9.7/flow/stencils/ChemEng/SaT-floatinghead.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/SaT-floatinghead.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=cabeça flutuante de SaT Name[sk]=SaT-floatinghead Name[sv]=tubpanna rörlig topp +Name[tr]=IsıDeğiştirici-derecelibaşlık Name[uk]=Обмінник з рухомою голівкою Name[x-test]=xxSaT-floatingheadxx Name[zh_TW]=SaT-floatinghead diff -Nru calligra-2.9.7/flow/stencils/ChemEng/sealedtank.desktop calligra-2.9.11/flow/stencils/ChemEng/sealedtank.desktop --- calligra-2.9.7/flow/stencils/ChemEng/sealedtank.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/sealedtank.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Запаянный сосуд Name[sk]=sealedtank Name[sv]=täckt tank +Name[tr]=mühürlüdepo Name[uk]=Запечатана посудина Name[x-test]=xxsealedtankxx Name[zh_TW]=sealedtank diff -Nru calligra-2.9.7/flow/stencils/ChemEng/tank.desktop calligra-2.9.11/flow/stencils/ChemEng/tank.desktop --- calligra-2.9.7/flow/stencils/ChemEng/tank.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/tank.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[sk]=tank Name[sl]=rezervoar Name[sv]=tank +Name[tr]=depo Name[uk]=Відкрита посудина Name[x-test]=xxtankxx Name[zh_TW]=tank diff -Nru calligra-2.9.7/flow/stencils/ChemEng/traycol.desktop calligra-2.9.11/flow/stencils/ChemEng/traycol.desktop --- calligra-2.9.7/flow/stencils/ChemEng/traycol.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/traycol.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Лоток Name[sk]=traycol Name[sv]=kolonn bottnar +Name[tr]=çekmece kolonu Name[uk]=Спрощена тарільчата колона Name[x-test]=xxtraycolxx Name[zh_TW]=traycol diff -Nru calligra-2.9.7/flow/stencils/ChemEng/val.desktop calligra-2.9.11/flow/stencils/ChemEng/val.desktop --- calligra-2.9.7/flow/stencils/ChemEng/val.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/val.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=val Name[sk]=val Name[sv]=ventil +Name[tr]=valf Name[uk]=Клапан Name[x-test]=xxvalxx Name[zh_TW]=val diff -Nru calligra-2.9.7/flow/stencils/ChemEng/valv.desktop calligra-2.9.11/flow/stencils/ChemEng/valv.desktop --- calligra-2.9.7/flow/stencils/ChemEng/valv.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/valv.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=valv Name[sk]=valv Name[sv]=ventil vertikal +Name[tr]=valf dikey Name[uk]=Вертикальний клапан Name[x-test]=xxvalvxx Name[zh_TW]=valv diff -Nru calligra-2.9.7/flow/stencils/ChemEng/wcool.desktop calligra-2.9.11/flow/stencils/ChemEng/wcool.desktop --- calligra-2.9.7/flow/stencils/ChemEng/wcool.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/wcool.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=arrefecimento à água Name[sk]=wcool Name[sv]=vattenkylare +Name[tr]=susoğut Name[uk]=Водяний охолоджувач Name[x-test]=xxwcoolxx Name[zh_TW]=wcool diff -Nru calligra-2.9.7/flow/stencils/ChemEng/wcoolv.desktop calligra-2.9.11/flow/stencils/ChemEng/wcoolv.desktop --- calligra-2.9.7/flow/stencils/ChemEng/wcoolv.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/ChemEng/wcoolv.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=arrefecimento à água em v Name[sk]=wcoolv Name[sv]=vattenkylare vertikal +Name[tr]=susoğuty Name[uk]=Вертикальний водяний охолоджувач Name[x-test]=xxwcoolvxx Name[zh_TW]=wcoolv diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/30-degree-bend.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/30-degree-bend.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/30-degree-bend.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/30-degree-bend.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=30-градусное натяжение Name[sk]=30 stupňový ohyb Name[sv]=30-graders böj +Name[tr]=30-derece-büküm Name[uk]=30-градусний вигин Name[x-test]=xx30-degree-bendxx Name[zh_TW]=30 度彎曲 diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/buechner-funnel.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/buechner-funnel.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/buechner-funnel.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/buechner-funnel.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Воронка Бюхнера Name[sk]=buechner-funnel Name[sv]=büchnertratt +Name[tr]=buechner-huni Name[uk]=Лійка Бюхнера Name[x-test]=xxbuechner-funnelxx Name[zh_TW]=Buechner 漏斗 diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-black.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-black.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-black.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-black.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Конденсор (чёрный) Name[sk]=kondenzátor-čierny Name[sv]=kylare-svart +Name[tr]=kondansatör-siyah Name[uk]=Холодильник (чорний) Name[x-test]=xxcondenser-blackxx Name[zh_TW]=冷凝器-黑 diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-blue.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-blue.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-blue.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-blue.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Конденсор (синий) Name[sk]=kondenzátor-modrý Name[sv]=kylare-blå +Name[tr]=kondansatör-mavi Name[uk]=Холодильник (синій) Name[x-test]=xxcondenser-bluexx Name[zh_TW]=冷凝器-藍 diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Конденсор Name[sk]=kondenzátor Name[sv]=kylare +Name[tr]=kondansatör Name[uk]=Холодильник Name[x-test]=xxcondenserxx Name[zh_TW]=冷凝器 diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-green.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-green.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-green.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-green.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Конденсор (зелёный) Name[sk]=kondenzátor-zelený Name[sv]=kylare-grön +Name[tr]=kondanstör-yeşil Name[uk]=Холодильник (зелений) Name[x-test]=xxcondenser-greenxx Name[zh_TW]=冷凝器-綠 diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-liebig-vertical.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-liebig-vertical.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-liebig-vertical.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-liebig-vertical.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Конденсор (произвольный вертикальный) Name[sk]=kondenzátor-liebig-zvislý Name[sv]=kylare-liebig-vertikal +Name[tr]=kondansatör-liebig-dikey Name[uk]=Холодильник Лібіґа (вертикальний) Name[x-test]=xxcondenser-liebig-verticalxx Name[zh_TW]=冷凝器-liebig-垂直 diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-orange.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-orange.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-orange.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-orange.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Конденсор (оранжевый) Name[sk]=kondenzátor-oranžový Name[sv]=kylare-orange +Name[tr]=kondansatör-turuncu Name[uk]=Холодильник (помаранчевий) Name[x-test]=xxcondenser-orangexx Name[zh_TW]=冷凝器-橘 diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-pale-blue.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-pale-blue.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-pale-blue.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-pale-blue.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Конденсор (бледно-голубой) Name[sk]=kondenzátor-pale-modrý Name[sv]=kylare-blekblå +Name[tr]=kondansatör-soluk-mavi Name[uk]=Холодильник (блідо-синій) Name[x-test]=xxcondenser-pale-bluexx Name[zh_TW]=冷凝器-淡藍 diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-red.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-red.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/condenser-red.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/condenser-red.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Конденсор (красный) Name[sk]=kondenzátor-červený Name[sv]=kylare-röd +Name[tr]=kondansatör-kırmızı Name[uk]=Холодильник (червоний) Name[x-test]=xxcondenser-redxx Name[zh_TW]=冷凝器-紅 diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/erlenmeyer.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/erlenmeyer.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/erlenmeyer.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/erlenmeyer.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Колба Райана-Эрленмейера Name[sk]=ryan -Erlenmeyer Flask Name[sv]=Erlenmeyerkolv +Name[tr]=Erlenmeyer Kabı Name[uk]=Колба Ерленмеєра Name[x-test]=xxryan -Erlenmeyer Flaskxx Name[zh_TW]=ryan -Erlenmeyer Flask diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/sep-funnel.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/sep-funnel.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/sep-funnel.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/sep-funnel.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Разделительная воронка Name[sk]=sep-funnel Name[sv]=separertratt +Name[tr]=ayırma-hunisi Name[uk]=Фільтраційна лійка Name[x-test]=xxsep-funnelxx Name[zh_TW]=sep-funnel diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/sep-funnel-three-phases.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/sep-funnel-three-phases.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/sep-funnel-three-phases.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/sep-funnel-three-phases.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Разделительная воронка (трёхфазная) Name[sk]=sep-funnel-three-phases Name[sv]=separertratt-trefas +Name[tr]=üç-fazlı-ayırma-hunisi Name[uk]=Фільтраційна лійка з трьома фазами Name[x-test]=xxsep-funnel-three-phasesxx Name[zh_TW]=sep-funnel-three-phases diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/sep-funnel-two-phases.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/sep-funnel-two-phases.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/sep-funnel-two-phases.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/sep-funnel-two-phases.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Разделительная воронка (двухфазная) Name[sk]=sep-funnel-two-phases Name[sv]=separertratt-tvåfas +Name[tr]=iki fazlı ayırma hunisi Name[uk]=Фільтраційна лійка з двома фазами Name[x-test]=xxsep-funnel-two-phasesxx Name[zh_TW]=sep-funnel-two-phases diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/stirbar.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/stirbar.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/stirbar.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/stirbar.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[pt_BR]=barra batedora Name[sk]=stirbar Name[sv]=magnetstav +Name[tr]=manyetik çubuk Name[uk]=Магнітний перемішувач Name[x-test]=xxstirbarxx Name[zh_TW]=攪拌棒 diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/stirplate.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/stirplate.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/stirplate.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/stirplate.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Размешиватель Name[sk]=stirplate Name[sv]=omrörare +Name[tr]=manyetik tabaka Name[uk]=Плита для перемішування Name[x-test]=xxstirplatexx Name[zh_TW]=攪拌盤 diff -Nru calligra-2.9.7/flow/stencils/Chemistry_Lab/stirplate-front.desktop calligra-2.9.11/flow/stencils/Chemistry_Lab/stirplate-front.desktop --- calligra-2.9.7/flow/stencils/Chemistry_Lab/stirplate-front.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Chemistry_Lab/stirplate-front.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Размешиватель (спереди) Name[sk]=stirplate-front Name[sv]=omrörare-framsida +Name[tr]=manyetik tabaka-ön Name[uk]=Плита для перемішування (спереду) Name[x-test]=xxstirplate-frontxx Name[zh_TW]=攪拌盤-前 diff -Nru calligra-2.9.7/flow/stencils/Circuit/hdiode.desktop calligra-2.9.11/flow/stencils/Circuit/hdiode.desktop --- calligra-2.9.7/flow/stencils/Circuit/hdiode.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Circuit/hdiode.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Хоризонтален диод Name[bs]=Horizontalna dioda Name[ca]=Díode horitzontal -Name[ca@valencia]=Diode horitzontal +Name[ca@valencia]=Díode horitzontal Name[da]=Vandret diode Name[de]=Waagerechte Diode Name[el]=Οριζόντια δίοδος diff -Nru calligra-2.9.7/flow/stencils/Circuit/hzener.desktop calligra-2.9.11/flow/stencils/Circuit/hzener.desktop --- calligra-2.9.7/flow/stencils/Circuit/hzener.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Circuit/hzener.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Хоризонтален ценеров диод Name[bs]=Horizontalna Zener dioda Name[ca]=Díode Zener horitzontal -Name[ca@valencia]=Diode Zener horitzontal +Name[ca@valencia]=Díode Zener horitzontal Name[da]=Vandret zenerdiode Name[de]=Waagerechte Zener-Diode Name[el]=Οριζόντια δίοδος Zener diff -Nru calligra-2.9.7/flow/stencils/Circuit/speaker_de.desktop calligra-2.9.11/flow/stencils/Circuit/speaker_de.desktop --- calligra-2.9.7/flow/stencils/Circuit/speaker_de.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Circuit/speaker_de.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=Reproduktor (európsky) Name[sl]=Zvočnik (evropski) Name[sv]=Högtalare (europeisk) +Name[tr]=Hoparlör (Avrupa) Name[uk]=Гучномовець (Європа) Name[x-test]=xxSpeaker (European)xx Name[zh_TW]=揚聲器(歐洲) diff -Nru calligra-2.9.7/flow/stencils/Circuit/vdiode.desktop calligra-2.9.11/flow/stencils/Circuit/vdiode.desktop --- calligra-2.9.7/flow/stencils/Circuit/vdiode.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Circuit/vdiode.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Вертикален диод Name[bs]=Vertikalna dioda Name[ca]=Díode vertical -Name[ca@valencia]=Diode vertical +Name[ca@valencia]=Díode vertical Name[da]=Lodret diode Name[de]=Senkrechte Diode Name[el]=Κάθετη δίοδος diff -Nru calligra-2.9.7/flow/stencils/Circuit/vzener.desktop calligra-2.9.11/flow/stencils/Circuit/vzener.desktop --- calligra-2.9.7/flow/stencils/Circuit/vzener.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Circuit/vzener.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Вертикален ценеров диод Name[bs]=Vertikalna Zener dioda Name[ca]=Díode Zener vertical -Name[ca@valencia]=Diode Zener vertical +Name[ca@valencia]=Díode Zener vertical Name[da]=Lodret zenerdiode Name[de]=Senkrechte Zener-Diode Name[el]=Κάθετη δίοδος Zener diff -Nru calligra-2.9.7/flow/stencils/Circuit2/ddiode.desktop calligra-2.9.11/flow/stencils/Circuit2/ddiode.desktop --- calligra-2.9.7/flow/stencils/Circuit2/ddiode.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Circuit2/ddiode.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Diagonal Diode Name[bs]=Dijagonalna dioda Name[ca]=Díode diagonal -Name[ca@valencia]=Diode diagonal +Name[ca@valencia]=Díode diagonal Name[da]=Diagonal diode Name[de]=Diagonale Diode Name[el]=Διαγώνια δίοδος diff -Nru calligra-2.9.7/flow/stencils/Circuit2/dzener.desktop calligra-2.9.11/flow/stencils/Circuit2/dzener.desktop --- calligra-2.9.7/flow/stencils/Circuit2/dzener.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Circuit2/dzener.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Diagonal Zener Diode Name[bs]=Dijagonalna Zener dioda Name[ca]=Díode Zener diagonal -Name[ca@valencia]=Diode Zener diagonal +Name[ca@valencia]=Díode Zener diagonal Name[da]=Diagonal zenerdiode Name[de]=Diagonale Zener-Diode Name[el]=Διαγώνια δίοδος Zener diff -Nru calligra-2.9.7/flow/stencils/Circuit2/opto.desktop calligra-2.9.11/flow/stencils/Circuit2/opto.desktop --- calligra-2.9.7/flow/stencils/Circuit2/opto.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Circuit2/opto.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Оптрон Name[sk]=Optoizolant Name[sv]=Optoisolator +Name[tr]=Optoizolatör Name[uk]=Оптрон Name[x-test]=xxOptoisolatorxx Name[zh_TW]=光隔離器 diff -Nru calligra-2.9.7/flow/stencils/Circuit2/ramp.desktop calligra-2.9.11/flow/stencils/Circuit2/ramp.desktop --- calligra-2.9.7/flow/stencils/Circuit2/ramp.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Circuit2/ramp.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Рампообразная волна Name[sk]=Spádová vlna Name[sv]=Sågtandsvåg +Name[tr]=Köpüren Dalga Name[uk]=Пилкоподібний сигнал Name[x-test]=xxRamp Wavexx Name[zh_TW]=鋸齒波 diff -Nru calligra-2.9.7/flow/stencils/Circuit2/relay.desktop calligra-2.9.11/flow/stencils/Circuit2/relay.desktop --- calligra-2.9.7/flow/stencils/Circuit2/relay.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Circuit2/relay.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=Relé Name[sl]=Relé Name[sv]=Relä +Name[tr]=Röle Name[uk]=Реле Name[x-test]=xxRelayxx Name[zh_TW]=繼電器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/10700.desktop calligra-2.9.11/flow/stencils/Cisco/10700.desktop --- calligra-2.9.7/flow/stencils/Cisco/10700.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/10700.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -9,6 +9,7 @@ Name[de]=10700 Name[el]=10700 Name[en_GB]=10700 +Name[eo]=10700 Name[es]=10700 Name[et]=10700 Name[eu]=10700 diff -Nru calligra-2.9.7/flow/stencils/Cisco/15200.desktop calligra-2.9.11/flow/stencils/Cisco/15200.desktop --- calligra-2.9.7/flow/stencils/Cisco/15200.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/15200.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -9,6 +9,7 @@ Name[de]=15200 Name[el]=15200 Name[en_GB]=15200 +Name[eo]=15200 Name[es]=15200 Name[et]=15200 Name[eu]=15200 diff -Nru calligra-2.9.7/flow/stencils/Cisco/15800.desktop calligra-2.9.11/flow/stencils/Cisco/15800.desktop --- calligra-2.9.7/flow/stencils/Cisco/15800.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/15800.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -9,6 +9,7 @@ Name[de]=15800 Name[el]=15800 Name[en_GB]=15800 +Name[eo]=15800 Name[es]=15800 Name[et]=15800 Name[eu]=15800 diff -Nru calligra-2.9.7/flow/stencils/Cisco/3174.desktop calligra-2.9.11/flow/stencils/Cisco/3174.desktop --- calligra-2.9.7/flow/stencils/Cisco/3174.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/3174.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=3174 (настолен) контролер на клъстър Name[bs]=3174 (desktop) kontroler klastera Name[ca]=3174 (escriptori) controlador de clúster -Name[ca@valencia]=3174 (desktop) cluster controller +Name[ca@valencia]=3174 (escriptori) controlador de clúster Name[da]=3174 (desktop) cluster controller Name[de]=3174 (Desktop-)Cluster-Controller Name[el]=3174 (επιφάνειας εργασίας) ελεγκτής συστοιχίας diff -Nru calligra-2.9.7/flow/stencils/Cisco/3x74.desktop calligra-2.9.11/flow/stencils/Cisco/3x74.desktop --- calligra-2.9.7/flow/stencils/Cisco/3x74.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/3x74.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=3X74 (floor) контролер за клъстър Name[bs]=3174 (spratni) kontroler klastera Name[ca]=3X74 (terra) controlador de clúster -Name[ca@valencia]=3X74 (floor) cluster controller +Name[ca@valencia]=3X74 (terra) controlador de clúster Name[da]=3X74 (floor) cluster controller Name[de]=3X74 (Boden-)Cluster-Controller Name[el]=3X74 (δαπέδου) ελεγκτής συστοιχίας diff -Nru calligra-2.9.7/flow/stencils/Cisco/6701.desktop calligra-2.9.11/flow/stencils/Cisco/6701.desktop --- calligra-2.9.7/flow/stencils/Cisco/6701.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/6701.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -9,6 +9,7 @@ Name[de]=6701 Name[el]=6701 Name[en_GB]=6701 +Name[eo]=6701 Name[es]=6701 Name[et]=6701 Name[eu]=6701 diff -Nru calligra-2.9.7/flow/stencils/Cisco/6705.desktop calligra-2.9.11/flow/stencils/Cisco/6705.desktop --- calligra-2.9.7/flow/stencils/Cisco/6705.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/6705.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -9,6 +9,7 @@ Name[de]=6705 Name[el]=6705 Name[en_GB]=6705 +Name[eo]=6705 Name[es]=6705 Name[et]=6705 Name[eu]=6705 diff -Nru calligra-2.9.7/flow/stencils/Cisco/6732.desktop calligra-2.9.11/flow/stencils/Cisco/6732.desktop --- calligra-2.9.7/flow/stencils/Cisco/6732.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/6732.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -9,6 +9,7 @@ Name[de]=6732 Name[el]=6732 Name[en_GB]=6732 +Name[eo]=6732 Name[es]=6732 Name[et]=6732 Name[eu]=6732 diff -Nru calligra-2.9.7/flow/stencils/Cisco/antenna.desktop calligra-2.9.11/flow/stencils/Cisco/antenna.desktop --- calligra-2.9.7/flow/stencils/Cisco/antenna.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/antenna.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Антена Name[bs]=Antena Name[ca]=Antena -Name[ca@valencia]=Antenna +Name[ca@valencia]=Antena Name[cs]=Anténa Name[da]=Antenne Name[de]=Antenne diff -Nru calligra-2.9.7/flow/stencils/Cisco/branch_office_subdued.desktop calligra-2.9.11/flow/stencils/Cisco/branch_office_subdued.desktop --- calligra-2.9.7/flow/stencils/Cisco/branch_office_subdued.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/branch_office_subdued.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Офис отделения приглушённый Name[sk]=Branch office tlmený Name[sv]=Filialkontor diskret +Name[tr]=Alt grup ofisi pasif Name[uk]=Філія (притлумлено) Name[x-test]=xxBranch office subduedxx Name[zh_CN]=分支办公室(柔和) diff -Nru calligra-2.9.7/flow/stencils/Cisco/breakout_box.desktop calligra-2.9.11/flow/stencils/Cisco/breakout_box.desktop --- calligra-2.9.7/flow/stencils/Cisco/breakout_box.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/breakout_box.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Разбивающий модуль Name[sk]=Pretrhnutá škatuľa Name[sv]=Kopplingslåda +Name[tr]=Kaçış kutusu Name[uk]=Комутаційний пристрій Name[x-test]=xxBreakout boxxx Name[zh_CN]=中断箱 diff -Nru calligra-2.9.7/flow/stencils/Cisco/centri_firewall.desktop calligra-2.9.11/flow/stencils/Cisco/centri_firewall.desktop --- calligra-2.9.7/flow/stencils/Cisco/centri_firewall.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/centri_firewall.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Защитна стена Centri Name[bs]=Centri Firewall Name[ca]=Tallafoc Centri -Name[ca@valencia]=Tallafocs Centri +Name[ca@valencia]=Tallafoc Centri Name[cs]=Centri Firewall Name[da]=Centri Firewall Name[de]=Centri-Firewall diff -Nru calligra-2.9.7/flow/stencils/Cisco/data_center_switch.desktop calligra-2.9.11/flow/stencils/Cisco/data_center_switch.desktop --- calligra-2.9.7/flow/stencils/Cisco/data_center_switch.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/data_center_switch.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -6,7 +6,7 @@ Name[da]=Datacenterswitch Name[de]=Daten-Center Switch Name[el]=Data Center Switch -Name[en_GB]=Data Center Switch +Name[en_GB]=Data Centre Switch Name[es]=Conmutador de centro de datos Name[et]=Andmekeskuse kommutaator Name[eu]=Datu-zentroko kommutadorea diff -Nru calligra-2.9.7/flow/stencils/Cisco/data_center_switch_reversed.desktop calligra-2.9.11/flow/stencils/Cisco/data_center_switch_reversed.desktop --- calligra-2.9.7/flow/stencils/Cisco/data_center_switch_reversed.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/data_center_switch_reversed.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -6,7 +6,7 @@ Name[da]=Datacenterswitch omvendt Name[de]=Daten-Center Switch invertiert Name[el]=Έγινε αναστροφή μεταγωγέα κέντρου δεδομένων -Name[en_GB]=Data Center Switch Reversed +Name[en_GB]=Data Centre Switch Reversed Name[es]=Conmutador invertido de centro de datos Name[et]=Andmekeskuse kommutaator tagurpidi Name[eu]=Datu-zentroko alderantzizko kommutadorea diff -Nru calligra-2.9.7/flow/stencils/Cisco/data_switch_processor.desktop calligra-2.9.11/flow/stencils/Cisco/data_switch_processor.desktop --- calligra-2.9.7/flow/stencils/Cisco/data_switch_processor.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/data_switch_processor.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Обработчик коммутации данных Name[sk]=Procesor dátového prepínača Name[sv]=Dataväxelprocessor +Name[tr]=Veri Anahtarı İşlemcisi Name[uk]=Процесор комутації даних Name[x-test]=xxData Switch Processorxx Name[zh_CN]=资料交换器处理器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/detector.desktop calligra-2.9.11/flow/stencils/Cisco/detector.desktop --- calligra-2.9.7/flow/stencils/Cisco/detector.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/detector.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[sk]=Detektor Name[sl]=Detektor Name[sv]=Detektor +Name[tr]=Algılayıcı Name[uk]=Індикатор Name[x-test]=xxDetectorxx Name[zh_CN]=检测器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/digital_cross-connect.desktop calligra-2.9.11/flow/stencils/Cisco/digital_cross-connect.desktop --- calligra-2.9.7/flow/stencils/Cisco/digital_cross-connect.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/digital_cross-connect.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Цифровой разветвитель Name[sk]=Digitálne prepojenie Name[sv]=Digital korskoppling +Name[tr]=Sayısal Çapraz-Bağlayıcı Name[uk]=Цифровий розгалуджувач Name[x-test]=xxDigital Cross-Connectxx Name[zh_CN]=交叉连接器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/director_fcis.desktop calligra-2.9.11/flow/stencils/Cisco/director_fcis.desktop --- calligra-2.9.7/flow/stencils/Cisco/director_fcis.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/director_fcis.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Интеллектуальный коммутатор носителя каналов управляющего класса Name[sk]=Inteligentný prepínač Director-class Fibre Channel Name[sv]=Avancerad intelligent fiberkanalväxel +Name[tr]=Yönetmen-sınıfı Fiber Kanal akıllı anahtarı Name[uk]=Інтелектуальний комутатор оптоволоконного каналу класу спрямовуючого пристрою Name[x-test]=xxDirector-class Fibre Channel intelligent switchxx Name[zh_CN]=导向器级光纤通道智能开关 diff -Nru calligra-2.9.7/flow/stencils/Cisco/edge_label_switch_router_with_netflow.desktop calligra-2.9.11/flow/stencils/Cisco/edge_label_switch_router_with_netflow.desktop --- calligra-2.9.7/flow/stencils/Cisco/edge_label_switch_router_with_netflow.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/edge_label_switch_router_with_netflow.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Угловая метка коммутатор-маршрутизатора с поддержкой NetFlow Name[sk]=Edge Label Switch Router s NetFlow Name[sv]=Edge etikettbytesrouter med nätflöde +Name[tr]=NetFlow içeren "Edge Label Switch Router" Name[uk]=Комутатор-маршрутизатор Edge з NetFlow Name[x-test]=xxEdge Label Switch Router with NetFlowxx Name[zh_CN]=使用 NetFlow 的边缘标签交换路由器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/etherclient.desktop calligra-2.9.11/flow/stencils/Cisco/etherclient.desktop --- calligra-2.9.7/flow/stencils/Cisco/etherclient.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/etherclient.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Клиент локальной сети Name[sk]=EtherClient Name[sv]=Etherklient +Name[tr]=EtherClient Name[uk]=EtherClient Name[x-test]=xxEtherClientxx Name[zh_CN]=以太客户端 diff -Nru calligra-2.9.7/flow/stencils/Cisco/fc_storage.desktop calligra-2.9.11/flow/stencils/Cisco/fc_storage.desktop --- calligra-2.9.7/flow/stencils/Cisco/fc_storage.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/fc_storage.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[ru]=Хранилище FC Name[sk]=FC úložisko Name[sv]=Fiberkanallagring +Name[tr]=FC Depolama Name[uk]=Сховище FC Name[x-test]=xxFC Storagexx Name[zh_CN]=FC 存储器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/fddi_ring.desktop calligra-2.9.11/flow/stencils/Cisco/fddi_ring.desktop --- calligra-2.9.7/flow/stencils/Cisco/fddi_ring.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/fddi_ring.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[ru]=Кольцо FDDI Name[sk]=FDDI prstenec Name[sv]=FDDI-ring +Name[tr]=FDDI Halka Name[uk]=Кільце FDDI Name[x-test]=xxFDDI Ringxx Name[zh_CN]=FDDI Ring diff -Nru calligra-2.9.7/flow/stencils/Cisco/firewall.desktop calligra-2.9.11/flow/stencils/Cisco/firewall.desktop --- calligra-2.9.7/flow/stencils/Cisco/firewall.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/firewall.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Защитна стена Name[bs]=Firewall Name[ca]=Tallafoc -Name[ca@valencia]=Tallafocs +Name[ca@valencia]=Tallafoc Name[cs]=Firewall Name[da]=Firewall Name[de]=Firewall diff -Nru calligra-2.9.7/flow/stencils/Cisco/firewall_horizontal.desktop calligra-2.9.11/flow/stencils/Cisco/firewall_horizontal.desktop --- calligra-2.9.7/flow/stencils/Cisco/firewall_horizontal.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/firewall_horizontal.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Firewall horizontal Name[bs]=Horizontalni Firewall Name[ca]=Tallafoc horitzontal -Name[ca@valencia]=Tallafocs horitzontal +Name[ca@valencia]=Tallafoc horitzontal Name[da]=Firewall vandret Name[de]=Firewall waagerecht Name[el]=Τείχος προστασίας οριζόντιο diff -Nru calligra-2.9.7/flow/stencils/Cisco/firewall_subdued.desktop calligra-2.9.11/flow/stencils/Cisco/firewall_subdued.desktop --- calligra-2.9.7/flow/stencils/Cisco/firewall_subdued.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/firewall_subdued.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Firewall subdued Name[bs]=Podčinjeni Firewall Name[ca]=Tallafoc suavitzat -Name[ca@valencia]=Tallafocs suavitzat +Name[ca@valencia]=Tallafoc suavitzat Name[da]=Firewall nedtonet Name[de]=Firewall (inaktiv) Name[el]=Τείχος προστασίας υποτονικό diff -Nru calligra-2.9.7/flow/stencils/Cisco/fwsm.desktop calligra-2.9.11/flow/stencils/Cisco/fwsm.desktop --- calligra-2.9.7/flow/stencils/Cisco/fwsm.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/fwsm.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Firewall Service Module Name[bs]=Modul Firewall usluge Name[ca]=Mòdul de serveis del tallafoc -Name[ca@valencia]=Mòdul de serveis del tallafocs +Name[ca@valencia]=Mòdul de serveis del tallafoc Name[da]=Firewall Service Module Name[de]=Firewall-Dienstmodul Name[el]=Άρθρωμα υπηρεσίας τείχους προστασίας diff -Nru calligra-2.9.7/flow/stencils/Cisco/government_building.desktop calligra-2.9.11/flow/stencils/Cisco/government_building.desktop --- calligra-2.9.7/flow/stencils/Cisco/government_building.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/government_building.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[sk]=Vládna budova Name[sl]=Vladna stavba Name[sv]=Statlig byggnad +Name[tr]=Hükümet Binası Name[uk]=Урядова будівля Name[x-test]=xxGovernment Buildingxx Name[zh_CN]=政府建筑 diff -Nru calligra-2.9.7/flow/stencils/Cisco/guard.desktop calligra-2.9.11/flow/stencils/Cisco/guard.desktop --- calligra-2.9.7/flow/stencils/Cisco/guard.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/guard.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[sk]=Strážca Name[sl]=Stražar Name[sv]=Vakt +Name[tr]=Gözetim Name[uk]=Охоронець Name[x-test]=xxGuardxx Name[zh_CN]=保护 diff -Nru calligra-2.9.7/flow/stencils/Cisco/handheld.desktop calligra-2.9.11/flow/stencils/Cisco/handheld.desktop --- calligra-2.9.7/flow/stencils/Cisco/handheld.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/handheld.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=Handheld Name[sl]=Ročni računalnik Name[sv]=Handdator +Name[tr]=El Bilgisayarı Name[uk]=Кишеньковий пристрій Name[x-test]=xxHandheldxx Name[zh_CN]=手持设备 diff -Nru calligra-2.9.7/flow/stencils/Cisco/home_office.desktop calligra-2.9.11/flow/stencils/Cisco/home_office.desktop --- calligra-2.9.7/flow/stencils/Cisco/home_office.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/home_office.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -30,6 +30,7 @@ Name[sk]=Home office Name[sl]=Domača pisarna Name[sv]=Hemmakontor +Name[tr]=Ev Ofisi Name[uk]=Домашній офіс Name[x-test]=xxHome officexx Name[zh_CN]=家庭办公室 diff -Nru calligra-2.9.7/flow/stencils/Cisco/hootphone.desktop calligra-2.9.11/flow/stencils/Cisco/hootphone.desktop --- calligra-2.9.7/flow/stencils/Cisco/hootphone.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/hootphone.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Аппарат гудков Name[sk]=HootPhone Name[sv]=Högtalartelefon +Name[tr]=HootPhone Name[uk]=Телефон з тоновим дзвінком Name[x-test]=xxHootPhonexx Name[zh_CN]=HootPhone diff -Nru calligra-2.9.7/flow/stencils/Cisco/house_blue.desktop calligra-2.9.11/flow/stencils/Cisco/house_blue.desktop --- calligra-2.9.7/flow/stencils/Cisco/house_blue.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/house_blue.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=Dom modrý Name[sl]=Modra hiša Name[sv]=Hus blått +Name[tr]=Ev mavi Name[uk]=Будинок (синім) Name[x-test]=xxHouse bluexx Name[zh_CN]=蓝色房子 diff -Nru calligra-2.9.7/flow/stencils/Cisco/house.desktop calligra-2.9.11/flow/stencils/Cisco/house.desktop --- calligra-2.9.7/flow/stencils/Cisco/house.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/house.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -32,6 +32,7 @@ Name[sk]=Dom Name[sl]=Hiša Name[sv]=Hus +Name[tr]=Ev Name[ug]=House مۇزىكىسى Name[uk]=Будинок Name[x-test]=xxHousexx diff -Nru calligra-2.9.7/flow/stencils/Cisco/hub.desktop calligra-2.9.11/flow/stencils/Cisco/hub.desktop --- calligra-2.9.7/flow/stencils/Cisco/hub.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/hub.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -31,6 +31,7 @@ Name[sk]=Rozbočovač Name[sl]=Vozlišče Name[sv]=Nätnav +Name[tr]=Hub Name[uk]=Концентратор Name[x-test]=xxHubxx Name[zh_CN]=集线器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/hub_subdued.desktop calligra-2.9.11/flow/stencils/Cisco/hub_subdued.desktop --- calligra-2.9.7/flow/stencils/Cisco/hub_subdued.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/hub_subdued.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Повторитель приглушённый Name[sk]=Hub tlmený Name[sv]=Nätnav diskret +Name[tr]=Hub pasif Name[uk]=Концентратор (притлумлено) Name[x-test]=xxHub subduedxx Name[zh_CN]=集线器(柔和) diff -Nru calligra-2.9.7/flow/stencils/Cisco/iad_router.desktop calligra-2.9.11/flow/stencils/Cisco/iad_router.desktop --- calligra-2.9.7/flow/stencils/Cisco/iad_router.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/iad_router.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[sk]=IAD router Name[sl]=Usmerjevalnik IAD Name[sv]=IAD-router +Name[tr]=IAD yönlendirici Name[uk]=Маршрутизатор IAD Name[x-test]=xxIAD routerxx Name[zh_CN]=IAD 路由器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/ibm_tower.desktop calligra-2.9.11/flow/stencils/Cisco/ibm_tower.desktop --- calligra-2.9.7/flow/stencils/Cisco/ibm_tower.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/ibm_tower.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=IBM Tower Name[sl]=Stolp IBM Name[sv]=IBM-torn +Name[tr]=IBM Kule Name[uk]=Комп’ютер IBM у корпусі «башта» Name[x-test]=xxIBM Towerxx Name[zh_CN]=IBM Tower diff -Nru calligra-2.9.7/flow/stencils/Cisco/intelliswitch_stack.desktop calligra-2.9.11/flow/stencils/Cisco/intelliswitch_stack.desktop --- calligra-2.9.7/flow/stencils/Cisco/intelliswitch_stack.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/intelliswitch_stack.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Стэк IntelliSwitch Name[sk]=IntelliSwitch Stack Name[sv]=IntelliSwitch-stack +Name[tr]=IntelliSwitch Yığın Name[uk]=Стек IntelliSwitch Name[x-test]=xxIntelliSwitch Stackxx Name[zh_CN]=Intelliswitch 堆栈 diff -Nru calligra-2.9.7/flow/stencils/Cisco/ios_firewall.desktop calligra-2.9.11/flow/stencils/Cisco/ios_firewall.desktop --- calligra-2.9.7/flow/stencils/Cisco/ios_firewall.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/ios_firewall.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Защитна стена IOS Name[bs]=IOS Firewall Name[ca]=Tallafoc IOS -Name[ca@valencia]=Tallafocs IOS +Name[ca@valencia]=Tallafoc IOS Name[cs]=IOS Firewall Name[da]=IOS Firewall Name[de]=IOS-Firewall @@ -29,6 +29,7 @@ Name[sk]=IOS Firewall Name[sl]=Požarni zid IOS Name[sv]=IOS-brandvägg +Name[tr]=IOS Güvenlik Duvarı Name[uk]=Брандмауер IOS Name[x-test]=xxIOS Firewallxx Name[zh_CN]=IOS 防火墙 diff -Nru calligra-2.9.7/flow/stencils/Cisco/isdn_switch.desktop calligra-2.9.11/flow/stencils/Cisco/isdn_switch.desktop --- calligra-2.9.7/flow/stencils/Cisco/isdn_switch.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/isdn_switch.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Комутатор ISDN Name[bs]=ISDN prekidač Name[ca]=XDSI switch -Name[ca@valencia]=ISDN switch +Name[ca@valencia]=XDSI switch Name[da]=ISDN-switch Name[de]=ISDN-Switch Name[el]=ISDN switch diff -Nru calligra-2.9.7/flow/stencils/Cisco/itp.desktop calligra-2.9.11/flow/stencils/Cisco/itp.desktop --- calligra-2.9.7/flow/stencils/Cisco/itp.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/itp.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=ITP Name[sl]=ITP Name[sv]=ITP +Name[tr]=ITP Name[uk]=ITP Name[x-test]=xxITPxx Name[zh_CN]=ITP diff -Nru calligra-2.9.7/flow/stencils/Cisco/jbod.desktop calligra-2.9.11/flow/stencils/Cisco/jbod.desktop --- calligra-2.9.7/flow/stencils/Cisco/jbod.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/jbod.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=JBOD Name[sl]=JBOD Name[sv]=JBOD +Name[tr]=JBOD Name[uk]=JBOD Name[x-test]=xxJBODxx Name[zh_CN]=JBOD diff -Nru calligra-2.9.7/flow/stencils/Cisco/key.desktop calligra-2.9.11/flow/stencils/Cisco/key.desktop --- calligra-2.9.7/flow/stencils/Cisco/key.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/key.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -31,6 +31,7 @@ Name[sk]=Kľúč Name[sl]=Ključ Name[sv]=Nyckel +Name[tr]=Anahtar Name[ug]=ئاچقۇچ Name[uk]=Ключ Name[x-test]=xxKeyxx diff -Nru calligra-2.9.7/flow/stencils/Cisco/longreach_cpe.desktop calligra-2.9.11/flow/stencils/Cisco/longreach_cpe.desktop --- calligra-2.9.7/flow/stencils/Cisco/longreach_cpe.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/longreach_cpe.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=LongReach CPE Name[sk]=LongReach CPE Name[sv]=Kundlokalenhet med lång räckvidd +Name[tr]=LongReach CPE Name[uk]=LongReach CPE Name[x-test]=xxLongReach CPExx Name[zh_CN]=LongReach CPE diff -Nru calligra-2.9.7/flow/stencils/Cisco/medium_building_blue.desktop calligra-2.9.11/flow/stencils/Cisco/medium_building_blue.desktop --- calligra-2.9.7/flow/stencils/Cisco/medium_building_blue.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/medium_building_blue.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Среднее строение синее Name[sk]=Stredná budova modrá Name[sv]=Medelstor byggnad blå +Name[tr]=OrtaBoy Bina mavi Name[uk]=Середня будівля (синім) Name[x-test]=xxMedium Building bluexx Name[zh_CN]=中型建筑(蓝色) diff -Nru calligra-2.9.7/flow/stencils/Cisco/medium_building.desktop calligra-2.9.11/flow/stencils/Cisco/medium_building.desktop --- calligra-2.9.7/flow/stencils/Cisco/medium_building.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/medium_building.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Среднее строение Name[sk]=Stredná budova Name[sv]=Medelstor byggnad +Name[tr]=OrtaBoy Bina Name[uk]=Середня будівля Name[x-test]=xxMedium Buildingxx Name[zh_CN]=中型建筑 diff -Nru calligra-2.9.7/flow/stencils/Cisco/medium_building_subdued.desktop calligra-2.9.11/flow/stencils/Cisco/medium_building_subdued.desktop --- calligra-2.9.7/flow/stencils/Cisco/medium_building_subdued.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/medium_building_subdued.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Среднее строение приглушённое Name[sk]=Stredná budova tlmená Name[sv]=Medelstor byggnad diskret +Name[tr]=OrtaBoy Bina pasif Name[uk]=Середня будівля (притлумлено) Name[x-test]=xxMedium Building subduedxx Name[zh_CN]=中型建筑(柔和) diff -Nru calligra-2.9.7/flow/stencils/Cisco/mgx_8000_series_voice_gateway.desktop calligra-2.9.11/flow/stencils/Cisco/mgx_8000_series_voice_gateway.desktop --- calligra-2.9.7/flow/stencils/Cisco/mgx_8000_series_voice_gateway.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/mgx_8000_series_voice_gateway.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Голосовой шлюз серий MGX 8000 Name[sk]=MGX 8000 Series Voice Gateway Name[sv]=Serie MGX-8000 röstförmedlingsnod +Name[tr]=MGX 8000 Serisi Ses Geçidi Name[uk]=Голосовий шлюз серії MGX 8000 Name[x-test]=xxMGX 8000 Series Voice Gatewayxx Name[zh_CN]=MGX 8000 系统列语音网关 diff -Nru calligra-2.9.7/flow/stencils/Cisco/microwebserver.desktop calligra-2.9.11/flow/stencils/Cisco/microwebserver.desktop --- calligra-2.9.7/flow/stencils/Cisco/microwebserver.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/microwebserver.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Микровебсервер Name[sk]=MicroWebserver Name[sv]=Microwebbserver +Name[tr]=MikroWebsunucu Name[uk]=Мікровебсервер Name[x-test]=xxMicroWebserverxx Name[zh_CN]=微型网页服务器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/mini_vax.desktop calligra-2.9.11/flow/stencils/Cisco/mini_vax.desktop --- calligra-2.9.7/flow/stencils/Cisco/mini_vax.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/mini_vax.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=Mini VAX Name[sl]=Mini VAX Name[sv]=Mini-VAX +Name[tr]=Mini VAX Name[uk]=Mini VAX Name[x-test]=xxMini VAXxx Name[zh_CN]=Mini VAX diff -Nru calligra-2.9.7/flow/stencils/Cisco/mobile_access_ip_phone.desktop calligra-2.9.11/flow/stencils/Cisco/mobile_access_ip_phone.desktop --- calligra-2.9.7/flow/stencils/Cisco/mobile_access_ip_phone.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/mobile_access_ip_phone.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=IP телефон мобильного доступа Name[sk]=Mobile Access IP Phone Name[sv]=Mobil åtkomst IP-telefon +Name[tr]=Mobil Erişim IP Telefon Name[uk]=IP-телефон з мобільним доступом Name[x-test]=xxMobile Access IP Phonexx Name[zh_CN]=移动存取 IP 电话 diff -Nru calligra-2.9.7/flow/stencils/Cisco/mobile_access_router.desktop calligra-2.9.11/flow/stencils/Cisco/mobile_access_router.desktop --- calligra-2.9.7/flow/stencils/Cisco/mobile_access_router.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/mobile_access_router.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Маршрутизатор мобильного доступа Name[sk]=Router mobilného prístupu Name[sv]=Mobil åtkomstrouter +Name[tr]=Mobil Erişim Yönlendirici Name[uk]=Маршрутизатор мобільного доступу Name[x-test]=xxMobile Access Routerxx Name[zh_CN]=移动存取路由器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/moh_server.desktop calligra-2.9.11/flow/stencils/Cisco/moh_server.desktop --- calligra-2.9.7/flow/stencils/Cisco/moh_server.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/moh_server.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=MoH сервер (музыка во время задержки) Name[sk]=MoH server (Music on Hold) Name[sv]=Musikserver (väntande musik) +Name[tr]=MoH sunucu (Bekletme Müziği) Name[uk]=Сервер MoH (Music on Hold) Name[x-test]=xxMoH server (Music on Hold)xx Name[zh_CN]=MoH 服务(Music on Hold) diff -Nru calligra-2.9.7/flow/stencils/Cisco/multi-fabric_server_switch.desktop calligra-2.9.11/flow/stencils/Cisco/multi-fabric_server_switch.desktop --- calligra-2.9.7/flow/stencils/Cisco/multi-fabric_server_switch.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/multi-fabric_server_switch.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Сервер коммутации Multi-Fabric Name[sk]=Multi-Fabric Server Switch Name[sv]=Flernätverks-serverväxel +Name[tr]=Multi-Bileşenli Sunucu Anahtar Name[uk]=Сервер комутації Multi-Fabric Name[x-test]=xxMulti-Fabric Server Switchxx Name[zh_CN]=Multi-Fabric 服务器交换机 diff -Nru calligra-2.9.7/flow/stencils/Cisco/multilayer_remote_switch.desktop calligra-2.9.11/flow/stencils/Cisco/multilayer_remote_switch.desktop --- calligra-2.9.7/flow/stencils/Cisco/multilayer_remote_switch.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/multilayer_remote_switch.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Многоуровневый удалённый коммутатор Name[sk]=Viacvrstvový vzdialený prepínač Name[sv]=Flerlagers-fjärrväxel +Name[tr]=Çokkatmanlı Uzaktan Anahtar Name[uk]=Віддалений багаторівневий комутатор Name[x-test]=xxMultilayer Remote Switchxx Name[zh_CN]=Multilayer 远程交换机 diff -Nru calligra-2.9.7/flow/stencils/Cisco/multilayer_switch.desktop calligra-2.9.11/flow/stencils/Cisco/multilayer_switch.desktop --- calligra-2.9.7/flow/stencils/Cisco/multilayer_switch.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/multilayer_switch.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Многоуровневый коммутатор Name[sk]=Viacvrstvový prepínač Name[sv]=Flerlagersväxel +Name[tr]=Çokkatmanlı anahtar Name[uk]=Багаторівневий комутатор Name[x-test]=xxMultilayer switchxx Name[zh_CN]=多层交换机 diff -Nru calligra-2.9.7/flow/stencils/Cisco/multilayer_switch_with_silicon.desktop calligra-2.9.11/flow/stencils/Cisco/multilayer_switch_with_silicon.desktop --- calligra-2.9.7/flow/stencils/Cisco/multilayer_switch_with_silicon.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/multilayer_switch_with_silicon.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Многоуровневый коммутатор с поддержкой Silicon Name[sk]=Viacvrstvový prepínač s kremíkom Name[sv]=Flerlagersväxel med kisel +Name[tr]=Silikonlu Çokkatmanlı Anahtar Name[uk]=Багаторівневий комутатор з підтримкою Silicon Name[x-test]=xxMultilayer Switch with Siliconxx Name[zh_CN]=硅多层交换机 diff -Nru calligra-2.9.7/flow/stencils/Cisco/multilayer_switch_with_silicon_subdued.desktop calligra-2.9.11/flow/stencils/Cisco/multilayer_switch_with_silicon_subdued.desktop --- calligra-2.9.7/flow/stencils/Cisco/multilayer_switch_with_silicon_subdued.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/multilayer_switch_with_silicon_subdued.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Многоуровневый коммутатор с поддержкой Silicon приглушённый Name[sk]=Viacvrstvový prepínač s kremíkom tlmený Name[sv]=Flerlagersväxel med kisel diskret +Name[tr]=Silikonlu Çokkatmanlı Anahtar pasif Name[uk]=Багаторівневий комутатор з підтримкою Silicon (притлумлено) Name[x-test]=xxMultilayer Switch with Silicon subduedxx Name[zh_CN]=硅制服多层交换机 diff -Nru calligra-2.9.7/flow/stencils/Cisco/multiswitch_device.desktop calligra-2.9.11/flow/stencils/Cisco/multiswitch_device.desktop --- calligra-2.9.7/flow/stencils/Cisco/multiswitch_device.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/multiswitch_device.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Устройство множественной коммутации Name[sk]=Zariadenie viacnásobného prepínača Name[sv]=Flerväxelenhet +Name[tr]=ÇokluAnahtar Aygıtı Name[uk]=Пристрій мультикомутації Name[x-test]=xxMultiSwitch Devicexx Name[zh_CN]=多交换机设备 diff -Nru calligra-2.9.7/flow/stencils/Cisco/optical_fiber.desktop calligra-2.9.11/flow/stencils/Cisco/optical_fiber.desktop --- calligra-2.9.7/flow/stencils/Cisco/optical_fiber.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/optical_fiber.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -7,7 +7,7 @@ Name[da]=Optisk fiber Name[de]=Optische Faser Name[el]=Οπτική ίνα -Name[en_GB]=Optical Fiber +Name[en_GB]=Optical Fibre Name[es]=Fibra óptica Name[et]=Optiline kaabel Name[eu]=Zuntz optikoa diff -Nru calligra-2.9.7/flow/stencils/Cisco/pc_man.desktop calligra-2.9.11/flow/stencils/Cisco/pc_man.desktop --- calligra-2.9.7/flow/stencils/Cisco/pc_man.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/pc_man.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[ru]=Человек за персональным компьютером Name[sk]=PC Man Name[sv]=Persondatorman +Name[tr]=PC Adam Name[uk]=Чоловік за ПК Name[x-test]=xxPC Manxx Name[zh_CN]=PC 男性 diff -Nru calligra-2.9.7/flow/stencils/Cisco/pc_man_left.desktop calligra-2.9.11/flow/stencils/Cisco/pc_man_left.desktop --- calligra-2.9.7/flow/stencils/Cisco/pc_man_left.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/pc_man_left.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Человек за персональным компьютером (левый) Name[sk]=PC muž vľavo Name[sv]=Persondatorman vänster +Name[tr]=PC Adam sol Name[uk]=Чоловік за ПК (ліворуч) Name[x-test]=xxPC Man leftxx Name[zh_CN]=PC 男性(左) diff -Nru calligra-2.9.7/flow/stencils/Cisco/pc_with_router-based_software.desktop calligra-2.9.11/flow/stencils/Cisco/pc_with_router-based_software.desktop --- calligra-2.9.7/flow/stencils/Cisco/pc_with_router-based_software.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/pc_with_router-based_software.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=ПК с софтовым маршрутизатором Name[sk]=PC s Router-Based Software Name[sv]=Persondator med routerbaserad programvara +Name[tr]=Yönlendirici-Tabanlı Yazılımlı PC Name[uk]=ПК з програмним забезпеченням на основі маршрутизатора Name[x-test]=xxPC with Router-Based Softwarexx Name[zh_CN]=有路由软件的 PC diff -Nru calligra-2.9.7/flow/stencils/Cisco/pix_firewall.desktop calligra-2.9.11/flow/stencils/Cisco/pix_firewall.desktop --- calligra-2.9.7/flow/stencils/Cisco/pix_firewall.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/pix_firewall.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Защитна стена PIX Name[bs]=PIX Firewall Name[ca]=Tallafoc PIX -Name[ca@valencia]=Tallafocs PIX +Name[ca@valencia]=Tallafoc PIX Name[da]=PIX Firewall Name[de]=PIX-Firewall Name[el]=PIX Firewall diff -Nru calligra-2.9.7/flow/stencils/Cisco/pix_firewall_left.desktop calligra-2.9.11/flow/stencils/Cisco/pix_firewall_left.desktop --- calligra-2.9.7/flow/stencils/Cisco/pix_firewall_left.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/pix_firewall_left.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=PIX Firewall Left Name[bs]=Lijevi PIX Firewall Name[ca]=Tallafoc PIX esquerra -Name[ca@valencia]=Tallafocs PIX esquerra +Name[ca@valencia]=Tallafoc PIX esquerra Name[da]=PIX Firewall venstre Name[de]=PIX-Firewall links Name[el]=PIX Firewall Left diff -Nru calligra-2.9.7/flow/stencils/Cisco/router_with_firewall.desktop calligra-2.9.11/flow/stencils/Cisco/router_with_firewall.desktop --- calligra-2.9.7/flow/stencils/Cisco/router_with_firewall.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/router_with_firewall.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Маршрутизатор със защитна стена Name[bs]=Ruter sa Firewall-om Name[ca]=Encaminador amb tallafoc -Name[ca@valencia]=Encaminador amb tallafocs +Name[ca@valencia]=Encaminador amb tallafoc Name[cs]=Router s firewallem Name[da]=Router med firewall Name[de]=Router mit Firewall diff -Nru calligra-2.9.7/flow/stencils/Cisco/sonet_mux.desktop calligra-2.9.11/flow/stencils/Cisco/sonet_mux.desktop --- calligra-2.9.7/flow/stencils/Cisco/sonet_mux.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/sonet_mux.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[ru]=Переключатель SONET Name[sk]=SONET MUX Name[sv]=SONET-multiplexer +Name[tr]=SONET Terminal Çoklayıcı Name[uk]=SONET MUX Name[x-test]=xxSONET MUXxx Name[zh_CN]=SONET MUX diff -Nru calligra-2.9.7/flow/stencils/Cisco/stb.desktop calligra-2.9.11/flow/stencils/Cisco/stb.desktop --- calligra-2.9.7/flow/stencils/Cisco/stb.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/stb.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=STB (модуль установки) Name[sk]=STB (set top box) Name[sv]=Digitalbox +Name[tr]=STB Name[uk]=STB (модуль встановлення) Name[x-test]=xxSTB (set top box)xx Name[zh_CN]=STB (机顶盒) diff -Nru calligra-2.9.7/flow/stencils/Cisco/svx.desktop calligra-2.9.11/flow/stencils/Cisco/svx.desktop --- calligra-2.9.7/flow/stencils/Cisco/svx.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/svx.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=SVX (взаимозаменяем с конечным офисом) Name[sk]=SVX (zameniteľné s End office) Name[sv]=SVX (utbytbar mot slutkontorsväxel) +Name[tr]=SVX Name[uk]=SVX (з взаємообміном, з кінцевою телефонною станцією) Name[x-test]=xxSVX (interchangeable with End office)xx Name[zh_CN]=SVX(与远端办公室可互换) diff -Nru calligra-2.9.7/flow/stencils/Cisco/switch_processor.desktop calligra-2.9.11/flow/stencils/Cisco/switch_processor.desktop --- calligra-2.9.7/flow/stencils/Cisco/switch_processor.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/switch_processor.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[sk]=Prepínací procesor Name[sl]=Preklopi procesor Name[sv]=Linjeväxelprocessor +Name[tr]=Anahtar İşlemcisi Name[uk]=Процесор комутації маршрутів Name[x-test]=xxSwitch Processorxx Name[zh_CN]=交换机处理器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/system_controller.desktop calligra-2.9.11/flow/stencils/Cisco/system_controller.desktop --- calligra-2.9.7/flow/stencils/Cisco/system_controller.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/system_controller.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[ru]=Контроллер системы Name[sk]=Systémový ovládač Name[sv]=Systemstyrenhet +Name[tr]=Sistem denetleyici Name[uk]=Системний контролер Name[x-test]=xxSystem controllerxx Name[zh_CN]=系统控制器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/tape_array.desktop calligra-2.9.11/flow/stencils/Cisco/tape_array.desktop --- calligra-2.9.7/flow/stencils/Cisco/tape_array.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/tape_array.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Массив данных на ленте Name[sk]=Páskové pole Name[sv]=Bandgrupp +Name[tr]=Kaset dizisi Name[uk]=Стрічковий масив Name[x-test]=xxTape arrayxx Name[zh_CN]=磁带阵列 diff -Nru calligra-2.9.7/flow/stencils/Cisco/tdm_router.desktop calligra-2.9.11/flow/stencils/Cisco/tdm_router.desktop --- calligra-2.9.7/flow/stencils/Cisco/tdm_router.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/tdm_router.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=TDM router Name[sl]=Usmerjevalnik TDM Name[sv]=Tidsdelningsmultiplexrouter +Name[tr]=TDM yönlendirici Name[uk]=Маршрутизатор TDM Name[x-test]=xxTDM routerxx Name[zh_CN]=TDM 路由器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/telecommuter.desktop calligra-2.9.11/flow/stencils/Cisco/telecommuter.desktop --- calligra-2.9.7/flow/stencils/Cisco/telecommuter.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/telecommuter.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Човек, работещ отдалечено Name[bs]=Telekomjuter Name[ca]=Tele commutador -Name[ca@valencia]=Telecommutador +Name[ca@valencia]=Tele commutador Name[da]=Distancearbejder Name[de]=Telearbeiter Name[el]=Telecommuter @@ -28,6 +28,7 @@ Name[sk]=Telecommuter Name[sl]=Delavec na daljavo Name[sv]=Telependlare +Name[tr]=Telefonla çalışan Name[uk]=Кур'єр Name[x-test]=xxTelecommuterxx Name[zh_CN]=远程工作者 diff -Nru calligra-2.9.7/flow/stencils/Cisco/telecommuter_house.desktop calligra-2.9.11/flow/stencils/Cisco/telecommuter_house.desktop --- calligra-2.9.7/flow/stencils/Cisco/telecommuter_house.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/telecommuter_house.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Отдалечено работно място Name[bs]=Kuća telekomjutera Name[ca]=Casa de tele commutador -Name[ca@valencia]=Casa de telecommutador +Name[ca@valencia]=Casa de tele commutador Name[da]=Hjemmearbejder Name[de]=Telearbeiter-Haus Name[el]=Telecommuter house @@ -27,6 +27,7 @@ Name[ru]=Телекоммуникационное здание Name[sk]=Telekomunikačná budova Name[sv]=Telependlarhus +Name[tr]=Telefonla çalışan evi Name[uk]=Будинок надомника Name[x-test]=xxTelecommuter housexx Name[zh_CN]=远程工作者之家 diff -Nru calligra-2.9.7/flow/stencils/Cisco/telecommuter_house_router.desktop calligra-2.9.11/flow/stencils/Cisco/telecommuter_house_router.desktop --- calligra-2.9.7/flow/stencils/Cisco/telecommuter_house_router.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/telecommuter_house_router.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Отдалечено работно място/маршрутизатор Name[bs]=Kuća/ruter telekomjutera Name[ca]=Casa de tele commutador/encaminador -Name[ca@valencia]=Casa de telecommutador/encaminador +Name[ca@valencia]=Casa de tele commutador/encaminador Name[da]=Hjemmearbejder/router Name[de]=Telearbeiter-Haus/-Router Name[el]=Telecommuter house/router @@ -26,6 +26,7 @@ Name[ru]=Телекоммуникационное здание/маршрутизатор Name[sk]=Telekomunikačný dom/router Name[sv]=Telependlarhus/router +Name[tr]=Telefonla çalışan evi/yönlendirici Name[uk]=Домівка/маршрутизатор надомника Name[x-test]=xxTelecommuter house/routerxx Name[zh_CN]=远程办公家庭/路由器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/telecommuter_house_subdued.desktop calligra-2.9.11/flow/stencils/Cisco/telecommuter_house_subdued.desktop --- calligra-2.9.7/flow/stencils/Cisco/telecommuter_house_subdued.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/telecommuter_house_subdued.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Telecommuter house subdued Name[bs]=Podčinjena kuća tele-mjenjača Name[ca]=Casa de tele commutador inactiva -Name[ca@valencia]=Casa de telecommutador inactiva +Name[ca@valencia]=Casa de tele commutador inactiva Name[da]=Hjemmearbejder nedtonet Name[de]=Telearbeiter-Haus (inaktiv) Name[el]=Telecommuter house subdued @@ -24,6 +24,7 @@ Name[ru]=Телекоммуникационное здание приглушённое Name[sk]=Telekomunikačná budova tlmená Name[sv]=Telependlarhus diskret +Name[tr]=Telefonla çalışan evi pasif Name[uk]=Будинок надомника (притлумлено) Name[x-test]=xxTelecommuter house subduedxx Name[zh_CN]=远程工作者之家(柔和) diff -Nru calligra-2.9.7/flow/stencils/Cisco/tokenring.desktop calligra-2.9.11/flow/stencils/Cisco/tokenring.desktop --- calligra-2.9.7/flow/stencils/Cisco/tokenring.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/tokenring.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[ru]=TokenRing Name[sk]=TokenRing Name[sv]=Token ring +Name[tr]=TokenRing Name[uk]=TokenRing Name[x-test]=xxTokenRingxx Name[zh_CN]=令牌环 diff -Nru calligra-2.9.7/flow/stencils/Cisco/transpath.desktop calligra-2.9.11/flow/stencils/Cisco/transpath.desktop --- calligra-2.9.7/flow/stencils/Cisco/transpath.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/transpath.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Transpath Name[sk]=Transpath Name[sv]=Överföringsväg +Name[tr]=Transpath Name[uk]=Спосіб зв’язку Name[x-test]=xxTranspathxx Name[zh_CN]=变换路径 diff -Nru calligra-2.9.7/flow/stencils/Cisco/truck.desktop calligra-2.9.11/flow/stencils/Cisco/truck.desktop --- calligra-2.9.7/flow/stencils/Cisco/truck.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/truck.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[sk]=Truck Name[sl]=Tovornjak Name[sv]=Lastbil +Name[tr]=Kamyon Name[uk]=Вантажівка Name[x-test]=xxTruckxx Name[zh_CN]=卡车 diff -Nru calligra-2.9.7/flow/stencils/Cisco/turret.desktop calligra-2.9.11/flow/stencils/Cisco/turret.desktop --- calligra-2.9.7/flow/stencils/Cisco/turret.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/turret.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Башенка Name[sk]=Turret Name[sv]=Torn +Name[tr]=Küçük kule Name[uk]=Турель Name[x-test]=xxTurretxx Name[zh_CN]=塔楼 diff -Nru calligra-2.9.7/flow/stencils/Cisco/umg_series.desktop calligra-2.9.11/flow/stencils/Cisco/umg_series.desktop --- calligra-2.9.7/flow/stencils/Cisco/umg_series.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/umg_series.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[sk]=uMG séria Name[sl]=serija uMG Name[sv]=Serie uMG +Name[tr]=uMG serisi Name[uk]=Серія uMG Name[x-test]=xxuMG seriesxx Name[zh_CN]=uMG 系列 diff -Nru calligra-2.9.7/flow/stencils/Cisco/unity_express.desktop calligra-2.9.11/flow/stencils/Cisco/unity_express.desktop --- calligra-2.9.7/flow/stencils/Cisco/unity_express.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/unity_express.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[sk]=Unity Express Name[sl]=Unity Express Name[sv]=Unity Express +Name[tr]=Unity Express Name[uk]=Unity Express Name[x-test]=xxUnity Expressxx Name[zh_CN]=Unity Express diff -Nru calligra-2.9.7/flow/stencils/Cisco/unity_server.desktop calligra-2.9.11/flow/stencils/Cisco/unity_server.desktop --- calligra-2.9.7/flow/stencils/Cisco/unity_server.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/unity_server.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[ru]=Серверный модуль Name[sk]=Unity server Name[sv]=Unity-server +Name[tr]=Unity sunucusu Name[uk]=Сервер Unity Name[x-test]=xxUnity serverxx Name[zh_CN]=Unity 服务器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/vpn_concentrator.desktop calligra-2.9.11/flow/stencils/Cisco/vpn_concentrator.desktop --- calligra-2.9.7/flow/stencils/Cisco/vpn_concentrator.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/vpn_concentrator.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Концентратор VPN Name[sk]=VPN koncentrátor Name[sv]=Koncentrator för virtuellt privat nätverk +Name[tr]=VPN yoğunlaştırıcı Name[uk]=Концентратор VPN Name[x-test]=xxVPN concentratorxx Name[zh_CN]=VPN 集中器 diff -Nru calligra-2.9.7/flow/stencils/Cisco/woman_red.desktop calligra-2.9.11/flow/stencils/Cisco/woman_red.desktop --- calligra-2.9.7/flow/stencils/Cisco/woman_red.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/woman_red.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Woman red Name[bs]=Crvena žena Name[ca]=Dona vermella -Name[ca@valencia]=Dona roja +Name[ca@valencia]=Dona vermella Name[cs]=Žena - červená Name[da]=Kvinde rød Name[de]=Frau, rot diff -Nru calligra-2.9.7/flow/stencils/Cisco/workgroup_switch_subdued.desktop calligra-2.9.11/flow/stencils/Cisco/workgroup_switch_subdued.desktop --- calligra-2.9.7/flow/stencils/Cisco/workgroup_switch_subdued.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cisco/workgroup_switch_subdued.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Коммутатор рабочей группы приглушённый Name[sk]=Prepínač pracovných skupín tlmený Name[sv]=Arbetsgruppsväxel diskret +Name[tr]=Çalışma grubu anahtarı Pasif Name[uk]=Комутатор робочої групи (притлумлено) Name[x-test]=xxWorkgroup switch Subduedxx Name[zh_CN]=工作组交换机(柔和) diff -Nru calligra-2.9.7/flow/stencils/Civil/bvrest.desktop calligra-2.9.11/flow/stencils/Civil/bvrest.desktop --- calligra-2.9.7/flow/stencils/Civil/bvrest.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Civil/bvrest.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Двусторонняя вертикальная опора Name[sk]=Bivalentný zvislý zvyšok Name[sv]=Bivalent vertikalt stöd +Name[tr]=Çift değerli dikey direkler Name[uk]=Нерухома опора Name[x-test]=xxBivalent Vertical Restxx Name[zh_CN]=二价垂直平衡 diff -Nru calligra-2.9.7/flow/stencils/Civil/civil_aerator.desktop calligra-2.9.11/flow/stencils/Civil/civil_aerator.desktop --- calligra-2.9.7/flow/stencils/Civil/civil_aerator.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Civil/civil_aerator.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Аэратор Name[sk]=Aerátor Name[sv]=Luftare +Name[tr]=Fan Name[uk]=Аератор Name[x-test]=xxAeratorxx Name[zh_CN]=曝气器 diff -Nru calligra-2.9.7/flow/stencils/Civil/civil_backflow_preventer.desktop calligra-2.9.11/flow/stencils/Civil/civil_backflow_preventer.desktop --- calligra-2.9.7/flow/stencils/Civil/civil_backflow_preventer.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Civil/civil_backflow_preventer.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Предохранитель обратного потока Name[sk]=Backflow Preventer Name[sv]=Backflödesventil +Name[tr]=Geri Akış Önleyici Name[uk]=Запобіжник зворотного потоку Name[x-test]=xxBackflow Preventerxx Name[zh_CN]=回路抑止器 diff -Nru calligra-2.9.7/flow/stencils/Civil/civil_basin.desktop calligra-2.9.11/flow/stencils/Civil/civil_basin.desktop --- calligra-2.9.7/flow/stencils/Civil/civil_basin.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Civil/civil_basin.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[ru]=Резервуар Name[sk]=Povodie Name[sv]=Bassäng +Name[tr]=Leğen Name[uk]=Резервуар Name[x-test]=xxBasinxx Name[zh_CN]=水池 diff -Nru calligra-2.9.7/flow/stencils/Civil/civil_container.desktop calligra-2.9.11/flow/stencils/Civil/civil_container.desktop --- calligra-2.9.7/flow/stencils/Civil/civil_container.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Civil/civil_container.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=Kontajner Name[sl]=Vsebnik Name[sv]=Behållare +Name[tr]=Taşıyıcı Name[ug]=قاچا Name[uk]=Контейнер Name[x-test]=xxContainerxx diff -Nru calligra-2.9.7/flow/stencils/Civil/civil_final-settling_basin.desktop calligra-2.9.11/flow/stencils/Civil/civil_final-settling_basin.desktop --- calligra-2.9.7/flow/stencils/Civil/civil_final-settling_basin.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Civil/civil_final-settling_basin.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Резервуар конечной обработки Name[sk]=Koncová odkalovacia nádrž Name[sv]=Slutsedimenteringsbassäng +Name[tr]=Son-Durultma Havuzu Name[uk]=Резервуар для кінцевого продукту Name[x-test]=xxFinal-Settling Basinxx Name[zh_CN]=最终沉淀池 diff -Nru calligra-2.9.7/flow/stencils/Contact/c_if.desktop calligra-2.9.11/flow/stencils/Contact/c_if.desktop --- calligra-2.9.7/flow/stencils/Contact/c_if.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/c_if.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,8 +26,9 @@ Name[pt]=se Name[pt_BR]=se Name[ru]=Если -Name[sk]=if +Name[sk]=ak Name[sv]=om +Name[tr]=if Name[ug]=if Name[uk]=if Name[x-test]=xxifxx diff -Nru calligra-2.9.7/flow/stencils/Contact/c_ifnot.desktop calligra-2.9.11/flow/stencils/Contact/c_ifnot.desktop --- calligra-2.9.7/flow/stencils/Contact/c_ifnot.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/c_ifnot.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Если не Name[sk]=ifnot Name[sv]=om inte +Name[tr]=ifnot Name[uk]=ifnot Name[x-test]=xxifnotxx Name[zh_TW]=ifnot diff -Nru calligra-2.9.7/flow/stencils/Contact/c_lamp.desktop calligra-2.9.11/flow/stencils/Contact/c_lamp.desktop --- calligra-2.9.7/flow/stencils/Contact/c_lamp.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/c_lamp.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[ru]=Лампа Name[sk]=lampa Name[sv]=lampa +Name[tr]=lamba Name[uk]=lamp Name[x-test]=xxlampxx Name[zh_TW]=燈 diff -Nru calligra-2.9.7/flow/stencils/Contact/collection.desktop calligra-2.9.11/flow/stencils/Contact/collection.desktop --- calligra-2.9.7/flow/stencils/Contact/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=Kontakt Name[sl]=Stik Name[sv]=Kontakt +Name[tr]=İletişim Name[ug]=ئالاقەداش Name[uk]=Контакт Name[x-test]=xxContactxx diff -Nru calligra-2.9.7/flow/stencils/Contact/c_relay.desktop calligra-2.9.11/flow/stencils/Contact/c_relay.desktop --- calligra-2.9.7/flow/stencils/Contact/c_relay.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/c_relay.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=relé Name[sl]=relé Name[sv]=relä +Name[tr]=röle Name[ug]=ئۇلاپ تارقاتماق Name[uk]=реле Name[x-test]=xxrelayxx diff -Nru calligra-2.9.7/flow/stencils/Contact/l_if.desktop calligra-2.9.11/flow/stencils/Contact/l_if.desktop --- calligra-2.9.7/flow/stencils/Contact/l_if.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/l_if.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,8 +26,9 @@ Name[pt]=se Name[pt_BR]=se Name[ru]=Если -Name[sk]=if +Name[sk]=ak Name[sv]=om +Name[tr]=if Name[ug]=if Name[uk]=if Name[x-test]=xxifxx diff -Nru calligra-2.9.7/flow/stencils/Contact/l_ifnot.desktop calligra-2.9.11/flow/stencils/Contact/l_ifnot.desktop --- calligra-2.9.7/flow/stencils/Contact/l_ifnot.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/l_ifnot.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Если не Name[sk]=ifnot Name[sv]=om inte +Name[tr]=ifnot Name[uk]=ifnot Name[x-test]=xxifnotxx Name[zh_TW]=ifnot diff -Nru calligra-2.9.7/flow/stencils/Contact/l_out.desktop calligra-2.9.11/flow/stencils/Contact/l_out.desktop --- calligra-2.9.7/flow/stencils/Contact/l_out.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/l_out.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[ru]=out Name[sk]=von Name[sv]=ut +Name[tr]=basit çıktı değişkeni Name[uk]=out Name[x-test]=xxoutxx Name[zh_TW]=out diff -Nru calligra-2.9.7/flow/stencils/Contact/l_outj.desktop calligra-2.9.11/flow/stencils/Contact/l_outj.desktop --- calligra-2.9.7/flow/stencils/Contact/l_outj.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/l_outj.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=outj Name[sk]=outj Name[sv]=ut j +Name[tr]=jump-çıktı değişkeni Name[uk]=outj Name[x-test]=xxoutjxx Name[zh_TW]=outj diff -Nru calligra-2.9.7/flow/stencils/Contact/l_outnot.desktop calligra-2.9.11/flow/stencils/Contact/l_outnot.desktop --- calligra-2.9.7/flow/stencils/Contact/l_outnot.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/l_outnot.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=outnot Name[sk]=outnot Name[sv]=ut inte +Name[tr]=if not-çıktı değişkeni Name[uk]=outnot Name[x-test]=xxoutnotxx Name[zh_TW]=outnot diff -Nru calligra-2.9.7/flow/stencils/Contact/l_outrcep.desktop calligra-2.9.11/flow/stencils/Contact/l_outrcep.desktop --- calligra-2.9.7/flow/stencils/Contact/l_outrcep.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/l_outrcep.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=outrcep Name[sk]=outrcep Name[sv]=ut rcep +Name[tr]=kapasite-çıktı değişkeni Name[uk]=outrcep Name[x-test]=xxoutrcepxx Name[zh_TW]=outrcep diff -Nru calligra-2.9.7/flow/stencils/Contact/l_outr.desktop calligra-2.9.11/flow/stencils/Contact/l_outr.desktop --- calligra-2.9.7/flow/stencils/Contact/l_outr.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/l_outr.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=outr Name[sk]=outr Name[sv]=ut r +Name[tr]=geri dönüş-çıktı değişkeni Name[uk]=outr Name[x-test]=xxoutrxx Name[zh_TW]=outr diff -Nru calligra-2.9.7/flow/stencils/Contact/l_outs.desktop calligra-2.9.11/flow/stencils/Contact/l_outs.desktop --- calligra-2.9.7/flow/stencils/Contact/l_outs.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/l_outs.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=outs Name[sk]=outs Name[sv]=outs +Name[tr]=ayarla-çıktı değişkeni Name[uk]=outs Name[x-test]=xxoutsxx Name[zh_TW]=outs diff -Nru calligra-2.9.7/flow/stencils/Contact/l_sout.desktop calligra-2.9.11/flow/stencils/Contact/l_sout.desktop --- calligra-2.9.7/flow/stencils/Contact/l_sout.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/l_sout.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=sout Name[sk]=sout Name[sv]=s ut +Name[tr]=enerji-tasarruflu, basit çıktı değişkeni Name[uk]=sout Name[x-test]=xxsoutxx Name[zh_TW]=sout diff -Nru calligra-2.9.7/flow/stencils/Contact/l_soutnot.desktop calligra-2.9.11/flow/stencils/Contact/l_soutnot.desktop --- calligra-2.9.7/flow/stencils/Contact/l_soutnot.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/l_soutnot.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=soutnot Name[sk]=soutnot Name[sv]=s ut inte +Name[tr]=enerji-tasarruflu, negatif çıktı değişkeni Name[uk]=soutnot Name[x-test]=xxsoutnotxx Name[zh_TW]=soutnot diff -Nru calligra-2.9.7/flow/stencils/Contact/l_soutr.desktop calligra-2.9.11/flow/stencils/Contact/l_soutr.desktop --- calligra-2.9.7/flow/stencils/Contact/l_soutr.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/l_soutr.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=soutr Name[sk]=soutr Name[sv]=s ut r +Name[tr]=enerji-tasarruflu, yeniden ayarlama çıktı değişkeni Name[uk]=soutr Name[x-test]=xxsoutrxx Name[zh_TW]=soutr diff -Nru calligra-2.9.7/flow/stencils/Contact/l_souts.desktop calligra-2.9.11/flow/stencils/Contact/l_souts.desktop --- calligra-2.9.7/flow/stencils/Contact/l_souts.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Contact/l_souts.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=souts Name[sk]=souts Name[sv]=s ut s +Name[tr]=enerji-tasarruflu, ayarlama çıktı değişkeni Name[uk]=souts Name[x-test]=xxsoutsxx Name[zh_TW]=souts diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/b-sens.desktop calligra-2.9.11/flow/stencils/Cybernetics/b-sens.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/b-sens.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/b-sens.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=b-sens Name[sk]=b-sens Name[sv]=b-sensor +Name[tr]=sensör-aşağı Name[uk]=Датчик (знизу) Name[x-test]=xxb-sensxx Name[zh_TW]=b-sens diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/factor-0to-1.desktop calligra-2.9.11/flow/stencils/Cybernetics/factor-0to-1.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/factor-0to-1.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/factor-0to-1.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=фактор-0к-1 Name[sk]=factor-0to-1 Name[sv]=faktor-0till-1 +Name[tr]=sabit faktörü 0dan-1e Name[uk]=Сталий множник від 0 до -1 Name[x-test]=xxfactor-0to-1xx Name[zh_TW]=factor-0to-1 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/factor-0to1.desktop calligra-2.9.11/flow/stencils/Cybernetics/factor-0to1.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/factor-0to1.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/factor-0to1.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=фактор-0к1 Name[sk]=factor-0to1 Name[sv]=faktor-0till1 +Name[tr]=sabit faktörü 0dan1e Name[uk]=Сталий множник від 0 до 1 Name[x-test]=xxfactor-0to1xx Name[zh_TW]=factor-0to1 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/factor-greater1.desktop calligra-2.9.11/flow/stencils/Cybernetics/factor-greater1.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/factor-greater1.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/factor-greater1.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=фактор-больше1 Name[sk]=factor-greater1 Name[sv]=faktor-större-än-1 +Name[tr]=sabit faktörü 1den büyük Name[uk]=Сталий множник, більший за 1 Name[x-test]=xxfactor-greater1xx Name[zh_TW]=factor-greater1 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/factor-smaller-1.desktop calligra-2.9.11/flow/stencils/Cybernetics/factor-smaller-1.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/factor-smaller-1.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/factor-smaller-1.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=фактор-меньше-1 Name[sk]=factor-smaller-1 Name[sv]=faktor-mindre-än-1 +Name[tr]=sabit faktörü -1den küçük Name[uk]=Сталий множник, менший за 1 Name[x-test]=xxfactor-smaller-1xx Name[zh_TW]=factor-smaller-1 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/full-wave-rectifier.desktop calligra-2.9.11/flow/stencils/Cybernetics/full-wave-rectifier.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/full-wave-rectifier.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/full-wave-rectifier.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Выпрямитель полной волны Name[sk]=full-wave-rectifier Name[sv]=helvågslikriktare +Name[tr]=tam-dalga-doğrultucu Name[uk]=Повний міст (модуль) Name[x-test]=xxfull-wave-rectifierxx Name[zh_CN]=全波整流 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/half-wave-rectifier.desktop calligra-2.9.11/flow/stencils/Cybernetics/half-wave-rectifier.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/half-wave-rectifier.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/half-wave-rectifier.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Выпрямитель полуволны Name[sk]=half-wave-rectifier Name[sv]=halvvågslikriktare +Name[tr]=yarım-dalga-doğrultucu Name[uk]=Напівміст Name[x-test]=xxhalf-wave-rectifierxx Name[zh_CN]=半波整流 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/l-integrator.desktop calligra-2.9.11/flow/stencils/Cybernetics/l-integrator.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/l-integrator.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/l-integrator.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=l-интегратор Name[sk]=l-integrator Name[sv]=v-integrator +Name[tr]=sol entegre eden Name[uk]=Інтегратор (вхід ліворуч) Name[x-test]=xxl-integratorxx Name[zh_CN]=L-积分 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/l-minus.desktop calligra-2.9.11/flow/stencils/Cybernetics/l-minus.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/l-minus.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/l-minus.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=l-menos Name[sk]=l-minus Name[sv]=v-minus +Name[tr]=sol girdi çıkarılarak toplam Name[uk]=Суматор (віднімання входу ліворуч) Name[x-test]=xxl-minusxx Name[zh_CN]=L-减 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/lpf.desktop calligra-2.9.11/flow/stencils/Cybernetics/lpf.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/lpf.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/lpf.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Фильтр низких частот Name[sk]=lpf Name[sv]=lågpassfilter +Name[tr]=alçak geçiren filtre Name[uk]=Фільтр низьких частот Name[x-test]=xxlpfxx Name[zh_CN]=LPF diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/l-sens.desktop calligra-2.9.11/flow/stencils/Cybernetics/l-sens.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/l-sens.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/l-sens.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=l-sensor Name[sk]=l-sens Name[sv]=v-sensor +Name[tr]=sensör-sol Name[uk]=Датчик (ліворуч) Name[x-test]=xxl-sensxx Name[zh_CN]=L-SENS diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/negative-shift.desktop calligra-2.9.11/flow/stencils/Cybernetics/negative-shift.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/negative-shift.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/negative-shift.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Сдвиг влево Name[sk]=záporný posun Name[sv]=negativ-skift +Name[tr]=negatif-kayma Name[uk]=Стале від’ємне зміщення за Oy Name[x-test]=xxnegative-shiftxx Name[zh_CN]=负移 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/positive-shift.desktop calligra-2.9.11/flow/stencils/Cybernetics/positive-shift.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/positive-shift.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/positive-shift.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Сдвиг вправо Name[sk]=kladný posun Name[sv]=positiv-skift +Name[tr]=pozitif-kayma Name[uk]=Стале додатне зміщення за Oy Name[x-test]=xxpositive-shiftxx Name[zh_CN]=正移 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/product.desktop calligra-2.9.11/flow/stencils/Cybernetics/product.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/product.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/product.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=produkt Name[sl]=produkt Name[sv]=produkt +Name[tr]=çarpım Name[uk]=Добуток Name[x-test]=xxproductxx Name[zh_CN]=结果 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/relay.desktop calligra-2.9.11/flow/stencils/Cybernetics/relay.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/relay.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/relay.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=relé Name[sl]=relé Name[sv]=relä +Name[tr]=röle Name[ug]=ئۇلاپ تارقاتماق Name[uk]=реле Name[x-test]=xxrelayxx diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/r-integrator.desktop calligra-2.9.11/flow/stencils/Cybernetics/r-integrator.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/r-integrator.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/r-integrator.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=r-интегратор Name[sk]=r-integrator Name[sv]=h-integrator +Name[tr]=sağ-entegre eden Name[uk]=Інтегратор (вхід праворуч) Name[x-test]=xxr-integratorxx Name[zh_CN]=R-积分 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/r-minus.desktop calligra-2.9.11/flow/stencils/Cybernetics/r-minus.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/r-minus.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/r-minus.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=r-menos Name[sk]=r-minus Name[sv]=h-minus +Name[tr]=sağ girdi çıkarılarak toplam Name[uk]=Суматор (віднімання входу праворуч) Name[x-test]=xxr-minusxx Name[zh_CN]=R-减 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/r-sens.desktop calligra-2.9.11/flow/stencils/Cybernetics/r-sens.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/r-sens.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/r-sens.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=r-sensor Name[sk]=r-sens Name[sv]=h-sensor +Name[tr]=sensör-sağ Name[uk]=Датчик (праворуч) Name[x-test]=xxr-sensxx Name[zh_CN]=R-SENS diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/sigmoid.desktop calligra-2.9.11/flow/stencils/Cybernetics/sigmoid.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/sigmoid.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/sigmoid.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Сигмовидная Name[sk]=sigmoid Name[sv]=sigmoid +Name[tr]=S-şeklinde karakteristik Name[uk]=Сігмоїд-характеристика Name[x-test]=xxsigmoidxx Name[zh_TW]=sigmoid diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/t-integrator.desktop calligra-2.9.11/flow/stencils/Cybernetics/t-integrator.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/t-integrator.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/t-integrator.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=t-интегратор Name[sk]=t-integrator Name[sv]=t-integrator +Name[tr]=integratör-yukarı girdi Name[uk]=Інтегратор (вхід згори) Name[x-test]=xxt-integratorxx Name[zh_CN]=T-积分 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/t-minus.desktop calligra-2.9.11/flow/stencils/Cybernetics/t-minus.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/t-minus.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/t-minus.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=t-menos Name[sk]=t-minus Name[sv]=t-minus +Name[tr]=üst girdi soyularak toplam Name[uk]=Суматор (віднімання входу згори) Name[x-test]=xxt-minusxx Name[zh_CN]=T-减 diff -Nru calligra-2.9.7/flow/stencils/Cybernetics/t-sens.desktop calligra-2.9.11/flow/stencils/Cybernetics/t-sens.desktop --- calligra-2.9.7/flow/stencils/Cybernetics/t-sens.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Cybernetics/t-sens.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=t-sensor Name[sk]=t-sens Name[sv]=t-sensor +Name[tr]=sensör-üst Name[uk]=Датчик (згори) Name[x-test]=xxt-sensxx Name[zh_CN]=T-SENS diff -Nru calligra-2.9.7/flow/stencils/Digital/add_h.desktop calligra-2.9.11/flow/stencils/Digital/add_h.desktop --- calligra-2.9.7/flow/stencils/Digital/add_h.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/add_h.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=add h Name[sk]=add h Name[sv]=addera h +Name[tr]=yatay toplayıcı Name[uk]=Додавання (горизонтально) Name[x-test]=xxadd hxx Name[zh_TW]=add h diff -Nru calligra-2.9.7/flow/stencils/Digital/add_v.desktop calligra-2.9.11/flow/stencils/Digital/add_v.desktop --- calligra-2.9.7/flow/stencils/Digital/add_v.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/add_v.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=add v Name[sk]=add v Name[sv]=addera v +Name[tr]=dikey toplayıcı Name[uk]=Додавання (вертикально) Name[x-test]=xxadd vxx Name[zh_TW]=add v diff -Nru calligra-2.9.7/flow/stencils/Digital/and_h.desktop calligra-2.9.11/flow/stencils/Digital/and_h.desktop --- calligra-2.9.7/flow/stencils/Digital/and_h.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/and_h.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=and h Name[sk]=and h Name[sv]=och h +Name[tr]=yatay VE kapısı Name[uk]=Логічне «І» (горизонтально) Name[x-test]=xxand hxx Name[zh_TW]=and h diff -Nru calligra-2.9.7/flow/stencils/Digital/and_v.desktop calligra-2.9.11/flow/stencils/Digital/and_v.desktop --- calligra-2.9.7/flow/stencils/Digital/and_v.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/and_v.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=and v Name[sk]=and v Name[sv]=och v +Name[tr]=dikey VE kapısı Name[uk]=Логічне «І» (вертикально) Name[x-test]=xxand vxx Name[zh_TW]=and v diff -Nru calligra-2.9.7/flow/stencils/Digital/buff_h.desktop calligra-2.9.11/flow/stencils/Digital/buff_h.desktop --- calligra-2.9.7/flow/stencils/Digital/buff_h.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/buff_h.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=buff h Name[sk]=buff h Name[sv]=buffer h +Name[tr]=yatay tampon kapısı Name[uk]=Надсилання до буфера (горизонтально) Name[x-test]=xxbuff hxx Name[zh_TW]=buff h diff -Nru calligra-2.9.7/flow/stencils/Digital/buff_v.desktop calligra-2.9.11/flow/stencils/Digital/buff_v.desktop --- calligra-2.9.7/flow/stencils/Digital/buff_v.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/buff_v.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=buff v Name[sk]=buff v Name[sv]=buffer v +Name[tr]=dikey tampon kapısı Name[uk]=Надсилання до буфера (вертикально) Name[x-test]=xxbuff vxx Name[zh_TW]=buff v diff -Nru calligra-2.9.7/flow/stencils/Digital/collection.desktop calligra-2.9.11/flow/stencils/Digital/collection.desktop --- calligra-2.9.7/flow/stencils/Digital/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[ru]=Цифровой Name[sk]=Digitálne Name[sv]=Digitalt +Name[tr]=Sayısal Name[ug]=رەقەملىك Name[uk]=Обробка цифрових даних Name[x-test]=xxDigitalxx diff -Nru calligra-2.9.7/flow/stencils/Digital/conn.desktop calligra-2.9.11/flow/stencils/Digital/conn.desktop --- calligra-2.9.7/flow/stencils/Digital/conn.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/conn.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=conn Name[sk]=conn Name[sv]=anslutning +Name[tr]=bağ Name[uk]=З’єднання Name[x-test]=xxconnxx Name[zh_TW]=conn diff -Nru calligra-2.9.7/flow/stencils/Digital/inv_h.desktop calligra-2.9.11/flow/stencils/Digital/inv_h.desktop --- calligra-2.9.7/flow/stencils/Digital/inv_h.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/inv_h.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=inv h Name[sk]=inv h Name[sv]=inv h +Name[tr]=yatay NOT kapısı Name[uk]=ІНВ (горизонтально) Name[x-test]=xxinv hxx Name[zh_TW]=inv h diff -Nru calligra-2.9.7/flow/stencils/Digital/inv_v.desktop calligra-2.9.11/flow/stencils/Digital/inv_v.desktop --- calligra-2.9.7/flow/stencils/Digital/inv_v.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/inv_v.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=inv v Name[sk]=inv v Name[sv]=inv v +Name[tr]=dikey NOT kapısı Name[uk]=ІНВ (вертикально) Name[x-test]=xxinv vxx Name[zh_TW]=inv v diff -Nru calligra-2.9.7/flow/stencils/Digital/mux_h.desktop calligra-2.9.11/flow/stencils/Digital/mux_h.desktop --- calligra-2.9.7/flow/stencils/Digital/mux_h.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/mux_h.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=mux h Name[sk]=mux h Name[sv]=mux h +Name[tr]=yatay çoklayıcı Name[uk]=Мультиплексор (горизонтально) Name[x-test]=xxmux hxx Name[zh_TW]=mux h diff -Nru calligra-2.9.7/flow/stencils/Digital/mux_v.desktop calligra-2.9.11/flow/stencils/Digital/mux_v.desktop --- calligra-2.9.7/flow/stencils/Digital/mux_v.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/mux_v.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=mux v Name[sk]=mux v Name[sv]=mux v +Name[tr]=dikey çoklayıcı Name[uk]=Мультиплексор (вертикально) Name[x-test]=xxmux vxx Name[zh_TW]=mux v diff -Nru calligra-2.9.7/flow/stencils/Digital/nand_h.desktop calligra-2.9.11/flow/stencils/Digital/nand_h.desktop --- calligra-2.9.7/flow/stencils/Digital/nand_h.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/nand_h.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=nand h Name[sk]=nand h Name[sv]=nand h +Name[tr]=yatay NAND kapısı Name[uk]=І-НІ (горизонтально) Name[x-test]=xxnand hxx Name[zh_TW]=nand h diff -Nru calligra-2.9.7/flow/stencils/Digital/nand_v.desktop calligra-2.9.11/flow/stencils/Digital/nand_v.desktop --- calligra-2.9.7/flow/stencils/Digital/nand_v.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/nand_v.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=nand v Name[sk]=nand v Name[sv]=nand v +Name[tr]=dikey NAND kapısı Name[uk]=І-НІ (вертикально) Name[x-test]=xxnand vxx Name[zh_TW]=nand v diff -Nru calligra-2.9.7/flow/stencils/Digital/nor_h.desktop calligra-2.9.11/flow/stencils/Digital/nor_h.desktop --- calligra-2.9.7/flow/stencils/Digital/nor_h.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/nor_h.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=nor h Name[sk]=nor h Name[sv]=nor h +Name[tr]=yatay NOR kapısı Name[uk]=Запер. «АБО» (горизонтально) Name[x-test]=xxnor hxx Name[zh_TW]=nor h diff -Nru calligra-2.9.7/flow/stencils/Digital/nor_v.desktop calligra-2.9.11/flow/stencils/Digital/nor_v.desktop --- calligra-2.9.7/flow/stencils/Digital/nor_v.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/nor_v.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=nor v Name[sk]=nor v Name[sv]=nor v +Name[tr]=dikey NOR kapısı Name[uk]=Запер. «АБО» (вертикально) Name[x-test]=xxnor vxx Name[zh_TW]=nor v diff -Nru calligra-2.9.7/flow/stencils/Digital/or_h.desktop calligra-2.9.11/flow/stencils/Digital/or_h.desktop --- calligra-2.9.7/flow/stencils/Digital/or_h.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/or_h.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=or h Name[sk]=or h Name[sv]=or h +Name[tr]=yatay OR kapısı Name[uk]=Логічне «АБО» (горизонтально) Name[x-test]=xxor hxx Name[zh_TW]=or h diff -Nru calligra-2.9.7/flow/stencils/Digital/or_v.desktop calligra-2.9.11/flow/stencils/Digital/or_v.desktop --- calligra-2.9.7/flow/stencils/Digital/or_v.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/or_v.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=or v Name[sk]=or v Name[sv]=or v +Name[tr]=dikey OR kapısı Name[uk]=Логічне «АБО» (вертикально) Name[x-test]=xxor vxx Name[zh_TW]=or v diff -Nru calligra-2.9.7/flow/stencils/Digital/reg_h.desktop calligra-2.9.11/flow/stencils/Digital/reg_h.desktop --- calligra-2.9.7/flow/stencils/Digital/reg_h.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/reg_h.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=reg h Name[sk]=reg h Name[sv]=reg h +Name[tr]=yatay regülatör Name[uk]=Регістр (горизонтально) Name[x-test]=xxreg hxx Name[zh_TW]=reg h diff -Nru calligra-2.9.7/flow/stencils/Digital/reg_v.desktop calligra-2.9.11/flow/stencils/Digital/reg_v.desktop --- calligra-2.9.7/flow/stencils/Digital/reg_v.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/reg_v.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=reg v Name[sk]=reg v Name[sv]=reg v +Name[tr]=dikey regülatör Name[uk]=Регістр (вертикально) Name[x-test]=xxreg vxx Name[zh_TW]=reg v diff -Nru calligra-2.9.7/flow/stencils/Digital/xnor_h.desktop calligra-2.9.11/flow/stencils/Digital/xnor_h.desktop --- calligra-2.9.7/flow/stencils/Digital/xnor_h.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/xnor_h.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=xnor h Name[sk]=xnor h Name[sv]=xnor h +Name[tr]=yatay XNOR kapısı Name[uk]=Виключне запер. «АБО» (горизонтально) Name[x-test]=xxxnor hxx Name[zh_TW]=xnor h diff -Nru calligra-2.9.7/flow/stencils/Digital/xnor_v.desktop calligra-2.9.11/flow/stencils/Digital/xnor_v.desktop --- calligra-2.9.7/flow/stencils/Digital/xnor_v.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/xnor_v.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=xnor v Name[sk]=xnor v Name[sv]=xnor v +Name[tr]=dikey XNOR kapısı Name[uk]=Виключне запер. «АБО» (вертикально) Name[x-test]=xxxnor vxx Name[zh_TW]=xnor v diff -Nru calligra-2.9.7/flow/stencils/Digital/xor_h.desktop calligra-2.9.11/flow/stencils/Digital/xor_h.desktop --- calligra-2.9.7/flow/stencils/Digital/xor_h.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/xor_h.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=xor h Name[sk]=xor h Name[sv]=xor h +Name[tr]=yatay XOR kapısı Name[uk]=Виключне «АБО» (горизонтально) Name[x-test]=xxxor hxx Name[zh_TW]=xor h diff -Nru calligra-2.9.7/flow/stencils/Digital/xor_v.desktop calligra-2.9.11/flow/stencils/Digital/xor_v.desktop --- calligra-2.9.7/flow/stencils/Digital/xor_v.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Digital/xor_v.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=xor v Name[sk]=xor v Name[sv]=xor v +Name[tr]=dikey XOR kapısı Name[uk]=Виключне «АБО» (вертикально) Name[x-test]=xxxor vxx Name[zh_TW]=xor v diff -Nru calligra-2.9.7/flow/stencils/Edpc/and.desktop calligra-2.9.11/flow/stencils/Edpc/and.desktop --- calligra-2.9.7/flow/stencils/Edpc/and.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Edpc/and.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[ru]=Оператор «И» Name[sk]=And operátor Name[sv]=Och-operator +Name[tr]=VE Operatörü Name[uk]=Оператор «І» Name[x-test]=xxAnd Operatorxx Name[zh_CN]=与运算符 diff -Nru calligra-2.9.7/flow/stencils/Edpc/collection.desktop calligra-2.9.11/flow/stencils/Edpc/collection.desktop --- calligra-2.9.7/flow/stencils/Edpc/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Edpc/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Вычислительный центр Name[sk]=Edpc Name[sv]=EDPC +Name[tr]=Olaya dayalı süreç zinciri Name[uk]=Керовані подіями ланцюжки обробки Name[x-test]=xxEdpcxx Name[zh_TW]=Edpc diff -Nru calligra-2.9.7/flow/stencils/Edpc/function.desktop calligra-2.9.11/flow/stencils/Edpc/function.desktop --- calligra-2.9.7/flow/stencils/Edpc/function.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Edpc/function.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -32,6 +32,7 @@ Name[sk]=Funkcia Name[sl]=Funkcija Name[sv]=Funktion +Name[tr]=Fonksiyon Name[ug]=فۇنكسىيە Name[uk]=Функція Name[x-test]=xxFunctionxx diff -Nru calligra-2.9.7/flow/stencils/Edpc/or.desktop calligra-2.9.11/flow/stencils/Edpc/or.desktop --- calligra-2.9.7/flow/stencils/Edpc/or.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Edpc/or.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=Or operátor Name[sl]=Operator ali (Or) Name[sv]=Eller-operator +Name[tr]=VEYA Operatörü Name[uk]=Оператор «АБО» Name[x-test]=xxOr Operatorxx Name[zh_CN]=或运算符 diff -Nru calligra-2.9.7/flow/stencils/Edpc/organisation_unit.desktop calligra-2.9.11/flow/stencils/Edpc/organisation_unit.desktop --- calligra-2.9.7/flow/stencils/Edpc/organisation_unit.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Edpc/organisation_unit.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[sk]=Organizačná jednotka Name[sl]=Organizacijska enota Name[sv]=Organisationsenhet +Name[tr]=Organizasyon Birimi Name[uk]=Модуль впорядкування Name[x-test]=xxOrganisation Unitxx Name[zh_CN]=组织单元 diff -Nru calligra-2.9.7/flow/stencils/Edpc/xor.desktop calligra-2.9.11/flow/stencils/Edpc/xor.desktop --- calligra-2.9.7/flow/stencils/Edpc/xor.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Edpc/xor.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[sk]=XOR operátor Name[sl]=Operator XOR Name[sv]=XOR-operator +Name[tr]=XOR Operatörü Name[uk]=Оператор виключного «АБО» Name[x-test]=xxXOR Operatorxx Name[zh_CN]=异或运算符 diff -Nru calligra-2.9.7/flow/stencils/Electric/cnx.desktop calligra-2.9.11/flow/stencils/Electric/cnx.desktop --- calligra-2.9.7/flow/stencils/Electric/cnx.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/cnx.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=точка соединения Name[sk]=connpoint Name[sv]=anslutningspunkt +Name[tr]=bağlantı noktası Name[uk]=Точка з’єднання Name[x-test]=xxconnpointxx Name[zh_TW]=連接點 diff -Nru calligra-2.9.7/flow/stencils/Electric/collection.desktop calligra-2.9.11/flow/stencils/Electric/collection.desktop --- calligra-2.9.7/flow/stencils/Electric/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=Elektrické Name[sl]=Električno Name[sv]=Elektriskt +Name[tr]=Elektrik Name[uk]=Електрика Name[x-test]=xxElectricxx Name[zh_CN]=电 diff -Nru calligra-2.9.7/flow/stencils/Electric/command.desktop calligra-2.9.11/flow/stencils/Electric/command.desktop --- calligra-2.9.7/flow/stencils/Electric/command.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/command.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -32,6 +32,7 @@ Name[sk]=príkaz Name[sl]=ukaz Name[sv]=kommando +Name[tr]=komut Name[ug]=بۇيرۇق Name[uk]=Керівний механізм реле (горизонтально) Name[x-test]=xxcommandxx diff -Nru calligra-2.9.7/flow/stencils/Electric/contact_f.desktop calligra-2.9.11/flow/stencils/Electric/contact_f.desktop --- calligra-2.9.7/flow/stencils/Electric/contact_f.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/contact_f.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=контакт f Name[sk]=kontakt f Name[sv]=kontakt f +Name[tr]=kapalı devre Name[uk]=Нормально замкнутий контакт (горизонтально) Name[x-test]=xxcontact fxx Name[zh_TW]=contact f diff -Nru calligra-2.9.7/flow/stencils/Electric/contact_o.desktop calligra-2.9.11/flow/stencils/Electric/contact_o.desktop --- calligra-2.9.7/flow/stencils/Electric/contact_o.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/contact_o.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=контакт o Name[sk]=kontakt o Name[sv]=kontakt öppen +Name[tr]=açık devre Name[uk]=Нормально розімкнутий контакт (горизонтально) Name[x-test]=xxcontact oxx Name[zh_TW]=contact o diff -Nru calligra-2.9.7/flow/stencils/Electric/intpos_f.desktop calligra-2.9.11/flow/stencils/Electric/intpos_f.desktop --- calligra-2.9.7/flow/stencils/Electric/intpos_f.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/intpos_f.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=intpos f Name[sk]=intpos f Name[sv]=mellanlägg f +Name[tr]=kapalı anahtar Name[uk]=Нормально замкнутий перемикач (горизонтально) Name[x-test]=xxintpos fxx Name[zh_TW]=intpos f diff -Nru calligra-2.9.7/flow/stencils/Electric/intpos_o.desktop calligra-2.9.11/flow/stencils/Electric/intpos_o.desktop --- calligra-2.9.7/flow/stencils/Electric/intpos_o.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/intpos_o.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=intpos o Name[sk]=intpos o Name[sv]=mellanlägg öppet +Name[tr]=açık anahtar Name[uk]=Нормально розімкнутий перемикач (горизонтально) Name[x-test]=xxintpos oxx Name[zh_TW]=intpos o diff -Nru calligra-2.9.7/flow/stencils/Electric/lamp.desktop calligra-2.9.11/flow/stencils/Electric/lamp.desktop --- calligra-2.9.7/flow/stencils/Electric/lamp.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/lamp.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[ru]=Лампа Name[sk]=lampa Name[sv]=lampa +Name[tr]=lamba Name[uk]=lamp Name[x-test]=xxlampxx Name[zh_TW]=燈 diff -Nru calligra-2.9.7/flow/stencils/Electric/relay.desktop calligra-2.9.11/flow/stencils/Electric/relay.desktop --- calligra-2.9.7/flow/stencils/Electric/relay.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/relay.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=relé Name[sl]=relé Name[sv]=relä +Name[tr]=röle Name[ug]=ئۇلاپ تارقاتماق Name[uk]=реле Name[x-test]=xxrelayxx diff -Nru calligra-2.9.7/flow/stencils/Electric/vcommand.desktop calligra-2.9.11/flow/stencils/Electric/vcommand.desktop --- calligra-2.9.7/flow/stencils/Electric/vcommand.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/vcommand.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=vcommand Name[sk]=vcommand Name[sv]=vertikalt kommando +Name[tr]=Kontrol parçası Röle, dik Name[uk]=Керівний механізм реле (вертикально) Name[x-test]=xxvcommandxx Name[zh_TW]=vcommand diff -Nru calligra-2.9.7/flow/stencils/Electric/vcontact_f.desktop calligra-2.9.11/flow/stencils/Electric/vcontact_f.desktop --- calligra-2.9.7/flow/stencils/Electric/vcontact_f.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/vcontact_f.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=vcontact f Name[sk]=vcontact f Name[sv]=vertikal kontakt f +Name[tr]=kapalı devre, dik Name[uk]=Нормально замкнутий контакт (вертикально) Name[x-test]=xxvcontact fxx Name[zh_TW]=vcontact f diff -Nru calligra-2.9.7/flow/stencils/Electric/vcontact_o.desktop calligra-2.9.11/flow/stencils/Electric/vcontact_o.desktop --- calligra-2.9.7/flow/stencils/Electric/vcontact_o.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/vcontact_o.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=vcontact o Name[sk]=vcontact o Name[sv]=vertikal kontakt öppen +Name[tr]=açık devre, dik Name[uk]=Нормально розімкнутий контакт (вертикально) Name[x-test]=xxvcontact oxx Name[zh_TW]=vcontact o diff -Nru calligra-2.9.7/flow/stencils/Electric/vintpos_f.desktop calligra-2.9.11/flow/stencils/Electric/vintpos_f.desktop --- calligra-2.9.7/flow/stencils/Electric/vintpos_f.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/vintpos_f.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=vintpos f Name[sk]=vintpos f Name[sv]=vertikalt mellanlägg f +Name[tr]=kapalı anahtar, dik Name[uk]=Нормально замкнутий перемикач (вертикально) Name[x-test]=xxvintpos fxx Name[zh_TW]=vintpos f diff -Nru calligra-2.9.7/flow/stencils/Electric/vintpos_o.desktop calligra-2.9.11/flow/stencils/Electric/vintpos_o.desktop --- calligra-2.9.7/flow/stencils/Electric/vintpos_o.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/vintpos_o.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=vintpos o Name[sk]=vintpos o Name[sv]=vertikalt mellanlägg öppet +Name[tr]=açık anahtar, dik Name[uk]=Нормально розімкнутий перемикач (вертикально) Name[x-test]=xxvintpos oxx Name[zh_TW]=vintpos o diff -Nru calligra-2.9.7/flow/stencils/Electric/vlamp.desktop calligra-2.9.11/flow/stencils/Electric/vlamp.desktop --- calligra-2.9.7/flow/stencils/Electric/vlamp.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/vlamp.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=lâmpada-v Name[sk]=vlamp Name[sv]=vertikal lampa +Name[tr]=dikey lamba Name[uk]=Лампа або світловий індикатор (вертикально) Name[x-test]=xxvlampxx Name[zh_TW]=vlamp diff -Nru calligra-2.9.7/flow/stencils/Electric/vrelay.desktop calligra-2.9.11/flow/stencils/Electric/vrelay.desktop --- calligra-2.9.7/flow/stencils/Electric/vrelay.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric/vrelay.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=v-реле Name[sk]=vrelay Name[sv]=vertikalt relä +Name[tr]=dikey röle Name[uk]=Реле (вертикально) Name[x-test]=xxvrelayxx Name[zh_TW]=vrelay diff -Nru calligra-2.9.7/flow/stencils/Electric2/ckt-breaker.desktop calligra-2.9.11/flow/stencils/Electric2/ckt-breaker.desktop --- calligra-2.9.7/flow/stencils/Electric2/ckt-breaker.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric2/ckt-breaker.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Автоматический выключатель Name[sk]=ckt-breaker Name[sv]=strömbrytare +Name[tr]=devre kesici Name[uk]=Автоматичний вимикач Name[x-test]=xxckt-breakerxx Name[zh_TW]=ckt-breaker diff -Nru calligra-2.9.7/flow/stencils/Electric2/collection.desktop calligra-2.9.11/flow/stencils/Electric2/collection.desktop --- calligra-2.9.7/flow/stencils/Electric2/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric2/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[sk]=Electric2 Name[sl]=Električno2 Name[sv]=Elektriskt 2 +Name[tr]=Electric2 Name[uk]=Електрика 2 Name[x-test]=xxElectric2xx Name[zh_CN]=电子2 diff -Nru calligra-2.9.7/flow/stencils/Electric2/isolator.desktop calligra-2.9.11/flow/stencils/Electric2/isolator.desktop --- calligra-2.9.7/flow/stencils/Electric2/isolator.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric2/isolator.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=izolant Name[sl]=izolator Name[sv]=isolator +Name[tr]=yalıtıcı Name[uk]=Ізолятор Name[x-test]=xxisolatorxx Name[zh_CN]=隔离器 diff -Nru calligra-2.9.7/flow/stencils/Electric2/transformer.desktop calligra-2.9.11/flow/stencils/Electric2/transformer.desktop --- calligra-2.9.7/flow/stencils/Electric2/transformer.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electric2/transformer.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=transformátor Name[sl]=transformator Name[sv]=transformator +Name[tr]=dönüştürücü Name[uk]=Трансформатор Name[x-test]=xxtransformerxx Name[zh_CN]=转换器 diff -Nru calligra-2.9.7/flow/stencils/Electronic/ampermeter.desktop calligra-2.9.11/flow/stencils/Electronic/ampermeter.desktop --- calligra-2.9.7/flow/stencils/Electronic/ampermeter.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/ampermeter.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=ampérmeter Name[sl]=ampermeter Name[sv]=amperemätare +Name[tr]=ampermetre Name[uk]=Амперметр Name[x-test]=xxampermeterxx Name[zh_TW]=ampermeter diff -Nru calligra-2.9.7/flow/stencils/Electronic/antenna.desktop calligra-2.9.11/flow/stencils/Electronic/antenna.desktop --- calligra-2.9.7/flow/stencils/Electronic/antenna.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/antenna.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=антена Name[bs]=antena Name[ca]=antena -Name[ca@valencia]=antenna +Name[ca@valencia]=antena Name[cs]=anténa Name[da]=antenne Name[de]=Antenne @@ -29,6 +29,7 @@ Name[sk]=anténa Name[sl]=antena Name[sv]=antenn +Name[tr]=anten Name[uk]=Антенна Name[x-test]=xxantennaxx Name[zh_CN]=天线 diff -Nru calligra-2.9.7/flow/stencils/Electronic/bell.desktop calligra-2.9.11/flow/stencils/Electronic/bell.desktop --- calligra-2.9.7/flow/stencils/Electronic/bell.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/bell.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -30,6 +30,7 @@ Name[sk]=zvonček Name[sl]=zvonec Name[sv]=ringklocka +Name[tr]=zil Name[ug]=قوڭغۇراق Name[uk]=Дзвінок Name[x-test]=xxbellxx diff -Nru calligra-2.9.7/flow/stencils/Electronic/button.desktop calligra-2.9.11/flow/stencils/Electronic/button.desktop --- calligra-2.9.7/flow/stencils/Electronic/button.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/button.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -30,6 +30,7 @@ Name[sk]=tlačidlo Name[sl]=gumb Name[sv]=knapp +Name[tr]=düğme Name[ug]=توپچا Name[uk]=Кнопка Name[x-test]=xxbuttonxx diff -Nru calligra-2.9.7/flow/stencils/Electronic/capacitor.desktop calligra-2.9.11/flow/stencils/Electronic/capacitor.desktop --- calligra-2.9.7/flow/stencils/Electronic/capacitor.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/capacitor.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[ru]=Конденсатор Name[sk]=kondenzátor Name[sv]=kondensator +Name[tr]=kapasitör Name[uk]=Конденсатор Name[x-test]=xxcapacitorxx Name[zh_CN]=电容 diff -Nru calligra-2.9.7/flow/stencils/Electronic/capacitor_electrolytic.desktop calligra-2.9.11/flow/stencils/Electronic/capacitor_electrolytic.desktop --- calligra-2.9.7/flow/stencils/Electronic/capacitor_electrolytic.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/capacitor_electrolytic.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[ru]=Электролитический конденсатор Name[sk]=kondenzátor elektrolytický Name[sv]=elektrolytkondensator +Name[tr]=kondansatör elektrolitik Name[uk]=Електролітичний конденсатор Name[x-test]=xxcapacitor electrolyticxx Name[zh_CN]=电容电解 diff -Nru calligra-2.9.7/flow/stencils/Electronic/collection.desktop calligra-2.9.11/flow/stencils/Electronic/collection.desktop --- calligra-2.9.7/flow/stencils/Electronic/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,9 +29,10 @@ Name[pt]=Electrónico Name[pt_BR]=Eletrônico Name[ru]=Электронные -Name[sk]=Elektronické +Name[sk]=Elektronická Name[sl]=Elektronika Name[sv]=Elektronik +Name[tr]=Elektronik Name[ug]=ئېلېكترونلۇق مۇزىكا Name[uk]=Електроніка Name[x-test]=xxElectronicxx diff -Nru calligra-2.9.7/flow/stencils/Electronic/contact.desktop calligra-2.9.11/flow/stencils/Electronic/contact.desktop --- calligra-2.9.7/flow/stencils/Electronic/contact.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/contact.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=kontakt Name[sl]=stik Name[sv]=kontakt +Name[tr]=bağlantı Name[ug]=ئالاقەداش Name[uk]=Контакт Name[x-test]=xxcontactxx diff -Nru calligra-2.9.7/flow/stencils/Electronic/contact_pair.desktop calligra-2.9.11/flow/stencils/Electronic/contact_pair.desktop --- calligra-2.9.7/flow/stencils/Electronic/contact_pair.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/contact_pair.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Контактная пара Name[sk]=kontaktný pár Name[sv]=kontaktpar +Name[tr]=bağlantı çifti Name[uk]=Пара контактів Name[x-test]=xxcontact pairxx Name[zh_CN]=接触对 diff -Nru calligra-2.9.7/flow/stencils/Electronic/diac.desktop calligra-2.9.11/flow/stencils/Electronic/diac.desktop --- calligra-2.9.7/flow/stencils/Electronic/diac.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/diac.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Динистор Name[sk]=diak Name[sv]=diac +Name[tr]=iki yönlü diyot anahtarlama Name[uk]=Діністор Name[x-test]=xxdiacxx Name[zh_CN]=DIAC diff -Nru calligra-2.9.7/flow/stencils/Electronic/di_gate.desktop calligra-2.9.11/flow/stencils/Electronic/di_gate.desktop --- calligra-2.9.7/flow/stencils/Electronic/di_gate.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/di_gate.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Диодный клапан Name[sk]=di brána Name[sv]=dubbelgrind +Name[tr]=diyot kapısı Name[uk]=DI-шлюз Name[x-test]=xxdi gatexx Name[zh_TW]=di gate diff -Nru calligra-2.9.7/flow/stencils/Electronic/diode_inverse.desktop calligra-2.9.11/flow/stencils/Electronic/diode_inverse.desktop --- calligra-2.9.7/flow/stencils/Electronic/diode_inverse.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/diode_inverse.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=diode inverse Name[bs]=inverzna dioda Name[ca]=díode invertit -Name[ca@valencia]=diode invertit +Name[ca@valencia]=díode invertit Name[da]=diode inverse Name[de]=Backward-Diode Name[el]=αντίστροφη δίοδος @@ -23,6 +23,7 @@ Name[ru]=Обратный диод Name[sk]=dióda inverzná Name[sv]=diod invers +Name[tr]=diyot ters Name[uk]=Обернений діод Name[x-test]=xxdiode inversexx Name[zh_CN]=反向二极管 diff -Nru calligra-2.9.7/flow/stencils/Electronic/diode_schottky.desktop calligra-2.9.11/flow/stencils/Electronic/diode_schottky.desktop --- calligra-2.9.7/flow/stencils/Electronic/diode_schottky.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/diode_schottky.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=diode schottky Name[bs]=schottky-eva dioda Name[ca]=díode schottky -Name[ca@valencia]=diode schottky +Name[ca@valencia]=díode schottky Name[cs]=Schottkyho dioda Name[da]=schottkydiode Name[de]=Schottky-Diode @@ -25,6 +25,7 @@ Name[ru]=Диод Шоттки Name[sk]=Schottkyho dióda Name[sv]=diod Schottky +Name[tr]=diyot schottky Name[uk]=Діод Шоткі Name[x-test]=xxdiode schottkyxx Name[zh_CN]=肖特基二极管 diff -Nru calligra-2.9.7/flow/stencils/Electronic/diode_tunnel.desktop calligra-2.9.11/flow/stencils/Electronic/diode_tunnel.desktop --- calligra-2.9.7/flow/stencils/Electronic/diode_tunnel.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/diode_tunnel.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=diode tunnel Name[bs]=tunel dioda Name[ca]=díode tunnel -Name[ca@valencia]=diode tunnel +Name[ca@valencia]=díode tunnel Name[da]=tunneldiode Name[de]=Tunneldiode Name[el]=δίαυλος διόδου @@ -24,6 +24,7 @@ Name[ru]=Туннельный диод Name[sk]=dióda tunelová Name[sv]=diod tunnel +Name[tr]=diyot tünel Name[uk]=Тунельний діод Name[x-test]=xxdiode tunnelxx Name[zh_CN]=隧道二极管 diff -Nru calligra-2.9.7/flow/stencils/Electronic/diode_zenner.desktop calligra-2.9.11/flow/stencils/Electronic/diode_zenner.desktop --- calligra-2.9.7/flow/stencils/Electronic/diode_zenner.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/diode_zenner.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=ценеров диод Name[bs]=zener dioda Name[ca]=díode zener -Name[ca@valencia]=diode zener +Name[ca@valencia]=díode zener Name[cs]=Zenerova dioda Name[da]=zenerdiode Name[de]=Zener-Diode @@ -28,6 +28,7 @@ Name[ru]=Зенеровский диод Name[sk]=dióda zenerova Name[sv]=diod Zener +Name[tr]=zener diyodu Name[uk]=Стабілітрон Name[x-test]=xxdiode zenerxx Name[zh_CN]=齐纳二极管 diff -Nru calligra-2.9.7/flow/stencils/Electronic/engine.desktop calligra-2.9.11/flow/stencils/Electronic/engine.desktop --- calligra-2.9.7/flow/stencils/Electronic/engine.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/engine.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=motor Name[sl]=motor Name[sv]=motor +Name[tr]=motor Name[ug]=ماتور Name[uk]=Двигун Name[x-test]=xxenginexx diff -Nru calligra-2.9.7/flow/stencils/Electronic/ground.desktop calligra-2.9.11/flow/stencils/Electronic/ground.desktop --- calligra-2.9.7/flow/stencils/Electronic/ground.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/ground.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[ru]=Земля Name[sk]=zem Name[sv]=jord +Name[tr]=toprak Name[uk]=Земля Name[x-test]=xxgroundxx Name[zh_CN]=地 diff -Nru calligra-2.9.7/flow/stencils/Electronic/headphone.desktop calligra-2.9.11/flow/stencils/Electronic/headphone.desktop --- calligra-2.9.7/flow/stencils/Electronic/headphone.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/headphone.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -30,6 +30,7 @@ Name[ru]=Наушники Name[sk]=slúchadlá Name[sv]=hörlur +Name[tr]=kulaklık Name[uk]=Навушники Name[x-test]=xxheadphonexx Name[zh_CN]=耳机 diff -Nru calligra-2.9.7/flow/stencils/Electronic/inductor.desktop calligra-2.9.11/flow/stencils/Electronic/inductor.desktop --- calligra-2.9.7/flow/stencils/Electronic/inductor.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/inductor.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[ru]=Катушка индуктивности Name[sk]=vodič Name[sv]=induktans +Name[tr]=indüktör Name[uk]=Індуктивна котушка Name[x-test]=xxinductorxx Name[zh_CN]=电感器 diff -Nru calligra-2.9.7/flow/stencils/Electronic/led_display.desktop calligra-2.9.11/flow/stencils/Electronic/led_display.desktop --- calligra-2.9.7/flow/stencils/Electronic/led_display.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/led_display.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=led displej Name[sl]=prikazovalnik led Name[sv]=lysdiodskärm +Name[tr]=led monitör Name[uk]=Рідкокристалічний дисплей Name[x-test]=xxled displayxx Name[zh_CN]=LED 显示 diff -Nru calligra-2.9.7/flow/stencils/Electronic/microphone.desktop calligra-2.9.11/flow/stencils/Electronic/microphone.desktop --- calligra-2.9.7/flow/stencils/Electronic/microphone.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/microphone.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -32,6 +32,7 @@ Name[sk]=mikrofón Name[sl]=mikrofon Name[sv]=mikrofon +Name[tr]=mikrofon Name[uk]=Мікрофон Name[x-test]=xxmicrophonexx Name[zh_CN]=麦克风 diff -Nru calligra-2.9.7/flow/stencils/Electronic/photo_emiting_part.desktop calligra-2.9.11/flow/stencils/Electronic/photo_emiting_part.desktop --- calligra-2.9.7/flow/stencils/Electronic/photo_emiting_part.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/photo_emiting_part.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Фотоизлучательный элемент Name[sk]=svetlo emitujúca časť Name[sv]=fotoemitter +Name[tr]=ışık yayan diyot Name[uk]=Випромінювач світла Name[x-test]=xxphoto emitting partxx Name[zh_CN]=照片发射部分 diff -Nru calligra-2.9.7/flow/stencils/Electronic/photo_sensitive_part.desktop calligra-2.9.11/flow/stencils/Electronic/photo_sensitive_part.desktop --- calligra-2.9.7/flow/stencils/Electronic/photo_sensitive_part.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/photo_sensitive_part.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Фоточувствительный элемент Name[sk]=svetlocitlivá časť Name[sv]=fotokänslig komponent +Name[tr]=ışık duyarlı diyot Name[uk]=Фоточутлива деталь Name[x-test]=xxphoto sensitive partxx Name[zh_CN]=照片感光部分 diff -Nru calligra-2.9.7/flow/stencils/Electronic/port_in.desktop calligra-2.9.11/flow/stencils/Electronic/port_in.desktop --- calligra-2.9.7/flow/stencils/Electronic/port_in.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/port_in.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Входящий порт Name[sk]=port in Name[sv]=port in +Name[tr]=girdi portu Name[uk]=Вхідний порт Name[x-test]=xxport inxx Name[zh_CN]=IN 端口 diff -Nru calligra-2.9.7/flow/stencils/Electronic/port_inout.desktop calligra-2.9.11/flow/stencils/Electronic/port_inout.desktop --- calligra-2.9.7/flow/stencils/Electronic/port_inout.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/port_inout.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Двусторонний порт Name[sk]=port inout Name[sv]=port in-ut +Name[tr]=girdi/çıktı portu Name[uk]=Вхідний/Вихідний порт Name[x-test]=xxport inoutxx Name[zh_CN]=INOUT 端口 diff -Nru calligra-2.9.7/flow/stencils/Electronic/port_out.desktop calligra-2.9.11/flow/stencils/Electronic/port_out.desktop --- calligra-2.9.7/flow/stencils/Electronic/port_out.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/port_out.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Исходящий порт Name[sk]=port out Name[sv]=port ut +Name[tr]=çıktı portu Name[uk]=Вихідний порт Name[x-test]=xxport outxx Name[zh_CN]=OUT 端口 diff -Nru calligra-2.9.7/flow/stencils/Electronic/potenciometer.desktop calligra-2.9.11/flow/stencils/Electronic/potenciometer.desktop --- calligra-2.9.7/flow/stencils/Electronic/potenciometer.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/potenciometer.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[ru]=Потенциометр Name[sk]=potenciometer Name[sv]=potentiometer +Name[tr]=potansiyometre (gerilim ölçer) Name[uk]=Потенціометр Name[x-test]=xxpotentiometerxx Name[zh_CN]=电位计 diff -Nru calligra-2.9.7/flow/stencils/Electronic/source_current.desktop calligra-2.9.11/flow/stencils/Electronic/source_current.desktop --- calligra-2.9.7/flow/stencils/Electronic/source_current.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/source_current.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Источник тока Name[sk]=zdroj prúdu Name[sv]=källa ström +Name[tr]=kaynak akımı Name[uk]=Джерело струму Name[x-test]=xxsource currentxx Name[zh_CN]=电流源 diff -Nru calligra-2.9.7/flow/stencils/Electronic/source_substitution.desktop calligra-2.9.11/flow/stencils/Electronic/source_substitution.desktop --- calligra-2.9.7/flow/stencils/Electronic/source_substitution.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/source_substitution.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[pt_BR]=substituição de fonte Name[sk]=nahradenie zdroja Name[sv]=källersättning +Name[tr]=kaynak ikamesi Name[uk]=Замінник лінеаризованого джерела струму Name[x-test]=xxsource substitutionxx Name[zh_CN]=源替代 diff -Nru calligra-2.9.7/flow/stencils/Electronic/source_voltage_alternating.desktop calligra-2.9.11/flow/stencils/Electronic/source_voltage_alternating.desktop --- calligra-2.9.7/flow/stencils/Electronic/source_voltage_alternating.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/source_voltage_alternating.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Источник переменного тока Name[sk]=zdroj striedavého napätia Name[sv]=källa växelspänning +Name[tr]=kaynak gerilim alternatif Name[uk]=Джерело змінного струму Name[x-test]=xxsource voltage alternatingxx Name[zh_CN]=交流电压源 diff -Nru calligra-2.9.7/flow/stencils/Electronic/source_voltage.desktop calligra-2.9.11/flow/stencils/Electronic/source_voltage.desktop --- calligra-2.9.7/flow/stencils/Electronic/source_voltage.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/source_voltage.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Источник напряжения Name[sk]=zdroj napätia Name[sv]=källa spänning +Name[tr]=kaynak gerilim Name[uk]=Джерело напруги Name[x-test]=xxsource voltagexx Name[zh_CN]=电压源 diff -Nru calligra-2.9.7/flow/stencils/Electronic/source_voltage_direct.desktop calligra-2.9.11/flow/stencils/Electronic/source_voltage_direct.desktop --- calligra-2.9.7/flow/stencils/Electronic/source_voltage_direct.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/source_voltage_direct.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Источник постоянного тока Name[sk]=zdroj jednosmerného napätia Name[sv]=direktspänningskälla +Name[tr]=kaynak gerilimi doğrudan Name[uk]=Джерело постійного струму Name[x-test]=xxsource voltage directxx Name[zh_CN]=直流电压源 diff -Nru calligra-2.9.7/flow/stencils/Electronic/transistor_bipolar_npn_1.desktop calligra-2.9.11/flow/stencils/Electronic/transistor_bipolar_npn_1.desktop --- calligra-2.9.7/flow/stencils/Electronic/transistor_bipolar_npn_1.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/transistor_bipolar_npn_1.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Биполярный транзистор npn 1 Name[sk]=tranzistor bipolárny npn 1 Name[sv]=transistor bipolär NPN 1 +Name[tr]=NPN transistör Name[uk]=Біполярний транзистор NPN 1 Name[x-test]=xxtransistor bipolar npn 1xx Name[zh_CN]=晶体管双极 NPN 1 diff -Nru calligra-2.9.7/flow/stencils/Electronic/transistor_bipolar_npn_2.desktop calligra-2.9.11/flow/stencils/Electronic/transistor_bipolar_npn_2.desktop --- calligra-2.9.7/flow/stencils/Electronic/transistor_bipolar_npn_2.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/transistor_bipolar_npn_2.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Биполярный транзистор npn 2 Name[sk]=tranzistor bipolárny npn 2 Name[sv]=transistor bipolär NPN 2 +Name[tr]=NPN transistör 2 Name[uk]=Біполярний транзистор NPN 2 Name[x-test]=xxtransistor bipolar npn 2xx Name[zh_CN]=晶体管双极 NPN 2 diff -Nru calligra-2.9.7/flow/stencils/Electronic/transistor_bipolar_pnp_1.desktop calligra-2.9.11/flow/stencils/Electronic/transistor_bipolar_pnp_1.desktop --- calligra-2.9.7/flow/stencils/Electronic/transistor_bipolar_pnp_1.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/transistor_bipolar_pnp_1.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Биполярный транзистор pnp 1 Name[sk]=tranzistor bipolárny pnp 1 Name[sv]=transistor bipolär PNP 1 +Name[tr]=PNP transistör Name[uk]=Біполярний транзистор PNP 1 Name[x-test]=xxtransistor bipolar pnp 1xx Name[zh_CN]=晶体管双极 PNP 1 diff -Nru calligra-2.9.7/flow/stencils/Electronic/transistor_bipolar_pnp_2.desktop calligra-2.9.11/flow/stencils/Electronic/transistor_bipolar_pnp_2.desktop --- calligra-2.9.7/flow/stencils/Electronic/transistor_bipolar_pnp_2.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/transistor_bipolar_pnp_2.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Биполярный транзистор pnp 2 Name[sk]=tranzistor bipolárny pnp 2 Name[sv]=transistor bipolär PNP 2 +Name[tr]=PNP transistör 2 Name[uk]=Біполярний транзистор PNP 2 Name[x-test]=xxtransistor bipolar pnp 2xx Name[zh_CN]=晶体管双极 PNP 2 diff -Nru calligra-2.9.7/flow/stencils/Electronic/transistor_jfe_n.desktop calligra-2.9.11/flow/stencils/Electronic/transistor_jfe_n.desktop --- calligra-2.9.7/flow/stencils/Electronic/transistor_jfe_n.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/transistor_jfe_n.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Транзистор jfe n Name[sk]=tranzistor jfe n Name[sv]=transistor jfe n +Name[tr]=transistör N-JFET Name[uk]=Польовий N-канальний транзистор Name[x-test]=xxtransistor jfe nxx Name[zh_CN]=晶体管 JFE N diff -Nru calligra-2.9.7/flow/stencils/Electronic/transistor_jfe_p.desktop calligra-2.9.11/flow/stencils/Electronic/transistor_jfe_p.desktop --- calligra-2.9.7/flow/stencils/Electronic/transistor_jfe_p.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/transistor_jfe_p.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Транзистор jfe p Name[sk]=tranzistor jfe p Name[sv]=transistor jfe p +Name[tr]=transistör P-JFET Name[uk]=Польовий P-канальний транзистор Name[x-test]=xxtransistor jfe pxx Name[zh_CN]=晶体管 JFE P diff -Nru calligra-2.9.7/flow/stencils/Electronic/transistor_misfe_c_n.desktop calligra-2.9.11/flow/stencils/Electronic/transistor_misfe_c_n.desktop --- calligra-2.9.7/flow/stencils/Electronic/transistor_misfe_c_n.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/transistor_misfe_c_n.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Транзистор misfe c n Name[sk]=tranzistor misfe c n Name[sv]=transistor misfe c n +Name[tr]=transistör N-IGFET Name[uk]=Метал-оксидний (збіднення) N-канальний транзистор Name[x-test]=xxtransistor misfe c nxx Name[zh_TW]=transistor misfe c n diff -Nru calligra-2.9.7/flow/stencils/Electronic/transistor_misfe_c_p.desktop calligra-2.9.11/flow/stencils/Electronic/transistor_misfe_c_p.desktop --- calligra-2.9.7/flow/stencils/Electronic/transistor_misfe_c_p.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/transistor_misfe_c_p.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Транзистор misfe c p Name[sk]=tranzistor misfe c p Name[sv]=transistor misfe c p +Name[tr]=transistör P-IGFET Name[uk]=Метал-оксидний (збіднення) P-канальний транзистор Name[x-test]=xxtransistor misfe c pxx Name[zh_TW]=transistor misfe c p diff -Nru calligra-2.9.7/flow/stencils/Electronic/transistor_misfe_i_n.desktop calligra-2.9.11/flow/stencils/Electronic/transistor_misfe_i_n.desktop --- calligra-2.9.7/flow/stencils/Electronic/transistor_misfe_i_n.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/transistor_misfe_i_n.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Транзистор misfe i n Name[sk]=tranzistor misfe i n Name[sv]=transistor misfe i n +Name[tr]=transistör N-MOSFET Name[uk]=Метал-оксидний (збагачення) N-канальний транзистор Name[x-test]=xxtransistor misfe i nxx Name[zh_TW]=transistor misfe i n diff -Nru calligra-2.9.7/flow/stencils/Electronic/transistor_misfe_i_p.desktop calligra-2.9.11/flow/stencils/Electronic/transistor_misfe_i_p.desktop --- calligra-2.9.7/flow/stencils/Electronic/transistor_misfe_i_p.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/transistor_misfe_i_p.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Транзистор misfe i p Name[sk]=tranzistor misfe i p Name[sv]=transistor misfe i p +Name[tr]=transistör P-MOSFET Name[uk]=Метал-оксидний (збагачення) P-канальний транзистор Name[x-test]=xxtransistor misfe i pxx Name[zh_TW]=transistor misfe i p diff -Nru calligra-2.9.7/flow/stencils/Electronic/transistor_single_pn.desktop calligra-2.9.11/flow/stencils/Electronic/transistor_single_pn.desktop --- calligra-2.9.7/flow/stencils/Electronic/transistor_single_pn.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/transistor_single_pn.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Транзистор single pn Name[sk]=tranzistor jednoduchý pn Name[sv]=transistor enkel pn +Name[tr]=PN transistör Name[uk]=Єдине позначення PN-канального транзистора Name[x-test]=xxtransistor single pnxx Name[zh_TW]=transistor single pn diff -Nru calligra-2.9.7/flow/stencils/Electronic/triac.desktop calligra-2.9.11/flow/stencils/Electronic/triac.desktop --- calligra-2.9.7/flow/stencils/Electronic/triac.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/triac.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[ru]=Симистор Name[sk]=triak Name[sv]=triac +Name[tr]=çift transistör Name[uk]=Симістор Name[x-test]=xxtriacxx Name[zh_CN]=三端可控硅器件 diff -Nru calligra-2.9.7/flow/stencils/Electronic/tyristor_diode.desktop calligra-2.9.11/flow/stencils/Electronic/tyristor_diode.desktop --- calligra-2.9.7/flow/stencils/Electronic/tyristor_diode.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/tyristor_diode.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=tyristor diode Name[bs]=tiristor dioda Name[ca]=díode tiristor -Name[ca@valencia]=diode tiristor +Name[ca@valencia]=díode tiristor Name[cs]=tyristorová dioda Name[da]=tyristordiode Name[de]=Tyristor-Diode @@ -24,6 +24,7 @@ Name[ru]=Динистор Name[sk]=tyristor dióda Name[sv]=tyristordiod +Name[tr]=tristör diyot Name[uk]=Тиристорний діод Name[x-test]=xxtyristor diodexx Name[zh_CN]=可控硅二极管 diff -Nru calligra-2.9.7/flow/stencils/Electronic/tyristor_triode.desktop calligra-2.9.11/flow/stencils/Electronic/tyristor_triode.desktop --- calligra-2.9.7/flow/stencils/Electronic/tyristor_triode.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/tyristor_triode.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Тринистор Name[sk]=tyristor trióda Name[sv]=tyristortriod +Name[tr]=tristör triyot Name[uk]=Тиристорний тріод Name[x-test]=xxtyristor triodexx Name[zh_CN]=可控硅三极管 diff -Nru calligra-2.9.7/flow/stencils/Electronic/vacuum_diode.desktop calligra-2.9.11/flow/stencils/Electronic/vacuum_diode.desktop --- calligra-2.9.7/flow/stencils/Electronic/vacuum_diode.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/vacuum_diode.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=vacuum diode Name[bs]=vakum dioda Name[ca]=díode de buit -Name[ca@valencia]=diode de buit +Name[ca@valencia]=díode de buit Name[cs]=vakuová dioda Name[da]=vacuumdiode Name[de]=Vakuum-Diode @@ -26,6 +26,7 @@ Name[sk]=vákuová dióda Name[sl]=vakuumska dioda Name[sv]=vakuumdiod +Name[tr]=vakum diyot Name[uk]=Вакуумний діод Name[x-test]=xxvacuum diodexx Name[zh_CN]=真空二极管 diff -Nru calligra-2.9.7/flow/stencils/Electronic/vacuum_pentode.desktop calligra-2.9.11/flow/stencils/Electronic/vacuum_pentode.desktop --- calligra-2.9.7/flow/stencils/Electronic/vacuum_pentode.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/vacuum_pentode.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Вакуумный пентод Name[sk]=vákuová pentóda Name[sv]=vakuumpentod +Name[tr]=vakum pentot Name[uk]=Вакуумний пентод Name[x-test]=xxvacuum pentodexx Name[zh_CN]=真空五极管 diff -Nru calligra-2.9.7/flow/stencils/Electronic/vacuum_triode.desktop calligra-2.9.11/flow/stencils/Electronic/vacuum_triode.desktop --- calligra-2.9.7/flow/stencils/Electronic/vacuum_triode.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/vacuum_triode.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Вакуумный триод Name[sk]=vákuová trióda Name[sv]=vakuumtriod +Name[tr]=vakum triyot Name[uk]=Вакуумний тріод Name[x-test]=xxvacuum triodexx Name[zh_CN]=真空三极管 diff -Nru calligra-2.9.7/flow/stencils/Electronic/variable_linear_part.desktop calligra-2.9.11/flow/stencils/Electronic/variable_linear_part.desktop --- calligra-2.9.7/flow/stencils/Electronic/variable_linear_part.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/variable_linear_part.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Переменная линейная часть Name[sk]=premenná lineárna časť Name[sv]=variabel linjär komponent +Name[tr]=değişken doğrusal eleman Name[uk]=Лінійно змінна деталь Name[x-test]=xxvariable linear partxx Name[zh_CN]=可变线性部分 diff -Nru calligra-2.9.7/flow/stencils/Electronic/variable_nonlinear_part.desktop calligra-2.9.11/flow/stencils/Electronic/variable_nonlinear_part.desktop --- calligra-2.9.7/flow/stencils/Electronic/variable_nonlinear_part.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/variable_nonlinear_part.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Переменная нелинейная часть Name[sk]=premenná nelineárna časť Name[sv]=variabel icke-linjär komponent +Name[tr]=değişken doğrusal olmayan elema Name[uk]=Нелінійно змінна деталь Name[x-test]=xxvariable nonlinear partxx Name[zh_CN]=可变非线性部分 diff -Nru calligra-2.9.7/flow/stencils/Electronic/varicap.desktop calligra-2.9.11/flow/stencils/Electronic/varicap.desktop --- calligra-2.9.7/flow/stencils/Electronic/varicap.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/varicap.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Варикап Name[sk]=varikap Name[sv]=variabel kondensator +Name[tr]=tuning diyot Name[uk]=Варіконд Name[x-test]=xxvaricapxx Name[zh_CN]=变容 diff -Nru calligra-2.9.7/flow/stencils/Electronic/voltmeter.desktop calligra-2.9.11/flow/stencils/Electronic/voltmeter.desktop --- calligra-2.9.7/flow/stencils/Electronic/voltmeter.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Electronic/voltmeter.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=voltmeter Name[sl]=voltmeter Name[sv]=voltmätare +Name[tr]=voltmetre Name[uk]=Вольтметр Name[x-test]=xxvoltmeterxx Name[zh_CN]=电压计 diff -Nru calligra-2.9.7/flow/stencils/Flags/antarctica.desktop calligra-2.9.11/flow/stencils/Flags/antarctica.desktop --- calligra-2.9.7/flow/stencils/Flags/antarctica.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/antarctica.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Антарктика Name[bs]=Antarktik Name[ca]=Antàrtida -Name[ca@valencia]=Antàrtica +Name[ca@valencia]=Antàrtida Name[cs]=Antarktida Name[da]=Antarktis Name[de]=Antarktis diff -Nru calligra-2.9.7/flow/stencils/Flags/azerbaijan.desktop calligra-2.9.11/flow/stencils/Flags/azerbaijan.desktop --- calligra-2.9.7/flow/stencils/Flags/azerbaijan.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/azerbaijan.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Азербайджан Name[bs]=Azerbejdžan Name[ca]=Azerbaidjan -Name[ca@valencia]=Azerbaitjan +Name[ca@valencia]=Azerbaidjan Name[cs]=Ázerbájdžán Name[da]=Azerbajdjan Name[de]=Aserbaidschan diff -Nru calligra-2.9.7/flow/stencils/Flags/bangladesh.desktop calligra-2.9.11/flow/stencils/Flags/bangladesh.desktop --- calligra-2.9.7/flow/stencils/Flags/bangladesh.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/bangladesh.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Бангладеш Name[bs]=Bangladeš Name[ca]=Bangla Desh -Name[ca@valencia]=Bangladesh +Name[ca@valencia]=Bangla Desh Name[cs]=Bangladéš Name[da]=Bangladesh Name[de]=Bangladesch diff -Nru calligra-2.9.7/flow/stencils/Flags/central_african_republic.desktop calligra-2.9.11/flow/stencils/Flags/central_african_republic.desktop --- calligra-2.9.7/flow/stencils/Flags/central_african_republic.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/central_african_republic.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Централноафриканска република Name[bs]=Srednjoafrička Republika Name[ca]=República Centreafricana -Name[ca@valencia]=República Central Africana +Name[ca@valencia]=República Centreafricana Name[cs]=Středoafrická republika Name[da]=Central-afrikanske Republik Name[de]=Zentralafrikanische Republik diff -Nru calligra-2.9.7/flow/stencils/Flags/china_prc.desktop calligra-2.9.11/flow/stencils/Flags/china_prc.desktop --- calligra-2.9.7/flow/stencils/Flags/china_prc.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/china_prc.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=China (PRC) Name[bs]=Kina(PRC) Name[ca]=Xina (RPX) -Name[ca@valencia]=Xina (RPC) +Name[ca@valencia]=Xina (RPX) Name[cs]=Čína (ČLR) Name[da]=Kina (PRC) Name[de]=Volksrepublik China diff -Nru calligra-2.9.7/flow/stencils/Flags/china_roc.desktop calligra-2.9.11/flow/stencils/Flags/china_roc.desktop --- calligra-2.9.7/flow/stencils/Flags/china_roc.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/china_roc.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=China (ROC) Name[bs]=Kina (ROC) Name[ca]=Xina (RDX) -Name[ca@valencia]=Xina (ROC) +Name[ca@valencia]=Xina (RDX) Name[da]=Kina (ROC) Name[de]=Republik China (Taiwan) Name[el]=Κίνα (Δημοκρατία) diff -Nru calligra-2.9.7/flow/stencils/Flags/djibouti.desktop calligra-2.9.11/flow/stencils/Flags/djibouti.desktop --- calligra-2.9.7/flow/stencils/Flags/djibouti.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/djibouti.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -13,7 +13,7 @@ Name[es]=Yibuti Name[et]=Djibouti Name[eu]=Djibuti -Name[fi]=Džibuti +Name[fi]=Djibouti Name[fr]=Djibouti Name[ga]=Djibouti Name[gl]=Xibutí diff -Nru calligra-2.9.7/flow/stencils/Flags/ecuador.desktop calligra-2.9.11/flow/stencils/Flags/ecuador.desktop --- calligra-2.9.7/flow/stencils/Flags/ecuador.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/ecuador.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Еквадор Name[bs]=Ekvador Name[ca]=Equador -Name[ca@valencia]=Ecuador +Name[ca@valencia]=Equador Name[cs]=Ekvádor Name[da]=Ecuador Name[de]=Ecuador diff -Nru calligra-2.9.7/flow/stencils/Flags/guyana.desktop calligra-2.9.11/flow/stencils/Flags/guyana.desktop --- calligra-2.9.7/flow/stencils/Flags/guyana.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/guyana.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,7 +2,7 @@ Name=Guyana Name[bs]=Gvajana Name[ca]=Guyana -Name[ca@valencia]=Guaiana +Name[ca@valencia]=Guyana Name[cs]=Guyana Name[da]=Guyana Name[de]=Guyana diff -Nru calligra-2.9.7/flow/stencils/Flags/honduras.desktop calligra-2.9.11/flow/stencils/Flags/honduras.desktop --- calligra-2.9.7/flow/stencils/Flags/honduras.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/honduras.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Хондурас Name[bs]=Honduras Name[ca]=Hondures -Name[ca@valencia]=Honduras +Name[ca@valencia]=Hondures Name[cs]=Honduras Name[da]=Honduras Name[de]=Honduras diff -Nru calligra-2.9.7/flow/stencils/Flags/papua_new_guinea.desktop calligra-2.9.11/flow/stencils/Flags/papua_new_guinea.desktop --- calligra-2.9.7/flow/stencils/Flags/papua_new_guinea.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/papua_new_guinea.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -32,7 +32,7 @@ Name[pt_BR]=Papua Nova Guiné Name[ru]=Папуа-Новая Гвинея Name[se]=Papua Ođđa-Guinea -Name[sk]=Papua - Nová Guinea +Name[sk]=Papua Nová Guinea Name[sl]=Papua Nova Gvineja Name[sv]=Papua Nya Guinea Name[tr]=Papua Yeni Gine diff -Nru calligra-2.9.7/flow/stencils/Flags/russian_federation.desktop calligra-2.9.11/flow/stencils/Flags/russian_federation.desktop --- calligra-2.9.7/flow/stencils/Flags/russian_federation.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/russian_federation.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Руска федерация Name[bs]=Ruska federacija Name[ca]=Rússia -Name[ca@valencia]=Federació Russa +Name[ca@valencia]=Rússia Name[cs]=Ruská federace Name[da]=Russiske Føderation Name[de]=Russische Föderation diff -Nru calligra-2.9.7/flow/stencils/Flags/sao_tome_and_principe.desktop calligra-2.9.11/flow/stencils/Flags/sao_tome_and_principe.desktop --- calligra-2.9.7/flow/stencils/Flags/sao_tome_and_principe.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/sao_tome_and_principe.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Сан Томе и Принципи Name[bs]=Sveti Toma i Princip Name[ca]=Sao Tomé i Príncipe -Name[ca@valencia]=São Tomé i Príncipe +Name[ca@valencia]=Sao Tomé i Príncipe Name[cs]=Ostrov Svatého Tomáše a Princův ostrov Name[da]=Sao Tome og Principe Name[de]=São Tomé und Príncipe diff -Nru calligra-2.9.7/flow/stencils/Flags/syrian_arab_republic.desktop calligra-2.9.11/flow/stencils/Flags/syrian_arab_republic.desktop --- calligra-2.9.7/flow/stencils/Flags/syrian_arab_republic.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/syrian_arab_republic.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Сирийска Арабска Република Name[bs]=Sirija Name[ca]=Síria -Name[ca@valencia]=República Àrab Síria +Name[ca@valencia]=Síria Name[cs]=Syrská arabská republika Name[da]=Syrien Name[de]=Arabische Republik Syrien diff -Nru calligra-2.9.7/flow/stencils/Flags/united_arab_emirates.desktop calligra-2.9.11/flow/stencils/Flags/united_arab_emirates.desktop --- calligra-2.9.7/flow/stencils/Flags/united_arab_emirates.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/united_arab_emirates.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Обединени Арабски Емирства Name[bs]=Ujedinjeni Arapski Emirati Name[ca]=Unió dels Emirats Àrabs -Name[ca@valencia]=Emirats Àrabs Units +Name[ca@valencia]=Unió dels Emirats Àrabs Name[cs]=Spojené arabské emiráty Name[da]=Forenende Arabiske Emirater Name[de]=Vereinigte Arabische Emirate diff -Nru calligra-2.9.7/flow/stencils/Flags/unitednations.desktop calligra-2.9.11/flow/stencils/Flags/unitednations.desktop --- calligra-2.9.7/flow/stencils/Flags/unitednations.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/unitednations.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -12,7 +12,7 @@ Name[es]=Naciones Unidas Name[et]=ÜRO Name[eu]=Nazio Batuak -Name[fi]=Yhdistyneet Kansakunnat +Name[fi]=Yhdistyneet kansakunnat Name[fr]=Nations unies Name[gl]=Nacións Unidas Name[hu]=ENSZ diff -Nru calligra-2.9.7/flow/stencils/Flags/wake_island.desktop calligra-2.9.11/flow/stencils/Flags/wake_island.desktop --- calligra-2.9.7/flow/stencils/Flags/wake_island.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/wake_island.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=о-в Уейк Name[bs]=Otok Wake Name[ca]=Illes Wake -Name[ca@valencia]=Illa Wake +Name[ca@valencia]=Illes Wake Name[cs]=Ostrov Wake Name[da]=Wake-øen Name[de]=Wake Island diff -Nru calligra-2.9.7/flow/stencils/Flags/yemen.desktop calligra-2.9.11/flow/stencils/Flags/yemen.desktop --- calligra-2.9.7/flow/stencils/Flags/yemen.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/yemen.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Йемен Name[bs]=Jemen Name[ca]=Iemen -Name[ca@valencia]=Yemen +Name[ca@valencia]=Iemen Name[cs]=Jemen Name[da]=Yemen Name[de]=Jemen diff -Nru calligra-2.9.7/flow/stencils/Flags/zimbabwe.desktop calligra-2.9.11/flow/stencils/Flags/zimbabwe.desktop --- calligra-2.9.7/flow/stencils/Flags/zimbabwe.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Flags/zimbabwe.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Зимбабве Name[bs]=Zimbabwe Name[ca]=Zimbàbue -Name[ca@valencia]=Zimbabwe +Name[ca@valencia]=Zimbàbue Name[cs]=Zimbabwe Name[da]=Zimbabwe Name[de]=Simbabwe diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_iiii.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_iiii.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_iiii.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_iiii.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть iiii Name[sk]=časť iii Name[sv]=iiii-del +Name[tr]=parça iiii Name[uk]=Частинка iiii Name[x-test]=xxpart iiiixx Name[zh_TW]=part iiii diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_iiio.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_iiio.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_iiio.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_iiio.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть iiio Name[sk]=časť iiio Name[sv]=iiio-del +Name[tr]=parça iiio Name[uk]=Частинка iiio Name[x-test]=xxpart iiioxx Name[zh_TW]=part iiio diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_iioi.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_iioi.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_iioi.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_iioi.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть iioi Name[sk]=časť iioi Name[sv]=iiui-del +Name[tr]=parça iioi Name[uk]=Частинка iioi Name[x-test]=xxpart iioixx Name[zh_TW]=part iioi diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_iioo.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_iioo.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_iioo.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_iioo.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть iioo Name[sk]=časť iioo Name[sv]=iiuu-del +Name[tr]=parça iioo Name[uk]=Частинка iioo Name[x-test]=xxpart iiooxx Name[zh_TW]=part iioo diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_ioii.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_ioii.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_ioii.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_ioii.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть ioii Name[sk]=časť ioii Name[sv]=iuii-del +Name[tr]=parça ioii Name[uk]=Частинка ioii Name[x-test]=xxpart ioiixx Name[zh_TW]=part ioii diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_ioio.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_ioio.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_ioio.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_ioio.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть ioio Name[sk]=časť ioio Name[sv]=iuiu-del +Name[tr]=parça ioio Name[uk]=Частинка ioio Name[x-test]=xxpart ioioxx Name[zh_TW]=part ioio diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_iooi.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_iooi.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_iooi.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_iooi.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть iooi Name[sk]=časť iooi Name[sv]=iuui-del +Name[tr]=parça iooi Name[uk]=Частинка iooi Name[x-test]=xxpart iooixx Name[zh_TW]=part iooi diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_iooo.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_iooo.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_iooo.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_iooo.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть iooo Name[sk]=časť iooo Name[sv]=iuuu-del +Name[tr]=parça iooo Name[uk]=Частинка iooo Name[x-test]=xxpart ioooxx Name[zh_TW]=part iooo diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_oiii.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_oiii.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_oiii.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_oiii.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть oiii Name[sk]=časť oiii Name[sv]=uiii-del +Name[tr]=parça oiii Name[uk]=Частинка oiii Name[x-test]=xxpart oiiixx Name[zh_TW]=part oiii diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_oiio.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_oiio.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_oiio.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_oiio.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть oiio Name[sk]=časť oiio Name[sv]=uiiu-del +Name[tr]=parça oiio Name[uk]=Частинка oiio Name[x-test]=xxpart oiioxx Name[zh_TW]=part oiio diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_oioi.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_oioi.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_oioi.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_oioi.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть oioi Name[sk]=časť oioi Name[sv]=uiui-del +Name[tr]=parça oioi Name[uk]=Частинка oioi Name[x-test]=xxpart oioixx Name[zh_TW]=part oioi diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_oioo.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_oioo.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_oioo.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_oioo.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть oioo Name[sk]=časť oioo Name[sv]=uiuu-del +Name[tr]=parça oioo Name[uk]=Частинка oioo Name[x-test]=xxpart oiooxx Name[zh_TW]=part oioo diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_ooii.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_ooii.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_ooii.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_ooii.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть ooii Name[sk]=časť ooii Name[sv]=uuii-del +Name[tr]=parça ooii Name[uk]=Частинка ooii Name[x-test]=xxpart ooiixx Name[zh_TW]=part ooii diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_ooio.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_ooio.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_ooio.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_ooio.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть ooio Name[sk]=časť ooio Name[sv]=uuiu-del +Name[tr]=parça ooio Name[uk]=Частинка ooio Name[x-test]=xxpart ooioxx Name[zh_TW]=part ooio diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_oooi.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_oooi.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_oooi.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_oooi.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть oooi Name[sk]=časť oooi Name[sv]=uuui-del +Name[tr]=parça oooi Name[uk]=Частинка oooi Name[x-test]=xxpart oooixx Name[zh_TW]=part oooi diff -Nru calligra-2.9.7/flow/stencils/Jigsaw/part_oooo.desktop calligra-2.9.11/flow/stencils/Jigsaw/part_oooo.desktop --- calligra-2.9.7/flow/stencils/Jigsaw/part_oooo.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Jigsaw/part_oooo.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=часть oooo Name[sk]=časť oooo Name[sv]=uuuu-del +Name[tr]=parça oooo Name[uk]=Частинка oooo Name[x-test]=xxpart ooooxx Name[zh_TW]=part oooo diff -Nru calligra-2.9.7/flow/stencils/Lights/ACL.desktop calligra-2.9.11/flow/stencils/Lights/ACL.desktop --- calligra-2.9.7/flow/stencils/Lights/ACL.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Lights/ACL.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,7 +28,7 @@ Name[ru]=Список контроля доступа (ACL) Name[sk]=ACL Name[sv]=ACL -Name[tr]=EKL +Name[tr]=ACL Name[uk]=ACL Name[x-test]=xxACLxx Name[zh_CN]=ACL diff -Nru calligra-2.9.7/flow/stencils/Lights/Blinders.desktop calligra-2.9.11/flow/stencils/Lights/Blinders.desktop --- calligra-2.9.7/flow/stencils/Lights/Blinders.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Lights/Blinders.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Боковые экраны антенны Name[sk]=Blinders Name[sv]=Bländljus +Name[tr]=Körleştiriciler Name[uk]=Прожектори з екрануванням Name[x-test]=xxBlindersxx Name[zh_CN]=眼罩 diff -Nru calligra-2.9.7/flow/stencils/Lights/collection.desktop calligra-2.9.11/flow/stencils/Lights/collection.desktop --- calligra-2.9.7/flow/stencils/Lights/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Lights/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -31,6 +31,7 @@ Name[sk]=Svetlá Name[sl]=Luči Name[sv]=Ljus +Name[tr]=Işıklar Name[uk]=Освітлення Name[x-test]=xxLightsxx Name[zh_CN]=灯 diff -Nru calligra-2.9.7/flow/stencils/Lights/ERS.desktop calligra-2.9.11/flow/stencils/Lights/ERS.desktop --- calligra-2.9.7/flow/stencils/Lights/ERS.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Lights/ERS.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[ru]=ERS Name[sk]=ERS Name[sv]=Profilstrålkastare +Name[tr]=Eliptik reflektör ile farlar Name[uk]=Еліпсоїдальне світло від рефлектора Name[x-test]=xxERSxx Name[zh_TW]=ERS diff -Nru calligra-2.9.7/flow/stencils/Lights/Fresnel.desktop calligra-2.9.11/flow/stencils/Lights/Fresnel.desktop --- calligra-2.9.7/flow/stencils/Lights/Fresnel.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Lights/Fresnel.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Френель Name[sk]=Fresnel Name[sv]=Fresnel +Name[tr]=Fresnel lens ile far Name[uk]=Освітлювач Френеля Name[x-test]=xxFresnelxx Name[zh_TW]=Fresnel diff -Nru calligra-2.9.7/flow/stencils/Lights/Moving_head.desktop calligra-2.9.11/flow/stencils/Lights/Moving_head.desktop --- calligra-2.9.7/flow/stencils/Lights/Moving_head.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Lights/Moving_head.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Движение вперёд Name[sk]=Pohyblivá hlava Name[sv]=Rörligt ljus +Name[tr]=Hareketli kafa Name[uk]=Рухома голівка Name[x-test]=xxMoving headxx Name[zh_TW]=移動頭 diff -Nru calligra-2.9.7/flow/stencils/Lights/PAR.desktop calligra-2.9.11/flow/stencils/Lights/PAR.desktop --- calligra-2.9.7/flow/stencils/Lights/PAR.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Lights/PAR.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -30,6 +30,7 @@ Name[ru]=РЛС Name[sk]=PAR Name[sv]=PAR +Name[tr]=PAR Işık Name[uk]=PAR-прожектор Name[x-test]=xxPARxx Name[zh_CN]=PAR diff -Nru calligra-2.9.7/flow/stencils/Lights/PAR_floor.desktop calligra-2.9.11/flow/stencils/Lights/PAR_floor.desktop --- calligra-2.9.7/flow/stencils/Lights/PAR_floor.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Lights/PAR_floor.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Пол РЛС Name[sk]=PAR floor Name[sv]=PAR golv +Name[tr]=Far standı Name[uk]=PAR-прожектор на підставці Name[x-test]=xxPAR floorxx Name[zh_TW]=PAR floor diff -Nru calligra-2.9.7/flow/stencils/Lights/PC.desktop calligra-2.9.11/flow/stencils/Lights/PC.desktop --- calligra-2.9.7/flow/stencils/Lights/PC.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Lights/PC.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Каркас Pebble Convex Name[sk]=Konvexná lampa Pebble Name[sv]=PC-strålkastare +Name[tr]=PC spot Name[uk]=Освітлювач з опуклою лінзою Name[x-test]=xxPebble Convex lanternxx Name[zh_TW]=Pebble Convex lantern diff -Nru calligra-2.9.7/flow/stencils/Lights/Striplight.desktop calligra-2.9.11/flow/stencils/Lights/Striplight.desktop --- calligra-2.9.7/flow/stencils/Lights/Striplight.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Lights/Striplight.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Узконаправленный свет Name[sk]=Striplight Name[sv]=Flodljus +Name[tr]=Tüp lambası Name[uk]=Вузькоспрямоване світло Name[x-test]=xxStriplightxx Name[zh_CN]=长条状灯 diff -Nru calligra-2.9.7/flow/stencils/Lights/Stroboscope.desktop calligra-2.9.11/flow/stencils/Lights/Stroboscope.desktop --- calligra-2.9.7/flow/stencils/Lights/Stroboscope.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Lights/Stroboscope.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[sk]=Stroboskopové svetlo Name[sl]=Stroboskopska luč Name[sv]=Stroboskopljus +Name[tr]=Strobe ışığı Name[uk]=Стробоскопічне світло Name[x-test]=xxStroboscope lightxx Name[zh_CN]=频闪灯 diff -Nru calligra-2.9.7/flow/stencils/Logic/and.desktop calligra-2.9.11/flow/stencils/Logic/and.desktop --- calligra-2.9.7/flow/stencils/Logic/and.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Logic/and.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,7 +26,7 @@ Name[pt]=E Name[pt_BR]=E Name[ru]=И -Name[sk]=And +Name[sk]=A Name[sl]=In Name[sv]=Och Name[tr]=Ve diff -Nru calligra-2.9.7/flow/stencils/Logic/connector.desktop calligra-2.9.11/flow/stencils/Logic/connector.desktop --- calligra-2.9.7/flow/stencils/Logic/connector.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Logic/connector.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -30,6 +30,7 @@ Name[sk]=Konektor Name[sl]=Povezovalnik Name[sv]=Kontakt +Name[tr]=Bağlayıcı Name[ug]=ئۇلىغۇچ Name[uk]=З'єднувач Name[x-test]=xxConnectorxx diff -Nru calligra-2.9.7/flow/stencils/Logic/inverter.desktop calligra-2.9.11/flow/stencils/Logic/inverter.desktop --- calligra-2.9.7/flow/stencils/Logic/inverter.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Logic/inverter.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[ru]=Инвертор Name[sk]=Invertor Name[sv]=Inverterare +Name[tr]=Çevirici Name[uk]=Інвертор Name[x-test]=xxInverterxx Name[zh_CN]=换流器 diff -Nru calligra-2.9.7/flow/stencils/Logic/nand.desktop calligra-2.9.11/flow/stencils/Logic/nand.desktop --- calligra-2.9.7/flow/stencils/Logic/nand.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Logic/nand.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[ru]=И-НЕТ Name[sk]=Nand Name[sv]=Icke och +Name[tr]=Nand Name[uk]=І-НІ Name[x-test]=xxNandxx Name[zh_CN]=与非 diff -Nru calligra-2.9.7/flow/stencils/Logic/nor.desktop calligra-2.9.11/flow/stencils/Logic/nor.desktop --- calligra-2.9.7/flow/stencils/Logic/nor.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Logic/nor.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[ru]=ИЛИ-НЕ Name[sk]=Nor Name[sv]=Icke eller +Name[tr]=Nor Name[uk]=Запер. АБО Name[x-test]=xxNorxx Name[zh_CN]=或非 diff -Nru calligra-2.9.7/flow/stencils/Logic/not.desktop calligra-2.9.11/flow/stencils/Logic/not.desktop --- calligra-2.9.7/flow/stencils/Logic/not.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Logic/not.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,9 +28,10 @@ Name[pt]=Não Name[pt_BR]=Não Name[ru]=НЕ -Name[sk]=Not +Name[sk]=Nie Name[sl]=Ne Name[sv]=Icke +Name[tr]=Not Name[ug]=Not Name[uk]=НІ Name[x-test]=xxNotxx diff -Nru calligra-2.9.7/flow/stencils/Logic/or.desktop calligra-2.9.11/flow/stencils/Logic/or.desktop --- calligra-2.9.7/flow/stencils/Logic/or.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Logic/or.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -32,7 +32,7 @@ Name[sk]=Alebo Name[sl]=Ali Name[sv]=Eller -Name[tr]=Veya +Name[tr]=Or Name[ug]=ياكى Name[uk]=Або Name[x-test]=xxOrxx diff -Nru calligra-2.9.7/flow/stencils/Logic/xor.desktop calligra-2.9.11/flow/stencils/Logic/xor.desktop --- calligra-2.9.7/flow/stencils/Logic/xor.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Logic/xor.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -31,6 +31,7 @@ Name[sk]=Xor Name[sl]=Xor Name[sv]=Exklusiv eller +Name[tr]=Xor Name[ug]=غەيرىي - ياكى Name[uk]=Викл. АБО Name[x-test]=xxXorxx diff -Nru calligra-2.9.7/flow/stencils/LST/associator_subsystem.desktop calligra-2.9.11/flow/stencils/LST/associator_subsystem.desktop --- calligra-2.9.7/flow/stencils/LST/associator_subsystem.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/LST/associator_subsystem.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Ассоциатор Name[sk]=Asociátor Name[sv]=Associator +Name[tr]=İlişkilendirici Name[uk]=Асоціативна підсистема Name[x-test]=xxAssociatorxx Name[zh_TW]=結合子 diff -Nru calligra-2.9.7/flow/stencils/LST/decode_subsystem.desktop calligra-2.9.11/flow/stencils/LST/decode_subsystem.desktop --- calligra-2.9.7/flow/stencils/LST/decode_subsystem.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/LST/decode_subsystem.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Подсистема декодирования Name[sk]=Dekódovať sybsystém Name[sv]=Avkodningsdelsystem +Name[tr]=KodÇözme Altsistemi Name[uk]=Підсистема декодування Name[x-test]=xxDecode Subsystemxx Name[zh_CN]=解码子系统 diff -Nru calligra-2.9.7/flow/stencils/LST/encode_subsystem.desktop calligra-2.9.11/flow/stencils/LST/encode_subsystem.desktop --- calligra-2.9.7/flow/stencils/LST/encode_subsystem.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/LST/encode_subsystem.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Подсистема кодирования Name[sk]=Zakódovať subsystém Name[sv]=Kodningsdelsystem +Name[tr]=Kodlama Altsistemi Name[uk]=Підсистема кодування Name[x-test]=xxEncode Subsystemxx Name[zh_CN]=编码子系统 diff -Nru calligra-2.9.7/flow/stencils/LST/extruder.desktop calligra-2.9.11/flow/stencils/LST/extruder.desktop --- calligra-2.9.7/flow/stencils/LST/extruder.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/LST/extruder.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Экструдер Name[sk]=Extrudér Name[sv]=Extruder +Name[tr]=Uzatıcı Name[uk]=Підсистема видобування Name[x-test]=xxExtruderxx Name[zh_CN]=挤压机 diff -Nru calligra-2.9.7/flow/stencils/LST/ingestor_subsystem.desktop calligra-2.9.11/flow/stencils/LST/ingestor_subsystem.desktop --- calligra-2.9.7/flow/stencils/LST/ingestor_subsystem.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/LST/ingestor_subsystem.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=Ingestão Name[sk]=Ingestor Name[sv]=Intag +Name[tr]=Pikap Name[uk]=Підсистема харчування Name[x-test]=xxIngestorxx Name[zh_TW]=吸收器 diff -Nru calligra-2.9.7/flow/stencils/LST/internal_subsystem.desktop calligra-2.9.11/flow/stencils/LST/internal_subsystem.desktop --- calligra-2.9.7/flow/stencils/LST/internal_subsystem.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/LST/internal_subsystem.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Внутренний преобразователь Name[sk]=Interný prevodník Name[sv]=Intern omvandlare +Name[tr]=Dahili Sinyal Üretici Name[uk]=Внутрішній перетворювач Name[x-test]=xxInternal Transducerxx Name[zh_CN]=内部换能器 diff -Nru calligra-2.9.7/flow/stencils/LST/it_subsystem.desktop calligra-2.9.11/flow/stencils/LST/it_subsystem.desktop --- calligra-2.9.7/flow/stencils/LST/it_subsystem.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/LST/it_subsystem.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Преобразователь ввода Name[sk]=Vstupný prevodník Name[sv]=Ingångsomvandlare +Name[tr]=Girdi Sinyal Vericisi Name[uk]=Перетворювач входу Name[x-test]=xxInput Transducerxx Name[zh_CN]=输入换能器 diff -Nru calligra-2.9.7/flow/stencils/LST/mestorage.desktop calligra-2.9.11/flow/stencils/LST/mestorage.desktop --- calligra-2.9.7/flow/stencils/LST/mestorage.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/LST/mestorage.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Хранилище ME Name[sk]=ME úložisko Name[sv]=ME-lagring +Name[tr]=ME Depolama Aygıt Name[uk]=Підсистема зберігання пам’яті Name[x-test]=xxME Storagexx Name[zh_CN]=ME存储 diff -Nru calligra-2.9.7/flow/stencils/LST/ot_subsystem.desktop calligra-2.9.11/flow/stencils/LST/ot_subsystem.desktop --- calligra-2.9.7/flow/stencils/LST/ot_subsystem.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/LST/ot_subsystem.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Преобразователь вывода Name[sk]=Výstupný prevodník Name[sv]=Utgångsomvandlare +Name[tr]=Çıktı Sinyal Vericisi Name[uk]=Перетворювач виходу Name[x-test]=xxOutput Transducerxx Name[zh_CN]=输出换能器 diff -Nru calligra-2.9.7/flow/stencils/Map/Corner2.desktop calligra-2.9.11/flow/stencils/Map/Corner2.desktop --- calligra-2.9.7/flow/stencils/Map/Corner2.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Map/Corner2.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=Roh2 Name[sl]=Vogal2 Name[sv]=Hörn 2 +Name[tr]=Köşe 2 Name[uk]=Кут 2 Name[x-test]=xxCorner2xx Name[zh_TW]=角落2 diff -Nru calligra-2.9.7/flow/stencils/Map/Elevated.desktop calligra-2.9.11/flow/stencils/Map/Elevated.desktop --- calligra-2.9.7/flow/stencils/Map/Elevated.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Map/Elevated.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[sk]=Zvýšený Name[sl]=Dvignjeno Name[sv]=Upphöjd +Name[tr]=Yükseltilmiş Name[uk]=Підйом Name[x-test]=xxElevatedxx Name[zh_TW]=高架 diff -Nru calligra-2.9.7/flow/stencils/Map/T-Junction.desktop calligra-2.9.11/flow/stencils/Map/T-Junction.desktop --- calligra-2.9.7/flow/stencils/Map/T-Junction.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Map/T-Junction.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[ru]=Тройник Name[sk]=T-uzol Name[sv]=T-korsning +Name[tr]=T-Kavşak Name[uk]=«T»-перетин доріг Name[x-test]=xxT-Junctionxx Name[zh_CN]=三叉路 diff -Nru calligra-2.9.7/flow/stencils/Misc/expended-node.desktop calligra-2.9.11/flow/stencils/Misc/expended-node.desktop --- calligra-2.9.7/flow/stencils/Misc/expended-node.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Misc/expended-node.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=расширенный узел Name[sk]=vynaložený uzol Name[sv]=expanderad nod +Name[tr]=katlanmamış düğüm Name[uk]=Розширений вузол Name[x-test]=xxexpended nodexx Name[zh_CN]=扩展节点 diff -Nru calligra-2.9.7/flow/stencils/Misc/expensible-node.desktop calligra-2.9.11/flow/stencils/Misc/expensible-node.desktop --- calligra-2.9.7/flow/stencils/Misc/expensible-node.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Misc/expensible-node.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[sk]=rozpínavý uzol Name[sl]=razširljivo vozlišče Name[sv]=expanderbar nod +Name[tr]=açılabilir düğüm Name[uk]=Придатний до розширення вузол Name[x-test]=xxexpansible nodexx Name[zh_CN]=可展开节点 diff -Nru calligra-2.9.7/flow/stencils/Misc/folder.desktop calligra-2.9.11/flow/stencils/Misc/folder.desktop --- calligra-2.9.7/flow/stencils/Misc/folder.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Misc/folder.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -30,7 +30,7 @@ Name[pt]=Pasta Name[pt_BR]=Pasta Name[ru]=Папка -Name[sk]=Priečinok +Name[sk]=priečinok Name[sl]=Mapa Name[sv]=Mapp Name[tr]=Klasör diff -Nru calligra-2.9.7/flow/stencils/MSE/collection.desktop calligra-2.9.11/flow/stencils/MSE/collection.desktop --- calligra-2.9.7/flow/stencils/MSE/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/MSE/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[ru]=MSE Name[sk]=MSE Name[sv]=MSE +Name[tr]=MSE Name[uk]=MSE Name[x-test]=xxMSExx Name[zh_CN]=MSE diff -Nru calligra-2.9.7/flow/stencils/MSE/demultiplexer.desktop calligra-2.9.11/flow/stencils/MSE/demultiplexer.desktop --- calligra-2.9.7/flow/stencils/MSE/demultiplexer.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/MSE/demultiplexer.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Демултиплексор Name[bs]=Demultiplekser Name[ca]=Desmultiplexor -Name[ca@valencia]=Demultiplexor +Name[ca@valencia]=Desmultiplexor Name[da]=Demultiplexer Name[de]=Demultiplexer Name[el]=Απο-πολυπλέκτης @@ -25,6 +25,7 @@ Name[ru]=Демультиплексор Name[sk]=Demultiplexor Name[sv]=Demultiplexer +Name[tr]=Azlayıcı Name[uk]=Демультиплексор Name[x-test]=xxDemultiplexerxx Name[zh_CN]=信号分离器 diff -Nru calligra-2.9.7/flow/stencils/MSE/large_extension_node.desktop calligra-2.9.11/flow/stencils/MSE/large_extension_node.desktop --- calligra-2.9.7/flow/stencils/MSE/large_extension_node.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/MSE/large_extension_node.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Узел большого расширения Name[sk]=Veľký rozširujúci uzol Name[sv]=Stor utökningsnod +Name[tr]=Büyük Uzantı Düğümü Name[uk]=Великий розширений вузол Name[x-test]=xxLarge Extension Nodexx Name[zh_CN]=大扩展结点 diff -Nru calligra-2.9.7/flow/stencils/MSE/node_center.desktop calligra-2.9.11/flow/stencils/MSE/node_center.desktop --- calligra-2.9.7/flow/stencils/MSE/node_center.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/MSE/node_center.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -6,7 +6,7 @@ Name[da]=Node Center Name[de]=Knotenzentrum Name[el]=Κέντρο κόμβου -Name[en_GB]=Node Center +Name[en_GB]=Node Centre Name[es]=Nodo central Name[et]=Sõlme keskus Name[eu]=Nodo-zentroa @@ -24,6 +24,7 @@ Name[ru]=Центр узлов Name[sk]=Centrum uzla Name[sv]=Nodcentral +Name[tr]=Düğüm Merkezi Name[uk]=Центр вузла Name[x-test]=xxNode Centerxx Name[zh_CN]=节点中心 diff -Nru calligra-2.9.7/flow/stencils/Network/antenna.desktop calligra-2.9.11/flow/stencils/Network/antenna.desktop --- calligra-2.9.7/flow/stencils/Network/antenna.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/antenna.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Антена Name[bs]=Antena Name[ca]=Antena -Name[ca@valencia]=Antenna +Name[ca@valencia]=Antena Name[cs]=Anténa Name[da]=Antenne Name[de]=Antenne diff -Nru calligra-2.9.7/flow/stencils/Network/digitizing_board.desktop calligra-2.9.11/flow/stencils/Network/digitizing_board.desktop --- calligra-2.9.7/flow/stencils/Network/digitizing_board.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/digitizing_board.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=Плата оцифровки Name[sk]=Digitalizačná karta Name[sv]=Digitaliseringsbord +Name[tr]=Sayısallaştırma Panosu Name[uk]=Картка оцифровування Name[x-test]=xxDigitizing Boardxx Name[zh_TW]=數位版 diff -Nru calligra-2.9.7/flow/stencils/Network/firewall.desktop calligra-2.9.11/flow/stencils/Network/firewall.desktop --- calligra-2.9.7/flow/stencils/Network/firewall.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/firewall.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Защитна стена Name[bs]=Firewall Name[ca]=Tallafoc -Name[ca@valencia]=Tallafocs +Name[ca@valencia]=Tallafoc Name[cs]=Firewall Name[da]=Firewall Name[de]=Firewall diff -Nru calligra-2.9.7/flow/stencils/Network/hub.desktop calligra-2.9.11/flow/stencils/Network/hub.desktop --- calligra-2.9.7/flow/stencils/Network/hub.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/hub.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -31,6 +31,7 @@ Name[sk]=Rozbočovač Name[sl]=Vozlišče Name[sv]=Nätnav +Name[tr]=Hub Name[uk]=Концентратор Name[x-test]=xxHubxx Name[zh_CN]=集线器 diff -Nru calligra-2.9.7/flow/stencils/Network/pc_minitower.desktop calligra-2.9.11/flow/stencils/Network/pc_minitower.desktop --- calligra-2.9.7/flow/stencils/Network/pc_minitower.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/pc_minitower.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Компютър в малка кутия Name[bs]=Malo kućište PC-a Name[ca]=Una mini torre de PC -Name[ca@valencia]=Una minitorre de PC +Name[ca@valencia]=Una mini torre de PC Name[da]=En minitower-pc Name[de]=Minitower-PC Name[el]=Υπολογιστής πύργος μικρού μεγέθους diff -Nru calligra-2.9.7/flow/stencils/Network/plotter.desktop calligra-2.9.11/flow/stencils/Network/plotter.desktop --- calligra-2.9.7/flow/stencils/Network/plotter.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/plotter.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=Plotter Name[sl]=Risalnik Name[sv]=Kurvritare +Name[tr]=Çizici Name[uk]=Плотер Name[x-test]=xxPlotterxx Name[zh_TW]=繪圖器 diff -Nru calligra-2.9.7/flow/stencils/Network/printer.desktop calligra-2.9.11/flow/stencils/Network/printer.desktop --- calligra-2.9.7/flow/stencils/Network/printer.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/printer.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[sk]=Všeobecná tlačiareň Name[sl]=Splošni tiskalnik Name[sv]=Allmän skrivare +Name[tr]=Genel Yazıcı Name[uk]=Типовий принтер Name[x-test]=xxGeneral Printerxx Name[zh_TW]=一般印表機 diff -Nru calligra-2.9.7/flow/stencils/Network/rj45plug.desktop calligra-2.9.11/flow/stencils/Network/rj45plug.desktop --- calligra-2.9.7/flow/stencils/Network/rj45plug.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/rj45plug.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[sk]=RJ45 Wall-Plug Name[sl]=Zidna vtičnica RJ45 Name[sv]=RJ45-väggkontakt +Name[tr]=RJ45 duvar-fişi Name[uk]=Розетка RJ45 Name[x-test]=xxRJ45 Wall-Plugxx Name[zh_TW]=RJ45 牆上插座 diff -Nru calligra-2.9.7/flow/stencils/Network/router-symbol.desktop calligra-2.9.11/flow/stencils/Network/router-symbol.desktop --- calligra-2.9.7/flow/stencils/Network/router-symbol.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/router-symbol.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[sk]=Symbol routera Name[sl]=Simbol za usmerjevalnik Name[sv]=Routersymbol +Name[tr]=Yönlendirici Sembolü Name[uk]=Символ маршрутизатора Name[x-test]=xxRouter Symbolxx Name[zh_TW]=路由器符號 diff -Nru calligra-2.9.7/flow/stencils/Network/sceadplug.desktop calligra-2.9.11/flow/stencils/Network/sceadplug.desktop --- calligra-2.9.7/flow/stencils/Network/sceadplug.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/sceadplug.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[sk]=Stenová zásuvka RJ45 Name[sl]=Zidna vtičnica scEAD Name[sv]=scEAD-väggkontakt +Name[tr]=scEAD duvar-fişi Name[uk]=Розетка scEAD Name[x-test]=xxscEAD Wall-Plugxx Name[zh_TW]=scEAD 牆上插座 diff -Nru calligra-2.9.7/flow/stencils/Network/speaker_amp.desktop calligra-2.9.11/flow/stencils/Network/speaker_amp.desktop --- calligra-2.9.7/flow/stencils/Network/speaker_amp.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/speaker_amp.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Колонки со встроенным усилителем Name[sk]=Reproduktor zosilňovača Name[sv]=En högtalare till förstärkare +Name[tr]=Bir amplifikatör hoparlör Name[uk]=Гучномовець з підсилювачем Name[x-test]=xxAn amplifier speakerxx Name[zh_TW]=擴音器 diff -Nru calligra-2.9.7/flow/stencils/Network/switch-atm-symbol.desktop calligra-2.9.11/flow/stencils/Network/switch-atm-symbol.desktop --- calligra-2.9.7/flow/stencils/Network/switch-atm-symbol.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/switch-atm-symbol.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[sk]=Switch ATM Symbol Name[sl]=Simbol za stikalo ATM Name[sv]=ATM-växelsymbol +Name[tr]=Anahtar ATM Sembolü Name[uk]=Символ комутатора ATM Name[x-test]=xxSwitch ATM Symbolxx Name[zh_TW]=交換器 ATM 符號 diff -Nru calligra-2.9.7/flow/stencils/Network/switch-symbol.desktop calligra-2.9.11/flow/stencils/Network/switch-symbol.desktop --- calligra-2.9.7/flow/stencils/Network/switch-symbol.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/switch-symbol.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[sk]=Switch Symbol Name[sl]=Simbol za stikalo Name[sv]=Växelsymbol +Name[tr]=Anahtar Sembolü Name[uk]=Символ комутатора Name[x-test]=xxSwitch Symbolxx Name[zh_TW]=交換器符號 diff -Nru calligra-2.9.7/flow/stencils/Network/workstation.desktop calligra-2.9.11/flow/stencils/Network/workstation.desktop --- calligra-2.9.7/flow/stencils/Network/workstation.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Network/workstation.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=Pracovná stanica Name[sl]=Delovna postaja Name[sv]=En arbetsstation +Name[tr]=Bir İş istasyonu Name[uk]=Робоча станція Name[x-test]=xxA Workstationxx Name[zh_TW]=工作站 diff -Nru calligra-2.9.7/flow/stencils/Optics/atten.desktop calligra-2.9.11/flow/stencils/Optics/atten.desktop --- calligra-2.9.7/flow/stencils/Optics/atten.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/atten.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Переменный аттенюатор Name[sk]=Premenlivý zoslabovač Name[sv]=Variabel dämpare +Name[tr]=Değişken Zayıflatıcı Name[uk]=Регульований послаблювач Name[x-test]=xxVariable Attenuatorxx Name[zh_TW]=變量衰減器 diff -Nru calligra-2.9.7/flow/stencils/Optics/beam.desktop calligra-2.9.11/flow/stencils/Optics/beam.desktop --- calligra-2.9.7/flow/stencils/Optics/beam.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/beam.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Луч Name[sk]=Lúč Name[sv]=Stråle +Name[tr]=Işın Name[uk]=Промінь Name[x-test]=xxBeamxx Name[zh_TW]=光束 diff -Nru calligra-2.9.7/flow/stencils/Optics/circulator.desktop calligra-2.9.11/flow/stencils/Optics/circulator.desktop --- calligra-2.9.7/flow/stencils/Optics/circulator.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/circulator.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Распространитель Name[sk]=Cirkulátor Name[sv]=Cirkulator +Name[tr]=Devir ettirici Name[uk]=Циркулятор Name[x-test]=xxCirculatorxx Name[zh_TW]=循環器 diff -Nru calligra-2.9.7/flow/stencils/Optics/coupler.desktop calligra-2.9.11/flow/stencils/Optics/coupler.desktop --- calligra-2.9.7/flow/stencils/Optics/coupler.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/coupler.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Муфта Name[sk]=Násobič Name[sv]=Kopplare +Name[tr]=Çoğaltıcı Name[uk]=Освітлуювач Name[x-test]=xxCouplerxx Name[zh_TW]=聯結器 diff -Nru calligra-2.9.7/flow/stencils/Optics/coupler_vert.desktop calligra-2.9.11/flow/stencils/Optics/coupler_vert.desktop --- calligra-2.9.7/flow/stencils/Optics/coupler_vert.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/coupler_vert.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Муфта (вертикальная) Name[sk]=Násobič (zvislý) Name[sv]=Kopplare (vertikal) +Name[tr]=Çoğaltıcı (dikey) Name[uk]=Освітлювач (вертикально) Name[x-test]=xxCoupler (vertical)xx Name[zh_TW]=聯結器(垂直) diff -Nru calligra-2.9.7/flow/stencils/Optics/detector.desktop calligra-2.9.11/flow/stencils/Optics/detector.desktop --- calligra-2.9.7/flow/stencils/Optics/detector.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/detector.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[sk]=Detektor Name[sl]=Detektor Name[sv]=Detektor +Name[tr]=Algılayıcı Name[uk]=Індикатор Name[x-test]=xxDetectorxx Name[zh_CN]=检测器 diff -Nru calligra-2.9.7/flow/stencils/Optics/detector_vert.desktop calligra-2.9.11/flow/stencils/Optics/detector_vert.desktop --- calligra-2.9.7/flow/stencils/Optics/detector_vert.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/detector_vert.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[sk]=Detektor (zvislý) Name[sl]=Detektor (navpičen) Name[sv]=Detektor (vertikal) +Name[tr]=Detektör (dikey) Name[uk]=Детектор (вертикально) Name[x-test]=xxDetector (vertical)xx Name[zh_TW]=偵測器(垂直) diff -Nru calligra-2.9.7/flow/stencils/Optics/mod.desktop calligra-2.9.11/flow/stencils/Optics/mod.desktop --- calligra-2.9.7/flow/stencils/Optics/mod.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/mod.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Модулятор MZ Name[sk]=MZ modulátor Name[sv]=MZ-modulator +Name[tr]=MZ Modülatör Name[uk]=Модулятор Маха-Цендера Name[x-test]=xxMZ Modulatorxx Name[zh_TW]=MZ 調節器 diff -Nru calligra-2.9.7/flow/stencils/Optics/mod_vert.desktop calligra-2.9.11/flow/stencils/Optics/mod_vert.desktop --- calligra-2.9.7/flow/stencils/Optics/mod_vert.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/mod_vert.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Модулятор MZ (вертикальный) Name[sk]=MZ modulátor (zvislý) Name[sv]=MZ-modulator (vertikal) +Name[tr]=MZ Modülatör (dikey) Name[uk]=Модулятор Маха-Цендера (вертикально) Name[x-test]=xxMZ Modulator (vertical)xx Name[zh_TW]=MZ 調節器(垂直) diff -Nru calligra-2.9.7/flow/stencils/Optics/phasemod.desktop calligra-2.9.11/flow/stencils/Optics/phasemod.desktop --- calligra-2.9.7/flow/stencils/Optics/phasemod.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/phasemod.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[sk]=Fázový modulátor Name[sl]=Fazni modulator Name[sv]=Fasmodulator +Name[tr]=Faz Modülatör Name[uk]=Фазовий модулятор Name[x-test]=xxPhase Modulatorxx Name[zh_TW]=相位調節器 diff -Nru calligra-2.9.7/flow/stencils/Optics/phasemod_vert.desktop calligra-2.9.11/flow/stencils/Optics/phasemod_vert.desktop --- calligra-2.9.7/flow/stencils/Optics/phasemod_vert.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/phasemod_vert.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[sk]=Fázový modulátor (zvislý) Name[sl]=Fazni modulator (navpični) Name[sv]=Fasmodulator (vertikal) +Name[tr]=Faz Modülatör (dikey) Name[uk]=Фазовий модулятор (вертикально) Name[x-test]=xxPhase Modulator (vertical)xx Name[zh_TW]=相位調節器(垂直) diff -Nru calligra-2.9.7/flow/stencils/Optics/polarisation_control.desktop calligra-2.9.11/flow/stencils/Optics/polarisation_control.desktop --- calligra-2.9.7/flow/stencils/Optics/polarisation_control.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/polarisation_control.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Контроль поляризации Name[sk]=Polarizačný ovládač Name[sv]=Polariseringskontroll +Name[tr]=Polarizasyon Kontrol Name[uk]=Керування поляризацією Name[x-test]=xxPolarisation Controlxx Name[zh_TW]=極化控制 diff -Nru calligra-2.9.7/flow/stencils/Optics/polarisation_control_vert.desktop calligra-2.9.11/flow/stencils/Optics/polarisation_control_vert.desktop --- calligra-2.9.7/flow/stencils/Optics/polarisation_control_vert.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/polarisation_control_vert.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Вертикальный контроль поляризации Name[sk]=Polarizačný ovládač (zvislý) Name[sv]=Polariseringskontroll (vertikal) +Name[tr]=Polarizasyon Kontrol (dikey) Name[uk]=Керування поляризацією (вертикально) Name[x-test]=xxPolarisation Control (vertical)xx Name[zh_TW]=極化控制(垂直) diff -Nru calligra-2.9.7/flow/stencils/Optics/scope.desktop calligra-2.9.11/flow/stencils/Optics/scope.desktop --- calligra-2.9.7/flow/stencils/Optics/scope.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/scope.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,7 +28,7 @@ Name[sk]=Osciloskop Name[sl]=Osciloskop Name[sv]=Oscilloskop -Name[tr]=Osiloskop +Name[tr]=Osiloskop Name[ug]=Oscilloscope Name[uk]=Осцилоскоп Name[x-test]=xxOscilloscopexx diff -Nru calligra-2.9.7/flow/stencils/Optics/spectrum.desktop calligra-2.9.11/flow/stencils/Optics/spectrum.desktop --- calligra-2.9.7/flow/stencils/Optics/spectrum.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/spectrum.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=Spektrum Name[sl]=Spekter Name[sv]=Spektrum +Name[tr]=Tayf Name[uk]=Аналізатор спектра Name[x-test]=xxSpectrumxx Name[zh_CN]=光谱 diff -Nru calligra-2.9.7/flow/stencils/Optics/tuneable.desktop calligra-2.9.11/flow/stencils/Optics/tuneable.desktop --- calligra-2.9.7/flow/stencils/Optics/tuneable.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Optics/tuneable.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Настраиваемые муфты Name[sk]=Nastaviteľný násobič Name[sv]=Avstämningsbar kopplare +Name[tr]=Ayarlanabilir Çoğaltıcı Name[uk]=Освітлювач з можливістю налаштування Name[x-test]=xxTuneable Couplerxx Name[zh_TW]=可調整聯結器 diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/cnx.desktop calligra-2.9.11/flow/stencils/Pneumatic/cnx.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/cnx.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/cnx.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -25,6 +25,7 @@ Name[ru]=точка соединения Name[sk]=connpoint Name[sv]=anslutningspunkt +Name[tr]=bağlantı noktası Name[uk]=Точка з’єднання Name[x-test]=xxconnpointxx Name[zh_TW]=連接點 diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/collection.desktop calligra-2.9.11/flow/stencils/Pneumatic/collection.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[sk]=Pneumatické Name[sl]=Pnevmatsko Name[sv]=Pneumatik +Name[tr]=Havalı/Pnömatik Name[uk]=Пневматика Name[x-test]=xxPneumaticxx Name[zh_TW]=充氣裝置 diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/comelec1.desktop calligra-2.9.11/flow/stencils/Pneumatic/comelec1.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/comelec1.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/comelec1.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=comelec1 Name[sk]=comelec1 Name[sv]=comelec1 +Name[tr]=Elektrik kontrol (basit bobin) Name[uk]=Електрична команда (одинарна котушка) Name[x-test]=xxcomelec1xx Name[zh_TW]=comelec1 diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/comelec2.desktop calligra-2.9.11/flow/stencils/Pneumatic/comelec2.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/comelec2.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/comelec2.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=comelec2 Name[sk]=comelec2 Name[sv]=comelec2 +Name[tr]=Elektrik kontrol (çift bobin) Name[uk]=Електрична команда (подвійна котушка) Name[x-test]=xxcomelec2xx Name[zh_TW]=comelec2 diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/commusc.desktop calligra-2.9.11/flow/stencils/Pneumatic/commusc.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/commusc.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/commusc.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=commusc Name[sk]=commusc Name[sv]=commusc +Name[tr]=Kas kontrolü Name[uk]=Мускульна команда Name[x-test]=xxcommuscxx Name[zh_TW]=commusc diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/compb.desktop calligra-2.9.11/flow/stencils/Pneumatic/compb.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/compb.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/compb.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=compb Name[sk]=compb Name[sv]=compb +Name[tr]=Buton kontrolü Name[uk]=Команда натисканням кнопки Name[x-test]=xxcompbxx Name[zh_TW]=compb diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/compilh.desktop calligra-2.9.11/flow/stencils/Pneumatic/compilh.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/compilh.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/compilh.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=compilh Name[sk]=compilh Name[sv]=compilh +Name[tr]=hidrolik tahrikli aracılığıyla dolaylı kontrol Name[uk]=Непряма команда від гідравлічного керування Name[x-test]=xxcompilhxx Name[zh_TW]=compilh diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/compilp.desktop calligra-2.9.11/flow/stencils/Pneumatic/compilp.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/compilp.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/compilp.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=compilp Name[sk]=compilp Name[sv]=compilp +Name[tr]=pnömatik sürücüsü ile dolaylı kontrol Name[uk]=Непряма команда від пневматичного керування Name[x-test]=xxcompilpxx Name[zh_TW]=compilp diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/compush.desktop calligra-2.9.11/flow/stencils/Pneumatic/compush.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/compush.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/compush.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=compush Name[sk]=compush Name[sv]=compush +Name[tr]=iticisinin üzerinde mekanik kontrolü Name[uk]=Механічна команда (від кулачкового механізму) Name[x-test]=xxcompushxx Name[zh_TW]=compush diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/comspr.desktop calligra-2.9.11/flow/stencils/Pneumatic/comspr.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/comspr.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/comspr.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=comspr Name[sk]=comspr Name[sv]=comspr +Name[tr]=Yay üzerinde mekanik kontrol Name[uk]=Механічна команда від пружини Name[x-test]=xxcomsprxx Name[zh_TW]=comspr diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/dejack.desktop calligra-2.9.11/flow/stencils/Pneumatic/dejack.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/dejack.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/dejack.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=DEJack Name[sk]=DEJack Name[sv]=DEJack +Name[tr]=İki uzak silindir Name[uk]=Поршень подвійної дії Name[x-test]=xxDEJackxx Name[zh_TW]=DEJack diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/drain.desktop calligra-2.9.11/flow/stencils/Pneumatic/drain.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/drain.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/drain.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=dreno Name[sk]=drain Name[sv]=avlopp +Name[tr]=hava çıkış memesi Name[uk]=Вихідний потік повітря Name[x-test]=xxdrainxx Name[zh_TW]=drain diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/press.desktop calligra-2.9.11/flow/stencils/Pneumatic/press.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/press.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/press.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ Name[pt_BR]=pressão Name[sk]=press Name[sv]=press +Name[tr]=genel basınç kaynağı Name[ug]=باس Name[uk]=Типове джерело тиску Name[x-test]=xxpressxx diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/presshy.desktop calligra-2.9.11/flow/stencils/Pneumatic/presshy.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/presshy.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/presshy.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=presshy Name[sk]=presshy Name[sv]=presshy +Name[tr]=Hidrolik basınç kaynağı Name[uk]=Джерело гідравлічного тиску Name[x-test]=xxpresshyxx Name[zh_TW]=presshy diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/presspn.desktop calligra-2.9.11/flow/stencils/Pneumatic/presspn.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/presspn.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/presspn.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=presspn Name[sk]=presspn Name[sv]=presspn +Name[tr]=Pnömatik basınç kaynağı Name[uk]=Джерело пневматичного тиску Name[x-test]=xxpresspnxx Name[zh_TW]=presspn diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/seijack.desktop calligra-2.9.11/flow/stencils/Pneumatic/seijack.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/seijack.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/seijack.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=SEIJack Name[sk]=SEIJack Name[sv]=SEIJack +Name[tr]=Tek yönlü tekli silindir Name[uk]=Поршень одинарної дії з нормальним впусканням Name[x-test]=xxSEIJackxx Name[zh_TW]=SEIJack diff -Nru calligra-2.9.7/flow/stencils/Pneumatic/seojack.desktop calligra-2.9.11/flow/stencils/Pneumatic/seojack.desktop --- calligra-2.9.7/flow/stencils/Pneumatic/seojack.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Pneumatic/seojack.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=SEOJack Name[sk]=SEOJack Name[sv]=SEOJack +Name[tr]=Tek yönlü tek kulllanımlık silindir Name[uk]=Поршень одинарної дії з нормальним випусканням Name[x-test]=xxSEOJackxx Name[zh_TW]=SEOJack diff -Nru calligra-2.9.7/flow/stencils/Racks/collection.desktop calligra-2.9.11/flow/stencils/Racks/collection.desktop --- calligra-2.9.7/flow/stencils/Racks/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Racks/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Стойки Name[sk]=Racky Name[sv]=Ställ +Name[tr]=Raflar Name[uk]=Стійки Name[x-test]=xxRacksxx Name[zh_TW]=機架 diff -Nru calligra-2.9.7/flow/stencils/Racks/power_strip_bs_7.desktop calligra-2.9.11/flow/stencils/Racks/power_strip_bs_7.desktop --- calligra-2.9.7/flow/stencils/Racks/power_strip_bs_7.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Racks/power_strip_bs_7.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=Extensão de energia BS 7 Name[sk]=Power Strip BS 7 Name[sv]=Grenuttag BS 7 +Name[tr]=Çoklu soket BS 7 Name[uk]=Подовжувач (британський стандарт), 7 гнізд Name[x-test]=xxPower Strip BS 7xx Name[zh_TW]=發電站 BS 7 diff -Nru calligra-2.9.7/flow/stencils/Racks/power_strip_schuko_8.desktop calligra-2.9.11/flow/stencils/Racks/power_strip_schuko_8.desktop --- calligra-2.9.7/flow/stencils/Racks/power_strip_schuko_8.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Racks/power_strip_schuko_8.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=Extensão de energia Schuko 8 Name[sk]=Power Strip Schuko 8 Name[sv]=Grenuttag Schuko 8 +Name[tr]=Çoklu soket schuko 8 Name[uk]=Подовжувач Schuko, 8 гнізд Name[x-test]=xxPower Strip Schuko 8xx Name[zh_TW]=發電站 Schuko 8 diff -Nru calligra-2.9.7/flow/stencils/Racks/power_strip_ute_8.desktop calligra-2.9.11/flow/stencils/Racks/power_strip_ute_8.desktop --- calligra-2.9.7/flow/stencils/Racks/power_strip_ute_8.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Racks/power_strip_ute_8.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=Extensão de energia UTE 8 Name[sk]=Power Strip UTE 8 Name[sv]=Grenuttag UTE 8 +Name[tr]=Çoklu soket UTE 8 Name[uk]=Подовжувач UTE 8 гнізд Name[x-test]=xxPower Strip UTE 8xx Name[zh_TW]=發電站 UTE 8 diff -Nru calligra-2.9.7/flow/stencils/Racks/rack_label_anchors_42u.desktop calligra-2.9.11/flow/stencils/Racks/rack_label_anchors_42u.desktop --- calligra-2.9.7/flow/stencils/Racks/rack_label_anchors_42u.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Racks/rack_label_anchors_42u.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Якори этикеток 42U Name[sk]=Label Anchors 42U Name[sv]=Etikettfästen 42U +Name[tr]=Etiket sabitleyici 42U Name[uk]=Фіксатори, 42 одиниці Name[x-test]=xxLabel Anchors 42Uxx Name[zh_TW]=標籤定錨 42U diff -Nru calligra-2.9.7/flow/stencils/RDP/place.desktop calligra-2.9.11/flow/stencils/RDP/place.desktop --- calligra-2.9.7/flow/stencils/RDP/place.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/RDP/place.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=miesto Name[sl]=kraj Name[sv]=plats +Name[tr]=konum Name[ug]=ئورۇن Name[uk]=Місце Name[x-test]=xxplacexx diff -Nru calligra-2.9.7/flow/stencils/RDP/place_marquee.desktop calligra-2.9.11/flow/stencils/RDP/place_marquee.desktop --- calligra-2.9.7/flow/stencils/RDP/place_marquee.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/RDP/place_marquee.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=marcador de local Name[sk]=umiestnenie v rámčeku Name[sv]=markerad plats +Name[tr]=yer işareti Name[uk]=Область Name[x-test]=xxplace marqueexx Name[zh_TW]=place marquee diff -Nru calligra-2.9.7/flow/stencils/RDP/transition.desktop calligra-2.9.11/flow/stencils/RDP/transition.desktop --- calligra-2.9.7/flow/stencils/RDP/transition.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/RDP/transition.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[sk]=prechod Name[sl]=prehod Name[sv]=övergång +Name[tr]=geçiş Name[uk]=Передача Name[x-test]=xxtransitionxx Name[zh_TW]=transition diff -Nru calligra-2.9.7/flow/stencils/RDP/t_transition.desktop calligra-2.9.11/flow/stencils/RDP/t_transition.desktop --- calligra-2.9.7/flow/stencils/RDP/t_transition.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/RDP/t_transition.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Размеренный по времени переход Name[sk]=časový prechod Name[sv]=tidtagen övergång +Name[tr]=zamanlı geçiş Name[uk]=Відкладена передача Name[x-test]=xxtimed transitionxx Name[zh_TW]=timed transition diff -Nru calligra-2.9.7/flow/stencils/Renewable_Energy/cup_anemometer.desktop calligra-2.9.11/flow/stencils/Renewable_Energy/cup_anemometer.desktop --- calligra-2.9.7/flow/stencils/Renewable_Energy/cup_anemometer.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Renewable_Energy/cup_anemometer.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Чашечный анемометр Name[sk]=Pohárový anemometer Name[sv]=Skålvindmätare +Name[tr]=Fincan Anemometre Name[uk]=Чашковий анемометр Name[x-test]=xxCup Anemometerxx Name[zh_TW]=杯型風速計 diff -Nru calligra-2.9.7/flow/stencils/Scenegraph/callback.desktop calligra-2.9.11/flow/stencils/Scenegraph/callback.desktop --- calligra-2.9.7/flow/stencils/Scenegraph/callback.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Scenegraph/callback.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[sk]=spätné volanie Name[sl]=povratni klic Name[sv]=återanrop +Name[tr]=geriçağırma Name[uk]=Повернення Name[x-test]=xxcallbackxx Name[zh_TW]=回撥 diff -Nru calligra-2.9.7/flow/stencils/Scenegraph/collection.desktop calligra-2.9.11/flow/stencils/Scenegraph/collection.desktop --- calligra-2.9.7/flow/stencils/Scenegraph/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Scenegraph/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Сценограф Name[sk]=Scénograf Name[sv]=Scendiagram +Name[tr]=Skenograf Name[uk]=Сценічна графіка Name[x-test]=xxScenegraphxx Name[zh_TW]=場景圖片 diff -Nru calligra-2.9.7/flow/stencils/Scenegraph/component.desktop calligra-2.9.11/flow/stencils/Scenegraph/component.desktop --- calligra-2.9.7/flow/stencils/Scenegraph/component.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Scenegraph/component.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=komponent Name[sl]=komponenta Name[sv]=komponent +Name[tr]=bileşen Name[ug]=بۆلەك Name[uk]=Компонент Name[x-test]=xxcomponentxx diff -Nru calligra-2.9.7/flow/stencils/Scenegraph/engine.desktop calligra-2.9.11/flow/stencils/Scenegraph/engine.desktop --- calligra-2.9.7/flow/stencils/Scenegraph/engine.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Scenegraph/engine.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -29,6 +29,7 @@ Name[sk]=motor Name[sl]=motor Name[sv]=motor +Name[tr]=motor Name[ug]=ماتور Name[uk]=Двигун Name[x-test]=xxenginexx diff -Nru calligra-2.9.7/flow/stencils/Scenegraph/manipulator.desktop calligra-2.9.11/flow/stencils/Scenegraph/manipulator.desktop --- calligra-2.9.7/flow/stencils/Scenegraph/manipulator.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Scenegraph/manipulator.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Манипулятор Name[sk]=manipulátor Name[sv]=manipulator +Name[tr]=manipülatör Name[uk]=Маніпулятор Name[x-test]=xxmanipulatorxx Name[zh_TW]=操作者 diff -Nru calligra-2.9.7/flow/stencils/Scenegraph/nodekit.desktop calligra-2.9.11/flow/stencils/Scenegraph/nodekit.desktop --- calligra-2.9.7/flow/stencils/Scenegraph/nodekit.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Scenegraph/nodekit.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[ru]=Комплект узла Name[sk]=nodekit Name[sv]=styrsats +Name[tr]=bağgrubu Name[uk]=Набір вузлів Name[x-test]=xxnodekitxx Name[zh_TW]=nodekit diff -Nru calligra-2.9.7/flow/stencils/Scenegraph/realtimeglobalfield.desktop calligra-2.9.11/flow/stencils/Scenegraph/realtimeglobalfield.desktop --- calligra-2.9.7/flow/stencils/Scenegraph/realtimeglobalfield.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Scenegraph/realtimeglobalfield.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[ru]=Глобальное поле реального времени Name[sk]=realtimeglobalfield Name[sv]=globalt realtidsfält +Name[tr]=gerçekzamanlıgenelalan Name[uk]=Загальне поле у режимі реального часу Name[x-test]=xxrealtimeglobalfieldxx Name[zh_TW]=即時全景 diff -Nru calligra-2.9.7/flow/stencils/Scenegraph/shape.desktop calligra-2.9.11/flow/stencils/Scenegraph/shape.desktop --- calligra-2.9.7/flow/stencils/Scenegraph/shape.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Scenegraph/shape.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -32,6 +32,7 @@ Name[sk]=tvar Name[sl]=oblika Name[sv]=form +Name[tr]=şekil Name[ug]=شەكىل Name[uk]=Форма Name[x-test]=xxshapexx diff -Nru calligra-2.9.7/flow/stencils/Scenegraph/soselection.desktop calligra-2.9.11/flow/stencils/Scenegraph/soselection.desktop --- calligra-2.9.7/flow/stencils/Scenegraph/soselection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Scenegraph/soselection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -21,6 +21,7 @@ Name[pt_BR]=seleção-so Name[sk]=soselection Name[sv]=soselection +Name[tr]=sahne seçimi Name[uk]=Вибір сцени Name[x-test]=xxsoselectionxx Name[zh_TW]=soselection diff -Nru calligra-2.9.7/flow/stencils/SDL/function.desktop calligra-2.9.11/flow/stencils/SDL/function.desktop --- calligra-2.9.7/flow/stencils/SDL/function.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/SDL/function.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -32,6 +32,7 @@ Name[sk]=Funkcia Name[sl]=Funkcija Name[sv]=Funktion +Name[tr]=Fonksiyon Name[ug]=فۇنكسىيە Name[uk]=Функція Name[x-test]=xxFunctionxx diff -Nru calligra-2.9.7/flow/stencils/SDL/inout.desktop calligra-2.9.11/flow/stencils/SDL/inout.desktop --- calligra-2.9.7/flow/stencils/SDL/inout.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/SDL/inout.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -27,6 +27,7 @@ Name[ru]=Ввод/вывод Name[sk]=InOut Name[sv]=In-ut +Name[tr]=GirdiÇıktı Name[uk]=Вхід-вихід Name[x-test]=xxInOutxx Name[zh_TW]=輸出入 diff -Nru calligra-2.9.7/flow/stencils/SDL/receive.desktop calligra-2.9.11/flow/stencils/SDL/receive.desktop --- calligra-2.9.7/flow/stencils/SDL/receive.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/SDL/receive.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -30,6 +30,7 @@ Name[sk]=Prijať Name[sl]=Prejmi Name[sv]=Mottagning +Name[tr]=Al Name[uk]=Отримання Name[x-test]=xxReceivexx Name[zh_CN]=接收 diff -Nru calligra-2.9.7/flow/stencils/SDL/stop.desktop calligra-2.9.11/flow/stencils/SDL/stop.desktop --- calligra-2.9.7/flow/stencils/SDL/stop.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/SDL/stop.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,7 @@ Name[bg]=Спиране Name[bs]=Stop Name[ca]=Atura -Name[ca@valencia]=Para +Name[ca@valencia]=Atura Name[cs]=Zastavit Name[da]=Stop Name[de]=Anhalten diff -Nru calligra-2.9.7/flow/stencils/Sybase/ltm.desktop calligra-2.9.11/flow/stencils/Sybase/ltm.desktop --- calligra-2.9.7/flow/stencils/Sybase/ltm.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Sybase/ltm.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -24,6 +24,7 @@ Name[ru]=Менеждер переноса файлов журнала Name[sk]=Log Transfer Manager/Rep Agent Name[sv]=Loggöverföringshantering/repligeringsagent +Name[tr]=Sistem Günlüğü Aktarma Yöneticisi/Çoğaltma Aracı Name[uk]=Керування перенесенням журналу/Агент реплікації Name[x-test]=xxLog Transfer Manager/Rep Agentxx Name[zh_TW]=紀錄轉換管理/複製代理程式 diff -Nru calligra-2.9.7/flow/stencils/Value_Stream_Mapping/collection.desktop calligra-2.9.11/flow/stencils/Value_Stream_Mapping/collection.desktop --- calligra-2.9.7/flow/stencils/Value_Stream_Mapping/collection.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/stencils/Value_Stream_Mapping/collection.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -23,6 +23,7 @@ Name[pt_BR]=Mapeamento de sequência de valores Name[sk]=Mapovanie prúdu hodnôt Name[sv]=Värdeströmsavbildning +Name[tr]=Değer Akışı Haritalama Name[uk]=Показ потоків даних Name[x-test]=xxValue Stream Mappingxx Name[zh_TW]=數值串流映射 diff -Nru calligra-2.9.7/flow/templates/basic/basicflow.desktop calligra-2.9.11/flow/templates/basic/basicflow.desktop --- calligra-2.9.7/flow/templates/basic/basicflow.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/flow/templates/basic/basicflow.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -87,7 +87,7 @@ Comment[nl]=Maakt een document met de basis-stencils voor stroomdiagrammen geladen. Comment[pl]=Tworzy dokument zawierający podstawowe szablony do diagramów przepływu. Comment[pt]=Cria um documento com os 'stencils' básicos para fluxogramas carregados. -Comment[pt_BR]=Cria um documento com os estêncis básicos para fluxogramas carregados. +Comment[pt_BR]=Cria um documento com os estênceis básicos para fluxogramas carregados. Comment[ru]=Пустой документ с набором шаблонов для организационной структуры Comment[se]=Ráhkada dokumeanta masa oktageardaneamus stensiillat leat juo viežžojuvvon. Comment[sk]=Vytvorí dokument so základnými šablónami pre kreslenie diagramov. diff -Nru calligra-2.9.7/flow/templates/basic/empty-landscape.desktop calligra-2.9.11/flow/templates/basic/empty-landscape.desktop --- calligra-2.9.7/flow/templates/basic/empty-landscape.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/flow/templates/basic/empty-landscape.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -60,5 +60,6 @@ Comment[pt_BR]=Cria um documento no formato de paisagem sem qualquer estêncil carregado. Comment[sk]=Vytvorí dokument orientovaný na šírku bez načítaných šablón. Comment[sv]=Skapar ett dokument med liggande orientering utan att ladda några schabloner. +Comment[tr]=Şablon yüklenmemiş bir enine belge oluşturur. Comment[uk]=Створює порожній документ з альбомною орієнтацією сторінки без завантаження трафаретів. Comment[x-test]=xxCreates a landscape-oriented document with no stencils loaded.xx diff -Nru calligra-2.9.7/flow/templates/basic/empty-portrait.desktop calligra-2.9.11/flow/templates/basic/empty-portrait.desktop --- calligra-2.9.7/flow/templates/basic/empty-portrait.desktop 2015-08-29 14:38:23.000000000 +0000 +++ calligra-2.9.11/flow/templates/basic/empty-portrait.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -30,6 +30,7 @@ Name[pt_BR]=Documento em retrato vazio Name[sk]=Prázdny stojatý dokument Name[sv]=Tomt stående dokument +Name[tr]=Boş Portre Belge Name[uk]=Порожній книжковий документ Name[x-test]=xxEmpty Portrait Documentxx Comment=Creates a portrait-oriented document with no stencils loaded. @@ -59,5 +60,6 @@ Comment[pt_BR]=Cria um documento no formato de retrato sem qualquer estêncil carregado. Comment[sk]=Vytvorí dokument orientovaný na výšku bez načítaných šablón. Comment[sv]=Skapar ett dokument med stående orientering utan att ladda några schabloner. +Comment[tr]=Şablon yüklenmemiş bir portre-tipi belge oluşturur. Comment[uk]=Створює порожній документ з книжковою орієнтацією сторінки без завантаження трафаретів. Comment[x-test]=xxCreates a portrait-oriented document with no stencils loaded.xx diff -Nru calligra-2.9.7/gemini/calligragemini.desktop calligra-2.9.11/gemini/calligragemini.desktop --- calligra-2.9.7/gemini/calligragemini.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/gemini/calligragemini.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -3,6 +3,7 @@ Name=Calligra Gemini Name[bs]=Calligra Gemini Name[ca]=Calligra Gemini +Name[ca@valencia]=Calligra Gemini Name[cs]=Calligra Gemini Name[da]=Calligra Gemini Name[de]=Calligra Gemini @@ -10,6 +11,7 @@ Name[es]=Calligra Gemini Name[et]=Calligra Gemini Name[fi]=Calligra Gemini +Name[gl]=Calligra Gemini Name[ia]=Calligra Gemini Name[it]=Calligra Gemini Name[ja]=Calligra Gemini @@ -27,6 +29,7 @@ GenericName=Word Processing and Presentation GenericName[bs]=Obrada teksta i prezentacije GenericName[ca]=Processament de texts i presentacions +GenericName[ca@valencia]=Processament de texts i presentacions GenericName[cs]=Práce s textem a prezentacemi GenericName[da]=Tekstbehandling og præsentation GenericName[de]=Textverarbeitung und Präsentation @@ -34,6 +37,7 @@ GenericName[es]=Procesador de texto y presentaciones GenericName[et]=Tekstitöötlus ja esitlused GenericName[fi]=Tekstinkäsittely ja esitykset +GenericName[gl]=Procesador de texto e presentacións GenericName[it]=Elaboratore di testi e presentazioni GenericName[ja]=ワードプロセッサとプレゼンテーション GenericName[nb]=Tekstbehandling og presentasjoner diff -Nru calligra-2.9.7/gemini/CMakeLists.txt calligra-2.9.11/gemini/CMakeLists.txt --- calligra-2.9.7/gemini/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/gemini/CMakeLists.txt 2016-02-02 19:53:13.000000000 +0000 @@ -56,7 +56,7 @@ if (WIN32) set(calligragemini_SRCS ${calligragemini_SRCS} calligrageminiwin.rc) else () - kde4_add_app_icon(calligragemini_SRCS "${KDE4_ICON_DIR}/oxygen/*/apps/calligragemini.png") + kde4_add_app_icon(calligragemini_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/pics/hi*-app-calligragemini.png") endif () # Thumbnail helper application @@ -94,6 +94,9 @@ #install(FILES calligragemini.rc DESTINATION ${DATA_INSTALL_DIR}/calligragemini) install(DIRECTORY qml DESTINATION ${DATA_INSTALL_DIR}/calligragemini) install(DIRECTORY themes DESTINATION ${DATA_INSTALL_DIR}/calligragemini) +if(APPLE) + install( FILES ${CMAKE_CURRENT_BINARY_DIR}/calligragemini_SRCS.icns DESTINATION ${BUNDLE_INSTALL_DIR}/calligragemini.app/Contents/Resources) +endif() add_subdirectory(pics) add_subdirectory(cloud) diff -Nru calligra-2.9.7/karbon/CMakeLists.txt calligra-2.9.11/karbon/CMakeLists.txt --- calligra-2.9.7/karbon/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/karbon/CMakeLists.txt 2016-02-02 19:53:13.000000000 +0000 @@ -50,10 +50,11 @@ kde4_add_app_icon( karbon_KDEINIT_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/pics/app/hi*-app-calligrakarbon.png" ) kde4_add_kdeinit_executable( karbon ${karbon_KDEINIT_SRCS}) -if (Q_WS_MAC) +if (APPLE) set_target_properties(karbon PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.template) set_target_properties(karbon PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER "org.calligra.karbon") set_target_properties(karbon PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Karbon 2") + install( FILES ${CMAKE_CURRENT_BINARY_DIR}/karbon_KDEINIT_SRCS.icns DESTINATION ${BUNDLE_INSTALL_DIR}/karbon.app/Contents/Resources) endif () target_link_libraries(kdeinit_karbon karbonui) diff -Nru calligra-2.9.7/karbon/common/commands/KarbonBooleanCommand.cpp calligra-2.9.11/karbon/common/commands/KarbonBooleanCommand.cpp --- calligra-2.9.7/karbon/common/commands/KarbonBooleanCommand.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/karbon/common/commands/KarbonBooleanCommand.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -28,7 +28,7 @@ #include -class Q_DECL_HIDDEN KarbonBooleanCommand::Private +class KarbonBooleanCommand::Private { public: Private(KoShapeBasedDocumentBase * c) diff -Nru calligra-2.9.7/karbon/data/karbon.appdata.xml calligra-2.9.11/karbon/data/karbon.appdata.xml --- calligra-2.9.7/karbon/data/karbon.appdata.xml 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/karbon/data/karbon.appdata.xml 2016-02-02 19:53:13.000000000 +0000 @@ -6,6 +6,7 @@ Karbon Karbon Karbon + Karbon Karbon Karbon Karbon @@ -14,6 +15,7 @@ Karbon Karbon Karbon + Karbon Karbon Karbon Karbon @@ -29,6 +31,7 @@ Scalable Graphics Grafika koja se može skalirati Gràfics escalables + Gràfics escalables Škálovatelná grafika Skalierbare Vektorgrafik Scalable Graphics @@ -36,6 +39,7 @@ Vektorgraafika Skaalautuva grafiikka Graphisme vectoriel + Editor de imaxes vectoriais Graphicos scalabile Grafica scalabile 画像の寸法 @@ -56,6 +60,7 @@

    Karbon je vektorska aplikacija za crtanje s korisničkim sučeljem koje je jednostavno za korištenje , vrlo prilagodljivo i proširivo . To čini Karbon odličnom aplikacijom za korisnike koji počinju istraživati ​​svijet vektorske grafike , kao i za umjetnike koji žele stvoriti prekrasnu vektorsku umjetnost .

    El Karbon és una aplicació de dibuix vectorial amb una interfície d'usuari senzilla d'utilitzar, que es pot personalitzar i ampliar molt. Això converteix el Karbon en una gran aplicació per usuaris que comencin a explorar el món dels gràfics vectorials i també pels artistes que volen crear art vectorial que deixi bocabadat.

    +

    El Karbon és una aplicació de dibuix vectorial amb una interfície d'usuari senzilla d'utilitzar, que es pot personalitzar i ampliar molt. Això converteix el Karbon en una gran aplicació per usuaris que comencen a explorar el món dels gràfics vectorials i també pels artistes que volen crear art vectorial que deixi bocabadat.

    Karbon is a vector drawing application with a user interface that is easy to use, highly customisable and extensible. That makes Karbon a great application for users starting to explore the world of vector graphics as well as for artists wanting to create breathtaking vector art.

    Karbon es una aplicación de dibujo vectorial que dispone de una interfaz de usuario intuitiva, altamente personalizable y extensible. Todo ello hace que Karbon sea una gran aplicación para aquellos usuarios que empiezan a explorar el mundo de los gráficos vectoriales, así como para los artistas que desean crear impresionantes piezas de arte vectorial.

    Karbon on vektorgraafikarakendus hõlpsasti kasutatava, äärmiselt kohandatava ja laiendatava kasutajaliidesega. See muudab Karboni imeheaks abivahendiks algajale, kes alles uudistab vektorgraafika maailma, aga ka kunstnikele, kes soovivad luua hingematvalt kaunist vektorgraafikat.

    @@ -74,6 +79,7 @@

    Features:

    Svojstva:

    Característiques:

    +

    Característiques:

    Vlastnosti:

    Funktionen:

    Features:

    @@ -81,6 +87,7 @@

    Omadused:

    Ominaisuuksia:

    Fonctionnalités :

    +

    Funcionalidades:

    Characteristicas

    Funzionalità:

    機能:

    @@ -99,12 +106,14 @@
  • Učitavanje podrške za ODG, SVG, WPG, WMF, EPS/PS
  • Permet llegir ODG, SVG, WPG, WMF, EPS/PS
  • +
  • Permet llegir ODG, SVG, WPG, WMF, EPS/PS
  • Unterstützung für das Laden von ODG, SVG, WPG, WMF, EPS/PS
  • Loading support for ODG, SVG, WPG, WMF, EPS/PS
  • Admite la carga de ODG, SVG, WPG, WMF, EPS/PS
  • ODG, SVG, WPG, WMF, EPS/PS laadimise toetamine
  • Lukutuki ODG-, SVG-, WPG-, WMF- ja EPS/PS-muodoista
  • Lecture des formats ODG, SVG, WPG, WMF, EPS/PS
  • +
  • Capacidade para cargar ODG, SVG, WPG, WMF e EPS/PS.
  • Cargante supporto pro ODG, SVG, WPG, WMF, EPS/PS
  • Supporto per il caricamento di ODG, SVG, WPG, WMF, EPS/PS
  • 読み込み可能な形式: ODG, SVG, WPG, WMF, EPS/PS
  • @@ -122,12 +131,14 @@
  • Pisanje podrške za ODG, SVG, WPG, WMF, EPS/PS
  • Permet gravar ODG, SVG, PNG, PDF, WMF
  • +
  • Permet gravar ODG, SVG, PNG, PDF, WMF
  • Unterstützung für das Schreiben von ODG, SVG, PNG, PDF, WMF
  • Writing support for ODG, SVG, PNG, PDF, WMF
  • Admite la escritura de ODG, SVG, PNG, PDF, WMF
  • ODG, SVG, PNG, PDF, WMF kirjutamine toetamine
  • Kirjoitustuki ODG-, SVG-, PNG-, PDF- ja WMF-muotoihin
  • Écriture des formats ODG, SVG, PNG, PDF, WMF
  • +
  • Capacidade de xeración de ODG, SVG, PNG, PDF e WMF.
  • Supporto de scriber pro ODG, SVG, PNG, PDF, WMF
  • Supporto per la scrittura di ODG, SVG, PNG, PDF, WMF
  • 書き込み可能な形式: ODG, SVG, PNG, PDF, WMF
  • @@ -145,12 +156,14 @@
  • Prilagodljiv korisnički interfejs sa gdje se moze slobodno staviti alatne trake i dockers
  • Interfície d'usuari que es pot personalitzar que permet situar lliurement barres d'eines i acobladors
  • +
  • Interfície d'usuari que es pot personalitzar que permet situar lliurement barres d'eines i acobladors
  • Anpassungsfähige Bedienungsoberfläche mit frei platzierbaren Werkzeugleisten und andockbaren Fenstern
  • Customisable user interface with freely placeable toolbars and dockers
  • Interfaz de usuario personalizable con barras de herramientas y paneles que se pueden posicionar libremente en cualquier lugar.
  • Kohandatav kasutajaliides vabalt liigutatavate tööriistaribade ja dokkidega
  • Mukautettava käyttöliittymä, jonka työkalurivit ja telakat ovat vapaasti sijoitettavissa
  • Interface utilisateur personnalisable avec des barres d'outil librement déplaçables.
  • +
  • Interface de usuario personalizábel con barras de ferramentas e docas que poden recolocarse libremente.
  • Interfacie de usator personalisabile con barra de instrumentos e stivatores (dockers) liberemente positionabile
  • Interfaccia utente personalizzabile con barre degli strumenti posizionabili liberamente e aree di aggancio
  • Aan te passen gebruikersinterface met vrij te plaatsen werkbalken en verankeringen
  • @@ -168,11 +181,12 @@
  • Sloj lučki radnik za jednostavno rukovanje složenim dokumentima , uključujući pregled sličica , podršku za grupiranje oblika putem drag and drop , kontroliranje vidljivost oblika ili zaključavanje
  • Acoblador de capa per a una gestió senzilla de documents complexos incloent la vista prèvia de miniatures, permet agrupar formes via arrossegar i deixar anar, controlar la visibilitat de les formes o el bloqueig.
  • +
  • Acoblador de capa per a una gestió senzilla de documents complexos incloent la vista prèvia de miniatures, permet agrupar formes via arrossegar i deixar anar, controlar la visibilitat de les formes o el bloqueig.
  • Layer docker for easy handling of complex documents including preview thumbnails, support for grouping shapes via drag and drop, controlling visibility of shapes or locking
  • -
  • Panel de capas para un sencillo manejo de documentos complejos, que incluye vista previa de miniaturas, soporte para la agrupación de figuras mediante la operación de arrastrar y soltar, control de la visibilidad de las figuras o bloqueo.
  • +
  • Panel de capas para un sencillo manejo de documentos complejos, que incluye vista previa de miniaturas y agrupación de figuras mediante la operación de arrastrar y soltar, controlando la visibilidad de las figuras o su bloqueo.
  • Kihtide dokk keerukamate dokumentide hõlpsaks töötlemiseks, kaasa arvatud pisipiltide eelvaatlus, kujundite rühmitamise toetamine ainult lohistamisega, kujundite nähtavuse ja lukustamise määramine
  • Monimutkaisten tiedostojen helppoon hallintaan tasotelakka, joka sisältää esikatselukuvat, muotojen ryhmittelyn tuen vetämällä ja pudottamalla sekä muotojen näkyvyyden ja lukitsemisen hallinnan
  • -
  • Conteneurs de calques pour la manipulation facile de documents complexes incluant les vignettes de prévisualisation, la prise en charge du groupement de formes par glisser-déposer, contrôle de la visibilité des formes et verrouillage
  • +
  • Conteneurs de calques pour la manipulation facile de documents complexes incluant les vignettes d'aperçu, la prise en charge du groupement de formes par glisser-déposer, contrôle de la visibilité des formes et verrouillage
  • Area di aggancio di livelli per una facile gestione di documenti complessi incluse miniature di anteprima, supporto di forme raggruppate tramite il trascinamento e rilascio, controllo della visibilità delle forme e blocco
  • Laagverankering voor gemakkelijke behandeling van complexe documenten inclusief voorbeeldminiaturen, ondersteuning voor groeperen van vormen via slepen en laten vallen, besturing van zichtbaarheid van vormen of vastzetten
  • Dokowanie warstw dla łatwiejszej obsługi złożonych dokumentów zawierający: podgląd miniatur, obsługę grupowania kształtów poprzez przeciągnij i upuść, sterowanie widocznością kształtów czy blokowanie.
  • @@ -180,6 +194,7 @@
  • Área de camadas para tratamento de documentos complexos, incluindo miniaturas, suporte a agrupamento de formas com arrastar e soltar, controle de visibilidade das formas ou seu bloqueio
  • Docker vrstiev pre ľahkú manipuláciu so zložitými dokumentami vrátane náhľadu miniatúr, podpora pre zoskupovanie tvarov cez drag and drop, ovládanie viditeľnosti tvarov alebo zamykanie
  • Lagerpanel för enkel hantering av komplexa dokument inklusive miniatyrbilder för förhandsgranskning, stöd för att gruppera former via drag och släpp, styra eller låsning synlighet av former
  • +
  • Küçük resimleri görüntüleme, sürükle bırak ile şekilleri gruplandırma desteği, şekillerin görünürlüklerini kontrol etme veya kilitleme dahil karmaşık belgeleri kolay kullanma araci
  • Панель шарів для полегшення обробки складних документів з мініатюрами об’єктів, підтримка групування форм перетягуванням зі скиданням, керування показом форм та блокуванням.
  • xxLayer docker for easy handling of complex documents including preview thumbnails, support for grouping shapes via drag and drop, controlling visibility of shapes or lockingxx
  • @@ -187,11 +202,13 @@
  • Alat za napredno uređivanje puta s velikom mogućnosti uređivanja na platnu
  • Eina avançada d'edició de camins amb una gran capacitat d'edició en el llenç
  • +
  • Eina avançada d'edició de camins amb una gran capacitat d'edició en el llenç
  • Advanced path editing tool with great on-canvas editing capabilities
  • Herramienta de edición avanzada de rutas con grandes capacidades de edición en el lienzo
  • Täiustatud kompleksjoone muutmise tööriist suurepäraste otse lõuendil redigeerimise võimalustega
  • Edistynyt polunmuokkaustyökalu, jolla on erinomaiset muokkausominaisuudet
  • Outil d'édition de chemin avancé avec des capacités d'édition dans les canevas performantes
  • +
  • Ferramenta avanzada de edición de camiños cunha gran funcionalidade de edición sobre o lenzo.
  • Strumento avanzato di modifica di tracciati con grandi capacità di modifica sul posto
  • Geavanceerde padbewerkingsgereedschap met prima bewerkingsmiddelen op het werkblad
  • Zaawansowane narzędzia edytowania ścieżki z szerokimi możliwościami edytowania na płótnie
  • @@ -199,6 +216,7 @@
  • Ferramenta avançada para edição de caminhos, com ótima capacidade de edição no local
  • Pokročilý nástroj na úpravu ciest s výbornými schopnosťami editácie na plátne
  • Avancerat konturredigeringsverktyg med utmärkta redigeringsmöjligheter direkt på duken
  • +
  • Önemli tuval düzenleme yetenekleri ile gelişmiş yol düzenleme aracı
  • Інструмент редагування контурів з чудовими можливостями редагування безпосередньо на полотні.
  • xxAdvanced path editing tool with great on-canvas editing capabilitiesxx
  • @@ -206,8 +224,9 @@
  • Razni alati za crtanje za kreiranje put oblike uključujući i put alat nacrtati ,olovka alat , kao i kaligrafija alat za crtanje
  • Diverses eines de dibuix per crear formes de camí incloent una eina de dibuix de camins, una eina de llapis i també una eina de dibuix de cal·ligrafia.
  • +
  • Diverses eines de dibuix per crear formes de camí incloent una eina de dibuix de camins, una eina de llapis i també una eina de dibuix de cal·ligrafia.
  • Various drawing tools for creating path shapes including a draw path tool, a pencil tool as well as a calligraphy drawing tool
  • -
  • Varias herramientas de dibujo para crear figuras con rutas, entre otras una herramienta de dibujo de rutas, una herramienta de pincel y una herramienta de dibujo caligráfico.
  • +
  • Diversas herramientas de dibujo para crear figuras con rutas, entre las que se incluyen una herramienta de dibujo de rutas, una herramienta de pincel y una herramienta de dibujo caligráfico.
  • Mitmesugused kompleksjoontest kujundite loomise vahendid, sealhulgas kompleksjoone joonistamise tööriist, pliiatsitööriist ning kalligraafia loomise tööriist
  • Eri piirrostyökalut polkumuotojen luontiin: polunpiirto-, kynä- ja kalligrafinen piirrostyökalu
  • Outils de dessin variés incluant un outil de création de chemin, un crayon ainsi qu'un outil pour la calligraphie
  • @@ -218,6 +237,7 @@
  • Diversas ferramentas de desenho para criar formas de caminhos, incluindo uma ferramenta de desenho de caminhos, uma ferramenta de lápis e uma ferramenta de desenho caligráfico
  • Rôzne kresliace nástroje na vytváranie tvarov ciest vrátane nástroja na kreslenie cesty, nástroja ceruzky ako aj kaligrafického kresliaceho nástroja
  • Diverse ritverktyg för att skapa konturformer som inkluderar ett konturritverktyg, ett pennverktyg samt ett kalligrafiskt ritverktyg
  • +
  • Yol şekilleri yaratmak için, kaligrafi çizim aracı ile birlikte bir kalem aracı, bir yol çizim aracı dahil çeşitli çizim araçları
  • Різноманітні інструменти малювання для створення контурів, зокрема інструмент малювання контуру, олівець та інструмент каліграфічного малювання.
  • xxVarious drawing tools for creating path shapes including a draw path tool, a pencil tool as well as a calligraphy drawing toolxx
  • @@ -225,6 +245,7 @@
  • Gradijent i uzorak alata za jednostavno na - platnu uređivanje gradijent i uzorak stilova
  • Eines de degradats i patrons per a una edició senzilla sobre el llenç d'estils de degradats i patrons
  • +
  • Eines de degradats i patrons per a una edició senzilla sobre el llenç d'estils de degradats i patrons
  • Gradient and pattern tools for easy on-canvas editing of gradient and pattern styles
  • Herramientas de degradados y patrones para una sencilla edición de estilos de degradados y patrones en el lienzo
  • Ülemineku- ja mustritööriistad üleminekute ja mustrite stiilide hõlpsaks redigeerimiseks otse lõuendil
  • @@ -245,8 +266,9 @@
  • Vrhunska snapping objekti za vođene crtanje i uređivanje ( npr snapping na mrežu , vodič linije , staze čvorova , granični kutije , okomita pozicija , preplitanja put oblikuje ili proširenja linija i staze )
  • Capacitats òptimes d'ajust per dibuix guiat i edició (p.e. ajust a graella, línies de guia, nodes de camins, caixes contenidores, posicions ortogonals, interseccions de formes de camí o extensions de línies i camins)
  • +
  • Capacitats òptimes d'ajust per dibuix guiat i edició (p.e. ajust a graella, línies de guia, nodes de camins, caixes contenidores, posicions ortogonals, interseccions de formes de camí o extensions de línies i camins)
  • Top notch snapping facilities for guided drawing and editing (e.g. snapping to grid, guide lines, path nodes, bounding boxes, orthogonal positions, intersections of path shapes or extensions of lines and paths)
  • -
  • Capacidades de ajuste óptimas para el dibujo y la edición guiados (por ejemplo ajustar a la rejilla, líneas guías, nodos de ruta, cuadros delimitadores, posiciones ortogonales, intersecciones de formas de rutas o extensiones de líneas y rutas)
  • +
  • Capacidades de ajuste óptimas para el dibujo y la edición guiados (por ejemplo, ajustar a la rejilla, líneas guías, nodos de ruta, cuadros delimitadores, posiciones ortogonales, intersecciones de formas de rutas o extensiones de líneas y rutas)
  • Äärmiselt tulusad haardetööriistad juhtjoonte järgi joonistamiseks ja redigeerimiseks (nt tõmme alusvõrgule, juhtjooned, kompleksjoone sõlmed, piirdekastid, kompleksjoontest kujundite lõikekohad jms)
  • Huippulaatuinen kiinnitysominaisuus ohjattuun piirtämiseen ja muokkaukseen (esim. kiinnitys ruudukkoon, apuviivoihin, rajauslaatikkoon, kohtisuoraan asemaan, leikkaukseen, polkumuotoon tai viivojen ja polkujen jatkeisiin)
  • Fonctionnalités d'alignement top-niveau pour guider le dessin et l'édition (p.ex. alignement sur la grille, chemin nodal, boîtes, positions orthogonales, intersections de formes ou extensions de lignes ou de formes)
  • @@ -264,6 +286,7 @@
  • Uključuje mnoge predefinisane oblike uključujući i osnovne oblike poput zvijezda , krugova / elipsa, pravougaonika, slika
  • Inclou moltes formes predefinides bàsiques com estels, cercles/el·lipses, rectangles, imatges
  • +
  • Inclou moltes formes predefinides bàsiques com estels, cercles/el·lipses, rectangles, imatges
  • Enthält viele vordefinierte Objekte einschließlich einfacher Objekte wie Sterne, Kreise, Ellipsen, Rechtecke und Bilder
  • Includes many predefined shapes including basic shapes like stars, circle/ellipse, rectangle, image
  • Incluye muchas formas predefinidas, entre otras figuras básicas como estrellas, círculos/elipses, rectángulos, imágenes
  • @@ -277,6 +300,7 @@
  • Inclui diversas formas predefinidas, incluindo formas básicas como estrelas, círculos/elipses, retângulos e imagens
  • Obsahuje mnoho preddefinovaných tvarov vrátane základných tvarov ako hviezdy, kružnica/elipsa, obdĺžnik, obrázok
  • Innehåller många fördefinierade former inklusive grundläggande former som stjärnor, cirkel/ellips, rektangel, bild
  • +
  • Yıldız, daire/elips, dikdörtgen, resim gibi birçok öntanımlı basit şekil icerir
  • Передбачено багато готових форм, зокрема базові форми зірки, кола або еліпса, прямокутника та зображення.
  • xxIncludes many predefined shapes including basic shapes like stars, circle/ellipse, rectangle, imagexx
  • @@ -284,8 +308,9 @@
  • Umjetnički oblik tekst s podrškom za sljedeći put naglašava ( tj tekst na putu )
  • Formes de text artístic que permeten camins de contorns de seguiment (p.e. text en camins)
  • +
  • Formes de text artístic que permeten camins de contorns de seguiment (p.e. text en camins)
  • Artistic text shape with support for following path outlines (i.e. text on path)
  • -
  • Forma de texto artístico con soporte para contornos de seguimiento de rutas (es decir texto sobre una ruta)
  • +
  • Forma de texto artístico con soporte para contornos de seguimiento de rutas (es decir, texto sobre una ruta)
  • Kunstiline tekstikujund, mis toetab kompleksjooni, st võimaldab asetada teksti kompleksjoonele
  • Taiteelliset tekstimuodot polunseurantatuella
  • Formes de texte artistiques prenant par exemple en charge la création de texte le long d'une courbe
  • @@ -303,6 +328,7 @@
  • Kompleksne staze poslovanja i učinci poput Booleova postavljanje poslovanja , put ravnanje , zaokruživanje i rafiniranje kao vrtlog / za hvatanje učinci
  • Operacions complexes de camins i efectes com operacions de conjunts booleans, aplanament de camins, arrodoniment i afinació i també efectes de gir i pessic
  • +
  • Operacions complexes de camins i efectes com operacions de conjunts booleans, aplanament de camins, arrodoniment i afinació i també efectes de gir i pessic
  • Complex path operations and effects like boolean set operations, path flattening, rounding and refining as well as whirl/pinch effects
  • Operaciones de ruta complejas y efectos como operaciones booleanas con conjuntos, aplanamiento de rutas, redondeo y refinación así como también efectos de arremolinar/apretar
  • Ka keerukamad kompleksjoone operatsioonid ja efektid, näiteks tõeväärtustega operatsioonid, kompleksjoonte lamendamine, ümardamine ja täpsustamine, keerise efekt jms
  • @@ -322,12 +348,14 @@
  • Extensible pisanjem dodataka za novim alatima , oblika i modnog brenda Dockers
  • Ampliable mitjançant l'escriptura de connectors per eines noves, formes i acobladors
  • +
  • Ampliable mitjançant l'escriptura de connectors per eines noves, formes i acobladors
  • Erweiterbar durch das Schreiben von Modulen für neue Werkzeuge, Objekte und andockbaren Dialogen
  • Extensible by writing plugins for new tools, shapes and dockers
  • Extensible mediante la escritura de complementos para nuevas herramientas, formas y paneles
  • Laiendamisvõimalus pluginate kirjutamise abil uute tööriistade, kujundite ja dokkide tarbeks
  • Laajennettavissa kirjoittamalla liitännäisiä uusille työkaluille, muodoille ja telakoille
  • Extensible par l'écriture de modules pour de nouveaux outils, formes et conteneurs
  • +
  • Permite ampliar as súas funcionalidades mediante complementos de ferramentas novas, de formas e de docas.
  • Espandibile tramite la scrittura di estensioni per nuovi strumenti, forme e aree di aggancio
  • Uit te breiden dor het schrijven van plug-ins voor nieuwe hulpmiddelen, vormen en verankering
  • Rozszerzalne wtyczki zapisu dla nowych narzędzi, kształtów i dokowań
  • @@ -335,6 +363,7 @@
  • Expansível através da criação de plugins para novas ferramentas, formas e áreas acopláveis
  • Rozšíriteľný pomocou písania pluginov pre nové nástroje, tvary a dockery
  • Utökningsbart genom att skriva insticksprogram för nya verktyg, former och paneler
  • +
  • Yeni araçlar, şekiller ve dockerlar için eklenti yazarak genişletilebilir
  • Можливість розширення додатками нових інструментів, форм та панелей.
  • xxExtensible by writing plugins for new tools, shapes and dockersxx
  • diff -Nru calligra-2.9.7/karbon/data/karbon_dock.desktop calligra-2.9.11/karbon/data/karbon_dock.desktop --- calligra-2.9.7/karbon/data/karbon_dock.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/karbon/data/karbon_dock.desktop 2016-02-02 16:57:46.000000000 +0000 @@ -15,6 +15,7 @@ Comment[eu]=Karbon-erako panela Comment[fi]=Karbon-telakka Comment[fr]=Panneau pour Karbon +Comment[gl]=Doca para Karbon. Comment[hu]=Dokkoló a Karbonhoz Comment[it]=Area di aggancio per Krita Comment[ja]=Karbon のドッキングパネル diff -Nru calligra-2.9.7/karbon/plugins/flattenpath/karbonflattenpathplugin.desktop calligra-2.9.11/karbon/plugins/flattenpath/karbonflattenpathplugin.desktop --- calligra-2.9.7/karbon/plugins/flattenpath/karbonflattenpathplugin.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/karbon/plugins/flattenpath/karbonflattenpathplugin.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=Plugin de redução de caminhos do Karbon Name[sk]=Plugin vyrovnanie cesty pre Karbon Name[sv]=Karbon-insticksprogram för platta ut kontur +Name[tr]=Karbon Düzleştirilmiş Yol eklentisi Name[uk]=Додаток спрощення контурів для Karbon Name[x-test]=xxKarbon Flatten Path pluginxx X-KDE-ServiceTypes=Karbon/ViewPlugin diff -Nru calligra-2.9.7/karbon/plugins/refinepath/karbonrefinepathplugin.desktop calligra-2.9.11/karbon/plugins/refinepath/karbonrefinepathplugin.desktop --- calligra-2.9.7/karbon/plugins/refinepath/karbonrefinepathplugin.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/karbon/plugins/refinepath/karbonrefinepathplugin.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=Plugin de ajuste de caminhos do Karbon Name[sk]=Plugin zjemnenie cesty pre Karbon Name[sv]=Karbon-insticksprogram för förfina kontur +Name[tr]=Karbon Daraltılmış Yol eklentisi Name[uk]=Додаток покращення контурів для Karbon Name[x-test]=xxKarbon Refine Path pluginxx X-KDE-ServiceTypes=Karbon/ViewPlugin diff -Nru calligra-2.9.7/karbon/plugins/roundcorners/karbonroundcornersplugin.desktop calligra-2.9.11/karbon/plugins/roundcorners/karbonroundcornersplugin.desktop --- calligra-2.9.7/karbon/plugins/roundcorners/karbonroundcornersplugin.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/karbon/plugins/roundcorners/karbonroundcornersplugin.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -22,6 +22,7 @@ Name[pt_BR]=Plugin de cantos arredondados do Karbon Name[sk]=Plugin oblé rohy pre Karbon Name[sv]=Karbon-insticksprogram för runda hörn +Name[tr]=Karbon Yuvarlatılmış Köşe eklentisi Name[uk]=Додаток скруглення кутів для Karbon Name[x-test]=xxKarbon Round Corners pluginxx X-KDE-ServiceTypes=Karbon/ViewPlugin diff -Nru calligra-2.9.7/karbon/plugins/whirlpinch/karbonwhirlpinchplugin.desktop calligra-2.9.11/karbon/plugins/whirlpinch/karbonwhirlpinchplugin.desktop --- calligra-2.9.7/karbon/plugins/whirlpinch/karbonwhirlpinchplugin.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/karbon/plugins/whirlpinch/karbonwhirlpinchplugin.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -11,6 +11,7 @@ Name[et]=Karboni keerise efekti plugin Name[fi]=Karbonin pyörrenipistämisliitännäinen Name[fr]=Module externe pour Karbon de tourbillon et pincement +Name[gl]=Complemento para Karbon de xiro e picada Name[it]=Estensione Vortice e Pizzico di Karbon Name[ja]=Karbon 回転/つまみ変形プラグイン Name[kk]=Karbon-ның бұрау және қысу плагині @@ -21,6 +22,7 @@ Name[pt_BR]=Plugin de punção do Karbon Name[sk]=Plugin rozštiepený vír pre Karbon Name[sv]=Karbon-insticksprogram för virvla och kläm +Name[tr]=Karbon Burgaç eklentisi Name[uk]=Додаток вихору для Karbon Name[x-test]=xxKarbon Whirl Pinch pluginxx X-KDE-ServiceTypes=Karbon/ViewPlugin diff -Nru calligra-2.9.7/karbon/ui/KarbonDocument.cpp calligra-2.9.11/karbon/ui/KarbonDocument.cpp --- calligra-2.9.7/karbon/ui/KarbonDocument.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/karbon/ui/KarbonDocument.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -97,7 +97,7 @@ // Make sure an appropriate DTD is available in www/calligra/DTD if changing this value // static const char * CURRENT_DTD_VERSION = "1.2"; -class Q_DECL_HIDDEN KarbonDocument::Private +class KarbonDocument::Private { public: Private() diff -Nru calligra-2.9.7/karbon/ui/KarbonView.cpp calligra-2.9.11/karbon/ui/KarbonView.cpp --- calligra-2.9.7/karbon/ui/KarbonView.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/karbon/ui/KarbonView.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -152,7 +152,7 @@ #include -class Q_DECL_HIDDEN KarbonView::Private +class KarbonView::Private { public: Private(KarbonPart *part, KarbonDocument * doc) diff -Nru calligra-2.9.7/karbon/ui/widgets/KarbonPatternOptionsWidget.cpp calligra-2.9.11/karbon/ui/widgets/KarbonPatternOptionsWidget.cpp --- calligra-2.9.7/karbon/ui/widgets/KarbonPatternOptionsWidget.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/karbon/ui/widgets/KarbonPatternOptionsWidget.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -20,7 +20,7 @@ #include "KarbonPatternOptionsWidget.h" #include "ui_KarbonPatternOptionsWidget.h" -class Q_DECL_HIDDEN KarbonPatternOptionsWidget::Private +class KarbonPatternOptionsWidget::Private { public: Ui_PatternOptionsWidget widget; diff -Nru calligra-2.9.7/kexi/core/kexiblobbuffer.cpp calligra-2.9.11/kexi/core/kexiblobbuffer.cpp --- calligra-2.9.7/kexi/core/kexiblobbuffer.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/core/kexiblobbuffer.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -291,7 +291,7 @@ if (item || !d->conn) return KexiBLOBBuffer::Handle(item); //retrieve stored BLOB: - assert(d->conn); + Q_ASSERT(d->conn); KexiDB::TableSchema *blobsTable = d->conn->tableSchema("kexi__blobs"); if (!blobsTable) { //! @todo err msg @@ -362,7 +362,7 @@ void KexiBLOBBuffer::takeItem(Item *item) { - assert(item); + Q_ASSERT(item); if (item->stored) d->storedItems.take(item->id); else @@ -371,7 +371,7 @@ void KexiBLOBBuffer::insertItem(Item *item) { - assert(item); + Q_ASSERT(item); if (item->stored) d->storedItems.insert(item->id, item); else diff -Nru calligra-2.9.7/kexi/core/kexi.cpp calligra-2.9.11/kexi/core/kexi.cpp --- calligra-2.9.7/kexi/core/kexi.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/core/kexi.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -198,11 +198,12 @@ || (dynamic_cast((QObject*)dbObj) && dynamic_cast((QObject*)dbObj)->error()); } -void ObjectStatus::setStatus(const QString& message, const QString& description) +void ObjectStatus::setStatus(const QString& message, const QString& description, const QString& errorSql) { this->dbObj = 0; this->message = message; this->description = description; + this->errorSql = errorSql; } void ObjectStatus::setStatus(KexiDB::Object* dbObject, const QString& message, const QString& description) diff -Nru calligra-2.9.7/kexi/core/kexi.h calligra-2.9.11/kexi/core/kexi.h --- calligra-2.9.7/kexi/core/kexi.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/core/kexi.h 2016-02-02 19:53:13.000000000 +0000 @@ -110,7 +110,8 @@ bool error() const; - void setStatus(const QString& message, const QString& description); + void setStatus(const QString& message, const QString& description, + const QString& errorSql = QString()); //! Note: for safety, \a dbObject needs to be derived from QObject, //! otherwise it won't be assigned @@ -137,7 +138,9 @@ //! by receiving a message operator KexiDB::MessageHandler*(); - QString message, description; + QString message; + QString description; + QString errorSql; //!< Recently executed SQL, overrides information from dbObject() protected: QPointer dbObj; //! This is in fact KexiDB::Object KexiDB::MessageHandler* msgHandler; diff -Nru calligra-2.9.7/kexi/core/kexipartinfo.cpp calligra-2.9.11/kexi/core/kexipartinfo.cpp --- calligra-2.9.7/kexi/core/kexipartinfo.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/core/kexipartinfo.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -82,7 +82,7 @@ : broken(false) , isVisibleInNavigator(false) , idStoredInPartDatabase(false) - , isPropertyEditorAlwaysVisibleInDesignMode(false) + , isPropertyEditorAlwaysVisibleInDesignMode(true) { } @@ -240,10 +240,11 @@ QAction* Info::newObjectAction() { - if (!KexiMainWindowIface::global() || !KexiMainWindowIface::global()->actionCollection() - || !isVisibleInNavigator()) - { - kWarning(); + if (!isVisibleInNavigator()) { + return 0; + } + if (!KexiMainWindowIface::global() || !KexiMainWindowIface::global()->actionCollection()) { + kWarning() << "Missing Kexi's global action collection"; return 0; } QAction *act = KexiMainWindowIface::global()->actionCollection()->action(nameForCreateAction(*this)); diff -Nru calligra-2.9.7/kexi/core/kexipartinfo.h calligra-2.9.11/kexi/core/kexipartinfo.h --- calligra-2.9.7/kexi/core/kexipartinfo.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/core/kexipartinfo.h 2016-02-02 19:53:13.000000000 +0000 @@ -133,7 +133,9 @@ bool isPropertyEditorAlwaysVisibleInDesignMode() const; /** - * \return "New object" action for this part. + * \return "New object" action for this part. nullptr is returned if this part could + * not create instances (e.g. CSV import) or if global structures such as action + * collection are not (yet) set up. */ QAction* newObjectAction(); diff -Nru calligra-2.9.7/kexi/core/kexiproject.cpp calligra-2.9.11/kexi/core/kexiproject.cpp --- calligra-2.9.7/kexi/core/kexiproject.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/core/kexiproject.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -861,10 +861,12 @@ return 0; KexiWindow *window = part->openInstance(parent, item, viewMode, staticObjectArgs); if (!window) { - if (part->lastOperationStatus().error()) + if (part->lastOperationStatus().error()) { + m_sql = part->lastOperationStatus().errorSql; // pass proper SQL error setError(i18n("Opening object \"%1\" failed.", item.name()) + "
    " + part->lastOperationStatus().message, part->lastOperationStatus().description); + } return 0; } return window; diff -Nru calligra-2.9.7/kexi/core/KexiView.cpp calligra-2.9.11/kexi/core/KexiView.cpp --- calligra-2.9.7/kexi/core/KexiView.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/core/KexiView.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -149,7 +150,7 @@ btn->setText(text); btn->setIcon(a->icon()); QFont f(KGlobalSettings::toolBarFont()); - f.setPixelSize(KexiUtils::smallFont().pixelSize()); + f.setPointSizeF(KGlobalSettings::smallestReadableFont().pointSizeF()); btn->setFont(f); btn->setToolTip(a->toolTip()); btn->setWhatsThis(a->whatsThis()); @@ -240,7 +241,7 @@ if (parentWidget()->inherits("KexiWindow")) { d->topBarHWidget = new QWidget(this); - d->topBarHWidget->setFont(KexiUtils::smallFont()); + d->topBarHWidget->setFont(KGlobalSettings::smallestReadableFont()); d->mainLyr->addWidget(d->topBarHWidget); QHBoxLayout *topBarHLyr = new QHBoxLayout(d->topBarHWidget); //needed unless KexiFlowLayout properly handles contents margins topBarHLyr->setContentsMargins(0, 0, 0, 0); @@ -555,6 +556,32 @@ window()->removeView(mode); } +bool KexiView::setWidgetData(KexiDB::Cursor *cursor) +{ + return cursor->open(); +} + +bool KexiView::setData(KexiDB::Cursor *cursor) +{ + bool ok = setWidgetData(cursor); + if (!ok && cursor) { + // A simple workaround needed because the cursor will be destroyed before + // the error message is built. Kexi 3 would have cleaner solution. + // See https://bugs.kde.org/show_bug.cgi?id=356888 + QString msg = cursor->errorMsg(); + QString desc; + if (!cursor->serverErrorMsg().isEmpty()) { + if (msg.isEmpty()) { + msg = cursor->serverErrorMsg(); + } else { + desc = cursor->serverErrorMsg(); + } + } + window()->setStatus(msg, desc, cursor->recentSQLString()); + } + return ok; +} + void KexiView::setFocus() { if (!d->lastFocusedChildBeforeFocusOut.isNull()) { diff -Nru calligra-2.9.7/kexi/core/KexiView.h calligra-2.9.11/kexi/core/KexiView.h --- calligra-2.9.7/kexi/core/KexiView.h 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/core/KexiView.h 2016-02-02 19:53:13.000000000 +0000 @@ -35,6 +35,7 @@ namespace KexiDB { +class Cursor; class SchemaData; } @@ -148,6 +149,9 @@ Q_DECLARE_FLAGS(StoreNewDataOptions, StoreNewDataOption) public Q_SLOTS: + /*! Sets data. Only works for db-aware view. */ + bool setData(KexiDB::Cursor *cursor); + virtual void setFocus(); /*! Call this in your view's implementation whenever current property set @@ -176,6 +180,11 @@ void focus(bool in); protected: + /*! Sets data to the widget. Default implementation just calls KexiDB::Cursor::open(). + Used internally by setData(KexiDB::Cursor*). + @return true on success. */ + virtual bool setWidgetData(KexiDB::Cursor *cursor); + virtual bool eventFilter(QObject *o, QEvent *e); /*! called by KexiWindow::switchToViewMode() right before window is switched to new mode diff -Nru calligra-2.9.7/kexi/core/KexiWindow.cpp calligra-2.9.11/kexi/core/KexiWindow.cpp --- calligra-2.9.7/kexi/core/KexiWindow.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/core/KexiWindow.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -415,6 +415,7 @@ QMap* staticObjectArgs, bool& proposeOpeningInTextViewModeBecauseOfProblems) { + clearStatus(); KexiMainWindowIface::global()->acceptPropertySetEditing(); const bool designModePreloadedForTextModeHack = isDesignModePreloadedForTextModeHackUsed(newViewMode); diff -Nru calligra-2.9.7/kexi/formeditor/commands.cpp calligra-2.9.11/kexi/formeditor/commands.cpp --- calligra-2.9.7/kexi/formeditor/commands.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/formeditor/commands.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1585,7 +1585,8 @@ { DeleteWidgetCommand::execute(); delete d2->data; - d2->data = KFormDesigner::deepCopyOfClipboardData(); // save clipboard contents + QClipboard *cb = QApplication::clipboard(); + d2->data = KFormDesigner::deepCopyOfMimeData(cb->mimeData()); // save clipboard contents // d->domDoc has been filled in DeleteWidgetCommand ctor KFormDesigner::copyToClipboard(d->domDoc.toString()); } @@ -1594,7 +1595,7 @@ { DeleteWidgetCommand::undo(); QClipboard *cb = QApplication::clipboard(); - cb->setMimeData( d2->data ); // restore prev. clipboard contents + cb->setMimeData(KFormDesigner::deepCopyOfMimeData(d2->data)); // restore prev. clipboard contents } KFORMEDITOR_EXPORT QDebug KFormDesigner::operator<<(QDebug dbg, const CutWidgetCommand &c) diff -Nru calligra-2.9.7/kexi/formeditor/factories/kformdesigner_containers.desktop calligra-2.9.11/kexi/formeditor/factories/kformdesigner_containers.desktop --- calligra-2.9.7/kexi/formeditor/factories/kformdesigner_containers.desktop 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/formeditor/factories/kformdesigner_containers.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -6,7 +6,6 @@ Name[bs]=Kontejnerski dodaci Name[ca]=Estris contenidors Name[ca@valencia]=Estris contenidors -Name[cs]=Kontejnerové widgety Name[cy]=Celfigion Cynhwysydd Name[da]=Container-kontroller Name[de]=Container-Elemente @@ -18,7 +17,6 @@ Name[eu]=Edukitzaile-trepetak Name[fa]=عناصر محتوی Name[fi]=Säiliön osat -Name[fr]=Composants graphiques conteneurs Name[fy]=Kontainerwidgets Name[gl]=Trebellos contedores Name[he]=כלי קיבול diff -Nru calligra-2.9.7/kexi/formeditor/factories/kformdesigner_stdwidgets.desktop calligra-2.9.11/kexi/formeditor/factories/kformdesigner_stdwidgets.desktop --- calligra-2.9.7/kexi/formeditor/factories/kformdesigner_stdwidgets.desktop 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/formeditor/factories/kformdesigner_stdwidgets.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -7,7 +7,6 @@ Name[bs]=Osnovni dodaci Name[ca]=Estris estàndard Name[ca@valencia]=Estris estàndard -Name[cs]=Základní widgety Name[cy]=Celfigion Sylfaenol Name[da]=Basale kontroller Name[de]=Basis-Elemente @@ -18,8 +17,7 @@ Name[et]=Standardvidinad Name[eu]=Oinarrizko trepetak Name[fa]=عناصر پایه‌ای -Name[fi]=yleiset elementit -Name[fr]=Composants graphiques basiques +Name[fi]=Yleiset elementit Name[fy]=Basiswidgets Name[ga]=Bunghiuirléidí Name[gl]=Trebellos básicos diff -Nru calligra-2.9.7/kexi/formeditor/utils.cpp calligra-2.9.11/kexi/formeditor/utils.cpp --- calligra-2.9.7/kexi/formeditor/utils.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/formeditor/utils.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -197,14 +197,13 @@ // ---- -QMimeData *KFormDesigner::deepCopyOfClipboardData() +QMimeData *KFormDesigner::deepCopyOfMimeData(const QMimeData *data) { - //QClipboard *cb = QApplication::clipboard(); - QMimeData *data = new QMimeData(); + QMimeData *newData = new QMimeData(); foreach(const QString& format, data->formats()) { - data->setData(format, data->data(format)); + newData->setData(format, data->data(format)); } - return data; + return newData; } void KFormDesigner::copyToClipboard(const QString& xml) diff -Nru calligra-2.9.7/kexi/formeditor/utils.h calligra-2.9.11/kexi/formeditor/utils.h --- calligra-2.9.7/kexi/formeditor/utils.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/formeditor/utils.h 2016-02-02 19:53:13.000000000 +0000 @@ -122,8 +122,8 @@ //! @return mimetype for the forms XML format inline QString mimeType() { return "application/x-kexi-form"; } -//! @returns deep copy of the current clipboard contents (for all formats) -KFORMEDITOR_EXPORT QMimeData *deepCopyOfClipboardData(); +//! @return deep copy of the mime data @a data (for all formats) +KFORMEDITOR_EXPORT QMimeData *deepCopyOfMimeData(const QMimeData *data); //! Copies @a xml data to the clipboard both in the plain text format and forms XML format KFORMEDITOR_EXPORT void copyToClipboard(const QString& xml); diff -Nru calligra-2.9.7/kexi/kexi.appdata.xml calligra-2.9.11/kexi/kexi.appdata.xml --- calligra-2.9.7/kexi/kexi.appdata.xml 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexi.appdata.xml 2016-02-02 19:53:13.000000000 +0000 @@ -6,6 +6,7 @@ Kexi Kexi Kexi + Kexi Kexi Kexi Kexi @@ -14,6 +15,7 @@ Kexi Kexi Kexi + Kexi Kexi Kexi Kexi @@ -30,6 +32,7 @@ Database Creator Kreator baze podataka Generador de bases de dades + Generador de bases de dades Tvůrce databází Datenbank-Erstellung Database Creator @@ -37,6 +40,7 @@ Andmebaaside imelihtne loomine Tietokantojen luonti Créateur de base de données + Editor de bases da datos Creator de base de datos Creazione di basi di dati データベース作成 @@ -59,6 +63,7 @@

    Kexi je vizualni kreator baze podataka , dio Calligra Suite . Može se koristiti za izradu aplikacije baze podataka , umetanje i uređivanje podataka , obavljanje upita i obradu podataka. Obrasci se mogu kreirati da pružite prilagođeno sučelje vašim podacima . Svi objekti baze podataka - tablice , upiti , obrazaci , izvještaji - čuvaju se u bazi podataka , što ih čini lakim za dijeljenje podataka i dizajn.

    El Kexi és un generador visual de base de dades, part del paquet ofimàtic Calligra. Es pot utilitzar per dissenyar aplicacions de bases de dades, inserció i edició de dades, execució de consultes, i procés de dades. Es poden generar formularis per proporcionar una interfície personalitzada a les dades. Tots els objectes de les bases de dades -taules, consultes, formularis, informes- s'emmagatzemen en la base de dades, facilitant compartir les dades i el disseny.

    +

    El Kexi és un generador visual de base de dades, part del paquet ofimàtic Calligra. Es pot utilitzar per dissenyar aplicacions de bases de dades, inserció i edició de dades, execució de consultes, i procés de dades. Es poden generar formularis per proporcionar una interfície personalitzada a les dades. Tots els objectes de les bases de dades -taules, consultes, formularis, informes- s'emmagatzemen en la base de dades, facilitant compartir les dades i el disseny.

    Kexi is a visual database creator, part of the Calligra Suite. It can be used for designing database applications, inserting and editing data, performing queries, and processing data. Forms can be created to provide a custom interface to your data. All database objects - tables, queries, forms, reports - are stored in the database, making it easy to share data and design.

    Kexi es un creador visual de bases de datos, que forma parte de la suite Calligra. Se puede utilizar para diseñar aplicaciones de bases de datos, insertar y editar datos, realizar consultas y procesar datos. Se pueden crear formularios para proporcionar una interfaz personalizada para sus datos. Todos los objetos de la base de datos - tablas, consultas, formularios, informes - se almacenan en la base de datos, facilitando el intercambio de datos y diseños.

    Kexi on Calligra visuaalne andmebaaside loomise rakendus. Selle abil saab kujundada andmebaasirakendusi, sisestada ja muuta andmeid, sooritada päringuid ning töödelda andmeid. Saab luua vorme, mis kindlustada andmetele kohandatava liidese. Kõik andmebaasiobjektid - tabelid, päringud, vormid, aruanded - salvestatakse andmebaasi, mis muudab andmete ja kujunduse jagamise õige lihtsaks.

    @@ -78,6 +83,7 @@

    Features:

    Osobine:

    Característiques:

    +

    Característiques:

    Vlastnosti:

    Funktionen:

    Features:

    @@ -85,6 +91,7 @@

    Omadused:

    Ominaisuuksia:

    Fonctionnalités :

    +

    Funcionalidades:

    Characteristicas

    Funzionalità:

    機能:

    @@ -102,11 +109,13 @@
  • Full visual designers for tables, queries, forms and reports
  • Potpuni vizualni dizajneri za tablice , upite , obrasce i izvještaje
  • Dissenyadors visuals complets per taules, consultes, formularis i informes
  • +
  • Dissenyadors visuals complets per taules, consultes, formularis i informes
  • Full visual designers for tables, queries, forms and reports
  • Herramientas de diseño completamente visuales para las tablas, consultas, formularios e informes.
  • Tabelite, päringute, vormide ja aruannete täielikult visuaalne kujundamine
  • Täysin visuaalinen taulukoiden, kyselyjen, lomakkeiden ja raporttien suunnittelu
  • Conception complètement visuelle pour les tables, requêtes, formulaires et rapports
  • +
  • Deseñadores completamente visuais para táboas, consultas, formularios e informes.
  • Progettazione completamente visuale di tabelle, query e report
  • テーブル、クエリー、フォームおよびレポートをすべて視覚的にでデザインできます
  • Fullstendig visuell utforming for tabeller, spøøringer, skjemaer og rapporter
  • @@ -122,12 +131,14 @@
  • Running queries, support for parametrized queries
  • Potrebno upite , podršku za parametrizovan upite
  • Execució de consultes, implementació de consultes paramètriques
  • +
  • Execució de consultes, implementació de consultes paramètriques
  • Ausführung von Abfragen, Unterstützung für parametrisierte Abfragen
  • Running queries, support for parametrised queries
  • Ejecución de consultas, soporte de consultas parametrizadas
  • Päringute sooritamine, parameetritega päringute toetamine
  • Kyselyjen suoritus ja parametroitavien kyselyjen tuki
  • Exécution de requêtes, prise en charge des requêtes paramétrées
  • +
  • Execución de consultas, e funcionalidade de consultas parametrizadas.
  • Esecuzione di query, supporto per le query parametriche
  • クエリーの実行、パラメータ化クエリーのサポート
  • Kjøre spørriner, støtte for parametriserte spørringer
  • @@ -143,6 +154,7 @@
  • Supports SQLite, MySQL, PostgreSQL and MS SQL Server databases
  • Podržava SQLite, MySQL, PostgreSQL i MS SQL baze podataka
  • Permet bases de dades SQLite, MySQL, PostgreSQL i MS SQL Server
  • +
  • Permet bases de dades SQLite, MySQL, PostgreSQL i MS SQL Server
  • Unterstützt Datenbanken wie SQLite, MySQL, PostgreSQL und MS SQL Server
  • Supports SQLite, MySQL, PostgreSQL and MS SQL Server databases
  • Soporte de bases de datos SQLite, MySQL, PostgreSQL y MS SQL Server
  • @@ -164,6 +176,7 @@
  • The only multiplatform graphical tool importing data from MS Access databases
  • Jedini Multiplatform grafički alat koji uvozi podatke iz MS Access baze podataka
  • L'única eina gràfica multiplataforma d'importació de dades des de les bases de dades MS Access
  • +
  • L'única eina gràfica multiplataforma d'importació de dades des de les bases de dades MS Access
  • The only multiplatform graphical tool importing data from MS Access databases
  • La única herramienta gráfica multiplataforma que importa datos de bases de datos MS Access
  • Ainuke mitmel platvormil töötav graafiline rakendus MS Accessi andmebaaside andmete importimiseks
  • @@ -184,6 +197,7 @@
  • Supports query design in dedicated SQL view
  • Podržava dizajn upita u posvećenom SQL view-u
  • Permet el disseny de consultes en vistes SQL dedicades
  • +
  • Permet el disseny de consultes en vistes SQL dedicades
  • Supports query design in dedicated SQL view
  • Soporta el diseño de consultas en una vista SQL dedicada
  • Päringute kujundamise toetamine SQL-vaates
  • @@ -204,11 +218,13 @@
  • Designing and displaying relational data using combo boxes (lookup columns)
  • Izrada i prikazivanje relacijskih podataka pomoću combo kutije ( pregledavanje kolone)
  • Disseny i visualització de dades relacionals usant quadres combinats (columnes de cerca)
  • +
  • Disseny i visualització de dades relacionals usant quadres combinats (columnes de cerca)
  • Designing and displaying relational data using combo boxes (lookup columns)
  • Diseño y presentación de datos relacionales utilizando listas desplegables (columnas de búsqueda)
  • Relatsiooniliste andmete kujundamine ja kuvamine liitkastide abil (päringuveerud)
  • Relaatiotiedon suunnittelu ja näyttö yhdistelmäkenttiä käyttäen (hakusarakkeet)
  • Conception et affichage de données relationnelles à l'aide de listes déroulantes (colonnes de consultation)
  • +
  • Deseño e mostra de datos relacionais mediante caixas despregábeis (columnas de busca).
  • Progettazione e visualizzazione dei dati relazionali utilizzando caselle combinate (colonne di ricerca)
  • コンボボックスを使用した関係データのデザインと表示(参照列)
  • Utforming og visning av relasjonsdata vhja kombo-bokser (oppslagskolonner)
  • @@ -224,12 +240,14 @@
  • Direct data entry or import using CSV format
  • Unos podataka direktno ili uvoz pomoću CSV formata
  • Entrada directa de dades o importació usant el format CSV
  • +
  • Entrada directa de dades o importació usant el format CSV
  • Direkte Dateneingabe oder Import aus dem CSV-Format
  • Direct data entry or import using CSV format
  • Entrada directa de datos o importación utilizando el formato CSV
  • Otsene andmete sisestamine või importimine CSV-vormingus
  • Suora tiedon syöttö tai tuonti CSV-muodossa
  • Saisie directe de données ou import utilisant le format CSV
  • +
  • Introdución directa de datos ou importación en formato CSV.
  • Inserimento diretto dei dati o importazione utilizzando il formato CSV
  • CSV を使用したダイレクトデータの入力もしくはインポート
  • Direkte datainnskriving eller import med CSV-format
  • @@ -245,11 +263,13 @@
  • Locked down User Mode, allowing you to switch off all commands related to editing your project's design
  • Zatvoreni korisnički režim, omogućavajući vam da isključite sve naredbe koje se odnose na uređivanje dizajna vašeg projekta
  • Mode reduït d'usuari, que permet deshabilitar totes les ordres relacionades amb l'edició del disseny del projecte
  • +
  • Mode reduït d'usuari, que permet deshabilitar totes les ordes relacionades amb l'edició del disseny del projecte
  • Locked down User Mode, allowing you to switch off all commands related to editing your project's design
  • Modo de usuario limitado, que permite desactivar todas las ordenes relacionadas con la edición del diseño de su proyecto
  • Piiratud õigustega kasutajarežiim, mis võimaldab lülitada välja kõik projekti kujunduse muutmisega seotud käsud
  • Lukittu käyttäjätila, jossa voit poistaa käytöstä projektin suunnitteluun liittyvät komennot
  • Mode utilisateur verrouillé, vous permettant de désactiver toutes les commandes liées à la modification de la conception de votre projet
  • +
  • Modo de usuario bloqueado, que permite desactivar todas as ordes de edición do deseño do proxecto.
  • Modalità utente bloccata, che ti consente di disattivare tutti i comandi in grado di modificare la struttura del tuo progetto.
  • プロジェクトデザインの編集スイッチをオフにする事でユーザモードへのロックダウンが可能
  • Låst brukermodus, slik at du kan slå av alle kommandoer som gjelder endring av prosjektets utforming
  • @@ -265,12 +285,14 @@
  • Scripting using JavaScript, Python or Ruby programming languages (experimental)
  • Scripting koristeći JavaScript, Python ili Ruby programskim jezicima (eksperimentalno)
  • Crear scripts usant els llenguatges de programació JavaScript, Python o Ruby (experimental)
  • +
  • Crear scripts usant els llenguatges de programació JavaScript, Python o Ruby (experimental)
  • Unterstützung für Skripte in den Programmsprachen JavaScript, Python oder Ruby (experimentell)
  • Scripting using JavaScript, Python or Ruby programming languages (experimental)
  • Programación de scripts escritos en los lenguajes de programación JavaScript, Python o Ruby (experimental)
  • Skriptimisvõimalused JavaScripti, Pythoni või Ruby programmeerimiskeeles (eksperimentaalne)
  • Skriptaus JavaScript-, Python- tai Ruby-ohjelmointikielillä (kokeellinen)
  • Pilotage par scripts utilisant les les langages JavaScript, Python ou Ruby (expérimental)
  • +
  • Uso de scripts nas linguaxes de programación JavaScript, Python e Ruby (experimental).
  • Creazione script utilizzando i linguaggi di programmazione JavaScript, Python o Ruby (sperimentale)
  • JavaScript, Python や Ruby を使用してのスクリプティング(実験的)
  • Skripting ved bruk av JavaScript, Python eller Ruby programmeringsspråk (eksperimentelt)
  • @@ -296,12 +318,14 @@ Table View storing images Tabela View čuvanje slika Vista de taula emmagatzemant imatges + Vista de taula emmagatzemant imatges Tabellenansicht mit Bildern Table View storing images Una vista de tabla para almacenar imágenes Tabelivaates piltide salvestamise võimalus Kuvien tallennus taulukkonäkymään Affichage de tables stockant des images + Vista de táboa que almacena imaxes. Vista tabella per archiviare immagini イメージを格納するテーブルビュー Tabellvisning som lagrer bilder @@ -320,12 +344,14 @@ Form Designer Obrazac Designer Dissenyador de formularis + Dissenyador de formularis Formular-Designer Form Designer Diseñador de formularios Vormikujundaja Lomakkeiden suunnittelu Concepteur de formulaires + Deseñador de formularios Progettazione moduli フォームデザイナー Skjemautformer diff -Nru calligra-2.9.7/kexi/kexidb/alter.cpp calligra-2.9.11/kexi/kexidb/alter.cpp --- calligra-2.9.7/kexi/kexidb/alter.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/alter.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1025,6 +1025,7 @@ foreach(Field* f, *newTable->fields()) { QString renamedFieldName(fieldHash.value(f->name())); QString sourceSQLString; + const Field::Type type = f->type(); // cache: evaluating type of expressions can be expensive if (!renamedFieldName.isEmpty()) { //this field should be renamed sourceSQLString = d->conn->escapeIdentifier(renamedFieldName); @@ -1033,15 +1034,15 @@ //! @todo support expressions (eg. TODAY()) as a default value //! @todo this field can be notNull or notEmpty - check whether the default is ok //! (or do this checking also in the Table Designer?) - sourceSQLString = d->conn->driver()->valueToSQL(f->type(), f->defaultValue()); + sourceSQLString = d->conn->driver()->valueToSQL(type, f->defaultValue()); } else if (f->isNotNull()) { //this field cannot be null sourceSQLString = d->conn->driver()->valueToSQL( - f->type(), KexiDB::emptyValueForType(f->type())); + type, KexiDB::emptyValueForType(type)); } else if (f->isNotEmpty()) { //this field cannot be empty - use any nonempty value..., e.g. " " for text or 0 for number sourceSQLString = d->conn->driver()->valueToSQL( - f->type(), KexiDB::notEmptyValueForType(f->type())); + type, KexiDB::notEmptyValueForType(type)); } //! @todo support unique, validatationRule, unsigned flags... //! @todo check for foreignKey values... diff -Nru calligra-2.9.7/kexi/kexidb/drivers/mysql/kexidb_mysqldriver.desktop calligra-2.9.11/kexi/kexidb/drivers/mysql/kexidb_mysqldriver.desktop --- calligra-2.9.7/kexi/kexidb/drivers/mysql/kexidb_mysqldriver.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/mysql/kexidb_mysqldriver.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -47,7 +47,7 @@ Name[ro]=MySQL Name[ru]=MySQL Name[se]=MySQL -Name[sk]=mySQL +Name[sk]=MySQL Name[sl]=MySQL Name[sv]=MySQL Name[tg]=MySQL @@ -64,7 +64,6 @@ Comment[bs]=Kexi drajver baze podataka za pristup MYSQL serverima Comment[ca]=Controlador de bases de dades Kexi per a accedir a servidors MySQL Comment[ca@valencia]=Controlador de bases de dades Kexi per a accedir a servidors MySQL -Comment[cs]=Databázový ovladač pro přístup k serverům MySQL Comment[da]=Databasedriver til at tilgå MySQL-servere til Kexi Comment[de]=Kexi-Datenbanktreiber für Zugriff auf MySQL-Server Comment[el]=Οδηγός βάσης δεδομένων του Kexi για πρόσβαση σε εξυπηρετητές MySQL @@ -73,13 +72,12 @@ Comment[et]=Kexi andmebaasidraiver MySQL serverite kasutamiseks Comment[eu]=MySQL zerbitzariak atzitzeko Kexi datu-base kontrolatzailea Comment[fi]=Kexi-tietokanta-ajuri MySQL-palvelinten käyttämiseksi -Comment[fr]=Pilote de base de données Kexi pour accéder aux serveurs MySQL Comment[fy]=Kexi databank stjoerprogramma foar tagong ta MySQL-tsjinners Comment[gl]=Controlador de Kexi para o acceso a bases de datos MySQL. Comment[hi]=माईएसक्यूएल सर्वरों पर पहुंच के लिए केएक्साई डाटाबेस ड्राइवर Comment[hne]=माईएसक्यूएल सर्वरों मं पहुंच बर केएक्साई डाटाबेस ड्राइवर Comment[hu]=Kexi adatbázis-meghajtó a MySQL kiszolgálók eléréséhez -Comment[it]=Driver per banche dati Kexi per accedere ai server MySQL +Comment[it]=Driver per banche dati di Kexi per accedere ai server MySQL Comment[ja]=MySQL サーバにアクセスするための Kexi データベースドライバ Comment[kk]=Kexi деректер қорының MySQL серверлерге қатынау драйвері Comment[lv]=Kexi datubāzes draiveris piekļūšanai MySQL serveriem diff -Nru calligra-2.9.7/kexi/kexidb/drivers/mysql/mysqlconnection_p.cpp calligra-2.9.11/kexi/kexidb/drivers/mysql/mysqlconnection_p.cpp --- calligra-2.9.7/kexi/kexidb/drivers/mysql/mysqlconnection_p.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/mysql/mysqlconnection_p.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -44,14 +44,14 @@ , mysql_owned(true) , res(0) , lowerCaseTableNames(false) + , serverVersion(0) { } MySqlConnectionInternal::~MySqlConnectionInternal() { if (mysql_owned && mysql) { - mysql_close(mysql); - mysql = 0; + db_disconnect(); } } @@ -106,8 +106,10 @@ QByteArray pwd(data.password.isNull() ? QByteArray() : data.password.toLatin1()); mysql_real_connect(mysql, hostName.toLatin1(), data.userName.toLatin1(), pwd.constData(), 0, data.port, localSocket, 0); - if (mysql_errno(mysql) == 0) + if (mysql_errno(mysql) == 0) { + serverVersion = mysql_get_server_version(mysql); return true; + } storeResult(); //store error msg, if any - can be destroyed after disconnect() db_disconnect(); @@ -120,6 +122,7 @@ { mysql_close(mysql); mysql = 0; + serverVersion = 0; KexiDBDrvDbg; return true; } diff -Nru calligra-2.9.7/kexi/kexidb/drivers/mysql/mysqlconnection_p.h calligra-2.9.11/kexi/kexidb/drivers/mysql/mysqlconnection_p.h --- calligra-2.9.7/kexi/kexidb/drivers/mysql/mysqlconnection_p.h 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/mysql/mysqlconnection_p.h 2016-02-02 19:53:13.000000000 +0000 @@ -85,6 +85,12 @@ int res; //!< result code of last operation on server //! Get lower_case_table_name variable value so we know if there's case sensitivity supported for table and database names bool lowerCaseTableNames; + //! Server version known after successfull connection. + //! Equal to major_version*10000 + release_level*100 + sub_version + //! 0 if not known. + //! See https://dev.mysql.com/doc/refman/5.7/en/mysql-get-server-version.html + //! @todo store in Connection base class as a property or as public server info + unsigned long serverVersion; }; diff -Nru calligra-2.9.7/kexi/kexidb/drivers/mysql/mysqlcursor.cpp calligra-2.9.11/kexi/kexidb/drivers/mysql/mysqlcursor.cpp --- calligra-2.9.7/kexi/kexidb/drivers/mysql/mysqlcursor.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/mysql/mysqlcursor.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2003 Joseph Wenninger - Copyright (C) 2005 Jarosław Staniek + Copyright (C) 2005-2016 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -112,8 +112,8 @@ if (!d->mysqlrow || pos >= m_fieldCount || d->mysqlrow[pos] == 0) return QVariant(); - KexiDB::Field *f = (m_fieldsExpanded && pos < (uint)m_fieldsExpanded->count()) - ? m_fieldsExpanded->at(pos)->field : 0; + const KexiDB::Field *f = (m_visibleFieldsExpanded && pos < uint(m_visibleFieldsExpanded->count())) + ? m_visibleFieldsExpanded->at(pos)->field : 0; //! @todo js: use MYSQL_FIELD::type here! @@ -130,15 +130,15 @@ if (d->numRows == 0) return false; -//! @todo js: use MYSQL_FIELD::type here! -//! see SQLiteCursor::storeCurrentRow() + if (!m_visibleFieldsExpanded) {//simple version: without types + for (uint i = 0; i < m_fieldCount; i++) { + data[i] = QString::fromUtf8(d->mysqlrow[i], d->lengths[i]); + } + return true; + } - const uint fieldsExpandedCount = m_fieldsExpanded ? m_fieldsExpanded->count() : UINT_MAX; - const uint realCount = qMin(fieldsExpandedCount, m_fieldsToStoreInRow); - for (uint i = 0; i < realCount; i++) { - Field *f = m_fieldsExpanded ? m_fieldsExpanded->at(i)->field : 0; - if (m_fieldsExpanded && !f) - continue; + for (int i = 0; i < int(m_fieldCount); ++i) { + Field *f = m_visibleFieldsExpanded->at(i)->field; data[i] = KexiDB::cstringToVariant(d->mysqlrow[i], f, d->lengths[i]); } return true; diff -Nru calligra-2.9.7/kexi/kexidb/drivers/mysql/mysqldriver.cpp calligra-2.9.11/kexi/kexidb/drivers/mysql/mysqldriver.cpp --- calligra-2.9.7/kexi/kexidb/drivers/mysql/mysqldriver.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/mysql/mysqldriver.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -2,6 +2,7 @@ Copyright (C) 2002 Lucijan Busch Daniel Molkentin Copyright (C) 2003 Joseph Wenninger +Copyright (C) 2003-2016 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -25,6 +26,7 @@ #include #include #include +#include #include #include @@ -64,14 +66,16 @@ beh->QUOTATION_MARKS_FOR_IDENTIFIER = '`'; //! @todo add configuration option beh->TEXT_TYPE_MAX_LENGTH = 255; + beh->RANDOM_FUNCTION = "RAND"; initDriverSpecificKeywords(keywords); //predefined properties #if MYSQL_VERSION_ID < 40000 d->properties["client_library_version"] = MYSQL_SERVER_VERSION; //nothing better d->properties["default_server_encoding"] = MYSQL_CHARSET; //nothing better -#elif MYSQL_VERSION_ID < 50000 -//! @todo ??? d->properties["client_library_version"] = mysql_get_client_version(); +#else + // https://dev.mysql.com/doc/refman/5.7/en/mysql-get-client-version.html + d->properties["client_library_version"] = int(mysql_get_client_version()); #endif d->typeNames[Field::Byte] = "TINYINT"; @@ -201,5 +205,28 @@ return QByteArray(str).replace('`', '\''); } -#include "mysqldriver.moc" +QString MySqlDriver::lengthFunctionToString(KexiDB::NArgExpr *args, QuerySchemaParameterValueListIterator* params) const +{ + return KexiDB::FunctionExpr::toString(QLatin1String("CHAR_LENGTH"), this, args, params); +} +QString MySqlDriver::greatestOrLeastFunctionToString(const QString &name, + KexiDB::NArgExpr *args, + QuerySchemaParameterValueListIterator* params) const +{ + return KexiDB::FunctionExpr::greatestOrLeastFunctionUsingCaseToString(name, this, args, params); +} + +QString MySqlDriver::unicodeFunctionToString(KexiDB::NArgExpr *args, + QuerySchemaParameterValueListIterator* params) const +{ + return QString::fromLatin1("ORD(CONVERT(%1 USING UTF16))").arg(args->arg(0)->toString(this, params)); +} + +QString MySqlDriver::concatenateFunctionToString(KexiDB::BinaryExpr *args, QuerySchemaParameterValueListIterator* params) const +{ + return QString::fromLatin1("CONCAT(%1, %2)").arg(args->left()->toString(this, params)) + .arg(args->right()->toString(this, params)); +} + +#include "mysqldriver.moc" diff -Nru calligra-2.9.7/kexi/kexidb/drivers/mysql/mysqldriver.h calligra-2.9.11/kexi/kexidb/drivers/mysql/mysqldriver.h --- calligra-2.9.7/kexi/kexidb/drivers/mysql/mysqldriver.h 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/mysql/mysqldriver.h 2016-02-02 19:53:13.000000000 +0000 @@ -2,6 +2,7 @@ Copyright (C) 2002 Lucijan Busch Daniel Molkentin Copyright (C) 2003 Joseph Wenninger +Copyright (C) 2003-2016 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -46,6 +47,30 @@ //! Escape BLOB value \a array virtual QString escapeBLOB(const QByteArray& array) const; + //! Generates native (driver-specific) LENGTH() function call. + //! char_length(val) is used because length(val) in mysql returns number of bytes, + //! what is not right for multibyte (unicode) encodings. */ + virtual QString lengthFunctionToString(KexiDB::NArgExpr *args, QuerySchemaParameterValueListIterator* params) const; + + //! Generates native (driver-specific) GREATEST() and LEAST() function call. + //! Since MySQL's LEAST()/GREATEST() function ignores NULL values, it only returns NULL + //! if all the expressions evaluate to NULL. So this is used for F(v0,..,vN): + //! (CASE WHEN (v0) IS NULL OR .. OR (vN) IS NULL THEN NULL ELSE F(v0,..,vN) END) + //! where F == GREATEST or LEAST. + virtual QString greatestOrLeastFunctionToString(const QString &name, + KexiDB::NArgExpr *args, + QuerySchemaParameterValueListIterator* params) const; + + //! Generates native (driver-specific) UNICODE() function call. + //! Uses ORD(CONVERT(X USING UTF16)). + virtual QString unicodeFunctionToString(KexiDB::NArgExpr *args, + QuerySchemaParameterValueListIterator* params) const; + + //! Generates native (driver-specific) function call for concatenation of two strings. + //! Uses CONCAT(). + virtual QString concatenateFunctionToString(KexiDB::BinaryExpr *args, + QuerySchemaParameterValueListIterator* params) const; + protected: virtual QString drv_escapeIdentifier(const QString& str) const; virtual QByteArray drv_escapeIdentifier(const QByteArray& str) const; diff -Nru calligra-2.9.7/kexi/kexidb/drivers/pqxx/kexidb_pqxxsqldriver.desktop calligra-2.9.11/kexi/kexidb/drivers/pqxx/kexidb_pqxxsqldriver.desktop --- calligra-2.9.7/kexi/kexidb/drivers/pqxx/kexidb_pqxxsqldriver.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/pqxx/kexidb_pqxxsqldriver.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -63,7 +63,6 @@ Comment[bs]=Kexi drajver baze podataka za pristup PostgreSQL serverima Comment[ca]=Controlador de bases de dades Kexi per a accedir a servidors PostgreSQL Comment[ca@valencia]=Controlador de bases de dades Kexi per a accedir a servidors PostgreSQL -Comment[cs]=Databázový ovladač pro přístup k serverům PostgreSQL Comment[da]=Databasedriver til at tilgå PostgreSQL-servere til Kexi Comment[de]=Kexi-Datenbanktreiber für Zugriff auf PostgreSQL-Server Comment[el]=Οδηγός βάσης δεδομένων του Kexi για πρόσβαση σε εξυπηρετητές PostgreSQL @@ -72,13 +71,12 @@ Comment[et]=Kexi andmebaasidraiver PostgreSQL serverite kasutamiseks Comment[eu]=PostgreSQL zerbitzariak atzitzeko Kexi datu-base kontrolatzailea Comment[fi]=Kexi-tietokanta-ajuri PostgreSQL-palvelinten käyttämiseksi -Comment[fr]=Pilote de base de données Kexi pour accéder aux serveurs PostgreSQL Comment[fy]=Kexi databank stjoerprogramma foar tagong ta PostgreSQL-tsjinners Comment[gl]=Controlador de Kexi para o acceso a bases de datos PostgreSQL. Comment[hi]=पोस्टग्रेएसक्यूएल सर्वरों पर पहुँच के लिए केएक्साई डाटाबेस ड्राइवर Comment[hne]=पोस्टग्रेएसक्यूएल सर्वरों मं पहुंचे बर केएक्साई डाटाबेस ड्राइवर Comment[hu]=Kexi adatbázis-meghajtó a PostgreSQL kiszolgálók eléréséhez -Comment[it]=Driver per banche dati Kexi per accedere ai server PostgreSQL +Comment[it]=Driver per banche dati di Kexi per accedere ai server PostgreSQL Comment[ja]=PostgreSQL サーバにアクセスするための Kexi データベースドライバ Comment[kk]=Kexi деректер қорының PostgreSQL серверлерге қатынау драйвері Comment[lv]=Kexi datubāzu draiveris PostgreSQL serveriem diff -Nru calligra-2.9.7/kexi/kexidb/drivers/pqxx/pqxxconnection.cpp calligra-2.9.11/kexi/kexidb/drivers/pqxx/pqxxconnection.cpp --- calligra-2.9.7/kexi/kexidb/drivers/pqxx/pqxxconnection.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/pqxx/pqxxconnection.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,5 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2003 Adam Pigg + Copyright (C) 2003-2015 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -196,6 +197,10 @@ if (d->version) { //! @todo set version using the connection pointer when we drop libpqxx for libpq } + //! @todo call on first use of SOUNDEX(), etc.; + //! it's not possible now because we don't have connection context in FunctionExpr + drv_executeSQL("CREATE EXTENSION fuzzystrmatch"); + return true; } catch (const std::exception &e) { KexiDBDrvDbg << "exception -" << e.what(); diff -Nru calligra-2.9.7/kexi/kexidb/drivers/pqxx/pqxxcursor.cpp calligra-2.9.11/kexi/kexidb/drivers/pqxx/pqxxcursor.cpp --- calligra-2.9.7/kexi/kexidb/drivers/pqxx/pqxxcursor.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/pqxx/pqxxcursor.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -174,21 +174,23 @@ return QVariant(); } - KexiDB::Field *f = (m_fieldsExpanded && pos < qMin((uint)m_fieldsExpanded->count(), m_fieldCount)) - ? m_fieldsExpanded->at(pos)->field : 0; - // KexiDBDrvDbg << pos; //from most to least frequently used types: + const Field *f = (m_visibleFieldsExpanded && pos < uint(m_visibleFieldsExpanded->count())) + ? m_visibleFieldsExpanded->at(pos)->field : 0; if (f) { //We probably have a schema type query so can use kexi to determin the row type - if ((f->isIntegerType()) || (/*ROWID*/!f && m_containsROWIDInfo && pos == m_fieldCount)) { + const Field::Type type = f->type(); // cache: evaluating type of expressions can be expensive + if (type == Field::Null || type == Field::InvalidType) { + return QVariant(); + } else if (Field::isIntegerType(type) || (/*ROWID*/!f && m_containsROWIDInfo && pos == m_fieldCount)) { return (*m_res)[at()][pos].as(int()); - } else if (f->isTextType()) { + } else if (Field::isTextType(type)) { return QString::fromUtf8((*m_res)[at()][pos].c_str()); //utf8? - } else if (f->isFPNumericType()) { + } else if (Field::isFPNumericType(type)) { return (*m_res)[at()][pos].as(double()); - } else if (f->type() == Field::Boolean) { + } else if (type == Field::Boolean) { return QString((*m_res)[at()][pos].c_str()).toLower() == "t" ? QVariant(true) : QVariant(false); - } else if (f->typeGroup() == Field::BLOBGroup) { + } else if (Field::typeGroup(type) == Field::BLOBGroup) { // pqxx::result::field r = (*m_res)[at()][pos]; // kDebug() << r.name() << ", " << r.c_str() << ", " << r.type() << ", " << r.size(); return ::pgsqlByteaToByteArray((*m_res)[at()][pos]); diff -Nru calligra-2.9.7/kexi/kexidb/drivers/pqxx/pqxxdriver.cpp calligra-2.9.11/kexi/kexidb/drivers/pqxx/pqxxdriver.cpp --- calligra-2.9.7/kexi/kexidb/drivers/pqxx/pqxxdriver.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/pqxx/pqxxdriver.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,5 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2003 Adam Pigg + Copyright (C) 2003-2015 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -21,6 +22,7 @@ #include #include #include +#include #include "pqxxdriver.h" #include "pqxxconnection.h" @@ -164,7 +166,7 @@ // QString pqxxSqlDriver::escapeBLOB(const QByteArray& array) const { - return KexiDB::escapeBLOB(array, KexiDB::BLOBEscapeOctal); + return KexiDB::escapeBLOB(array, KexiDB::BLOBEscapeByteaHex); } QString pqxxSqlDriver::valueToSQL(uint ftype, const QVariant& v) const @@ -178,4 +180,36 @@ return Driver::valueToSQL(ftype, v); } +QString pqxxSqlDriver::hexFunctionToString(KexiDB::NArgExpr *args, QuerySchemaParameterValueListIterator* params) const +{ + return QString::fromLatin1("UPPER(ENCODE(%1, 'hex'))").arg(args->arg(0)->toString(this, params)); +} + +QString pqxxSqlDriver::ifnullFunctionToString(KexiDB::NArgExpr *args, QuerySchemaParameterValueListIterator* params) const +{ + return KexiDB::FunctionExpr::toString(QLatin1String("COALESCE"), this, args, params); +} + +QString pqxxSqlDriver::lengthFunctionToString(KexiDB::NArgExpr *args, QuerySchemaParameterValueListIterator* params) const +{ + KexiDB::BaseExpr *arg = args->arg(0); + if (arg->type() == KexiDB::Field::BLOB) { + return KexiDB::FunctionExpr::toString(QLatin1String("OCTET_LENGTH"), this, args, params); + } + return Driver::lengthFunctionToString(args, params); // default +} + +QString pqxxSqlDriver::greatestOrLeastFunctionToString(const QString &name, + KexiDB::NArgExpr *args, + QuerySchemaParameterValueListIterator* params) const +{ + return KexiDB::FunctionExpr::greatestOrLeastFunctionUsingCaseToString(name, this, args, params); +} + +QString pqxxSqlDriver::unicodeFunctionToString(KexiDB::NArgExpr *args, + QuerySchemaParameterValueListIterator* params) const +{ + return QString::fromLatin1("ASCII(%1)").arg(args->arg(0)->toString(this, params)); +} + #include "pqxxdriver.moc" diff -Nru calligra-2.9.7/kexi/kexidb/drivers/pqxx/pqxxdriver.h calligra-2.9.11/kexi/kexidb/drivers/pqxx/pqxxdriver.h --- calligra-2.9.7/kexi/kexidb/drivers/pqxx/pqxxdriver.h 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/pqxx/pqxxdriver.h 2016-02-02 19:53:13.000000000 +0000 @@ -1,5 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2003 Adam Pigg + Copyright (C) 2003-2015 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -53,6 +54,34 @@ Reimplemented for boolean type only to use SQL compliant TRUE or FALSE */ virtual QString valueToSQL(uint ftype, const QVariant& v) const; + //! Generates native (driver-specific) HEX() function call. + //! Uses UPPER(ENCODE(val, 'hex')). + //! See http://www.postgresql.org/docs/9.3/static/functions-string.html#FUNCTIONS-STRING-OTHER */ + virtual QString hexFunctionToString(KexiDB::NArgExpr *args, QuerySchemaParameterValueListIterator* params) const; + + //! Generates native (driver-specific) IFNULL() function call. + //! Uses COALESCE(). + virtual QString ifnullFunctionToString(KexiDB::NArgExpr *args, QuerySchemaParameterValueListIterator* params) const; + + //! Generates native (driver-specific) LENGTH() function call. + //! For text types default LENGTH(val) is used, for BLOBs OCTET_LENGTH(val) is used because + //! LENGTH(val) for BLOB returns number of bits. + virtual QString lengthFunctionToString(KexiDB::NArgExpr *args, QuerySchemaParameterValueListIterator* params) const; + + //! Generates native (driver-specific) GREATEST() and LEAST() function calls. + //! Since PostgreSQL's LEAST()/GREATEST() function ignores NULL values, it only returns NULL + //! if all the expressions evaluate to NULL. So this is used for F(v0,..,vN): + //! (CASE WHEN (v0) IS NULL OR .. OR (vN) IS NULL THEN NULL ELSE F(v0,..,vN) END) + //! where F == GREATEST or LEAST. + virtual QString greatestOrLeastFunctionToString(const QString &name, + KexiDB::NArgExpr *args, + QuerySchemaParameterValueListIterator* params) const; + + //! Generates native (driver-specific) UNICODE() function call. + //! Uses ASCII(X). + virtual QString unicodeFunctionToString(KexiDB::NArgExpr *args, + QuerySchemaParameterValueListIterator* params) const; + protected: virtual QString drv_escapeIdentifier(const QString& str) const; virtual QByteArray drv_escapeIdentifier(const QByteArray& str) const; diff -Nru calligra-2.9.7/kexi/kexidb/drivers/sybase/kexidb_sybasedriver.desktop calligra-2.9.11/kexi/kexidb/drivers/sybase/kexidb_sybasedriver.desktop --- calligra-2.9.7/kexi/kexidb/drivers/sybase/kexidb_sybasedriver.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/sybase/kexidb_sybasedriver.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -52,7 +52,6 @@ Comment[bs]=Kexi drajver baze podataka za pristup Sybase serverima Comment[ca]=Controlador de bases de dades Kexi per a accedir a servidors Sybase Comment[ca@valencia]=Controlador de bases de dades Kexi per a accedir a servidors Sybase -Comment[cs]=Databázový ovladač pro přístup k serverům Sybase Comment[da]=Databasedriver til at tilgå Sybase-servere til Kexi Comment[de]=Kexi-Datenbanktreiber für Zugriff auf Sybase-Server Comment[el]=Οδηγός βάσης δεδομένων του Kexi για πρόσβαση σε εξυπηρετητές Sybase @@ -61,14 +60,13 @@ Comment[et]=Kexi andmebaasidraiver Sybase serverite kasutamiseks Comment[eu]=Sybase zerbitzariak atzitzeko Kexi datu-base kontrolatzailea Comment[fi]=Kexi-tietokanta-ajuri Sybase-palvelinten käyttämiseksi -Comment[fr]=Pilote de base de données Kexi pour accéder aux serveurs Sybase Comment[fy]=Kexi databank stjoerprogramma foar tagong ta Sybase-tsjinners Comment[ga]=Tiománaí bunachair sonraí Kexi lenar féidir freastalaithe Sybase a rochtain Comment[gl]=Controlador de Kexi para o acceso a bases de datos Sybase. Comment[hi]=साइबेस सर्वरों पर पहुँच के लिए केएक्जाई डाटाबेस ड्राइवर Comment[hne]=साइबेस सर्वरों मं पहुंचे बर केएक्जाई डाटाबेस ड्राइवर Comment[hu]=Kexi adatbázis-meghajtó a Sybase kiszolgálók eléréséhez -Comment[it]=Driver per banche dati Kexi per accedere ai server Sybase +Comment[it]=Driver per banche dati di Kexi per accedere ai server Sybase Comment[ja]=Sybase サーバにアクセスするための Kexi データベースドライバ Comment[kk]=Kexi деректер қорының Sybase серверлерге қатынау драйвері Comment[lv]=Kexi datubāzu draiveris Sybase serveriem diff -Nru calligra-2.9.7/kexi/kexidb/drivers/sybase/sybasecursor.cpp calligra-2.9.11/kexi/kexidb/drivers/sybase/sybasecursor.cpp --- calligra-2.9.7/kexi/kexidb/drivers/sybase/sybasecursor.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/sybase/sybasecursor.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -147,8 +147,8 @@ if (!d->dbProcess || pos >= m_fieldCount) return QVariant(); - KexiDB::Field *f = (m_fieldsExpanded && pos < uint(m_fieldsExpanded->count())) - ? m_fieldsExpanded->at(pos)->field : 0; + KexiDB::Field *f = (m_visibleFieldsExpanded && pos < uint(m_visibleFieldsExpanded->count())) + ? m_visibleFieldsExpanded->at(pos)->field : 0; // db-library indexes its columns from 1 pos = pos + 1; @@ -182,11 +182,11 @@ // if (d->numRows<=0) // return false; - const uint fieldsExpandedCount = m_fieldsExpanded ? m_fieldsExpanded->count() : UINT_MAX; + const uint fieldsExpandedCount = m_visibleFieldsExpanded ? m_visibleFieldsExpanded->count() : UINT_MAX; const uint realCount = qMin(fieldsExpandedCount, m_fieldsToStoreInRow); for (uint i = 0; i < realCount; i++) { - Field *f = m_fieldsExpanded ? m_fieldsExpanded->at(i)->field : 0; - if (m_fieldsExpanded && !f) + Field *f = m_visibleFieldsExpanded ? m_visibleFieldsExpanded->at(i)->field : 0; + if (m_visibleFieldsExpanded && !f) continue; long int columnDataLength = dbdatlen(d->dbProcess, i + 1); diff -Nru calligra-2.9.7/kexi/kexidb/drivers/xbase/kexidb_xbasedriver.desktop calligra-2.9.11/kexi/kexidb/drivers/xbase/kexidb_xbasedriver.desktop --- calligra-2.9.7/kexi/kexidb/drivers/xbase/kexidb_xbasedriver.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/xbase/kexidb_xbasedriver.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -48,7 +48,6 @@ Comment[bs]=Kexi drajver baze podataka za pristup xBase serverima Comment[ca]=Controlador de bases de dades Kexi per a accedir a fitxers de bases de dades xBase Comment[ca@valencia]=Controlador de bases de dades Kexi per a accedir a fitxers de bases de dades xBase -Comment[cs]=Databázový ovladač pro přístup k databázovým souborům xBase Comment[da]=Databasedriver til at tilgå xBase-servere til Kexi Comment[de]=Kexi-Datenbanktreiber für Zugriff auf xBase-Datenbankdateien Comment[el]=Οδηγός βάσης δεδομένων του Kexi για πρόσβαση σε αρχεία βάσεων xBase @@ -57,7 +56,6 @@ Comment[et]=Kexi andmebaasidraiver xBase andmebaasifailide kasutamiseks Comment[eu]=xBase zerbitzariak atzitzeko Kexi datu-base kontrolatzailea Comment[fi]=Kexi-tietokanta-ajuri xBase-palvelinten käyttämiseksi -Comment[fr]=Pilote de base de données Kexi pour accéder aux fichiers xBase Comment[ga]=Tiománaí bunachair sonraí Kexi lenar féidir comhaid bhunachar sonraí xBase a rochtain Comment[gl]=Controlador de Kexi para o acceso a ficheiros de bases de datos xBase. Comment[hne]=एक्सबेस सर्वर मं पहुंचे बर केएक्जाई डाटाबेस ड्राइवर diff -Nru calligra-2.9.7/kexi/kexidb/drivers/xbase/xbaseexport.cpp calligra-2.9.11/kexi/kexidb/drivers/xbase/xbaseexport.cpp --- calligra-2.9.7/kexi/kexidb/drivers/xbase/xbaseexport.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/drivers/xbase/xbaseexport.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -152,13 +152,15 @@ return true; } -int xBaseExportPrivate::fieldLength(KexiDB::Field* f ) { - if ( f->type() == KexiDB::Field::Text ) { +int xBaseExportPrivate::fieldLength(KexiDB::Field* f) +{ + const Field::Type t = f->type(); // cache: evaluating type of expressions can be expensive + if (KexiDB::Field::isTextType(t)) { return f->maxLength(); } // return the max possible (string)length of the types // see http://linux.techass.com/projects/xdb/xbasedocs/xbase_c3.html - switch(type( f->type())) { + switch(type(t)) { case XB_CHAR_FLD: return 254; case XB_LOGICAL_FLD: diff -Nru calligra-2.9.7/kexi/kexidb/fieldvalidator.cpp calligra-2.9.11/kexi/kexidb/fieldvalidator.cpp --- calligra-2.9.7/kexi/kexidb/fieldvalidator.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexidb/fieldvalidator.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -32,8 +32,8 @@ //! @todo merge this code with KexiTableEdit code! //! @todo set maximum length validator //! @todo handle input mask (via QLineEdit::setInputMask() - const Field::Type t = field.type(); - if (field.isIntegerType()) { + const Field::Type t = field.type(); // cache: evaluating type of expressions can be expensive + if (Field::isIntegerType(t)) { QValidator *validator = 0; const bool u = field.isUnsigned(); int bottom = 0, top = 0; @@ -54,7 +54,7 @@ if (!validator) validator = new KIntValidator(bottom, top, 0); //the default addSubvalidator(validator); - } else if (field.isFPNumericType()) { + } else if (Field::isFPNumericType(t)) { QValidator *validator; if (t == Field::Float) { if (field.isUnsigned()) //ok? diff -Nru calligra-2.9.7/kexi/kexi.desktop calligra-2.9.11/kexi/kexi.desktop --- calligra-2.9.7/kexi/kexi.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexi.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -68,8 +68,7 @@ GenericName[br]=Aozer ar stlennvon GenericName[bs]=Kreator baze podataka GenericName[ca]=Generador de bases de dades -GenericName[ca@valencia]=Creador de bases de dades -GenericName[cs]=Tvůrce databází +GenericName[ca@valencia]=Generador de bases de dades GenericName[cy]=Creuydd Cronfa Ddata GenericName[da]=Opretter af databaser GenericName[de]=Datenbank-Erstellung @@ -81,7 +80,6 @@ GenericName[eu]=Datu-base sortzailea GenericName[fa]=ایجادکننده دادگان GenericName[fi]=Tietokantojen luonti -GenericName[fr]=Créateur de base de données GenericName[fy]=Databank oanmeitsje GenericName[ga]=Cruthaitheoir Bunachar Sonraí GenericName[gl]=Editor de bases da datos @@ -125,7 +123,6 @@ Comment[bs]=Razvijte stone programe za baze podataka Comment[ca]=Aplicacions de desenvolupament de bases de dades d'escriptori Comment[ca@valencia]=Aplicacions de desenvolupament de bases de dades d'escriptori -Comment[cs]=Vyvíjejte databázové grafické aplikace Comment[da]=Udvikl databaseprogrammer for desktoppen Comment[de]=Desktop-Datenbankanwendungen entwickeln Comment[el]=Ανάπτυξη εφαρμογών βάσεων δεδομένων @@ -136,7 +133,6 @@ Comment[eu]=Garatu mahaigaineko datu-base aplikazioak Comment[fa]=توسعه کاربردهای دادگان رومیزی Comment[fi]=Kehitä tietokantasovelluksia -Comment[fr]=Développer des applications de bases de données de bureau Comment[fy]=Untwikkel databankapplikaasjes Comment[ga]=Forbair feidhmchláir bhunachair sonraí don deasc Comment[gl]=Desenvolva aplicativos de escritorio empregando bases de dados. diff -Nru calligra-2.9.7/kexi/kexiutils/completer/KexiCompleter.cpp calligra-2.9.11/kexi/kexiutils/completer/KexiCompleter.cpp --- calligra-2.9.7/kexi/kexiutils/completer/KexiCompleter.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/kexiutils/completer/KexiCompleter.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -148,7 +148,6 @@ #include #include #include -#include #include #include #include @@ -929,26 +928,27 @@ showPopup(popupRect); } -void KexiCompleterPrivate::showPopup(const QRect& rect) +static void adjustPopupGeometry(QWidget *popupWidget, QWidget *widget, int widthHint, + int heightHint, const QRect ¤tRect) { const QRect screen = QApplication::desktop()->availableGeometry(widget); - Qt::LayoutDirection dir = widget->layoutDirection(); + const Qt::LayoutDirection dir = widget->layoutDirection(); QPoint pos; int rh, w; - int h = (popup->sizeHintForRow(0) * qMin(maxVisibleItems, popup->model()->rowCount()) + 3) + 3; - QScrollBar *hsb = popup->horizontalScrollBar(); - if (hsb && hsb->isVisible()) - h += popup->horizontalScrollBar()->sizeHint().height(); + int h = heightHint; - if (rect.isValid()) { - rh = rect.height(); - w = rect.width(); - pos = widget->mapToGlobal(dir == Qt::RightToLeft ? rect.bottomRight() : rect.bottomLeft()); + if (currentRect.isValid()) { + rh = currentRect.height(); + w = currentRect.width(); + pos = widget->mapToGlobal(dir == Qt::RightToLeft ? currentRect.bottomRight() : currentRect.bottomLeft()); } else { rh = widget->height(); pos = widget->mapToGlobal(QPoint(0, widget->height() - 2)); w = widget->width(); } + if (widthHint > w) { + w = widthHint; + } if (w > screen.width()) w = screen.width(); @@ -959,7 +959,7 @@ int top = pos.y() - rh - screen.top() + 2; int bottom = screen.bottom() - pos.y(); - h = qMax(h, popup->minimumHeight()); + h = qMax(h, popupWidget->minimumHeight()); if (h > bottom) { h = qMin(qMax(top, bottom), h); @@ -967,8 +967,22 @@ pos.setY(pos.y() - h - rh + 2); } - popup->setGeometry(pos.x(), pos.y(), w, h); + popupWidget->setGeometry(pos.x(), pos.y(), w, h); +} +void KexiCompleterPrivate::showPopup(const QRect& rect) +{ + int widthHint = popup->sizeHintForColumn(0); + QScrollBar *vsb = popup->verticalScrollBar(); + if (vsb) { + widthHint += vsb->sizeHint().width() + 3 + 3; + } + int heightHint = (popup->sizeHintForRow(0) * qMin(maxVisibleItems, popup->model()->rowCount()) + 3) + 3; + QScrollBar *hsb = popup->horizontalScrollBar(); + if (hsb && hsb->isVisible()) { + heightHint += hsb->sizeHint().height(); + } + adjustPopupGeometry(popup, widget, widthHint, heightHint, rect); if (!popup->isVisible()) popup->show(); } diff -Nru calligra-2.9.7/kexi/kexiutils/debuggui.cpp calligra-2.9.11/kexi/kexiutils/debuggui.cpp --- calligra-2.9.7/kexi/kexiutils/debuggui.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/kexiutils/debuggui.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -31,6 +31,7 @@ #include #include #include +#include #include static DebugWindow* debugWindow = 0; @@ -51,7 +52,7 @@ if (!kexiDBDebugPage) { QWidget *page = new QWidget(debugWindowTab); QVBoxLayout *vbox = new QVBoxLayout(page); - QHBoxLayout *hbox = new QHBoxLayout(page); + QHBoxLayout *hbox = new QHBoxLayout; vbox->addLayout(hbox); hbox->addStretch(1); KPushButton *btn_copy = new KPushButton(page); @@ -62,7 +63,7 @@ kexiDBDebugPage = new KexiDBDebugTreeWidget(page); kexiDBDebugPage->setObjectName("kexiDbDebugPage"); - kexiDBDebugPage->setFont(KexiUtils::smallFont(kexiDBDebugPage)); + kexiDBDebugPage->setFont(KGlobalSettings::smallestReadableFont()); QObject::connect(btn_copy, SIGNAL(clicked()), kexiDBDebugPage, SLOT(copy())); QObject::connect(btn_clear, SIGNAL(clicked()), kexiDBDebugPage, SLOT(clear())); vbox->addWidget(kexiDBDebugPage); @@ -115,7 +116,7 @@ hbox->addWidget(btn_sim); kexiAlterTableActionDebugPage = new QTreeWidget(page); - kexiAlterTableActionDebugPage->setFont(KexiUtils::smallFont(kexiAlterTableActionDebugPage)); + kexiAlterTableActionDebugPage->setFont(KGlobalSettings::smallestReadableFont()); kexiAlterTableActionDebugPage->setObjectName("kexiAlterTableActionDebugPage"); QObject::connect(btn_clear, SIGNAL(clicked()), kexiAlterTableActionDebugPage, SLOT(clear())); vbox->addWidget(kexiAlterTableActionDebugPage); diff -Nru calligra-2.9.7/kexi/kexiutils/SmallToolButton.cpp calligra-2.9.11/kexi/kexiutils/SmallToolButton.cpp --- calligra-2.9.7/kexi/kexiutils/SmallToolButton.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/kexiutils/SmallToolButton.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -112,7 +112,7 @@ { setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); QFont f(KGlobalSettings::toolBarFont()); - f.setPixelSize(KexiUtils::smallFont().pixelSize()); + f.setPointSizeF(KGlobalSettings::smallestReadableFont().pointSizeF()); setFont(f); setAutoRaise(true); QToolButton::setToolButtonStyle(Qt::ToolButtonTextBesideIcon); diff -Nru calligra-2.9.7/kexi/kexiutils/utils.cpp calligra-2.9.11/kexi/kexiutils/utils.cpp --- calligra-2.9.7/kexi/kexiutils/utils.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexiutils/utils.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -563,23 +563,6 @@ //--------- -K_GLOBAL_STATIC(QFont, _smallFont) - -QFont KexiUtils::smallFont(QWidget *init) -{ - if (init) { - *_smallFont = init->font(); - const int wdth = KGlobalSettings::desktopGeometry(init).width(); - int size = 10 + qMax(0, wdth - 1100) / 100; - size = qMin(init->fontInfo().pixelSize(), size); - size = qMax(KGlobalSettings::smallestReadableFont().pixelSize(), size); - _smallFont->setPixelSize(size); - } - return *_smallFont; -} - -//--------------------- - KTextEditorFrame::KTextEditorFrame(QWidget * parent, Qt::WindowFlags f) : QFrame(parent, f) { diff -Nru calligra-2.9.7/kexi/kexiutils/utils.h calligra-2.9.11/kexi/kexiutils/utils.h --- calligra-2.9.7/kexi/kexiutils/utils.h 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/kexiutils/utils.h 2016-02-02 19:53:13.000000000 +0000 @@ -199,12 +199,6 @@ but returns a list of filter strings. */ KEXIUTILS_EXPORT QString fileDialogFilterStrings(const QStringList& mimeStrings, bool kdeFormat); -/*! A global setting for minimal readable font. - \a init is a widget that should be passed if no qApp->mainWidget() is available yet. - The size of font is not smaller than the one returned by - KGlobalSettings::smallestReadableFont(). */ -KEXIUTILS_EXPORT QFont smallFont(QWidget *init = 0); - /*! \return a color being a result of blending \a c1 with \a c2 with \a factor1 and \a factor1 factors: (c1*factor1+c2*factor2)/(factor1+factor2). */ KEXIUTILS_EXPORT QColor blendedColors(const QColor& c1, const QColor& c2, int factor1 = 1, int factor2 = 1); diff -Nru calligra-2.9.7/kexi/main/KexiMainWindow.cpp calligra-2.9.11/kexi/main/KexiMainWindow.cpp --- calligra-2.9.7/kexi/main/KexiMainWindow.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/main/KexiMainWindow.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2003 Lucijan Busch - Copyright (C) 2003-2014 Jarosław Staniek + Copyright (C) 2003-2015 Jarosław Staniek This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -419,8 +419,6 @@ setupMainWidget(); updateAppCaption(); - (void)KexiUtils::smallFont(this/*init*/); - if (!d->userMode) { setupContextHelp(); setupPropertyEditor(); @@ -1939,10 +1937,16 @@ //! @todo REMOVE? d->propEditor->installEventFilter(this); KConfigGroup propertyEditorGroup(d->config->group("PropertyEditor")); - int size = propertyEditorGroup.readEntry("FontSize", -1); - QFont f(KexiUtils::smallFont()); - if (size > 0) - f.setPixelSize(size); + QFont f(KGlobalSettings::smallestReadableFont()); + const int pointSize = propertyEditorGroup.readEntry("FontPointSize", -1); // points are more accurate + if (pointSize > 0) { + f.setPointSize(pointSize); + } else { + const int pixelSize = propertyEditorGroup.readEntry("FontSize", -1); // compatibility with Kexi 2.x + if (pixelSize > 0) { + f.setPixelSize(pixelSize); + } + } d->propEditorTabWidget->setFont(f); d->enable_slotPropertyEditorVisibilityChanged = false; @@ -2961,6 +2965,7 @@ hideDesignTab(previousItemId, QString()); d->removeWindow(window_id); + d->setWindowContainerExistsFor(window->partItem()->identifier(), false); QWidget *windowContainer = window->parentWidget(); d->mainWidget->tabWidget()->removeTab( d->mainWidget->tabWidget()->indexOf(windowContainer)); @@ -3118,6 +3123,10 @@ activateWindow(*window); alreadyOpened = true; } else { + if (d->windowContainerExistsFor(item->identifier())) { + // window not yet present but window container exists: return 0 and wait + return 0; + } KexiPart::Part *part = Kexi::partManager().partForClass(item->partClass()); d->updatePropEditorVisibility(viewMode, part ? part->info() : 0); //update tabs before opening @@ -3127,6 +3136,7 @@ // open new tab earlier windowContainer = new KexiWindowContainer(d->mainWidget->tabWidget()); + d->setWindowContainerExistsFor(item->identifier(), true); const int tabIndex = d->mainWidget->tabWidget()->addTab( windowContainer, KIcon(part ? part->info()->itemIconName() : QString()), @@ -3163,6 +3173,7 @@ #ifndef KEXI_NO_PENDING_DIALOGS d->removePendingWindow(item->identifier()); #endif + d->setWindowContainerExistsFor(item->identifier(), false); d->mainWidget->tabWidget()->removeTab( d->mainWidget->tabWidget()->indexOf(windowContainer)); delete windowContainer; diff -Nru calligra-2.9.7/kexi/main/KexiMainWindow.h calligra-2.9.11/kexi/main/KexiMainWindow.h --- calligra-2.9.7/kexi/main/KexiMainWindow.h 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/main/KexiMainWindow.h 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2003 Lucijan Busch - Copyright (C) 2003-2014 Jarosław Staniek + Copyright (C) 2003-2015 Jarosław Staniek This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -203,7 +203,11 @@ (only works when part for this item is of type KexiPart::StaticPart). \a openingCancelled is set to true is opening has been cancelled. \a errorMessage, if not 0, points to a string that can be set to error message - if one encountered. */ + if one encountered. + @c nullptr can be returned if the KexiWindow object for @a item is not yet fully constructed + but openObject() has been quickly called again for the same @a item. This can happen if user + clicked multiple times on the same Project navigator's item. In this case @a openingCancelled + is not set; the caller should not display error message but the opening should be silently abandoned. */ virtual KexiWindow* openObject(KexiPart::Item *item, Kexi::ViewMode viewMode, bool &openingCancelled, QMap* staticObjectArgs = 0, QString* errorMessage = 0); diff -Nru calligra-2.9.7/kexi/main/KexiMainWindow_p.h calligra-2.9.11/kexi/main/KexiMainWindow_p.h --- calligra-2.9.7/kexi/main/KexiMainWindow_p.h 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/main/KexiMainWindow_p.h 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2003 Lucijan Busch - Copyright (C) 2003-2014 Jarosław Staniek + Copyright (C) 2003-2015 Jarosław Staniek This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -374,9 +374,11 @@ m_menuWidget->addSeparator(); m_menuWidget->addAction(ac->action("project_new")); m_menuWidget->addAction(ac->action("project_import_export_send")); +#ifdef KEXI_SHOW_UNIMPLEMENTED m_menuWidget->addAction(ac->action("project_properties")); //! @todo project information m_menuWidget->addAction(ac->action("settings")); +#endif m_menuWidget->addSeparator(); m_menuWidget->addAction(ac->action("quit")); hlyr->addWidget(m_menuWidget); @@ -830,7 +832,6 @@ const bool userMode = KexiMainWindowIface::global()->userMode(); KToolBar *tbar; - KexiUtils::smallFont(this/*init*/); slotSettingsChanged(KGlobalSettings::FontChanged); connect(KGlobalSettings::self(), SIGNAL(settingsChanged(int)), this, SLOT(slotSettingsChanged(int))); @@ -1542,6 +1543,19 @@ #endif } + bool windowContainerExistsFor(int identifier) { + return windowContainers.contains(identifier); + } + + void setWindowContainerExistsFor(int identifier, bool set) { + if (set) { + windowContainers.insert(identifier); + } + else { + windowContainers.remove(identifier); + } + } + #ifndef KEXI_NO_PENDING_DIALOGS void addItemToPendingWindows(const KexiPart::Item* item, PendingJobType jobType) { //! @todo (threads) QMutexLocker dialogsLocker( &dialogsMutex ); @@ -1941,6 +1955,10 @@ private: //! @todo move to KexiProject KexiWindowDict windows; + //! A set of item identifiers for whose there are KexiWindowContainer instances already. + //! This lets to verify that KexiWindow is about to be constructed and opened so multiple + //! opening can be avoided. + QSet windowContainers; #ifndef KEXI_NO_PROCESS_EVENTS QHash pendingWindows; //!< part item identifiers for windows whoose opening has been started //! @todo QMutex dialogsMutex; //!< used for locking windows and pendingWindows dicts diff -Nru calligra-2.9.7/kexi/main/KexiSearchLineEdit.cpp calligra-2.9.11/kexi/main/KexiSearchLineEdit.cpp --- calligra-2.9.7/kexi/main/KexiSearchLineEdit.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/main/KexiSearchLineEdit.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,5 +1,5 @@ /* This file is part of the KDE project - Copyright (C) 2011-2015 Jarosław Staniek + Copyright (C) 2011-2016 Jarosław Staniek Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). This program is free software; you can redistribute it and/or @@ -199,6 +199,7 @@ } KexiSearchLineEditCompleter *completer; + QTreeView *popupTreeView; KexiSearchLineEditCompleterPopupModel *model; KexiSearchLineEditPopupItemDelegate *delegate; QPointer previouslyFocusedWidget; @@ -237,6 +238,17 @@ { } + //! Implemented to improve width hint + QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const + { + QSize size(QStyledItemDelegate::sizeHint(option, index)); + QStyleOptionViewItemV4 v4 = option; + QStyledItemDelegate::initStyleOption(&v4, index); + const QSize s = v4.widget->style()->sizeFromContents(QStyle::CT_ItemViewItem, &v4, size, v4.widget); + size.setWidth(s.width()); + return size; + } + virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { @@ -352,10 +364,10 @@ : KLineEdit(parent), d(new Private(this)) { d->completer = new KexiSearchLineEditCompleter(this); - QTreeView *treeView = new QTreeView; - kexiTester() << KexiTestObject(treeView, "globalSearch.treeView"); + d->popupTreeView = new QTreeView; + kexiTester() << KexiTestObject(d->popupTreeView, "globalSearch.treeView"); - d->completer->setPopup(treeView); + d->completer->setPopup(d->popupTreeView); d->completer->setModel(d->model = new KexiSearchLineEditCompleterPopupModel(d->completer)); d->completer->setCaseSensitivity(Qt::CaseInsensitive); d->completer->setSubstringCompletion(true); @@ -365,10 +377,10 @@ // filtering so only table names are displayed. d->completer->setModelSorting(KexiCompleter::UnsortedModel); - treeView->setHeaderHidden(true); - treeView->setRootIsDecorated(false); - treeView->setItemDelegate( - d->delegate = new KexiSearchLineEditPopupItemDelegate(treeView, d->completer)); + d->popupTreeView->setHeaderHidden(true); + d->popupTreeView->setRootIsDecorated(false); + d->popupTreeView->setItemDelegate( + d->delegate = new KexiSearchLineEditPopupItemDelegate(d->popupTreeView, d->completer)); // forked initialization like in QLineEdit::setCompleter: d->completer->setWidget(this); @@ -809,6 +821,7 @@ d->completer->setCompletionPrefix(text); } + d->popupTreeView->resizeColumnToContents(0); d->completer->complete(); } diff -Nru calligra-2.9.7/kexi/migration/AlterSchemaWidget.cpp calligra-2.9.11/kexi/migration/AlterSchemaWidget.cpp --- calligra-2.9.7/kexi/migration/AlterSchemaWidget.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/migration/AlterSchemaWidget.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -127,10 +127,12 @@ m_newSchema->field(m_selectedColumn)->setType(KexiDB::Field::Type(m_columnType->itemData(typ).toInt())); //Only set the pkey check enabled if the field type is integer - m_columnPKey->setEnabled(KexiDB::Field::isIntegerType(KexiDB::Field::Type(m_columnType->itemData(typ).toInt()))); + const bool isInteger = KexiDB::Field::isIntegerType( + KexiDB::Field::Type(m_columnType->itemData(typ).toInt())); + m_columnPKey->setEnabled(isInteger); //If the field type is not integer, then the field cannot be a pkey - if (!KexiDB::Field::isIntegerType(KexiDB::Field::Type(m_columnType->itemData(typ).toInt()))) { + if (!isInteger) { m_newSchema->field(m_selectedColumn)->setPrimaryKey(false); } } diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/include/mdbtools.h calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/include/mdbtools.h --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/include/mdbtools.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/include/mdbtools.h 2016-02-02 19:53:13.000000000 +0000 @@ -12,9 +12,8 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _mdbtools_h_ #define _mdbtools_h_ @@ -33,14 +32,18 @@ #include #include - #ifdef HAVE_ICONV #include #endif +#ifdef _WIN32 +#include +#endif + #define MDB_DEBUG 0 #define MDB_PGSIZE 4096 +//#define MDB_MAX_OBJ_NAME (256*3) /* unicode 16 -> utf-8 worst case */ #define MDB_MAX_OBJ_NAME 256 #define MDB_MAX_COLS 256 #define MDB_MAX_IDX_COLS 10 @@ -51,6 +54,11 @@ #define MDB_NO_BACKENDS 1 #define MDB_NO_STATS 1 +// Theses 2 atrbutes are not supported by all compilers: +// M$VC see http://stackoverflow.com/questions/1113409/attribute-constructor-equivalent-in-vc +#define MDB_DEPRECATED(type, funcname) type __attribute__((deprecated)) funcname +#define MDB_CONSTRUCTOR(funcname) void __attribute__((constructor)) funcname() + enum { MDB_PAGE_DB = 0, MDB_PAGE_DATA, @@ -61,7 +69,9 @@ }; enum { MDB_VER_JET3 = 0, - MDB_VER_JET4 = 1 + MDB_VER_JET4 = 1, + MDB_VER_ACCDB_2007 = 0x02, + MDB_VER_ACCDB_2010 = 0x0103 }; enum { MDB_FORM = 0, @@ -74,7 +84,7 @@ MDB_MODULE, MDB_RELATIONSHIP, MDB_UNKNOWN_09, - MDB_UNKNOWN_0A, + MDB_UNKNOWN_0A, /* User access */ MDB_DATABASE_PROPERTY, MDB_ANY = -1 }; @@ -86,12 +96,14 @@ MDB_MONEY = 0x05, MDB_FLOAT = 0x06, MDB_DOUBLE = 0x07, - MDB_SDATETIME = 0x08, + MDB_DATETIME = 0x08, + MDB_BINARY = 0x09, MDB_TEXT = 0x0a, MDB_OLE = 0x0b, MDB_MEMO = 0x0c, MDB_REPID = 0x0f, - MDB_NUMERIC = 0x10 + MDB_NUMERIC = 0x10, + MDB_COMPLEX = 0x12 }; /* SARG operators */ @@ -126,8 +138,9 @@ MDB_DEBUG_USAGE = 0x0004, MDB_DEBUG_OLE = 0x0008, MDB_DEBUG_ROW = 0x0010, - MDB_USE_INDEX = 0x0020, - MDB_NO_MEMO = 0x0040 /* don't follow memo fields */ + MDB_DEBUG_PROPS = 0x0020, + MDB_USE_INDEX = 0x0040, + MDB_NO_MEMO = 0x0080, /* don't follow memo fields */ }; #define mdb_is_logical_op(x) (x == MDB_OR || \ @@ -154,13 +167,27 @@ MDB_IDX_REQUIRED = 0x08 }; -#define IS_JET4(mdb) (mdb->f->jet_version==MDB_VER_JET4) -#define IS_JET3(mdb) (mdb->f->jet_version==MDB_VER_JET3) +/* export schema options */ +enum { + MDB_SHEXP_DROPTABLE = 1<<0, /* issue drop table during export */ + MDB_SHEXP_CST_NOTNULL = 1<<1, /* generate NOT NULL constraints */ + MDB_SHEXP_CST_NOTEMPTY = 1<<2, /* <>'' constraints */ + MDB_SHEXP_COMMENTS = 1<<3, /* export comments on columns & tables */ + MDB_SHEXP_DEFVALUES = 1<<4, /* export default values */ + MDB_SHEXP_INDEXES = 1<<5, /* export indices */ + MDB_SHEXP_RELATIONS = 1<<6 /* export relation (foreign keys) */ +}; +#define MDB_SHEXP_DEFAULT (MDB_SHEXP_CST_NOTNULL | MDB_SHEXP_COMMENTS | MDB_SHEXP_INDEXES | MDB_SHEXP_RELATIONS) -#if !MDB_NO_BACKENDS -/* hash to store registered backends */ -extern GHashTable *mdb_backends; -#endif +/* csv export binary options */ +enum { + MDB_BINEXPORT_STRIP, + MDB_BINEXPORT_RAW, + MDB_BINEXPORT_OCTAL +}; + +#define IS_JET4(mdb) (mdb->f->jet_version==MDB_VER_JET4) /* obsolete */ +#define IS_JET3(mdb) (mdb->f->jet_version==MDB_VER_JET3) /* forward declarations */ typedef struct mdbindex MdbIndex; @@ -175,7 +202,18 @@ } MdbBackendType; typedef struct { - MdbBackendType *types_table; + guint32 capabilities; /* see MDB_SHEXP_* */ + MdbBackendType *types_table; + MdbBackendType *type_shortdate; + MdbBackendType *type_autonum; + const char *short_now; + const char *long_now; + const char *charset_statement; + const char *drop_statement; + const char *constaint_not_empty_statement; + const char *column_comment_statement; + const char *table_comment_statement; + gchar* (*quote_schema_name)(const gchar*, const gchar*); } MdbBackend; #endif @@ -219,7 +257,7 @@ guint16 tab_first_dpg_offset; guint16 tab_cols_start_offset; guint16 tab_ridx_entry_size; - guint16 col_fixed_offset; + guint16 col_flags_offset; guint16 col_size_offset; guint16 col_num_offset; guint16 tab_col_entry_size; @@ -258,10 +296,8 @@ char object_name[MDB_MAX_OBJ_NAME+1]; int object_type; unsigned long table_pg; /* misnomer since object may not be a table */ - unsigned long kkd_pg; - unsigned int kkd_rowid; - int num_props; - GArray *props; + //int num_props; please use props->len + GArray *props; /* GArray of MdbProperties */ GArray *columns; int flags; } MdbCatalogEntry; @@ -277,7 +313,9 @@ char s[256]; } MdbAny; +struct S_MdbTableDef; /* forward definition */ typedef struct { + struct S_MdbTableDef *table; char name[MDB_MAX_OBJ_NAME+1]; int col_type; int col_size; @@ -300,6 +338,8 @@ /* numerics only */ int col_prec; int col_scale; + unsigned char is_long_auto; + unsigned char is_uuid_auto; MdbProperties *props; /* info needed for handling deleted/added columns */ int fixed_offset; @@ -338,7 +378,7 @@ MdbIndexPage pages[MDB_MAX_INDEX_DEPTH]; } MdbIndexChain; -typedef struct { +typedef struct S_MdbTableDef { MdbCatalogEntry *entry; char name[MDB_MAX_OBJ_NAME+1]; unsigned int num_cols; @@ -407,8 +447,8 @@ } MdbSarg; /* mem.c */ -extern void mdb_init(); -extern void mdb_exit(); +extern MDB_DEPRECATED(void, mdb_init()); +extern MDB_DEPRECATED(void, mdb_exit()); /* file.c */ extern ssize_t mdb_read_pg(MdbHandle *mdb, unsigned long pg); @@ -433,8 +473,9 @@ /* catalog.c */ extern void mdb_free_catalog(MdbHandle *mdb); extern GPtrArray *mdb_read_catalog(MdbHandle *mdb, int obj_type); +MdbCatalogEntry *mdb_get_catalogentry_by_name(MdbHandle *mdb, const gchar* name); extern void mdb_dump_catalog(MdbHandle *mdb, int obj_type); -extern char *mdb_get_objtype_string(int obj_type); +extern const char *mdb_get_objtype_string(int obj_type); /* table.c */ extern MdbTableDef *mdb_alloc_tabledef(MdbCatalogEntry *entry); @@ -451,10 +492,13 @@ extern void *read_pg_if_n(MdbHandle *mdb, void *buf, int *cur_pos, size_t len); extern int mdb_is_user_table(MdbCatalogEntry *entry); extern int mdb_is_system_table(MdbCatalogEntry *entry); +extern const char *mdb_table_get_prop(const MdbTableDef *table, const gchar *key); +extern const char *mdb_col_get_prop(const MdbColumn *col, const gchar *key); /* data.c */ -extern int mdb_bind_column_by_name(MdbTableDef *table, gchar *col_name, void *bind_ptr, int *len_ptr); +extern int mdb_bind_column_by_name(MdbTableDef *table, const gchar *col_name, void *bind_ptr, int *len_ptr); extern void mdb_data_dump(MdbTableDef *table); +extern void mdb_date_to_tm(double td, struct tm *t); extern void mdb_bind_column(MdbTableDef *table, int col_num, void *bind_ptr, int *len_ptr); extern int mdb_rewind_table(MdbTableDef *table); extern int mdb_fetch_row(MdbTableDef *table); @@ -467,21 +511,25 @@ extern int mdb_col_disp_size(MdbColumn *col); extern size_t mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr); extern size_t mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size); +extern void* mdb_ole_read_full(MdbHandle *mdb, MdbColumn *col, size_t *size); extern void mdb_set_date_fmt(const char *); extern int mdb_read_row(MdbTableDef *table, unsigned int row); /* dump.c */ -extern void buffer_dump(const void *buf, int start, size_t len); +extern void mdb_buffer_dump(const void *buf, int start, size_t len); #if !MDB_NO_BACKENDS /* backend.c */ -extern char *mdb_get_coltype_string(MdbBackend *backend, int col_type); -extern int mdb_coltype_takes_length(MdbBackend *backend, int col_type); -extern void mdb_init_backends(); -extern void mdb_register_backend(MdbBackendType *backend, char *backend_name); -extern void mdb_remove_backends(); +extern MDB_DEPRECATED(char*, mdb_get_coltype_string(MdbBackend *backend, int col_type)); +extern MDB_DEPRECATED(int, mdb_coltype_takes_length(MdbBackend *backend, int col_type)); +extern const MdbBackendType* mdb_get_colbacktype(const MdbColumn *col); +extern const char* mdb_get_colbacktype_string(const MdbColumn *col); +extern int mdb_colbacktype_takes_length(const MdbColumn *col); +extern MDB_DEPRECATED(void, mdb_init_backends()); +extern void mdb_register_backend(char *backend_name, guint32 capabilities, MdbBackendType *backend_type, MdbBackendType *type_shortdate, MdbBackendType *type_autonum, const char *short_now, const char *long_now, const char *charset_statement, const char *drop_statement, const char *constaint_not_empty_statement, const char *column_comment_statement, const char *table_comment_statement, gchar* (*quote_schema_name)(const gchar*, const gchar*)); +extern MDB_DEPRECATED(void, mdb_remove_backends()); extern int mdb_set_default_backend(MdbHandle *mdb, const char *backend_name); -extern char *mdb_get_relationships(MdbHandle *mdb); +extern void mdb_print_schema(MdbHandle *mdb, FILE *outfile, char *tabname, char *dbnamespace, guint32 export_options); #endif /* sargs.c */ @@ -521,9 +569,13 @@ extern int mdb_like_cmp(char *s, char *r); /* write.c */ +extern void mdb_put_int16(void *buf, guint32 offset, guint32 value); +extern void mdb_put_int32(void *buf, guint32 offset, guint32 value); +extern void mdb_put_int32_msb(void *buf, guint32 offset, guint32 value); extern int mdb_crack_row(MdbTableDef *table, int row_start, int row_end, MdbField *fields); extern guint16 mdb_add_row_to_pg(MdbTableDef *table, unsigned char *row_buffer, int new_row_size); extern int mdb_update_index(MdbTableDef *table, MdbIndex *idx, unsigned int num_fields, MdbField *fields, guint32 pgnum, guint16 rownum); +extern int mdb_insert_row(MdbTableDef *table, int num_fields, MdbField *fields); extern int mdb_pack_row(MdbTableDef *table, unsigned char *row_buffer, unsigned int num_fields, MdbField *fields); extern int mdb_replace_row(MdbTableDef *table, int row, void *new_row, int new_row_size); extern int mdb_pg_get_freespace(MdbHandle *mdb); @@ -532,12 +584,13 @@ /* map.c */ extern guint32 mdb_map_find_next_freepage(MdbTableDef *table, int row_size); -extern guint32 mdb_map_find_next(MdbHandle *mdb, unsigned char *map, unsigned int map_sz, guint32 start_pg); +extern gint32 mdb_map_find_next(MdbHandle *mdb, unsigned char *map, unsigned int map_sz, guint32 start_pg); /* props.c */ -extern GPtrArray *mdb_read_props_list(gchar *kkd, int len); extern void mdb_free_props(MdbProperties *props); -extern MdbProperties *mdb_read_props(MdbHandle *mdb, GPtrArray *names, gchar *kkd, int len); +extern void mdb_dump_props(MdbProperties *props, FILE *outfile, int show_name); +extern GArray* mdb_kkd_to_props(MdbHandle *mdb, void *kkd, size_t len); + /* worktable.c */ extern MdbTableDef *mdb_create_temp_table(MdbHandle *mdb, char *name); @@ -548,13 +601,14 @@ /* options.c */ extern int mdb_get_option(unsigned long optnum); -extern void mdb_debug(int klass, char *fmt, ...); +extern void mdb_debug(int klass, const char *fmt, ...); /* iconv.c */ extern int mdb_unicode2ascii(MdbHandle *mdb, char *src, size_t slen, char *dest, size_t dlen); extern int mdb_ascii2unicode(MdbHandle *mdb, char *src, size_t slen, char *dest, size_t dlen); extern void mdb_iconv_init(MdbHandle *mdb); extern void mdb_iconv_close(MdbHandle *mdb); +extern const char* mdb_target_charset(MdbHandle *mdb); #ifdef __cplusplus } diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/catalog.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/catalog.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/catalog.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/catalog.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,9 +12,8 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "mdbtools.h" @@ -23,10 +22,10 @@ #include "dmalloc.h" #endif -char * +const char * mdb_get_objtype_string(int obj_type) { -static char *type_name[] = {"Form", +static const char *type_name[] = {"Form", "Table", "Macro", "System Table", @@ -36,7 +35,7 @@ "Module", "Relationship", "Unknown 0x09", - "Unknown 0x0a", + "User Info", "Database" }; @@ -49,11 +48,21 @@ void mdb_free_catalog(MdbHandle *mdb) { - unsigned int i; + unsigned int i, j; + MdbCatalogEntry *entry; if ((!mdb) || (!mdb->catalog)) return; - for (i=0; icatalog->len; i++) - g_free (g_ptr_array_index(mdb->catalog, i)); + for (i=0; icatalog->len; i++) { + entry = (MdbCatalogEntry *)g_ptr_array_index(mdb->catalog, i); + if (entry) { + if (entry->props) { + for (j=0; jprops->len; j++) + mdb_free_props(g_array_index(entry->props, MdbProperties*, j)); + g_array_free(entry->props, TRUE); + } + g_free(entry); + } + } g_ptr_array_free(mdb->catalog, TRUE); mdb->catalog = NULL; } @@ -63,10 +72,14 @@ MdbCatalogEntry *entry, msysobj; MdbTableDef *table; char obj_id[256]; - char obj_name[256]; + char obj_name[MDB_MAX_OBJ_NAME]; char obj_type[256]; char obj_flags[256]; + char obj_props[MDB_BIND_SIZE]; int type; + unsigned int i; + MdbColumn *col_props; + int kkd_size_ole; if (!mdb) return NULL; if (mdb->catalog) mdb_free_catalog(mdb); @@ -91,14 +104,16 @@ mdb_bind_column_by_name(table, "Name", obj_name, NULL); mdb_bind_column_by_name(table, "Type", obj_type, NULL); mdb_bind_column_by_name(table, "Flags", obj_flags, NULL); + i = mdb_bind_column_by_name(table, "LvProp", obj_props, &kkd_size_ole); + col_props = g_ptr_array_index(table->columns, i-1); mdb_rewind_table(table); while (mdb_fetch_row(table)) { type = atoi(obj_type); if (objtype==MDB_ANY || type == objtype) { - - + //fprintf(stderr, "obj_id: %10ld objtype: %-3d (0x%04x) obj_name: %s\n", + // (atol(obj_id) & 0x00FFFFFF), type, type, obj_name); entry = (MdbCatalogEntry *) g_malloc0(sizeof(MdbCatalogEntry)); entry->mdb = mdb; strcpy(entry->object_name, obj_name); @@ -106,16 +121,38 @@ entry->table_pg = atol(obj_id) & 0x00FFFFFF; entry->flags = atol(obj_flags); mdb->num_catalog++; - g_ptr_array_add(mdb->catalog, entry); + g_ptr_array_add(mdb->catalog, entry); + if (kkd_size_ole) { + size_t kkd_len; + void *kkd = mdb_ole_read_full(mdb, col_props, &kkd_len); + //mdb_buffer_dump(kkd, 0, kkd_len); + entry->props = mdb_kkd_to_props(mdb, kkd, kkd_len); + free(kkd); + } } } - + //mdb_dump_catalog(mdb, MDB_TABLE); mdb_free_tabledef(table); return mdb->catalog; } + +MdbCatalogEntry * +mdb_get_catalogentry_by_name(MdbHandle *mdb, const gchar* name) +{ + unsigned int i; + MdbCatalogEntry *entry; + + for (i=0; inum_catalog; i++) { + entry = g_ptr_array_index(mdb->catalog, i); + if (!strcasecmp(entry->object_name, name)) + return entry; + } + return NULL; +} + void mdb_dump_catalog(MdbHandle *mdb, int obj_type) { @@ -126,14 +163,12 @@ for (i=0;inum_catalog;i++) { entry = g_ptr_array_index(mdb->catalog,i); if (obj_type==MDB_ANY || entry->object_type==obj_type) { - fprintf(stdout,"Type: %-10s Name: %-18s T pg: %04x KKD pg: %04x row: %2d\n", + printf("Type: %-12s Name: %-48s Page: %06lx\n", mdb_get_objtype_string(entry->object_type), entry->object_name, - (unsigned int) entry->table_pg, - (unsigned int) entry->kkd_pg, - entry->kkd_rowid); + entry->table_pg); } - } + } return; } diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/data.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/data.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/data.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/data.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,14 +12,13 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include +#include #include "mdbtools.h" -#include "time.h" -#include "math.h" #ifdef DMALLOC #include "dmalloc.h" @@ -28,9 +27,10 @@ #define OFFSET_MASK 0x1fff char *mdb_money_to_string(MdbHandle *mdb, int start); +char *mdb_numeric_to_string(MdbHandle *mdb, int start, int prec, int scale); + static int _mdb_attempt_bind(MdbHandle *mdb, MdbColumn *col, unsigned char isnull, int offset, int len); -static char *mdb_num_to_string(MdbHandle *mdb, int start, int datatype, int prec, int scale); static char *mdb_date_to_string(MdbHandle *mdb, int start); #ifdef MDB_COPY_OLE static size_t mdb_copy_ole(MdbHandle *mdb, void *dest, int start, int size); @@ -59,7 +59,7 @@ col->len_ptr = len_ptr; } int -mdb_bind_column_by_name(MdbTableDef *table, gchar *col_name, void *bind_ptr, int *len_ptr) +mdb_bind_column_by_name(MdbTableDef *table, const gchar *col_name, void *bind_ptr, int *len_ptr) { unsigned int i; int col_num = -1; @@ -139,12 +139,12 @@ if (row > 1000) return -1; /* if lookupflag is not set, it's good (deleteflag is ok) */ - for (i = row; i > 0; i--) { - row_start = mdb_get_int16(mdb->pg_buf, (rco + i*2)); - if (!(row_start & 0x8000)) { - break; - } - } + for (i = row; i > 0; i--) { + row_start = mdb_get_int16(mdb->pg_buf, (rco + i*2)); + if (!(row_start & 0x8000)) { + break; + } + } row_end = (i == 0) ? mdb->fmt->pg_size : row_start & OFFSET_MASK; #endif @@ -206,9 +206,9 @@ mdb_xfer_bound_data(MdbHandle *mdb, int start, MdbColumn *col, int len) { int ret; - - - + //if (!strcmp("Name",col->name)) { + //printf("start %d %d\n",start, len); + //} if (len) { col->cur_value_start = start; col->cur_value_len = len; @@ -220,22 +220,12 @@ if (!len) { strcpy(col->bind_ptr, ""); } else { - + //fprintf(stdout,"len %d size %d\n",len, col->col_size); char *str; if (col->col_type == MDB_NUMERIC) { - /*fprintf(stdout,"MDB_NUMERIC\n");*/ - str = mdb_num_to_string(mdb, start, - col->col_type, col->col_prec, - col->col_scale); - /*fprintf(stdout,"mdb_num_to_string()=%d '%s'\n", strlen(str), str);*/ + str = mdb_numeric_to_string(mdb, start, col->col_prec, col->col_scale); } else { - /*fprintf(stdout,"!MDB_NUMERIC : %d len=%d\n", col->col_type, len);*/ - str = mdb_col_to_string(mdb, mdb->pg_buf, start, - col->col_type, len); - /*if (strlen(str) > MDB_BIND_SIZE) { - fprintf(stdout, "!!!!!!\n"); - } - fprintf(stdout,"mdb_col_to_string()=%d '%s'\n", strlen(str), str);*/ + str = mdb_col_to_string(mdb, mdb->pg_buf, start, col->col_type, len); } strcpy(col->bind_ptr, str); g_free(str); @@ -253,7 +243,6 @@ MdbHandle *mdb = table->entry->mdb; MdbColumn *col; unsigned int i; - int rc; int row_start; size_t row_size; int delflag, lookupflag; @@ -263,7 +252,10 @@ if (table->num_rows == 0) return 0; - mdb_find_row(mdb, row, &row_start, &row_size); + if (mdb_find_row(mdb, row, &row_start, &row_size)) { + fprintf(stderr, "warning: mdb_find_row failed."); + return 0; + } delflag = lookupflag = 0; if (row_start & 0x8000) lookupflag++; @@ -289,14 +281,14 @@ #endif #if MDB_DEBUG - buffer_dump(mdb->pg_buf, row_start, row_size); + mdb_buffer_dump(mdb->pg_buf, row_start, row_size); #endif /* take advantage of mdb_crack_row() to clean up binding */ /* use num_cols instead of num_fields -- bsb 03/04/02 */ for (i = 0; i < table->num_cols; i++) { col = g_ptr_array_index(table->columns,fields[i].colnum); - rc = _mdb_attempt_bind(mdb, col, fields[i].is_null, + _mdb_attempt_bind(mdb, col, fields[i].is_null, fields[i].start, fields[i].siz); } @@ -315,13 +307,15 @@ } else if (col->col_type == MDB_OLE) { mdb_xfer_bound_ole(mdb, offset, col, len); } else { - - - + //if (!mdb_test_sargs(mdb, col, offset, len)) { + //return 0; + //} mdb_xfer_bound_data(mdb, offset, col, len); } return 1; } + +/* Read next data page into mdb->pg_buf */ int mdb_read_next_dpg(MdbTableDef *table) { MdbCatalogEntry *entry = table->entry; @@ -329,16 +323,28 @@ int next_pg; #ifndef SLOW_READ - next_pg = mdb_map_find_next(mdb, table->usage_map, - table->map_sz, table->cur_phys_pg); + while (1) { + next_pg = mdb_map_find_next(mdb, table->usage_map, + table->map_sz, table->cur_phys_pg); + if (next_pg < 0) + break; /* unknow map type: goto fallback */ + if (!next_pg) + return 0; - if (next_pg >= 0) { - if (mdb_read_pg(mdb, next_pg)) { - table->cur_phys_pg = next_pg; - return table->cur_phys_pg; - } else { + if (!mdb_read_pg(mdb, next_pg)) { + fprintf(stderr, "error: reading page %d failed.\n", next_pg); return 0; } + + table->cur_phys_pg = next_pg; + if (mdb->pg_buf[0]==MDB_PAGE_DATA && mdb_get_int32(mdb->pg_buf, 4)==entry->table_pg) + return table->cur_phys_pg; + + /* On rare occasion, mdb_map_find_next will return a wrong page */ + /* Found in a big file, over 4,000,000 records */ + fprintf(stderr, + "warning: page %d from map doesn't match: Type=%d, buf[4..7]=%ld Expected table_pg=%ld\n", + next_pg, mdb->pg_buf[0], mdb_get_int32(mdb->pg_buf, 4), entry->table_pg); } fprintf(stderr, "Warning: defaulting to brute force read\n"); #endif @@ -346,7 +352,7 @@ do { if (!mdb_read_pg(mdb, table->cur_phys_pg++)) return 0; - } while (mdb->pg_buf[0]!=0x01 || mdb_get_int32(mdb->pg_buf, 4)!=entry->table_pg); + } while (mdb->pg_buf[0]!=MDB_PAGE_DATA || mdb_get_int32(mdb->pg_buf, 4)!=entry->table_pg); /* fprintf(stderr,"returning new page %ld\n", table->cur_phys_pg); */ return table->cur_phys_pg; } @@ -403,7 +409,7 @@ } else { rows = mdb_get_int16(mdb->pg_buf,fmt->row_count_offset); - /* if at end of page, find a new page */ + /* if at end of page, find a new data page */ if (table->cur_row >= rows) { table->cur_row=0; @@ -457,6 +463,12 @@ return text; } #endif +/* + * ole_ptr should point to the original blob value of the field. + * If omited, there will be no multi-page check to that the caller is + * responsible for not calling this function. Then, it doesn't have to + * preserve the original value. + */ size_t mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr) { @@ -465,24 +477,30 @@ int row_start; size_t len; - ole_len = mdb_get_int32(ole_ptr, 0); - - if ((ole_len & 0x80000000) - || (ole_len & 0x40000000)) { - /* inline or single-page fields don't have a next */ - return 0; - } else { - if (mdb_find_pg_row(mdb, col->cur_blob_pg_row, - &buf, &row_start, &len)) { + if (ole_ptr) { + ole_len = mdb_get_int32(ole_ptr, 0); + mdb_debug(MDB_DEBUG_OLE,"ole len = %d ole flags = %02x", + ole_len & 0x00ffffff, ole_len >> 24); + + if ((ole_len & 0x80000000) + || (ole_len & 0x40000000)) + /* inline or single-page fields don't have a next */ return 0; - } - if (col->bind_ptr) - memcpy(col->bind_ptr, (char*)buf + row_start + 4, len - 4); - col->cur_blob_pg_row = mdb_get_int32(buf, row_start); - - return len; } - return 0; + mdb_debug(MDB_DEBUG_OLE, "pg_row %d", col->cur_blob_pg_row); + if (!col->cur_blob_pg_row) + return 0; /* we are done */ + if (mdb_find_pg_row(mdb, col->cur_blob_pg_row, + &buf, &row_start, &len)) { + return 0; + } + mdb_debug(MDB_DEBUG_OLE,"start %d len %d", row_start, len); + + if (col->bind_ptr) + memcpy(col->bind_ptr, (char*)buf + row_start + 4, len - 4); + col->cur_blob_pg_row = mdb_get_int32(buf, row_start); + + return len - 4; } size_t mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size) @@ -526,26 +544,64 @@ if (col->bind_ptr) { memcpy(col->bind_ptr, (char*)buf + row_start, len); if (mdb_get_option(MDB_DEBUG_OLE)) - buffer_dump(col->bind_ptr, 0, 16); + mdb_buffer_dump(col->bind_ptr, 0, 16); } return len; } else if ((ole_len & 0xff000000) == 0) { col->cur_blob_pg_row = mdb_get_int32(ole_ptr, 4); + mdb_debug(MDB_DEBUG_OLE,"ole row = %d ole pg = %ld", + col->cur_blob_pg_row & 0xff, + col->cur_blob_pg_row >> 8); if (mdb_find_pg_row(mdb, col->cur_blob_pg_row, &buf, &row_start, &len)) { return 0; } + mdb_debug(MDB_DEBUG_OLE,"start %d len %d", row_start, len); + if (col->bind_ptr) memcpy(col->bind_ptr, (char*)buf + row_start + 4, len - 4); col->cur_blob_pg_row = mdb_get_int32(buf, row_start); + mdb_debug(MDB_DEBUG_OLE, "next pg_row %d", col->cur_blob_pg_row); - return len; + return len - 4; } else { fprintf(stderr,"Unhandled ole field flags = %02x\n", ole_len >> 24); return 0; } } +/* + * mdb_ole_read_full calls mdb_ole_read then loop over mdb_ole_read_next as much as necessary. + * returns the result in a big buffer. + * The call must free it. + * Note that this function is not indempotent: It may be called only once per column after each bind. + */ +void* +mdb_ole_read_full(MdbHandle *mdb, MdbColumn *col, size_t *size) +{ + char ole_ptr[MDB_MEMO_OVERHEAD]; + char *result = malloc(MDB_BIND_SIZE); + size_t result_buffer_size = MDB_BIND_SIZE; + size_t len, pos; + + memcpy(ole_ptr, col->bind_ptr, MDB_MEMO_OVERHEAD); + + len = mdb_ole_read(mdb, col, ole_ptr, MDB_BIND_SIZE); + memcpy(result, col->bind_ptr, len); + pos = len; + while ((len = mdb_ole_read_next(mdb, col, ole_ptr))) { + if (pos+len >= result_buffer_size) { + result_buffer_size += MDB_BIND_SIZE; + result = realloc(result, result_buffer_size); + } + memcpy(result + pos, col->bind_ptr, len); + pos += len; + } + if (size) + *size = pos; + return result; +} + #ifdef MDB_COPY_OLE static size_t mdb_copy_ole(MdbHandle *mdb, void *dest, int start, int size) { @@ -617,17 +673,15 @@ gint32 row_start, pg_row; size_t len; void *buf, *pg_buf = mdb->pg_buf; - char *text = 0; + char *text = (char *) g_malloc(MDB_BIND_SIZE); - /*printf("mdb_memo_to_string: size=%d\n", size);*/ if (sizepg_buf+start+13, 4); - negative = (*(mdb->pg_buf+start) & 0x80) ? 1 : 0; - text = (char *) g_malloc(prec+2+negative); - if (negative) { - sprintf(text, "-%0*" G_GINT32_FORMAT, prec, GINT32_FROM_LE(l)); - } else { - sprintf(text, "%0*" G_GINT32_FORMAT, prec, GINT32_FROM_LE(l)); - } - if (scale) { - memmove(text+prec-scale+1+negative, text+prec-scale+negative, scale+1); - text[prec-scale+negative] = '.'; - } - return text; -} +#if 0 static int trim_trailing_zeros(char * buff) { char *p; @@ -746,66 +772,96 @@ return 0; } +#endif /* Date/Time is stored as a double, where the whole part is the days from 12/30/1899 and the fractional part is the fractional part of one day. */ -static char * -mdb_date_to_string(MdbHandle *mdb, int start) + +void +mdb_date_to_tm(double td, struct tm *t) { - struct tm t; long int day, time; int yr, q; int *cal; int noleap_cal[] = {0,31,59,90,120,151,181,212,243,273,304,334,365}; int leap_cal[] = {0,31,60,91,121,152,182,213,244,274,305,335,366}; - char *text = (char *) g_malloc(MDB_BIND_SIZE); - double td = mdb_get_double(mdb->pg_buf, start); - day = (long int)(td); time = (long int)(fabs(td - day) * 86400.0 + 0.5); - t.tm_hour = time / 3600; - t.tm_min = (time / 60) % 60; - t.tm_sec = time % 60; - t.tm_year = 1 - 1900; + t->tm_hour = time / 3600; + t->tm_min = (time / 60) % 60; + t->tm_sec = time % 60; + t->tm_year = 1 - 1900; day += 693593; /* Days from 1/1/1 to 12/31/1899 */ - t.tm_wday = (day+1) % 7; + t->tm_wday = (day+1) % 7; q = day / 146097; /* 146097 days in 400 years */ - t.tm_year += 400 * q; + t->tm_year += 400 * q; day -= q * 146097; q = day / 36524; /* 36524 days in 100 years */ if (q > 3) q = 3; - t.tm_year += 100 * q; + t->tm_year += 100 * q; day -= q * 36524; q = day / 1461; /* 1461 days in 4 years */ - t.tm_year += 4 * q; + t->tm_year += 4 * q; day -= q * 1461; q = day / 365; /* 365 days in 1 year */ if (q > 3) q = 3; - t.tm_year += q; + t->tm_year += q; day -= q * 365; - yr = t.tm_year + 1900; + yr = t->tm_year + 1900; cal = ((yr)%4==0 && ((yr)%100!=0 || (yr)%400==0)) ? leap_cal : noleap_cal; - for (t.tm_mon=0; t.tm_mon<12; t.tm_mon++) { - if (day < cal[t.tm_mon+1]) break; + for (t->tm_mon=0; t->tm_mon<12; t->tm_mon++) { + if (day < cal[t->tm_mon+1]) break; } - t.tm_mday = day - cal[t.tm_mon] + 1; - t.tm_yday = day; - t.tm_isdst = -1; + t->tm_mday = day - cal[t->tm_mon] + 1; + t->tm_yday = day; + t->tm_isdst = -1; +} + +static char * +mdb_date_to_string(MdbHandle *mdb, int start) +{ + struct tm t; + char *text = (char *) g_malloc(MDB_BIND_SIZE); + double td = mdb_get_double(mdb->pg_buf, start); + + mdb_date_to_tm(td, &t); strftime(text, MDB_BIND_SIZE, date_fmt, &t); return text; } +static char * +mdb_uuid_to_string(MdbHandle *mdb, int start) +{ + char *text = NULL; + unsigned short uuid1, uuid2, uuid3, uuid4, uuid5, uuid6, uuid7, uuid8; + + uuid1 = mdb_get_int16(mdb->pg_buf, start); + uuid2 = mdb_get_int16(mdb->pg_buf, start + 2); + uuid3 = mdb_get_int16(mdb->pg_buf, start + 4); + uuid4 = mdb_get_int16(mdb->pg_buf, start + 6); + uuid5 = mdb_get_int16(mdb->pg_buf, start + 8); + uuid6 = mdb_get_int16(mdb->pg_buf, start + 10); + uuid7 = mdb_get_int16(mdb->pg_buf, start + 12); + uuid8 = mdb_get_int16(mdb->pg_buf, start + 14); + + text = g_strdup_printf("{%04x%04x-%04x-%04x-%04x-%04x%04x%04x}", + uuid1, uuid2, uuid3, uuid4, uuid5, uuid6, uuid7, uuid8); + + return text; +} + +#if 0 int floor_log10(double f, int is_single) { unsigned int i; @@ -814,7 +870,7 @@ if (f < 0.0) f = -f; - if ((f == 0.0) || (f == 1.0)) { + if ((f == 0.0) || (f == 1.0) || isinf(f)) { return 0; } else if (f < 1.0) { if (is_single) { @@ -834,6 +890,7 @@ return (int)i; } } +#endif char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int size) { @@ -850,24 +907,29 @@ text = g_strdup_printf("%d", mdb_get_byte(buf, start)); break; case MDB_INT: - text = g_strdup_printf("%ld", - (long)mdb_get_int16(buf, start)); + text = g_strdup_printf("%hd", + (short)mdb_get_int16(buf, start)); break; case MDB_LONGINT: + case MDB_COMPLEX: text = g_strdup_printf("%ld", mdb_get_int32(buf, start)); break; case MDB_FLOAT: tf = mdb_get_single(buf, start); - text = g_strdup_printf("%.*f", - FLT_DIG - floor_log10(tf,1) - 1, tf); - trim_trailing_zeros(text); + text = g_strdup_printf("%.8e", tf); break; case MDB_DOUBLE: td = mdb_get_double(buf, start); - text = g_strdup_printf("%.*f", - DBL_DIG - floor_log10(td,0) - 1, td); - trim_trailing_zeros(text); + text = g_strdup_printf("%.16e", td); + break; + case MDB_BINARY: + if (size<0) { + text = g_strdup(""); + } else { + text = g_malloc(size); + memcpy((char*)buf+start, text, size); + } break; case MDB_TEXT: if (size<0) { @@ -878,7 +940,7 @@ size, text, MDB_BIND_SIZE); } break; - case MDB_SDATETIME: + case MDB_DATETIME: text = mdb_date_to_string(mdb, start); break; case MDB_MEMO: @@ -888,6 +950,9 @@ text = mdb_money_to_string(mdb, start); case MDB_NUMERIC: break; + case MDB_REPID: + text = mdb_uuid_to_string(mdb, start); + break; default: text = g_strdup(""); break; @@ -907,6 +972,7 @@ return 6; break; case MDB_LONGINT: + case MDB_COMPLEX: return 11; break; case MDB_FLOAT: @@ -918,7 +984,7 @@ case MDB_TEXT: return col->col_size; break; - case MDB_SDATETIME: + case MDB_DATETIME: return 20; break; case MDB_MEMO: @@ -943,6 +1009,7 @@ return 2; break; case MDB_LONGINT: + case MDB_COMPLEX: return 4; break; case MDB_FLOAT: @@ -954,9 +1021,12 @@ case MDB_TEXT: return -1; break; - case MDB_SDATETIME: + case MDB_DATETIME: return 4; break; + case MDB_BINARY: + return -1; + break; case MDB_MEMO: return -1; break; diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/dump.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/dump.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/dump.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/dump.c 2016-02-02 19:53:13.000000000 +0000 @@ -1,3 +1,21 @@ +/* MDB Tools - A library for reading MS Access database files + * Copyright (C) 2000-2011 Brian Bruns and others + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + #include #include #include @@ -6,7 +24,7 @@ #include "dmalloc.h" #endif -void buffer_dump(const void* buf, int start, size_t len) +void mdb_buffer_dump(const void* buf, int start, size_t len) { char asc[20]; int j, k; diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/file.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/file.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/file.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/file.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,11 +12,11 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include "mdbtools.h" #ifdef DMALLOC @@ -35,7 +35,7 @@ guint16 tab_first_dpg_offset; guint16 tab_cols_start_offset; guint16 tab_ridx_entry_size; - guint16 col_fixed_offset; + guint16 col_flags_offset; guint16 col_size_offset; guint16 col_num_offset; guint16 tab_col_entry_size; @@ -52,8 +52,69 @@ 2048, 0x08, 12, 25, 27, 31, 35, 36, 43, 8, 13, 16, 1, 18, 39, 3, 14, 5 }; +typedef struct _RC4_KEY +{ + unsigned char state[256]; + unsigned char x; + unsigned char y; +} RC4_KEY; + +#define swap_byte(x,y) t = *(x); *(x) = *(y); *(y) = t + static ssize_t _mdb_read_pg(MdbHandle *mdb, void *pg_buf, unsigned long pg); +static void RC4_set_key(RC4_KEY *key, int key_data_len, unsigned char *key_data_ptr) +{ + unsigned char t; + unsigned char index1; + unsigned char index2; + unsigned char* state; + short counter; + + state = &key->state[0]; + for(counter = 0; counter < 256; counter++) + state[counter] = counter; + key->x = 0; + key->y = 0; + index1 = 0; + index2 = 0; + for(counter = 0; counter < 256; counter++) { + index2 = (key_data_ptr[index1] + state[counter] + index2) % 256; + swap_byte(&state[counter], &state[index2]); + index1 = (index1 + 1) % key_data_len; + } +} + +/* + * this algorithm does 'encrypt in place' instead of inbuff/outbuff + * note also: encryption and decryption use same routine + * implementation supplied by (Adam Back) at + */ + +static void RC4(RC4_KEY *key, int buffer_len, unsigned char * buff) +{ + unsigned char t; + unsigned char x; + unsigned char y; + unsigned char* state; + unsigned char xorIndex; + short counter; + + x = key->x; + y = key->y; + state = &key->state[0]; + for(counter = 0; counter < buffer_len; counter++) { + x = (x + 1) % 256; + y = (state[x] + y) % 256; + swap_byte(&state[x], &state[y]); + xorIndex = (state[x] + state[y]) % 256; + buff[counter] ^= state[xorIndex]; + } + key->x = x; + key->y = y; +} + + /** * mdb_find_file: * @filename: path to MDB (database) file @@ -73,7 +134,11 @@ /* try the provided file name first */ if (!stat(file_name, &status)) { - return g_strdup(file_name); + char *result; + result = g_strdup(file_name); + if (!result) + fprintf(stderr, "Can't alloc filename\n"); + return result; } /* Now pull apart $MDBPATH and try those */ @@ -134,6 +199,8 @@ MdbHandle *mdb_open(const char *filename, MdbFileFlags flags) { MdbHandle *mdb; + int key[] = {0x86, 0xfb, 0xec, 0x37, 0x5d, 0x44, 0x9c, 0xfa, 0xc6, 0x5e, 0x28, 0xe6, 0x13, 0xb6}; + int j, pos; int open_flags; mdb = (MdbHandle *) g_malloc0(sizeof(MdbHandle)); @@ -152,7 +219,7 @@ mdb->f->fd = -1; mdb->f->filename = mdb_find_file(filename); if (!mdb->f->filename) { - fprintf(stderr, "Can't alloc filename\n"); + fprintf(stderr, "File not found\n"); mdb_close(mdb); return NULL; } @@ -184,15 +251,56 @@ return NULL; } mdb->f->jet_version = mdb_get_int32(mdb->pg_buf, 0x14); - if (IS_JET4(mdb)) { - mdb->fmt = &MdbJet4Constants; - } else if (IS_JET3(mdb)) { + switch(mdb->f->jet_version) { + case MDB_VER_JET3: mdb->fmt = &MdbJet3Constants; - } else { + break; + case MDB_VER_JET4: + case MDB_VER_ACCDB_2007: + case MDB_VER_ACCDB_2010: + mdb->fmt = &MdbJet4Constants; + break; + default: fprintf(stderr,"Unknown Jet version.\n"); mdb_close(mdb); return NULL; } + mdb->f->db_key = mdb_get_int32(mdb->pg_buf, 0x3e); + /* I don't know if this value is valid for some versions? + * it doesn't seem to be valid for the databases I have + * + * f->db_key ^= 0xe15e01b9; + */ + mdb->f->db_key ^= 0x4ebc8afb; + /* fprintf(stderr, "Encrypted file, RC4 key seed= %d\n", mdb->f->db_key); */ + if (mdb->f->db_key) { + /* write is not supported for encrypted files yet */ + mdb->f->writable = FALSE; + /* that should be enought, but reopen the file read only just to be + * sure we don't write invalid data */ + close(mdb->f->fd); + open_flags = O_RDONLY; +#ifdef _WIN32 + open_flags |= O_BINARY; +#endif + mdb->f->fd = open(mdb->f->filename, open_flags); + if (mdb->f->fd==-1) { + fprintf(stderr, "Couldn't ropen file %s in read only\n", mdb->f->filename); + mdb_close(mdb); + return NULL; + } + } + + /* get the db password located at 0x42 bytes into the file */ + for (pos=0;pos<14;pos++) { + j = mdb_get_int32(mdb->pg_buf, 0x42+pos); + j ^= key[pos]; + if ( j != 0) + mdb->f->db_passwd[pos] = j; + else + mdb->f->db_passwd[pos] = '\0'; + } + mdb_iconv_init(mdb); return mdb; @@ -282,7 +390,7 @@ if (pg && mdb->cur_pg == pg) return mdb->fmt->pg_size; len = _mdb_read_pg(mdb, mdb->pg_buf, pg); - + //fprintf(stderr, "read page %d type %02x\n", pg, mdb->pg_buf[0]); mdb->cur_pg = pg; /* kan - reset the cur_pos on a new page read */ mdb->cur_pos = 0; /* kan */ @@ -303,7 +411,7 @@ fstat(mdb->f->fd, &status); if (status.st_size < offset) { - fprintf(stderr,"offset %lu is beyond EOF\n",offset); + fprintf(stderr,"offset %jd is beyond EOF\n",(intmax_t)offset); return 0; } #if !MDB_NO_STATS @@ -320,6 +428,18 @@ /* fprintf(stderr,"EOF reached %d bytes returned.\n",len, mdb->fmt->pg_size); */ return 0; } + /* + * unencrypt the page if necessary. + * it might make sense to cache the unencrypted data blocks? + */ + if (pg != 0 && mdb->f->db_key != 0) + { + RC4_KEY rc4_key; + unsigned int tmp_key = mdb->f->db_key ^ pg; + RC4_set_key(&rc4_key, 4, (unsigned char *)&tmp_key); + RC4(&rc4_key, mdb->fmt->pg_size, pg_buf); + } + return len; } void mdb_swap_pgbuf(MdbHandle *mdb) diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/iconv.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/iconv.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/iconv.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/iconv.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,13 +12,12 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include "mdbtools.h" -#include "errno.h" #ifdef DMALLOC #include "dmalloc.h" @@ -43,7 +42,7 @@ return 0; /* Uncompress 'Unicode Compressed' string into tmp */ - if (IS_JET4(mdb) && (slen>=2) + if (!IS_JET3(mdb) && (slen>=2) && ((src[0]&0xff)==0xff) && ((src[1]&0xff)==0xfe)) { unsigned int compress=1; src += 2; @@ -72,22 +71,25 @@ len_out = dlen; #if HAVE_ICONV - + //printf("1 len_in %d len_out %d\n",len_in, len_out); while (1) { iconv(mdb->iconv_in, &in_ptr, &len_in, &out_ptr, &len_out); if ((!len_in) || (errno == E2BIG)) break; /* Don't bail if impossible conversion is encountered */ - in_ptr += (IS_JET4(mdb)) ? 2 : 1; - len_in -= (IS_JET4(mdb)) ? 2 : 1; + in_ptr += (IS_JET3(mdb)) ? 1 : 2; + len_in -= (IS_JET3(mdb)) ? 1 : 2; *out_ptr++ = '?'; len_out--; } - + //printf("2 len_in %d len_out %d\n",len_in, len_out); dlen -= len_out; #else if (IS_JET3(mdb)) { - strncpy(out_ptr, in_ptr, len_in); - dlen = len_in; + size_t copy_len = len_in; + if (copy_len > dlen) + copy_len = dlen; + strncpy(out_ptr, in_ptr, copy_len); + dlen = copy_len; } else { /* rough UCS-2LE to ISO-8859-1 conversion */ unsigned int i; @@ -99,7 +101,7 @@ if (tmp) g_free(tmp); dest[dlen]='\0'; - + //printf("dest %s\n",dest); return dlen; } @@ -123,7 +125,7 @@ #ifdef HAVE_ICONV iconv(mdb->iconv_out, &in_ptr, &len_in, &out_ptr, &len_out); - + //printf("len_in %d len_out %d\n", len_in, len_out); dlen -= len_out; #else if (IS_JET3(mdb)) { @@ -141,7 +143,7 @@ #endif /* Unicode Compression */ - if(IS_JET4(mdb) && (dlen>4)) { + if(!IS_JET3(mdb) && (dlen>4)) { unsigned char *tmp = g_malloc(dlen); unsigned int tptr = 0, dptr = 0; int comp = 1; @@ -182,6 +184,21 @@ return dlen; } +const char* +mdb_target_charset(MdbHandle *mdb) +{ +#ifdef HAVE_ICONV + const char *iconv_code = getenv("MDBICONV"); + if (!iconv_code) + iconv_code = "UTF-8"; + return iconv_code; +#else + if (!IS_JET3(mdb)) + return "ISO-8859-1"; + return NULL; // same as input: unknown +#endif +} + void mdb_iconv_init(MdbHandle *mdb) { const char *iconv_code; @@ -192,10 +209,10 @@ } #ifdef HAVE_ICONV - if (IS_JET4(mdb)) { - mdb->iconv_out = iconv_open("UCS-2LE", iconv_code); - mdb->iconv_in = iconv_open(iconv_code, "UCS-2LE"); - } else { + if (!IS_JET3(mdb)) { + mdb->iconv_out = iconv_open("UCS-2LE", iconv_code); + mdb->iconv_in = iconv_open(iconv_code, "UCS-2LE"); + } else { /* According to Microsoft Knowledge Base pages 289525 and */ /* 202427, code page info is not contained in the database */ @@ -207,9 +224,10 @@ #ifdef _WIN32 // get the default from OS char default_encoding[] = "CP "; - if (GetLocaleInfoA( MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), SORT_DEFAULT), - LOCALE_IDEFAULTANSICODEPAGE, default_encoding+2, sizeof(default_encoding)-2-1 )) + if (GetLocaleInfoA( MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), SORT_DEFAULT), + LOCALE_IDEFAULTANSICODEPAGE, default_encoding+2, sizeof(default_encoding)-2-1 )) { mdb->jet3_iconv_code = g_strdup(default_encoding); + } else #endif mdb->jet3_iconv_code = g_strdup("CP1252"); @@ -223,7 +241,9 @@ void mdb_iconv_close(MdbHandle *mdb) { #ifdef HAVE_ICONV - if (mdb->iconv_out != (iconv_t)-1) iconv_close(mdb->iconv_out); - if (mdb->iconv_in != (iconv_t)-1) iconv_close(mdb->iconv_in); + if (mdb->iconv_out != (iconv_t)-1) iconv_close(mdb->iconv_out); + if (mdb->iconv_in != (iconv_t)-1) iconv_close(mdb->iconv_in); #endif } + + diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/index.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/index.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/index.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/index.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,9 +12,8 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "mdbtools.h" @@ -69,71 +68,95 @@ MdbHandle *mdb = entry->mdb; MdbFormatConstants *fmt = mdb->fmt; MdbIndex *pidx; - unsigned int i, j; - int idx_num, key_num, col_num; + unsigned int i, j, k; + int key_num, col_num, cleaned_col_num; int cur_pos, name_sz, idx2_sz, type_offset; int index_start_pg = mdb->cur_pg; gchar *tmpbuf; - table->indices = g_ptr_array_new(); + table->indices = g_ptr_array_new(); - if (IS_JET4(mdb)) { - cur_pos = table->index_start + 52 * table->num_real_idxs; - idx2_sz = 28; - type_offset = 23; - } else { + if (IS_JET3(mdb)) { cur_pos = table->index_start + 39 * table->num_real_idxs; idx2_sz = 20; type_offset = 19; + } else { + cur_pos = table->index_start + 52 * table->num_real_idxs; + idx2_sz = 28; + type_offset = 23; } + //fprintf(stderr, "num_idxs:%d num_real_idxs:%d\n", table->num_idxs, table->num_real_idxs); + /* num_real_idxs should be the number of indexes of type 2. + * It's not always the case. Happens on Northwind Orders table. + */ + table->num_real_idxs = 0; tmpbuf = (gchar *) g_malloc(idx2_sz); for (i=0;inum_idxs;i++) { read_pg_if_n(mdb, tmpbuf, &cur_pos, idx2_sz); pidx = (MdbIndex *) g_malloc0(sizeof(MdbIndex)); pidx->table = table; pidx->index_num = mdb_get_int16(tmpbuf, 4); - pidx->index_type = tmpbuf[type_offset]; + pidx->index_type = tmpbuf[type_offset]; g_ptr_array_add(table->indices, pidx); + /* + { + gint32 dumy0 = mdb_get_int32(tmpbuf, 0); + gint8 dumy1 = tmpbuf[8]; + gint32 dumy2 = mdb_get_int32(tmpbuf, 9); + gint32 dumy3 = mdb_get_int32(tmpbuf, 13); + gint16 dumy4 = mdb_get_int16(tmpbuf, 17); + fprintf(stderr, "idx #%d: num2:%d type:%d\n", i, pidx->index_num, pidx->index_type); + fprintf(stderr, "idx #%d: %d %d %d %d %d\n", i, dumy0, dumy1, dumy2, dumy3, dumy4); + }*/ + if (pidx->index_type!=2) + table->num_real_idxs++; } + //fprintf(stderr, "num_idxs:%d num_real_idxs:%d\n", table->num_idxs, table->num_real_idxs); g_free(tmpbuf); for (i=0;inum_idxs;i++) { pidx = g_ptr_array_index (table->indices, i); - if (IS_JET4(mdb)) { - name_sz=read_pg_if_16(mdb, &cur_pos); - } else { + if (IS_JET3(mdb)) { name_sz=read_pg_if_8(mdb, &cur_pos); + } else { + name_sz=read_pg_if_16(mdb, &cur_pos); } tmpbuf = g_malloc(name_sz); read_pg_if_n(mdb, tmpbuf, &cur_pos, name_sz); mdb_unicode2ascii(mdb, tmpbuf, name_sz, pidx->name, MDB_MAX_OBJ_NAME); g_free(tmpbuf); - + //fprintf(stderr, "index %d type %d name %s\n", pidx->index_num, pidx->index_type, pidx->name); } mdb_read_alt_pg(mdb, entry->table_pg); mdb_read_pg(mdb, index_start_pg); cur_pos = table->index_start; - idx_num=0; for (i=0;inum_real_idxs;i++) { - if (IS_JET4(mdb)) cur_pos += 4; - do { - pidx = g_ptr_array_index (table->indices, idx_num++); - } while (idx_num < table->num_real_idxs && pidx /*&& pidx != 0x736e6f6300616d65 && pidx!=(MdbIndex*)0xbaadf00d*/ /*(js) temp? hack*/&& pidx->index_type==2); - - /* if there are more real indexes than index entries left after - removing type 2's decrement real indexes and continue. Happens - on Northwind Orders table. - */ - if (idx_num == table->num_real_idxs || !pidx /*|| pidx==(MdbIndex*)0xbaadf00d*/ /*(js) temp? hack*/ /*|| pidx != 0x736e6f6300616d65*/) { - table->num_real_idxs--; + if (!IS_JET3(mdb)) cur_pos += 4; + /* look for index number i */ + for (j=0; jnum_idxs; ++j) { + pidx = g_ptr_array_index (table->indices, j); + if (pidx->index_type!=2 && pidx->index_num==i) + break; + } + if (j==table->num_idxs) { + fprintf(stderr, "ERROR: can't find index #%d.\n", i); continue; } + //fprintf(stderr, "index %d #%d (%s) index_type:%d\n", i, pidx->index_num, pidx->name, pidx->index_type); pidx->num_rows = mdb_get_int32(mdb->alt_pg_buf, fmt->tab_cols_start_offset + - (i*fmt->tab_ridx_entry_size)); + (pidx->index_num*fmt->tab_ridx_entry_size)); + /* + fprintf(stderr, "ridx block1 i:%d data1:0x%08x data2:0x%08x\n", + i, + mdb_get_int32(mdb->pg_buf, + fmt->tab_cols_start_offset + pidx->index_num * fmt->tab_ridx_entry_size), + mdb_get_int32(mdb->pg_buf, + fmt->tab_cols_start_offset + pidx->index_num * fmt->tab_ridx_entry_size +4)); + fprintf(stderr, "pidx->num_rows:%d\n", pidx->num_rows);*/ key_num=0; for (j=0;jnum_cols; k++) { + MdbColumn *col = g_ptr_array_index(table->columns,k); + if (col->col_num == col_num) { + cleaned_col_num = k; + break; + } + } + if (cleaned_col_num==-1) { + fprintf(stderr, "CRITICAL: can't find column with internal id %d in index %s\n", + col_num, pidx->name); + cur_pos++; + continue; + } /* set column number to a 1 based column number and store */ - pidx->key_col_num[key_num] = col_num + 1; + pidx->key_col_num[key_num] = cleaned_col_num + 1; pidx->key_col_order[key_num] = (read_pg_if_8(mdb, &cur_pos)) ? MDB_ASC : MDB_DESC; + //fprintf(stderr, "component %d using column #%d (internally %d)\n", j, cleaned_col_num, col_num); key_num++; } pidx->num_keys = key_num; cur_pos += 4; + //fprintf(stderr, "pidx->unknown_pre_first_pg:0x%08x\n", read_pg_if_32(mdb, &cur_pos)); pidx->first_pg = read_pg_if_32(mdb, &cur_pos); pidx->flags = read_pg_if_8(mdb, &cur_pos); - if (IS_JET4(mdb)) cur_pos += 9; + //fprintf(stderr, "pidx->first_pg:%d pidx->flags:0x%02x\n", pidx->first_pg, pidx->flags); + if (!IS_JET3(mdb)) cur_pos += 9; } return NULL; } @@ -185,7 +227,7 @@ void mdb_index_cache_sarg(MdbColumn *col, MdbSarg *sarg, MdbSarg *idx_sarg) { - + //guint32 cache_int; unsigned char *c; switch (col->col_type) { @@ -195,10 +237,10 @@ case MDB_LONGINT: idx_sarg->value.i = GUINT32_SWAP_LE_BE(sarg->value.i); - + //cache_int = sarg->value.i * -1; c = (unsigned char *) &(idx_sarg->value.i); c[0] |= 0x80; - + //printf("int %08x %02x %02x %02x %02x\n", sarg->value.i, c[0], c[1], c[2], c[3]); break; case MDB_INT: @@ -247,25 +289,25 @@ MdbSarg *sarg; MdbField field; MdbSargNode node; - + //int c_offset = 0, int c_len; - - - - + //fprintf(stderr,"mdb_index_test_sargs called on "); + //for (i=0;ipg_buf[offset+i]); + //fprintf(stderr,"\n"); for (i=0;inum_keys;i++) { - + //c_offset++; /* the per column null indicator/flags */ col=g_ptr_array_index(table->columns,idx->key_col_num[i]-1); /* * This will go away eventually */ if (col->col_type==MDB_TEXT) { - + //c_len = strlen(&mdb->pg_buf[offset + c_offset]); c_len = strlen(buf); } else { c_len = col->col_size; - + //fprintf(stderr,"Only text types currently supported. How did we get here?\n"); } /* * If we have no cached index values for this column, @@ -276,7 +318,7 @@ for (j=0;jnum_sargs;j++) { sarg = g_ptr_array_index (col->sargs, j); idx_sarg = g_memdup(sarg,sizeof(MdbSarg)); - + //printf("calling mdb_index_cache_sarg\n"); mdb_index_cache_sarg(col, sarg, idx_sarg); g_ptr_array_add(col->idx_sarg_cache, idx_sarg); } @@ -287,7 +329,7 @@ /* XXX - kludge */ node.op = sarg->op; node.value = sarg->value; - + //field.value = &mdb->pg_buf[offset + c_offset]; field.value = buf; field.siz = c_len; field.is_null = FALSE; @@ -314,9 +356,9 @@ start = ipg->idx_starts[elem++]; while (start) { - + //fprintf(stdout, "elem %d is %d\n", elem, ipg->idx_starts[elem]); len = ipg->idx_starts[elem] - start; - + //fprintf(stdout, "len is %d\n", len); for (i=0; i < len; i++) { mask_bit++; if (mask_bit==8) { @@ -327,7 +369,7 @@ /* upon reaching the len, set the bit */ } mask_byte = (1 << mask_bit) | mask_byte; - + //fprintf(stdout, "mask byte is %02x at %d\n", mask_byte, mask_pos); start = ipg->idx_starts[elem++]; } /* flush the last byte if any */ @@ -353,7 +395,7 @@ ipg->idx_starts[elem++]=start; - + //fprintf(stdout, "Unpacking index page %lu\n", ipg->pg); do { len = 0; do { @@ -365,7 +407,7 @@ mask_byte = mdb->pg_buf[mask_pos]; len++; } while (mask_pos <= 0xf8 && !((1 << mask_bit) & mask_byte)); - + //fprintf(stdout, "%d %d %d %d\n", mask_pos, mask_bit, mask_byte, len); start += len; if (mask_pos < 0xf8) ipg->idx_starts[elem++]=start; @@ -388,7 +430,7 @@ /* if this page has not been unpacked to it */ if (!ipg->idx_starts[0]){ - + //fprintf(stdout, "Unpacking page %d\n", ipg->pg); mdb_index_unpack_bitmap(mdb, ipg); } @@ -396,7 +438,7 @@ if (ipg->idx_starts[ipg->start_pos + 1]==0) return 0; ipg->len = ipg->idx_starts[ipg->start_pos+1] - ipg->idx_starts[ipg->start_pos]; ipg->start_pos++; - + //fprintf(stdout, "Start pos %d\n", ipg->start_pos); return ipg->len; } @@ -443,13 +485,13 @@ */ do { ipg->len = 0; - + //printf("finding next on pg %lu\n", ipg->pg); if (!mdb_index_find_next_on_page(mdb, ipg)) { - + //printf("find_next_on_page returned 0\n"); return 0; } pg = mdb_get_int32_msb(mdb->pg_buf, ipg->offset + ipg->len - 3) >> 8; - + //printf("Looking at pg %lu at %lu %d\n", pg, ipg->offset, ipg->len); ipg->offset += ipg->len; /* @@ -458,7 +500,7 @@ */ newipg = mdb_chain_add_page(mdb, chain, pg); newipg = mdb_find_next_leaf(mdb, idx, chain); - + //printf("returning pg %lu\n",newipg->pg); return newipg; } while (!passed); /* no more pages */ @@ -517,9 +559,9 @@ { MdbIndexPage *ipg; - + //printf("page %lu finished\n",ipg->pg); if (chain->cur_depth==1) { - + //printf("cur_depth == 1 we're out\n"); return NULL; } /* @@ -528,13 +570,13 @@ */ ipg = NULL; while (chain->cur_depth>1 && ipg==NULL) { - + //printf("chain depth %d\n", chain->cur_depth); chain->cur_depth--; ipg = mdb_find_next_leaf(mdb, idx, chain); if (ipg) mdb_index_find_next_on_page(mdb, ipg); } if (chain->cur_depth==1) { - + //printf("last leaf %lu\n", chain->last_leaf_found); return NULL; } return ipg; @@ -577,20 +619,20 @@ chain->clean_up_mode = 1; } if (chain->clean_up_mode) { - + //fprintf(stdout,"in cleanup mode\n"); if (!chain->last_leaf_found) return 0; mdb_read_pg(mdb, chain->last_leaf_found); chain->last_leaf_found = mdb_get_int32( mdb->pg_buf, 0x0c); - + //printf("next leaf %lu\n", chain->last_leaf_found); mdb_read_pg(mdb, chain->last_leaf_found); /* reuse the chain for cleanup mode */ chain->cur_depth = 1; ipg = &chain->pages[0]; mdb_index_page_init(ipg); ipg->pg = chain->last_leaf_found; - + //printf("next on page %d\n", if (!mdb_index_find_next_on_page(mdb, ipg)) return 0; } @@ -598,28 +640,28 @@ pg_row = mdb_get_int32_msb(mdb->pg_buf, ipg->offset + ipg->len - 4); *row = pg_row & 0xff; *pg = pg_row >> 8; - + //printf("row = %d pg = %lu ipg->pg = %lu offset = %lu len = %d\n", *row, *pg, ipg->pg, ipg->offset, ipg->len); col=g_ptr_array_index(idx->table->columns,idx->key_col_num[0]-1); idx_sz = mdb_col_fixed_size(col); /* handle compressed indexes, single key indexes only? */ if (idx->num_keys==1 && idx_sz>0 && ipg->len - 4 < idx_sz) { - - + //printf("short index found\n"); + //mdb_buffer_dump(ipg->cache_value, 0, idx_sz); memcpy(&ipg->cache_value[idx_sz - (ipg->len - 4)], &mdb->pg_buf[ipg->offset], ipg->len); - + //mdb_buffer_dump(ipg->cache_value, 0, idx_sz); } else { idx_start = ipg->offset + (ipg->len - 4 - idx_sz); memcpy(ipg->cache_value, &mdb->pg_buf[idx_start], idx_sz); } - + //idx_start = ipg->offset + (ipg->len - 4 - idx_sz); passed = mdb_index_test_sargs(mdb, idx, (char *)(ipg->cache_value), idx_sz); ipg->offset += ipg->len; } while (!passed); - - + //fprintf(stdout,"len = %d pos %d\n", ipg->len, ipg->mask_pos); + //mdb_buffer_dump(mdb->pg_buf, ipg->offset, ipg->len); return ipg->len; } @@ -677,11 +719,12 @@ void mdb_index_walk(MdbTableDef *table, MdbIndex *idx) { -MdbHandle *mdb = table->entry->mdb; -int cur_pos = 0; -unsigned char marker; -MdbColumn *col; -unsigned int i; +/* + MdbHandle *mdb = table->entry->mdb; + int cur_pos = 0; + unsigned char marker; + MdbColumn *col; + unsigned int i; if (idx->num_keys!=1) return; @@ -691,8 +734,9 @@ for (i=0;inum_keys;i++) { marker = mdb->pg_buf[cur_pos++]; col=g_ptr_array_index(table->columns,idx->key_col_num[i]-1); - + //printf("column %d coltype %d col_size %d (%d)\n",i,col->col_type, mdb_col_fixed_size(col), col->col_size); } +*/ } void mdb_index_dump(MdbTableDef *table, MdbIndex *idx) @@ -759,7 +803,7 @@ */ if (idx->flags & MDB_IDX_UNIQUE) { if (idx->num_keys == 1) { - + //printf("op is %d\n", sarg->op); switch (sarg->op) { case MDB_EQUAL: return 1; break; @@ -831,7 +875,7 @@ for (i=0;inum_idxs;i++) { idx = g_ptr_array_index (table->indices, i); cost = mdb_index_compute_cost(table, idx); - + //printf("cost for %s is %d\n", idx->name, cost); if (cost && cost < least) { least = cost; *choice = i; @@ -852,9 +896,9 @@ table->chain = g_malloc0(sizeof(MdbIndexChain)); table->mdbidx = mdb_clone_handle(mdb); mdb_read_pg(table->mdbidx, table->scan_idx->first_pg); - + //printf("best index is %s\n",table->scan_idx->name); } - + //printf("TABLE SCAN? %d\n", table->strategy); } void mdb_index_scan_free(MdbTableDef *table) diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/like.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/like.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/like.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/like.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,14 +12,13 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include -#include +#include "mdbtools.h" #ifdef DMALLOC #include "dmalloc.h" diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/map.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/map.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/map.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/map.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,9 +12,8 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "mdbtools.h" @@ -23,7 +22,7 @@ #include "dmalloc.h" #endif -static guint32 +static gint32 mdb_map_find_next0(MdbHandle *mdb, unsigned char *map, unsigned int map_sz, guint32 start_pg) { guint32 pgnum, i, usage_bitlen; @@ -42,7 +41,7 @@ /* didn't find anything */ return 0; } -static int +static gint32 mdb_map_find_next1(MdbHandle *mdb, unsigned char *map, unsigned int map_sz, guint32 start_pg) { guint32 map_ind, max_map_pgs, offset, usage_bitlen; @@ -83,7 +82,10 @@ /* didn't find anything */ return 0; } -guint32 + +/* returns 0 on EOF */ +/* returns -1 on error (unsupported map type) */ +gint32 mdb_map_find_next(MdbHandle *mdb, unsigned char *map, unsigned int map_sz, guint32 start_pg) { if (map[0] == 0) { @@ -114,11 +116,14 @@ pgnum = mdb_map_find_next(mdb, table->free_usage_map, table->freemap_sz, cur_pg); - + //printf("looking at page %d\n", pgnum); if (!pgnum) { /* allocate new page */ pgnum = mdb_alloc_page(table); return pgnum; + } else if (pgnum==-1) { + fprintf(stderr, "Error: mdb_map_find_next_freepage error while reading maps.\n"); + exit(1); } cur_pg = pgnum; @@ -127,7 +132,7 @@ } while (free_space < row_size); - + //printf("page %d has %d bytes left\n", pgnum, free_space); return pgnum; } diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/mem.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/mem.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/mem.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/mem.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,45 +12,20 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifdef JAVA -#include "javadefines.h" -#else + #include "mdbtools.h" -#include -#ifdef DMALLOC -#include "dmalloc.h" -#endif -#endif /* JAVA */ -/** - * mdb_init: - * - * Initializes the LibMDB library. This function should be called exactly once - * by calling program and prior to any other function. - * - **/ -/* METHOD */ void mdb_init() +MDB_DEPRECATED(void, +mdb_init()) { -#if !MDB_NO_BACKENDS - mdb_init_backends(); -#endif + fprintf(stderr, "mdb_init() is DEPRECATED and does nothing. Stop calling it.\n"); } -/** - * mdb_exit: - * - * Cleans up the LibMDB library. This function should be called exactly once - * by the calling program prior to exiting (or prior to final use of LibMDB - * functions). - * - **/ -/* METHOD */ void mdb_exit() +MDB_DEPRECATED(void, +mdb_exit()) { -#if !MDB_NO_BACKENDS - mdb_remove_backends(); -#endif + fprintf(stderr, "mdb_exit() is DEPRECATED and does nothing. Stop calling it.\n"); } diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/money.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/money.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/money.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/money.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,9 +12,8 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include @@ -24,10 +23,10 @@ #include "dmalloc.h" #endif -#define MAXPRECISION 19 +#define MAX_NUMERIC_PRECISION 28 /* ** these routines are copied from the freetds project which does something -** very similar +** very similiar */ static int multiply_byte(unsigned char *product, int num, unsigned char *multiplier); @@ -43,41 +42,70 @@ */ char *mdb_money_to_string(MdbHandle *mdb, int start) { - #define num_bytes 8 + int num_bytes=8, scale=4; int i; int neg=0; - unsigned char multiplier[MAXPRECISION], temp[MAXPRECISION]; - unsigned char product[MAXPRECISION]; - unsigned char money[num_bytes]; + unsigned char multiplier[MAX_NUMERIC_PRECISION], temp[MAX_NUMERIC_PRECISION]; + unsigned char product[MAX_NUMERIC_PRECISION]; + unsigned char bytes[num_bytes]; - memset(multiplier,0,MAXPRECISION); - memset(product,0,MAXPRECISION); + memset(multiplier,0,MAX_NUMERIC_PRECISION); + memset(product,0,MAX_NUMERIC_PRECISION); multiplier[0]=1; - memcpy(money, mdb->pg_buf + start, num_bytes); + memcpy(bytes, mdb->pg_buf + start, num_bytes); /* Perform two's complement for negative numbers */ - if (money[7] & 0x80) { + if (bytes[num_bytes-1] & 0x80) { neg = 1; for (i=0;ipg_buf + start + 1, num_bytes); + + /* Perform two's complement for negative numbers */ + if (mdb->pg_buf[start] & 0x80) neg = 1; + for (i=0;i9) { product[j+1]+=product[j]/10; product[j]=product[j]%10; @@ -117,9 +145,10 @@ char *s; unsigned int top, i, j=0; - for (top=MAXPRECISION;(top>0) && (top-1>scale) && !array[top-1];top--); + for (top=MAX_NUMERIC_PRECISION;(top>0) && (top-1>scale) && !array[top-1];top--); - s = (char *) g_malloc(22); + /* allocate enough space for all digits + minus sign + decimal point + trailing NULL byte */ + s = (char *) g_malloc(MAX_NUMERIC_PRECISION+3); if (neg) s[j++] = '-'; diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/options.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/options.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/options.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/options.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,17 +12,15 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include - -#include +#include "mdbtools.h" #ifdef DMALLOC #include "dmalloc.h" @@ -36,17 +34,17 @@ static void load_options(); void -mdb_debug(int klass, char *fmt, ...) +mdb_debug(int klass, const char *fmt, ...) { #ifdef DEBUG va_list ap; if (!optset) load_options(); - if (klass & opts) { - va_start(ap, fmt); - vfprintf (stdout,fmt, ap); - va_end(ap); - fprintf(stdout,"\n"); + if (klass & opts) { + va_start(ap, fmt); + vfprintf (stderr,fmt, ap); + va_end(ap); + fprintf(stderr,"\n"); } #endif } @@ -57,26 +55,28 @@ char *opt; char *s; - if (!optset && (s=getenv("MDBOPTS"))) { + if (!optset && (s=getenv("MDBOPTS"))) { opt = strtok(s, ":"); - do { - if (!strcmp(opt, "use_index")) opts |= MDB_USE_INDEX; - if (!strcmp(opt, "no_memo")) opts |= MDB_NO_MEMO; - if (!strcmp(opt, "debug_like")) opts |= MDB_DEBUG_LIKE; - if (!strcmp(opt, "debug_write")) opts |= MDB_DEBUG_WRITE; - if (!strcmp(opt, "debug_usage")) opts |= MDB_DEBUG_USAGE; - if (!strcmp(opt, "debug_ole")) opts |= MDB_DEBUG_OLE; - if (!strcmp(opt, "debug_row")) opts |= MDB_DEBUG_ROW; - if (!strcmp(opt, "debug_all")) { + while (opt) { + if (!strcmp(opt, "use_index")) opts |= MDB_USE_INDEX; + if (!strcmp(opt, "no_memo")) opts |= MDB_NO_MEMO; + if (!strcmp(opt, "debug_like")) opts |= MDB_DEBUG_LIKE; + if (!strcmp(opt, "debug_write")) opts |= MDB_DEBUG_WRITE; + if (!strcmp(opt, "debug_usage")) opts |= MDB_DEBUG_USAGE; + if (!strcmp(opt, "debug_ole")) opts |= MDB_DEBUG_OLE; + if (!strcmp(opt, "debug_row")) opts |= MDB_DEBUG_ROW; + if (!strcmp(opt, "debug_props")) opts |= MDB_DEBUG_PROPS; + if (!strcmp(opt, "debug_all")) { opts |= MDB_DEBUG_LIKE; opts |= MDB_DEBUG_WRITE; opts |= MDB_DEBUG_USAGE; opts |= MDB_DEBUG_OLE; opts |= MDB_DEBUG_ROW; + opts |= MDB_DEBUG_PROPS; } opt = strtok(NULL,":"); - } while (opt); - } + } + } optset = 1; } int diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/props.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/props.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/props.c 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/props.c 2016-02-02 19:53:13.000000000 +0000 @@ -0,0 +1,215 @@ +/* MDB Tools - A library for reading MS Access database file + * Copyright (C) 2000-2011 Brian Bruns and others + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "mdbtools.h" + +static GPtrArray * +mdb_read_props_list(MdbHandle *mdb, gchar *kkd, int len) +{ + guint32 record_len; + int pos = 0; + gchar *name; + GPtrArray *names = NULL; + int i=0; + + names = g_ptr_array_new(); +#if MDB_DEBUG + mdb_buffer_dump(kkd, 0, len); +#endif + pos = 0; + while (pos < len) { + record_len = mdb_get_int16(kkd, pos); + pos += 2; + if (mdb_get_option(MDB_DEBUG_PROPS)) { + fprintf(stderr, "%02d ",i++); + mdb_buffer_dump(kkd, pos - 2, record_len + 2); + } + name = g_malloc(3*record_len + 1); /* worst case scenario is 3 bytes out per byte in */ + mdb_unicode2ascii(mdb, &kkd[pos], record_len, name, 3*record_len); + + pos += record_len; + g_ptr_array_add(names, name); +#if MDB_DEBUG + printf("new len = %d\n", names->len); +#endif + } + return names; +} +static gboolean +free_hash_entry(gpointer key, gpointer value, gpointer user_data) +{ + g_free(key); + g_free(value); + return TRUE; +} +void +mdb_free_props(MdbProperties *props) +{ + if (!props) return; + + if (props->name) g_free(props->name); + if (props->hash) { + g_hash_table_foreach(props->hash, (GHFunc)free_hash_entry, 0); + g_hash_table_destroy(props->hash); + } + g_free(props); +} + +static void +free_names(GPtrArray *names) { + g_ptr_array_foreach(names, (GFunc)g_free, NULL); + g_ptr_array_free(names, TRUE); +} +MdbProperties * +mdb_alloc_props() +{ + MdbProperties *props; + + props = g_malloc0(sizeof(MdbProperties)); + + return props; +} +static MdbProperties * +mdb_read_props(MdbHandle *mdb, GPtrArray *names, gchar *kkd, int len) +{ + guint32 record_len, name_len; + int pos = 0; + int elem, dtype, dsize; + gchar *name, *value; + MdbProperties *props; + int i=0; + +#if MDB_DEBUG + mdb_buffer_dump(kkd, 0, len); +#endif + pos = 0; + + record_len = mdb_get_int16(kkd, pos); + pos += 4; + name_len = mdb_get_int16(kkd, pos); + pos += 2; + props = mdb_alloc_props(); + if (name_len) { + props->name = g_malloc(3*name_len + 1); + mdb_unicode2ascii(mdb, kkd+pos, name_len, props->name, 3*name_len); + mdb_debug(MDB_DEBUG_PROPS,"prop block named: %s", props->name); + } + pos += name_len; + + props->hash = g_hash_table_new(g_str_hash, g_str_equal); + + while (pos < len) { + record_len = mdb_get_int16(kkd, pos); + dtype = kkd[pos + 3]; + elem = mdb_get_int16(kkd, pos + 4); + dsize = mdb_get_int16(kkd, pos + 6); + value = g_malloc(dsize + 1); + strncpy(value, &kkd[pos + 8], dsize); + value[dsize] = '\0'; + name = g_ptr_array_index(names,elem); + if (mdb_get_option(MDB_DEBUG_PROPS)) { + fprintf(stderr, "%02d ",i++); + mdb_debug(MDB_DEBUG_PROPS,"elem %d (%s) dsize %d dtype %d", elem, name, dsize, dtype); + mdb_buffer_dump(value, 0, dsize); + } + if (dtype == MDB_MEMO) dtype = MDB_TEXT; + if (dtype == MDB_BOOL) { + g_hash_table_insert(props->hash, g_strdup(name), + g_strdup(kkd[pos + 8] ? "yes" : "no")); + } else { + g_hash_table_insert(props->hash, g_strdup(name), + mdb_col_to_string(mdb, kkd, pos + 8, dtype, dsize)); + } + g_free(value); + pos += record_len; + } + return props; + +} + +static void +print_keyvalue(gpointer key, gpointer value, gpointer outfile) +{ + fprintf((FILE*)outfile,"\t%s: %s\n", (gchar *)key, (gchar *)value); +} +void +mdb_dump_props(MdbProperties *props, FILE *outfile, int show_name) { + if (show_name) + fprintf(outfile,"name: %s\n", props->name ? props->name : "(none)"); + g_hash_table_foreach(props->hash, print_keyvalue, outfile); + if (show_name) + fputc('\n', outfile); +} + +/* + * That function takes a raw KKD/MR2 binary buffer, + * typically read from LvProp in table MSysbjects + * and returns a GArray of MdbProps* + */ +GArray* +mdb_kkd_to_props(MdbHandle *mdb, void *buffer, size_t len) { + guint32 record_len; + guint16 record_type; + size_t pos; + GPtrArray *names = NULL; + MdbProperties *props; + GArray *result; + +#if MDB_DEBUG + mdb_buffer_dump(buffer, 0, len); +#endif + mdb_debug(MDB_DEBUG_PROPS,"starting prop parsing of type %s", buffer); + + if (strcmp("KKD", buffer) && strcmp("MR2", buffer)) { + fprintf(stderr, "Unrecognized format.\n"); + mdb_buffer_dump(buffer, 0, len); + return NULL; + } + + result = g_array_new(0, 0, sizeof(MdbProperties*)); + + pos = 4; + while (pos < len) { + record_len = mdb_get_int32(buffer, pos); + record_type = mdb_get_int16(buffer, pos + 4); + mdb_debug(MDB_DEBUG_PROPS,"prop chunk type:0x%04x len:%d", record_type, record_len); + //mdb_buffer_dump(buffer, pos+4, record_len); + switch (record_type) { + case 0x80: + if (names) free_names(names); + names = mdb_read_props_list(mdb, buffer+pos+6, record_len - 6); + break; + case 0x00: + case 0x01: + if (!names) { + fprintf(stderr,"sequence error!\n"); + break; + } + props = mdb_read_props(mdb, names, buffer+pos+6, record_len - 6); + g_array_append_val(result, props); + //mdb_dump_props(props, stderr, 1); + break; + default: + fprintf(stderr,"Unknown record type %d\n", record_type); + break; + } + pos += record_len; + } + if (names) free_names(names); + return result; +} diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/sargs.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/sargs.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/sargs.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/sargs.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,9 +12,8 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* @@ -27,8 +26,9 @@ * datatype support is a bit weak at this point. To add more types create * a mdb_test_[type]() function and invoke it from mdb_test_sarg() */ -#include "mdbtools.h" +#include +#include "mdbtools.h" #ifdef DMALLOC #include "dmalloc.h" #endif @@ -76,7 +76,7 @@ { switch (node->op) { case MDB_EQUAL: - + //fprintf(stderr, "comparing %ld and %ld\n", i, node->value.i); if (node->value.i == i) return 1; break; case MDB_GT: @@ -97,8 +97,51 @@ } return 0; } -#if 0 -#endif + +int +mdb_test_date(MdbSargNode *node, double td) +{ + struct tm found; + /* TODO: you should figure out a way to pull mdb_date_to_string in here + * char date_tmp[MDB_BIND_SIZE]; + */ + + time_t found_t; + time_t asked_t; + + double diff; + + mdb_date_to_tm(td, &found); + + asked_t = node->value.i; + found_t = mktime(&found); + + diff = difftime(asked_t, found_t); + + switch (node->op) { + case MDB_EQUAL: + if (diff==0) return 1; + break; + case MDB_GT: + if (diff<0) return 1; + break; + case MDB_LT: + if (diff>0) return 1; + break; + case MDB_GTEQ: + if (diff<=0) return 1; + break; + case MDB_LTEQ: + if (diff>=0) return 1; + break; + default: + fprintf(stderr, "Calling mdb_test_sarg on unknown operator. Add code to mdb_test_date() for operator %d\n", node->op); + break; + } + return 0; +} + + int mdb_find_indexable_sargs(MdbSargNode *node, gpointer data) { @@ -120,7 +163,7 @@ * probably better off table scanning. */ if (mdb_is_relational_op(node->op) && node->col) { - + //printf("op = %d value = %s\n", node->op, node->value.s); sarg.op = node->op; sarg.value = node->value; mdb_add_sarg(node->col, &sarg); @@ -155,6 +198,8 @@ case MDB_TEXT: mdb_unicode2ascii(mdb, field->value, field->siz, tmpbuf, 256); return mdb_test_string(node, tmpbuf); + case MDB_DATETIME: + return mdb_test_date(node, mdb_get_double(field->value, 0)); default: fprintf(stderr, "Calling mdb_test_sarg on unknown type. Add code to mdb_test_sarg() for type %d\n",col->col_type); break; diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/stats.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/stats.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/stats.c 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/stats.c 2016-02-02 19:53:13.000000000 +0000 @@ -0,0 +1,77 @@ +/* MDB Tools - A library for reading MS Access database files + * Copyright (C) 2000 Brian Bruns + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "mdbtools.h" + +#if !MDB_NO_STATS + +#ifdef DMALLOC +#include "dmalloc.h" +#endif + +/** + * mdb_stats_on: + * @mdb: Handle to the (open) MDB file to collect stats on. + * + * Begins collection of statistics on an MDBHandle. + * + * Statistics in LibMDB will track the number of reads from the MDB file. The + * collection of statistics is started and stopped with the mdb_stats_on and + * mdb_stats_off functions. Collected statistics are accessed by reading the + * MdbStatistics structure or calling mdb_dump_stats. + * + */ +void +mdb_stats_on(MdbHandle *mdb) +{ + if (!mdb->stats) + mdb->stats = g_malloc0(sizeof(MdbStatistics)); + + mdb->stats->collect = TRUE; +} +/** + * mdb_stats_off: + * @mdb: pointer to handle of MDB file with active stats collection. + * + * Turns off statistics collection. + * + * If mdb_stats_off is not called, statistics will be turned off when handle + * is freed using mdb_close. + **/ +void +mdb_stats_off(MdbHandle *mdb) +{ + if (!mdb->stats) return; + + mdb->stats->collect = FALSE; +} +/** + * mdb_dump_stats: + * @mdb: pointer to handle of MDB file with active stats collection. + * + * Dumps current statistics to stdout. + **/ +void +mdb_dump_stats(MdbHandle *mdb) +{ + if (!mdb->stats) return; + + fprintf(stdout, "Physical Page Reads: %lu\n", mdb->stats->pg_reads); +} + +#endif /* !MDB_NO_STATS */ diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/table.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/table.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/table.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/table.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,9 +12,8 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "mdbtools.h" @@ -76,15 +75,16 @@ MdbTableDef *table; MdbHandle *mdb = entry->mdb; MdbFormatConstants *fmt = mdb->fmt; - int len, row_start, pg_row; + int row_start, pg_row; void *buf, *pg_buf = mdb->pg_buf; + guint i; mdb_read_pg(mdb, entry->table_pg); if (mdb_get_byte(pg_buf, 0) != 0x02) /* not a valid table def page */ return NULL; table = mdb_alloc_tabledef(entry); - len = mdb_get_int16(pg_buf, 8); + mdb_get_int16(pg_buf, 8); /* len */ table->num_rows = mdb_get_int32(pg_buf, fmt->tab_num_rows_offset); table->num_var_cols = mdb_get_int16(pg_buf, fmt->tab_num_cols_offset-2); @@ -97,7 +97,7 @@ mdb_find_pg_row(mdb, pg_row, &buf, &row_start, &(table->map_sz)); table->usage_map = g_memdup((char*)buf + row_start, table->map_sz); if (mdb_get_option(MDB_DEBUG_USAGE)) - buffer_dump(buf, row_start, table->map_sz); + mdb_buffer_dump(buf, row_start, table->map_sz); mdb_debug(MDB_DEBUG_USAGE,"usage map found on page %ld row %d start %d len %d", pg_row >> 8, pg_row & 0xff, row_start, table->map_sz); @@ -110,6 +110,13 @@ table->first_data_pg = mdb_get_int16(pg_buf, fmt->tab_first_dpg_offset); + if (entry->props) + for (i=0; iprops->len; ++i) { + MdbProperties *props = g_array_index(entry->props, MdbProperties*, i); + if (!props->name) + table->props = props; + } + return table; } MdbTableDef *mdb_read_table_by_name(MdbHandle *mdb, gchar *table_name, int obj_type) @@ -161,7 +168,6 @@ void * read_pg_if_n(MdbHandle *mdb, void *buf, int *cur_pos, size_t len) { - char *buf_char = (char *)buf; /* Advance to page which contains the first byte */ while (*cur_pos >= mdb->fmt->pg_size) { mdb_read_pg(mdb, mdb_get_int32(mdb->pg_buf,4)); @@ -170,20 +176,20 @@ /* Copy pages into buffer */ while (*cur_pos + len >= mdb->fmt->pg_size) { int piece_len = mdb->fmt->pg_size - *cur_pos; - if (buf_char) { - memcpy(buf_char, mdb->pg_buf + *cur_pos, piece_len); - buf_char += piece_len; + if (buf) { + memcpy(buf, mdb->pg_buf + *cur_pos, piece_len); + buf += piece_len; } len -= piece_len; mdb_read_pg(mdb, mdb_get_int32(mdb->pg_buf,4)); *cur_pos = 8; } /* Copy into buffer from final page */ - if (len && buf_char) { - memcpy(buf_char, mdb->pg_buf + *cur_pos, len); + if (len && buf) { + memcpy(buf, mdb->pg_buf + *cur_pos, len); } *cur_pos += len; - return buf_char; + return buf; } @@ -193,11 +199,20 @@ } void mdb_free_columns(GPtrArray *columns) { - unsigned int i; + unsigned int i, j; + MdbColumn *col; if (!columns) return; - for (i=0; ilen; i++) - g_free (g_ptr_array_index(columns, i)); + for (i=0; ilen; i++) { + col = (MdbColumn *) g_ptr_array_index(columns, i); + if (col->sargs) { + for (j=0; jsargs->len; j++) { + g_free( g_ptr_array_index(col->sargs, j)); + } + g_ptr_array_free(col->sargs, TRUE); + } + g_free(col); + } g_ptr_array_free(columns, TRUE); } GPtrArray *mdb_read_columns(MdbTableDef *table) @@ -206,9 +221,10 @@ MdbFormatConstants *fmt = mdb->fmt; MdbColumn *pcol; unsigned char *col; - unsigned int i; + unsigned int i, j; int cur_pos; size_t name_sz; + GArray *allprops; table->columns = g_ptr_array_new(); @@ -225,24 +241,26 @@ for (i=0;inum_cols;i++) { #ifdef MDB_DEBUG /* printf("column %d\n", i); - buffer_dump(mdb->pg_buf, cur_pos, fmt->tab_col_entry_size); */ + mdb_buffer_dump(mdb->pg_buf, cur_pos, fmt->tab_col_entry_size); */ #endif read_pg_if_n(mdb, col, &cur_pos, fmt->tab_col_entry_size); pcol = (MdbColumn *) g_malloc0(sizeof(MdbColumn)); + pcol->table = table; + pcol->col_type = col[0]; - + // col_num_offset == 1 or 5 pcol->col_num = col[fmt->col_num_offset]; - - + //fprintf(stdout,"----- column %d -----\n",pcol->col_num); + // col_var == 3 or 7 pcol->var_col_num = mdb_get_int16(col, fmt->tab_col_offset_var); - + //fprintf(stdout,"var column pos %d\n",pcol->var_col_num); - + // col_var == 5 or 9 pcol->row_col_num = mdb_get_int16(col, fmt->tab_row_col_num_offset); - + //fprintf(stdout,"row column num %d\n",pcol->row_col_num); /* FIXME: can this be right in Jet3 and Jet4? */ if (pcol->col_type == MDB_NUMERIC) { @@ -250,16 +268,18 @@ pcol->col_scale = col[12]; } - - pcol->is_fixed = col[fmt->col_fixed_offset] & 0x01 ? 1 : 0; + // col_flags_offset == 13 or 15 + pcol->is_fixed = col[fmt->col_flags_offset] & 0x01 ? 1 : 0; + pcol->is_long_auto = col[fmt->col_flags_offset] & 0x04 ? 1 : 0; + pcol->is_uuid_auto = col[fmt->col_flags_offset] & 0x40 ? 1 : 0; - + // tab_col_offset_fixed == 14 or 21 pcol->fixed_offset = mdb_get_int16(col, fmt->tab_col_offset_fixed); - - + //fprintf(stdout,"fixed column offset %d\n",pcol->fixed_offset); + //fprintf(stdout,"col type %s\n",pcol->is_fixed ? "fixed" : "variable"); if (pcol->col_type != MDB_BOOL) { - + // col_size_offset == 16 or 23 pcol->col_size = mdb_get_int16(col, fmt->col_size_offset); } else { pcol->col_size=0; @@ -277,24 +297,34 @@ char *tmp_buf; pcol = g_ptr_array_index(table->columns, i); - if (IS_JET4(mdb)) { - name_sz = read_pg_if_16(mdb, &cur_pos); - } else if (IS_JET3(mdb)) { + if (IS_JET3(mdb)) name_sz = read_pg_if_8(mdb, &cur_pos); - } else { - fprintf(stderr,"Unknown MDB version\n"); - continue; - } + else + name_sz = read_pg_if_16(mdb, &cur_pos); tmp_buf = (char *) g_malloc(name_sz); read_pg_if_n(mdb, tmp_buf, &cur_pos, name_sz); mdb_unicode2ascii(mdb, tmp_buf, name_sz, pcol->name, MDB_MAX_OBJ_NAME); g_free(tmp_buf); + } /* Sort the columns by col_num */ g_ptr_array_sort(table->columns, (GCompareFunc)mdb_col_comparer); + allprops = table->entry->props; + if (allprops) + for (i=0;inum_cols;i++) { + pcol = g_ptr_array_index(table->columns, i); + for (j=0; jlen; ++j) { + MdbProperties *props = g_array_index(allprops, MdbProperties*, j); + if (props->name && pcol->name && !strcmp(props->name, pcol->name)) { + pcol->props = props; + break; + } + + } + } table->index_start = cur_pos; return table->columns; } @@ -306,7 +336,6 @@ MdbColumn *col; int coln; MdbIndex *idx; -MdbHandle *mdb = entry->mdb; unsigned int i, bitn; guint32 pgnum; @@ -316,6 +345,8 @@ fprintf(stdout,"number of columns = %d\n",table->num_cols); fprintf(stdout,"number of indices = %d\n",table->num_real_idxs); + if (table->props) + mdb_dump_props(table->props, stdout, 0); mdb_read_columns(table); mdb_read_indices(table); @@ -324,8 +355,10 @@ fprintf(stdout,"column %d Name: %-20s Type: %s(%d)\n", i, col->name, - mdb_get_coltype_string(mdb->default_backend, col->col_type), + mdb_get_colbacktype_string(col), col->col_size); + if (col->props) + mdb_dump_props(col->props, stdout, 0); } for (i=0;inum_idxs;i++) { @@ -371,3 +404,17 @@ return ((entry->object_type == MDB_TABLE) && (entry->flags & 0x80000002)) ? 1 : 0; } + +const char * +mdb_table_get_prop(const MdbTableDef *table, const gchar *key) { + if (!table->props) + return NULL; + return g_hash_table_lookup(table->props->hash, key); +} + +const char * +mdb_col_get_prop(const MdbColumn *col, const gchar *key) { + if (!col->props) + return NULL; + return g_hash_table_lookup(col->props->hash, key); +} diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/worktable.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/worktable.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/worktable.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/worktable.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,9 +12,8 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "mdbtools.h" @@ -74,6 +73,7 @@ void mdb_temp_table_add_col(MdbTableDef *table, MdbColumn *col) { + col->table = table, col->col_num = table->num_cols; if (!col->is_fixed) col->var_col_num = table->num_var_cols++; diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/write.c calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/write.c --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/libmdb/write.c 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/libmdb/write.c 2016-02-02 19:53:13.000000000 +0000 @@ -12,41 +12,65 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include +#include +#include #include "mdbtools.h" -#include "time.h" -#include "math.h" #ifdef DMALLOC #include "dmalloc.h" #endif - +//static int mdb_copy_index_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg); static int mdb_add_row_to_leaf_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPage *ipg, MdbField *idx_fields, guint32 pgnum, guint16 rownum); void -_mdb_put_int16(void *buf, guint32 offset, guint32 value) +mdb_put_int16(void *buf, guint32 offset, guint32 value) { value = GINT32_TO_LE(value); memcpy((char*)buf + offset, &value, 2); } void -_mdb_put_int32(void *buf, guint32 offset, guint32 value) +_mdb_put_int16(void *buf, guint32 offset, guint32 value) +#ifdef HAVE_ATTRIBUTE_ALIAS +__attribute__((alias("mdb_put_int16"))); +#else +{ mdb_put_int16((char*)buf, offset, value); } +#endif + +void +mdb_put_int32(void *buf, guint32 offset, guint32 value) { value = GINT32_TO_LE(value); memcpy((char*)buf + offset, &value, 4); } void -_mdb_put_int32_msb(void *buf, guint32 offset, guint32 value) +_mdb_put_int32(void *buf, guint32 offset, guint32 value) +#ifdef HAVE_ATTRIBUTE_ALIAS +__attribute__((alias("mdb_put_int32"))); +#else +{ mdb_put_int32((char*)buf, offset, value); } +#endif + +void +mdb_put_int32_msb(void *buf, guint32 offset, guint32 value) { value = GINT32_TO_BE(value); memcpy((char*)buf + offset, &value, 4); } +void +_mdb_put_int32_mdb(void *buf, guint32 offset, guint32 value) +#ifdef HAVE_ATTRIBUTE_ALIAS +__attribute__((alias("mdb_put_int32_msb"))); +#else +{ mdb_put_int32_msb((char*)buf, offset, value); } +#endif + ssize_t mdb_write_pg(MdbHandle *mdb, unsigned long pg) { @@ -57,7 +81,7 @@ fstat(mdb->f->fd, &status); /* is page beyond current size + 1 ? */ if ((size_t)status.st_size < (offset + mdb->fmt->pg_size)) { - fprintf(stderr,"offset %lu is beyond EOF\n",offset); + fprintf(stderr,"offset %jd is beyond EOF\n",(intmax_t)offset); return 0; } lseek(mdb->f->fd, offset, SEEK_SET); @@ -158,31 +182,31 @@ unsigned int i; if (mdb_get_option(MDB_DEBUG_ROW)) { - buffer_dump(pg_buf, row_start, row_end - row_start + 1); + mdb_buffer_dump(pg_buf, row_start, row_end - row_start + 1); } - if (IS_JET4(mdb)) { - row_cols = mdb_get_int16(pg_buf, row_start); - col_count_size = 2; - } else { + if (IS_JET3(mdb)) { row_cols = mdb_get_byte(pg_buf, row_start); col_count_size = 1; + } else { + row_cols = mdb_get_int16(pg_buf, row_start); + col_count_size = 2; } bitmask_sz = (row_cols + 7) / 8; - nullmask = (unsigned char*)pg_buf + row_end - bitmask_sz + 1; + nullmask = (unsigned char *)pg_buf + row_end - bitmask_sz + 1; /* read table of variable column locations */ - row_var_cols = IS_JET4(mdb) ? - mdb_get_int16(pg_buf, row_end - bitmask_sz - 1) : - mdb_get_byte(pg_buf, row_end - bitmask_sz); - var_col_offsets = (unsigned int *)g_malloc((row_var_cols+1)*sizeof(int)); if (table->num_var_cols > 0) { - if (IS_JET4(mdb)) { - mdb_crack_row4(mdb, row_start, row_end, bitmask_sz, + row_var_cols = IS_JET3(mdb) ? + mdb_get_byte(pg_buf, row_end - bitmask_sz) : + mdb_get_int16(pg_buf, row_end - bitmask_sz - 1); + var_col_offsets = (unsigned int *)g_malloc((row_var_cols+1)*sizeof(int)); + if (IS_JET3(mdb)) { + mdb_crack_row3(mdb, row_start, row_end, bitmask_sz, row_var_cols, var_col_offsets); } else { - mdb_crack_row3(mdb, row_start, row_end, bitmask_sz, + mdb_crack_row4(mdb, row_start, row_end, bitmask_sz, row_var_cols, var_col_offsets); } } @@ -246,7 +270,7 @@ /* column is null if bit is clear (0) */ if (!fields[i].is_null) { byte |= 1 << bit; - + //printf("%d %d %d %d\n", i, bit, 1 << bit, byte); } bit++; if (bit==8) { @@ -404,10 +428,10 @@ } } } - if (IS_JET4(table->entry->mdb)) { - return mdb_pack_row4(table, row_buffer, num_fields, fields); - } else { + if (IS_JET3(table->entry->mdb)) { return mdb_pack_row3(table, row_buffer, num_fields, fields); + } else { + return mdb_pack_row4(table, row_buffer, num_fields, fields); } } int @@ -428,8 +452,8 @@ MdbHandle *mdb = entry->mdb; void *new_pg = g_malloc0(mdb->fmt->pg_size); - _mdb_put_int16(new_pg, 2, 0x0104); - _mdb_put_int32(new_pg, 4, entry->table_pg); + mdb_put_int16(new_pg, 0, 0x0104); + mdb_put_int32(new_pg, 4, entry->table_pg); return new_pg; } @@ -439,13 +463,14 @@ MdbFormatConstants *fmt = entry->mdb->fmt; void *new_pg = g_malloc0(fmt->pg_size); - _mdb_put_int16(new_pg, 2, 0x0101); - _mdb_put_int16(new_pg, 2, fmt->pg_size - fmt->row_count_offset - 2); - _mdb_put_int32(new_pg, 4, entry->table_pg); + mdb_put_int16(new_pg, 0, 0x0101); + mdb_put_int16(new_pg, 2, fmt->pg_size - fmt->row_count_offset - 2); + mdb_put_int32(new_pg, 4, entry->table_pg); return new_pg; } +/* could be static */ int mdb_update_indexes(MdbTableDef *table, int num_fields, MdbField *fields, guint32 pgnum, guint16 rownum) { @@ -476,25 +501,22 @@ return 1; } +/* could be static */ int mdb_update_index(MdbTableDef *table, MdbIndex *idx, unsigned int num_fields, MdbField *fields, guint32 pgnum, guint16 rownum) { MdbCatalogEntry *entry = table->entry; MdbHandle *mdb = entry->mdb; - /* - int idx_xref[16]; - */ + /*int idx_xref[16];*/ unsigned int i, j; MdbIndexChain *chain; MdbField idx_fields[10]; for (i = 0; i < idx->num_keys; i++) { for (j = 0; j < num_fields; j++) { - /* key_col_num is 1 based, can't remember why though */ + // key_col_num is 1 based, can't remember why though if (fields[j].colnum == idx->key_col_num[i]-1) { - /* - idx_xref[i] = j; - */ + /* idx_xref[i] = j; */ idx_fields[i] = fields[j]; } } @@ -515,10 +537,10 @@ chain = g_malloc0(sizeof(MdbIndexChain)); mdb_index_find_row(mdb, idx, chain, pgnum, rownum); - - - - + //printf("chain depth = %d\n", chain->cur_depth); + //printf("pg = %" G_GUINT32_FORMAT "\n", + //chain->pages[chain->cur_depth-1].pg); + //mdb_copy_index_pg(table, idx, &chain->pages[chain->cur_depth-1]); mdb_add_row_to_leaf_pg(table, idx, &chain->pages[chain->cur_depth-1], idx_fields, pgnum, rownum); return 1; @@ -541,7 +563,7 @@ } new_row_size = mdb_pack_row(table, row_buffer, num_fields, fields); if (mdb_get_option(MDB_DEBUG_WRITE)) { - buffer_dump(row_buffer, 0, new_row_size); + mdb_buffer_dump(row_buffer, 0, new_row_size); } pgnum = mdb_map_find_next_freepage(table, new_row_size); if (!pgnum) { @@ -552,13 +574,13 @@ rownum = mdb_add_row_to_pg(table, row_buffer, new_row_size); if (mdb_get_option(MDB_DEBUG_WRITE)) { - buffer_dump(mdb->pg_buf, 0, 40); - buffer_dump(mdb->pg_buf, fmt->pg_size - 160, 160); + mdb_buffer_dump(mdb->pg_buf, 0, 40); + mdb_buffer_dump(mdb->pg_buf, fmt->pg_size - 160, 160); } mdb_debug(MDB_DEBUG_WRITE, "writing page %d", pgnum); if (!mdb_write_pg(mdb, pgnum)) { - fprintf(stderr, "write failed! exiting...\n"); - exit(1); + fprintf(stderr, "write failed!\n"); + return 0; } mdb_update_indexes(table, num_fields, fields, pgnum, rownum); @@ -606,7 +628,7 @@ mdb_find_row(mdb, i, &row_start, &row_size); pos -= row_size; memcpy((char*)new_pg + pos, mdb->pg_buf + row_start, row_size); - _mdb_put_int16(new_pg, (fmt->row_count_offset + 2) + (i*2), pos); + mdb_put_int16(new_pg, (fmt->row_count_offset + 2) + (i*2), pos); } } @@ -614,14 +636,14 @@ pos -= new_row_size; memcpy((char*)new_pg + pos, row_buffer, new_row_size); /* add row to the row offset table */ - _mdb_put_int16(new_pg, (fmt->row_count_offset + 2) + (num_rows*2), pos); + mdb_put_int16(new_pg, (fmt->row_count_offset + 2) + (num_rows*2), pos); /* update number rows on this page */ num_rows++; - _mdb_put_int16(new_pg, fmt->row_count_offset, num_rows); + mdb_put_int16(new_pg, fmt->row_count_offset, num_rows); /* update the freespace */ - _mdb_put_int16(new_pg,2,pos - fmt->row_count_offset - 2 - (num_rows*2)); + mdb_put_int16(new_pg,2,pos - fmt->row_count_offset - 2 - (num_rows*2)); /* copy new page over old */ if (!table->is_temp_table) { @@ -655,7 +677,7 @@ mdb_debug(MDB_DEBUG_WRITE,"page %lu row %d start %d end %d", (unsigned long) table->cur_phys_pg, table->cur_row-1, row_start, row_end); if (mdb_get_option(MDB_DEBUG_LIKE)) - buffer_dump(mdb->pg_buf, row_start, old_row_size); + mdb_buffer_dump(mdb->pg_buf, row_start, old_row_size); for (i=0;inum_cols;i++) { col = g_ptr_array_index(table->columns,i); @@ -668,7 +690,7 @@ if (mdb_get_option(MDB_DEBUG_WRITE)) { for (i=0;inum_cols;i++) { @@ -681,15 +703,21 @@ new_row_size = mdb_pack_row(table, row_buffer, num_fields, fields); if (mdb_get_option(MDB_DEBUG_WRITE)) - buffer_dump(row_buffer, 0, new_row_size); + mdb_buffer_dump(row_buffer, 0, new_row_size); if (new_row_size > (old_row_size + mdb_pg_get_freespace(mdb))) { fprintf(stderr, "No space left on this page, update will not occur\n"); return 0; } /* do it! */ mdb_replace_row(table, table->cur_row-1, row_buffer, new_row_size); - return 0; + return 0; /* FIXME */ } + +/* WARNING the return code is opposite to convention used elsewhere: + * returns 0 on success + * returns 1 on failure + * This might change on next ABI break. + */ int mdb_replace_row(MdbTableDef *table, int row, void *new_row, int new_row_size) { @@ -704,14 +732,14 @@ int i, pos; if (mdb_get_option(MDB_DEBUG_WRITE)) { - buffer_dump(mdb->pg_buf, 0, 40); - buffer_dump(mdb->pg_buf, pg_size - 160, 160); + mdb_buffer_dump(mdb->pg_buf, 0, 40); + mdb_buffer_dump(mdb->pg_buf, pg_size - 160, 160); } mdb_debug(MDB_DEBUG_WRITE,"updating row %d on page %lu", row, (unsigned long) table->cur_phys_pg); new_pg = mdb_new_data_pg(entry); num_rows = mdb_get_int16(mdb->pg_buf, rco); - _mdb_put_int16(new_pg, rco, num_rows); + mdb_put_int16(new_pg, rco, num_rows); pos = pg_size; @@ -720,20 +748,20 @@ mdb_find_row(mdb, i, &row_start, &row_size); pos -= row_size; memcpy((char*)new_pg + pos, mdb->pg_buf + row_start, row_size); - _mdb_put_int16(new_pg, rco + 2 + i*2, pos); + mdb_put_int16(new_pg, rco + 2 + i*2, pos); } /* our row */ pos -= new_row_size; memcpy((char*)new_pg + pos, new_row, new_row_size); - _mdb_put_int16(new_pg, rco + 2 + row*2, pos); + mdb_put_int16(new_pg, rco + 2 + row*2, pos); /* rows after */ for (i=row+1;ipg_buf + row_start, row_size); - _mdb_put_int16(new_pg, rco + 2 + i*2, pos); + mdb_put_int16(new_pg, rco + 2 + i*2, pos); } /* almost done, copy page over current */ @@ -741,15 +769,15 @@ g_free(new_pg); - _mdb_put_int16(mdb->pg_buf, 2, mdb_pg_get_freespace(mdb)); + mdb_put_int16(mdb->pg_buf, 2, mdb_pg_get_freespace(mdb)); if (mdb_get_option(MDB_DEBUG_WRITE)) { - buffer_dump(mdb->pg_buf, 0, 40); - buffer_dump(mdb->pg_buf, pg_size - 160, 160); + mdb_buffer_dump(mdb->pg_buf, 0, 40); + mdb_buffer_dump(mdb->pg_buf, pg_size - 160, 160); } /* drum roll, please */ if (!mdb_write_pg(mdb, table->cur_phys_pg)) { - fprintf(stderr, "write failed! exiting...\n"); - exit(1); + fprintf(stderr, "write failed!\n"); + return 1; } return 0; } @@ -796,16 +824,18 @@ } pg_row = mdb_get_int32_msb(mdb->pg_buf, ipg->offset + ipg->len - 4); + /* guint32 pg = pg_row >> 8; */ row = pg_row & 0xff; + /* unsigned char iflag = mdb->pg_buf[ipg->offset]; */ /* turn the key hash back into a value */ mdb_index_swap_n(&mdb->pg_buf[ipg->offset + 1], col->col_size, key_hash); key_hash[col->col_size - 1] &= 0x7f; if (mdb_get_option(MDB_DEBUG_WRITE)) { - buffer_dump(mdb->pg_buf, ipg->offset, ipg->len); - buffer_dump(mdb->pg_buf, ipg->offset + 1, col->col_size); - buffer_dump(key_hash, 0, col->col_size); + mdb_buffer_dump(mdb->pg_buf, ipg->offset, ipg->len); + mdb_buffer_dump(mdb->pg_buf, ipg->offset + 1, col->col_size); + mdb_buffer_dump(key_hash, 0, col->col_size); } memcpy((char*)new_pg + ipg->offset, mdb->pg_buf + ipg->offset, ipg->len); @@ -814,32 +844,37 @@ row++; } - + + if (!row) { + fprintf(stderr,"missing indexes not yet supported, aborting\n"); + return 0; + } + //mdb_put_int16(new_pg, mdb->fmt->row_count_offset, row); /* free space left */ - _mdb_put_int16(new_pg, 2, mdb->fmt->pg_size - ipg->offset); - + mdb_put_int16(new_pg, 2, mdb->fmt->pg_size - ipg->offset); + //printf("offset = %d\n", ipg->offset); mdb_index_swap_n(idx_fields[0].value, col->col_size, key_hash); key_hash[0] |= 0x080; if (mdb_get_option(MDB_DEBUG_WRITE)) { printf("key_hash\n"); - buffer_dump(idx_fields[0].value, 0, col->col_size); - buffer_dump(key_hash, 0, col->col_size); + mdb_buffer_dump(idx_fields[0].value, 0, col->col_size); + mdb_buffer_dump(key_hash, 0, col->col_size); printf("--------\n"); } ((char *)new_pg)[ipg->offset] = 0x7f; memcpy((char*)new_pg + ipg->offset + 1, key_hash, col->col_size); pg_row = (pgnum << 8) | ((rownum-1) & 0xff); - _mdb_put_int32_msb(new_pg, ipg->offset + 5, pg_row); + mdb_put_int32_msb(new_pg, ipg->offset + 5, pg_row); ipg->idx_starts[row++] = ipg->offset + ipg->len; - + //ipg->idx_starts[row] = ipg->offset + ipg->len; if (mdb_get_option(MDB_DEBUG_WRITE)) { - buffer_dump(mdb->pg_buf, 0, mdb->fmt->pg_size); + mdb_buffer_dump(mdb->pg_buf, 0, mdb->fmt->pg_size); } memcpy(mdb->pg_buf, new_pg, mdb->fmt->pg_size); mdb_index_pack_bitmap(mdb, ipg); if (mdb_get_option(MDB_DEBUG_WRITE)) { - buffer_dump(mdb->pg_buf, 0, mdb->fmt->pg_size); + mdb_buffer_dump(mdb->pg_buf, 0, mdb->fmt->pg_size); } g_free(new_pg); diff -Nru calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/update_diffs.sh calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/update_diffs.sh --- calligra-2.9.7/kexi/migration/mdb/3rdparty/mdbtools/update_diffs.sh 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/3rdparty/mdbtools/update_diffs.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -#!/bin/bash - -cd libmdb -for i in `ls -1 *.c` ; do cd ..; diff -u ./libmdb.cvs/$i ./libmdb/$i > ../diffs/`echo $i | sed -e 's/\.c/\.diff/g'` ; cd libmdb; done - -cd .. -diff -u ./include.cvs/mdbtools.h ./include/mdbtools.h > ../diffs/mdbtools.diff diff -Nru calligra-2.9.7/kexi/migration/mdb/ChangeLog calligra-2.9.11/kexi/migration/mdb/ChangeLog --- calligra-2.9.7/kexi/migration/mdb/ChangeLog 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/ChangeLog 2016-02-02 19:53:13.000000000 +0000 @@ -1,3 +1,7 @@ +Mon Jun 24 21:04:51 CEST 2014 + Update to mdbtools from June. This also fixes primary keys import. +-- Jarosław Staniek + Mon Jun 4 14:49:44 CEST 2007 Ported to Qt4, imported into calligra/kexi/migration/ for Kexi 2.0. -- Jarosław Staniek diff -Nru calligra-2.9.7/kexi/migration/mdb/src/CMakeLists.txt calligra-2.9.11/kexi/migration/mdb/src/CMakeLists.txt --- calligra-2.9.7/kexi/migration/mdb/src/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/src/CMakeLists.txt 2016-02-02 19:53:13.000000000 +0000 @@ -3,7 +3,10 @@ add_definitions(-Wno-missing-format-attribute) add_definitions(-Wno-sign-compare) add_definitions(-Wno-unused-parameter) -endif () + add_definitions(-Wno-pointer-arith) + add_definitions(-std=c99) + add_definitions(-Wno-cast-qual) +endif (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUC) set(MDBTOOLS_SOURCE_DIR "${CMAKE_SOURCE_DIR}/kexi/migration/mdb/3rdparty/mdbtools") @@ -31,7 +34,9 @@ ${MDBTOOLS_SOURCE_DIR}/libmdb/mem.c ${MDBTOOLS_SOURCE_DIR}/libmdb/money.c ${MDBTOOLS_SOURCE_DIR}/libmdb/options.c +${MDBTOOLS_SOURCE_DIR}/libmdb/props.c ${MDBTOOLS_SOURCE_DIR}/libmdb/sargs.c +${MDBTOOLS_SOURCE_DIR}/libmdb/stats.c ${MDBTOOLS_SOURCE_DIR}/libmdb/table.c ${MDBTOOLS_SOURCE_DIR}/libmdb/worktable.c ${MDBTOOLS_SOURCE_DIR}/libmdb/write.c diff -Nru calligra-2.9.7/kexi/migration/mdb/src/keximdb/mdbmigrate.cpp calligra-2.9.11/kexi/migration/mdb/src/keximdb/mdbmigrate.cpp --- calligra-2.9.7/kexi/migration/mdb/src/keximdb/mdbmigrate.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/src/keximdb/mdbmigrate.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2005,2006 Martin Ellis - Copyright (C) 2005 Jarosław Staniek + Copyright (C) 2005-2014 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -51,18 +51,6 @@ setPropertyValue(nonUnicodePropId, QString()); setPropertyCaption(nonUnicodePropId, i18n("Source Database Non-Unicode Character Encoding")); - initBackend(); -} - -MDBMigrate::~MDBMigrate() -{ - releaseBackend(); -} - -void MDBMigrate::initBackend() -{ - mdb_init(); - // Date format associated with Qt::ISODate: YYYY-MM-DDTHH:MM:SS // (where T is a literal). The following is equivalent to %FT%T, but // backards compatible with old/Windows C libraries. @@ -70,9 +58,8 @@ mdb_set_date_fmt("%Y-%m-%dT%H:%M:%S"); } -void MDBMigrate::releaseBackend() +MDBMigrate::~MDBMigrate() { - mdb_exit(); } QVariant MDBMigrate::propertyValue(const QByteArray& propName) @@ -224,7 +211,7 @@ case MDB_BOOL: //! @todo use &bool! case MDB_BYTE: return QString::fromUtf8(data, len).toShort(); - case MDB_SDATETIME: + case MDB_DATETIME: return QDateTime::fromString(data, Qt::ISODate); case MDB_INT: case MDB_LONGINT: @@ -347,7 +334,7 @@ case MDB_DOUBLE: kexiType = KexiDB::Field::Double; break; - case MDB_SDATETIME: + case MDB_DATETIME: kexiType = KexiDB::Field::DateTime; break; case MDB_TEXT: @@ -446,6 +433,3 @@ mdb_free_tabledef(tableDef); return true; } - - -#include "mdbmigrate.moc" diff -Nru calligra-2.9.7/kexi/migration/mdb/src/keximdb/mdbmigrate.h calligra-2.9.11/kexi/migration/mdb/src/keximdb/mdbmigrate.h --- calligra-2.9.7/kexi/migration/mdb/src/keximdb/mdbmigrate.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mdb/src/keximdb/mdbmigrate.h 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2005,2006 Martin Ellis - Copyright (C) 2005 Jarosław Staniek + Copyright (C) 2005-2014 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -33,7 +33,6 @@ class MDBMigrate : public KexiMigrate { - Q_OBJECT KEXIMIGRATION_DRIVER public: @@ -84,8 +83,6 @@ virtual bool drv_getTableSize(const QString& table, qulonglong& size); private: - void initBackend(); - void releaseBackend(); MdbHandle *m_mdb; }; } diff -Nru calligra-2.9.7/kexi/migration/mysql/keximigrate_mysql.desktop calligra-2.9.11/kexi/migration/mysql/keximigrate_mysql.desktop --- calligra-2.9.7/kexi/migration/mysql/keximigrate_mysql.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/migration/mysql/keximigrate_mysql.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -47,7 +47,7 @@ Name[ro]=MySQL Name[ru]=MySQL Name[se]=MySQL -Name[sk]=mySQL +Name[sk]=MySQL Name[sl]=MySQL Name[sv]=MySQL Name[tg]=MySQL diff -Nru calligra-2.9.7/kexi/migration/pqxx/pqxxmigrate.cpp calligra-2.9.11/kexi/migration/pqxx/pqxxmigrate.cpp --- calligra-2.9.7/kexi/migration/pqxx/pqxxmigrate.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/migration/pqxx/pqxxmigrate.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -432,14 +432,16 @@ std::vector::const_iterator i, end(R.end()); int index = 0; for (i = R.begin(); i != end; ++i, index++) { - if (fieldsExpanded.at(index)->field->type() == KexiDB::Field::BLOB - || fieldsExpanded.at(index)->field->type() == KexiDB::Field::LongText) { + KexiDB::Field *field = fieldsExpanded.at(index)->field; + const KexiDB::Field::Type type = field->type(); // cache: evaluating type of expressions can be expensive + if (type == KexiDB::Field::BLOB || type == KexiDB::Field::LongText) { vals.append(KexiDB::pgsqlByteaToByteArray((*i).c_str(), (*i).size())); - } else if (fieldsExpanded.at(index)->field->type() == KexiDB::Field::Boolean) { + } else if (type == KexiDB::Field::Boolean) { vals.append(QString((*i).c_str()).toLower() == "t" ? QVariant(true) : QVariant(false)); - } else + } else { vals.append(KexiDB::cstringToVariant((*i).c_str(), - fieldsExpanded.at(index)->field, (*i).size())); + field, (*i).size())); + } } if (!destConn->insertRecord(*dstTable, vals)) return false; diff -Nru calligra-2.9.7/kexi/migration/txt/keximigrate_txt.desktop calligra-2.9.11/kexi/migration/txt/keximigrate_txt.desktop --- calligra-2.9.7/kexi/migration/txt/keximigrate_txt.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/migration/txt/keximigrate_txt.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -2,6 +2,7 @@ Name=TSV Name[bs]=TSV Name[ca]=TSV +Name[ca@valencia]=TSV Name[da]=TSV Name[de]=TSV Name[en_GB]=TSV @@ -9,6 +10,7 @@ Name[et]=TSV Name[fi]=TSV Name[fr]=TSV +Name[gl]=TSV Name[ia]=TSV Name[it]=TSV Name[ja]=TSV @@ -25,6 +27,7 @@ Comment="Tab Separated Values" Document Import Plugin for Kexi Comment[bs]="Tabulatorom razdvojene vrijednosti" uvozni dodatak dokumenta za Kexi Comment[ca]=Connector d'importació de documents «Valors separats per tabulacions» (TSV) pel Kexi +Comment[ca@valencia]=Connector d'importació de documents «Valors separats per tabulacions» (TSV) pel Kexi Comment[da]=Importplugin til "tabulatorseparerede værdier"-dokumenter (TSV) til Kexi Comment[de]=„Durch Tabulator getrennte Werte“-Dokument-Importmodul für Kexi Comment[en_GB]="Tab Separated Values" Document Import Plugin for Kexi @@ -32,6 +35,7 @@ Comment[et]=Kexi "tabeldusmärgiga erandatud väärtuste" dokumendi impordiplugin Comment[fi]=”Sarkaimin eroteltujen arvojen” (TSV) tiedostojen tuontiliitännäinen Kexille Comment[fr]=Module d'importation de document «séparations par tabulation» pour Kexi +Comment[gl]=Complemento para Kexi de importación de documentos TSV (valores separados por tabulacións). Comment[it]=Estensione di importazione dei documenti con valori separati da tabulazioni di Kexi Comment[ja]=Kexi のための TSV ドキュメント インポートプラグイン Comment[nb]=Kexi programtillegg for import av dokument med TAB-atskilte verdier diff -Nru calligra-2.9.7/kexi/plugins/forms/kexiformhandler.desktop calligra-2.9.11/kexi/plugins/forms/kexiformhandler.desktop --- calligra-2.9.7/kexi/plugins/forms/kexiformhandler.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/forms/kexiformhandler.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -7,7 +7,6 @@ GenericName[bs]=Formulari GenericName[ca]=Formularis GenericName[ca@valencia]=Formularis -GenericName[cs]=Formuláře GenericName[cy]=Ffurflenni GenericName[da]=Formularer GenericName[de]=Formulare @@ -19,7 +18,6 @@ GenericName[eu]=Inprimakiak GenericName[fa]=برگه‌ها GenericName[fi]=Lomakkeet -GenericName[fr]=Formulaires GenericName[fy]=Forms GenericName[ga]=Foirmeacha GenericName[gl]=Formularios diff -Nru calligra-2.9.7/kexi/plugins/forms/kexiformscrollview.cpp calligra-2.9.11/kexi/plugins/forms/kexiformscrollview.cpp --- calligra-2.9.7/kexi/plugins/forms/kexiformscrollview.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/forms/kexiformscrollview.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2004 Cedric Pasteur - Copyright (C) 2004-2015 Jarosław Staniek + Copyright (C) 2004-2016 Jarosław Staniek This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -131,8 +131,6 @@ } m_contextMenu = new KMenu(this); m_contextMenu->setObjectName("m_contextMenu"); -//! @todo sorting temporarily disabled because not it's not implemented in forms (bug 150372) - setSortingEnabled(false); } KexiFormScrollView::~KexiFormScrollView() @@ -229,7 +227,6 @@ Qt::SortOrder KexiFormScrollView::currentLocalSortOrder() const { - //! @todo return d->localSortOrder; } @@ -240,22 +237,18 @@ void KexiFormScrollView::setLocalSortOrder(int column, Qt::SortOrder order) { - //! @todo d->currentLocalSortColumn = column; d->localSortOrder = order; } void KexiFormScrollView::sortColumnInternal(int col, int order) { - Q_UNUSED(col); - Q_UNUSED(order); - //! @todo + KexiDataAwareObjectInterface::sortColumnInternal(col, order); } void KexiFormScrollView::updateGUIAfterSorting(int previousRow) { Q_UNUSED(previousRow); - //! @todo } void KexiFormScrollView::createEditor(int row, int col, const QString& addText, diff -Nru calligra-2.9.7/kexi/plugins/forms/kexiformscrollview.h calligra-2.9.11/kexi/plugins/forms/kexiformscrollview.h --- calligra-2.9.7/kexi/plugins/forms/kexiformscrollview.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/forms/kexiformscrollview.h 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2004 Cedric Pasteur - Copyright (C) 2004-2015 Jarosław Staniek + Copyright (C) 2004-2016 Jarosław Staniek This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -177,8 +177,8 @@ /*! Handles verticalScrollBar()'s valueChanged(int) signal. Called when vscrollbar's value has been changed. */ //! @todo unused for now, will be used for continuous forms - virtual void vScrollBarValueChanged(int v) { - KexiDataAwareObjectInterface::vScrollBarValueChanged(v); + virtual void verticalScrollBarValueChanged(int v) { + KexiDataAwareObjectInterface::verticalScrollBarValueChanged(v); } Q_SIGNALS: @@ -251,13 +251,16 @@ //! Implementation for KexiDataAwareObjectInterface virtual int currentLocalSortColumn() const; - //! Implementation for KexiDataAwareObjectInterface + //! Implementation for KexiDataAwareObjectInterface. Visually does nothing + //! but remembers index of the currently sorted column and order. virtual void setLocalSortOrder(int column, Qt::SortOrder order); - //! Implementation for KexiDataAwareObjectInterface + //! Implementation for KexiDataAwareObjectInterface. + //! Just calls KexiDataAwareObjectInterface's implementation. void sortColumnInternal(int col, int order = 0); - //! Implementation for KexiDataAwareObjectInterface + //! Implementation for KexiDataAwareObjectInterface. + //! Nothing to do here. Record navigator is already updated. virtual void updateGUIAfterSorting(int previousRow); //! Implementation for KexiDataAwareObjectInterface diff -Nru calligra-2.9.7/kexi/plugins/forms/kexiformview.cpp calligra-2.9.11/kexi/plugins/forms/kexiformview.cpp --- calligra-2.9.7/kexi/plugins/forms/kexiformview.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/forms/kexiformview.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -540,7 +540,9 @@ if (viewMode() == Kexi::DataViewMode) { //TMP!! - initDataSource(); + if (!initDataSource()) { + return false; + } //handle events for this form d->scrollView->setMainWidgetForEventHandling(d->dbform); @@ -596,16 +598,20 @@ return dynamic_cast(part()); } -void KexiFormView::initDataSource() +bool KexiFormView::initDataSource() { deleteQuery(); + const QString dataSourceString(d->dbform->dataSource()); + if (dataSourceString.isEmpty()) { + return true; // nothing to do + } + //! @todo also handle anonymous (not stored) queries provided as statements here KexiDB::TableSchema *tableSchema = 0; KexiDB::Connection *conn = 0; QStringList sources; bool forceReadOnlyDataSource = false; - QString dataSourceString(d->dbform->dataSource()); - bool ok = !dataSourceString.isEmpty(); + bool ok = true; if (ok) { //collect all data-aware widgets and create query schema d->scrollView->setMainDataSourceWidget(d->dbform); @@ -700,11 +706,15 @@ KexiUtils::WaitCursorRemover remover; params = KexiQueryParameters::getParameters(this, *conn->driver(), *d->query, ok); } - if (ok) //input cancelled - d->cursor = conn->executeQuery(*d->query, params); + if (ok) { //input cancelled + d->cursor = conn->prepareQuery(*d->query, params); + } } d->scrollView->invalidateDataSources(invalidSources, d->query); ok = d->cursor != 0; + if (ok) { + ok = setData(d->cursor); + } } if (!invalidSources.isEmpty()) @@ -716,7 +726,7 @@ KexiDB::TableViewData* data = new KexiDB::TableViewData(d->cursor); if (forceReadOnlyDataSource) data->setReadOnly(true); - data->preloadAllRows(); + ok = data->preloadAllRows(); ///*! @todo few backends return result count for free! - no need to reopen() */ // int resultCount = -1; @@ -727,11 +737,16 @@ // if (ok) // ok = ! (!d->cursor->moveFirst() && d->cursor->error()); - d->scrollView->setData(data, true /*owner*/); + if (ok) { + d->scrollView->setData(data, true /*owner*/); + } else { + delete data; + } } else { d->scrollView->setData(0, false); } + return ok; } void KexiFormView::setFormModified() diff -Nru calligra-2.9.7/kexi/plugins/forms/kexiformview.h calligra-2.9.11/kexi/plugins/forms/kexiformview.h --- calligra-2.9.7/kexi/plugins/forms/kexiformview.h 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/forms/kexiformview.h 2016-02-02 19:53:13.000000000 +0000 @@ -151,7 +151,7 @@ //! Redirects to Container::eventFilter(). virtual void contextMenuEvent(QContextMenuEvent *e); - void initDataSource(); + bool initDataSource(); virtual void setFocusInternal(); /*! Called after loading the form contents (before showing it). */ diff -Nru calligra-2.9.7/kexi/plugins/forms/kformdesigner_kexidbfactory.desktop calligra-2.9.11/kexi/plugins/forms/kformdesigner_kexidbfactory.desktop --- calligra-2.9.7/kexi/plugins/forms/kformdesigner_kexidbfactory.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/forms/kformdesigner_kexidbfactory.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -13,7 +13,6 @@ Name[es]=Complemento de elementos gráficos para los formularios de Kexi Name[et]=Kexi vormide vidinate plugin Name[eu]=Kexi-ren inprimakietarako trepeta-plugina -Name[fr]=Module externe pour Kexi de composants graphiques pour les formulaires Name[gl]=Complemento de trebellos para os formularios de Kexi Name[hu]=Felületi elemek bővítmény a Kexi űrlapokhoz Name[it]=Estensione degli oggetti dei moduli di Kexi diff -Nru calligra-2.9.7/kexi/plugins/forms/widgets/mapbrowser/kformdesigner_mapbrowser.desktop calligra-2.9.11/kexi/plugins/forms/widgets/mapbrowser/kformdesigner_mapbrowser.desktop --- calligra-2.9.7/kexi/plugins/forms/widgets/mapbrowser/kformdesigner_mapbrowser.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/forms/widgets/mapbrowser/kformdesigner_mapbrowser.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -13,7 +13,6 @@ Name[es]=Complemento de navegador de mapas para los formularos de Kexi Name[et]=Kexi vormide kaardibrauseri plugin Name[eu]=Kexi-ren inprimakietarako mapa-arakatzailearen plugina -Name[fr]=Module externe pour Kexi d'explorateur de carte pour les formulaire Name[gl]=Complemento de exploración de mapas para os formularios de Kexi Name[hu]=Térképböngésző bővítmény a Kexi űrlapokhoz Name[it]=Estensione di navigazione mappe per i moduli di Kexi diff -Nru calligra-2.9.7/kexi/plugins/forms/widgets/webbrowser/kformdesigner_webbrowser.desktop calligra-2.9.11/kexi/plugins/forms/widgets/webbrowser/kformdesigner_webbrowser.desktop --- calligra-2.9.7/kexi/plugins/forms/widgets/webbrowser/kformdesigner_webbrowser.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/forms/widgets/webbrowser/kformdesigner_webbrowser.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -15,7 +15,6 @@ Name[es]=Complemento de navegador web para los formularios de Kexi Name[et]=Kexi vormide veebibrauseri plugin Name[eu]=Kexi-ren inprimakietarako web-arakatzailearen plugina -Name[fr]=Module externe pour Kexi de navigateur internet pour les formulaire Name[gl]=Complemento de navegación web para os formularios de Kexi Name[hu]=Webböngésző bővítmény a Kexi űrlapokhoz Name[it]=Estensione del browser web per i moduli di Kexi diff -Nru calligra-2.9.7/kexi/plugins/importexport/csv/kexicsvexport.cpp calligra-2.9.11/kexi/plugins/importexport/csv/kexicsvexport.cpp --- calligra-2.9.7/kexi/plugins/importexport/csv/kexicsvexport.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/importexport/csv/kexicsvexport.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -184,13 +184,14 @@ visibleFieldIndex[i] = i; } - isText[i] = ci->field->isTextType(); - isDateTime[i] = ci->field->type() == KexiDB::Field::DateTime; - isTime[i] = ci->field->type() == KexiDB::Field::Time; - isBLOB[i] = ci->field->type() == KexiDB::Field::BLOB; -// isInteger[i] = fields[i]->field->isIntegerType() -// || fields[i]->field->type()==KexiDB::Field::Boolean; -// isFloatingPoint[i] = fields[i]->field->isFPNumericType(); + const KexiDB::Field::Type t = ci->field->type(); // cache: evaluating type of expressions can be expensive + isText[i] = KexiDB::Field::isTextType(t); + isDateTime[i] = t == KexiDB::Field::DateTime; + isTime[i] = t == KexiDB::Field::Time; + isBLOB[i] = t == KexiDB::Field::BLOB; +// isInteger[i] = KexiDB::Field::isIntegerType(t) +// || t == KexiDB::Field::Boolean; +// isFloatingPoint[i] = KexiDB::Field::isFPNumericType(t); } kDebug() << 1; diff -Nru calligra-2.9.7/kexi/plugins/importexport/csv/kexicsv_importexporthandler.desktop calligra-2.9.11/kexi/plugins/importexport/csv/kexicsv_importexporthandler.desktop --- calligra-2.9.7/kexi/plugins/importexport/csv/kexicsv_importexporthandler.desktop 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/importexport/csv/kexicsv_importexporthandler.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -4,9 +4,8 @@ Name=Kexi CSV Data Import/Export Plugin Name[bs]=Kexi CSV plugin za uvoz/izvoz podataka -Name[ca]=Connector d'importació/Exportació de dades CSV per al Kexi -Name[ca@valencia]=Connector d'importació/Exportació de dades CSV per al Kexi -Name[cs]=Modul Kexi pro import a export dat CSV +Name[ca]=Connector d'importació/exportació de dades CSV per al Kexi +Name[ca@valencia]=Connector d'importació/exportació de dades CSV per al Kexi Name[da]=Kexi CSV data-import/eksport plugin Name[de]=Kexi-CSV-Daten-Import/Export-Modul Name[el]=Πρόσθετο εισαγωγής/εξαγωγής CSV δεδομένων του Kexi @@ -17,7 +16,6 @@ Name[eu]=Kexi-ren CSV datuak inportatzeko/esportatzeko plugina Name[fa]=وصله واردات/صادرات داده Kexi CSV Name[fi]=Kexin CSV-tuonti-/vientisuodatin -Name[fr]=Module d'importation / exportation de données CSV de Kexi Name[fy]=Kexi ymport/eksport Plugin foar CSV-gegevens Name[ga]=Breiseán Iompórtála/Easpórtála Sonraí CSV le haghaidh Kexi Name[gl]=Complemento de Kexi para a importación e exportación de datos CSV @@ -26,7 +24,7 @@ Name[hne]=केएक्जाई सीएसवी डाटा आयात/निर्यात प्लगइन Name[hu]=Kexi CSV adatimportáló és -exportáló modul Name[is]=Kexi CSV gagna inn/útflutnings íforrit -Name[it]=Importazione ed esportazione di dati CSV di Kexi +Name[it]=Estensione di importazione ed esportazione di dati CSV di Kexi Name[ja]=Kexi CSV データ インポート/エクスポートプラグイン Name[kk]=Kexi-нің CSV деректерді импорт/экспорт ету плагині Name[ko]=Kexi용 CSV 데이터 가져오기/내보내기 플러그인 diff -Nru calligra-2.9.7/kexi/plugins/queries/kexiquerydesignerguieditor.cpp calligra-2.9.11/kexi/plugins/queries/kexiquerydesignerguieditor.cpp --- calligra-2.9.7/kexi/plugins/queries/kexiquerydesignerguieditor.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/queries/kexiquerydesignerguieditor.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2004 Lucijan Busch - Copyright (C) 2004-2015 Jarosław Staniek + Copyright (C) 2004-2016 Jarosław Staniek This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -504,7 +504,8 @@ kDebug() << "invisible field with sorting: do not add it to the fields list"; continue; } - temp->query()->addField(currentField, fieldVisible); + const int tablePosition = temp->query()->tablePosition(t->name()); + temp->query()->addField(currentField, tablePosition, fieldVisible); if (fieldVisible) fieldsFound = true; if (!alias.isEmpty()) @@ -601,7 +602,7 @@ if (!d->dataTable->dataAwareObject()->acceptRowEdit()) return cancelled; - kDebug() << "queryChangedInPreviousView:" << tempData()->queryChangedInPreviousView(); + kDebug() << "queryChangedInView:" << tempData()->queryChangedInView(); if (mode == Kexi::DesignViewMode) { return true; @@ -611,7 +612,7 @@ KMessageBox::information(this, msgCannotSwitch_EmptyDesign()); return cancelled; } - if (tempData()->queryChangedInPreviousView() || !tempData()->query()) { + if (tempData()->queryChangedInView() != Kexi::NoViewMode || !tempData()->query()) { //remember current design in a temporary structure QString errMsg; //build schema; problems are not allowed @@ -625,7 +626,7 @@ return true; } else if (mode == Kexi::TextViewMode) { dontStore = true; - if (tempData()->queryChangedInPreviousView() || !tempData()->query()) { + if (tempData()->queryChangedInView() != Kexi::NoViewMode || !tempData()->query()) { //remember current design in a temporary structure //build schema; ignore problems buildSchema(); @@ -675,8 +676,8 @@ } else if (mode == Kexi::TextViewMode || mode == Kexi::DataViewMode) { // Switch from text or data view. In the second case, the design could be changed as well // because there could be changes made in the text view before switching to the data view. - if (tempData()->queryChangedInPreviousView()) { - //previous view changed query data + if (tempData()->queryChangedInView() == Kexi::TextViewMode) { + //SQL view changed the query design //-clear and regenerate GUI items initTableRows(); //! @todo @@ -710,7 +711,7 @@ d->dataTable->tableView()->adjustColumnWidthToContents(COLUMN_ID_COLUMN); d->dataTable->tableView()->adjustColumnWidthToContents(COLUMN_ID_TABLE); } - tempData()->setQueryChangedInPreviousView(false); + tempData()->setQueryChangedInView(false); setFocus(); //to allow shared actions proper update return true; } @@ -728,7 +729,7 @@ } QString errMsg; KexiQueryPart::TempData * temp = tempData(); - if (!temp->query() || !(viewMode() == Kexi::DesignViewMode && !temp->queryChangedInPreviousView())) { + if (!temp->query() || !(viewMode() == Kexi::DesignViewMode && temp->queryChangedInView() == Kexi::NoViewMode)) { //only rebuild schema if it has not been rebuilt previously if (!buildSchema(&errMsg)) { KMessageBox::sorry(this, errMsg); @@ -1253,7 +1254,7 @@ propertySetSwitched(); d->droppedNewRecord = 0; } - tempData()->setQueryChangedInPreviousView(true); + tempData()->setQueryChangedInView(true); } void KexiQueryDesignerGuiEditor::slotTableAdded(KexiDB::TableSchema & /*t*/) @@ -1262,7 +1263,7 @@ return; updateColumnsData(); setDirty(); - tempData()->setQueryChangedInPreviousView(true); + tempData()->setQueryChangedInView(true); d->dataTable->setFocus(); } @@ -1270,7 +1271,7 @@ { updateColumnsData(); setDirty(); - tempData()->setQueryChangedInPreviousView(true); + tempData()->setQueryChangedInView(true); } QByteArray KexiQueryDesignerGuiEditor::generateUniqueAlias() const @@ -1623,7 +1624,7 @@ #else //! @todo unused yet setDirty(true); - tempData()->setQueryChangedInPreviousView(true); + tempData()->setQueryChangedInView(true); #endif } @@ -1702,7 +1703,7 @@ (*set)["criteria"] = QVariant(); //clear it } setDirty(true); - tempData()->setQueryChangedInPreviousView(true); + tempData()->setQueryChangedInView(true); } else { result->success = false; @@ -1715,13 +1716,13 @@ void KexiQueryDesignerGuiEditor::slotTablePositionChanged(KexiRelationsTableContainer*) { setDirty(true); - // this is not needed here because only position has changed: tempData()->setQueryChangedInPreviousView(true); + // this is not needed here because only position has changed: tempData()->setQueryChangedInView(true); } void KexiQueryDesignerGuiEditor::slotAboutConnectionRemove(KexiRelationsConnection*) { setDirty(true); - tempData()->setQueryChangedInPreviousView(true); + tempData()->setQueryChangedInView(true); } void KexiQueryDesignerGuiEditor::slotAppendFields( @@ -1852,7 +1853,7 @@ } } } - tempData()->setQueryChangedInPreviousView(true); + tempData()->setQueryChangedInView(true); } void KexiQueryDesignerGuiEditor::slotNewItemStored(KexiPart::Item& item) diff -Nru calligra-2.9.7/kexi/plugins/queries/kexiquerydesignerguieditor.h calligra-2.9.11/kexi/plugins/queries/kexiquerydesignerguieditor.h --- calligra-2.9.7/kexi/plugins/queries/kexiquerydesignerguieditor.h 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/queries/kexiquerydesignerguieditor.h 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2004 Lucijan Busch - Copyright (C) 2004-2015 Jarosław Staniek + Copyright (C) 2004-2016 Jarosław Staniek This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public diff -Nru calligra-2.9.7/kexi/plugins/queries/kexiquerydesignersql.cpp calligra-2.9.11/kexi/plugins/queries/kexiquerydesignersql.cpp --- calligra-2.9.7/kexi/plugins/queries/kexiquerydesignersql.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/queries/kexiquerydesignersql.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2003 Lucijan Busch - Copyright (C) 2004-2014 Jarosław Staniek + Copyright (C) 2004-2016 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -18,6 +18,11 @@ * Boston, MA 02110-1301, USA. */ +#include "kexiquerydesignersql.h" +#include "kexiquerydesignersqleditor.h" +#include "kexiquerypart.h" +#include "kexisectionheader.h" + #include #include #include @@ -41,13 +46,6 @@ #include #include -#include "kexiquerydesignersqleditor.h" -#include "kexiquerydesignersql.h" -#include "kexiquerypart.h" - -#include "kexisectionheader.h" - - static bool compareSQL(const QString& sql1, const QString& sql2) { //! @todo use reformatting functions here @@ -211,7 +209,7 @@ if (sqlTextIsEmpty && mode == Kexi::DesignViewMode) { //special case: empty SQL text, allow to switch to the design view if (temp->query()) { - temp->setQueryChangedInPreviousView(true); //query changed + temp->setQueryChangedInView(true); //query changed temp->setQuery(0); } } @@ -224,7 +222,7 @@ && compareSQL(d->origStatement, d->editor->text())) { //statement unchanged! - nothing to do - temp->setQueryChangedInPreviousView(false); + temp->setQueryChangedInView(false); } else { //yes: parse SQL text if (sqlTextIsEmpty || !slotCheckQuery()) { @@ -235,7 +233,7 @@ return cancelled; } //do not change original query - it's invalid - temp->setQueryChangedInPreviousView(false); + temp->setQueryChangedInView(false); //this view is no longer _just_ switched from "NoViewMode" d->justSwitchedFromNoViewMode = false; return true; @@ -245,7 +243,7 @@ //replace old query schema with new one temp->setQuery(d->parsedQuery); //this will also delete temp->query() d->parsedQuery = 0; - temp->setQueryChangedInPreviousView(true); + temp->setQueryChangedInView(true); } } d->origStatement = d->editor->text(); @@ -279,7 +277,7 @@ if (query) { // Use query with Kexi keywords (but not driver-specific keywords) escaped. temp->setQuery(query); - if (temp->queryChangedInPreviousView()) { + if (temp->queryChangedInView() != Kexi::NoViewMode) { KexiDB::Connection::SelectStatementOptions options; options.identifierEscaping = KexiDB::Driver::EscapeKexi; options.addVisibleLookupColumns = false; @@ -293,10 +291,19 @@ return false; } - if (!compareSQL(d->origStatement, d->editor->text())) { - d->slotTextChangedEnabled = false; - d->editor->setText(d->origStatement); - d->slotTextChangedEnabled = true; + if (temp->queryChangedInView() == Kexi::DesignViewMode /* true in this scenario: + - user switched from SQL to Design, + - changed the design, + - switched to Data + - switched back to SQL */ + || mode != Kexi::DataViewMode) /* true in this scenario: user switched from No-view + or Design view */ + { + if (!compareSQL(d->origStatement, d->editor->text())) { + d->slotTextChangedEnabled = false; + d->editor->setText(d->origStatement); + d->slotTextChangedEnabled = true; + } } QTimer::singleShot(100, d->editor, SLOT(setFocus())); return true; diff -Nru calligra-2.9.7/kexi/plugins/queries/kexiquerydesignersql.h calligra-2.9.11/kexi/plugins/queries/kexiquerydesignersql.h --- calligra-2.9.7/kexi/plugins/queries/kexiquerydesignersql.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/queries/kexiquerydesignersql.h 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2003 Lucijan Busch - Copyright (C) 2004-2012 Jarosław Staniek + Copyright (C) 2004-2016 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public diff -Nru calligra-2.9.7/kexi/plugins/queries/kexiqueryhandler.desktop calligra-2.9.11/kexi/plugins/queries/kexiqueryhandler.desktop --- calligra-2.9.7/kexi/plugins/queries/kexiqueryhandler.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/queries/kexiqueryhandler.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -8,7 +8,6 @@ GenericName[bs]=Upiti GenericName[ca]=Consultes GenericName[ca@valencia]=Consultes -GenericName[cs]=Dotazy GenericName[cy]=Ymholiadau GenericName[da]=Forespørgsler GenericName[de]=Abfragen @@ -20,7 +19,6 @@ GenericName[eu]=Kontsultak GenericName[fa]=پرس‌و‌جوها GenericName[fi]=Kyselyt -GenericName[fr]=Requêtes GenericName[fy]=Queries GenericName[ga]=Iarratais GenericName[gl]=Consultas diff -Nru calligra-2.9.7/kexi/plugins/queries/kexiquerypart.cpp calligra-2.9.11/kexi/plugins/queries/kexiquerypart.cpp --- calligra-2.9.7/kexi/plugins/queries/kexiquerypart.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/queries/kexiquerypart.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2004 Lucijan Busch - Copyright (C) 2004-2010 Jarosław Staniek + Copyright (C) 2004-2016 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -125,8 +125,10 @@ return 0; } KexiDB::Parser *parser = KexiMainWindowIface::global()->project()->sqlParser(); - parser->parse(sqlText); - KexiDB::QuerySchema *query = parser->query(); + KexiDB::QuerySchema *query = 0; + if (parser->parse(sqlText)) { + query = parser->query(); + } //error? if (!query) { if (viewMode == Kexi::TextViewMode) { @@ -178,7 +180,7 @@ : KexiWindowData(window) , KexiDB::Connection::TableSchemaChangeListenerInterface() , m_query(0) - , m_queryChangedInPreviousView(false) + , m_queryChangedInView(Kexi::NoViewMode) { this->conn = conn; } @@ -236,14 +238,15 @@ m_query = query; } -bool KexiQueryPart::TempData::queryChangedInPreviousView() const +Kexi::ViewMode KexiQueryPart::TempData::queryChangedInView() const { - return m_queryChangedInPreviousView; + return m_queryChangedInView; } -void KexiQueryPart::TempData::setQueryChangedInPreviousView(bool set) +void KexiQueryPart::TempData::setQueryChangedInView(bool set) { - m_queryChangedInPreviousView = set; + m_queryChangedInView = set ? qobject_cast(parent())->currentViewMode() + : Kexi::NoViewMode; } //---------------- diff -Nru calligra-2.9.7/kexi/plugins/queries/kexiquerypart.h calligra-2.9.11/kexi/plugins/queries/kexiquerypart.h --- calligra-2.9.7/kexi/plugins/queries/kexiquerypart.h 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/queries/kexiquerypart.h 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2003 Lucijan Busch - Copyright (C) 2004-2010 Jarosław Staniek + Copyright (C) 2004-2016 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -79,19 +79,22 @@ //! Connection used for retrieving definition of the query KexiDB::Connection *conn; - /*! @return true if \a query member has changed in previous view. + /*! @return view mode if which the query member has changed. + It's possibly one of previously visited views. Kexi::NoViewMode is the default, + what means that query was not changed. Used on view switching. We're checking this flag to see if we should rebuild internal structure for DesignViewMode of regenerated sql text in TextViewMode after switch from other view. */ - bool queryChangedInPreviousView() const; + Kexi::ViewMode queryChangedInView() const; - /*! Sets the queryChangedInPreviousView flag. - @see queryChangedInPreviousView() */ - void setQueryChangedInPreviousView(bool set); + /*! Sets the queryChangedInView flag. If @a set is true, then the flag is changed + to the current view mode. If @a set is false, the flag is changed to Kexi::NoViewMode. + @see queryChangedInView() */ + void setQueryChangedInView(bool set); private: KexiDB::QuerySchema *m_query; - bool m_queryChangedInPreviousView; + Kexi::ViewMode m_queryChangedInView; }; virtual KLocalizedString i18nMessage(const QString& englishMessage, diff -Nru calligra-2.9.7/kexi/plugins/queries/kexiqueryview.cpp calligra-2.9.11/kexi/plugins/queries/kexiqueryview.cpp --- calligra-2.9.7/kexi/plugins/queries/kexiqueryview.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/queries/kexiqueryview.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -88,7 +88,7 @@ if (!ok) {//input cancelled return cancelled; } - d->cursor = conn->executeQuery(*query, d->currentParams); + d->cursor = conn->prepareQuery(*query, d->currentParams); if (!d->cursor) { window()->setStatus( conn, @@ -96,13 +96,20 @@ //! @todo also provide server result and sql statement return false; } - setData(d->cursor); + ok = setData(d->cursor); //! @todo remove close() when dynamic cursors arrive - d->cursor->close(); - - if (oldCursor) - oldCursor->connection()->deleteCursor(oldCursor); + if (!d->cursor->close()) { + ok = false; + } + if (oldCursor) { + conn->deleteCursor(oldCursor); + } + if (!ok) { + conn->deleteCursor(d->cursor); + d->cursor = 0; + return false; + } //! @todo maybe allow writing and inserting for single-table relations? tableView()->setReadOnly(true); diff -Nru calligra-2.9.7/kexi/plugins/reports/kexidbreportdata.cpp calligra-2.9.11/kexi/plugins/reports/kexidbreportdata.cpp --- calligra-2.9.7/kexi/plugins/reports/kexidbreportdata.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/reports/kexidbreportdata.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,7 @@ /* * Kexi Report Plugin * Copyright (C) 2007-2009 by Adam Pigg (adam@piggz.co.uk) +* Copyright (C) 2015-2016 Jarosław Staniek * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,17 +18,19 @@ */ #include "kexidbreportdata.h" -#include +#include "kexireportview.h" #include #include -#include +#include + +#include class KexiDBReportData::Private { public: - explicit Private(KexiDB::Connection *pDb) - : cursor(0), connection(pDb), originalSchema(0), copySchema(0) + explicit Private(KexiDB::Connection *pDb, KexiReportView *v) + : cursor(0), connection(pDb), view(v), originalSchema(0), copySchema(0) { } ~Private() @@ -37,30 +40,23 @@ delete cursor; } - QString objectName; - + QString objectClass; KexiDB::Cursor *cursor; - KexiDB::Connection *connection; + KexiDB::Connection * const connection; + KexiReportView * const view; KexiDB::QuerySchema *originalSchema; KexiDB::QuerySchema *copySchema; }; -KexiDBReportData::KexiDBReportData (const QString &objectName, - KexiDB::Connection * pDb) - : d(new Private(pDb)) -{ - d->objectName = objectName; - getSchema(); -} - KexiDBReportData::KexiDBReportData(const QString& objectName, - const QString& partClass, - KexiDB::Connection* pDb) - : d(new Private(pDb)) + const QString& objectClass, + KexiDB::Connection* pDb, KexiReportView *view) + : d(new Private(pDb, view)) { d->objectName = objectName; - getSchema(partClass); + d->objectClass = objectClass; + getSchema(); } void KexiDBReportData::setSorting(const QList& sorting) @@ -102,22 +98,24 @@ { if ( d->objectName.isEmpty() ) { - d->cursor = d->connection->executeQuery ( "SELECT '' AS expr1 FROM kexi__db WHERE kexi__db.db_property = 'kexidb_major_ver'" ); + d->cursor = d->connection->prepareQuery("SELECT '' AS expr1 FROM kexi__db WHERE kexi__db.db_property = 'kexidb_major_ver'"); } else if ( d->copySchema) { kDebug() << "Opening cursor.." << d->copySchema->debugString(); - d->cursor = d->connection->executeQuery ( *d->copySchema, 1 ); + d->cursor = d->connection->prepareQuery(*d->copySchema, KexiDB::Cursor::Buffered); } - - if ( d->cursor ) - { - kDebug() << "Moving to first record.."; - return d->cursor->moveFirst(); + if (d->cursor) { + bool ok = d->view->setData(d->cursor); + if (ok) { + kDebug() << "Moving to first record.."; + if (!d->cursor->moveFirst()) { + ok = !d->cursor->error(); + } + } + return ok; } - else - return false; } return false; } @@ -134,7 +132,7 @@ return true; } -bool KexiDBReportData::getSchema(const QString& partClass) +bool KexiDBReportData::getSchema() { if (d->connection) { @@ -143,13 +141,13 @@ delete d->copySchema; d->copySchema = 0; - if ((partClass.isEmpty() || partClass == "org.kexi-project.table") + if ((d->objectClass.isEmpty() || d->objectClass == "org.kexi-project.table") && d->connection->tableSchema(d->objectName)) { kDebug() << d->objectName << "is a table.."; d->originalSchema = new KexiDB::QuerySchema(*(d->connection->tableSchema(d->objectName))); } - else if ((partClass.isEmpty() || partClass == "org.kexi-project.query") + else if ((d->objectClass.isEmpty() || d->objectClass == "org.kexi-project.query") && d->connection->querySchema(d->objectName)) { kDebug() << d->objectName << "is a query.."; @@ -176,6 +174,11 @@ return d->objectName; } +QString KexiDBReportData::sourceClass() const +{ + return d->objectClass; +} + int KexiDBReportData::fieldNumber ( const QString &fld ) const { @@ -394,7 +397,7 @@ return qs; } -KoReportData* KexiDBReportData::data(const QString& source) +KoReportData* KexiDBReportData::create(const QString& source) const { - return new KexiDBReportData(source, d->connection); + return new KexiDBReportData(source, QString(), d->connection, d->view); } diff -Nru calligra-2.9.7/kexi/plugins/reports/kexidbreportdata.h calligra-2.9.11/kexi/plugins/reports/kexidbreportdata.h --- calligra-2.9.7/kexi/plugins/reports/kexidbreportdata.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/reports/kexidbreportdata.h 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,7 @@ /* * Kexi Report Plugin * Copyright (C) 2007-2009 by Adam Pigg (adam@piggz.co.uk) +* Copyright (C) 2015-2016 Jarosław Staniek * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -27,22 +28,22 @@ #include +class KexiReportView; + /** */ class KexiDBReportData : public KoReportData { public: - KexiDBReportData(const QString &objectName, KexiDB::Connection *conn); - /*! - * @a partClass specifies @a objectName type: a table or query. + * @a objectClass specifies @a objectName type: a table or query. * Types accepted: * -"org.kexi-project.table" * -"org.kexi-project.query" * -empty QString() - attempt to resolve @a objectName */ - KexiDBReportData(const QString &objectName, const QString& partClass, KexiDB::Connection *conn); + KexiDBReportData(const QString &objectName, const QString& objectClass, KexiDB::Connection *conn, KexiReportView *view); virtual ~KexiDBReportData(); virtual QStringList fieldNames() const; @@ -50,6 +51,7 @@ virtual void addExpression(const QString &field, const QVariant &value, int relation = '='); virtual QString sourceName() const; + virtual QString sourceClass() const; virtual int fieldNumber(const QString &field) const; virtual QVariant value(unsigned int) const; virtual QVariant value(const QString &field) const; @@ -68,13 +70,13 @@ virtual QStringList scriptList(const QString& language) const; virtual QString scriptCode(const QString& script, const QString& language) const; virtual QStringList dataSources() const; - virtual KoReportData* data(const QString&); + virtual KoReportData* create(const QString &source) const; private: class Private; Private * const d; - bool getSchema(const QString& partClass = QString()); + bool getSchema(); }; #endif diff -Nru calligra-2.9.7/kexi/plugins/reports/kexireportdesignview.cpp calligra-2.9.11/kexi/plugins/reports/kexireportdesignview.cpp --- calligra-2.9.7/kexi/plugins/reports/kexireportdesignview.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/reports/kexireportdesignview.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -196,10 +196,11 @@ return static_cast(window()->data()); } -void KexiReportDesignView::slotSetData(KoReportData* kodata) +void KexiReportDesignView::slotSourceDataChanged() { - m_reportDesigner->setReportData(kodata); + m_reportDesigner->setReportData(m_sourceSelector->createSourceData()); tempData()->connectionDefinition = m_sourceSelector->connectionData(); + setDirty(true); } void KexiReportDesignView::triggerAction(const QString &action) diff -Nru calligra-2.9.7/kexi/plugins/reports/kexireportdesignview.h calligra-2.9.11/kexi/plugins/reports/kexireportdesignview.h --- calligra-2.9.7/kexi/plugins/reports/kexireportdesignview.h 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/reports/kexireportdesignview.h 2016-02-02 19:53:13.000000000 +0000 @@ -75,9 +75,7 @@ private Q_SLOTS: void slotDesignerPropertySetChanged(); - -public Q_SLOTS: - void slotSetData(KoReportData*); + void slotSourceDataChanged(); }; #endif diff -Nru calligra-2.9.7/kexi/plugins/reports/kexireporthandler.desktop calligra-2.9.11/kexi/plugins/reports/kexireporthandler.desktop --- calligra-2.9.7/kexi/plugins/reports/kexireporthandler.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/reports/kexireporthandler.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -7,7 +7,6 @@ GenericName[bs]=Izvještaji GenericName[ca]=Informes GenericName[ca@valencia]=Informes -GenericName[cs]=Hlášení GenericName[cy]=Adroddiadau GenericName[da]=Rapporter GenericName[de]=Berichte @@ -19,7 +18,6 @@ GenericName[eu]=Txostenak GenericName[fa]=گزارشها GenericName[fi]=Raportit -GenericName[fr]=Rapports GenericName[fy]=Rapporten GenericName[ga]=Tuairiscí GenericName[gl]=Informes @@ -49,7 +47,7 @@ GenericName[ro]=Rapoarte GenericName[ru]=Отчёты GenericName[se]=Raporttat -GenericName[sk]=Správy +GenericName[sk]=Výkazy GenericName[sl]=Poročila GenericName[sv]=Rapporter GenericName[tg]=Ҳисобот diff -Nru calligra-2.9.7/kexi/plugins/reports/kexireportpart.cpp calligra-2.9.11/kexi/plugins/reports/kexireportpart.cpp --- calligra-2.9.7/kexi/plugins/reports/kexireportpart.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/reports/kexireportpart.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -92,7 +92,7 @@ } else if (viewMode == Kexi::DesignViewMode) { view = new KexiReportDesignView(parent, d->sourceSelector); - connect(d->sourceSelector, SIGNAL(setData(KoReportData*)), view, SLOT(slotSetData(KoReportData*))); + connect(d->sourceSelector, SIGNAL(sourceDataChanged()), view, SLOT(slotSourceDataChanged())); connect(view, SIGNAL(itemInserted(QString)), this, SLOT(slotItemInserted(QString))); } return view; @@ -158,8 +158,6 @@ td->reportDefinition = korep; td->connectionDefinition = conn; - - td->name = window->partItem()->name(); return td; } diff -Nru calligra-2.9.7/kexi/plugins/reports/kexireportpart.h calligra-2.9.11/kexi/plugins/reports/kexireportpart.h --- calligra-2.9.7/kexi/plugins/reports/kexireportpart.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/reports/kexireportpart.h 2016-02-02 19:53:13.000000000 +0000 @@ -64,6 +64,7 @@ Check this flag to see if we should refresh data for DataViewMode. */ bool reportSchemaChangedInPreviousView; QString name; + QString className; //!< org.kexi-project.table or org.kexi-project.query }; virtual KLocalizedString i18nMessage(const QString& englishMessage, diff -Nru calligra-2.9.7/kexi/plugins/reports/kexireportview.cpp calligra-2.9.11/kexi/plugins/reports/kexireportview.cpp --- calligra-2.9.7/kexi/plugins/reports/kexireportview.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/reports/kexireportview.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,7 +1,7 @@ /* * Kexi Report Plugin * Copyright (C) 2007-2008 by Adam Pigg (adam@piggz.co.uk) - Copyright (C) 2014 Jarosław Staniek + Copyright (C) 2014-2016 Jarosław Staniek * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -55,7 +55,7 @@ #include "../scripting/kexiscripting/kexiscriptadaptor.h" KexiReportView::KexiReportView(QWidget *parent) - : KexiView(parent), m_preRenderer(0), m_reportDocument(0), m_currentPage(0), m_pageCount(0), m_kexi(0), m_functions(0) + : KexiView(parent), m_preRenderer(0), m_currentPage(0), m_pageCount(0), m_kexi(0), m_functions(0) { setObjectName("KexiReportDesigner_DataView"); @@ -177,7 +177,6 @@ delete m_preRenderer; delete m_kexi; delete m_functions; - delete m_reportDocument; } void KexiReportView::slotPrintReport() @@ -193,7 +192,7 @@ cxt.printer = &printer; cxt.painter = &painter; - renderer->render(cxt, m_reportDocument); + renderer->render(cxt, m_preRenderer->document()); } delete dialog; delete renderer; @@ -223,7 +222,7 @@ painter.begin(&printer); cxt.printer = &printer; cxt.painter = &painter; - if (!renderer->render(cxt, m_reportDocument)) { + if (!renderer->render(cxt, m_preRenderer->document())) { KMessageBox::error(this, i18n("Exporting the report as PDF to %1 failed.", cxt.destinationUrl.prettyUrl()), i18n("Export Failed")); @@ -299,7 +298,7 @@ return; } - if (!renderer->render(cxt, m_reportDocument)) { + if (!renderer->render(cxt, m_preRenderer->document())) { KMessageBox::error(this, i18n("Failed to export the report as spreadsheet to %1.", cxt.destinationUrl.prettyUrl()), i18n("Export Failed")); @@ -325,7 +324,7 @@ return; } - if (!renderer->render(cxt, m_reportDocument)) { + if (!renderer->render(cxt, m_preRenderer->document())) { KMessageBox::error(this, i18n("Exporting the report as text document to %1 failed.", cxt.destinationUrl.prettyUrl()), i18n("Export Failed")); @@ -366,7 +365,7 @@ renderer = m_factory.createInstance("htmltable"); } - if (!renderer->render(cxt, m_reportDocument)) { + if (!renderer->render(cxt, m_preRenderer->document())) { KMessageBox::error(this, i18n("Exporting the report as web page to %1 failed.", cxt.destinationUrl.prettyUrl()), i18n("Export Failed")); @@ -387,25 +386,25 @@ { Q_UNUSED(mode); - kDebug(); if (tempData()->reportSchemaChangedInPreviousView) { + tempData()->reportSchemaChangedInPreviousView = false; + kDebug() << "Schema changed"; delete m_preRenderer; - kDebug() << tempData()->reportDefinition.tagName(); - + //kDebug() << tempData()->reportDefinition.tagName(); m_preRenderer = new KoReportPreRenderer(tempData()->reportDefinition); if (m_preRenderer->isValid()) { KoReportData *reportData = 0; if (!tempData()->connectionDefinition.isNull()) { - reportData = sourceData(tempData()->connectionDefinition); + reportData = createSourceData(tempData()->connectionDefinition); } if (!reportData) { - reportData = new KexiDBReportData(QString(), KexiMainWindowIface::global()->project()->dbConnection()); + reportData = new KexiDBReportData(QString(), QString(), + KexiMainWindowIface::global()->project()->dbConnection(), this); } m_preRenderer->setSourceData(reportData); - - m_preRenderer->setName(tempData()->name); + m_currentPage = 1; //Add a kexi object to provide kexidb and extra functionality @@ -416,53 +415,42 @@ //If using a kexidb source, add a functions scripting object if (tempData()->connectionDefinition.attribute("type") == "internal") { - //Delete old functions - if (m_functions) { - delete m_functions; - } - + delete m_functions; // prev functions m_functions = new KRScriptFunctions(reportData, KexiMainWindowIface::global()->project()->dbConnection()); m_preRenderer->registerScriptObject(m_functions, "field"); } - if (m_reportDocument) { - kDebug() << "=======================================Deleting old document"; - delete m_reportDocument; + if (!m_preRenderer->generateDocument()) { + return false; } - - m_reportDocument = m_preRenderer->generate(); - if (m_reportDocument) { - m_pageCount = m_reportDocument->pages(); + m_pageCount = m_preRenderer->document()->pages(); #ifndef KEXI_MOBILE - m_pageSelector->setRecordCount(m_pageCount); - m_pageSelector->setCurrentRecordNumber(1); + m_pageSelector->setRecordCount(m_pageCount); + m_pageSelector->setCurrentRecordNumber(1); #endif - } - - m_reportPage = new KoReportPage(this, m_reportDocument); + m_reportPage = new KoReportPage(this, m_preRenderer->document()); m_reportPage->setObjectName("KexiReportPage"); m_reportScene->setSceneRect(0,0,m_reportPage->rect().width() + 40, m_reportPage->rect().height() + 40); m_reportScene->addItem(m_reportPage); m_reportPage->setPos(20,20); m_reportView->centerOn(0,0); - } else { KMessageBox::error(this, i18n("Report schema appears to be invalid or corrupt"), i18n("Opening failed")); } - - - tempData()->reportSchemaChangedInPreviousView = false; } return true; } -KoReportData* KexiReportView::sourceData(QDomElement e) +KoReportData* KexiReportView::createSourceData(const QDomElement &e) { KoReportData *kodata = 0; if (e.attribute("type") == "internal") { - kodata = new KexiDBReportData(e.attribute("source"), KexiMainWindowIface::global()->project()->dbConnection()); + kodata = new KexiDBReportData(e.attribute("source"), + e.attribute("source-class"), + KexiMainWindowIface::global()->project()->dbConnection(), + this); } #ifndef KEXI_MOBILE if (e.attribute("type") == "external") { @@ -528,7 +516,11 @@ void KexiReportView::moveToRecordRequested(uint r) { - Q_UNUSED(r); + r++; + if (int(r) != m_currentPage && r > 1 && int(r) <= m_pageCount) { + m_currentPage = r; + m_reportPage->renderPage(m_currentPage); + } } int KexiReportView::currentRecord() const diff -Nru calligra-2.9.7/kexi/plugins/reports/kexireportview.h calligra-2.9.11/kexi/plugins/reports/kexireportview.h --- calligra-2.9.7/kexi/plugins/reports/kexireportview.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/reports/kexireportview.h 2016-02-02 19:53:13.000000000 +0000 @@ -62,7 +62,6 @@ private: KoReportPreRenderer *m_preRenderer; - ORODocument *m_reportDocument; QGraphicsView *m_reportView; QGraphicsScene *m_reportScene; KoReportPage *m_reportPage; @@ -73,7 +72,7 @@ int m_currentPage; int m_pageCount; KexiReportPart::TempData* tempData() const; - KoReportData* sourceData(QDomElement e); + KoReportData* createSourceData(const QDomElement &e); KexiScriptAdaptor *m_kexi; KRScriptFunctions *m_functions; diff -Nru calligra-2.9.7/kexi/plugins/reports/kexisourceselector.cpp calligra-2.9.11/kexi/plugins/reports/kexisourceselector.cpp --- calligra-2.9.7/kexi/plugins/reports/kexisourceselector.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/reports/kexisourceselector.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,7 @@ /* * Kexi Report Plugin * Copyright (C) 2007-2009 by Adam Pigg (adam@piggz.co.uk) +* Copyright (C) 2016 Jarosław Staniek * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,16 +18,19 @@ */ #include "kexisourceselector.h" +#include "kexireportview.h" +#include +#include "KexiDataSourceComboBox.h" +#include +#include #include #include - -#include #include #include + #include -#include "KexiDataSourceComboBox.h" -#include +#include //#define NO_EXTERNAL_SOURCES @@ -42,16 +46,11 @@ { public: Private() - : kexiDBData(0) { } ~Private() { - delete kexiDBData; -#ifndef KEXI_MOBILE - delete kexiMigrateData; -#endif } KexiDB::Connection *conn; @@ -61,13 +60,6 @@ KexiDataSourceComboBox *internalSource; KLineEdit *externalSource; KPushButton *setData; - - KexiDBReportData *kexiDBData; - -#ifndef KEXI_MOBILE - KexiMigrateReportData *kexiMigrateData; -#endif - }; KexiSourceSelector::KexiSourceSelector(KexiProject* project, QWidget* parent) @@ -75,12 +67,6 @@ , d(new Private) { d->conn = project->dbConnection(); - d->kexiDBData = 0; - -#ifndef KEXI_MOBILE - d->kexiMigrateData = 0; -#endif - d->layout = new QVBoxLayout(this); d->sourceType = new QComboBox(this); d->internalSource = new KexiDataSourceComboBox(this); @@ -88,7 +74,7 @@ d->externalSource = new KLineEdit(this); d->setData = new KPushButton(i18n("Set Data")); - connect(d->setData, SIGNAL(clicked()), this, SLOT(setDataClicked())); + connect(d->setData, SIGNAL(clicked()), this, SIGNAL(sourceDataChanged())); d->sourceType->addItem(i18n("Internal"), QVariant("internal")); d->sourceType->addItem(i18n("External"), QVariant("external")); @@ -124,11 +110,12 @@ delete d; } -void KexiSourceSelector::setConnectionData(QDomElement c) +void KexiSourceSelector::setConnectionData(const QDomElement &c) { if (c.attribute("type") == "internal") { d->sourceType->setCurrentIndex(d->sourceType->findData("internal")); - d->internalSource->setCurrentIndex(d->internalSource->findText(c.attribute("source"))); + d->internalSource->setDataSource( + c.attribute("source-class"), c.attribute("source")); } if (c.attribute("type") == "external") { @@ -136,7 +123,7 @@ d->externalSource->setText(c.attribute("source")); } - emit(setData(sourceData())); + emit sourceDataChanged(); } QDomElement KexiSourceSelector::connectionData() @@ -152,6 +139,10 @@ if (d->sourceType->itemData(d->sourceType->currentIndex()).toString() == "internal") { conndata.setAttribute("source", d->internalSource->currentText()); + const QString sourceClass(d->internalSource->selectedPartClass()); + if (!sourceClass.isEmpty()) { + conndata.setAttribute("source-class", sourceClass); + } } else { conndata.setAttribute("source", d->externalSource->text()); } @@ -162,44 +153,33 @@ return conndata; } -KoReportData* KexiSourceSelector::sourceData() +KoReportData* KexiSourceSelector::createSourceData() const { - if (d->kexiDBData) { - delete d->kexiDBData; - d->kexiDBData = 0; - } - -#ifndef KEXI_MOBILE - if (d->kexiMigrateData) { - delete d->kexiMigrateData; - d->kexiMigrateData = 0; - } -#endif - //!@TODO Fix when enable external data #ifndef NO_EXTERNAL_SOURCES + KexiReportView *view = 0; + if (KexiMainWindowIface::global()->currentWindow()) { + view = qobject_cast(KexiMainWindowIface::global()->currentWindow()->selectedView()); + if (!view) { + return 0; + } + } if (d->sourceType->itemData(d->sourceType->currentIndex()).toString() == "internal" && d->internalSource->isSelectionValid()) { - d->kexiDBData = new KexiDBReportData(d->internalSource->selectedName(), d->internalSource->selectedPartClass(), d->conn); - return d->kexiDBData; + return new KexiDBReportData(d->internalSource->selectedName(), + d->internalSource->selectedPartClass(), + d->conn, view); } #ifndef KEXI_MOBILE if (d->sourceType->itemData(d->sourceType->currentIndex()).toString() == "external") { - d->kexiMigrateData = new KexiMigrateReportData(d->externalSource->text()); - return d->kexiMigrateData; + return new KexiMigrateReportData(d->externalSource->text()); } #endif #else if (d->internalSource->isSelectionValid()) { - d->kexiDBData = new KexiDBReportData(d->internalSource->selectedName(), d->conn); - return d->kexiDBData; + return new KexiDBReportData(d->internalSource->selectedName(), d->conn); } #endif return 0; } - -void KexiSourceSelector::setDataClicked() -{ - emit(setData(sourceData())); -} diff -Nru calligra-2.9.7/kexi/plugins/reports/kexisourceselector.h calligra-2.9.11/kexi/plugins/reports/kexisourceselector.h --- calligra-2.9.7/kexi/plugins/reports/kexisourceselector.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/reports/kexisourceselector.h 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,7 @@ /* * Kexi Report Plugin * Copyright (C) 2007-2009 by Adam Pigg (adam@piggz.co.uk) +* Copyright (C) 2016 Jarosław Staniek * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -39,15 +40,12 @@ explicit KexiSourceSelector(KexiProject* project, QWidget* parent = 0); ~KexiSourceSelector(); - KoReportData* sourceData(); - void setConnectionData(QDomElement); + KoReportData* createSourceData() const Q_REQUIRED_RESULT; + void setConnectionData(const QDomElement &c); QDomElement connectionData(); Q_SIGNALS: - void setData(KoReportData*); - -private Q_SLOTS: - void setDataClicked(); + void sourceDataChanged(); private: class Private; diff -Nru calligra-2.9.7/kexi/plugins/reports/krscriptfunctions.cpp calligra-2.9.11/kexi/plugins/reports/krscriptfunctions.cpp --- calligra-2.9.7/kexi/plugins/reports/krscriptfunctions.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/reports/krscriptfunctions.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,7 +1,7 @@ /* * Kexi Report Plugin * Copyright (C) 2007-2008 by Adam Pigg - * Copyright (C) 2012 Jarosław Staniek + * Copyright (C) 2012-2016 Jarosław Staniek * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,7 +25,17 @@ { m_cursor = kodata; m_connection = conn; - m_source = kodata->sourceName(); + + if (kodata->sourceClass().isEmpty() || kodata->sourceClass() == "org.kexi-project.table") { + if (m_connection->tableSchema(kodata->sourceName())) { + m_source = kodata->sourceName(); + } + } + if (m_source.isEmpty() && (kodata->sourceClass().isEmpty() || kodata->sourceClass() == "org.kexi-project.query")) { + if (m_connection->querySchema(kodata->sourceName())) { + m_source = m_connection->selectStatement(*(m_connection->querySchema(kodata->sourceName()))); + } + } } KRScriptFunctions::~KRScriptFunctions() diff -Nru calligra-2.9.7/kexi/plugins/tables/kexitabledesigner_dataview.cpp calligra-2.9.11/kexi/plugins/tables/kexitabledesigner_dataview.cpp --- calligra-2.9.7/kexi/plugins/tables/kexitabledesigner_dataview.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/tables/kexitabledesigner_dataview.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -76,12 +76,15 @@ if (tempData()->tableSchemaChangedInPreviousView) { KexiUtils::WaitCursor wait; - KexiDB::Cursor *c - = KexiMainWindowIface::global()->project()->dbConnection()->prepareQuery( - *tempData()->table); - if (!c) + KexiDB::Connection *conn = KexiMainWindowIface::global()->project()->dbConnection(); + KexiDB::Cursor *cursor = conn->prepareQuery(*tempData()->table); + if (!cursor) { return false; - setData(c); + } + if (!setData(cursor)) { + conn->deleteCursor(cursor); + return false; + } tempData()->tableSchemaChangedInPreviousView = false; } return true; diff -Nru calligra-2.9.7/kexi/plugins/tables/kexitablehandler.desktop calligra-2.9.11/kexi/plugins/tables/kexitablehandler.desktop --- calligra-2.9.7/kexi/plugins/tables/kexitablehandler.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/tables/kexitablehandler.desktop 2016-02-02 19:53:13.000000000 +0000 @@ -8,7 +8,6 @@ GenericName[bs]=Tabele GenericName[ca]=Taules GenericName[ca@valencia]=Taules -GenericName[cs]=Tabulky GenericName[cy]=Tablau GenericName[da]=Tabeller GenericName[de]=Tabellen @@ -19,8 +18,7 @@ GenericName[et]=Tabelid GenericName[eu]=Taulak GenericName[fa]=جدولها -GenericName[fi]=Taulukot -GenericName[fr]=Tableaux +GenericName[fi]=Taulut GenericName[fy]=Tabellen GenericName[ga]=Táblaí GenericName[gl]=Táboas diff -Nru calligra-2.9.7/kexi/plugins/tables/kexitablepart.cpp calligra-2.9.11/kexi/plugins/tables/kexitablepart.cpp --- calligra-2.9.7/kexi/plugins/tables/kexitablepart.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/plugins/tables/kexitablepart.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -179,7 +179,8 @@ } openedObjectsStr += ""; int r = KMessageBox::questionYesNo(parent, - "" + msg + "" + openedObjectsStr + "" + i18nc("@info", "%1%2", msg, openedObjectsStr) + + "" + i18n("Do you want to close all windows for these objects?") + "", QString(), KGuiItem(i18n("Close windows"), koIconName("window-close")), KStandardGuiItem::cancel()); diff -Nru calligra-2.9.7/kexi/widget/dataviewcommon/kexidataawareobjectiface.cpp calligra-2.9.11/kexi/widget/dataviewcommon/kexidataawareobjectiface.cpp --- calligra-2.9.7/kexi/widget/dataviewcommon/kexidataawareobjectiface.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/dataviewcommon/kexidataawareobjectiface.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -77,7 +77,7 @@ m_contextMenuEnabled = true; m_rowWillBeDeleted = -1; m_alsoUpdateNextRow = false; - m_vScrollBarValueChanged_enabled = true; + m_verticalScrollBarValueChanged_enabled = true; m_scrollbarToolTipsEnabled = true; m_recentSearchDirection = KexiSearchAndReplaceViewInterface::Options::DefaultSearchDirection; @@ -165,7 +165,7 @@ QObject::connect(m_data, SIGNAL(rowRepaintRequested(KexiDB::RecordData&)), thisObject, SLOT(slotRowRepaintRequested(KexiDB::RecordData&))); QObject::connect(verticalScrollBar(), SIGNAL(valueChanged(int)), - thisObject, SLOT(vScrollBarValueChanged(int))); + thisObject, SLOT(verticalScrollBarValueChanged(int))); } } @@ -444,9 +444,9 @@ void KexiDataAwareObjectInterface::selectRow(int row) { - m_vScrollBarValueChanged_enabled = false; //disable tooltip + m_verticalScrollBarValueChanged_enabled = false; //disable tooltip setCursorPosition(row, -1); - m_vScrollBarValueChanged_enabled = true; + m_verticalScrollBarValueChanged_enabled = true; } void KexiDataAwareObjectInterface::selectPrevRow() @@ -653,7 +653,7 @@ // the same cell but may need a bit of scrolling to make it visible ensureCellVisible(m_curRow, m_curCol); } - kDebug() << "NO CHANGE"; + //kDebug() << "NO CHANGE"; } if (m_initDataContentsOnShow) { @@ -684,13 +684,13 @@ if (!acceptEditor()) { return false; } - kDebug() << "EDIT RECORD ACCEPTING..."; + //kDebug() << "EDIT RECORD ACCEPTING..."; bool success = true; const bool inserting = m_newRowEditing; if (m_data->rowEditBuffer()->isEmpty() && !m_newRowEditing) { - kDebug() << "-- NOTHING TO ACCEPT!!!"; + //kDebug() << "-- NOTHING TO ACCEPT!!!"; } else {//not empty edit buffer or new row to insert: if (m_newRowEditing) { kDebug() << "-- INSERTING: "; @@ -751,7 +751,7 @@ } //indicate on the vheader that we are not editing if (verticalHeader()) { - kDebug() << currentRow(); + //kDebug() << currentRow(); updateVerticalHeaderSection(currentRow()); } return success; @@ -787,7 +787,7 @@ //indicate on the vheader that we are not editing if (verticalHeader()) { - kDebug() << currentRow(); + //kDebug() << currentRow(); updateVerticalHeaderSection(currentRow()); } @@ -1086,7 +1086,7 @@ if (KMessageBox::Cancel == KMessageBox::warningContinueCancel( dynamic_cast(this), i18n("Do you want to delete selected record?"), QString(), - KGuiItem(i18n("&Delete Record"), koIconName("edit-delete")), KStandardGuiItem::cancel(), + KGuiItem(i18n("&Delete Record"), koIconName("delete_table_row")), KStandardGuiItem::cancel(), "AskBeforeDeleteRow"/*config entry*/, KMessageBox::Notify | KMessageBox::Dangerous)) { @@ -1574,10 +1574,10 @@ return true; } -void KexiDataAwareObjectInterface::vScrollBarValueChanged(int v) +void KexiDataAwareObjectInterface::verticalScrollBarValueChanged(int v) { Q_UNUSED(v); - if (!m_vScrollBarValueChanged_enabled) + if (!m_verticalScrollBarValueChanged_enabled) return; if (m_scrollbarToolTipsEnabled && verticalScrollBar()->isSliderDown()) { diff -Nru calligra-2.9.7/kexi/widget/dataviewcommon/kexidataawareobjectiface.h calligra-2.9.11/kexi/widget/dataviewcommon/kexidataawareobjectiface.h --- calligra-2.9.7/kexi/widget/dataviewcommon/kexidataawareobjectiface.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/dataviewcommon/kexidataawareobjectiface.h 2016-02-02 19:53:13.000000000 +0000 @@ -779,7 +779,7 @@ /*! Handles verticalScrollBar()'s valueChanged(int) signal. Called when vscrollbar's value has been changed. Call this method from the subclass. */ - virtual void vScrollBarValueChanged(int v); + virtual void verticalScrollBarValueChanged(int v); /*! Changes 'row editing' >=0 there's currently edited row, else -1. * Can be reimplemented with calling superclass setRowEditing() @@ -948,9 +948,9 @@ /*! Displays passive error popup label used when invalid data has been entered. */ QPointer m_errorMessagePopup; - /*! Used to enable/disable execution of vScrollBarValueChanged() + /*! Used to enable/disable execution of verticalScrollBarValueChanged() when users navigate through rows using keyboard, so vscrollbar tooltips are not visible. */ - bool m_vScrollBarValueChanged_enabled; + bool m_verticalScrollBarValueChanged_enabled; /*! True, if vscrollbar tooltips are enabled (true by default). */ bool m_scrollbarToolTipsEnabled; diff -Nru calligra-2.9.7/kexi/widget/dataviewcommon/kexidataawareview.cpp calligra-2.9.11/kexi/widget/dataviewcommon/kexidataawareview.cpp --- calligra-2.9.7/kexi/widget/dataviewcommon/kexidataawareview.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/dataviewcommon/kexidataawareview.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -249,9 +249,9 @@ bool KexiDataAwareView::eventFilter(QObject *o, QEvent *e) { // kDebug() << "***" << o << e << window()->selectedView() << this; - if (e->type() == QEvent::FocusIn || e->type() == QEvent::FocusOut) { + /*if (e->type() == QEvent::FocusIn || e->type() == QEvent::FocusOut) { kDebug() << "F O C U S" << e << o; - } + }*/ if (e->type() == QEvent::ShortcutOverride && o == this) { QKeyEvent *ke = static_cast(e); QAction *a = sharedActionRequested(ke, "data_cancel_row_changes"); diff -Nru calligra-2.9.7/kexi/widget/relations/KexiRelationsConnection.cpp calligra-2.9.11/kexi/widget/relations/KexiRelationsConnection.cpp --- calligra-2.9.7/kexi/widget/relations/KexiRelationsConnection.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/relations/KexiRelationsConnection.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -26,6 +26,7 @@ #include #include +#include #include @@ -91,7 +92,7 @@ int rx = d->detailsTable->x() + d->scrollArea->horizontalScrollBar()->value(); int ry = d->detailsTable->globalY(d->detailsField); - QFont f(KexiUtils::smallFont(d->scrollArea)); + QFont f(KGlobalSettings::smallestReadableFont()); f.setBold(true); p->setFont(f); QFontMetrics fm(f); diff -Nru calligra-2.9.7/kexi/widget/relations/KexiRelationsTableContainer_p.cpp calligra-2.9.11/kexi/widget/relations/KexiRelationsTableContainer_p.cpp --- calligra-2.9.7/kexi/widget/relations/KexiRelationsTableContainer_p.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/relations/KexiRelationsTableContainer_p.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -160,10 +160,6 @@ { setSchema(tableOrQuerySchema); setAcceptDrops(true); - - connect(this, SIGNAL(contentsMoving(int,int)), - this, SLOT(slotContentsMoving(int,int))); - horizontalScrollBar()->installEventFilter(this); verticalScrollBar()->installEventFilter(this); } diff -Nru calligra-2.9.7/kexi/widget/tableview/kexicomboboxbase.cpp calligra-2.9.11/kexi/widget/tableview/kexicomboboxbase.cpp --- calligra-2.9.7/kexi/widget/tableview/kexicomboboxbase.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/tableview/kexicomboboxbase.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,6 +1,6 @@ /* This file is part of the KDE project Copyright (C) 2002 Peter Simonsson - Copyright (C) 2003-2015 Jarosław Staniek + Copyright (C) 2003-2016 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -18,16 +18,20 @@ * Boston, MA 02110-1301, USA. */ +#include +#include #include #include #include #include +#include #include #include "kexicomboboxbase.h" #include #include "kexicomboboxpopup.h" #include "KexiTableScrollArea.h" +#include "KexiTableScrollAreaWidget.h" #include "kexi.h" KexiComboBoxBase::KexiComboBoxBase() @@ -413,17 +417,53 @@ QPoint posMappedToGlobal = mapFromParentToGlobal(thisWidget->pos()); if (posMappedToGlobal != QPoint(-1, -1)) { //! todo alter the position to fit the popup within screen boundaries + QPoint pos = posMappedToGlobal + QPoint(0, thisWidget->height()); + if (qobject_cast(thisWidget->parentWidget())) { + KexiTableScrollArea* tableScroll = qobject_cast(thisWidget->parentWidget())->scrollArea; + pos -= QPoint(tableScroll->horizontalScrollBar()->value(), + tableScroll->verticalScrollBar()->value()); + } popup()->hide(); - popup()->move(posMappedToGlobal + QPoint(0, thisWidget->height())); + popup()->move(pos); //kDebug() << "pos:" << posMappedToGlobal + QPoint(0, thisWidget->height()); //to avoid flickering: first resize to 0-height, then show and resize back to prev. height - const int w = popupWidthHint(); + int w = popupWidthHint(); popup()->resize(w, 0); if (show) { popup()->show(); //kDebug(44010) << "SHOW!!!"; } popup()->updateSize(w); + + // make sure the popup fits on the screen + const QRect screen = QApplication::desktop()->availableGeometry(posMappedToGlobal); + pos -= screen.topLeft(); // to simplify computation + w = popup()->width(); + int h = popup()->height(); + if (screen.width() < w) { + w = screen.width(); + pos.setX(0); + } else if (screen.width() < (pos.x() + w - 1)) { + pos.setX(screen.width() - w + 1); + } else if (pos.x() < 0) { + pos.setX(0); + } + if (screen.height() < h) { + h = screen.height(); + pos.setY(0); + } else if (screen.height() < (pos.y() + h - 1)) { + const int topY = pos.y() - thisWidget->height() - h; + if (topY >= 0 && (topY + h - 1 < screen.height())) { + pos.setY(pos.y() - thisWidget->height() - h); + } else { + pos.setY(screen.height() - h + 1); + } + } else if (pos.y() < 0) { + pos.setY(0); + } + popup()->move(pos + screen.topLeft()); + popup()->resize(w, h); + if (m_updatePopupSelectionOnShow) { int rowToHighlight = -1; KexiDB::LookupFieldSchema *lookupFieldSchema = this->lookupFieldSchema(); @@ -516,6 +556,7 @@ const int visibleColumn = visibleColumnIndex(); if (record && visibleColumn != -1 /* && (int)item->size() >= visibleColumn --already checked*/) { valueToSet = record->at(qMin(visibleColumn, record->count() - 1)/*sanity*/); + popup()->tableView()->ensureCellVisible(popup()->tableView()->highlightedRow(), -1); } } else { //use 'enum hints' model diff -Nru calligra-2.9.7/kexi/widget/tableview/kexicomboboxpopup.cpp calligra-2.9.11/kexi/widget/tableview/kexicomboboxpopup.cpp --- calligra-2.9.7/kexi/widget/tableview/kexicomboboxpopup.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/tableview/kexicomboboxpopup.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,5 +1,5 @@ /* This file is part of the KDE project - Copyright (C) 2004-2015 Jarosław Staniek + Copyright (C) 2004-2016 Jarosław Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -32,6 +32,8 @@ #include +#include +#include #include #include #include @@ -350,7 +352,9 @@ int width = qMax(d->tv->tableSize().width(), (te ? te->totalSize().width() : (parentWidget() ? parentWidget()->width() : 0/*sanity*/))); //kDebug() << "size=" << size(); - resize(qMax(minWidth, width)/*+(d->tv->columnCount()>1?2:0)*/ /*(d->updateSizeCalled?0:1)*/, d->tv->rowHeight() * rows + 2); + const QRect screen = QApplication::desktop()->availableGeometry(this); + resize(qMin(screen.width(), qMax(minWidth, width)), d->tv->rowHeight() * rows + 2); + //kDebug() << "size after=" << size(); if (d->visibleColumnsToShow.isEmpty()) { // row source type is not Query diff -Nru calligra-2.9.7/kexi/widget/tableview/KexiDataTableScrollArea.cpp calligra-2.9.11/kexi/widget/tableview/KexiDataTableScrollArea.cpp --- calligra-2.9.7/kexi/widget/tableview/KexiDataTableScrollArea.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/tableview/KexiDataTableScrollArea.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -70,6 +70,7 @@ kWarning() << "Cursor should have query schema defined!\n--aborting setData().\n"; m_cursor->debug(); clearColumns(); + m_cursor = 0; return false; } @@ -82,6 +83,7 @@ kWarning() << "Cannot open cursor\n--aborting setData(). \n" << m_cursor->serverErrorMsg(); m_cursor->debug(); clearColumns(); + m_cursor = 0; return false; } @@ -98,8 +100,11 @@ setWindowTitle(windowTitle); //PRIMITIVE!! data setting: - tv_data->preloadAllRows(); - + if (!tv_data->preloadAllRows()) { + delete tv_data; + clearColumns(); + m_cursor = 0; + } KexiTableScrollArea::setData(tv_data); return true; } diff -Nru calligra-2.9.7/kexi/widget/tableview/KexiDataTableView.cpp calligra-2.9.11/kexi/widget/tableview/KexiDataTableView.cpp --- calligra-2.9.7/kexi/widget/tableview/KexiDataTableView.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/tableview/KexiDataTableView.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -110,12 +110,13 @@ return true; } -void -KexiDataTableView::setData(KexiDB::Cursor *c) +bool KexiDataTableView::setWidgetData(KexiDB::Cursor *cursor) { - if (!dynamic_cast(mainWidget())) - return; - dynamic_cast(mainWidget())->setData(c); + bool ok = dynamic_cast(mainWidget()); + if (!ok) { + return false; + } + return dynamic_cast(mainWidget())->setData(cursor); } void KexiDataTableView::filter() diff -Nru calligra-2.9.7/kexi/widget/tableview/KexiDataTableView.h calligra-2.9.11/kexi/widget/tableview/KexiDataTableView.h --- calligra-2.9.7/kexi/widget/tableview/KexiDataTableView.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/tableview/KexiDataTableView.h 2016-02-02 19:53:13.000000000 +0000 @@ -66,9 +66,6 @@ bool loadTableViewSettings(KexiDB::TableViewData* data); public Q_SLOTS: - /*! Sets data. Only works for db-aware table. */ - void setData(KexiDB::Cursor *cursor); - /*! Saves settings for the view. Implemented for KexiView. */ virtual bool saveSettings(); @@ -79,6 +76,8 @@ protected: void init(); + virtual bool setWidgetData(KexiDB::Cursor *cursor); + class Private; Private * const d; }; diff -Nru calligra-2.9.7/kexi/widget/tableview/kexiinputtableedit.cpp calligra-2.9.11/kexi/widget/tableview/kexiinputtableedit.cpp --- calligra-2.9.7/kexi/widget/tableview/kexiinputtableedit.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/tableview/kexiinputtableedit.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -192,7 +192,8 @@ QVariant KexiInputTableEdit::value() { - if (field()->isFPNumericType()) {//==KexiDB::Field::Double || m_type==KexiDB::Field::Float) { + const KexiDB::Field::Type type = field()->type(); // cache: evaluating type of expressions can be expensive + if (KexiDB::Field::isFPNumericType(type)) {//==KexiDB::Field::Double || type==KexiDB::Field::Float) { //! js @todo PRESERVE PRECISION! QString txt = m_lineedit->text(); if (m_decsym != ".") @@ -200,10 +201,10 @@ bool ok; const double result = txt.toDouble(&ok); return ok ? QVariant(result) : QVariant(); - } else if (field()->isIntegerType()) { + } else if (KexiDB::Field::isIntegerType(type)) { //! @todo check constraints bool ok; - if (KexiDB::Field::BigInteger == field()->type()) { + if (KexiDB::Field::BigInteger == type) { if (field()->isUnsigned()) { const quint64 result = m_lineedit->text().toULongLong(&ok); return ok ? QVariant(result) : QVariant(); @@ -212,7 +213,7 @@ return ok ? QVariant(result) : QVariant(); } } - if (KexiDB::Field::Integer == field()->type()) { + if (KexiDB::Field::Integer == type) { if (field()->isUnsigned()) { const uint result = m_lineedit->text().toUInt(&ok); return ok ? QVariant(result) : QVariant(); @@ -336,7 +337,7 @@ .arg(m_rightMarginWhenFocused) // right .arg(align_right ? 0 : 2) // left ); - kDebug() << m_rightMarginWhenFocused << m_lineedit->styleSheet(); + //kDebug() << m_rightMarginWhenFocused << m_lineedit->styleSheet(); } KEXI_CELLEDITOR_FACTORY_ITEM_IMPL(KexiInputEditorFactoryItem, KexiInputTableEdit) diff -Nru calligra-2.9.7/kexi/widget/tableview/kexitableedit.cpp calligra-2.9.11/kexi/widget/tableview/kexitableedit.cpp --- calligra-2.9.7/kexi/widget/tableview/kexitableedit.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/tableview/kexitableedit.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -52,14 +52,15 @@ setPalette(pal); //margins - if (displayedField()->isFPNumericType()) { + const KexiDB::Field::Type type = displayedField()->type(); // cache: evaluating type of expressions can be expensive + if (KexiDB::Field::isFPNumericType(type)) { #ifdef Q_WS_WIN m_leftMargin = 0; #else m_leftMargin = 0; #endif m_rightMargin = 6; - } else if (displayedField()->isIntegerType()) { + } else if (KexiDB::Field::isIntegerType(type)) { #ifdef Q_WS_WIN m_leftMargin = 1; #else @@ -219,14 +220,15 @@ y_offset = 0; #endif - if (realField->isFPNumericType()) { + const KexiDB::Field::Type type = realField->type(); // cache: evaluating type of expressions can be expensive + if (KexiDB::Field::isFPNumericType(type)) { //! @todo ADD OPTION to displaying NULL VALUES as e.g. "(null)" if (!val.isNull()) { txt = KexiDB::formatNumberForVisibleDecimalPlaces( val.toDouble(), realField->visibleDecimalPlaces()); } align |= Qt::AlignRight; - } else if (realField->isIntegerType()) { + } else if (KexiDB::Field::isIntegerType(type)) { qint64 num = val.toLongLong(); align |= Qt::AlignRight; if (!val.isNull()) diff -Nru calligra-2.9.7/kexi/widget/tableview/KexiTableScrollArea.cpp calligra-2.9.11/kexi/widget/tableview/KexiTableScrollArea.cpp --- calligra-2.9.7/kexi/widget/tableview/KexiTableScrollArea.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/tableview/KexiTableScrollArea.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1024,7 +1024,8 @@ static bool overrideEditorShortcutNeeded(QKeyEvent *e) { //perhaps more to come... - return e->key() == Qt::Key_Delete && e->modifiers() == Qt::ControlModifier; + return (e->key() == Qt::Key_Delete && e->modifiers() == Qt::ControlModifier) + || (e->key() == Qt::Key_Insert && e->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier)); } bool KexiTableScrollArea::shortCutPressed(QKeyEvent *e, const QString &action_name) @@ -1242,12 +1243,12 @@ } } - m_vScrollBarValueChanged_enabled = false; + m_verticalScrollBarValueChanged_enabled = false; // if focus cell changes, repaint setCursorPosition(curRow, curCol, DontEnsureCursorVisibleIfPositionUnchanged); - m_vScrollBarValueChanged_enabled = true; + m_verticalScrollBarValueChanged_enabled = true; e->accept(); } @@ -1442,9 +1443,9 @@ updateGeometries(); //now we can ensure cell's visibility ( if there was such a call before show() ) - if (d->ensureCellVisibleOnShow != QPoint(-1, -1)) { + if (d->ensureCellVisibleOnShow != QPoint(-17, -17)) { // because (-1, -1) means "current cell" ensureCellVisible(d->ensureCellVisibleOnShow.y(), d->ensureCellVisibleOnShow.x()); - d->ensureCellVisibleOnShow = QPoint(-1, -1); //reset the flag + d->ensureCellVisibleOnShow = QPoint(-17, -17); //reset the flag } if (d->firstShowEvent) { ensureVisible(0, 0, 0, 0); // needed because for small geometries contents were moved 1/2 of row height up @@ -1724,10 +1725,19 @@ d->ensureCellVisibleOnShow = QPoint(row, col); return; } + if (col == -1) { + col = m_curCol; + } + if (row == -1) { + row = m_curRow; + } + if (col < 0 || row < 0) { + return; + } //quite clever: ensure the cell is visible: - QRect r(columnPos(col == -1 ? m_curCol : col) - 1, rowPos(row) + (d->appearance.fullRowSelection ? 1 : 0) - 1, - columnWidth(col == -1 ? m_curCol : col) + 2, rowHeight() + 2); + QRect r(columnPos(col) - 1, rowPos(row) + (d->appearance.fullRowSelection ? 1 : 0) - 1, + columnWidth(col) + 2, rowHeight() + 2); if (navPanelWidgetVisible() && horizontalScrollBar()->isHidden()) { //a hack: for visible navigator: increase height of the visible rect 'r' @@ -1829,6 +1839,19 @@ updateRow(m_data->indexOf(&record)); } +void KexiTableScrollArea::verticalScrollBarValueChanged(int v) +{ + KexiDataAwareObjectInterface::verticalScrollBarValueChanged(v); + const QPoint posInViewport = viewport()->mapFromGlobal(QCursor::pos()) + - QPoint(contentsMargins().left(), contentsMargins().top()); + //kDebug() << posInViewport << contentsRect().size() - QSize(leftMargin(), topMargin()) + // << QRect(QPoint(0, 0), contentsRect().size() - QSize(leftMargin(), topMargin())); + const int row = rowAt(posInViewport.y() + verticalScrollBar()->value()); + if (row >= 0) { + setHighlightedRow(row); + } +} + #ifndef KEXI_NO_PRINT void KexiTableScrollArea::print(QPrinter & /*printer*/ , QPrintDialog & /*printDialog*/) diff -Nru calligra-2.9.7/kexi/widget/tableview/KexiTableScrollArea.h calligra-2.9.11/kexi/widget/tableview/KexiTableScrollArea.h --- calligra-2.9.7/kexi/widget/tableview/KexiTableScrollArea.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/tableview/KexiTableScrollArea.h 2016-02-02 19:53:13.000000000 +0000 @@ -311,8 +311,9 @@ void setHighlightedRow(int row); /*! Ensures that cell at \a row and \a col is visible. - If \a col is -1, current column number is used. \a row and \a col, if not -1, must - be between 0 and rowCount()-1 (or columnCount()-1 accordingly). */ + If \a col is -1, current column number is used. + If \a row is -1, current row number is used. + \a row and \a col, if not -1, must be between 0 and rowCount()-1 (or columnCount()-1 accordingly). */ virtual void ensureCellVisible(int row, int col); /*! Ensures that column \a col is visible. @@ -481,9 +482,7 @@ /*! Handles verticalScrollBar()'s valueChanged(int) signal. Called when vscrollbar's value has been changed. */ - virtual void vScrollBarValueChanged(int v) { - KexiDataAwareObjectInterface::vScrollBarValueChanged(v); - } + virtual void verticalScrollBarValueChanged(int v); //! for navigator virtual void moveToRecordRequested(uint row); diff -Nru calligra-2.9.7/kexi/widget/tableview/KexiTableScrollArea_p.cpp calligra-2.9.11/kexi/widget/tableview/KexiTableScrollArea_p.cpp --- calligra-2.9.7/kexi/widget/tableview/KexiTableScrollArea_p.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/tableview/KexiTableScrollArea_p.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -39,7 +39,7 @@ navigatorEnabled = true; contextMenuEnabled = true; skipKeyPress = false; - ensureCellVisibleOnShow = QPoint(-1, -1); + ensureCellVisibleOnShow = QPoint(-17, -17); // because (-1, -1) means "current cell" internal_bottomMargin = 0; highlightedRow = -1; moveCursorOnMouseRelease = false; diff -Nru calligra-2.9.7/kexi/widget/tableview/KexiTableScrollArea_p.h calligra-2.9.11/kexi/widget/tableview/KexiTableScrollArea_p.h --- calligra-2.9.7/kexi/widget/tableview/KexiTableScrollArea_p.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/tableview/KexiTableScrollArea_p.h 2016-02-02 19:53:13.000000000 +0000 @@ -125,7 +125,8 @@ QList maximizeColumnsWidthOnShow; /*! Used for delayed call of ensureCellVisible() after show(). - It's equal to (-1,-1) if ensureCellVisible() shouldn't e called. */ + (-1, -1) means "current cell". + It's equal to (-17,-17) if ensureCellVisible() shouldn't e called. */ QPoint ensureCellVisibleOnShow; /*! @internal Changes bottom margin settings, in pixels. diff -Nru calligra-2.9.7/kexi/widget/utils/kexirecordnavigator.cpp calligra-2.9.11/kexi/widget/utils/kexirecordnavigator.cpp --- calligra-2.9.7/kexi/widget/utils/kexirecordnavigator.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/kexi/widget/utils/kexirecordnavigator.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -123,7 +123,7 @@ d->lyr->addWidget(d->textLabel); setLabelText(i18n("Record:")); - setFont( KexiUtils::smallFont() ); + setFont(KGlobalSettings::smallestReadableFont()); QFontMetrics fm(font()); d->nav1DigitWidth = fm.width("8"); diff -Nru calligra-2.9.7/KoIcon.h calligra-2.9.11/KoIcon.h --- calligra-2.9.7/KoIcon.h 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/KoIcon.h 2016-02-02 19:53:13.000000000 +0000 @@ -66,7 +66,6 @@ /// Use this function to load an icon that fits the current color theme inline KIcon themedIcon(const QString &name, bool fast = false) { Q_UNUSED(fast); - static bool firstUse = true; if (firstUse) { // workaround for some kde-related crash @@ -75,12 +74,20 @@ firstUse = false; } + QString realName; + // try load themed icon QColor background = qApp->palette().background().color(); bool useDarkIcons = background.value() > 100; const char * const prefix = useDarkIcons ? "dark_" : "light_"; - QString realName = QLatin1String(prefix) + name; + realName = QLatin1String(prefix) + name; + + bool absent = KIconLoader::global()->iconPath(realName, KIconLoader::User, true).isEmpty(); + if (absent) { + realName = name; + } + KIcon icon(realName); // fallback diff -Nru calligra-2.9.7/krita/benchmarks/kis_composition_benchmark.cpp calligra-2.9.11/krita/benchmarks/kis_composition_benchmark.cpp --- calligra-2.9.7/krita/benchmarks/kis_composition_benchmark.cpp 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/krita/benchmarks/kis_composition_benchmark.cpp 2016-02-02 19:53:13.000000000 +0000 @@ -1,5 +1,6 @@ /* * Copyright (c) 2012 Dmitry Kazakov + * Copyright (c) 2015 Thorsten Zachmann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -38,6 +39,7 @@ #include #include +#include #include #endif @@ -52,57 +54,119 @@ ALPHA_RANDOM }; -inline quint8 generateAlphaValue(AlphaRange range) { - quint8 value = 0; + +template +inline channel_type generateAlphaValue(AlphaRange range, RandomGenerator &rnd) { + channel_type value = 0; switch (range) { case ALPHA_ZERO: break; case ALPHA_UNIT: - value = 255; + value = rnd.unit(); break; case ALPHA_RANDOM: - value = qrand() % 255; + value = rnd(); break; } return value; } +#include +#include +#include + +template +struct RandomGenerator { + channel_type operator() () { + qFatal("Wrong template instantiation"); + return channel_type(0); + } + + channel_type unit() { + qFatal("Wrong template instantiation"); + return channel_type(0); + } +}; + +template <> +struct RandomGenerator +{ + RandomGenerator(int seed) + : m_smallint(0,255), + m_rnd(seed) + { + } + + quint8 operator() () { + return m_smallint(m_rnd); + } + + quint8 unit() { + return KoColorSpaceMathsTraits::unitValue; + } + + boost::uniform_smallint m_smallint; + boost::mt11213b m_rnd; +}; + +template <> +struct RandomGenerator +{ + RandomGenerator(int seed) + : m_rnd(seed) + { + } + + float operator() () { + //return float(m_rnd()) / float(m_rnd.max()); + return m_smallfloat(m_rnd); + } + + float unit() { + return KoColorSpaceMathsTraits::unitValue; + } + + boost::uniform_real m_smallfloat; + boost::mt11213b m_rnd; +}; + +template <> +struct RandomGenerator : RandomGenerator +{ + RandomGenerator(int seed) + : RandomGenerator(seed) + { + } +}; + + +template void generateDataLine(uint seed, int numPixels, quint8 *srcPixels, quint8 *dstPixels, quint8 *mask, AlphaRange srcAlphaRange, AlphaRange dstAlphaRange) { Q_ASSERT(numPixels >= 4); - for (int i = 0; i < 4; i++) { - srcPixels[4*i] = i * 10 + 30; - srcPixels[4*i+1] = i * 10 + 30; - srcPixels[4*i+2] = i * 10 + 30; - srcPixels[4*i+3] = i * 10 + 35; - - dstPixels[4*i] = i * 10 + 160; - dstPixels[4*i+1] = i * 10 + 160; - dstPixels[4*i+2] = i * 10 + 160; - dstPixels[4*i+3] = i * 10 + 165; - - mask[i] = i * 10 + 225; - } - - qsrand(seed); - numPixels -= 4; - srcPixels += 4 * 4; - dstPixels += 4 * 4; - mask += 4; + RandomGenerator rnd(seed); + RandomGenerator maskRnd(seed + 1); + + channel_type *srcArray = reinterpret_cast(srcPixels); + channel_type *dstArray = reinterpret_cast(dstPixels); for (int i = 0; i < numPixels; i++) { for (int j = 0; j < 3; j++) { - *(srcPixels++) = qrand() % 255; - *(dstPixels++) = qrand() % 255; + channel_type s = rnd(); + channel_type d = rnd(); + *(srcArray++) = s; + *(dstArray++) = d; } - *(srcPixels++) = generateAlphaValue(srcAlphaRange); - *(dstPixels++) = generateAlphaValue(dstAlphaRange); + channel_type sa = generateAlphaValue(srcAlphaRange, rnd); + channel_type da = generateAlphaValue(dstAlphaRange, rnd); + *(srcArray++) = sa; + *(dstArray++) = da; - *(mask++) = qrand() % 255; + *(mask++) = maskRnd(); } } @@ -141,7 +205,8 @@ const int srcAlignmentShift, const int dstAlignmentShift, AlphaRange srcAlphaRange, - AlphaRange dstAlphaRange) + AlphaRange dstAlphaRange, + const quint32 pixelSize) { QVector tiles(size); @@ -151,18 +216,34 @@ const int vecSize = 1; #endif - const size_t pixelAlignment = qMax(size_t(vecSize * 4), sizeof(void*)); - const size_t maskAlignment = qMax(size_t(vecSize), sizeof(void*)); - + // the 256 are used to make sure that we have a good alignment no matter what build options are used. + const size_t pixelAlignment = qMax(size_t(vecSize * sizeof(float)), size_t(256)); + const size_t maskAlignment = qMax(size_t(vecSize), size_t(256)); for (int i = 0; i < size; i++) { void *ptr = NULL; - posix_memalign(&ptr, pixelAlignment, numPixels * 4 + srcAlignmentShift); + int error = posix_memalign(&ptr, pixelAlignment, numPixels * pixelSize + srcAlignmentShift); + if (error) { + qFatal("posix_memalign failed: %d", error); + } tiles[i].src = (quint8*)ptr + srcAlignmentShift; - posix_memalign(&ptr, pixelAlignment, numPixels * 4 + dstAlignmentShift); + error = posix_memalign(&ptr, pixelAlignment, numPixels * pixelSize + dstAlignmentShift); + if (error) { + qFatal("posix_memalign failed: %d", error); + } tiles[i].dst = (quint8*)ptr + dstAlignmentShift; - posix_memalign(&ptr, maskAlignment, numPixels); + error = posix_memalign(&ptr, maskAlignment, numPixels); + if (error) { + qFatal("posix_memalign failed: %d", error); + } tiles[i].mask = (quint8*)ptr; - generateDataLine(1, numPixels, tiles[i].src, tiles[i].dst, tiles[i].mask, srcAlphaRange, dstAlphaRange); + + if (pixelSize == 4) { + generateDataLine(1, numPixels, tiles[i].src, tiles[i].dst, tiles[i].mask, srcAlphaRange, dstAlphaRange); + } else if (pixelSize == 16) { + generateDataLine(1, numPixels, tiles[i].src, tiles[i].dst, tiles[i].mask, srcAlphaRange, dstAlphaRange); + } else { + qFatal("Pixel size %i is not implemented", pixelSize); + } } return tiles; @@ -179,22 +260,58 @@ } } -inline bool fuzzyCompare(quint8 a, quint8 b, quint8 prec) { +template +inline bool fuzzyCompare(channel_type a, channel_type b, channel_type prec) { return qAbs(a - b) <= prec; } -inline bool comparePixels(quint8 *p1, quint8*p2, quint8 prec) { +template +inline bool comparePixels(channel_type *p1, channel_type *p2, channel_type prec) { return (p1[3] == p2[3] && p1[3] == 0) || (fuzzyCompare(p1[0], p2[0], prec) && fuzzyCompare(p1[1], p2[1], prec) && fuzzyCompare(p1[2], p2[2], prec) && fuzzyCompare(p1[3], p2[3], prec)); +} + +template +bool compareTwoOpsPixels(QVector &tiles, channel_type prec) { + channel_type *dst1 = reinterpret_cast(tiles[0].dst); + channel_type *dst2 = reinterpret_cast(tiles[1].dst); + + channel_type *src1 = reinterpret_cast(tiles[0].src); + channel_type *src2 = reinterpret_cast(tiles[1].src); + for (int i = 0; i < numPixels; i++) { + if (!comparePixels(dst1, dst2, prec)) { + qDebug() << "Wrong result:" << i; + qDebug() << "Act: " << dst1[0] << dst1[1] << dst1[2] << dst1[3]; + qDebug() << "Exp: " << dst2[0] << dst2[1] << dst2[2] << dst2[3]; + qDebug() << "Dif: " << dst1[0] - dst2[0] << dst1[1] - dst2[1] << dst1[2] - dst2[2] << dst1[3] - dst2[3]; + + channel_type *s1 = src1 + 4 * i; + channel_type *s2 = src2 + 4 * i; + + qDebug() << "SrcA:" << s1[0] << s1[1] << s1[2] << s1[3]; + qDebug() << "SrcE:" << s2[0] << s2[1] << s2[2] << s2[3]; + + qDebug() << "MskA:" << tiles[0].mask[i]; + qDebug() << "MskE:" << tiles[1].mask[i]; + + return false; + } + dst1 += 4; + dst2 += 4; + } + return true; } bool compareTwoOps(bool haveMask, const KoCompositeOp *op1, const KoCompositeOp *op2) { - QVector tiles = generateTiles(2, 16, 16, ALPHA_RANDOM, ALPHA_RANDOM); + Q_ASSERT(op1->colorSpace()->pixelSize() == op2->colorSpace()->pixelSize()); + const quint32 pixelSize = op1->colorSpace()->pixelSize(); + const int alignment = 16; + QVector tiles = generateTiles(2, alignment, alignment, ALPHA_RANDOM, ALPHA_RANDOM, op1->colorSpace()->pixelSize()); KoCompositeOp::ParameterInfo params; params.dstRowStride = 4 * rowStride; @@ -202,7 +319,8 @@ params.maskRowStride = rowStride; params.rows = processRect.height(); params.cols = processRect.width(); - params.opacity = 0.5*1.0f; + // This is a hack as in the old version we get a rounding of opacity to this value + params.opacity = float(Arithmetic::scale(0.5*1.0f))/255.0; params.flow = 0.3*1.0f; params.channelFlags = QBitArray(); @@ -216,33 +334,20 @@ params.maskRowStart = haveMask ? tiles[1].mask : 0; op2->composite(params); - quint8 *dst1 = tiles[0].dst; - quint8 *dst2 = tiles[1].dst; - for (int i = 0; i < numPixels; i++) { - if (!comparePixels(dst1, dst2, 7)) { - - qDebug() << "Wrong result:" << i; - qDebug() << "Act: " << dst1[0] << dst1[1] << dst1[2] << dst1[3]; - qDebug() << "Exp: " << dst2[0] << dst2[1] << dst2[2] << dst2[3]; - - quint8 *src1 = tiles[0].src + 4 * i; - quint8 *src2 = tiles[1].src + 4 * i; - - qDebug() << "SrcA:" << src1[0] << src1[1] << src1[2] << src1[3]; - qDebug() << "SrcE:" << src2[0] << src2[1] << src2[2] << src2[3]; - - qDebug() << "MskA:" << tiles[0].mask[i]; - qDebug() << "MskE:" << tiles[1].mask[i]; - - return false; - } - dst1 += 4; - dst2 += 4; + bool compareResult = true; + if (pixelSize == 4) { + compareResult = compareTwoOpsPixels(tiles, 10); + } + else if (pixelSize == 16) { + compareResult = compareTwoOpsPixels(tiles, 0); + } + else { + qFatal("Pixel size %i is not implemented", pixelSize); } - freeTiles(tiles, 16, 16); + freeTiles(tiles, alignment, alignment); - return true; + return compareResult; } QString getTestName(bool haveMask, @@ -286,10 +391,7 @@ QString testName = getTestName(haveMask, srcAlignmentShift, dstAlignmentShift, srcAlphaRange, dstAlphaRange); QVector tiles = - generateTiles(numTiles, srcAlignmentShift, dstAlignmentShift, srcAlphaRange, dstAlphaRange); - -// qDebug() << "Initial values:"; -// printData(8, tiles[0].src, tiles[0].dst, tiles[0].mask); + generateTiles(numTiles, srcAlignmentShift, dstAlignmentShift, srcAlphaRange, dstAlphaRange, op->colorSpace()->pixelSize()); const int tileOffset = 4 * (processRect.y() * rowStride + processRect.x()); @@ -315,9 +417,6 @@ qDebug() << testName << "RESULT:" << timer.elapsed() << "msec"; -// qDebug() << "Final values:"; -// printData(8, tiles[0].src, tiles[0].dst, tiles[0].mask); - freeTiles(tiles, srcAlignmentShift, dstAlignmentShift); } @@ -352,10 +451,10 @@ #ifdef HAVE_VC template -void checkRounding(qreal opacity, qreal flow, qreal averageOpacity = -1) +void checkRounding(qreal opacity, qreal flow, qreal averageOpacity = -1, quint32 pixelSize = 4) { QVector tiles = - generateTiles(2, 0, 0, ALPHA_RANDOM, ALPHA_RANDOM); + generateTiles(2, 0, 0, ALPHA_RANDOM, ALPHA_RANDOM, pixelSize); const int vecSize = Vc::float_v::Size; @@ -381,6 +480,8 @@ params.channelFlags = QBitArray(); typename Compositor::OptionalParams optionalParams(params); + // The error count is needed as 38.5 gets rounded to 38 instead of 39 in the vc version. + int errorcount = 0; for (int i = 0; i < numBlocks; i++) { Compositor::template compositeVector(src1, dst1, msk1, params.opacity, optionalParams); for (int j = 0; j < vecSize; j++) { @@ -393,7 +494,25 @@ Compositor::template compositeOnePixelScalar(src2, dst2, msk2, params.opacity, optionalParams); - if(!comparePixels(dst1, dst2, 0)) { + bool compareResult = true; + if (pixelSize == 4) { + compareResult = comparePixels(dst1, dst2, 0); + if (!compareResult) { + ++errorcount; + compareResult = comparePixels(dst1, dst2, 1); + if (!compareResult) { + ++errorcount; + } + } + } + else if (pixelSize == 16) { + compareResult = comparePixels(reinterpret_cast(dst1), reinterpret_cast(dst2), 0); + } + else { + qFatal("Pixel size %i is not implemented", pixelSize); + } + + if(!compareResult || errorcount > 1) { qDebug() << "Wrong rounding in pixel:" << 8 * i + j; qDebug() << "Vector version: " << dst1[0] << dst1[1] << dst1[2] << dst1[3]; qDebug() << "Scalar version: " << dst2[0] << dst2[1] << dst2[2] << dst2[3]; @@ -404,10 +523,10 @@ QFAIL("Wrong rounding"); } - src1 += 4; - dst1 += 4; - src2 += 4; - dst2 += 4; + src1 += pixelSize; + dst1 += pixelSize; + src2 += pixelSize; + dst2 += pixelSize; msk1++; msk2++; } @@ -461,6 +580,13 @@ #endif } +void KisCompositionBenchmark::checkRoundingOverRgbaF32() +{ +#ifdef HAVE_VC + checkRounding >(0.5, 0.3, -1, 16); +#endif +} + void KisCompositionBenchmark::compareAlphaDarkenOps() { const KoColorSpace *cs = KoColorSpaceRegistry::instance()->rgb8(); @@ -509,6 +635,18 @@ delete opAct; } +void KisCompositionBenchmark::compareRgbF32OverOps() +{ + const KoColorSpace *cs = KoColorSpaceRegistry::instance()->colorSpace("RGBA", "F32", ""); + KoCompositeOp *opAct = KoOptimizedCompositeOpFactory::createOverOp128(cs); + KoCompositeOp *opExp = new KoCompositeOpOver(cs); + + QVERIFY(compareTwoOps(false, opAct, opExp)); + + delete opExp; + delete opAct; +} + void KisCompositionBenchmark::testRgb8CompositeAlphaDarkenLegacy() { const KoColorSpace *cs = KoColorSpaceRegistry::instance()->rgb8(); @@ -541,6 +679,22 @@ delete op; } +void KisCompositionBenchmark::testRgbF32CompositeOverLegacy() +{ + const KoColorSpace *cs = KoColorSpaceRegistry::instance()->colorSpace("RGBA", "F32", ""); + KoCompositeOp *op = new KoCompositeOpOver(cs); + benchmarkCompositeOp(op, "RGBF32 Legacy"); + delete op; +} + +void KisCompositionBenchmark::testRgbF32CompositeOverOptimized() +{ + const KoColorSpace *cs = KoColorSpaceRegistry::instance()->colorSpace("RGBA", "F32", ""); + KoCompositeOp *op = KoOptimizedCompositeOpFactory::createOverOp128(cs); + benchmarkCompositeOp(op, "RGBF32 Optimized"); + delete op; +} + void KisCompositionBenchmark::testRgb8CompositeAlphaDarkenReal_Aligned() { const KoColorSpace *cs = KoColorSpaceRegistry::instance()->rgb8(); @@ -565,7 +719,7 @@ void KisCompositionBenchmark::benchmarkMemcpy() { QVector tiles = - generateTiles(numTiles, 0, 0, ALPHA_UNIT, ALPHA_UNIT); + generateTiles(numTiles, 0, 0, ALPHA_UNIT, ALPHA_UNIT, 4); QBENCHMARK_ONCE { foreach (const Tile &tile, tiles) { @@ -588,9 +742,15 @@ #ifdef HAVE_VC const int dataSize = 4096; void *ptr = NULL; - posix_memalign(&ptr, uint8VecAlignment, dataSize); + int error = posix_memalign(&ptr, uint8VecAlignment, dataSize); + if (error) { + qFatal("posix_memalign failed: %d", error); + } quint8 *iData = (quint8*)ptr; - posix_memalign(&ptr, floatVecAlignment, dataSize * sizeof(float)); + error = posix_memalign(&ptr, floatVecAlignment, dataSize * sizeof(float)); + if (error) { + qFatal("posix_memalign failed: %d", error); + } float *fData = (float*)ptr; QBENCHMARK { @@ -612,9 +772,15 @@ #ifdef HAVE_VC const int dataSize = 4096; void *ptr = NULL; - posix_memalign(&ptr, uint8VecAlignment, dataSize); + int error = posix_memalign(&ptr, uint8VecAlignment, dataSize); + if (error) { + qFatal("posix_memalign failed: %d", error); + } quint8 *iData = (quint8*)ptr; - posix_memalign(&ptr, floatVecAlignment, dataSize * sizeof(float)); + error = posix_memalign(&ptr, floatVecAlignment, dataSize * sizeof(float)); + if (error) { + qFatal("posix_memalign failed: %d", error); + } float *fData = (float*)ptr; QBENCHMARK { @@ -636,9 +802,15 @@ #ifdef HAVE_VC const int dataSize = 4096; void *ptr = NULL; - posix_memalign(&ptr, uint32VecAlignment, dataSize * sizeof(quint32)); + int error = posix_memalign(&ptr, uint32VecAlignment, dataSize * sizeof(quint32)); + if (error) { + qFatal("posix_memalign failed: %d", error); + } quint32 *iData = (quint32*)ptr; - posix_memalign(&ptr, floatVecAlignment, dataSize * sizeof(float)); + error = posix_memalign(&ptr, floatVecAlignment, dataSize * sizeof(float)); + if (error) { + qFatal("posix_memalign failed: %d", error); + } float *fData = (float*)ptr; QBENCHMARK { @@ -660,9 +832,15 @@ #ifdef HAVE_VC const int dataSize = 4096; void *ptr = NULL; - posix_memalign(&ptr, uint32VecAlignment, dataSize * sizeof(quint32)); + int error = posix_memalign(&ptr, uint32VecAlignment, dataSize * sizeof(quint32)); + if (error) { + qFatal("posix_memalign failed: %d", error); + } quint32 *iData = (quint32*)ptr; - posix_memalign(&ptr, floatVecAlignment, dataSize * sizeof(float)); + error = posix_memalign(&ptr, floatVecAlignment, dataSize * sizeof(float)); + if (error) { + qFatal("posix_memalign failed: %d", error); + } float *fData = (float*)ptr; QBENCHMARK { diff -Nru calligra-2.9.7/krita/benchmarks/kis_composition_benchmark.h calligra-2.9.11/krita/benchmarks/kis_composition_benchmark.h --- calligra-2.9.7/krita/benchmarks/kis_composition_benchmark.h 2015-08-29 14:38:24.000000000 +0000 +++ calligra-2.9.11/krita/benchmarks/kis_composition_benchmark.h 2016-02-02 19:53:13.000000000 +0000 @@ -32,11 +32,13 @@ void checkRoundingAlphaDarken_05_10_08(); void checkRoundingOver(); + void checkRoundingOverRgbaF32(); void compareAlphaDarkenOps(); void compareAlphaDarkenOpsNoMask(); void compareOverOps(); void compareOverOpsNoMask(); + void compareRgbF32OverOps(); void testRgb8CompositeAlphaDarkenLegacy(); void testRgb8CompositeAlphaDarkenOptimized(); @@ -44,6 +46,9 @@ void testRgb8CompositeOverLegacy(); void testRgb8CompositeOverOptimized(); + void testRgbF32CompositeOverLegacy(); + void testRgbF32CompositeOverOptimized(); + void testRgb8CompositeAlphaDarkenReal_Aligned(); void testRgb8CompositeOverReal_Aligned(); diff -Nru calligra-2.9.7/krita/CMakeLists.txt calligra-2.9.11/krita/CMakeLists.txt --- calligra-2.9.7/krita/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/CMakeLists.txt 2016-02-02 19:53:13.000000000 +0000 @@ -155,7 +155,7 @@ set(BREAKPAD_LIBS breakpad) endif() -kde4_add_app_icon(krita_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/pics/app/hi*-app-calligrakrita.png") +kde4_add_app_icon(krita_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/pics/app/hi*-app-calligrakrita2.png") kde4_add_executable(krita ${krita_SRCS}) target_link_libraries(krita kritaui ${BREAKPAD_LIBS}) diff -Nru calligra-2.9.7/krita/data/krita_brush.desktop calligra-2.9.11/krita/data/krita_brush.desktop --- calligra-2.9.7/krita/data/krita_brush.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/krita_brush.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -6,7 +6,6 @@ Comment[bs]=Plugin Četke za Krita Comment[ca]=Connector de pinzell per al Krita Comment[ca@valencia]=Connector de pinzell per al Krita -Comment[cs]=Modul štětců pro Kritu Comment[da]=Penselplugin til Krita Comment[de]=Pinselmodul für Krita Comment[el]=Πρόσθετο πινέλου για το Krita @@ -15,7 +14,6 @@ Comment[et]=Krita pintsliplugin Comment[eu]=Krita-rako pintzel-plugina Comment[fi]=Sivellinliitännäinen Kritaan -Comment[fr]=Module externe brosses de Krita Comment[fy]=Kwastplugin foar Krita Comment[ga]=Breiseán scuaibe le haghaidh Krita Comment[gl]=Complemento para Krita de pinceis. diff -Nru calligra-2.9.7/krita/data/krita_dock.desktop calligra-2.9.11/krita/data/krita_dock.desktop --- calligra-2.9.7/krita/data/krita_dock.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/krita_dock.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -6,7 +6,6 @@ Comment[bs]=Doker za Krita Comment[ca]=Acoblador per al Krita Comment[ca@valencia]=Acoblador per al Krita -Comment[cs]=Dok pro Kritu Comment[da]=Dokker til Krita Comment[de]=Docker für Krita Comment[el]=Προσάρτηση για το Krita @@ -15,7 +14,6 @@ Comment[et]=Krita dokk Comment[eu]=Krita-rako panela Comment[fi]=Krita-telakka -Comment[fr]=Panneau pour Krita Comment[gl]=Doca para Krita. Comment[hne]=केरिता बर डाकर Comment[hu]=Dokkoló a Kritához diff -Nru calligra-2.9.7/krita/data/krita_filefilter.desktop calligra-2.9.11/krita/data/krita_filefilter.desktop --- calligra-2.9.7/krita/data/krita_filefilter.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/krita_filefilter.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -4,7 +4,7 @@ Comment=Krita FileFilter Comment[bs]=Krita FileFilter Comment[ca]=Filtre de fitxers per al Krita -Comment[cs]=Krita FileFilter +Comment[ca@valencia]=Filtre de fitxers per al Krita Comment[da]=Krita filfilter Comment[de]=Krita-Dateifilter Comment[en_GB]=Krita FileFilter diff -Nru calligra-2.9.7/krita/data/krita_filter.desktop calligra-2.9.11/krita/data/krita_filter.desktop --- calligra-2.9.7/krita/data/krita_filter.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/krita_filter.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -6,7 +6,6 @@ Comment[bs]=Plugin Filtera za Krita Comment[ca]=Connector de filtre per al Krita Comment[ca@valencia]=Connector de filtre per al Krita -Comment[cs]=Modul filtrů pro Kritu Comment[da]=Plugin med filter for Krita Comment[de]=Filtermodul für Krita Comment[el]=Πρόσθετο φίλτρου για το Krita @@ -17,7 +16,6 @@ Comment[eu]=Krita-rako iragazki-plugina Comment[fa]=وصله پالایه برای Krita Comment[fi]=Suodinliitännäinen Kritaan -Comment[fr]=Module de filtres de Krita Comment[fy]=Filterplugin foar Krita Comment[ga]=Breiseán scagaire le haghaidh Krita Comment[gl]=Complemento para Krita de filtro. diff -Nru calligra-2.9.7/krita/data/krita_generator.desktop calligra-2.9.11/krita/data/krita_generator.desktop --- calligra-2.9.7/krita/data/krita_generator.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/krita_generator.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -13,12 +13,11 @@ Comment[es]=Complemento de generación de datos de capa para Krita Comment[et]=Krita kihi andmete genereerimise plugin Comment[eu]=Geruza-datuak sortzeko plugina Krita-rako -Comment[fr]=Générateur de données de calques pour Krita Comment[fy]=Gegevens laachoanmakker plugin foar Krita Comment[gl]=Complemento para Krita de xeración de datos de capas. Comment[hne]=केरिता बर लेयर डाटा जनरेटर प्लगइन Comment[hu]=Rétegadat előállító bővítmény a Kritához -Comment[it]=Estensione generatrice di dati dei livelli di Krita +Comment[it]=Estensione generatrice dei dati di livello di Krita Comment[ja]=Krita レイヤーデータ生成プラグイン Comment[kk]=Krita-ның қабат дерегін жасау плагині Comment[ko]=Krita용 레이어 데이터 생성기 플러그인 diff -Nru calligra-2.9.7/krita/data/krita_paintop.desktop calligra-2.9.11/krita/data/krita_paintop.desktop --- calligra-2.9.7/krita/data/krita_paintop.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/krita_paintop.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -16,7 +16,6 @@ Comment[eu]=Margotze-eragiketetarako plugina Krita-rako Comment[fa]=وصله عمل رنگ‌آمیزی برای Krita Comment[fi]=Maalaustoimintoliitännäinen Kritaan -Comment[fr]=Module d'opération pour Krita Comment[fy]=Ferfferjochtingplugin foar Krita Comment[gl]=Complemento para Krita de operacións de pintado. Comment[he]=תוסף פעולת צביעה של Krita diff -Nru calligra-2.9.7/krita/data/krita_plugin.desktop calligra-2.9.11/krita/data/krita_plugin.desktop --- calligra-2.9.7/krita/data/krita_plugin.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/krita_plugin.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -6,7 +6,6 @@ Comment[bs]=GUI funkcionalnost za Krita Comment[ca]=Funcionalitat d'interfície d'usuari per al Krita Comment[ca@valencia]=Funcionalitat d'interfície d'usuari per al Krita -Comment[cs]=Funkcionalita GUI pro Kritu Comment[cy]=Swyddogaeth GUI ar gyfer Krita Comment[da]=GUI-funktionalitet for Krita Comment[de]=GUI-Funktionalität für Krita @@ -17,7 +16,6 @@ Comment[eu]=Krita-rako GUI funtzionalitatea Comment[fa]=کارآمدی ونک برای Krita Comment[fi]=GUI-toimintoja Kritaan -Comment[fr]=Fonctionnalités d'interface pour Krita Comment[fy]=Grafyske ynterface foar Krita Comment[gl]=Funcionalidade para Krita de interface gráfica. Comment[he]=מודול פונקציונליות בסיסית של Krita diff -Nru calligra-2.9.7/krita/data/krita_tool.desktop calligra-2.9.11/krita/data/krita_tool.desktop --- calligra-2.9.7/krita/data/krita_tool.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/krita_tool.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -6,7 +6,6 @@ Comment[bs]=Plugin alata za Krita Comment[ca]=Connector d'eines per al Krita Comment[ca@valencia]=Connector d'eines per al Krita -Comment[cs]=Modul nástrojů pro Kritu Comment[da]=Værktøjsplugin for Krita Comment[de]=Werkzeugmodul für Krita Comment[el]=Πρόσθετο εργαλείων για το Krita @@ -17,7 +16,6 @@ Comment[eu]=Krita-rako tresna-plugina Comment[fa]=وصله ابزار برای Krita Comment[fi]=Kritan työkaluliitännäinen -Comment[fr]=Module d'outils pour Krita Comment[fy]=Arkplugin foar Krita Comment[ga]=Breiseán uirlisí le haghaidh Krita Comment[gl]=Complemento para Krita de ferramentas. Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/data/paintoppresets/Pencil_2B.kpp and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/data/paintoppresets/Pencil_2B.kpp differ diff -Nru calligra-2.9.7/krita/data/profiles/CMakeLists.txt calligra-2.9.11/krita/data/profiles/CMakeLists.txt --- calligra-2.9.7/krita/data/profiles/CMakeLists.txt 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/profiles/CMakeLists.txt 2016-02-02 19:53:14.000000000 +0000 @@ -5,4 +5,4 @@ scRGB.icm cmyk.icm krita25_lcms-builtin-sRGB_g100-truegamma.icc - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/color/icc/krita) + DESTINATION ${SHARE_INSTALL_PREFIX}/color/icc/krita) diff -Nru calligra-2.9.7/krita/data/profiles/elles-icc-profiles/CMakeLists.txt calligra-2.9.11/krita/data/profiles/elles-icc-profiles/CMakeLists.txt --- calligra-2.9.7/krita/data/profiles/elles-icc-profiles/CMakeLists.txt 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/profiles/elles-icc-profiles/CMakeLists.txt 2016-02-02 19:53:14.000000000 +0000 @@ -94,4 +94,4 @@ Lab-D50-Identity-elle-V2.icc Lab-D50-Identity-elle-V4.icc XYZ-D50-Identity-elle-V4.icc -DESTINATION ${CMAKE_INSTALL_PREFIX}/share/color/icc/krita) +DESTINATION ${SHARE_INSTALL_PREFIX}/color/icc/krita) diff -Nru calligra-2.9.7/krita/data/splash/splash_summer_holidays.xpm calligra-2.9.11/krita/data/splash/splash_summer_holidays.xpm --- calligra-2.9.7/krita/data/splash/splash_summer_holidays.xpm 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/krita/data/splash/splash_summer_holidays.xpm 2016-02-02 19:53:14.000000000 +0000 @@ -0,0 +1,52343 @@ +/* XPM */ +static const char *splash_summer_holidays_xpm[]={ +"440 286 52054 3", +"e8K c #7d4b39", +"cES c #d0ca98", +"dtb c #f8deb6", +"fiL c #fcefca", +"fqV c #fdeac5", +"bUh c #4b1e10", +"bPB c #4d2312", +"ar4 c #536c5d", +"dNU c #562d24", +"abR c #56c9ec", +"an4 c #57c8e9", +"aZP c #57ccee", +"#5V c #58c9eb", +"aMX c #58caed", +"aIH c #58cbed", +"aZQ c #58cbee", +"#9U c #59c9ec", +"aMZ c #59cbec", +"a8k c #59cbef", +"aII c #5ac9ea", +"a8m c #5acbed", +"aVA c #5acdec", +"#U2 c #5bcbeb", +"baD c #5ccdee", +"aj7 c #5dafc3", +"a33 c #5dccec", +"baE c #5dcdee", +"baF c #5dcdef", +"e8I c #5e251c", +"ffa c #5e2a1b", +"baG c #5ecdee", +"bfc c #5fd0f0", +"bfd c #60d0f0", +"fzo c #612c1c", +"fCZ c #62291b", +"bjE c #62d1f0", +"bjD c #62d1f1", +"bjF c #63d1ef", +"e4s c #653423", +"eKC c #653428", +"#9W c #65c6dd", +"baO c #65cde4", +"bn5 c #65d2f2", +"e4g c #662e22", +"dJT c #663027", +"bjN c #66b8c6", +"a8r c #66d1ec", +"dNQ c #67382d", +"dJJ c #67392e", +"aM1 c #67bcc8", +"fGy c #682a1d", +"eio c #682c24", +"dJx c #683420", +"dNP c #68372c", +"eZP c #683825", +"e8V c #683a26", +"enU c #683c26", +"fzp c #683f26", +"bKL c #684429", +"aM2 c #689892", +"e8J c #693427", +"d1i c #69392e", +"bjJ c #69d2ec", +"dN1 c #6a2a20", +"e4e c #6a3428", +"eUu c #6a3d2e", +"bjK c #6ad4ec", +"eBI c #6b331f", +"bsd c #6bd5f3", +"d6K c #6c351e", +"eGo c #6c3825", +"bsg c #6cd5ef", +"bwj c #6cd6ec", +"bAB c #6cd7eb", +"eKu c #6d4334", +"dNT c #6d4638", +"bE9 c #6dd6e9", +"eZo c #6e3328", +"erW c #6f342a", +"fzm c #6f3a2c", +"faQ c #6f3b2d", +"erY c #6f3d2f", +"eUZ c #6f402a", +"bE8 c #6fd8eb", +"fRv c #70301e", +"eZD c #703022", +"fno c #70372b", +"faR c #703c2e", +"eGq c #704d32", +"enV c #705035", +"bAx c #70daf1", +"ePZ c #714327", +"eKt c #714432", +"ewz c #714434", +"e8W c #714b32", +"ei1 c #714c30", +"ffb c #714d34", +"fzj c #723528", +"dFG c #723e2f", +"e4t c #72482f", +"ei3 c #734f31", +"ex# c #735337", +"bwf c #73d7f3", +"fCY c #743c2d", +"e#t c #743e20", +"fvs c #744232", +"bAu c #74d7f6", +"fUo c #753621", +"dFF c #754233", +"e4u c #754e33", +"bJM c #75dcf3", +"dJU c #76382e", +"eZQ c #764f33", +"a38 c #76c1ce", +"bOB c #76dcf4", +"eZA c #774434", +"fro c #774536", +"esA c #775538", +"bEZ c #77d8f8", +"dFB c #783b2f", +"e4c c #784535", +"faS c #784635", +"bJL c #78ddf6", +"e4h c #793c29", +"ePL c #794635", +"eFK c #794738", +"dJu c #794823", +"eU0 c #795639", +"eLe c #795a39", +"bYe c #79c1cb", +"fzl c #7a4636", +"eGn c #7a4725", +"ePK c #7a4837", +"fa5 c #7a593c", +"eZR c #7a5a3d", +"hOD c #7b382d", +"e4# c #7b4837", +"e4a c #7b4938", +"eBL c #7b5b3c", +"bJK c #7bdbf8", +"edJ c #7c4437", +"eZx c #7c4637", +"eKX c #7c4938", +"frn c #7c4a38", +"frt c #7c5c3d", +"fjm c #7c5f40", +"ffc c #7c5f41", +"dNG c #7d3723", +"dFR c #7d4234", +"fCX c #7d4736", +"e4b c #7d4b39", +"fnt c #7d5e3e", +"abU c #7d967b", +"dNK c #7e3c2f", +"fGx c #7e3f2e", +"fe2 c #7e4939", +"eKY c #7e4b3a", +"e4v c #7e5e3e", +"dJD c #7f483a", +"dJE c #7f4b3d", +"eKs c #7f4e31", +"fe7 c #80362a", +"dR4 c #804135", +"fni c #804532", +"fjb c #804d3b", +"d1h c #804f3f", +"e4w c #805c38", +"fnm c #814636", +"eBs c #814938", +"fnn c #814a39", +"dJB c #824533", +"erV c #82473a", +"eG. c #824c3b", +"e.U c #824c3e", +"dNO c #824c3f", +"fRx c #825735", +"eGr c #82603c", +"fvy c #82623f", +"eZS c #826441", +"fvx c #826745", +"dR5 c #834e40", +"exa c #83613f", +"fa6 c #836340", +"fC2 c #836441", +"#9X c #83906f", +"aVD c #83a092", +"d1z c #843b2a", +"eUN c #844637", +"dWA c #84473b", +"fUp c #845231", +"e4x c #845e39", +"fN9 c #845f3d", +"fru c #846541", +"eU2 c #846643", +"dJC c #854a3b", +"eAZ c #85533f", +"e8Z c #856039", +"dNL c #864a3a", +"esC c #865e37", +"ffd c #866a45", +"gE# c #87463a", +"eKZ c #874737", +"gEb c #87473b", +"cXq c #874c30", +"eBr c #874d3d", +"d6# c #874d40", +"fe1 c #875744", +"fnu c #876a45", +"fjf c #884736", +"fjc c #88503f", +"exb c #88643d", +"bYa c #88e2fa", +"boz c #89481f", +"fUq c #895c36", +"fO. c #89603a", +"fC3 c #89633c", +"fvz c #89643e", +"ewS c #8a4d3d", +"eF8 c #8a5040", +"d6a c #8a5445", +"djo c #8a5c2d", +"fzs c #8a653e", +"eG# c #8b4838", +"fRy c #8b623b", +"fff c #8b633b", +"fGC c #8b663e", +"eBM c #8b673d", +"frv c #8b6942", +"fjo c #8b6b43", +"dR2 c #8c4f41", +"eA3 c #8c5244", +"f0Z c #8c6039", +"f7l c #8c633c", +"frw c #8c643d", +"e4i c #8d4939", +"eA4 c #8d5646", +"fRz c #8d6038", +"f4f c #8d633c", +"fKt c #8d6840", +"fje c #8e4a3a", +"dN3 c #8e4d3e", +"fjd c #8e4f3f", +"fvp c #8e5037", +"ewm c #8e5a3f", +"fXM c #8e6239", +"fUr c #8e623a", +"aIM c #8e926e", +"eiK c #8f4738", +"eUE c #8f5142", +"dJV c #8f5344", +"cOa c #8f5433", +"fC4 c #8f643b", +"f4g c #8f663d", +"dNM c #905745", +"fzt c #90673e", +"e8M c #914c3d", +"dR1 c #915444", +"ewn c #915842", +"eLa c #916236", +"aWq c #91623f", +"ffg c #916c42", +"eLf c #916f45", +"d6J c #92512c", +"ePF c #925142", +"e8L c #925844", +"e.X c #925948", +"eKW c #92624e", +"dJI c #926753", +"f4h c #926a3f", +"ed5 c #934634", +"ewR c #935445", +"ePM c #935745", +"dWz c #93594a", +"erM c #935d40", +"feZ c #93604c", +"f00 c #946b3f", +"fO# c #946b40", +"fjq c #946f43", +"dSh c #954b3b", +"esg c #955646", +"fGw c #964a35", +"dFD c #965a49", +"eUk c #965c3b", +"eA2 c #965f4f", +"ewv c #966253", +"fOa c #966c3f", +"fKv c #966d40", +"ewQ c #97584a", +"ews c #975b4c", +"fnx c #977145", +"feV c #985d3e", +"d59 c #986050", +"d1e c #986251", +"eP5 c #98703e", +"dN4 c #995745", +"dR0 c #995a48", +"e.F c #99714b", +"eKU c #9a5b4b", +"dSl c #9a5f4b", +"ePe c #9a693e", +"fRB c #9a7143", +"fe8 c #9b4024", +"fCV c #9b4f36", +"esf c #9b5d4e", +"ewr c #9b5e4e", +"e3W c #9b5f4d", +"fnl c #9b6752", +"eLh c #9b7541", +"f7o c #9b7749", +"eGa c #9c5746", +"erN c #9c5e47", +"ePs c #9c6654", +"fnk c #9c6c56", +"eBO c #9c7944", +"ePz c #9d5d4d", +"fe5 c #9d5e4c", +"ePG c #9d6250", +"ena c #9e5947", +"dSi c #9e5a46", +"boA c #9e5c31", +"ewu c #9e695a", +"eAX c #9e7049", +"fXN c #9e7848", +"eBw c #9f391f", +"e#d c #9f5037", +"eKS c #9f594b", +"erQ c #9f604f", +"ese c #9f6051", +"fnh c #9f6141", +"frx c #9f7a4b", +"hA8 c #a0624c", +"ewq c #a06453", +"e.G c #a0653f", +"eKz c #a07968", +"dSj c #a15e4b", +"eZF c #a15e4e", +"erP c #a1614f", +"erR c #a16352", +"d6. c #a16c59", +"fe3 c #a16f59", +"fGD c #a17a49", +"e8P c #a23c24", +"en# c #a25e4c", +"eF5 c #a26353", +"erO c #a2644f", +"dN5 c #a26756", +"em8 c #a26c4b", +"eU5 c #a2824f", +"en. c #a3614d", +"eiI c #a36353", +"e3X c #a36556", +"faT c #a3725c", +"aZW c #a3a68f", +"ewP c #a46655", +"edH c #a46854", +"dn6 c #a46940", +"e.R c #a46a58", +"fOb c #a47e4d", +"esD c #a4804b", +"f4i c #a48050", +"eZV c #a48957", +"asa c #a49a66", +"eil c #a56755", +"eUI c #a57760", +"#55 c #a59668", +"boc c #a5a992", +"de0 c #a65e37", +"eBu c #a66752", +"d6e c #a67460", +"fvB c #a68352", +"aRD c #a68956", +"ed4 c #a76d5a", +"ewp c #a76e5a", +"djr c #a77147", +"en2 c #a7743f", +"eGv c #a77e48", +"dwP c #a78d65", +"eF4 c #a86756", +"ewo c #a8705a", +"aNe c #a88047", +"eF3 c #a96553", +"esd c #a96b5a", +"en3 c #a97945", +"aEA c #a9975e", +"edB c #aa6752", +"eif c #aa6753", +"eie c #aa6851", +"d6p c #aa6d5b", +"eiC c #aa6e5a", +"e4B c #aa8f5a", +"eF2 c #ab6757", +"edZ c #ab6c5b", +"dWR c #ab6d5a", +"dWS c #ab6e5b", +"az3 c #ab9f67", +"eFZ c #ac6a59", +"eny c #ac6c5a", +"eiE c #ac6c5b", +"dN6 c #ac6f4f", +"dWQ c #ac6f5a", +"em9 c #ac7257", +"ase c #aca065", +"dwY c #ad6841", +"eUj c #ad6d42", +"e.9 c #ad715e", +"dWx c #ad745f", +"edy c #ad7653", +"erS c #ad7765", +"edA c #ae6f56", +"end c #ae715f", +"eik c #ae725f", +"ed3 c #ae7360", +"d1w c #ae7461", +"d5Z c #ae7658", +"d1v c #af7561", +"dRU c #b07760", +"d1c c #b07b67", +"f01 c #b08f59", +"eBd c #b17361", +"d1x c #b17561", +"e.H c #b17758", +"e.N c #b17a66", +"d55 c #b17c67", +"fny c #b1925d", +"aI9 c #b1975c", +"ab8 c #b19d61", +"agh c #b19f68", +"htY c #b2745e", +"hp8 c #b2765e", +"e.J c #b27861", +"e.I c #b2795d", +"e.K c #b27b66", +"d1t c #b27c67", +"e.O c #b27c68", +"frl c #b2896f", +"eLk c #b28a52", +"c1L c #b2906a", +"dow c #b35d31", +"ene c #b37c6a", +"edG c #b37d69", +"eic c #b3805e", +"d1q c #b3806c", +"eiv c #b3816c", +"eA0 c #b3876e", +"e84 c #b39b64", +"aI4 c #b39e66", +"htS c #b47863", +"eiH c #b47c67", +"edF c #b47d69", +"aIY c #b48952", +"aks c #b4a272", +"dsX c #b55d32", +"djt c #b56333", +"htN c #b57865", +"enc c #b57965", +"e#a c #b57c67", +"enu c #b5816d", +"aVZ c #b59763", +"aEG c #b5a164", +"aRk c #b5a27e", +"bsx c #b66936", +"bsw c #b66b37", +"cE0 c #b68153", +"env c #b6816c", +"e.P c #b6816d", +"d53 c #b68672", +"ab4 c #b6a364", +"edC c #b77b66", +"enb c #b77e68", +"es. c #b77e6a", +"d1a c #b78671", +"edR c #b78772", +"e8l c #b87460", +"eig c #b87c66", +"edS c #b88873", +"awl c #b8a367", +"ac# c #b8a662", +"dx. c #b96a3c", +"hiF c #b9795d", +"cJh c #b9a37a", +"d1A c #ba6e40", +"dBw c #ba7d50", +"hmK c #ba7e68", +"e.Q c #ba8a74", +"eA1 c #ba8d75", +"aop c #baa56b", +"hmp c #bb8064", +"hbx c #bb8069", +"hfk c #bb816a", +"d1# c #bb8a73", +"d52 c #bb8c76", +"d58 c #bb8c77", +"d08 c #bb8e7b", +"fzy c #bb9d64", +"dwQ c #bba171", +"awo c #bba866", +"dFS c #bc7c56", +"gPJ c #bc8268", +"csH c #bc875a", +"dWr c #bc8c75", +"djl c #bc9b6d", +"fC8 c #bc9d64", +"fzx c #bc9d65", +"b8U c #bc9e70", +"g.l c #bca06b", +"dsH c #bd7741", +"fzi c #bd774c", +"gLU c #bd8169", +"hiZ c #bd8670", +"cwz c #bd8c5a", +"a0c c #bd9e62", +"dxa c #be6e40", +"dsG c #be7242", +"deH c #be7744", +"fng c #be7747", +"cXb c #be845e", +"ed2 c #be8a73", +"d56 c #be8f79", +"fC7 c #be9e65", +"eZc c #bf8153", +"aRB c #bfa669", +"asm c #bfac6d", +"hi0 c #c08973", +"htM c #c08b79", +"fOc c #c0a169", +"dx# c #c17346", +"er7 c #c18f78", +"dWq c #c19278", +"fRD c #c1a36b", +"eBz c #c26737", +"dov c #c26a3a", +"gTD c #c2866c", +"g5H c #c2876f", +"e3S c #c28975", +"gXC c #c28a71", +"dez c #c2916b", +"d05 c #c29276", +"e.L c #c29279", +"d1b c #c2947e", +"fKy c #c2a46c", +"dsv c #c2ac80", +"frg c #c3713f", +"frh c #c37644", +"dwW c #c38451", +"eii c #c38e76", +"fUv c #c3a56b", +"fXO c #c3a871", +"awk c #c3b176", +"c6t c #c49560", +"aI8 c #c4af78", +"cwq c #c4c792", +"cr8 c #c4c893", +"g1I c #c58c74", +"dFo c #c5a770", +"aI7 c #c5b475", +"eK4 c #c66f3c", +"esm c #c6744a", +"d#y c #c68d56", +"hfl c #c6947c", +"d1. c #c6997d", +"d07 c #c69a82", +"fOd c #c6a972", +"cnW c #c6c792", +"enN c #c76f3c", +"cfr c #c7c893", +"cjF c #c7ca95", +"bon c #c88e58", +"gTE c #c89077", +"hiG c #c8947a", +"c6I c #c89a75", +"a0d c #c8ad73", +"djn c #c8b080", +"aos c #c8b984", +"caP c #c8c895", +"cjH c #c8c994", +"eGf c #c9713d", +"esq c #c9713e", +"esn c #c97950", +"fvl c #c97a43", +"gXx c #c9937c", +"eid c #c99778", +"faD c #c9986b", +"fyW c #c9a27b", +"dJr c #c9a76c", +"cjM c #c9c895", +"g9D c #ca947f", +"edz c #ca9878", +"hmv c #ca9a86", +"c1H c #caa876", +"ikZ c #caaa8a", +"caO c #cac996", +"caN c #caca95", +"cAz c #caca96", +"cjN c #caca97", +"ew1 c #cb723e", +"fKn c #cb7545", +"fvo c #cb814d", +"g1L c #cb9b84", +"gIg c #cba296", +"f02 c #cbaf77", +"c6u c #cc915b", +"deq c #ccb687", +"cfq c #ccc997", +"dou c #cd7944", +"c1O c #cd9b6c", +"es# c #cd9b81", +"he9 c #cd9f8b", +"e85 c #cdb274", +"fUw c #cdb37d", +"fbc c #cdb478", +"cnX c #cdc996", +"djA c #ce8854", +"cBg c #ce9463", +"djs c #ce955e", +"d51 c #cea184", +"cjL c #cec998", +"cjJ c #ceca98", +"dOf c #cf8149", +"doo c #cf9063", +"eih c #cf9e83", +"edE c #cfa185", +"hf. c #cfa28f", +"bO9 c #cfa67a", +"fnC c #cfb77f", +"fRE c #cfb882", +"cr6 c #cfc996", +"cER c #cfca99", +"cnZ c #cfcb9a", +"eiT c #d07543", +"d1H c #d08755", +"d1B c #d0915d", +"dey c #d09661", +"d#z c #d09764", +"edD c #d0a084", +"dWv c #d0a588", +"hbz c #d0a68d", +"gXv c #d0a790", +"cSc c #d0a87d", +"feI c #d0ae8e", +"dn0 c #d0b686", +"cAA c #d0cb99", +"fze c #d18149", +"e#g c #d1905a", +"gXA c #d1a38b", +"cJb c #d1ca99", +"cjK c #d1cb99", +"enM c #d27845", +"bjW c #d29b66", +"hfa c #d2a594", +"cAB c #d2cb9a", +"cn0 c #d2cd9c", +"e8Q c #d37a45", +"d1I c #d3834d", +"e#f c #d39669", +"ba2 c #d39e6c", +"hbo c #d3a593", +"ewk c #d3b280", +"c1J c #d3bd8e", +"cEQ c #d3cb9b", +"djV c #d48652", +"fzh c #d4884e", +"dJ7 c #d48f57", +"dJX c #d49662", +"aRl c #d4a779", +"inu c #d4b796", +"cWX c #d4c292", +"dOg c #d58249", +"dSw c #d5874e", +"cfO c #d58a51", +"dor c #d59263", +"dob c #d59662", +"bjX c #d59d67", +"doa c #d59d6b", +"fXP c #d5bd86", +"cW2 c #d5bf9f", +"cAC c #d5cc9b", +"dSx c #d6844a", +"dSv c #d6915a", +"dop c #d6976a", +"eia c #d6af71", +"c6m c #d6bb8c", +"dss c #d6be8d", +"cnY c #d6ce9d", +"doq c #d79668", +"bfC c #d7a06d", +"feO c #d7a677", +"e4n c #d8824b", +"enP c #d8824c", +"ee. c #d8854e", +"dW5 c #d88f56", +"c6C c #d8a271", +"hbn c #d8b09d", +"c1M c #d8c08f", +"cJc c #d8ce9e", +"cn1 c #d8d0a0", +"cAH c #d8d2a0", +"eGg c #d9834c", +"gw0 c #d9a983", +"c6p c #d9c393", +"cE1 c #d9caac", +"csa c #d9d0a1", +"dJ8 c #da894f", +"dW6 c #da8d52", +"d6w c #daa16f", +"cwA c #dabf9b", +"fOe c #dac28a", +"dW7 c #db8b51", +"djj c #dbc495", +"c6s c #dbc498", +"eUT c #dc874f", +"fCT c #dc8b51", +"fCU c #dc8e56", +"dF5 c #dc9056", +"dOe c #dca16c", +"fND c #dcb88b", +"fCv c #dcbb92", +"fqR c #dcbc93", +"fCu c #dcbd96", +"eZ0 c #dcc789", +"cS. c #dcce9f", +"ePT c #dd8751", +"d6A c #dd8e55", +"d1J c #dd9057", +"c2h c #dd9c69", +"dF4 c #dda068", +"dW4 c #dda370", +"d1G c #dda777", +"bFF c #ddab76", +"a0C c #ddb070", +"gIl c #ddb7ac", +"cWV c #ddc493", +"cET c #ddd1a2", +"csb c #ddd2a3", +"eK9 c #de894e", +"eiW c #de8a52", +"e#k c #de8e56", +"b3N c #dea572", +"fXb c #debc8f", +"edw c #debd84", +"d#t c #deca99", +"cws c #ded2a3", +"ePU c #df8a50", +"ePV c #df8d52", +"des c #dfca98", +"eGi c #e08950", +"eiS c #e08954", +"eBD c #e08a50", +"dW8 c #e09155", +"bPp c #e0a46f", +"cAD c #e0d2a4", +"ew4 c #e18a51", +"est c #e18b52", +"fCR c #e19156", +"d1K c #e19258", +"eZL c #e1955a", +"djU c #e19864", +"cfM c #e19a64", +"dxu c #e19d64", +"cbc c #e19d67", +"cO# c #e19f6b", +"dBN c #e1a871", +"cba c #e1a875", +"b8s c #e1b283", +"ghS c #e1bd87", +"eGj c #e28a4e", +"eK8 c #e28c51", +"faZ c #e28f54", +"enQ c #e28f55", +"eGk c #e29052", +"dSy c #e29155", +"dBO c #e29b60", +"cj9 c #e2a06b", +"c2i c #e2a06c", +"dJ6 c #e2b07d", +"cSp c #e2b890", +"fXR c #e2cc98", +"cEY c #e2d8a8", +"eeg c #e38e56", +"e8R c #e39257", +"d1L c #e39459", +"cbb c #e39f69", +"c2j c #e3a26d", +"dxt c #e3aa74", +"dFU c #e3ad7b", +"djJ c #e3af80", +"bKq c #e3b784", +"eY6 c #e3c087", +"c6e c #e3cb96", +"cs# c #e3d4a6", +"csc c #e3d4a7", +"e#m c #e4915a", +"dOj c #e49256", +"e4o c #e49459", +"d#X c #e4a573", +"cbd c #e4a774", +"csG c #e4ab74", +"dSu c #e4b585", +"cNv c #e4d5a7", +"eBE c #e58f52", +"dJ9 c #e59558", +"d6B c #e5985d", +"deZ c #e5a06b", +"cSI c #e5a36e", +"cXu c #e5a46f", +"cXt c #e5a571", +"b8N c #e5ad79", +"dfa c #e5b07b", +"d#G c #e5b484", +"c1V c #e5b584", +"gly c #e5bea2", +"ghU c #e5bf8f", +"ghT c #e5c18f", +"def c #e5cf9d", +"eV# c #e5d09f", +"cWU c #e5d1a2", +"dFn c #e5d49f", +"cAG c #e5d4a7", +"dn1 c #e5d6a7", +"cNC c #e5d8a9", +"ew5 c #e69456", +"dOi c #e69457", +"e#l c #e6955c", +"dK# c #e69659", +"e#q c #e6975a", +"dBP c #e69a5d", +"da# c #e6b481", +"b8r c #e6be92", +"cFr c #e6c19b", +"del c #e6cd9e", +"den c #e6ce9f", +"dnP c #e6cf9e", +"djd c #e6cfa0", +"cwu c #e6d6a9", +"cwv c #e6d7a9", +"cJg c #e6d9aa", +"fGt c #e79558", +"dK. c #e79658", +"eiX c #e7965b", +"dF6 c #e7985b", +"d1M c #e7985c", +"eBF c #e79c5c", +"d6H c #e7a162", +"bPo c #e7a974", +"cFw c #e7ac74", +"cXs c #e7ac7a", +"dtd c #e7b27d", +"fKA c #e7d198", +"cR8 c #e7d4a6", +"cRZ c #e7d4a7", +"cR7 c #e7d5a6", +"cEX c #e7d5a8", +"dI8 c #e7d5b0", +"cJd c #e7d6a8", +"cEV c #e7d6a9", +"cJf c #e7d7a9", +"esu c #e8995a", +"cSH c #e8a975", +"cw3 c #e8ae79", +"c1U c #e8c79b", +"dnN c #e8d0a0", +"d#n c #e8d2a4", +"bsm c #e8d3ae", +"cNA c #e8d6a8", +"cwt c #e8d6a9", +"cNz c #e8d7a8", +"cEW c #e8d7a9", +"cAF c #e8d7aa", +"det c #e8daaa", +"cNB c #e8daab", +"fGu c #e9975b", +"d6G c #e99d5f", +"fe9 c #e9a362", +"cO. c #e9a973", +"bKy c #e9aa75", +"bFI c #e9ad75", +"fXx c #e9b480", +"doL c #e9b783", +"dBG c #e9bb8d", +"dOd c #e9c191", +"ghW c #e9c396", +"cBa c #e9caa6", +"deo c #e9d2a5", +"fvH c #e9d499", +"cNw c #e9d7a9", +"cEU c #e9d7aa", +"cR6 c #e9d8aa", +"cAE c #e9d8ab", +"fGs c #ea9e60", +"deY c #eaac79", +"cBf c #eab079", +"cFv c #eab27c", +"b8M c #eab27e", +"cBe c #eab380", +"cJO c #eab381", +"cN8 c #eab483", +"cFu c #eab582", +"d#V c #eab98d", +"d#U c #eaba8f", +"dF3 c #eac292", +"cNM c #eac393", +"a0B c #eac589", +"c1D c #ead2a5", +"d#m c #ead3a6", +"dnX c #ead5a4", +"d#o c #ead5a7", +"cJe c #ead7aa", +"d#s c #ead8a8", +"cR5 c #ead8ab", +"cWT c #ead9ab", +"cR9 c #eadcac", +"cWW c #eaddad", +"eeh c #eb9d60", +"bFK c #ebab75", +"bFJ c #ebad76", +"djS c #ebaf7e", +"cJP c #ebb07b", +"cN9 c #ebb07d", +"cSG c #ebb280", +"cJN c #ebb484", +"b8J c #ebb582", +"cf1 c #ebb584", +"bY0 c #ebb682", +"deX c #ebb688", +"cFt c #ebb887", +"deW c #ebb88b", +"c6V c #ebbb90", +"c6U c #ebbc93", +"dj9 c #ebbd89", +"aRW c #ebc78e", +"aEr c #ebcca2", +"c6j c #ebd4a7", +"c1C c #ebd5a7", +"c6i c #ebd5a8", +"c1E c #ebd6a8", +"c6k c #ebd7aa", +"cWS c #ebd8ab", +"cNx c #ebd9ab", +"c1F c #ebdaad", +"c1I c #ebdcab", +"fN3 c #ec9a5c", +"ew6 c #eca362", +"e#r c #eca767", +"cJQ c #ecae78", +"b8K c #ecb483", +"cbs c #ecb686", +"c6X c #ecb687", +"cw2 c #ecb885", +"d#W c #ecb88b", +"cBd c #ecba89", +"e3Q c #ecd2a6", +"fu0 c #ecd2a9", +"aEt c #ecd2aa", +"cWR c #ecd7aa", +"djh c #ecd7ab", +"cR4 c #ecd8ab", +"f04 c #ecdba9", +"c6l c #ecdbae", +"c6o c #ecdcab", +"cjS c #ecddb8", +"djR c #edb686", +"cSF c #edb889", +"cf0 c #edb989", +"cke c #edbb8b", +"c6W c #edbc90", +"deV c #edbe93", +"bJ5 c #edbf8d", +"dBM c #edc798", +"cE5 c #edcda1", +"dwx c #edd6a8", +"ip1 c #edd7af", +"dwF c #edd8ae", +"dnU c #edd9ad", +"djm c #ede0b0", +"dA7 c #ede1ad", +"djQ c #eebb8d", +"b8g c #eec797", +"b3v c #eeca9e", +"c12 c #eecda4", +"bO8 c #eecea4", +"dsn c #eedaaf", +"d#p c #eedbae", +"dso c #eedbb0", +"eVa c #eedcb0", +"fKm c #efa364", +"cN7 c #efbb8c", +"ckd c #efbe8e", +"djP c #efc093", +"c2d c #efc197", +"deU c #efc298", +"csE c #efc395", +"c2c c #efc69e", +"cXD c #efc99b", +"dxs c #efca9d", +"b8f c #efd4a8", +"fmN c #efdab9", +"dnV c #efdcb0", +"bYq c #efdcb3", +"dJp c #efdfae", +"e8S c #f0a969", +"deO c #f0c295", +"djK c #f0c299", +"c6T c #f0c79e", +"aRS c #f0cc99", +"aWc c #f0cd99", +"dxl c #f0cda4", +"caX c #f0dcb4", +"fyV c #f0dcb9", +"dwH c #f0ddb3", +"b3f c #f0ddb4", +"dep c #f0deb0", +"dwG c #f0deb4", +"b3h c #f0deb7", +"d0V c #f0debb", +"aZ3 c #f0dfb7", +"dsr c #f0e0b1", +"bwt c #f0e0b9", +"c2e c #f1c296", +"djO c #f1c499", +"cFs c #f1c598", +"deT c #f1c69c", +"d#T c #f1c79d", +"a4i c #f1cb9b", +"dBH c #f1cca1", +"gAH c #f1cdc1", +"dJ5 c #f1d1a5", +"gs6 c #f1d3bc", +"bOT c #f1d6ac", +"cjU c #f1dbb2", +"dJn c #f1dcae", +"dJk c #f1dcaf", +"cfA c #f1dcb3", +"dJm c #f1ddaf", +"dJl c #f1ddb0", +"bYr c #f1ddb6", +"b8d c #f1ddb7", +"aZ2 c #f1deb6", +"cJo c #f1deb7", +"dsp c #f1dfb4", +"a8z c #f1dfb7", +"bsr c #f1dfb8", +"dsq c #f1e0b3", +"dwI c #f1e0b5", +"aZ4 c #f1e0b7", +"baW c #f1e0b8", +"bOR c #f1e0b9", +"dRJ c #f1e0bd", +"dnW c #f1e1b4", +"fOf c #f1e2ad", +"djL c #f2c69c", +"djN c #f2c79d", +"cSQ c #f2cfa2", +"gwR c #f2d0c2", +"csk c #f2dab2", +"dRP c #f2dbb0", +"dRO c #f2dcae", +"dAV c #f2dcb4", +"dFk c #f2ddb0", +"bOS c #f2ddb6", +"dFl c #f2deaf", +"dRN c #f2deb1", +"dFj c #f2deb2", +"dAR c #f2deb4", +"cjV c #f2deb5", +"bFd c #f2deb7", +"dFm c #f2dfb0", +"dFi c #f2dfb3", +"csl c #f2dfb7", +"b3g c #f2dfb8", +"b8e c #f2e0b8", +"a4e c #f2e0b9", +"caY c #f2e1b9", +"dwL c #f2e9b7", +"djM c #f3c89e", +"deS c #f3c89f", +"d#R c #f3c9a0", +"d#S c #f3caa1", +"gwM c #f3cec2", +"bbe c #f3cfa1", +"g5l c #f3d3a1", +"gPu c #f3d8ac", +"dRM c #f3dfb2", +"bAI c #f3dfb8", +"dFh c #f3e0b4", +"cfz c #f3e1b9", +"bFf c #f3e1ba", +"hmh c #f3e2cc", +"dRK c #f3e3bf", +"dwJ c #f3e4b8", +"ik0 c #f3e4be", +"dA6 c #f3e7b7", +"cXo c #f4c99f", +"deR c #f4c9a1", +"c6S c #f4d0a8", +"c2b c #f4d2ab", +"c2q c #f4d4a8", +"d#9 c #f4d6aa", +"a0. c #f4d6ad", +"iu4 c #f4dab3", +"hpI c #f4dcb8", +"htt c #f4dfbf", +"dWm c #f4e1b4", +"dRL c #f4e1b7", +"dNk c #f4e2c0", +"f3z c #f4e3be", +"dWh c #f4e3c1", +"dA5 c #f4e7b8", +"cBb c #f5d4ac", +"hix c #f5dcb4", +"aZ0 c #f5ddb6", +"aZ1 c #f5dfb8", +"bog c #f5dfb9", +"ist c #f5e1b9", +"gTr c #f5e1c1", +"dWl c #f5e3b7", +"dA1 c #f5e6c0", +"dA4 c #f5e9bd", +"dA3 c #f5e9bf", +"c6O c #f6cfa6", +"c6P c #f6d0a8", +"c6Q c #f6d3ab", +"c6R c #f6d3ac", +"cN0 c #f6d4ab", +"dxm c #f6d7ad", +"ds8 c #f6d9b2", +"hbd c #f6daab", +"dF2 c #f6dab0", +"hmg c #f6dcb3", +"geg c #f6deaf", +"fNE c #f6deb2", +"hiz c #f6dfba", +"cbC c #f6e1b7", +"g5n c #f6e1c0", +"boh c #f6e2bc", +"h3X c #f6e3b7", +"fah c #f6e4c3", +"d5W c #f6e6bd", +"d0W c #f6e7c6", +"d#N c #f7d0a4", +"c6N c #f7d1a7", +"c6M c #f7d1a8", +"b8v c #f7d3a7", +"cNT c #f7d4a9", +"g1l c #f7daaa", +"c2a c #f7dbb4", +"dBL c #f7dcb3", +"aVR c #f7deb6", +"gD1 c #f7e1bd", +"dWk c #f7e4b9", +"e.x c #f7e6c7", +"dFg c #f7e9c4", +"c19 c #f8d6ae", +"gwT c #f8d8c9", +"csD c #f8dab3", +"dtc c #f8ddb5", +"eKo c #f8deab", +"aZ9 c #f8deb6", +"ds7 c #f8dfbc", +"ePb c #f8e0b1", +"fXd c #f8e0b4", +"b8V c #f8e3b9", +"fG. c #f8e5bf", +"h0P c #f8e6b9", +"e3H c #f8e6c4", +"dWj c #f8e7bf", +"edo c #f8e8ca", +"geD c #f9d5a8", +"bYS c #f9d8ac", +"coh c #f9d8af", +"cSw c #f9d9b1", +"eFA c #f9dca6", +"bPb c #f9dcb4", +"cFn c #f9ddb6", +"eAU c #f9deab", +"b3t c #f9deb5", +"c2p c #f9deb6", +"dW1 c #f9deb7", +"doJ c #f9dfb7", +"dBK c #f9dfb8", +"dF1 c #f9e0b8", +"cSA c #f9e0b9", +"cFp c #f9e0ba", +"fyX c #f9e5ba", +"gD0 c #f9e5c3", +"fXa c #f9e8c4", +"dRG c #f9e8ca", +"d00 c #f9e9be", +"d0Z c #f9ebc4", +"hmj c #f9ecd9", +"fRG c #f9efbe", +"f92 c #facd9a", +"f66 c #face9c", +"c18 c #fad8b1", +"c14 c #fad9b0", +"cSv c #fad9b1", +"cJB c #fadab1", +"cXi c #fadab3", +"c17 c #fadbb3", +"cSx c #fadbb5", +"cj7 c #fadcb2", +"cXj c #fadcb6", +"cAY c #faddb5", +"cJH c #faddb6", +"cJG c #faddb7", +"b3u c #fadeb5", +"fKb c #fadeb6", +"cN2 c #fadeb8", +"dOc c #fadfb8", +"cFE c #fae0b7", +"cXm c #fae0b9", +"cXl c #fae0ba", +"dBJ c #fae1ba", +"ewi c #fae2b2", +"dxr c #fae2bb", +"dxn c #fae2be", +"gei c #fae3b4", +"eUb c #fae6be", +"fmP c #fae7bf", +"fm0 c #faebc4", +"fTT c #faebc5", +"dWi c #faecc9", +"hUI c #faedc4", +"fXt c #fbd5a8", +"f0F c #fbd7aa", +"gbe c #fbd7ab", +"c16 c #fbdcb4", +"cog c #fbddb5", +"cXh c #fbdeb6", +"cSy c #fbdeb8", +"bTN c #fbdfb6", +"cXk c #fbdfb9", +"b8w c #fbe0b7", +"b8x c #fbe0b8", +"dSq c #fbe0b9", +"cbf c #fbe1b9", +"b3C c #fbe1ba", +"c68 c #fbe2ba", +"dta c #fbe2bb", +"cSz c #fbe2bc", +"cFo c #fbe3bd", +"b8D c #fbe3be", +"ido c #fbe4bb", +"dSs c #fbe4be", +"erI c #fbe5ba", +"dNm c #fbe6c3", +"f6K c #fbe7bb", +"eFz c #fbe7bf", +"gPt c #fbe7c1", +"f3B c #fbe8bc", +"d5V c #fbeabf", +"h3T c #fbebc2", +"d01 c #fbedc3", +"hXL c #fbedc4", +"feC c #fbedc5", +"d5U c #fbedca", +"hXJ c #fbeec6", +"fan c #fbeec9", +"h3P c #fbefc7", +"dFf c #fbf0d1", +"fvI c #fbf2c0", +"f7v c #fbf3c2", +"f64 c #fcdcb1", +"c13 c #fcdcb3", +"cSu c #fcddb5", +"fXs c #fcdfb7", +"cNW c #fcdfb8", +"b3B c #fce1b9", +"fCJ c #fce2bc", +"b8z c #fce3bd", +"bTO c #fce3be", +"f6M c #fce4b6", +"cbh c #fce4bd", +"cbi c #fce4be", +"fz. c #fce4bf", +"fCH c #fce4c0", +"fNG c #fce5ba", +"cB. c #fce5be", +"cbk c #fce5bf", +"dj7 c #fce6bf", +"fu2 c #fce7bc", +"eAT c #fce7c0", +"idk c #fce8bf", +"em4 c #fce8c1", +"fu6 c #fce9c3", +"fy3 c #fce9c4", +"h38 c #fceac3", +"h65 c #fceac4", +"h3R c #fcebc2", +"fu8 c #fcebc4", +"ei. c #fcebc6", +"eKm c #fcebcc", +"fqX c #fcecc6", +"edu c #fcecc9", +"e.C c #fcecca", +"isr c #fcedc4", +"fmY c #fcedc5", +"fmZ c #fcedc6", +"fao c #fcedc7", +"fmU c #fcedca", +"d0Y c #fcedcb", +"feB c #fceec6", +"feA c #fceec7", +"fez c #fceec9", +"e.B c #fceecf", +"de8 c #fceed4", +"fqZ c #fcefc7", +"fmW c #fcefc8", +"fmV c #fcefc9", +"fey c #fcefcb", +"fiK c #fcefcc", +"glJ c #fcf0c8", +"fiN c #fcf0c9", +"fiM c #fcf0ca", +"ewe c #fcf0d6", +"hXI c #fcf1d0", +"goT c #fcf1dd", +"gev c #fcf2c8", +"aRp c #fcf2db", +"hmk c #fcf3e0", +"g.q c #fcf4c3", +"fRH c #fcf4c6", +"f4p c #fcf5c5", +"f3X c #fddeb4", +"gps c #fddfb7", +"cNV c #fde0b8", +"fRf c #fde0b9", +"gpq c #fde1b6", +"fXr c #fde1ba", +"cbg c #fde2ba", +"fTY c #fde3b8", +"fQ6 c #fde3b9", +"fQ7 c #fde3bc", +"fQ5 c #fde4b8", +"fTZ c #fde4ba", +"fNJ c #fde4bb", +"dOa c #fde4be", +"fGg c #fde4bf", +"fCC c #fde4c0", +"fGi c #fde4c1", +"fQ4 c #fde5b9", +"fGf c #fde5bd", +"d#8 c #fde5be", +"fCB c #fde5bf", +"fy7 c #fde5c1", +"csC c #fde6bf", +"b8Y c #fde6c0", +"fy2 c #fde6c1", +"fNP c #fde6c2", +"fTX c #fde7bb", +"fyY c #fde7bc", +"gD3 c #fde7be", +"cOh c #fde7c0", +"csR c #fde7c1", +"fy6 c #fde7c2", +"fRd c #fde7c3", +"fCx c #fde8bc", +"fqT c #fde8bd", +"fy1 c #fde8c2", +"fCD c #fde8c3", +"fRc c #fde8c4", +"dj5 c #fde8c6", +"fGb c #fde9bf", +"h03 c #fde9c2", +"fy0 c #fde9c3", +"fy4 c #fde9c4", +"fJZ c #fdeabf", +"fyZ c #fdeac2", +"fu7 c #fdeac3", +"fu5 c #fdeac4", +"fqW c #fdeac5", +"iiq c #fdebc2", +"fu4 c #fdebc4", +"fqU c #fdebc5", +"fmS c #fdebc6", +"fmT c #fdebc8", +"h9W c #fdecc4", +"fiI c #fdecc9", +"eAS c #fdeccd", +"dRF c #fdecd0", +"fu9 c #fdedc7", +"eY5 c #fdedc9", +"few c #fdedcc", +"eU# c #fdedd0", +"eU. c #fdedd1", +"iaQ c #fdeec6", +"fiJ c #fdeecc", +"d5T c #fdeecd", +"edt c #fdeed0", +"eT9 c #fdeed3", +"fmX c #fdefc7", +"fqY c #fdefc8", +"fex c #fdefcd", +"d0X c #fdefd0", +"d5R c #fdefd2", +"fuY c #fdf0cf", +"erF c #fdf0d5", +"eO8 c #fdf0d6", +"eh6 c #fdf0d8", +"ewd c #fdf1d7", +"emY c #fdf2db", +"fnE c #fdf5c7", +"f7w c #fdf7cb", +"f4q c #fdf7cc", +"cXc c #fee3bb", +"fNS c #fee3bd", +"fCF c #fee3c0", +"fJ5 c #fee4be", +"fNR c #fee4bf", +"fCG c #fee4c0", +"fGh c #fee4c1", +"fNI c #fee5ba", +"fJ4 c #fee5bd", +"f0E c #fee5bf", +"fCE c #fee5c1", +"fNH c #fee6ba", +"fJ2 c #fee6bb", +"ifT c #fee6be", +"hUX c #fee6bf", +"dJ1 c #fee6c0", +"dSr c #fee6c1", +"fNQ c #fee6c2", +"fJ0 c #fee7bd", +"cJJ c #fee7c0", +"cbH c #fee7c1", +"dj6 c #fee7c2", +"fCy c #fee8bc", +"fCz c #fee8be", +"cbG c #fee8c2", +"cko c #fee8c3", +"fNF c #fee9bd", +"fQ2 c #fee9be", +"fCA c #fee9c0", +"fmR c #fee9c2", +"fCw c #feeabf", +"fu1 c #feeac0", +"fmQ c #feeac1", +"fu3 c #feeac3", +"fT4 c #feeac4", +"cxb c #feeac8", +"fiH c #feebc4", +"gD4 c #feebc6", +"fT6 c #feebc7", +"cSO c #feebcb", +"fqS c #feecc3", +"fev c #feecc6", +"fT5 c #feecc7", +"csO c #feecca", +"cFD c #feedd0", +"dRE c #feedd2", +"gbc c #feeec6", +"em3 c #feeece", +"dxp c #feeed0", +"eKl c #feeed1", +"eY3 c #feeed2", +"if0 c #feefc7", +"eh9 c #feefcf", +"e.A c #feefd1", +"eds c #feefd2", +"csN c #feefd3", +"ewf c #feefd4", +"f3Q c #feefd5", +"d5S c #fef0d1", +"e3F c #fef0d3", +"e.z c #fef0d4", +"eY1 c #fef0d5", +"cxa c #fef0d6", +"fNB c #fef1cf", +"fF9 c #fef1d0", +"fJV c #fef1d2", +"edr c #fef1d5", +"faf c #fef1d6", +"edq c #fef1d8", +"em0 c #fef1d9", +"eh7 c #fef2d9", +"emZ c #fef2da", +"doE c #fef2db", +"erA c #fef3dd", +"ehZ c #fef3de", +"gAb c #fef3df", +"cBm c #fef4de", +"gPA c #fef4e0", +"doF c #fef5df", +"d#6 c #fef5e1", +"fbf c #fef6c7", +"e4G c #fef6cb", +"de7 c #fef6e1", +"aRo c #fef6e2", +"cOe c #fef6e3", +"fKG c #fef7cb", +"fOk c #fef7cc", +"c6J c #ffe0b7", +"fT0 c #ffe4be", +"fXi c #ffe5bf", +"fR. c #ffe5c0", +"fJ9 c #ffe5c1", +"fGd c #ffe6bb", +"fR# c #ffe6c0", +"fNO c #ffe6c1", +"fJ8 c #ffe6c2", +"fRa c #ffe7c1", +"cJY c #ffe7c2", +"fGc c #ffe8bc", +"cgb c #ffe8c3", +"csP c #ffe8c4", +"ckp c #ffe9c4", +"h36 c #ffebc2", +"h37 c #ffebc3", +"fiG c #ffeec5", +"fXp c #ffeec7", +"cJX c #ffeed1", +"eh8 c #ffefd3", +"em2 c #fff0d3", +"eFy c #fff0d4", +"fCs c #fff1d3", +"feq c #fff1d6", +"eT7 c #fff1d8", +"e3E c #fff1d9", +"fCt c #fff2d0", +"e8# c #fff2d3", +"fag c #fff2d5", +"eO7 c #fff2d7", +"eFx c #fff2d8", +"dt. c #fff2d9", +"eFv c #fff2da", +"eFw c #fff2db", +"f9X c #fff3cb", +"fyU c #fff3d4", +"fX. c #fff3d7", +"eKj c #fff3d9", +"fae c #fff3da", +"eAO c #fff3db", +"eAN c #fff3dc", +"eh0 c #fff3dd", +"edm c #fff3de", +"eh1 c #fff3df", +"gsD c #fff3e0", +"fqP c #fff4d6", +"fer c #fff4d7", +"fiC c #fff4dc", +"erz c #fff4dd", +"eh2 c #fff4df", +"fyS c #fff4e0", +"ehX c #fff4e1", +"gsF c #fff5dc", +"gea c #fff5dd", +"goV c #fff5de", +"gsE c #fff5df", +"fiB c #fff5e0", +"erx c #fff5e1", +"eAK c #fff5e2", +"fNz c #fff5e3", +"frH c #fff6c8", +"gAd c #fff6dc", +"gaN c #fff6dd", +"fJU c #fff6e1", +"c66 c #fff6e2", +"fyR c #fff6e3", +"goS c #fff6e4", +"goR c #fff6e6", +"frG c #fff7c9", +"fDd c #fff7ca", +"fUC c #fff7cc", +"gsG c #fff7d5", +"gaP c #fff7d7", +"hpL c #fff7e1", +"fGL c #fff8cd", +"fOj c #fff8ce", +"fRJ c #fff9cd", +"bF3 c #48190b", +"bFW c #481d0f", +"bPt c #491c0e", +"bUc c #491d0e", +"bBu c #491d0f", +"b8Q c #4b1d0e", +"cf4 c #4b1e10", +"bY7 c #4b1f10", +"bo3 c #4c2212", +"bFU c #4d2011", +"bPv c #4d2110", +"bky c #4d2212", +"bKI c #4d2413", +"bF1 c #4d2515", +"av1 c #4da5b8", +"bf7 c #4e1f10", +"bxb c #4e2212", +"bZ# c #4f1f11", +"bKG c #4f2212", +"bKO c #4f2513", +"bBz c #4f2616", +"cby c #502112", +"csI c #512312", +"bx# c #512413", +"ar3 c #516d6a", +"ckj c #522111", +"bKF c #522412", +"bKE c #522514", +"bPu c #522714", +"bBy c #522918", +"abP c #52c9ee", +"bF2 c #532e1b", +"afV c #53c8ed", +"#9R c #53c8ee", +"eKH c #542219", +"bKH c #542815", +"bKN c #542e1a", +"abQ c #54c8ed", +"afW c #54c8ee", +"an3 c #54c9ed", +"arZ c #54c9ee", +"#2d c #55c9ec", +"#9S c #55c9ed", +"avY c #55c9ee", +"b3X c #562716", +"an8 c #566345", +"an7 c #566d5f", +"ar0 c #56c9eb", +"#YG c #56c9ec", +"#5U c #56c9ed", +"aIG c #56caed", +"azW c #56caee", +"aVx c #56cbec", +"aZO c #56cced", +"#U0 c #57c9ec", +"#9T c #57c9ed", +"#2e c #57caeb", +"aVy c #57cbed", +"aEg c #57cbee", +"a32 c #57ccee", +"bs6 c #582b19", +"ar2 c #5899a6", +"avZ c #58c8e8", +"aj6 c #58c8e9", +"#Rr c #58c9eb", +"#YH c #58caeb", +"aRc c #58cbee", +"afX c #58cbef", +"b8S c #592b18", +"bPA c #59311c", +"b3U c #59321c", +"azX c #59c8e7", +"#2f c #59c9eb", +"abS c #59caed", +"aMY c #59cbed", +"a8j c #59cbef", +"#9V c #59ccef", +"bxg c #5a2f1c", +"azZ c #5ab9cd", +"ar1 c #5ac7e4", +"#U1 c #5ac9ec", +"#Rs c #5acaeb", +"#YI c #5acaec", +"aRd c #5acbed", +"a8l c #5acbef", +"aRf c #5acceb", +"aRe c #5acced", +"hK9 c #5b1a14", +"dR8 c #5b2e25", +"bo2 c #5b331e", +"aVz c #5bcbed", +"bbz c #5c2314", +"faK c #5c241c", +"cFy c #5c2512", +"aR2 c #5c2711", +"bta c #5c2a18", +"bPs c #5c2d17", +"dw7 c #5c3320", +"bKM c #5c3921", +"an6 c #5c8d93", +"av0 c #5cc4df", +"aEh c #5cc7e3", +"#2g c #5ccaeb", +"aZR c #5ccced", +"#5W c #5ccdef", +"e8H c #5d231b", +"aNJ c #5d2610", +"btb c #5d2f1b", +"bBt c #5d331c", +"av2 c #5d8377", +"#YU c #5d8d94", +"an5 c #5db5cb", +"azY c #5dc5de", +"#YJ c #5dcaeb", +"#Rt c #5dcbeb", +"a8n c #5dcced", +"aZT c #5dcdeb", +"aZS c #5dcdec", +"fjk c #5e281a", +"cf8 c #5e2c13", +"ePu c #5e2d22", +"a8Q c #5e2e17", +"bFS c #5e3019", +"bFV c #5e331c", +"dFP c #5e3321", +"bFR c #5e341f", +"aM0 c #5ecae6", +"#2h c #5ecaea", +"#U3 c #5ecdee", +"bf5 c #5f2717", +"aV9 c #5f2a11", +"ePv c #5f2b21", +"fa3 c #5f2d1d", +"eFT c #5f2d23", +"dJK c #5f2e25", +"cbA c #5f2f14", +"cbw c #5f331f", +"bxa c #5f351e", +"bkx c #5f3520", +"#YK c #5fcbea", +"a34 c #5fcdec", +"aVB c #5fcfeb", +"frp c #60271e", +"eUv c #602c21", +"cos c #602f19", +"cBh c #602f1a", +"bf6 c #602f1c", +"bxf c #60331e", +"bkw c #603520", +"bw7 c #60361e", +"dR9 c #60382d", +"#U4 c #60abbf", +"aEi c #60c2d7", +"a8o c #60cdec", +"a35 c #60ceeb", +"baH c #60ceee", +"bfe c #60cfef", +"faL c #61261d", +"fnr c #612d1c", +"bkv c #612e1b", +"eA9 c #612e23", +"bba c #613017", +"a4y c #613019", +"bBx c #613822", +"bUg c #613b23", +"bF0 c #613d24", +"a36 c #61ceeb", +"a8p c #61ceec", +"bff c #61ceef", +"bjC c #61d1f2", +"e4f c #622a1f", +"fvu c #622b1f", +"a0o c #622e15", +"b3Y c #62341a", +"cf6 c #623722", +"bBo c #623921", +"bFX c #623d24", +"#YT c #6299a0", +"aIJ c #62c7dd", +"baI c #62ceed", +"bfg c #62cfef", +"faJ c #632b21", +"fC0 c #63321e", +"dFQ c #633226", +"dw6 c #633325", +"bw9 c #63341c", +"dBB c #633423", +"bt# c #63351e", +"eKy c #633529", +"bs2 c #63361f", +"ar5 c #63775b", +"aVC c #63bfd3", +"bob c #63c6da", +"a37 c #63cfeb", +"hHQ c #64221b", +"e8G c #642a20", +"fGz c #642d1b", +"aJk c #642f11", +"eFO c #643126", +"b8T c #643618", +"ePj c #643729", +"bZa c #643922", +"bs7 c #643b23", +"bo1 c #643c24", +"bUd c #643f26", +"aRg c #64cde6", +"baJ c #64cfec", +"bfh c #64cfee", +"a8q c #64d0ec", +"bjG c #64d0ef", +"bn4 c #64d2f2", +"hOE c #651f18", +"eBa c #653126", +"bBw c #653520", +"bfM c #65361b", +"bFZ c #653b23", +"abT c #65c5d9", +"aZU c #65cde7", +"bfi c #65d0ed", +"faO c #66261c", +"hOF c #66271e", +"e.W c #662c23", +"aNx c #663214", +"aWm c #663219", +"fvv c #66331f", +"ewA c #663327", +"cot c #66341a", +"bBp c #663c24", +"ePk c #663e2f", +"bZ. c #664126", +"b3W c #664127", +"aj9 c #666944", +"bsk c #66cee4", +"baK c #66d1ed", +"bn6 c #66d3f2", +"bF. c #66d4ec", +"faP c #672d22", +"edM c #672e24", +"fKq c #67301e", +"ewx c #673026", +"ePi c #673325", +"aNw c #673516", +"frr c #673620", +"bKD c #67381f", +"bs4 c #673920", +"eKw c #673b2f", +"bt. c #674226", +"bPz c #674429", +"b8R c #674529", +"afY c #67c3d5", +"bfj c #67d1ed", +"bjH c #67d1ee", +"baL c #67d2ec", +"faM c #68281e", +"e8y c #682c22", +"cw7 c #682e16", +"frq c #68311e", +"erZ c #683327", +"dJy c #683422", +"coq c #683a23", +"eKx c #683d2f", +"bKJ c #684127", +"#5X c #68c1d3", +"bjI c #68d1ee", +"bfk c #68d2ec", +"baM c #68d2ed", +"bn7 c #68d3f0", +"bfn c #68d4ec", +"hEv c #692920", +"cJS c #69321b", +"dJz c #693423", +"bko c #693a1e", +"bxe c #693b23", +"boZ c #693c21", +"dBi c #693d25", +"bKK c #693d26", +"bs0 c #693e23", +"boV c #693e24", +"eKv c #693e31", +"boW c #693f28", +"bPy c #69432a", +"bwm c #69d3ea", +"bfl c #69d3ed", +"bjL c #69d4ec", +"bAD c #69d5ec", +"baN c #69d5ee", +"faN c #6a2a1f", +"edK c #6a3027", +"eA8 c #6a3428", +"aJl c #6a3518", +"dJw c #6a3822", +"eFP c #6a382c", +"a87 c #6a3a1f", +"bf2 c #6a3a21", +"dFN c #6a4327", +"esy c #6a432c", +"aj8 c #6a968f", +"bn8 c #6ad3ef", +"bJT c #6ad4ea", +"bo. c #6ad4ed", +"bfm c #6ad5ec", +"a8s c #6ad5ed", +"bsc c #6ad5f3", +"fKp c #6b281b", +"dFC c #6b2820", +"ePh c #6b3022", +"eni c #6b3128", +"d6c c #6b3227", +"fvt c #6b372a", +"bby c #6b3823", +"ckk c #6b4026", +"dBz c #6b4028", +"bPx c #6b4129", +"bxd c #6b4529", +"cf7 c #6b452a", +"bUf c #6b492c", +"b3V c #6b4a2c", +"bn9 c #6bd3ee", +"bsh c #6bd5ec", +"bo# c #6bd5ed", +"bsi c #6bd6ed", +"bwl c #6bd7ed", +"bjM c #6bd7ee", +"bYY c #6c2c0f", +"deM c #6c2c14", +"f7g c #6c2d1c", +"dFI c #6c3225", +"eZC c #6c3428", +"fzn c #6c3728", +"dJS c #6c3729", +"esx c #6c3824", +"bs3 c #6c3f24", +"bUi c #6c432c", +"bs1 c #6c442a", +"ex. c #6c452e", +"eBK c #6c472f", +"bY9 c #6c4a2d", +"bwk c #6cd6ec", +"bwi c #6cd6ee", +"bsj c #6cd7ed", +"boa c #6cd7ee", +"bAC c #6cd8ec", +"bJS c #6cd8f0", +"eir c #6d2e24", +"hHR c #6d2f24", +"fN8 c #6d311f", +"dFH c #6d3326", +"dJL c #6d362a", +"eUt c #6d3f31", +"bFY c #6d4028", +"dJR c #6d412b", +"dSb c #6d4134", +"bw8 c #6d452c", +"fvw c #6d482b", +"cbz c #6d4b30", +"bse c #6dd5f2", +"bwc c #6dd5f6", +"bwh c #6dd7ef", +"fN7 c #6e2618", +"hL. c #6e3428", +"eFS c #6e362b", +"enk c #6e372b", +"erX c #6e372c", +"dw1 c #6e391b", +"dJv c #6e3c21", +"ewy c #6e3c30", +"bUe c #6e482d", +"eLd c #6e4b33", +"aRh c #6ec1cf", +"bsf c #6ed6f1", +"bwd c #6ed6f4", +"bAA c #6ed7ec", +"bAz c #6ed8ef", +"bAy c #6ed8f0", +"f0U c #6f2d1d", +"hK8 c #6f2e25", +"hA4 c #6f3127", +"dsA c #6f3217", +"d#v c #6f3414", +"dFJ c #6f3727", +"aJu c #6f3a1e", +"dxg c #6f3b22", +"e8z c #6f3b2e", +"ew9 c #6f3f2b", +"dFy c #6f4027", +"bBv c #6f452b", +"eLc c #6f452d", +"eek c #6f4628", +"fjl c #6f4930", +"eGp c #6f4b33", +"enW c #6f4f32", +"af0 c #6f5b32", +"bE6 c #6fd8ed", +"bE5 c #6fd8ef", +"bE7 c #6fd9eb", +"bJR c #6fd9ed", +"bE4 c #6fd9ef", +"bKf c #702f15", +"frj c #703627", +"eip c #70372c", +"fnq c #703a1f", +"eiq c #703a2d", +"e4d c #703c2e", +"bbw c #703d24", +"eLb c #703e26", +"eZn c #703e2f", +"bf4 c #704028", +"d1m c #704235", +"eZm c #704333", +"bf3 c #704429", +"bs5 c #704529", +"bPC c #70462e", +"eBJ c #70462f", +"e#u c #70472b", +"abW c #704924", +"frs c #704930", +"bwg c #70d8f1", +"bJQ c #70daed", +"bJP c #70daee", +"dN2 c #712d24", +"fUn c #712e1d", +"g.b c #712f20", +"dJA c #713726", +"dog c #71381c", +"d1j c #71392d", +"ei0 c #713b22", +"eKG c #713b2f", +"bbr c #713d1d", +"dw0 c #713d1e", +"ePt c #714032", +"dWD c #714033", +"bFQ c #714124", +"dR7 c #714537", +"dBh c #71482b", +"dJQ c #714d32", +"af1 c #71512c", +"ak. c #716b44", +"a8t c #71b5bd", +"bwe c #71d7f3", +"bJO c #71daf0", +"bE3 c #71daf1", +"d#Z c #722c14", +"fXJ c #722f1d", +"fXI c #72301f", +"e8x c #723025", +"dBd c #723411", +"dsM c #72351a", +"dBe c #723615", +"dwT c #723716", +"dev c #72371c", +"gP3 c #72372d", +"enh c #72382d", +"dBc c #723917", +"e8F c #723b2d", +"dFx c #723f21", +"eKI c #723f32", +"eFN c #724132", +"ePp c #724133", +"bks c #724629", +"#5Z c #724a24", +"dFO c #724d31", +"ei2 c #725332", +"esz c #725539", +"bfo c #72aeb3", +"bTo c #72d3e5", +"bAt c #72d6f7", +"bOG c #72d8ea", +"bJN c #72dbf1", +"dBk c #732f1b", +"f0T c #733222", +"djH c #733317", +"a4T c #733320", +"dn5 c #73371e", +"djp c #733813", +"djq c #733920", +"eww c #733a2e", +"c1K c #733b1a", +"f4b c #733c23", +"dwS c #733e1c", +"enj c #733e31", +"e8A c #734132", +"dFz c #73442d", +"eUY c #734729", +"fKr c #73472d", +"fns c #734f35", +"eel c #735333", +"bOD c #73dbf1", +"bOE c #73dcf0", +"bOF c #73ddf1", +"fRu c #74321f", +"ePg c #743323", +"f0V c #74341f", +"fUm c #743422", +"f4# c #743423", +"dBp c #743825", +"cJT c #743b21", +"dsK c #743c18", +"a9a c #743c25", +"fRw c #743d25", +"fzk c #743e2f", +"fvq c #743f31", +"ePl c #744032", +"a4O c #744325", +"eZl c #744435", +"eB. c #744538", +"boX c #74472b", +"bku c #74472d", +"eP0 c #74482f", +"bbt c #744a2d", +"fGA c #744d32", +"e8X c #744f35", +"fa4 c #745237", +"eem c #745535", +"bE2 c #74dbf3", +"bT2 c #753515", +"fXH c #753624", +"hEu c #75362c", +"deu c #753f18", +"dFv c #754020", +"d1l c #754435", +"dxf c #75452b", +"bbx c #75492d", +"eZO c #754a2b", +"abV c #75552c", +"af2 c #755b34", +"aka c #755e34", +"#U5 c #758c7c", +"bTp c #75bfc5", +"bJU c #75ccd5", +"bYd c #75d3e6", +"bAw c #75daf3", +"bOC c #75dbf2", +"dwU c #763112", +"fnp c #76331d", +"d1S c #76361f", +"hHS c #763b2d", +"gP4 c #763b30", +"dsP c #763c25", +"eUw c #764132", +"dn3 c #764219", +"f7h c #764228", +"a4U c #76432a", +"eA7 c #764335", +"dsy c #76441b", +"g.d c #76482b", +"bfY c #764b2d", +"eP1 c #765136", +"fC1 c #765336", +"#9Y c #76542a", +"fzq c #765739", +"#Rv c #76cddd", +"bAv c #76d8f5", +"bTn c #76dcf2", +"hRP c #772f21", +"fjj c #773f22", +"e35 c #773f31", +"fnj c #77412f", +"dFw c #774323", +"d6b c #774336", +"eZz c #774435", +"e8B c #774635", +"f7i c #774828", +"een c #77492b", +"a9b c #77492d", +"dS# c #77493b", +"bfZ c #774f33", +"bF# c #77b1b8", +"bE1 c #77dbf6", +"bKe c #78320f", +"aWr c #78351f", +"e34 c #783628", +"fjg c #78362a", +"hL# c #783a2d", +"cFz c #783e22", +"dsz c #783f1c", +"dBj c #784129", +"g.c c #78422b", +"aRP c #784625", +"eUL c #784636", +"gbq c #78482e", +"e#z c #784927", +"eKB c #784939", +"e#v c #784f2f", +"enX c #784f32", +"af3 c #78572b", +"aZV c #78a7a6", +"bTm c #78ddf4", +"f7f c #793523", +"hHT c #793a2d", +"d1R c #793c22", +"gP2 c #793d33", +"dsQ c #794124", +"dw5 c #79412d", +"c6q c #79421f", +"eZB c #794636", +"a0D c #794727", +"eZy c #794736", +"e8C c #794737", +"a89 c #794c2e", +"eep c #794d2c", +"dFu c #794d2d", +"gbr c #795234", +"aM3 c #797c5c", +"bE0 c #79d9f7", +"eUO c #7a3127", +"aR7 c #7a361b", +"doj c #7a3a1f", +"eBb c #7a4236", +"dFA c #7a4433", +"dBf c #7a451f", +"edL c #7a4537", +"e8D c #7a4837", +"bkp c #7a5336", +"bOA c #7adef5", +"a0I c #7b3b25", +"enl c #7b3b30", +"doh c #7b3c1d", +"hOI c #7b3c2d", +"gP5 c #7b4034", +"gbp c #7b422c", +"faI c #7b4333", +"cWY c #7b4524", +"e#x c #7b4527", +"f4c c #7b4528", +"d6L c #7b4529", +"e8E c #7b4736", +"bj9 c #7b4825", +"eUK c #7b4939", +"b8O c #7b4c31", +"e4r c #7b4e2e", +"bf0 c #7b5031", +"boY c #7b5232", +"bOH c #7bc3c6", +"hLa c #7c3c2e", +"doi c #7c3d20", +"hHP c #7c3d32", +"edN c #7c3f30", +"dFE c #7c4234", +"d6N c #7c4325", +"cSK c #7c4328", +"dn4 c #7c441e", +"bYX c #7c4629", +"e39 c #7c4636", +"aNK c #7c4729", +"e4. c #7c4837", +"e36 c #7c4838", +"esB c #7c5334", +"e8Y c #7c5939", +"eP2 c #7c5c3e", +"eU1 c #7c5e3f", +"#2i c #7caaa7", +"de1 c #7d3114", +"c6Z c #7d3b20", +"hOG c #7d4132", +"dw3 c #7d442e", +"e38 c #7d4738", +"eF9 c #7d4939", +"e8U c #7d4c2b", +"dBb c #7d4e29", +"e#w c #7d4f30", +"ei4 c #7d5130", +"ei5 c #7d522f", +"d1n c #7d5245", +"g.e c #7d5635", +"dA9 c #7d573a", +"afZ c #7d9679", +"bJJ c #7ddaf9", +"bYc c #7ddef3", +"bOz c #7ddef9", +"bTl c #7ddff6", +"dNF c #7e381e", +"dXc c #7e3f24", +"fCW c #7e4030", +"dsO c #7e412b", +"dBl c #7e412d", +"ff# c #7e4225", +"f0W c #7e4427", +"e.T c #7e4438", +"bKg c #7e4529", +"e30 c #7e4c39", +"dSa c #7e4f3e", +"enY c #7e5331", +"bKP c #7e5533", +"eZT c #7e5a36", +"akb c #7e6034", +"#2j c #7e683f", +"av3 c #7e7b52", +"#YL c #7ea69a", +"ePO c #7f2a23", +"ds2 c #7f3e1e", +"dBo c #7f3e2b", +"dBm c #7f4a37", +"e37 c #7f4b3a", +"dFt c #7f5838", +"az0 c #7f9679", +"eK1 c #802a21", +"hHU c #804031", +"hOH c #804131", +"hLb c #804232", +"gEa c #804236", +"bKh c #804624", +"cBj c #804728", +"a4S c #80492e", +"cw8 c #804a2b", +"eUp c #804f3f", +"eB# c #805040", +"dJP c #805538", +"aIK c #809c85", +"dsN c #814127", +"hK7 c #814235", +"hEw c #814334", +"hHZ c #814535", +"eZp c #814939", +"ew8 c #814a28", +"eKD c #814a3c", +"fa2 c #814b2b", +"e.V c #814b3d", +"eUM c #814e3d", +"bbb c #815433", +"fKs c #815c3a", +"dNV c #815c4b", +"dFs c #815d3d", +"#YM c #816b43", +"aM4 c #81744a", +"ar6 c #81906d", +"bOx c #81dcfa", +"bOy c #81ddfa", +"bTk c #81e0f9", +"hRO c #823e30", +"hxz c #823e31", +"gP6 c #82483c", +"dSd c #824938", +"eZq c #824b3b", +"frk c #82513f", +"a4Q c #825334", +"eeo c #825533", +"dWF c #825747", +"dS. c #825b4a", +"f7j c #825c39", +"dFr c #825d3c", +"dwO c #825d3f", +"abX c #825e34", +"#2k c #825e37", +"af6 c #826940", +"ab0 c #826f47", +"ak# c #828058", +"e33 c #833c2a", +"hH0 c #833e32", +"hRN c #833f32", +"d1T c #834729", +"hEx c #834737", +"ewB c #83473b", +"d6O c #834f2d", +"fja c #83523e", +"f4d c #835331", +"e#y c #835734", +"af5 c #83653b", +"fzr c #836945", +"#5Y c #837955", +"an9 c #839270", +"dsB c #843d1a", +"dNH c #84422f", +"d6r c #844235", +"c2g c #84462a", +"hRR c #844734", +"cXw c #844a2d", +"eZw c #844b3b", +"d1g c #844c3e", +"eA5 c #844e40", +"aR3 c #845131", +"eFJ c #845141", +"d6M c #845231", +"a0E c #845331", +"fa7 c #845d37", +"dwN c #845d3c", +"bAE c #84a6a1", +"bTj c #84e0fb", +"bYb c #84e2f9", +"hOC c #854336", +"d#2 c #854523", +"hUP c #85452f", +"hHV c #854535", +"e32 c #854733", +"ein c #854c3e", +"eFF c #855842", +"a9# c #855a38", +"dBg c #855c36", +"fGB c #856441", +"bTi c #85dffb", +"dNE c #864222", +"dsJ c #86461f", +"dR3 c #86483a", +"dBn c #864c39", +"gP7 c #864d40", +"d1k c #864f3d", +"fXK c #865132", +"eFQ c #865244", +"eFI c #865345", +"bBn c #865531", +"dFq c #865e38", +"af4 c #866234", +"fjn c #866a46", +"abZ c #866d45", +"aEj c #86a084", +"eZE c #874435", +"dNJ c #874736", +"hA5 c #874739", +"er0 c #874c40", +"dwZ c #87542e", +"c6r c #875434", +"cw5 c #875435", +"aWn c #875534", +"d#u c #87572c", +"geT c #875a34", +"dR6 c #875b49", +"bbv c #875f3b", +"bY. c #87e0fb", +"de2 c #883d1d", +"enT c #884c2d", +"feY c #884e39", +"gM# c #885045", +"e3Z c #885243", +"cou c #885a38", +"a0F c #885d3c", +"djk c #88603c", +"fnv c #886640", +"bY# c #88e2fa", +"eUQ c #892f26", +"feW c #895036", +"gP8 c #895043", +"ePf c #895134", +"eZh c #895847", +"g.g c #89613b", +"fa8 c #89623a", +"f7k c #89623d", +"eP3 c #896840", +"gbs c #896e4b", +"geR c #896f4d", +"aRi c #89977c", +"b22 c #89d7e5", +"eBv c #8a3123", +"eGb c #8a3326", +"gH5 c #8a493d", +"hEy c #8a4d3c", +"eZu c #8a4d3e", +"eZv c #8a4e3e", +"dBu c #8a5029", +"hxf c #8a503d", +"dNN c #8a5141", +"hLc c #8a523f", +"hLd c #8a5240", +"d1U c #8a5533", +"dJF c #8a5647", +"aR5 c #8a5835", +"cS# c #8a5937", +"boU c #8a5e38", +"gbu c #8a5f39", +"fnw c #8a603a", +"fjp c #8a623a", +"dnZ c #8a623f", +"ffe c #8a673f", +"bT3 c #8b4924", +"dNI c #8b4d3a", +"hLe c #8b5041", +"dWB c #8b5043", +"eZr c #8b5241", +"aR6 c #8b5634", +"e31 c #8b5941", +"a0G c #8b5d3b", +"eeq c #8b5e36", +"ewV c #8c3421", +"c6H c #8c3e1e", +"eUG c #8c4e3f", +"eUx c #8c5442", +"eFL c #8c6353", +"dst c #8c6644", +"gbt c #8c6c47", +"aIL c #8c7a47", +"baP c #8ca398", +"fKo c #8d3d26", +"bKi c #8d491a", +"bFt c #8d4a20", +"djD c #8d4b23", +"dJM c #8d4f3b", +"hEF c #8d503d", +"dJG c #8d5848", +"fXL c #8d5d38", +"dJt c #8d5f2e", +"f0X c #8d603b", +"ei6 c #8d643a", +"enZ c #8d653b", +"eZU c #8d673c", +"dsu c #8d6743", +"eU3 c #8d683c", +"geS c #8d6b45", +"g.f c #8d704a", +"#2r c #8d9979", +"faX c #8e4135", +"gE. c #8e4939", +"dFK c #8e4a2c", +"fe6 c #8e4b3b", +"eUH c #8e5342", +"gEg c #8e564a", +"dN0 c #8e5745", +"aJm c #8e5c34", +"fUs c #8e6138", +"aWp c #8e613d", +"f0Y c #8e633d", +"f4e c #8e643e", +"a4P c #8e6743", +"dB. c #8e704e", +"bTq c #8ea691", +"eBt c #8f4c3b", +"gH4 c #8f4c41", +"bT1 c #8f5026", +"hty c #8f5139", +"eUF c #8f5141", +"eUz c #8f5242", +"gEf c #8f5246", +"htB c #8f5343", +"cSD c #8f5438", +"eng c #8f5445", +"htC c #8f5446", +"ckh c #8f603e", +"aWo c #8f633f", +"gbv c #8f673e", +"g.h c #8f683f", +"akc c #8f764d", +"bwn c #8fa499", +"b21 c #8fe4f5", +"b20 c #8fe6f9", +"dSg c #904739", +"e8w c #904930", +"ePN c #904d3e", +"dSf c #904e3d", +"doe c #905227", +"eFR c #905949", +"hXV c #905a40", +"ePo c #905a4a", +"dwR c #906538", +"f7n c #90673d", +"bbs c #906945", +"bkr c #906a45", +"eZG c #91392e", +"bA0 c #914e20", +"eBq c #915345", +"eUA c #915545", +"eUy c #915645", +"e8r c #915846", +"eer c #91592d", +"eAY c #915e44", +"aNy c #916038", +"aR4 c #91633d", +"dsx c #91673b", +"fKu c #91683e", +"f7m c #916a41", +"fa9 c #916e44", +"av4 c #918453", +"a39 c #919c8b", +"eUP c #924439", +"eK0 c #924b3d", +"dBC c #925336", +"hEG c #925444", +"dWL c #925944", +"dxe c #925d40", +"e3V c #92644c", +"eA6 c #926454", +"dNR c #926754", +"eP4 c #926a3a", +"g.i c #926a40", +"gbw c #926b40", +"fvA c #926b41", +"bf1 c #926c47", +"ao# c #927f53", +"bOI c #92af98", +"b23 c #92c9cb", +"faW c #934f40", +"ewT c #93513f", +"htA c #935842", +"ewt c #935a4b", +"hHY c #935d48", +"gL9 c #935f53", +"ePw c #93604d", +"eFE c #936448", +"ckm c #936944", +"enF c #943b29", +"hRM c #945131", +"gEc c #945648", +"hEE c #945743", +"dWU c #945748", +"ei8 c #945929", +"e8s c #945a40", +"ePq c #945b4b", +"feX c #945d42", +"bfX c #945e33", +"gMa c #945f53", +"dBa c #946b3f", +"g.j c #946c41", +"a88 c #946e49", +"e4y c #947447", +"#93 c #94875c", +"eiL c #953a2a", +"dw4 c #955339", +"ePE c #955344", +"gAi c #955534", +"eej c #95572f", +"e#c c #955748", +"eKF c #955d4c", +"d1d c #955d4d", +"gM. c #956155", +"faH c #95624b", +"bUa c #95663c", +"eFG c #956955", +"fRA c #956b3f", +"bbu c #956e48", +"e80 c #957348", +"aw# c #957d47", +"cSo c #964220", +"gEe c #965749", +"eZs c #965a49", +"d6f c #96624e", +"a4N c #96663d", +"fUt c #966c40", +"a0H c #966d46", +"eLg c #966f3b", +"aIN c #969670", +"bsl c #96a99b", +"dWV c #974a2d", +"ba4 c #974b16", +"fjh c #974c2e", +"bfF c #974d18", +"hEz c #975a46", +"dND c #975e3a", +"cFx c #97613f", +"aW. c #97633a", +"b3R c #976945", +"ePJ c #976954", +"bYf c #97b2a1", +"cJw c #98421e", +"eUl c #984f39", +"htP c #98503f", +"enE c #985744", +"eim c #985a49", +"hA7 c #985c48", +"edI c #985c4c", +"dSe c #985d49", +"hEt c #985e50", +"erU c #985f50", +"fvr c #986954", +"edx c #986b43", +"der c #986f44", +"eGs c #987747", +"awa c #988751", +"e4k c #994638", +"e8O c #994a3d", +"a8I c #99521a", +"de3 c #99522b", +"dwV c #99552d", +"eBp c #995b4c", +"eis c #995d4a", +"eUq c #995e4d", +"e.S c #996251", +"ba5 c #996735", +"eUJ c #996b56", +"dox c #9a4b22", +"ePD c #9a5849", +"ePy c #9a5a4b", +"fi9 c #9a5b3d", +"hK6 c #9a6053", +"d6d c #9a6250", +"eFU c #9a6353", +"gEh c #9a6459", +"ei9 c #9a673a", +"eGu c #9a733e", +"aVY c #9a7545", +"aw. c #9a834b", +"af7 c #9a885e", +"aRj c #9a9e7b", +"#2s c #9aa98b", +"dsR c #9b4d29", +"ds1 c #9b4f28", +"d#Y c #9b5632", +"eKT c #9b5849", +"c6Y c #9b5c3b", +"hA2 c #9b5c4d", +"enf c #9b5d4e", +"eF7 c #9b5e4e", +"d#M c #9b6040", +"eZi c #9b604f", +"faA c #9b6149", +"en1 c #9b632c", +"eUs c #9b6755", +"eGt c #9b7641", +"dNS c #9b7660", +"a4R c #9b774e", +"eU4 c #9b7846", +"b7Y c #9bdce2", +"ePP c #9c4634", +"cF# c #9c4b26", +"faB c #9c5536", +"bwJ c #9c5726", +"e8N c #9c5749", +"fri c #9c593a", +"hEA c #9c5f4b", +"gEd c #9c5f4f", +"hA1 c #9c6050", +"hA3 c #9c6052", +"d1o c #9c6854", +"esE c #9c6933", +"eib c #9c6c44", +"dWE c #9c725d", +"a9. c #9c774f", +"exc c #9c7b4b", +"e81 c #9c7e4d", +"enC c #9d5e4e", +"hHO c #9d6758", +"dWC c #9d6a57", +"dFp c #9d7749", +"dnY c #9d7851", +"g.k c #9d794b", +"ab1 c #9d8e62", +"fay c #9e5947", +"bsS c #9e5f30", +"esi c #9e604b", +"eF6 c #9e6050", +"hxq c #9e6348", +"a8R c #9e704c", +"frm c #9e715b", +"exd c #9e723c", +"eFH c #9e725e", +"ffh c #9e7c4b", +"fN6 c #9f512e", +"gH3 c #9f5f50", +"hA6 c #9f6350", +"htz c #9f6449", +"bsT c #9f6539", +"d1y c #9f6654", +"eKE c #9f6858", +"a4n c #9f6d35", +"dB# c #9f7d53", +"fb# c #9f804d", +"fb. c #9f8050", +"#92 c #9f8152", +"e4A c #9f8250", +"akd c #9f8f63", +"#94 c #9f9a71", +"faY c #a03a21", +"b8n c #a05325", +"c11 c #a05430", +"boB c #a0572a", +"e4j c #a05c4d", +"hEp c #a05e3b", +"hEq c #a05f47", +"enB c #a06253", +"hLf c #a06352", +"dJO c #a06744", +"dWy c #a06754", +"eZk c #a06a58", +"gMb c #a06c60", +"hRS c #a06e56", +"eFM c #a07e6a", +"abY c #a08251", +"eZW c #a08453", +"e4z c #a08554", +"asg c #a09056", +"dSD c #a15d33", +"e8v c #a15e3e", +"hmn c #a15e44", +"a4m c #a16027", +"e8o c #a1634d", +"hED c #a16650", +"d5Y c #a16744", +"em7 c #a16f4a", +"ei7 c #a1713c", +"ewl c #a1714e", +"a0b c #a17237", +"cND c #a17a56", +"e82 c #a18452", +"eBN c #a18653", +"ar7 c #a19c6d", +"dsC c #a24d1f", +"fRt c #a25c37", +"e8p c #a26051", +"esh c #a2634f", +"ewU c #a2644f", +"eUo c #a26453", +"hxy c #a26557", +"ePx c #a26755", +"fj. c #a26f55", +"dNY c #a2705a", +"aNI c #a27144", +"eLi c #a27e49", +"awe c #a29259", +"aIO c #a29970", +"ewW c #a33f24", +"djW c #a3532a", +"feJ c #a3614c", +"htQ c #a36151", +"enA c #a36453", +"eZg c #a36554", +"hAX c #a36644", +"hxr c #a36852", +"hxp c #a36a49", +"eZt c #a36c58", +"erL c #a3724f", +"eKA c #a37c67", +"eBP c #a37d46", +"eZY c #a3834c", +"#56 c #a3884f", +"aEz c #a38e56", +"az1 c #a38f54", +"aM5 c #a38f67", +"aI0 c #a3925b", +"aAb c #a3935a", +"asf c #a3955a", +"aof c #a39960", +"dsU c #a4491f", +"hp3 c #a45d4a", +"hiE c #a46146", +"hpO c #a46548", +"hBd c #a4654f", +"eBo c #a46656", +"ewC c #a46857", +"gAj c #a46d54", +"fm4 c #a46e53", +"aJt c #a47447", +"cJi c #a4774a", +"eFD c #a47a4d", +"awh c #a48d56", +"akh c #a48f58", +"av9 c #a4945f", +"as# c #a4955f", +"av5 c #a49863", +"ao. c #a4aa83", +"cwJ c #a55227", +"eZd c #a55a3a", +"feM c #a55d38", +"fUl c #a55f3b", +"hHM c #a56038", +"fiW c #a5623d", +"gH1 c #a56553", +"eBH c #a56d3c", +"hEr c #a56f5e", +"dNZ c #a57058", +"bsU c #a57145", +"hOJ c #a57662", +"exe c #a57840", +"en0 c #a57b45", +"a8L c #a57f4e", +"cf9 c #a58055", +"dNW c #a58069", +"eU7 c #a58551", +"e83 c #a58852", +"aEB c #a58f54", +"awi c #a58f58", +"asb c #a59d68", +"eBx c #a64429", +"dsT c #a65026", +"dw9 c #a65627", +"eKR c #a66253", +"boC c #a66437", +"enz c #a66452", +"hBc c #a6664f", +"gH0 c #a66654", +"a0a c #a66a30", +"hiD c #a67158", +"gMc c #a67467", +"fjr c #a68552", +"ewY c #a7482c", +"css c #a7562a", +"cAV c #a75c35", +"he5 c #a76349", +"eKN c #a76454", +"hxw c #a76654", +"gHZ c #a76754", +"hAY c #a76950", +"fiV c #a76a51", +"e.Z c #a76e58", +"hA0 c #a76f5d", +"esF c #a7743c", +"d03 c #a77459", +"bw6 c #a7764c", +"ba7 c #a78251", +"ffi c #a78853", +"aNj c #a78b53", +"ash c #a79458", +"aEk c #a7975c", +"ewX c #a84e35", +"hbj c #a8634a", +"g9s c #a8644b", +"hxB c #a86753", +"eKM c #a86757", +"hBb c #a86852", +"cSJ c #a86942", +"fm3 c #a86c50", +"d1f c #a87460", +"cN5 c #a87558", +"hHW c #a87661", +"gIc c #a8776b", +"aRx c #a8783e", +"hmm c #a87862", +"bY6 c #a87a4c", +"dJs c #a87e46", +"aVU c #a88044", +"d#w c #a8825f", +"fC5 c #a88450", +"eP7 c #a88753", +"eP6 c #a88854", +"aNl c #a88d5a", +"aAf c #a89159", +"aAd c #a89359", +"#2q c #a89466", +"aoj c #a8975e", +"av7 c #a89964", +"aEl c #a8a674", +"bYD c #a95723", +"gXs c #a96243", +"g5w c #a9644a", +"e3U c #a96b59", +"dRZ c #a96c55", +"faV c #a96c59", +"gD9 c #a96e48", +"dWM c #a96e58", +"eZj c #a96f5f", +"e3Y c #a97160", +"ePr c #a97261", +"enm c #a97461", +"gIb c #a9786b", +"dBy c #a97d5c", +"eZX c #a9905c", +"asi c #a9915b", +"aED c #a9925d", +"awf c #a9975b", +"av6 c #a99862", +"b7Z c #a9cfca", +"e4l c #aa4a2b", +"eGc c #aa4c30", +"ed6 c #aa5235", +"dsS c #aa562b", +"dol c #aa6235", +"cNS c #aa623c", +"fi8 c #aa643d", +"eKQ c #aa6857", +"hA9 c #aa6b56", +"enD c #aa6d59", +"gH2 c #aa6d5a", +"dSk c #aa6e5b", +"feL c #aa6f52", +"hBe c #aa6f5b", +"faG c #aa714d", +"he4 c #aa7255", +"fj# c #aa7d63", +"dNC c #aa7e59", +"aAe c #aa975d", +"aI1 c #aa9961", +"az2 c #aa9b60", +"aEm c #aaab80", +"aVE c #aab499", +"dsV c #ab4e22", +"d6s c #ab5a37", +"djY c #ab633b", +"dsI c #ab6533", +"eF1 c #ab6757", +"fXG c #ab6842", +"ewO c #ab6e5c", +"bsR c #ab6f3e", +"hB# c #ab6f57", +"hB. c #ab6f58", +"d6q c #ab705d", +"d1p c #ab715b", +"hxo c #ab724c", +"e8u c #ab7350", +"dRT c #ab735d", +"aVT c #ab753c", +"a0p c #ab774a", +"eBR c #ab7942", +"hHX c #ab7b64", +"gId c #ab7b6e", +"eKr c #ab7f4f", +"d5X c #ab8763", +"ba6 c #ab8958", +"eU8 c #ab8c55", +"fbb c #ab8d56", +"fba c #ab8f59", +"eU6 c #ab905d", +"aA# c #ab915a", +"aI6 c #ab9259", +"aAg c #ab925c", +"awg c #ab995c", +"aoh c #ab9a5f", +"aAa c #ab9b61", +"aog c #ab9c60", +"as. c #ab9f69", +"aob c #ab9f6d", +"az4 c #aba06d", +"bTr c #aba273", +"b24 c #abc3b0", +"dsW c #ac5024", +"bYy c #ac5729", +"eK2 c #ac573c", +"bj2 c #ac5b28", +"gTz c #ac6848", +"hmB c #ac6952", +"hp2 c #ac6a55", +"gHW c #ac6b48", +"eKO c #ac6b5a", +"fiU c #ac6c58", +"hBa c #ac6d56", +"eKL c #ac6d5c", +"bT0 c #ac7443", +"eUr c #ac7463", +"er1 c #ac7763", +"eUD c #ac7863", +"erT c #ac7967", +"gMd c #ac7a6e", +"e8t c #ac7b58", +"eBQ c #ac814a", +"e8n c #ac8563", +"fUu c #ac8a56", +"fzu c #ac8c5a", +"e4C c #ac8f57", +"ar8 c #ac9f6a", +"az5 c #aca16d", +"av8 c #aca26e", +"ake c #aca377", +"aEn c #aca87b", +"esk c #ad4928", +"ewZ c #ad4c2a", +"bfE c #ad5d29", +"ca7 c #ad673a", +"gPE c #ad6a48", +"eF0 c #ad6a59", +"f0S c #ad6b44", +"eiD c #ad6d5b", +"esc c #ad6e5c", +"dBv c #ad7044", +"dWT c #ad705c", +"gAk c #ad7968", +"d#3 c #ad7c5d", +"ePY c #ad7d49", +"eGw c #ad8048", +"dn2 c #ad8a59", +"awj c #ad9461", +"aAh c #ad965f", +"#95 c #ad9e6e", +"bYk c #adc39d", +"bTE c #ae592a", +"g1y c #ae6749", +"htT c #ae6c57", +"gLO c #ae6d46", +"eFX c #ae6d5c", +"gPF c #ae6f51", +"edY c #ae6f5c", +"enx c #ae6f5d", +"eBc c #ae715f", +"hxv c #ae725f", +"eiJ c #ae735f", +"c2f c #ae744f", +"iu7 c #ae7751", +"dWN c #ae7761", +"d04 c #ae7860", +"gAl c #ae7866", +"dRS c #ae7b62", +"cJL c #ae7d5f", +"exf c #ae824a", +"dJH c #ae836b", +"fe0 c #ae846a", +"a8K c #ae8954", +"a0f c #ae8a55", +"eLj c #ae8b55", +"eP8 c #ae8d57", +"aok c #ae985f", +"aca c #ae9c5f", +"aoi c #ae9d5f", +"bOJ c #aeae80", +"b29 c #aec6a1", +"bwA c #af5d2b", +"eiM c #af5d43", +"hxF c #af6d58", +"hxG c #af6f59", +"dXb c #af703f", +"hAZ c #af7460", +"dRW c #af765f", +"er2 c #af7763", +"ePn c #af7865", +"d6j c #af7a65", +"edQ c #af7b65", +"bPr c #af7c4e", +"hEB c #af7c65", +"hEs c #af7e6e", +"hpN c #af8471", +"d#r c #af8757", +"eP9 c #af8850", +"aRy c #af9054", +"ffj c #af945e", +"a8u c #af9776", +"aEx c #afa065", +"awd c #afa265", +"asc c #afa66b", +"awb c #afa76d", +"ds0 c #b0592c", +"bYz c #b0612c", +"hp7 c #b06f59", +"eFY c #b06f5e", +"eKP c #b0715e", +"ewI c #b0715f", +"eij c #b07360", +"d6o c #b07661", +"e#b c #b07662", +"dWP c #b07763", +"d1u c #b07863", +"aNd c #b07b47", +"b3L c #b07b53", +"dWp c #b07c64", +"hHN c #b07e6d", +"c64 c #b08467", +"az7 c #b08853", +"cbB c #b08f62", +"gby c #b0925e", +"eZZ c #b09359", +"age c #b0975d", +"aEw c #b0975f", +"aRz c #b0985e", +"#6# c #b09d5b", +"aki c #b09e5f", +"af8 c #b0a472", +"akg c #b0a876", +"bYg c #b0ae85", +"b73 c #b0c49d", +"eZH c #b15733", +"bTF c #b1602b", +"dSm c #b1673e", +"bsK c #b16833", +"djC c #b16f3c", +"eBj c #b1705f", +"djI c #b17146", +"hxC c #b1715a", +"e8m c #b1735c", +"feU c #b1754d", +"gLP c #b17559", +"dWO c #b17c66", +"gAm c #b17c69", +"d54 c #b17d68", +"ePm c #b17f6d", +"e8q c #b1806d", +"eGx c #b18149", +"a4z c #b18259", +"fKw c #b18e57", +"aA. c #b1905c", +"aRC c #b19359", +"f7p c #b19360", +"aRE c #b19963", +"#2p c #b19a6c", +"awn c #b19c64", +"aoc c #b1a976", +"eBy c #b2502b", +"dod c #b26532", +"dn8 c #b2663c", +"bPg c #b26a31", +"g1z c #b26d50", +"fi7 c #b26e42", +"hmG c #b2705a", +"hp6 c #b2705b", +"eBk c #b2715e", +"eBi c #b27360", +"eBh c #b27461", +"bw2 c #b27749", +"er9 c #b27864", +"hxu c #b27967", +"dRV c #b27c65", +"iv. c #b2825b", +"aEC c #b29b60", +"aAl c #b29c5b", +"az6 c #b29d69", +"a.a c #b2a062", +"akj c #b2a163", +"aAc c #b2a466", +"b27 c #b2c49c", +"enG c #b35636", +"gbn c #b35a2f", +"esl c #b35a3c", +"gLT c #b37056", +"hxH c #b3745c", +"eBe c #b37561", +"ewJ c #b37563", +"gTA c #b37659", +"htX c #b37760", +"hmI c #b37860", +"enw c #b37964", +"hxs c #b37965", +"er8 c #b37b68", +"er3 c #b37d6a", +"d6i c #b37f69", +"eiB c #b37f6b", +"hEC c #b3816a", +"exg c #b3874e", +"ab7 c #b39d5f", +"aNg c #b39d64", +"akk c #b3a162", +"asd c #b3a96d", +"bos c #b46534", +"bFu c #b46f40", +"cwK c #b47148", +"d#1 c #b47247", +"hmF c #b4735e", +"cXv c #b4744c", +"c2k c #b4754c", +"hpP c #b47556", +"hmC c #b47562", +"eiF c #b47660", +"eZf c #b47765", +"faF c #b4784e", +"hqa c #b47861", +"hAW c #b47d51", +"gHY c #b47e69", +"enp c #b4806b", +"eix c #b4816c", +"eiw c #b4816d", +"bsQ c #b48359", +"e.4 c #b4836e", +"gIe c #b48578", +"gee c #b4865d", +"esG c #b4884f", +"fry c #b4945d", +"aAi c #b49f64", +"ag. c #b4a264", +"#6. c #b4a361", +"af9 c #b4a670", +"aoe c #b4b283", +"caI c #b4c69e", +"ba3 c #b56c36", +"deI c #b57443", +"gXt c #b57458", +"hmo c #b57659", +"g9r c #b5785b", +"eFW c #b57864", +"hmL c #b57962", +"hEo c #b57a4b", +"eUn c #b57a67", +"fiT c #b57b5e", +"hxA c #b57b68", +"hxt c #b57b69", +"hxn c #b57d53", +"faz c #b5826f", +"eUB c #b5836c", +"cf3 c #b5845a", +"e.3 c #b5846f", +"eBS c #b5874f", +"fRC c #b5935d", +"fjs c #b5965f", +"aon c #b59e62", +"aI3 c #b59f65", +"#99 c #b5a163", +"aEy c #b5ad6e", +"dn7 c #b66432", +"csr c #b66736", +"bj1 c #b66938", +"e3R c #b67452", +"g5v c #b6795c", +"g9H c #b67962", +"hmJ c #b67a64", +"gPG c #b67b61", +"eBn c #b67c67", +"e#. c #b67d69", +"hpQ c #b67e62", +"dxd c #b6805d", +"ewD c #b6806d", +"dWw c #b6816b", +"enn c #b6836c", +"edV c #b68470", +"edU c #b68570", +"eiy c #b68571", +"edT c #b68672", +"dWs c #b68772", +"eUe c #b6885a", +"eGy c #b68950", +"e.Y c #b68974", +"eLl c #b68a51", +"az9 c #b68e59", +"dew c #b68e66", +"a4o c #b6945a", +"a0e c #b69561", +"cNE c #b69b6b", +"ffk c #b69c66", +"akl c #b6a164", +"ac. c #b6a16a", +"aI2 c #b6a365", +"ag# c #b6a767", +"dsZ c #b76033", +"bwz c #b76936", +"bPf c #b77136", +"bsL c #b77744", +"c62 c #b7784e", +"deJ c #b7794a", +"esw c #b77a48", +"hqb c #b77b65", +"hp4 c #b77b69", +"hxI c #b77d67", +"gLY c #b7826f", +"fax c #b78569", +"eiA c #b78672", +"aJn c #b78756", +"esH c #b78a50", +"exh c #b78a51", +"eLm c #b78b51", +"az8 c #b78b55", +"d6g c #b78f76", +"fvC c #b7975f", +"asn c #b7a367", +"bYh c #b7b889", +"fi6 c #b87647", +"dJW c #b87751", +"f4. c #b8784d", +"gLS c #b87960", +"e3T c #b87966", +"g9I c #b87a63", +"htZ c #b87d67", +"hmH c #b87e67", +"hbi c #b8805e", +"hpR c #b88069", +"ePC c #b8816b", +"feK c #b88370", +"eiz c #b88773", +"ent c #b88874", +"a86 c #b88955", +"fzv c #b89960", +"aVF c #b89f7b", +"aEI c #b8a066", +"awm c #b8a26e", +"aEE c #b8a36f", +"aNf c #b8a567", +"aEo c #b8a575", +"a.. c #b8a868", +"#59 c #b8a869", +"awc c #b8b176", +"bTs c #b8b380", +"eGd c #b96139", +"b3s c #b97546", +"hiX c #b97c65", +"hby c #b97f68", +"boD c #b98052", +"g5M c #b9836c", +"eKJ c #b9876f", +"eY7 c #b98856", +"eno c #b98872", +"ens c #b98974", +"a4q c #b99863", +"aIZ c #b9a168", +"aV1 c #b9a16c", +"agf c #b9a25e", +"aNi c #b9a266", +"akn c #b9a56e", +"ab5 c #b9a869", +"#6a c #b9ab66", +"#98 c #b9ac72", +"eUR c #ba653c", +"bor c #ba6f3f", +"bA1 c #ba723e", +"fau c #ba7255", +"b3M c #ba7948", +"hiW c #ba7d68", +"bFv c #ba7e54", +"deN c #ba7f56", +"he8 c #ba7f66", +"ewK c #ba7f6a", +"hi1 c #ba816a", +"hiY c #ba826c", +"dRX c #ba8367", +"ewE c #ba836d", +"bKC c #ba8655", +"d1s c #ba8973", +"fe4 c #ba8a70", +"e.0 c #ba8a72", +"eUd c #ba8b53", +"eKV c #ba8b72", +"d1r c #ba8b77", +"bTv c #ba9362", +"hUB c #ba9785", +"fvF c #ba9a63", +"fju c #baa16c", +"ab9 c #baa569", +"aNh c #baa66c", +"agd c #baa66d", +"aga c #baaa69", +"ab3 c #baad77", +"a.# c #baaf6e", +"caJ c #bac598", +"b3. c #bac79a", +"djB c #bb713e", +"fji c #bb7c46", +"feN c #bb7c50", +"he6 c #bb7d61", +"g5L c #bb8169", +"faC c #bb8257", +"esb c #bb826c", +"hxm c #bb8359", +"ePA c #bb846e", +"bw3 c #bb8558", +"bYW c #bb8a5f", +"bOL c #bb8d5e", +"isv c #bb8f6c", +"eBT c #bb9158", +"c6n c #bb9564", +"fGE c #bb9a60", +"a4p c #bb9a63", +"aV0 c #bb9d65", +"ask c #bba567", +"akq c #bba76b", +"#96 c #bbaf7c", +"dsY c #bc683d", +"g9G c #bc7f68", +"hiT c #bc8170", +"hmA c #bc826d", +"hxD c #bc846d", +"eFV c #bc846f", +"hxx c #bc8676", +"aR1 c #bc8d58", +"d6k c #bc8d78", +"aIP c #bc9262", +"eGz c #bc945a", +"caS c #bc9967", +"h3K c #bc9985", +"fzw c #bc9e65", +"agc c #bcab6f", +"#2t c #bcb17c", +"eK3 c #bd6638", +"ed7 c #bd7454", +"boo c #bd753f", +"bPh c #bd763f", +"d#0 c #bd774a", +"dom c #bd784b", +"a8H c #bd7c46", +"he7 c #bd8065", +"eBf c #bd836d", +"gTC c #bd846b", +"g9J c #bd856d", +"c1N c #bd864f", +"hpS c #bd8774", +"edX c #bd886f", +"g5N c #bd8973", +"eUX c #bd8a52", +"gHX c #bd8a71", +"er4 c #bd8a74", +"b8# c #bd8b5b", +"enq c #bd8b74", +"iu6 c #bd8d6a", +"e.5 c #bd8e79", +"gaS c #bd926a", +"cn2 c #bd9865", +"eU9 c #bda067", +"aVV c #bda365", +"bYm c #bda573", +"aI5 c #bda772", +"akm c #bda872", +"#58 c #bdab6f", +"#57 c #bdab72", +"akr c #bdad73", +"agb c #bdae6f", +"bjO c #bdb192", +"b75 c #bdc798", +"cwI c #be7542", +"g5x c #be8065", +"bw1 c #be8251", +"gPH c #be836a", +"eBg c #be836e", +"feT c #be8457", +"g1x c #be8464", +"g1J c #be846a", +"gPI c #be846b", +"g5K c #be856d", +"ewH c #be856f", +"g5J c #be866e", +"htO c #be8673", +"hq# c #be876f", +"htJ c #be8877", +"gTB c #be8a70", +"edO c #be9078", +"ePI c #be957a", +"ip2 c #be9877", +"a4. c #be9b73", +"fC9 c #be9e65", +"cAI c #be9e6a", +"fGF c #be9f66", +"fC6 c #bea067", +"fvD c #bea168", +"fnz c #bea269", +"aAj c #bea977", +"ew0 c #bf6237", +"enH c #bf643d", +"d1Q c #bf7a46", +"eUi c #bf7d4d", +"g5z c #bf8268", +"hiS c #bf8571", +"g1K c #bf876e", +"g5I c #bf8770", +"hfp c #bf8872", +"hxl c #bf895f", +"hfo c #bf8973", +"bTZ c #bf8b57", +"aRw c #bf8e5c", +"aJs c #bf935f", +"fm5 c #bf9472", +"isw c #bf956e", +"cFq c #bf9778", +"fKx c #bfa066", +"aVX c #bfa168", +"fvE c #bfa26b", +"frz c #bfa36b", +"aoo c #bfaa75", +"aor c #bfaf76", +"asp c #bfb074", +"b25 c #bfc099", +"b72 c #bfc79d", +"eso c #c0673e", +"fvm c #c06a39", +"ePQ c #c06a3d", +"e#e c #c0744b", +"bT4 c #c07f4f", +"bYZ c #c08151", +"cst c #c08156", +"g1A c #c08369", +"gLV c #c0856f", +"hmE c #c08672", +"hfg c #c08774", +"hiR c #c08874", +"htK c #c08876", +"htR c #c08a77", +"htL c #c08c7a", +"hp9 c #c08d74", +"g9L c #c08e76", +"gEl c #c09183", +"aRQ c #c09464", +"d09 c #c0957e", +"gIf c #c0958a", +"inx c #c09971", +"ik3 c #c09a75", +"cSb c #c09b65", +"f4j c #c0a36b", +"aZX c #c0a37d", +"aRG c #c0a972", +"cse c #c0aa76", +"aol c #c0ad70", +"cft c #c0ad7a", +"agi c #c0b37a", +"b3b c #c0b380", +"ab2 c #c0bf93", +"aod c #c0c298", +"fGv c #c16c43", +"frf c #c1733f", +"f7e c #c17c4f", +"fi5 c #c17e4c", +"c6E c #c18352", +"bFw c #c18457", +"hbk c #c1866c", +"gPK c #c1886f", +"faE c #c1895e", +"dRY c #c18c70", +"htW c #c18d76", +"e.M c #c18f77", +"edW c #c19178", +"gwv c #c19b6f", +"hRT c #c19b7f", +"htx c #c1a08f", +"dA8 c #c1a572", +"b26 c #c1c294", +"eGe c #c26b39", +"fnf c #c27643", +"fnc c #c27f4b", +"d#I c #c27f4c", +"fi4 c #c27f4d", +"e8k c #c2806b", +"bsv c #c2834e", +"eUh c #c28353", +"hiV c #c28976", +"g1D c #c28a72", +"aM6 c #c28b58", +"hp5 c #c28c78", +"bJW c #c28d60", +"cN6 c #c28d69", +"hxE c #c28e77", +"gXr c #c28f6a", +"hpT c #c28f7d", +"fav c #c2906f", +"d50 c #c29071", +"aEp c #c29462", +"gsJ c #c29c71", +"fjt c #c2aa76", +"cSa c #c2aa7c", +"ako c #c2ad70", +"aAk c #c2af76", +"#53 c #c2af7e", +"aRA c #c2b072", +"b3# c #c2c795", +"doc c #c3753d", +"fnd c #c3804d", +"bfD c #c3814e", +"bBk c #c38555", +"g5y c #c38970", +"gXD c #c38a72", +"fiX c #c38c60", +"hqc c #c38c77", +"ed0 c #c38d73", +"hmq c #c39078", +"cjQ c #c39361", +"enr c #c3947d", +"cNF c #c39665", +"gAn c #c39684", +"isx c #c3976c", +"dWt c #c39981", +"aom c #c3ae75", +"agg c #c3b370", +"b8. c #c3c08c", +"caK c #c3c896", +"dxb c #c4794c", +"fne c #c47d49", +"dN7 c #c47e4c", +"eiZ c #c4824d", +"bsG c #c4844c", +"c6D c #c48654", +"cj3 c #c48659", +"cW1 c #c48c56", +"b3c c #c48d5e", +"hxk c #c48e64", +"ewN c #c48f77", +"eiG c #c49076", +"gXw c #c49079", +"eZe c #c4907a", +"dBx c #c49269", +"eUm c #c4927e", +"g9K c #c4937b", +"iu9 c #c4996c", +"dju c #c4a68b", +"frA c #c4a973", +"cWZ c #c4aa7f", +"asj c #c4b175", +"ab6 c #c4b577", +"cjP c #c4bc89", +"b3a c #c4c490", +"cr7 c #c4c892", +"e#s c #c5814b", +"don c #c58255", +"fat c #c58365", +"hHL c #c5844d", +"g9F c #c58c75", +"bKj c #c58d5c", +"gXB c #c58e75", +"g5D c #c58f78", +"e.8 c #c59178", +"g1C c #c59179", +"gHV c #c59263", +"hfn c #c5927c", +"hiI c #c5947d", +"gIj c #c59689", +"e.2 c #c5987f", +"fai c #c59f7c", +"h9F c #c5a084", +"frB c #c5ac77", +"akp c #c5af69", +"aEF c #c5b17c", +"#97 c #c5c396", +"cr9 c #c5c893", +"b70 c #c5d0ba", +"fre c #c6804b", +"hUO c #c68752", +"bwy c #c68754", +"coc c #c6885b", +"g5G c #c68c76", +"gPL c #c68e76", +"eBl c #c68f75", +"hbu c #c68f7c", +"hff c #c68f7d", +"eZN c #c69057", +"hbt c #c6907d", +"hiN c #c6917e", +"g1B c #c69379", +"bsZ c #c69463", +"hiJ c #c6947f", +"hpU c #c69482", +"d6n c #c6967d", +"eUC c #c6997e", +"gIi c #c6998c", +"e3I c #c69f77", +"go1 c #c6a178", +"b3Z c #c6a980", +"cW0 c #c6aa76", +"fnB c #c6b07c", +"asl c #c6b37d", +"aso c #c6b773", +"cEZ c #c6b986", +"#54 c #c6be8f", +"caR c #c6c792", +"cnV c #c6c893", +"cnU c #c6c894", +"b76 c #c6c994", +"bsy c #c7824d", +"c1X c #c78956", +"cJx c #c78a61", +"g5C c #c78f79", +"cXp c #c79169", +"hiQ c #c79380", +"bkn c #c79460", +"hiM c #c79480", +"de4 c #c79570", +"f9E c #c7a27b", +"ik2 c #c7a581", +"h0J c #c7a791", +"fnA c #c7ae78", +"#52 c #c7b07b", +"cAy c #c7c894", +"caL c #c7c994", +"cfm c #c7ca94", +"cjG c #c7ca95", +"fvn c #c87540", +"cAT c #c88450", +"bop c #c88651", +"eGm c #c88d53", +"gPM c #c8907a", +"gTI c #c8917a", +"g9C c #c8927d", +"e## c #c8967d", +"hpW c #c89685", +"csf c #c8986b", +"gLX c #c89985", +"d6h c #c89c82", +"gIh c #c89c90", +"ePH c #c89d81", +"dRR c #c8a481", +"aEv c #c8a677", +"fGG c #c8aa71", +"caM c #c8c993", +"cfn c #c8c994", +"cfs c #c8c995", +"caQ c #c8ca96", +"eiU c #c9713e", +"eiN c #c97345", +"e#i c #c97443", +"dWW c #c98453", +"bj0 c #c98956", +"cW9 c #c98c5a", +"c1Y c #c98f5f", +"dex c #c9915a", +"g5A c #c9927b", +"gTJ c #c9927d", +"hfe c #c99482", +"hiO c #c99582", +"bTY c #c99663", +"cfu c #c99769", +"gLW c #c99781", +"gIn c #c99787", +"hpV c #c99885", +"hmt c #c99985", +"hmw c #c99986", +"ixR c #c99a6f", +"int c #c9ac88", +"ffl c #c9af74", +"#6b c #c9bf7b", +"cwy c #c9bf8c", +"b78 c #c9c894", +"b77 c #c9c993", +"b79 c #c9c996", +"cnS c #c9ca95", +"cjE c #c9cb97", +"esp c #ca6f3e", +"ed9 c #ca7341", +"e#h c #ca7d4b", +"d6x c #ca8153", +"bsJ c #ca824d", +"d6t c #ca8655", +"fi3 c #ca8e5c", +"eUg c #ca9362", +"gTK c #ca957e", +"g9B c #ca9884", +"ePB c #ca997f", +"eUf c #ca9a67", +"hmx c #ca9a87", +"g1N c #ca9b84", +"fuZ c #caa47f", +"eLn c #caa86f", +"eQ. c #caa972", +"ikY c #caaa89", +"ip3 c #caab84", +"dwM c #cab483", +"aAm c #cab873", +"#YQ c #cab886", +"aEJ c #cab97c", +"aoq c #caba77", +"a.c c #cabf81", +"cfl c #cacb98", +"cfN c #cb7a42", +"d6y c #cb7b49", +"boq c #cb8a56", +"bw0 c #cb8c56", +"g1H c #cb937c", +"bFP c #cb9461", +"g5B c #cb947f", +"g9E c #cb9683", +"g9t c #cb987f", +"gPP c #cb9a84", +"bP. c #cb9b6d", +"hiH c #cb9d85", +"aNz c #cb9f6b", +"edP c #cb9f83", +"gLR c #cb9f87", +"bfN c #cba475", +"e8b c #cba782", +"fiE c #cba884", +"aNm c #cbb67a", +"awp c #cbbe7b", +"cjI c #cbc895", +"cnT c #cbca95", +"eBA c #cc733f", +"f3N c #cc8863", +"hXU c #cc8e5b", +"hxj c #cc936a", +"h9R c #cc945e", +"gXy c #cc957e", +"a4l c #cc9664", +"gAP c #cc9986", +"gAO c #cc9987", +"gIo c #cc9a8a", +"g9A c #cc9b86", +"hiK c #cc9c89", +"hpX c #cc9c8b", +"aJo c #cc9d67", +"hmu c #cc9d88", +"hiL c #cc9d8b", +"gIk c #cca093", +"d02 c #ccaf8d", +"d#q c #ccb183", +"e4m c #cd7641", +"frd c #cd8e59", +"cJR c #cd8e5d", +"g9w c #cd9985", +"g1E c #cd9c86", +"gTy c #cda181", +"hfm c #cda189", +"faU c #cda284", +"fmO c #cda882", +"f9F c #cda981", +"hRz c #cdb099", +"f7q c #cdb27b", +"frC c #cdb47c", +"aEH c #cdba79", +"aNk c #cdbb82", +"asq c #cdc288", +"cfo c #cdcb97", +"cwr c #cdcb98", +"eZI c #ce7943", +"fzf c #ce7c45", +"bPi c #ce8c57", +"f3O c #ce8e6c", +"cSl c #ce9361", +"bYn c #ce9a6e", +"gTH c #ce9c85", +"gEw c #ce9c8b", +"hiP c #ce9d8b", +"bFa c #ce9e74", +"gEq c #ce9e8f", +"bk. c #ce9f6f", +"gs3 c #ce9f8e", +"hbw c #cea08b", +"aJr c #cea26b", +"fet c #ceab86", +"cJU c #ceac8c", +"cFA c #cead8c", +"gaR c #ceae87", +"fzz c #ceb37a", +"fvG c #ceb47c", +"aVW c #ceb87a", +"aAn c #cebb7a", +"cjO c #cecc99", +"enO c #cf7a44", +"g.# c #cf814e", +"ed8 c #cf8350", +"do# c #cf8b61", +"dwX c #cf8d5c", +"bjY c #cf935b", +"hAV c #cf9969", +"cAJ c #cf9e70", +"eBm c #cf9e83", +"gAB c #cf9e8e", +"gTL c #cf9f89", +"gXE c #cfa089", +"er5 c #cfa185", +"hp1 c #cfa18c", +"hfj c #cfa18e", +"gLN c #cfa27d", +"eiu c #cfa387", +"hbB c #cfa48c", +"gLQ c #cfa68e", +"ip6 c #cfa97b", +"erK c #cfaa76", +"idh c #cfaa88", +"dNB c #cfb080", +"c6v c #cfb08d", +"ins c #cfb18e", +"fD. c #cfb378", +"gbz c #cfb781", +"cfk c #cfd1a2", +"caE c #cfd5bd", +"eed c #d07844", +"cE9 c #d0905c", +"bBl c #d09562", +"gAQ c #d09b83", +"g1G c #d09e87", +"gXz c #d09f88", +"eKK c #d0a085", +"hmy c #d0a290", +"aJp c #d0a36b", +"aVS c #d0a374", +"d6l c #d0a68a", +"glo c #d0a985", +"gEn c #d0a99d", +"ip4 c #d0ae89", +"cOc c #d0af91", +"cBk c #d0b08f", +"eQ# c #d0b17a", +"faw c #d0b38e", +"e4D c #d0b475", +"bZb c #d0b68f", +"fjv c #d0b981", +"aNn c #d0bf85", +"cr5 c #d0c997", +"fzg c #d18149", +"bjZ c #d1945f", +"e4q c #d1995e", +"cX. c #d1996a", +"bom c #d19b67", +"aIQ c #d19f6f", +"a0# c #d1a06f", +"bU# c #d1a16a", +"gEr c #d1a191", +"hbv c #d1a28f", +"aWl c #d1a468", +"e8j c #d1a481", +"eit c #d1a78b", +"htU c #d1a78e", +"hms c #d1a894", +"caT c #d1a981", +"bO6 c #d1aa85", +"em6 c #d1ab72", +"cJj c #d1ac82", +"fKz c #d1b57c", +"d#A c #d1c3aa", +"esr c #d27d46", +"hRL c #d28e51", +"fvk c #d28f55", +"hEn c #d2965f", +"bFN c #d29867", +"dxc c #d2986f", +"bPe c #d29b64", +"boE c #d2a274", +"ewF c #d2a384", +"esa c #d2a388", +"gpi c #d2a48e", +"gs4 c #d2a592", +"hp0 c #d2a692", +"g1M c #d2a892", +"hq. c #d2a990", +"isy c #d2aa7a", +"aIX c #d2ad81", +"f6I c #d2ae85", +"gAh c #d2b28f", +"#YP c #d2bf8b", +"cfj c #d2d0a3", +"eZJ c #d37d48", +"ew2 c #d37e48", +"dsF c #d38050", +"ff. c #d39359", +"dSn c #d3935f", +"cNP c #d39966", +"cNO c #d39c6a", +"cSk c #d39d6b", +"gwV c #d3a490", +"gEv c #d3a494", +"gPN c #d3a58f", +"g1F c #d3a68f", +"hbl c #d3a690", +"dWu c #d3a98b", +"gPD c #d3aa8c", +"gXu c #d3aa92", +"fUx c #d3b983", +"bfp c #d3bc98", +"#2n c #d3bf8a", +"a.b c #d3c589", +"cJa c #d3ca9a", +"cEO c #d3cc9a", +"eiV c #d47f48", +"hK3 c #d49053", +"deG c #d4935f", +"dsD c #d49969", +"bFx c #d49c6b", +"cJt c #d49d6a", +"cbv c #d4a170", +"hfd c #d4a695", +"hf# c #d4a998", +"e.1 c #d4ad92", +"gAo c #d4ad9d", +"cn3 c #d4b089", +"cJK c #d4b18f", +"inw c #d4b78f", +"hHv c #d4baa8", +"aRF c #d4c086", +"akt c #d4c592", +"cJ# c #d4ca9a", +"cEP c #d4cc9b", +"cfp c #d4ce9d", +"ePR c #d57e49", +"d6z c #d5834c", +"dot c #d58854", +"dos c #d58e5d", +"cW8 c #d5a06e", +"feP c #d5a170", +"bbq c #d5a268", +"bPq c #d5a26a", +"g9x c #d5a694", +"aJq c #d5a970", +"hpY c #d5ac9a", +"gEo c #d5aea3", +"d#x c #d5b280", +"gln c #d5ba93", +"dsw c #d5c190", +"eBB c #d67f49", +"eiO c #d6814b", +"fzd c #d68e54", +"cE8 c #d69d6a", +"er6 c #d6ab8e", +"g9v c #d6ab96", +"fG# c #d6b187", +"hmr c #d6b29d", +"#2o c #d6c896", +"cNs c #d6cc9b", +"cs. c #d6cf9d", +"csd c #d6cf9e", +"deA c #d6d0bb", +"c1P c #d6d5c1", +"eUS c #d7834b", +"e#j c #d7854e", +"bYE c #d79b69", +"e8T c #d79c60", +"d#H c #d79c6a", +"cAS c #d79d69", +"cop c #d7a26e", +"c1W c #d7a271", +"gw1 c #d7a37a", +"f3M c #d7a37d", +"gAA c #d7a899", +"hbp c #d7aa99", +"bTX c #d7ab7b", +"g5F c #d7ab95", +"gAv c #d7ab9c", +"gPO c #d7ac96", +"gTF c #d7ad96", +"hfb c #d7ae9c", +"gEp c #d7afa2", +"g5E c #d7b09a", +"d57 c #d7b59d", +"cw9 c #d7b997", +"cNt c #d7cd9d", +"eee c #d8854e", +"bBm c #d89e69", +"cSE c #d8a176", +"bTw c #d8ac81", +"hbs c #d8af9d", +"gTG c #d8b099", +"hmz c #d8b09d", +"fm2 c #d8b490", +"ip5 c #d8b88c", +"cNG c #d8cbaf", +"caG c #d8d3a8", +"ess c #d9844d", +"eea c #d98751", +"ee# c #d98951", +"bT5 c #d99b67", +"dWX c #d99d6a", +"d6u c #d9a06c", +"aEq c #d9ae7f", +"gpj c #d9ae95", +"d6m c #d9b193", +"hbA c #d9b59c", +"bUj c #d9c29a", +"enL c #da8450", +"eK5 c #da864f", +"enI c #da8751", +"fa1 c #da9a5e", +"bwZ c #da9b63", +"dBD c #daa070", +"bKB c #daa46d", +"iin c #daa570", +"ed1 c #daae90", +"gAr c #dab2a7", +"isz c #dab680", +"bAF c #dab68e", +"ePd c #dab783", +"e3J c #dab78a", +"f3A c #dab78c", +"b8a c #dabf9e", +"fGH c #dac187", +"aJ. c #daca8e", +"ew3 c #db864f", +"e#n c #db8851", +"bsH c #db9b64", +"d6v c #dba370", +"bFO c #dba470", +"bw4 c #dba776", +"frc c #dbaa7a", +"ewL c #dbae90", +"gIm c #dbb2a6", +"d06 c #dbb394", +"g9u c #dbb49e", +"hpZ c #dbb6a4", +"fqQ c #dbbe9b", +"cJ. c #dbcf9f", +"fCP c #dc8e54", +"fGp c #dc9056", +"bBj c #dc9d69", +"bwY c #dc9f65", +"dN8 c #dca16d", +"gw2 c #dca576", +"bwX c #dca66e", +"ifV c #dca770", +"bfy c #dca772", +"baZ c #dca873", +"bY5 c #dca972", +"iaK c #dcac77", +"e.6 c #dcb595", +"gs8 c #dcb599", +"ghQ c #dcb681", +"gAq c #dcb7ac", +"ghN c #dcc098", +"eQa c #dcc28d", +"hXF c #dcc2a6", +"g.m c #dcc792", +"cNr c #dcd0a0", +"c6w c #dcdac5", +"eBC c #dd874f", +"ePS c #dd8852", +"fCQ c #dd8c51", +"fCS c #dd8f54", +"eiQ c #dd9058", +"fKf c #dd975d", +"bsI c #dd9962", +"bPj c #dda06c", +"hAU c #dda36e", +"cXr c #dda374", +"bU. c #dda670", +"d1C c #dda672", +"eZb c #dda775", +"ikR c #ddad79", +"iaL c #ddb07c", +"glz c #ddb198", +"boN c #ddb581", +"gpk c #ddb599", +"g9z c #ddb6a3", +"g9y c #ddb6a4", +"ghR c #ddb781", +"hbm c #ddb9a5", +"aNc c #ddba8f", +"gef c #ddbc8d", +"f6J c #ddbe93", +"f4k c #ddc893", +"cjR c #ddc8a7", +"csg c #ddd7bf", +"eec c #de8752", +"eZK c #de8952", +"eK6 c #de8953", +"eef c #de8b53", +"eUU c #de8c52", +"enK c #de8f5a", +"fNZ c #de9056", +"eiP c #de9058", +"c60 c #de9b67", +"ew7 c #de9e60", +"fvj c #dea66e", +"idq c #dea973", +"bfz c #deaa75", +"bk# c #deaf80", +"b8o c #deaf81", +"gwI c #deb1a1", +"glA c #deb296", +"ewG c #deb394", +"gwU c #deb4a3", +"glv c #deb595", +"hfc c #deb8a6", +"gAs c #deb9ae", +"fq3 c #debb96", +"csL c #dec29d", +"e8a c #dec29f", +"fes c #dec2a1", +"c1G c #dec698", +"dJq c #decb93", +"cfv c #ded9c0", +"cSd c #dedbc4", +"eK7 c #df8950", +"eGh c #df8951", +"fGq c #df8e54", +"fXy c #dfa06a", +"dSo c #dfa775", +"bsu c #dfa975", +"idr c #dfae79", +"gwW c #dfb49f", +"gEx c #dfb4a6", +"go9 c #dfb6a4", +"gpd c #dfb6a6", +"f0n c #dfbd91", +"fQ0 c #dfbd92", +"gsK c #dfbda2", +"htV c #dfbea4", +"ged c #dfc49b", +"ik1 c #dfc8a2", +"fXQ c #dfca96", +"cNu c #dfd2a4", +"cW3 c #dfdfc9", +"fRn c #e09056", +"enJ c #e0945e", +"eUV c #e0965a", +"bwK c #e0a169", +"bFG c #e0a971", +"bFy c #e0ad7f", +"bfA c #e0af7a", +"cJs c #e0af7c", +"cA3 c #e0b086", +"iAD c #e0b17f", +"cA2 c #e0b38a", +"gIp c #e0b5a7", +"boM c #e0b783", +"gp. c #e0b7a5", +"gpc c #e0b7a7", +"fXc c #e0be90", +"gAp c #e0beb2", +"fTU c #e0bf94", +"gXF c #e0bfaa", +"baQ c #e0c29a", +"bPD c #e0caa1", +"cwx c #e0d3a3", +"cAK c #e0dac0", +"caF c #e0dbb8", +"cJk c #e0dcc3", +"csh c #e0e0c7", +"cAL c #e0e0c8", +"caU c #e0e0c9", +"fN0 c #e18f54", +"d6E c #e18f56", +"fKh c #e19055", +"fUe c #e1945a", +"fXz c #e1985f", +"fCO c #e19c61", +"fUd c #e19e65", +"bw5 c #e1a671", +"bKv c #e1a975", +"dJY c #e1aa76", +"dFV c #e1aa77", +"cFa c #e1ad81", +"bKr c #e1b381", +"bfB c #e1b481", +"a4M c #e1b575", +"gAN c #e1b5a5", +"gAC c #e1b6a8", +"eY8 c #e1b883", +"aW# c #e1b887", +"glB c #e1b89b", +"gAt c #e1bcb1", +"fTV c #e1bf92", +"fm6 c #e1bf98", +"bOM c #e1c39c", +"c6c c #e1c993", +"bwo c #e1c9a5", +"dE8 c #e1cba1", +"eeb c #e28f59", +"e#o c #e29258", +"ePW c #e2975b", +"fRm c #e29c63", +"hHK c #e29f63", +"doN c #e29f65", +"dte c #e2a269", +"dk# c #e2a26a", +"cfD c #e2a36c", +"fzc c #e2a46b", +"ca2 c #e2a46c", +"dfb c #e2a66e", +"eZa c #e2a872", +"bKA c #e2a874", +"daa c #e2a972", +"bKu c #e2a975", +"djz c #e2ad7d", +"cNN c #e2b17f", +"ifU c #e2b27f", +"b3K c #e2b485", +"gED c #e2b5a6", +"a8G c #e2b788", +"frb c #e2b88a", +"gwH c #e2b8a9", +"gAG c #e2b9ab", +"e.7 c #e2bc9c", +"gs5 c #e2bca9", +"ip7 c #e2c08f", +"djx c #e2c8a3", +"fq4 c #e2c8a4", +"c6d c #e2ca95", +"c1v c #e2cb97", +"c1u c #e2cb98", +"cwC c #e2dfc5", +"eiR c #e3915b", +"dOh c #e39357", +"dxv c #e39b60", +"d6I c #e39e61", +"dtf c #e39e63", +"doM c #e3a56d", +"fNY c #e3a66e", +"cjY c #e3a670", +"bPk c #e3aa77", +"bPl c #e3ab77", +"ckg c #e3ad78", +"dJZ c #e3ad7a", +"dN9 c #e3ae7c", +"dWY c #e3b181", +"boT c #e3b27e", +"cSj c #e3b382", +"djy c #e3ba8c", +"glD c #e3bb9c", +"gEs c #e3bbae", +"gph c #e3bca8", +"h9Q c #e3bd8f", +"hbq c #e3c2af", +"fJY c #e3c396", +"gs9 c #e3c39f", +"eAW c #e3c696", +"a8v c #e3c79f", +"h6L c #e3c8a9", +"c1w c #e3cc99", +"eV. c #e3d09a", +"gbA c #e3d19d", +"b3d c #e3d3b2", +"cE3 c #e3dfc3", +"cfw c #e3dfc4", +"fUf c #e4965a", +"fXA c #e4995e", +"fN5 c #e49a5d", +"hUN c #e4a163", +"dfc c #e4a369", +"eL# c #e4a466", +"f0L c #e4a76e", +"dk. c #e4aa74", +"dFT c #e4ae7b", +"gw3 c #e4ae7d", +"bfW c #e4b076", +"a8C c #e4b17b", +"deF c #e4b180", +"bTL c #e4b384", +"a85 c #e4b97c", +"glu c #e4bc99", +"glC c #e4bc9d", +"gEB c #e4bcaf", +"djZ c #e4bd9a", +"gwQ c #e4bdaf", +"f0y c #e4be99", +"gs2 c #e4bfb0", +"f0o c #e4c395", +"aVG c #e4c8a4", +"a4# c #e4caa5", +"fD# c #e4cb8b", +"dSz c #e59357", +"fRo c #e5975a", +"enS c #e5a263", +"dka c #e5a268", +"c61 c #e5a46f", +"hAT c #e5a971", +"cw4 c #e5a972", +"bY4 c #e5a975", +"bFH c #e5ac72", +"baY c #e5ac75", +"cfL c #e5ac79", +"cn9 c #e5ad78", +"coo c #e5ae79", +"bjV c #e5af79", +"bKs c #e5b07b", +"bA4 c #e5b080", +"cW7 c #e5b583", +"c6B c #e5b586", +"bwW c #e5b682", +"cSC c #e5b88f", +"cA4 c #e5b891", +"cwP c #e5b995", +"aNA c #e5bb84", +"aNE c #e5bd81", +"ewM c #e5be9e", +"glE c #e5bf9f", +"gpl c #e5c4a4", +"cov c #e5caa3", +"djc c #e5cd9c", +"c6f c #e5ce9b", +"d#c c #e5ce9c", +"d#e c #e5ce9d", +"deg c #e5cf9e", +"dE7 c #e5cfa7", +"fiS c #e5cfab", +"cWI c #e5d0a1", +"cR0 c #e5d5a8", +"d6D c #e6945c", +"e#p c #e6955b", +"fKi c #e6975a", +"dW9 c #e6985b", +"doO c #e69e62", +"djT c #e6a470", +"hEm c #e6a66c", +"fGo c #e6a86f", +"bPm c #e6a974", +"bKw c #e6a975", +"b8I c #e6ab78", +"bKt c #e6ae78", +"eZ# c #e6af77", +"cso c #e6b380", +"d1D c #e6b787", +"bYV c #e6bb8a", +"aNF c #e6bc80", +"bFz c #e6bc90", +"f0x c #e6bd95", +"dn9 c #e6be92", +"gEA c #e6beb1", +"gwP c #e6c0b2", +"fQ1 c #e6c799", +"dem c #e6cc9e", +"djb c #e6ce9f", +"d#d c #e6cf9e", +"dee c #e6cf9f", +"d#f c #e6d0a0", +"deh c #e6d0a1", +"c1x c #e6d19f", +"cWJ c #e6d1a2", +"dE6 c #e6d2aa", +"dI9 c #e6d3ad", +"caV c #e6debf", +"cn5 c #e6dec0", +"d1N c #e7975a", +"fGr c #e7995c", +"dxw c #e79c5e", +"eL. c #e79d5f", +"dtg c #e79d60", +"bT9 c #e7a873", +"bFM c #e7a974", +"bPn c #e7a975", +"bKz c #e7aa74", +"b3l c #e7ac73", +"bT6 c #e7ac78", +"dBE c #e7b585", +"a8D c #e7b681", +"c7# c #e7b785", +"eZ. c #e7b883", +"cNZ c #e7b88b", +"cNY c #e7b88c", +"djv c #e7ba8e", +"cA5 c #e7bc97", +"aRZ c #e7bf83", +"gAF c #e7bfb2", +"aND c #e7c085", +"aNC c #e7c086", +"gwZ c #e7c09b", +"ghV c #e7c192", +"cA1 c #e7c1a2", +"deE c #e7c498", +"fiZ c #e7c699", +"iaz c #e7c9a5", +"dj# c #e7cf9f", +"dja c #e7cfa0", +"ded c #e7cfa1", +"dnO c #e7d0a0", +"fzA c #e7d194", +"f05 c #e7d4a1", +"cRX c #e7d4a6", +"bJX c #e7d5b1", +"f03 c #e7d7a4", +"bYo c #e7ddbe", +"d6C c #e89960", +"dSA c #e89c5e", +"fRs c #e8a063", +"bY3 c #e8ab76", +"bT7 c #e8ae7b", +"bwO c #e8af7b", +"b8h c #e8b079", +"cf2 c #e8b17d", +"bA3 c #e8b17e", +"f0K c #e8b27d", +"cwF c #e8b988", +"dBF c #e8b98b", +"cwO c #e8bc9b", +"aR0 c #e8be7f", +"aNG c #e8bf81", +"bbp c #e8bf88", +"ba1 c #e8bf8f", +"ghX c #e8c194", +"cA6 c #e8c199", +"bsP c #e8c49a", +"d#F c #e8c69c", +"c6A c #e8c89d", +"fJX c #e8cba1", +"hbr c #e8cbb9", +"aEu c #e8cda3", +"dek c #e8d0a3", +"aZY c #e8d0ae", +"dje c #e8d2a5", +"c6g c #e8d3a3", +"dE5 c #e8d3a9", +"he3 c #e8d4bc", +"cWK c #e8d5a6", +"cNq c #e8d5a8", +"deD c #e8d5ae", +"cww c #e8d7aa", +"baR c #e8debe", +"b8b c #e8e1c4", +"dBQ c #e99c5d", +"d6F c #e99c5f", +"dX. c #e99d5f", +"dKa c #e99f60", +"eei c #e9a464", +"f0M c #e9a569", +"dsE c #e9a671", +"bKx c #e9ab75", +"bT8 c #e9ad79", +"f33 c #e9ae77", +"bBe c #e9af71", +"bY2 c #e9af7b", +"bBd c #e9b277", +"ckf c #e9b380", +"fUc c #e9b480", +"bkm c #e9b882", +"dFW c #e9bb8b", +"cAQ c #e9be8d", +"cwQ c #e9be97", +"dW3 c #e9bf92", +"aNB c #e9c088", +"cE6 c #e9c08f", +"bsM c #e9c092", +"eY9 c #e9c18d", +"cJr c #e9c192", +"aWk c #e9c283", +"aRY c #e9c388", +"bbc c #e9c394", +"gAw c #e9c3b7", +"aWj c #e9c487", +"cSi c #e9c495", +"cW6 c #e9c597", +"dNz c #e9cd9d", +"fas c #e9cea6", +"fiF c #e9d1a8", +"dei c #e9d2a5", +"dE9 c #e9d2aa", +"fGI c #e9d393", +"e.E c #e9d3a5", +"dnQ c #e9d3a7", +"d#g c #e9d4a5", +"d#E c #e9d4ac", +"cR1 c #e9d7ab", +"cNy c #e9d8ab", +"hKN c #e9d9c5", +"bFb c #e9ddbc", +"dF7 c #ea9c5c", +"fUi c #ea9c5d", +"dF8 c #ea9d5d", +"f38 c #ea9e61", +"dBR c #ea9f5e", +"d1O c #eaa263", +"f7d c #eaa367", +"b3Q c #eaaf7b", +"b3P c #eab07c", +"bY1 c #eab17e", +"cbu c #eab27f", +"csF c #eab480", +"fRl c #eab580", +"ca1 c #eab783", +"aNH c #eac07f", +"aWi c #eac58a", +"aRX c #eac58b", +"cA8 c #eac59b", +"go8 c #eac5b3", +"gpe c #eac6b6", +"bKk c #eac79d", +"glF c #eac9a7", +"dsf c #ead3a2", +"d#k c #ead3a5", +"d#l c #ead3a6", +"dej c #ead4a6", +"djf c #ead4a7", +"hbh c #ead4b7", +"iis c #ead5b0", +"cRY c #ead6a9", +"f4l c #ead8a6", +"dI7 c #ead8b1", +"g.n c #ead9a7", +"f7r c #eadba8", +"bjP c #eadcba", +"csi c #eaddbb", +"a8w c #eaddbc", +"bfq c #eadebd", +"bwp c #eadfbd", +"bAG c #eae0bf", +"bTx c #eae0c0", +"gbm c #eb995e", +"fKl c #eb9b5c", +"fKj c #eba062", +"fUk c #eba465", +"fXF c #eba466", +"f39 c #eba567", +"f0R c #eba668", +"bBf c #ebad6f", +"b8L c #ebb381", +"ck. c #ebb483", +"bA5 c #ebb685", +"bBc c #ebb77f", +"cJD c #ebbf98", +"bka c #ebc294", +"ba0 c #ebc393", +"iim c #ebc394", +"gwN c #ebc4b6", +"aRT c #ebc68f", +"ghY c #ebc69b", +"aRU c #ebc78f", +"boO c #ebc797", +"glw c #ebc7a6", +"aRV c #ebc88f", +"gs7 c #ebcab0", +"aM7 c #ebcba6", +"b3w c #ebcda9", +"g5u c #ebd2b7", +"dsg c #ebd4a5", +"djg c #ebd4a6", +"d#j c #ebd4a7", +"faj c #ebd4ac", +"d#i c #ebd5a8", +"dnR c #ebd5a9", +"d#h c #ebd6a9", +"cWP c #ebd6aa", +"fbd c #ebd79e", +"frD c #ebd89f", +"cWL c #ebd8ab", +"dNA c #ebd9a8", +"bod c #ebd9b5", +"fRF c #ebdaa5", +"f7t c #ebdaa8", +"cAM c #ebdfbb", +"fN2 c #ec9d5f", +"fRq c #ec9f5f", +"enR c #eca061", +"f0P c #eca062", +"fRp c #eca162", +"f0Q c #eca265", +"eBG c #eca767", +"d1P c #eca768", +"ePX c #eca869", +"f7. c #eca96f", +"bFL c #ecad77", +"bBi c #ecaf78", +"hAS c #ecb27b", +"b3O c #ecb581", +"cbt c #ecb583", +"bFi c #ecb781", +"bwP c #ecba88", +"a4g c #ecbb87", +"bsY c #ecbc8a", +"a4h c #ecbf8b", +"cfC c #ecbf8e", +"df# c #ecc18f", +"dSp c #ecc295", +"c2r c #ecc494", +"cjX c #ecc694", +"aWh c #ecc891", +"boL c #ecc899", +"iaJ c #ecc89b", +"aWg c #ecc991", +"csn c #ecca9d", +"cwE c #eccb9e", +"cAP c #eccc9f", +"f3P c #eccfb4", +"cJq c #ecd0a4", +"cNL c #ecd2a6", +"cSh c #ecd4a9", +"g1w c #ecd4b9", +"dww c #ecd5a6", +"cWQ c #ecd6a9", +"c1B c #ecd6aa", +"dwD c #ecd6ab", +"dwE c #ecd6ac", +"c6z c #ecd6ae", +"cWO c #ecd7ab", +"dAY c #ecd7ad", +"cW5 c #ecd7af", +"c1T c #ecd8b0", +"c1y c #ecd9aa", +"cWN c #ecd9ae", +"fUy c #ecdaa6", +"cR2 c #ecdaae", +"cWM c #ecdaaf", +"d#D c #ecdeba", +"bON c #ece0be", +"fRr c #ed9d5f", +"fN1 c #eda163", +"dxx c #eda665", +"e4p c #eda869", +"eUW c #eda969", +"eZM c #eda96a", +"f34 c #edac70", +"bA2 c #edaf79", +"fKe c #edb67e", +"bst c #edb680", +"cbr c #edb888", +"con c #edbb89", +"b8H c #edbb8b", +"a8B c #edbe8b", +"bww c #edc18f", +"dJ0 c #edc294", +"da. c #edc493", +"fvi c #edc596", +"d1F c #edc599", +"cwR c #edc59e", +"aRR c #edc694", +"c7. c #edc696", +"gAJ c #edc7ba", +"cn8 c #edc899", +"a4k c #edc99d", +"glp c #edcab8", +"a0A c #edcb94", +"aWf c #edcb95", +"gpm c #edd2ae", +"feE c #edd3aa", +"isu c #edd3ac", +"dsh c #edd7a9", +"dsj c #edd7ab", +"c1A c #edd8ac", +"dJ. c #edd8b2", +"c6h c #edd9ab", +"cR3 c #edd9ac", +"dwC c #edd9ad", +"dsk c #edd9ae", +"dFb c #edd9af", +"d5H c #edd9b1", +"ikX c #edd9b3", +"dnT c #eddaaf", +"dnS c #eddab0", +"inv c #eddab4", +"c6y c #eddcb5", +"f4n c #eddeab", +"bsn c #eddeba", +"b3e c #ede0bd", +"g.. c #eea064", +"f7c c #eea164", +"fUj c #eea464", +"fXB c #eea667", +"eGl c #eea767", +"f96 c #eea76c", +"hEl c #eeae74", +"hHJ c #eeb075", +"fCN c #eeb57d", +"bwL c #eeb580", +"bwN c #eeb884", +"cfZ c #eebd8d", +"com c #eebe8e", +"cw1 c #eec091", +"b3k c #eec28f", +"boS c #eec493", +"bfV c #eec895", +"boF c #eec89a", +"bok c #eec99a", +"aWe c #eecb95", +"cb# c #eecba0", +"cA7 c #eecba1", +"gpb c #eecbba", +"a0z c #eecc95", +"a84 c #eecc98", +"ghZ c #eecca4", +"glt c #eecfab", +"aRv c #eed2a9", +"h3L c #eed4b2", +"g9q c #eed6b8", +"dwv c #eed8aa", +"dAU c #eed8ad", +"dsi c #eed9ad", +"bTy c #eedab3", +"dAZ c #eedbb1", +"dFc c #eedbb3", +"c1z c #eedcaf", +"dsl c #eedcb2", +"e.o c #eedcb4", +"boe c #eeddb7", +"dNi c #eeddb9", +"hiC c #eedfcb", +"fKk c #efa263", +"fUg c #efa566", +"fXE c #efa767", +"gbi c #efa86d", +"bBg c #efb175", +"bBh c #efb278", +"f95 c #efb47d", +"gbh c #efb67d", +"bwM c #efb885", +"f69 c #efb983", +"hAR c #efbb87", +"bA6 c #efbd8d", +"bjU c #efbf8b", +"bA7 c #efc192", +"bKp c #efc28e", +"cBc c #efc294", +"bFE c #efc391", +"bOU c #efc596", +"dO. c #efc79a", +"cJE c #efc8a2", +"cwS c #efc8a3", +"baX c #efca9b", +"idp c #efcb9e", +"gEu c #efcbbf", +"gwO c #efccbf", +"aWd c #efcd99", +"ca0 c #efcea0", +"aZ6 c #efcfa1", +"b3j c #efd0a4", +"gls c #efd3b3", +"bss c #efd4a9", +"cwD c #efd5a9", +"aEs c #efd5ae", +"dAT c #efd9ae", +"bYt c #efd9b0", +"gXq c #efdabc", +"dwB c #efdbb0", +"dAX c #efdbb2", +"cfx c #efdbb3", +"bOO c #efdbb4", +"dWf c #efdbb5", +"a4a c #efdbb7", +"dsm c #efdcb2", +"b8c c #efdcb3", +"bjT c #efdcb4", +"d0K c #efdcb5", +"e86 c #efdda4", +"fnD c #efdda5", +"c1S c #efddb4", +"d0T c #efddb6", +"dWg c #efddb8", +"boj c #efdeb6", +"fXS c #efdfac", +"bFe c #efdfb8", +"feH c #efdfb9", +"bJY c #efdfbb", +"f4m c #efe0ae", +"bJ2 c #efe0b8", +"bAK c #efe0ba", +"fN4 c #f0a566", +"fXD c #f0a768", +"eiY c #f0a867", +"esv c #f0a968", +"dOk c #f0aa6a", +"f0N c #f0aa6c", +"geH c #f0ab6e", +"cAW c #f0c496", +"aZ7 c #f0c593", +"a0q c #f0c998", +"bwV c #f0cc9e", +"csv c #f0cca4", +"c69 c #f0cda0", +"a0w c #f0ce9a", +"a0x c #f0ce9b", +"glx c #f0ceab", +"gwX c #f0ceb6", +"a4L c #f0cf9c", +"bFh c #f0d2a4", +"cfB c #f0d4a6", +"cAO c #f0d4a8", +"glG c #f0d4b0", +"bfw c #f0d5ab", +"cjW c #f0d6a9", +"cn7 c #f0d6aa", +"a4f c #f0d7ad", +"gt. c #f0d7af", +"cJp c #f0d8ad", +"dJo c #f0daac", +"bTz c #f0daaf", +"cn6 c #f0dab2", +"dNy c #f0dbaf", +"cNK c #f0dbb1", +"cjT c #f0dbb2", +"dRQ c #f0dbb3", +"cSg c #f0dcb4", +"caW c #f0ddb3", +"bJZ c #f0ddb4", +"boi c #f0ddb5", +"bOP c #f0ddb6", +"bjQ c #f0ddb7", +"d0S c #f0ddb8", +"gD8 c #f0ddbc", +"bFc c #f0deb5", +"aVL c #f0deb6", +"d0U c #f0deb9", +"bfu c #f0dfb7", +"bOQ c #f0dfb8", +"bYp c #f0dfb9", +"bAL c #f0e0b9", +"dNj c #f0e0bc", +"f37 c #f1a667", +"fUh c #f1a969", +"fa0 c #f1a96a", +"f32 c #f1bf8a", +"f0J c #f1c08d", +"fXw c #f1c290", +"hAQ c #f1c291", +"bKo c #f1c898", +"cfP c #f1c99e", +"cJC c #f1c9a1", +"bTW c #f1cb9e", +"cFi c #f1cbae", +"bkl c #f1cc9b", +"a8E c #f1cc9c", +"dWZ c #f1cca1", +"d1E c #f1cda2", +"a8F c #f1cea1", +"dxk c #f1cfa9", +"cFj c #f1cfb4", +"a0v c #f1d09e", +"dSt c #f1d0a5", +"glr c #f1d0b1", +"gwY c #f1d0b2", +"a0y c #f1d1a0", +"f3L c #f1d1aa", +"bYI c #f1d2aa", +"bJ4 c #f1d4a9", +"fiY c #f1d6ad", +"eFC c #f1d7a6", +"ifN c #f1d8b3", +"ckn c #f1d9af", +"gaT c #f1daad", +"caZ c #f1dab0", +"bwv c #f1dab2", +"aZZ c #f1dab4", +"dwy c #f1dbaf", +"dAS c #f1dbb1", +"csj c #f1dbb3", +"dJj c #f1dcaf", +"cE4 c #f1dcb4", +"cfy c #f1dcb5", +"aVN c #f1ddb4", +"bJ0 c #f1ddb5", +"hUC c #f1ddbd", +"csm c #f1deb5", +"a8A c #f1deb6", +"bAH c #f1deb7", +"bfr c #f1deb8", +"e.p c #f1deb9", +"fKB c #f1dfa3", +"cNJ c #f1dfb6", +"aVM c #f1dfb7", +"aZ5 c #f1dfb8", +"d0L c #f1dfba", +"dRI c #f1dfbd", +"aRr c #f1e0b8", +"bYs c #f1e0b9", +"bsq c #f1e1ba", +"gbB c #f1e4b3", +"f7# c #f2ad70", +"cbq c #f2c394", +"b8t c #f2c597", +"cJM c #f2c599", +"b8u c #f2c697", +"deP c #f2c79d", +"deQ c #f2c79e", +"col c #f2ca9e", +"bBb c #f2cb9d", +"cj8 c #f2cb9e", +"gwJ c #f2cdc0", +"cwT c #f2cea8", +"gsS c #f2cec1", +"aWb c #f2cf9e", +"aVO c #f2cfa1", +"gsY c #f2cfc2", +"gAz c #f2cfc3", +"bkj c #f2d0a0", +"bYR c #f2d0a5", +"cFh c #f2d0b5", +"gsX c #f2d0c3", +"bbn c #f2d19f", +"bbo c #f2d1a0", +"iAC c #f2d1a5", +"glq c #f2d1bd", +"gh0 c #f2d2ad", +"cFg c #f2d2b8", +"g1o c #f2d4a6", +"cwX c #f2d4ad", +"g1p c #f2d5a8", +"gXm c #f2d5a9", +"iu5 c #f2d6af", +"eKq c #f2d7a3", +"dAQ c #f2dcb1", +"cAN c #f2ddb4", +"bwq c #f2deb6", +"baS c #f2deb7", +"cJn c #f2dfb6", +"bof c #f2dfb7", +"a4d c #f2dfb8", +"d0J c #f2dfba", +"baV c #f2e0b7", +"bfv c #f2e0b8", +"bJ3 c #f2e0b9", +"bws c #f2e0ba", +"dji c #f2e1b4", +"dFd c #f2e1bc", +"dRv c #f2e1bd", +"go0 c #f2e2ba", +"dV6 c #f2e2be", +"d0H c #f2e2bf", +"eZ1 c #f2e3ab", +"f7u c #f2e5b3", +"gbj c #f3aa6b", +"fXC c #f3ac6c", +"geG c #f3bc82", +"f68 c #f3c490", +"fzb c #f3c592", +"d#Q c #f3c89f", +"d#P c #f3ca9f", +"cw0 c #f3cca2", +"aZ8 c #f3cd9e", +"cwN c #f3cfaa", +"bkk c #f3d0a1", +"bwQ c #f3d0a4", +"cAZ c #f3d0af", +"gAK c #f3d0c3", +"a0t c #f3d1a1", +"a0u c #f3d2a2", +"a83 c #f3d2a3", +"cXC c #f3d2a6", +"g5k c #f3d3a1", +"bbm c #f3d3a4", +"a82 c #f3d3a5", +"cFF c #f3d3a6", +"g5j c #f3d4a1", +"g9k c #f3d4a2", +"g9m c #f3d4a3", +"ixQ c #f3d4ab", +"cFk c #f3d4b7", +"dW2 c #f3d5ac", +"cA9 c #f3d5ae", +"g5m c #f3d6a8", +"gTp c #f3d8ab", +"gHL c #f3d8ad", +"gXl c #f3d8b1", +"gTq c #f3d9b1", +"h6X c #f3dbb4", +"feF c #f3dcb5", +"gTs c #f3dcb9", +"dwz c #f3deb4", +"a8x c #f3deb6", +"bJ1 c #f3deb7", +"fq5 c #f3deb9", +"dwA c #f3dfb6", +"bso c #f3dfb7", +"bjR c #f3dfb8", +"bAJ c #f3dfba", +"bfs c #f3e0b9", +"aVK c #f3e1bc", +"dRu c #f3e1bd", +"b3i c #f3e2bb", +"dV7 c #f3e2be", +"d5N c #f3e2c1", +"d0I c #f3e3bf", +"ffm c #f3e4ae", +"hml c #f3e6d5", +"f7s c #f3e8b7", +"dwK c #f3e8b9", +"f97 c #f4ae6f", +"f0O c #f4af6f", +"bPd c #f4cc9b", +"cfY c #f4cea2", +"csx c #f4cea8", +"a8S c #f4cfa0", +"ckc c #f4cfa3", +"aWa c #f4d0a0", +"cXn c #f4d0a9", +"bkc c #f4d1a5", +"ca8 c #f4d1a6", +"csw c #f4d1aa", +"gp# c #f4d1c1", +"a8W c #f4d2a4", +"a0s c #f4d2a5", +"doK c #f4d2a6", +"gAI c #f4d2c6", +"boR c #f4d3a3", +"bfU c #f4d3a4", +"a4E c #f4d3a5", +"a4C c #f4d3a6", +"cFf c #f4d3b3", +"gwB c #f4d3c5", +"a4F c #f4d4a5", +"a4H c #f4d4a6", +"a81 c #f4d4a7", +"bO7 c #f4d4aa", +"csu c #f4d4ab", +"hba c #f4d5a2", +"a4J c #f4d5a8", +"cJ0 c #f4d5aa", +"g1m c #f4d6a5", +"g5h c #f4d6a6", +"gXh c #f4d6a8", +"a4K c #f4d6a9", +"bwR c #f4d6ac", +"gXg c #f4d7a8", +"gh1 c #f4d7b4", +"hiy c #f4d8ac", +"bA9 c #f4d8af", +"hiw c #f4d9af", +"fq2 c #f4dab5", +"go2 c #f4dbc6", +"fGa c #f4dcb2", +"bAN c #f4dcb3", +"bFg c #f4ddb4", +"a4b c #f4ddb6", +"cg. c #f4deb4", +"baU c #f4dfb8", +"baT c #f4e0b9", +"dFa c #f4e0bb", +"bwu c #f4e1ba", +"dWe c #f4e1bf", +"bAM c #f4e2bb", +"f6H c #f4e2be", +"dV8 c #f4e2bf", +"d#4 c #f4e2c9", +"dRH c #f4e3c3", +"dRw c #f4e4c1", +"gTx c #f4e4c9", +"dA0 c #f4e5bf", +"fm1 c #f4e6be", +"hAI c #f4ead7", +"f35 c #f5b375", +"fUb c #f5c898", +"hAP c #f5cda2", +"d#O c #f5cfa4", +"a4A c #f5d0a0", +"bfP c #f5d1a5", +"gEC c #f5d1c5", +"a8U c #f5d2a6", +"a8T c #f5d3a6", +"cbe c #f5d3a9", +"gsT c #f5d3c6", +"a4D c #f5d4a7", +"a8V c #f5d4a8", +"a4I c #f5d5a8", +"bbl c #f5d5a9", +"boK c #f5d5aa", +"bA8 c #f5d5ab", +"cwU c #f5d5ae", +"g9l c #f5d6a4", +"bki c #f5d6a7", +"bfT c #f5d6a9", +"bbk c #f5d6ab", +"heY c #f5d7a7", +"boJ c #f5d7ad", +"cof c #f5d7ae", +"hbc c #f5d8a8", +"a4j c #f5d8ae", +"eUc c #f5d9a0", +"gXi c #f5d9aa", +"gXj c #f5d9ad", +"gHM c #f5dab0", +"gsO c #f5dace", +"gLH c #f5dbb0", +"gwA c #f5dbd0", +"gXn c #f5dcb6", +"cB# c #f5dcb7", +"gPv c #f5deb9", +"bwr c #f5dfba", +"fNC c #f5e0b8", +"a8y c #f5e0b9", +"a4c c #f5e0ba", +"bsp c #f5e1bc", +"bjS c #f5e2bb", +"dRA c #f5e3c0", +"d5P c #f5e4c3", +"f6W c #f5e4c7", +"fGJ c #f5e5ab", +"dJi c #f5e5bd", +"dNx c #f5e5be", +"d5O c #f5e5c5", +"aRq c #f5e6c4", +"edk c #f5e6c6", +"fjw c #f5e7b1", +"hpJ c #f5e7d3", +"gbC c #f5ebbb", +"f7b c #f6ad6d", +"f36 c #f6b172", +"f31 c #f6c897", +"bbd c #f6d1a4", +"aVP c #f6d3a7", +"bFA c #f6d3a8", +"bbf c #f6d4a8", +"bfQ c #f6d4a9", +"a4G c #f6d5a9", +"boG c #f6d5aa", +"dFX c #f6d5ab", +"a8Y c #f6d6aa", +"bwU c #f6d6ac", +"bBa c #f6d6ad", +"cJF c #f6d6b0", +"bkf c #f6d7ac", +"bB# c #f6d7ae", +"cFl c #f6d7b3", +"heX c #f6d8a7", +"g1n c #f6d8a9", +"gtb c #f6d8ac", +"cOi c #f6d8ad", +"bP# c #f6d8b0", +"g5i c #f6d9a8", +"hpH c #f6daab", +"bFB c #f6dab0", +"gpf c #f6dac8", +"gTo c #f6dbb0", +"bFC c #f6dcb3", +"gLG c #f6ddb2", +"aIW c #f6deb6", +"gt# c #f6dfb7", +"gXk c #f6dfbc", +"bft c #f6e0ba", +"glH c #f6e0bb", +"g1q c #f6e0bd", +"feD c #f6e3ba", +"iss c #f6e3bb", +"de5 c #f6e3ca", +"f0m c #f6e4bf", +"dWa c #f6e4c0", +"dRz c #f6e4c2", +"dV9 c #f6e4c3", +"fDa c #f6e6ac", +"hxa c #f6e6cf", +"hmi c #f6e6d0", +"e4E c #f6e7ae", +"dA2 c #f6e7c0", +"htu c #f6e7d3", +"fiR c #f6e8c1", +"dFe c #f6e8c7", +"g.p c #f6ebbb", +"gsI c #f6ebd3", +"g.o c #f6ecbb", +"gbg c #f7c691", +"f94 c #f7c792", +"fNX c #f7c997", +"fRk c #f7cc9c", +"gib c #f7cfa0", +"bYU c #f7d09e", +"cwL c #f7d1a4", +"c6L c #f7d3aa", +"bkb c #f7d4a9", +"gsV c #f7d4c7", +"gsU c #f7d4c8", +"gtf c #f7d5aa", +"hAO c #f7d5ad", +"bfR c #f7d6ab", +"bbg c #f7d6ac", +"gAx c #f7d6cc", +"a8X c #f7d7ac", +"bkd c #f7d7ad", +"dO# c #f7d7ae", +"bwT c #f7d7af", +"bkh c #f7d8ac", +"a8Z c #f7d8ae", +"boH c #f7d8af", +"dW0 c #f7d8b0", +"ck# c #f7d8b2", +"f0u c #f7d8b3", +"hbb c #f7d9a9", +"bB. c #f7d9b0", +"df. c #f7dab1", +"gpg c #f7dac6", +"hb# c #f7dbaa", +"cwV c #f7dbb3", +"cwW c #f7dbb4", +"heZ c #f7dcb0", +"cBo c #f7dcb2", +"gTt c #f7ddb2", +"gh2 c #f7ddbb", +"gHK c #f7deb5", +"bYJ c #f7deb9", +"aRs c #f7dfb8", +"h9P c #f7e0b9", +"h0Q c #f7e1b4", +"aIR c #f7e1c0", +"h0K c #f7e2be", +"dJc c #f7e3c0", +"e3K c #f7e4b7", +"h3Y c #f7e4bb", +"dW# c #f7e4c2", +"ip0 c #f7e5bc", +"feG c #f7e5be", +"d0M c #f7e5c2", +"d5I c #f7e5c4", +"ipZ c #f7e6bd", +"d0N c #f7e7c7", +"d5Q c #f7e7c9", +"f6X c #f7e7d0", +"e.w c #f7e8ca", +"fOg c #f7eab6", +"hxb c #f7ead6", +"f06 c #f7edbc", +"geF c #f8c48c", +"fGn c #f8c58e", +"geE c #f8cd9d", +"b3J c #f8d1a2", +"b8G c #f8d1a3", +"cbp c #f8d4a9", +"coi c #f8d6ab", +"cNX c #f8d6ae", +"gwG c #f8d6cb", +"gia c #f8d7ad", +"gsZ c #f8d7cb", +"b8F c #f8d8ac", +"bsO c #f8d8ae", +"cbo c #f8d8af", +"c2. c #f8d8b1", +"cFe c #f8d8b2", +"bsN c #f8d9af", +"bTV c #f8d9b0", +"cwM c #f8dab1", +"csy c #f8dab3", +"bYH c #f8dbb2", +"cj5 c #f8dbb3", +"cSP c #f8dcb2", +"bPc c #f8dcb3", +"bTT c #f8ddb5", +"bTU c #f8ddb7", +"gLI c #f8deb4", +"eKp c #f8dfac", +"iaI c #f8dfb9", +"gTn c #f8e0b5", +"gta c #f8e0b7", +"b30 c #f8e1b8", +"gPw c #f8e1bc", +"aVI c #f8e1be", +"geh c #f8e2b3", +"gLF c #f8e2b8", +"fm7 c #f8e3bb", +"h6V c #f8e4ba", +"h0R c #f8e4bb", +"g9n c #f8e5c6", +"e8c c #f8e6bc", +"dRB c #f8e6c4", +"dW. c #f8e6c5", +"dJd c #f8e6c6", +"dWb c #f8e7c6", +"e.q c #f8e7c7", +"aVH c #f8e7c9", +"f9D c #f8e9c5", +"fzB c #f8ecb8", +"htv c #f8ecd8", +"hpK c #f8ecd9", +"gbD c #f8eebe", +"gbf c #f9ca95", +"fKd c #f9cb98", +"f0I c #f9cd9b", +"fXv c #f9cd9d", +"fCM c #f9ce9c", +"fGm c #f9d1a1", +"fKc c #f9d3a4", +"c6K c #f9d5ac", +"gtc c #f9d7a9", +"gsW c #f9d8cc", +"bKl c #f9dbb2", +"cSB c #f9dbb3", +"c2# c #f9dbb4", +"cFm c #f9dbb5", +"cfK c #f9dcb3", +"bFD c #f9dcb4", +"b8q c #f9ddb4", +"aRt c #f9ddb5", +"cfX c #f9ddb6", +"bYG c #f9deb5", +"b3y c #f9deb6", +"eFB c #f9dfac", +"bYO c #f9dfb7", +"cbn c #f9dfb8", +"fvf c #f9dfb9", +"go7 c #f9dfd1", +"fvh c #f9e1b9", +"bYP c #f9e1bd", +"gD2 c #f9e2bb", +"dF. c #f9e2bc", +"go6 c #f9e2d3", +"dAW c #f9e3be", +"f0p c #f9e4b7", +"iu3 c #f9e4be", +"h9G c #f9e4c1", +"iaG c #f9e5bb", +"dNn c #f9e5c3", +"hbe c #f9e6c7", +"h6U c #f9e7bc", +"h6W c #f9e7c0", +"h3Z c #f9e7c2", +"h3W c #f9e8bc", +"h6T c #f9e8bd", +"inr c #f9e8bf", +"he0 c #f9e8cd", +"h6R c #f9e9bf", +"hXO c #f9e9c0", +"dRx c #f9e9c9", +"aVJ c #f9e9ca", +"hXN c #f9eac0", +"gLE c #f9ebd2", +"c65 c #f9ebd3", +"hiA c #f9ebd4", +"fKC c #f9ecb7", +"gHU c #f9ecd5", +"eZ2 c #f9edc0", +"eZ3 c #f9edc4", +"f93 c #facc9a", +"f0H c #face9c", +"f67 c #facf9e", +"f30 c #fad1a0", +"fNW c #fad2a3", +"bYT c #fad6a6", +"b3I c #fad7ac", +"fRi c #fad9af", +"gAE c #fad9ce", +"gAy c #fad9d0", +"cod c #fadbb0", +"cAX c #fadbb1", +"b3H c #fadcb1", +"fGl c #fadcb2", +"gpt c #fadcb3", +"c15 c #fadcb5", +"bYF c #faddb3", +"cj6 c #faddb4", +"cFc c #faddb5", +"cN1 c #faddb7", +"ca9 c #fadeb5", +"csz c #fadeb6", +"bKn c #fadeb7", +"cJI c #fadeb8", +"cb. c #fadfb6", +"bPa c #fadfb7", +"bYK c #fadfb8", +"cfW c #fadfb9", +"gej c #fae0b2", +"bKm c #fae0b8", +"bTQ c #fae0b9", +"cwZ c #fae0ba", +"dj8 c #fae1b9", +"fvg c #fae1ba", +"cok c #fae1bb", +"gHN c #fae2b8", +"bTS c #fae2bb", +"b3D c #fae2bc", +"go4 c #fae2cb", +"ei# c #fae3b4", +"fq7 c #fae3bb", +"fXl c #fae3bd", +"b8C c #fae3be", +"cwY c #fae3c0", +"gh3 c #fae3c2", +"fTW c #fae4b7", +"bZc c #fae4bc", +"aNb c #fae4be", +"e3M c #fae5bb", +"fq6 c #fae5bf", +"gHJ c #fae5c1", +"dJb c #fae6c4", +"iaH c #fae7bd", +"h9N c #fae7be", +"fr. c #fae7c0", +"f9G c #fae8bc", +"dRy c #fae8c8", +"ds5 c #fae8cc", +"h0O c #fae9be", +"h3V c #fae9bf", +"hXP c #fae9c2", +"fQZ c #fae9c3", +"h3U c #faeac1", +"h6S c #faebc1", +"h0N c #faebc2", +"fq1 c #faebc4", +"edp c #faebcf", +"aRm c #faebd1", +"hXM c #faecc3", +"hOp c #faecc4", +"iiv c #faecc5", +"d0R c #faecd1", +"e8i c #faedc5", +"dNw c #faeed1", +"g5o c #faefda", +"gLD c #faefde", +"hKR c #faf0d7", +"iax c #faf1dd", +"f4o c #faf2c1", +"fXu c #fbcd9c", +"f0G c #fbcf9f", +"f3Z c #fbd09e", +"fUa c #fbd3a4", +"f3Y c #fbd4a4", +"fRj c #fbd4a5", +"fU# c #fbd4a6", +"fNV c #fbd5a8", +"f91 c #fbd6a8", +"fU. c #fbd6ab", +"gte c #fbd7ab", +"fCL c #fbd9ad", +"cFb c #fbdaaf", +"cXd c #fbdab3", +"fNU c #fbdbb2", +"gAL c #fbdbce", +"gEt c #fbdbd0", +"cXe c #fbdcb5", +"cj4 c #fbddb2", +"cNU c #fbddb4", +"fRh c #fbddb5", +"gwS c #fbddcf", +"geC c #fbdeb5", +"cFd c #fbdeb6", +"gwE c #fbded4", +"iil c #fbdfb6", +"bYL c #fbdfb7", +"cN3 c #fbdfb9", +"b3z c #fbe0b7", +"csA c #fbe0b8", +"fCK c #fbe0b9", +"bYM c #fbe1b9", +"bTR c #fbe1ba", +"b8E c #fbe1bb", +"gek c #fbe2b5", +"bYN c #fbe2ba", +"cfV c #fbe2bb", +"cN4 c #fbe2bc", +"ePc c #fbe3b1", +"em5 c #fbe3b5", +"aVQ c #fbe3bb", +"fve c #fbe3bc", +"cbm c #fbe3bd", +"cxd c #fbe4bd", +"cbj c #fbe4be", +"b3G c #fbe4c0", +"edv c #fbe5b8", +"iaF c #fbe5bc", +"bUk c #fbe5bd", +"b8B c #fbe5c1", +"go5 c #fbe5d1", +"gTu c #fbe6bf", +"cka c #fbe6c3", +"b3E c #fbe6c5", +"h9K c #fbe7bf", +"eKn c #fbe7c0", +"dNl c #fbe7c4", +"bYQ c #fbe7c6", +"dNo c #fbe8c5", +"aIV c #fbe8c6", +"h9M c #fbe9c0", +"fq8 c #fbe9c1", +"h9O c #fbe9c3", +"gPs c #fbe9c6", +"h6M c #fbe9c7", +"doC c #fbe9cc", +"ds6 c #fbe9cd", +"h6Q c #fbeac2", +"iu2 c #fbeac3", +"aN# c #fbeaca", +"gDZ c #fbeacc", +"iaC c #fbebc2", +"glI c #fbebc3", +"idw c #fbebc5", +"f6V c #fbebc6", +"dJe c #fbebce", +"gHI c #fbebcf", +"hOo c #fbecc3", +"fiQ c #fbecc4", +"e3L c #fbecc5", +"e8d c #fbecc6", +"hKU c #fbeccc", +"d5J c #fbecd0", +"hRD c #fbedc4", +"hRE c #fbedc5", +"idv c #fbedc6", +"e8e c #fbedc8", +"hRF c #fbedc9", +"hKT c #fbedcd", +"hKV c #fbedd0", +"g1r c #fbedd4", +"iu0 c #fbeec4", +"gh5 c #fbeec5", +"fap c #fbeec6", +"hOq c #fbeecb", +"edl c #fbeed4", +"d5M c #fbeed5", +"gh6 c #fbefc6", +"ikP c #fbefc8", +"iaB c #fbefc9", +"dNv c #fbefd3", +"e.v c #fbefd5", +"f6Y c #fbefd7", +"gA# c #fbefd9", +"gsC c #fbefdb", +"gA. c #fbf0db", +"hHA c #fbf1d8", +"fOh c #fbf2c1", +"ffn c #fbf2c3", +"gwu c #fbf2da", +"gbE c #fbf3c2", +"fUz c #fbf3c4", +"f65 c #fcd5a6", +"gtd c #fcd7a8", +"cJy c #fcd8ad", +"f90 c #fcdbb0", +"gAM c #fcdbcf", +"gEz c #fcdcd0", +"gbd c #fcddb3", +"fRg c #fcddb5", +"cSr c #fcddb6", +"glP c #fcdeb5", +"cJA c #fcdfb6", +"cXg c #fcdfb8", +"cXf c #fcdfb9", +"cJz c #fce0b7", +"b8p c #fce0b8", +"b3A c #fce1b8", +"glO c #fce1b9", +"fKa c #fce1bb", +"f0s c #fce2b7", +"gaZ c #fce2b8", +"cXB c #fce2ba", +"fK# c #fce2bb", +"dJ4 c #fce2bc", +"fvb c #fce2be", +"go3 c #fce2d6", +"eAV c #fce3b3", +"fXg c #fce3b7", +"fXh c #fce3b9", +"ifS c #fce3bb", +"b8W c #fce3bc", +"fvd c #fce3bd", +"fvc c #fce3be", +"fCI c #fce3bf", +"fGk c #fce3c0", +"gaX c #fce4b6", +"f3D c #fce4b7", +"f0r c #fce4b8", +"f3E c #fce4ba", +"ifR c #fce4bb", +"cJZ c #fce4bc", +"aNa c #fce4bd", +"b31 c #fce4be", +"gaW c #fce5b7", +"f0q c #fce5b9", +"idn c #fce5bc", +"ga0 c #fce5bd", +"cbD c #fce5be", +"cbl c #fce5bf", +"b8A c #fce5c0", +"dJa c #fce5c1", +"bZd c #fce5c2", +"f9I c #fce6b9", +"f6N c #fce6ba", +"idm c #fce6bc", +"iaD c #fce6be", +"csB c #fce6bf", +"fva c #fce6c2", +"cfQ c #fce6c3", +"iaE c #fce7be", +"ikW c #fce7c0", +"h9L c #fce8bf", +"inq c #fce8c0", +"f3J c #fce8c1", +"ePa c #fce8c5", +"b3F c #fce8c8", +"h6P c #fce9c0", +"ipY c #fce9c1", +"fq9 c #fce9c3", +"idi c #fce9c7", +"feu c #fceac1", +"ixO c #fceac3", +"ewh c #fceac5", +"b3x c #fceaca", +"h3S c #fcebc2", +"h39 c #fcebc4", +"fv# c #fcebc5", +"h9X c #fcebc6", +"gTv c #fcebcd", +"doD c #fcebcf", +"iuZ c #fcecc2", +"h0M c #fcecc3", +"glM c #fcecc4", +"iu1 c #fcecc5", +"fv. c #fcecc6", +"fal c #fcecca", +"ds9 c #fcecd1", +"hOn c #fcedc4", +"fiO c #fcedc5", +"fq0 c #fcedc6", +"iaR c #fcedc7", +"fJW c #fcedc8", +"fam c #fcedcb", +"eO9 c #fcedd1", +"ixN c #fceec4", +"fiP c #fceec5", +"faq c #fceec6", +"far c #fceec7", +"hRB c #fceec8", +"if3 c #fceec9", +"hOr c #fceecd", +"hKS c #fceece", +"e.y c #fceed2", +"hE# c #fceed4", +"hXK c #fcefc5", +"glL c #fcefc6", +"glK c #fcefc7", +"if1 c #fcefc8", +"e8f c #fcefc9", +"hUF c #fcefca", +"geu c #fcefcc", +"eh5 c #fcefd5", +"gh7 c #fcf0c7", +"gba c #fcf0c9", +"iiu c #fcf0ca", +"h6O c #fcf0cc", +"dJf c #fcf0d4", +"gDY c #fcf0d7", +"gh8 c #fcf1c8", +"h3O c #fcf1cf", +"iij c #fcf1d0", +"hOl c #fcf1d7", +"hEf c #fcf1d9", +"gsB c #fcf1dc", +"gPC c #fcf1dd", +"gXo c #fcf1de", +"h6N c #fcf2d3", +"ehW c #fcf2db", +"g1t c #fcf2df", +"g1s c #fcf2e0", +"e4F c #fcf3c1", +"f9U c #fcf3ca", +"h9J c #fcf3d5", +"hOk c #fcf3db", +"h6J c #fcf3de", +"hxc c #fcf3df", +"he1 c #fcf3e0", +"fbe c #fcf4c5", +"fjx c #fcf5c5", +"hEa c #fcf5e1", +"f07 c #fcf6c9", +"fT9 c #fddcb4", +"gEy c #fdddd1", +"gAD c #fdddd2", +"gpr c #fddeb2", +"gwL c #fdded3", +"fNT c #fde0b8", +"cSs c #fde0b9", +"gs0 c #fde0d4", +"bTM c #fde1b7", +"cSt c #fde1ba", +"gs1 c #fde1d4", +"b8y c #fde2ba", +"f0t c #fde2bc", +"gel c #fde3b9", +"iik c #fde3ba", +"cfR c #fde3bb", +"geB c #fde3bc", +"fT8 c #fde3bd", +"fXq c #fde3be", +"fy8 c #fde3c0", +"gaY c #fde4b8", +"ifQ c #fde4bb", +"fK. c #fde4bd", +"cfS c #fde4be", +"ipX c #fde4bf", +"fy9 c #fde4c0", +"fT7 c #fde4c1", +"erJ c #fde5b7", +"fXf c #fde5b9", +"hR0 c #fde5bc", +"f3F c #fde5bd", +"ckb c #fde5be", +"cfT c #fde5bf", +"dOb c #fde5c0", +"dJ# c #fde5c1", +"dF# c #fde5c2", +"f6L c #fde6b9", +"fQ3 c #fde6ba", +"fXe c #fde6bb", +"gHO c #fde6bc", +"idl c #fde6bd", +"cfU c #fde6bf", +"aRu c #fde6c0", +"gPx c #fde7bc", +"gLJ c #fde7bd", +"gpp c #fde7be", +"cxc c #fde7c0", +"cbE c #fde7c1", +"b8X c #fde7c2", +"isq c #fde7c5", +"gaV c #fde8bb", +"f3C c #fde8bc", +"hRZ c #fde8c0", +"f3G c #fde8c1", +"cg# c #fde8c2", +"de9 c #fde8c4", +"f9H c #fde9bc", +"e.D c #fde9be", +"ifZ c #fde9c0", +"f6O c #fde9c1", +"h02 c #fde9c2", +"ga1 c #fde9c6", +"b32 c #fde9c9", +"idu c #fdeac1", +"gpo c #fdeac3", +"fy5 c #fdeac5", +"ger c #fdeac6", +"dNp c #fdeac8", +"dNq c #fdeaca", +"c67 c #fdeacb", +"gaU c #fdebbe", +"h9V c #fdebc2", +"h64 c #fdebc3", +"f3W c #fdebc5", +"geq c #fdebc8", +"ges c #fdebc9", +"dRC c #fdebcc", +"h3Q c #fdecc3", +"iaP c #fdecc4", +"gi# c #fdecc5", +"erH c #fdecca", +"eUa c #fdeccc", +"f0z c #fdeccd", +"geA c #fdedc5", +"gh4 c #fdedc7", +"h3M c #fdedcd", +"gep c #fdedce", +"get c #fdedd0", +"d#7 c #fdedd1", +"dj4 c #fdedd2", +"dWc c #fdedd3", +"hOm c #fdeec4", +"hRC c #fdeec5", +"gpn c #fdeec7", +"ga3 c #fdeec9", +"gb# c #fdeeca", +"f9T c #fdeecb", +"gb. c #fdeecc", +"eY2 c #fdeed1", +"eP. c #fdeed2", +"hUG c #fdefc5", +"hUH c #fdefc6", +"e8h c #fdefc8", +"e8g c #fdefc9", +"e3G c #fdefd2", +"f9P c #fdefd4", +"eKk c #fdefd6", +"gi. c #fdf0c7", +"gh9 c #fdf0c8", +"if2 c #fdf0c9", +"eAQ c #fdf0d4", +"d0O c #fdf0d6", +"aIS c #fdf0d7", +"aRn c #fdf0d8", +"gez c #fdf1c9", +"gHS c #fdf1cb", +"f9O c #fdf1d6", +"erE c #fdf1d7", +"em1 c #fdf1d8", +"gAa c #fdf1d9", +"dj2 c #fdf1da", +"gD6 c #fdf2cb", +"f61 c #fdf2cd", +"f9N c #fdf2d2", +"eh4 c #fdf2d9", +"d5K c #fdf2da", +"erB c #fdf2db", +"eh3 c #fdf2dc", +"erC c #fdf2dd", +"goU c #fdf2de", +"gew c #fdf3c9", +"gey c #fdf3ca", +"gaQ c #fdf3ce", +"dJh c #fdf3d6", +"iaA c #fdf3d9", +"hOj c #fdf3db", +"emX c #fdf3dc", +"cSN c #fdf3de", +"gws c #fdf3df", +"g5q c #fdf3e0", +"g5p c #fdf3e1", +"gex c #fdf4cb", +"ghM c #fdf4ce", +"hUE c #fdf4da", +"h3N c #fdf4db", +"g5s c #fdf4dc", +"g5t c #fdf4dd", +"aN. c #fdf4df", +"g5r c #fdf4e0", +"gHH c #fdf4e6", +"frE c #fdf5c5", +"e88 c #fdf5c7", +"fUA c #fdf5c8", +"fXT c #fdf5c9", +"hRA c #fdf5dd", +"hXH c #fdf5de", +"dj3 c #fdf5df", +"fnF c #fdf6c8", +"fGK c #fdf6c9", +"fOl c #fdf6ca", +"f4r c #fdf6cb", +"g.r c #fdf6cd", +"fRI c #fdf7ca", +"gwK c #feded4", +"gpa c #fee0cf", +"cSq c #fee2ba", +"fRe c #fee2bb", +"fNK c #fee4bc", +"fQ8 c #fee4bd", +"fXj c #fee4be", +"fT1 c #fee4bf", +"fJ6 c #fee4c0", +"fGj c #fee4c1", +"fJ3 c #fee5bb", +"glN c #fee5bc", +"fNL c #fee5be", +"dFZ c #fee5bf", +"dJ3 c #fee5c0", +"fJ7 c #fee5c1", +"ewj c #fee6b7", +"dFY c #fee6bf", +"fT2 c #fee6c0", +"dJ2 c #fee6c1", +"bTP c #fee6c2", +"f9Z c #fee7c0", +"cbF c #fee7c1", +"doI c #fee7c2", +"hXZ c #fee8c1", +"cgd c #fee8c2", +"cgc c #fee8c3", +"doH c #fee8c4", +"b33 c #fee8c7", +"iaO c #fee9c0", +"hUW c #fee9c1", +"ifY c #fee9c2", +"csQ c #fee9c3", +"cga c #fee9c4", +"coy c #fee9c5", +"gen c #fee9c7", +"gem c #fee9c8", +"gHP c #feeac1", +"gPy c #feeac2", +"f3H c #feeac3", +"ipW c #feeac5", +"dt# c #feeac8", +"geo c #feeac9", +"dNr c #feeacc", +"h0Y c #feebc2", +"f9J c #feebc3", +"f3I c #feebc4", +"ga2 c #feebc5", +"cox c #feebc8", +"cBn c #feebca", +"f3R c #feebcf", +"gsN c #feebe3", +"h63 c #feecc2", +"f6P c #feecc4", +"fXm c #feecc7", +"f6Z c #feeccd", +"dRD c #feecd0", +"f6Q c #feedc5", +"f9Y c #feedc6", +"fak c #feedc8", +"f60 c #feedce", +"f0D c #feeec8", +"fXo c #feeec9", +"f9Q c #feeecf", +"ewg c #feeed0", +"dxo c #feeed2", +"f0A c #feeed3", +"dWd c #feeed5", +"iir c #feefc6", +"ga7 c #feefcc", +"eY4 c #feefd0", +"gPz c #feefd1", +"fXn c #feefd2", +"doG c #feefd5", +"f3V c #fef0c9", +"eP# c #fef0d2", +"eAR c #fef0d3", +"e8. c #fef0d4", +"e79 c #fef0d5", +"dj1 c #fef0d6", +"f0C c #fef1c9", +"f0B c #fef1cb", +"f3S c #fef1d3", +"h0L c #fef1d5", +"eT8 c #fef1d6", +"dNu c #fef1d7", +"eAP c #fef1d8", +"f63 c #fef2ca", +"eY0 c #fef2d8", +"ewc c #fef2d9", +"doB c #fef2da", +"d0P c #fef2db", +"d0Q c #fef2dc", +"f3U c #fef3ca", +"f3T c #fef3cb", +"iit c #fef3cd", +"gHT c #fef3d3", +"dJg c #fef3d7", +"hXG c #fef3d8", +"hOi c #fef3da", +"erD c #fef3dc", +"edn c #fef3dd", +"e.u c #fef3de", +"gbb c #fef4cb", +"f62 c #fef4cc", +"gAf c #fef4d2", +"gD5 c #fef4d7", +"hUD c #fef4dc", +"cx# c #fef4dd", +"aIU c #fef4de", +"cOd c #fef4df", +"d#5 c #fef4e0", +"gwr c #fef4e1", +"fzD c #fef5c6", +"fjB c #fef5c7", +"fbg c #fef5c8", +"ffq c #fef5c9", +"f9V c #fef5cc", +"e4H c #fef5cf", +"gAe c #fef5d5", +"gHR c #fef5da", +"g1v c #fef5dd", +"hbf c #fef5de", +"g1u c #fef5df", +"aM8 c #fef5e0", +"cJW c #fef5e1", +"gwq c #fef5e2", +"gwp c #fef5e3", +"e87 c #fef6c6", +"ffp c #fef6c7", +"fjy c #fef6c8", +"fDe c #fef6c9", +"e89 c #fef6ca", +"f7y c #fef6cc", +"iaw c #fef6dd", +"c2o c #fef6e2", +"g9o c #fef6e3", +"gDX c #fef6e7", +"ffo c #fef7c9", +"fDb c #fef7ca", +"fKD c #fef7cb", +"f08 c #fef7cc", +"f7x c #fef7ce", +"hRx c #fef7e2", +"fzC c #fef8cb", +"fDc c #fef8cc", +"gHG c #fef8ec", +"fUB c #fef9cc", +"gwF c #ffdfd5", +"fNM c #ffe4bf", +"fQ9 c #ffe4c0", +"ikQ c #ffe5bd", +"fNN c #ffe5c0", +"fGe c #ffe6bc", +"fJ1 c #ffe7bb", +"ikV c #ffe7c1", +"dF0 c #ffe7c2", +"fT3 c #ffe8c2", +"cOg c #ffe8c3", +"fRb c #ffe9c3", +"coz c #ffe9c4", +"h00 c #ffeac2", +"gLK c #ffeac3", +"dxq c #ffeac8", +"h01 c #ffebc2", +"h0Z c #ffebc3", +"dBI c #ffebcb", +"gsL c #ffebe6", +"h35 c #ffecc3", +"cow c #ffedc9", +"dNs c #ffedd2", +"iaN c #ffeec5", +"gHQ c #ffeecf", +"gLL c #ffefd0", +"erG c #ffefd2", +"dNt c #fff0d5", +"cXA c #fff0d6", +"csM c #fff1d3", +"fF8 c #fff1d4", +"fyT c #fff1d6", +"e78 c #fff1d7", +"eKi c #fff1d9", +"eKh c #fff1da", +"fQY c #fff2d1", +"fTS c #fff2d3", +"fNA c #fff2d4", +"fQX c #fff2d5", +"fuX c #fff2d6", +"fiD c #fff2d7", +"eO6 c #fff2d8", +"cOf c #fff2d9", +"eAL c #fff2da", +"eAM c #fff2db", +"ery c #fff2dd", +"fX# c #fff3d4", +"fmM c #fff3d7", +"ifO c #fff3d8", +"h9H c #fff3d9", +"dj0 c #fff3da", +"e.r c #fff3db", +"ewb c #fff3dc", +"e.s c #fff3dd", +"d5L c #fff3de", +"f3w c #fff3df", +"f9W c #fff4cc", +"f0l c #fff4d5", +"f0k c #fff4d8", +"f3x c #fff4da", +"fW9 c #fff4dc", +"cJV c #fff4dd", +"e.t c #fff4de", +"ehY c #fff4df", +"ewa c #fff4e0", +"emV c #fff4e1", +"eT6 c #fff4e2", +"ghJ c #fff4e3", +"f3y c #fff5d6", +"f6G c #fff5d7", +"f6F c #fff5db", +"goW c #fff5dc", +"f9A c #fff5dd", +"cFB c #fff5de", +"cBl c #fff5df", +"c2n c #fff5e0", +"emW c #fff5e1", +"ew# c #fff5e2", +"eFu c #fff5e3", +"eYZ c #fff5e4", +"fjA c #fff6c8", +"e9. c #fff6cf", +"gec c #fff6d1", +"gll c #fff6d4", +"goY c #fff6d5", +"geb c #fff6d6", +"ghK c #fff6d8", +"goX c #fff6d9", +"gaO c #fff6da", +"f9B c #fff6db", +"gPB c #fff6dc", +"cx. c #fff6dd", +"gAc c #fff6de", +"cSM c #fff6df", +"cXy c #fff6e0", +"cFC c #fff6e1", +"aIT c #fff6e2", +"fqO c #fff6e3", +"e3D c #fff6e4", +"eYY c #fff6e5", +"gsA c #fff6e6", +"gsz c #fff6e7", +"fjz c #fff7c8", +"glm c #fff7d1", +"ghL c #fff7d5", +"f9C c #fff7d8", +"gwt c #fff7da", +"gD7 c #fff7de", +"gTw c #fff7df", +"hXC c #fff7e1", +"hOe c #fff7e2", +"cXz c #fff7e3", +"aM9 c #fff7e4", +"ge# c #fff7e6", +"gwo c #fff7e8", +"gsy c #fff7e9", +"frF c #fff8ca", +"fGM c #fff8cb", +"fvJ c #fff8cc", +"fKF c #fff8cd", +"gsH c #fff8dd", +"hAH c #fff8e1", +"hKM c #fff8e3", +"gXp c #fff8e4", +"g9p c #fff8e5", +"fOi c #fff9cd", +"fKE c #fff9cf", +"goZ c #fff9db", +"hHu c #fff9e3", +"gAg c #fff9e4", +"hbg c #fff9e6", +"hUz c #fffae4", +"hiB c #fffae6", +"he2 c #fffae8", +"hxd c #fffbe5", +"htw c #fffbe7", +".lW c #000000", +".lX c #070706", +".my c #080b0e", +".o0 c #099090", +".li c #0a0807", +".lh c #0d1218", +".ou c #0e6666", +".pr c #10acac", +".kE c #131314", +".mx c #142334", +".m9 c #15273d", +".pS c #164c4c", +".pq c #174141", +".n. c #192b42", +".ov c #19e2e3", +".ql c #1a4b4b", +".lY c #1c1b18", +".mz c #1c2125", +".pT c #1cb6b6", +".sl c #1e1e1e", +".ry c #1f1f1f", +".qO c #1f4040", +".oY c #202020", +".kU c #212121", +"clh c #216ca4", +"cg9 c #2175b1", +".g7 c #222222", +".oZ c #223737", +".nW c #224041", +"clg c #226ca2", +".nX c #22b3b5", +".c7 c #232323", +".lj c #242320", +".ar c #242424", +".rc c #243434", +".rd c #246665", +".qm c #24abab", +".o1 c #24f2f2", +"QtD c #252525", +".rB c #253d3d", +"ch. c #256498", +".qP c #259090", +"Qtg c #262626", +".nm c #266d70", +".kF c #272522", +".sn c #272727", +".rX c #273736", +".qi c #273c40", +".sk c #282828", +".or c #283d41", +".lV c #283f5b", +"cli c #28608e", +"clf c #2878aa", +".az c #291f1e", +".sj c #292929", +".rW c #292a2a", +".s# c #292b2b", +".sa c #293130", +".n# c #29394e", +".rV c #2a2a2a", +".si c #2a2b2b", +".rA c #2a2c2c", +".mL c #2a3a3b", +".nV c #2a3d41", +"cll c #2a8fc2", +".#N c #2b2020", +"Qt9 c #2b2121", +".rb c #2b2b2b", +".rT c #2b2c2b", +".qk c #2b2d2d", +".sb c #2b3836", +".a. c #2c2120", +".qj c #2c2c2c", +".pR c #2c2d2d", +".ot c #2c3030", +".sh c #2c312e", +".nj c #2c3d40", +".rY c #2c514e", +"clm c #2c87b7", +"cpv c #2c9ccf", +"cpw c #2c9fd1", +".qL c #2d2d2c", +".pp c #2d2d2d", +".nl c #2d3030", +".sc c #2d3f3c", +".nL c #2d4e7b", +".m8 c #2d4f7b", +".mb c #2d5054", +".rC c #2d6f6d", +"cps c #2d83b6", +"cg8 c #2d8bc0", +"cpu c #2d8fc1", +"cln c #2da0ce", +"clo c #2da4d4", +"QtW c #2e2323", +".os c #2e2e2e", +".sg c #2e3834", +".mK c #2e3e41", +"cpt c #2e8abc", +"cpx c #2ea2d2", +"clp c #2ea4d3", +".#9 c #2f2c2c", +".nk c #2f2f2f", +".qN c #2f3c3f", +"cpy c #2fa3d1", +"clq c #2fa4d2", +"cph c #2fbbe5", +"QtN c #302626", +".#M c #302d2d", +".oX c #30302c", +".nU c #30302d", +".ma c #303030", +".lz c #303232", +".kX c #303537", +".s. c #303730", +".sd c #30433f", +"cpr c #307eb1", +"chb c #308cba", +"chc c #3090bb", +".a5 c #312327", +".bw c #312427", +".ay c #312c2e", +".#o c #312f2f", +".ly c #313131", +".rx c #31342c", +".ki c #313a3e", +".sf c #313f3a", +".se c #31433e", +"cha c #3180b0", +".m. c #323230", +".kh c #323232", +".sp c #32393c", +"chd c #3292bc", +"clc c #32a5d7", +"cB5 c #32b8e4", +".ps c #32f8f7", +".b6 c #332629", +"QtA c #332b2b", +".i3 c #333333", +".so c #333a3c", +".sq c #333b3d", +"clk c #3383b5", +"ccB c #3395c3", +"cxV c #339ecb", +"ctx c #33add3", +".cJ c #342629", +"Qt8 c #343232", +".hP c #343434", +".sm c #343b3d", +".rU c #343c3e", +".m# c #343e41", +".jG c #343f45", +".nK c #345c91", +"cCd c #34719a", +"cty c #34bbe2", +"cla c #34bde3", +".gu c #353535", +".ra c #353d3e", +".rz c #353d3f", +"ctJ c #357da9", +"cCc c #357dac", +"ctI c #3589b6", +"cB6 c #35b1db", +"cxW c #35b2db", +"cpg c #35c0e6", +"QtV c #363434", +".ff c #363636", +".fS c #363637", +".gv c #363639", +".pn c #363727", +".lx c #363e40", +"ctK c #367ba7", +"che c #36a9d2", +".dp c #37292d", +".lw c #373530", +".gr c #373636", +".dW c #373637", +".dV c #373737", +".rS c #373d32", +".i4 c #374148", +"cCb c #376f96", +"ccz c #377aa7", +"cx5 c #3781ae", +".ow c #37fdfd", +".d7 c #382b2f", +"Qts c #383131", +".cA c #383838", +".ha c #383940", +".hO c #383f41", +".gt c #384042", +"cGt c #386a8c", +"ccA c #387aa2", +"cx4 c #387ba8", +"cGm c #38a8d4", +"cpz c #38aad0", +"cpi c #38b9e2", +".eJ c #392b2f", +".g6 c #393636", +".cB c #393739", +"QtM c #393838", +".bZ c #393939", +".hQ c #393d45", +".ir c #394048", +".fe c #394143", +"cpn c #394c60", +"cGu c #396d8e", +"cxU c #39a2c8", +".a2 c #3a3a3a", +".nM c #3a5e8b", +"cGv c #3a7598", +".rZ c #3a7772", +"clr c #3aacd2", +"clb c #3ab3dd", +"cPq c #3b3535", +".ex c #3b3740", +"Qtn c #3b3838", +".ni c #3b3a2a", +".aU c #3b3a3b", +".#8 c #3b3b3b", +".r# c #3b402d", +".ew c #3b4236", +"cGw c #3b6c8d", +".lA c #3b6f78", +"cx6 c #3b7298", +"cx7 c #3b759c", +"cCa c #3b86ae", +".#a c #3c3a3c", +"Qtz c #3c3c3c", +"ctL c #3c8cb8", +"cGl c #3cafda", +".re c #3cb5b2", +".pU c #3cf8f8", +".nY c #3cfafa", +".ft c #3d2f34", +".b0 c #3d363f", +"QtZ c #3d3a3d", +"QtU c #3d3d3d", +".dU c #3d432a", +".cz c #3d442b", +"QtL c #3d4531", +"Qtr c #3d4532", +"cKL c #3d7089", +"cKK c #3d718e", +"cGr c #3d86aa", +"cB4 c #3dafd5", +".kT c #3e3a31", +"Qty c #3e3e3e", +".mA c #3e3f40", +".a1 c #3e442b", +".#L c #3e452b", +".#n c #3e452c", +"Qt7 c #3e452f", +"Qtj c #3e4641", +"Qtm c #3e4734", +"Qtf c #3e484b", +"cpo c #3e5060", +"cKJ c #3e7da1", +".mM c #3ea4ac", +".cs c #3f363d", +"Qto c #3f3a3a", +"Qtd c #3f3f3f", +".pP c #3f4126", +"cpp c #3f576c", +"ch# c #3f6079", +"cGs c #3f708d", +"cKI c #3f7da0", +"cB7 c #3fa9d0", +"cxX c #3fb1d5", +".71 c #3fbed1", +"Qt0 c #403340", +".#Q c #403341", +".e6 c #40373c", +".hL c #403938", +"Qtk c #404040", +".r9 c #405143", +"clj c #405466", +"ctw c #407487", +"cKH c #4083a7", +"chf c #40b1d5", +".o2 c #40fefe", +".#3 c #413340", +".dg c #413846", +".oq c #414123", +"Qtc c #414141", +"Qtb c #414a4d", +".na c #415369", +".oi c #4174b6", +"cGq c #4191b8", +"aZp c #4192aa", +"cxY c #4198bd", +"cGn c #41a3ca", +".f7 c #423439", +"Qt# c #424242", +"cO5 c #427a98", +".P0 c #42acce", +".#b c #432f43", +"cCn c #433937", +"cKR c #433b38", +"Qtu c #434242", +".aY c #434343", +"cO4 c #4383a2", +".qn c #43f3f2", +"cki c #44170a", +"Qt1 c #442c44", +".kf c #443f34", +"Qte c #444444", +"Qta c #444e50", +"cO6 c #44687c", +"cxT c #447a8f", +"cO3 c #4482a1", +"abr c #448ba3", +"cx3 c #4495bd", +".RU c #4498af", +"eOk c #44aab6", +".bs c #453448", +"cGC c #453935", +".ip c #453d39", +"QtT c #454545", +"cTY c #454d56", +"cPp c #454f59", +"cGx c #45738d", +"cpf c #458fa7", +"cx1 c #459bbd", +"cB9 c #459ec2", +"cpk c #45a1cc", +"cld c #45a7d6", +".rD c #45aba8", +"eOj c #45abb7", +".qQ c #45e1e0", +"cor c #46170a", +"cbx c #46190b", +"b8P c #461a0c", +"cKZ c #463831", +".dN c #463842", +"cPa c #463b35", +"Qtt c #463d3d", +".lZ c #46423e", +"cGB c #464545", +".kV c #464646", +".qK c #464b2e", +"cKG c #468bac", +"cGp c #4698bb", +"cB8 c #46a3c7", +"cKC c #46a8cd", +".XF c #46b8d9", +".VL c #46bede", +"b3S c #471a0c", +".#r c #472e47", +"cGH c #47362e", +"cCl c #473d39", +"cCk c #474444", +"Qtq c #474747", +"Qt. c #475154", +"ctv c #475a63", +"cCg c #477593", +"cGo c #47a1c3", +"eOi c #47acb7", +".TM c #47c2e0", +"cf5 c #48190b", +".aq c #483046", +".bT c #483445", +"cCm c #483d39", +".i2 c #484039", +".jD c #484137", +"QtC c #484545", +".hM c #484848", +".qh c #484c2b", +"ctH c #488bb3", +"ctC c #4896b8", +"cKD c #489cc0", +"avQ c #489eb5", +"ctB c #48a5c8", +"eOl c #48afbb", +"cGk c #48b7da", +".nn c #48e5ec", +".pt c #48fefd", +"bY8 c #491b0d", +"bUb c #491d0e", +"c27 c #49362c", +".fg c #494256", +"cGI c #494747", +".cy c #494949", +"cCo c #494e52", +"cpq c #49667a", +"cx8 c #497fa1", +".oj c #4980c4", +"ctM c #4994bc", +"ctA c #4997bd", +"eOh c #49adb9", +"#n# c #49afca", +"aDP c #49b5df", +"azt c #49b7e4", +".3A c #49c1eb", +"b3T c #4a1d0f", +"Qt2 c #4a254a", +".gL c #4a3d43", +".dR c #4a4a4a", +"cO2 c #4a86a2", +"cxZ c #4a93b5", +".6# c #4a98ad", +"cle c #4aa8d1", +"eS0 c #4aafbb", +"eSZ c #4ab0bd", +"afv c #4ab3db", +"azs c #4ab6e1", +"eS9 c #4abdcc", +".Lr c #4ac1df", +"cGG c #4b3b34", +"cTI c #4b3d36", +"QtP c #4b4949", +".c9 c #4b4b4b", +"cYM c #4b5056", +"cCe c #4b81a2", +".3V c #4b8c9c", +"cx0 c #4b94b3", +"#we c #4ba9ca", +"cB3 c #4babcc", +".DX c #4bacc6", +"ctQ c #4bacca", +"eOm c #4bb2be", +".wn c #4bb3d8", +".wo c #4bb4d8", +".wp c #4bb5d9", +".wm c #4bb5db", +".wl c #4bb5dd", +".wq c #4bb6db", +".wr c #4bb7dc", +".Ds c #4bbed7", +".72 c #4bc9db", +".bn c #4c4c4c", +".nJ c #4c86d2", +".oP c #4c88d5", +".r0 c #4c9a91", +"cxS c #4c9ab4", +"avP c #4c9eb1", +"#zt c #4ca6c5", +"aHV c #4cabcd", +"#s8 c #4cadd0", +".zz c #4cb5dd", +".zy c #4cb6de", +".wk c #4cb7de", +".zF c #4cb7e0", +".ws c #4cb8de", +"azu c #4cbdea", +"eS8 c #4cbfce", +"#9E c #4cc2ee", +".F9 c #4cc4d8", +".GN c #4cc4ee", +".w. c #4cc4f1", +".uM c #4cc5ef", +".TC c #4cc8ef", +".RT c #4cc9e4", +".IO c #4ccbe2", +".ox c #4cfefe", +"bBs c #4d2011", +".yS c #4d2313", +"Qt3 c #4d234d", +".WU c #4d2517", +"cGD c #4d3e37", +"QtB c #4d4242", +"c3y c #4d4a4a", +".as c #4d4d4d", +".N6 c #4d95ab", +".xL c #4da9be", +"#CT c #4dabcd", +"#K. c #4dadcf", +"#pZ c #4dafd4", +".Zw c #4db3cf", +".zA c #4db4dd", +"eSY c #4db5c3", +".zB c #4db5dc", +".zC c #4db5dd", +".zD c #4db6de", +".zE c #4db7de", +".zx c #4db7df", +".wj c #4db8df", +".CF c #4db8e0", +".CE c #4db8e1", +".wi c #4db9e0", +".zw c #4db9e1", +".CD c #4db9e2", +".wh c #4dbae1", +".zv c #4dbae2", +".wg c #4dbae3", +".CC c #4dbae4", +".Fv c #4dbae5", +".wa c #4dbbe4", +".wf c #4dbbe5", +".Fw c #4dbbe6", +".wb c #4dbce5", +".we c #4dbce6", +"eJb c #4dbdcc", +".I7 c #4dbdd4", +".CB c #4dbde7", +".wd c #4dbee8", +"eS7 c #4dc0d0", +".GF c #4dc0e6", +".H8 c #4dc0eb", +".x1 c #4dc1ea", +".Pp c #4dc1ec", +".xZ c #4dc2e9", +".Pq c #4dc2ed", +".x2 c #4dc3eb", +".Fp c #4dc4f1", +"#b# c #4dc5ef", +".Cu c #4dc5f3", +".Zr c #4dc6ed", +".1l c #4dc6ee", +".Xy c #4dc6f0", +".D7 c #4dc6f1", +".KL c #4dc6f3", +".TE c #4dc7ed", +".XA c #4dc7ee", +".PD c #4dc7ef", +".VD c #4dc7f0", +".9Y c #4dc7f6", +".XB c #4dc8ed", +".7E c #4dc8ee", +".PC c #4dc8ef", +".VC c #4dc8f0", +".TF c #4dc9ed", +".Nb c #4dc9ee", +".Zo c #4dc9f0", +".VB c #4dcaee", +".1k c #4dcaef", +".3k c #4dcaf0", +".RI c #4dccee", +".EV c #4e2415", +".lk c #4e4b45", +".#E c #4e4e4e", +"b0. c #4e7283", +".1R c #4e7f87", +"aQM c #4e8e92", +".IP c #4e9594", +"cKF c #4e95b2", +"cKE c #4e96b5", +".Dt c #4e989b", +"#Yv c #4e99b4", +"#.O c #4ea7c1", +".Lb c #4eaab1", +"#5I c #4eabcd", +"cKB c #4eadcd", +"#UR c #4eb1d7", +".8t c #4eb2d1", +"eNO c #4eb3c0", +".LN c #4eb8da", +"#mZ c #4eb8df", +".CG c #4eb8e0", +"azr c #4eb9e0", +"avM c #4ebae0", +"aDC c #4ebae4", +".Ic c #4ebbe7", +".ZR c #4ebce0", +"#dy c #4ebce1", +".Fu c #4ebce6", +".Ib c #4ebce7", +".zu c #4ebde6", +".zs c #4ebde7", +".Ia c #4ebde8", +"eS4 c #4ebecd", +"#f9 c #4ebee3", +".wc c #4ebee7", +".zt c #4ebee8", +".I# c #4ebee9", +".CA c #4ebfe8", +".w# c #4ebfe9", +".I. c #4ebfea", +"#9J c #4ebfec", +"#ke c #4ebff2", +".GM c #4ec0e9", +".zr c #4ec0ea", +".zp c #4ec0eb", +"abG c #4ec0ed", +".D5 c #4ec1e9", +".B# c #4ec1ea", +".Fr c #4ec1eb", +".zo c #4ec1ec", +".Fs c #4ec1ed", +"#NO c #4ec1f2", +".NI c #4ec2e2", +"#bb c #4ec2e9", +".uK c #4ec2ea", +".uJ c #4ec2eb", +".Ft c #4ec2ed", +".Fq c #4ec2ee", +".B. c #4ec3ea", +".uL c #4ec3eb", +".D4 c #4ec3ec", +"anz c #4ec3ed", +".zn c #4ec3ee", +"ajZ c #4ec3ef", +".Ba c #4ec4ed", +".Tz c #4ec4ef", +"abs c #4ec4f1", +".NZ c #4ec5ee", +"#tc c #4ec5ef", +".7D c #4ec5f0", +".Xt c #4ec5f1", +".3j c #4ec5f2", +".PM c #4ec6e9", +".XC c #4ec6ea", +".1m c #4ec6eb", +".1x c #4ec6ec", +".PH c #4ec6ed", +"#zA c #4ec6ee", +".VE c #4ec6ef", +".Xz c #4ec6f0", +"#f# c #4ec6f1", +".Po c #4ec6f3", +".PN c #4ec7e9", +".PL c #4ec7ea", +".PE c #4ec7eb", +".RK c #4ec7ec", +".PG c #4ec7ed", +".PA c #4ec7ee", +".PB c #4ec7ef", +".Ne c #4ec7f0", +".M3 c #4ec7f4", +".RM c #4ec8e9", +".Nn c #4ec8ea", +".Nm c #4ec8eb", +".TG c #4ec8ec", +".Jn c #4ec8ed", +".Pz c #4ec8ee", +".Nf c #4ec8ef", +".Px c #4ec8f0", +"#16 c #4ec8f5", +".7A c #4ec8f6", +".VG c #4ec9ea", +".GJ c #4ec9ec", +".RL c #4ec9ed", +".Nj c #4ec9ee", +".Py c #4ec9ef", +".Pw c #4ec9f0", +".Xw c #4ec9f1", +".VH c #4ecae9", +".Zq c #4ecaed", +".1j c #4ecaee", +".KX c #4ecaef", +".Nd c #4ecaf0", +".KW c #4ecaf1", +".Nv c #4ecbe2", +".TB c #4ecbef", +".Nc c #4ecbf0", +".Xx c #4ecbf1", +".Pu c #4eccef", +".Pv c #4eccf0", +"#Lo c #4ecde1", +".3x c #4ed2e7", +".nZ c #4efcff", +".pV c #4efefd", +"bBA c #4f1a0e", +"i6a c #4f2117", +".Kf c #4f2415", +"bs9 c #4f2614", +"QtY c #4f4c4c", +"QtE c #4f4f4f", +"cYL c #4f5860", +"cGy c #4f778e", +"cTW c #4f7a90", +"cpm c #4f7d9b", +".8s c #4f7f85", +"#15 c #4f7f8f", +"a3v c #4f8a8b", +"aU8 c #4f8e94", +".NY c #4fa6b9", +".3B c #4fa6bb", +"#NJ c #4fa7c6", +".Xs c #4faacb", +"#Gr c #4fb1d4", +"eOn c #4fb3bf", +"#cC c #4fb6dc", +"#iy c #4fb7d9", +"cl# c #4fbad7", +"arS c #4fbbe5", +"#kh c #4fbbf2", +".X0 c #4fbcdf", +"#kg c #4fbcf2", +"eJa c #4fbdcd", +".zm c #4fbde6", +".Id c #4fbde7", +".CJ c #4fbdf0", +"#m3 c #4fbdf2", +".KO c #4fbee8", +".KN c #4fbee9", +".zH c #4fbeef", +".zG c #4fbef0", +"#kf c #4fbef2", +"#km c #4fbfe0", +".M4 c #4fbfe9", +".KM c #4fbfea", +".Ps c #4fbfec", +".zJ c #4fbfef", +".zM c #4fbff0", +".7C c #4fbff2", +".Cw c #4fc0e9", +".Cz c #4fc0ea", +"#kd c #4fc0eb", +".Pr c #4fc0ec", +".9Z c #4fc0ed", +".wu c #4fc0ef", +".CK c #4fc0f0", +"aDB c #4fc0f1", +".90 c #4fc0f2", +"#ba c #4fc1e7", +".Jt c #4fc1e8", +".Cy c #4fc1ea", +".Cx c #4fc1eb", +".zq c #4fc1ec", +".Xu c #4fc1ed", +"#cE c #4fc1ee", +".CL c #4fc1f0", +"#Rn c #4fc1f2", +".u# c #4fc2e7", +".LH c #4fc2e9", +".D6 c #4fc2ea", +".GL c #4fc2eb", +"#Kc c #4fc2ec", +".Cv c #4fc2ed", +".H9 c #4fc2ee", +".Vx c #4fc2ef", +".CM c #4fc2f0", +"avG c #4fc2f1", +"afU c #4fc2f2", +"eX4 c #4fc3d2", +"eX6 c #4fc3d3", +".x0 c #4fc3ea", +".uI c #4fc3eb", +".uH c #4fc3ec", +".ux c #4fc3ed", +".uD c #4fc3ee", +".ZS c #4fc3ef", +".CN c #4fc3f0", +"#YF c #4fc3f1", +"aj4 c #4fc3f2", +".1S c #4fc4ea", +"#dz c #4fc4eb", +".uz c #4fc4ec", +".uv c #4fc4ed", +".xY c #4fc4ee", +".CW c #4fc4ef", +".CO c #4fc4f0", +"#UX c #4fc4f1", +"#UY c #4fc4f2", +"#n1 c #4fc5eb", +".uw c #4fc5ec", +".uo c #4fc5ed", +".up c #4fc5ee", +".CQ c #4fc5ef", +".CP c #4fc5f0", +"#US c #4fc5f1", +"#NK c #4fc5f2", +".PI c #4fc6ea", +".Zs c #4fc6eb", +".RJ c #4fc6ec", +".un c #4fc6ed", +".us c #4fc6ee", +".CR c #4fc6ef", +".CU c #4fc6f0", +".Pt c #4fc6f1", +"#p0 c #4fc6f2", +"#wf c #4fc6f3", +".No c #4fc7e9", +".PK c #4fc7ea", +".5o c #4fc7eb", +".A8 c #4fc7ec", +".um c #4fc7ed", +".Jo c #4fc7ee", +".CS c #4fc7ef", +".FD c #4fc7f0", +".Ii c #4fc7f1", +"aj5 c #4fc7f2", +"#zu c #4fc7f3", +".Ax c #4fc8e4", +".K9 c #4fc8e9", +".Nl c #4fc8ea", +".Nk c #4fc8eb", +".A7 c #4fc8ec", +".LI c #4fc8ed", +".Ng c #4fc8ee", +".Ni c #4fc8ef", +".KY c #4fc8f0", +".Ij c #4fc8f1", +"an2 c #4fc8f2", +"#Yw c #4fc8f5", +".PO c #4fc9e8", +".Zu c #4fc9e9", +".XD c #4fc9ea", +".D3 c #4fc9eb", +".TD c #4fc9ec", +".PF c #4fc9ed", +".K0 c #4fc9ee", +".Nh c #4fc9ef", +".KZ c #4fc9f0", +".RH c #4fc9f1", +".PT c #4fcade", +".Zt c #4fcae9", +".GI c #4fcaeb", +".5n c #4fcaec", +".Zp c #4fcaed", +".K1 c #4fcaee", +".Iu c #4fcaef", +".It c #4fcaf0", +".Vz c #4fcaf1", +".TI c #4fcbe8", +".D2 c #4fcbe9", +".KU c #4fcbef", +".Iv c #4fcbf0", +".Iq c #4fcbf1", +".RN c #4fcce7", +".XE c #4fcce8", +".Zv c #4fcce9", +".In c #4fccee", +".Io c #4fccef", +".FL c #4fccf0", +".KV c #4fccf1", +".VI c #4fcde7", +".A5 c #4fcde9", +".Ns c #4fcee6", +".Lp c #4fcee8", +".I5 c #4fceea", +".Dr c #4fd0e9", +".NH c #4fd2e8", +".3w c #4fd3e7", +".UZ c #502616", +"c8j c #504945", +"cK7 c #504c4a", +"Qtp c #505050", +"cPk c #505252", +"cKO c #506f80", +"cYK c #507585", +".Fo c #50a5c4", +"eOg c #50b1bd", +"#f. c #50b4d8", +"ark c #50b7db", +".Jk c #50bada", +"arT c #50bae1", +".I4 c #50bbd4", +".Qf c #50bbda", +"arU c #50bbe3", +".Ig c #50bbf0", +".KQ c #50bbf1", +".Xv c #50bbf2", +".If c #50bcf0", +".Fx c #50bcf1", +".M6 c #50bcf2", +".CI c #50bdf0", +".CH c #50bdf1", +".Ie c #50bdf2", +"#le c #50bee2", +"arQ c #50bee8", +"#s9 c #50bee9", +".zI c #50beef", +".zL c #50bef0", +".Fy c #50bef1", +".KP c #50bef2", +"#t. c #50bfe9", +"#m1 c #50bfea", +".zN c #50bfef", +".zK c #50bff0", +".KR c #50bff1", +".M5 c #50bff2", +"#CY c #50c0e9", +"#kc c #50c0ea", +"#cF c #50c0eb", +".1i c #50c0ec", +"#cG c #50c0ed", +".wt c #50c0ef", +".Fz c #50c0f0", +".RF c #50c0f1", +".Zn c #50c0f2", +"#cD c #50c1ea", +"#zv c #50c1eb", +".7B c #50c1ec", +".Zm c #50c1ed", +".wv c #50c1ee", +".ww c #50c1ef", +".FA c #50c1f0", +".TA c #50c1f1", +".5m c #50c1f2", +"eX3 c #50c2d1", +".LK c #50c2e8", +".Js c #50c2e9", +".N3 c #50c2ea", +".RE c #50c2eb", +".Qh c #50c2ec", +".1h c #50c2ed", +".LJ c #50c2ee", +".wx c #50c2ef", +".FB c #50c2f0", +".Vy c #50c2f1", +"#C2 c #50c2f2", +".Sc c #50c3ea", +".GK c #50c3eb", +".uG c #50c3ec", +".uE c #50c3ed", +".uu c #50c3ee", +".zO c #50c3ef", +".FC c #50c3f0", +".RG c #50c3f1", +"#Ro c #50c3f2", +"eTb c #50c4d5", +"#xk c #50c4ea", +".T9 c #50c4eb", +".uy c #50c4ec", +".uC c #50c4ed", +".ut c #50c4ee", +".xX c #50c4ef", +".zP c #50c4f0", +".M7 c #50c4f1", +"#Kh c #50c4f2", +"eX7 c #50c5d6", +".uB c #50c5eb", +".uA c #50c5ec", +".uF c #50c5ed", +".xW c #50c5ee", +".uq c #50c5ef", +".zR c #50c5f0", +".KS c #50c5f1", +"#zz c #50c5f2", +"#AI c #50c6ea", +"#Ea c #50c6eb", +".K6 c #50c6ec", +".A9 c #50c6ed", +".zT c #50c6ee", +".ur c #50c6ef", +".CV c #50c6f0", +".Ih c #50c6f1", +"#wj c #50c6f2", +".PU c #50c7d8", +".TH c #50c7e9", +".PJ c #50c7ea", +".VF c #50c7eb", +".ul c #50c7ec", +".K4 c #50c7ed", +".zU c #50c7ee", +".CT c #50c7ef", +".z1 c #50c7f0", +".FF c #50c7f1", +"#p3 c #50c7f2", +".L# c #50c8e9", +".K7 c #50c8ea", +".uk c #50c8eb", +".Jm c #50c8ec", +".K3 c #50c8ed", +"#td c #50c8ee", +"#fc c #50c8ef", +".FE c #50c8f0", +".Ik c #50c8f1", +"avX c #50c8f2", +".Np c #50c9e8", +".L. c #50c9e9", +".xV c #50c9ea", +".GH c #50c9eb", +".IA c #50c9ec", +".K2 c #50c9ed", +".zX c #50c9ee", +"#ai c #50c9ef", +".M9 c #50c9f0", +".M8 c #50c9f1", +".Go c #50cae6", +".1n c #50cae8", +".5p c #50cae9", +".xU c #50caea", +".3l c #50caec", +".Iw c #50caed", +".FJ c #50caee", +".C0 c #50caef", +".VA c #50caf0", +".N# c #50caf1", +".Nq c #50cbe6", +".La c #50cbe7", +".1o c #50cbe8", +".C2 c #50cbee", +".C1 c #50cbef", +".Ip c #50cbf0", +".Is c #50cbf1", +".PP c #50cce7", +".TJ c #50cce8", +".A6 c #50cce9", +".C3 c #50ccee", +".wQ c #50ccef", +".FM c #50ccf0", +".Ir c #50ccf1", +".PQ c #50cde6", +".Nr c #50cde7", +".PS c #50cde8", +".A4 c #50cde9", +".C4 c #50cdef", +".Aw c #50cee4", +".PR c #50cee5", +".Nu c #50cee6", +".xQ c #50cee7", +".xS c #50cee8", +"#E# c #50cee9", +".F8 c #50cfe2", +".Nt c #50cfe5", +".xi c #50cfe6", +".xR c #50cfe7", +".RO c #50d0e5", +".VJ c #50d0e6", +".RP c #50d0e7", +".Lq c #50d0e8", +".tD c #50d1e4", +".NG c #50d1e6", +".RQ c #50d1e8", +".3v c #50d2e5", +".5D c #50d2e6", +".RR c #50d2e8", +".bm c #51344e", +"cKS c #51443d", +"Qtl c #515151", +"cGz c #51788f", +".kY c #518a9a", +".pf c #518fde", +".GE c #519194", +".1g c #5197af", +"#am c #519aa6", +"a3s c #519bab", +".DH c #51a1ad", +"#.T c #51a7c3", +".Ty c #51b2d5", +"eSX c #51b9c7", +"#hC c #51bbe0", +"#tb c #51bcf2", +"#zw c #51bde7", +"#ta c #51bdf2", +"eJ# c #51becd", +"#wg c #51bee8", +"#CU c #51bee9", +"#p2 c #51bef2", +"eNW c #51bfcd", +"#YB c #51bfe8", +"#NM c #51bfe9", +"#Ri c #51bfea", +"#ah c #51bff2", +"#5L c #51c0e8", +"#5J c #51c0e9", +"#UT c #51c0ea", +"arR c #51c0eb", +"abF c #51c0ed", +"aDz c #51c0f1", +"#fb c #51c0f2", +".Sa c #51c1e2", +"#17 c #51c1e9", +"#9F c #51c1ea", +"#m0 c #51c1eb", +"#5R c #51c1ec", +"#2b c #51c1ed", +".wz c #51c1ee", +".wy c #51c1ef", +"aDy c #51c1f1", +"#hD c #51c1f2", +"#AJ c #51c2e7", +"an0 c #51c2eb", +"azq c #51c2ec", +"#2a c #51c2ed", +".wA c #51c2ee", +".wB c #51c2ef", +"aHS c #51c2f0", +"aDx c #51c2f1", +".Jp c #51c3ec", +".Jr c #51c3ed", +".ss c #51c3ee", +".wD c #51c3ef", +"aL5 c #51c3f0", +"arV c #51c3f2", +"eX5 c #51c4d3", +".Qi c #51c4ea", +".X2 c #51c4eb", +".N0 c #51c4ec", +".Jq c #51c4ed", +".st c #51c4ee", +".sr c #51c4ef", +"aL7 c #51c4f0", +"avT c #51c4f1", +"arW c #51c4f2", +".Jl c #51c5ea", +".V6 c #51c5eb", +".N1 c #51c5ec", +".N2 c #51c5ed", +".su c #51c5ee", +".X1 c #51c5ef", +".zQ c #51c5f0", +"aQm c #51c5f1", +"arX c #51c5f2", +"#HK c #51c6e9", +".xN c #51c6eb", +".D0 c #51c6ec", +".sv c #51c6ed", +".sw c #51c6ee", +".wG c #51c6ef", +".zS c #51c6f0", +"aYS c #51c6f1", +"arY c #51c6f2", +"#hF c #51c7e9", +".K8 c #51c7ea", +".IC c #51c7eb", +".A3 c #51c7ec", +".DY c #51c7ed", +".Qg c #51c7ee", +".CX c #51c7ef", +".z2 c #51c7f0", +".Il c #51c7f1", +"avW c #51c7f2", +".IE c #51c8e9", +".ID c #51c8ea", +".IB c #51c8eb", +".Iy c #51c8ec", +".K5 c #51c8ed", +".zV c #51c8ee", +".zZ c #51c8ef", +".z0 c #51c8f0", +".N. c #51c8f1", +".IH c #51c9e8", +".IG c #51c9e9", +".uj c #51c9ea", +".Ix c #51c9eb", +".Iz c #51c9ec", +".zW c #51c9ee", +".zY c #51c9ef", +".FG c #51c9f0", +".KT c #51c9f1", +".II c #51cae7", +".ui c #51cae8", +".xP c #51caea", +"#ki c #51caeb", +".FO c #51caec", +".FQ c #51caed", +".CZ c #51caee", +".FI c #51caef", +".Na c #51caf0", +"azU c #51caf1", +".5q c #51cbe7", +".3z c #51cbe8", +"#m4 c #51cbec", +".FR c #51cbed", +".CY c #51cbee", +".wN c #51cbef", +".F5 c #51cce6", +".uh c #51cce7", +".xT c #51cce8", +".z9 c #51ccee", +".sW c #51ccef", +".FK c #51ccf0", +".IJ c #51cde6", +".ug c #51cde7", +".1w c #51cde8", +".C6 c #51cded", +".A. c #51cdee", +".sX c #51cdef", +".FN c #51cdf0", +".xh c #51cee5", +".uf c #51cee6", +".TK c #51cee7", +".VK c #51cee8", +".wR c #51ceef", +".5C c #51cfe0", +".5B c #51cfe4", +".tI c #51cfe5", +".tH c #51cfe6", +".tJ c #51cfe7", +".Av c #51d0e4", +".Do c #51d0e5", +".ue c #51d0e6", +".xe c #51d1e4", +".tE c #51d1e5", +".Dq c #51d1e6", +".Au c #51d2e3", +".xf c #51d2e4", +".1v c #51d2e5", +".I6 c #51d2e6", +".5K c #51d3e6", +".5J c #51d4e8", +".o3 c #51fffd", +".S2 c #522816", +".WV c #522a17", +".Q7 c #522a18", +".UY c #522d1d", +".aT c #52324f", +".a3 c #523756", +"c3e c #524238", +"cYu c #52433b", +"QtO c #524747", +"cYh c #52514e", +"Qti c #525252", +"cTr c #525350", +"cTZ c #525e63", +".N7 c #526a68", +"ctF c #527b90", +"ajD c #528593", +"cCf c #5287a4", +".A0 c #529499", +".u. c #529797", +".Qk c #5297ac", +"#ro c #5298aa", +"#rn c #529baf", +"#rm c #52a0b7", +"cC. c #52a9c9", +"#E. c #52aab8", +".Vw c #52aac9", +"aU9 c #52adc5", +".8w c #52b5d5", +"cg6 c #52b8db", +".N5 c #52b9da", +"#CX c #52bce7", +"#C1 c #52bcf2", +"#CW c #52bde7", +"#Ka c #52bde8", +"#GA c #52bdf2", +"#Va c #52bedd", +"azv c #52bee2", +"#18 c #52bee7", +"#Kb c #52bee8", +"#zy c #52bef2", +"#5N c #52bfe7", +"#YA c #52bfe8", +"#Gs c #52bfe9", +"#wi c #52bff2", +"#Eb c #52c0e4", +"abt c #52c0e8", +"#Yx c #52c0e9", +"#9G c #52c0ea", +"#9H c #52c0eb", +"abE c #52c0ec", +"afL c #52c0ed", +"#fa c #52c0f2", +".Qj c #52c1e6", +"#5K c #52c1ea", +"arP c #52c1eb", +"afT c #52c1ec", +"#9O c #52c1ed", +"#5S c #52c1ee", +"aDA c #52c1f1", +"#hE c #52c1f2", +"#HJ c #52c2d3", +".LL c #52c2e7", +"an1 c #52c2eb", +"aj1 c #52c2ec", +"#5P c #52c2ed", +"#5Q c #52c2ee", +"aHR c #52c2f0", +"aDw c #52c2f1", +"eTc c #52c3d2", +"eX2 c #52c3d3", +".N4 c #52c3e9", +"#dA c #52c3ec", +"#dB c #52c3ed", +".wC c #52c3ef", +"aL6 c #52c3f0", +"aL4 c #52c3f1", +"avU c #52c3f2", +".ZV c #52c4ea", +".T8 c #52c4eb", +".T7 c #52c4ec", +".sz c #52c4ed", +".6b c #52c4ee", +"azN c #52c4ef", +"azO c #52c4f0", +"azP c #52c4f1", +"azR c #52c4f2", +"e2H c #52c5d4", +".1U c #52c5eb", +".T6 c #52c5ec", +".V7 c #52c5ed", +".sx c #52c5ee", +".wE c #52c5ef", +"aUA c #52c5f1", +"azQ c #52c5f2", +"#tl c #52c6e8", +".xM c #52c6ea", +".DZ c #52c6eb", +"#g. c #52c6ec", +".xO c #52c6ed", +".sy c #52c6ee", +".wF c #52c6ef", +"aYR c #52c6f1", +"avV c #52c6f2", +"#fd c #52c7e9", +".A1 c #52c7eb", +".ub c #52c7ec", +".GG c #52c7ed", +".Sb c #52c7ee", +".wH c #52c7ef", +"aEb c #52c7f1", +"#kk c #52c8e7", +".FY c #52c8ea", +".D1 c #52c8eb", +".FV c #52c8ec", +".Im c #52c8ed", +".wI c #52c8ee", +".wJ c #52c8ef", +".z3 c #52c8f0", +"azT c #52c8f1", +"e2L c #52c9d9", +".IF c #52c9e8", +".FZ c #52c9e9", +".uc c #52c9ea", +".FX c #52c9eb", +".FW c #52c9ec", +".FH c #52c9ed", +".wK c #52c9ee", +".z6 c #52c9ef", +".z5 c #52c9f0", +".6a c #52c9f1", +".F4 c #52cae6", +".7F c #52cae8", +".F1 c #52cae9", +".FU c #52caea", +".C8 c #52caeb", +".FP c #52caec", +"#wk c #52caed", +".wO c #52caee", +".wL c #52caef", +".z4 c #52caf0", +".Dh c #52cbe9", +".Dg c #52cbea", +".Dc c #52cbeb", +".D# c #52cbec", +".sT c #52cbed", +".sP c #52cbee", +".wM c #52cbef", +".F6 c #52cce6", +".C7 c #52ccec", +".C5 c #52cced", +".sS c #52ccee", +".sQ c #52ccef", +".IK c #52cde5", +".F7 c #52cde6", +".TL c #52cde7", +".A# c #52cded", +".s0 c #52cdee", +".sY c #52cdef", +".Dn c #52cee6", +".ud c #52cee7", +".Ac c #52ceed", +".wS c #52ceee", +".wT c #52ceef", +".1p c #52cfe4", +".IL c #52cfe5", +".RS c #52cfe6", +".IM c #52d0e4", +".tG c #52d0e5", +".At c #52d0e6", +".3u c #52d1e3", +".tC c #52d1e4", +".IN c #52d1e5", +".Dp c #52d2e3", +".tF c #52d2e4", +".xg c #52d2e5", +"cw6 c #53200f", +"#5j c #532817", +".U1 c #532b1a", +"c28 c #53453c", +"QtX c #534848", +".aZ c #535353", +"cTX c #536776", +"cGA c #536c7a", +"#Rh c #537a85", +".6. c #537c7d", +"cTz c #53879c", +"cO1 c #538ba3", +".oh c #5393e6", +"a3w c #53949a", +".oN c #5395e9", +"#rp c #5396a7", +"aZk c #5399a0", +"cOY c #539ab6", +"aU2 c #539ba1", +"#kn c #539eaa", +"#rl c #53a4bc", +"ctP c #53a7c7", +"#rk c #53aac3", +".Gn c #53adbe", +"a7v c #53b7d6", +"aHU c #53b9e2", +".Gq c #53bac6", +"#CV c #53bae4", +".PW c #53bcc9", +"#NL c #53bce6", +"#Rj c #53bce7", +"#Gz c #53bcf2", +"#Gu c #53bde7", +"#Gy c #53bdf2", +"afx c #53bee5", +"#Yy c #53bee7", +"#C0 c #53bef2", +"#5M c #53bfe6", +"abu c #53bfe7", +"#Yz c #53bfe8", +"#zx c #53bff2", +"abv c #53c0e9", +"anA c #53c0ea", +"aj2 c #53c0ec", +"aj0 c #53c0ed", +"#t# c #53c0f2", +"avb c #53c1e8", +"afw c #53c1ea", +"arO c #53c1eb", +"abD c #53c1ec", +"abM c #53c1ed", +"abN c #53c1ee", +"#5T c #53c1ef", +"#m2 c #53c1f2", +".PZ c #53c2d3", +".LM c #53c2e7", +"aj3 c #53c2eb", +"abO c #53c2ec", +"#9I c #53c2ed", +"#9P c #53c2ee", +"#9Q c #53c2ef", +"eX1 c #53c3d2", +"#hH c #53c3e0", +"a7g c #53c3e8", +"#li c #53c3ea", +"aIn c #53c3ec", +"azM c #53c3ed", +"aHQ c #53c3f0", +"aQl c #53c3f1", +"eX0 c #53c4d2", +"#GK c #53c4e6", +".6f c #53c4ea", +".1V c #53c4eb", +".ZW c #53c4ec", +".1T c #53c4ed", +"aD6 c #53c4f0", +"aL3 c #53c4f1", +"azS c #53c4f2", +"#C9 c #53c5e5", +".ZU c #53c5eb", +".ZT c #53c5ec", +".6c c #53c5ed", +"aQk c #53c5f1", +"aE. c #53c5f2", +"e2K c #53c6d5", +"#zO c #53c6e8", +".U. c #53c6eb", +"#.Q c #53c6ec", +"#.P c #53c6ed", +".sA c #53c6ee", +"a7e c #53c6f0", +"aYQ c #53c6f1", +"aE# c #53c6f2", +"#Kr c #53c7e7", +"#kl c #53c7e8", +".ua c #53c7eb", +".A2 c #53c7ec", +"#n3 c #53c7ed", +".sB c #53c7ee", +".6d c #53c7ef", +"a7f c #53c7f0", +"aEa c #53c7f2", +"#fe c #53c8e8", +".5O c #53c8ea", +"#iz c #53c8ec", +".sC c #53c8ee", +".3W c #53c8ef", +".6e c #53c8f0", +"aEc c #53c8f1", +".F3 c #53c9e7", +".F2 c #53c9e8", +"#kj c #53c9e9", +".FS c #53c9ec", +"#GB c #53c9ed", +".sD c #53c9ee", +"azV c #53c9ef", +"aID c #53c9f0", +"aEd c #53c9f1", +".xj c #53cae6", +".Di c #53cae8", +".F0 c #53cae9", +"#m6 c #53caea", +"#m5 c #53caeb", +".FT c #53caec", +"#zB c #53caed", +".z7 c #53caee", +".z8 c #53caef", +".Dj c #53cbe7", +".Ar c #53cbe8", +".Ap c #53cbe9", +".Dd c #53cbea", +".Da c #53cbeb", +".Db c #53cbec", +".sU c #53cbed", +".sN c #53cbee", +".sV c #53cbef", +"e2M c #53ccde", +".3m c #53cce4", +".Dk c #53cce7", +".Df c #53cce9", +".D. c #53cceb", +".C9 c #53ccec", +".wP c #53cced", +".sO c #53ccee", +".sR c #53ccef", +".Dl c #53cde6", +".Dm c #53cde7", +".Ad c #53cdeb", +".Aa c #53cdec", +".wU c #53cded", +".s1 c #53cdee", +".sZ c #53cdef", +".As c #53cee7", +".wV c #53ceed", +".Ab c #53ceee", +".1q c #53cfe3", +".xd c #53cfe6", +".1r c #53d0e3", +".tB c #53d0e5", +".1s c #53d1e3", +".Gp c #53d2e8", +"bs8 c #542a18", +".EZ c #542a19", +"#vV c #542b17", +".B1 c #542b19", +"#Uw c #542b1a", +"bxc c #542d19", +".4P c #542e1c", +"cGF c #54443c", +".mJ c #54502d", +".## c #545050", +"Qtx c #545454", +".ZQ c #547f82", +"cTA c #54869b", +".M2 c #548da0", +".m7 c #5491dc", +"cOZ c #5493ac", +".oO c #5494e8", +".oM c #5495e9", +".of c #5495ea", +"a7u c #5499a1", +"#rj c #54adc8", +"#ri c #54b0cc", +"#rh c #54b1ce", +"cGj c #54b4d1", +"#Lq c #54b4d2", +"#rf c #54b4d3", +"#HL c #54b6d4", +".Sd c #54b7d7", +"#Ec c #54b8d7", +"aD2 c #54b8da", +"cg7 c #54b9de", +".PX c #54bac5", +"#re c #54badb", +"#Gt c #54bae5", +"#Ks c #54bbd9", +"#rd c #54bbde", +"#K# c #54bbe5", +"ayZ c #54bcdf", +"#AK c #54bdde", +"aZq c #54bde1", +"aL8 c #54bde6", +"aHT c #54bde8", +"abL c #54bdf2", +"#bf c #54bee1", +"azA c #54bee4", +"aQn c #54bee8", +"#Kg c #54bef2", +"#AH c #54bfe1", +"afy c #54bfe6", +"afz c #54bfe7", +"#Gx c #54bff2", +".PV c #54c0cc", +"eJ. c #54c0ce", +"#cM c #54c0e3", +"azL c #54c0e8", +"arl c #54c0e9", +"aby c #54c0ea", +"#CZ c #54c0f2", +"abw c #54c1e9", +"abC c #54c1ec", +"afM c #54c1ed", +"aDv c #54c1f1", +"#p1 c #54c1f2", +"aME c #54c2e9", +"#Ke c #54c2f2", +"#NW c #54c3e3", +"#ll c #54c3e8", +"#lk c #54c3e9", +"#lj c #54c3ea", +"aQW c #54c3eb", +"aHP c #54c3f0", +"aDu c #54c3f1", +"#UW c #54c3f2", +".DI c #54c4da", +"#RB c #54c4e4", +"#zM c #54c4e5", +"#oa c #54c4e9", +"#iD c #54c4ea", +"#lh c #54c4eb", +"aD3 c #54c4ec", +"aD4 c #54c4ed", +"aD7 c #54c4f0", +"azo c #54c4f1", +"aD8 c #54c4f2", +"#ws c #54c5e5", +"#D. c #54c5e6", +"#iC c #54c5ea", +"#.R c #54c5eb", +"#g# c #54c5ec", +"aD5 c #54c5ee", +"aQj c #54c5f1", +"aD9 c #54c5f2", +"#Kq c #54c6e6", +"#wt c #54c6e7", +".8u c #54c6eb", +"#iB c #54c6ec", +"a7d c #54c6f0", +"aIz c #54c6f1", +"aIy c #54c6f2", +".Lo c #54c7d7", +"#p9 c #54c7e9", +"#n4 c #54c7ec", +"#2c c #54c7ee", +"aIB c #54c7f0", +"aIA c #54c7f1", +"#hG c #54c8e8", +"#n2 c #54c8ec", +"#UZ c #54c8ed", +".8v c #54c8ee", +"aMW c #54c8ef", +"aIC c #54c8f0", +"#iA c #54c9ec", +"#GC c #54c9ed", +".sE c #54c9ee", +"b#A c #54c9f0", +"#m7 c #54caea", +".sF c #54caee", +"aEe c #54caef", +".Ao c #54cbe9", +".De c #54cbea", +"#p4 c #54cbeb", +"#zC c #54cbed", +".sG c #54cbee", +"aIE c #54cbef", +"#Lp c #54cce1", +".5r c #54cce5", +".Aq c #54cce8", +".An c #54cce9", +".Al c #54ccea", +".Ah c #54cceb", +"#te c #54ccec", +".sH c #54cced", +".sM c #54ccee", +".xc c #54cde8", +".Am c #54cde9", +".Ag c #54cdeb", +".Af c #54cdec", +".sI c #54cded", +".sL c #54cdee", +".Ai c #54ceeb", +".Ae c #54ceec", +".sJ c #54ceed", +".sK c #54ceee", +".wW c #54cfed", +".5N c #54d0e3", +".1t c #54d1e3", +".1u c #54d2e2", +".74 c #54d2e4", +"a9g c #552312", +"bxh c #552314", +"bbC c #552413", +".OR c #552a18", +"#Q0 c #552b18", +".HB c #552b19", +"#1M c #552b1a", +"#1L c #552c1a", +"#eH c #552d19", +"#JP c #552d1a", +"#Y. c #552d1b", +".67 c #552e1b", +".Q6 c #552f1a", +".YN c #55301f", +".#K c #555555", +"cO7 c #557e91", +"#Vb c #55828b", +".pg c #5594e1", +".oe c #5595e9", +".oL c #5596e9", +"aQN c #55999b", +"bnB c #559cac", +"ctG c #55a0c1", +"aZo c #55a1b1", +"bD6 c #55a5b4", +"aU3 c #55a5b5", +"aD1 c #55a5b6", +".T5 c #55a6b8", +".G. c #55a8ae", +".Ay c #55acb3", +"#rg c #55afcc", +"aIl c #55b0c9", +"ccC c #55b1d2", +"eOe c #55b4c0", +"eOd c #55b5c0", +"#GM c #55b5cf", +"avR c #55b5d1", +"cpj c #55b7dd", +".PY c #55b8c4", +"ctz c #55badb", +"aL9 c #55badc", +"eNR c #55bbc8", +"aUB c #55bbe0", +".3X c #55bcdd", +"#rc c #55bde0", +"#rb c #55bee0", +"#2# c #55bef2", +"eEh c #55bfcd", +"#ra c #55bfe1", +"#YE c #55bff2", +"e62 c #55c0ce", +"aIm c #55c0e6", +"afA c #55c0e8", +"abx c #55c0e9", +"ajS c #55c0eb", +"#Gw c #55c0f2", +"#r# c #55c1e4", +"avH c #55c1e6", +"aMD c #55c1e7", +"avc c #55c1ea", +"afI c #55c1eb", +"afK c #55c1ec", +"ajU c #55c1ed", +"#wh c #55c1f2", +"#Kf c #55c2f2", +"#zN c #55c3e3", +".X3 c #55c3e7", +"#lm c #55c3e8", +"aMF c #55c3eb", +"aDt c #55c3f0", +"azn c #55c3f1", +"#Rm c #55c3f2", +"#wr c #55c4e4", +"#an c #55c4e8", +"#iF c #55c4e9", +"#iE c #55c4ea", +"aMG c #55c4ec", +"aIo c #55c4ed", +"aHO c #55c4f0", +"aL2 c #55c4f1", +"#wq c #55c5e4", +"#tk c #55c5e5", +"#lg c #55c5ea", +"aIp c #55c5ed", +"aIw c #55c5f1", +"aIx c #55c5f2", +"#zL c #55c6e4", +"#GL c #55c6e6", +".1W c #55c6e9", +"#dC c #55c6ea", +"#bc c #55c6eb", +"#be c #55c6ec", +"aIq c #55c6ee", +"aIr c #55c6f0", +"aQi c #55c6f1", +"aIv c #55c6f2", +"#m9 c #55c7e5", +"#n. c #55c7e8", +"#n6 c #55c7eb", +"#n5 c #55c7ec", +"aMU c #55c7ef", +"aMS c #55c7f0", +"aMR c #55c7f1", +"#q2 c #55c8eb", +"#q3 c #55c8ec", +"#Rp c #55c8ed", +"aR. c #55c8ee", +"aMV c #55c8ef", +"a7c c #55c8f0", +"aYP c #55c8f1", +"aRa c #55c9ef", +"#.S c #55c9f0", +"#zD c #55caeb", +"#C3 c #55caed", +"aIF c #55caee", +"aRb c #55caef", +"b#B c #55caf0", +".w8 c #55cbe9", +"#lf c #55cbeb", +"aEf c #55cbee", +"#xl c #55cbef", +".w9 c #55cce8", +".w6 c #55cce9", +".Ak c #55ccea", +"#tf c #55cceb", +".xa c #55cde7", +".xb c #55cde8", +".w7 c #55cde9", +".Aj c #55cdeb", +".wZ c #55cded", +".tA c #55cee6", +".wY c #55ceeb", +".w0 c #55ceec", +".wX c #55ceed", +".3y c #55cfe3", +".w2 c #55cfea", +".w1 c #55cfeb", +".s2 c #55cfec", +".s5 c #55cfed", +".73 c #55d1e2", +"g#U c #55dced", +".qo c #55fdfd", +".Mw c #562a18", +".UM c #562c18", +".S3 c #562d19", +"#Cu c #562d1a", +"#Ya c #562d1b", +"#F5 c #562e1b", +".Q8 c #562e1c", +".S4 c #562f1c", +".YM c #56301c", +"#e9 c #564136", +".fO c #564249", +"#cB c #56463e", +"cTT c #564b45", +".#. c #564b4b", +"cK8 c #564d47", +"dgq c #56504b", +"cTH c #56534e", +".bV c #565656", +"cYi c #565a59", +".r8 c #567761", +"cTV c #567886", +".XZ c #567f80", +"#rq c #56919d", +"#NY c #5692a0", +"bnC c #56959a", +".od c #5697e8", +".og c #5698ee", +".LG c #569a9e", +"#Da c #569cad", +".V5 c #56a1b3", +".Pn c #56a3bc", +"#RC c #56a7bc", +"bIQ c #56a8ba", +"#Ed c #56acc4", +"#D# c #56adc3", +"#OW c #56aec8", +".1y c #56b1c8", +"cB2 c #56b9d5", +"avS c #56bcdd", +"eSW c #56bdcb", +".5P c #56bedb", +"ajE c #56bee5", +"abK c #56bff2", +"eJc c #56c0ce", +"afB c #56c0e9", +"ave c #56c0ea", +"#Gv c #56c0f2", +"anB c #56c1e8", +"avd c #56c1ea", +"ajR c #56c1eb", +"afH c #56c1ec", +"#Kd c #56c1f2", +"#od c #56c2e5", +"#oc c #56c2e6", +"avL c #56c2e8", +"afJ c #56c2eb", +"anQ c #56c2ec", +"ajT c #56c2ed", +"#NN c #56c2f2", +".5I c #56c3d1", +"#ln c #56c3e7", +"#ob c #56c3e8", +"aCR c #56c3eb", +"anU c #56c3ed", +"aDs c #56c3f0", +"azm c #56c3f1", +"#Rl c #56c3f2", +".NF c #56c4d0", +"eS5 c #56c4d3", +"#tj c #56c4e4", +"#iG c #56c4e8", +"#o# c #56c4e9", +"aQX c #56c4ec", +"aDr c #56c4f0", +"azp c #56c4f1", +"avF c #56c4f2", +"#p8 c #56c5e4", +"#dD c #56c5e9", +"#bd c #56c5ea", +"aMH c #56c5ed", +"aL1 c #56c5f1", +"aIu c #56c5f2", +"e2G c #56c6d5", +"#ga c #56c6e9", +"aMI c #56c6ed", +"aIs c #56c6f1", +"aIt c #56c6f2", +"#n7 c #56c7ea", +"aMT c #56c7f0", +"aMP c #56c7f1", +"#m8 c #56c8e5", +"#q4 c #56c8eb", +"#Rq c #56c8ed", +"aR# c #56c8ee", +"aQ9 c #56c8ef", +"aQ8 c #56c8f0", +"aQ7 c #56c8f1", +"#p5 c #56c9e7", +"#ud c #56c9eb", +"#Ki c #56c9ec", +"aVs c #56c9ee", +"aZE c #56c9ef", +"b#z c #56c9f0", +"bd1 c #56c9f2", +".7W c #56cad8", +".7G c #56cae4", +"#zE c #56caea", +"#tg c #56caeb", +"aVv c #56caef", +"b#y c #56caf0", +".x# c #56cbe8", +"#wl c #56cbeb", +"#GD c #56cbec", +"aVw c #56cbed", +"aVu c #56cbef", +".x. c #56cce7", +".ts c #56cce8", +".tn c #56cce9", +"aZN c #56ccee", +".tv c #56cde7", +".tw c #56cde8", +".tp c #56cde9", +".w5 c #56cdea", +".w3 c #56cdeb", +".tz c #56cee7", +".ty c #56cee8", +".tx c #56cee9", +".te c #56ceeb", +".s6 c #56ceec", +".w4 c #56cfeb", +".tb c #56cfec", +".s7 c #56cfed", +".s9 c #56d0eb", +".s3 c #56d0ec", +".s4 c #56d0ed", +".75 c #56d1e1", +".3t c #56d1e2", +"csJ c #572211", +"afa c #572c17", +".SP c #572c18", +".yJ c #572e1b", +".Kh c #572e1c", +"#y7 c #572f1b", +"#Nk c #572f1c", +".E0 c #572f1d", +"bPw c #57311c", +".HE c #573221", +"c7V c #57453a", +"cPb c #574a42", +"c29 c #574d46", +"c3. c #574f49", +"dbj c #57534e", +".#q c #575353", +".at c #575757", +"c3x c #575c5d", +"cP# c #575e60", +".rw c #576644", +"#ag c #57676a", +"cK6 c #576971", +"#cL c #577c75", +"cKM c #578ba2", +".pH c #5798e8", +".pe c #5798e9", +".nH c #5798eb", +"ava c #57a1b7", +"#ur c #57a5bc", +".8x c #57a7bc", +"#HM c #57a8be", +"#NX c #57aabf", +"ccy c #57aacc", +"#uq c #57acc7", +"a3b c #57b3c9", +"#up c #57b6d4", +"#fl c #57b7d1", +"azK c #57b8d7", +"#uo c #57bfe2", +"#og c #57c0e2", +"ajF c #57c0e7", +"abz c #57c0eb", +"abJ c #57c0f2", +"#of c #57c1e4", +"arm c #57c1e9", +"abB c #57c1ec", +"#9N c #57c1f2", +"e63 c #57c2cf", +"e61 c #57c2d0", +"#oe c #57c2e5", +"anR c #57c2ed", +"#UV c #57c2f2", +".V8 c #57c3e4", +"#lp c #57c3e6", +"#lo c #57c3e7", +"azl c #57c3f1", +"#Rk c #57c3f2", +".93 c #57c4e5", +"#iI c #57c4e7", +"#iH c #57c4e8", +"aDq c #57c4f0", +"#9M c #57c4f2", +"#ti c #57c5e3", +"#gb c #57c5e8", +"#dE c #57c5e9", +"aMJ c #57c5ed", +"aHN c #57c5f0", +"aMK c #57c6ee", +"aHM c #57c6f1", +"aMQ c #57c6f2", +"#NV c #57c7e6", +"#n9 c #57c7e9", +"#n8 c #57c7ea", +"aMM c #57c7f0", +"aL0 c #57c7f1", +"aMO c #57c7f2", +"#q5 c #57c8ea", +"a7b c #57c8f0", +"aQ6 c #57c8f1", +"aMN c #57c8f2", +"#NP c #57c9ec", +"aZF c #57c9ee", +"aVr c #57c9ef", +"aVp c #57c9f0", +"a2X c #57c9f1", +"bd0 c #57c9f2", +"#th c #57cae9", +"#C4 c #57caec", +"aZJ c #57caee", +"aVt c #57caef", +"b#x c #57caf0", +"b#w c #57caf1", +"#zF c #57cbea", +"#wm c #57cbeb", +"a31 c #57cbee", +"aZL c #57cbef", +"be# c #57cbf0", +".3n c #57cce0", +".tu c #57cce6", +".tt c #57cce7", +"aZM c #57ccee", +"bd6 c #57ccf1", +"bd5 c #57ccf2", +"fWD c #57cdda", +".tr c #57cde8", +".to c #57cde9", +".th c #57cdeb", +".tf c #57cdec", +".tq c #57cee7", +".ti c #57cee9", +".tm c #57ceea", +".tc c #57ceec", +".td c #57cfeb", +".ta c #57cfec", +".t# c #57cfed", +".t. c #57d0eb", +".tg c #57d0ec", +".s8 c #57d0ed", +".5L c #57d1e1", +".5E c #57d4e5", +"g#V c #57deec", +"f8N c #57deee", +"fIU c #57deef", +"fIT c #57dfef", +".pu c #57fffc", +"bg. c #581f10", +"dWG c #58221b", +".#c c #582558", +"#JM c #582d19", +"#ha c #582e1a", +".Kg c #582e1c", +"#QV c #582f1c", +"ajp c #582f1d", +"#jO c #58301a", +"#F8 c #58301b", +".U0 c #58301c", +".yT c #58301d", +"#5k c #58311b", +"#sI c #58311c", +"#Uu c #58311d", +".vC c #58321c", +".0L c #583522", +"cYg c #584d46", +"c3# c #58524e", +"c3a c #585552", +".cw c #585858", +"dlf c #585f5d", +"cK0 c #586970", +".Ct c #587e87", +".KK c #58808a", +"#ix c #58888c", +"#rr c #588a92", +"cO0 c #588da4", +"#uc c #588f9b", +"#f8 c #58939d", +".xK c #589592", +"ctD c #5895b1", +"brQ c #58969a", +"beb c #589798", +".nG c #5898e8", +".pG c #5899e8", +".nI c #589af1", +".AM c #589b97", +"aIk c #589b9f", +"cx2 c #589ebe", +"#us c #589fb3", +"cOX c #58a0b9", +"b#P c #58a4b0", +"bzH c #58a7b5", +"aCQ c #58a7c0", +".Nw c #58acad", +"cKA c #58acc7", +".DJ c #58b3ba", +"#AL c #58b3cd", +"eOf c #58b6c1", +"aDQ c #58b6cf", +"a3y c #58b7d4", +".Ju c #58b8d4", +"aQo c #58badb", +"eNS c #58bdca", +"#oi c #58bddd", +"#oh c #58bedf", +"eTd c #58bfcc", +"eTf c #58bfcd", +"abA c #58c0ec", +"afS c #58c0f2", +"e2x c #58c2d0", +"anS c #58c2ec", +"#UU c #58c2f2", +"#lq c #58c3e5", +"azk c #58c3f0", +"avE c #58c3f1", +"#YD c #58c3f2", +"#iJ c #58c4e6", +"azj c #58c4f1", +"#2. c #58c4f2", +"#cN c #58c5e7", +"#gc c #58c5e8", +"azi c #58c5f0", +"eS6 c #58c6d4", +"#p7 c #58c6e2", +"#dF c #58c6e9", +"aV. c #58c6ed", +"aQY c #58c6ee", +"aDo c #58c6f1", +"e7a c #58c7d6", +"#p6 c #58c7e3", +"#o. c #58c7e9", +"aQZ c #58c7ee", +"aML c #58c7ef", +"aQh c #58c7f1", +"aQ4 c #58c7f2", +"e69 c #58c8d6", +"#ff c #58c8e3", +"#wp c #58c8e5", +"#q6 c #58c8ea", +"#un c #58c8eb", +"b#U c #58c8ec", +"aVo c #58c8f0", +"aQ2 c #58c8f1", +"aQ3 c #58c8f2", +"#dG c #58c9ed", +"aZG c #58c9ee", +"aZH c #58c9ef", +"aVq c #58c9f0", +"aQ0 c #58c9f1", +"aVk c #58c9f2", +"aVl c #58c9f3", +".5s c #58cae0", +"#ue c #58caea", +"#uf c #58caeb", +"#Kj c #58caec", +"aZI c #58caee", +"aZK c #58caef", +"aZD c #58caf1", +"aZC c #58caf2", +"bdZ c #58caf3", +"#wn c #58cbeb", +"a3Z c #58cbee", +"be. c #58cbf0", +"bd9 c #58cbf1", +"a3N c #58cbf2", +"biv c #58cbf4", +"#zG c #58ccea", +"a30 c #58cced", +"bd8 c #58ccf0", +"bd7 c #58ccf1", +"bd4 c #58ccf2", +".tj c #58cee9", +".tl c #58ceea", +"fWE c #58cfdc", +".tk c #58cfea", +"fWC c #58d0dc", +".76 c #58d0e2", +"fCb c #58d4e2", +"fIV c #58dff0", +".no c #58f8fe", +"bkB c #592213", +"i3C c #592216", +"aE3 c #592611", +"bFT c #592a16", +"ab# c #592f1b", +".BT c #59301c", +".Mx c #59301d", +".EN c #59311d", +"#Nn c #59311e", +".WW c #59321c", +"#9d c #59321d", +".YO c #59331d", +".HD c #593322", +"#cA c #593421", +".2O c #593723", +".WT c #593725", +"#hB c #59493d", +"cKX c #594941", +"c3f c #594a41", +"cGE c #594b43", +"#kb c #595950", +".f. c #595959", +"dpO c #596564", +"#9D c #596d6e", +".rR c #596f51", +".Se c #59787a", +"cyc c #598094", +"#rs c #59868c", +".3U c #59878a", +".mw c #5993d7", +"a3r c #59968e", +".oQ c #5996de", +".oK c #599ae8", +"#ut c #599dae", +"#Lr c #599daf", +"aQU c #599ea5", +".5Q c #59a0ab", +"#Ee c #59a2b5", +"brP c #59a4b8", +"eOc c #59b9c5", +"#oj c #59bbd9", +"aQV c #59bddc", +"#wu c #59bed9", +"anC c #59bfe5", +"eTe c #59c0cd", +"ajG c #59c0e8", +"afC c #59c0e9", +"ajY c #59c0f2", +"afR c #59c1f2", +".91 c #59c2d7", +"afQ c #59c2f2", +"ajQ c #59c3eb", +"anP c #59c3ec", +"anT c #59c3ed", +"#YC c #59c3f2", +"e64 c #59c4d2", +"#lr c #59c4e5", +"aCS c #59c4ed", +"avD c #59c4f1", +"#19 c #59c4f2", +"#aj c #59c5dd", +"#gd c #59c5e6", +"aDp c #59c5f0", +"#5O c #59c5f2", +"e2C c #59c6d4", +"e2D c #59c6d5", +"azh c #59c6f0", +"aHL c #59c6f1", +".7H c #59c7e1", +"#q9 c #59c7e9", +"aV# c #59c7ef", +"aQg c #59c7f0", +"aLZ c #59c7f1", +"#C8 c #59c8e4", +"#q7 c #59c8e8", +"#r. c #59c8ea", +"a3V c #59c8ee", +"aVa c #59c8ef", +"aVb c #59c8f0", +"aQ1 c #59c8f1", +"aQ5 c #59c8f2", +"e7# c #59c9d8", +"bm5 c #59c9ec", +"biG c #59c9ed", +"a3U c #59c9ef", +"aVc c #59c9f0", +"aVd c #59c9f1", +"aVj c #59c9f2", +"aVm c #59c9f3", +"#wo c #59cae8", +"#ug c #59caeb", +"a3Y c #59caee", +"a3T c #59caf0", +"a3R c #59caf1", +"aVf c #59caf2", +"aZB c #59caf3", +"biu c #59caf4", +"#zH c #59cbea", +"#uh c #59cbeb", +"a8i c #59cbee", +"a3S c #59cbf1", +"bdY c #59cbf2", +"a3O c #59cbf3", +"bit c #59cbf4", +"bis c #59cbf5", +"#zI c #59ccea", +"a8h c #59ccee", +"biq c #59ccf4", +"bir c #59ccf5", +"bd3 c #59cdf2", +".5M c #59d1e0", +"fC# c #59d5e3", +"fCa c #59d6e3", +"g#W c #59deeb", +"fIY c #59dfef", +"f8O c #59e0ef", +"fZw c #59e1f0", +"fFd c #59e1f2", +".rf c #59ebe7", +"bxi c #5a2513", +"bo6 c #5a2615", +"#sO c #5a2c18", +"abe c #5a2e1b", +"#mz c #5a2f1a", +"aba c #5a301b", +"af# c #5a3119", +".62 c #5a321c", +"#Nl c #5a321e", +"jz. c #5a321f", +".vD c #5a331b", +"#vR c #5a331d", +"#z. c #5a331e", +".My c #5a331f", +"jHB c #5a3320", +".E1 c #5a3421", +"aa6 c #5a351b", +".HF c #5a3523", +"c3u c #5a4a42", +".#p c #5a4f4f", +"c8g c #5a524c", +"cYI c #5a5956", +".dc c #5a5a5a", +".Ql c #5a625b", +"brK c #5a7f78", +"#rt c #5a8387", +".3i c #5a8a95", +"cTy c #5a8fa2", +"a22 c #5a9392", +"#xj c #5a98a6", +"aQL c #5a9999", +".pI c #5a9ae7", +"#iQ c #5a9fae", +".9X c #5aaac1", +"aZl c #5aacbd", +"#q. c #5aadbc", +"#ok c #5ab8d5", +"a7y c #5abbd6", +"a2Y c #5abcd7", +"aro c #5ac0e4", +"arn c #5ac0e5", +"afD c #5ac0e9", +"b#Q c #5ac1e1", +"anD c #5ac1e6", +"ajH c #5ac1e8", +"ajX c #5ac2f2", +"aHh c #5ac3e7", +"arC c #5ac3eb", +"arE c #5ac3ec", +"afP c #5ac3f2", +"#ao c #5ac4e3", +"#ls c #5ac4e4", +"#iK c #5ac4e5", +"abI c #5ac4f2", +"arN c #5ac5f1", +"#9L c #5ac5f2", +"f#l c #5ac6d2", +"e65 c #5ac6d4", +"#ge c #5ac6e6", +"avB c #5ac6f0", +"avC c #5ac6f1", +"#9K c #5ac6f2", +"#OV c #5ac7e4", +"aLY c #5ac7ef", +"aDm c #5ac7f0", +"aDn c #5ac7f1", +"ajV c #5ac7f2", +"#q8 c #5ac8e8", +"aZr c #5ac8ef", +"aQf c #5ac8f0", +"aUz c #5ac8f1", +"brj c #5ac9ed", +"a3W c #5ac9ee", +"aYO c #5ac9f1", +"aVi c #5ac9f2", +"aVn c #5ac9f3", +"a3M c #5ac9f4", +"a3X c #5acaef", +"aZs c #5acaf0", +"aVg c #5acaf1", +"aVe c #5acaf2", +"aZA c #5acaf3", +"a3K c #5acaf4", +"#zJ c #5acbe9", +"#GE c #5acbea", +"#ui c #5acbeb", +"#um c #5acbed", +"a8g c #5acbee", +"a8f c #5acbef", +"a8d c #5acbf1", +"a3Q c #5acbf2", +"a3P c #5acbf3", +"a77 c #5acbf4", +".5A c #5accda", +"bdX c #5accf3", +"a78 c #5accf4", +"fC. c #5acddc", +"bd2 c #5acdf1", +"bmX c #5acdf5", +"bmV c #5acdf6", +"eX8 c #5acede", +"biC c #5acef2", +"biB c #5acef3", +"biz c #5acef4", +"biA c #5acef5", +"fWF c #5ad3e1", +"fCc c #5ad6e2", +"fWG c #5ad6e3", +"fWH c #5ad7e5", +"g#X c #5adeeb", +"grN c #5adeec", +"g#Y c #5adfec", +"g#Z c #5adfed", +"fMI c #5adfef", +"fIZ c #5adff0", +"fMH c #5ae0ef", +"fIW c #5ae0f0", +"fIX c #5ae0f1", +"fMF c #5ae1f0", +"fFe c #5ae1f2", +"fFc c #5ae1f3", +".qR c #5afafa", +".oy c #5afefc", +"bo7 c #5b2714", +"btc c #5b2814", +"#py c #5b2f1b", +"#1G c #5b301d", +"afg c #5b311e", +".WI c #5b321b", +"#9l c #5b321d", +"#Ux c #5b321e", +".ym c #5b331b", +"#hb c #5b331c", +".9r c #5b331d", +".B2 c #5b331e", +".EX c #5b331f", +"i6b c #5b3323", +".4K c #5b341d", +".R. c #5b341f", +"dBA c #5b3420", +"dFM c #5b351a", +"#jk c #5b351f", +".Bv c #5b361f", +".9s c #5b3621", +"##R c #5b3721", +".Ki c #5b3725", +"dbg c #5b4940", +"c26 c #5b4a41", +"#UQ c #5b4c3f", +"cYv c #5b4d45", +"c7Z c #5b4e46", +"cPs c #5b5650", +".kG c #5b5852", +".a0 c #5b5b5b", +"ayY c #5b6661", +"bVj c #5b707c", +".RD c #5b7174", +"#.N c #5b7b75", +"#ru c #5b7b7d", +"cx9 c #5b879f", +"cTB c #5b899d", +"#ld c #5b8f95", +"#uu c #5b94a0", +"a7k c #5b9594", +"cC# c #5b95af", +"#Ef c #5b99a6", +"aD0 c #5b9a9d", +"aMB c #5b9b9b", +".6g c #5b9baa", +".pd c #5b9de8", +"a3t c #5ba0a7", +"bvu c #5babb3", +"a3x c #5bacbe", +"bm6 c #5bb1c2", +"aMC c #5bb3ca", +"cg5 c #5bb3d7", +"#ol c #5bb6d1", +"bzG c #5bbad1", +"avf c #5bc1e8", +"afE c #5bc1e9", +"afG c #5bc1eb", +"anE c #5bc2e7", +"ajI c #5bc2e9", +"eTD c #5bc3cd", +"#iM c #5bc3e2", +"#iL c #5bc3e3", +"ajO c #5bc3eb", +"arB c #5bc4eb", +"arD c #5bc4ec", +"afO c #5bc4f2", +"eXV c #5bc5d4", +"afN c #5bc5f2", +"aHi c #5bc6ee", +"abH c #5bc6f2", +"e2I c #5bc7d5", +".tK c #5bc7d8", +"a3z c #5bc7ee", +"avA c #5bc7f0", +"anX c #5bc7f1", +"#fm c #5bc8e8", +"aHK c #5bc8ef", +"anV c #5bc8f1", +"aQe c #5bc9ef", +"aDl c #5bc9f0", +"avz c #5bc9f1", +"aVh c #5bc9f2", +"aZx c #5bc9f4", +"eYf c #5bcad9", +"#zK c #5bcae5", +"#Kk c #5bcaea", +"bvt c #5bcaee", +"a8e c #5bcaef", +"aYN c #5bcaf0", +"aZt c #5bcaf1", +"aZu c #5bcaf2", +"a3L c #5bcaf3", +"aZy c #5bcaf4", +"a3J c #5bcaf5", +"#C5 c #5bcbe9", +"#GH c #5bcbea", +"#uj c #5bcbeb", +"a7w c #5bcbef", +"a7a c #5bcbf0", +"b#v c #5bcbf1", +"a8c c #5bcbf3", +"a76 c #5bcbf5", +"#GF c #5bcce9", +"#ul c #5bcced", +"biF c #5bccf0", +"bau c #5bccf1", +"a8b c #5bccf2", +"a8a c #5bccf3", +"biw c #5bccf4", +"eYc c #5bcddd", +"#xm c #5bcdec", +"bat c #5bcdf2", +"a8# c #5bcdf3", +"a79 c #5bcdf4", +"bmW c #5bcdf5", +"bmU c #5bcdf6", +"biD c #5bcef1", +"biy c #5bcef4", +"bmY c #5bcef5", +".3s c #5bd1e0", +"fTu c #5bd7e2", +"fWy c #5bd7e5", +"fyB c #5bdae9", +"gdh c #5be0ed", +"gdl c #5be0ef", +"fMG c #5be1f0", +"fFi c #5be1f1", +"fFf c #5be1f2", +"fBE c #5be1f3", +"fME c #5be2f1", +"fIS c #5be3f3", +"i6# c #5c2417", +"bf9 c #5c2917", +"bo5 c #5c2b16", +"#af c #5c301a", +"#9m c #5c311c", +"afb c #5c321a", +"#9k c #5c321d", +"#9c c #5c331c", +".HC c #5c331f", +".Bw c #5c341c", +".Q9 c #5c341f", +"#QW c #5c3420", +"#Cx c #5c351e", +"#Nm c #5c3520", +".B0 c #5c3621", +"alF c #5c371e", +".68 c #5c3722", +".#P c #5c5858", +"c3b c #5c5b58", +".dS c #5c5c5c", +"#rv c #5c7675", +"cYJ c #5c7981", +"cyb c #5c798b", +"#q1 c #5c898c", +"#RD c #5c8a8f", +".V4 c #5c8d8f", +"#b. c #5c9295", +"#HN c #5c96a2", +"b#E c #5c9790", +"bvS c #5c9a9d", +"ctE c #5c9bb3", +".nF c #5c9be8", +".oc c #5c9de8", +".GO c #5ca0b1", +"a3a c #5ca6ab", +".v9 c #5ca6bb", +"ctO c #5ca8c5", +"#gf c #5cacbf", +".7V c #5cb1b5", +"#om c #5cb5ce", +"eS1 c #5cb7c2", +"eNP c #5cbbc8", +"brk c #5cc0da", +"eEi c #5cc1ce", +"afF c #5cc1ea", +"arp c #5cc2e6", +"ajJ c #5cc2ea", +"eT. c #5cc3d0", +"ajM c #5cc3eb", +"ajN c #5cc3ec", +"anO c #5cc4ec", +"#Kp c #5cc5e0", +"ajP c #5cc5eb", +"arF c #5cc5ec", +"ajW c #5cc5f2", +"arM c #5cc6f1", +"anZ c #5cc6f2", +"f#r c #5cc7d5", +"arL c #5cc7f0", +"anY c #5cc7f1", +"e66 c #5cc8d6", +"arK c #5cc8f0", +"anW c #5cc8f1", +"e7. c #5cc9d7", +"aDj c #5cc9ef", +"azg c #5cc9f0", +"avy c #5cc9f1", +"aZz c #5cc9f4", +"a3G c #5cc9f5", +"eNN c #5ccad7", +"e68 c #5ccad8", +"#xo c #5ccae7", +"aDk c #5ccaef", +"azf c #5ccaf0", +"aZv c #5ccaf2", +"a3F c #5ccaf4", +"a3H c #5ccaf5", +"#GG c #5ccbe9", +"a7x c #5ccbed", +"bav c #5ccbef", +"a7# c #5ccbf0", +"a2W c #5ccbf1", +"aZw c #5ccbf2", +"a3B c #5ccbf3", +"a3E c #5ccbf4", +"a74 c #5ccbf5", +".3o c #5cccdc", +"#C6 c #5ccce9", +"#uk c #5cccec", +"baw c #5cccf0", +"b#T c #5cccf1", +"b#u c #5cccf2", +"a3A c #5cccf3", +"a75 c #5cccf4", +"bao c #5cccf6", +"fB9 c #5ccddc", +"baC c #5ccdee", +"baA c #5ccdef", +"baz c #5ccdf0", +"biE c #5ccdf2", +"a8. c #5ccdf3", +"be5 c #5ccdf4", +"baq c #5ccdf5", +"b#R c #5ccef3", +"bix c #5ccef4", +"bmT c #5ccef6", +"bm2 c #5ccff5", +"bmS c #5ccff6", +"fWB c #5cd7e4", +"fWx c #5cd8e6", +"fWv c #5cd9e6", +"fWw c #5cd9e7", +"fWz c #5cdae8", +"fWI c #5cdae9", +"grO c #5cdfec", +"g#0 c #5cdfed", +"gdi c #5ce0ed", +"fMJ c #5ce0ef", +"gdk c #5ce1ef", +"fFj c #5ce1f0", +"fxZ c #5ce1f3", +"f8P c #5ce2ef", +"fMD c #5ce2f2", +"fBF c #5ce2f3", +"fZx c #5ce3f2", +"fBG c #5ce3f4", +".n0 c #5cfcfe", +".pW c #5cfffb", +"aE7 c #5d2612", +"a9e c #5d2614", +"bkC c #5d2813", +"bbD c #5d2916", +"bbA c #5d2b17", +"bkA c #5d2c17", +"bBr c #5d2d18", +"a9f c #5d2e1a", +".QU c #5d321b", +"ank c #5d321d", +"i8H c #5d3222", +"#Cy c #5d331b", +".HA c #5d331c", +"au6 c #5d331f", +"jKm c #5d3421", +".JP c #5d351d", +".OS c #5d3520", +".9l c #5d361d", +".2I c #5d361e", +".U2 c #5d3620", +".OT c #5d3621", +".2P c #5d3923", +"cKY c #5d4f47", +"cKT c #5d5049", +"#rI c #5d5242", +"c3d c #5d524a", +"#mY c #5d5444", +".f8 c #5d5552", +"dbi c #5d5a56", +"c8i c #5d5c59", +".#7 c #5d5d5d", +"cKQ c #5d6e75", +"#GN c #5d7e81", +"b4S c #5d8893", +"#OX c #5d98a2", +"biI c #5da0a4", +"a3u c #5da1a6", +"bz6 c #5da2af", +"ctN c #5da4c2", +"azJ c #5dadbd", +"biH c #5db1bf", +"#on c #5db4cc", +"brp c #5dbace", +"b#C c #5dbacf", +"eS3 c #5dbcc8", +"chg c #5dbeda", +"#xq c #5dc0da", +"avg c #5dc1e5", +"#lt c #5dc2df", +"anF c #5dc2e8", +"ajL c #5dc3ea", +"#iN c #5dc4e1", +"arz c #5dc4eb", +"arG c #5dc5ec", +"#xp c #5dc6e1", +"f#s c #5dc7d5", +"eXZ c #5dc7d6", +"fdF c #5dc9d7", +"a7V c #5dc9ee", +"aDh c #5dc9ef", +"aDi c #5dc9f0", +"f#k c #5dcad8", +"#Ru c #5dcaeb", +"aHI c #5dcaef", +"aDg c #5dcaf0", +"a3I c #5dcaf5", +"#Kl c #5dcbe9", +"#Km c #5dcbea", +"aLV c #5dcbee", +"aHH c #5dcbef", +"aLW c #5dcbf0", +"aYM c #5dcbf1", +"a3C c #5dcbf3", +"a72 c #5dcbf5", +".mc c #5dccda", +"#xn c #5dccea", +"bay c #5dccef", +"b#t c #5dccf2", +"bdW c #5dccf3", +"ban c #5dccf6", +"baB c #5dcdef", +"bax c #5dcdf0", +"be8 c #5dcdf1", +"be6 c #5dcdf2", +"bdV c #5dcdf3", +"bas c #5dcdf4", +"bap c #5dcdf6", +"be9 c #5dcef1", +"b#S c #5dcef2", +"bjv c #5dcef3", +"bar c #5dcef4", +"bm0 c #5dcef5", +"bmZ c #5dcef6", +"bm3 c #5dcff4", +"bmR c #5dcff5", +"eY# c #5dd2e2", +"fTv c #5dd7e0", +"fTt c #5dd8e2", +"fTr c #5dd8e4", +"fWu c #5ddae8", +"fWJ c #5ddbea", +"gdm c #5de0ee", +"fMK c #5de0ef", +"gdj c #5de1ef", +"fI0 c #5de1f1", +"fBM c #5de2f2", +"f2G c #5de3f2", +"fBL c #5de3f3", +"fx0 c #5de3f4", +"fBH c #5de4f4", +"inV c #5e1611", +"aRO c #5e2a11", +"aEW c #5e2a12", +"iBb c #5e301d", +"#1P c #5e321e", +"#Nj c #5e331c", +"#X3 c #5e331f", +"#5p c #5e341f", +".Er c #5e351d", +"#QZ c #5e351e", +".Yl c #5e361c", +".EW c #5e3620", +"#F6 c #5e3621", +"jM2 c #5e3622", +"#z# c #5e371c", +"#F7 c #5e3720", +"#JO c #5e3721", +".YP c #5e381e", +"#pz c #5e3820", +".0M c #5e3921", +"i8I c #5e3a28", +"aa5 c #5e3e20", +"dgp c #5e4d44", +".#O c #5e5353", +".a6 c #5e5953", +"c3c c #5e5954", +".Zl c #5e5d55", +".fa c #5e5e5e", +"#rw c #5e7370", +".tY c #5e8467", +"b4T c #5e8a94", +"#dx c #5e8d8d", +"#uv c #5e9298", +"#Eg c #5e939c", +"aYX c #5e9690", +".3Y c #5e96a0", +"bvL c #5e9898", +".m6 c #5e9eed", +"a3d c #5e9fa9", +"b#D c #5ea2a5", +"#hI c #5eaab3", +"bea c #5eafbc", +"bm7 c #5eb0bf", +"#oo c #5eb3c9", +".Ln c #5eb7ba", +"bnA c #5eb8db", +"azB c #5ebad1", +"#xr c #5ebcd4", +".92 c #5ec2d8", +"#lu c #5ec2dd", +"avh c #5ec2e6", +"anG c #5ec3e8", +"anH c #5ec3e9", +"anN c #5ec3ec", +"#iO c #5ec4e0", +"arA c #5ec4eb", +"arJ c #5ec6ec", +".5t c #5ec8d8", +"#GJ c #5ec9e3", +"eYe c #5ecad8", +"aHJ c #5ecaef", +"aLX c #5ecaf0", +"a3D c #5ecaf2", +"a73 c #5ecaf6", +"eYd c #5ecbda", +"#C7 c #5ecbe6", +"aQb c #5ecbef", +"a2V c #5ecbf0", +"aYL c #5ecbf1", +"a71 c #5ecbf5", +"aQa c #5eccef", +"aQ# c #5eccf0", +"a7W c #5eccf4", +"a70 c #5eccf5", +"bal c #5eccf6", +"f#o c #5ecdda", +"f#m c #5ecddb", +"#GI c #5ecde9", +"be7 c #5ecdf1", +"b#s c #5ecdf2", +"bdU c #5ecdf3", +"be4 c #5ecdf4", +"bah c #5ecdf5", +"be1 c #5ecdf6", +"bf. c #5ecef0", +"beo c #5ecef1", +"bjw c #5ecef3", +"be3 c #5ecef4", +"bju c #5ecef5", +"be2 c #5ecef6", +"bf# c #5ecff0", +"bfa c #5ecff1", +"bm4 c #5ecff4", +"bmQ c #5ecff6", +"bm1 c #5ed0f7", +"fBX c #5ed5e3", +"fTw c #5ed6de", +"fBY c #5ed6e4", +"fTq c #5ed8e0", +"eI3 c #5edbea", +"fWA c #5edce9", +"ezo c #5edcea", +"gvI c #5edeec", +"gvG c #5edfed", +"fML c #5ee1ef", +"fBN c #5ee2f2", +"f8Q c #5ee3f1", +"fFk c #5ee3f2", +"fBK c #5ee3f3", +"fBJ c #5ee3f4", +"ftS c #5ee3f6", +"f2H c #5ee4f2", +"fFg c #5ee4f4", +"ftT c #5ee4f5", +"fMC c #5ee5f4", +"fx1 c #5ee5f5", +"cBi c #5f2611", +"a0O c #5f2813", +"aEV c #5f2a11", +"aE2 c #5f2a12", +"a4Z c #5f2a15", +"bbB c #5f2a17", +"aLw c #5f2b17", +"iGJ c #5f311e", +"i3D c #5f3120", +"iD4 c #5f321f", +"#jD c #5f331b", +"#X2 c #5f3420", +"##A c #5f351d", +"#1H c #5f3520", +"#sN c #5f361c", +".EY c #5f3621", +"#hA c #5f371f", +".yV c #5f3720", +".E2 c #5f3721", +"#Cw c #5f3722", +".OU c #5f3822", +".WX c #5f3920", +"j6M c #5f3925", +"aa7 c #5f3b1f", +"#jj c #5f3c23", +".cC c #5f4268", +"#rL c #5f4530", +"cPc c #5f5149", +"#rH c #5f5242", +"cTJ c #5f544c", +"#rJ c #5f5543", +".aA c #5f5754", +".bx c #5f5a54", +".fP c #5f5f5f", +"bnu c #5f7c70", +"#xy c #5f8385", +"#xx c #5f888d", +".1Q c #5f8f92", +"a7t c #5f9a98", +".AN c #5f9c92", +"b#F c #5fa1a2", +".oJ c #5fa1e8", +".U# c #5fa3b1", +"cOW c #5fa3b9", +"#xu c #5fa4b3", +".7z c #5fa5b6", +"#AM c #5fa8b5", +"bjd c #5fa9af", +"#xt c #5fafc3", +"aU4 c #5fb3c2", +"#op c #5fb3ca", +".r1 c #5fb4a7", +"a7U c #5fb4c6", +"#xs c #5fb6cc", +"avN c #5fb8cb", +"brl c #5fc0dc", +"#lv c #5fc1db", +"aLy c #5fc1e0", +"#cH c #5fc3d7", +"bD5 c #5fc3df", +"arq c #5fc3e7", +"ajK c #5fc3e9", +"anJ c #5fc3ea", +"arI c #5fc5ed", +"#OU c #5fc6d0", +"avp c #5fc6eb", +"arH c #5fc6ed", +"#iP c #5fc7e4", +"aCT c #5fc7ee", +"aUv c #5fcaf0", +"aQd c #5fcbef", +"aQc c #5fcbf0", +"a7X c #5fcbf3", +"f#q c #5fccda", +"aUu c #5fccf0", +"a7. c #5fccf2", +"a7Y c #5fccf4", +"bam c #5fccf5", +"beX c #5fccf7", +"e7h c #5fcdda", +"eN6 c #5fcddc", +"aUt c #5fcdf0", +"aYG c #5fcdf1", +"baf c #5fcdf3", +"a7Z c #5fcdf4", +"bag c #5fcdf5", +"bak c #5fcdf6", +"a2Q c #5fcef0", +"bdT c #5fcef3", +"bnZ c #5fcef4", +"bjs c #5fcef5", +"beq c #5fcff3", +"bnY c #5fcff5", +"bfb c #5fd0f1", +"br# c #5fd0f6", +"bra c #5fd0f7", +"br. c #5fd1f7", +"d4a c #5fd4e3", +"fTx c #5fd6dc", +"fBZ c #5fd7e5", +"fTs c #5fd9e1", +".rE c #5fdad2", +"fBW c #5fdae7", +"euS c #5fdcea", +"eI2 c #5fdceb", +"euR c #5fddeb", +"euT c #5fdeec", +"ebM c #5fdeed", +"gvH c #5fdfec", +"fBR c #5fdfed", +"ebL c #5fdfee", +"g#1 c #5fe0ee", +"fMM c #5fe2f0", +"f8S c #5fe3f1", +"f8R c #5fe4f1", +"f2I c #5fe4f3", +"fBI c #5fe4f4", +".o4 c #5ffffb", +"aWw c #602913", +"a4W c #602916", +"a9d c #602917", +"#Nr c #60331a", +"#gZ c #60341c", +"iJt c #603420", +".vt c #60351e", +"#5i c #60351f", +"#9s c #603520", +"#Y# c #603722", +".Or c #60381d", +".QJ c #60381e", +"jPC c #603824", +".Eq c #60391f", +".L8 c #603920", +"#Cv c #603922", +"jER c #603923", +"j9p c #603925", +"#bJ c #603a22", +"#9e c #603b1f", +"bf8 c #603c22", +".4Q c #603d26", +"apF c #603e25", +"#ox c #60422b", +"ahB c #60432e", +"#pY c #604f3c", +"c71 c #605248", +"#lA c #605443", +".a# c #605654", +"cPr c #605a54", +".kW c #606060", +"duf c #606e6e", +"cCj c #607177", +"#rx c #60726d", +"cTU c #607378", +"c3w c #607b82", +".8r c #607d73", +".xy c #608a6e", +"#xw c #608c93", +"cK5 c #608ea2", +".S# c #608f89", +"#uw c #609497", +"#xv c #6097a1", +"b4U c #6097a5", +".TN c #609b9f", +".nE c #609fe8", +"b#Z c #60b2c0", +"bem c #60bad0", +"#lw c #60c1da", +"eNV c #60c3d1", +"anI c #60c4ea", +"ary c #60c4eb", +"eI6 c #60c6d5", +"avs c #60c7eb", +"aHj c #60c8ee", +"aUw c #60cbef", +"aUx c #60ccef", +"aUy c #60ccf0", +"aYK c #60ccf1", +"bai c #60ccf5", +"beY c #60ccf6", +"e60 c #60cddc", +"aYF c #60cdf0", +"a69 c #60cdf2", +"baj c #60cdf5", +"beZ c #60cdf6", +"#NQ c #60ceeb", +"a2R c #60cef1", +"bjx c #60cef2", +"bdS c #60cef3", +"beS c #60cef4", +"bip c #60cef5", +"bjt c #60cef6", +"beW c #60cef7", +".3r c #60cfda", +"fdG c #60cfdc", +"bjz c #60cff1", +"bjy c #60cff2", +"bep c #60cff3", +"beR c #60cff4", +"bmP c #60cff6", +"f#y c #60d0db", +"f#p c #60d0de", +"bjA c #60d0f2", +"bzA c #60d0f4", +"brb c #60d0f6", +"bjB c #60d1f1", +"brc c #60d1f7", +"bre c #60d1f8", +"bq9 c #60d2f8", +"bva c #60d3f8", +"fB0 c #60d8e6", +"fB1 c #60d9e6", +"eNM c #60dce9", +"fWr c #60ddea", +"grP c #60ddeb", +"fWs c #60deeb", +"fWK c #60deec", +"ebK c #60deed", +"fWq c #60dfeb", +"eql c #60dfed", +"ebJ c #60dfee", +"egF c #60dfef", +"fBV c #60e0ed", +"egE c #60e0ef", +"ebP c #60e0f0", +"fBQ c #60e1ef", +"ebR c #60e1f0", +"ebQ c #60e1f1", +"fBP c #60e2f0", +"fBO c #60e3f1", +"f8T c #60e4f2", +"fpQ c #60e4f4", +"fZy c #60e5f4", +"fFh c #60e5f5", +"ftU c #60e5f6", +"fIR c #60e6f6", +"ilo c #611c16", +"i3B c #612114", +"aE4 c #612a12", +"aE6 c #612a15", +"i8G c #612b1d", +"#sV c #613119", +"bBq c #61311a", +"aCO c #61311d", +"#Ut c #61321c", +"dBr c #613224", +"are c #61331e", +"iyp c #61331f", +"iPf c #613320", +"#v2 c #61341b", +"#Uy c #61341e", +".vs c #61351d", +"#5q c #61351f", +"aHd c #613620", +".YC c #61371e", +"afh c #613721", +"#X1 c #613722", +"#5g c #613821", +"#5h c #613822", +".E4 c #613823", +"#JN c #613923", +"#9f c #613a20", +"#Rg c #613a22", +".vF c #613a23", +".Ux c #613b1e", +"jES c #613b26", +".HG c #61402c", +"#rM c #61422c", +"#5H c #614b3b", +".eK c #615a55", +".d8 c #615a57", +".fT c #615a79", +".b7 c #615b55", +".dq c #615b56", +".zl c #615c51", +".cK c #615c56", +".cv c #616161", +"cYN c #616a6b", +"c3v c #616f6f", +"#Ls c #61888a", +"aHg c #61898f", +"#Eh c #618f94", +".ZP c #619192", +"#AG c #619298", +"cTx c #6194a4", +".pJ c #619fe4", +".m5 c #619fe7", +".ob c #61a1e8", +".pc c #61a3e8", +".8y c #61a4af", +"bec c #61a5aa", +"b#G c #61a7ad", +"bEv c #61b0c5", +"avI c #61b3b6", +"aZm c #61b5c5", +"#oq c #61b6cd", +"bm8 c #61b8c8", +"bIR c #61bbd0", +"eEj c #61c1ce", +"a3c c #61c3d9", +"arr c #61c4e8", +"anK c #61c4e9", +".94 c #61c5dd", +"eI9 c #61c6d3", +"avq c #61c7ec", +"eTE c #61c8d2", +"aLz c #61c8ef", +"f#x c #61cad7", +"e67 c #61ccd9", +"aYH c #61ccf0", +"aYI c #61cdf0", +"aYJ c #61cdf1", +"beT c #61cdf4", +"beU c #61cdf5", +"be0 c #61cdf6", +"bjq c #61cdf7", +"f#i c #61cedd", +"a2P c #61cef1", +"a61 c #61cef2", +"beQ c #61cef5", +"beP c #61cef6", +"a62 c #61cff1", +"a60 c #61cff3", +"br7 c #61cff4", +"bnX c #61cff5", +"bjp c #61cff6", +"bn0 c #61d0f3", +"br5 c #61d0f5", +"bjo c #61d0f6", +"f#n c #61d1df", +"brg c #61d1f5", +"brf c #61d1f6", +"bq7 c #61d2f7", +"brd c #61d2f8", +"bq8 c #61d3f8", +"bvb c #61d3f9", +"bzm c #61d3fa", +"fTp c #61d8dd", +"fZH c #61ddea", +"fZE c #61dee8", +"fZG c #61deeb", +"fZF c #61dfeb", +"fWt c #61dfed", +"gKT c #61e0ea", +"gOM c #61e0eb", +"fZD c #61e0ec", +"gzm c #61e0ed", +"eE. c #61e0ee", +"euU c #61e0ef", +"gSz c #61e1eb", +"gSA c #61e1ec", +"gGX c #61e1ee", +"eI1 c #61e1ef", +"euW c #61e1f0", +"egD c #61e1f1", +"fMN c #61e2f1", +"fI1 c #61e5f4", +"fx4 c #61e5f5", +"fpP c #61e5f6", +"f2J c #61e6f4", +"fFl c #61e6f5", +"fx5 c #61e6f6", +"fx2 c #61e6f7", +"fx3 c #61e7f6", +"fIQ c #61e8f7", +".qp c #61fffa", +"aJv c #622a13", +"aE1 c #622d14", +"apt c #623114", +"bo8 c #623217", +"ckl c #623218", +"#9r c #62331d", +"iMh c #623320", +"#ev c #62361d", +".J9 c #62361e", +"ajs c #623621", +".QK c #623821", +"#za c #62391e", +".61 c #62391f", +"#Uk c #623922", +"arc c #623923", +".H. c #623a1e", +".yU c #623a23", +".E3 c #623a24", +".SC c #623b1f", +".yW c #623b23", +"#Uv c #623b24", +"k#2 c #623b27", +"#ec c #623c24", +"jHC c #623c27", +"af. c #623d20", +".yl c #623e23", +"bkz c #623f24", +"aa4 c #624324", +"#NI c #624c39", +".dX c #624d71", +"#rK c #624f39", +"dyd c #62544a", +"c7W c #62544c", +"c70 c #62564d", +".e8 c #626262", +"any c #62635a", +"cYj c #626c6d", +"#rz c #626f67", +"#ry c #627069", +"cP. c #627980", +"#xz c #627a76", +".D8 c #628283", +"#HO c #628586", +".DW c #629389", +".3T c #629497", +".5l c #62949d", +"#ux c #629898", +"aU7 c #629d97", +".IQ c #62a095", +"#lz c #62a0ab", +"bje c #62a39f", +"bed c #62acb4", +"bzC c #62b2c2", +".xk c #62b3af", +"biJ c #62b5c3", +"aYT c #62b6c6", +"#or c #62b6cb", +"bvw c #62bacb", +"bNC c #62bad3", +"#lx c #62c1d9", +"anM c #62c3eb", +"avo c #62c7eb", +"avr c #62c7ec", +"e2J c #62c9d7", +"aCU c #62c9ee", +"aHk c #62c9ef", +".3p c #62ccd8", +"ben c #62ccee", +"a2S c #62cdf0", +"a2U c #62cef1", +"bnV c #62cef5", +"beV c #62cef6", +"bnP c #62cef7", +"e7i c #62cfdb", +"a64 c #62cff1", +"a63 c #62cff2", +"br6 c #62cff3", +"bio c #62cff4", +"bnW c #62cff5", +"bjn c #62cff6", +"beO c #62cff8", +"f#j c #62d0df", +"br8 c #62d0f3", +"br9 c #62d0f4", +"bri c #62d0f5", +"br4 c #62d0f6", +"fdH c #62d1de", +"f#h c #62d1e0", +"bn1 c #62d1f3", +"bs. c #62d1f4", +"brh c #62d1f5", +"bzF c #62d1f7", +"fdw c #62d2e1", +"bq6 c #62d2f6", +"fdI c #62d3de", +"bv# c #62d3f8", +"bve c #62d3f9", +"fTy c #62d8de", +"fB8 c #62d8e6", +"egG c #62ddec", +"grQ c #62deeb", +"gDb c #62dfeb", +"g0s c #62e0eb", +"gdn c #62e0ed", +"fQh c #62e0ee", +"ezk c #62e0ef", +"gON c #62e1eb", +"gdo c #62e1ec", +"gDa c #62e1ee", +"euQ c #62e1ef", +"ezq c #62e1f0", +"fBU c #62e2ef", +"ezp c #62e2f0", +"euV c #62e2f1", +"fBT c #62e3f0", +"fy. c #62e3f1", +"fy# c #62e4f1", +"fQg c #62e4f2", +"fpR c #62e4f4", +"f8U c #62e6f4", +"f2K c #62e6f5", +"f5V c #62e7f5", +".mN c #62f3fa", +"a4X c #632f1b", +"aAI c #633018", +"bx. c #63351c", +".yI c #63351d", +"#5w c #63351f", +"anj c #63361a", +"#CC c #63361c", +"#vW c #63361d", +"axA c #63371d", +"#y6 c #63371f", +".2N c #633921", +"#.2 c #633a1f", +"#y9 c #633b23", +"#vi c #633b24", +".Ht c #633c23", +".B3 c #633c24", +"jza c #633c26", +"jKn c #633c27", +".vE c #633d24", +".OV c #633d25", +"jHA c #633d26", +"bo4 c #633e23", +"#ea c #633e26", +".S1 c #634028", +".Fn c #63412a", +"j#c c #63422d", +"jbT c #634431", +"cGe c #63554c", +"#ow c #635d51", +".#I c #636363", +".H7 c #63685f", +"brJ c #636d5f", +"#rA c #637067", +"#rB c #63746d", +"#rC c #63746e", +"cTs c #638690", +".59 c #638a85", +".XY c #638a86", +"bvK c #63908c", +"#n0 c #639090", +"aY9 c #639991", +"bnv c #639a95", +".I3 c #639b94", +"#AN c #639ba1", +"bzY c #639c97", +"aQK c #63a19a", +"a7C c #63a1a4", +".AZ c #63a4a5", +".oI c #63a7e8", +"bEu c #63b0c2", +".95 c #63b2bc", +"aZn c #63b4c4", +"ccD c #63b4cf", +".7Q c #63b7b7", +"bND c #63b9d1", +"#NR c #63bbd0", +"bSs c #63bbd7", +"eOb c #63c0cb", +".5u c #63c1ca", +"ars c #63c4e8", +"e2y c #63c5d1", +"eTk c #63c5d2", +"avi c #63c5ea", +"avw c #63c6ec", +".7I c #63c7d9", +"cg4 c #63c7e5", +"avt c #63c8ec", +"bvp c #63cced", +"bnT c #63cdf5", +"bjr c #63cdf6", +"bnU c #63cef6", +"bnQ c #63cef7", +"bjk c #63cef8", +"a2T c #63cff0", +"a65 c #63cff2", +"bw# c #63cff4", +"bjm c #63cff6", +"bnO c #63cff7", +"biV c #63d0f3", +"b#k c #63d0f4", +"bw. c #63d0f5", +"bmO c #63d0f6", +"bnN c #63d0f7", +"fdE c #63d1e0", +"bn2 c #63d1f3", +"bs# c #63d1f4", +"fdv c #63d2e1", +"bq5 c #63d2f6", +"f#B c #63d3df", +"fdA c #63d3e1", +"eY. c #63d3e3", +"bvl c #63d3f7", +"bvf c #63d3f8", +"bvd c #63d3f9", +"bv. c #63d4f8", +"bzn c #63d4fa", +"eb3 c #63dceb", +"fB2 c #63ddec", +"ebN c #63dfed", +"ebO c #63dfee", +"eI4 c #63e0ee", +"gGY c #63e1eb", +"gdp c #63e1ec", +"fFn c #63e1ee", +"eXD c #63e1ef", +"gWt c #63e2eb", +"g#2 c #63e2ee", +"euN c #63e2f1", +"fWL c #63e3ef", +"fBS c #63e3f0", +"euO c #63e3f1", +"eqk c #63e3f2", +"egz c #63e3f3", +"fye c #63e4f1", +"ftZ c #63e4f2", +"egy c #63e4f3", +"egC c #63e4f4", +"ft0 c #63e5f3", +"egB c #63e5f4", +"goa c #63e6f4", +"gg0 c #63e6f5", +"fx8 c #63e6f6", +"fx7 c #63e7f6", +"ezu c #63e8f7", +".pv c #63fffa", +"iqv c #641a14", +"deL c #642711", +"aJz c #642b11", +"a0L c #642c18", +"a0N c #642f1a", +"jeF c #64301e", +"aAH c #643119", +"ivC c #643220", +"bBB c #643319", +"bj8 c #64331b", +"#CD c #64351b", +"kIU c #64351f", +"bkq c #64361f", +"#Q1 c #64371e", +"#zb c #64381d", +"jeH c #643825", +"#vX c #64391e", +"#1N c #643922", +"dah c #643924", +"#b6 c #643a1f", +".OQ c #643a21", +"#Ul c #643a22", +"#1I c #643a23", +"#yw c #643c24", +"#5l c #643c25", +"jeI c #643c28", +"#vh c #643d24", +".S5 c #643d25", +"#bI c #643e25", +"#eb c #643e26", +"j#b c #643e2a", +"#jl c #643f24", +"#gL c #643f27", +"i8N c #64402c", +"j#i c #64412d", +"j#h c #64432e", +"jbV c #64432f", +"jbU c #644531", +"jbS c #644532", +"cBX c #64564c", +".aa c #645761", +"c7X c #645850", +"cPj c #645952", +"#iR c #645c4a", +"dCN c #645e57", +"cYt c #64615b", +".bp c #646464", +"#rD c #64736b", +"#AP c #648785", +"#AO c #649092", +"cPn c #6495aa", +"bey c #649f9a", +".NE c #64a097", +"b#O c #64a19b", +".ph c #64a1e2", +".nD c #64a3e8", +"b9S c #64a5c3", +".oa c #64a5e7", +"brq c #64a79c", +"b#0 c #64a9ab", +"#Sz c #64a9b3", +"bvq c #64afb8", +"a7h c #64b4be", +"#os c #64b4c7", +"bzI c #64bdd0", +"beN c #64bdd2", +"aPP c #64bdd9", +"brO c #64bde0", +"#ly c #64c2d9", +"eTg c #64c3d0", +"art c #64c5e9", +"anL c #64c5ea", +"arx c #64c5eb", +"ay0 c #64c6e8", +"ay1 c #64c7ea", +"aCV c #64c9ee", +"eTF c #64cad3", +".77 c #64cbd5", +"bnG c #64ccf1", +"bnR c #64cdf6", +"bnS c #64cdf7", +"br0 c #64cef7", +"a68 c #64cff1", +"a66 c #64cff2", +"bin c #64cff5", +"br2 c #64cff6", +"bjl c #64cff7", +"b#l c #64d0f3", +"b#j c #64d0f4", +"bnL c #64d0f6", +"bnM c #64d0f7", +"b#n c #64d1f4", +"bwa c #64d1f5", +"bn3 c #64d2f3", +"bq4 c #64d2f7", +"bvm c #64d3f6", +"bvc c #64d3f9", +"bvj c #64d3fa", +"f#z c #64d4df", +"bvk c #64d4f8", +"bvg c #64d4f9", +"bDM c #64d4fa", +"fCd c #64d8df", +"eNL c #64dae7", +"grR c #64dfea", +"gzn c #64dfec", +"gGZ c #64e1ea", +"fyA c #64e1ed", +"ebS c #64e1f0", +"gDc c #64e2eb", +"gdq c #64e2ed", +"fFo c #64e2ee", +"eXE c #64e3f1", +"fQi c #64e3f2", +"egA c #64e3f3", +"g#3 c #64e4f0", +"eXC c #64e4f2", +"egx c #64e4f3", +"egw c #64e4f4", +"fyd c #64e5f2", +"eqi c #64e5f3", +"egv c #64e5f4", +"elC c #64e5f5", +"fya c #64e6f3", +"eSI c #64e6f4", +"elu c #64e6f5", +"fx9 c #64e6f6", +"ft1 c #64e7f5", +"ftY c #64e7f6", +"fQf c #64e7f7", +"ftX c #64e8f6", +"ftV c #64e8f7", +"ftW c #64e8f8", +"fx6 c #64e9f8", +"fWo c #64e9f9", +".np c #64f8fe", +"inW c #652019", +"ilq c #65221a", +"hyb c #652317", +"hfT c #65231a", +"hFa c #65291a", +"i0H c #652d1c", +"a4V c #652e1b", +"#sP c #65351b", +"dWJ c #653528", +"i0J c #653623", +"#vQ c #65371e", +"#Gb c #65381d", +".Hs c #653920", +".EM c #653a20", +"aPN c #653a21", +"#5o c #653a22", +"ajt c #653a23", +".9k c #653b1f", +"ano c #653b24", +"##Q c #653c21", +"alE c #653d22", +"#No c #653d23", +"#yx c #653d24", +"#5m c #653d25", +"#QX c #653d26", +".vG c #653e24", +"#oH c #653e25", +"#rN c #653e26", +"#jf c #653f23", +"#rT c #653f26", +"jB1 c #653f27", +"jKk c #653f28", +"i6c c #653f2b", +".0h c #654021", +".Bu c #654024", +"j9o c #65402a", +".WS c #654129", +"ajl c #654221", +"i8M c #65422e", +"i8J c #65442f", +".Kj c #65452f", +"j#g c #654531", +"#s7 c #65523b", +"c7Y c #655a52", +"cKv c #655c54", +"#rG c #656457", +".fQ c #656565", +".oW c #65661b", +"dgr c #65706e", +"#nX c #658581", +"cPm c #658d9e", +".G# c #65907f", +"#uy c #659894", +".XX c #659897", +".kj c #659eb3", +".m4 c #65a2e7", +"a7l c #65a5a4", +"bvC c #65a5aa", +"cKz c #65a6b9", +"aQO c #65aca9", +"cye c #65acc2", +"#ot c #65b2c2", +"ccE c #65bad3", +"bD1 c #65bbd1", +".5G c #65bcc1", +".7J c #65bcc6", +".1X c #65bcce", +"bD7 c #65bed1", +"eOo c #65bfc9", +"arv c #65c6ea", +"avj c #65c7ea", +"avn c #65c7ec", +"ay2 c #65c8eb", +"aHl c #65caef", +"e2E c #65ccda", +"aPQ c #65ccf3", +"e7g c #65cdd9", +"br1 c #65cff6", +"brZ c #65cff7", +"a67 c #65d0f1", +"b#m c #65d0f3", +"bmN c #65d0f6", +"bnK c #65d0f7", +"bv5 c #65d0f8", +"b#o c #65d1f4", +"bdI c #65d1f5", +"bv9 c #65d1f6", +"brY c #65d1f7", +"bAo c #65d2f5", +"bvo c #65d2f6", +"bq3 c #65d2f7", +"bvn c #65d3f6", +"bzy c #65d3f7", +"bzo c #65d4f9", +"bvi c #65d4fa", +"bvh c #65d5f9", +"bDN c #65d5fb", +"fdz c #65d6e4", +"fdx c #65d7e5", +"fFD c #65dbe6", +"fB3 c #65deed", +"fTz c #65dfe7", +"gzo c #65e0ea", +"gDd c #65e0eb", +"gKU c #65e1eb", +"gSB c #65e2ea", +"fyg c #65e2f0", +"eXS c #65e2f1", +"fFw c #65e3f1", +"eXR c #65e3f2", +"gds c #65e4ed", +"gob c #65e4f3", +"fTa c #65e5f2", +"fyh c #65e5f3", +"elz c #65e5f4", +"ely c #65e5f5", +"f6h c #65e6f0", +"g#4 c #65e6f1", +"fyb c #65e6f4", +"elt c #65e6f5", +"elw c #65e6f6", +"g#5 c #65e7f2", +"fyc c #65e7f4", +"fpS c #65e7f5", +"elv c #65e7f6", +"eqg c #65e7f7", +"fpT c #65e8f6", +"eI0 c #65e8f7", +"fFm c #65e9f7", +"eE# c #65e9f8", +"fZz c #65eaf8", +"fMB c #65eaf9", +"hfS c #662219", +"huw c #662518", +"hIw c #662d1c", +"aE5 c #662e14", +"a9c c #66301d", +"csK c #663118", +"i.i c #66341d", +"jeG c #663522", +"#v1 c #66371c", +"anq c #663820", +".UL c #66391e", +".BS c #663920", +"#Nq c #663a20", +"#oV c #663a21", +"#Yb c #663b23", +"c7j c #663b25", +"#bV c #663c20", +"c7k c #663c28", +"#l3 c #663d22", +"##o c #663d24", +".SY c #663d25", +"jbO c #663d28", +"#QY c #663e26", +"#eI c #663f23", +"jz# c #663f26", +"#UP c #664025", +"#r4 c #664026", +"#rU c #664027", +"#rO c #664028", +"#FJ c #664129", +"#yv c #664228", +"ayT c #66422b", +"j6N c #66422c", +"jbP c #66422e", +"i8O c #66442f", +"j6J c #66452f", +"jbR c #664632", +"#ae c #66472d", +"j#f c #664732", +"alG c #664933", +"#zs c #66543b", +"c7U c #66554b", +"ccl c #665b53", +".fd c #666666", +"#rE c #66726b", +"#xA c #66796e", +"#AQ c #667d76", +".tM c #66855b", +"#Ei c #668b89", +"b9R c #6691ab", +"cTw c #6697a7", +".Jj c #66988e", +"bzO c #669c9c", +"aQT c #66a095", +".mv c #66a3eb", +"ber c #66a6ae", +".pF c #66a9e7", +".o# c #66a9e8", +"bvv c #66aeaa", +"aU5 c #66b0b6", +"brm c #66b1b5", +"bz7 c #66b9cd", +"eTC c #66c2cc", +"eTm c #66c3ce", +"#.q c #66c4cb", +"arw c #66c6ea", +"azd c #66c6ed", +"cg2 c #66c7e1", +"aru c #66c7ea", +"avm c #66c7ec", +"biS c #66c8e5", +"avx c #66c8ed", +"brz c #66c9e5", +"aCW c #66c9ea", +".7S c #66cad1", +"e2B c #66cad7", +"eTG c #66ccd5", +"bIP c #66cdef", +"br3 c #66cef7", +".3q c #66cfd8", +"bnI c #66cff6", +"bv2 c #66cff7", +"bv3 c #66cff8", +"bim c #66d0f5", +"bnJ c #66d0f6", +"bnH c #66d0f7", +"bv0 c #66d0f8", +"bdR c #66d1f4", +"bdJ c #66d1f5", +"bv8 c #66d1f6", +"brX c #66d1f7", +"bvZ c #66d1f8", +"bdK c #66d2f5", +"biY c #66d2f6", +"bzz c #66d3f6", +"bzx c #66d3f8", +"eJl c #66d4e4", +"bu9 c #66d4f8", +"bzw c #66d4f9", +"bzh c #66d5f9", +"bzp c #66d5fa", +"bzu c #66d5fb", +"f#A c #66d6e0", +"fdJ c #66d6e1", +"bzr c #66d6fa", +"bzt c #66d6fb", +"eI5 c #66dbe9", +"fyv c #66ddea", +"fFz c #66dee9", +"fTl c #66dfe8", +"fFy c #66dfeb", +"fFC c #66e0ea", +"gvJ c #66e0eb", +"fB5 c #66e0f1", +"g4u c #66e1ea", +"fyy c #66e1ed", +"fyf c #66e1f1", +"g0t c #66e2ea", +"gzp c #66e2ec", +"fFx c #66e2ef", +"fyi c #66e2f1", +"fFp c #66e3f1", +"fyj c #66e3f3", +"fWM c #66e4ea", +"fI7 c #66e4eb", +"gdt c #66e4ed", +"fTb c #66e5ef", +"fZI c #66e5f4", +"eSS c #66e6f5", +"elx c #66e6f6", +"g#7 c #66e7f0", +"g#6 c #66e7f1", +"f8V c #66e7f3", +"elB c #66e7f6", +"elA c #66e7f7", +"fFv c #66e8f5", +"eXB c #66e8f6", +"eqh c #66e8f7", +"euP c #66e8f8", +"f5W c #66e9f6", +"ft2 c #66e9f7", +"eD8 c #66e9f8", +"ezl c #66e9f9", +"ft3 c #66eaf8", +"fI2 c #66eaf9", +"fWp c #66ebfa", +".qS c #66fef9", +".oz c #66fefc", +"aNQ c #672f12", +"boy c #673016", +"aS# c #673318", +"#sU c #67361b", +"i0K c #673621", +"hSr c #67391d", +".OB c #67391e", +"#X9 c #67391f", +".6Q c #673a1f", +".Q2 c #673a21", +"c2B c #673a24", +".QT c #673b1f", +"#Ct c #673b20", +"##G c #673c20", +"#1J c #673c23", +"anu c #673c24", +"jto c #673c25", +".0A c #673d21", +"kh8 c #673d25", +"dai c #673d28", +"jS. c #673e26", +"abb c #673f24", +"#oB c #673f25", +"ab. c #673f26", +"aH# c #673f27", +"#eB c #674022", +"##M c #674023", +"#jg c #674024", +"#yy c #674026", +"#9g c #674027", +"k#3 c #674028", +"jhl c #67402a", +".Cs c #674123", +".Ws c #674124", +".R# c #674127", +"#oI c #674128", +"jM3 c #67412a", +".4k c #674227", +"##n c #674228", +"jKl c #67432c", +"jeJ c #67432e", +"#yu c #67442b", +"#yt c #67442c", +"i8L c #674631", +"j#d c #674632", +"ae9 c #674725", +"j9n c #674731", +"j#j c #674732", +"#lB c #67482c", +".9W c #67513a", +"#wd c #675239", +"#CS c #675b45", +".ev c #676767", +"#u5 c #676c53", +"#rF c #677167", +"#AR c #67766c", +"#AS c #67786e", +"b#Y c #678a85", +".uN c #678f90", +"cTv c #6794a3", +"ctu c #6794a5", +"#ov c #67969b", +"a7j c #67a091", +"cOV c #67a0af", +"a23 c #67a29b", +"a7D c #67a39c", +".GC c #67a3a2", +"bI8 c #67a6a7", +".7T c #67acaa", +".pb c #67ace8", +"brD c #67aeb7", +"#ou c #67aebb", +".oH c #67aee8", +"bz5 c #67b6c9", +"bvs c #67bdcb", +"bnj c #67c6de", +"brT c #67c6e5", +"#dH c #67c7de", +"avk c #67c7eb", +"avv c #67c8ec", +"aCZ c #67c9eb", +"aHm c #67caee", +"bne c #67cbea", +"aLC c #67cbef", +"aLB c #67ccf0", +"d4h c #67cfd6", +"bv4 c #67cff8", +"e2N c #67d0df", +"bzB c #67d0f3", +"bmM c #67d0f6", +"brV c #67d0f7", +"bAe c #67d0f9", +"b#r c #67d1f3", +"b#p c #67d1f4", +"bdL c #67d1f5", +"bAp c #67d1f6", +"brW c #67d1f7", +"bv1 c #67d1f8", +"bAd c #67d1f9", +"bsa c #67d2f4", +"bdM c #67d2f5", +"bq2 c #67d2f6", +"bvY c #67d2f7", +"bAa c #67d2f9", +"bD4 c #67d3f8", +"bDZ c #67d4f8", +"bzq c #67d5fa", +"bzv c #67d5fb", +"bDO c #67d6fa", +"f#g c #67d7e7", +"bzs c #67d7fb", +"fdD c #67d8e7", +"fhD c #67d8e8", +"fFE c #67dce6", +"egH c #67ddeb", +"e2w c #67deed", +"fB7 c #67dfed", +"fB6 c #67dfef", +"fFA c #67e0ea", +"grT c #67e0ec", +"fyu c #67e0ef", +"gvK c #67e1eb", +"grS c #67e1ec", +"gDe c #67e1ed", +"ft7 c #67e1ee", +"gOO c #67e2eb", +"fB4 c #67e2f1", +"fWN c #67e3e9", +"fTo c #67e3ea", +"fyz c #67e3ed", +"gzq c #67e3ef", +"fyr c #67e3f2", +"fFB c #67e4ec", +"fTk c #67e4f0", +"god c #67e4f1", +"fyk c #67e4f3", +"fI6 c #67e5ee", +"fpX c #67e5f0", +"fFq c #67e5f2", +"elD c #67e5f4", +"gdx c #67e6e9", +"g#8 c #67e6ee", +"fMQ c #67e6ef", +"fpW c #67e6f1", +"ft6 c #67e6f2", +"fFr c #67e6f3", +"goc c #67e6f4", +"f52 c #67e7ec", +"f6g c #67e7ee", +"f8W c #67e7f1", +"fFs c #67e7f2", +"fpV c #67e7f3", +"fZL c #67e8f2", +"fFt c #67e8f4", +"ft4 c #67e8f5", +"e2k c #67e8f6", +"eSR c #67e8f7", +"eqj c #67e8f8", +"f5Y c #67e9f4", +"fFu c #67e9f5", +"fpU c #67e9f6", +"f5X c #67e9f7", +"eD9 c #67e9f8", +"ezm c #67e9f9", +"ezt c #67e9fa", +"flO c #67eaf8", +"ezr c #67eaf9", +"ezs c #67eafa", +"fdk c #67eafb", +"fdj c #67eafc", +"fZA c #67ebf9", +"fhz c #67ebfa", +"fhx c #67ebfb", +"fdi c #67ebfc", +"flN c #67ecfa", +"fhy c #67ecfb", +"hBJ c #682a1b", +"jeE c #682e1d", +".#R c #682e69", +"aWv c #683019", +"aEX c #683319", +"jbN c #683422", +"aAJ c #68361c", +"a4Y c #68361f", +"dBq c #683729", +"#Un c #68381f", +".0z c #68391e", +"jns c #683923", +"afl c #683a21", +"#JS c #683b1e", +"#sw c #683b1f", +".YL c #683b20", +"i3E c #683b26", +".OC c #683c20", +"#hz c #683c21", +".Mq c #683c22", +"#my c #683d21", +"#Yc c #683d24", +"jhk c #683d27", +".UV c #683e24", +".G9 c #683f22", +"kLZ c #684026", +"jtp c #684028", +".QI c #684121", +"#1F c #684125", +"anl c #684127", +"#9j c #684128", +"#oF c #684129", +"jkm c #68412a", +"jkn c #68412b", +".Oq c #684224", +"#Jv c #684228", +"jM1 c #68422b", +"jhm c #68422c", +".c6 c #68425f", +".Uw c #684323", +"#vj c #684328", +"jB3 c #68432c", +".80 c #684429", +"#rY c #68442a", +"#FI c #68442b", +"#rP c #68452b", +"jB4 c #68452d", +".yk c #684629", +".yj c #68472a", +".Mz c #68472f", +"i8K c #684732", +"jbQ c #684733", +"aCP c #68482f", +"jeQ c #684934", +"jeM c #684935", +"jbW c #684a33", +"jeP c #684a35", +"jeN c #684a36", +"jeO c #684c37", +"dyw c #685850", +"bnt c #685f4e", +"aLx c #686559", +"dkQ c #68685f", +".e7 c #686868", +"#HP c #687d75", +"#lc c #687e73", +"cya c #688390", +"cPl c #688894", +"#iw c #688d85", +"cTu c #6894a4", +"bi7 c #689691", +".nC c #68a7e8", +"cCq c #68a9bf", +"azI c #68aaaa", +"bNW c #68abbc", +".o. c #68ace9", +"bvT c #68aeb4", +"bvR c #68b8cd", +"aM. c #68bbc9", +"biZ c #68bccd", +"cpA c #68bfd7", +"eTn c #68c4d0", +"eTl c #68c5d0", +"azc c #68c7ec", +"avl c #68c8eb", +"aCX c #68c9ea", +"ay3 c #68c9ed", +"d4i c #68cad1", +"aCY c #68caeb", +"ay6 c #68caec", +"aLA c #68ccf0", +"f#t c #68cdd9", +"e2F c #68cddb", +"bvy c #68cdeb", +"bv6 c #68d0f7", +"bAf c #68d0f8", +"biT c #68d1f1", +"b#q c #68d1f4", +"bil c #68d1f5", +"bET c #68d1f6", +"bv7 c #68d1f7", +"bAg c #68d1f8", +"eYb c #68d2e1", +"biU c #68d2f4", +"bdN c #68d2f5", +"bEU c #68d2f6", +"bES c #68d2f7", +"brU c #68d2f8", +"bAb c #68d2f9", +"e21 c #68d3df", +"bAq c #68d3f5", +"bDY c #68d3f8", +"bsb c #68d4f3", +"bu8 c #68d4f8", +"f#C c #68d5e1", +"bIx c #68d5f9", +"bDD c #68d5fa", +"bDU c #68d5fb", +"bDP c #68d6fb", +"d4b c #68d7e4", +"fdt c #68d7e7", +"fdu c #68d8e8", +"fds c #68d9e8", +"fhF c #68d9e9", +"fdy c #68dae8", +"fdC c #68dae9", +"fFH c #68dbe6", +"fyw c #68dbe7", +"fdB c #68dbe9", +"fhH c #68dbea", +"ft8 c #68ddeb", +"eNK c #68dfed", +"fTm c #68e1e4", +"fFJ c #68e1eb", +"gvL c #68e1ec", +"fyt c #68e1f1", +"g0u c #68e2ea", +"gof c #68e2ed", +"fpZ c #68e3ee", +"fys c #68e3f2", +"fyq c #68e3f3", +"gg3 c #68e4ed", +"goe c #68e4ef", +"fZM c #68e5ea", +"fMR c #68e5eb", +"gdr c #68e5ef", +"gDf c #68e5f1", +"f80 c #68e6e9", +"f8Y c #68e6ea", +"gdv c #68e6eb", +"fI8 c #68e6ec", +"gdu c #68e6ed", +"f8X c #68e6ee", +"fpY c #68e6f0", +"fTj c #68e6f3", +"g#9 c #68e7ea", +"fTc c #68e7f0", +"fI5 c #68e7f2", +"gkC c #68e7f3", +"f5Z c #68e8f1", +"f6i c #68e8f2", +"ft5 c #68e8f4", +"gkB c #68e8f5", +"eST c #68e8f7", +"f2O c #68e9f2", +"fI4 c #68e9f5", +"flQ c #68e9f6", +"flP c #68e9f7", +"euX c #68e9f8", +"fdp c #68e9f9", +"f.9 c #68e9fc", +"fZC c #68eaf7", +"fZB c #68eaf8", +"eNJ c #68eaf9", +"ezn c #68eafa", +"f.8 c #68eafb", +"fQj c #68ebf8", +"fMP c #68ebf9", +"eIZ c #68ebfa", +"eIY c #68ebfb", +"eNG c #68ebfc", +"fI3 c #68ecfa", +"fdl c #68ecfb", +"eNF c #68ecfc", +"fQe c #68edfc", +".n1 c #68fcfd", +".pX c #68fff9", +"iiQ c #692116", +"djE c #692c13", +"aJx c #692e12", +"aS. c #692e13", +".#2 c #692e68", +"aE0 c #693419", +"a0M c #69351f", +"i0I c #693622", +"#pH c #69371c", +"atp c #693a19", +"#JT c #693a1d", +".87 c #693a1e", +"ant c #693a22", +".Co c #693b1e", +".Mv c #693b21", +"hVl c #693c1f", +".MZ c #693c20", +"#Um c #693c23", +"i3F c #693c27", +"#F9 c #693d20", +"#b1 c #693d21", +"dfj c #693d26", +"#eA c #693e21", +"c7i c #693e26", +"#FZ c #693f24", +"jqz c #693f26", +".4J c #694023", +".RC c #694025", +"#Jy c #694026", +"kIS c #694027", +"j1P c #694029", +"a#r c #694121", +".Pm c #694125", +"kO7 c #694127", +"jtq c #694128", +"#g6 c #694223", +"#vS c #694227", +".B5 c #694228", +"jwo c #694229", +"jPD c #69422a", +"#vk c #694327", +"#oG c #694328", +"ayU c #694329", +"jwn c #69432a", +"kcM c #69432b", +"#Jr c #694428", +".6E c #694429", +"#FK c #69442a", +"i6e c #69442f", +".SB c #694522", +"#gK c #694529", +"#rZ c #69452a", +"#FH c #69452b", +"jhn c #69452d", +"ajz c #694530", +"#ys c #69462b", +"#oC c #69472d", +"aCK c #694730", +"j#e c #694934", +".9V c #694a2e", +".u8 c #694a2f", +"jeR c #694a34", +".Q5 c #694b33", +"#cz c #694c30", +"aPO c #694d38", +"bzS c #695944", +"bvH c #695a47", +"cgU c #695d55", +"cT1 c #69645e", +"#.U c #69685a", +".aV c #696969", +"#la c #696d5c", +"#f7 c #698375", +"#OY c #69877f", +"cCy c #698e9b", +".1P c #69908a", +".ZO c #69918c", +"cTt c #6995a3", +"bez c #699687", +"a7N c #69987c", +".Lm c #699e8f", +"aU1 c #69a495", +"brL c #69a49e", +"#V# c #69a4a8", +".q. c #69a9e3", +"bnn c #69adbb", +"bzD c #69b4bc", +"bex c #69b5bf", +"bi6 c #69becd", +"bJd c #69bfda", +"bvU c #69c0d7", +"bzE c #69c3d7", +"bev c #69c8e4", +"azb c #69c8eb", +"az# c #69c8ec", +"ay4 c #69c9ec", +"#.p c #69cad1", +"ay7 c #69caeb", +"avu c #69caed", +"aLD c #69cbef", +"aLE c #69ccef", +"aPS c #69cdf1", +"bih c #69d1f4", +"bij c #69d1f5", +"bmL c #69d1f6", +"bAm c #69d1f7", +"bAi c #69d1f8", +"bAh c #69d1f9", +"bdO c #69d2f4", +"bdQ c #69d2f5", +"bAn c #69d2f6", +"bvX c #69d2f8", +"bAc c #69d2f9", +"bnh c #69d3f5", +"biX c #69d3f6", +"bwb c #69d4f5", +"bu7 c #69d4f8", +"bDW c #69d4f9", +"bDV c #69d4fa", +"bDX c #69d5f9", +"bDT c #69d6fa", +"flV c #69d8e7", +"fhE c #69d8e8", +"flW c #69d8e9", +"fdK c #69dae5", +"fhG c #69daea", +"fFI c #69dbe5", +"fp0 c #69dbe9", +"eSV c #69dbea", +"flX c #69dcea", +"fp1 c #69ddea", +"fhI c #69ddeb", +"flY c #69ddec", +"fu# c #69deec", +"fu. c #69dfed", +"f26 c #69e0da", +"fyx c #69e0ea", +"flU c #69e1ee", +"ft9 c #69e1ef", +"gog c #69e2ec", +"fFK c #69e2ed", +"hag c #69e3ea", +"fua c #69e3ef", +"fTn c #69e4e9", +"hlr c #69e4eb", +"fyl c #69e4f1", +"gdy c #69e6e8", +"f8Z c #69e6e9", +"gdw c #69e6ea", +"gkD c #69e6f1", +"ga. c #69e7e9", +"fMS c #69e7eb", +"fI9 c #69e7ec", +"f51 c #69e7ed", +"f50 c #69e7ee", +"fTi c #69e7f4", +"f53 c #69e8ea", +"flT c #69e8f2", +"flS c #69e8f3", +"e2m c #69e8f7", +"e2l c #69e8f8", +"f2P c #69e9f2", +"fTd c #69e9f3", +"flR c #69e9f4", +"eXJ c #69e9f7", +"eXK c #69e9f8", +"fdo c #69e9f9", +"f#. c #69e9fa", +"fQk c #69eaf3", +"f2Q c #69eaf4", +"f2N c #69eaf5", +"f2M c #69eaf6", +"eSK c #69eaf9", +"e2u c #69eafa", +"f## c #69eafb", +"f2R c #69ebf4", +"f2S c #69ebf5", +"fTe c #69ebf6", +"fZJ c #69ebf8", +"fdn c #69ebf9", +"eNI c #69ebfa", +"eNH c #69ebfb", +"f2U c #69ecf6", +"f2V c #69ecf8", +"f2L c #69ecfa", +"eSJ c #69ecfb", +"fdm c #69ecfc", +"fMO c #69edfb", +"e2j c #69edfc", +"inX c #6a271e", +"g2b c #6a2820", +"iXV c #6a2d19", +"aJy c #6a3117", +"#Yk c #6a371f", +"kDj c #6a3720", +"kF5 c #6a3821", +"hPf c #6a391e", +"ats c #6a3a19", +"#Ga c #6a3a1d", +"a4x c #6a3b20", +"ibd c #6a3b24", +"#JU c #6a3c1e", +".KH c #6a3d20", +".OL c #6a3d22", +".6L c #6a3e20", +"##t c #6a3e22", +"ato c #6a3f1b", +"#eo c #6a3f22", +"#JE c #6a3f24", +"#ed c #6a4023", +"#Ci c #6a4024", +"#FY c #6a4025", +"aHc c #6a4026", +"jW5 c #6a4027", +"alB c #6a4120", +"#Co c #6a4127", +"jZq c #6a4128", +".HL c #6a412a", +"iGK c #6a4228", +"jko c #6a422b", +"cXV c #6a422e", +"#yI c #6a4326", +"#yJ c #6a4327", +".Ra c #6a4328", +"#Uj c #6a4329", +"jB2 c #6a432b", +"#jP c #6a4427", +"#M4 c #6a4428", +".OY c #6a442a", +"jPB c #6a442b", +".9t c #6a4529", +"#rV c #6a452a", +"#rS c #6a4629", +"#B5 c #6a462a", +".OW c #6a462c", +"aH. c #6a462d", +"kcL c #6a462e", +"i6f c #6a462f", +"i6d c #6a4630", +".2i c #6a4727", +"#vg c #6a4729", +"#rX c #6a472b", +"aLu c #6a472d", +".B8 c #6a472e", +"#r3 c #6a482c", +"aT4 c #6a482d", +".MB c #6a4930", +"jeK c #6a4934", +".Kk c #6a4a32", +"i8P c #6a4a33", +"j#k c #6a4c36", +"#oy c #6a4d33", +"ajk c #6a4f2c", +"aLt c #6a4f35", +"dCM c #6a574f", +"brI c #6a5b48", +"afu c #6a5d49", +"#J9 c #6a6251", +"#Gq c #6a634f", +"bi2 c #6a6352", +"dbh c #6a6761", +"cOR c #6a6963", +"QtR c #6a6a6a", +"cYb c #6a6b66", +"cTn c #6a6e6a", +"beu c #6a7165", +"bi9 c #6a735f", +"#AT c #6a7b6f", +"#Lt c #6a7e73", +".xl c #6a8962", +".Qe c #6a8c7a", +"#Kt c #6a8e89", +"cTC c #6a8f9e", +"#uz c #6a958c", +"#SA c #6a9592", +"a3g c #6a978b", +".r7 c #6a9a7f", +"#al c #6aa5a2", +".m3 c #6aa7e7", +".qa c #6aa8e1", +".q# c #6aa9e2", +"bSM c #6aaec0", +"bi3 c #6ab6c9", +"aDD c #6ac2d0", +"cg3 c #6ac2de", +"#ak c #6ac7d4", +"ay8 c #6acaeb", +"ay5 c #6acaec", +"aze c #6acaee", +"aC0 c #6acbec", +"aHn c #6acbed", +"brt c #6acce7", +"aT7 c #6acdf0", +"bzL c #6aceec", +"bew c #6ad0ef", +"bAk c #6ad0f8", +"bAj c #6ad0f9", +"bii c #6ad1f5", +"bAl c #6ad1f8", +"bEK c #6ad1f9", +"bEG c #6ad1fa", +"eN5 c #6ad2e1", +"bzJ c #6ad2f3", +"bdP c #6ad2f4", +"bik c #6ad2f5", +"bmK c #6ad2f6", +"bvW c #6ad2f8", +"bEF c #6ad2fa", +"biW c #6ad3f6", +"bq1 c #6ad3f7", +"bA# c #6ad3f8", +"bEB c #6ad3f9", +"bEE c #6ad3fa", +"bAr c #6ad4f5", +"bJC c #6ad4f6", +"bru c #6ad4f7", +"bD0 c #6ad4f8", +"bnp c #6ad5f8", +"bzg c #6ad5f9", +"bDQ c #6ad6fb", +"fhS c #6adae7", +"fhR c #6adae9", +"fdL c #6adbe6", +"d8K c #6adbe9", +"fhK c #6addeb", +"fFF c #6adee6", +"fhJ c #6adeec", +"fhM c #6adeed", +"fp2 c #6adfeb", +"fhL c #6adfec", +"eXU c #6ae0ee", +"fur c #6ae1ee", +"f27 c #6ae2d8", +"gSC c #6ae2ea", +"grU c #6ae2eb", +"fhC c #6ae2ef", +"fdr c #6ae2f1", +"g8s c #6ae3ea", +"gWv c #6ae3eb", +"e6Z c #6ae3f2", +"f6k c #6ae4eb", +"gkE c #6ae4ec", +"fyp c #6ae4f2", +"fWO c #6ae5e8", +"grZ c #6ae5e9", +"gok c #6ae5eb", +"fuc c #6ae5f1", +"gkF c #6ae6eb", +"gDg c #6ae6f1", +"ga# c #6ae7e8", +"f81 c #6ae7e9", +"fMT c #6ae7ea", +"fyo c #6ae7f4", +"f82 c #6ae8e8", +"fQl c #6ae8eb", +"fJ. c #6ae8ed", +"fJ# c #6ae8ee", +"gol c #6ae8f2", +"fyn c #6ae8f5", +"e2n c #6ae8f7", +"gom c #6ae9f2", +"f6j c #6ae9f4", +"gg2 c #6ae9f5", +"e2o c #6ae9f7", +"gon c #6aeaf3", +"eXI c #6aeaf8", +"eXM c #6aeaf9", +"e6O c #6aeafa", +"f#a c #6aeafc", +"f2T c #6aebf5", +"fTh c #6aebf6", +"eXL c #6aebf9", +"eSQ c #6aebfa", +"e6M c #6aebfb", +"e6N c #6aebfc", +"fTf c #6aecf7", +"gkx c #6aecfa", +"eSL c #6aecfb", +"e6L c #6aecfc", +"fTg c #6aedf8", +"fZK c #6aedf9", +"eSN c #6aedfb", +"eSM c #6aedfc", +".rg c #6afaf7", +".o5 c #6afffa", +"hjr c #6b2019", +"igi c #6b221a", +"f4a c #6b2a1b", +"ilp c #6b2a20", +"jbM c #6b2f1e", +"hLM c #6b3622", +".2B c #6b3b1f", +"j#a c #6b3c28", +"hYo c #6b3d22", +".9b c #6b3e21", +".Ke c #6b3e22", +"c2C c #6b3e28", +"a#s c #6b3f1d", +"#lX c #6b3f24", +".4E c #6b4022", +"aBv c #6b4023", +"aBu c #6b4024", +"#QN c #6b4026", +".2C c #6b4123", +"#lE c #6b4125", +"kfu c #6b4127", +".8U c #6b4224", +"#Cp c #6b4226", +"jW4 c #6b4229", +"#Ui c #6b4328", +".B6 c #6b4329", +"ajm c #6b441f", +"#jJ c #6b4423", +".9m c #6b4426", +"jMZ c #6b452a", +"jB0 c #6b452b", +"#oA c #6b462a", +".WD c #6b4727", +"#ji c #6b4729", +"#rW c #6b472b", +"jho c #6b472f", +"#oR c #6b482c", +"#oQ c #6b482d", +"j6L c #6b482f", +".B9 c #6b4930", +"#FG c #6b4a2f", +".OP c #6b4b32", +"jeL c #6b4c37", +".UX c #6b5038", +"adu c #6b513c", +"c72 c #6b5c52", +".6h c #6b5e4a", +"bnm c #6b624f", +"Qt6 c #6b6b6b", +"#u6 c #6b6d52", +".Bb c #6b6d5f", +"dfV c #6b6e67", +"#u4 c #6b765f", +"#l# c #6b7765", +".mB c #6b7b8a", +"#xB c #6b7e6e", +"bZ4 c #6b7e82", +"#Ej c #6b7f73", +".8z c #6b8278", +"cym c #6b8692", +"#RA c #6b9795", +".Jh c #6b998f", +"cK4 c #6ba1b7", +".AY c #6ba39e", +".xJ c #6ba49f", +"#fg c #6ba4a0", +"bna c #6bab9d", +".p9 c #6babe4", +".nB c #6bace9", +"aU6 c #6bada9", +"#NU c #6baeb6", +"bEm c #6bafb8", +".n9 c #6bb1ea", +"aUC c #6bb6b8", +"bD2 c #6bbbca", +"ctR c #6bbcd2", +"bIL c #6bc9e6", +"ay9 c #6bcaed", +"aT6 c #6bcbeb", +"aHp c #6bcbec", +"aC2 c #6bccec", +"aC1 c #6bcced", +"aT8 c #6bcdf1", +"aPR c #6bcef1", +"bD8 c #6bd1f1", +"bEL c #6bd1f9", +"bi5 c #6bd2f3", +"bmE c #6bd2f5", +"bEH c #6bd2f9", +"bvD c #6bd3f4", +"bng c #6bd3f5", +"bmJ c #6bd3f6", +"bJB c #6bd3f7", +"bER c #6bd3f8", +"bvV c #6bd3f9", +"bEC c #6bd3fa", +"brw c #6bd4f6", +"bJA c #6bd4f7", +"bEA c #6bd4f8", +"bED c #6bd4fa", +"eX9 c #6bd5e4", +"bDS c #6bd7fb", +"d36 c #6bd9e6", +"fhP c #6bdcec", +"fhO c #6bddec", +"fFG c #6bdee6", +"fp4 c #6bdeeb", +"fhN c #6bdeed", +"flZ c #6bdfec", +"fp3 c #6be0eb", +"eb2 c #6be0ee", +"fuo c #6be2ef", +"fup c #6be2f0", +"gOQ c #6be3ea", +"goi c #6be3eb", +"goh c #6be3ec", +"gzr c #6be3ed", +"fuq c #6be3ef", +"goj c #6be4e9", +"grX c #6be4ea", +"g0v c #6be4eb", +"fym c #6be4f0", +"f#f c #6be4f4", +"grY c #6be5e9", +"gr0 c #6be6ea", +"gr1 c #6be7e9", +"fMU c #6be7ea", +"f83 c #6be8e8", +"gDl c #6be8f0", +"gzu c #6be8f1", +"fJa c #6be9ee", +"gzv c #6be9f2", +"fub c #6be9f3", +"fhB c #6beaf6", +"fhA c #6bebf7", +"eXH c #6bebfa", +"f#b c #6bebfb", +"e6P c #6bebfc", +"eXN c #6becfa", +"e2t c #6becfb", +"e6X c #6becfc", +"eSO c #6bedfb", +"f#d c #6bedfc", +"inU c #6c1d11", +"g2a c #6c2921", +"djG c #6c2e15", +"djF c #6c3017", +"aWu c #6c3219", +"dlB c #6c3417", +".2w c #6c3b1f", +"#QQ c #6c3b21", +"is5 c #6c3b26", +"dWK c #6c3c2e", +"aV8 c #6c3d22", +".zg c #6c3e21", +"abf c #6c3e23", +".Os c #6c3f20", +"#sQ c #6c3f21", +".0K c #6c3f22", +"abd c #6c3f24", +".6W c #6c4022", +"jqt c #6c4027", +".Pl c #6c4124", +"#FX c #6c4126", +".WR c #6c4226", +"kIT c #6c4228", +"jkl c #6c4229", +"c7l c #6c422c", +"daj c #6c422d", +".Zd c #6c4324", +"#e. c #6c4326", +"iBc c #6c4328", +"au7 c #6c4329", +"#mt c #6c4423", +"aa9 c #6c4428", +"jkp c #6c442c", +".L9 c #6c4524", +".Bt c #6c4526", +"#QG c #6c4528", +".B7 c #6c452a", +"kh7 c #6c452b", +"adq c #6c4625", +"aa8 c #6c4626", +"#ca c #6c4628", +"#yz c #6c462a", +".B4 c #6c462b", +".QH c #6c4724", +"#vl c #6c4729", +".yK c #6c472b", +"#QJ c #6c472c", +"jzb c #6c472e", +".OX c #6c482c", +"jKq c #6c482f", +"#ka c #6c4b2a", +"#v# c #6c4b2d", +"#oO c #6c4b2e", +".MA c #6c4c34", +"#yr c #6c4d2f", +"#v. c #6c4d30", +"jhy c #6c4e38", +".UW c #6c4f35", +".OO c #6c523b", +".Ua c #6c5d48", +"bEg c #6c5d49", +".LO c #6c6651", +"dyc c #6c665d", +"cYw c #6c665f", +".hr c #6c696e", +"cGS c #6c6a66", +".#l c #6c6c6c", +"c2Z c #6c6d67", +"a7B c #6c786c", +"c8h c #6c7c7c", +"#nZ c #6c7d70", +".xx c #6c8263", +"cyn c #6c838d", +".Gm c #6c8570", +".NX c #6c8c77", +"cKN c #6c92a4", +"cCh c #6c95a8", +"bjf c #6ca48f", +"cGK c #6ca7ba", +"bel c #6caca1", +"biK c #6caea6", +"biR c #6cb0a8", +".oG c #6cb5ea", +"bjj c #6cb9be", +".r2 c #6cc4b3", +"eTp c #6cc5d0", +"aC8 c #6cc9ec", +"aC9 c #6cc9ed", +"aC7 c #6ccaee", +"eXW c #6ccbd8", +"aC6 c #6ccbee", +"aDf c #6ccbf0", +"aHo c #6ccced", +"aPV c #6ccdf0", +"aT9 c #6ccef1", +"bEJ c #6cd1f9", +"eYa c #6cd2e1", +"bmF c #6cd2f5", +"bEI c #6cd2fa", +"bmI c #6cd3f5", +"bmH c #6cd3f6", +"bJz c #6cd3f7", +"bA. c #6cd3f9", +"bnf c #6cd4f6", +"bu6 c #6cd4f7", +"bvx c #6cd5f6", +"bD9 c #6cd5f7", +"bIy c #6cd5fa", +"bDR c #6cd6fb", +"bzi c #6cd7f9", +"bno c #6cd7fa", +"bi4 c #6cd8fc", +"fdO c #6cdbe7", +"fdN c #6cdce7", +"fhT c #6cdce8", +"fl2 c #6cdceb", +"fhQ c #6cdcec", +"fl1 c #6cdeec", +"fp5 c #6cdfea", +"fl0 c #6cdfec", +"fus c #6ce1ee", +"gKW c #6ce2ea", +"gOP c #6ce2eb", +"gKV c #6ce3ea", +"grW c #6ce3eb", +"gG0 c #6ce3ec", +"gWu c #6ce4e9", +"g4v c #6ce4ea", +"f28 c #6ce5db", +"gvR c #6ce5ea", +"gDh c #6ce5ee", +"fue c #6ce5f0", +"hGX c #6ce6e9", +"gvQ c #6ce6ea", +"gg4 c #6ce6ec", +"fud c #6ce6f2", +"fMV c #6ce7e9", +"fQm c #6ce7ea", +"gDk c #6ce7ee", +"fJf c #6ce7ef", +"gaa c #6ce8e7", +"f54 c #6ce8e8", +"fQn c #6ce8e9", +"gzw c #6ce8ee", +"f25 c #6ceaec", +"fJb c #6ceaef", +"e2v c #6ceaf8", +"e2p c #6ceaf9", +"fJc c #6cebf0", +"goo c #6cebf5", +"e2q c #6cebfa", +"f#c c #6cebfb", +"e6Q c #6cebfc", +"f2W c #6cecf0", +"fJd c #6cecf1", +"fdq c #6cecfa", +"eXG c #6cecfb", +"eXF c #6cecfc", +"e6W c #6cedfd", +"eSP c #6ceefc", +".mO c #6cf3ff", +"dxC c #6d2912", +"jOC c #6d2b12", +"gX3 c #6d2d25", +"hf0 c #6d351d", +"#pI c #6d3d1f", +".4D c #6d3d20", +"#F4 c #6d3f21", +".4x c #6d3f22", +"#QO c #6d3f24", +"#jx c #6d4021", +"#eu c #6d4022", +"bkt c #6d4025", +"cXS c #6d4028", +"#bn c #6d4121", +"idW c #6d4123", +".Mp c #6d4124", +"#Nd c #6d4125", +"afi c #6d4126", +"##L c #6d4223", +"#JF c #6d4225", +"#JD c #6d4226", +".WJ c #6d4324", +".H4 c #6d4326", +"dfk c #6d432d", +"jUF c #6d4429", +"ko4 c #6d442a", +"cXU c #6d442d", +"#l4 c #6d4526", +"ar# c #6d4527", +"#yH c #6d4528", +"#FW c #6d4529", +"iJu c #6d452a", +"jnw c #6d452b", +".Es c #6d4625", +"#jh c #6d4627", +"#N# c #6d462a", +"jZp c #6d462b", +"jqx c #6d462c", +"c7q c #6d4631", +"#9b c #6d4725", +".Rb c #6d472a", +".Rc c #6d472b", +"ard c #6d472c", +"jM4 c #6d472d", +"#5f c #6d4826", +"#o1 c #6d4827", +"#M3 c #6d4828", +"#e# c #6d482a", +"jHz c #6d482c", +"i6h c #6d4930", +"i6g c #6d4931", +"#B3 c #6d4a2d", +"#r2 c #6d4a2e", +"#bH c #6d4b2e", +"jEU c #6d4b31", +"k#1 c #6d4b32", +".9a c #6d4c29", +"#rR c #6d4c2c", +"#oP c #6d4c2f", +".Wr c #6d4d2c", +".zk c #6d4d2e", +"k#0 c #6d4d34", +"j6K c #6d4d35", +"#e8 c #6d4e30", +"jkz c #6d4f37", +"jhz c #6d5039", +".v8 c #6d5136", +"aCJ c #6d553e", +"c73 c #6d6359", +"daY c #6d635b", +"bvG c #6d695a", +".#G c #6d6d6d", +"#AU c #6d7a6a", +".AL c #6d8165", +"#SB c #6d8273", +"bi8 c #6d8371", +"#lb c #6d8b83", +"cCp c #6d909e", +".Lc c #6d957d", +"cPo c #6d97ab", +".t9 c #6d9884", +"bEd c #6d9890", +"b#1 c #6da496", +"b#2 c #6da596", +"a21 c #6da797", +".DU c #6da8a5", +"aY8 c #6dad9b", +".tL c #6daf9a", +".p8 c #6db0e4", +"bzX c #6db2b8", +".70 c #6db9b7", +"ccu c #6dbbd7", +"#Ko c #6dbfcd", +"bIM c #6dc3d9", +"eTo c #6dc6d1", +"bD3 c #6dc7dd", +"aYj c #6dc8e5", +"bNz c #6dcae9", +"aza c #6dcaed", +"az. c #6dcbee", +"aDe c #6dcbf0", +"aC5 c #6dcced", +"aC3 c #6dcded", +"aYk c #6dcdef", +"aPT c #6dcff1", +"bmG c #6dd2f5", +"bEP c #6dd2f8", +"bz9 c #6dd2f9", +"brE c #6dd3f3", +"bqR c #6dd3f6", +"bEQ c #6dd3f7", +"bEN c #6dd3f8", +"brv c #6dd4f6", +"bni c #6dd4f7", +"bIO c #6dd4f8", +"bJk c #6dd4fb", +"bEV c #6dd5f5", +"bq0 c #6dd5f6", +"bry c #6dd5f7", +"bzf c #6dd5f8", +"bNi c #6dd5f9", +"bOp c #6dd6f7", +"bDL c #6dd6fa", +"bIJ c #6dd6fb", +"fdP c #6ddbe6", +"fdM c #6ddde8", +"d8I c #6dddea", +"fl3 c #6dddeb", +"fp7 c #6ddeea", +"fp6 c #6ddfea", +"gG1 c #6de2eb", +"fun c #6de2ed", +"gG2 c #6de3ea", +"grV c #6de3eb", +"gvM c #6de3ec", +"gDi c #6de4ea", +"gzs c #6de4eb", +"gvP c #6de5e9", +"gvO c #6de5ea", +"gDj c #6de5eb", +"hz2 c #6de6e9", +"gzt c #6de6eb", +"gG3 c #6de6ec", +"gab c #6de7e7", +"hwr c #6de7e9", +"hKh c #6de7ea", +"gG4 c #6de7ec", +"gr2 c #6de8e9", +"gg6 c #6de8ee", +"f55 c #6de9e7", +"fQo c #6de9e9", +"gDm c #6de9ee", +"ezv c #6de9f7", +"fQp c #6deae9", +"eXT c #6deaf9", +"fJe c #6debf1", +"got c #6debf6", +"e2r c #6debfa", +"e6R c #6debfb", +"e6Y c #6decfc", +"fyC c #6dedf8", +"e6V c #6dedfc", +"eXO c #6deefc", +"eXQ c #6deefd", +"f#e c #6deefe", +".qq c #6dfff8", +"iqu c #6e2116", +"iln c #6e2215", +"h.# c #6e271f", +"aNP c #6e3314", +"jkh c #6e3621", +"hca c #6e3821", +"kfm c #6e3822", +"aEY c #6e391b", +".4y c #6e3b1f", +"aHf c #6e3c1e", +"cXR c #6e3c24", +"#QP c #6e3f23", +"h4x c #6e4027", +".Fj c #6e4122", +"a0n c #6e4125", +"#yV c #6e4224", +"#vy c #6e4227", +".Xj c #6e4322", +"cXT c #6e432b", +"c2D c #6e432c", +"ibc c #6e4423", +".4O c #6e4424", +"kAJ c #6e4426", +"#X4 c #6e4427", +"arf c #6e4428", +"c2A c #6e4429", +"jny c #6e442a", +"#je c #6e4525", +"ahx c #6e4527", +"ktc c #6e4528", +"#1O c #6e4529", +"#9Z c #6e4623", +"#gJ c #6e4628", +"aCL c #6e462b", +".K. c #6e4728", +"anp c #6e472b", +"#9h c #6e472c", +".J7 c #6e482b", +"#y8 c #6e482c", +"jqw c #6e482d", +"i3I c #6e482e", +"c2G c #6e4832", +"apE c #6e4927", +".S9 c #6e492c", +"j9q c #6e492f", +".0N c #6e4a29", +"jM0 c #6e4a2f", +"jKo c #6e4a30", +"jEV c #6e4a31", +"#o0 c #6e4b29", +"#oz c #6e4b2d", +"jKp c #6e4b31", +"#Js c #6e4c2d", +"#rQ c #6e4c2e", +"#r0 c #6e4c30", +"j4i c #6e4c32", +"#vf c #6e4e2d", +"#oN c #6e4e31", +"#FF c #6e4f32", +"c8f c #6e6059", +"#u7 c #6e6345", +"daZ c #6e645a", +"QtI c #6e6e6e", +"cOQ c #6e7470", +"dlg c #6e7f7e", +".Du c #6e835e", +"b0# c #6e848f", +"cKP c #6e8b97", +".V3 c #6e9085", +"#uA c #6e9384", +"#fn c #6e958c", +".DV c #6e9a8d", +"cyd c #6ea2b5", +"aUK c #6ea495", +"#Sy c #6ea5a3", +".mu c #6ea7e6", +"aIj c #6ea899", +".lU c #6ea8ed", +"biN c #6ea996", +"a7T c #6eaaa2", +".nA c #6eafe9", +".pE c #6eb4e7", +"#zP c #6eb8c3", +"avO c #6eb9bb", +"#.o c #6ec0bd", +"eS2 c #6ec1cb", +".5v c #6ec4c8", +"cls c #6ec4da", +"aD. c #6ecaed", +"eI7 c #6ecbd8", +"aDd c #6ecbee", +"aHu c #6eccee", +"eTH c #6ecdd3", +"aC4 c #6ecded", +"f#w c #6eced9", +"aHr c #6eceed", +"aLF c #6eceef", +"aPU c #6ecff1", +"bE# c #6ed0ed", +"eYg c #6ed2e0", +"bNI c #6ed2f0", +"bqS c #6ed2f6", +"bEM c #6ed2f8", +"bJr c #6ed2f9", +"f#K c #6ed3da", +"bEO c #6ed3f9", +"bJo c #6ed3fa", +"bJn c #6ed3fb", +"bqY c #6ed4f6", +"bqX c #6ed4f7", +"bz8 c #6ed4f8", +"bEz c #6ed4f9", +"bJq c #6ed4fa", +"bJl c #6ed4fb", +"bzK c #6ed5f6", +"brx c #6ed5f7", +"bOo c #6ed5f8", +"bJj c #6ed5fa", +"bJm c #6ed5fb", +"e7o c #6ed6df", +"bEW c #6ed6f6", +"bOq c #6ed6f7", +"bDC c #6ed6f9", +"bIK c #6ed6fa", +"bII c #6ed6fb", +"f#D c #6ed7e3", +"bIE c #6ed8fd", +"f#E c #6ed9e3", +"fl5 c #6edfea", +"fl4 c #6ee0eb", +"hd9 c #6ee3eb", +"fum c #6ee3ec", +"gOR c #6ee4ea", +"gvN c #6ee4eb", +"gOS c #6ee5e9", +"g8t c #6ee5ea", +"gKX c #6ee5eb", +"fFL c #6ee5ed", +"gKY c #6ee6e9", +"ho2 c #6ee6ea", +"fuf c #6ee6ef", +"gvS c #6ee7e9", +"fJg c #6ee7ee", +"gdz c #6ee8e7", +"fMW c #6ee8e9", +"gzx c #6ee8ed", +"gac c #6ee9e7", +"fMX c #6ee9e8", +"f21 c #6ee9ed", +"gha c #6ee9ee", +"eEa c #6ee9f8", +"f9e c #6eeae9", +"fQq c #6eebea", +"gop c #6eebf6", +"gos c #6eebf7", +"e6S c #6eecfb", +"e6T c #6eecfc", +"f6f c #6eedeb", +"e6U c #6eedfc", +"e2s c #6eeefc", +"eXP c #6eeefd", +".nq c #6ef8fe", +"h.. c #6f2118", +"hRQ c #6f281a", +"jbL c #6f2e1d", +"dbA c #6f3713", +"kh3 c #6f3821", +"is6 c #6f3a27", +"#v3 c #6f3c1d", +"dSc c #6f3c2e", +"#ze c #6f3f1f", +"#1W c #6f3f24", +"i3J c #6f4025", +"#ep c #6f4122", +"#Nc c #6f4124", +"h1s c #6f4127", +"aKe c #6f4221", +".Mh c #6f4224", +"igr c #6f4327", +".OK c #6f4427", +".X# c #6f4526", +"aCN c #6f4529", +"iyq c #6f452b", +"i3G c #6f452d", +"c7m c #6f452e", +"#pt c #6f4624", +"#vM c #6f4625", +".8V c #6f4626", +"#Jz c #6f4628", +"aju c #6f4629", +"kcN c #6f462a", +"jtr c #6f462b", +"#sC c #6f4725", +".6K c #6f4726", +"ajr c #6f472a", +"#5n c #6f472b", +"c2E c #6f4731", +"aKg c #6f4826", +".Mo c #6f482a", +"kvC c #6f482b", +"#QH c #6f482c", +"#9i c #6f482d", +"c7p c #6f4832", +".0G c #6f4929", +"#oU c #6f492c", +"#QI c #6f492d", +"c7r c #6f4932", +"#QF c #6f4a28", +".E5 c #6f4a2e", +"jPA c #6f4a2f", +"ani c #6f4b24", +"#xe c #6f4b27", +".vu c #6f4b2a", +"#Jq c #6f4b2c", +"#yA c #6f4b2d", +"j1N c #6f4b2e", +"j6I c #6f4b2f", +"jhp c #6f4b32", +"##z c #6f4c29", +"#Uh c #6f4c2a", +"#B6 c #6f4c2e", +".HH c #6f4c32", +".SA c #6f4d29", +"#B1 c #6f4d2f", +"#r1 c #6f4e31", +".y2 c #6f4f35", +"#mV c #6f5031", +"jbX c #6f5138", +"jhx c #6f513a", +"j#l c #6f523a", +".7y c #6f5337", +"aG9 c #6f563b", +".Ms c #6f563f", +"arj c #6f573e", +"cxM c #6f635c", +"brC c #6f6953", +".h8 c #6f6c71", +".c8 c #6f6f6f", +"c3z c #6f726d", +"b46 c #6f7270", +".3Z c #6f7667", +".ND c #6f7c5f", +"#u3 c #6f7e66", +"cYk c #6f8184", +".Az c #6f8862", +".V9 c #6f938d", +".GD c #6f9683", +"cGJ c #6f96a5", +".ZX c #6f9d9a", +"beA c #6fa08d", +".NJ c #6fa395", +"#ap c #6fa5a0", +"aT5 c #6fa8b3", +"b#3 c #6faa9c", +"bnd c #6fae9c", +"aQP c #6fb2a9", +".nz c #6fb3ea", +".5H c #6fb6b6", +".n8 c #6fb9eb", +"eEk c #6fc6d3", +"eTh c #6fc7d3", +"eTj c #6fc9d5", +"a2v c #6fc9e8", +"eNZ c #6fcad6", +"aD# c #6fcbed", +"aDc c #6fcbef", +"bSr c #6fcceb", +"aHv c #6fccee", +"aHq c #6fcdee", +"aHx c #6fcdef", +"aLG c #6fceec", +"aHs c #6fceee", +"aPW c #6fcff0", +"aYl c #6fcff2", +"a2x c #6fd0f4", +"b.2 c #6fd0f5", +"a2w c #6fd1f5", +"f#L c #6fd3da", +"bqV c #6fd3f6", +"bJs c #6fd3f9", +"bJp c #6fd3fa", +"bqZ c #6fd4f6", +"bqW c #6fd4f7", +"bEy c #6fd4f9", +"bnq c #6fd5f5", +"bE. c #6fd5f7", +"bOn c #6fd5f8", +"bIS c #6fd6f7", +"bIH c #6fd6fb", +"fCe c #6fd7d6", +"bIG c #6fd7fb", +"bIF c #6fd7fc", +"bID c #6fd7fd", +"d8J c #6fddea", +"fp8 c #6fe2ea", +"hah c #6fe3eb", +"gWw c #6fe4e9", +"gSD c #6fe4ea", +"g4w c #6fe5ea", +"gSE c #6fe6e9", +"hsM c #6fe6ea", +"hUb c #6fe7e8", +"fQr c #6fe7e9", +"fJh c #6fe7ed", +"h6g c #6fe8e6", +"gdA c #6fe8e7", +"gG5 c #6fe8ec", +"gg5 c #6fe8ef", +"h3h c #6fe9e5", +"f84 c #6fe9e7", +"gr3 c #6fe9e8", +"gr7 c #6fe9e9", +"f20 c #6fe9ec", +"i#7 c #6feae4", +"f85 c #6feae8", +"fMY c #6feae9", +"f2Z c #6feaea", +"f22 c #6feaeb", +"gDn c #6feaec", +"ghb c #6feaef", +"gkG c #6feaf6", +"gg1 c #6feaf9", +"f56 c #6febe7", +"gou c #6febf1", +"gor c #6fecf9", +"f6c c #6feeeb", +"eSU c #6feefd", +"f6d c #6fefed", +".pw c #6ffef8", +"jRg c #702d10", +"dgI c #703414", +"j## c #703623", +"jhj c #703721", +"kd5 c #703c20", +"kAM c #703d21", +"iqD c #704028", +"cK# c #704223", +"bfL c #704225", +"dfi c #704227", +"aFQ c #704325", +"#Ne c #704326", +".Tp c #704422", +"bbE c #704423", +"#Cj c #704425", +"#vx c #704427", +"aff c #704627", +"#Cd c #704726", +"#oW c #704729", +"kfv c #70472b", +"jW6 c #70472c", +".UN c #704828", +"kx6 c #70482b", +"iJw c #70482c", +"jnx c #70482d", +"#hg c #704925", +"kAK c #70492b", +"ajq c #70492c", +"jR8 c #70492d", +"jZr c #70492e", +".63 c #704a28", +"#Jx c #704a2c", +"#QL c #704a2d", +"jPy c #704a2e", +".y3 c #704b2c", +"j4h c #704b2f", +"jR9 c #704b30", +".MC c #704c30", +"j9m c #704c31", +"#t9 c #704d29", +"jtu c #704d33", +"jET c #704e34", +"atB c #704f2d", +"#B2 c #704f30", +"jtv c #704f34", +".UG c #70502f", +"#B0 c #705033", +"#vb c #705131", +".Xr c #705134", +".C. c #705137", +"i8Q c #705138", +".Uv c #705230", +"#va c #705232", +"jeS c #70523a", +"ae8 c #70532f", +"aPJ c #705334", +".Tx c #70533a", +".S0 c #70553b", +"ajy c #70573e", +"#u9 c #705838", +"#u8 c #705b3b", +"#mX c #706342", +"#W. c #706850", +"#u. c #706b52", +".nT c #706c26", +".x3 c #70705e", +"QtH c #707070", +"#qX c #707157", +"#it c #70745b", +"#q0 c #707763", +"cGR c #707776", +"#AV c #707b67", +"#bg c #707b70", +".DG c #707e61", +"#HQ c #708072", +"cgY c #70868b", +"bZ5 c #7097a2", +"#hO c #70a3a0", +"brR c #70aca7", +"bXC c #70b9ce", +"aHw c #70cbee", +"aDb c #70ccee", +"aHt c #70cdee", +"#Kn c #70cee1", +"aLI c #70ceed", +"aLH c #70ceee", +"aLL c #70cef0", +"aHD c #70cef1", +"eXY c #70cfdb", +"aPX c #70cff0", +"bIV c #70d0ec", +"aU. c #70d0f2", +"a6H c #70d1f5", +"bqT c #70d3f6", +"bqU c #70d4f6", +"bJy c #70d4f8", +"bEx c #70d4fa", +"buU c #70d5f8", +"bOm c #70d5f9", +"bJi c #70d5fa", +"bOa c #70d5fc", +"bAs c #70d6f7", +"bIT c #70d6f8", +"bNj c #70d6f9", +"bNh c #70d6fa", +"bO# c #70d6fb", +"bJD c #70d7f7", +"bDK c #70d7fb", +"egI c #70deeb", +"fhW c #70e1eb", +"hai c #70e4eb", +"hDx c #70e5e9", +"hlt c #70e5ea", +"g8u c #70e6e9", +"fJj c #70e6ea", +"fJi c #70e6ec", +"fug c #70e6ed", +"hXb c #70e7e7", +"fM0 c #70e7e8", +"gSF c #70e7ea", +"h0m c #70e8e6", +"gr5 c #70e8e7", +"gr4 c #70e8e8", +"gr6 c #70e8e9", +"gKZ c #70e8ea", +"f29 c #70e9dd", +"h3i c #70e9e5", +"hhR c #70e9e6", +"gdB c #70e9e7", +"ghe c #70e9e8", +"fMZ c #70e9e9", +"gzy c #70e9ea", +"gh# c #70e9f0", +"euY c #70e9f8", +"f59 c #70eae5", +"gad c #70eae8", +"gG6 c #70eaea", +"gg7 c #70eaf1", +"gae c #70ebe6", +"f86 c #70ebe7", +"gdC c #70ece6", +"f57 c #70ece7", +"f2X c #70ece8", +"f2Y c #70ecea", +"fuz c #70ecf6", +"goq c #70ecf8", +"gkH c #70ecf9", +"f24 c #70eded", +"fuB c #70edf8", +"gky c #70edfb", +"fZN c #70eeea", +".#s c #712872", +"iiR c #712c24", +"dlx c #713414", +"hqM c #713a22", +"jL5 c #713b1c", +"aAK c #713e22", +"abi c #714024", +"ii0 c #714029", +".6V c #714122", +"abj c #714124", +"cOE c #714326", +"#bW c #714423", +"#vz c #714427", +"jnt c #714429", +".Vn c #714522", +"axz c #714524", +"#iW c #714527", +"#9t c #714528", +"i.h c #714624", +"kx5 c #714627", +".4F c #714725", +"#y0 c #714727", +".6X c #714825", +"#lW c #71482b", +"jqu c #71482c", +"jnz c #71482d", +"ivB c #71482e", +"kF2 c #71492b", +"kIR c #71492c", +"j9l c #71492d", +".0v c #714a27", +"aFS c #714a28", +"#Cn c #714a2b", +"iSh c #714a2c", +".S6 c #714a2d", +"jUG c #714a2e", +"iSg c #714a30", +"c2F c #714a32", +".Ep c #714b29", +".S7 c #714b2d", +"#bo c #714b2e", +"j1M c #714b2f", +".Yx c #714c28", +"adp c #714c2a", +"#vm c #714c2c", +"#M9 c #714c2d", +".vO c #714c2e", +"j1O c #714c2f", +"aBe c #714d23", +"#r7 c #714d2b", +"#M5 c #714d2f", +"jPu c #714d30", +".es c #714d62", +"#FL c #714f2e", +"bxE c #714f2f", +"#B4 c #714f30", +"#Jt c #715030", +"jqC c #715035", +".0g c #71512d", +"jHI c #715136", +"jnH c #715239", +"jqG c #71533a", +"jky c #71533b", +"anh c #71552e", +"#FE c #715536", +"jhw c #71553c", +".7w c #715b3c", +".Q4 c #715b43", +".9U c #715c3d", +"cKW c #71635a", +"#ub c #71654d", +"b#X c #71654f", +"cKU c #71655d", +"cYH c #71665d", +"brH c #716a56", +"c7M c #71716a", +"Qth c #717171", +"#nW c #71765b", +"bzR c #71786c", +"#Ek c #717f6c", +".tX c #71825d", +".T4 c #71836d", +"#xC c #718571", +"bvJ c #71938d", +"#uB c #719583", +".Ji c #719683", +"aZj c #71a88a", +"a7i c #71ab96", +"aH9 c #71ada6", +"aDL c #71af9f", +"bXD c #71b6c4", +".pa c #71bce9", +"bJc c #71cce9", +"aDa c #71ccee", +"bIN c #71cde9", +"bSo c #71cdee", +"aHz c #71cdef", +"aLK c #71ceef", +"aHC c #71cef0", +"f#v c #71cfdb", +"aLJ c #71cfee", +"aLT c #71cff1", +"bdu c #71d0f2", +"f#u c #71d1dd", +"bJt c #71d3f9", +"bu5 c #71d4f7", +"bJx c #71d4f8", +"bEw c #71d4f9", +"bOb c #71d4fc", +"bu3 c #71d5f6", +"bu4 c #71d5f7", +"bJu c #71d5f8", +"bJh c #71d5fa", +"bIU c #71d6f7", +"bTa c #71d6f8", +"bOl c #71d6f9", +"bN9 c #71d6fc", +"f#J c #71d7dc", +"bJE c #71d7f7", +"bOr c #71d7f8", +"f#N c #71d8df", +"f#O c #71d8e1", +"eYA c #71d8e2", +"b6t c #71d8fe", +"eYC c #71d9e2", +"fdQ c #71dce5", +"fh5 c #71dde5", +"fhZ c #71e0e9", +"fhX c #71e1ea", +"fhU c #71e2eb", +"hsN c #71e4e9", +"fJn c #71e5e9", +"he. c #71e5ea", +"ful c #71e5ee", +"fM2 c #71e6e7", +"g4x c #71e6e9", +"hak c #71e6ea", +"fQs c #71e7e7", +"fM1 c #71e7e8", +"gSG c #71e7e9", +"g0w c #71e7ea", +"hKi c #71e8e5", +"hGY c #71e8e6", +"g0y c #71e8e7", +"h6h c #71e9e4", +"f6# c #71e9e5", +"f6. c #71e9e6", +"gvT c #71e9e7", +"gWy c #71e9e8", +"gOT c #71e9e9", +"f3d c #71e9ed", +"ham c #71eae3", +"hz3 c #71eae4", +"g0A c #71eae5", +"f58 c #71eae6", +"g0z c #71eae7", +"ghf c #71eae8", +"gDo c #71eae9", +"ghd c #71eaed", +"ghc c #71eaef", +"f87 c #71ebe6", +"gzz c #71ebe7", +"gDp c #71ebe8", +"ghg c #71ece6", +"gK1 c #71ece7", +"f9d c #71ede5", +"fuy c #71edf6", +"fuA c #71edf7", +".oA c #71fefa", +".qT c #71fff7", +"isX c #72251a", +".#D c #722871", +"a0J c #722b1b", +"dtm c #723319", +"i8F c #723321", +"dp9 c #723415", +"jGC c #723617", +"jDX c #723718", +"kkg c #723a21", +"kgG c #723b1c", +"dBs c #723e1f", +"hjz c #723e23", +"aE8 c #724222", +"##u c #724223", +"#zf c #724321", +"#vY c #724322", +"#Cz c #724323", +"#sf c #724427", +"##B c #724524", +"cFQ c #724526", +"idX c #72452c", +"bg# c #724623", +"#g5 c #724624", +".9c c #724726", +"h7t c #72472c", +"#c# c #724826", +"#yU c #724829", +"kDi c #72482c", +"jZn c #72482d", +"#yZ c #72492a", +"jUH c #72492c", +"cXW c #724930", +"#JC c #724a2b", +"kF4 c #724a2c", +"iGM c #724a2d", +"iGL c #724a2e", +"dao c #724a33", +"k#4 c #724b2d", +"iD5 c #724b2e", +"jR7 c #724b2f", +"i6j c #724b30", +".Bs c #724c2a", +"#sJ c #724c2d", +"ann c #724c2f", +"j9r c #724c30", +"i6i c #724c31", +"jkq c #724c32", +"#bF c #724d2c", +".1# c #724d2d", +"#N. c #724d2e", +"au5 c #724d2f", +"jqv c #724d30", +".Uy c #724d31", +"#sM c #724e28", +".SJ c #724e29", +".BU c #724e2d", +"#QK c #724e30", +"jMV c #724e31", +"j1R c #724e32", +"#FM c #724f2f", +"#Jp c #72502d", +"#oS c #725031", +"jKr c #725034", +"jB5 c #725035", +".7x c #72512f", +"kcK c #725135", +"jnB c #725137", +"jHG c #725237", +"#vc c #725433", +"#oD c #725436", +"jkx c #72543a", +".9# c #72552f", +"#ve c #725531", +"jkB c #72553b", +"#yq c #725636", +"aPI c #725b3a", +"c25 c #72655e", +".iK c #727074", +".kg c #727272", +"#7h c #727653", +"a3e c #728371", +"b2e c #72968c", +"b#V c #729790", +"aDZ c #72a899", +"aQR c #72aa96", +"bSF c #72acb3", +"aQQ c #72af9e", +"a2Z c #72b4a6", +"bSN c #72b4b7", +"bvr c #72b5af", +".ny c #72b8eb", +"aQp c #72bbba", +"b9M c #72bbce", +"bdt c #72c3db", +"dZh c #72c5c0", +"eOa c #72c7d2", +"a6G c #72c9e5", +"aHy c #72cdf0", +"aHA c #72cdf1", +"aLM c #72ceef", +"aLN c #72cff0", +"aHG c #72cff1", +"bzP c #72d0eb", +"aLU c #72d0f1", +"aHE c #72d0f2", +"aUc c #72d1f1", +"aUb c #72d1f2", +"a6I c #72d1f3", +"aU# c #72d2f3", +"bNy c #72d3f5", +"bvQ c #72d3fa", +"bJw c #72d4f9", +"bOc c #72d4fb", +"eJk c #72d5e3", +"bSy c #72d5f4", +"bu2 c #72d5f6", +"buV c #72d5f8", +"bJv c #72d5f9", +"bN7 c #72d5fb", +"bu0 c #72d6f7", +"bJe c #72d6f8", +"bNB c #72d6f9", +"bOe c #72d6fa", +"bO. c #72d6fb", +"bN8 c #72d6fc", +"f#M c #72d7de", +"eJm c #72d7e6", +"bEX c #72d7f7", +"buZ c #72d7f8", +"bIz c #72d7f9", +"b1D c #72d7fc", +"bOs c #72d8f8", +"bIC c #72d8fc", +"f#P c #72dae3", +"e7x c #72dae4", +"f#F c #72dbe3", +"fh4 c #72dce5", +"e7w c #72dce6", +"fh1 c #72dee7", +"fhY c #72e1ea", +"fqg c #72e2ea", +"fhV c #72e2eb", +"fl6 c #72e3eb", +"fJp c #72e4e8", +"hsO c #72e4e9", +"g8v c #72e5e9", +"hls c #72e5ea", +"fp9 c #72e5eb", +"fJo c #72e6e8", +"g0x c #72e6e9", +"g4y c #72e6ea", +"fWP c #72e7e0", +"fM3 c #72e7e7", +"gWx c #72e7e8", +"haj c #72e7e9", +"hhQ c #72e7ea", +"hGZ c #72e8e5", +"hDy c #72e8e6", +"g4z c #72e8e7", +"hlu c #72e8e8", +"gSH c #72e8e9", +"hlv c #72e9e4", +"gWz c #72e9e5", +"ho3 c #72e9e6", +"hal c #72e9e7", +"gSI c #72e9e8", +"g8x c #72eae3", +"g4B c #72eae4", +"g4A c #72eae5", +"gvU c #72eae6", +"gzA c #72eae7", +"gK0 c #72eae8", +"gG7 c #72eae9", +"g4C c #72ebe3", +"hea c #72ebe4", +"f88 c #72ebe5", +"gr8 c #72ebe6", +"gzB c #72ebe7", +"gG8 c #72ebe8", +"gWC c #72ece3", +"gOV c #72ece4", +"gdD c #72ece5", +"gaf c #72ece6", +"gDq c #72ece7", +"gov c #72ecec", +"gkI c #72ecfb", +"gSJ c #72ede4", +"ghh c #72ede5", +"f23 c #72ede8", +"fuC c #72eef7", +"f6e c #72f1e8", +".n2 c #72fbfc", +".pY c #72fff8", +"aWs c #732a17", +"g6b c #732a22", +"jTE c #732b0c", +"d#L c #732f15", +"iXW c #733618", +"dof c #733918", +"#UI c #733d21", +"#zg c #733e1e", +"klz c #733f20", +"hnj c #733f23", +"ajv c #734123", +"dkf c #734227", +"in4 c #73422a", +".Rt c #734322", +".3h c #734323", +"#1Q c #734325", +"hPg c #73452c", +"cOs c #734625", +".6R c #734725", +"dag c #73472a", +".8F c #734825", +"#9p c #73482a", +"dxM c #73482e", +"#sx c #734926", +"#l6 c #734927", +"j6H c #73492d", +"dfl c #734931", +".2D c #734a27", +".1f c #734a29", +"#Ch c #734a2a", +"ko1 c #734a2e", +"c7o c #734a32", +".2H c #734b29", +".5k c #734b2b", +"kMf c #734b2c", +"jqy c #734b2d", +"aFC c #734c1c", +".YD c #734c29", +"ara c #734c2e", +"jW2 c #734c2f", +"jqA c #734c30", +"i3H c #734c31", +"#.3 c #734d29", +"#g7 c #734d2a", +"#gM c #734d2c", +".S8 c #734d2f", +"kfr c #734d30", +".L7 c #734e2a", +"#mU c #734e2c", +"aPK c #734e2e", +"anm c #734e2f", +"k#Y c #734e30", +"#l2 c #734f2b", +".U3 c #734f2c", +"#vU c #734f2e", +"jPv c #734f31", +".Fk c #735032", +"k#Z c #735034", +"jwp c #735035", +"##k c #73512e", +"au3 c #735132", +"#qW c #73522c", +"bty c #735230", +"#oE c #735234", +".Wo c #735330", +".4j c #735331", +".Sz c #73542e", +"bPW c #735432", +"jhA c #73563c", +".u7 c #735738", +".SZ c #73573b", +"jhv c #73583f", +".ON c #736048", +"#xi c #73664f", +"c3t c #73675e", +"dCO c #737067", +"adb c #737259", +".dP c #737373", +"bns c #737663", +"cTo c #737873", +"cKu c #737b77", +"a7z c #737e6e", +"#u1 c #737f65", +"dyx c #738381", +"cpC c #738c91", +"#Ln c #73927f", +"#uC c #739482", +"#tm c #739f97", +"ccw c #73a9c2", +".m2 c #73afe8", +"cCr c #73b5c9", +"ccv c #73b9d4", +".oF c #73c4ec", +"aHB c #73cef2", +"eOy c #73cfd8", +"aLS c #73cff1", +"aPY c #73d0ee", +"aP1 c #73d0ef", +"aP2 c #73d0f0", +"aP3 c #73d0f1", +"aHF c #73d0f2", +"aP0 c #73d1ef", +"bEt c #73d1f0", +"a2y c #73d1f2", +"eJj c #73d2df", +"aUa c #73d2f3", +"b.3 c #73d2f5", +"bJg c #73d4fa", +"bu1 c #73d5f7", +"buW c #73d5f8", +"bJf c #73d5fa", +"bOd c #73d5fb", +"buX c #73d6f8", +"bDB c #73d6f9", +"bN6 c #73d6fb", +"bRY c #73d7fb", +"bJF c #73d8f7", +"b6s c #73d8fe", +"fdW c #73d9df", +"eYB c #73d9e2", +"bTb c #73d9f8", +"e7y c #73dbe3", +"e7v c #73dde7", +"fh2 c #73dee7", +"fia c #73e1eb", +"d8T c #73e1ef", +"fut c #73e2e9", +"fqf c #73e3ea", +"fm. c #73e3eb", +"fJq c #73e4e7", +"fl7 c #73e4eb", +"fq. c #73e5eb", +"fqc c #73e5ec", +"ebT c #73e5f3", +"fuh c #73e7eb", +"ify c #73e8e4", +"g8w c #73e8e7", +"he# c #73e9e3", +"hXc c #73e9e4", +"hsP c #73e9e5", +"eqm c #73e9f7", +"gWB c #73eae3", +"hhS c #73eae4", +"gWA c #73eae5", +"fQt c #73eae7", +"fJk c #73eaeb", +"fqs c #73eaf1", +"f6a c #73ebe3", +"f89 c #73ebe4", +"gOU c #73ebe5", +"gK2 c #73ebe6", +"gDr c #73ebe7", +"gh. c #73ebf4", +"gWD c #73ece2", +"g0B c #73ece3", +"g0C c #73ece4", +"gvV c #73ece5", +"gzC c #73ece6", +"gkR c #73ecf7", +"gSK c #73ede3", +"gag c #73ede4", +"gK3 c #73ede5", +"gkA c #73edfc", +"f9. c #73eee3", +"fQB c #73eeed", +"f3c c #73eef3", +"gkz c #73eefd", +".md c #73f0fd", +".rF c #73f1e6", +"hqG c #742118", +"kmC c #743c22", +"dlC c #743f1c", +"jOD c #74401e", +"hLL c #744227", +"#bO c #744425", +"aNR c #74451e", +".Ru c #744624", +".8R c #744726", +"alr c #744727", +"kDh c #744728", +"#Nb c #744729", +"iD3 c #744731", +"aSJ c #744821", +"#pG c #744825", +"#jw c #744826", +"jkk c #74482c", +"#b5 c #744926", +"#vL c #744929", +"kI9 c #74492a", +"c7n c #744931", +".9g c #744a27", +"#px c #744a28", +"j6G c #744a2d", +"afe c #744b2b", +"kF3 c #744b2d", +"dxL c #744b30", +"dak c #744b32", +".M. c #744c28", +"#Na c #744c2c", +"jUI c #744c2e", +"dan c #744c33", +"#jK c #744d29", +"iMj c #744d2f", +"jUC c #744d30", +"afc c #744e29", +"#yG c #744e2d", +"au4 c #744e2f", +"#vT c #744e30", +"ahy c #744f2a", +"#l7 c #744f2c", +"#Ca c #744f2e", +"#QM c #744f2f", +"arb c #744f30", +"jBZ c #744f31", +"jMY c #744f32", +"jKt c #744f33", +"axB c #74502f", +"jEP c #745031", +".Vv c #745032", +"jZs c #745033", +"#yB c #745130", +".YQ c #74522d", +"#FO c #745230", +"jtt c #745236", +"#Ju c #745433", +"#lI c #745434", +".5h c #745530", +"#oJ c #745534", +"jnG c #74553a", +"jhs c #74553b", +"jbY c #74563b", +".Wq c #745733", +"#oM c #745738", +".y1 c #74573b", +"jht c #74573c", +"jhu c #74593e", +"daX c #746c63", +"c3g c #746c64", +"bvB c #746d53", +"#nY c #747460", +".#k c #747474", +"#fk c #747656", +"#AW c #747f67", +"#u2 c #748168", +"#uG c #74846b", +"bj. c #74977c", +"b9Q c #749db3", +"aQS c #74aa91", +"azF c #74ab9b", +"bnD c #74ada3", +"b9K c #74aebb", +"b#4 c #74b19e", +"aDK c #74b2ac", +".5x c #74b4ac", +"bn# c #74b8ac", +"bnz c #74bcc3", +"b2l c #74bcd1", +".pD c #74bfe8", +"b9L c #74c1d3", +".5w c #74c2c1", +"bXw c #74c7dd", +"b.1 c #74c7df", +"aP4 c #74cfef", +"aPZ c #74d1ee", +"a2z c #74d1f1", +"aYm c #74d2f2", +"bOf c #74d4fb", +"bze c #74d5f8", +"bz4 c #74d5f9", +"bOg c #74d5fa", +"buY c #74d6f8", +"bzd c #74d6f9", +"by6 c #74d7f9", +"bWG c #74d7fc", +"fdV c #74d8de", +"bEY c #74d8f8", +"bNE c #74d8f9", +"bSZ c #74d8fb", +"bNw c #74d8fd", +"f#H c #74d9df", +"bNx c #74d9fc", +"fdR c #74dbe3", +"e7C c #74dce3", +"e3g c #74dde4", +"fh3 c #74dee5", +"fh0 c #74e1e8", +"fh6 c #74e1e9", +"fmd c #74e2e9", +"fi# c #74e2eb", +"fqd c #74e3ea", +"fqi c #74e3eb", +"fmf c #74e3ec", +"fqe c #74e4ea", +"fl8 c #74e5eb", +"fWQ c #74e6df", +"fWR c #74e6e4", +"fq# c #74e6eb", +"hNG c #74e9e3", +"hUc c #74e9e4", +"hws c #74e9e5", +"g8y c #74eae3", +"hz4 c #74eae4", +"fJm c #74eaea", +"f3. c #74ebdf", +"g8z c #74ebe2", +"g4D c #74ebe3", +"gSL c #74ece2", +"gr9 c #74ece5", +"gDs c #74ece6", +"g0D c #74ede2", +"ghi c #74ede3", +"f6b c #74ede4", +"gkU c #74ede5", +"gow c #74ede6", +"gkJ c #74edfc", +"gah c #74eee3", +"gdF c #74efe3", +"fuD c #74eff7", +"gaj c #74f0e2", +"f9f c #74f0ee", +"fZO c #74f1ea", +".o6 c #74fef8", +"hnc c #75241c", +"j#. c #75321f", +"hjs c #753225", +"hE6 c #753228", +"hb4 c #753428", +"jeD c #753520", +"doT c #753b20", +"gEU c #753c27", +"dBt c #75401d", +"dsL c #75401e", +"aEZ c #754020", +"iZm c #75411e", +"dlw c #75421b", +"hux c #754229", +"iJs c #75422c", +"#Uz c #754325", +"cXQ c #754326", +"jJv c #754422", +"dOt c #754425", +"#JL c #754524", +"#Yu c #754624", +"afk c #754728", +"aOk c #754820", +"#jC c #754826", +"#QT c #754829", +"cT. c #75482a", +"#yW c #754926", +".Q1 c #754929", +"aty c #754a29", +"#JG c #754a2a", +"#mn c #754b27", +"#JJ c #754b2b", +"bo0 c #754b2e", +"dam c #754b32", +"aBf c #754c1e", +"#l5 c #754c28", +"j4g c #754c2f", +"aW7 c #754d22", +"ajn c #754d24", +"##j c #754d2a", +"hYn c #754d2b", +".OJ c #754d2c", +"#JB c #754d2d", +"kkn c #754d2f", +".BQ c #754e2d", +"aHa c #754e2e", +"ayV c #754e2f", +"iJv c #754e30", +"#eC c #754f2b", +".vL c #754f30", +".U5 c #754f31", +"kft c #754f32", +"dap c #754f36", +".Op c #75502b", +"#yN c #75502e", +"atA c #75502f", +"#sK c #755030", +"##S c #755031", +".Mu c #755032", +".Oo c #75512b", +".8T c #75512e", +".Pk c #75512f", +"#C# c #755130", +".vK c #755131", +"jUB c #755132", +".y0 c #755133", +"j1Q c #755134", +".vP c #75522d", +"#sL c #75522f", +"#C. c #755230", +"#M8 c #755232", +".vN c #755333", +"jEW c #755336", +"jhq c #755339", +"#QE c #75542b", +".QG c #75542c", +".OM c #755436", +".QF c #75552e", +"jqD c #755539", +".0f c #755833", +"jeT c #75583d", +".Yj c #755934", +".7v c #755a35", +"#hy c #755a37", +"#k# c #755d3a", +".3f c #75603e", +"a7A c #756a53", +"cT0 c #75726a", +".cx c #757575", +".I2 c #758465", +"#HR c #758472", +"#xD c #758b74", +"#Lu c #758b7b", +"a3f c #75907b", +"bVi c #7597a3", +"cO8 c #7598a6", +".Nx c #75a693", +"aUG c #75a785", +"beh c #75a786", +"aYY c #75a794", +"aQy c #75a88e", +".nN c #75a8d3", +"#.m c #75ac9a", +"aYW c #75ae96", +"a3# c #75ae9c", +"aMA c #75b19d", +"a3h c #75b4a2", +"brs c #75b5a0", +"brS c #75b6b0", +"cGi c #75b6c8", +"ccx c #75b6ce", +"bnF c #75b8b2", +"aYi c #75b9c5", +"cyf c #75b9cd", +".p7 c #75b9e4", +"eNQ c #75c6d1", +"ccF c #75c8dd", +"eJd c #75ccd8", +"aP5 c #75cff0", +"aUk c #75d0f0", +"aUj c #75d1f1", +"bdv c #75d2f4", +"aUd c #75d3f1", +"aYn c #75d3f2", +"bzc c #75d6f8", +"bOh c #75d6f9", +"bIm c #75d6fa", +"bN. c #75d6fb", +"bS0 c #75d7fb", +"b1C c #75d7fd", +"bJG c #75d8f7", +"bNH c #75d8f8", +"bIA c #75d8f9", +"f#I c #75d9de", +"bTc c #75d9f8", +"bIB c #75d9fa", +"bIn c #75d9fb", +"bNv c #75d9fc", +"bNu c #75d9fd", +"bNr c #75d9ff", +"f#G c #75dae1", +"bNt c #75dafd", +"fdS c #75dbe0", +".lB c #75def1", +"e7u c #75dfe9", +"eb4 c #75dfeb", +"fh7 c #75e2e9", +"fmc c #75e2ea", +"fqh c #75e3e9", +"fi. c #75e3eb", +"fma c #75e4eb", +"fm# c #75e4ec", +"fqa c #75e5ea", +"fuv c #75e5eb", +"fqb c #75e6eb", +"fM9 c #75e7e7", +"fui c #75e7ea", +"fuk c #75e8ec", +"hKj c #75e9e4", +"fM7 c #75e9e7", +"h3j c #75eae2", +"hwt c #75eae4", +"ho4 c #75ebe1", +"gzE c #75ebe2", +"fM4 c #75ebe7", +"g8A c #75ece1", +"gzF c #75ece2", +"gvY c #75ece3", +"gvW c #75ece4", +"fQu c #75ece7", +"fJl c #75eceb", +"gg8 c #75ecf5", +"gkV c #75ede3", +"gzD c #75ede4", +"gkT c #75edf1", +"gkS c #75edf4", +"gkQ c #75edf9", +"gox c #75eee2", +"gai c #75eee3", +"fQA c #75eeec", +"gkK c #75eefc", +"gdE c #75efe2", +"fQC c #75efeb", +"gak c #75f0e1", +"f9# c #75f0e2", +"gdG c #75f1e1", +"f9a c #75f2e1", +".mP c #75f3fe", +".rh c #75fdf6", +"idM c #762b22", +"isY c #762f26", +"jbK c #76301e", +"g6a c #763128", +"iiT c #76372d", +"aNO c #763919", +"a0K c #763d26", +"i0G c #763e23", +"dp4 c #763f1a", +"jW# c #76401d", +"#CF c #764120", +"aJA c #764318", +"jWa c #76431f", +"cBz c #76441d", +".Jw c #764520", +"dw2 c #76452a", +".LP c #764620", +"#CE c #764623", +"aOr c #764625", +"ki9 c #764626", +".GP c #764722", +"#sg c #764728", +"hBK c #76472c", +"aho c #764827", +"#5x c #764829", +"a8P c #764927", +"aFP c #764a27", +"apu c #764a28", +"#Np c #764a29", +"#7o c #764a2a", +".Ro c #764b2a", +"aRN c #764b2c", +"aSL c #764c25", +"#po c #764c27", +"##C c #764c28", +"abc c #764c2c", +"j9k c #764c2f", +"dfq c #764c31", +"dfr c #764c32", +"aW6 c #764d21", +"##H c #764d28", +"#Cb c #764d2b", +"jPE c #764d2e", +"jW3 c #764d30", +"iyo c #764d33", +".2v c #764e2a", +"jUJ c #764e30", +"c7s c #764e34", +".JQ c #764f2b", +"kcI c #764f30", +"iBd c #764f31", +"jPx c #764f32", +".4L c #76502c", +".Rd c #76502f", +"apD c #765030", +".yZ c #765031", +"jZm c #765032", +"#gI c #76512d", +".U4 c #76512f", +"#pA c #765131", +"#pB c #765132", +".Br c #76522e", +"#r5 c #76522f", +"#eJ c #765230", +"#cb c #765231", +"#mB c #765232", +".vM c #765233", +"j6O c #765234", +"bUD c #76532f", +".69 c #765330", +".5j c #765331", +".W1 c #765332", +"jHD c #765335", +"#FN c #765432", +"jzc c #765436", +"jqI c #765438", +"aa3 c #76552c", +"gtt c #765535", +".3g c #765634", +"jnF c #765639", +"jhr c #76563b", +".Q3 c #765738", +"jkA c #76573c", +".SK c #765833", +"jnC c #76583c", +"#bG c #765936", +"#lH c #765a38", +"ayS c #765a3c", +".Wp c #765b35", +"#vd c #765c36", +".N8 c #765c3b", +"#FD c #765e3e", +"#AC c #76633a", +".Zi c #766a48", +"#xf c #766d4c", +"b9D c #76706a", +"c8l c #767168", +".gw c #76749a", +".NC c #767550", +".V1 c #767551", +".d# c #767676", +"daO c #767c75", +".AK c #767e58", +".5R c #768366", +"#uH c #76856a", +"#OZ c #768b78", +"b90 c #768f95", +".X4 c #769285", +"#uD c #76937e", +"a#z c #769783", +"#.d c #769a88", +"#0g c #769f8e", +"aZ# c #76a071", +".jH c #76a8c4", +"b#K c #76a989", +"aQJ c #76a993", +"cGN c #76a9bc", +"cgZ c #76acb7", +"azH c #76aea1", +"a2u c #76bbc7", +"eEO c #76c6ce", +"eN0 c #76cdd8", +"eJh c #76cfdb", +"aLR c #76cff2", +"eTa c #76d0dd", +"aUl c #76d0ef", +"aLO c #76d0f2", +"e7b c #76d1dd", +"aUh c #76d2ee", +"aUg c #76d2ef", +"aUi c #76d2f0", +"a6L c #76d2f2", +"aYo c #76d3f1", +"bN2 c #76d5f8", +"bzb c #76d6f8", +"bOi c #76d6f9", +"bS1 c #76d6fb", +"bRX c #76d6fc", +"bza c #76d7f8", +"bIl c #76d7f9", +"bNA c #76d7fa", +"bOt c #76d8f7", +"bz# c #76d8f9", +"bN3 c #76d8fa", +"bSn c #76d8fb", +"bSm c #76d8fc", +"bX5 c #76d9f8", +"bNG c #76d9f9", +"bNq c #76d9ff", +"bNs c #76dafe", +"f#S c #76dce1", +"fdX c #76dee4", +"e7z c #76e0e8", +"e3e c #76e0e9", +"fme c #76e3e9", +"fh8 c #76e3eb", +"eb1 c #76e3f0", +"d8U c #76e3f1", +"fuu c #76e4e8", +"fJt c #76e6e6", +"fJs c #76e6e7", +"fl9 c #76e6ec", +"fmg c #76e6ee", +"fuj c #76e8ea", +"im1 c #76e9e1", +"h0n c #76e9e2", +"ifz c #76e9e4", +"ho5 c #76ebe1", +"gG9 c #76ebe2", +"hDz c #76ebe3", +"fM5 c #76ebe7", +"fFM c #76ebec", +"hXf c #76ecdd", +"han c #76ece1", +"gDt c #76ece2", +"gvX c #76ece3", +"gvZ c #76ede1", +"gs. c #76ede2", +"fQv c #76ede7", +"g4E c #76eee1", +"gs# c #76eee2", +"gkW c #76eee3", +"gkL c #76eefd", +"goy c #76efe2", +"gkX c #76f0e2", +"gal c #76f1e0", +"ghj c #76f1e1", +"gdH c #76f2e0", +"f9c c #76f2e3", +"f9b c #76f3e1", +".qr c #76fff5", +"hqF c #772820", +"ia2 c #772c1e", +"c63 c #773b20", +"gX4 c #773b31", +"aR9 c #773d1d", +"cOb c #773e23", +"dPn c #773f1c", +".D9 c #77421b", +".Pc c #774221", +"#9v c #774224", +"dFL c #774322", +"gA4 c #77432d", +"aAD c #774525", +"#Ni c #774625", +"#QU c #774626", +"h7s c #77462f", +"jGE c #774724", +"dkh c #77472d", +"kx7 c #774826", +"dxJ c #77482c", +"ilx c #77482e", +".Vd c #774927", +".To c #774928", +"ivD c #774a2f", +"aKd c #774b26", +"aOs c #774b27", +"##i c #774b28", +"apw c #774b29", +"g2q c #774b2e", +"dB5 c #774b2f", +".H3 c #774c29", +"#Ng c #774c2b", +"iPg c #774c2f", +"#bX c #774d28", +"#g0 c #774d29", +"#X5 c #774d2a", +"cKl c #774d2f", +"dfp c #774d32", +"dal c #774d33", +"gEV c #774d34", +"aOu c #774e28", +"ilw c #774e2f", +"iSi c #774e30", +"dB3 c #774e31", +"ayW c #774f2f", +"aSM c #775029", +"aHe c #775030", +"iMk c #775031", +"kmG c #775032", +".0B c #77512b", +".EL c #77512e", +".Kl c #775130", +"jZv c #775131", +"j6Q c #775132", +"gII c #775134", +"a1i c #775229", +"#jU c #77522a", +"#vp c #77522f", +".U6 c #775232", +"iMi c #775233", +".SD c #775235", +"#vn c #77532f", +"#pD c #775330", +"#pC c #775331", +"#cc c #775332", +"#jQ c #775333", +"jKi c #775334", +"jE2 c #775335", +"jwm c #775433", +"#M6 c #775434", +"jZt c #775436", +"i8R c #775437", +".vv c #77552c", +"bo9 c #775530", +"#FP c #775531", +"#yE c #775532", +"#lD c #775533", +"#5e c #77562c", +"jwq c #775638", +"jnA c #775639", +".Vu c #775731", +"jqB c #775739", +"jnK c #77573a", +".2h c #775832", +"jty c #77583c", +"gxf c #77593a", +"jnE c #77593c", +".M1 c #775a37", +"jkw c #775a3d", +"jtx c #775a3e", +"#.M c #77603a", +"bet c #77664d", +"#mW c #776745", +"afq c #776d53", +".aw c #777777", +"#u0 c #77856a", +"#El c #778972", +"#uF c #778a73", +"#uE c #77917b", +"cYl c #779399", +"cCi c #7795a0", +"cYn c #7799a5", +"#WE c #779d89", +"#0h c #77a08e", +"#0f c #77a190", +"#0i c #77a191", +"#0j c #77a293", +"a7E c #77ac97", +".ok c #77add7", +".oR c #77aed5", +"b7c c #77b2b6", +".qb c #77b2da", +".r6 c #77b498", +"bee c #77b8a5", +"bro c #77bbae", +"aHW c #77bebd", +".nx c #77c0ed", +"dZi c #77c4bd", +"bvP c #77c4d3", +"bzW c #77c6d9", +"dZg c #77c8c1", +".r3 c #77ccb8", +"bh2 c #77ceeb", +"eJg c #77cfdb", +"aLP c #77d0f2", +"aP9 c #77d0f3", +"aQ. c #77d1f4", +"eYm c #77d2de", +"a6J c #77d2f2", +"aUe c #77d3ef", +"a2A c #77d3f1", +"a6K c #77d3f2", +"aYp c #77d4f0", +"bOj c #77d5f9", +"bOk c #77d6f9", +"bN5 c #77d6fa", +"bS2 c #77d6fb", +"bSt c #77d7f7", +"bDA c #77d7f8", +"bM9 c #77d7fa", +"bN4 c #77d7fb", +"bSX c #77d7fc", +"bSY c #77d7fd", +"bz. c #77d8f8", +"by7 c #77d8f9", +"bX4 c #77d8fa", +"bz3 c #77d8fc", +"bEs c #77d8fd", +"b6r c #77d8fe", +"bOu c #77d9f8", +"bNF c #77d9f9", +"bX3 c #77d9fa", +"bSk c #77d9fd", +"bSl c #77dafd", +"fdT c #77dbde", +"d4# c #77dbe8", +"e7p c #77dce5", +"e7B c #77e0e8", +"e7A c #77e1e9", +"fmb c #77e4eb", +"ebX c #77e4f1", +"fmh c #77e7ef", +"fJr c #77e8e6", +"hR. c #77e9e1", +"ipw c #77eae1", +"hG0 c #77eae3", +"hXe c #77ebdd", +"hUe c #77ebde", +"hz5 c #77ebe2", +"fM8 c #77ebe6", +"fM6 c #77ebe7", +"hUf c #77ecdc", +"hRc c #77ecdd", +"heb c #77ece1", +"gK4 c #77ede1", +"fQw c #77ede7", +"gg9 c #77edf7", +"gH. c #77eee1", +"f3# c #77eee2", +"fQx c #77eee8", +"gsa c #77efe1", +"gv0 c #77efe3", +"goz c #77f0e1", +"gkY c #77f1e1", +"f9g c #77f1ef", +"gam c #77f2e0", +"fZP c #77f3e7", +"ivu c #782d20", +"dSE c #782e18", +"jL4 c #783b17", +"aWt c #783c21", +"iQU c #78411c", +"jyo c #78411e", +"koY c #784124", +"dLk c #78421e", +"jZk c #784428", +"#Us c #784526", +"dkg c #784528", +"dgH c #78461a", +"aEU c #784621", +"jki c #78462a", +"aAL c #784727", +"kcD c #78472b", +"cFP c #784822", +".Tf c #784927", +"#vw c #784a29", +"cT# c #784a2b", +"dB2 c #784a2d", +"#JK c #784b2a", +"#Yt c #784c29", +".J8 c #784c2a", +"geP c #784c31", +".Ze c #784d26", +"#bK c #784d2a", +"k#W c #784d2f", +"#s3 c #784e2a", +"#FS c #784e2c", +"kcF c #784e2f", +".BR c #784f2c", +".6i c #784f2d", +"#sF c #784f2e", +".8W c #78502b", +"jS# c #785030", +"j1L c #785031", +"jUE c #785032", +"iGI c #785037", +".6M c #78512b", +"hVk c #78512e", +"aPL c #785130", +"kmH c #785131", +"jCb c #785132", +"gA5 c #785136", +"#sl c #78522b", +"#b7 c #78522c", +"afd c #78522e", +"iJx c #785232", +"bxj c #785233", +"#yR c #78532e", +"#mA c #785332", +"iD6 c #785333", +"jW1 c #785334", +"kcJ c #785335", +"#pF c #78542b", +"#r6 c #78542e", +".yX c #785431", +"#eK c #785433", +"jts c #785434", +"jZu c #785435", +"#vo c #785530", +"#yF c #785531", +"#X0 c #785532", +"jy8 c #785534", +"jW7 c #785535", +"#sm c #78562d", +"##x c #78562e", +"#pE c #78562f", +"#iS c #785733", +"#yD c #785734", +"jnI c #78583a", +"#Ug c #785931", +"jnJ c #78593b", +"#Jo c #785a31", +"b9e c #785a33", +".vy c #785a3a", +"j#m c #785a3e", +"bxD c #785b38", +"#lF c #785b39", +"jqF c #785b3f", +".6C c #785c35", +".Yk c #785d35", +".6D c #785d39", +"#oL c #785e3c", +".Zj c #785f3b", +"#BZ c #785f3f", +".5i c #78603e", +".1c c #786341", +"#iu c #786640", +"ajj c #78673e", +"#AF c #78694d", +"cTq c #786962", +".l9 c #786f3c", +"a#. c #787544", +".hN c #787878", +".DF c #787a52", +"a#g c #787c54", +".Ll c #78815e", +"#iv c #78836d", +"#AX c #78866d", +"#uI c #78896c", +"#WG c #789b85", +"cYo c #789ba6", +"cK3 c #78a2b3", +".lT c #78ace7", +"azG c #78af9f", +"b9P c #78b0c6", +"a7s c #78b4a0", +"a6F c #78b4bb", +"bNX c #78b6a9", +"bz1 c #78bebf", +"eYq c #78cbd4", +"bI7 c #78cbe5", +"bXg c #78cbe6", +".n7 c #78cbee", +"e2z c #78cdd8", +"eNX c #78ced9", +"eJi c #78d0dc", +"aUm c #78d0f0", +"aUn c #78d0f1", +"aLQ c #78d0f3", +"aP8 c #78d1f2", +"eOz c #78d2db", +"aYt c #78d2f0", +"a2C c #78d3f1", +"a2B c #78d3f2", +"eN4 c #78d4e0", +"aUf c #78d4ef", +"bS3 c #78d6fc", +"bS4 c #78d7fb", +"by8 c #78d8f9", +"bIk c #78d8fa", +"bM8 c #78d8fb", +"bJH c #78d9f8", +"by9 c #78d9f9", +"bDz c #78d9fa", +"bSj c #78d9fe", +"bX6 c #78dbf9", +"e3f c #78dfe7", +"f#R c #78e1e7", +"f#Q c #78e1e8", +"fdZ c #78e1e9", +"ebY c #78e4f1", +"fmi c #78e7ee", +"hNH c #78e9e2", +"fWS c #78e9e7", +"h6i c #78eae0", +"hNI c #78eae1", +"hKk c #78eae2", +"hNK c #78ebdd", +"hRd c #78ebde", +"i#8 c #78ebe1", +"hG1 c #78ebe2", +"hRb c #78ecdd", +"h3l c #78ecde", +"hNJ c #78ecdf", +"hao c #78ece0", +"gWE c #78ede1", +"gSM c #78eee0", +"fQz c #78eee8", +"gK5 c #78efe0", +"fQy c #78efe9", +"gH# c #78f0e0", +"gzG c #78f0e1", +"goA c #78f1e1", +"gan c #78f2e0", +".nr c #78f7fd", +".px c #78fef7", +"hur c #792b1d", +"hIq c #79392c", +"jhi c #793a23", +"hBD c #793b2f", +"i.b c #793d31", +"iiU c #793e31", +"iMg c #793f29", +"ilr c #793f2f", +"dTM c #79411b", +"jBc c #794320", +"dxI c #794327", +"jBd c #794420", +"jJu c #794520", +"cxo c #79461d", +"aAG c #794626", +"#bP c #794725", +"kqZ c #794826", +"#pi c #794926", +"hyc c #794a2d", +"iqE c #794b30", +"adh c #794c2a", +"igs c #794d31", +"dfo c #794d32", +".Xk c #794e27", +"#yQ c #794e29", +"#Nh c #794e2c", +"j4f c #794e30", +"kh4 c #794e31", +"dkm c #794e32", +".Ve c #794f2c", +"kfo c #794f30", +"aFR c #794f31", +"dtu c #794f32", +"#o2 c #79502c", +"kIQ c #795030", +"dtv c #795033", +"dtw c #795035", +"#vN c #79512c", +"#vK c #79512e", +"dxK c #795134", +".4s c #79522c", +".yL c #79522d", +".EO c #79522e", +"ko3 c #795232", +"kkm c #795233", +"hSs c #795234", +"dtx c #795236", +".6P c #79532d", +"aCM c #795332", +"jM5 c #795333", +"#vC c #79542b", +".Hp c #795431", +"abq c #795432", +"iPh c #795433", +"jHJ c #795435", +"a1j c #795529", +".yY c #795532", +"#hc c #795533", +"j9s c #795534", +"jM6 c #795535", +"#hf c #79562c", +"#FQ c #795631", +"jwl c #795635", +"jkr c #79563a", +"#1E c #795730", +".W2 c #795734", +"jzd c #795737", +"jtz c #79573a", +"#l1 c #795830", +"#B9 c #795833", +"#yC c #795835", +"bGk c #795935", +"bK7 c #795a36", +"jws c #795a3d", +".gq c #795a61", +"bZt c #795c35", +"bPX c #795c37", +"bGm c #795c38", +"jqE c #795c3e", +"jku c #795c3f", +"bK8 c #795d38", +".Ut c #795e39", +".3e c #795e3a", +"dXi c #795e3d", +".Mr c #795e41", +"ae7 c #796239", +".u6 c #796340", +"da0 c #797066", +"#69 c #797644", +".58 c #797758", +"ccj c #797775", +".jm c #79777a", +".jF c #797979", +"#HS c #798771", +"#uZ c #798a70", +"a#y c #798d77", +"#Vc c #798f83", +"#aM c #79987c", +"cYm c #7999a2", +"#WH c #799c87", +"#WD c #799f8a", +"#WF c #799f8b", +".GB c #79a192", +"#0m c #79a291", +"cyh c #79a2ac", +"#0l c #79a394", +"#0k c #79a395", +"aUL c #79a78b", +"bEn c #79ae8f", +"a7F c #79b29b", +".m1 c #79b5e9", +".mZ c #79b8eb", +".mY c #79baec", +".mX c #79bdee", +"cxR c #79c3d8", +"eYp c #79ccd6", +"aYu c #79d1f0", +"aP6 c #79d1f2", +"aP7 c #79d1f3", +"e7f c #79d2dc", +"aYs c #79d4f1", +"b.4 c #79d4f4", +".5F c #79d5d6", +"bSH c #79d5f2", +"bNS c #79d5f3", +"bWU c #79d6f6", +"bS5 c #79d6fb", +"bSG c #79d7f5", +"bSI c #79d7f6", +"bR8 c #79d7f7", +"bSp c #79d7f8", +"bS7 c #79d7fa", +"bS6 c #79d7fb", +"bSW c #79d7fc", +"bDt c #79d8fa", +"bM7 c #79d8fb", +"b1B c #79d8fd", +"bz2 c #79d8ff", +"eYz c #79d9e2", +"bDy c #79d9fa", +"bTd c #79daf8", +"bJb c #79dafc", +"bSi c #79daff", +"bNp c #79dbff", +"fdU c #79dcde", +"d35 c #79dcea", +"dZA c #79dfeb", +"fdY c #79e1e9", +"h0o c #79eadf", +"hUd c #79eae0", +"hR# c #79eae1", +"hXg c #79ebdd", +"h6k c #79ebde", +"hXd c #79ebdf", +"hRa c #79ebe0", +"icY c #79ebe2", +"hKl c #79ecdd", +"h9k c #79ecde", +"hlw c #79ece0", +"hhT c #79ece1", +"hwu c #79eddf", +"hec c #79ede0", +"g4F c #79eee0", +"gkM c #79effd", +"gDu c #79f0e1", +"gv1 c #79f1e0", +"ghk c #79f2df", +"gdI c #79f2e0", +".#d c #7a1f7a", +"iA8 c #7a3525", +"aR8 c #7a3818", +"dxD c #7a3b1f", +"hF# c #7a3b28", +"g2c c #7a3b30", +"jJt c #7a401b", +"kvV c #7a4123", +"idQ c #7a4132", +"jBb c #7a421d", +"ktr c #7a4223", +"j9h c #7a4421", +"jvK c #7a4521", +"jvL c #7a4522", +"iWv c #7a4823", +"cS9 c #7a4828", +"jD0 c #7a4924", +"hf1 c #7a4a2d", +".Jx c #7a4b26", +"j8l c #7a4b27", +"i6k c #7a4b2c", +"jkj c #7a4b2e", +"dlA c #7a4c23", +"#mm c #7a4c28", +".O9 c #7a4d2a", +"#F3 c #7a4d2b", +"#9n c #7a4d2c", +"#pV c #7a4e29", +"a#k c #7a4e2b", +"kkh c #7a4e30", +"dkl c #7a4e32", +"#eq c #7a4f29", +"aSK c #7a4f2a", +"#QR c #7a4f2d", +"doZ c #7a4f33", +".2A c #7a502b", +".Rn c #7a502c", +"#vP c #7a502d", +"#F2 c #7a502e", +"dGg c #7a502f", +"kh5 c #7a5031", +"aFN c #7a5129", +"bkD c #7a512a", +"#eG c #7a512b", +".Th c #7a512c", +"i.j c #7a5134", +".BV c #7a522e", +"#9B c #7a522f", +".MD c #7a5230", +"kym c #7a5232", +"jR6 c #7a5233", +".Hr c #7a532f", +"aBw c #7a5331", +"jnv c #7a5333", +"gMy c #7a5334", +"dkr c #7a5336", +"a1k c #7a5427", +"#FR c #7a5430", +"#Cl c #7a5431", +".2j c #7a5433", +"jwj c #7a5434", +"jPJ c #7a5435", +"dfs c #7a5437", +"c2H c #7a5439", +".EK c #7a5530", +".6k c #7a5533", +"jPz c #7a5534", +"jPH c #7a5535", +"#mC c #7a5631", +"##T c #7a5632", +"av# c #7a5634", +"#mg c #7a572e", +".Yw c #7a572f", +".8X c #7a5730", +"abo c #7a5733", +"jy9 c #7a5735", +"jKh c #7a5736", +"gxe c #7a573b", +"#mE c #7a582d", +".L6 c #7a582f", +"#M7 c #7a5836", +"jHE c #7a5838", +".G8 c #7a5930", +"#lS c #7a5936", +".Jv c #7a5937", +"jHF c #7a5939", +"jwu c #7a593a", +"jqH c #7a593b", +"jE0 c #7a5a3c", +"#nV c #7a5b31", +"jkt c #7a5b3e", +"#iZ c #7a5d36", +"#oK c #7a5d3a", +"gIJ c #7a5d3e", +"jkv c #7a5d3f", +"bK9 c #7a5e38", +"#D7 c #7a5e3e", +"jnD c #7a5e40", +"au2 c #7a6341", +"bnl c #7a6b4f", +"due c #7a6d66", +"#pX c #7a6e4b", +"bvI c #7a6f56", +"cKV c #7a6f65", +".3S c #7a724e", +"cTK c #7a726a", +"b0c c #7a7976", +"QtQ c #7a7a7a", +"cTG c #7a898b", +"#AY c #7a8d73", +"#xE c #7a9075", +".tW c #7a926d", +"cO9 c #7a97a1", +"adx c #7a9a87", +"cy# c #7a9aa7", +"cTD c #7a9ba5", +"#WI c #7a9d87", +"cvN c #7aa094", +"cK2 c #7aa0b0", +"#3X c #7aa18d", +"#0n c #7aa18f", +"#3W c #7aa290", +"#3U c #7aa291", +"#0d c #7aa697", +"bvM c #7aaf93", +"#.n c #7ab19e", +".pK c #7ab2d5", +"biO c #7ab395", +"aYU c #7ab699", +".m0 c #7ab8ea", +"cpe c #7ab9cc", +".nw c #7ac8ef", +"#hP c #7acad5", +"eT# c #7ad0db", +"eYn c #7ad1dc", +"aUo c #7ad1f1", +"bzV c #7ad2eb", +"aUp c #7ad2f3", +"aUq c #7ad2f4", +"eOA c #7ad3da", +"a6M c #7ad4f2", +"b.5 c #7ad4f3", +"a6P c #7ad4f4", +"aYq c #7ad5f0", +"aYr c #7ad5f2", +"a6O c #7ad5f3", +"bNR c #7ad6f3", +"bNT c #7ad7f7", +"bS8 c #7ad7fb", +"bR9 c #7ad8f8", +"bT# c #7ad8f9", +"bRW c #7ad8fb", +"bM6 c #7ad9fb", +"bEr c #7ad9fc", +"b6q c #7ad9fe", +"bOv c #7adaf8", +"bX7 c #7adaf9", +"bzl c #7adafa", +"bIj c #7adafb", +"bSh c #7adaff", +"bSg c #7adbff", +"d37 c #7adce8", +"h3k c #7aeadf", +"h9j c #7aeae0", +"ifA c #7aeae1", +"hKm c #7aebdd", +"hNL c #7aebde", +"i#9 c #7aebdf", +"ia. c #7aecdd", +"hwv c #7aecde", +"hDA c #7aecdf", +"g8B c #7aede0", +"gWF c #7aeee0", +"gOW c #7af0df", +"gK6 c #7af0e0", +"fux c #7af0f3", +"gHa c #7af1df", +"gzH c #7af1e0", +"gkZ c #7af2de", +"goB c #7af2df", +"fZQ c #7af4e4", +".oB c #7afdf8", +".qU c #7afff4", +"hnb c #7b2c23", +"h98 c #7b3025", +"iD0 c #7b3626", +"dBW c #7b3b1f", +"dBX c #7b3c1f", +"igm c #7b3c31", +"h.i c #7b3e21", +"gT3 c #7b3e34", +"inY c #7b4030", +"ia8 c #7b4034", +".a4 c #7b417e", +"kyl c #7b4323", +"d1W c #7b4325", +"krd c #7b4425", +"knM c #7b4621", +"dB1 c #7b4727", +"cs4 c #7b481b", +"dgM c #7b4921", +"#CB c #7b4924", +"dKk c #7b4929", +"dGf c #7b4a2a", +"kF1 c #7b4b28", +"dgL c #7b4c23", +"#JQ c #7b4c28", +".P. c #7b4c29", +".Rp c #7b4d29", +"arh c #7b4d2b", +"kmD c #7b4d30", +"dbC c #7b4e24", +"att c #7b4e28", +"#9q c #7b4e2b", +"#Ur c #7b4e2c", +"koZ c #7b4e31", +"a5o c #7b4f1e", +"a0P c #7b4f29", +"dKl c #7b4f2e", +"dxN c #7b4f31", +"#h# c #7b502b", +"#sH c #7b502c", +"#Cr c #7b502e", +"j1J c #7b5031", +".0w c #7b512b", +"cXN c #7b512c", +"#QS c #7b512e", +"kAL c #7b5130", +"j9j c #7b5132", +"dko c #7b5134", +"c7h c #7b5230", +"h.j c #7b5231", +"kvW c #7b5233", +"ajo c #7b5329", +"i8S c #7b5334", +"dB4 c #7b5336", +"aJ6 c #7b5426", +"#ew c #7b542d", +".1e c #7b542f", +"#JA c #7b5431", +"kDC c #7b5433", +"kcH c #7b5434", +"do3 c #7b5438", +"aFD c #7b5525", +"apv c #7b552f", +"ko2 c #7b5533", +"jzl c #7b5534", +"kkl c #7b5535", +"dft c #7b5537", +"dkq c #7b5538", +"aW2 c #7b562c", +"#r8 c #7b5630", +"#yL c #7b5631", +"jtm c #7b5634", +"iyr c #7b5635", +"jSb c #7b5636", +"jM8 c #7b5637", +"#mF c #7b572d", +"#yO c #7b572e", +".0t c #7b572f", +"#hd c #7b5734", +"afp c #7b5735", +"dSK c #7b5736", +"jUM c #7b5737", +".W0 c #7b5832", +"jMW c #7b5836", +".WY c #7b5931", +"#Jw c #7b5936", +".Kd c #7b5937", +"jKs c #7b5939", +"jzg c #7b593a", +".On c #7b5a31", +".vJ c #7b5a34", +"jUL c #7b5a3a", +"#oZ c #7b5b31", +"gpH c #7b5b3a", +"jks c #7b5b3d", +"b9c c #7b5c34", +"#B7 c #7b5c37", +"gEW c #7b5c3d", +"#lC c #7b5d38", +".vx c #7b5d3b", +"jHH c #7b5d3d", +"jhB c #7b5d3f", +"jtw c #7b5e3f", +"jbZ c #7b5e40", +".Yi c #7b5f37", +"##m c #7b5f3b", +".u9 c #7b5f3e", +".Sy c #7b6039", +"bL. c #7b6139", +"#ad c #7b613d", +"#cy c #7b623e", +"bUG c #7b643a", +".Cp c #7b6549", +".Xp c #7b6641", +"#FC c #7b6644", +".1d c #7b6d49", +"aCI c #7b6d4d", +"cYO c #7b776e", +".Gl c #7b7950", +"#W# c #7b7a5a", +"cBV c #7b7b78", +".#J c #7b7b7b", +"bXv c #7b8468", +".AJ c #7b865f", +"cYs c #7b8785", +".LD c #7b8969", +"b45 c #7b898d", +"dpP c #7b8a86", +"a## c #7b9171", +"#SC c #7b937b", +"brG c #7b9a97", +"#Pm c #7b9c82", +"#7y c #7b9d89", +"czW c #7b9d8d", +"cEa c #7b9d8e", +"#7H c #7b9e87", +"#7F c #7b9f88", +"#3V c #7ba290", +"cK1 c #7ba4b3", +"#0e c #7ba595", +"#3T c #7ba596", +"#0c c #7ba695", +"#3Y c #7ba696", +".lg c #7ba6d9", +"biQ c #7bab81", +"cyk c #7babb7", +"bh1 c #7bafaf", +".mt c #7bb1e7", +"bm9 c #7bb79e", +".5z c #7bbcb3", +".mW c #7bc1ef", +"eEP c #7bc9cf", +"b2k c #7bcbe5", +"avK c #7bcccf", +"eTi c #7bcdd8", +"eYo c #7bcfd9", +"eXX c #7bd1dd", +"eN3 c #7bd2dd", +"aYv c #7bd2f2", +"aYy c #7bd3f4", +"aUr c #7bd3f5", +"aUs c #7bd4f6", +"a2D c #7bd5f2", +"e22 c #7bd7e1", +"bXy c #7bd7f4", +"d4g c #7bd8de", +"bXO c #7bd8fc", +"bXM c #7bd8fd", +"bNk c #7bd9f9", +"bX2 c #7bd9fa", +"bRV c #7bd9fb", +"bXN c #7bd9fc", +"b1A c #7bd9fd", +"bXL c #7bd9fe", +"bTe c #7bdaf8", +"bJI c #7bdaf9", +"bDx c #7bdafa", +"bSV c #7bdafb", +"bM5 c #7bdafc", +"bNm c #7bdbf9", +"b2Q c #7bdcfa", +"e7t c #7be1eb", +"ebW c #7be5f2", +"ebU c #7be6f2", +"h6j c #7beadf", +"euZ c #7beaf7", +"hG3 c #7bebdd", +"hKn c #7bebde", +"icZ c #7bebdf", +"hG2 c #7becdd", +"hz6 c #7becde", +"hsQ c #7becdf", +"hhU c #7bede0", +"g0E c #7beee0", +"fN. c #7beee5", +".me c #7beeff", +"gSN c #7befe0", +"fQD c #7befe6", +"gkP c #7beffd", +"gkO c #7beffe", +"f3a c #7bf0e5", +"gkN c #7bf0fe", +"gDv c #7bf1e0", +"f3b c #7bf1ea", +"gsb c #7bf2e0", +"gao c #7bf3df", +".n3 c #7bf9fa", +"hnd c #7c3024", +"hfR c #7c3026", +"g2# c #7c352b", +"dXd c #7c361e", +"gX2 c #7c382f", +"hBI c #7c3a26", +"jkg c #7c3f26", +"c2l c #7c4125", +"dHd c #7c421b", +"duA c #7c421c", +"ign c #7c4233", +"#5v c #7c4322", +"k.K c #7c451e", +"i2e c #7c451f", +"#mI c #7c4823", +"jyn c #7c4824", +"d6P c #7c4827", +"#s2 c #7c4b26", +"aJj c #7c4d24", +"k.L c #7c4e29", +".Vf c #7c4f2a", +"#y5 c #7c4f2b", +"dtt c #7c4f32", +"a9h c #7c502a", +".Y5 c #7c512a", +"ahp c #7c512d", +".Vm c #7c512f", +".4z c #7c522a", +"atw c #7c522b", +"dGh c #7c5231", +"kfn c #7c5232", +"kre c #7c5233", +".yH c #7c532e", +".YK c #7c532f", +"#gk c #7c542f", +"cXO c #7c5430", +"#9o c #7c5431", +"dkn c #7c5435", +"dXj c #7c5530", +"atz c #7c5533", +"kA3 c #7c5534", +"#b2 c #7c562e", +".vQ c #7c562f", +"iPi c #7c5634", +"kGl c #7c5635", +"jMX c #7c5636", +".Bx c #7c572f", +"adr c #7c5730", +"kMg c #7c5735", +"kfs c #7c5736", +"jM9 c #7c5737", +".Yy c #7c582e", +"#l8 c #7c5832", +".9u c #7c5834", +"jPw c #7c5836", +"jze c #7c5837", +"jM7 c #7c5838", +"#yK c #7c5932", +"#jR c #7c5935", +"jR5 c #7c5937", +"#bm c #7c5a34", +"jEQ c #7c5a37", +"jEO c #7c5a38", +"jB7 c #7c5a3a", +"gts c #7c5a3d", +"#mD c #7c5b2f", +"jC# c #7c5b3a", +"jnL c #7c5b3c", +"#9a c #7c5c2d", +".G7 c #7c5c31", +"bBT c #7c5c37", +"jqK c #7c5c3d", +".JM c #7c5d30", +".QE c #7c5d33", +"#lR c #7c5e39", +"#oT c #7c5e3a", +"dSJ c #7c5e3c", +"jeU c #7c5e40", +"cbY c #7c6035", +"bPV c #7c6039", +"bBW c #7c613b", +".Sf c #7c6141", +".YU c #7c6236", +"#lN c #7c6340", +".Uu c #7c6640", +".vz c #7c674b", +"bEh c #7c684a", +"#yp c #7c6943", +".1O c #7c6a41", +"ang c #7c6c41", +"aPH c #7c6d42", +"bes c #7c7054", +"#AD c #7c724e", +".zj c #7c7556", +"c3A c #7c776d", +"dbl c #7c7771", +"#qY c #7c785c", +"daN c #7c7871", +".ZN c #7c7a56", +"cGc c #7c7a76", +".df c #7c7c7c", +"#Wa c #7c7f5b", +"#uJ c #7c8c6e", +"#Em c #7c8e76", +"ck7 c #7c8e92", +".r. c #7c9056", +"#cO c #7c9683", +"#ZV c #7c977b", +"ccI c #7c9ba3", +"#Pn c #7c9c82", +"beB c #7c9c83", +"a#G c #7c9e85", +"a#H c #7c9e86", +"a#F c #7c9f87", +"#7I c #7c9f88", +"#7G c #7c9f89", +"a#I c #7ca088", +"a#E c #7ca089", +"#7E c #7ca08a", +"cy. c #7ca1b0", +"#0o c #7ca291", +"#S7 c #7ca38f", +"#3Z c #7ca696", +".7M c #7ca799", +"bNQ c #7ccadd", +".r4 c #7cccb4", +"eTq c #7cccd5", +"b2f c #7cd2ea", +"bEl c #7cd2ec", +"aYx c #7cd2f3", +"aYw c #7cd3f3", +"aYz c #7cd4f5", +"e7j c #7cd5df", +"bEj c #7cd5ef", +"a6N c #7cd5f3", +"b.6 c #7cd5f4", +"bXx c #7cd7f4", +"bEk c #7cd7f5", +"bWV c #7cd7f7", +"bXQ c #7cd7fc", +"bI5 c #7cd8f7", +"bWW c #7cd8f8", +"bS9 c #7cd8fa", +"bXP c #7cd8fc", +"bS. c #7cd9f8", +"bSJ c #7cd9f9", +"bDu c #7cd9fa", +"bRU c #7cd9fb", +"bWF c #7cd9fc", +"bSU c #7cd9fd", +"bEq c #7cd9fe", +"bNl c #7cdaf9", +"bDw c #7cdafa", +"bRT c #7cdafb", +"bM4 c #7cdafc", +"bX# c #7cdafd", +"bX. c #7cdafe", +"d4c c #7cdbe6", +"bTf c #7cdbf9", +"bSu c #7cdbfa", +"bW9 c #7cdbfe", +"bNn c #7cdcfa", +"bRZ c #7cdcfc", +"bNo c #7cdcfd", +"c#n c #7cdcff", +"d8Q c #7ce2ef", +"ebV c #7ce5f2", +"fh9 c #7ce8ed", +"ia# c #7ce9db", +"ifB c #7ce9dc", +"fTA c #7ce9e5", +"h0p c #7ceadc", +"ih3 c #7ceadf", +"ic0 c #7cebdc", +"h6l c #7cebdd", +"hww c #7cebde", +"im2 c #7cebdf", +"fqj c #7cebed", +"hz7 c #7cecdd", +"h3m c #7cecde", +"hap c #7cede0", +"gzI c #7cf2df", +"ghl c #7cf3de", +"gv2 c #7cf3df", +"fZR c #7cf3e4", +".pZ c #7cfef5", +"hjq c #7d2f25", +"idL c #7d321b", +"dOn c #7d371e", +"iyi c #7d3827", +"iyj c #7d392a", +"ia7 c #7d3a2f", +"jRf c #7d3b1a", +"dyP c #7d3f17", +"aNM c #7d4320", +"dtn c #7d4324", +"k#T c #7d4421", +"iqy c #7d4431", +"dxH c #7d4526", +"j1I c #7d4627", +".Bc c #7d471e", +"kDB c #7d4925", +"hqL c #7d492f", +".M# c #7d4c27", +"#9u c #7d4c29", +"dki c #7d4d30", +".Mi c #7d4e29", +"afm c #7d4e2a", +"gxd c #7d4e35", +"#jI c #7d4f28", +"dSL c #7d4f2d", +"hSq c #7d4f2f", +".Ti c #7d502b", +"aFO c #7d502d", +"dXh c #7d502f", +"dbB c #7d5124", +".LQ c #7d5128", +".Tk c #7d512b", +"#Uo c #7d512d", +"dfn c #7d5134", +"coN c #7d5225", +"#y4 c #7d522d", +"#JH c #7d522f", +".KG c #7d532d", +"#vv c #7d532f", +"#JI c #7d5330", +"kki c #7d5333", +"aSa c #7d5429", +"aT3 c #7d542d", +"#Nf c #7d5430", +".Hu c #7d5530", +"cFR c #7d5532", +"g6n c #7d5534", +"#vB c #7d5631", +"jE4 c #7d5635", +"kfq c #7d5636", +".5g c #7d572a", +"#iV c #7d5730", +"jtl c #7d5735", +"daq c #7d5739", +"ado c #7d5833", +"aPM c #7d5835", +"a#p c #7d5836", +"a#t c #7d5837", +"aSF c #7d592f", +"#yM c #7d5933", +"j6P c #7d5936", +"alD c #7d5938", +"j#n c #7d5939", +".J6 c #7d5a34", +"jtn c #7d5a37", +"jqM c #7d5a39", +".Om c #7d5b31", +"#12 c #7d5b38", +"jEX c #7d5b3b", +"aW3 c #7d5c31", +".WE c #7d5c33", +"afr c #7d5c39", +"j4j c #7d5d3b", +"jqJ c #7d5d3d", +"jhC c #7d5d3e", +"#B8 c #7d5e37", +"#XZ c #7d5f38", +"bGl c #7d5f3a", +"jzk c #7d5f3f", +"gA6 c #7d603f", +"#7l c #7d6134", +".yi c #7d6139", +".30 c #7d6240", +"aa2 c #7d6435", +"bPY c #7d663a", +"atj c #7d6940", +".8q c #7d6c45", +"ati c #7d6d49", +".Vr c #7d6f4b", +".V0 c #7d7042", +"cPd c #7d7268", +"dgo c #7d726b", +"#NZ c #7d7a60", +".XW c #7d7b52", +".I1 c #7d7c52", +".dO c #7d7d7d", +".Gk c #7d7f55", +"bnk c #7d846d", +".tZ c #7d8f66", +"ac7 c #7d8f6b", +"#En c #7d9077", +"#uY c #7d9279", +"#Lv c #7d937e", +"#xF c #7d9579", +".t8 c #7d9778", +"#WJ c #7da08a", +"a#K c #7da18a", +"a#D c #7da18b", +"a#J c #7da28a", +"#7J c #7da28c", +"#7K c #7da28e", +"cOU c #7da2a8", +"#7D c #7da38f", +"crp c #7da59a", +"#3S c #7da697", +"#WA c #7da795", +"#0b c #7da897", +"aZ. c #7da98b", +"#Wz c #7daa9a", +"bZ6 c #7dacb9", +".Ls c #7dafa4", +"bZ7 c #7dafc0", +"aIi c #7db79d", +"bEe c #7dc2ca", +".r5 c #7dc4a9", +"eTB c #7dc6ce", +"chh c #7dc7d9", +"dZf c #7dcbc1", +"bvE c #7dcfe3", +"eJf c #7dd0db", +".p# c #7dd0eb", +"bh3 c #7dd3ef", +"aYA c #7dd4f5", +"a2E c #7dd5f2", +"bdw c #7dd5f3", +"b.9 c #7dd5f4", +"b.7 c #7dd6f3", +"aYB c #7dd6f6", +"aYC c #7dd6f7", +"bXR c #7dd7fc", +"bT. c #7dd8fa", +"bDv c #7dd9fa", +"bWE c #7dd9fc", +"bIi c #7ddafa", +"bM3 c #7ddafb", +"bRS c #7ddafc", +"bST c #7ddafd", +"bIh c #7ddbfa", +"bXz c #7ddbfb", +"bSq c #7ddbfc", +"bXa c #7ddbfd", +"bW8 c #7ddbfe", +"b2R c #7ddcf9", +"c#l c #7ddcfe", +"bSf c #7ddcff", +"f6l c #7dded2", +"d81 c #7de0ec", +"ebZ c #7de5f2", +"fib c #7de8ec", +"hUg c #7deadc", +"hDB c #7debdd", +"hG4 c #7debde", +"hed c #7debdf", +"fmk c #7debed", +"g4G c #7deee0", +"gWG c #7defdf", +"gk0 c #7df3de", +".mQ c #7df3fe", +".o7 c #7dfdf6", +"gbo c #7e321c", +"hx6 c #7e372b", +"gl0 c #7e3821", +"hc# c #7e391f", +"huo c #7e3d32", +"dLj c #7e4218", +"jHu c #7e4224", +"gIH c #7e4327", +"dw8 c #7e4421", +"iTM c #7e461c", +"hPb c #7e4732", +"duu c #7e4820", +"kA2 c #7e4825", +".uO c #7e491e", +"iNV c #7e4b23", +"geO c #7e4b32", +"cXP c #7e4c28", +"d6Q c #7e4c29", +"cF2 c #7e4c2c", +"dlz c #7e4d23", +"jDZ c #7e4d27", +"j6D c #7e4d29", +"#JV c #7e4f27", +"#Gc c #7e4f28", +"gim c #7e4f35", +"jL6 c #7e5129", +"#ez c #7e512a", +"#X6 c #7e522d", +"aBs c #7e522e", +"cS8 c #7e522f", +"j4c c #7e5231", +"dkk c #7e5234", +".Rm c #7e532d", +"axy c #7e532e", +"#Uq c #7e532f", +"#F0 c #7e5430", +"kO6 c #7e5432", +"do0 c #7e5435", +"a1h c #7e5528", +".47 c #7e552c", +"ayX c #7e552f", +".6j c #7e5532", +"krf c #7e5535", +"dkp c #7e5537", +"atx c #7e562d", +"#r9 c #7e5630", +"#FV c #7e5632", +"jPF c #7e5634", +"k#X c #7e5635", +"kts c #7e5636", +"hFb c #7e5637", +"do2 c #7e5639", +"aW8 c #7e5727", +"#so c #7e572e", +".SQ c #7e572f", +".EP c #7e5731", +".OZ c #7e5733", +"kcG c #7e5735", +"jUD c #7e5736", +"aJ7 c #7e582b", +"#pf c #7e582e", +".6Y c #7e582f", +".JR c #7e5832", +"iqC c #7e583a", +".9h c #7e5930", +".8S c #7e5933", +".K# c #7e5934", +"jwk c #7e5936", +"kfw c #7e5937", +".Hq c #7e5a34", +"bbU c #7e5a35", +"aBx c #7e5a37", +"jUK c #7e5a39", +".UF c #7e5b32", +".Tl c #7e5b35", +"kcO c #7e5b37", +"hVm c #7e5b3a", +"j1S c #7e5c39", +"jtA c #7e5c3c", +"gin c #7e5c3e", +"jB6 c #7e5d3b", +"jqL c #7e5d3c", +"jwr c #7e5d3d", +"#jt c #7e5e32", +".2Q c #7e5e34", +".M0 c #7e5e38", +"atC c #7e5e3e", +"bBU c #7e5f39", +".Hx c #7e5f3e", +"#M2 c #7e602f", +"jzj c #7e603f", +"#Jn c #7e6235", +"b4i c #7e6237", +"bUE c #7e633a", +".8Z c #7e643e", +".ES c #7e6446", +"bUF c #7e653a", +"btw c #7e653d", +"#dv c #7e663b", +"b4l c #7e663c", +"#.W c #7e6747", +"#hx c #7e6b44", +"bi1 c #7e6d50", +"#qZ c #7e6e4f", +"aLs c #7e7149", +".Xo c #7e734f", +"aG8 c #7e7452", +"dfX c #7e746d", +"cp. c #7e7873", +".j2 c #7e7b7b", +".dQ c #7e7e7e", +".XV c #7e805a", +"#uP c #7e8d6d", +"#HT c #7e8d75", +"#uO c #7e8e6e", +"#uN c #7e8f6e", +"#uM c #7e9071", +"#AZ c #7e977c", +"cRd c #7e9b8f", +"#LR c #7e9e86", +"clu c #7e9ea3", +"bVd c #7e9fa5", +"cYp c #7e9fa8", +"#WK c #7ea08b", +"b43 c #7ea0aa", +"a#L c #7ea18b", +"#na c #7ea192", +"ceA c #7ea193", +"#O5 c #7ea28b", +"ciV c #7ea294", +"#S6 c #7ea38b", +"#7M c #7ea392", +"a#C c #7ea490", +"#7L c #7ea492", +"#30 c #7ea494", +"#S9 c #7ea590", +"#7z c #7ea591", +"cnf c #7ea598", +"#7A c #7ea693", +"#Pt c #7ea694", +"#7B c #7ea795", +"#7C c #7ea796", +"#3R c #7ea797", +"#3Q c #7ea998", +"#0a c #7ea999", +"aUH c #7eaa84", +"aUS c #7eab7b", +"#Wx c #7eac9e", +"cGO c #7eadbc", +"a20 c #7eb696", +"brn c #7ebaa0", +"azw c #7ec3b3", +"c#1 c #7ec8d7", +"eEQ c #7ec9ce", +"eOv c #7ec9d1", +"brF c #7ecbdb", +"eNT c #7eced8", +"eN1 c #7ed0db", +"bI4 c #7ed1e6", +"bh7 c #7ed4f4", +"b#. c #7ed5f3", +"a2F c #7ed5f4", +"a6Q c #7ed6f2", +"a2G c #7ed6f5", +"bNV c #7ed6f6", +"eYD c #7ed7da", +"aYD c #7ed7f8", +"b1O c #7ed8f8", +"bXb c #7ed8f9", +"bXS c #7ed8fc", +"bR7 c #7ed9f8", +"bWX c #7ed9f9", +"bWD c #7ed9fb", +".n6 c #7edaf1", +"bS# c #7edaf8", +"bIe c #7edafa", +"b2P c #7edafb", +"bJa c #7edafd", +".oE c #7edbef", +"bIg c #7edbfa", +"b2O c #7edbfb", +"b2i c #7edbfc", +"b2S c #7edcf9", +"bSv c #7edcfa", +"c#k c #7edcfe", +"c#m c #7edcff", +"cRm c #7edffd", +"e3d c #7ee1ea", +"fmm c #7ee8eb", +"hUh c #7ee9da", +"ifC c #7eeadc", +"hz8 c #7eebdd", +"hNM c #7eecde", +"hhV c #7eecdf", +"hlx c #7eeddf", +"fQE c #7eeee3", +"fFN c #7eefea", +"fqk c #7eeff0", +"fN# c #7ef1e3", +"gv3 c #7ef2de", +"gDw c #7ef2df", +"gsc c #7ef3de", +".ri c #7efff3", +"ia3 c #7f3327", +"hb3 c #7f3629", +"iA7 c #7f3d2c", +"iqw c #7f3d33", +"jEJ c #7f3e1f", +"hUQ c #7f3f2f", +"bsF c #7f401a", +"#R. c #7f4220", +"dGc c #7f4325", +"g6m c #7f4424", +"duv c #7f451a", +"hLH c #7f4633", +".x4 c #7f481e", +"#UH c #7f4824", +"aJw c #7f4826", +"#mb c #7f4923", +"hIv c #7f492e", +"#Q2 c #7f4b24", +"doU c #7f4b2b", +"dp2 c #7f4c1c", +"#1R c #7f4c26", +"dq. c #7f4e25", +"jDY c #7f4e27", +"jyp c #7f4e28", +"cS7 c #7f4e2a", +"ilv c #7f503c", +".X5 c #7f5126", +"dbD c #7f5225", +".Pd c #7f522a", +"#Yl c #7f522e", +"gQr c #7f5233", +"dfm c #7f5234", +"#1K c #7f532d", +"#F1 c #7f532f", +"d1X c #7f5331", +"jJy c #7f542a", +".23 c #7f542b", +"#gW c #7f552d", +"aOt c #7f552f", +"axx c #7f562f", +"#sG c #7f5630", +"#Cq c #7f5631", +"ko0 c #7f5635", +"#y1 c #7f572f", +"a#q c #7f5731", +"jSa c #7f5735", +"jZo c #7f5836", +"ktv c #7f5837", +".88 c #7f592f", +".yn c #7f5931", +"aLv c #7f5933", +"jtj c #7f5936", +"##I c #7f5a30", +".Vj c #7f5a34", +"jtk c #7f5a36", +"in3 c #7f5a37", +"jPt c #7f5a38", +"jE1 c #7f5a39", +"#Ce c #7f5b31", +"cs5 c #7f5b33", +"#oX c #7f5b34", +"au9 c #7f5b35", +"k#5 c #7f5b37", +"jCa c #7f5b39", +"#xd c #7f5c33", +"kh9 c #7f5c38", +".WK c #7f5d33", +"jHy c #7f5d39", +"jBY c #7f5d3a", +"#eP c #7f5e30", +".L5 c #7f5e31", +".0u c #7f5e33", +"cbV c #7f5e36", +".6O c #7f5f35", +".3b c #7f5f39", +"jzh c #7f5f3e", +"jkC c #7f5f3f", +"bk3 c #7f6038", +"#QD c #7f612f", +"bxC c #7f613b", +"axk c #7f632e", +"bBV c #7f643e", +"gMz c #7f6443", +"aps c #7f6535", +".0S c #7f6636", +"#lO c #7f6744", +"bL# c #7f683e", +"bBX c #7f683f", +"#lP c #7f6843", +"#dw c #7f6941", +"#a9 c #7f6a41", +".Vt c #7f6a43", +"ar. c #7f6c46", +".Xn c #7f6f4a", +".Vs c #7f704b", +".Fm c #7f714c", +"aT2 c #7f744b", +"dbd c #7f746a", +"dkS c #7f756d", +"dtX c #7f766f", +"chs c #7f7770", +"cPi c #7f7870", +"b4L c #7f7e79", +"#yg c #7f7f58", +".g9 c #7f7f7f", +".j1 c #7f7f81", +".NB c #7f835d", +"bNP c #7f836a", +".IZ c #7f855a", +"cGd c #7f8680", +"#Wh c #7f8e70", +"#uQ c #7f8f70", +"cGQ c #7f9092", +"#uK c #7f9274", +"brA c #7f937f", +"#7. c #7f9676", +"c#0 c #7f9783", +"a#f c #7f9c7f", +"#ZR c #7f9d83", +"#L1 c #7f9e84", +"bvz c #7f9f8f", +"#LZ c #7fa087", +"#O6 c #7fa189", +"#LY c #7fa18a", +"#LP c #7fa28a", +"#0p c #7fa291", +".1Y c #7fa295", +"#LD c #7fa38d", +"adE c #7fa48d", +"a#A c #7fa593", +"#S8 c #7fa691", +"#WB c #7fa792", +"#Pl c #7fa793", +"a#B c #7fa794", +"#Pu c #7fa795", +"#3O c #7fa894", +"#OT c #7fa991", +"#3P c #7fa998", +"#0# c #7fab9a", +"#Wy c #7fac9c", +"bvF c #7facaf", +".nb c #7faccf", +"#SY c #7fad9f", +"#SX c #7fb0a2", +"aY7 c #7fb898", +"bnr c #7fbcc0", +"avJ c #7fc1b0", +"bEp c #7fc1b7", +"eTA c #7fc5cc", +"eOu c #7fc7cf", +".p6 c #7fc7e4", +".mV c #7fcaf1", +"eYr c #7fccd5", +"eTx c #7fcdd5", +"eTw c #7fced8", +"eTv c #7fcfd9", +"eJe c #7fd0db", +"e2A c #7fd2dc", +".nv c #7fd4f2", +"a2H c #7fd6f5", +"a2J c #7fd6f6", +"eYl c #7fd7e2", +"a2I c #7fd7f6", +"bXT c #7fd8fc", +"bXU c #7fd9fc", +"b2N c #7fdafb", +"bRR c #7fdafc", +"bOw c #7fdbf9", +"bM2 c #7fdbfa", +"bMY c #7fdbfb", +"bN1 c #7fdbfc", +"bSx c #7fdcfa", +"bW7 c #7fdcff", +"b6u c #7fddfe", +"d82 c #7fdfea", +"dV# c #7fe1ed", +"eb0 c #7fe4f0", +"d8X c #7fe5f1", +"h9l c #7fe7d9", +"hXh c #7fe9db", +"ic1 c #7feadc", +"hwx c #7feadd", +"fml c #7feaec", +"h3n c #7febdc", +"hz9 c #7febdd", +"hDC c #7febde", +"hsR c #7fecde", +"fQG c #7fede6", +"g8C c #7feee0", +"fQF c #7feee5", +"fJu c #7fefe7", +"fql c #7feff0", +"f9h c #7ff0e9", +"fNa c #7ff1e4", +"gzJ c #7ff2df", +"gap c #7ff3dd", +"goC c #7ff4dd", +".ns c #7ff6fb", +".qs c #7ffff3", +"dxE c #804325", +"dBY c #804425", +"j5L c #80451b", +"#14 c #80471f", +"dYa c #80491e", +"dXg c #804929", +"#Gd c #804a23", +"d7P c #804b24", +"doV c #804b2b", +"dly c #804c20", +"dD. c #804c23", +"#pN c #804d26", +"kuD c #804f29", +"dbz c #80501e", +"jvJ c #805029", +"dts c #805132", +"hjy c #805133", +"ksa c #80522c", +"dlv c #805321", +"jBe c #80532b", +".2M c #80532c", +"aBq c #805330", +"#jy c #80542c", +"kgH c #80552e", +"afj c #805530", +"dKm c #805532", +".3c c #805629", +".Vo c #80562c", +"#y3 c #805630", +"j1K c #805635", +".2x c #80572e", +"cOD c #805730", +"kLY c #805734", +"kmE c #805735", +"#Cc c #80582e", +".y4 c #805830", +"bPU c #805831", +"kcE c #805837", +"a1l c #805929", +"#ch c #80592e", +".6z c #805931", +"jE3 c #805936", +"ktu c #805937", +".3d c #805a2d", +"#g1 c #805a30", +"#Cg c #805a33", +"#lK c #805a35", +"jnu c #805a37", +"#7n c #805a39", +"iGN c #805b38", +"gpI c #805b39", +"kfx c #805c37", +"i8T c #805c3a", +"#gU c #805d32", +".2t c #805d33", +"k#6 c #805d38", +"iBe c #805d39", +"ahA c #805d3c", +"#eL c #805e37", +"jKj c #805e3a", +"#3D c #805e3b", +"jEY c #805e3d", +"adt c #805e40", +"##U c #805f31", +".4R c #805f36", +"anv c #805f3c", +".vH c #806035", +"aW4 c #806036", +"#5E c #80603d", +".JN c #806133", +".JO c #806135", +".Us c #806137", +"gQs c #806140", +"btd c #80623d", +"cgu c #806435", +"jEZ c #806442", +".Tw c #80653e", +".YV c #806637", +"#lM c #80663f", +".v7 c #806641", +".8p c #80673c", +".H6 c #80673f", +"#lQ c #806740", +".Qm c #806745", +"bGo c #806840", +"#lG c #806a43", +".RB c #806c47", +"#pW c #80704b", +"#BY c #80704c", +".u5 c #80714d", +".Tu c #80734d", +"daV c #80756b", +"adc c #807653", +".V2 c #807749", +"#7s c #807757", +"cPh c #80786f", +"cOT c #807d77", +".l0 c #807e7c", +".g8 c #808080", +"#yf c #80815a", +"ahi c #808769", +"cYc c #808783", +".Jg c #808a6a", +"#PP c #808c61", +"#PO c #808c62", +"#PQ c #808d62", +"#PN c #808e65", +"#Io c #80926d", +".zi c #80947b", +"bIZ c #80947d", +"#uX c #80957b", +"#Lw c #80967d", +"#L2 c #809776", +"#3K c #809986", +"#ZQ c #809e84", +"#L0 c #80a087", +"#WN c #80a088", +"#0q c #80a08b", +"#Po c #80a187", +"#LS c #80a18a", +"#LQ c #80a28a", +"#WL c #80a28b", +".VM c #80a293", +"#S5 c #80a389", +"#O7 c #80a38b", +"#LU c #80a48e", +"#LE c #80a48f", +"a#M c #80a491", +"#31 c #80a496", +"adD c #80a58f", +"#Ig c #80a591", +"#7N c #80a594", +"#Py c #80a691", +"#T. c #80a692", +"#Px c #80a796", +"#WC c #80a893", +"#LG c #80a895", +"#Pk c #80aa99", +"aZa c #80ab75", +"aUT c #80ac72", +".7R c #80ac98", +"bds c #80aca5", +"#Ww c #80afa0", +"b.0 c #80afa8", +"#SW c #80b1a3", +"#SV c #80b2a4", +"aY1 c #80b48d", +"a7G c #80ba9c", +"eER c #80c9ce", +"d4j c #80cdd0", +"eOx c #80ced6", +"ceB c #80cee1", +"eNU c #80cfda", +"bdx c #80d6f4", +"bdy c #80d6f5", +"b.8 c #80d7f5", +"a2M c #80d7f7", +"a6R c #80d8f5", +"aYE c #80d8f8", +"bXV c #80d9fb", +"bSa c #80daf9", +"bX1 c #80dafb", +"bJ# c #80dafd", +"b2w c #80dafe", +"cV9 c #80dbf4", +"bIf c #80dbfa", +"bSS c #80dbfd", +"bSb c #80dcf9", +"bM1 c #80dcfa", +"b2y c #80dcfd", +"bSw c #80ddfb", +"bRM c #80ddfc", +"bI6 c #80ddfd", +"bW6 c #80ddff", +"d32 c #80deea", +"fCf c #80dfd5", +"dZB c #80e0ec", +".n5 c #80e7f4", +"h0q c #80ebdc", +"hRe c #80ebdd", +"hG5 c #80ebde", +"ikz c #80ebdf", +"hly c #80edde", +"haq c #80eddf", +"fmj c #80eef0", +"g0F c #80efdf", +"fuw c #80efed", +"fqr c #80f0f1", +"gOX c #80f1df", +"fZS c #80f3e2", +"gdJ c #80f4de", +".n4 c #80f4f7", +"dSF c #813e22", +"jeC c #813e25", +"iGG c #813e2a", +"i6. c #814429", +"hLG c #814434", +"iqx c #814436", +"h7l c #814438", +"dBV c #814628", +"jJs c #81471c", +"dxF c #814727", +"dBZ c #814728", +"h1l c #81473a", +"h4q c #81473b", +"is1 c #814936", +"#Ye c #814b24", +"#ei c #814b26", +"gUn c #814b2e", +"eaF c #814c24", +".Xl c #814d25", +".Kq c #814d29", +"dyU c #814f25", +"#5G c #814f28", +".Rk c #814f29", +".P# c #81502a", +"hYm c #815035", +".32 c #815229", +"dkj c #815232", +"jGF c #815329", +".01 c #81552b", +".Rl c #81552e", +"jWb c #81562a", +".7m c #81562c", +"#Up c #815630", +"bxk c #815634", +".y6 c #81572f", +"#Ys c #815831", +"atq c #815833", +"iBa c #815841", +"#vA c #815932", +"cOt c #815934", +"dGj c #815937", +".6y c #815a32", +".UU c #815a33", +"kfp c #815a37", +"ibe c #815a39", +"do1 c #815a3a", +"aNS c #815b2e", +".T. c #815b35", +"jwv c #815b37", +"ktw c #815b38", +"c2I c #815b3c", +".4G c #815c32", +"ahw c #815c38", +"kMh c #815c39", +"dOs c #815c3a", +"gUo c #815c3d", +"a42 c #815d30", +"##s c #815d33", +".OI c #815d34", +".yG c #815d35", +"kA4 c #815d39", +"jPI c #815d3a", +"#vq c #815e35", +"kPn c #815e39", +"kko c #815e3a", +"j1T c #815e3b", +".9x c #815f31", +"#lV c #815f3a", +"j1U c #815f3c", +".7b c #816031", +"aFT c #816036", +"#eO c #816132", +"jwt c #81613f", +"aOl c #816239", +"#qV c #816338", +"jzi c #816340", +"bb0 c #81643f", +"b9d c #816539", +".KJ c #81653c", +"btv c #81653d", +"gio c #816544", +"gpG c #816545", +"apG c #816547", +".Sx c #81663d", +"#5d c #816735", +"b4j c #81673c", +".57 c #81683c", +"##l c #81683f", +"bI2 c #816844", +"bZu c #81693d", +"btx c #816941", +"#ua c #816944", +"#e7 c #816d45", +"ahc c #817343", +"abn c #817351", +"apo c #817755", +"bi0 c #817c5f", +"aln c #81805f", +"QtF c #818181", +".DE c #81885f", +"cCz c #818886", +"#Mn c #81895b", +"c7N c #818984", +"#Mg c #818e65", +"#Mf c #818f65", +"#Me c #818f66", +"#PM c #81916a", +"#xX c #81936e", +"#uL c #819476", +"bEf c #819486", +"#Wb c #819574", +"#Is c #819672", +"#xV c #819674", +"#Eo c #81977e", +"#O0 c #81977f", +"#uW c #81987d", +"#In c #819978", +"#A0 c #819c7f", +"chj c #819da0", +"#xG c #819e82", +"#7# c #819e83", +"#0r c #819e88", +"#3v c #819f85", +"#ZS c #819f86", +"#7a c #81a086", +"a#e c #81a087", +"#WM c #81a089", +"#33 c #81a190", +"#O8 c #81a288", +"apn c #81a289", +"#SH c #81a28a", +"#S1 c #81a38a", +"#LC c #81a38b", +"#32 c #81a393", +"#O4 c #81a48c", +"#LT c #81a48e", +"#If c #81a48f", +"adH c #81a58f", +"#Ii c #81a591", +"adG c #81a690", +"#LV c #81a691", +"adF c #81a791", +"#LF c #81a792", +"#LW c #81a795", +"#SZ c #81ac9a", +"#0. c #81af9e", +"#Ph c #81af9f", +"#Pi c #81b0a0", +"a7p c #81b185", +"#Wv c #81b1a1", +"cyj c #81b3bc", +"b#N c #81b896", +"bI9 c #81b999", +"bae c #81baa6", +"azC c #81bfae", +"bmt c #81bfc5", +".mm c #81c2ef", +"cpl c #81c5dc", +"b9N c #81ccdf", +"dZc c #81cdc5", +"eI8 c #81d1dc", +"bh6 c #81d4f0", +"b## c #81d7f5", +"a6S c #81d8f6", +"bSL c #81d9f9", +"bXW c #81d9fb", +"b2z c #81dafc", +"b2v c #81dafe", +"bWY c #81dbf9", +"bWC c #81dbfb", +"bXK c #81dbfd", +"bN0 c #81dbfe", +"cV8 c #81dcf6", +"bTg c #81dcfa", +"bRQ c #81dcfb", +"b1z c #81dcfc", +"b2x c #81dcfd", +"b2T c #81ddf9", +"bXA c #81ddfc", +"bNU c #81ddfd", +"bW5 c #81deff", +"cRn c #81dffd", +"d33 c #81e0ec", +"e7q c #81e2ea", +"d8L c #81e2ed", +"e7r c #81e3eb", +"d8R c #81e4f0", +"iaa c #81e8da", +"elE c #81e8f5", +"fuE c #81e9ee", +"ifD c #81ebdc", +"hA. c #81ebdd", +"ho6 c #81ecde", +"gv4 c #81f3de", +"ghm c #81f4de", +".oC c #81f8f6", +".rG c #81faed", +".py c #81fdf5", +"g6c c #823e33", +"gil c #823f27", +"iDZ c #823f2c", +"huq c #824034", +"dKe c #824124", +"iA9 c #82432f", +"jy1 c #824422", +"hYi c #824435", +"dC4 c #82461c", +"dKg c #824627", +"gT2 c #82463b", +"h1n c #824732", +"dto c #824828", +"hIr c #824835", +"hYh c #82493c", +"iiV c #824a38", +"#Yd c #824b25", +"d1V c #824b2b", +"dGe c #824c2b", +"dtr c #824c2c", +"dB0 c #824d2c", +".GQ c #824e23", +"cS6 c #824e29", +"iB. c #824e3b", +"jBU c #824f2d", +"hVj c #824f36", +"#v9 c #825029", +"dYb c #825127", +".Ot c #825129", +"#w# c #825329", +"#p# c #82532b", +"abg c #82532d", +"dp3 c #825426", +"iTN c #825429", +"#Cs c #82552f", +"adg c #825535", +"iZn c #82562c", +"axv c #82562f", +"dgJ c #825729", +"#mj c #82572e", +".SX c #825730", +"k#U c #825735", +"#bU c #82582f", +"anr c #825830", +"aBr c #825832", +".v3 c #825834", +"iSj c #825836", +".vS c #825930", +".Rq c #825932", +"alt c #825933", +"aBt c #825936", +"gtr c #82593d", +"#gX c #825a30", +"jqp c #825a37", +"#mo c #825b30", +".2J c #825b32", +"kv3 c #825b37", +"ii1 c #825b39", +"#lY c #825c33", +"#Cm c #825c35", +"aKf c #825c37", +"is7 c #825c39", +"aW5 c #825d2e", +".QN c #825d31", +".Yz c #825d33", +".6x c #825d35", +"cKa c #825d39", +"jHO c #825d3a", +"aOv c #825e2e", +".2E c #825e33", +"alC c #825e39", +"jPN c #825e3a", +"kcP c #825f39", +".EQ c #825f3a", +"krg c #825f3b", +"jzf c #825f3c", +"##X c #826032", +"#go c #826037", +".Hw c #82603b", +".yR c #82603d", +"jkD c #82603e", +"#cg c #826132", +"##V c #826133", +"jC. c #82613e", +"#jT c #826233", +".C# c #82623c", +".Kc c #826341", +"##y c #826437", +"#lL c #82643b", +"bb4 c #82643d", +"geQ c #826444", +"cbX c #826639", +"#t8 c #82663b", +"#1D c #826739", +".Tv c #82673e", +"gl2 c #826746", +"#Uf c #826838", +"#a8 c #826b3f", +"#ZM c #827142", +"#FB c #82714d", +"ae6 c #827343", +"ahC c #82745d", +"bzT c #82775a", +".Cr c #827957", +"c21 c #827a73", +"#SK c #827d5b", +"a#h c #827f53", +".#H c #828282", +"c8k c #82857e", +"#Mo c #828757", +"#Mp c #828758", +"#SL c #82896a", +"#IQ c #828b5f", +"#IR c #828c60", +"#IP c #828d61", +"#IS c #828f66", +"#Tr c #828f67", +"#PR c #829069", +"#IO c #829166", +"#Md c #829269", +"#Ma c #82936d", +"#E1 c #82946e", +"#Ix c #82946f", +".LF c #829470", +"#E0 c #82956f", +"#It c #829570", +"#xW c #829571", +"#Ip c #829673", +"#Ir c #829775", +"#Iq c #829876", +"#EO c #829a7a", +"#EN c #829a7b", +"#WP c #829b7e", +"cpb c #829da2", +"#0s c #829e87", +"#Im c #829f83", +"#WO c #829f85", +"#Il c #82a085", +"#Wg c #82a086", +"#Wf c #82a186", +"#ZT c #82a187", +"#O9 c #82a188", +"#SG c #82a289", +"#SI c #82a389", +"ada c #82a38a", +"#Ik c #82a38b", +"bEa c #82a393", +"#S4 c #82a48a", +"#Te c #82a48d", +"#Pp c #82a58c", +"#Pq c #82a68d", +"#SM c #82a68f", +"#Ih c #82a692", +"a#N c #82a695", +"#Td c #82a790", +"#LX c #82a795", +"#T# c #82a894", +"#S0 c #82a993", +"#Ps c #82a994", +"adC c #82a995", +"adB c #82aa96", +"adA c #82aa97", +"ady c #82ab9c", +"#Pv c #82ac9b", +"#ST c #82b3a4", +"#SU c #82b4a5", +"cMS c #82b9bf", +"brr c #82bc99", +"b#H c #82bd9e", +".mn c #82c0ee", +".ml c #82c6f1", +"b9O c #82c9dc", +"bmu c #82cfe1", +"cvO c #82cfe2", +"ciW c #82d0e4", +"b7l c #82d4f1", +".pC c #82d5ea", +"bh8 c #82d7f5", +"a2K c #82d7f7", +"a2L c #82d8f8", +"a2N c #82d8f9", +"a6T c #82d9f8", +"bXZ c #82d9fa", +"bX0 c #82d9fb", +"bXf c #82daf6", +"bXc c #82dafa", +"bXX c #82dafb", +"b2A c #82dafd", +"bXh c #82dbf7", +"b2h c #82dbf8", +"bMZ c #82dbfa", +"bXY c #82dbfb", +"bM0 c #82dcfa", +"bRP c #82dcfb", +"bSc c #82ddfa", +"bSK c #82ddfe", +"bWy c #82defc", +"cRo c #82defd", +"bW4 c #82deff", +"cRl c #82e0fc", +".lC c #82ebff", +"hsS c #82ecdd", +"hee c #82ecde", +".mf c #82eeff", +"g4H c #82efe0", +"fyD c #82f0f2", +"gk1 c #82f4dd", +"j.9 c #833c25", +"geN c #834127", +"hBC c #834135", +"gT1 c #83453b", +"h1m c #834638", +"gT4 c #83473c", +"dyT c #83481e", +"aNN c #834925", +"hUR c #834937", +"iPe c #834a2e", +"#ci c #834b26", +"#gS c #834c26", +"doW c #834d2c", +"dWH c #834d3c", +"jTF c #834e21", +"eyn c #834e26", +"etL c #834f27", +"#G# c #835028", +"dSI c #83502f", +"ajw c #83512c", +"#eh c #83522a", +"aAC c #83522c", +".MO c #83532b", +"jWZ c #83532f", +"doY c #835433", +"#9C c #83552c", +"iD2 c #83553f", +"duB c #835628", +"#pn c #83562d", +"dOv c #835632", +"#jN c #83572d", +"cXX c #835837", +"#dP c #835930", +"#pw c #835931", +"apA c #835933", +"gl1 c #83593d", +"#er c #835a2f", +".y5 c #835a31", +"axt c #835a33", +"iX3 c #835a39", +".Xq c #835b31", +"##b c #835b33", +"atr c #835b34", +"##w c #835c30", +"#jz c #835c31", +".HI c #835c37", +"jzm c #835c38", +"in5 c #835c39", +"in2 c #835c41", +"aSN c #835d2e", +"jPG c #835d38", +"jqs c #835d39", +"dfu c #835d3c", +"#oY c #835e34", +".4r c #835e35", +"bb# c #835e37", +"iMl c #835e39", +"kkk c #835e3a", +"hIx c #835e3d", +"apC c #835f31", +".4t c #835f33", +".0s c #835f34", +"#dL c #835f36", +"#l0 c #836034", +"kcQ c #83603a", +"jZl c #83603c", +"jtB c #83603d", +"#nU c #836137", +"kPo c #83613b", +"jEN c #83613c", +"jHK c #83613d", +"h1t c #83613e", +"#cf c #836233", +".WZ c #836234", +"#cd c #836237", +"hYp c #83623e", +".9w c #836333", +"#eN c #836334", +".YE c #836338", +".Wn c #83633a", +"bxB c #83633b", +".ER c #83633e", +"jB9 c #836340", +"gl3 c #836341", +".yh c #83653c", +".Mt c #836544", +".Ka c #836643", +"#l. c #83673b", +"aSG c #83673c", +"a9F c #836740", +"bgA c #83683c", +"#Jm c #836b39", +"b4k c #836b3e", +"#XY c #836c41", +"bGn c #836d42", +"bZv c #837142", +".Zh c #83724c", +"cYf c #83766f", +"ccT c #837c76", +".I0 c #838256", +".qM c #838383", +".xw c #83875d", +".Gj c #83885d", +"#ye c #838962", +".xv c #838d64", +"#Tt c #838f66", +"#Ts c #839067", +"#Mm c #839167", +"#Tq c #839169", +"#SJ c #839172", +"#Mh c #839269", +"#PS c #83926b", +"#PT c #83936c", +"#Mc c #83946c", +"#Mb c #83956e", +"#Iu c #83956f", +"#EV c #839570", +"#E2 c #83966f", +"#Bt c #839672", +"#Bs c #839673", +"#xY c #839772", +".P1 c #839776", +"#uR c #83977a", +"#xZ c #839874", +"#Iw c #839875", +"#uS c #83987b", +"#0u c #83987e", +"#uT c #83997c", +"#0v c #83997d", +"#Bp c #839a7a", +"#ER c #839b7b", +"#uV c #839b80", +"#xU c #839c7b", +"#Bm c #839c7e", +"#Lx c #839c82", +"axG c #839c85", +"#EM c #839f83", +"#34 c #839f8e", +"#dI c #839f92", +"cYq c #83a0a7", +"#3u c #83a186", +"#We c #83a187", +"#Lz c #83a287", +"#LA c #83a288", +"#Tf c #83a28a", +"#LB c #83a389", +"ahf c #83a38a", +"#ZU c #83a48b", +"#S2 c #83a58b", +"#Wd c #83a58c", +"#Ij c #83a58f", +"adI c #83a693", +"ahE c #83a696", +"#Pz c #83a790", +"#Ie c #83a791", +"#7O c #83a797", +"#LO c #83a891", +"ahL c #83a994", +"#Ta c #83aa95", +"#LH c #83aa96", +".i5 c #83abcc", +"adz c #83ad9c", +"#Pg c #83afa0", +"bj# c #83b184", +"#Pj c #83b1a0", +"#Z8 c #83b1a1", +"bZ9 c #83b1be", +"#Wu c #83b2a3", +"#SR c #83b3a2", +"cyi c #83b3bd", +"#SS c #83b4a3", +"bek c #83b78e", +"aQH c #83b797", +"aMz c #83b995", +"b4V c #83c0ce", +"bqG c #83c2c9", +"buP c #83c5cd", +"eEN c #83c9ce", +"bqH c #83cedd", +"eO# c #83cfda", +"bh4 c #83d1e8", +"dZo c #83d2d2", +"cEb c #83d2e6", +"crq c #83d2e7", +"bmx c #83d2ea", +"bmy c #83d6f3", +"bdz c #83d7f5", +"a6V c #83d8f7", +"a2O c #83d8fa", +"a6U c #83d9f8", +"b2B c #83dafd", +"b6L c #83dcfa", +"bRN c #83dcfb", +"bXJ c #83dcfd", +"cV7 c #83ddf8", +"bWZ c #83ddfa", +"b1w c #83ddfb", +"bSR c #83ddfd", +"b7g c #83defb", +"b1E c #83dffe", +".p. c #83e1ee", +"e7s c #83e5ed", +"gDy c #83e9d1", +"hwy c #83ebdd", +"hDD c #83ebde", +"fmn c #83ebec", +"hhW c #83ecdd", +".oD c #83eef3", +"gSO c #83f1e0", +"gzK c #83f3dd", +".qV c #83fff1", +"i.a c #844234", +"dOo c #844627", +"dGa c #844829", +"jL3 c #84491d", +"jwd c #844923", +"hYj c #844935", +"dGd c #844a2a", +"fHZ c #844b1c", +"dKh c #844b2b", +"dtq c #844c2b", +"dtp c #844d2c", +"#5r c #844f27", +"dp5 c #845021", +"eC8 c #845026", +"#Ns c #845027", +"kIP c #84512a", +"kxa c #845226", +".Zf c #845228", +"#zc c #845229", +".MI c #84532e", +"dOr c #845331", +".HM c #84542d", +".Zk c #84552a", +"iK1 c #84562a", +"#mi c #84562d", +".O8 c #84562e", +"giq c #845631", +".1a c #84572b", +"#pj c #84572d", +"afn c #845832", +".Cb c #845930", +"h1r c #84593c", +".31 c #845a30", +"kp1 c #845a31", +"jGG c #845b2f", +".4C c #845b31", +".Km c #845b33", +"a#l c #845b35", +"dOu c #845b37", +"jOE c #845c2d", +"iSf c #845c4a", +".MY c #845d34", +"#FU c #845d35", +"#ss c #845e31", +"ahm c #845e39", +"kh6 c #845e3a", +"jHM c #845e3b", +"dty c #845e3d", +"do4 c #845e3e", +".UE c #845f32", +"#jE c #845f33", +"#jb c #845f37", +"iD7 c #845f3a", +"is4 c #845f43", +".Hv c #846039", +"cBA c #84603a", +"kvX c #84603b", +"j#o c #84603c", +"jtC c #84613b", +"jUO c #84613c", +"#lJ c #84613e", +"kGm c #84623b", +"jW0 c #84623e", +"cxq c #84633e", +".2u c #846436", +"au8 c #84643d", +"gxg c #846440", +".yF c #84653e", +"a1c c #84653f", +"jSd c #846540", +"alk c #846637", +".4i c #846638", +"#i4 c #846640", +".YT c #846738", +"#k. c #84673d", +"a9B c #846741", +"aSA c #846840", +".Hy c #846846", +"aSx c #846940", +"ckI c #846a3b", +"bpt c #846a3f", +"#e6 c #846a41", +".8Y c #846b41", +"#is c #846c41", +"bxF c #846c43", +"gIK c #846d4a", +"coT c #846e3d", +"aYf c #84703e", +"bGp c #847244", +"#f6 c #84744c", +"brB c #847554", +"da1 c #847b71", +".Lk c #847c4f", +"aji c #847d51", +"cYd c #847d77", +".u4 c #847e5c", +"cTS c #848078", +".bq c #848484", +"#yh c #84865d", +"#Mq c #84895a", +"#gg c #848a73", +".hb c #848bb3", +"b91 c #848e8e", +"aFY c #848f6e", +"#Tu c #849067", +".NA c #84906c", +"#PW c #849167", +"#IT c #849168", +"alm c #849174", +"#PV c #84926a", +"#PU c #84936c", +"#IC c #84946d", +"#ID c #84956d", +"#Tp c #84956f", +"#E7 c #849771", +"#IB c #849772", +"#HU c #84977d", +"#E6 c #849873", +"#Iv c #849876", +"#EW c #849976", +"#Br c #849977", +"#Bn c #849978", +"#WQ c #84997a", +"#0w c #84997d", +"#x0 c #849a77", +"#Bq c #849a79", +"#Bo c #849a7a", +"#EX c #849b79", +"#0x c #849b80", +"#M# c #849c7b", +"#EQ c #849c7e", +"#uU c #849c81", +"#0t c #849c84", +"#EP c #849d7e", +"#L4 c #849d7f", +"#Tg c #849e82", +"aYh c #849e86", +"#L5 c #849f81", +"#35 c #849f8b", +"#EL c #84a084", +"#Bh c #84a085", +"#Bi c #84a187", +"a6E c #84a18b", +"#Ly c #84a287", +"a2t c #84a28c", +"#Bj c #84a389", +"#SF c #84a48a", +"ac9 c #84a48b", +"#P. c #84a48c", +"cGP c #84a4ad", +"#7b c #84a58b", +"a#b c #84a58c", +"#S3 c #84a68c", +"a#c c #84a78d", +"a#d c #84a78e", +"#PB c #84a790", +"#Pr c #84a890", +"#PA c #84a891", +"ahK c #84aa95", +"ahN c #84aa96", +".rQ c #84ac80", +"#SN c #84ac96", +"ahJ c #84ac97", +"#Pw c #84ac9b", +"bZ8 c #84aebc", +"#3N c #84b09f", +"aQu c #84b181", +"#Z9 c #84b2a2", +"#SQ c #84b3a0", +"#Wt c #84b3a3", +"aQI c #84b590", +"aMx c #84b78c", +"bnc c #84b88c", +"aDE c #84c7ba", +"by0 c #84c9d4", +"cRe c #84cbdd", +"cIv c #84cdde", +"b9T c #84cde3", +"dZb c #84cecb", +"eOp c #84cfd8", +"bmv c #84cfe2", +"eYs c #84d0d7", +"eTu c #84d1db", +"cng c #84d4e9", +"e7e c #84d5df", +"b#a c #84d9f6", +"a6W c #84d9f8", +"a6X c #84d9f9", +"b#c c #84daf8", +"b2C c #84dbfc", +"b2g c #84dcf7", +"b2U c #84dcf9", +"c#G c #84dcfa", +"bNZ c #84dcfb", +"b2j c #84dcfd", +"b2u c #84dcff", +"b1P c #84ddf9", +"b7P c #84ddfa", +"b1y c #84ddfb", +"bWz c #84ddfc", +"cm5 c #84ddfd", +"b2t c #84ddfe", +"bSQ c #84ddff", +"bTh c #84defa", +"bXp c #84defb", +"b7h c #84defd", +"bXI c #84defe", +"bW0 c #84dffb", +"b2. c #84dffd", +".nu c #84e4f6", +"fd0 c #84e7e9", +"gzL c #84ebd3", +"ih4 c #84ebdc", +"hlz c #84ecdd", +"g8D c #84efdf", +".nt c #84f0f9", +"gHb c #84f2de", +"fNb c #84f2e4", +"fJv c #84f2e7", +".mR c #84f2fd", +"gDx c #84f3de", +"goD c #84f5dd", +".o8 c #84f9f4", +".p0 c #84fef3", +"h7f c #853a28", +"gpE c #854025", +"hOB c #854336", +"g2p c #854628", +"iiS c #85473a", +"i3A c #854929", +"i0L c #854b21", +"iD1 c #854b37", +"j8k c #854d20", +"hSp c #854e35", +"j3o c #854f23", +"dKj c #854f2e", +"jKg c #85502d", +"efs c #855124", +".b1 c #855190", +"iCH c #855326", +"#sh c #85532b", +"#13 c #85542b", +"dTN c #855629", +".Tj c #85562d", +"j3p c #85572d", +"aAM c #85572e", +"#X7 c #855830", +"gl4 c #855835", +"aSE c #855928", +"#s4 c #85592c", +"i2f c #855a2e", +"jvM c #855a2f", +"#mx c #855a30", +".YB c #855a32", +"jnr c #855a36", +"#bY c #855b30", +"#sB c #855c32", +"iiZ c #855c41", +".Bz c #855d31", +".vR c #855d32", +"#sb c #855d34", +"jOG c #855e2f", +"#sy c #855e31", +"#FT c #855e35", +".Ha c #855e37", +"#7p c #855e3d", +"jL8 c #855f30", +"bF4 c #855f35", +"jti c #855f3b", +"gpF c #855f42", +"#mk c #856033", +".86 c #856035", +".EU c #856039", +"kmF c #85603b", +".SI c #856134", +".WC c #856135", +".BW c #85613a", +"kv1 c #85613b", +"kMi c #85613c", +".Xi c #85613d", +"ki. c #85623c", +"jPK c #85623d", +".L4 c #856334", +".0C c #856337", +".W3 c #856339", +".yN c #85633c", +"jHx c #85633d", +"cBB c #85633e", +"cFS c #85633f", +"#ce c #856434", +".9A c #856435", +"ckF c #856438", +"box c #85643d", +"jB8 c #85643f", +"ath c #85663b", +"#UO c #856740", +".BX c #856743", +"jb0 c #856845", +"bk2 c #85693f", +"#lT c #856941", +"#9# c #856a32", +".1b c #856a41", +"bkZ c #856a42", +"gEX c #856a46", +".0R c #856b3a", +"cgv c #856c3b", +"#i5 c #856c46", +"b9g c #857142", +"#.L c #857143", +"bI1 c #85714d", +"#f5 c #857243", +"bLa c #857244", +"#f4 c #857447", +"dpr c #857b74", +".XU c #857c4c", +"#u# c #857c5b", +"dle c #857d78", +".v6 c #857e5c", +"cto c #857e7a", +"alH c #858069", +"#yi c #85855a", +".et c #858585", +"#Mr c #858b5d", +"#Fa c #85926a", +"#Tv c #85926b", +".v5 c #859276", +"cco c #859292", +"#F# c #85936a", +"#Fb c #85946b", +"#F. c #85956d", +"#E9 c #859670", +"#.a c #859678", +".Cq c #85967b", +"#E8 c #859872", +"#To c #859874", +"#Tn c #859975", +"apm c #859979", +"#E3 c #859a74", +"#WU c #859a77", +"#EU c #859a78", +"#WT c #859a79", +"#Bu c #859b78", +"#PL c #859b79", +"#PJ c #859b7a", +"#WS c #859b7b", +"#WR c #859b7d", +"cYr c #859b9e", +"#IA c #859c7a", +"#x1 c #859c7b", +"#EY c #859c7c", +"atF c #859d84", +"#ES c #859e7e", +"#L7 c #859e7f", +"#L6 c #859e80", +"#PE c #859e81", +"#Ep c #859e84", +"#ET c #859f81", +"#PI c #859f82", +"#L3 c #85a084", +"#A1 c #85a184", +"a#a c #85a388", +"#Bk c #85a38a", +"#7g c #85a488", +"ahe c #85a489", +"#Bl c #85a48a", +"#7c c #85a58b", +"#7d c #85a58c", +"#EK c #85a58d", +"ad. c #85a68d", +"ahh c #85a78d", +"#O3 c #85a78e", +"ahg c #85a78f", +"#P# c #85a790", +"#Pa c #85a791", +"ad# c #85a88f", +"#Pb c #85a892", +"cyl c #85a9b4", +"#Tb c #85aa94", +"ahO c #85aa96", +"ahM c #85ad97", +"alO c #85ad99", +"ahI c #85ae99", +"alR c #85ae9a", +"#Pd c #85ae9b", +"bVe c #85aeb8", +"#Pe c #85af9b", +"#Pf c #85af9d", +"#SP c #85b09c", +"beG c #85b182", +"#Ws c #85b4a2", +"#Z7 c #85b4a3", +"#Wp c #85b5a1", +"#Wr c #85b5a3", +"aMy c #85b78c", +"aUF c #85b88b", +"aMw c #85ba90", +"bei c #85bd98", +"aYV c #85be99", +"a7m c #85be9c", +"bnb c #85c09a", +"bzQ c #85c1c8", +"bDp c #85ceda", +"bqI c #85cede", +"eTr c #85d0d9", +"bmw c #85d0e2", +"bh5 c #85d3eb", +".mU c #85d6f4", +"eYx c #85d8e0", +"gDz c #85d9bd", +"bdA c #85d9f7", +"a6Y c #85d9f9", +"bdC c #85daf6", +"a6Z c #85dafa", +"b#b c #85dbf7", +"b#d c #85dbf8", +"b2D c #85dbfc", +"d4d c #85dce5", +"bRO c #85dcfb", +"b7s c #85dcfe", +"b2V c #85ddfa", +"b1x c #85ddfb", +"bWB c #85ddfc", +"b7O c #85ddfd", +"b2s c #85ddfe", +"b7Q c #85def8", +"bXo c #85defa", +"bXk c #85defb", +"b6p c #85defc", +"bXB c #85defd", +"b7i c #85defe", +"b1W c #85deff", +"b1Q c #85dffc", +"bSe c #85dfff", +"dZz c #85e2ee", +"e3c c #85e3eb", +"gHc c #85e8d1", +"ic2 c #85eadc", +"hwz c #85ebdd", +"hA# c #85ebde", +"im3 c #85ecdc", +"fQH c #85ede3", +".o9 c #85eef1", +"fFO c #85f0ea", +"fZT c #85f4e1", +"gsd c #85f5dd", +"hus c #863b22", +"i9z c #863d19", +"ivv c #864437", +"hx9 c #864533", +"gT0 c #86483e", +"gYi c #86492c", +"f.c c #864c1c", +"gT7 c #864c40", +"fLU c #864d1c", +"j0X c #864d23", +"dxG c #86502e", +".x5 c #865227", +"epb c #865229", +"#eQ c #86532a", +"ivy c #86533f", +"kHS c #86562a", +"#5B c #865730", +"#w. c #86582e", +"#X8 c #86582f", +".J0 c #865930", +"h4w c #865940", +"jYw c #865a2a", +"ajx c #865a31", +"jqo c #865b37", +".ZY c #865c2f", +".Te c #865d37", +"knN c #865e33", +"#vH c #865f31", +".Kn c #865f38", +"kkj c #86603b", +".81 c #86603d", +"#pk c #866133", +"#mT c #866136", +"gA8 c #86613d", +".vw c #866232", +"#yY c #866235", +".Ym c #86623c", +"jKx c #86623d", +"jPO c #86623f", +"aNV c #866333", +"iBf c #86633c", +"adf c #86633d", +".Mn c #866438", +"aWz c #86643a", +"#50 c #86643c", +"jhD c #86643e", +"gtu c #86643f", +"iU8 c #866440", +"##W c #866535", +"abm c #86653e", +"jHL c #866540", +".9y c #866635", +"#jm c #86663b", +"axC c #866641", +"h7u c #866741", +".4w c #866839", +"bpq c #86693e", +"bgx c #866940", +"#xh c #866941", +"bb2 c #866943", +".0e c #866a3d", +"#M1 c #866b33", +"#cx c #866b41", +"bgv c #866b43", +"axl c #866c36", +".KI c #866f47", +"#Jl c #86703b", +"ckK c #86713e", +"bBY c #867245", +"b#W c #867251", +".XT c #867443", +"#Rf c #867450", +".T1 c #867646", +"#7t c #86765c", +"au1 c #867b52", +"aG7 c #867d52", +"#yo c #867d53", +"aT1 c #86804e", +"ccf c #86827d", +"c3h c #86837b", +"#Gp c #868464", +"b9x c #868682", +".fR c #868686", +"b9A c #868785", +"cMR c #868968", +"#xg c #868969", +".DD c #868b60", +"#PX c #868e62", +"aSU c #868e68", +"#IU c #869169", +"#Fc c #86936a", +"#yd c #86946d", +"cIu c #86967c", +"#IN c #86976f", +"#Ml c #869770", +"#Bz c #869871", +"#By c #869872", +"#Mi c #869972", +"#Mk c #869973", +".tV c #869a71", +"#E5 c #869a76", +"#Th c #869b7b", +"#0z c #869b81", +"#Tj c #869c7b", +"#WV c #869c7c", +"#Iz c #869d7b", +"#Ti c #869d7c", +"#EZ c #869d7e", +"#0y c #869d82", +"#37 c #869d87", +"#PK c #869e7f", +"#PF c #869e80", +"#L8 c #869f81", +"#36 c #869f89", +"#PG c #86a083", +"bqF c #86a08a", +"#PH c #86a185", +"bIW c #86a18e", +"#PD c #86a286", +"ac8 c #86a387", +"#.r c #86a388", +"#PC c #86a389", +"#xH c #86a486", +"#O1 c #86a489", +"#SD c #86a58a", +"#Db c #86a594", +"#EI c #86a68f", +"#3y c #86a78b", +"#3w c #86a78c", +"#EH c #86a790", +"alJ c #86a796", +"#7e c #86a88f", +"#EJ c #86a891", +"adJ c #86a896", +"#7P c #86a897", +"#Id c #86a993", +"ahP c #86aa97", +"a#O c #86aa98", +"#Tc c #86ab95", +"#LN c #86ac97", +"#Pc c #86ac98", +"alV c #86ac99", +"alU c #86ad9a", +"alN c #86ae9b", +"alQ c #86ae9c", +"cGL c #86aebd", +"#H2 c #86af98", +"#SO c #86af9a", +"alP c #86af9c", +"ahH c #86af9d", +"ahG c #86b09f", +"a7O c #86b18e", +"beH c #86b281", +"ccp c #86b2bc", +"#Wo c #86b49f", +"a7o c #86b686", +"azE c #86b691", +"#Wq c #86b6a3", +"cyg c #86b8c4", +"aDJ c #86c3b2", +"bJ. c #86c8b7", +"dZa c #86ccc6", +"cct c #86cce0", +".mk c #86cdf3", +"dZe c #86cec1", +"eEl c #86d0db", +"by1 c #86d1df", +"buQ c #86d1e1", +"eYt c #86d2d8", +"eN7 c #86d4de", +"bdB c #86daf6", +"bdD c #86daf8", +"eYy c #86dbe3", +"d4e c #86dbe4", +"b#e c #86dbf9", +"b2F c #86dbfc", +"b2M c #86dcfb", +"b2E c #86dcfc", +"b7v c #86dcfd", +"b7t c #86dcfe", +"b7k c #86ddfa", +"bDJ c #86ddfb", +"bWA c #86ddfc", +"b7u c #86ddfd", +"b7f c #86defa", +"bXn c #86defb", +"bSd c #86defc", +"b2r c #86defd", +"bXH c #86defe", +"b1X c #86deff", +"e29 c #86dfe8", +"bXi c #86dffb", +"bXe c #86dffd", +"gzM c #86e0c5", +"b6M c #86e0fc", +"c#j c #86e0fd", +"c#i c #86e0fe", +"cd3 c #86e0ff", +"ciu c #86e1fe", +"dVa c #86e2ee", +"hAa c #86eadd", +"ikA c #86ebdc", +"hDE c #86ebdd", +"har c #86eede", +"egJ c #86effa", +"gWH c #86f1df", +"gv5 c #86f2da", +"fNc c #86f2e4", +"gK7 c #86f3df", +"h4h c #873c27", +"h99 c #873c2c", +"hx5 c #874031", +"hqE c #874034", +"hE5 c #874537", +"hx7 c #87493b", +"duz c #874a20", +"gT6 c #874b40", +"#zh c #874d23", +"hx8 c #874e3f", +"dOq c #874f2d", +"kfW c #874f2e", +"dOp c #87502e", +"dSH c #87502f", +"hPc c #875036", +"gL7 c #875044", +"j0Y c #875224", +"hPe c #875233", +"h4u c #875239", +"igo c #87523c", +"#sT c #875328", +"#pa c #875329", +"doX c #875330", +"aNL c #87542f", +"#JR c #87552b", +"cOr c #87552c", +"h7q c #87573c", +"cgr c #87582a", +"e#A c #875830", +"b4h c #87592f", +"izV c #875a2c", +"kE6 c #875a2f", +"#se c #875a30", +"dKp c #875a34", +"#zo c #875b2f", +"i.g c #875b3f", +".JS c #875c2e", +"dxO c #875c37", +"iqB c #875c46", +"#d9 c #875d31", +".Tg c #875d32", +"ahn c #875e3b", +"c7t c #875f3d", +"#Ck c #876034", +".vr c #876036", +".O0 c #876037", +"adi c #876038", +"cKk c #87603a", +"#vu c #876136", +"aHb c #876137", +"ktt c #87613c", +".WA c #876235", +"#vs c #876238", +"cOu c #87623a", +".HJ c #87623d", +"bpb c #876334", +"#vF c #876337", +"#UN c #876339", +"#Yq c #87633c", +"jnM c #87633d", +"#mq c #876437", +"h16 c #876438", +"#vr c #876439", +"#Re c #87643b", +"kA5 c #87643c", +"kvZ c #87643d", +"idY c #87643f", +"arg c #87653c", +"ivE c #87653e", +"cKb c #87653f", +"gEY c #876541", +"#bE c #87663b", +"jeV c #876742", +"#jS c #876839", +"jSe c #876843", +".vI c #87693b", +"bj7 c #876941", +"cbW c #876b3b", +"#hw c #876b42", +"app c #876c46", +"btz c #876f45", +"coS c #877039", +"ckJ c #87703c", +"#Jk c #87713c", +"gMA c #87724e", +"#s6 c #87754e", +"#wc c #877c58", +"#BX c #877e58", +"daW c #877f75", +"clD c #877f78", +"ccg c #87827e", +".Lj c #878354", +"#zr c #878362", +"dpQ c #87857c", +"#CR c #878667", +".av c #878787", +"dlh c #87887f", +"#PY c #878d60", +"aBB c #878d6b", +"c20 c #878f8a", +"#7v c #87917c", +"dug c #87928d", +"#Tw c #87936d", +"#yc c #87966f", +"#W5 c #879873", +"#IE c #879972", +"#W4 c #879973", +"#IM c #879a73", +"#Mj c #879b75", +"#BA c #879b76", +"#Bx c #879c77", +"#0A c #879c7f", +"#Tk c #879d7a", +"#38 c #879d86", +"#E4 c #879e79", +"#Tm c #879e7b", +"#HV c #879e83", +"#Bw c #879f7c", +"#Bv c #879f7d", +"#WW c #879f81", +"#Iy c #87a07f", +"#HW c #87a185", +"#M. c #87a284", +"#Eq c #87a287", +"bNJ c #87a290", +"#Bg c #87a58b", +"#3t c #87a68a", +"#B. c #87a68d", +"#Ba c #87a68e", +"#B# c #87a78e", +"#Bb c #87a78f", +"buO c #87a795", +"#ZP c #87a88c", +"#SE c #87a98e", +"#EG c #87a993", +"#LL c #87ad99", +"apR c #87ae9b", +"#H3 c #87af9a", +"atN c #87af9c", +"alM c #87af9d", +"#H1 c #87b099", +"apP c #87b09d", +"alS c #87b19e", +"ahF c #87b1a1", +"b#J c #87b787", +"aQx c #87b796", +"bjg c #87b893", +"ctS c #87bbc7", +"bnw c #87bd98", +".qc c #87bed0", +"aMv c #87c096", +"aMu c #87c19b", +"b4W c #87c3d2", +".mo c #87c3ed", +"aDO c #87c8be", +"bSO c #87cfce", +"eNY c #87d3dd", +"bqJ c #87d3e7", +".p5 c #87d5e5", +"bXE c #87d6e4", +"b7d c #87daf1", +"bh9 c #87daf7", +"bdE c #87daf8", +"bi. c #87dbf8", +"b2G c #87dbfd", +"b2H c #87dcfc", +"b7w c #87dcfd", +"car c #87ddfa", +"b7r c #87ddff", +"cas c #87def9", +"bzj c #87defa", +"bX8 c #87defb", +"bSP c #87defc", +"b2q c #87defe", +"b7q c #87deff", +"e2X c #87dfec", +"bXl c #87dffb", +"bXj c #87dffc", +"bXd c #87dffd", +"b2p c #87dffe", +"bXG c #87dfff", +"cEd c #87e0fc", +"ciN c #87e0fd", +"b7j c #87e0fe", +"b1Z c #87e0ff", +"cRk c #87e1fd", +"cMX c #87e1fe", +".kZ c #87e3fa", +"h6m c #87e5d4", +"d8S c #87e5f1", +"hUi c #87e6d6", +"hRf c #87e6d7", +"d80 c #87e7f2", +"gK8 c #87e8d1", +"ifE c #87ebdc", +"hwA c #87ebdd", +"eqp c #87ebf7", +"hef c #87eddd", +"gaq c #87f5dd", +".pz c #87faf2", +".rj c #87ffef", +"deK c #884627", +"i8E c #88462c", +"iGF c #884730", +"#NB c #884b23", +"i64 c #884c25", +"#Yj c #884e26", +"#UB c #884f25", +"dKi c #884f2d", +"dXf c #88512f", +"iFt c #885221", +"h1p c #88523b", +"eHX c #885427", +".Ma c #88552a", +"iGH c #88553d", +"is2 c #885541", +"dus c #885623", +"jym c #885629", +"kRe c #88572a", +"#gH c #88572d", +"jYv c #88592b", +"#sr c #88592e", +"jGD c #885a2d", +"jy2 c #885a34", +"dSN c #885a35", +"iB# c #885a45", +".y7 c #885b30", +"ans c #885b31", +"#zl c #885b32", +"dOx c #885b36", +"aW1 c #885c2b", +"#sv c #885c30", +"#ma c #885c31", +"geU c #885c35", +"dSM c #885c37", +"### c #885d37", +".Ov c #885e31", +"#bN c #885e33", +"kLX c #885e37", +"jGH c #885f31", +"#yX c #886032", +"atv c #886039", +"a5p c #88612c", +"jL9 c #886132", +"#sa c #886137", +".0i c #88613b", +".0x c #886235", +"#Rd c #886238", +"#vt c #886336", +".Q0 c #886337", +"jCd c #88633c", +"jKw c #88643e", +"jSg c #886441", +"bbX c #886535", +".89 c #886536", +"bbW c #88653b", +"kv0 c #88653d", +"kyn c #88653e", +"kvY c #88653f", +"#zn c #88663c", +"kJ# c #88663e", +"iqF c #88663f", +"jUN c #886640", +"aSI c #886737", +".Ur c #88673b", +"cxp c #88673f", +"jSc c #886740", +"aJ5 c #886834", +"afo c #886842", +".UH c #88693f", +"jNb c #886942", +"bbF c #886a3e", +"aSd c #886b3b", +"aWV c #886b41", +"a9D c #886b44", +"gip c #886b48", +"aWX c #886c43", +"gIL c #886c45", +"#QC c #886d34", +"aWS c #886d41", +"coR c #887140", +".56 c #887243", +"#iY c #887246", +"#Jj c #887440", +".T2 c #887748", +".Tt c #88774e", +"#FA c #887c56", +"cOS c #887d77", +"ck4 c #887f79", +"aiW c #888044", +"ayR c #888055", +"cgP c #88807a", +"amO c #888248", +".t5 c #888255", +"amN c #888349", +"cYP c #88837f", +"anf c #888557", +"#yj c #88885e", +"#3z c #888862", +".au c #888888", +"b7b c #888c6a", +"#Ms c #888d61", +"#Ty c #889269", +"#IV c #88936b", +"#Tx c #88946c", +"#W6 c #889772", +"#Fe c #889973", +"#yb c #889a74", +"#Fd c #889a75", +"#W3 c #889b78", +"ctT c #889ca0", +"#IF c #889d76", +"#0B c #889d7f", +"#Tl c #889e7c", +"cCw c #88a2a6", +"#x2 c #88a383", +"#L9 c #88a488", +"#A2 c #88a588", +"#xI c #88a78a", +"#HX c #88a78b", +"#A9 c #88a78e", +"#O2 c #88a88d", +"#A8 c #88a88e", +"#Wc c #88a98e", +"#Bf c #88a990", +"cCv c #88a9b1", +"#Bc c #88aa92", +"#HY c #88ab90", +"alW c #88ab98", +"apT c #88ac97", +"apS c #88ad99", +"#LI c #88ae99", +"#LM c #88af9a", +"atL c #88af9b", +"apO c #88af9e", +"atK c #88b09c", +"atM c #88b09d", +"alL c #88b09f", +"alT c #88b2a0", +"a26 c #88b882", +"bzU c #88bbbc", +"aIh c #88c09a", +"b1v c #88c1c9", +"aMt c #88c29e", +"bIb c #88c5c6", +"bRI c #88c8d2", +".7X c #88cac0", +"bNY c #88cbbd", +"dZd c #88ccbf", +"eTs c #88d1da", +"bMW c #88d1e2", +"dZn c #88d2c9", +"bIc c #88d2e5", +"eYu c #88d3da", +"eYh c #88d9e4", +"e2O c #88d9e5", +"bqK c #88d9f3", +"eYk c #88dae4", +"bia c #88dbf7", +"b2L c #88dbfb", +"b#f c #88dcf9", +"b7x c #88dcfd", +"b2m c #88ddf9", +"b7R c #88def7", +"cem c #88defc", +"b7p c #88deff", +"cRj c #88dff8", +"c#M c #88dffd", +"cm6 c #88dffe", +"bW3 c #88dfff", +"b2W c #88e0fa", +"bX9 c #88e0fb", +"bXm c #88e0fc", +"bXF c #88e0fd", +"b7o c #88e0fe", +"b1V c #88e0ff", +"d34 c #88e1ed", +"cIx c #88e1fb", +"bW1 c #88e1fd", +"cIA c #88e1fe", +"cMU c #88e2fe", +"hXi c #88e7d8", +"h0r c #88e8d8", +"hNN c #88e8d9", +"fic c #88e9e7", +".lD c #88eaff", +"hsT c #88ebdd", +"hhX c #88eddc", +"gOY c #88f2df", +"fqm c #88f2ed", +"fJw c #88f3e6", +"fZU c #88f4e2", +"gdK c #88f6dd", +".qt c #88fef1", +"gtq c #894124", +"igj c #89463a", +"jhh c #89482b", +"hVf c #894c3d", +"j4b c #894e2b", +"h4p c #894e40", +"hPa c #894f3d", +"fs7 c #89501f", +"dKf c #89502f", +"hSm c #89503e", +"#v4 c #895126", +"h4r c #895141", +"#R# c #895228", +"fEt c #895323", +"igp c #895339", +"iyl c #89533f", +"e5P c #895425", +"iYM c #895529", +"#G. c #89562b", +"dp8 c #89572a", +".MP c #89572c", +"in1 c #895746", +"#sq c #89582c", +"iym c #895844", +".Vp c #89592c", +"#ps c #89592e", +"#vE c #895b2e", +".MN c #895b30", +"dPo c #895d2c", +"#jV c #895d30", +"gpK c #895d38", +"jRh c #895e2d", +"##v c #895e31", +".Xa c #895e32", +"jD1 c #895f31", +"gpJ c #895f3a", +"dD# c #89602e", +".Ca c #896034", +"gxh c #89603b", +"#jd c #896134", +"jyq c #896136", +"dar c #89613e", +"jTI c #896231", +"als c #89623d", +"klA c #896336", +"ahq c #896339", +"jww c #89633b", +"jwx c #89633c", +"c8E c #89642f", +"jCc c #89643c", +"jHN c #89643d", +"k#V c #89643e", +"ivA c #896449", +"#js c #896536", +"bbT c #89653f", +"jOF c #896633", +"jxO c #896637", +".QO c #89663a", +"kMj c #89663d", +"jMU c #89663e", +".Bq c #89673b", +"kA6 c #89673e", +"jSf c #896740", +".4V c #896837", +".UO c #896839", +".YH c #89683a", +".OH c #89683b", +"iSk c #89683e", +"jCf c #896841", +".9v c #896939", +".WN c #89693b", +"cs7 c #89693f", +"jHQ c #896943", +"#7r c #896944", +"#NG c #896a3f", +"jKu c #896a44", +"j4k c #896b44", +"#J7 c #896c42", +"hVn c #896c45", +"coO c #896d41", +".E6 c #896d46", +"gA7 c #896d48", +"cs8 c #896f3d", +"bgu c #896f46", +"#iT c #897043", +"bpr c #897146", +"#s5 c #89734c", +".3R c #897444", +"bps c #897447", +"aST c #897747", +"aPG c #897f4b", +"aCH c #898051", +"amR c #898144", +"amQ c #898146", +"aiV c #898246", +"amP c #898248", +"aiU c #898348", +"aiT c #89844a", +"aiP c #89854d", +"aiS c #89864b", +".aX c #898989", +"cci c #898c8c", +"bh0 c #898d66", +"#PZ c #898e62", +"#HI c #899279", +"#IW c #89946c", +"#W7 c #899670", +"ccJ c #899999", +"#BB c #899d78", +"bI0 c #899d88", +"bI3 c #899d8c", +"#IG c #899e78", +"#W2 c #899f7d", +"#W1 c #899f7f", +"#39 c #899f88", +"#ZO c #89a17f", +"#WX c #89a184", +"#x3 c #89a484", +"#x4 c #89a585", +"bSz c #89a594", +"#xT c #89a789", +"#Er c #89a78c", +"#A3 c #89a88b", +"#A4 c #89a98d", +".79 c #89a995", +"#A5 c #89aa8f", +"#A7 c #89aa90", +"#A6 c #89aa91", +"#Be c #89aa92", +"apU c #89aa94", +"ahQ c #89aa97", +"#Et c #89ab90", +"#Bd c #89ab93", +"#HZ c #89ac92", +"#EB c #89ac95", +"#7f c #89ad94", +"#Ic c #89ad98", +"#LK c #89ae99", +"aBJ c #89af99", +"atO c #89af9b", +"#H0 c #89b097", +"axN c #89b09c", +"atJ c #89b09d", +"apM c #89b09e", +"apN c #89b09f", +"axM c #89b19c", +"apL c #89b19d", +"apQ c #89b19e", +"cCu c #89b1bc", +"byZ c #89b4a9", +"bWw c #89b4ab", +"aQt c #89b57d", +"aQv c #89b68d", +"cQQ c #89b6b8", +".78 c #89bbac", +"bn. c #89c199", +".lK c #89c7f2", +"eOw c #89d0d7", +"eTt c #89d3dc", +"eN2 c #89d4de", +"eYw c #89d8e0", +"e7d c #89d9e3", +"cV6 c #89dbf1", +"b14 c #89dbf4", +"bi# c #89dbf8", +"b2K c #89dcfb", +"b2I c #89ddfc", +"b7y c #89ddfd", +"c#5 c #89ddff", +"b7S c #89def8", +"caq c #89defb", +"b7N c #89defc", +"c#9 c #89defd", +"b6S c #89deff", +"cat c #89dff8", +"b6T c #89dfff", +"d4. c #89e0eb", +"d39 c #89e0ec", +"c#N c #89e0fd", +"b6X c #89e0fe", +"b1Y c #89e0ff", +"cIy c #89e1fb", +"civ c #89e1fe", +"b2o c #89e1ff", +".mT c #89e4f7", +"d8V c #89e7f2", +"ho7 c #89ebdd", +"irZ c #89ecdc", +"hlA c #89ecdd", +".mg c #89edfe", +"fmo c #89f1ed", +"h7g c #8a3b29", +"gxc c #8a3d20", +"h4m c #8a412d", +"gMx c #8a4827", +"hIp c #8a4839", +"jPq c #8a4925", +"hfZ c #8a492e", +"fct c #8a4e1a", +"#UA c #8a4f25", +"kcC c #8a4f28", +"hPd c #8a4f34", +"hE7 c #8a513e", +"#mJ c #8a5227", +"kit c #8a5230", +"hVg c #8a523f", +"foZ c #8a5322", +"dSG c #8a5431", +"kLV c #8a552b", +"d22 c #8a5624", +".MQ c #8a562b", +".Bd c #8a572a", +"#sp c #8a5a2e", +"iiY c #8a5a44", +"#ms c #8a5b2e", +"cOF c #8a5b34", +"i7z c #8a5c2e", +"#yP c #8a5c2f", +"bkX c #8a5d2a", +"gpL c #8a5d37", +"i40 c #8a5e2f", +"gir c #8a5e37", +"gtv c #8a5e3a", +".yp c #8a5f32", +"#pv c #8a5f33", +"bK6 c #8a5f34", +"dKn c #8a5f39", +"#sD c #8a6032", +"h7r c #8a6041", +".QL c #8a613a", +"jTG c #8a622f", +".9n c #8a6235", +".Zg c #8a6237", +"dB6 c #8a623d", +"dgK c #8a6330", +".2z c #8a6335", +".Xf c #8a6438", +"j4d c #8a643d", +"jL7 c #8a6532", +"jTJ c #8a6533", +"#st c #8a6537", +"jqq c #8a653d", +"j9i c #8a653e", +"c2J c #8a6542", +"iPj c #8a673d", +"kPq c #8a673e", +"kyo c #8a673f", +".YI c #8a683a", +"cOw c #8a683e", +".yO c #8a683f", +"kv2 c #8a6940", +"ily c #8a6942", +"aFE c #8a6a3b", +"a5e c #8a6a3c", +".7. c #8a6b3c", +"#he c #8a6b3d", +"#NF c #8a6b3f", +"cs6 c #8a6b40", +"igt c #8a6b43", +"#3E c #8a6b45", +"coQ c #8a6d3d", +"bkE c #8a6d40", +"hYq c #8a6d45", +"#j. c #8a6e44", +"bgy c #8a6f43", +"#lU c #8a6f45", +"#Gh c #8a6f47", +"bb6 c #8a7042", +"bb1 c #8a7046", +"#i6 c #8a7047", +".3Q c #8a7244", +"gQt c #8a734d", +"ajA c #8a744e", +"#.V c #8a7557", +"b9f c #8a7645", +"auX c #8a783b", +"#1C c #8a7846", +"cb0 c #8a7949", +"b4m c #8a7a49", +".H5 c #8a7b53", +"aq6 c #8a7e46", +"aiX c #8a8043", +"amS c #8a8143", +"#NH c #8a815e", +"daQ c #8a817a", +"#Wi c #8a825d", +"aeG c #8a854a", +"aiQ c #8a854d", +"aeC c #8a854e", +"dtV c #8a857d", +"aiR c #8a864c", +"aeD c #8a864e", +"ajh c #8a8658", +"aq9 c #8a8659", +"aeF c #8a874c", +"aeE c #8a874d", +"dpp c #8a8780", +"cgQ c #8a8a88", +"Qtv c #8a8a8a", +"#P0 c #8a9062", +"#Tz c #8a9167", +"#.g c #8a9575", +"#3s c #8a9669", +"#W8 c #8a9671", +".LE c #8a9773", +"#0K c #8a9976", +"#0J c #8a9b78", +"#BH c #8a9d78", +"#0E c #8a9d7f", +"#0C c #8a9d80", +"#0D c #8a9e80", +"#BG c #8a9f79", +"#BE c #8a9f7a", +"#BD c #8aa07b", +"#IL c #8aa17d", +"#IH c #8aa27d", +"#cI c #8aa288", +"#WY c #8aa385", +"#x6 c #8aa484", +"all c #8aa688", +"b44 c #8aa7ae", +".is c #8aa7cc", +"bXq c #8aa898", +"#xJ c #8aaa8d", +"#Es c #8aaa8f", +"alX c #8aaa97", +"#7Q c #8aab98", +"b2# c #8aab9e", +"#3x c #8aac92", +"#EA c #8aad96", +"#EC c #8aad97", +"apJ c #8aad9a", +"axR c #8aae95", +"#EF c #8aae98", +"#Ib c #8aaf99", +"axP c #8aaf9a", +"#LJ c #8ab09b", +"axO c #8ab09c", +"axK c #8ab19d", +"axL c #8ab29d", +"alK c #8ab3a1", +"#3M c #8ab3a2", +"aY2 c #8ab48c", +"chi c #8ab5be", +"cVt c #8ab7b9", +"aQs c #8ab883", +"#.l c #8abaa3", +".pi c #8abcc9", +"bDo c #8ac0bb", +"bWx c #8ad2e7", +"bDq c #8ad6eb", +"buR c #8ad7ef", +"bqL c #8adbf8", +"bmz c #8adbf9", +"b#h c #8adbfa", +"bib c #8adcf7", +"bWT c #8adcf8", +"bdF c #8adcf9", +"b2J c #8addfb", +"c#6 c #8addfe", +".p4 c #8adee7", +"cau c #8adef8", +"b7M c #8adefc", +"c#7 c #8adefe", +"ci3 c #8adeff", +"d31 c #8adfe9", +"cav c #8adff6", +"b7e c #8adff9", +"c#8 c #8adffd", +"b6W c #8adffe", +"b1U c #8adfff", +"cnb c #8ae0fb", +"ciM c #8ae0fd", +"b2n c #8ae0fe", +"b10 c #8ae0ff", +"cIw c #8ae1fb", +"cIz c #8ae1fc", +"ceq c #8ae1fd", +"c#L c #8ae1fe", +"cm7 c #8ae1ff", +"cMW c #8ae2fd", +"cIB c #8ae2ff", +"h9m c #8ae5d3", +"f9i c #8ae7d2", +"d8Z c #8ae8f4", +"hKo c #8ae9db", +"gv6 c #8aebd1", +".mS c #8aeefa", +"gse c #8aefd5", +"g0G c #8af0de", +"goE c #8af2d8", +"fNd c #8af3e4", +"gk2 c #8af4db", +"ghn c #8af5dc", +".rH c #8afbec", +"g.a c #8b3a23", +"hy. c #8b4325", +"hVe c #8b4e3f", +"gT5 c #8b4e43", +"gX5 c #8b5145", +"e#B c #8b5228", +"dXe c #8b5432", +"#UC c #8b5529", +"gL8 c #8b554a", +"kzK c #8b5624", +"ekh c #8b5826", +"#bQ c #8b582d", +"#5C c #8b582e", +"e1o c #8b592d", +"#9w c #8b592e", +"#mH c #8b5b2e", +".MJ c #8b5c31", +"j0Z c #8b5d2d", +"#hh c #8b5d30", +"d6R c #8b5d33", +"abk c #8b5e33", +"ivz c #8b5e49", +".vT c #8b5f32", +"kLW c #8b5f35", +".Mb c #8b5f36", +"gtx c #8b5f38", +".Hb c #8b6031", +"kO5 c #8b6038", +"gl5 c #8b613a", +"#vO c #8b6236", +".ME c #8b6237", +"dGi c #8b633e", +"jJw c #8b6433", +".WQ c #8b6438", +"jzn c #8b643c", +"bBC c #8b643d", +"#mu c #8b6535", +".Eu c #8b6538", +".QC c #8b6539", +"cS1 c #8b653a", +"apx c #8b663a", +"jE5 c #8b663d", +"jEL c #8b663e", +"jRi c #8b6733", +"jRj c #8b6734", +"#sn c #8b6737", +"jkE c #8b673f", +"jN# c #8b6740", +"#lZ c #8b6839", +"alw c #8b683d", +"cKc c #8b683f", +"aSc c #8b693a", +"#l9 c #8b6a3d", +"cxr c #8b6a40", +"jE6 c #8b6a42", +"jPM c #8b6a43", +".HK c #8b6a46", +"#J6 c #8b6b40", +"jNa c #8b6b43", +".Mm c #8b6c3e", +"is8 c #8b6c42", +"hLN c #8b6c45", +".0O c #8b6d3c", +"a08 c #8b6d3f", +"a1a c #8b6e45", +"h1u c #8b6e46", +"hPh c #8b6e47", +".5f c #8b6f43", +"#i7 c #8b6f44", +"#J1 c #8b6f46", +"#9y c #8b7049", +"alo c #8b7149", +"bk1 c #8b7247", +"#Gn c #8b7249", +"a2h c #8b7332", +"#AE c #8b7347", +"auW c #8b7637", +"cdW c #8b7639", +"ayN c #8b7739", +"ayO c #8b773a", +".ZK c #8b7747", +"bUH c #8b794a", +"bBZ c #8b7a49", +"aq5 c #8b7b3f", +"auY c #8b7d44", +"#XX c #8b7d4b", +"ae5 c #8b7f49", +"aT0 c #8b8046", +"amT c #8b8142", +".zh c #8b8261", +"aqE c #8b8449", +"aq7 c #8b8451", +"#BU c #8b8458", +"aeB c #8b864f", +"au0 c #8b875a", +"#yn c #8b875d", +"#BW c #8b8760", +"cYx c #8b887f", +"cKt c #8b8a85", +".dd c #8b8b8b", +"bQl c #8b8d8a", +"#TB c #8b8f62", +"#TA c #8b8f63", +"#yk c #8b8f65", +".pm c #8b902d", +"#P1 c #8b9165", +".xI c #8b926b", +"b.Z c #8b936c", +"#IX c #8b946c", +"#IY c #8b946d", +"#Xa c #8b946e", +"#X. c #8b9670", +"#W9 c #8b9671", +"#0N c #8b9770", +"#0M c #8b9873", +"#0L c #8b9876", +"#Ff c #8b9a76", +"#Fh c #8b9b77", +"#cK c #8b9b7e", +".hR c #8b9cc4", +"#aL c #8b9d79", +"#0I c #8b9d7a", +"#0H c #8b9e7b", +"#y. c #8b9f7b", +"#0G c #8b9f7e", +"#0F c #8b9f7f", +"#W0 c #8ba183", +"#4. c #8ba189", +"#x8 c #8ba280", +"#IK c #8ba37f", +"#IJ c #8ba380", +"#WZ c #8ba385", +"#II c #8ba480", +"#x7 c #8ba482", +"#x5 c #8ba88a", +"cTE c #8ba9b0", +"ahR c #8baa96", +"aF6 c #8bad96", +"#ED c #8bae98", +"#Eu c #8baf94", +"#EE c #8baf99", +"#Ia c #8bb099", +"aBK c #8bb09a", +"aBI c #8bb09b", +"atI c #8bb39d", +"axJ c #8bb39e", +"#H4 c #8bb49f", +"apK c #8bb4a0", +"cQO c #8bb8bb", +"a3i c #8bc098", +".lL c #8bc5f1", +"eES c #8bcace", +".lJ c #8bcbf3", +"dZm c #8bcfc0", +"cRg c #8bd5e5", +"cRi c #8bd7e8", +"by2 c #8bd7ed", +"bid c #8bdcf8", +"b#g c #8bdcf9", +"b#i c #8bdcfa", +"d4f c #8bdde4", +"c#2 c #8bddf5", +"b7z c #8bddfc", +"ceJ c #8bdeff", +"b13 c #8bdffb", +"b7L c #8bdffc", +"c#K c #8bdfff", +"b18 c #8be0fb", +"ceE c #8be0fd", +"b11 c #8be0fe", +"b6V c #8be0ff", +"b17 c #8be1fb", +"c#4 c #8be1fc", +"c#H c #8be1fd", +"b7n c #8be1fe", +"b7m c #8be1ff", +"ceF c #8be2fe", +"cra c #8be2ff", +"cIC c #8be3ff", +"d8P c #8be5f1", +"hG6 c #8beadb", +"ih5 c #8bebda", +"gSP c #8bf1dd", +".qW c #8bffee", +"djX c #8c3c1a", +"dok c #8c4623", +"h7k c #8c4736", +"jR3 c #8c4b26", +"#1V c #8c4c24", +"g2d c #8c4d40", +"hup c #8c4f40", +"h1k c #8c5042", +"htE c #8c5043", +"dC9 c #8c5324", +"#JX c #8c5327", +"#5u c #8c542a", +"dG9 c #8c5626", +"ki8 c #8c5727", +"fkR c #8c5728", +"dyO c #8c572b", +"hSo c #8c583f", +"#ej c #8c5a2e", +".Pa c #8c5b31", +"eWD c #8c5c31", +"dWI c #8c5d49", +".Cc c #8c5f32", +"dp6 c #8c602d", +"ix. c #8c6132", +"anw c #8c6137", +"gtw c #8c613b", +"dOw c #8c613c", +"is3 c #8c614b", +".8Q c #8c6237", +"gxj c #8c623a", +"jYx c #8c6331", +"do8 c #8c633d", +"hqN c #8c6435", +"gxi c #8c643e", +"idV c #8c6445", +"iQV c #8c6533", +"#jG c #8c6537", +".SW c #8c6538", +".1Z c #8c6639", +"apz c #8c663d", +"jtD c #8c663e", +"jD2 c #8c6738", +".9. c #8c6739", +".Eo c #8c673b", +"jHv c #8c673e", +"dgG c #8c682d", +"jTK c #8c6836", +"j6F c #8c6840", +"a#n c #8c6843", +".QD c #8c693b", +"kDD c #8c693f", +"alA c #8c6940", +"kJ. c #8c6941", +"jRk c #8c6a37", +".6J c #8c6a3c", +"iMm c #8c6a40", +"jUA c #8c6a42", +"hcb c #8c6a44", +".Yv c #8c6b3b", +"jHP c #8c6b43", +".8A c #8c6b48", +"jKv c #8c6c43", +"jCg c #8c6c44", +".WF c #8c6d3d", +"a9k c #8c6d3f", +"#CP c #8c6d43", +"cBC c #8c6d44", +".E7 c #8c6e44", +"btf c #8c6e45", +".WL c #8c6f41", +"#iX c #8c6f44", +"i.k c #8c6f47", +"bhs c #8c7035", +"coP c #8c7043", +"#j# c #8c7045", +"jPL c #8c7048", +"aOc c #8c7144", +"a9j c #8c7145", +"#i9 c #8c7146", +"#ac c #8c7246", +"#Gg c #8c7248", +"#CO c #8c7348", +"#Go c #8c734a", +".9T c #8c744a", +"aX8 c #8c7636", +"ahj c #8c7651", +"auV c #8c7736", +"aTU c #8c7737", +"aX7 c #8c7738", +"ayM c #8c7739", +"#5c c #8c783f", +"aq4 c #8c793b", +"aXe c #8c7947", +"cgw c #8c7a45", +"ayP c #8c7b3e", +"#Ji c #8c7b45", +"aTX c #8c7c3f", +"bvA c #8c7e59", +"amU c #8c8142", +"aiY c #8c8143", +"aeJ c #8c8144", +"aqH c #8c8244", +"aeI c #8c8245", +"aeH c #8c8348", +"aG6 c #8c834f", +"#BT c #8c8354", +"aqG c #8c8446", +"aqF c #8c8448", +"aqD c #8c844a", +"amM c #8c864b", +"aeA c #8c874f", +"aez c #8c8750", +"aYg c #8c8757", +"c74 c #8c877d", +"cpJ c #8c8781", +"#BV c #8c8960", +"co7 c #8c8a88", +".bU c #8c8c8c", +"aOB c #8c8e62", +".Qd c #8c8e63", +".AG c #8c8f63", +"cBW c #8c908b", +"#Xb c #8c946d", +".Gh c #8c9569", +"#IZ c #8c956c", +"#X# c #8c9670", +"#0O c #8c9770", +"#ZN c #8c9a73", +"#Fi c #8c9a75", +"#Fg c #8c9b77", +"ahd c #8c9c76", +"#4# c #8ca18a", +"#BF c #8ca27d", +"#x9 c #8ca27e", +"#BC c #8ca37f", +"bQx c #8ca4a8", +"#7S c #8ca792", +"ahS c #8ca992", +"bQy c #8ca9af", +"aKv c #8caa90", +"#7R c #8caa96", +"#xS c #8cad90", +"aF5 c #8cad95", +"aF7 c #8cae96", +"adK c #8cae9c", +"#Wn c #8caf96", +"a#P c #8caf9e", +"axQ c #8cb09a", +"#I. c #8cb19a", +"#H9 c #8cb19b", +"atG c #8cb29d", +"atH c #8cb49f", +"cQR c #8cb8ba", +"cVs c #8cb8bb", +"cCt c #8cb9c7", +"aUD c #8cbd93", +"biP c #8cc396", +"eEg c #8cd4dd", +"cRh c #8cd5e3", +"cRf c #8cd5e6", +"e3h c #8cd8d5", +"eYv c #8cd8df", +".mj c #8cdaf7", +"bRJ c #8cdbf6", +"bic c #8cdcf7", +"bqM c #8cdcf9", +"bie c #8cdcfa", +"ca# c #8cddfd", +"ceC c #8cdef6", +"b7A c #8cdefc", +"ca. c #8cdefe", +"cao c #8cdffd", +"ceG c #8cdfff", +"b7T c #8ce0f9", +"cep c #8ce0fe", +"b6R c #8ce0ff", +"b2X c #8ce1fa", +"b19 c #8ce1fb", +"b16 c #8ce1fc", +"b12 c #8ce1fd", +"ciK c #8ce1fe", +"b6U c #8ce1ff", +"cMV c #8ce2fd", +"b6N c #8ce2fe", +"bW2 c #8ce2ff", +"cID c #8ce3ff", +"dV. c #8ce5f2", +"elF c #8ce9f4", +"d8Y c #8ce9f5", +"hDF c #8ceadb", +"fTB c #8cedde", +"fWT c #8cf1e2", +".pA c #8cf5ef", +".p1 c #8cfcf0", +".ab c #8d3b91", +"hH4 c #8d4227", +"hqH c #8d4430", +"dBU c #8d4526", +"h7j c #8d4635", +"hH5 c #8d472e", +"hb5 c #8d4736", +"ia4 c #8d4839", +"jMQ c #8d4a25", +"gX1 c #8d4b3e", +"hSl c #8d4c3d", +"hfU c #8d4d3a", +"#1U c #8d4e25", +"h.a c #8d4f40", +"hqD c #8d4f42", +"g6# c #8d4f43", +"gH6 c #8d5043", +"htF c #8d5143", +"ees c #8d532b", +"i3K c #8d5427", +"iH8 c #8d5520", +"iWu c #8d5521", +"gL6 c #8d554b", +"fPs c #8d5621", +"e#C c #8d562e", +".uP c #8d5727", +"#sR c #8d572a", +"cBL c #8d5731", +"dPm c #8d5823", +"dC5 c #8d5826", +".E. c #8d5828", +"#JW c #8d582b", +"#5y c #8d582c", +"h4s c #8d5841", +"ifk c #8d5928", +"kp0 c #8d592a", +"h4t c #8d5a40", +".O6 c #8d5b2e", +"i1A c #8d5b2f", +"idR c #8d5b45", +"eki c #8d5c2d", +"#gR c #8d5d30", +"eRL c #8d5d31", +"#jp c #8d6033", +"h1q c #8d6145", +"dLl c #8d622f", +"bpc c #8d6231", +".zf c #8d6234", +".Kr c #8d6237", +"do9 c #8d623d", +"#mG c #8d6333", +".9q c #8d6334", +".MF c #8d6336", +"geV c #8d633a", +"hni c #8d6340", +"#pu c #8d6434", +".9f c #8d6435", +"cOB c #8d6439", +"dat c #8d643e", +"aJB c #8d652b", +"j00 c #8d6534", +"##D c #8d6536", +".0J c #8d6538", +"jEK c #8d653d", +"iH9 c #8d6634", +"j5M c #8d6635", +"jD3 c #8d6636", +".6U c #8d6637", +".yM c #8d6638", +".0F c #8d6738", +"#sk c #8d6739", +".8L c #8d673a", +"axw c #8d673e", +"jwy c #8d683f", +"dtz c #8d6843", +".Yu c #8d6939", +"#Cf c #8d693a", +"cOA c #8d693e", +"jnN c #8d693f", +"iX4 c #8d6940", +"ktx c #8d6941", +".Wt c #8d6944", +"jJx c #8d6a37", +"##a c #8d6a3e", +".RA c #8d6b3e", +"jPs c #8d6b40", +"j4e c #8d6b42", +"a43 c #8d6c37", +"jOH c #8d6c39", +"#mf c #8d6c3a", +"jE8 c #8d6d43", +"jKz c #8d6d45", +".7c c #8d6e3a", +"j#p c #8d6e47", +".YR c #8d6f3c", +"aWR c #8d6f3f", +"jKy c #8d6f46", +"jE9 c #8d6f47", +"#eM c #8d703d", +"#gj c #8d703e", +".yg c #8d7047", +"#i0 c #8d7048", +"aJE c #8d7140", +"#i8 c #8d7145", +"bp. c #8d7248", +"bht c #8d7337", +"#iU c #8d7342", +"bkY c #8d7347", +"i8U c #8d734c", +"aSH c #8d7446", +"#11 c #8d744c", +"abl c #8d744d", +"bda c #8d753b", +"#f3 c #8d7547", +"b.N c #8d7636", +"a6u c #8d7637", +"bl7 c #8d763d", +"bqr c #8d763e", +"#3C c #8d764e", +"ayL c #8d7838", +"bqn c #8d7840", +"aYe c #8d784d", +"auU c #8d7a3a", +"aq3 c #8d7a3b", +"a2i c #8d7a3c", +"aCB c #8d7b3e", +"aTY c #8d7c3d", +".1N c #8d7c4a", +"aPD c #8d7d3f", +"aPE c #8d7e42", +"#wb c #8d7e57", +"aeK c #8d8044", +"aqI c #8d8243", +"aCG c #8d834e", +".VZ c #8d834f", +"anb c #8d844f", +"auZ c #8d854f", +"aiO c #8d874f", +"aey c #8d8750", +"aeo c #8d8754", +"aau c #8d8855", +"aaz c #8d8953", +"aat c #8d8956", +"#8w c #8d8a58", +"ajg c #8d8a59", +"cK9 c #8d8a86", +"cyp c #8d8b82", +".h# c #8d8d8d", +"#yl c #8d8f64", +".DC c #8d9165", +"bch c #8d916a", +"#Mt c #8d9468", +"#Fj c #8d9c76", +"bQw c #8d9d9d", +"#BK c #8d9f79", +"#BJ c #8da07a", +"#BI c #8da07b", +"#ya c #8da280", +"#4a c #8da288", +"#y# c #8da37f", +"#7T c #8da68f", +"cTF c #8da7ac", +".I8 c #8da88c", +"aKu c #8dab91", +"apV c #8dab93", +"#xK c #8dae91", +"aF8 c #8dae95", +"bEi c #8db1a8", +"aBF c #8db29b", +"aBH c #8db29c", +"#I# c #8db39c", +"axI c #8db49e", +"ciR c #8db6ae", +".7K c #8db9aa", +"beg c #8dc08e", +".ms c #8dc0e7", +"dZl c #8dc9b7", +"ccq c #8dcfdd", +"eOq c #8dd1d9", +"b9U c #8dd1e4", +"eYj c #8ddbe5", +"bId c #8ddbf4", +"bMX c #8ddbf5", +"bDr c #8ddbf6", +"by3 c #8ddcf7", +"bDs c #8ddcf9", +"buS c #8ddcfa", +"bdG c #8dddf9", +"by4 c #8dddfa", +"b7B c #8ddefd", +"ceH c #8ddeff", +"ce6 c #8ddff9", +"ceI c #8ddfff", +"e2U c #8de0eb", +"caw c #8de0f5", +"can c #8de0fd", +"cap c #8de0fe", +"b1T c #8de0ff", +"d38 c #8de1ec", +"b15 c #8de1fc", +"b6Y c #8de1fd", +"c#J c #8de1ff", +"b2Y c #8de2f9", +"cet c #8de2fc", +"ceD c #8de2fd", +"ciO c #8de2fe", +"cm8 c #8de2ff", +"cit c #8de3ff", +"b68 c #8de4fe", +"iab c #8de7d5", +"hAb c #8deadc", +".pB c #8dedec", +"fJx c #8df3e5", +"ja. c #8e4018", +"jbJ c #8e4428", +"h7i c #8e4838", +"h4n c #8e4937", +"i.# c #8e4b3a", +"jNS c #8e4c1e", +"h4o c #8e4c3c", +"hP. c #8e4d3d", +"iJr c #8e5035", +"iyk c #8e523d", +"#Q3 c #8e5327", +"gTZ c #8e5447", +"cxz c #8e5528", +"j.# c #8e5724", +"d6S c #8e5929", +"dSP c #8e5a34", +"kKS c #8e5c28", +".Xm c #8e5d30", +"#UJ c #8e5f31", +"cS5 c #8e5f32", +".WH c #8e5f34", +"jMR c #8e6038", +"jUz c #8e6139", +"#o3 c #8e6336", +"#en c #8e6436", +"##F c #8e6536", +"##p c #8e6539", +"das c #8e653f", +"iVX c #8e662c", +".GS c #8e6637", +"#y2 c #8e6638", +"#el c #8e6738", +"axu c #8e673e", +"iU9 c #8e673f", +".6N c #8e6839", +"atu c #8e683e", +"iNW c #8e6935", +"#s. c #8e693c", +"alx c #8e693e", +"jBW c #8e693f", +"gA9 c #8e6941", +"a#m c #8e6942", +"#bS c #8e6a39", +"#s# c #8e6a3b", +"jTH c #8e6b36", +"ksb c #8e6b3a", +"cOx c #8e6c40", +"#J3 c #8e6c43", +".JL c #8e6d3d", +".Ks c #8e6d41", +"jRl c #8e6e3b", +".G6 c #8e6e3e", +".Ho c #8e6e40", +".7a c #8e6f3b", +"a0S c #8e6f40", +"a0Q c #8e6f41", +"aWQ c #8e6f43", +".HO c #8e6f45", +"#wa c #8e7044", +"#9z c #8e7046", +"a09 c #8e7142", +"#bl c #8e7145", +"aSv c #8e7244", +"aOh c #8e7246", +"#Gm c #8e7247", +"#Yr c #8e7249", +".YW c #8e733e", +"bb7 c #8e7340", +"cBE c #8e7344", +"#ja c #8e7347", +"#CJ c #8e7349", +"bc1 c #8e7438", +"aSz c #8e7447", +"#YN c #8e744c", +"#M0 c #8e7537", +"byG c #8e753b", +".Vk c #8e754a", +"aPB c #8e7635", +"bdi c #8e7636", +"#QB c #8e7638", +"#CQ c #8e764d", +"#5D c #8e764f", +"#9. c #8e7738", +"cRc c #8e7749", +".u2 c #8e774e", +"bHN c #8e783e", +"bqo c #8e7840", +"bqq c #8e7841", +"aYa c #8e7a3a", +"aPC c #8e7a3b", +"bdj c #8e7a3c", +"ayK c #8e7b3b", +"aa1 c #8e7b3f", +"bhP c #8e7b40", +"an# c #8e7c3c", +"aLo c #8e7c3d", +"aCD c #8e7c3e", +"#Ue c #8e7c41", +"#zq c #8e7c55", +"aq2 c #8e7d3d", +"aTZ c #8e7d3e", +"aCE c #8e7d40", +"aY# c #8e7e42", +"b.U c #8e7e44", +"aG4 c #8e7f42", +"aLp c #8e8044", +"bPZ c #8e804c", +".T3 c #8e804d", +"#J4 c #8e8059", +"amV c #8e8142", +"aCF c #8e8147", +"ayQ c #8e8148", +"aqK c #8e8241", +"aqJ c #8e8242", +"aiZ c #8e8243", +"aG5 c #8e8348", +"aPF c #8e8349", +"aLq c #8e844a", +"aem c #8e8552", +"aqC c #8e864b", +"aaq c #8e8654", +"cTp c #8e8680", +"aLr c #8e8751", +"aiE c #8e8753", +"aen c #8e8754", +"#Fz c #8e875e", +"da2 c #8e877c", +"aex c #8e8850", +"aaE c #8e8851", +"aiD c #8e8853", +"aiC c #8e8854", +"aar c #8e8856", +"#BS c #8e8859", +"aaG c #8e894e", +"#8I c #8e8952", +"#8H c #8e8953", +"#8G c #8e8954", +"#8E c #8e8955", +"aas c #8e8956", +"aaB c #8e8a52", +"aaA c #8e8a53", +"#8z c #8e8a55", +"#8v c #8e8b58", +"duh c #8e8b83", +"bVk c #8e8b84", +"anc c #8e8c5b", +"bQv c #8e8c86", +".gM c #8e8d8b", +"bdr c #8e8e61", +"#J8 c #8e8e6e", +"QtK c #8e8e8e", +"aq8 c #8e8f60", +"ane c #8e8f61", +"and c #8e9061", +"#ym c #8e9066", +"#TC c #8e9165", +"bZT c #8e918f", +".t7 c #8e9264", +"#MF c #8e9265", +"dgs c #8e9289", +".tN c #8e935f", +"#0P c #8e9670", +"#BL c #8e9d76", +"czS c #8ea38c", +"aKt c #8eab91", +"b42 c #8eacb4", +"adL c #8ead99", +"aF4 c #8eae96", +"#xR c #8eb195", +"aBL c #8eb199", +"aBG c #8eb19b", +"aBE c #8eb39d", +"#Ez c #8eb49c", +"#H8 c #8eb49d", +"#H5 c #8eb8a2", +"bMV c #8ebaaa", +"bEo c #8ebe86", +"a3k c #8ec490", +"b#L c #8ec495", +"bej c #8ec496", +"cpB c #8ec5d1", +"dZj c #8ecbba", +"cV5 c #8ed3e0", +"gHd c #8edbbf", +"bmA c #8edcf8", +"by5 c #8edcf9", +"e7n c #8edde3", +"bqN c #8eddf9", +"bdH c #8eddfa", +"b7K c #8edffc", +"b7C c #8edffd", +"ciX c #8ee0f8", +"ce5 c #8ee0fb", +"ci2 c #8ee0ff", +"c#3 c #8ee1fb", +"ciP c #8ee1fc", +"ceo c #8ee1fe", +"ci4 c #8ee1ff", +"b65 c #8ee2fc", +"b64 c #8ee2fd", +"cm9 c #8ee2fe", +"crb c #8ee2ff", +"crt c #8ee3fd", +"b1R c #8ee3ff", +"b2Z c #8ee4f9", +"czw c #8ee4ff", +".k0 c #8ee5ff", +".lE c #8ee9fe", +"hwB c #8eeadb", +"gOZ c #8eecd4", +"g4I c #8ef0de", +".rk c #8effec", +"i63 c #8f3c19", +"h1d c #8f3d2e", +"h4i c #8f3e2a", +"hya c #8f5037", +"bwI c #8f5224", +"hYg c #8f5345", +"htD c #8f5446", +"dH. c #8f5625", +"jte c #8f562d", +"jGB c #8f5722", +"fYO c #8f581f", +"ihS c #8f5822", +"kkU c #8f5832", +"dLb c #8f5926", +"#v0 c #8f5b2d", +"eMG c #8f5c29", +"i7y c #8f5c2a", +"#pJ c #8f5c2d", +"jtf c #8f5c33", +"i4s c #8f5d31", +"fgE c #8f5e2e", +".O5 c #8f5e34", +"aSD c #8f5f26", +".MS c #8f5f30", +".4o c #8f5f31", +"cTa c #8f5f35", +"dSO c #8f5f39", +".y8 c #8f6031", +"dut c #8f612d", +"jlO c #8f6131", +"#mc c #8f6132", +"cS4 c #8f6134", +"#jH c #8f6234", +"bgs c #8f632a", +"#sE c #8f6335", +"dp7 c #8f6431", +".OA c #8f6436", +"#h. c #8f6536", +".4B c #8f6636", +".LR c #8f6638", +"dau c #8f663f", +"aE9 c #8f672f", +".MK c #8f673a", +"#v8 c #8f673c", +"gl6 c #8f673f", +"jXV c #8f6837", +".0H c #8f6838", +".2s c #8f6839", +"iX5 c #8f683f", +".v2 c #8f693b", +"dKo c #8f6941", +".2p c #8f6a39", +"kHU c #8f6a3c", +"#CK c #8f6a3f", +"jBV c #8f6a40", +"#7m c #8f6a42", +"jBf c #8f6b3a", +"jqr c #8f6b41", +"c8D c #8f6c33", +"kuE c #8f6c3b", +"kj. c #8f6c3c", +"jqN c #8f6c41", +".H# c #8f6c42", +"aJC c #8f6d37", +".0r c #8f6d3c", +"adm c #8f6d46", +"cOy c #8f6e41", +"kJa c #8f6e42", +"jy7 c #8f6e43", +"aWy c #8f6f40", +"jE7 c #8f6f45", +"ko5 c #8f6f46", +"#k9 c #8f7041", +".9z c #8f713c", +"iU7 c #8f715a", +"aJD c #8f723f", +"axi c #8f7243", +"aJ0 c #8f7244", +"a41 c #8f7245", +"jb1 c #8f7248", +"a5i c #8f7249", +"jLE c #8f7340", +"cxs c #8f7344", +"g2r c #8f7348", +"#Wk c #8f734b", +"aJ1 c #8f7447", +"ibf c #8f744a", +"jxP c #8f7543", +"aBd c #8f7544", +"aWW c #8f7549", +"bV8 c #8f763a", +"a9m c #8f763f", +"bc2 c #8f773a", +"cBF c #8f7746", +"#V9 c #8f7750", +"bc3 c #8f783b", +"bhu c #8f783c", +"bk0 c #8f784b", +".Xg c #8f784c", +"gMB c #8f784e", +"bhO c #8f793c", +"aOm c #8f794a", +"aLn c #8f7a3b", +"blX c #8f7a3d", +"bma c #8f7a40", +"bm# c #8f7a41", +"aG3 c #8f7b3d", +"bhv c #8f7b3e", +"b1n c #8f7b3f", +"#J5 c #8f7b51", +"aCC c #8f7c3e", +"b.T c #8f7c3f", +"bWn c #8f7c42", +"aCA c #8f7d40", +"an. c #8f7e3f", +"blY c #8f7e40", +"bms c #8f7e44", +"cbZ c #8f7e4a", +"aje c #8f7f40", +"ae1 c #8f7f41", +"a2m c #8f7f44", +"a6y c #8f8044", +"bzN c #8f8059", +"ayJ c #8f8144", +"auB c #8f8241", +"amW c #8f8242", +"aeL c #8f8244", +"aX9 c #8f8246", +"ana c #8f8247", +".ZM c #8f824f", +"aTV c #8f8349", +"aTW c #8f834a", +"aYd c #8f8359", +"auy c #8f8445", +"a2l c #8f844b", +"ae4 c #8f854b", +"a6v c #8f854c", +"aY. c #8f864f", +"aiy c #8f8652", +"bZ1 c #8f867f", +"aiF c #8f8752", +"a9T c #8f8759", +"aaH c #8f884c", +"aew c #8f8851", +"aap c #8f8856", +"aaF c #8f8950", +"aeu c #8f8951", +"#8J c #8f8952", +"#8F c #8f8953", +"aiB c #8f8956", +"aaC c #8f8a51", +"aaD c #8f8a52", +"#8A c #8f8a54", +"#8D c #8f8a55", +"#8x c #8f8a56", +"#8B c #8f8b55", +"#I7 c #8f8b57", +"#8u c #8f8b5a", +"dfU c #8f8b85", +"#4L c #8f8d59", +"#4K c #8f8d5a", +"#4J c #8f8e5b", +".fc c #8f8f8f", +".Fl c #8f906c", +"cxK c #8f908c", +"#MG c #8f9164", +"#P2 c #8f9265", +".DB c #8f9266", +"#Xd c #8f9268", +"a2s c #8f9366", +"#TD c #8f9368", +".8. c #8f936e", +"#ME c #8f9467", +"#Xc c #8f946b", +".AH c #8f9568", +".Gi c #8f966a", +"dbk c #8f968e", +"#Mw c #8f9b77", +"a2q c #8fa078", +"#4b c #8fa388", +"adP c #8fa488", +".7P c #8fa78a", +"apI c #8fa993", +"#7U c #8faa91", +"bJV c #8faa99", +"aKs c #8fac91", +"aBC c #8fac97", +"aKw c #8fad90", +"aKo c #8faf94", +"aF2 c #8fb096", +"aF1 c #8fb097", +"a#Q c #8fb09e", +"#xO c #8fb195", +"#xQ c #8fb297", +"#Ev c #8fb49a", +"aUQ c #8fb589", +"axH c #8fb5a1", +"cew c #8fb9b4", +"cQN c #8fbbbe", +"cKy c #8fbbc4", +"aUU c #8fbc80", +".lS c #8fbce7", +"biM c #8fc596", +"dZ# c #8fcabe", +"eEM c #8fcbcd", +"eOr c #8fcdd4", +"eN9 c #8fd6e0", +"eYi c #8fdbe5", +"bqO c #8fddf9", +"buT c #8fddfa", +"bmB c #8fdef8", +"bif c #8fdef9", +"bRL c #8fdefa", +"bRK c #8fdefb", +"cax c #8fdff5", +"b7D c #8fdffd", +"ce7 c #8fe0f7", +"cam c #8fe0fd", +"ci1 c #8fe1fe", +"b6Q c #8fe1ff", +"b63 c #8fe2fc", +"b6Z c #8fe2fd", +"ciL c #8fe2fe", +"cnj c #8fe3fb", +"ciY c #8fe3fc", +"cni c #8fe3fd", +"c#O c #8fe3fe", +"crc c #8fe3ff", +"cev c #8fe4ff", +"e3b c #8fe5ed", +"czx c #8fe5ff", +"goF c #8fe7c8", +"hsU c #8fe9d8", +"gk3 c #8feacb", +"ipx c #8fecd9", +".mh c #8fecfc", +"fqn c #8ff3eb", +"fZV c #8ff5e2", +".qu c #8ffeed", +"igh c #904723", +"dG# c #904726", +"h97 c #904728", +"hLE c #904d3d", +"hLF c #90503e", +"hH6 c #905139", +"hP# c #905140", +".cr c #905185", +"#Yi c #90572b", +"fxc c #905823", +"gP9 c #90584c", +"gP1 c #90584d", +"jW. c #905922", +"bpp c #905923", +"dLe c #905926", +"i4Z c #905927", +"hLI c #90593f", +"kdh c #905a37", +"dG7 c #905c28", +"bxA c #905c2e", +"h1o c #905c44", +"ja# c #905d2f", +".Pb c #905d32", +"ils c #905d49", +"fAR c #905e2c", +".MR c #905e30", +"jVE c #90602e", +"dyM c #90612b", +"eMH c #906131", +"#d8 c #906133", +".Tq c #906230", +".Ou c #906232", +".F. c #906233", +".Vq c #906334", +"#5t c #906435", +"aOj c #90652c", +"#mv c #906535", +"dOy c #90653d", +"dXk c #90663b", +".4m c #906737", +"jsD c #906837", +"#jc c #906838", +"juY c #906936", +"#5F c #90693c", +"j8m c #906b38", +".Ol c #906b39", +"kyq c #906b41", +".9B c #906c38", +".L3 c #906c39", +".0y c #906c3b", +"jtE c #906c41", +"#gp c #906c43", +"jcU c #906d3c", +"kuF c #906d3e", +"jnO c #906d41", +"#vJ c #906e3d", +"jkF c #906e42", +"kPp c #906e43", +".6B c #906f3b", +".UP c #906f3f", +".BP c #906f41", +"kfy c #906f46", +"a5f c #90703e", +".UQ c #90703f", +"#zp c #907044", +"jN. c #907046", +"a0R c #907142", +".6w c #907143", +"cFT c #907146", +"ivF c #907246", +"jHS c #907249", +".0P c #907340", +"cBD c #907345", +"ii2 c #907449", +"aWT c #907546", +".ey c #9075ac", +"bhr c #907637", +"blV c #907639", +"cBG c #907645", +"bte c #90764c", +"j#q c #90764d", +"aSy c #907748", +"h4y c #90774d", +"aS7 c #90783a", +"atn c #907844", +"aOf c #90784a", +".7u c #90784b", +"gQu c #90784d", +"#J0 c #90784f", +"blW c #90793b", +"#MZ c #907a3b", +"b.v c #907a3d", +"bme c #907a3e", +"bhE c #907a3f", +"byH c #907a40", +"a5A c #907a48", +"aSw c #907a4a", +"#9A c #907a50", +"bmb c #907b42", +"#Ud c #907c3c", +"bc5 c #907c3f", +"b6g c #907c41", +"bqp c #907c43", +"aaZ c #907d3c", +"aa0 c #907d3d", +"bMO c #907d41", +"ct. c #907d46", +"aq1 c #907e3e", +"blZ c #907e3f", +"aLm c #907e41", +"#du c #907e4c", +"ae0 c #907f3f", +"bhw c #907f40", +"aCz c #907f42", +"aBQ c #907f46", +"ajd c #908042", +"ax3 c #908048", +"aG2 c #908146", +"#Jh c #90814b", +"bcg c #908150", +"#NE c #908158", +"ae2 c #908246", +"a6x c #908247", +".ZL c #90824f", +"auA c #908343", +"auz c #908344", +"a2n c #908347", +"aCy c #90854a", +"aX6 c #90854b", +"aTT c #90854c", +"aaJ c #908649", +"ae3 c #90864b", +"bdk c #90864e", +"aix c #908652", +"aaI c #90874a", +"bmh c #908752", +"ael c #908753", +"amL c #90884d", +"b.O c #908850", +"a2j c #908852", +".S. c #908858", +"dlb c #908883", +"aGv c #90894f", +"aev c #908950", +"aep c #908951", +"amE c #908953", +"amD c #908954", +"aiA c #908957", +"bIX c #908961", +"c24 c #908984", +"aGw c #908a50", +"aay c #908a52", +"#4S c #908a53", +"#8y c #908a54", +"#4R c #908b54", +"#4P c #908b55", +"#4O c #908b56", +"#Qj c #908b57", +"#ZW c #908b64", +"#4Q c #908c55", +"#4N c #908c56", +"#1c c #908c57", +"#4M c #908c58", +"#Qi c #908c59", +"#8t c #908c5b", +"#1b c #908d58", +"#I6 c #908d5a", +"#Qh c #908e5e", +"#4I c #908f5d", +"ck0 c #908f8d", +".e9 c #909090", +"#MH c #909160", +"aYc c #909161", +"#Qg c #909163", +"#Qf c #909164", +"#Qe c #909266", +"bU4 c #909390", +".t6 c #909467", +"byY c #909468", +"#Qd c #90956c", +".IY c #90966a", +"#0Q c #909770", +"#4m c #909975", +"dyy c #909992", +"cKx c #909998", +"#Mu c #909a72", +"#MB c #909b73", +"#Mv c #909c77", +"#MA c #909e79", +".tU c #90a175", +"#4e c #90a284", +"#4d c #90a285", +"#4c c #90a387", +"#7W c #90a68b", +"b4R c #90a6a7", +"aOI c #90ac90", +"alY c #90ac95", +"a#S c #90af99", +"cxP c #90b0b5", +"aG. c #90b195", +"aF3 c #90b197", +"a#R c #90b19c", +"#xM c #90b294", +"#xL c #90b295", +"#xN c #90b296", +"#xP c #90b297", +"aQz c #90b381", +"b69 c #90b4aa", +"aBD c #90b59f", +"#Z6 c #90b8a3", +"#H6 c #90b9a3", +".lf c #90b9e8", +"aQw c #90ba8f", +"aQG c #90bd91", +"cVr c #90bdc1", +"a7H c #90c398", +"bnE c #90c3a7", +".lM c #90c7f0", +".mp c #90c8ed", +"aDH c #90cab2", +".lI c #90d2f7", +"bmC c #90def9", +"b7J c #90defc", +"big c #90dffa", +"d30 c #90e0e9", +"ce9 c #90e0f5", +"cal c #90e0fc", +"caa c #90e0fe", +"cnh c #90e1fb", +"cen c #90e1ff", +"b66 c #90e2fc", +"b61 c #90e2fd", +"c#I c #90e2ff", +"dZC c #90e3ec", +"ciZ c #90e3fc", +"b60 c #90e3fd", +"cn. c #90e3fe", +"cnk c #90e3ff", +"gSQ c #90e4c9", +"crs c #90e4fd", +"cru c #90e4ff", +".mi c #90e6fa", +"ikB c #90ecd9", +"ixf c #90ecda", +"gho c #90edcf", +"fQI c #90efe0", +".p3 c #90efea", +"eEb c #90f0fc", +"fmp c #90f1e8", +".ap c #913c8d", +"i4r c #913f1a", +"hng c #914230", +"bO5 c #914820", +"h7h c #914835", +"hH1 c #91493c", +"hjp c #914c3d", +"gH7 c #915346", +"hLJ c #915437", +"hH7 c #91553d", +"j3n c #915623", +"i0Q c #915728", +"fVG c #915c24", +"hSn c #915e47", +"dyQ c #915f2a", +"#10 c #915f32", +"#vD c #916030", +"abh c #916133", +"jYu c #916231", +"#gT c #916232", +"jwe c #916237", +".HR c #916434", +".83 c #916636", +".6G c #916637", +"iyn c #916751", +"d1Y c #916835", +"#et c #916837", +"jQH c #916936", +"#pm c #916939", +"iTO c #916a37", +"do5 c #916a43", +"#g8 c #916b37", +"j3q c #916b38", +"#b0 c #916b39", +"av. c #916b3c", +".U7 c #916b3d", +"dyV c #916c34", +"##Y c #916d39", +".4g c #916d3c", +"#sc c #916d3d", +"abp c #916d41", +"jxL c #916e3b", +".SU c #916e3c", +".QZ c #916e3d", +"adn c #916e41", +"kzL c #916f3d", +"iPk c #916f43", +"jHw c #916f44", +"ahz c #916f45", +"##h c #917040", +"iD8 c #917043", +"jEM c #917044", +"jHR c #917045", +"j6E c #917046", +"jOI c #91713e", +".YG c #917140", +"bbV c #917144", +"#90 c #917148", +".YS c #91723e", +"aWA c #91723f", +"bga c #917243", +"cOv c #917245", +"ads c #917246", +"cKd c #917346", +"jI1 c #91743f", +"a9l c #917442", +"iqG c #917448", +".0D c #917544", +".Rr c #917548", +"aBb c #917644", +"a45 c #91773e", +"bMx c #91793c", +"byF c #91793d", +"bd# c #91793e", +"jAE c #917947", +"a2b c #917a3c", +"bl0 c #917a3e", +"bb5 c #917a4a", +"bMy c #917b3e", +"bl6 c #917b3f", +"cxt c #917b46", +"#QA c #917c3c", +"b.M c #917c3d", +"bc4 c #917c3e", +"bV9 c #917c3f", +"aOS c #917c41", +"bm. c #917c43", +"bk5 c #917c4c", +"#1s c #917d3c", +"#82 c #917d3d", +"#XK c #917d3e", +"bqz c #917d3f", +"bHO c #917d42", +"buv c #917d43", +"#1r c #917e3e", +"bhU c #917e40", +"cs9 c #917e44", +"#89 c #917f40", +"bmm c #917f41", +"bmf c #917f45", +"aGc c #917f46", +"aBP c #917f47", +"#1q c #918041", +"bhV c #918042", +"ax4 c #918047", +".u3 c #918056", +"auT c #918141", +"am9 c #918142", +"#5b c #918144", +"bqy c #918145", +"bmp c #918147", +"auC c #918241", +"bdn c #918247", +"ays c #918342", +"b.S c #918349", +"aql c #91834d", +"ayr c #918445", +"aaL c #918446", +"ajf c #918447", +".T0 c #918450", +"aaK c #918547", +"a2g c #91854b", +"ayI c #91864b", +"#1B c #918652", +"byR c #91874f", +"bmg c #918750", +"bNK c #91875e", +"aqB c #91884c", +"aav c #918951", +"buH c #918954", +"amC c #918956", +"aKU c #918a50", +"aet c #918a51", +"#I8 c #918a53", +"#8C c #918a54", +"#XW c #918a55", +"c.. c #918a84", +"dpN c #918a85", +"aKV c #918b50", +"a2o c #918b53", +"#8K c #918b54", +"aiz c #918b56", +"byQ c #918b58", +"#1d c #918c54", +"#1e c #918c55", +"#1f c #918c56", +"a2k c #918c57", +"#Xy c #918d59", +"#Qk c #918d5a", +"dgt c #918d8a", +"aYb c #918e58", +"a6w c #918e5a", +"#TU c #918e5c", +"#MI c #918f5c", +"#TT c #918f5e", +"#Xf c #918f63", +"#1. c #91905d", +"#08 c #91905e", +"#07 c #91905f", +"#TS c #919060", +"#Xe c #919166", +".po c #919191", +"cxL c #919390", +"a2p c #919768", +".xu c #91986c", +"#MD c #91996f", +"#I0 c #919970", +"#MC c #919a72", +"#4n c #919a73", +"#4l c #919a77", +"aXf c #919b75", +"#4k c #919b79", +"#Qc c #919c74", +"#Fk c #919e75", +"#4j c #919e7c", +"#4i c #919f7e", +"#Mz c #91a07d", +"#hJ c #91a084", +"#4h c #91a17f", +"b1u c #91a588", +"#7X c #91a68b", +"cvJ c #91a690", +"adO c #91a88e", +"ahT c #91ab93", +"#7V c #91ac92", +"atP c #91ae94", +"adM c #91ae98", +"aKx c #91af91", +"aKp c #91af93", +"a#T c #91af98", +"cCx c #91b1b7", +"aF0 c #91b59c", +"#Ey c #91b79e", +"#H7 c #91b8a1", +"bja c #91b971", +"c#W c #91b9b3", +"cQP c #91bcbf", +"cGM c #91bccb", +"cVq c #91bdc0", +"bzZ c #91c28c", +"a3. c #91c2a1", +"aUE c #91c38f", +"a24 c #91c495", +"biL c #91c592", +"a3j c #91c593", +"azz c #91cebe", +"eOs c #91ced4", +"dZp c #91d7d6", +"e2Q c #91dce6", +"e2P c #91dee8", +"bqP c #91def9", +"b7I c #91defb", +"bmD c #91dff9", +"b7H c #91dffc", +"e28 c #91e0e8", +"ce8 c #91e0f6", +"b7E c #91e0fd", +"cay c #91e1f5", +"cnp c #91e1ff", +"crr c #91e2fc", +"ces c #91e2fd", +"b1S c #91e2ff", +"b7U c #91e3f7", +"c#T c #91e3fc", +"b62 c #91e3fd", +"crd c #91e3ff", +"ci0 c #91e4fc", +"cMT c #91e5ff", +"c#V c #91e6ff", +"d8W c #91e9f3", +"ic3 c #91ead8", +"ho8 c #91ead9", +"im4 c #91ecd9", +"gWI c #91efda", +"eb5 c #91eff8", +"gdL c #91f0d3", +"g8E c #91f0dc", +"fFP c #91f2e6", +"fNe c #91f4e3", +".p2 c #91faed", +"iXv c #924428", +"jBT c #924822", +"g2. c #92483a", +"hfQ c #924b3a", +"hna c #924d3f", +"jNR c #924e1c", +"hjt c #924f3c", +"jT# c #925725", +"gL5 c #92574b", +"#NC c #925829", +"#Nu c #92592a", +"##0 c #925a2b", +"kO2 c #925a2d", +"f12 c #925b1f", +"#vZ c #925c2d", +"gT8 c #925c4f", +"dyS c #925d2c", +"jQ# c #925d2d", +"dXn c #925d33", +"epa c #925f28", +"iXU c #925f32", +"d12 c #925f37", +"dGb c #925f39", +"bGj c #926234", +"imW c #926330", +".Vi c #926332", +"eft c #926431", +".ML c #926434", +"#s1 c #926436", +".9J c #926532", +"cgB c #926533", +".Ce c #926534", +"#jq c #926535", +"jfT c #926635", +"cKm c #926640", +"ikq c #926735", +"#jr c #926736", +".Vc c #92683c", +"jPr c #92683e", +"a5n c #926931", +"#9x c #926937", +".Pj c #926939", +"jy3 c #926a3f", +"dfw c #926a40", +"jYy c #926b38", +"jth c #926b41", +"#jL c #926c38", +".Oj c #926c3a", +".6A c #926d3a", +"#su c #926d3c", +"#p. c #926d3d", +"#pq c #926e3c", +"c8F c #926f37", +"gUq c #926f3e", +"jMT c #926f43", +".Kp c #926f48", +"ksc c #927040", +"#Gi c #927042", +"jqO c #927043", +".UR c #92713e", +".Bp c #927142", +"jBX c #927144", +"jCe c #927145", +".EJ c #927241", +".vq c #927243", +"#zk c #927244", +"jnP c #927245", +"jNc c #927247", +"cgs c #92733f", +"#pp c #927340", +"jlP c #927341", +".yP c #927349", +".4S c #927440", +"g6o c #92744b", +"axh c #927544", +"a9i c #927545", +"gYk c #927546", +"aNW c #92763f", +".0T c #927640", +".WM c #927643", +"bpa c #927648", +"jKB c #92764b", +"cFX c #927744", +"idZ c #92774c", +"#Ny c #92774d", +".ZJ c #927844", +".Za c #92784a", +"a9C c #92784c", +"jOc c #927944", +"gYj c #92794e", +"hSt c #927a4e", +"#1x c #927b3a", +"bRl c #927b3d", +"bqs c #927b41", +".Rz c #927b4d", +"hVo c #927b4f", +"gUp c #927b52", +"#47 c #927c3b", +"bMw c #927c3c", +"a6l c #927c3e", +"a6m c #927c3f", +"bl8 c #927c43", +"#Rc c #927c50", +"buk c #927d3a", +"#XR c #927d3c", +"#XL c #927d3d", +"b.F c #927d3f", +"bhN c #927d40", +"bql c #927d41", +"bmd c #927d42", +"byI c #927d43", +"byJ c #927d44", +"#43 c #927e3e", +"bmn c #927e3f", +"buI c #927e40", +"c#a c #927e41", +"bmc c #927e44", +"aGe c #927e46", +"aq0 c #927f3d", +"#Uc c #927f3f", +"#XS c #927f41", +"bRz c #927f42", +"buw c #927f45", +"aGd c #927f47", +"#42 c #928040", +"bqf c #928041", +"bmo c #928042", +"bqA c #928044", +"bqg c #928141", +"#XJ c #928142", +"bqB c #928147", +"aBR c #928148", +"ax5 c #928149", +"aTJ c #928240", +"#41 c #928243", +"aua c #928249", +"ax6 c #92824a", +"au# c #92824b", +"aqL c #928342", +"ajc c #928344", +"#1p c #928345", +"ai0 c #928444", +"ajb c #928446", +"aqk c #92844d", +"aCk c #928544", +"aaM c #928547", +"aGJ c #928645", +"aux c #928647", +"auv c #928649", +"#XT c #92864a", +"au. c #92864f", +"auw c #928748", +"amw c #928750", +"amx c #928751", +"aB9 c #92884d", +"bqv c #928852", +"aiN c #92894f", +"aGZ c #928950", +"amG c #928951", +"amF c #928952", +"aiw c #928953", +"amj c #928955", +"amB c #928957", +"bEb c #928961", +"aeq c #928a50", +"aaw c #928a51", +"aqt c #928a53", +"aek c #928a56", +"amA c #928a57", +"#4w c #928a58", +"#NT c #928a6b", +"#8L c #928b54", +"aqs c #928b55", +"c7O c #928b86", +"aKT c #928c51", +"#8M c #928c53", +"#4T c #928c54", +"#XV c #928c55", +"#1g c #928c56", +"#0W c #928c5d", +"#0V c #928c5e", +"dpv c #928c84", +"#MJ c #928d58", +"#TV c #928d59", +"#1a c #928e59", +"#Xz c #928e5a", +"#Xx c #928e5b", +"#1# c #928f5a", +"b.P c #928f5b", +"#Xg c #928f62", +"bmi c #92905b", +"#Xw c #92905d", +"#I5 c #92905f", +"#09 c #92915e", +"#4H c #92915f", +"#06 c #929160", +"bNM c #92916d", +"b.R c #92925f", +"#Xs c #929263", +"#TR c #929264", +".bX c #929292", +"a6z c #929463", +"#I3 c #929464", +"#BR c #929466", +"#TQ c #929568", +"#TO c #929569", +"#TN c #929669", +"#TP c #92966a", +"#0R c #92966e", +"#I2 c #92976b", +"#4o c #929972", +"#I1 c #929a72", +"a6D c #929b71", +".Nz c #929c75", +"bDn c #929f79", +"#Mx c #92a07d", +"#Qb c #92a17c", +"#.c c #92a184", +"#My c #92a27f", +"#P9 c #92a280", +"#Q. c #92a380", +"#4g c #92a382", +"#4f c #92a384", +"#Q# c #92a481", +"aOK c #92ac8e", +"aOH c #92ac90", +"alZ c #92ac93", +"aOJ c #92ad90", +"a#U c #92b198", +"aF9 c #92b299", +"bQz c #92b2b8", +"aU0 c #92bc8c", +"b#M c #92c793", +"eET c #92cbce", +"eJz c #92d4dd", +"e7c c #92dbe5", +"bqQ c #92dff9", +"b7G c #92dffc", +"b7F c #92e0fd", +"cf. c #92e1f4", +"ce4 c #92e1fc", +"bWH c #92e2fe", +"ciQ c #92e3fc", +"c#S c #92e3fd", +"cvQ c #92e3fe", +"b6P c #92e3ff", +"cer c #92e4fd", +"c#P c #92e4fe", +"cre c #92e4ff", +"e3. c #92e5ed", +"czy c #92e5ff", +"fd2 c #92ede5", +"fd1 c #92eee7", +"gar c #92f3d6", +"fqq c #92f3ea", +".rI c #92fcea", +".qX c #92feeb", +"esj c #933a24", +"i1z c #93401a", +"gA3 c #934222", +"hU4 c #934b35", +"hBB c #935241", +"jtd c #93572c", +"g#c c #935b20", +"kPm c #935b2a", +"#zm c #935c2d", +"hBE c #935c49", +"#pM c #935f2f", +"cS0 c #935f35", +"#NA c #936232", +".J1 c #936333", +"dXl c #936336", +"joY c #93642f", +".2m c #936532", +"#gG c #936535", +".2n c #936636", +"#pU c #936637", +".Kt c #936736", +"jiF c #936737", +".Rj c #93673a", +".4n c #936834", +"a0m c #936937", +"jcT c #936a38", +"#jM c #936a39", +"iS9 c #936b2d", +".4p c #936b3d", +"##c c #936b41", +"#pl c #936c3a", +"#o7 c #936c3c", +"#pe c #936d3a", +"hjA c #936e3d", +"dtA c #936e47", +"jBg c #936f3c", +"#mR c #936f40", +"#vI c #93703b", +"aly c #937043", +"#Ap c #93713a", +"#CM c #937142", +"a5c c #937143", +"jwz c #937144", +"#i3 c #937145", +"jIW c #93723c", +"jVH c #93723e", +"knO c #937240", +"jtF c #937245", +"#Nz c #937246", +"bj6 c #937248", +"jxK c #93733f", +"iJy c #937345", +"j9t c #937347", +".J5 c #937443", +"cFY c #937448", +".7# c #937540", +".4U c #937541", +"jKA c #937549", +"aNT c #937642", +"jb2 c #937649", +".2F c #937744", +"#k8 c #937746", +"aWU c #937748", +"a5l c #937749", +"#CN c #93784a", +"bfK c #93784b", +".YF c #937947", +"bgc c #937a48", +"aOd c #937a4b", +"bgw c #937a4d", +"hPi c #937a4f", +"cxv c #937b43", +"a1u c #937b48", +"bqa c #937c39", +"#1w c #937c3a", +"#48 c #937c3b", +"ckH c #937c46", +"#ND c #937c51", +"#XP c #937d3c", +"b5N c #937e3b", +"#XQ c #937e3d", +"bhx c #937e40", +"bhy c #937e41", +"aKF c #937e45", +"aKG c #937e46", +"c.I c #937f3d", +"#MY c #937f3e", +"#8Y c #937f3f", +"#3r c #937f40", +"byL c #937f42", +"bhF c #937f43", +"aKE c #937f46", +".9S c #937f51", +"b5O c #93803d", +"#88 c #938041", +"byT c #938042", +"byK c #938045", +"bl1 c #938046", +"aKD c #938047", +"bpv c #93804f", +"bMz c #938143", +"bMN c #938144", +"bux c #938145", +"b.w c #938242", +"aaY c #938243", +"#Ub c #938244", +"buJ c #938246", +"aBS c #938249", +"ayt c #938342", +"aub c #93834c", +".Ry c #938356", +"aqQ c #938442", +"amX c #938443", +"#8V c #938445", +"#8U c #938547", +"buK c #93854c", +"aqj c #93854e", +"aCl c #938644", +"aCj c #938646", +"ayq c #938647", +"#40 c #938648", +"aqm c #938650", +"#Rz c #938661", +"auu c #93884b", +"at8 c #938852", +"#8S c #93894b", +"amJ c #93894e", +"amK c #938a4e", +"aer c #938a50", +"#XU c #938a51", +"amk c #938a55", +"#4x c #938a58", +"aGx c #938b50", +"aax c #938b51", +"#I9 c #938b53", +"#1A c #938b54", +"aqr c #938b55", +"ami c #938b57", +"bgK c #938b5d", +"dgl c #938b86", +"aP. c #938c51", +"#8N c #938c52", +"bhT c #938c55", +"#8O c #938d51", +"#4U c #938d55", +"#1h c #938d56", +"#Ql c #938d58", +"#XA c #938d5a", +"#0U c #938d60", +".xm c #938e57", +"aTS c #938e58", +"#TW c #938e5a", +"#8s c #938e5e", +"czV c #938e66", +"bml c #93905b", +"aPA c #93905c", +"bDf c #93905e", +"#Xh c #939062", +"#0T c #939064", +"bqx c #93915d", +"#Xt c #939161", +"buF c #93925e", +"#Xv c #93925f", +"#Xu c #939262", +"b4I c #93928f", +"b.Y c #939362", +"#I4 c #939363", +"#Xr c #939365", +".d. c #939393", +"b.Q c #939463", +"bdl c #939664", +"#P3 c #939769", +"#TE c #93976d", +"#4p c #939a74", +"adQ c #93a488", +"#Qa c #93a581", +"a#X c #93a68a", +"aKm c #93a786", +"#7Y c #93a88e", +"a#W c #93a98e", +"aXi c #93ac8d", +"bIa c #93ae8e", +"aKr c #93b094", +"a#V c #93b096", +"aKy c #93b192", +"ck8 c #93b8be", +"#Ew c #93b99f", +"#Ex c #93baa0", +"a7S c #93bd95", +"cts c #93bfc8", +"aUJ c #93c097", +"aDY c #93c194", +"azD c #93c297", +"clt c #93c7d1", +".k8 c #93c8f3", +"cl. c #93c9d6", +"aDI c #93caad", +".k7 c #93caf4", +"cD8 c #93cdd7", +"aDF c #93ceb4", +".qD c #93cfd4", +".qC c #93d2d7", +"eJw c #93d3db", +".qA c #93d9dc", +"cab c #93e0fe", +"cel c #93e1fc", +"ce1 c #93e1fd", +"b67 c #93e3fc", +"c#Q c #93e3fe", +"cd4 c #93e3ff", +"b7V c #93e4f7", +"crh c #93e4fd", +"c#R c #93e4fe", +"b6O c #93e4ff", +".k1 c #93e5ff", +"fd3 c #93e6db", +".lF c #93e8fd", +"ifF c #93ead8", +"fJy c #93f4e3", +"fqo c #93f4e9", +"h1c c #944b2f", +"jUy c #94532a", +"kqY c #945424", +"fgD c #94581d", +"#Yh c #945a2b", +"gTY c #945a4d", +"dHc c #945c26", +"btu c #945e2c", +"f8i c #945f25", +"#1X c #945f2e", +"kd4 c #946029", +"fSw c #94612b", +"#Ym c #946130", +"hYl c #94614b", +"ipp c #94622c", +"bBS c #946232", +"jSD c #946333", +"idS c #946348", +"jvI c #946432", +"h7p c #94644c", +"eHY c #946533", +"#Q9 c #946535", +"kkT c #94653d", +"duw c #946730", +".QS c #946737", +"jnq c #94673d", +".GR c #946837", +"aAE c #94683e", +".Cn c #946938", +"#bR c #946a37", +".8M c #946a3a", +"#jv c #946b39", +"cOC c #946b3a", +"kO4 c #946c3d", +"c7u c #946c43", +"ibb c #946c4f", +".WB c #946d3c", +"#em c #946d3d", +".O1 c #946d3e", +"#Q8 c #946d41", +"aWZ c #946e37", +".0o c #946e3a", +"i9A c #946e3b", +"aSC c #946f3a", +"kKT c #946f3d", +".Sv c #946f3f", +"#.4 c #946f43", +"jvN c #94703d", +"bbR c #947044", +"jTa c #94713d", +".8K c #947140", +".HN c #947143", +"a9x c #947144", +".Kb c #947146", +".7f c #94723d", +"jiH c #94723f", +".8J c #947241", +".Uq c #947243", +"jzo c #947244", +"dlD c #94733c", +"kMk c #947344", +"axr c #947345", +"#Nx c #947347", +".2T c #947440", +"#gV c #947441", +".Sw c #947444", +"#gh c #947448", +"jPQ c #947449", +"#CI c #947545", +"#Q7 c #947549", +".7e c #947640", +".2R c #947641", +"#mp c #947643", +"bbG c #947647", +"jeW c #947648", +"jLB c #947741", +"jAA c #947742", +"jNd c #94774a", +"jF6 c #947843", +"ckG c #947944", +"aFy c #947948", +"bgb c #947949", +"ilz c #94794c", +"jI0 c #947a44", +"jQO c #947a45", +"bbI c #947a46", +".Tm c #947a4b", +"bmr c #947b38", +"jLD c #947b46", +"#D6 c #947b4a", +"jb3 c #947b4f", +"blU c #947c3c", +"bc0 c #947c3d", +"bkF c #947c4b", +"b0V c #947d3a", +"bRk c #947d3d", +"aS8 c #947d43", +"aSS c #947d49", +"b0W c #947e3a", +"#1v c #947e3c", +"#46 c #947e3d", +"b.u c #947e3f", +"bC4 c #947e40", +"bhD c #947e42", +"#a7 c #947e4c", +"aOe c #947e4f", +"hYr c #947e51", +"bRa c #947f3c", +"#XM c #947f3d", +"#Qz c #947f3e", +"b1a c #947f3f", +"b.G c #947f40", +"cdV c #947f41", +"aOT c #947f46", +"c.H c #94803c", +"bVY c #94803d", +"aqZ c #94803e", +"ch3 c #94803f", +"aPx c #948041", +"c.W c #948042", +"b6f c #948044", +"auS c #94813f", +"#MX c #948140", +"a6g c #948141", +"byD c #948142", +"c.X c #948143", +"c## c #948144", +"bHU c #948145", +"buu c #948146", +"aGf c #94814a", +"bV2 c #94823f", +"b5P c #948240", +"bqe c #948242", +"#Ua c #948244", +"bDm c #948245", +"ayx c #948341", +"auH c #948342", +"am8 c #948343", +"aLi c #948346", +"bH4 c #948347", +"a6t c #948448", +"aeM c #948545", +"b.x c #948546", +"#5a c #948548", +"ax7 c #94854e", +"aGL c #948643", +"aPj c #948645", +"#XI c #948649", +"b.y c #94864a", +"a6h c #94864d", +"auc c #94864f", +"aGK c #948745", +"#8T c #94874a", +"bMM c #94874e", +"#1o c #94884b", +"aGY c #94884d", +"bmq c #94884f", +"amv c #948852", +"byS c #948950", +"bZw c #948953", +"at9 c #948954", +"aqo c #948955", +"aqp c #948956", +"#Wl c #948964", +"cKw c #948983", +"#8R c #948a4d", +"aC. c #948a4e", +"aiM c #948a4f", +"aes c #948a50", +"aLj c #948a51", +"bH2 c #948a52", +"at7 c #948a55", +"amy c #948a56", +"#8Q c #948b4f", +"amH c #948b50", +"aCx c #948b51", +"#TY c #948b52", +"ayf c #948b53", +"aiv c #948b57", +"#4y c #948b5b", +"#8P c #948c50", +"aPa c #948c51", +"aO9 c #948c52", +"ayd c #948c54", +"#XB c #948c57", +"amz c #948c59", +"#4v c #948c5c", +"aP# c #948d52", +"#XD c #948d55", +"aG0 c #948d56", +"#TX c #948d57", +"#0X c #948d5d", +"buE c #948e58", +"#MK c #948e59", +"c7T c #948e89", +"#1i c #948f57", +"#Fs c #94915b", +"#4G c #949260", +"cMQ c #94936c", +"buG c #949461", +"#Fq c #949462", +"#05 c #949464", +"#0S c #94946b", +".iq c #949494", +"bdm c #949564", +"#Fp c #949665", +"#Xq c #949668", +"bhQ c #949766", +"#TM c #94976d", +"bhS c #949868", +"b.V c #949869", +".AI c #94996b", +"#BQ c #949a6c", +"a6A c #949c70", +"a2r c #949d6f", +"#P8 c #949f7b", +"#BM c #94a27a", +"bgL c #94a380", +"bRH c #94ab8a", +"adN c #94af97", +".rv c #94b57a", +"cVp c #94bfc2", +"dZk c #94ccb8", +"aDG c #94ceb5", +".qE c #94ced1", +".qB c #94d6d9", +".lH c #94ddf9", +"e2R c #94dfea", +".kk c #94e1fb", +"e2T c #94e2ec", +"cak c #94e2fd", +"ce2 c #94e2fe", +"b7X c #94e3f2", +"gsf c #94e4c6", +"cn# c #94e4fc", +"ceu c #94e4fd", +"cvt c #94e4ff", +"b7W c #94e5f6", +"czX c #94e5fe", +"crv c #94e5ff", +"cEc c #94e6fe", +"d8M c #94e7f1", +"hlB c #94ecd9", +"has c #94eedb", +"fqp c #94f3e8", +"jLi c #953b0d", +"hX9 c #954e33", +"hb2 c #955038", +"dxB c #95512e", +"g99 c #955440", +"hx4 c #955442", +"idN c #955646", +"hSk c #955746", +"i7x c #955c2a", +"gcE c #955d1f", +"#sS c #955d2c", +"hLK c #955f3e", +"#jX c #95602f", +"fSv c #956127", +"eRK c #956129", +"#CA c #95612f", +"#UG c #956131", +"cBK c #956133", +"iqz c #95624e", +"dC2 c #95632e", +".Rv c #956330", +"d7O c #95642b", +"ilu c #956451", +"#mw c #956835", +"cF3 c #956942", +".0n c #956a36", +".Ev c #956a38", +"cS3 c #956a39", +".2L c #956b39", +"cS2 c #956b3b", +".4A c #956c3a", +".Hj c #956c3b", +"iuo c #956d3a", +"#o4 c #956d3b", +".O2 c #956d3d", +"#UF c #956d40", +".Hz c #956e41", +"a5q c #956f35", +"jXU c #956f3a", +".SV c #956f3c", +"#ee c #956f3e", +"dfv c #956f44", +"iK2 c #95713a", +".Wz c #95713f", +"#pS c #957142", +"bbP c #957144", +"jIT c #95723d", +".Ml c #95723f", +"#gN c #957242", +"cKi c #957244", +"alu c #957245", +"jfZ c #95733c", +"#sz c #95733e", +".ST c #95733f", +"jqQ c #957345", +"afs c #957346", +"jQN c #95743f", +"a40 c #957543", +"jqP c #957546", +"#gn c #957547", +".4W c #95763f", +".0Q c #957641", +".2S c #957642", +".OG c #957643", +"kA7 c #957647", +".4T c #957742", +"jiG c #957743", +"aWx c #957745", +"cKh c #957747", +"jkG c #957748", +"iVY c #95783f", +"jF8 c #957842", +"aJF c #957942", +".yE c #95794a", +"jDo c #957a45", +".08 c #957a4a", +"bkJ c #957a4b", +"axj c #957b42", +"a1b c #957b4e", +"i.l c #957d51", +"bVX c #957e3a", +"bR# c #957e3b", +"#XO c #957e3c", +"#1u c #957e3d", +"blu c #957e42", +"#Gl c #957e51", +"bqb c #957f3c", +"#XN c #957f3d", +"#1t c #957f3e", +"buN c #957f3f", +"but c #957f41", +".7t c #957f51", +"buj c #95803d", +"aqY c #95803e", +"bqd c #95803f", +"b53 c #958041", +"bdh c #958042", +"aOU c #958047", +"aKH c #958048", +"auR c #95813d", +"ayH c #95813e", +"cds c #95813f", +"#Qy c #958140", +"aXV c #958141", +"b1b c #958142", +"bqi c #958143", +"aKI c #958149", +"bgz c #958152", +"cdr c #95823f", +"aCv c #958240", +"b5Q c #958241", +"#MW c #958242", +"bup c #958243", +"buB c #958244", +"bdd c #958245", +"bc6 c #958246", +"bl9 c #958247", +"bHT c #958248", +"aXc c #95824f", +"b03 c #958340", +"b02 c #958341", +"aqP c #958342", +"#87 c #958343", +"bDh c #958344", +"#1y c #958345", +"bC5 c #958346", +"bdc c #958347", +"bHP c #958348", +"btA c #958353", +"bMo c #958441", +"aPq c #958443", +"#8W c #958444", +"buy c #958448", +"buz c #958449", +"bDi c #958548", +"aCp c #958644", +"am5 c #958645", +"aaN c #958648", +"aK5 c #958745", +"aGI c #958746", +"aPy c #95874c", +"aPk c #958846", +"aja c #958849", +"aCw c #95884c", +"#Jg c #958852", +"aug c #958854", +"aiL c #95894e", +"aiK c #95894f", +"bqt c #958950", +"ayb c #958953", +"auh c #958955", +"aqA c #958a4d", +"aiG c #958a50", +"b.z c #958a52", +"aqq c #958a57", +"#4Z c #958b4e", +"amI c #958b4f", +"aup c #958b50", +"aqu c #958b52", +"auk c #958b55", +"aqn c #958b56", +"dgk c #958b81", +"#4Y c #958c4f", +"auo c #958c50", +"aPb c #958c51", +"#TZ c #958c52", +"ayc c #958c56", +"aui c #958c57", +"aml c #958c58", +"aqf c #958c59", +"#4X c #958d51", +"aGt c #958d52", +"aGs c #958d53", +"aye c #958d54", +"#J. c #958d56", +"aej c #958d59", +"#4z c #958d5d", +"#XE c #958e54", +"#XC c #958e56", +"aG1 c #958e57", +"#Ft c #958e58", +"aq. c #958e5b", +"#0Y c #958e5f", +"daU c #958e88", +"#4W c #958f54", +"#1j c #958f58", +"byP c #958f59", +"#ML c #958f5a", +"aao c #958f5d", +"aeb c #958f60", +"aaf c #958f61", +"ck5 c #958f8a", +"#4V c #959055", +"#8r c #95905f", +"dyz c #95908b", +".NW c #95915f", +"aae c #959163", +"#4u c #959164", +"aLk c #95925d", +"bhY c #95925f", +"aLl c #95935f", +"#Fr c #959461", +"aKl c #959463", +"#TI c #959567", +".dT c #959595", +"bdo c #959665", +".AX c #95966c", +"ctn c #959692", +"#Xp c #95976b", +"bqw c #959868", +"bmj c #959968", +"a5B c #959970", +"#4q c #959972", +"#BP c #959b6c", +"#P4 c #959b6f", +"bmk c #959c6c", +"bhR c #959c6e", +"#P5 c #959c71", +"#Fo c #959d70", +"#Wm c #959f7e", +"b.W c #95a074", +"#Fl c #95a075", +"a9U c #95a380", +".7N c #95a789", +"#7Z c #95a88d", +"aS1 c #95ad8c", +"a1z c #95ad8f", +"aS0 c #95ae8f", +"a1A c #95ae90", +"aOG c #95af91", +"aKq c #95b195", +"aKz c #95b292", +"cVu c #95bec1", +"bz0 c #95c283", +"cV4 c #95c9c9", +".mq c #95cbeb", +".k6 c #95cff7", +"e7k c #95dee6", +"cac c #95e1fd", +"ceO c #95e1ff", +"e20 c #95e2ea", +"cjq c #95e2f7", +"crl c #95e2f8", +"cjp c #95e2f9", +"ce0 c #95e2fd", +"ce3 c #95e2fe", +".lG c #95e3fc", +"c#U c #95e4fd", +"crg c #95e4fe", +"cri c #95e5fd", +"crf c #95e5ff", +"cvu c #95e6ff", +"hhY c #95ecd8", +"heg c #95edd8", +".qv c #95fbea", +"hS. c #964836", +"ktb c #965626", +"gL4 c #965a4d", +"d11 c #966136", +"jnp c #966139", +"dXm c #966236", +"#zd c #966330", +"#cj c #966331", +".Vg c #966431", +"inZ c #96644f", +"#Yp c #966534", +"jN9 c #966631", +"#sW c #966632", +"#g4 c #966636", +"d14 c #96663d", +"iiX c #96664e", +"fxd c #966733", +"jr2 c #966833", +".Xb c #966834", +"#pT c #966839", +"jaU c #966931", +".vU c #966936", +".HQ c #966937", +".E9 c #966a38", +"#UM c #966b3a", +".4N c #966c39", +".E8 c #966c3a", +".QB c #966c3b", +".Oi c #966d3a", +".6S c #966d3b", +"kRf c #966e39", +".Ok c #966e3c", +"c7v c #966e45", +".64 c #966f3b", +"i2g c #966f3c", +"#sd c #966f3d", +"do7 c #966f45", +"a1m c #967035", +".9d c #96703c", +"dks c #967045", +"kN8 c #96713b", +"#o5 c #96713e", +"jTd c #96723d", +".OF c #96723e", +".0q c #96723f", +".Yt c #967240", +"iFu c #96733c", +"cKj c #967344", +"adj c #967348", +"aSl c #96742b", +"jM. c #96753f", +"jaa c #967542", +"iSl c #967544", +"a0T c #96763b", +"huy c #967645", +"jR4 c #967648", +"bfJ c #967649", +"jLz c #967742", +"ahr c #967748", +"jF9 c #967842", +"a1e c #967846", +"kyp c #967849", +"jAz c #967943", +"jAD c #967a45", +"bbH c #967a49", +"jHT c #967a4d", +".Zc c #967a50", +"bt7 c #967b3e", +"jDm c #967b45", +"aWY c #967b4a", +"h.k c #967b50", +"bpT c #967c3f", +"jDl c #967c46", +"bNO c #967c4e", +"bcY c #967d3a", +"bpS c #967d41", +".5d c #967d4c", +"h7v c #967d50", +"blt c #967e43", +"jAF c #967e49", +"cKf c #967e4c", +"a9E c #967e50", +"aOo c #967e51", +"blT c #967f3b", +"cDf c #967f3c", +"bqE c #967f3d", +"b.t c #967f3f", +"aOq c #967f4a", +"bVW c #96803b", +"bq# c #96803c", +"bcZ c #96803d", +"#44 c #96803f", +"a2a c #968042", +"bui c #96813d", +"aLg c #96813f", +"bqc c #968140", +"a6k c #968142", +"bd. c #968143", +"bhC c #968144", +"byx c #96823f", +"#49 c #968241", +"b.E c #968243", +"bdb c #968245", +"aOV c #968249", +"aFB c #96824d", +"c.L c #96833e", +"aGU c #968340", +"aPp c #968341", +"#8Z c #968342", +"#8X c #968343", +"bhM c #968345", +"bde c #968346", +"aGg c #96834c", +"aGh c #96834d", +"c.M c #968440", +"bMp c #968441", +"aeQ c #968442", +"a6f c #968443", +"#Qx c #968445", +"bdf c #968447", +"bWm c #968448", +"bHS c #96844a", +"aGi c #96844d", +"ai8 c #968541", +"b5T c #968542", +"ayy c #968543", +"amY c #968544", +"#MV c #968546", +"bC6 c #968549", +"bHR c #96854a", +"btC c #968552", +"a1v c #968553", +"bGq c #968555", +"b0X c #968643", +"ai1 c #968645", +"bqh c #968647", +"#T3 c #968649", +"bhz c #96864d", +"aGN c #968745", +"aya c #968750", +".Jf c #968755", +"am4 c #968847", +"ac6 c #96884c", +"bc7 c #96884d", +"aBT c #968851", +"bzM c #96885d", +"aCi c #968948", +"ayp c #968949", +"aeZ c #96894c", +"aTR c #96894e", +"auf c #968955", +"blc c #968957", +"aur c #968a4d", +"aqz c #968a4e", +"#XH c #968a4f", +"aBZ c #968a53", +"#Gk c #968a63", +"aiH c #968b4f", +"aiI c #968b50", +"auj c #968b57", +"aqw c #968c50", +"#1n c #968c51", +"aB7 c #968c53", +"aB6 c #968c54", +"aB5 c #968c55", +"amu c #968c56", +"aGu c #968d52", +"#XF c #968d54", +"#8i c #968d5e", +"aGr c #968e54", +"ail c #968e5d", +"aik c #968e5f", +"#8j c #968e60", +"#1m c #968f55", +"b.A c #968f59", +"aiu c #968f5a", +"#8k c #968f60", +"aag c #968f61", +"#Qm c #969058", +"#1k c #969059", +"amh c #96905e", +"#8h c #969061", +"aij c #969062", +"dCP c #96908c", +"buD c #96915a", +"aPz c #96915c", +"#8q c #969160", +"#Xi c #969164", +"bH1 c #96925e", +"cYD c #96928b", +"bhZ c #96935d", +"#4F c #969362", +"#8g c #969365", +"#04 c #969567", +"bdq c #969663", +".pQ c #969696", +"#TH c #96976b", +"cne c #969772", +"#4r c #969871", +"bU3 c #969895", +"#TL c #969970", +"#4s c #969971", +"#79 c #969e7d", +"a6C c #969f72", +"#Fn c #969f73", +"#BN c #96a074", +"#BO c #96a075", +"#Fm c #96a277", +"a6B c #96a479", +"adR c #96a689", +".Ny c #96a783", +"#70 c #96a88c", +"aXh c #96ac8c", +"a9V c #96ac8d", +"a9W c #96ad8d", +"aXm c #96ae8d", +"aXj c #96ae8f", +"apW c #96ae92", +"aOL c #96b092", +"aOE c #96b191", +"aUR c #96b781", +"aI. c #96bb91", +"a7I c #96c792", +"bef c #96c991", +"eu5 c #96c9c3", +".mr c #96c9e9", +"a7n c #96ca90", +"eOt c #96d1d7", +"eJy c #96d6e0", +"eEm c #96d7e1", +"eN8 c #96d9e2", +"e23 c #96dfe6", +"cf# c #96e1f4", +"caz c #96e4f4", +"cvR c #96e4fd", +"ciw c #96e4ff", +"cna c #96e5fd", +"eu0 c #96eef8", +".rl c #96ffe8", +"iYL c #973f18", +"i0k c #974629", +"h.b c #97503d", +"j0E c #975315", +"i.. c #975543", +"gI. c #97564b", +"g6. c #97584a", +"iJq c #97593b", +"jYg c #975b21", +"hVd c #975b4a", +"hun c #975d4e", +"ajC c #975f2d", +"irT c #976127", +"fAQ c #976129", +"gj2 c #976329", +"f5j c #97642b", +".JT c #976634", +"dPh c #976730", +"d16 c #97673d", +"d15 c #97673e", +"jxM c #976832", +".UK c #976838", +"h7o c #976850", +"aW0 c #97692e", +"#mr c #976938", +"i.f c #976951", +"jxN c #976a34", +"jqn c #976a3e", +".MM c #976b37", +"#JZ c #976b3b", +".O7 c #976c38", +".QV c #976c3a", +".2o c #976d3a", +".Fi c #976e3b", +".X. c #976e3c", +".82 c #976e40", +"i0R c #976f42", +".Jy c #976f45", +".6T c #97713c", +".2y c #97713d", +".Re c #97713f", +"gis c #977144", +"#me c #97723d", +".0p c #977240", +".WO c #97733e", +"gB. c #977346", +"jYz c #97743e", +".Wy c #977440", +"jy5 c #977445", +"#yT c #97753f", +".SR c #977540", +"##q c #977544", +"#s0 c #977546", +"jDn c #977640", +"#jo c #977644", +"klB c #977743", +"iMn c #977747", +"jtG c #977748", +"kgI c #977844", +"ahs c #977849", +"bL5 c #977939", +"bL6 c #97793a", +"bHe c #97793b", +"jhE c #977948", +"iV. c #977949", +"#sZ c #97794a", +"bL7 c #977a3a", +"#ju c #977a45", +"#v7 c #977a4b", +"bL8 c #977b3a", +"jLA c #977b44", +"jIU c #977b45", +"jTe c #977b47", +"byh c #977c3d", +"byg c #977c3e", +"jIX c #977c44", +"jOa c #977c45", +"jab c #977c47", +"bt6 c #977d3f", +"jG. c #977d46", +"cKe c #977d4c", +"bpU c #977e41", +"jF7 c #977e48", +"jXY c #977e4a", +".yD c #977e4e", +"a5h c #977e50", +"bho c #977f3c", +"bt5 c #977f40", +"jIZ c #977f49", +"aFz c #977f4c", +"aJ8 c #977f4f", +"bb3 c #977f51", +"b5M c #97803b", +"b.s c #97803d", +"chP c #97803e", +"bpR c #978042", +"aS9 c #978047", +"jxQ c #97804a", +"cFV c #97804c", +"b0U c #97813b", +"bhq c #97813e", +"bls c #978145", +"bg0 c #978146", +"jDp c #97814b", +"aJ9 c #978151", +".5e c #978153", +"ayG c #97823f", +"aLh c #978240", +"#45 c #978241", +"a2c c #978242", +"bl5 c #978245", +"bg1 c #978247", +"aOW c #97824a", +"c.J c #97833f", +"bul c #978341", +"aTQ c #978342", +"cin c #978344", +"bl4 c #978345", +"cxu c #978348", +"aKJ c #97834b", +"a#v c #978362", +"b5S c #978440", +"ai3 c #978441", +"aaR c #978442", +"aK8 c #978443", +"#5. c #978445", +"b54 c #978447", +"buA c #978448", +"aGj c #97844d", +".XJ c #97844f", +"b01 c #978541", +"bMk c #978542", +"am0 c #978543", +"aaQ c #978544", +"aXW c #978545", +"bhL c #978548", +"bqm c #97854a", +"bCY c #978642", +"ai2 c #978643", +"ayw c #978644", +"auI c #978645", +"#T4 c #978647", +"bhK c #978648", +"bhI c #978649", +"bMC c #97864a", +"bHQ c #97864c", +"aGb c #978651", +"#ZZ c #97865e", +"bMm c #978742", +"bHJ c #978743", +"bCZ c #978744", +"byy c #978745", +"aGX c #978748", +"bhJ c #978749", +"#5# c #97874a", +"bC8 c #97874b", +"bHI c #978843", +"bum c #978845", +"aK4 c #978847", +"#Qw c #97884a", +"aPl c #978947", +"aCq c #978948", +"bhW c #97894d", +"#1z c #97894e", +"ayo c #978a49", +"aqU c #978a4a", +"auM c #978a4b", +"aus c #978a4c", +"aut c #978a4d", +"a2f c #978a50", +"ax8 c #978a54", +"auL c #978b4b", +"auq c #978b4e", +"#T2 c #978b4f", +"bRy c #978b51", +"aud c #978b56", +"aun c #978c50", +"aqv c #978c51", +"a19 c #978c53", +"aul c #978c54", +"aue c #978c57", +"aqi c #978c58", +"cQ9 c #978c64", +"aum c #978d50", +"aGA c #978d51", +"#XG c #978d53", +"a6i c #978d56", +"aB4 c #978d57", +"dtY c #978d87", +"#T0 c #978e53", +"#J# c #978e55", +"aB3 c #978e57", +"aB2 c #978e58", +"dub c #978e84", +"bhX c #978f57", +"bDg c #978f58", +"aim c #978f5e", +"#GO c #978f6d", +"aei c #97905e", +"aah c #979063", +"dt1 c #979087", +"byO c #97915a", +"aan c #979161", +".Qc c #979162", +"aec c #979164", +"dbf c #97918c", +"#1l c #97925a", +"bqu c #97925f", +"amf c #979266", +"#4E c #979364", +"aea c #979367", +".DT c #979467", +"aif c #97946a", +"cCA c #97948e", +"#8f c #97956a", +"#Fy c #979667", +"#03 c #97966a", +"#4t c #97966c", +"#TJ c #97976d", +"ad8 c #97976f", +"b4F c #979793", +".jE c #979797", +".Ga c #97986d", +"ad7 c #979870", +"#Xo c #979970", +"ad6 c #979972", +"#8a c #979c77", +"#8# c #979d79", +"#8. c #979e7b", +"bdp c #979f70", +"#78 c #979f7e", +"b.X c #97a072", +"#P6 c #97a27b", +"#76 c #97a284", +"#75 c #97a486", +"adS c #97a78a", +"#71 c #97a88b", +"ahV c #97a88d", +"ahU c #97aa92", +"#D9 c #97ab97", +"crm c #97ac95", +"al0 c #97ad92", +"bcj c #97ae8e", +"bQA c #97aeb0", +"aSW c #97af8e", +"aSV c #97af8f", +"aSX c #97af90", +"a1B c #97b091", +"aOF c #97b192", +"aOD c #97b495", +"aFZ c #97b8a0", +"a3q c #97bd7b", +"bjc c #97be96", +"eTz c #97cfd4", +"c0X c #97d1d7", +"e7D c #97d6cd", +"cjs c #97e1f4", +"cad c #97e1fe", +"cjr c #97e2f5", +"caj c #97e2fc", +"ceZ c #97e2fd", +"cjo c #97e3fa", +"cvP c #97e4fe", +"crj c #97e5fd", +"cvv c #97e6ff", +"eqo c #97eef9", +"egK c #97f4fa", +"cXa c #98401c", +"gQq c #984a26", +"g59 c #984e3d", +"dKd c #98512d", +"bj3 c #98531f", +"hBH c #98533a", +"h1h c #98533d", +"hjm c #985439", +"h1i c #985642", +"hK5 c #985a48", +"gH8 c #985b4f", +"jV9 c #985c23", +"j5K c #985c25", +"huv c #985d42", +"hC4 c #985e22", +"jNT c #985e2a", +"iun c #986023", +"#Nv c #98602d", +"#CG c #98612d", +"gnC c #986327", +"#pK c #98632f", +"#jY c #986330", +"ivx c #986350", +"#Q4 c #986431", +"f5i c #986527", +"ggj c #98662d", +"kO3 c #986638", +"d6T c #986737", +"dXo c #98673c", +"fPt c #986932", +"kkV c #986938", +".0m c #986b37", +"#pr c #986b39", +"#gE c #986e3b", +".UT c #98703d", +"#eg c #98703e", +"#w5 c #987135", +"iYF c #98713b", +".Mg c #98713d", +"aV7 c #98713f", +"jwg c #987143", +"dKq c #987147", +"jXT c #98723b", +"#eD c #98723c", +"izW c #98733c", +"#o6 c #98733f", +"#d7 c #987340", +".Rf c #987341", +".4l c #987347", +"bbS c #987447", +"iCI c #98753d", +".4q c #987542", +".Pg c #987543", +"jy4 c #987546", +"#yS c #987640", +"#ef c #987644", +"aO. c #987744", +"jwA c #987748", +"jMS c #987749", +"jfU c #987842", +"#ex c #987844", +".Wm c #987847", +"bgh c #987849", +"a1. c #987947", +"jPP c #98794c", +"bQW c #987a3a", +"bHd c #987a3b", +"jQJ c #987a43", +"kmI c #987a4d", +"bL9 c #987b3a", +"bHf c #987b3c", +"bM. c #987c3a", +"bQX c #987c3b", +"bVI c #987c3c", +"bCE c #987c3d", +".7d c #987c44", +"#ir c #987c4b", +"cFU c #987c4c", +"blp c #987d3c", +"jl2 c #987d44", +"jGb c #987d45", +"jAB c #987d46", +"i9B c #987d47", +"a5j c #987d4f", +"bgW c #987e3f", +"jAy c #987e47", +"bbJ c #987e48", +"byf c #987f3f", +"bMj c #98803d", +"aXs c #988045", +"jOb c #988049", +"ibg c #988052", +"hLO c #988053", +"bVV c #98813b", +"cdd c #98813e", +"jb4 c #988155", +"bR. c #98823c", +"bhp c #98823e", +"auQ c #98823f", +"aGW c #988240", +"bqD c #988241", +"blv c #988246", +"aT. c #988249", +"cFW c #98824b", +"a9S c #98824f", +"h1v c #988254", +"bHA c #98833f", +"aPw c #988341", +"a6e c #988343", +"buq c #988345", +"bqj c #988346", +"aJ3 c #988351", +".3# c #988353", +"c.K c #98843f", +"aqX c #988440", +"cdq c #988441", +"aaS c #988442", +"aTI c #988443", +"aX2 c #988444", +"bqC c #988445", +"cdU c #988446", +"aKK c #98844c", +"b5R c #988541", +"aLe c #988542", +"aaT c #988543", +"aTP c #988544", +"#U# c #988545", +"aGk c #98854e", +".8o c #988553", +"btB c #988555", +"bcW c #988643", +"auG c #988644", +"auD c #988645", +"cHO c #988646", +"b.L c #988647", +"b.I c #988648", +"c.Y c #988649", +"b6e c #98864b", +"#.K c #988652", +"bCW c #988743", +"ai9 c #988744", +"aeP c #988745", +"aaP c #988746", +"a15 c #988747", +"byC c #988748", +"bW. c #98874a", +"bMD c #98874b", +"j#r c #98875c", +"bMl c #988842", +"bCX c #988843", +"ai7 c #988844", +"byz c #988845", +"bun c #988846", +"aLd c #988848", +"bhH c #98884a", +"bC7 c #98884c", +"bl2 c #98884d", +"aBY c #988850", +"aGl c #988851", +"bSE c #988859", +"bHH c #988943", +"bHK c #988946", +"#MU c #98894b", +"bC9 c #98894c", +"buL c #98894d", +"aBX c #988952", +"aTD c #988a48", +"buo c #988a49", +"ayn c #988a4a", +"aeY c #988a4c", +"aiJ c #988b4f", +"aBU c #988b56", +"ayg c #988c4e", +"aqy c #988c4f", +"aqx c #988c50", +"ay# c #988c56", +"ay. c #988c57", +"b2a c #988c60", +"aGy c #988d50", +"aGz c #988d51", +"#T1 c #988e53", +"#Ja c #988f57", +"aB1 c #988f59", +"amt c #988f5a", +"a17 c #989058", +"amm c #98905c", +"ait c #98905d", +"#4A c #989162", +"#8l c #989163", +"aai c #989164", +"#MM c #989259", +"bMK c #98925b", +"aeh c #989260", +"#8p c #989263", +"aed c #989265", +"b7# c #989269", +"bH3 c #98935f", +"aam c #989363", +"#8m c #989365", +"dCE c #98938c", +"#Fu c #989460", +"#0Z c #989465", +"aii c #989468", +"#4D c #989567", +"#Xj c #989669", +"cOP c #989693", +"#Rx c #98987e", +".#m c #989898", +"#TG c #989a6f", +"#TK c #989a73", +"#TF c #989b70", +"cVR c #989c7a", +"bZS c #989c99", +"bld c #989f77", +"#77 c #98a181", +"#P7 c #98a37f", +"ahW c #98a98a", +"bci c #98ab8a", +"apX c #98ad8f", +"a1C c #98af8e", +"aSZ c #98b08f", +"#Z4 c #98b091", +"aOC c #98b292", +"aKn c #98ba9e", +"beI c #98bf88", +"c0h c #98c1c4", +"aZb c #98c275", +"aDR c #98c298", +".k9 c #98c9f2", +"aIg c #98ca90", +"a25 c #98cb90", +"czR c #98d9e9", +"caB c #98e1ef", +"ceP c #98e1ff", +"cfa c #98e2f3", +"d83 c #98e5ee", +"cvE c #98e5fe", +"cQ6 c #98e5ff", +"cvC c #98e6fe", +"cvw c #98e6ff", +"ih6 c #98ead7", +"elG c #98eaf4", +"cNR c #99421e", +"hLq c #994a37", +"bFs c #994d21", +"ds3 c #99572f", +"jV2 c #995923", +"h1j c #995c4b", +"gL3 c #995e4f", +"ikp c #996024", +"h8Z c #996126", +"jNU c #99612d", +"jQs c #99642f", +"#mK c #996430", +"ckE c #996529", +"#pL c #996530", +"#Nt c #996632", +"etK c #99672a", +"jdJ c #99672f", +"duy c #996734", +"jdx c #996a2c", +"#5s c #996a36", +"d13 c #996a40", +"kL0 c #996a48", +"dyN c #996b34", +"fcu c #996c37", +".Cd c #996c39", +"ib# c #996c54", +"i#L c #996d3a", +"dkv c #996d41", +"dav c #996f43", +"jsC c #99713a", +".JZ c #99723e", +"#bD c #99723f", +"#bT c #99733f", +"j0c c #99743b", +"a4w c #997440", +".4f c #997442", +"jtg c #997446", +"a1f c #99753e", +"#e5 c #997541", +"kE7 c #997640", +".Hi c #997641", +"bkL c #997648", +".4h c #997740", +"apB c #997748", +"jwi c #997749", +"jWc c #997841", +".QY c #997843", +"#Aq c #99793e", +"bQV c #997a39", +"jiI c #997a43", +".4H c #997a46", +"jtH c #997a48", +"ba9 c #997a4c", +"bVG c #997b3a", +"jTL c #997b43", +"a9z c #997b48", +"a9y c #997b49", +".UI c #997b4a", +"bVH c #997c3c", +"bHh c #997c3d", +"jfV c #997c44", +"#gi c #997c49", +"bM# c #997d3b", +"bHg c #997d3d", +"bCD c #997d3f", +"j0i c #997d47", +"cKg c #997d49", +"bkK c #997d4e", +"b0x c #997e3c", +"b0z c #997e3d", +"bCF c #997e3e", +"jO. c #997e46", +"jTb c #997e47", +"#jn c #997e4b", +"a5g c #997e4e", +"jF. c #997e50", +"jae c #997f47", +"jQI c #997f48", +"#g2 c #997f49", +"aSe c #99803f", +"bpQ c #998043", +"jO# c #998048", +"iYN c #998049", +"#m. c #99804c", +"bcs c #998143", +"bpV c #998144", +"jIY c #998149", +"i9C c #99814a", +"bMh c #99823d", +"bMi c #99823e", +"aXt c #998247", +"jXX c #99824c", +"jTf c #99824e", +"bcX c #99833f", +"bHB c #998340", +"aT# c #998349", +"jIV c #99834b", +"j0j c #99834e", +"#81 c #998442", +"aX1 c #998444", +"bg2 c #99844a", +"cgt c #99844b", +"bgB c #99844d", +"cyY c #998541", +"bhl c #998542", +"amZ c #998543", +"aK7 c #998544", +"cZ0 c #998545", +"aX5 c #998546", +"bl3 c #998547", +"aOX c #99854c", +"#a6 c #998552", +"alq c #998557", +"aeR c #998642", +"ai4 c #998643", +"ayv c #998644", +"aqO c #998645", +"byE c #998646", +"bqk c #998647", +"bhG c #99864a", +"aKL c #998650", +".6H c #998658", +"byw c #998743", +"bcV c #998744", +"aqM c #998745", +"#T5 c #998747", +"cHP c #998748", +"bdg c #998749", +"cic c #99874a", +"coU c #998752", +"b0Y c #998844", +"bHG c #998845", +"am7 c #998846", +"bC2 c #998847", +"aaO c #998849", +"b.D c #99884a", +"bhB c #99884c", +"bMB c #99884e", +"bRb c #998946", +"aeN c #998947", +"aeO c #998948", +"ayB c #998949", +"b1c c #99894a", +"bW# c #99894d", +"bMA c #99894e", +"bMn c #998a46", +"cuK c #998a47", +"am1 c #998a48", +"aGH c #998a49", +"aCh c #998a4a", +"a2. c #998a4f", +"a6a c #998b49", +"aj# c #998b4c", +"#Qv c #998b4d", +"cb1 c #998b56", +"bEc c #998b60", +"a#u c #998b67", +"a16 c #998c50", +"aBW c #998c56", +"aBV c #998c58", +"aC# c #998d4e", +"aXK c #998d50", +"ax9 c #998d57", +"aXL c #998e51", +"aB8 c #998e53", +"bWk c #998e54", +"bSA c #998e61", +"aKS c #998f53", +"aB0 c #998f5a", +"a18 c #999058", +"aqg c #99905d", +"aqh c #99905e", +"ams c #99915e", +"ais c #99915f", +"bIY c #999167", +"bc8 c #99925a", +"amr c #99925f", +"amq c #999260", +"aeg c #999261", +"aef c #999262", +"aak c #999263", +"aaj c #999264", +"#wv c #99926c", +"cTL c #999287", +"dkU c #999288", +"bMJ c #99935b", +"air c #999360", +"amn c #999361", +"aal c #999363", +"aee c #999364", +"#8o c #999365", +"amg c #999368", +"bDd c #99945c", +"bML c #999460", +"#8n c #999465", +"#4B c #999466", +"dpL c #99948f", +".xz c #999561", +"bDe c #999763", +"#Fv c #999764", +"#00 c #99976a", +"#02 c #99986d", +"#Xn c #999970", +".ax c #999999", +"aad c #999a6f", +"#8c c #999c77", +"#8b c #999c78", +"a#8 c #999f7c", +"a#7 c #99a07e", +"#.h c #99a27d", +"#74 c #99a688", +"#73 c #99a78a", +"#72 c #99a88b", +".qJ c #99ab5c", +"a#Y c #99ab91", +"bgM c #99ae8e", +".98 c #99af95", +"cVQ c #99b2a0", +"dz1 c #99baa7", +".7L c #99bda9", +"b#I c #99cb8f", +"cVL c #99d4e2", +".k5 c #99d5f9", +"gK9 c #99ddc0", +".kl c #99e0ff", +"cah c #99e1fd", +"e2S c #99e2ec", +"cai c #99e2fd", +"cae c #99e2fe", +".qz c #99e3de", +".k2 c #99e4fe", +"cQ5 c #99e5fe", +"cvF c #99e6fd", +"cvD c #99e6fe", +"czN c #99e7ff", +"g0H c #99eed6", +".qY c #99fee7", +"iI0 c #9a4728", +"jLj c #9a481a", +"hjw c #9a492f", +"iUC c #9a4c2c", +"jxI c #9a5523", +"jcS c #9a5725", +"hm8 c #9a583d", +"hut c #9a5842", +"j0D c #9a5a1c", +"iQb c #9a5b22", +"hIo c #9a5b49", +"g6d c #9a5c4b", +"kfl c #9a5f32", +"bsD c #9a6230", +"h5V c #9a632a", +"jqm c #9a6337", +"#Ra c #9a6430", +"kiu c #9a6433", +"gP0 c #9a6559", +"jjr c #9a662c", +"jQr c #9a6631", +"jVD c #9a6730", +"hVi c #9a6851", +"iiW c #9a6953", +"iVQ c #9a6a2f", +"f13 c #9a6a31", +".Pe c #9a6a35", +"iS8 c #9a6e2b", +"jxJ c #9a6e36", +".Kz c #9a6e38", +".Y4 c #9a6e39", +"a1g c #9a7037", +"dC1 c #9a7038", +".F# c #9a703b", +"#j9 c #9a703e", +"#gl c #9a7045", +"#gF c #9a713c", +"km0 c #9a7141", +"#pb c #9a723c", +"##E c #9a723d", +"gl7 c #9a7243", +"h4v c #9a7256", +"#gY c #9a733d", +".9e c #9a743e", +"#gQ c #9a743f", +"ckP c #9a7445", +".g5 c #9a7476", +".6F c #9a754a", +"#w2 c #9a7637", +"kHT c #9a7740", +".QX c #9a7741", +"#sj c #9a7742", +"#bM c #9a7743", +".SS c #9a7942", +"cOz c #9a7945", +"bL4 c #9a7a38", +".EI c #9a7a46", +"kCo c #9a7a47", +"jwB c #9a7a48", +"jnQ c #9a7a49", +"jQM c #9a7b44", +"kp2 c #9a7b46", +".7s c #9a7b48", +"h.l c #9a7b49", +"g6p c #9a7c4b", +"b0y c #9a7d3d", +"jfY c #9a7d45", +"alh c #9a7d47", +"gQv c #9a7d4d", +"bgg c #9a7d4f", +"bHi c #9a7e3d", +"jiW c #9a7e45", +"jQK c #9a7e46", +"bgt c #9a7e4c", +"bVJ c #9a7f3c", +"bHj c #9a7f3d", +"aSb c #9a7f4a", +"#m# c #9a7f4c", +".Ph c #9a7f4d", +"is9 c #9a7f4e", +"chM c #9a803d", +"bt4 c #9a8040", +"jcX c #9a8048", +"jac c #9a8049", +"#jF c #9a804a", +"bVP c #9a813c", +"bt8 c #9a8142", +"jcZ c #9a8148", +"i65 c #9a8149", +"jcV c #9a814a", +"jXW c #9a814b", +"bgX c #9a8245", +"jad c #9a824a", +"hIy c #9a8255", +"bQ9 c #9a833d", +"bHD c #9a833f", +"jGa c #9a834a", +"i1B c #9a834b", +"i.m c #9a8353", +"igu c #9a8354", +"bMg c #9a843f", +"bHE c #9a8440", +"a6d c #9a8443", +"jLC c #9a844c", +"b.r c #9a8541", +"blS c #9a8542", +"aCu c #9a8543", +"aJ4 c #9a854b", +"aTa c #9a854c", +"jG# c #9a854d", +"cdp c #9a8641", +"aeV c #9a8642", +"aGV c #9a8643", +"#U. c #9a8645", +"buM c #9a8646", +"bcw c #9a864c", +"a97 c #9a864d", +"a5w c #9a8652", +"cdt c #9a8743", +"aeS c #9a8744", +"#86 c #9a8745", +"aqN c #9a8746", +"bur c #9a8748", +"bcx c #9a874c", +"bcy c #9a874d", +"aOY c #9a874e", +"aXd c #9a8754", +"aeW c #9a8844", +"aCo c #9a8846", +"auE c #9a8847", +"#T6 c #9a8848", +"a2e c #9a8849", +"a2# c #9a884a", +"aOZ c #9a8850", +"czg c #9a8945", +"bCV c #9a8946", +"bCU c #9a8947", +"aGT c #9a8948", +"a6o c #9a8949", +"a1Y c #9a894a", +"b.K c #9a894b", +"b.J c #9a894c", +"bHW c #9a894d", +"bRf c #9a8a46", +"aeX c #9a8a47", +"aj. c #9a8a48", +"aPi c #9a8a49", +"a1X c #9a8a4c", +"bHX c #9a8a4d", +"bHV c #9a8a4e", +"bWl c #9a8a4f", +".lv c #9a8a51", +"bRc c #9a8b47", +"ch4 c #9a8b48", +"aGO c #9a8b49", +"aym c #9a8b4c", +"bD. c #9a8b4f", +"aXR c #9a8c49", +"aTE c #9a8c4a", +"byB c #9a8c4b", +"#MT c #9a8c4f", +"a6s c #9a8c50", +"am3 c #9a8d4c", +"aqR c #9a8d4d", +"ayC c #9a8d4e", +"aGB c #9a8d50", +"a1V c #9a8d51", +"aTv c #9a8e50", +"aTu c #9a8e51", +"aTt c #9a8e52", +"aTs c #9a8f52", +"bI# c #9a8f54", +"a6j c #9a8f55", +"bhA c #9a9159", +"bHZ c #9a9257", +"#Jb c #9a925a", +"#Jf c #9a925c", +"#Qn c #9a9359", +"amp c #9a9360", +"aiq c #9a9361", +"aip c #9a9362", +"b.B c #9a945d", +"aio c #9a9463", +"dCD c #9a948e", +"#4C c #9a9568", +"dt0 c #9a958f", +"c7S c #9a9590", +"aih c #9a966d", +"ae# c #9a986f", +"ae. c #9a9871", +".ll c #9a9893", +".AO c #9a9967", +"ad9 c #9a9973", +"#Xk c #9a9a6f", +"#Xm c #9a9a70", +".db c #9a9a9a", +"#Fw c #9a9b6a", +".Gg c #9a9b6c", +"#8d c #9a9b75", +"#8e c #9a9c74", +"aa. c #9a9c79", +"ad5 c #9a9d77", +"a#9 c #9a9e7a", +"a#6 c #9aa280", +"a#5 c #9aa383", +"adT c #9aa98e", +"a5D c #9aad8b", +"al1 c #9aae92", +"a5E c #9ab08d", +"a5H c #9ab08f", +"a5G c #9ab090", +"aSY c #9ab190", +"d.p c #9ab9a2", +"dz2 c #9ab9a7", +"aUI c #9abd87", +"cV3 c #9abeb2", +"a27 c #9abf83", +"cCs c #9ac7d3", +".5y c #9accb9", +"cVM c #9acdd3", +"eTI c #9ad1c7", +"cfd c #9ad3da", +"fuF c #9addd8", +"e24 c #9adfe6", +"cvI c #9adff2", +"cQ7 c #9ae1f6", +"cag c #9ae2fe", +"cIF c #9ae3fc", +"caf c #9ae3fe", +"b6K c #9ae4fc", +"cnl c #9ae4ff", +"caA c #9ae5f4", +"cvx c #9ae6ff", +"czz c #9ae7ff", +"iur c #9aecd7", +"fNf c #9af5e2", +".qw c #9af8e7", +".rJ c #9afde6", +".#e c #9b1e9b", +"iGc c #9b4b2a", +"hH3 c #9b5036", +"h.c c #9b503c", +"dOm c #9b532f", +"hne c #9b5643", +"jKf c #9b572b", +"hBG c #9b5737", +"h4l c #9b5844", +"j22 c #9b5917", +"j0F c #9b591b", +"hE9 c #9b5a3a", +"bou c #9b5e2a", +"jNV c #9b5f2a", +"hQG c #9b642a", +"jTD c #9b6431", +"d2X c #9b6631", +"#1T c #9b6732", +"a8J c #9b6733", +"i0F c #9b673b", +"jmB c #9b6831", +".Vh c #9b6933", +".MT c #9b6934", +"kN7 c #9b6a2a", +"jVA c #9b6a33", +"gcF c #9b6b31", +"dXr c #9b6d40", +"kO8 c #9b6d4a", +"i.e c #9b6d55", +".Y6 c #9b6e38", +".9p c #9b6e39", +"idT c #9b6e56", +".66 c #9b6f3a", +"##N c #9b703a", +"dp. c #9b7044", +"jVz c #9b7139", +".Kw c #9b713b", +"bfG c #9b7140", +"#ek c #9b723c", +"#b8 c #9b733c", +".L2 c #9b733e", +"j0d c #9b743b", +".L1 c #9b743e", +"dxP c #9b7447", +"#ml c #9b753e", +".H2 c #9b7541", +"gbx c #9b7546", +"#si c #9b7640", +"iP3 c #9b7641", +"a9u c #9b7644", +"jTc c #9b773f", +"kRg c #9b7742", +".Rg c #9b7745", +"dtB c #9b774b", +"#pg c #9b7841", +"#zj c #9b7846", +".SH c #9b7849", +"#dO c #9b784b", +"a5b c #9b7948", +"#gO c #9b7a47", +".Up c #9b7a4a", +"adk c #9b7a4c", +"kbj c #9b7b45", +"hnk c #9b7b46", +"jqR c #9b7b48", +".2g c #9b7c45", +"gEZ c #9b7c4d", +"aKh c #9b7c50", +"b0w c #9b7d3c", +"jf0 c #9b7d44", +".Rx c #9b7e4b", +"hyd c #9b7e4e", +"jiK c #9b7f46", +"aNU c #9b7f49", +"#Rb c #9b7f4d", +"b0K c #9b803d", +"b5o c #9b803e", +"b5p c #9b803f", +"bye c #9b8040", +"bCG c #9b8041", +"jfW c #9b8046", +"jVI c #9b804b", +"hBL c #9b8052", +"bgV c #9b8142", +"jl1 c #9b8147", +"jc0 c #9b8148", +"iVP c #9b814f", +"a5k c #9b8151", +"#bk c #9b8152", +"clW c #9b823e", +"b5q c #9b8241", +"jcW c #9b8249", +"jDk c #9b824a", +"#hN c #9b8250", +".85 c #9b8252", +"hFc c #9b8253", +"bQ5 c #9b833e", +"bQ4 c #9b833f", +"jaf c #9b834b", +"#gx c #9b8353", +"bVU c #9b843d", +"b0T c #9b843e", +"b5L c #9b843f", +"bHC c #9b8441", +"bpW c #9b8446", +"bly c #9b8447", +"bct c #9b8448", +"i66 c #9b844d", +".vg c #9b8451", +"cLJ c #9b8540", +"c.v c #9b8541", +"bHz c #9b8542", +"a1I c #9b854a", +"aXu c #9b854b", +"jQP c #9b854d", +"auP c #9b8643", +"ayu c #9b8644", +"aCn c #9b8645", +"a14 c #9b8646", +"a5N c #9b864d", +"aTb c #9b864e", +"bgJ c #9b8651", +".vn c #9b8656", +"a#j c #9b8657", +"aCt c #9b8742", +"ayF c #9b8743", +"blR c #9b8744", +"aCm c #9b8745", +"#80 c #9b8746", +"bus c #9b8748", +"blx c #9b874b", +"a96 c #9b874d", +"a1K c #9b874e", +"a9N c #9b8751", +"a5z c #9b8754", +"aoa c #9b8758", +"bhm c #9b8844", +"aLf c #9b8845", +"auF c #9b8846", +"aX3 c #9b8848", +"bgZ c #9b884e", +"a5O c #9b884f", +"a5P c #9b8850", +"aOA c #9b8851", +"buh c #9b8945", +"bHF c #9b8946", +"aaU c #9b8947", +"aX4 c #9b8948", +"b.H c #9b894a", +"aTg c #9b8950", +"aO0 c #9b8951", +"a1s c #9b8956", +"b00 c #9b8a46", +"byv c #9b8a47", +"bV3 c #9b8a48", +"aTO c #9b8a49", +"aTh c #9b8a52", +"aKM c #9b8a54", +"b0Z c #9b8b46", +"bRe c #9b8b48", +"aPm c #9b8b49", +"aXX c #9b8b4b", +"aXY c #9b8b4c", +"bRs c #9b8b4d", +"byM c #9b8b50", +"aTC c #9b8c49", +"b.p c #9b8c4a", +"aCg c #9b8c4b", +"aaX c #9b8c4c", +"ayh c #9b8c4d", +"bD# c #9b8c4f", +"bME c #9b8c50", +"aXS c #9b8d4a", +"byA c #9b8d4b", +"ayD c #9b8d4d", +"aCa c #9b8d4f", +".8# c #9b8d5c", +"auN c #9b8e4f", +"aKW c #9b8e50", +"a1U c #9b8e52", +"aO8 c #9b8e56", +"ckL c #9b8e57", +"bNN c #9b8e63", +"aqT c #9b8f4f", +"auK c #9b8f50", +"bDb c #9b8f52", +".t4 c #9b8f5c", +"amo c #9b9462", +"bSC c #9b9469", +"ain c #9b9564", +"aig c #9b976f", +"ct2 c #9b978d", +"#01 c #9b986d", +"bLt c #9b9894", +"cVS c #9b9a75", +"bQB c #9b9a8f", +"#Fx c #9b9b6a", +"QtS c #9b9b9b", +".DA c #9b9c6c", +"aac c #9b9c73", +"aab c #9b9c76", +"aaa c #9b9c77", +"aa# c #9b9d78", +"ai. c #9b9e78", +".xs c #9ba070", +"#OS c #9ba175", +"ad1 c #9ba181", +"a#4 c #9ba587", +"a#3 c #9ba789", +"ahX c #9ba98c", +"a#Z c #9bab8f", +"al2 c #9bad90", +"a1y c #9baf8c", +"a90 c #9bb08a", +"a5I c #9bb08d", +"a5F c #9bb18f", +"aXk c #9bb191", +"aXl c #9bb290", +"c0I c #9bb8a2", +"c0g c #9bbdb9", +"aUV c #9bc285", +"aMf c #9bc28d", +"aYZ c #9bc694", +"a3l c #9bcb8f", +"aY0 c #9bcb94", +"c0Y c #9bd4d9", +".k4 c #9bdbfb", +"ccr c #9bdeed", +"e26 c #9bdfe6", +"ceQ c #9be2ff", +"ceY c #9be3fd", +"cj# c #9be3ff", +"cjt c #9be4f2", +"czY c #9be5fd", +"cr# c #9be5fe", +"cD6 c #9be6fe", +"cvB c #9be6ff", +"czO c #9be7fe", +"cvy c #9be7ff", +"cIn c #9be8fe", +"cMK c #9be8ff", +".qy c #9bebe0", +"fJz c #9bf6e1", +"hY. c #9c4b39", +"jfS c #9c5424", +"hH2 c #9c5441", +"jeB c #9c5531", +"iMf c #9c5f3b", +"gX0 c #9c5f4f", +"ixT c #9c603d", +"hBF c #9c6145", +"hH8 c #9c614a", +"hTO c #9c6225", +"jV8 c #9c622a", +"jVB c #9c632c", +"hnh c #9c6346", +"iZl c #9c6429", +"hqK c #9c6447", +"eWC c #9c6726", +"hzw c #9c672b", +"gQ. c #9c675a", +"hhl c #9c682d", +"#Yf c #9c6832", +"kfX c #9c6836", +"is0 c #9c6854", +"kCn c #9c692b", +"#jZ c #9c6a34", +"#hj c #9c6a35", +"d10 c #9c6a39", +".Xd c #9c6c35", +"#eR c #9c6d37", +"#hi c #9c6e38", +"jQp c #9c6f36", +"dC3 c #9c6f39", +"ari c #9c6f3c", +"dSQ c #9c6f42", +"eC9 c #9c7039", +".L0 c #9c703a", +".Ku c #9c703b", +"d1Z c #9c703d", +".KA c #9c713b", +".Kv c #9c723c", +"j0e c #9c733b", +"jXS c #9c743b", +"cb6 c #9c7441", +"#es c #9c753f", +"jwf c #9c7546", +"#ph c #9c763e", +"#md c #9c7740", +".v# c #9c7741", +"#pR c #9c7744", +"aft c #9c7745", +"bkM c #9c774a", +"iQW c #9c7841", +".0E c #9c7842", +".Ez c #9c7843", +"#bL c #9c7944", +".JK c #9c7947", +"kv4 c #9c794c", +"jAC c #9c7a41", +"a9s c #9c7a47", +"iT. c #9c7b40", +"aOi c #9c7b42", +"iM6 c #9c7b46", +"aO# c #9c7b47", +"aN4 c #9c7c32", +"jVG c #9c7c43", +"a9r c #9c7c47", +"kJb c #9c7c4a", +"jy6 c #9c7c4c", +"ahu c #9c7c4e", +"bVF c #9c7d3a", +"jJz c #9c7d44", +"adl c #9c7d51", +"ac1 c #9c7e49", +".9R c #9c7e4a", +"jiL c #9c7f46", +"aOb c #9c7f4c", +"a07 c #9c7f4e", +"bMa c #9c803e", +"jQL c #9c8046", +"b5B c #9c813d", +"bVO c #9c813e", +"bHk c #9c813f", +"b0A c #9c8140", +"bCH c #9c8142", +"jcY c #9c8147", +".yv c #9c814f", +"chN c #9c8240", +"byj c #9c8243", +"jVF c #9c8249", +"jhF c #9c8250", +"chO c #9c8340", +"aJG c #9c8343", +"byi c #9c8344", +"in6 c #9c8352", +"bQ8 c #9c843f", +"bt9 c #9c8446", +"aSB c #9c8451", +"c.G c #9c853e", +"bCP c #9c8543", +"aFc c #9c8548", +"i9D c #9c854c", +"jxR c #9c854d", +"jTg c #9c8550", +".84 c #9c8554", +"bVT c #9c863f", +"cHs c #9c8642", +"cDg c #9c8643", +".vp c #9c8654", +"h4z c #9c8656", +"cyX c #9c8742", +"cmJ c #9c8743", +"bhn c #9c8744", +"bg3 c #9c874b", +"blw c #9c874c", +"aXv c #9c874d", +"aXA c #9c874e", +"a5M c #9c874f", +"#85 c #9c8845", +"#83 c #9c8846", +"aGM c #9c8847", +"cmH c #9c8848", +"aXz c #9c884f", +"aTc c #9c8850", +"bcf c #9c8853", +".vf c #9c8857", +"ch2 c #9c8945", +"aK6 c #9c8946", +"a1Z c #9c8949", +"a54 c #9c894a", +"bcz c #9c894f", +"a1L c #9c8950", +"a98 c #9c8951", +"aTf c #9c8952", +".u1 c #9c8960", +"aeU c #9c8a46", +"aPo c #9c8a47", +"#T7 c #9c8a49", +"a6n c #9c8a4a", +"a5Q c #9c8a50", +"aTd c #9c8a52", +"aO1 c #9c8a55", +"ai5 c #9c8b48", +"aaV c #9c8b49", +"aK3 c #9c8b4a", +"aGG c #9c8b4b", +"a6r c #9c8b4d", +"cdT c #9c8b4e", +"aO2 c #9c8b55", +"ai6 c #9c8c49", +"aqV c #9c8c4a", +"aGP c #9c8c4b", +"a6p c #9c8c4c", +"ayl c #9c8c4d", +"ayi c #9c8c4e", +"bRr c #9c8c50", +"bWb c #9c8c51", +"aO3 c #9c8c56", +"bxG c #9c8c5b", +"bRd c #9c8d48", +"bVZ c #9c8d49", +"b5U c #9c8d4a", +"ayz c #9c8d4b", +"auJ c #9c8d4c", +"cdF c #9c8d4e", +"#Qu c #9c8d4f", +"bWa c #9c8d52", +"aKN c #9c8d58", +"am2 c #9c8e4d", +"cdG c #9c8e4e", +"aCd c #9c8e4f", +"aCb c #9c8e50", +"bRm c #9c8e51", +"c.Z c #9c8e52", +"a5X c #9c8e53", +"aKX c #9c8f50", +"aGm c #9c8f5b", +"aTr c #9c9053", +"aTo c #9c9054", +"#MS c #9c9055", +"aKQ c #9c9058", +"aGn c #9c905b", +"bXu c #9c9063", +"aKR c #9c9155", +"b.C c #9c9156", +"apl c #9c9158", +"byN c #9c9259", +"#MN c #9c955b", +"bc9 c #9c955e", +"df2 c #9c968b", +"dyi c #9c968e", +"dCF c #9c9690", +"df5 c #9c978c", +"dkT c #9c9792", +"aie c #9c9972", +"#Xl c #9c9b72", +".hs c #9c9c9b", +"Qt5 c #9c9c9c", +"b0b c #9c9e9a", +"cD9 c #9ca482", +"cgS c #9ca5a7", +"cgR c #9ca6a9", +"adX c #9ca889", +"a#2 c #9ca88a", +"adW c #9ca98a", +"a#1 c #9caa8b", +"a#0 c #9cab8e", +"ble c #9cad89", +"c5s c #9cb6a0", +"cQ8 c #9cb8ac", +"c0H c #9cb9a3", +".96 c #9cbaa6", +"bVh c #9cbac1", +"bVg c #9cbbc3", +"aMh c #9cbd7c", +"cQM c #9cc2c4", +"cMu c #9cc2c5", +"cVN c #9cc5c1", +"aMs c #9ccc9c", +"eEF c #9ccdc1", +"c0W c #9ccecd", +".lN c #9ccff0", +"caC c #9cd6dc", +"hNO c #9cd7bb", +"e25 c #9ce0e6", +".k3 c #9ce2fd", +"cjl c #9ce3fe", +"ciJ c #9ce4fd", +"cjm c #9ce4fe", +"gv7 c #9ce5c6", +"gdM c #9ce6be", +"cvA c #9ce6ff", +"crk c #9ce7fe", +"cvz c #9ce7ff", +"gas c #9ce8c0", +"cvH c #9ce8ff", +"cD7 c #9ce9ff", +".qx c #9cf4e4", +"itC c #9d441d", +"i9y c #9d4a1e", +"iLP c #9d4b2b", +"bO4 c #9d4e1e", +"j.8 c #9d522f", +"iAG c #9d5426", +"h4k c #9d5741", +"iMe c #9d582b", +"dtl c #9d5933", +"hjn c #9d5c44", +"jTu c #9d5d25", +"hLD c #9d5d48", +"j21 c #9d5f1c", +"hGt c #9d6020", +"jTr c #9d6025", +"hIt c #9d6245", +"iw9 c #9d6321", +"iM7 c #9d6329", +"htG c #9d6353", +"anx c #9d6530", +"gI# c #9d6559", +"bwH c #9d6634", +"hkY c #9d6728", +"ggi c #9d6827", +"grf c #9d6829", +"h2T c #9d6830", +"h7m c #9d6a59", +"eym c #9d6b2a", +"#UE c #9d6c37", +"kIV c #9d6d48", +"dLd c #9d6e36", +".Xe c #9d6e37", +"#UK c #9d6e39", +"eaE c #9d6f31", +"coX c #9d6f39", +"d6U c #9d6f41", +"eet c #9d6f43", +"fLV c #9d7037", +"dNX c #9d705c", +".y9 c #9d713c", +"dkw c #9d7143", +".Ky c #9d723c", +"jVx c #9d7439", +"##P c #9d743c", +"dB7 c #9d7445", +"#jB c #9d753e", +".2q c #9d7540", +".QA c #9d7641", +"#J2 c #9d7844", +"aWM c #9d7845", +".QM c #9d7847", +"a9v c #9d7849", +"c2K c #9d784d", +"a9H c #9d7936", +"hqP c #9d7943", +".KF c #9d7945", +"aRM c #9d7949", +"aW9 c #9d7a40", +"j0h c #9d7a42", +".EC c #9d7a43", +"bbO c #9d7a49", +"ag7 c #9d7c44", +"#o8 c #9d7c46", +"g6q c #9d7c47", +"jwh c #9d7c4b", +"jBi c #9d7d44", +".BE c #9d7d49", +".MX c #9d7d4a", +"ahv c #9d7d4f", +"bHc c #9d7e3c", +"jBh c #9d7e43", +"jGI c #9d7e44", +"##r c #9d7e4a", +".yw c #9d7f4a", +"hf2 c #9d7f4b", +"jW8 c #9d7f51", +"b5n c #9d803e", +"jiJ c #9d8047", +"bow c #9d804e", +"aWH c #9d8139", +"b0L c #9d813c", +"c.i c #9d8240", +"cc4 c #9d8242", +"a1# c #9d8250", +"bp# c #9d8252", +"bHl c #9d8340", +"bCI c #9d8342", +"a46 c #9d8343", +"a44 c #9d8349", +"jOJ c #9d834c", +"#gw c #9d8352", +"b0N c #9d8440", +"bhe c #9d8442", +"bu. c #9d8445", +"bhf c #9d8542", +"b.j c #9d8543", +"b5r c #9d8545", +"c.j c #9d8546", +"bpX c #9d8547", +"blq c #9d8548", +"jfX c #9d854a", +"jeX c #9d8553", +"ibh c #9d8554", +"b0S c #9d8640", +"bMf c #9d8642", +"bpY c #9d8647", +"id0 c #9d8655", +"aOn c #9d8658", +"b5K c #9d8741", +"bHw c #9d8744", +"bHv c #9d8745", +"b.i c #9d8747", +"j0k c #9d8752", +"#84 c #9d8845", +"aNX c #9d8847", +"aFd c #9d8849", +"bg4 c #9d884b", +"blr c #9d884d", +"aXw c #9d884e", +"aXx c #9d8850", +"cmI c #9d8945", +"ayE c #9d8946", +"aTH c #9d8947", +"#T9 c #9d8949", +"a13 c #9d894a", +"bcA c #9d894f", +"a1J c #9d8950", +"aXy c #9d8951", +".vo c #9d8957", +"b.q c #9d8a46", +"aqW c #9d8a47", +"bhk c #9d8a48", +"aXU c #9d8a49", +"#T8 c #9d8a4a", +"a99 c #9d8a50", +"bcu c #9d8a52", +"jeY c #9d8a5a", +"bCS c #9d8b47", +"bCT c #9d8b48", +"bHM c #9d8b49", +"auO c #9d8b4a", +"a10 c #9d8b4b", +"a1M c #9d8b52", +"aTe c #9d8b54", +"aPt c #9d8c49", +"bMu c #9d8c4a", +"a12 c #9d8c4b", +"aXM c #9d8c4c", +"b.h c #9d8c4d", +"bcv c #9d8c54", +"cme c #9d8d49", +"a6b c #9d8d4a", +"am6 c #9d8d4b", +"aTK c #9d8d4c", +"ayk c #9d8d4d", +"ayj c #9d8d4e", +"czh c #9d8d4f", +"c.3 c #9d8d51", +"c.2 c #9d8d52", +"cdu c #9d8e4a", +"cqv c #9d8e4b", +"aPs c #9d8e4c", +"bC1 c #9d8e4d", +"aCe c #9d8e4e", +"aGC c #9d8e4f", +"aCc c #9d8e50", +"bMF c #9d8e52", +"bpw c #9d8e59", +"bC0 c #9d8f4d", +"bMt c #9d8f4e", +"aKY c #9d8f50", +"byW c #9d8f51", +"bLb c #9d8f59", +"aPc c #9d9051", +"a1T c #9d9053", +"aTn c #9d9155", +".AA c #9d9159", +"b2d c #9d9162", +"bRw c #9d935a", +"byV c #9d9457", +"#MO c #9d9459", +"#Qo c #9d955b", +".v4 c #9d956c", +"bRv c #9d965f", +"bVl c #9d9789", +"#Jc c #9d9860", +"ckZ c #9d9893", +"#Je c #9d9963", +"#.f c #9d9a72", +"b9y c #9d9a97", +"bH0 c #9d9b67", +"cch c #9d9b99", +".h. c #9d9d9d", +"bpE c #9da075", +"ad4 c #9da17d", +"ad2 c #9da281", +"dpq c #9da39d", +"ad0 c #9da686", +"bpF c #9dab85", +"a1w c #9dac87", +"al3 c #9dad8f", +"a5C c #9daf8c", +"aXg c #9db08e", +"ez6 c #9db48c", +"c0J c #9db9a3", +"c5t c #9dbaa3", +"b41 c #9dbcc5", +"bVf c #9dbec6", +"c0i c #9dc4c6", +"cB0 c #9dc6ce", +"beM c #9dc89d", +"bjh c #9dc9a2", +".ks c #9dcbf6", +"aM# c #9dcdae", +".kr c #9dcdf7", +"cnC c #9de4f8", +"cjn c #9de4fe", +"cfb c #9de5f2", +"b6v c #9de5fe", +"cvG c #9de7fe", +"czE c #9de7ff", +"czP c #9de8ff", +"d8N c #9de9f1", +"czQ c #9de9ff", +"fid c #9df3e4", +".rm c #9dffe4", +"bKb c #9e4614", +"i3g c #9e4a2a", +"iDw c #9e4f2a", +"h4j c #9e553c", +"hjv c #9e5540", +"iQa c #9e5b20", +"dxh c #9e5e38", +"hO9 c #9e5e4a", +"jQG c #9e5f26", +"hjx c #9e6646", +"kiv c #9e6932", +"jVC c #9e6a31", +"j9M c #9e6a34", +"#1Z c #9e6b35", +"hNc c #9e6d34", +"#a. c #9e6e36", +"hZY c #9e6e38", +".7q c #9e6f37", +"dC8 c #9e6f38", +"dTG c #9e7137", +"#mS c #9e713d", +"dXq c #9e7145", +"fs8 c #9e723a", +"iqA c #9e725d", +"jVy c #9e7339", +".Fa c #9e733d", +"##K c #9e733f", +"j0f c #9e743b", +".HP c #9e743e", +".4u c #9e7440", +"#b4 c #9e7540", +"jXR c #9e763b", +"j0g c #9e763d", +".LS c #9e7747", +".QW c #9e7841", +".Su c #9e7843", +"dHe c #9e793e", +"#jA c #9e7941", +"bj5 c #9e794a", +"do6 c #9e794b", +"a5a c #9e7a46", +".UD c #9e7a47", +"#b3 c #9e7b45", +".v1 c #9e7b46", +"aFq c #9e7c3a", +"jQm c #9e7c41", +"bQU c #9e7d39", +"iV# c #9e7d48", +".8I c #9e7d4a", +"kMm c #9e7d4c", +"alz c #9e7d4e", +"jSh c #9e7d50", +"aF. c #9e7e3a", +"iI. c #9e7e42", +"jYA c #9e7e45", +"#tV c #9e7f43", +"kDE c #9e7f4d", +"a9n c #9e8048", +"iBg c #9e804c", +"jl3 c #9e8147", +"hqO c #9e814c", +"jHU c #9e8151", +"cc3 c #9e8243", +"jkH c #9e824e", +"jDs c #9e8348", +"gIM c #9e8352", +"hLP c #9e8354", +"bcP c #9e8442", +"byk c #9e8443", +"bu# c #9e8444", +"#w4 c #9e844d", +"gMC c #9e8453", +"#gu c #9e8455", +"#Z0 c #9e845b", +"bcO c #9e8543", +"cc5 c #9e8545", +"bpZ c #9e8546", +"jGc c #9e854a", +"joZ c #9e854e", +"ilA c #9e8552", +"#nT c #9e8553", +"cDe c #9e863f", +"blL c #9e8643", +"bue c #9e8644", +"blK c #9e8645", +"i1G c #9e864d", +"jTh c #9e8650", +"a0X c #9e873e", +"cdo c #9e8740", +"c.F c #9e8741", +"bMe c #9e8744", +"byr c #9e8745", +"bp7 c #9e8746", +"jXZ c #9e8750", +"c.E c #9e8842", +"cHt c #9e8843", +"bHx c #9e8845", +"a94 c #9e884c", +"jAG c #9e884e", +".VQ c #9e8852", +"h1w c #9e8858", +"alp c #9e885c", +"cLL c #9e8943", +"bHy c #9e8945", +"bI. c #9e8949", +"a95 c #9e894d", +"i4t c #9e8950", +"j0l c #9e8952", +"h7w c #9e8958", +"dDZ c #9e8a47", +"a6c c #9e8a48", +"bcB c #9e8a50", +"i67 c #9e8a51", +"aPn c #9e8b49", +"b.. c #9e8b51", +"a9O c #9e8b56", +"aeT c #9e8c49", +"bq. c #9e8c4a", +"aX0 c #9e8c4b", +"a5R c #9e8c52", +"bgY c #9e8c54", +"czf c #9e8d45", +"byt c #9e8d49", +"aK2 c #9e8d4c", +"aCf c #9e8d4d", +"a1N c #9e8d53", +"a1O c #9e8d54", +"cmf c #9e8e4a", +"aL# c #9e8e4b", +"aCs c #9e8e4c", +"aGF c #9e8e4d", +"a2d c #9e8e4e", +"aXZ c #9e8e4f", +"cHQ c #9e8e50", +"bV1 c #9e8f4b", +"cqr c #9e8f4c", +"aTL c #9e8f4d", +"aL. c #9e8f4e", +"a6q c #9e8f4f", +"aTw c #9e8f50", +"a1W c #9e8f51", +"aXJ c #9e8f52", +"bWd c #9e8f53", +"c.1 c #9e8f54", +"bpx c #9e8f5a", +"aLc c #9e9050", +"cDB c #9e9052", +"bRn c #9e9053", +"bRq c #9e9054", +"a5W c #9e9055", +"aO7 c #9e9058", +"aO4 c #9e9059", +"aqS c #9e9151", +"#MQ c #9e9155", +"cqI c #9e9156", +"b7. c #9e9162", +"dGT c #9e918c", +"#MR c #9e9255", +"aGq c #9e9256", +"#MP c #9e9356", +"byU c #9e955a", +"#Qp c #9e955b", +"aqe c #9e9768", +"ciS c #9e976c", +"bDc c #9e985f", +"da3 c #9e988c", +"b5f c #9e9893", +".kH c #9e9a96", +"#Jd c #9e9b65", +"co6 c #9e9d9b", +".h9 c #9e9d9e", +".bW c #9e9e9e", +"ah9 c #9ea17c", +"ad3 c #9ea27f", +".Gr c #9ea376", +"#7x c #9ea588", +"adV c #9eaa8d", +"ahY c #9eab8d", +"adU c #9eab90", +"ah0 c #9eac8c", +"apY c #9eb093", +"bck c #9eb28e", +"aS2 c #9eb395", +"aOP c #9eb593", +"c5u c #9ebaa3", +"c5v c #9ebba7", +"cMt c #9ec4c7", +"bvO c #9ec78b", +"a7P c #9ec798", +"brN c #9ec9a1", +"aIf c #9ece8d", +"eEG c #9ecec5", +"b9V c #9ed6e4", +"d4k c #9ed7d8", +"hRg c #9ed8ba", +"eO. c #9edbe3", +"dZq c #9edcd9", +".jI c #9edcfc", +".km c #9ee0fe", +"e2V c #9ee4ed", +"cnB c #9ee4f9", +"cjk c #9ee4fe", +"ci5 c #9ee4ff", +"e2Y c #9ee5ee", +"ceX c #9ee5fd", +"cvS c #9ee6fe", +"czF c #9ee7ff", +"czG c #9ee8ff", +"ikC c #9eead4", +"hU5 c #9f513f", +"hOY c #9f523f", +"g58 c #9f5340", +"iJp c #9f552c", +"bAZ c #9f5827", +"jtc c #9f5a2a", +"hF. c #9f5c3d", +"hqz c #9f5c46", +"j0C c #9f5e1d", +"hjl c #9f5f45", +"iPd c #9f6132", +"cbU c #9f6229", +"hIu c #9f6443", +"gXZ c #9f6554", +"jYh c #9f662a", +"dke c #9f663e", +"i6l c #9f672c", +"gX6 c #9f6859", +"jZT c #9f6933", +"#CL c #9f6a34", +"fEs c #9f6b2e", +"jt5 c #9f6b30", +"jU8 c #9f6b33", +"#eS c #9f6c35", +"kDk c #9f6c43", +"j0W c #9f6d37", +"dTL c #9f6e2f", +"#hk c #9f6e36", +"kfY c #9f6e38", +"hvW c #9f6f33", +"kdi c #9f703c", +".SO c #9f703d", +"fYP c #9f7137", +"#jW c #9f7139", +".vV c #9f733d", +"dpa c #9f7346", +".HU c #9f743e", +".HS c #9f753e", +".0l c #9f753f", +"aAF c #9f7547", +"j.a c #9f763d", +"#eF c #9f763e", +".YJ c #9f7640", +".YA c #9f7642", +"#j8 c #9f7743", +".O3 c #9f7745", +"cXY c #9f7749", +".3. c #9f7841", +"#bZ c #9f7842", +".4v c #9f7843", +"#dQ c #9f7850", +"aJi c #9f7946", +".8N c #9f7947", +"#vG c #9f7b42", +"jF5 c #9f7c41", +"ix# c #9f7c43", +".BY c #9f7d4f", +"cF4 c #9f7d51", +".MW c #9f7e48", +"kPr c #9f7e4c", +"iFv c #9f7f44", +"#gP c #9f7f49", +"h.m c #9f7f4a", +"i0S c #9f7f4e", +"jyr c #9f8045", +"hcd c #9f804a", +"#UL c #9f804c", +"kj# c #9f8149", +"apy c #9f814f", +"kcR c #9f8151", +"c.h c #9f823f", +"a9G c #9f824a", +"cc2 c #9f8342", +"hye c #9f8350", +"alv c #9f8351", +"j6R c #9f8354", +"#gt c #9f8357", +"b0M c #9f843f", +"bt3 c #9f8443", +"aWB c #9f8444", +"chC c #9f8445", +"jlQ c #9f844b", +"b0J c #9f8543", +"chD c #9f8545", +"aSu c #9f8550", +".ve c #9f8551", +"bcN c #9f8644", +"bua c #9f8645", +"jDr c #9f864a", +"aJZ c #9f8650", +"bbY c #9f8651", +"ii3 c #9f8655", +"b0O c #9f8742", +"bVQ c #9f8743", +"bQ6 c #9f8744", +"bhg c #9f8745", +"bp0 c #9f8747", +"chE c #9f8748", +"aFb c #9f874c", +".1B c #9f874e", +"bVS c #9f8842", +"bQ7 c #9f8843", +"bcM c #9f8846", +"bp6 c #9f8847", +"c.k c #9f8848", +"bpP c #9f884b", +"blz c #9f884c", +"i4A c #9f884d", +"i1F c #9f884f", +"cHM c #9f893d", +"cP9 c #9f8943", +"bp8 c #9f8946", +"blJ c #9f8947", +".yu c #9f8955", +"cDz c #9f8a40", +"cUJ c #9f8a45", +"cQ. c #9f8a46", +"bHu c #9f8a47", +"buf c #9f8a48", +"bg5 c #9f8a4f", +"jag c #9f8a50", +"iYO c #9f8a51", +"ch1 c #9f8b46", +"cZu c #9f8b48", +"aTG c #9f8b49", +"b.# c #9f8b51", +".vm c #9f8b59", +"#Ry c #9f8b64", +"b08 c #9f8c48", +"bys c #9f8c49", +"blQ c #9f8c4a", +"b52 c #9f8c4b", +"bcC c #9f8c51", +"i1C c #9f8c52", +"bMv c #9f8d48", +"cdy c #9f8d49", +"bug c #9f8d4a", +"byu c #9f8d4b", +"bC3 c #9f8d4c", +"aXT c #9f8d4d", +"i1D c #9f8d53", +"aXB c #9f8d56", +"b4o c #9f8d5c", +"aaW c #9f8e4b", +"aTB c #9f8e4c", +"a53 c #9f8e4e", +"a5Y c #9f8e51", +"i1E c #9f8e53", +"a1P c #9f8e54", +"cgx c #9f8e59", +"a1t c #9f8e5b", +"cqo c #9f8f4b", +"ayA c #9f8f4c", +"aKZ c #9f8f50", +"c4L c #9f8f51", +"aTi c #9f8f58", +"jeZ c #9f8f5f", +"cqw c #9f904c", +"bMq c #9f904d", +"aTN c #9f904e", +"aK9 c #9f904f", +"cms c #9f9050", +"#Qt c #9f9051", +"#Qr c #9f9053", +"bWc c #9f9055", +"aXG c #9f9056", +"aKO c #9f9059", +"bGr c #9f905d", +"#YS c #9f906a", +"bHL c #9f914f", +"aGS c #9f9150", +"cdH c #9f9152", +"aXH c #9f9155", +"bpz c #9f915c", +"jb5 c #9f9162", +"aPr c #9f9251", +"bRp c #9f9255", +"bMG c #9f9256", +"#7k c #9f9260", +"#Qq c #9f9358", +"aGo c #9f9359", +"bWh c #9f9459", +"b1j c #9f945a", +"cE# c #9f9466", +"#fh c #9f9468", +"bMH c #9f955a", +"b4n c #9f955d", +"bRx c #9f965f", +"dbe c #9f9894", +"dps c #9f9994", +"daP c #9f9d98", +".AF c #9f9e6d", +".aW c #9f9f9f", +"bWv c #9fa16e", +".xt c #9fa676", +".XG c #9fa985", +"adY c #9faa8a", +"ahZ c #9fae90", +"#3L c #9fae93", +"cck c #9faeae", +"a1x c #9fb08d", +"blf c #9fb28d", +"ez7 c #9fb58d", +".l1 c #9fb5c1", +"cnc c #9fb79f", +"#hQ c #9fb7a0", +"c0K c #9fb89c", +"dz0 c #9fbfad", +"cVP c #9fc1b3", +"cjx c #9fc4c1", +"ccG c #9fd8e5", +"b4X c #9fd8e6", +"hKp c #9fdcbf", +"cVK c #9fddef", +"e7l c #9fe1e7", +"e2W c #9fe3ed", +"bzk c #9fe4fb", +"bN# c #9fe4fc", +"ceR c #9fe4ff", +"cnD c #9fe5f5", +"f3e c #9fe7c0", +"czH c #9fe7ff", +"czM c #9fe8ff", +"d8O c #9fe9f2", +"cQ4 c #9fe9ff", +"bO2 c #a04d17", +"gQl c #a05139", +"jT. c #a05e25", +"jYe c #a05f23", +"hEK c #a0604a", +"jQ7 c #a06227", +"gH9 c #a06257", +"iXX c #a06328", +"jV4 c #a0652e", +"jV5 c #a0662e", +"hoy c #a06725", +"jaS c #a06826", +"#Gf c #a06831", +"kq0 c #a06937", +"efn c #a06d35", +"#eT c #a06d36", +"dX7 c #a06d37", +"j.. c #a06e31", +"dPe c #a06e3b", +"hdE c #a06f33", +"kfZ c #a06f38", +"#v6 c #a06f3a", +"iSW c #a07032", +"jU7 c #a07037", +".9N c #a07239", +"g#d c #a07338", +".Z# c #a0733a", +"dky c #a07344", +"dXs c #a07345", +"e#D c #a07347", +"jQq c #a0743a", +".Ts c #a0743c", +".HW c #a0743d", +".HV c #a0753e", +".Ub c #a07544", +"cTb c #a07547", +".2l c #a07643", +"dtC c #a07647", +"d6Z c #a07649", +"iPZ c #a0773a", +"dux c #a0773d", +"i1t c #a0773f", +".uQ c #a07742", +".N9 c #a07845", +"j#w c #a0793f", +".US c #a07941", +"i0U c #a07948", +"#mh c #a07a41", +"i0T c #a07b4b", +"c7w c #a07b4e", +"aJU c #a07d42", +"#aw c #a07d46", +".6Z c #a07d47", +".St c #a07d49", +".Et c #a07d51", +".ze c #a07e47", +"cBM c #a07e53", +"b0v c #a07f3b", +"ape c #a07f45", +"aSr c #a07f48", +".Pi c #a07f4a", +"kGn c #a07f4d", +"alc c #a08046", +"ale c #a08048", +"acU c #a0823e", +"jys c #a08246", +"kzM c #a0824d", +"aWP c #a08250", +"aph c #a0834b", +"bbK c #a0834e", +"huz c #a0834f", +"cc1 c #a08442", +"a.6 c #a0844e", +"#bw c #a08451", +"aSg c #a0853a", +"aJP c #a08541", +"jl0 c #a0854b", +"#gD c #a0854f", +"c.w c #a0863f", +"chB c #a08645", +"#ZL c #a08655", +".vB c #a0865b", +"bHm c #a08744", +"c8C c #a08747", +"iVZ c #a0874e", +"#hR c #a08753", +".SL c #a08755", +"c.C c #a08844", +"bMb c #a08845", +"jQQ c #a08850", +"id1 c #a08857", +"hPj c #a08858", +"b0R c #a08943", +"aSf c #a08944", +"cdl c #a08946", +"blM c #a08947", +"jlS c #a08951", +"a9A c #a08958", +"b5J c #a08a44", +"ch0 c #a08a45", +"bhi c #a08a48", +"bp5 c #a08a49", +"jDq c #a08a4f", +"bbZ c #a08a57", +"cUH c #a08b44", +"bcS c #a08b48", +"bcR c #a08b49", +"bud c #a08b4a", +"a5L c #a08b51", +".3P c #a08b57", +"cDA c #a08c42", +"cHL c #a08c45", +"cDh c #a08c47", +"cmd c #a08c48", +"blI c #a08c4a", +"b5s c #a08c4b", +"iYQ c #a08c52", +"j2L c #a08c55", +"cDy c #a08d46", +"bRj c #a08d47", +"bRi c #a08d49", +"bCR c #a08d4a", +"b.o c #a08d4b", +"b.n c #a08d4c", +"c4K c #a08d4d", +"a5U c #a08d52", +"iYP c #a08d53", +"cze c #a08e45", +"aTF c #a08e4b", +"a6. c #a08e4c", +"aXN c #a08e4d", +"i4w c #a08e54", +"a6# c #a08f4c", +"b07 c #a08f4d", +"aGD c #a08f4e", +"aTx c #a08f4f", +"i9E c #a08f54", +"i4u c #a08f55", +"cuI c #a0904c", +"cqs c #a0904d", +"dHZ c #a0904f", +"aTM c #a09050", +"a52 c #a09051", +"bV0 c #a0914c", +"cmg c #a0914d", +"c.N c #a0914e", +"aCr c #a0914f", +"aGQ c #a09150", +"czu c #a09151", +"cmr c #a09152", +"#Qs c #a09153", +"c.4 c #a09156", +"aTl c #a09157", +"aXF c #a09158", +"aKP c #a0915b", +"bk4 c #a0915e", +"cmh c #a09250", +"bV5 c #a09251", +"czv c #a09252", +"b1e c #a09255", +"c.0 c #a09256", +"bWe c #a09257", +"aTk c #a09259", +"aTj c #a0925a", +"bpu c #a0925e", +"cmt c #a09355", +"cmy c #a09356", +"bRo c #a09357", +".6I c #a09363", +"b55 c #a09457", +"cex c #a0966a", +"b1l c #a09760", +"bWi c #a09961", +"j#s c #a0996d", +"df6 c #a09a8e", +"dys c #a09a94", +"b9B c #a09a97", +"bRu c #a09c65", +"buC c #a09c66", +"c7R c #a09c97", +".DK c #a09e6c", +".iL c #a09ea0", +"bZR c #a09f9c", +"bMU c #a0a069", +"bLx c #a0a09c", +".bY c #a0a0a0", +"ctl c #a0a1a0", +"ah8 c #a0a481", +"adZ c #a0a98a", +"al4 c #a0ae91", +"a9X c #a0b38d", +"a9Z c #a0b38e", +"bgN c #a0b38f", +"cV2 c #a0b49d", +".7U c #a0b69a", +".7Y c #a0b79e", +"c0G c #a0baa3", +"b#9 c #a0c277", +"cVO c #a0c2b7", +"cVo c #a0c5c8", +"aMg c #a0c68d", +"cMq c #a0c6ca", +"aQq c #a0c899", +"cGh c #a0cdd6", +"d4m c #a0d1ca", +".kq c #a0d3f9", +"eJA c #a0d8e0", +"eJx c #a0d9e1", +"cg1 c #a0e0ee", +"f9j c #a0e1b8", +"e27 c #a0e2e8", +"cfc c #a0e2ed", +"cju c #a0e4f2", +"cnF c #a0e4f3", +"cnE c #a0e4f4", +"cjj c #a0e4fd", +"cja c #a0e5ff", +"cME c #a0e6ff", +"czD c #a0e7ff", +"cIE c #a0e8ff", +"ir0 c #a0ebd4", +"fFQ c #a0f4dd", +".rK c #a0fde2", +".qZ c #a0fee3", +"jwc c #a15222", +"iVW c #a1541e", +"bwG c #a15622", +"bKd c #a1572a", +".bt c #a15aac", +"h1g c #a1614b", +"doS c #a1623a", +"i8D c #a1633b", +"kMe c #a1662d", +"jV3 c #a1662e", +"i59 c #a1663b", +"i#K c #a16825", +"jXt c #a16932", +"jV6 c #a16a31", +"cXM c #a16c3e", +"d7J c #a16d35", +"bZs c #a16d38", +"#ck c #a16e36", +"fVF c #a17131", +".dh c #a171b5", +".KB c #a1723a", +"jc# c #a17336", +"j9R c #a1733b", +"##Z c #a1733c", +".9O c #a1743a", +"dp# c #a17546", +"ckO c #a1763d", +"dfx c #a17645", +"dXp c #a17648", +"jVw c #a1773c", +"dku c #a17747", +"jAx c #a1783d", +"dyR c #a1783e", +"#g3 c #a17943", +"cOG c #a1794c", +"d7Q c #a17a3f", +"bj4 c #a17a4a", +"cKn c #a17a4e", +"bov c #a17b49", +"ctd c #a17b4c", +"gpM c #a17c49", +"dkt c #a17c4b", +"ipq c #a17d44", +"bbQ c #a17d4b", +"bL3 c #a17e38", +".J4 c #a17e45", +"hVO c #a17e51", +"#sA c #a17f45", +"kN9 c #a17f48", +"huA c #a17f49", +"cxA c #a17f53", +".UJ c #a1804a", +"kJc c #a1804d", +"aSn c #a1813d", +"duC c #a18141", +"j5N c #a18146", +"at# c #a18148", +"jtI c #a1814c", +"kGo c #a1814e", +"jPR c #a1814f", +"cBN c #a18156", +"cu. c #a18241", +"jD4 c #a18248", +"atc c #a1824a", +"ag9 c #a1824b", +"gE0 c #a1824f", +"aA4 c #a1833d", +"aw8 c #a18340", +"a9o c #a1834c", +"byd c #a18443", +"jlR c #a1854b", +"#o9 c #a1854d", +"#t7 c #a18551", +"bpN c #a18645", +"clN c #a18646", +"jo0 c #a1864b", +"kd6 c #a1864c", +"ajB c #a18653", +".yf c #a18657", +"c.t c #a18744", +"iYS c #a1874e", +"#gy c #a18752", +"#f2 c #a18753", +"a1d c #a18754", +"ii4 c #a18755", +"bb. c #a18757", +"aWF c #a1883c", +"cdk c #a18844", +"bCJ c #a18845", +"clO c #a18848", +"a0U c #a1884b", +"igw c #a18855", +"aNZ c #a1893e", +"bVR c #a18945", +"cdb c #a18947", +"clP c #a1894a", +"bgd c #a18953", +"bkI c #a18955", +"cZt c #a18a43", +"clZ c #a18a44", +"b5H c #a18a45", +"b0P c #a18a46", +"b.k c #a18a48", +"chF c #a18a4b", +"chX c #a18b48", +"bhh c #a18b49", +"clQ c #a18b4c", +"i1H c #a18b51", +"i.n c #a18b59", +"cdX c #a18c44", +"cQ# c #a18c49", +"bcL c #a18c4a", +"bhd c #a18c4b", +"i4x c #a18c52", +"hYs c #a18c5b", +"cL7 c #a18d44", +"aNY c #a18d45", +"c4H c #a18d47", +"b1. c #a18d49", +"bCQ c #a18d4a", +"bcT c #a18d4b", +"bcU c #a18d4c", +"cc6 c #a18d4d", +"iYR c #a18d53", +"czd c #a18e47", +"bV6 c #a18e48", +"cmc c #a18e49", +"cl9 c #a18e4a", +"bp9 c #a18e4b", +"a58 c #a18e4c", +"a59 c #a18e4d", +"a5Z c #a18e50", +"a5T c #a18e52", +"b.a c #a18e53", +"aOg c #a18e59", +"cHN c #a18f47", +"ch7 c #a18f49", +"b5Y c #a18f4b", +"blO c #a18f4c", +"aXQ c #a18f4d", +"aGE c #a18f4e", +"a5S c #a18f54", +"cQd c #a1904b", +"cqp c #a1904c", +"blP c #a1904d", +"a11 c #a1904e", +"aTA c #a1904f", +"aPg c #a19050", +"a5V c #a19055", +"i4v c #a19056", +"aFA c #a1905a", +".vA c #a19068", +"cqq c #a1914c", +"cuH c #a1914d", +"aLa c #a1914e", +"cuJ c #a1914f", +"dL8 c #a19150", +"dHY c #a19151", +"b.g c #a19152", +"i68 c #a19156", +"i69 c #a19157", +".VY c #a1915a", +"cuN c #a1924e", +"cy1 c #a1924f", +"c.O c #a19251", +"cib c #a19252", +"c9z c #a19254", +"b1f c #a19257", +"aO6 c #a19259", +"bGs c #a1925c", +"b06 c #a19351", +"aPv c #a19352", +"aGR c #a19353", +"cHR c #a19356", +"cL9 c #a19357", +"aGp c #a19358", +"aO5 c #a19359", +"bZx c #a1935e", +"bDa c #a19457", +"b1d c #a19458", +"b1g c #a1945a", +"bHY c #a1955a", +"cmx c #a1955b", +"b1m c #a1965c", +".xH c #a19762", +"dla c #a1988e", +"dyj c #a19b90", +"df1 c #a19c96", +"bMI c #a19d67", +"ciU c #a19d73", +"dyb c #a19d97", +"bVc c #a19e96", +".ct c #a1a1a1", +"#aN c #a1a273", +"ap1 c #a1ac8c", +"al5 c #a1af91", +"alI c #a1b399", +"d.r c #a1b599", +"#NS c #a1b6a4", +"d.q c #a1b79c", +"cMr c #a1c6ca", +"c0b c #a1c8cc", +".kt c #a1ccf5", +"eEU c #a1cdc9", +"bvN c #a1d08a", +"cB1 c #a1d2de", +"eTy c #a1d5d9", +"cjw c #a1d7da", +"hUj c #a1dabc", +"ceW c #a1e4fd", +"ceV c #a1e4fe", +"ceS c #a1e5ff", +"cnA c #a1e6fb", +"c#F c #a1e6fd", +"cIg c #a1e6ff", +"czI c #a1e7ff", +"czJ c #a1e8ff", +"dQB c #a1e9f3", +"cDP c #a1e9ff", +"im5 c #a1ebd3", +"fie c #a1f5e2", +"eb6 c #a1f5fd", +"hLp c #a25036", +"h1e c #a2543c", +"hb7 c #a25942", +"jVW c #a26226", +"hm7 c #a2624a", +"jS6 c #a2642c", +"jql c #a26537", +"jV0 c #a26629", +"hjo c #a26651", +"g2e c #a26655", +"hWM c #a26724", +"#Ge c #a2672e", +"dfh c #a26b41", +"##1 c #a26c32", +"jDW c #a26e30", +"ekc c #a26e34", +"jjs c #a26e39", +"gT9 c #a26e60", +"jaT c #a26f2f", +".9P c #a26f35", +"#5z c #a26f36", +"f8h c #a27230", +".Tr c #a27338", +"ej. c #a27345", +"gu9 c #a27438", +".yq c #a2743f", +"dfA c #a27444", +"dxV c #a27545", +"#Yn c #a2763d", +"eeu c #a27648", +".00 c #a2773d", +".9o c #a2773e", +".4M c #a2773f", +"d6V c #a2784a", +"#c. c #a2793f", +"f.d c #a27941", +"#Gj c #a27942", +"##. c #a2794a", +"h80 c #a27a44", +".Rh c #a27b43", +".WG c #a27c46", +"#bu c #a27c4d", +"#j7 c #a27d49", +"a9t c #a27e48", +".SN c #a27e4a", +"alb c #a27f40", +"g6r c #a27f46", +"a5. c #a27f47", +".4e c #a27f48", +".Tc c #a27f49", +"bt0 c #a2803b", +"#DT c #a2803e", +"#pd c #a28045", +".2f c #a28049", +"cpP c #a28140", +"a48 c #a28147", +"jsE c #a28148", +"a5m c #a28149", +"clJ c #a2823f", +"iPl c #a2824b", +"a#o c #a28256", +"bCC c #a28341", +"clK c #a28342", +"jvO c #a28347", +".4X c #a28348", +"jwC c #a2834d", +"kMl c #a2834e", +"jGJ c #a2844a", +"iS0 c #a2844c", +"hjB c #a2844e", +"gIN c #a28450", +"chA c #a28544", +"#tU c #a28548", +"#.6 c #a28554", +"kkp c #a28557", +"i.p c #a28653", +"cBH c #a2874f", +"c.u c #a28845", +"jAH c #a2884b", +"hBM c #a28856", +"aFj c #a2893e", +"cdc c #a28946", +"i4B c #a2894d", +"iYT c #a2894f", +"b5F c #a28a45", +"c.s c #a28a48", +"jxS c #a28a50", +"cLK c #a28b43", +"cP6 c #a28b44", +"b0Q c #a28b46", +"b5x c #a28b49", +"bub c #a28b4b", +"cdn c #a28c45", +"chQ c #a28c46", +"bcQ c #a28c4b", +"chG c #a28c4c", +"hSu c #a28c5b", +"cL6 c #a28d43", +"c4G c #a28d44", +"b.m c #a28d4b", +"byp c #a28d4c", +"bp1 c #a28d4e", +"i4z c #a28d52", +"iKd c #a28d55", +"#.J c #a28d57", +"cHH c #a28e43", +"cDt c #a28e45", +"b50 c #a28e49", +"b09 c #a28e4a", +"bhj c #a28e4c", +"a57 c #a28e4d", +"i7# c #a28e53", +".XS c #a28e57", +"cLZ c #a28f45", +"c.R c #a28f4a", +"bV7 c #a28f4b", +"aJH c #a28f4c", +"blN c #a28f4d", +"byq c #a28f4e", +"a50 c #a28f50", +"bg6 c #a28f55", +".R8 c #a28f59", +"cDx c #a2904a", +"byX c #a2904d", +"aXP c #a2904e", +"aK1 c #a2904f", +"aPh c #a29050", +"a51 c #a29051", +"b.b c #a29055", +"cqn c #a2914d", +"b5X c #a2914f", +"bHt c #a29150", +"c.V c #a29151", +"jah c #a29155", +"i7. c #a29156", +".Dv c #a2915b", +"cqi c #a2924e", +"aPu c #a2924f", +"cqS c #a29250", +"aLb c #a29251", +"a1Q c #a29257", +"cuO c #a2934f", +"b5W c #a29351", +"cdv c #a29352", +"aTp c #a29355", +"a1S c #a29356", +".R9 c #a2935d", +"c#Z c #a29363", +"bRg c #a29451", +"b5V c #a29452", +"bMr c #a29453", +"cmq c #a29454", +"b57 c #a29457", +"b04 c #a29554", +"bMs c #a29555", +"b56 c #a29559", +"b6d c #a2955a", +"btE c #a2955f", +"cdK c #a2965a", +"c.8 c #a2965b", +"cmu c #a2975b", +"bWg c #a2975c", +"bNL c #a29769", +"cez c #a2996b", +"#3B c #a29a6a", +"dpK c #a29a8f", +"jc. c #a29c6d", +"duc c #a29c98", +".jn c #a29fa0", +".Li c #a2a16f", +"Qt4 c #a2a2a2", +"dkR c #a2a6a1", +"cVX c #a2a780", +".pO c #a2ac44", +"al7 c #a2ae8c", +"eA# c #a2b082", +"eAa c #a2b183", +".kD c #a2b1c7", +"ez5 c #a2b489", +"ez8 c #a2b58b", +"a1D c #a2b697", +"b9J c #a2b6b9", +"ddu c #a2b99c", +"c5p c #a2bda4", +"c0c c #a2beb7", +"ddt c #a2c1ac", +"d.o c #a2c1af", +"beJ c #a2c587", +"aY6 c #a2cd98", +".jJ c #a2dbff", +"hG7 c #a2ddbf", +".kn c #a2dffe", +"d4r c #a2e5e7", +"d4q c #a2e5ea", +"cW. c #a2e5f8", +"cji c #a2e5fd", +"ceU c #a2e5fe", +"ceT c #a2e5ff", +"c#o c #a2e6ff", +"cD0 c #a2e7ff", +"czK c #a2e8ff", +"czL c #a2e9ff", +"e3# c #a2eaf0", +"h.e c #a3553a", +"g19 c #a35f4b", +"dJN c #a36346", +"ixS c #a36540", +"hjk c #a3654c", +"jVX c #a3662d", +"jno c #a3673c", +"fkQ c #a36925", +"jYf c #a3692c", +"j7i c #a3692f", +"ctc c #a36f33", +"jQt c #a36f35", +"juX c #a37034", +"igl c #a37060", +"iP4 c #a37130", +"hIs c #a37158", +"kF6 c #a37248", +"dLf c #a3733a", +"huC c #a37537", +"h#U c #a37539", +"dxW c #a37545", +"kay c #a3763c", +"##6 c #a3773c", +".9j c #a37742", +"dSR c #a37748", +"fH0 c #a3783c", +"#g9 c #a3783f", +"dtD c #a37848", +"##O c #a37a40", +"d6Y c #a37a4c", +"d6X c #a37a4d", +"jXQ c #a37b3d", +".Cf c #a37b42", +"#ey c #a37b43", +"dxQ c #a37c4a", +".Mf c #a37d44", +"iX2 c #a37d62", +".JY c #a37e45", +"dKr c #a37e4f", +"dG6 c #a37f43", +"#pc c #a37f45", +"a03 c #a37f49", +"gty c #a37f4a", +"bVE c #a3803a", +"##J c #a38048", +"ba8 c #a38050", +"aJR c #a3813a", +"hf4 c #a38147", +"#7q c #a38158", +"a.3 c #a38243", +"gE1 c #a38248", +"bbN c #a3824e", +"cGU c #a3833f", +"chz c #a38341", +"j01 c #a38348", +".Yh c #a3834c", +"a8M c #a38353", +"cF5 c #a38357", +".BN c #a3844d", +"cCI c #a38542", +"cGX c #a38543", +"cCH c #a38544", +"apf c #a3854e", +"gMD c #a38550", +"aOw c #a38553", +"cxB c #a38558", +"b5C c #a3863e", +"cCJ c #a38643", +"cCK c #a38644", +"dlE c #a38649", +"dgN c #a3864a", +"iVN c #a3864e", +"it. c #a3864f", +"a9q c #a38650", +"acT c #a38743", +"cyw c #a38745", +"bt2 c #a38746", +"jiV c #a3874c", +".vh c #a38751", +"ibk c #a38753", +"cyx c #a38847", +"clM c #a38848", +"jp# c #a3884c", +"jiM c #a3884d", +"bbL c #a38854", +"#bx c #a38855", +"hVN c #a3885a", +"aSj c #a3893b", +"cCM c #a38945", +"jiX c #a3894d", +"jo5 c #a3894f", +"in8 c #a38954", +"hcc c #a38955", +".1. c #a3895a", +"aFi c #a38a41", +"iYU c #a38a50", +"bkG c #a38a53", +".yC c #a38a54", +"hIz c #a38a5a", +"c.D c #a38b46", +"asZ c #a38c40", +"cZr c #a38c45", +"b5I c #a38c46", +"b5y c #a38c49", +"jc2 c #a38c50", +"jVJ c #a38c54", +"h1x c #a38c5a", +"cL0 c #a38d41", +"cQo c #a38d43", +"cdm c #a38d46", +"c.r c #a38d4b", +"clR c #a38d4d", +"jal c #a38d52", +".ZA c #a38d55", +"h7x c #a38d5a", +"igv c #a38d5b", +"h4A c #a38d5c", +"aFh c #a38e44", +"cU4 c #a38e45", +"cZU c #a38e46", +"b0F c #a38e4c", +"a55 c #a38e4d", +"jc1 c #a38e51", +"i4y c #a38e53", +"j2M c #a38e56", +"a1H c #a38e57", +"#dt c #a38e5a", +"cHI c #a38f46", +"cZT c #a38f47", +"c.T c #a38f49", +"c.S c #a38f4a", +"b1# c #a38f4b", +"aTy c #a38f4d", +"bcK c #a38f4e", +"cpV c #a38f4f", +"i7a c #a38f52", +"blA c #a38f53", +"#V. c #a38f66", +"cL5 c #a39049", +"b5Z c #a3904b", +"dvr c #a3904c", +"dcu c #a3904d", +"b.l c #a3904e", +"aTz c #a3904f", +"aK0 c #a39050", +"bQ1 c #a39051", +"cHG c #a39149", +"cm# c #a3914c", +"cUK c #a3914d", +"b51 c #a3914e", +"bQ3 c #a3914f", +"aPf c #a39150", +"i9H c #a39155", +"cz# c #a3924b", +"cm. c #a3924c", +"cuY c #a3924d", +"cuX c #a3924e", +"dr# c #a3924f", +"dzM c #a39250", +"bHs c #a39251", +"c9w c #a39252", +"aPd c #a39253", +"b.f c #a39254", +"i9F c #a39257", +"cuG c #a3934f", +"cqR c #a39350", +"dzN c #a39351", +"dvq c #a39352", +"cQy c #a39353", +"c9y c #a39354", +"aXI c #a39355", +"aXC c #a3935a", +"cLQ c #a39450", +"cuL c #a39451", +"c.P c #a39452", +"cdw c #a39453", +"aTq c #a39455", +"cQz c #a39456", +"aXD c #a39459", +"aXE c #a3945a", +"bk6 c #a3945e", +"cHx c #a39553", +"ch5 c #a39554", +"cqx c #a39654", +"cmj c #a39655", +"b05 c #a39656", +"cqK c #a3965b", +"b6c c #a3965c", +"bpy c #a39660", +"bUI c #a39661", +"bRh c #a39756", +"bV4 c #a39757", +"cdI c #a3975a", +"cdL c #a3975b", +"cMP c #a39768", +"cie c #a3985d", +"cmz c #a3985e", +"je0 c #a39a67", +"cPe c #a39a8d", +".GA c #a39c6a", +"bWj c #a39d68", +"c7P c #a39d98", +"df4 c #a39e93", +"cIq c #a39f75", +".br c #a3a3a3", +"#U6 c #a3a57f", +"ap3 c #a3ac8b", +"btM c #a3af87", +"al6 c #a3af8f", +"bpG c #a3b18a", +"dvE c #a3b49c", +"c5w c #a3baa2", +"axS c #a3bda9", +"aUP c #a3c590", +"c0V c #a3c6b7", +"aDM c #a3ce9d", +"ezD c #a3ced2", +"ezC c #a3cfd4", +"bnx c #a3d087", +"eOB c #a3d8d5", +".kp c #a3d8fc", +".rP c #a3daa8", +"hAc c #a3dcbf", +"eEn c #a3dce5", +"hXj c #a3ddbf", +"h0s c #a3dec0", +"ccs c #a3dfec", +"cjv c #a3e3ee", +"cnG c #a3e5f1", +"cjb c #a3e6ff", +"ghp c #a3e7c1", +"cMF c #a3e7ff", +"cD1 c #a3e8ff", +"cIm c #a3e9ff", +"g4J c #a3eacf", +"e3a c #a3eaf1", +"ipy c #a3ebd3", +"elH c #a3edf6", +"fmq c #a3f3e1", +"fZW c #a3f5d3", +".rn c #a3ffe0", +"cAU c #a45127", +"i5T c #a4512d", +"b3r c #a45320", +"hOX c #a45439", +"iRQ c #a45531", +"gMr c #a4553b", +"jiE c #a4612a", +"hYd c #a4644f", +"j0B c #a46623", +"jQw c #a4662f", +"kvB c #a46834", +"hfP c #a46951", +"jV1 c #a46a2e", +"jTs c #a46a2f", +"j0z c #a47130", +"jKZ c #a47136", +"#Q6 c #a47138", +"kat c #a4733b", +"kas c #a47344", +"dHb c #a4743b", +".7p c #a4753a", +"h0V c #a4765b", +"dPi c #a4773b", +"hJV c #a4773d", +"grg c #a4783b", +".65 c #a47940", +"dkz c #a47949", +"iKi c #a47a3d", +"jpB c #a47a3e", +"fo0 c #a47a3f", +".2K c #a47a41", +".BA c #a47a42", +"d60 c #a47a4d", +"#eE c #a47b40", +".HX c #a47b41", +"dpb c #a47b4d", +"igq c #a47b63", +"jSX c #a47c3f", +"d6W c #a47c4e", +".Hf c #a47d45", +".GT c #a47e4e", +".Mk c #a47f45", +"a9w c #a47f4d", +"bfI c #a47f4e", +"cXZ c #a47f50", +"cOH c #a47f51", +"cTc c #a48052", +"aA9 c #a48144", +"cF1 c #a48150", +"dGk c #a48152", +"aA7 c #a4823d", +"aN9 c #a48245", +"cOI c #a48255", +".SE c #a4825c", +"chy c #a4833f", +".2V c #a48348", +"ct9 c #a48442", +"gB# c #a4844e", +"cF6 c #a48458", +"bt1 c #a48543", +"cCG c #a48544", +"cCF c #a48545", +"i.q c #a48550", +"kPs c #a48552", +"cG. c #a48556", +"cF8 c #a48557", +"cF7 c #a48558", +"#2l c #a4855b", +"cGY c #a48643", +"cGW c #a48645", +"bpM c #a48647", +"iJz c #a4864f", +"cgC c #a48655", +"aSm c #a4873f", +"aN5 c #a48740", +"cGZ c #a48744", +"#DU c #a48745", +"jo6 c #a4874b", +"aOa c #a48751", +"cCL c #a48845", +"clL c #a48847", +"#kx c #a48851", +"aJY c #a48852", +"krh c #a48855", +"#gv c #a48857", +"cHr c #a48941", +"cyy c #a48948", +"#DQ c #a4894d", +"hYu c #a48955", +"cu# c #a48a4a", +"jf1 c #a48a4e", +"blo c #a48a50", +"#gz c #a48a53", +"aSk c #a48b3f", +"cP5 c #a48b43", +"dqH c #a48b44", +"c.B c #a48b45", +"b5G c #a48b46", +"jc7 c #a48b4f", +"bpD c #a48b51", +"du7 c #a48c45", +"du8 c #a48c46", +"aWD c #a48c48", +"byl c #a48c4a", +"iqH c #a48c56", +"h7y c #a48c5a", +"b5A c #a48d4b", +".3a c #a48d5d", +"cU3 c #a48e44", +"chZ c #a48e47", +"bpO c #a48e50", +"i1I c #a48e54", +"c9u c #a48f48", +"b0G c #a48f4d", +"bQY c #a48f4e", +"cQn c #a49045", +"cl8 c #a4904b", +"bhc c #a4904f", +"bQ2 c #a49050", +"cpU c #a49051", +"bcD c #a49055", +"j2K c #a49059", +"aAW c #a49149", +"awY c #a4914a", +"cdz c #a4914b", +"cdA c #a4914c", +"c.U c #a4914d", +"dhx c #a4914e", +"bhb c #a4914f", +"aXO c #a49150", +"bCO c #a49151", +"b.c c #a49154", +"bcE c #a49155", +"bg7 c #a49156", +"cb2 c #a4915e", +"cuZ c #a4924c", +"cV. c #a4924d", +"cdB c #a4924e", +"c4I c #a4924f", +"a56 c #a49250", +"bHr c #a49251", +"aPe c #a49252", +"i9G c #a49256", +"cUP c #a4934d", +"cQt c #a4934e", +"cL4 c #a4934f", +"cqm c #a49350", +"cqF c #a49351", +"cZZ c #a49352", +"cim c #a49353", +"c9x c #a49354", +"cdx c #a49450", +"czc c #a49451", +"c.Q c #a49452", +"c4J c #a49453", +"cHZ c #a49454", +"aTm c #a49457", +"a1R c #a49458", +"bgC c #a4945d", +"cL8 c #a49550", +"cqu c #a49551", +"cy2 c #a49552", +"ch6 c #a49553", +"cdE c #a49554", +"dL9 c #a49555", +"cMa c #a49556", +"bgD c #a4955f", +"cmi c #a49656", +"cQA c #a49659", +"iM2 c #a4965d", +"bcc c #a49661", +"dcA c #a49759", +"c9A c #a4975a", +"cVb c #a4975c", +"bSD c #a49768", +"b58 c #a4985b", +"cdM c #a4995f", +"cif c #a49a5f", +"bP0 c #a49a63", +"cvM c #a49a6b", +"b1k c #a49d66", +"jb6 c #a49f6e", +"dyh c #a49f99", +"dCG c #a4a09a", +"ct3 c #a4a29e", +"jb7 c #a4a474", +".fb c #a4a4a4", +"btL c #a4aa80", +"b4K c #a4aaa7", +"ap2 c #a4ae8f", +"eA. c #a4b183", +"d.u c #a4b294", +"d.w c #a4b394", +"d.s c #a4b69a", +"c0L c #a4b89a", +"d.k c #a4b89b", +"aXn c #a4b99d", +"#3J c #a4bfa3", +"aMi c #a4c07a", +"cnJ c #a4c5be", +".le c #a4c6e7", +"a7r c #a4cf95", +"dZ. c #a4cfbc", +"hwC c #a4d9bb", +"hDG c #a4ddbf", +"e7m c #a4e2e8", +"ceN c #a4e5fe", +"fCg c #a4e6d2", +"cjh c #a4e6fd", +"cQY c #a4e7ff", +"cIh c #a4e8ff", +"dMu c #a4eaf3", +"cMJ c #a4eaff", +"fNg c #a4f7dd", +"jIC c #a5360b", +"juS c #a5491b", +"bFq c #a54f1d", +"bKa c #a55223", +"cSn c #a5532c", +"jNX c #a55725", +"g57 c #a55b47", +"hOA c #a56037", +"hnf c #a5614b", +"jNW c #a5642c", +"hV. c #a56651", +"j0A c #a56926", +"juU c #a5692a", +"iU1 c #a5692b", +"j6C c #a56939", +"hul c #a56956", +"hxO c #a56a55", +"j0K c #a56b2a", +"#sY c #a56b32", +"hxN c #a56b57", +"hx3 c #a56c59", +"jQv c #a56d32", +"hfO c #a56d54", +"ktd c #a56e3a", +"kvD c #a56f3b", +"#Yg c #a57035", +"kAN c #a57141", +"eC7 c #a5722c", +".9M c #a57439", +"hYk c #a5765f", +"#j0 c #a5773c", +"hsg c #a5783c", +"kau c #a5783f", +"dfB c #a57847", +"#cp c #a5793d", +"hBP c #a57a3d", +"dtE c #a57a49", +".22 c #a57b3f", +".LZ c #a57b42", +".Kx c #a57c42", +".WP c #a57c43", +"dOz c #a57c4d", +"jQo c #a57d3f", +".Hg c #a57e45", +".2G c #a57e46", +"i3S c #a57e4d", +".MG c #a57e4e", +".QR c #a57f49", +"bHb c #a5803b", +".Cm c #a58047", +"aAB c #a5804e", +"hcf c #a58145", +"bfH c #a58150", +"cX0 c #a58153", +"aN6 c #a58239", +"j2E c #a58245", +".BH c #a58248", +"cX1 c #a58253", +"clI c #a58340", +".2U c #a58348", +".9i c #a5834a", +"aWN c #a5834d", +"cc0 c #a58440", +"cCE c #a58442", +"ct8 c #a58443", +"axc c #a5844a", +"cyv c #a58544", +"jSS c #a58547", +"jzp c #a5854f", +"#dM c #a58554", +"cKp c #a58556", +"cLa c #a58643", +"cLe c #a58644", +"cGV c #a58645", +"#.1 c #a58652", +"cF9 c #a58659", +"aA1 c #a58737", +"jsF c #a5874c", +"#kt c #a5874e", +"jqS c #a58750", +"ibl c #a58751", +"jUP c #a58756", +"cKo c #a58759", +"atg c #a5884d", +"hFe c #a58852", +"aht c #a58859", +"#.5 c #a5885b", +"c.x c #a58940", +"ag1 c #a58943", +"cG0 c #a58944", +"cG1 c #a58945", +"kxb c #a58950", +"i8V c #a58953", +"jlZ c #a58a4f", +"jc8 c #a58b4e", +"jo1 c #a58b50", +"a5d c #a58b55", +"bgf c #a58b57", +"jf2 c #a58c50", +"aFx c #a58c54", +"aWG c #a58d41", +"cCN c #a58d4b", +"i4C c #a58d50", +"axq c #a58d58", +"du9 c #a58e48", +"jc3 c #a58e51", +"cP8 c #a58f45", +"cZS c #a58f46", +"b5z c #a58f4d", +"b0I c #a58f4e", +"cpT c #a58f50", +"cpS c #a58f51", +"i.o c #a58f5b", +"ibi c #a58f5c", +"chY c #a5904a", +"bVL c #a5904d", +"bMc c #a5904e", +"bVN c #a5904f", +"jam c #a59053", +"iM4 c #a59057", +"c#b c #a59147", +"cH0 c #a5914a", +"cmb c #a5914c", +"aAT c #a5914d", +"bVK c #a5914e", +"bQZ c #a5914f", +"bCM c #a59150", +"bcF c #a59154", +"jai c #a59155", +"aBc c #a59157", +".vl c #a5915c", +"cmm c #a59249", +"ch8 c #a5924b", +"cQr c #a5924c", +"cqE c #a5924d", +"bQ0 c #a5924f", +"byo c #a59250", +"bha c #a59251", +"cuf c #a59252", +"b.d c #a59254", +"aJI c #a59349", +"aJJ c #a5934a", +"cZV c #a5934c", +"cQp c #a5934d", +"cU9 c #a5934e", +"cdC c #a5934f", +"blH c #a59351", +"bp4 c #a59352", +"iKc c #a5935a", +"cUQ c #a5944e", +"cuW c #a59450", +"ch9 c #a59451", +"cuV c #a59452", +"dr. c #a59454", +"dhE c #a59455", +"cy7 c #a5954f", +"cDs c #a59550", +"cL3 c #a59552", +"cuU c #a59554", +"cHV c #a59557", +"iSX c #a5955e", +"cy5 c #a59651", +"cy3 c #a59652", +"cqt c #a59653", +"cQu c #a59654", +"cQc c #a59655", +"cZ4 c #a59656", +"cMb c #a59657", +"cDj c #a59752", +"cqz c #a59756", +"dq6 c #a59757", +"dhD c #a59758", +"cHW c #a59759", +"btD c #a59761", +"cqy c #a59857", +"cVe c #a59859", +"cQv c #a5985b", +"cDG c #a5985c", +"bB0 c #a59862", +"cDC c #a5995c", +"cVa c #a5995d", +"b1h c #a5995e", +"czU c #a5996b", +"czi c #a59a5d", +"cu3 c #a59a5e", +"c.5 c #a59a5f", +"b59 c #a59a60", +"cu0 c #a59b60", +"bRt c #a59b61", +"a#i c #a59c6d", +"bLV c #a59c93", +"cPg c #a59d91", +"#Wj c #a59e75", +"dpw c #a59f93", +"#at c #a5a077", +"cTP c #a5a097", +"b9E c #a5a19c", +".xr c #a5a372", +"#YV c #a5a584", +".#4 c #a5a5a5", +"bQk c #a5a6a3", +"jb8 c #a5a77a", +"a#x c #a5a788", +"dfW c #a5a8a3", +"axF c #a5ab87", +"atW c #a5ad89", +"dvD c #a5ae8d", +"ddB c #a5af8c", +".99 c #a5b291", +"ap0 c #a5b295", +"d.v c #a5b495", +"apZ c #a5b59a", +"a9Y c #a5b68e", +"cwc c #a5c9c7", +"c0j c #a5c9cb", +"c4W c #a5ccd1", +".l. c #a5d1f2", +"d4l c #a5d6d4", +"cnI c #a5d9dd", +".ko c #a5ddfe", +"h3o c #a5debf", +"fqt c #a5e1d8", +"cnq c #a5e7ff", +"cnz c #a5e8fe", +"cvs c #a5e8ff", +"cD2 c #a5e9ff", +"cD5 c #a5eaff", +"eqn c #a5f1fa", +"fJA c #a5f6dd", +".q0 c #a5fcdf", +"gUm c #a64c25", +"bO0 c #a65322", +"gET c #a6532d", +"g6l c #a6542a", +"bO1 c #a65827", +"h1f c #a6634c", +"j0M c #a6641b", +"jYd c #a66626", +"jLy c #a6662a", +"hqy c #a66651", +"#JY c #a6682d", +"iKj c #a66926", +"jDU c #a66a27", +"hEH c #a66a5f", +"hxM c #a66b58", +"kh2 c #a66d39", +"hE4 c #a66d5a", +"kbi c #a66f2a", +"ixU c #a66f47", +"hfN c #a66f56", +"kx4 c #a6703d", +"gTX c #a67062", +"jS2 c #a67135", +"j9L c #a6713a", +"gPZ c #a67165", +"jmA c #a67235", +"hE8 c #a67259", +"jS3 c #a67437", +"#Q5 c #a67438", +".Y7 c #a67439", +"#mL c #a6753a", +"efr c #a67836", +"kdk c #a6793e", +"dkx c #a67947", +"jgC c #a67a3c", +"cxy c #a67b3d", +"fVH c #a67b3e", +"btg c #a67b4f", +"dG8 c #a67d41", +".vW c #a67d44", +"jXP c #a67e40", +"eyo c #a67e41", +"dC6 c #a67e42", +"bsE c #a67e48", +"daw c #a67e4c", +".JH c #a67f47", +"bQT c #a68139", +"bya c #a6813a", +".Hh c #a68147", +"hIB c #a68149", +"c2M c #a68151", +".v0 c #a68249", +".uR c #a6824c", +"c2L c #a68252", +".By c #a68356", +"aFt c #a68447", +"itd c #a68448", +".T# c #a6844c", +"c.g c #a6853f", +"cpO c #a68542", +"gBa c #a6854d", +"gxk c #a6854f", +"bgj c #a68552", +"byc c #a68642", +"cyu c #a68644", +"j2I c #a6864a", +"aJW c #a6864e", +"jUQ c #a68655", +"cLf c #a68743", +"cLc c #a68746", +"j2F c #a6874a", +"jWd c #a6874b", +"ivH c #a6874e", +"hnl c #a6874f", +"jSi c #a68755", +"bgl c #a68762", +"aAO c #a6883f", +"cLg c #a68844", +"k.M c #a6884d", +"alf c #a68852", +"cLh c #a68945", +"it# c #a68951", +".BO c #a68952", +"id5 c #a68953", +"kA8 c #a68955", +"#91 c #a6895a", +"iys c #a68a51", +"aN3 c #a68b3d", +"cdg c #a68b43", +"cpQ c #a68b4b", +"hf3 c #a68b54", +"igx c #a68b56", +"chT c #a68c44", +"knP c #a68c51", +"clX c #a68d44", +"dqI c #a68d45", +"dqG c #a68d47", +"cda c #a68d49", +"j2J c #a68d53", +"id3 c #a68d58", +"cUI c #a68e45", +"cyz c #a68e4d", +"jc6 c #a68e50", +"i4D c #a68e51", +"iM5 c #a68e56", +"in7 c #a68e58", +"igz c #a68e5a", +"cZs c #a68f45", +"cP7 c #a68f46", +"czq c #a68f4b", +"cpR c #a68f50", +"jo4 c #a68f55", +"id2 c #a68f5a", +"hFd c #a68f5d", +"cZR c #a69045", +"dct c #a6904c", +"cug c #a6904e", +"iKe c #a69057", +"iSZ c #a69059", +"cZQ c #a69146", +"cU2 c #a69147", +"bHn c #a6914e", +"b5w c #a6914f", +"b0H c #a69150", +"bcG c #a69154", +"aJK c #a69249", +"cma c #a6924c", +"bMd c #a6924f", +"bHp c #a69250", +"blG c #a69252", +"jaj c #a69255", +"bg8 c #a69256", +"cQs c #a6934e", +"a0W c #a6934f", +"bCL c #a69350", +"bHq c #a69351", +"bCN c #a69352", +"blF c #a69353", +"b.e c #a69354", +"blB c #a69357", +"iM3 c #a6935b", +"jhG c #a6935e", +".09 c #a69360", +"aw1 c #a69449", +"cuT c #a6944c", +"cqh c #a6944e", +"cU8 c #a6944f", +"cZW c #a69450", +"ci. c #a69451", +"cmG c #a69452", +"bp3 c #a69453", +"cue c #a69456", +"aFe c #a6954f", +"cU5 c #a69550", +"cqG c #a69551", +"cdD c #a69553", +"a1r c #a6955e", +"aFg c #a6964d", +"cz. c #a6964f", +"cZE c #a69651", +"cZX c #a69652", +"cV# c #a69653", +"cZY c #a69655", +"dcy c #a69656", +"cQx c #a69657", +"cM# c #a69658", +"iHp c #a6965d", +"cqC c #a69751", +"cy6 c #a69752", +"cml c #a69753", +"czb c #a69754", +"cLP c #a69756", +"dq8 c #a69757", +"cVd c #a69759", +"iKb c #a6975d", +"cmk c #a69855", +"cL2 c #a69856", +"cHw c #a69857", +"dq9 c #a69858", +"dq7 c #a69859", +"cZ3 c #a6985a", +"bxH c #a69863", +"cVW c #a69865", +"b2c c #a69866", +"cqA c #a69957", +"c9B c #a69958", +"dzO c #a69959", +"dmu c #a6995a", +"dL7 c #a6995c", +"cHX c #a6995d", +"cuP c #a69a58", +"c4O c #a69a5b", +"cMc c #a69a5d", +"cHY c #a69a5e", +"cZ2 c #a69a5f", +"cZ7 c #a69b5f", +"cid c #a69b60", +"bWf c #a69b61", +"cdN c #a69c61", +"cqJ c #a69c62", +".j3 c #a69c9d", +"c4M c #a69d61", +"cZ1 c #a69d62", +"aXb c #a69d67", +"czT c #a69e70", +"je1 c #a6a26f", +"dpu c #a6a29d", +".cu c #a6a6a6", +"b9C c #a6aead", +"ez9 c #a6b386", +"d.t c #a6b395", +"c0d c #a6b5a1", +".qg c #a6b657", +"blg c #a6b68e", +"#Z5 c #a6bb9a", +".97 c #a6bca2", +"dz3 c #a6c4b2", +"eu6 c #a6c6b0", +"aQr c #a6ca8e", +"a7Q c #a6cb94", +"cMp c #a6cbcf", +"c9T c #a6ccd0", +".jP c #a6ccf8", +".lR c #a6cee8", +"cIo c #a6d5d5", +"f#T c #a6d9cb", +".jK c #a6dafe", +".qF c #a6dbc5", +"cjc c #a6e6ff", +"cny c #a6e7ff", +"czZ c #a6e8fe", +"cix c #a6e8ff", +"cD3 c #a6e9ff", +"cD4 c #a6eaff", +"elI c #a6f3fb", +".rL c #a6fcdd", +"doy c #a7582b", +"ia1 c #a75a2d", +"iiP c #a75a2e", +"jAw c #a76028", +"iM8 c #a76120", +"jQx c #a7632c", +"g6f c #a7644d", +"hqI c #a7664f", +"jJp c #a76924", +"jL0 c #a76926", +"hJU c #a76a23", +"hEL c #a76b53", +"huk c #a76b57", +"jNQ c #a76c2c", +"hjj c #a76c54", +"jS5 c #a76f33", +"e1n c #a77026", +"jYi c #a77133", +"hfM c #a77158", +"gXY c #a77262", +"jV7 c #a77337", +"j7j c #a77339", +"j7o c #a77437", +".Xc c #a77538", +"gQ# c #a77569", +".7n c #a7773a", +"jDj c #a7783b", +"dTH c #a7783d", +"kav c #a7783e", +".va c #a77941", +".10 c #a77947", +"hyi c #a77a3b", +"#hv c #a77b40", +"gnD c #a77c3e", +"g74 c #a77c3f", +".Hk c #a77c41", +"hWN c #a77c43", +".46 c #a77d40", +"iba c #a77d66", +"dSU c #a77e4d", +"e#E c #a77f4f", +"aFs c #a7803b", +"#b9 c #a78043", +"hjD c #a78247", +".Uo c #a7844c", +"cTd c #a78456", +".GY c #a78551", +"cyt c #a78642", +"aWK c #a7864a", +"iSm c #a7864c", +"h.n c #a7864d", +".0d c #a7864e", +"ax# c #a78742", +"ct7 c #a78744", +"aB. c #a7874c", +"hjC c #a7874d", +"cLb c #a78847", +"cLd c #a78848", +"axd c #a7884b", +"aWO c #a78852", +"cOK c #a7885a", +"#3q c #a78950", +"jtJ c #a78951", +"aAN c #a78a46", +"cPv c #a78a47", +"a0Z c #a78a49", +"jlV c #a78a4d", +"#d6 c #a78a51", +"cBI c #a78a56", +"cLi c #a78b47", +"as7 c #a78b4d", +"ivG c #a78b52", +"a9p c #a78b53", +"#qU c #a78b55", +"hIA c #a78b58", +"a4s c #a78b59", +"aFU c #a78b5e", +"jf6 c #a78c4f", +"iqI c #a78c55", +"#bj c #a78c5c", +"dmb c #a78d44", +"cl4 c #a78d46", +".3D c #a78d51", +"id4 c #a78d5a", +"du6 c #a78e47", +"aFo c #a78e49", +"ii6 c #a78e59", +"aFa c #a78f4f", +"#tt c #a78f52", +"jLF c #a78f53", +".vk c #a78f58", +"aAZ c #a79045", +"aWC c #a79047", +"c4F c #a79048", +"dzs c #a7904a", +"i1M c #a79053", +"ibj c #a7905b", +"#fo c #a7905f", +"c4E c #a79147", +"c9t c #a79149", +"asS c #a7914a", +"c.q c #a7914f", +"jak c #a79154", +"jlT c #a79156", +"cR. c #a7915d", +"hYt c #a7915e", +"h1y c #a7915f", +"aOp c #a79161", +"dcg c #a7924a", +"bVM c #a79250", +"buc c #a79253", +"jan c #a79255", +"#k7 c #a7925b", +"aJL c #a7934a", +"bHo c #a79350", +"byn c #a79351", +"cCO c #a79352", +"bg9 c #a79356", +"iKh c #a79359", +"a5v c #a7935c", +"czt c #a79450", +"d8y c #a79452", +"bcJ c #a79454", +"bcH c #a79455", +"j0m c #a7945a", +"aw0 c #a7954b", +"cU7 c #a7954f", +"cHu c #a79551", +"cmn c #a79552", +"cZA c #a79650", +"cDu c #a79651", +"cql c #a79653", +"c9v c #a79655", +"bp2 c #a79657", +"iVO c #a79661", +"cQF c #a79749", +"cZB c #a79751", +"cqH c #a79752", +"cqj c #a79753", +"cyZ c #a79754", +"cLM c #a79755", +"cZv c #a79756", +"cZF c #a79851", +"cZC c #a79852", +"cy0 c #a79853", +"cuD c #a79854", +"cza c #a79855", +"cmp c #a79857", +"dmw c #a79858", +"cDI c #a79859", +"cHU c #a7985a", +"cM. c #a7985b", +"b7a c #a79866", +"cvb c #a79955", +"cuR c #a79956", +"cDw c #a79957", +"c9C c #a79958", +"cia c #a79959", +"dvs c #a7995a", +"cDF c #a7995b", +"j#u c #a79965", +"cuQ c #a79a58", +"dcD c #a79a59", +"dcC c #a79a5a", +"dmv c #a79a5b", +"dcz c #a79a5c", +"cVc c #a79a5e", +"cZ8 c #a79b5c", +"dhF c #a79b5d", +"cDH c #a79b5f", +"bSB c #a79b6b", +"ciT c #a79b6c", +"c4N c #a79c5e", +"cVf c #a79c5f", +"cZ5 c #a79c60", +"b1i c #a79c61", +"cH4 c #a79d56", +"cdJ c #a79d61", +"b6a c #a79d62", +"cu2 c #a79e63", +"b6b c #a79e64", +"aqd c #a7a074", +"dkP c #a7a29d", +"cVT c #a7a379", +"daT c #a7a39f", +"j#t c #a7a476", +"#RE c #a7a481", +"c75 c #a7a498", +"c3i c #a7a499", +"ama c #a7a784", +".de c #a7a7a7", +"jb9 c #a7ab80", +"d.x c #a7b392", +"bcl c #a7b68d", +"a7R c #a7c993", +"bji c #a7ce9d", +"eEH c #a7cec5", +"b#5 c #a7cf9e", +"a7q c #a7d193", +"dZr c #a7ddd9", +"gzN c #a7e4c5", +"cnH c #a7e4ed", +"crO c #a7e6f7", +"cjg c #a7e6fe", +"d4p c #a7e7eb", +"crP c #a7e7f6", +"cjd c #a7e7ff", +"cVD c #a7e8ff", +"cIk c #a7e9ff", +"cIl c #a7eaff", +"eqq c #a7f1fb", +"eb7 c #a7f5fa", +"i4q c #a8511f", +"itB c #a85224", +"bK# c #a85424", +"iDx c #a85b28", +"bsC c #a85d27", +"iM. c #a86620", +"iAF c #a8663a", +"hb6 c #a8664e", +"jWY c #a86937", +"g95 c #a86a53", +"hLC c #a86b56", +"j0J c #a86d2b", +"iU2 c #a86e2e", +"bkW c #a87030", +"jRa c #a87035", +"iP. c #a8712e", +"jQu c #a87134", +"ia6 c #a8715f", +"g3W c #a8722b", +"i1s c #a87337", +"hfL c #a87359", +"gTT c #a87363", +"isZ c #a87462", +"gEi c #a87469", +"gu8 c #a87530", +"jS4 c #a87536", +"jzP c #a87538", +"#1S c #a87539", +"jSY c #a87739", +".24 c #a87a3c", +"jSE c #a87a42", +"gyR c #a87b3a", +".JU c #a87b4d", +".MV c #a87c41", +"dxU c #a87c47", +"f8j c #a87d3f", +"kdj c #a87d42", +"dfy c #a87d48", +"bCy c #a87e32", +".HY c #a87e42", +"dSS c #a87e4d", +"fEu c #a87f41", +".Fc c #a87f44", +".Fb c #a87f45", +"dXt c #a87f4e", +"jdw c #a8803e", +"hqR c #a88043", +"dC7 c #a88044", +".Ci c #a88045", +".HT c #a88046", +".Rs c #a8804d", +"dST c #a8804f", +"bpd c #a88054", +"hnn c #a88144", +"e#F c #a88151", +".vZ c #a88248", +"iM1 c #a88342", +"h.o c #a88346", +".H1 c #a88349", +".Fh c #a8834a", +"jST c #a88445", +"j0b c #a88446", +"hFf c #a8844b", +".ET c #a88452", +"chx c #a88540", +".En c #a88552", +"byb c #a88640", +"as9 c #a88642", +"jQn c #a88647", +".KE c #a8864c", +".Ta c #a8864e", +".Wx c #a88652", +"a4r c #a88653", +"iNX c #a8874b", +"hce c #a8874e", +"cTh c #a88859", +"#bp c #a88862", +"cPx c #a88947", +"dur c #a88948", +"iBi c #a8894f", +"b9m c #a88955", +"cOL c #a8895a", +"cPz c #a88a46", +"cPy c #a88a48", +"bGw c #a88a4d", +"axe c #a88a50", +"cBO c #a88a5c", +"aWJ c #a88b46", +"cPA c #a88b47", +"ala c #a88b4a", +"iyt c #a88b50", +"asR c #a88c42", +"c.y c #a88c43", +"jlW c #a88c4f", +"ii8 c #a88c56", +"j1V c #a88c5a", +"b5E c #a88d46", +"chU c #a88e46", +"j#v c #a88e53", +"#68 c #a88f4d", +"jc5 c #a88f52", +"#gA c #a88f56", +"iP2 c #a88f57", +"aFk c #a89043", +"#ZE c #a8904d", +"cua c #a89052", +"jr6 c #a89053", +"iYV c #a89055", +"dqJ c #a89149", +"c.l c #a8914d", +"jxT c #a89153", +"ju1 c #a89154", +"ilC c #a8915c", +"czr c #a8924b", +"dv. c #a8924c", +"#a5 c #a8925a", +"cqD c #a89346", +"c4D c #a89348", +"bCK c #a89351", +"jo3 c #a89357", +"iYE c #a8935b", +"#N2 c #a8935c", +"cLY c #a89445", +"cH1 c #a89449", +"aAS c #a89450", +"bym c #a89453", +"bcI c #a89455", +"bb8 c #a89456", +"iV0 c #a89458", +".55 c #a8945e", +"c4j c #a89551", +"cCQ c #a89554", +"cCP c #a89555", +"cud c #a89557", +"blC c #a89558", +"iSY c #a8955e", +"cHF c #a8964c", +"czp c #a89655", +"blE c #a89656", +".AW c #a8965e", +"cZz c #a89751", +"cqk c #a89753", +"ci# c #a89755", +"cu8 c #a89756", +"blD c #a89758", +"aKc c #a8975f", +"aJ2 c #a89760", +"cUT c #a8984e", +"cQE c #a8984f", +"cU6 c #a89852", +"cDi c #a89853", +"cmo c #a89854", +"dcv c #a89856", +"bXt c #a89866", +"aAV c #a89952", +"cuS c #a89953", +"cDk c #a89954", +"cHJ c #a89956", +"cu7 c #a89959", +"cqN c #a8995b", +"cDr c #a89a54", +"cuM c #a89a55", +"cQb c #a89a58", +"cL1 c #a89a59", +"eNE c #a89a5c", +"cdS c #a89a61", +"bca c #a89a62", +"cQG c #a89b4f", +"cqB c #a89b57", +"bRG c #a89b5b", +"dq5 c #a89b5c", +"dhI c #a89b5d", +"dhH c #a89b5e", +"cQw c #a89b5f", +"iP0 c #a89b62", +"bP1 c #a89b64", +"bk8 c #a89b65", +"cy8 c #a89c59", +"cQq c #a89c5a", +"cQB c #a89c5d", +"czo c #a89c5e", +"dhG c #a89c5f", +"c#. c #a89c64", +"c9D c #a89d5e", +"dDY c #a89d5f", +"dcB c #a89d60", +"cmC c #a89d61", +"cZ6 c #a89d62", +"#aK c #a89d67", +"els c #a89e60", +"cMd c #a89e62", +"cmw c #a89e63", +"cdQ c #a89e64", +"b6# c #a8a064", +"cu4 c #a8a065", +"c8e c #a8a094", +"dyr c #a8a299", +"cpI c #a8a59a", +"bVv c #a8a59b", +"bGK c #a8a7a3", +".bo c #a8a8a8", +"b6o c #a8af82", +"cGg c #a8b0b0", +"ah1 c #a8b497", +"ez4 c #a8b587", +"bcm c #a8b68d", +"cVY c #a8b694", +"cV1 c #a8b698", +"bgO c #a8b78e", +"c0F c #a8bb9e", +"cML c #a8bdaa", +"#Rw c #a8c2ac", +"cfe c #a8c7c0", +"eEI c #a8c9bb", +"aZc c #a8cf81", +".pL c #a8d3b6", +".i6 c #a8d7fd", +"hsV c #a8d8b7", +"eJC c #a8dbe2", +"cVJ c #a8e7f9", +"cjf c #a8e7fe", +"cje c #a8e7ff", +"e2Z c #a8e8f0", +"cVC c #a8e8ff", +"cIf c #a8e9ff", +"cIj c #a8eaff", +"cMI c #a8ebff", +"fWU c #a8f2cc", +"hQd c #a9521d", +"bK. c #a95323", +"ca4 c #a95526", +"bTI c #a95c24", +"jLk c #a95c25", +"juT c #a95f21", +"bTH c #a96330", +"koH c #a96a32", +"j0L c #a96b22", +"hIl c #a96c56", +"hYc c #a96c57", +"hV# c #a96c58", +"h0U c #a96d46", +"hsf c #a96f27", +"jTv c #a97033", +"kAI c #a9713c", +"daf c #a97143", +"hYU c #a97240", +"gXX c #a97566", +"hYf c #a97663", +"fHY c #a97736", +"gIa c #a9776b", +"gj1 c #a97833", +"dLi c #a97836", +"j9P c #a9783c", +"#cw c #a9793a", +"#a# c #a97a3d", +"kf0 c #a97b40", +"#mQ c #a97b41", +"in0 c #a97c67", +".E# c #a97d45", +".60 c #a97d46", +"#hm c #a97e40", +"hXW c #a97f66", +".0I c #a98045", +"dtF c #a9804e", +"bL2 c #a98138", +"hyh c #a98144", +".Fd c #a98145", +".zb c #a98146", +".2r c #a98148", +".OE c #a98246", +"b0u c #a9833b", +"hPm c #a98349", +".Ek c #a9834e", +"aET c #a9834f", +".2k c #a98353", +"aJe c #a9844a", +"i6t c #a98451", +"e#G c #a98453", +"hnm c #a98549", +"c2N c #a98555", +"ccZ c #a9863f", +"d23 c #a98647", +"hf5 c #a9864a", +"clH c #a98741", +"bCB c #a98742", +"imX c #a9874a", +"cX2 c #a98758", +"cpN c #a98842", +"#OR c #a9884e", +"gYl c #a9884f", +"jQl c #a98949", +"j8n c #a9894c", +"aJV c #a9894e", +".Tb c #a98951", +"aNv c #a98956", +"bgk c #a98959", +"aSo c #a98a44", +"a00 c #a98a48", +"j3r c #a98a4e", +".yx c #a98a4f", +"kKU c #a98a50", +"iob c #a98a53", +"cBJ c #a98a54", +".v. c #a98a57", +"cOJ c #a98a5b", +"cyS c #a98b42", +"cPw c #a98b4a", +"j2G c #a98b4d", +"jYB c #a98b4e", +"gIO c #a98b53", +"h1z c #a98b54", +"al. c #a98c47", +"kbk c #a98c4f", +"coY c #a98c5c", +"cdf c #a98d44", +"cPB c #a98d49", +"a47 c #a98d4e", +"h7z c #a98d57", +".vd c #a98d5b", +"#51 c #a98d61", +"aFn c #a98e42", +"dma c #a98e45", +"aWI c #a98e46", +"as6 c #a98e47", +"cPC c #a98e4b", +"jiP c #a98e50", +"aBa c #a98e55", +"igA c #a98e58", +"j4l c #a98e5b", +"cLI c #a98f45", +"cdj c #a98f48", +"aF# c #a98f4a", +"chH c #a98f4b", +"jlX c #a98f51", +"jF# c #a98f59", +"dmc c #a99047", +"a0Y c #a9904d", +"jf3 c #a99052", +".3C c #a99054", +"cc7 c #a9914c", +"#3g c #a9914d", +"jc4 c #a99153", +"ioa c #a9915a", +"dqK c #a9924c", +"b0C c #a9924f", +"b0D c #a99250", +"aSh c #a99347", +"dzt c #a9934c", +"b0E c #a9934f", +"jr5 c #a99355", +"ii7 c #a9935f", +"awX c #a9944d", +"cub c #a99456", +"cgy c #a99461", +"czs c #a9954f", +"j48 c #a9955b", +"cuc c #a99658", +"bh. c #a99659", +"cDJ c #a9974f", +"c9i c #a99750", +"dhy c #a99755", +"bB2 c #a99760", +"cQi c #a9984a", +"cUU c #a9984c", +"cZH c #a9984f", +"c4r c #a99853", +"cZG c #a99951", +"aFf c #a99953", +"cZD c #a99954", +"c4k c #a99957", +"cy4 c #a99a54", +"cHy c #a99a55", +"cuE c #a99a56", +"cuF c #a99a57", +"dQe c #a99a58", +"c4l c #a99a59", +"cLO c #a99a5a", +"bcb c #a99a64", +"cy9 c #a99b56", +"cDv c #a99b59", +"dQf c #a99b5c", +"bgG c #a99b66", +"cHK c #a99c5b", +"eND c #a99c5d", +"eXA c #a99c5e", +"dmx c #a99d5e", +"cqM c #a99d5f", +"dD0 c #a99d60", +"cmD c #a99d61", +"jhH c #a99d66", +"cMf c #a99e5e", +"dD2 c #a99e60", +"cHT c #a99e61", +"cij c #a99e64", +"cdR c #a99e65", +"c4R c #a99f60", +"czl c #a99f62", +"cqL c #a99f63", +"c.6 c #a99f65", +"c4P c #a9a063", +"cMe c #a9a064", +"cii c #a9a065", +"c.7 c #a9a066", +"cDO c #a9a15c", +"c4Q c #a9a165", +"b6. c #a9a166", +"cig c #a9a167", +"#q# c #a9a277", +"bVa c #a9a298", +"jhI c #a9a46f", +"ccm c #a9a49f", +"cTQ c #a9a69f", +"aFX c #a9a776", +"QtG c #a9a9a9", +"ctm c #a9aba6", +"ez1 c #a9b587", +"c5o c #a9bb9c", +"c0E c #a9bb9d", +"d.l c #a9c6b2", +"b9Z c #a9c9d0", +".jQ c #a9ccf7", +"aDX c #a9d093", +".jO c #a9d0fa", +".qd c #a9d7bb", +"crT c #a9dade", +"g0I c #a9dec0", +"gO0 c #a9e1c4", +"cnx c #a9e7fe", +"cno c #a9e7ff", +"crN c #a9e8f9", +"cVE c #a9e9ff", +"cDQ c #a9eaff", +"cQ3 c #a9ecff", +".q1 c #a9fada", +"itF c #aa3a0d", +"iox c #aa4717", +"jLm c #aa491b", +"bFp c #aa5524", +"bAW c #aa5722", +"cob c #aa5a2e", +"iOO c #aa5b35", +"iGE c #aa6037", +"h7e c #aa6235", +"iQc c #aa692a", +"hy# c #aa6b51", +"hfV c #aa6b52", +"j5i c #aa6c1c", +"j25 c #aa6c24", +"jS7 c #aa6e30", +"g94 c #aa6e57", +"hxP c #aa6f59", +"hBg c #aa6f5f", +"iVM c #aa702e", +"g6e c #aa705c", +"jVZ c #aa7132", +"#Nw c #aa7234", +".Pf c #aa7335", +".Rw c #aa7437", +"hbY c #aa745c", +"#cl c #aa7537", +".07 c #aa7a3c", +"eaA c #aa7c44", +"jVv c #aa7e3e", +"dfz c #aa7e49", +".X6 c #aa7e4a", +"hUS c #aa7e64", +".48 c #aa7f3f", +"#eX c #aa7f41", +"dSV c #aa7f4d", +"#hl c #aa8141", +"hqS c #aa8142", +".OD c #aa8146", +"bHa c #aa8239", +"jSV c #aa8243", +".Fe c #aa8246", +".Ch c #aa8247", +"cb5 c #aa8248", +"fkS c #aa8344", +".z. c #aa8348", +"hYx c #aa8446", +"e#H c #aa8454", +".EH c #aa854a", +".uS c #aa854b", +"a5# c #aa874b", +".JX c #aa874d", +"clV c #aa8840", +"ct6 c #aa8842", +".4Z c #aa884b", +"ag6 c #aa8a49", +"ac0 c #aa8a4b", +"g2s c #aa8a51", +"ioc c #aa8a52", +"cF0 c #aa8a54", +"kA9 c #aa8a55", +"cTg c #aa8a5a", +"cyT c #aa8b41", +"atb c #aa8b4f", +"ita c #aa8b52", +"iqN c #aa8b53", +"gUr c #aa8b54", +"cTi c #aa8b5b", +"cT6 c #aa8c4b", +"dLa c #aa8c4d", +"a49 c #aa8c4f", +"b5D c #aa8e44", +"cT5 c #aa8e4c", +"#kM c #aa8e53", +"atd c #aa8e54", +"iD9 c #aa8e55", +"cBR c #aa8e5e", +"clS c #aa8f4a", +"jf7 c #aa8f51", +"kgJ c #aa8f52", +"bUM c #aa8f55", +"#63 c #aa8f56", +"hBN c #aa8f59", +"ii5 c #aa8f5a", +"cte c #aa8f60", +"cdh c #aa9047", +"c.A c #aa9048", +"jl4 c #aa9052", +"#tT c #aa9054", +"jTi c #aa9055", +".vi c #aa9057", +"hyf c #aa905a", +"b0B c #aa914d", +"jo7 c #aa9153", +"jlY c #aa9154", +"jlU c #aa9155", +"iV3 c #aa9156", +"axf c #aa9157", +"dhn c #aa9247", +"#Ar c #aa9255", +"jQR c #aa9257", +"cUG c #aa934b", +"#V0 c #aa9351", +"ju4 c #aa9353", +"iV2 c #aa9356", +"#gB c #aa9359", +"igy c #aa935e", +"dmd c #aa944b", +"c4i c #aa944d", +"agZ c #aa9451", +"cyA c #aa9452", +"i1J c #aa9457", +"axg c #aa9458", +"cRb c #aa945f", +"jo2 c #aa9558", +"#YX c #aa955c", +"aWE c #aa964b", +"elg c #aa9652", +"i4E c #aa9657", +"j47 c #aa965c", +".1M c #aa9661", +"c9# c #aa9751", +"d2P c #aa9755", +"cqO c #aa9756", +"bh# c #aa9759", +"cQj c #aa9849", +"cLV c #aa984c", +".LC c #aa9862", +"c4v c #aa9951", +"c4q c #aa9953", +"cqQ c #aa9955", +".VW c #aa995e", +"bgI c #aa9961", +"cH2 c #aa9a50", +"cDp c #aa9a51", +"cDo c #aa9a52", +"c4u c #aa9a53", +"cva c #aa9a55", +"dL6 c #aa9a58", +"dmn c #aa9a59", +"cUS c #aa9b54", +"cDq c #aa9b55", +"cUR c #aa9b56", +"cMg c #aa9b57", +"dhz c #aa9b5a", +"dH3 c #aa9b5c", +"cLR c #aa9c55", +"aAU c #aa9c56", +"cUO c #aa9c5b", +"cil c #aa9c5e", +"bUK c #aa9c68", +"dhA c #aa9d5e", +"eSH c #aa9d5f", +"iHo c #aa9d62", +"bG5 c #aa9d96", +"cH3 c #aa9e55", +"cQD c #aa9e5b", +"dzJ c #aa9e5f", +"dcx c #aa9e60", +"dD1 c #aa9e61", +"bgE c #aa9e67", +"cVg c #aa9f61", +"cu6 c #aa9f62", +"cDE c #aa9f63", +"ade c #aa9f6c", +"dH2 c #aaa063", +"cmB c #aaa064", +"cVV c #aaa071", +"dcH c #aaa162", +"egu c #aaa164", +"cmv c #aaa165", +"cmA c #aaa166", +"cih c #aaa167", +"cu1 c #aaa266", +"cu5 c #aaa268", +"czn c #aaa369", +"dyk c #aaa396", +"dyq c #aaa398", +"jhJ c #aaa472", +"bQe c #aaa49f", +"dCH c #aaa6a1", +"je3 c #aaa87a", +".eu c #aaaaaa", +"bxR c #aaad81", +"#Z3 c #aaad86", +"diC c #aaaf8c", +"diu c #aabe9e", +"aKA c #aac2a7", +"c0f c #aac3ba", +"dzZ c #aac6b6", +"crU c #aac8c3", +".ku c #aad0f5", +"ezB c #aad3d9", +"eEL c #aad4d5", +"h6n c #aadfbe", +"crS c #aae4ee", +"crQ c #aae8f3", +"cnw c #aae9ff", +"izZ c #aaeace", +"cIi c #aaeaff", +"cQ2 c #aaecff", +"fFR c #aaf2d5", +".ro c #aafedb", +"jcP c #ab4214", +"bFn c #ab5425", +"cj1 c #ab5626", +"bKc c #ab5923", +"bAY c #ab5b29", +"c10 c #ab5c34", +"iOP c #ab5c35", +"bot c #ab5e27", +".bv c #ab5fb1", +"hK4 c #ab6639", +"jhg c #ab663b", +"hH9 c #ab6752", +"hju c #ab6d55", +"hZX c #ab6e25", +"gLZ c #ab6e5c", +"jL2 c #ab6f28", +"hSg c #ab6f5a", +"hm9 c #ab7157", +"hSf c #ab715c", +"g2h c #ab715e", +"#CH c #ab7234", +"icF c #ab7327", +"coM c #ab732c", +"hb1 c #ab7359", +"j8j c #ab7430", +"jkY c #ab7433", +"jgA c #ab752f", +"#5A c #ab7536", +"jS1 c #ab7637", +"i0P c #ab763e", +"gMe c #ab7669", +"jaR c #ab772e", +"jXu c #ab773c", +"gZY c #ab7833", +".5b c #ab7839", +"jNx c #ab7938", +"jr# c #ab7939", +"iv# c #ab7954", +"gCK c #ab7d3a", +"h7n c #ab7d69", +"##9 c #ab7e3e", +".7l c #ab8142", +"dPg c #ab8143", +".EF c #ab8145", +".J2 c #ab8146", +"b9l c #ab8147", +".4I c #ab8148", +"dOA c #ab814e", +"#eU c #ab8242", +".Hm c #ab8246", +"#ab c #ab8345", +"jSW c #ab8444", +"hSy c #ab8447", +".za c #ab8448", +".zc c #ab8549", +"dGl c #ab854f", +"eev c #ab8553", +"bCA c #ab863e", +"hjE c #ab8648", +"e5Q c #ab8649", +".ED c #ab864a", +".Oz c #ab874c", +"iyz c #ab884a", +".Wl c #ab884d", +".4Y c #ab894c", +"iVa c #ab894f", +".vc c #ab8955", +".yo c #ab8957", +"id6 c #ab8a51", +"igB c #ab8a53", +"geW c #ab8a54", +"cTe c #ab8b5a", +"a9I c #ab8c49", +"cT7 c #ab8c4b", +"ilE c #ab8c51", +"cDa c #ab8d43", +"j5O c #ab8d50", +"ilD c #ab8d55", +"kJd c #ab8d58", +"aA6 c #ab8e49", +"iBh c #ab8e53", +"#xc c #ab8e58", +"cux c #ab8f47", +"cuw c #ab8f48", +"cU# c #ab8f4d", +"#nE c #ab8f52", +"kpq c #ab8f53", +"a0h c #ab8f5d", +"c.n c #ab904b", +"jiQ c #ab9051", +"a.5 c #ab9055", +"aJM c #ab9143", +"cDd c #ab9146", +"#DR c #ab9152", +".vj c #ab9159", +"hVq c #ab915c", +"cl5 c #ab924a", +"jiU c #ab9254", +"#65 c #ab9257", +"iqL c #ab925b", +"jp. c #ab9355", +"i1L c #ab9356", +"bge c #ab935c", +"in9 c #ab935d", +"asV c #ab944a", +"dhi c #ab944b", +"cqb c #ab944c", +"b5v c #ab944f", +"#ZF c #ab9452", +"i1N c #ab9456", +"#d3 c #ab945b", +"dmg c #ab954d", +"dzu c #ab954f", +"#gC c #ab955b", +"hVp c #ab9561", +"dl7 c #ab964e", +"dl6 c #ab9650", +"cG2 c #ab9651", +"dhk c #ab9750", +"cv# c #ab9752", +"egk c #ab9754", +"i7b c #ab9759", +"juZ c #ab985b", +"c4w c #ab994d", +"cu9 c #ab9954", +"dX2 c #ab9956", +"egl c #ab9959", +".Je c #ab995f", +"iP1 c #ab9960", +"#RH c #ab9962", +"cQg c #ab9a4b", +"cUV c #ab9a4d", +"cZI c #ab9a4f", +"awZ c #ab9a51", +"c4s c #ab9a53", +"c4t c #ab9a54", +"d7B c #ab9a58", +"#hT c #ab9a66", +"cUW c #ab9b4b", +"cMh c #ab9b4d", +"cQf c #ab9b52", +"c9h c #ab9b55", +"dzP c #ab9b5b", +"bWo c #ab9c58", +"dQd c #ab9c5a", +"cUL c #ab9c5c", +"cmE c #ab9c5d", +"aAX c #ab9d52", +"cQe c #ab9d56", +"cZy c #ab9d5a", +"cHv c #ab9d5c", +"dqY c #ab9d5d", +"dUI c #ab9d5f", +"cik c #ab9d62", +"bc# c #ab9d64", +"cZ9 c #ab9e5b", +"cUN c #ab9e5c", +"dD3 c #ab9e5f", +"b9h c #ab9e67", +"cQC c #ab9f5c", +"eIX c #ab9f61", +"dUH c #ab9f62", +"dmt c #ab9f63", +"bGt c #ab9f67", +"cIr c #ab9f6e", +"cVU c #ab9f70", +"ax2 c #ab9f75", +"e6h c #aba060", +"f.D c #aba061", +"dM# c #aba062", +"dQh c #aba063", +"eXz c #aba065", +"c.9 c #aba067", +"f.E c #aba161", +"dQi c #aba164", +"dH1 c #aba165", +"jkJ c #aba16b", +"c9H c #aba263", +"cHS c #aba265", +"dM. c #aba266", +"dH0 c #aba267", +"#D8 c #aba27d", +"ebI c #aba367", +"cdP c #aba368", +"cdO c #aba369", +"at0 c #aba37b", +"czm c #aba46a", +"cGf c #aba49e", +"bQM c #aba69d", +"co9 c #aba9a7", +".IX c #abab77", +".gs c #ababab", +"eAb c #abb281", +"#7w c #abb293", +"bpH c #abb88d", +"ctr c #abbcc0", +"c0U c #abbea3", +"#ko c #abbfa5", +"b28 c #abc6a4", +"c5q c #abc7b2", +".ol c #abcfb4", +"ccH c #abd4dd", +".jN c #abd4fc", +".i7 c #abd6ff", +".lO c #abd7ef", +".jL c #abdafe", +"egL c #abe3d2", +"crR c #abe7f3", +"gk4 c #abe9c4", +"c0r c #abe9ff", +"cMG c #abeaff", +".#t c #ac30ad", +"itD c #ac4c1c", +".aS c #ac4da6", +"gMs c #ac5333", +"hTk c #ac551d", +"bFr c #ac5a2a", +".bS c #ac5aa1", +"cF. c #ac5b2f", +"h.h c #ac623c", +"jQA c #ac662a", +".b5 c #ac67b3", +"jkf c #ac6c3e", +"j27 c #ac6d26", +"jGz c #ac6e26", +"jGw c #ac6f26", +"kDg c #ac713b", +"hO8 c #ac715c", +"g2g c #ac715d", +"jdH c #ac7429", +"gU. c #ac7564", +".e5 c #ac7591", +"jr. c #ac7635", +"jU9 c #ac7638", +"gPW c #ac7663", +"d2U c #ac7839", +"jYj c #ac783a", +"dWo c #ac7861", +"gXW c #ac7968", +"jIg c #ac7a3c", +".02 c #ac7b3c", +"eo7 c #ac7b3e", +"h32 c #ac7b59", +".29 c #ac7c3c", +"#Yo c #ac7c3e", +"jXs c #ac7c40", +"eyi c #ac7d44", +"g#b c #ac7e3a", +".5a c #ac7e3e", +"hVh c #ac7f69", +"dPf c #ac8143", +"dOB c #ac814c", +"dxX c #ac814e", +"dH# c #ac8245", +"dLc c #ac8346", +".JG c #ac834d", +"bVD c #ac843a", +"hID c #ac8445", +"hoz c #ac8446", +".0k c #ac844f", +"kis c #ac8457", +"hFg c #ac8548", +".Cj c #ac8549", +"b5m c #ac863d", +".vY c #ac8649", +".BM c #ac864a", +"dpc c #ac8656", +".vX c #ac874a", +"h5W c #ac874c", +".Hn c #ac884b", +"e#I c #ac8856", +".Ko c #ac8857", +"iGR c #ac894c", +".Qz c #ac894e", +"awM c #ac8952", +".BZ c #ac8956", +"awL c #ac8957", +".yB c #ac8a4d", +"hSx c #ac8a50", +"a5r c #ac8b4b", +"#bv c #ac8b57", +"cD# c #ac8c43", +"gxl c #ac8c54", +"hLR c #ac8c55", +"#xb c #ac8c56", +"cyU c #ac8d44", +"#Ss c #ac8d4c", +"iup c #ac8d4e", +"iGQ c #ac8d51", +"ii9 c #ac8d56", +"ag2 c #ac8e45", +"asP c #ac8e47", +"aFv c #ac8e53", +"#dK c #ac8e54", +"cT8 c #ac8f4e", +"jSR c #ac8f4f", +"#tX c #ac8f52", +"iGO c #ac8f53", +"cHq c #ac9044", +"cU. c #ac904d", +"cT9 c #ac904e", +"k#7 c #ac905c", +"awS c #ac9148", +"#Hr c #ac9150", +"jiR c #ac9152", +"#nk c #ac9157", +"ki# c #ac915f", +"chV c #ac9249", +"dbE c #ac9251", +"apa c #ac9252", +"jsG c #ac9253", +"bB3 c #ac9254", +"aSt c #ac9259", +"jNe c #ac925c", +"cBQ c #ac9261", +"cBP c #ac9262", +"cUF c #ac934a", +"dlu c #ac9350", +"cPD c #ac9351", +"jr4 c #ac9355", +"jiO c #ac9356", +"jnR c #ac935b", +"ckQ c #ac9362", +"hY5 c #ac9372", +"dqL c #ac944c", +"dqS c #ac944d", +"dqR c #ac944e", +"b5u c #ac944f", +"jxV c #ac9453", +"ju2 c #ac9456", +".DM c #ac945a", +"io. c #ac945d", +"c4g c #ac9549", +"cyW c #ac954c", +"dhj c #ac954d", +"bkH c #ac955d", +"ao4 c #ac9647", +"aw3 c #ac9648", +"jxU c #ac9655", +"iV1 c #ac965a", +"aFF c #ac9662", +"dch c #ac974c", +"j2N c #ac975b", +".DS c #ac975d", +"#3p c #ac975e", +"aBp c #ac9763", +"aN0 c #ac984d", +"c9a c #ac9852", +"i9I c #ac9859", +"ju0 c #ac985a", +"io# c #ac9862", +"cQm c #ac994c", +"cDK c #ac994f", +"dcf c #ac9951", +"cuC c #ac9952", +"egj c #ac9954", +"dmm c #ac9955", +"cqP c #ac9956", +"cG4 c #ac9957", +"aXr c #ac9969", +"cUX c #ac9a4a", +"c9j c #ac9a51", +"dce c #ac9a54", +"d2O c #ac9a58", +".XK c #ac9a64", +"cZJ c #ac9b4d", +"cLU c #ac9b4e", +"cHC c #ac9b52", +"c4p c #ac9b54", +"dcd c #ac9b55", +"cmF c #ac9b5a", +"bUL c #ac9b67", +"cE. c #ac9b68", +"aAY c #ac9c51", +"cDn c #ac9c55", +"cHA c #ac9d56", +"cDm c #ac9d57", +"bP3 c #ac9d68", +"cMi c #ac9e53", +"cDl c #ac9e57", +"dmo c #ac9e5f", +"dcS c #ac9e6e", +"e6g c #ac9f5f", +"ftR c #ac9f62", +"bLc c #ac9f66", +"a5y c #ac9f69", +"bgF c #ac9f6a", +"e1N c #aca060", +"dY6 c #aca062", +"ar9 c #aca06b", +"#ku c #aca071", +"c0. c #aca155", +"c4S c #aca15d", +"c4T c #aca15f", +"f.C c #aca161", +"f.F c #aca162", +"dQg c #aca164", +"eD7 c #aca165", +"bxI c #aca169", +"aSR c #aca16a", +"c9I c #aca25f", +"dH4 c #aca265", +"dUG c #aca266", +"jkK c #aca26e", +"dzQ c #aca365", +"cDD c #aca366", +"czk c #aca367", +"dvo c #aca368", +".xG c #aca36d", +"#fq c #aca378", +".nh c #aca43f", +"cDN c #aca45d", +"czj c #aca467", +"dvn c #aca468", +"dvp c #aca469", +"bUX c #aca49e", +"cMj c #aca559", +"c9E c #aca568", +"jhK c #aca675", +"daS c #aca8a4", +"je2 c #acab7b", +"b0m c #acaba1", +".da c #acacac", +"bcn c #acb78b", +"c5x c #acb898", +"d.i c #acba97", +"d.j c #acbb99", +"#aq c #acbc9d", +"bYj c #acc5a0", +"c5r c #acc6b2", +"aMe c #acce95", +"ezz c #acd6dc", +".jM c #acd8fd", +"cwb c #acdbe0", +"eJB c #acdee4", +"g8F c #ace6c8", +"bDE c #ace7fb", +"crw c #ace9ff", +"cMD c #aceaff", +"dVb c #acebf3", +"dQC c #acebf4", +"cMH c #acebff", +"dQA c #acedf6", +".q2 c #acf7d6", +".rM c #acfbd8", +".#C c #ad30ac", +"itA c #ad481c", +"ir# c #ad5120", +"geM c #ad5229", +"bAT c #ad5526", +"g2o c #ad5529", +"ire c #ad5727", +"bO3 c #ad591d", +"bTJ c #ad591e", +"bOZ c #ad5926", +"coa c #ad592a", +"cfG c #ad5b29", +"jxH c #ad5c25", +"bYC c #ad5c26", +"b8k c #ad5c29", +"jLh c #ad5e1e", +"bTG c #ad5f28", +"jbI c #ad5f36", +"cj2 c #ad6032", +"iQ# c #ad6322", +"jhf c #ad6336", +"g54 c #ad6e59", +"g55 c #ad6f5a", +"i0M c #ad702e", +"hxg c #ad7150", +"hBf c #ad725f", +"hBx c #ad7360", +"hEJ c #ad7363", +"jGy c #ad742c", +"jwZ c #ad7431", +"jQ8 c #ad7537", +"jt4 c #ad7834", +"jn9 c #ad7836", +".KC c #ad793b", +"gTU c #ad796a", +"hfK c #ad7a62", +"hn# c #ad7a66", +"#UD c #ad7b3b", +"#pO c #ad7d3c", +"#hp c #ad7d3d", +"#j1 c #ad7e3d", +"jZS c #ad7e43", +"j#x c #ad7e46", +"dX6 c #ad8043", +"dY# c #ad813b", +"kly c #ad8141", +"ilt c #ad816b", +"ib. c #ad826a", +"ekg c #ad833d", +"dfC c #ad834f", +"fSx c #ad8444", +".BL c #ad8447", +"idU c #ad846d", +"bQS c #ad853a", +"bCz c #ad853c", +"hBQ c #ad8546", +".BK c #ad8548", +"bgr c #ad8556", +".EG c #ad8648", +"jgn c #ad8741", +".Hl c #ad8749", +".z# c #ad874a", +"hIC c #ad874b", +"c.f c #ad883f", +".6v c #ad8852", +"clG c #ad8940", +"chw c #ad8942", +"h1B c #ad894b", +".Oh c #ad8a4d", +".EB c #ad8a51", +"j2H c #ad8c4c", +"c7x c #ad8c59", +"apd c #ad8d48", +"#62 c #ad8d49", +"c8v c #ad8d4b", +"ibm c #ad8d53", +".SM c #ad8d59", +"cHo c #ad8e44", +"c8u c #ad8e4b", +"bP5 c #ad8e4f", +".QP c #ad8e58", +"awR c #ad8f47", +"iKa c #ad8f4c", +"cYT c #ad8f4d", +"iMp c #ad8f51", +"iPm c #ad8f52", +"iJB c #ad8f53", +"iX6 c #ad8f54", +"#AB c #ad8f5b", +"aSp c #ad904f", +"#qG c #ad9052", +"iMo c #ad9153", +"iqJ c #ad9159", +"cP4 c #ad9246", +"c.o c #ad924d", +"iKV c #ad9251", +"jf4 c #ad9253", +"aJO c #ad9344", +"dhh c #ad934a", +"aAP c #ad934d", +"b5t c #ad934e", +"jAI c #ad9354", +"jqT c #ad935a", +"h4B c #ad935c", +"kqp c #ad935f", +"cb7 c #ad9361", +"aJQ c #ad944a", +"ahb c #ad9454", +"iZf c #ad9455", +"jo9 c #ad9457", +"kuG c #ad9458", +"bbM c #ad945c", +"hLQ c #ad9461", +"cxC c #ad9463", +"dhd c #ad954b", +"clY c #ad954c", +"iT# c #ad9556", +"dhm c #ad964b", +"dhc c #ad964d", +"dmh c #ad964f", +".ZI c #ad965b", +"c9s c #ad974d", +"dmf c #ad974f", +"cCR c #ad9754", +"i1K c #ad9759", +"jiN c #ad975a", +"jnT c #ad975e", +"dhl c #ad984f", +"cv. c #ad9852", +"blb c #ad985b", +"awU c #ad9952", +"dh# c #ad9953", +"#qg c #ad9962", +"bcr c #ad9964", +"cZK c #ad9a4b", +"d7A c #ad9a58", +"aK. c #ad9a68", +"c4o c #ad9b54", +"c9g c #ad9b55", +"dTB c #ad9b59", +"elh c #ad9b5b", +"cHD c #ad9c4f", +"c9e c #ad9c55", +"c9f c #ad9c56", +"jkI c #ad9c64", +".LB c #ad9c66", +"cLT c #ad9d51", +"fBD c #ad9d5c", +"fxY c #ad9d5e", +"a9M c #ad9d63", +"cHz c #ad9e58", +"c4m c #ad9e5b", +"cLN c #ad9e5e", +"cLS c #ad9f57", +"cZw c #ad9f5e", +"bc. c #ad9f62", +"e6f c #ada060", +"#fj c #ada070", +"e1M c #ada161", +"f.B c #ada162", +"dcw c #ada163", +"dYY c #ada164", +"cVk c #ada253", +"fcQ c #ada262", +"e6i c #ada263", +"dmp c #ada265", +"dhS c #ada274", +"dzK c #ada366", +"eNC c #ada367", +"e2i c #ada368", +"dzL c #ada468", +"dvt c #ada469", +"eSG c #ada46a", +"dY9 c #ada569", +"dmI c #ada57c", +"dY8 c #ada66b", +"dY7 c #ada66c", +"dt2 c #ada79b", +"je4 c #adaa7b", +"bU1 c #adaba8", +"cTm c #adaca9", +"ai# c #adae8f", +"c0D c #adb795", +"b0a c #adb7b6", +"cV0 c #adb898", +"gkg c #adbd94", +"eu7 c #adc2a2", +".mC c #adc8c7", +"ezE c #add1d2", +".oS c #add3ae", +"aIe c #add693", +"eYE c #add9c9", +"ho9 c #addbba", +"c0x c #addbe1", +"c0w c #addfeb", +"eEo c #ade0e8", +"c0v c #ade5f5", +"eJn c #ade7f0", +"cnm c #ade8ff", +"b1F c #ade9fe", +"cd5 c #ade9ff", +"crM c #adeafd", +"cQ1 c #adeaff", +"cQZ c #adebff", +"cVG c #adecff", +"fQJ c #adf5d6", +"bOX c #ae5729", +"bAX c #ae5d2b", +"ca5 c #ae5e29", +"cfH c #ae6030", +"hLr c #ae6552", +"i4m c #ae6626", +"koG c #ae682c", +"jqk c #ae6837", +"j23 c #ae6d22", +"g93 c #ae715b", +"g18 c #ae715c", +"jNB c #ae7330", +"hYb c #ae745d", +"hYe c #ae745e", +"jDR c #ae752b", +"hxR c #ae755e", +"gY# c #ae7562", +"izU c #ae7629", +"g73 c #ae762d", +"hxQ c #ae765f", +"hx2 c #ae7663", +"c7g c #ae7745", +"htH c #ae7767", +"iSb c #ae7836", +"hji c #ae7861", +"j4T c #ae7c3a", +"jFw c #ae7c3c", +"j7f c #ae7d3a", +"ivw c #ae7d68", +"gGu c #ae7e38", +".KD c #ae8142", +"jsB c #ae8243", +"kax c #ae8246", +"bH# c #ae8439", +"bL1 c #ae8539", +"kdn c #ae8548", +".EE c #ae8549", +"ej# c #ae8552", +".Ck c #ae8649", +".9C c #ae8748", +"ccY c #ae883f", +"aJT c #ae8840", +".Va c #ae884a", +".Cg c #ae884b", +".Ej c #ae8853", +"i6s c #ae8855", +".U8 c #ae894c", +"a04 c #ae8950", +"aNu c #ae8953", +"jSU c #ae8a49", +"a02 c #ae8a4e", +".YX c #ae8b4d", +".GX c #ae8b56", +".JB c #ae8b57", +"a01 c #ae8c4d", +"hyg c #ae8c52", +"#bC c #ae8c53", +"icG c #ae8d4f", +"hqQ c #ae8d51", +"iyu c #ae8d52", +"ivI c #ae8d53", +"a05 c #ae8d54", +"iJC c #ae8e50", +"iSn c #ae8e51", +"iE. c #ae8e52", +"git c #ae8e56", +"cTf c #ae8e5d", +"c3H c #ae8f4a", +"#An c #ae8f4d", +".4d c #ae8f54", +".BF c #ae8f56", +"a06 c #ae8f57", +".Ss c #ae8f58", +"#dN c #ae8f61", +"cDb c #ae9045", +"acV c #ae9047", +"aFr c #ae904c", +"cYU c #ae904d", +"cYS c #ae9050", +".U9 c #ae9055", +"cpW c #ae914c", +"dbu c #ae914d", +"iPn c #ae9153", +"#kL c #ae9155", +"jzq c #ae9156", +"##g c #ae915a", +"aoU c #ae9249", +"#Ht c #ae924e", +"cYR c #ae9251", +"iJA c #ae9255", +"j1X c #ae925e", +"aFl c #ae9345", +"c.z c #ae9349", +"apk c #ae9350", +"apb c #ae9352", +"jf5 c #ae9354", +"asQ c #ae944b", +"awT c #ae944c", +"a4t c #ae9460", +"cUa c #ae9554", +"jsH c #ae9556", +"iqK c #ae955d", +"ctf c #ae9564", +"dc# c #ae964d", +"dl9 c #ae964e", +"cti c #ae9661", +"cxG c #ae9664", +"c4h c #ae974b", +"dl8 c #ae974e", +"aAQ c #ae974f", +"dv# c #ae9750", +"iV4 c #ae975a", +"#w3 c #ae975c", +"a#w c #ae9773", +"aN2 c #ae984a", +"dmj c #ae9852", +"iYW c #ae985a", +"hPk c #ae9864", +"cqe c #ae9951", +"dqB c #ae9952", +"j0n c #ae995c", +"hSv c #ae9965", +"aA0 c #ae9a4c", +"cU1 c #ae9a4d", +"cqf c #ae9a52", +"dhp c #ae9a53", +"iKf c #ae9a5f", +"cLW c #ae9b4b", +"cHE c #ae9b4c", +"dqA c #ae9b55", +"dhs c #ae9b56", +"cG3 c #ae9b58", +"#3F c #ae9b6e", +"ebz c #ae9c59", +"cQh c #ae9d4c", +"c#X c #ae9d68", +"dHX c #ae9e5c", +"ebA c #ae9e5f", +"cDL c #ae9f55", +"cHB c #ae9f57", +"bH5 c #ae9f58", +"cQa c #aea060", +"bgH c #aea06a", +"bZy c #aea06c", +"dqZ c #aea163", +"a5x c #aea16a", +"cMO c #aea16e", +"apr c #aea170", +"e6e c #aea262", +"e1O c #aea264", +"dvk c #aea265", +"fcP c #aea363", +"dUD c #aea366", +".Dz c #aea370", +"cVj c #aea457", +"cVh c #aea460", +"dq0 c #aea467", +"dhB c #aea468", +"ebH c #aea469", +"f.A c #aea566", +"e1L c #aea567", +"dq1 c #aea569", +"dvm c #aea56a", +"dq2 c #aea56b", +"cMM c #aea578", +"dhC c #aea66a", +"iEI c #aea66b", +"elr c #aea66c", +"dyp c #aea699", +"c9G c #aea768", +"eqf c #aea76c", +"dq3 c #aea76d", +"jhL c #aea776", +"dmy c #aea86d", +"d3W c #aea86e", +"aq# c #aea882", +"cpD c #aea9a4", +"df3 c #aeaa9d", +"bZO c #aeadaa", +"clv c #aeaea6", +".f# c #aeaeae", +".tT c #aeb27f", +"ddC c #aeb290", +"c5i c #aeb38a", +"bxS c #aeb78a", +"bgP c #aeb98b", +".IR c #aebb91", +"gkf c #aebd93", +"ba. c #aeca84", +"c0e c #aecece", +"eEV c #aed0c6", +"dcV c #aed2d6", +"eEE c #aed3c2", +"c0y c #aed3cf", +"d4n c #aed5cb", +"eu4 c #aedad8", +"eEp c #aee0e6", +"cg0 c #aee5ef", +"cM0 c #aee9fa", +"cnv c #aee9ff", +"c5# c #aeeaff", +"d84 c #aeebf2", +"c0u c #aeebfe", +"cQ0 c #aeebff", +"dMv c #aeecf4", +"cVI c #aeecfe", +"cVH c #aeedff", +"fJB c #aef6d7", +"il3 c #af3d17", +"itz c #af4b1a", +"gYh c #af5328", +"gik c #af5329", +"jLl c #af5923", +"jNY c #af5925", +"hBZ c #af5b23", +"bFm c #af5b29", +"bOY c #af5b2a", +"cfF c #af5d2e", +"bwF c #af5f2c", +"bYB c #af6530", +"h.d c #af684b", +"gQk c #af6b52", +"jQz c #af6c2e", +"g91 c #af6e5a", +".cI c #af6fb8", +"jLY c #af7026", +"#zi c #af7031", +"j4S c #af742d", +"kkf c #af743d", +"gX8 c #af7563", +"i7w c #af7633", +"hO6 c #af7662", +"imV c #af772d", +"jQ. c #af7735", +"cxn c #af7838", +"jVY c #af783b", +"hSj c #af7862", +"jYl c #af7937", +"c2z c #af7945", +"gPV c #af7965", +"jQ9 c #af7a3c", +"jmz c #af7b35", +"gTS c #af7b68", +"gPX c #af7b6c", +"gEj c #af7c70", +"iS1 c #af7d35", +"je8 c #af7e3c", +"j3m c #af7e3d", +"hbX c #af7e65", +".49 c #af803e", +"eC3 c #af8043", +".7o c #af8140", +".H0 c #af8141", +".5c c #af8241", +"#hn c #af8341", +"#eV c #af8342", +"j9N c #af8343", +"ia9 c #af836e", +"i.c c #af836f", +"bH. c #af8438", +"bLZ c #af8538", +"iMv c #af8646", +".Cl c #af8648", +".Vb c #af864a", +"g3X c #af8747", +"jaJ c #af883d", +"fAS c #af8847", +"iEd c #af884a", +"dkA c #af8856", +".yz c #af894a", +"hLS c #af894b", +"acX c #af8a3e", +"h4E c #af8a4d", +".zd c #af8b4d", +"eew c #af8b58", +"huB c #af8c4e", +"dB8 c #af8c54", +"cd. c #af8d44", +"ag5 c #af8d46", +"cc9 c #af8e46", +"#.7 c #af8e58", +"a0g c #af8e59", +"dbt c #af8f4c", +"dbs c #af8f4d", +"ikr c #af8f4f", +"h4C c #af8f55", +"h7A c #af8f56", +"cX3 c #af8f5c", +"cX5 c #af8f5d", +"iWw c #af9050", +"ivN c #af9054", +"igC c #af9055", +"gtz c #af9058", +"cLG c #af9147", +"c.m c #af914a", +"c3G c #af914d", +"jaI c #af914e", +"aSq c #af9151", +"k.N c #af9152", +"iX7 c #af9154", +"#D5 c #af9157", +"cDc c #af9247", +"cYV c #af9250", +"#3k c #af9251", +"jWe c #af9252", +"cCD c #af9255", +"hYv c #af9259", +"iGP c #af9356", +"iBj c #af9357", +"jtK c #af9358", +"itc c #af9359", +"jX. c #af935e", +"cdi c #af944b", +"jc9 c #af9455", +"#ny c #af9459", +"cuy c #af954c", +"aoT c #af954d", +"#qc c #af955b", +"#iq c #af955e", +"kfz c #af9561", +"dl3 c #af964d", +"dve c #af964e", +"cUb c #af9656", +"jiS c #af9657", +"dca c #af974d", +"dcs c #af9750", +"i7d c #af9757", +"jao c #af9758", +"jJA c #af975a", +"#d5 c #af975c", +"ckR c #af9765", +"ctg c #af9766", +"dci c #af984a", +"ap. c #af9851", +"#VZ c #af9856", +"jiT c #af9859", +"bLf c #af985c", +"jnS c #af985f", +"ilB c #af9861", +"coZ c #af9866", +"fBC c #af9956", +"cPE c #af9957", +"bZA c #af9962", +"c9k c #af9a4d", +"dhb c #af9a52", +"dmi c #af9a55", +"i7c c #af9a5b", +"as1 c #af9b4a", +"aSi c #af9b4f", +"dck c #af9b51", +"c9b c #af9b53", +"c8B c #af9b54", +"bpC c #af9b60", +"#RK c #af9b63", +"apq c #af9b70", +"c9l c #af9c50", +"cqg c #af9c54", +"dha c #af9c55", +"aAR c #af9c56", +"dTC c #af9c5a", +".VX c #af9c63", +".5S c #af9c64", +"dPc c #af9d5a", +"cIt c #af9d67", +"#N0 c #af9d6d", +"cqT c #af9e53", +"ckM c #af9e67", +"c4n c #af9f5a", +"d8z c #af9f5f", +"#Ve c #af9f6b", +"a9R c #afa169", +"cUM c #afa261", +"d3N c #afa265", +"bP2 c #afa26b", +"bB1 c #afa26c", +"a9P c #afa36c", +".RV c #afa370", +"bxJ c #afa46c", +"cDM c #afa55c", +"cVi c #afa562", +"d3V c #afa568", +"d3U c #afa569", +"dUE c #afa56a", +"bk7 c #afa56c", +"dvl c #afa66a", +"eD6 c #afa66b", +"dq4 c #afa66c", +"fcO c #afa768", +"dmq c #afa76b", +"dvu c #afa76c", +"dg. c #afa798", +"dcE c #afa86c", +"euM c #afa86d", +"dms c #afa86e", +"bZ2 c #afa89e", +"d8H c #afa970", +"d3Z c #afaa70", +"d3X c #afaa71", +"drj c #afaa85", +"d3Y c #afab72", +"ame c #afab8a", +"cYy c #afab9e", +"cYG c #afafa5", +"bLw c #afafac", +".#j c #afafaf", +"cIp c #afb38f", +"ez0 c #afb889", +"cVZ c #afb895", +"cgT c #afb9ba", +"ggG c #afbc92", +"ggH c #afbd92", +"gnW c #afbd93", +"gke c #afbe92", +"gnV c #afbe93", +"c0z c #afc6b5", +"aUW c #afca85", +"eE2 c #afcbba", +".nO c #afceb7", +"aH6 c #afcf94", +"azx c #afd399", +".i8 c #afd5ff", +"brM c #afd68b", +"b4Y c #afdde8", +"eJv c #afdee3", +"d4s c #afe4e1", +"cvf c #afeaff", +"cMZ c #afebfd", +"cIe c #afebff", +"c0t c #afecff", +".rO c #aff1c0", +"eu1 c #aff3fb", +".rp c #affed6", +"ioy c #b04c19", +"bJ9 c #b05e2c", +"b3o c #b0602c", +"b8l c #b0612c", +"hLo c #b0613b", +"bwE c #b0622e", +"g6i c #b0664a", +"jHt c #b06835", +"jS9 c #b06928", +"#v5 c #b06f2f", +"jS8 c #b0702f", +"iP# c #b0722e", +"i3M c #b0732b", +"j0G c #b0752b", +"g17 c #b07560", +"hSe c #b07661", +"cs3 c #b07733", +"iPc c #b0783e", +"i96 c #b07935", +"#1Y c #b07a38", +"hjh c #b07a63", +"gX7 c #b07a67", +"jR# c #b07b3d", +"hBA c #b07b67", +"jo. c #b07c3a", +"jK0 c #b07d3c", +"hum c #b07d69", +"jTy c #b07e41", +"kaw c #b07f40", +"idP c #b07f6d", +".HZ c #b0803f", +".9Q c #b08141", +".Hc c #b08146", +".Ff c #b08242", +"jG7 c #b08259", +"fYN c #b0833e", +"jBs c #b0835c", +"jvU c #b08460", +".9D c #b08545", +".ZZ c #b08553", +"bVz c #b08636", +"jXO c #b08845", +"iJG c #b08849", +"hno c #b08949", +".BI c #b0894b", +"kiw c #b08950", +".JI c #b08951", +"dtG c #b08957", +"chv c #b08a3e", +"chL c #b08a40", +"hkZ c #b08a4b", +"hTP c #b08a4d", +"dKs c #b08a52", +"ivK c #b08b4f", +"je7 c #b08b51", +"e1p c #b08c4c", +".2d c #b08c51", +"aA8 c #b08d45", +"iBn c #b08d50", +"bZB c #b08d51", +"i.s c #b08e51", +"awN c #b08e52", +".Ow c #b08e5b", +"#i2 c #b08e5d", +"ag4 c #b08f45", +".Qy c #b08f52", +"i0V c #b08f54", +"gpN c #b08f55", +"c7y c #b08f5c", +"c2O c #b0905d", +"a0l c #b09151", +"aFu c #b09152", +".Of c #b09155", +"gIP c #b09156", +"iqO c #b09157", +".8E c #b0915d", +"cLH c #b09247", +"c8t c #b0924f", +"jYC c #b09252", +"hVr c #b09258", +"cHp c #b09347", +"c8w c #b09351", +"cFZ c #b0935a", +"iU6 c #b0937c", +"cyV c #b0944a", +"ax. c #b0944d", +".VP c #b09459", +"jW9 c #b0945f", +"cYW c #b09554", +"cYZ c #b09555", +"dhf c #b0964b", +"iWo c #b09655", +"c3D c #b09656", +"cYX c #b09657", +"dh. c #b0974a", +"chW c #b0974d", +"ag0 c #b0974e", +"cYY c #b09756", +"iNO c #b09757", +"#DP c #b09758", +"bxO c #b0975a", +"#.0 c #b09764", +"dho c #b0984a", +"cZq c #b0984d", +"dqC c #b0984f", +"ak8 c #b09854", +"#VY c #b09856", +"#Hq c #b09857", +"ksF c #b09863", +"cth c #b09866", +"cxF c #b09867", +"cxH c #b09868", +"a.Y c #b0994e", +"aoX c #b09950", +"dhu c #b09951", +"ao9 c #b09952", +"iqM c #b09962", +"cgD c #b09966", +"cLX c #b09a48", +"dcj c #b09a4f", +"dqU c #b09a53", +"cLj c #b09a54", +"dcc c #b09b52", +"dht c #b09b53", +"#3f c #b09b56", +"aK# c #b09b69", +"c4x c #b09c4f", +"dhq c #b09c55", +"dvg c #b09c57", +"#io c #b09c61", +"ahk c #b09c70", +"cZP c #b09d4f", +"c4y c #b09d51", +"dcl c #b09d53", +"awW c #b09d56", +"dhr c #b09d57", +"#2u c #b09d5f", +"#qh c #b09d67", +"c9m c #b09e52", +"c9d c #b09e57", +"awV c #b09e58", +"epx c #b09e5b", +"jr3 c #b09e5f", +"ct# c #b09e62", +"jnU c #b09e65", +"ao5 c #b0a04e", +"dzI c #b0a05d", +"bb9 c #b0a061", +"#tW c #b0a067", +".NU c #b0a068", +"d3M c #b0a15d", +"epy c #b0a161", +"cZx c #b0a261", +"flL c #b0a264", +"dri c #b0a272", +"fcR c #b0a464", +"iHn c #b0a567", +"d8G c #b0a569", +"dY0 c #b0a66a", +"dY1 c #b0a66b", +"e6K c #b0a769", +"dUF c #b0a76a", +"dY5 c #b0a76b", +"flM c #b0a76c", +"eNB c #b0a76e", +"e1P c #b0a86b", +"fpO c #b0a86d", +"eNA c #b0a86f", +"dg# c #b0a898", +"c9F c #b0a96b", +"ezj c #b0a96e", +"dmr c #b0a96f", +"f.7 c #b0a970", +"dhJ c #b0aa6e", +"elq c #b0aa71", +"df7 c #b0aa9b", +"eqe c #b0ab71", +"c3B c #b0acaa", +"bQf c #b0aeab", +".#5 c #b0b0b0", +"ez3 c #b0b582", +"ggI c #b0bc91", +"gnU c #b0bd92", +"#cJ c #b0c4a6", +"dz4 c #b0cbbb", +".ky c #b0cdee", +"caD c #b0cec3", +"cAh c #b0cecb", +"eE5 c #b0d3c3", +"beK c #b0d597", +"dZs c #b0dcd3", +"c0Z c #b0e0e5", +"h9n c #b0e1be", +"gat c #b0e3b1", +"cd8 c #b0e9ff", +"cvd c #b0eaff", +"crL c #b0ebfe", +"crK c #b0ebff", +"fZX c #b0eebc", +"dMt c #b0eef6", +".q3 c #b0f5d1", +"irh c #b14a1a", +"bJ8 c #b15b2a", +"b3n c #b16032", +"hY# c #b16650", +"hS# c #b16855", +"jeA c #b16a3d", +"hfY c #b16b4c", +"gUh c #b16b4f", +"hbP c #b16d59", +"jJq c #b17025", +"jQy c #b17031", +"g92 c #b1735d", +"hNb c #b17529", +".do c #b177bc", +"hLB c #b17863", +"jQ6 c #b1792f", +"i2d c #b17934", +"hO5 c #b17965", +"gXT c #b17b65", +"foY c #b17c33", +"jB. c #b17c36", +"##2 c #b17c3c", +".MU c #b17d3b", +"j7k c #b17d40", +"jSZ c #b17e3d", +"efk c #b17e3e", +"jS0 c #b17f3d", +"j2i c #b17f3f", +"gKo c #b18037", +"eaz c #b18143", +"jTA c #b18144", +"jMu c #b18153", +"j2h c #b18243", +".5# c #b18340", +"#hu c #b18346", +"hAJ c #b1836d", +"jVu c #b18441", +"etG c #b1854d", +"dSW c #b18651", +".W. c #b18652", +"bVC c #b1873a", +"bL0 c #b1873b", +"i83 c #b1874e", +"bQQ c #b1883b", +"b0t c #b1883c", +"bQR c #b1893b", +"dHa c #b1894a", +"ccX c #b18b41", +"fgF c #b18c4a", +".J3 c #b18c4c", +".yA c #b18c4d", +"dax c #b18c56", +".yy c #b18d4f", +"g6s c #b18d50", +"iyx c #b18d51", +".2e c #b18d52", +"i3R c #b18d53", +"aJf c #b18d55", +"e#J c #b18d5a", +"b4s c #b18e53", +"aNt c #b18e55", +"hYw c #b18f53", +"aAy c #b18f5a", +".8B c #b18f63", +"jVm c #b1904e", +"ivM c #b19055", +".BG c #b19058", +"bkN c #b19068", +"acY c #b19149", +"cX4 c #b1915d", +"#i1 c #b19164", +"iVb c #b19255", +"#gm c #b19261", +"cP2 c #b19349", +"dgB c #b1934e", +"dgA c #b1934f", +"iPo c #b19355", +"i.r c #b1935a", +"kyr c #b1935c", +"cP3 c #b19448", +"jCh c #b1945a", +"jSQ c #b19553", +"c3F c #b19555", +"a.4 c #b19556", +"gME c #b1955b", +"jZw c #b1955f", +"cUE c #b1964b", +"dm# c #b1964c", +"c3K c #b19655", +"#tP c #b19657", +"jo8 c #b19658", +"dqD c #b1974e", +"#qD c #b19759", +"#qw c #b1975c", +"b4t c #b19762", +"aFp c #b1984d", +"cuz c #b1984f", +"cl6 c #b19850", +"dqQ c #b19851", +"#Sm c #b19858", +"jDt c #b19859", +"#kN c #b1985d", +"keJ c #b19866", +"cqc c #b19951", +"cC1 c #b19953", +"#Hs c #b19957", +"aoW c #b19a50", +"cl7 c #b19a51", +"cG5 c #b19a56", +"iQN c #b19a5a", +"i19 c #b19a5b", +"b9n c #b19a66", +"cxD c #b19a68", +".uZ c #b19a6b", +"ak3 c #b19b49", +"acP c #b19b4f", +"dl4 c #b19b53", +"#6W c #b19b54", +"dqT c #b19b55", +"d77 c #b19b56", +"cUc c #b19b5a", +"#az c #b19b65", +"co0 c #b19b68", +"dqw c #b19c54", +"jX0 c #b19c5f", +"bXr c #b19c64", +"agX c #b19d4a", +"c4C c #b19d4e", +"dvf c #b19d57", +"cZL c #b19e4d", +"c9c c #b19e57", +"c4z c #b19f53", +"c9. c #b19f58", +"dPb c #b19f5e", +"#Vi c #b19f67", +"c9n c #b1a057", +"as0 c #b1a152", +"asY c #b1a155", +"cvc c #b1a157", +"dcm c #b1a15a", +"bH9 c #b1a15e", +"dL5 c #b1a15f", +"fFb c #b1a161", +"bLe c #b1a168", +"cnd c #b1a16d", +"c9o c #b1a259", +"#Ku c #b1a274", +"cro c #b1a36f", +"d3P c #b1a66a", +"bxK c #b1a66d", +"c9Q c #b1a67a", +"#RF c #b1a67c", +"e6d c #b1a769", +"f.G c #b1a76b", +"dYZ c #b1a86c", +"dY4 c #b1a86d", +"e6j c #b1a96d", +"eD5 c #b1aa6f", +"f.6 c #b1ab71", +"bZN c #b1aba6", +"ez2 c #b1ae77", +"dli c #b1aeac", +".#F c #b1b1b1", +"#.# c #b1b288", +"cyo c #b1b5ab", +"atX c #b1b697", +"bco c #b1b885", +"dvC c #b1b89b", +".Lh c #b1ba89", +"gc2 c #b1bb8e", +"ezZ c #b1bc8d", +"grv c #b1bc90", +"gnX c #b1bc91", +"ggF c #b1bd90", +"grw c #b1bd91", +"cAi c #b1c2b7", +".jb c #b1cbfa", +"eE3 c #b1cfbd", +".jR c #b1cff8", +".it c #b1d1fd", +"eEW c #b1d4cd", +".l# c #b1d7f2", +"cw. c #b1e9f5", +"cnu c #b1e9ff", +"cv9 c #b1eaf7", +"fif c #b1ebd7", +"cVF c #b1ebff", +"cDZ c #b1ecff", +"d87 c #b1f5f9", +"fNh c #b1f8d8", +".rN c #b1facf", +"ird c #b25526", +"iq9 c #b2591f", +"i9x c #b25e26", +"kqX c #b25f21", +"iGq c #b26116", +"ca6 c #b26331", +"bsA c #b26332", +"kta c #b26526", +"cJv c #b26538", +"b3p c #b2662f", +"jL1 c #b27025", +"j3b c #b2721c", +"g56 c #b2735f", +"jJn c #b2762a", +"i1u c #b2772d", +"jLX c #b2782b", +"jOz c #b27833", +"g96 c #b27963", +"hBm c #b27964", +"cBy c #b27a3f", +"hO7 c #b27a65", +"hIm c #b27b65", +"hm3 c #b27c65", +"hBy c #b27c69", +"jP8 c #b27d37", +"eHW c #b27e30", +"#mM c #b27e3c", +"gTP c #b27e66", +".d6 c #b27ebe", +"jgy c #b27f36", +"hbZ c #b28068", +".Z. c #b2813f", +".9E c #b28140", +"gQa c #b28276", +"#ht c #b28547", +"dCc c #b2854b", +"bsV c #b2855a", +"jrf c #b28756", +"d61 c #b28956", +"dLg c #b28a4b", +".Td c #b28a51", +"c.e c #b28b3f", +"bQP c #b28b40", +"bG9 c #b28b43", +"f5k c #b28b48", +".uT c #b28b4c", +"d17 c #b28b57", +"#qM c #b28c4b", +".Mj c #b28c4d", +"iBk c #b28c50", +"dxR c #b28c55", +".W4 c #b28d4f", +".0U c #b28e4f", +".8G c #b28e54", +".Em c #b28e59", +".Jz c #b28e5e", +".EA c #b28f53", +"aJg c #b28f59", +".Og c #b29052", +".LY c #b29053", +".8P c #b29057", +"cc8 c #b29149", +"iMq c #b29153", +".8H c #b2915b", +"awK c #b2915e", +"cX6 c #b2925f", +"aN8 c #b2934c", +"hBO c #b29358", +"dgC c #b29550", +"dbr c #b29555", +"ctb c #b29556", +"iK3 c #b29655", +"i7A c #b29657", +"aB# c #b29659", +"#h5 c #b2965a", +"bgm c #b29677", +"dhe c #b2974d", +"izO c #b29753", +"dbv c #b29754", +"c3E c #b29758", +"#qF c #b29759", +"#qH c #b2975a", +"hPl c #b29760", +"jZx c #b29761", +"dm. c #b2984f", +"dqE c #b29850", +"c3L c #b29856", +"#Ai c #b29857", +"cZp c #b2994e", +"#Hu c #b29958", +"#OK c #b29959", +"#RM c #b29961", +"a4u c #b29962", +"hSw c #b29963", +"a0i c #b29964", +"c4f c #b29a4e", +"dcb c #b29a51", +"#VX c #b29a56", +"dqM c #b29b53", +"ju3 c #b29b5a", +"#ip c #b29b60", +"cxE c #b29b69", +"aKa c #b29b6a", +"db5 c #b29c52", +"dcq c #b29c53", +"dDJ c #b29c55", +"#d4 c #b29c60", +"#qj c #b29c62", +"dc. c #b29d54", +"dDK c #b29d55", +"dqV c #b29d57", +"co1 c #b29d69", +"dhw c #b29e57", +"dl5 c #b29e58", +"dzF c #b29e5a", +"cPF c #b29e5b", +"fIP c #b29e5c", +"#.I c #b29e64", +"ak5 c #b29f4c", +"#6X c #b29f54", +"dgO c #b29f5f", +"j2O c #b29f63", +"j49 c #b29f64", +"cIs c #b29f69", +"asW c #b2a056", +"ftQ c #b2a05e", +"dX1 c #b2a05f", +"j5. c #b2a065", +"bMT c #b2a15f", +"c9p c #b2a257", +"dcn c #b2a25b", +"dG4 c #b2a262", +"b2b c #b2a26e", +"eli c #b2a365", +"egm c #b2a467", +"aOR c #b2a47b", +"fcS c #b2a566", +"d8A c #b2a568", +"ebB c #b2a569", +"f.3 c #b2a669", +"bLd c #b2a66d", +"bZz c #b2a672", +"b1t c #b2a768", +"d8B c #b2a76b", +"bUJ c #b2a76f", +"bcd c #b2a770", +"dmH c #b2a77b", +"d3O c #b2a86c", +"bB5 c #b2a875", +"ebG c #b2a96e", +"dcG c #b2aa6a", +"d3Q c #b2aa6f", +"eIW c #b2aa71", +"e1K c #b2ab6f", +"dY3 c #b2ab70", +"egt c #b2ab72", +"bxQ c #b2ab78", +"f.5 c #b2ac72", +"#7i c #b2ac7b", +"bQu c #b2aca2", +"euL c #b2ad74", +"#fp c #b2ae84", +"bZ3 c #b2aea4", +"bZU c #b2b1ae", +"b5e c #b2b2a8", +".#6 c #b2b2b2", +"eAc c #b2b47e", +"ggJ c #b2bb8e", +"c5j c #b2bb96", +"g#y c #b2bc8e", +"gcZ c #b2bc8f", +"gkh c #b2bc90", +"c5y c #b2bc9d", +"gry c #b2bd8f", +"grx c #b2bd90", +"c0A c #b2bd9d", +"c0M c #b2be9b", +"ddn c #b2c09d", +"b74 c #b2c79e", +".ja c #b2cefc", +"aH5 c #b2d19d", +".i9 c #b2d5fe", +"dZy c #b2d9ca", +"hlC c #b2dcb9", +"eJp c #b2e8ef", +"cz0 c #b2eaff", +"ezy c #b2ebef", +"crJ c #b2ebff", +"cMY c #b2ecff", +".#S c #b33eb6", +"iwg c #b3460d", +"i9c c #b34914", +"j#7 c #b3521a", +"iwd c #b35316", +"irf c #b35725", +"i1y c #b35d21", +"hnu c #b35f22", +"iDG c #b36211", +"i62 c #b3632b", +"iGp c #b36417", +"b3q c #b36430", +"i8o c #b36433", +"bYA c #b3652e", +"gEK c #b37460", +"kI8 c #b37638", +"jJY c #b37743", +"jN8 c #b37933", +"g9Q c #b37962", +"g2f c #b37a67", +"j0H c #b37b2f", +"hU9 c #b37b64", +"hIk c #b37b68", +"e5O c #b37c2c", +"hO4 c #b37c68", +"huj c #b37c69", +"#j6 c #b37d3c", +"gXI c #b37d64", +"hx1 c #b37d6a", +"gOg c #b37e33", +"j4J c #b37e38", +"hm6 c #b37e66", +"gXN c #b37f6a", +"j3# c #b38039", +"iU3 c #b3803f", +"i6o c #b38043", +"gyQ c #b38138", +"i99 c #b3813b", +"#cs c #b3823f", +"jQ0 c #b3833a", +"#eY c #b3833f", +"jVt c #b38341", +".7r c #b38442", +".Fg c #b38544", +"dCb c #b38548", +"#ct c #b38644", +"jTB c #b38648", +"j9O c #b38745", +".Y3 c #b38845", +"b5i c #b38938", +"b0q c #b3893a", +"bVB c #b3893b", +"bVA c #b38a3c", +"dxT c #b38a50", +"j.y c #b38a6c", +"b5l c #b38b3d", +"iVg c #b38b4a", +"kdm c #b38b4d", +".hK c #b38b84", +".7g c #b38c4b", +"iMu c #b38c4c", +"gGv c #b38d49", +"hdF c #b38d4c", +".BJ c #b38d4f", +".JW c #b38d52", +"hYy c #b38e4f", +"chI c #b39048", +"aWL c #b39053", +"dfE c #b3905d", +".LT c #b3915d", +"dfG c #b3915e", +".Sg c #b39160", +"apc c #b3924a", +"axa c #b3934a", +"cpM c #b39350", +"dYc c #b39351", +"i3T c #b3935a", +"cOM c #b3935f", +"c2P c #b39360", +"c.p c #b3944d", +"dgz c #b39451", +"kmZ c #b39458", +"bgi c #b3945d", +".Ys c #b39462", +".BD c #b39463", +"dHy c #b39547", +"kJA c #b3954b", +"jSO c #b3954e", +"iTG c #b39551", +".Oe c #b3955a", +"aA2 c #b39646", +"dPM c #b39647", +"dPL c #b39648", +"dPN c #b39649", +"dHz c #b3964a", +"aN7 c #b3964e", +"dq# c #b39650", +"dlq c #b39651", +"jSj c #b3965f", +"aBg c #b3975e", +"#zQ c #b39760", +"dhg c #b3984c", +"kHV c #b39859", +"#h6 c #b3985b", +"dqF c #b3994f", +"c3J c #b39958", +"#wX c #b39959", +"krA c #b3995a", +".fh c #b399da", +"dqv c #b39a4f", +"#ZC c #b39a57", +"c3I c #b39a5a", +"#tN c #b39a5b", +"#nD c #b39a5d", +"jHV c #b39a61", +"du4 c #b39b52", +"dDO c #b39b53", +"c8A c #b39b58", +"iCA c #b39b59", +"#DS c #b39b5b", +"#qB c #b39b5d", +"cqa c #b39c53", +"dva c #b39c56", +"#ZD c #b39c59", +".NK c #b39c5c", +"#w1 c #b39c5e", +"#6h c #b39c62", +"c88 c #b39d52", +"cqd c #b39d55", +"dDI c #b39d56", +"dgF c #b39d5a", +"ckN c #b39d66", +".Zb c #b39d67", +"cQk c #b39e49", +"aN1 c #b39e51", +"a.X c #b39e54", +"dzD c #b39e58", +"dby c #b39e59", +"fg5 c #b39e5a", +"cUd c #b39e5d", +"jOd c #b39e5f", +".kS c #b39e66", +"ckW c #b39e68", +"co2 c #b39e69", +"ckS c #b39e6a", +"dcp c #b39f55", +"flK c #b39f5b", +"dyH c #b39f5e", +"dDV c #b3a05c", +"ao6 c #b3a14f", +"dco c #b3a158", +"dPa c #b3a160", +"dK8 c #b3a161", +"dK9 c #b3a261", +"dG3 c #b3a262", +"dQc c #b3a360", +".LA c #b3a368", +"bGz c #b3a36e", +"ak4 c #b3a451", +"eue c #b3a563", +"fcT c #b3a567", +"b4p c #b3a571", +"eud c #b3a666", +"iHq c #b3a669", +"eyQ c #b3a766", +"fhu c #b3a76a", +"btK c #b3a770", +"atk c #b3a778", +"fdg c #b3a86e", +"f.4 c #b3a96c", +"eSF c #b3aa6d", +"d3T c #b3aa70", +"dyl c #b3aa9c", +"d8F c #b3ab70", +"eIV c #b3ab72", +"akf c #b3ab7b", +"axY c #b3ab84", +"dY2 c #b3ac73", +"fdh c #b3ad74", +"ap9 c #b3ad8a", +"elp c #b3ae76", +"adv c #b3ae8d", +"eqd c #b3af76", +"cTR c #b3b2aa", +"Qtw c #b3b3b3", +"ctZ c #b3b5b6", +"ggK c #b3b98a", +"g#B c #b3ba8a", +"g#z c #b3ba8c", +"blh c #b3bb89", +"gc1 c #b3bc8d", +"gki c #b3bc8e", +"gcY c #b3bc8f", +"g#v c #b3bd8e", +"gkd c #b3bd8f", +"ddy c #b3be9e", +"#ar c #b3bf9d", +"crV c #b3c0af", +"bYi c #b3c399", +"dz5 c #b3cbbc", +"c5d c #b3cec5", +".j# c #b3d0fd", +".iu c #b3d0ff", +"beC c #b3d199", +"aZi c #b3d58d", +"dEN c #b3d5c8", +"aDW c #b3d696", +"b40 c #b3dae2", +".lP c #b3dbed", +"c5c c #b3dee6", +"bIo c #b3e8fc", +"ixg c #b3e9ca", +"eb8 c #b3ebdf", +"cm4 c #b3ebfe", +"czC c #b3ecff", +"c5a c #b3eeff", +"ezw c #b3f3fa", +".#f c #b41fb4", +"i9b c #b44a13", +"iwc c #b45315", +"jfR c #b4541b", +"iow c #b45a20", +"i61 c #b45f27", +"bTK c #b46028", +"bFl c #b4622f", +"b8m c #b46531", +"bFo c #b46635", +"bAS c #b46733", +"iDY c #b46b40", +"g6g c #b46e51", +"hbO c #b47360", +"iQQ c #b47527", +"kF0 c #b4763d", +"jHc c #b47745", +"jaL c #b4782a", +"jMC c #b47845", +"ht3 c #b47863", +"gQe c #b47867", +"gQf c #b47968", +"#pQ c #b47a38", +"iSa c #b47b33", +"hBk c #b47b66", +"gYa c #b47b68", +"jOw c #b47c39", +"g10 c #b47c64", +"hxL c #b47c69", +"hxS c #b47d68", +"hBw c #b47d6a", +"hBh c #b47d6d", +"gXS c #b47e67", +"jCE c #b4803b", +"hqu c #b4816b", +"k.J c #b48237", +"jIf c #b4823e", +"d7G c #b48241", +"jRc c #b48245", +"gTR c #b4826d", +".5. c #b4833f", +"jBa c #b48541", +".vb c #b48548", +"hbW c #b4856e", +"kE5 c #b4863a", +"dCa c #b48749", +"dC# c #b4874a", +"gVZ c #b48842", +"dOC c #b48951", +"b0s c #b48a3c", +"ccW c #b48c3d", +"iPt c #b48d4d", +"iEb c #b48d4f", +".G1 c #b48d54", +"etM c #b48f4c", +"iJH c #b48f50", +"#.9 c #b48f5a", +"dfD c #b48f5b", +"coW c #b49050", +".Ye c #b49051", +".Yg c #b49052", +".Yq c #b4905b", +"clT c #b49148", +"jaV c #b49156", +"dfF c #b4915f", +"aEP c #b49251", +"#t1 c #b49252", +"hcg c #b49254", +".G5 c #b4925b", +"#Lm c #b4925f", +"kMM c #b4934b", +".Tn c #b4935c", +".Yr c #b49361", +".Qx c #b49457", +"aAz c #b4945e", +"#dJ c #b49462", +"dHx c #b49547", +"cLF c #b4954a", +"iH2 c #b4954e", +"h7B c #b49558", +"dLG c #b49647", +"dlp c #b49650", +"j5P c #b49654", +"ivL c #b4965a", +"itb c #b4965c", +"#bi c #b49665", +"dU# c #b4974a", +"dU. c #b4974b", +"kMP c #b4974d", +"acW c #b49750", +"aSs c #b49759", +".Vl c #b49761", +"dLF c #b49849", +"dLJ c #b4984c", +"dT9 c #b4984d", +"as8 c #b4984f", +"c8s c #b49857", +"#As c #b4985b", +"dPK c #b4994b", +"kMO c #b4994d", +"kMR c #b4994e", +"d3f c #b4994f", +"dzz c #b49950", +"ag3 c #b49953", +"i7r c #b49958", +"ac2 c #b4995a", +"#qE c #b4995b", +"a4v c #b4995c", +"ap# c #b49a4e", +"dT8 c #b49a4f", +"aoV c #b49a50", +"du5 c #b49a51", +"d76 c #b49a54", +"c8x c #b49a58", +"a8N c #b49a69", +"dDP c #b49b54", +"dbw c #b49b58", +"c8y c #b49b59", +"#wW c #b49b5a", +"j.b c #b49b5b", +"#2E c #b49b64", +"dYv c #b49c51", +"dcr c #b49c53", +"dHN c #b49c55", +"c8z c #b49c59", +"ah. c #b49c5d", +"a.j c #b49c63", +".uV c #b49c69", +"agV c #b49d4c", +"aJN c #b49d50", +"c9r c #b49d51", +"ak9 c #b49d52", +"dme c #b49d54", +"et7 c #b49d55", +"dHM c #b49d56", +"epw c #b49d57", +"#K9 c #b49d5b", +"cT4 c #b49d63", +"bZD c #b49d67", +"c86 c #b49e51", +"du3 c #b49e54", +"dzw c #b49e59", +"fg6 c #b49e5a", +"dO8 c #b49e5e", +"#d2 c #b49e63", +"#wA c #b49e64", +"jGZ c #b49e6c", +"ja5 c #b49e6d", +"dzv c #b49f59", +"fg7 c #b49f5b", +"#ts c #b49f64", +".1L c #b49f69", +"cUY c #b4a04b", +"ao8 c #b4a056", +"dqz c #b4a059", +"dzE c #b4a05a", +"fg4 c #b4a05c", +"d78 c #b4a05d", +"ac3 c #b4a05e", +"#Ao c #b4a064", +"#tp c #b4a065", +"ckU c #b4a06c", +".u0 c #b4a074", +"dqx c #b4a15a", +"et8 c #b4a15e", +"dO9 c #b4a15f", +"dyI c #b4a160", +"#Df c #b4a167", +"ckT c #b4a16c", +"c4A c #b4a255", +"i1P c #b4a262", +"ate c #b4a264", +".P2 c #b4a267", +"#Y2 c #b4a26a", +"dDX c #b4a35f", +"dP# c #b4a362", +"dL. c #b4a363", +"dL# c #b4a462", +"dCY c #b4a463", +"iKg c #b4a468", +"dL4 c #b4a562", +"bP8 c #b4a571", +"aw2 c #b4a659", +"epH c #b4a765", +"eX. c #b4a767", +"e1T c #b4a768", +"epz c #b4a96c", +"c4Z c #b4a97c", +"jkL c #b4aa75", +"eNz c #b4ab6f", +"eIU c #b4ab71", +"fhv c #b4ac72", +"d3S c #b4ac73", +"e6k c #b4ad74", +"fhw c #b4ae74", +"eD4 c #b4ae75", +"egs c #b4ae76", +"f.z c #b4af74", +"elo c #b4af76", +"fcN c #b4b176", +"dCC c #b4b1ad", +"QtJ c #b4b4b4", +"c0C c #b4b68d", +"g#A c #b4b98a", +"g#C c #b4ba8a", +"gnY c #b4bb8b", +"gc0 c #b4bb8d", +"diB c #b4bb9a", +"g#x c #b4bc8d", +"gnT c #b4bc8e", +"g#w c #b4bd8d", +"gy6 c #b4bd8e", +"c5n c #b4bd99", +"c42 c #b4cbc5", +".jc c #b4cbf9", +".j. c #b4d3fd", +"ezA c #b4dadf", +"aHX c #b4dbac", +"b9X c #b4dce4", +"hat c #b4e3c0", +"gDA c #b4e3c3", +"cwa c #b4e7ee", +"cw# c #b4e9f2", +"fyE c #b4eadf", +"ceK c #b4eafe", +"cnn c #b4eaff", +"dZD c #b4ebec", +"cve c #b4ebff", +"cv8 c #b4ecf9", +"crA c #b4ecff", +"cH5 c #b4edff", +".q4 c #b4f4cc", +"iq5 c #b55016", +"jcQ c #b55119", +"iq6 c #b55518", +"iBN c #b55710", +"jcR c #b5571c", +"iq8 c #b55b1d", +"i9w c #b55b21", +"i4l c #b56525", +"hSG c #b56528", +"bwD c #b56634", +"iDF c #b56714", +"iHl c #b56822", +"iRR c #b5683d", +"jhe c #b56d3e", +".dM c #b571a1", +"hbQ c #b57461", +"iHw c #b5762d", +"j24 c #b57829", +"jJr c #b5782a", +"hqJ c #b5795f", +"hxJ c #b57964", +"jLZ c #b57b2e", +"hBl c #b57c66", +"hLz c #b57c67", +"hvV c #b57d31", +"h#T c #b57e30", +"jVV c #b57e34", +"ht8 c #b57e6b", +"jpz c #b58036", +"iNU c #b58135", +".03 c #b5813d", +"gTQ c #b5846d", +"hqt c #b5846e", +"gPY c #b58479", +".9K c #b58541", +".eI c #b586c2", +".yr c #b5874b", +".25 c #b58842", +"jpA c #b58845", +"jZU c #b58848", +"kdl c #b5894a", +".W9 c #b58a49", +"j4U c #b58a4d", +"b0r c #b58b3e", +".0Z c #b58b48", +"en4 c #b58b53", +"dLh c #b58c4b", +"c.d c #b58d3f", +"cd# c #b58e45", +"jNP c #b58e47", +"fPu c #b58e4a", +"hLT c #b58e4d", +"gCL c #b58f4b", +"dTF c #b58f4d", +"h.p c #b58f51", +".Yf c #b59051", +"day c #b59058", +"h#V c #b5914e", +".Yd c #b59151", +".Wk c #b59152", +"eex c #b5915c", +"kPU c #b5924b", +"hC5 c #b59251", +"iyw c #b59255", +"ivJ c #b59257", +"aRL c #b59359", +".Qn c #b59461", +"jVl c #b59550", +"#cV c #b59558", +"iyy c #b59559", +"dLH c #b59648", +"cHn c #b5964a", +"h4D c #b59658", +"#d0 c #b5965c", +".JD c #b5965d", +"aJh c #b5965f", +"kPO c #b59753", +"ky7 c #b59758", +"ibn c #b5975a", +"id7 c #b5975b", +"cyB c #b59851", +"dlr c #b59852", +"i4T c #b59854", +"ata c #b5985a", +"#.X c #b59869", +"cUD c #b5994e", +"irU c #b59957", +"#DO c #b59958", +"h1A c #b5995d", +"dLE c #b59a4c", +"dPJ c #b59a4e", +"dPI c #b59a50", +"dYs c #b59b50", +"et6 c #b59b51", +"dzA c #b59b52", +"dgD c #b59b56", +"#OL c #b59b5b", +"#tS c #b59b5d", +"#nx c #b59b5f", +"dzy c #b59c54", +"#Sn c #b59c5b", +"#Ld c #b59c5c", +"#qz c #b59c5e", +"db4 c #b59d50", +"kP0 c #b59d52", +"kPW c #b59d54", +"dqP c #b59d55", +"dHO c #b59d56", +"#K0 c #b59d57", +"#Hv c #b59d5d", +"#to c #b59d62", +"jG2 c #b59d68", +"kho c #b59d6d", +"#3e c #b59e5b", +"dK5 c #b59e5e", +"alj c #b59e63", +"#ds c #b59e66", +"c87 c #b59f52", +"cuA c #b59f55", +"dYw c #b59f57", +"dHP c #b59f59", +"ksd c #b59f60", +"cQl c #b5a04d", +"c89 c #b5a055", +"aw7 c #b5a056", +"du2 c #b5a057", +"dLX c #b5a059", +"dyG c #b5a05e", +"cY0 c #b5a05f", +"cR# c #b5a068", +"cgz c #b5a069", +"cuB c #b5a157", +"dHQ c #b5a15c", +"fpN c #b5a15d", +"fg8 c #b5a15e", +"cUe c #b5a15f", +"dCW c #b5a160", +".Gz c #b5a166", +"coV c #b5a16a", +"cZM c #b5a250", +"c9q c #b5a256", +"asT c #b5a25a", +"fg3 c #b5a25e", +"fg9 c #b5a260", +"dTz c #b5a261", +"dG2 c #b5a262", +"bUO c #b5a26c", +"ckV c #b5a26d", +"dDW c #b5a35e", +"dP. c #b5a361", +"dCX c #b5a362", +"dK7 c #b5a363", +"#ZK c #b5a366", +"j7E c #b5a367", +"j2P c #b5a368", +"dHV c #b5a460", +"epI c #b5a461", +".1C c #b5a46b", +"c3N c #b5a560", +"dHW c #b5a562", +"e1U c #b5a566", +"agW c #b5a653", +"eX# c #b5a665", +"aOz c #b5a66e", +"dCZ c #b5a767", +"ep8 c #b5a86c", +"e1S c #b5a96b", +"eW9 c #b5aa6b", +"epG c #b5ab6c", +"f.H c #b5ac71", +"dhL c #b5ad6c", +"d8C c #b5ad72", +"ebF c #b5ad74", +"#7u c #b5ad89", +"e1Q c #b5ae73", +"d3R c #b5ae75", +"egr c #b5af76", +"dyt c #b5b1ad", +"euK c #b5b27a", +".op c #b5b329", +"bB6 c #b5b381", +"eAd c #b5b47e", +"clC c #b5b4a8", +"fIt c #b5b887", +"gkl c #b5b988", +"gkk c #b5b989", +"d.h c #b5b990", +"ev. c #b5ba89", +"g#D c #b5ba8a", +"f8B c #b5bc8c", +"ggE c #b5bc8d", +"gvo c #b5bd8d", +"ddv c #b5bd97", +"hGH c #b5c090", +"hGD c #b5c192", +"c5e c #b5c1a8", +".Lg c #b5c293", +"cpc c #b5ccce", +"dw# c #b5cebb", +"cMv c #b5d3d5", +"c45 c #b5d4d6", +"aQF c #b5d598", +"cQL c #b5d5d9", +"eEX c #b5d9d4", +"aId c #b5da95", +".lQ c #b5daea", +"c96 c #b5e9f9", +"cnt c #b5eaff", +"c5b c #b5ecfc", +"crI c #b5ecff", +".rq c #b5fed1", +".#1 c #b63eb3", +"jFQ c #b64c16", +"i9d c #b64f16", +"jLp c #b65721", +".bl c #b658ae", +"jLq c #b65921", +"bAU c #b66736", +"hPw c #b6682a", +"iLO c #b66a3c", +"bsB c #b66b36", +"hc. c #b6704f", +"jlN c #b6722f", +".aB c #b674b6", +"jO9 c #b67845", +"i3L c #b67a34", +"cFO c #b67c43", +"jDT c #b67f33", +"gL2 c #b6806f", +"j7Q c #b6812c", +"jOx c #b6813d", +"gPU c #b6826c", +"ht9 c #b6826f", +"jFv c #b6833e", +"hm2 c #b6836c", +"gXO c #b6836e", +"gXU c #b68370", +"gMf c #b68375", +"i8Y c #b68543", +"#j3 c #b68642", +"j7g c #b68643", +"hIn c #b68670", +"gXV c #b68673", +"isC c #b6875d", +"#ho c #b68844", +"dGm c #b68849", +"hfJ c #b68871", +"jY# c #b68a41", +"#cm c #b68b46", +".9I c #b68b47", +"jOB c #b68b4b", +"b5k c #b68c3e", +"ep# c #b68d44", +"d21 c #b68d45", +"ggk c #b68f4b", +"kaz c #b68f58", +"dxY c #b68f5b", +".JJ c #b69058", +"dXu c #b6905b", +"fxe c #b6914d", +".YY c #b69150", +".2W c #b69251", +".0c c #b69253", +".yQ c #b6925b", +".El c #b6925c", +".Yc c #b69353", +"iBm c #b69355", +"#.8 c #b6935c", +".G0 c #b6935d", +"dkD c #b69360", +".W5 c #b69454", +".16 c #b69455", +"gYm c #b69458", +"b4r c #b69459", +".O. c #b69461", +"kML c #b6964d", +"iE# c #b69658", +"cTj c #b69661", +"axb c #b69750", +".Ey c #b69766", +"#61 c #b69852", +"jWf c #b69855", +"ihT c #b69856", +"#qN c #b6985a", +"#.t c #b6985b", +"ite c #b6985e", +"dLI c #b6994c", +"dUa c #b6994d", +"dpY c #b69954", +"dpX c #b69955", +"j3s c #b69958", +"asL c #b69959", +".Qw c #b6995c", +"dYu c #b69a4d", +"dPP c #b69a4e", +"dYr c #b69a4f", +"d75 c #b69a50", +"c8G c #b69a54", +"i41 c #b69a57", +".1A c #b69a5b", +"jwD c #b69a5e", +"dzr c #b69b50", +"dT7 c #b69b51", +"dlo c #b69b57", +"dgy c #b69b5a", +"kpp c #b69b5b", +"c8r c #b69b5d", +"#h9 c #b69b60", +".yt c #b69b69", +"cZo c #b69c50", +"dPH c #b69c51", +"dYt c #b69c52", +"dvd c #b69c53", +"dzB c #b69c54", +"#3a c #b69c58", +"aJX c #b69c5d", +"dK4 c #b69c5e", +"kDF c #b69c64", +".Xh c #b69c66", +"dDN c #b69d55", +"flh c #b69d57", +"ja8 c #b69d6c", +"kMU c #b69e50", +"aA5 c #b69e51", +"dvc c #b69e55", +"dDQ c #b69e56", +"#DJ c #b69e5b", +"dun c #b69e5c", +"i7e c #b69e5d", +".XI c #b69e62", +"ksE c #b69e68", +"jG1 c #b69e6a", +"eyH c #b69f56", +"dzx c #b69f58", +"#Hi c #b69f59", +"dbx c #b69f5b", +"i92 c #b69f5e", +"iTF c #b69f5f", +"cBS c #b69f75", +"cHd c #b6a059", +"dDM c #b6a05a", +"c3M c #b6a05e", +"duX c #b6a158", +"d3j c #b6a15a", +"dDL c #b6a15b", +"db6 c #b6a258", +"du1 c #b6a259", +"#L. c #b6a25f", +"cUf c #b6a260", +"i1Q c #b6a262", +"iV5 c #b6a263", +".R7 c #b6a265", +"b4u c #b6a26d", +"dL0 c #b6a35e", +"dLZ c #b6a35f", +"iTa c #b6a361", +"dK6 c #b6a362", +"acf c #b6a36f", +"cU0 c #b6a454", +"d8x c #b6a45d", +"epJ c #b6a45f", +"dLY c #b6a460", +"bRF c #b6a461", +"dTA c #b6a463", +"i1O c #b6a464", +"#Vk c #b6a46d", +"ekS c #b6a560", +"ekR c #b6a561", +"dUC c #b6a562", +"eXa c #b6a563", +"#RJ c #b6a565", +"bZE c #b6a56f", +"c3P c #b6a663", +"c3O c #b6a763", +"ekQ c #b6a764", +"#ng c #b6a770", +"a0V c #b6a864", +"bDj c #b6a961", +"e6n c #b6aa6b", +"eyP c #b6ab6e", +"fcU c #b6ac70", +"bLj c #b6ac77", +"#da c #b6ad77", +"d8E c #b6af75", +"egq c #b6af76", +"e6c c #b6b075", +"#cP c #b6b085", +"eD3 c #b6b179", +"eqc c #b6b17a", +"e14 c #b6b581", +"bZQ c #b6b6b3", +"fET c #b6b886", +"fES c #b6b887", +"#cQ c #b6b891", +"fIu c #b6b986", +"fMi c #b6b987", +"fIs c #b6b988", +"bgQ c #b6bb87", +"gkj c #b6bb8a", +"ggD c #b6bb8b", +"c0T c #b6bc99", +"gy7 c #b6bd8b", +"ezY c #b6c08f", +"hGI c #b6c090", +"hGC c #b6c191", +"eu8 c #b6c299", +"atQ c #b6c5b0", +"aUM c #b6cd8d", +"bjb c #b6ce7e", +".kx c #b6d2f1", +"aQE c #b6d490", +"cMs c #b6d4d8", +"a29 c #b6d899", +"aMd c #b6d89b", +"dZt c #b6dbcd", +"hhZ c #b6dcb8", +"gSR c #b6e0c1", +"iac c #b6e3bd", +"ifG c #b6e3bf", +".qG c #b6e5b9", +"bWS c #b6e8fa", +"goG c #b6eac7", +"cek c #b6ecfe", +"c0s c #b6edff", +"d88 c #b6f4f4", +"ezx c #b6f5fc", +"d86 c #b6f6fd", +"j#L c #b74f17", +"iED c #b75512", +"iq4 c #b75623", +"iJh c #b75a15", +"ity c #b75a1c", +"glZ c #b75b2d", +"ir. c #b75e23", +"jN0 c #b75e24", +"jN1 c #b75f24", +"j#9 c #b76325", +"hFp c #b76326", +"bwB c #b76635", +"bTD c #b76839", +"hJr c #b76924", +"bAR c #b76937", +"hR9 c #b76943", +"hU6 c #b76a53", +"iM# c #b76c20", +"iL9 c #b77322", +"jRM c #b77542", +"iYD c #b7762e", +"bUC c #b7773c", +"iQe c #b77932", +"hfW c #b77a5f", +"hmV c #b77a66", +"h2S c #b77b2b", +"iQf c #b77b32", +"jEp c #b77d4b", +"j5m c #b77e2d", +"hIg c #b77e69", +"gY. c #b77e6b", +"gR3 c #b77f31", +"j9Q c #b77f38", +"jOu c #b78038", +"#j4 c #b7803b", +"gPQ c #b7806a", +"#e4 c #b7823d", +"htI c #b78271", +"jOv c #b7833e", +"j7h c #b7833f", +"hEM c #b7856c", +"j0I c #b7863e", +"ek# c #b78642", +"hqs c #b78770", +"jTx c #b78845", +"jTm c #b78a3a", +"fLT c #b78a42", +"#eW c #b78a45", +"jVs c #b78b45", +"dC. c #b78b4e", +"dCd c #b78c53", +"c.c c #b78e3e", +"b5j c #b78f40", +"gV0 c #b7924e", +"iGV c #b79253", +"dB9 c #b79256", +"eja c #b7925c", +"dkB c #b7925e", +"gR5 c #b7934e", +".0V c #b79351", +"iGU c #b79353", +"##d c #b7935e", +"e#K c #b7935f", +".JA c #b79363", +"cpX c #b7944a", +".V. c #b79453", +".Z7 c #b79454", +"dtH c #b79460", +".ys c #b79463", +"h2U c #b79555", +".2c c #b79558", +"iyv c #b79659", +"aES c #b79761", +"cP1 c #b7984d", +"c2Q c #b79863", +"dHw c #b79949", +"acZ c #b79952", +"dCR c #b79957", +".Od c #b7995e", +"et5 c #b79a4c", +"dLK c #b79a4e", +"dYq c #b79a4f", +"d3e c #b79a50", +"awP c #b79a5d", +"cRa c #b79a5e", +"ilF c #b79a60", +"i6u c #b79a61", +"axs c #b79a6d", +"dLD c #b79b4d", +"dPO c #b79b4f", +"dHA c #b79b50", +"d3i c #b79b51", +"jUR c #b79b63", +"dT6 c #b79c51", +"d3g c #b79c52", +"dls c #b79c55", +"fli c #b79c57", +"ag8 c #b79c5b", +"#tn c #b79c62", +"dzq c #b79d53", +"dzC c #b79d54", +"#Hn c #b79d5c", +"dbq c #b79d5e", +"asK c #b79d5f", +"jKC c #b79d62", +"j9u c #b79d65", +"#Y7 c #b79d66", +"dg9 c #b79e50", +"flg c #b79e58", +"jr9 c #b79e5d", +"kcS c #b79e67", +"c85 c #b79f51", +"c4d c #b79f52", +"dg8 c #b79f53", +"dqN c #b79f56", +"dvb c #b79f57", +"jiY c #b79f5e", +"#HG c #b79f6e", +"#YR c #b79f6f", +"db3 c #b7a053", +"duW c #b7a055", +"dDR c #b7a05a", +"duo c #b7a05c", +"dG0 c #b7a05e", +"#U9 c #b7a06f", +"dDS c #b7a15a", +"dHL c #b7a15b", +"dgE c #b7a15d", +"#La c #b7a15f", +"ksG c #b7a16c", +"dHR c #b7a25c", +"#6V c #b7a25e", +"dG1 c #b7a261", +"cY1 c #b7a262", +"#Y5 c #b7a26d", +"jJM c #b7a26e", +"cUZ c #b7a350", +"as3 c #b7a355", +"db9 c #b7a359", +"dX0 c #b7a360", +"#Sk c #b7a361", +"i9J c #b7a362", +"#tu c #b7a369", +"cZO c #b7a454", +"cZN c #b7a455", +"dP7 c #b7a460", +"a5u c #b7a468", +"bP4 c #b7a469", +"bLi c #b7a46c", +"cb8 c #b7a46f", +"c4B c #b7a556", +"fg2 c #b7a561", +"dQ. c #b7a562", +"dyJ c #b7a663", +"dP9 c #b7a664", +"#2w c #b7a669", +"dP8 c #b7a766", +"#hU c #b7a774", +"ak6 c #b7a95a", +"dG5 c #b7a968", +"ekP c #b7a969", +"aFM c #b7a96e", +"e6p c #b7ac70", +"elj c #b7ac71", +"#nh c #b7ac7d", +"epF c #b7ad6f", +"e1R c #b7ad70", +"ebC c #b7ad73", +"bOK c #b7ad7a", +"dga c #b7ad9f", +"eW8 c #b7ae70", +"euc c #b7af72", +"btF c #b7af75", +"d8D c #b7af76", +"bGA c #b7af7b", +"#Vd c #b7af85", +"dym c #b7af9f", +"e1J c #b7b277", +"eD2 c #b7b27a", +"dhR c #b7b28c", +"dkV c #b7b2a5", +"eqb c #b7b37c", +"dCI c #b7b3b0", +"bQi c #b7b4b0", +"b4G c #b7b4b2", +"eXj c #b7b580", +"ezV c #b7b780", +"fMj c #b7b783", +"fBg c #b7b784", +"c5h c #b7b78b", +"ezW c #b7b881", +"fBf c #b7b885", +"fSZ c #b7b886", +"gWh c #b7b985", +"fBe c #b7b986", +"fWc c #b7b987", +"ct0 c #b7b9b0", +"ev# c #b7ba86", +"fIo c #b7ba87", +"fIp c #b7ba88", +"c0B c #b7ba92", +"c5C c #b7ba94", +"fIr c #b7bb88", +"gvn c #b7bb8b", +"f8A c #b7bc89", +"g#u c #b7bc8a", +"gkc c #b7bc8b", +"bpI c #b7bd8a", +"bxT c #b7bf8d", +"hwc c #b7bf8e", +"eu9 c #b7bf92", +"d.c c #b7c09f", +"hJ5 c #b7c190", +"hZ8 c #b7c191", +"c5z c #b7c1a1", +"hDf c #b7c290", +"hDe c #b7c291", +"hZ9 c #b7c293", +"cnK c #b7c4b3", +".iv c #b7d0ff", +"ezF c #b7d2cf", +"beE c #b7d687", +"bny c #b7d692", +"aMp c #b7d78d", +"b9Y c #b7d9e0", +".la c #b7d9f0", +"b9W c #b7e1ea", +"ic4 c #b7e4bf", +"fWV c #b7ebb9", +"cd9 c #b7ebff", +"crH c #b7ecff", +"eqr c #b7f0ee", +"itE c #b8551c", +"irg c #b85621", +"iXw c #b86639", +"iGr c #b8671d", +"ilm c #b86737", +"iUD c #b8693c", +"j.W c #b86a36", +"jQB c #b87230", +"iYG c #b8772a", +"hfX c #b8775b", +"hmU c #b87764", +"j5w c #b8791e", +"hi2 c #b87b65", +"hfF c #b87d69", +"g9Z c #b87d6a", +"jOs c #b8802f", +"hmW c #b8806c", +"hBn c #b8806d", +"gX9 c #b8806e", +"i0N c #b8823a", +".Y8 c #b8823c", +"jIn c #b88343", +"hEO c #b8846d", +"gU# c #b88472", +"jw2 c #b8853e", +"jca c #b88849", +"ia5 c #b88873", +"gTW c #b8887a", +"jV. c #b88948", +"jRd c #b88a4a", +".Ew c #b88b4d", +".BB c #b88b4e", +"isB c #b88b63", +"#.s c #b88c48", +"i73 c #b88c6c", +"jTC c #b88d4d", +"jt6 c #b88d55", +".W8 c #b88e4a", +"i.d c #b88e77", +".fs c #b88ec6", +"kRd c #b89043", +"chJ c #b89045", +"jjb c #b8904c", +"hyj c #b8904f", +"jEj c #b89070", +"gR4 c #b8914c", +".Hd c #b8915f", +"iSr c #b89251", +"iJD c #b89252", +"jbe c #b89276", +"gOh c #b8934d", +"hIE c #b89352", +"gyS c #b8944f", +"iMt c #b89452", +"fcv c #b8954f", +"eWE c #b89550", +"iEa c #b89556", +".Un c #b89557", +".Wj c #b89558", +"hQH c #b89656", +".Z6 c #b89657", +"#nK c #b89658", +"dfH c #b89662", +"#3m c #b89753", +"awO c #b89757", +"a1n c #b89856", +"kBG c #b89858", +"aAx c #b8985c", +"gUs c #b8985e", +".SG c #b89869", +"i#M c #b89957", +"kBH c #b89959", +"cgA c #b8995d", +".LX c #b8995e", +"eDn c #b89a4e", +"dKZ c #b89a59", +"kJS c #b89a5a", +".AP c #b89a5b", +"ky5 c #b89a5c", +"ij. c #b89a5d", +".LW c #b89a60", +"dT5 c #b89b4f", +"cCS c #b89b53", +"kJT c #b89b5a", +"ky6 c #b89b5c", +"aSO c #b89b5e", +"d3h c #b89c51", +"dpZ c #b89c56", +"asO c #b89c58", +"ky8 c #b89c5b", +".xA c #b89c5f", +"cyR c #b89d51", +"c4c c #b89e51", +"eyG c #b89e52", +"a.Z c #b89e53", +"#Am c #b89e5c", +"#So c #b89e5f", +"c4e c #b89f52", +"dg6 c #b89f53", +"dDH c #b89f56", +"dqO c #b89f57", +"cde c #b8a052", +"dg7 c #b8a053", +"dHI c #b8a056", +"jpC c #b8a05d", +"ju5 c #b8a05e", +"#Ag c #b8a05f", +"#ZJ c #b8a060", +"#wV c #b8a061", +"c8q c #b8a064", +"#qb c #b8a066", +"cG# c #b8a07b", +"db2 c #b8a153", +"flf c #b8a15a", +"dyF c #b8a15f", +"kty c #b8a168", +"#6i c #b8a16b", +"aw5 c #b8a250", +"as4 c #b8a256", +"dDT c #b8a25b", +"eyI c #b8a25c", +".Zz c #b8a265", +".1K c #b8a26a", +"dHJ c #b8a359", +"asU c #b8a35a", +"dP6 c #b8a35b", +"cxw c #b8a367", +"c8p c #b8a368", +"jJN c #b8a370", +"acQ c #b8a458", +"duY c #b8a45c", +"dqy c #b8a45d", +"#Si c #b8a460", +"ah# c #b8a462", +"i4F c #b8a463", +"cMN c #b8a46b", +"euf c #b8a560", +"cY2 c #b8a564", +"fh. c #b8a565", +"#kz c #b8a56e", +"dHK c #b8a65f", +"epK c #b8a660", +"#OH c #b8a664", +".t3 c #b8a667", +"j7D c #b8a66b", +"cgE c #b8a66f", +"kP2 c #b8a762", +"e1V c #b8a766", +"#RI c #b8a769", +"bDl c #b8a85f", +"dL3 c #b8a865", +"dUv c #b8a867", +"e6o c #b8a868", +"dUw c #b8a967", +"e1X c #b8a969", +"#d# c #b8a96f", +"b4q c #b8a975", +"dYX c #b8aa64", +"efZ c #b8aa68", +"btI c #b8aa70", +"e1Y c #b8ab6c", +"eW3 c #b8ab6d", +"b9i c #b8ab73", +"ekO c #b8ac6c", +"ftB c #b8ac6f", +"euG c #b8ac70", +"ftA c #b8ad70", +"eW4 c #b8ae70", +"eyO c #b8ae71", +"a9Q c #b8ae75", +"#YW c #b8af7e", +"epE c #b8b074", +"epA c #b8b077", +"eD1 c #b8b078", +"#hK c #b8b084", +"ebE c #b8b177", +"dyo c #b8b1a1", +"dcF c #b8b270", +"e6m c #b8b278", +"egp c #b8b279", +"elm c #b8b27a", +"eln c #b8b37b", +"euJ c #b8b37c", +"e13 c #b8b37d", +"e6l c #b8b47b", +"eSp c #b8b47c", +"eXk c #b8b47d", +"e6w c #b8b47e", +"f.R c #b8b47f", +"b0n c #b8b4b0", +"fxG c #b8b782", +"fIv c #b8b783", +"gOy c #b8b883", +"fBi c #b8b884", +"fEU c #b8b885", +"chr c #b8b8ae", +"fSY c #b8b985", +"fER c #b8b986", +"fBd c #b8ba86", +"fIn c #b8ba87", +"ccS c #b8bab0", +"fMc c #b8bb87", +"fIq c #b8bb88", +"gy5 c #b8bb89", +"gvm c #b8bb8a", +"gcX c #b8bc8a", +"hwd c #b8c08d", +"hW0 c #b8c08f", +"cwd c #b8c0ae", +"hzM c #b8c18f", +"hQW c #b8c190", +"hW1 c #b8c191", +"hT2 c #b8c192", +"hDd c #b8c291", +".jW c #b8cbef", +".hS c #b8ccfc", +"dzX c #b8d0c2", +"dIK c #b8d3c3", +"eE4 c #b8d5c6", +"bad c #b8d799", +".lb c #b8d7ed", +"cMo c #b8d8dd", +"heh c #b8dfbc", +"eEq c #b8e3e7", +"dU9 c #b8e7e9", +"fTC c #b8ebca", +"b6J c #b8ecfc", +"ciI c #b8ecfe", +"cDR c #b8edff", +".q5 c #b8f3c6", +"juR c #b95420", +"jID c #b9571d", +"gQm c #b9572f", +"jy0 c #b9622d", +"iDH c #b96b1b", +"hnt c #b96c2b", +"iGo c #b96d20", +"hTl c #b96d2d", +"hML c #b96e2d", +"jIS c #b9712a", +"hOZ c #b9725d", +"iKk c #b97327", +"iM9 c #b97428", +"jUj c #b97540", +"iP5 c #b97629", +"jQF c #b97630", +"iQd c #b97832", +"kIO c #b9793e", +"hi3 c #b97b64", +"h47 c #b97e3e", +"g90 c #b97f6c", +"i3N c #b98036", +"hjd c #b9806d", +"hBj c #b9816c", +"gUa c #b98271", +"hEI c #b98277", +"jSC c #b98337", +"gL0 c #b98370", +"jaM c #b98433", +"hbG c #b9846e", +"jQ4 c #b98533", +"j5p c #b98536", +".Y9 c #b9863f", +"hu. c #b98672", +"jA7 c #b9873d", +"i0O c #b98843", +"jYk c #b98943", +"iXZ c #b98944", +"hu# c #b98974", +".9L c #b98a42", +"jTw c #b98a45", +"jR. c #b98a47", +"jTt c #b98a49", +"hVc c #b98a75", +"igk c #b98a78", +"jRb c #b98b4b", +"jjo c #b98c46", +"jjq c #b98d46", +"jXv c #b98d4d", +"chK c #b98f43", +".Y2 c #b98f4b", +"kuC c #b99049", +"j8M c #b99070", +"hqC c #b9907d", +"jVr c #b9914b", +"hBR c #b99150", +"k#p c #b99171", +"hLU c #b99251", +".2X c #b99351", +".40 c #b99451", +"iPu c #b99452", +"iPs c #b99453", +".GW c #b9945c", +"g75 c #b99651", +"iGS c #b99657", +"daB c #b99661", +"i2. c #b9974f", +".17 c #b99757", +"iEc c #b99758", +"dpd c #b99763", +".Z2 c #b99859", +"kPP c #b99954", +"aV6 c #b99956", +"asM c #b99957", +"aEQ c #b99959", +"c7z c #b99963", +"j2D c #b99a58", +"kG6 c #b99a5b", +"aER c #b99a61", +"at. c #b99b4e", +"ald c #b99b56", +"kN# c #b99b5a", +"dGX c #b99b5c", +"by# c #b99b61", +".Uz c #b99b71", +"dHv c #b99c4b", +"dLT c #b99c4d", +"btJ c #b99c58", +"#V4 c #b99c5b", +"dDy c #b99d4f", +"cUC c #b99d52", +"iw3 c #b99d53", +"j46 c #b99d59", +"kQd c #b99d5c", +"krz c #b99d5d", +"bZC c #b99d63", +"dPG c #b99e52", +"dUc c #b99e53", +"aJS c #b99e54", +"flj c #b99e58", +"kMn c #b99e65", +"dp0 c #b99f58", +"aFw c #b99f5e", +"#ZG c #b99f5f", +"#3n c #b99f61", +"j1W c #b99f66", +"eWW c #b9a056", +"jQk c #b9a05b", +"jxW c #b9a05e", +"#tJ c #b9a061", +"#bA c #b9a066", +"k#8 c #b9a069", +"c84 c #b9a153", +"dLU c #b9a154", +"a.T c #b9a159", +"jNO c #b9a15c", +"#3d c #b9a15e", +"#wU c #b9a161", +"#tM c #b9a162", +"#kQ c #b9a164", +"#h4 c #b9a166", +"khm c #b9a16c", +"#3. c #b9a25a", +"#Hj c #b9a25e", +"dCV c #b9a261", +"#tO c #b9a262", +"a8O c #b9a26f", +"agv c #b9a353", +"dYy c #b9a359", +"dHS c #b9a35c", +"#VT c #b9a35e", +"#OB c #b9a360", +"kqm c #b9a36f", +"dzp c #b9a458", +"kMX c #b9a45a", +"fle c #b9a45d", +"#L# c #b9a462", +"kMW c #b9a55d", +"dDU c #b9a55f", +"eSg c #b9a560", +"eXb c #b9a561", +"#Sl c #b9a563", +"iYX c #b9a565", +"jX1 c #b9a566", +"#RL c #b9a56a", +"#wG c #b9a56b", +"#z2 c #b9a56c", +"db7 c #b9a65b", +"dUu c #b9a65f", +"eSf c #b9a661", +"iTb c #b9a665", +"#Se c #b9a75f", +"a.7 c #b9a766", +".AV c #b9a76b", +"ftv c #b9a868", +"#zT c #b9a86d", +"cgG c #b9a872", +".AC c #b9a875", +"#Vh c #b9a971", +"cgF c #b9a972", +"dvj c #b9aa63", +"kP5 c #b9aa64", +"dUx c #b9aa68", +"ep7 c #b9aa6b", +"fg1 c #b9ab69", +"ek7 c #b9ab6a", +"e6H c #b9ab6c", +"#V6 c #b9ab6d", +"b9j c #b9ab74", +"#kA c #b9ab78", +"efY c #b9ac6c", +".TZ c #b9ac71", +"ekN c #b9ae70", +"ep9 c #b9ae73", +"bce c #b9ae75", +"#hS c #b9ae7d", +"e6q c #b9af72", +"euH c #b9af75", +"add c #b9af7d", +"dGS c #b9afac", +"egn c #b9b076", +".xq c #b9b077", +"ebD c #b9b177", +"flu c #b9b27b", +"dhK c #b9b371", +"eub c #b9b37a", +"eqa c #b9b37b", +"ezi c #b9b37c", +"b4E c #b9b3ae", +"eSq c #b9b47b", +"eW5 c #b9b47c", +"dgd c #b9b4ac", +"fMl c #b9b57f", +"fEX c #b9b580", +"c3s c #b9b5a9", +"fEY c #b9b67f", +"fIy c #b9b680", +"e6b c #b9b77d", +"fcM c #b9b77f", +"fEW c #b9b781", +"fBh c #b9b782", +"gKE c #b9b783", +"gGM c #b9b883", +"fZj c #b9b884", +"gC5 c #b9b983", +"fPV c #b9b984", +"fBc c #b9b985", +"g0h c #b9b986", +"fEP c #b9ba85", +"fEQ c #b9ba86", +"f8C c #b9ba87", +"amb c #b9ba9f", +"fMb c #b9bb87", +"gy8 c #b9bc88", +"fMd c #b9bc89", +"#as c #b9bc95", +"c0S c #b9bc96", +"apH c #b9bc98", +"fMh c #b9bd89", +"bTt c #b9bd8c", +"fPP c #b9be89", +"hoN c #b9be8b", +"ahD c #b9be9e", +"btN c #b9bf8a", +"hsw c #b9bf8c", +"hzO c #b9c08d", +"hGB c #b9c08e", +"hDj c #b9c18d", +"hzN c #b9c18e", +"hGG c #b9c18f", +"hQX c #b9c190", +"hT0 c #b9c191", +"hQY c #b9c290", +"hT1 c #b9c291", +"h0. c #b9c292", +"eva c #b9c391", +"hW2 c #b9c392", +"ddz c #b9c4a5", +"d.n c #b9cbb6", +"eED c #b9cfb5", +"aUZ c #b9d08b", +".ld c #b9d4e9", +".kv c #b9d7f5", +"beL c #b9d99a", +"c97 c #b9dcde", +"g4K c #b9ddbb", +"eJD c #b9e0e5", +"cxQ c #b9e1e9", +"ih7 c #b9e3bf", +"fZY c #b9e6ad", +"c5. c #b9edff", +"cRp c #b9eefe", +"giM c #ba541b", +"j#M c #ba571b", +"iHk c #ba5915", +"iwe c #ba5a17", +"iy0 c #ba6218", +"hIO c #ba6625", +"hL6 c #ba6928", +"jbB c #ba6d37", +"bAV c #ba6d3b", +"gUg c #ba7a60", +"hqh c #ba7d69", +"iQg c #ba7e34", +"#sX c #ba7f38", +"hqi c #ba7f6b", +"#mP c #ba803a", +"ht2 c #ba806a", +"#j5 c #ba813a", +"hbH c #ba816b", +"gUb c #ba8171", +"#hr c #ba823b", +"j4O c #ba8242", +"gEJ c #ba8271", +"jLW c #ba8330", +"jQa c #ba833e", +"jYc c #ba843c", +"i3z c #ba8548", +"g9M c #ba856e", +"g5O c #ba866f", +"g1Z c #ba876e", +"gTO c #ba8770", +"hSh c #ba8771", +"hqn c #ba8772", +".28 c #ba8841", +"jNy c #ba8842", +"hm1 c #ba8974", +"hjg c #ba8a76", +"gTV c #ba8a7c", +"hb0 c #ba8c74", +"gnB c #ba8d42", +".9F c #ba8d48", +"eHS c #ba8d4c", +"hud c #ba8d77", +"iFU c #ba8e65", +"clU c #ba8f43", +"jFD c #ba8f57", +"kvh c #ba8f63", +"cp0 c #ba9145", +".0Y c #ba914c", +"jgD c #ba9255", +"cpY c #ba9347", +"huD c #ba9352", +".V# c #ba9452", +"dxS c #ba9458", +".YZ c #ba9551", +"iSs c #ba9555", +".Yp c #ba955d", +"iY# c #ba9655", +"dkC c #ba9662", +"gOi c #ba9752", +"iVh c #ba9756", +"hPn c #ba9759", +".uU c #ba975c", +".6o c #ba975d", +"iSp c #ba9857", +"jVn c #ba9953", +".8O c #ba995e", +"cX7 c #ba9963", +"hXE c #ba9988", +"ivO c #ba9a60", +"i84 c #ba9a66", +"et4 c #ba9b4c", +"dYp c #ba9b51", +"j45 c #ba9b56", +".Qv c #ba9b5e", +"dLS c #ba9c4c", +"d74 c #ba9c53", +"aEN c #ba9c57", +"kN. c #ba9c5b", +"dCS c #ba9c5c", +"asG c #ba9c60", +"eyE c #ba9d4e", +"eIa c #ba9d52", +"jYD c #ba9d5a", +"eae c #ba9d5b", +"dGZ c #ba9d5c", +"aEO c #ba9d5e", +"dP2 c #ba9e50", +"kJy c #ba9e54", +"flk c #ba9e59", +"icH c #ba9e5a", +"dCT c #ba9e5d", +"ktX c #ba9e5e", +"iX8 c #ba9e5f", +"dHu c #ba9f4e", +"dqu c #ba9f52", +"dUb c #ba9f53", +"kPR c #ba9f58", +"ipr c #ba9f5b", +"iI# c #ba9f5d", +"dpW c #ba9f5e", +"cys c #ba9f66", +"dPQ c #baa052", +"epv c #baa053", +"dg5 c #baa054", +"ftu c #baa05c", +"ixa c #baa05e", +"dDG c #baa156", +"a.S c #baa159", +"#6Q c #baa15c", +"#VV c #baa15f", +"#OM c #baa162", +"#qv c #baa165", +"#kR c #baa166", +"#2F c #baa16a", +"c83 c #baa254", +"db1 c #baa255", +"e1E c #baa258", +"#Zy c #baa25b", +"jl5 c #baa25f", +"#tK c #baa263", +"dTv c #baa264", +"ko6 c #baa26a", +"kMQ c #baa357", +"dP3 c #baa35a", +"#VW c #baa35e", +"dyL c #baa35f", +"kja c #baa361", +"aV2 c #baa36b", +"jG3 c #baa370", +"kJF c #baa457", +"dlt c #baa45e", +"eSh c #baa45f", +"#VR c #baa460", +"i9K c #baa462", +"ja7 c #baa474", +"cmK c #baa552", +"dYx c #baa55b", +"du0 c #baa55c", +"dP5 c #baa55d", +"#6U c #baa55f", +"dL1 c #baa560", +"j0q c #baa567", +"dLV c #baa65d", +"dvh c #baa65e", +"ekT c #baa661", +"#Sg c #baa662", +"cey c #baa66c", +"aRH c #baa66e", +"db8 c #baa75c", +"dQ# c #baa763", +"jOK c #baa76a", +"b6h c #baa858", +"aoY c #baa860", +"dHU c #baa863", +"e1W c #baa866", +"eXd c #baa867", +"cvK c #baa871", +"#66 c #baa969", +"fpC c #baa96a", +"#wy c #baa96d", +".xF c #baa96e", +"#qd c #baa970", +"dUB c #baaa66", +"dYP c #baaa67", +"d79 c #baaa68", +"#N3 c #baaa6b", +"#wB c #baaa6f", +"ao0 c #baab61", +"dYQ c #baab68", +"dUy c #baab69", +"acH c #baac63", +"epU c #baac6d", +"#2v c #baac6e", +"dYR c #baad6c", +"eW2 c #baad6d", +"fpB c #baad70", +"cb3 c #baad75", +"agY c #baae5e", +"d3m c #baae6e", +"#cS c #baae81", +"epV c #baaf70", +"bpB c #baaf77", +"et9 c #bab073", +"bpA c #bab077", +"fxK c #bab176", +"elk c #bab177", +"e6u c #bab178", +"e6v c #bab179", +"ell c #bab278", +"ego c #bab279", +"ezh c #bab27a", +"dmz c #bab371", +"eW7 c #bab378", +"eXl c #bab37a", +"eq# c #bab37b", +"ftE c #bab37c", +"c41 c #bab38f", +"at6 c #bab391", +"iBS c #bab474", +"f.J c #bab479", +"epD c #bab47a", +"fxC c #bab47b", +"epB c #bab47c", +"eSr c #bab57b", +"eW6 c #bab57d", +"je5 c #bab583", +"b5. c #bab5ac", +"eua c #bab67d", +"f2w c #bab67f", +"fPW c #bab680", +"c9P c #bab693", +"fxH c #bab780", +"fxF c #bab781", +"fIw c #bab782", +"f5K c #bab882", +"f8D c #bab883", +"f5I c #bab983", +"fBb c #bab984", +"ezS c #baba84", +"fEO c #baba85", +"g4j c #baba86", +"bU5 c #babab7", +"fIm c #babb86", +"gnS c #babb88", +"fSL c #babc86", +"fPO c #babc87", +"g8m c #babc88", +"d.y c #babc96", +"hld c #babd8a", +"hhD c #babe8a", +"fMe c #babf8a", +"hoM c #babf8b", +"fMg c #bac08a", +"hwb c #bac08d", +"c5B c #bac19e", +"hJ6 c #bac28f", +"hQV c #bac290", +"c5A c #bac2a2", +"cEw c #bac2b2", +"hzL c #bac38f", +"h25 c #bac392", +".iA c #bac9fb", +"aUX c #bacd84", +"equ c #bacda0", +"dnt c #baceb9", +"aBM c #bacfc0", +".iw c #bacffe", +"dzY c #bad1c2", +"drQ c #bad7ce", +"aMq c #badc94", +"cAg c #bae0e1", +"b4Z c #bae2ea", +"d4t c #bae3d9", +"ius c #bae9c6", +"cj. c #baecff", +"cv7 c #baedfd", +"cvW c #baedff", +"ioz c #bb5524", +"ira c #bb562b", +"j#6 c #bb5d1b", +"iq7 c #bb5e1b", +"jLn c #bb5f25", +"iYK c #bb6322", +"jqj c #bb703b", +"hMK c #bb7130", +"iEE c #bb7326", +"jWI c #bb763e", +"i95 c #bb7820", +"iAH c #bb7930", +"b9b c #bb7937", +"cfI c #bb7b4d", +"iS7 c #bb7d31", +"g2i c #bb7e63", +"jhV c #bb7f34", +"hYa c #bb8169", +"hmM c #bb816b", +"iNR c #bb8339", +"hje c #bb8370", +"ht4 c #bb846f", +"iXY c #bb853b", +"#mN c #bb853f", +"g9W c #bb8673", +"g1P c #bb8771", +"hLA c #bb8773", +"jvG c #bb883d", +"hE1 c #bb8873", +"hx0 c #bb8875", +"g9V c #bb8876", +"jYo c #bb8940", +"jYm c #bb8942", +"iu8 c #bb895d", +"g16 c #bb8974", +"hm0 c #bb8a75", +"hqr c #bb8b75", +"gEk c #bb8b7e", +"huf c #bb8c77", +"#aa c #bb8d46", +"j0V c #bb8e46", +"dGn c #bb8e4d", +"cpZ c #bb9045", +".21 c #bb914c", +"jRe c #bb914f", +"i8W c #bb934f", +"c.b c #bb9448", +".2Y c #bb9450", +"hFi c #bb9454", +".W6 c #bb9551", +"hch c #bb9556", +"jYt c #bb9652", +".Eg c #bb965c", +".Wb c #bb9757", +".Ea c #bb975a", +"iQO c #bb984d", +"cuh c #bb984f", +"iMs c #bb9855", +"iJE c #bb9857", +".Z8 c #bb9858", +".6p c #bb985c", +"dxZ c #bb9862", +"fpp c #bb994f", +"fpo c #bb9950", +"iBl c #bb995b", +"j44 c #bb9a53", +".X9 c #bb9a5b", +".Wi c #bb9a5c", +".JC c #bb9a60", +"hsh c #bb9b57", +"gGn c #bb9c55", +"awB c #bb9c5a", +".Gs c #bb9c5b", +"awC c #bb9c5e", +"h7C c #bb9c60", +"et3 c #bb9d4d", +"jSN c #bb9d51", +"cG6 c #bb9d55", +"ee1 c #bb9d5c", +"dK0 c #bb9d5f", +"dP1 c #bb9e4f", +"dTO c #bb9e5a", +"kQc c #bb9e5c", +"kDG c #bb9e62", +".Sr c #bb9e63", +"dDx c #bb9f4f", +"kJU c #bb9f5d", +"dO3 c #bb9f60", +"eDs c #bba054", +"cZn c #bba055", +"c4b c #bba154", +"ftt c #bba15d", +"i93 c #bba15e", +"jf8 c #bba15f", +"alg c #bba161", +"dl2 c #bba254", +"db0 c #bba255", +"dCU c #bba260", +"dyE c #bba262", +"dln c #bba263", +"#tI c #bba264", +"jPS c #bba267", +"dzj c #bba357", +"eDt c #bba35c", +"#Ow c #bba361", +"jr7 c #bba362", +"dpV c #bba365", +"kGS c #bba455", +"kPV c #bba458", +"eSi c #bba45e", +"eSj c #bba460", +"#6T c #bba461", +"dPd c #bba465", +"#nB c #bba468", +"#h2 c #bba46a", +"aFm c #bba555", +"aA3 c #bba558", +"dUt c #bba55c", +"dHT c #bba55d", +"#Zw c #bba55f", +"#DI c #bba560", +"eXc c #bba562", +"#2C c #bba56b", +"ja9 c #bba574", +"as5 c #bba658", +"dhv c #bba65a", +"cLv c #bba65d", +"#KZ c #bba65f", +"#DH c #bba660", +"dTy c #bba661", +"c#Y c #bba66c", +"aKb c #bba672", +"ja6 c #bba676", +"duZ c #bba75e", +"dLW c #bba75f", +"a.V c #bba760", +"kp3 c #bba766", +"#tw c #bba76c", +"#nS c #bba76e", +"ak7 c #bba859", +"dzo c #bba85c", +"dzn c #bba85d", +"#Sj c #bba864", +"fxL c #bba869", +".54 c #bba86c", +"#wF c #bba86e", +"#2B c #bba870", +"kP8 c #bba959", +"cLk c #bba960", +"eSe c #bba965", +"eg. c #bba966", +"a9L c #bba96a", +"dzG c #bbaa60", +"cY3 c #bbaa67", +"kP1 c #bbab64", +"e9k c #bbab6b", +"bGv c #bbab6f", +".NV c #bbab73", +"dYS c #bbad6c", +"eus c #bbad6d", +"#qf c #bbad76", +"#qi c #bbad78", +"d3n c #bbae6d", +"fBk c #bbae72", +"a.e c #bbae76", +"efX c #bbaf70", +"kP4 c #bbb06c", +"f.K c #bbb074", +"eyN c #bbb174", +"f.L c #bbb176", +"e12 c #bbb177", +"eq. c #bbb178", +"e2h c #bbb271", +"eIC c #bbb275", +"eD0 c #bbb277", +"ezg c #bbb278", +"flv c #bbb279", +"btH c #bbb27a", +"bUP c #bbb27b", +"bGN c #bbb2a5", +"euI c #bbb37a", +"fhj c #bbb37b", +"bP9 c #bbb37d", +"eu. c #bbb479", +"bVb c #bbb4a9", +"f.M c #bbb57c", +"fS0 c #bbb57e", +"bLk c #bbb57f", +"epC c #bbb67c", +"eu# c #bbb67d", +"ftx c #bbb67e", +"fMk c #bbb67f", +"fEV c #bbb680", +"e1I c #bbb77c", +"f.I c #bbb77e", +"fcV c #bbb77f", +"fxI c #bbb780", +"fIx c #bbb781", +".tS c #bbb880", +"fSX c #bbb881", +"gOx c #bbb882", +"f5J c #bbb883", +"c3o c #bbb8b3", +"gC4 c #bbb981", +"f2v c #bbb982", +"fB# c #bbb983", +"fBa c #bbb984", +"gOt c #bbba84", +"f5H c #bbba85", +"gru c #bbba87", +"fIl c #bbbb85", +"gvp c #bbbb86", +"b99 c #bbbbb0", +"gKA c #bbbc86", +"g#t c #bbbc87", +"ezT c #bbbd87", +"hhF c #bbbd88", +"ezU c #bbbe88", +"hhE c #bbbe89", +"fPU c #bbbf89", +"hsx c #bbbf8a", +"fMf c #bbc08b", +"hzP c #bbc08c", +"hWZ c #bbc08e", +"hDg c #bbc28e", +"hNr c #bbc28f", +"h24 c #bbc291", +"hst c #bbc38f", +"hzK c #bbc48f", +".iz c #bbcbfc", +".hT c #bbcbff", +"aOM c #bbccb8", +".kz c #bbd1ec", +".jS c #bbd3f7", +"a7M c #bbd58d", +"dvF c #bbdad6", +"aQD c #bbdb91", +"aZd c #bbdc8f", +"aMr c #bbdc99", +"aMc c #bbdc9a", +"dAy c #bbddd9", +"f6m c #bbe4b6", +"ir1 c #bbe8c5", +"elJ c #bbeadc", +"eJo c #bbebf2", +"bNg c #bbebfb", +"ceM c #bbecfe", +"cz8 c #bbeeff", +"d85 c #bbf5fb", +".rr c #bbffcb", +"jrV c #bc511d", +"iwf c #bc5816", +"jfP c #bc5e1b", +"i9u c #bc5f1b", +"j#8 c #bc6020", +"iL6 c #bc6317", +"h8o c #bc6529", +"iri c #bc652f", +"iK# c #bc6c21", +"j.7 c #bc6f3d", +"bFk c #bc703f", +"jY6 c #bc753b", +"h.f c #bc7555", +"cNQ c #bc7647", +"iTI c #bc7921", +"kmo c #bc7a3b", +"hb8 c #bc7a5c", +"d#K c #bc7f55", +"iH4 c #bc8030", +"hbR c #bc806e", +"hfs c #bc816c", +"hbM c #bc826e", +"hbS c #bc8370", +"j26 c #bc8437", +"j7n c #bc843d", +"kmB c #bc8449", +"#hs c #bc853d", +"hxK c #bc8572", +"jdA c #bc8618", +"jA4 c #bc8633", +"hdD c #bc8635", +"g9R c #bc8670", +"hLy c #bc8672", +"g9Y c #bc8673", +"ht7 c #bc8674", +"jyk c #bc8739", +"jJl c #bc8836", +"j2r c #bc8939", +"jKY c #bc893f", +"g1U c #bc8972", +"jFx c #bc8b45", +"jpk c #bc8c3e", +"g98 c #bc8d76", +"hqo c #bc8d77", +"dGo c #bc8e4e", +"jOj c #bc8f46", +"##5 c #bc9049", +"gcD c #bc9146", +"etJ c #bc9247", +"jTz c #bc9250", +"dOD c #bc9256", +"jJS c #bc936b", +"dKt c #bc9457", +".41 c #bc9551", +"iSe c #bc9575", +".Y0 c #bc9651", +"hjF c #bc9657", +".f6 c #bc96ca", +"jVh c #bc9752", +"jpW c #bc9777", +"ejb c #bc985f", +"hoA c #bc9954", +"iSq c #bc9958", +"#qL c #bc9959", +"h6K c #bc9986", +"bLg c #bc9a57", +"iVe c #bc9a5a", +"daA c #bc9a63", +"#gq c #bc9a6c", +"iJF c #bc9b59", +"bLY c #bc9b5a", +"iyA c #bc9b60", +"jdy c #bc9b65", +"h2V c #bc9c57", +"hzx c #bc9c58", +"eI# c #bc9d52", +"fps c #bc9d55", +"hdx c #bc9d56", +"#3l c #bc9d58", +"aJd c #bc9d5c", +"cP0 c #bc9e52", +"h81 c #bc9f5a", +"ee2 c #bc9f5c", +"dK3 c #bc9f5e", +"eIb c #bca051", +"eR5 c #bca052", +"a.1 c #bca055", +"kJx c #bca056", +"kMJ c #bca059", +"kNa c #bca05e", +"kEl c #bca05f", +"kry c #bca060", +"dO4 c #bca061", +"ejN c #bca062", +"#bB c #bca065", +"dHH c #bca155", +"dDa c #bca157", +"fll c #bca15b", +"kQb c #bca15e", +"dyD c #bca163", +"km1 c #bca166", +"c82 c #bca255", +"kJz c #bca256", +"dHB c #bca257", +"j02 c #bca260", +"jzr c #bca263", +".AQ c #bca264", +"eeY c #bca265", +"#bz c #bca266", +"kMN c #bca357", +"dUp c #bca359", +"#V2 c #bca364", +"jtL c #bca365", +"jFa c #bca366", +"dLC c #bca456", +"kGR c #bca457", +"e1F c #bca458", +"eWX c #bca459", +"d3B c #bca45b", +"#28 c #bca45e", +"#ZA c #bca45f", +"a9J c #bca460", +"dlm c #bca467", +"dll c #bca468", +"#fB c #bca46a", +"acO c #bca556", +"cC2 c #bca558", +"ef9 c #bca55d", +"eN. c #bca55e", +"#Zx c #bca560", +"a.9 c #bca562", +"#Le c #bca565", +"#z9 c #bca567", +"dbp c #bca568", +".Gt c #bca56b", +"dDF c #bca65a", +"aw9 c #bca65c", +"dYN c #bca65e", +"dup c #bca660", +"#Ah c #bca663", +"#Sd c #bca664", +"#qA c #bca668", +"dgv c #bca669", +"#kG c #bca66b", +"ksD c #bca671", +"kMS c #bca75a", +"ast c #bca75e", +"dUq c #bca75f", +"dYO c #bca761", +"#OF c #bca764", +"iFm c #bca765", +"#Lc c #bca767", +"aoP c #bca768", +"#nA c #bca76a", +"cta c #bca76d", +"cl0 c #bca85a", +"kPY c #bca85b", +"dP4 c #bca85e", +"dUs c #bca860", +"iTc c #bca865", +"fts c #bca866", +"fls c #bca867", +"j0o c #bca868", +".NL c #bca86c", +"dbo c #bca86e", +"kMZ c #bca95c", +"kP9 c #bca95d", +"elf c #bca960", +"fFa c #bca962", +"#OG c #bca965", +"ek6 c #bca966", +"fbB c #bca967", +"ftC c #bca968", +"jM# c #bca96c", +"#aJ c #bca96e", +"agT c #bcaa5a", +"ea7 c #bcaa5f", +"dYU c #bcaa64", +"fld c #bcaa66", +"fxM c #bcaa6a", +"j0p c #bcaa6c", +"dYT c #bcab68", +"eXe c #bcab6b", +"d3D c #bcac68", +"dQb c #bcac69", +"d3C c #bcac6a", +"e9l c #bcac6c", +"cgH c #bcac75", +"e9F c #bcac77", +"ao3 c #bcad60", +"d3k c #bcad6a", +"d3E c #bcad6b", +".TY c #bcad70", +"d3F c #bcae6e", +"e42 c #bcae71", +"e5g c #bcae79", +"ey3 c #bcaf6f", +"eXi c #bcaf74", +"kP7 c #bcb064", +"e6I c #bcb070", +"e1Z c #bcb074", +"eW1 c #bcb171", +"eNi c #bcb172", +"fxO c #bcb177", +"#N1 c #bcb17e", +"fxB c #bcb276", +"fc5 c #bcb277", +"bxN c #bcb278", +"ftF c #bcb377", +"e6r c #bcb378", +"e6t c #bcb379", +"e6J c #bcb473", +"fg0 c #bcb475", +"bk9 c #bcb47a", +"f.N c #bcb47b", +".Zx c #bcb47e", +"fxJ c #bcb57b", +"fty c #bcb57d", +"df9 c #bcb5a4", +"da4 c #bcb5a5", +"iEH c #bcb676", +"fcW c #bcb67d", +"ftz c #bcb67e", +"ftw c #bcb67f", +"aqc c #bcb695", +"fBj c #bcb77f", +"fxE c #bcb780", +"bTu c #bcb783", +"b4N c #bcb7ae", +"fxD c #bcb880", +"f2u c #bcb881", +"grz c #bcb981", +"gCZ c #bcb983", +"g4i c #bcba84", +"dgn c #bcbab7", +"fEN c #bcbb83", +"fIk c #bcbb84", +"gCV c #bcbb85", +"gy4 c #bcbb86", +"fMa c #bcbb87", +"aid c #bcbba1", +"db. c #bcbbb8", +"gOs c #bcbc85", +"gCW c #bcbc86", +"gCX c #bcbd86", +"gCY c #bcbd87", +"ezR c #bcbd88", +"hle c #bcbe87", +"hoO c #bcbf89", +"c5f c #bcbf9a", +"c0R c #bcbf9b", +"hwe c #bcc08a", +"bB7 c #bcc08d", +"fSM c #bcc18b", +"fPQ c #bcc18c", +"hwa c #bcc18d", +"h23 c #bcc18f", +"hoL c #bcc28c", +"hoK c #bcc28d", +"hNs c #bcc28f", +"hNo c #bcc38d", +"hw. c #bcc38e", +"hDc c #bcc38f", +"hW3 c #bcc391", +"h54 c #bcc392", +"hss c #bcc48f", +"hzJ c #bcc58f", +"ddA c #bcc7a9", +"#.k c #bcc8a2", +"eEC c #bccbac", +"d.m c #bccfbb", +".ix c #bccffe", +"aQA c #bcd187", +"eEJ c #bcd5cb", +".lc c #bcd8eb", +"aY5 c #bcdb98", +"eEY c #bcdcd3", +"c4X c #bcdde4", +".q9 c #bcdf91", +"ikD c #bce5bf", +"im6 c #bce6c1", +"ipz c #bce7c3", +".ru c #bceca8", +"cvT c #bcedff", +"cv6 c #bceefe", +"cMC c #bceeff", +"iJg c #bd5c19", +"jIE c #bd5e22", +"iVV c #bd5f1e", +"gIG c #bd693b", +"joX c #bd6e27", +"hQc c #bd6f2d", +"gEL c #bd7048", +"j1v c #bd753b", +"g6h c #bd7656", +"gYc c #bd7756", +"iMd c #bd7835", +"cX# c #bd794d", +"jnn c #bd7b47", +"hfu c #bd7b65", +"hmT c #bd7b68", +"hi5 c #bd7c68", +"hI. c #bd7d68", +"iKX c #bd7f2c", +"jZj c #bd8047", +"hi4 c #bd806b", +"hbN c #bd8270", +"jK5 c #bd8339", +"hQF c #bd8432", +"jBz c #bd8654", +"hEW c #bd8672", +"juV c #bd8736", +"jwY c #bd8739", +"ixV c #bd8756", +"#hq c #bd883f", +"f.b c #bd8937", +".27 c #bd8940", +"#j2 c #bd8941", +"#e3 c #bd8942", +"g1O c #bd8972", +"i7v c #bd8a45", +"#cq c #bd8b42", +"jNz c #bd8b43", +"jOy c #bd8c46", +"g5Y c #bd8c78", +"g9U c #bd8c79", +"gXM c #bd8d76", +"jjm c #bd8f45", +"dGp c #bd8f4e", +"hqp c #bd8f79", +"j3a c #bd9045", +"#co c #bd9048", +"inA c #bd9064", +"dKu c #bd9152", +"jsP c #bd9163", +"hue c #bd917b", +"jVq c #bd934b", +"iLt c #bd9369", +"ksR c #bd936a", +"jXN c #bd954c", +".0W c #bd9550", +".2Z c #bd9650", +".7h c #bd9751", +"dCe c #bd975e", +"fLW c #bd9851", +"f14 c #bd9852", +"gCD c #bd994f", +".Me c #bd995d", +".Ox c #bd995f", +"fpq c #bd9b51", +"iPq c #bd9b59", +"#t2 c #bd9b5b", +"daC c #bd9b64", +"dkE c #bd9b66", +"fpr c #bd9c53", +".Y. c #bd9c5f", +".QQ c #bd9c62", +".MH c #bd9c65", +"iVd c #bd9d5d", +"eDr c #bd9e4d", +"fpn c #bd9e55", +"hvX c #bd9e5a", +"aNs c #bd9e5d", +"iPp c #bd9e5e", +"dUo c #bd9f53", +"dO5 c #bd9f5f", +".15 c #bd9f63", +"asH c #bd9f64", +".Bm c #bd9f6b", +"kPQ c #bda057", +"aoL c #bda05d", +"eR2 c #bda152", +"eMY c #bda153", +"eR1 c #bda155", +"i#N c #bda15c", +"dGY c #bda15e", +"eaf c #bda161", +"aV5 c #bda162", +"#ww c #bda163", +"eWV c #bda256", +"kPS c #bda257", +"iks c #bda25e", +"iVc c #bda262", +"d7o c #bda263", +"dyC c #bda264", +"duV c #bda354", +"eR0 c #bda357", +"dum c #bda364", +"dpU c #bda365", +".t0 c #bda368", +"dbZ c #bda458", +"e1D c #bda459", +"ebn c #bda45b", +"eN# c #bda45d", +"j8o c #bda461", +"awQ c #bda462", +"#Ho c #bda464", +"#Sq c #bda466", +"#.H c #bda467", +"dzi c #bda558", +"d8o c #bda55c", +"d8p c #bda55d", +"#Zz c #bda55e", +"jSP c #bda560", +"#qx c #bda567", +"k#9 c #bda56d", +"al# c #bda65b", +"ek4 c #bda660", +"cUg c #bda661", +"jl6 c #bda663", +"#K4 c #bda665", +"dlk c #bda669", +"#kK c #bda66a", +"#Vm c #bda66e", +"d3A c #bda75f", +"#tL c #bda768", +"#h8 c #bda76a", +"kjA c #bda772", +"kJE c #bda85a", +"d3I c #bda85d", +"dUr c #bda85f", +"dp1 c #bda860", +"akU c #bda861", +"ek5 c #bda862", +"#Ou c #bda863", +"knQ c #bda864", +"a9K c #bda866", +"#OJ c #bda867", +"#Hw c #bda868", +".8a c #bda86c", +"#qa c #bda871", +"a.h c #bda874", +"cPu c #bda877", +"kMT c #bda95b", +"d3H c #bda960", +"epL c #bda962", +"#VP c #bda964", +"eDu c #bda965", +"#nn c #bda96f", +".AB c #bda971", +"dzm c #bdaa5f", +"fbC c #bdaa68", +"fbA c #bdaa69", +"acM c #bdab5a", +"kM0 c #bdab5d", +"dL2 c #bdab66", +"e41 c #bdab6b", +"ff6 c #bdab72", +"co3 c #bdab7d", +"ekH c #bdac60", +"dUz c #bdac6a", +"#ky c #bdac75", +"ea8 c #bdad66", +"bWu c #bdad67", +"aJa c #bdad69", +"d3G c #bdad6b", +"flr c #bdad70", +"b9o c #bdad74", +"ey1 c #bdae6f", +"#tr c #bdae76", +"d3l c #bdaf6d", +"ey2 c #bdaf6e", +"eDM c #bdaf6f", +"eDL c #bdaf70", +"eSo c #bdaf72", +"as2 c #bdb05f", +"eDJ c #bdb06f", +"eID c #bdb070", +"eIE c #bdb071", +"#Y0 c #bdb07c", +"fBl c #bdb174", +"e11 c #bdb175", +"ftG c #bdb276", +"f.Q c #bdb277", +"fMm c #bdb278", +"#RG c #bdb27a", +"#hV c #bdb282", +"e6s c #bdb377", +"f.O c #bdb378", +"fP0 c #bdb379", +".AE c #bdb37d", +"fWd c #bdb479", +"e6x c #bdb47a", +"jhM c #bdb484", +"fcZ c #bdb57b", +"f2x c #bdb57c", +"dyn c #bdb5a4", +"ekM c #bdb679", +"g#E c #bdb67d", +"fPZ c #bdb67e", +"gSj c #bdb77d", +"fSU c #bdb77e", +"f5M c #bdb77f", +"gC0 c #bdb87f", +"f5L c #bdb880", +"fZi c #bdb881", +"f.y c #bdb97e", +"gz. c #bdb981", +"fcL c #bdba81", +"g0i c #bdba82", +"gy9 c #bdba83", +"cYe c #bdbab6", +"e6a c #bdbb81", +"f5G c #bdbb83", +"f8z c #bdbb84", +"ggC c #bdbb85", +"fSK c #bdbc85", +"gGK c #bdbc86", +"bGB c #bdbc87", +"fPN c #bdbd87", +"hhH c #bdbe87", +"hhC c #bdbe88", +"bLJ c #bdbeac", +"hlg c #bdbf88", +"dtW c #bdbfbb", +"hDk c #bdc08a", +"hla c #bdc18b", +"hsu c #bdc28c", +"hw# c #bdc28d", +"hTZ c #bdc28e", +"c0Q c #bdc2a0", +"fSN c #bdc38c", +"hNt c #bdc38e", +"hT3 c #bdc390", +"h53 c #bdc392", +"fPR c #bdc48d", +"hJ4 c #bdc48e", +"hv9 c #bdc48f", +"ah2 c #bdc4af", +"hJ2 c #bdc58f", +"#kv c #bdc5a0", +"caH c #bdc89e", +".iy c #bdcdfe", +"dAz c #bdcfb5", +".jV c #bdcff2", +"aMn c #bdd597", +".kw c #bdd8f3", +"aMa c #bddc9f", +"dZu c #bddcce", +"aHY c #bddf9e", +"d4o c #bde2dc", +"cAf c #bdeaef", +"d89 c #bdece2", +"cz7 c #bdedff", +"cz9 c #bdeeff", +".q6 c #bdf4c0", +"irc c #be4f2a", +"iEC c #be5b13", +"g2n c #be5d2f", +"i6Y c #be5f1c", +"jfQ c #be5f1d", +"iAL c #be6923", +"jNZ c #be692a", +"i60 c #be6b27", +"iJi c #be7228", +"hLn c #be7343", +"jev c #be7640", +"iA6 c #be7748", +"kLU c #be7a3c", +"jNE c #be7c29", +".a7 c #be7ebf", +"hft c #be826d", +"jhU c #be8336", +"gIx c #be8473", +"hbI c #be856f", +"jIm c #be8743", +"hBo c #be8775", +"gVY c #be8837", +"ifj c #be8936", +"iQT c #be8a3b", +"##7 c #be8a41", +"gXH c #be8a73", +"g9X c #be8a76", +"g5S c #be8b75", +"jGu c #be8d3c", +"hLg c #be8d74", +"hjf c #be8d79", +"fs6 c #be8e41", +"g5X c #be8e79", +"g5Z c #be8f7b", +"j5h c #be903e", +"hYT c #be9151", +"iX0 c #be9157", +"hqq c #be917b", +"jO0 c #be9261", +"i8Z c #be9361", +".45 c #be944d", +"cuk c #be9548", +"f11 c #be954a", +"esI c #be955b", +"jmU c #be956a", +".42 c #be9650", +"exi c #be975d", +"iZV c #be976e", +"d7N c #be984f", +"jod c #be9863", +"i5r c #be986e", +"fs9 c #be9952", +"hf7 c #be9959", +"hPo c #be9a5a", +"hKO c #be9a86", +"cyC c #be9b51", +"b0p c #be9b58", +"hFh c #be9b5b", +"hf6 c #be9b5d", +".6q c #be9b60", +".G4 c #be9b62", +".Ex c #be9b68", +"g3Y c #be9c56", +"iMw c #be9c5a", +"hVs c #be9c5c", +".4c c #be9c5d", +"g6t c #be9c60", +"joe c #be9c6e", +"iVf c #be9d5d", +".Wh c #be9d60", +".BC c #be9d6a", +".Yn c #be9d6c", +".He c #be9d6d", +"eIg c #be9e4f", +"iGT c #be9e5e", +".Bo c #be9e6d", +"dLR c #be9f4e", +"dP0 c #be9f4f", +"dUn c #be9f51", +"hZZ c #be9f5d", +"eyF c #bea04d", +"eR4 c #bea04f", +"eNd c #bea057", +"aRK c #bea060", +"awG c #bea069", +"iSo c #bea162", +"awF c #bea167", +"dHG c #bea253", +"kPT c #bea258", +"dDw c #bea353", +"eMX c #bea355", +"dT4 c #bea358", +"eNa c #bea35b", +"a.2 c #bea35c", +"fpt c #bea35d", +"apg c #bea361", +"i0W c #bea362", +"eoI c #bea363", +"dTt c #bea365", +"ct5 c #bea36a", +"dHt c #bea454", +"dlY c #bea457", +"dlX c #bea458", +"eIh c #bea45b", +"ef8 c #bea45c", +"dTr c #bea465", +"dpT c #bea466", +"#Vo c #bea46c", +"epu c #bea552", +"dl1 c #bea557", +"dPF c #bea55a", +"ebm c #bea55d", +"#fF c #bea566", +"#DV c #bea567", +"#by c #bea568", +"kGp c #bea56b", +"h17 c #bea579", +"dqt c #bea656", +"dlZ c #bea657", +"dzk c #bea65a", +"eug c #bea65c", +"kgK c #bea661", +"#tQ c #bea667", +"#a4 c #bea669", +"b9k c #bea66b", +"#6j c #bea66d", +"exP c #bea66e", +"dl0 c #bea758", +"cl3 c #bea759", +"e57 c #bea75c", +"eR6 c #bea75d", +"dYM c #bea75f", +"#K2 c #bea764", +"#K5 c #bea765", +"#qy c #bea768", +"bP7 c #bea76c", +"e58 c #bea85e", +"d8n c #bea860", +"eM9 c #bea862", +"irM c #bea863", +"ffQ c #bea866", +"jG0 c #bea87a", +"akF c #bea95c", +"dYz c #bea95d", +"d3z c #bea961", +"ebo c #bea962", +"jRm c #bea966", +"ffP c #bea967", +"kJB c #beaa5d", +"kMV c #beaa5f", +"ef0 c #beaa64", +"#VS c #beaa65", +"#Lb c #beaa6a", +".3O c #beaa6f", +"kJC c #beab5c", +"ea6 c #beab5d", +"#OD c #beab66", +"cqU c #beac57", +"dDB c #beac60", +"fxX c #beac64", +"#Sf c #beac66", +"dQa c #beac68", +"eSd c #beac6a", +"eur c #beac6b", +"#N5 c #beac70", +"e5f c #beac75", +"e59 c #bead65", +"dUA c #beae6a", +"d3o c #beae6b", +"#zW c #beae72", +".Dw c #beae78", +"#fr c #beae7a", +"ebe c #beaf6c", +"d8. c #beaf6d", +"eDK c #beaf6f", +"e0t c #beaf71", +"fhg c #beaf72", +"#zU c #beaf73", +"ekI c #beb06a", +"ey4 c #beb06f", +"eIF c #beb072", +"kM2 c #beb15e", +"ebb c #beb171", +"eDN c #beb172", +"fh# c #beb173", +"fMn c #beb174", +"aw4 c #beb264", +"f.P c #beb274", +"fpD c #beb276", +"bRA c #beb36a", +"eba c #beb375", +"fpA c #beb377", +"flw c #beb378", +"eyM c #beb476", +"eb# c #beb477", +"f.S c #beb478", +"fZk c #beb479", +"bxL c #beb47a", +"bZF c #beb47b", +"#nf c #beb47f", +"fhk c #beb57a", +"fPX c #beb57b", +"f8F c #beb57c", +"f8E c #beb67d", +"gWg c #beb67e", +"dua c #beb6a5", +"fB. c #beb77d", +"grB c #beb77f", +"bU7 c #beb7ae", +"g0g c #beb87e", +"bUQ c #beb87f", +"grA c #beb880", +"dgc c #beb8b1", +"fWb c #beb980", +"fST c #beba82", +"gCU c #beba84", +"f5D c #bebb83", +"gKz c #bebb85", +"cgV c #bebbb8", +"fIj c #bebc84", +"gGJ c #bebc85", +"hdZ c #bebc86", +"bUU c #bebd83", +"hhG c #bebd86", +"bUY c #bebdbb", +"dcR c #bebea0", +"hlh c #bebf87", +"hlc c #bebf88", +"b4H c #bebfbe", +"bgR c #bec08a", +"bYl c #bec08e", +"c0N c #bec09a", +"cpG c #bec0b9", +"hlb c #bec189", +"bxU c #bec18a", +"hsv c #bec18b", +"bB8 c #bec18d", +"hGJ c #bec28b", +"hl# c #bec28c", +"h55 c #bec391", +"c0P c #bec39f", +"fPT c #bec48d", +"hoJ c #bec48e", +"hW4 c #bec491", +"hsr c #bec58e", +"hzI c #bec58f", +"diA c #bec5a4", +".hc c #bec5fb", +"ck1 c #bec7c9", +".hU c #becbff", +".jd c #becff9", +"elK c #bed0ad", +"dz6 c #bed0c1", +"egM c #bed1a7", +"cEv c #bed2c8", +"aMb c #bedd9c", +"fd4 c #bedec9", +"f3f c #bee3aa", +"eJS c #beebf1", +"b1N c #beebfa", +"crG c #beeeff", +"ijz c #bf531c", +"ioq c #bf5719", +"iGv c #bf571d", +"joS c #bf581b", +"iyY c #bf5c15", +"i9e c #bf611e", +"g6k c #bf6439", +"i9v c #bf651f", +"gUi c #bf6a44", +"iGs c #bf6b24", +"jDi c #bf6c27", +"iAK c #bf6c2c", +"jew c #bf733c", +"bsz c #bf7644", +"b8j c #bf7646", +"i7t c #bf7715", +"iQh c #bf772d", +"hIN c #bf7739", +"j31 c #bf783d", +"gYb c #bf7f63", +"hLs c #bf7f69", +"jZ1 c #bf8027", +"hj. c #bf806d", +"hqg c #bf836e", +".by c #bf84c1", +"huu c #bf8567", +"j76 c #bf8628", +"hmD c #bf8875", +"hfE c #bf8876", +"ipo c #bf8937", +"hEP c #bf8976", +"hBi c #bf8977", +".b8 c #bf89c2", +"jjn c #bf8a37", +"#eZ c #bf8a40", +".06 c #bf8a41", +"hqm c #bf8a76", +"#mO c #bf8b42", +"i3O c #bf8b47", +"hbC c #bf8b75", +"g53 c #bf8b78", +"juW c #bf8c3c", +"##8 c #bf8c42", +"jCF c #bf8c43", +"g5T c #bf8c76", +"jQ5 c #bf8d3a", +".26 c #bf8d43", +"g5R c #bf8d78", +"gCJ c #bf8e40", +"#e1 c #bf8e45", +"i8X c #bf8f46", +"hVa c #bf8f78", +"g97 c #bf8f79", +"#cu c #bf9048", +"#cn c #bf9148", +"g12 c #bf917c", +"dKx c #bf9251", +"kxK c #bf9262", +"gQb c #bf9286", +".7k c #bf944c", +"hn. c #bf947b", +".7j c #bf954d", +".20 c #bf954e", +"etF c #bf9553", +".7i c #bf964f", +".W7 c #bf9651", +"cuj c #bf974b", +"jYs c #bf974e", +".Y1 c #bf9750", +"iOo c #bf986e", +"iUc c #bf9870", +"cui c #bf994e", +"kb7 c #bf9979", +"iZZ c #bf997a", +"iay c #bf997f", +".GV c #bf9a60", +"dWn c #bf9a7b", +"hqT c #bf9b59", +".0b c #bf9b5c", +"h.q c #bf9b5e", +"i3P c #bf9b66", +"h#O c #bf9c4e", +"iYa c #bf9c59", +"e#L c #bf9c65", +"eIf c #bf9d4b", +"eCD c #bf9d56", +".18 c #bf9d5e", +"eM0 c #bf9e4c", +"eM1 c #bf9e4d", +".2b c #bf9e61", +"eDq c #bf9f4b", +"jVi c #bf9f51", +"iMr c #bf9f5e", +"kfV c #bf9f6c", +"hOg c #bf9f8d", +"hQI c #bfa05a", +"ejR c #bfa05c", +"eNc c #bfa158", +"kMI c #bfa159", +"hTQ c #bfa15c", +"ee3 c #bfa15d", +"hNd c #bfa15e", +"iX9 c #bfa161", +".LV c #bfa167", +"#gs c #bfa174", +"eIc c #bfa251", +"cD. c #bfa254", +"awJ c #bfa26b", +"dYL c #bfa357", +"kMK c #bfa359", +"eNb c #bfa35b", +"i2h c #bfa35d", +"gKh c #bfa35f", +"kEm c #bfa361", +"asE c #bfa362", +"aAw c #bfa363", +"#d1 c #bfa366", +"awD c #bfa368", +"cUB c #bfa458", +"aAu c #bfa460", +"kG7 c #bfa461", +"kpo c #bfa463", +"dTu c #bfa465", +"dGW c #bfa468", +"iod c #bfa46c", +"c4a c #bfa559", +"eyR c #bfa55d", +"jd. c #bfa561", +"#ON c #bfa563", +"asN c #bfa564", +"jwE c #bfa565", +"dTs c #bfa567", +"c81 c #bfa659", +"e56 c #bfa65a", +"ebl c #bfa65c", +"eIi c #bfa65d", +"ihU c #bfa661", +"kwx c #bfa664", +"jqU c #bfa665", +"eoF c #bfa668", +".xB c #bfa669", +"etd c #bfa66d", +"fbQ c #bfa671", +"dDz c #bfa75b", +"eIr c #bfa760", +"jl7 c #bfa765", +"#DK c #bfa766", +"dul c #bfa769", +"#tG c #bfa76a", +"ete c #bfa76b", +"bUN c #bfa76c", +"kcT c #bfa76f", +"cHe c #bfa85b", +"d8m c #bfa85f", +"#3c c #bfa865", +"#DN c #bfa867", +"dyB c #bfa86b", +"#Y8 c #bfa86f", +"e5. c #bfa870", +"ff5 c #bfa871", +".uW c #bfa879", +"aw6 c #bfa957", +"e1G c #bfa95e", +"#6P c #bfa961", +"jTM c #bfa965", +"ffR c #bfa967", +"#wP c #bfa96b", +".XQ c #bfa96d", +"dgw c #bfa96e", +"e5e c #bfa973", +"dUd c #bfaa5b", +"dDE c #bfaa5c", +"d3y c #bfaa62", +"kxc c #bfaa65", +"i7f c #bfaa67", +"#kP c #bfaa6c", +"dgx c #bfaa6f", +"a.i c #bfaa73", +"kGT c #bfab5b", +"dDA c #bfab60", +"asu c #bfab61", +"kPX c #bfab62", +"d8r c #bfab63", +"akO c #bfab6a", +"a.R c #bfac5f", +"#Hh c #bfac63", +"ebf c #bfac65", +"#K8 c #bfac69", +"#3o c #bfac6b", +"#qk c #bfac6e", +"fkc c #bfac72", +"kPZ c #bfad5e", +"dDC c #bfad61", +"aoZ c #bfad63", +"ebc c #bfad68", +"e9m c #bfad6d", +"#kB c #bfad76", +"akR c #bfae6a", +"eDv c #bfae6b", +"fhh c #bfae6d", +"fhi c #bfae6e", +"eXh c #bfae6f", +"#Dq c #bfae75", +"#tv c #bfae76", +"agj c #bfae7c", +"akX c #bfaf67", +"eg# c #bfaf68", +"dbF c #bfaf6b", +"agE c #bfaf6c", +"e43 c #bfaf70", +"fBo c #bfaf72", +"fE0 c #bfaf73", +".3E c #bfaf77", +".AD c #bfaf7a", +"agP c #bfb068", +"d8b c #bfb06d", +"fEZ c #bfb074", +"#YY c #bfb076", +"kJI c #bfb15e", +"a.L c #bfb168", +"eyJ c #bfb16e", +"fc4 c #bfb172", +"e10 c #bfb173", +"cgI c #bfb179", +"kM1 c #bfb262", +"kP6 c #bfb269", +"d8c c #bfb270", +"fc2 c #bfb274", +"fxA c #bfb276", +"b4v c #bfb278", +"fbW c #bfb27b", +"d8d c #bfb372", +"fc1 c #bfb376", +"gc3 c #bfb378", +"ea9 c #bfb471", +"eyL c #bfb474", +"ezf c #bfb476", +"fE5 c #bfb477", +"bGu c #bfb478", +"f2y c #bfb479", +"g#F c #bfb47a", +"eW0 c #bfb576", +"fcX c #bfb579", +"fc0 c #bfb57a", +"e6. c #bfb673", +"eb. c #bfb677", +"gWi c #bfb67c", +"btG c #bfb67d", +"gnZ c #bfb77c", +"bxM c #bfb77d", +"f2t c #bfb77e", +"gvq c #bfb87d", +"gKD c #bfb87e", +"f2s c #bfb87f", +"b9H c #bfb8ad", +"fgZ c #bfb97c", +"f2r c #bfb97f", +"f2q c #bfb980", +"clw c #bfb9b1", +"f5F c #bfba81", +"gy3 c #bfba83", +"dpx c #bfbaac", +"f8x c #bfbb81", +"fEM c #bfbb82", +"gGI c #bfbb83", +"gOr c #bfbb84", +"bLI c #bfbba8", +"hhI c #bfbc82", +"bQ. c #bfbc83", +"hd0 c #bfbc84", +"fcK c #bfbd83", +"fM# c #bfbd85", +"dyg c #bfbdba", +"b5c c #bfbdbb", +"bU0 c #bfbebc", +"hlf c #bfbf86", +"bQb c #bfbf88", +"eAm c #bfbf89", +"bLl c #bfc089", +"diD c #bfc09f", +"ct1 c #bfc0b5", +"hDl c #bfc189", +"h52 c #bfc18d", +"bLn c #bfc28c", +"bLm c #bfc28d", +"bGD c #bfc38d", +"h26 c #bfc390", +"ctU c #bfc3c3", +"hGF c #bfc48d", +"hQU c #bfc48e", +"hW5 c #bfc490", +"hJ3 c #bfc68e", +"fPS c #bfc78e", +"eqv c #bfca97", +"aUY c #bfd081", +".kB c #bfd0e7", +".nc c #bfd4b4", +"ezG c #bfd4cf", +"eEZ c #bfd6c7", +"eJq c #bfebf1", +"b6H c #bfecfc", +"ck9 c #bfedf5", +"cAe c #bfedf6", +"cEe c #bfeeff", +"cMk c #bfefff", +"gJI c #c0541f", +"jcu c #c0581d", +"iGu c #c05920", +"gmj c #c05922", +"gp8 c #c05d21", +"iyZ c #c05e18", +"il2 c #c05e1f", +"jIB c #c05f1a", +"iwb c #c06218", +"iAM c #c0661f", +"i4p c #c06c2a", +"cj0 c #c07644", +"iZh c #c07a18", +"iDE c #c07a23", +"iGn c #c07a29", +"hSa c #c07d68", +"cgq c #c0833c", +"hj# c #c08371", +"jGA c #c08630", +"jJo c #c08631", +"iO9 c #c08634", +"j9g c #c0864a", +"hEX c #c08876", +"i0E c #c0894b", +"iw5 c #c08a39", +"jkX c #c08a3f", +"#cv c #c08a41", +"hBp c #c08a78", +"jkZ c #c08d49", +"gPR c #c08d79", +"jyd c #c08e3a", +"jJm c #c08e3b", +"g1T c #c08e75", +"iSc c #c08f56", +"hBv c #c08f7b", +"#e2 c #c09048", +"j20 c #c0923f", +"eax c #c0924d", +"g11 c #c0927c", +"##3 c #c0934b", +"inz c #c0936a", +"dGq c #c09452", +".9G c #c0954d", +"dOE c #c09557", +"ghO c #c0956c", +".44 c #c0964e", +".43 c #c0964f", +"ixC c #c0966e", +"iZg c #c09748", +".0X c #c09750", +"j2s c #c09853", +"iAm c #c0986f", +"j6# c #c09877", +"d7K c #c0995c", +".Ee c #c09a5d", +"jgP c #c09a74", +"c2m c #c09a7d", +".Ef c #c09b60", +"dTE c #c09b69", +"jd4 c #c09b7c", +"iW6 c #c09b7d", +".Uh c #c09c5d", +"eHt c #c09d53", +"hk0 c #c09d56", +"gv. c #c09d57", +".0a c #c09d5e", +"jyA c #c09d81", +"gnw c #c09e55", +".Wc c #c09e60", +"dtI c #c09e68", +"f.e c #c09f57", +"iPr c #c09f5d", +"dx0 c #c09f69", +"hZ0 c #c0a05a", +"i00 c #c0a05f", +"i3Q c #c0a064", +"eDo c #c0a24e", +"eIy c #c0a258", +"clF c #c0a264", +"dYK c #c0a355", +"cC0 c #c0a359", +"d3d c #c0a35a", +"dYo c #c0a35b", +"jWg c #c0a35c", +"hWO c #c0a35e", +"i0X c #c0a363", +"awI c #c0a36a", +"awH c #c0a36c", +"fpm c #c0a45b", +"bB4 c #c0a464", +"awE c #c0a467", +"ebk c #c0a559", +"eIs c #c0a55b", +"kM9 c #c0a562", +"bxP c #c0a565", +"aAA c #c0a56b", +".8C c #c0a577", +"d8l c #c0a65a", +"d2N c #c0a65c", +"ek3 c #c0a65e", +"epT c #c0a65f", +"kJV c #c0a664", +"eag c #c0a666", +"dXS c #c0a667", +"d2D c #c0a669", +"geX c #c0a66c", +"dHF c #c0a758", +"d3x c #c0a75b", +"flt c #c0a763", +"#Sr c #c0a766", +"cxx c #c0a767", +"#wY c #c0a768", +"#Dc c #c0a76b", +"kGL c #c0a85c", +"eSk c #c0a864", +"eoH c #c0a86c", +"j4n c #c0a86e", +"#nd c #c0a871", +"dzl c #c0a95d", +"#29 c #c0a961", +"dXZ c #c0a962", +"#K1 c #c0a965", +"#ZB c #c0a966", +"e9j c #c0a967", +"d2z c #c0a96c", +"e49 c #c0a96e", +"exO c #c0a973", +"a.Q c #c0aa5f", +"kCp c #c0aa64", +"iTd c #c0aa65", +"#6S c #c0aa66", +"duk c #c0aa6c", +"e0z c #c0aa6d", +"#nu c #c0aa6e", +"#ns c #c0aa6f", +"dPR c #c0ab5d", +"kQa c #c0ab62", +"d8q c #c0ab63", +"akV c #c0ab64", +"jI2 c #c0ab69", +"fbD c #c0ab6a", +".Gb c #c0ab73", +"dDD c #c0ac60", +"ebp c #c0ac65", +"eM8 c #c0ac68", +"#Sh c #c0ac69", +"e0s c #c0ac6d", +"e0J c #c0ac75", +"c3Q c #c0ad66", +"eDI c #c0ad68", +"ey0 c #c0ad6b", +"j2Q c #c0ad6d", +"eVP c #c0ad70", +"jJL c #c0ad7a", +"agu c #c0ae5e", +"ao1 c #c0ae63", +"aoS c #c0ae6c", +"#OI c #c0ae6d", +"e0u c #c0ae6f", +"fxN c #c0ae70", +"#GS c #c0ae73", +"ahl c #c0ae7d", +"ftr c #c0af70", +".xn c #c0af77", +"je6 c #c0af7b", +"acN c #c0b05f", +"ak1 c #c0b062", +"acS c #c0b065", +"jnV c #c0b070", +"kM3 c #c0b15f", +"kMY c #c0b165", +"cLl c #c0b166", +"agO c #c0b169", +"d8a c #c0b16d", +"eDA c #c0b16f", +"eSc c #c0b171", +"fIz c #c0b174", +"#Vj c #c0b175", +"#z3 c #c0b177", +"kJJ c #c0b25e", +"kGW c #c0b25f", +"#2z c #c0b278", +"e0K c #c0b280", +"ao7 c #c0b360", +"d8e c #c0b371", +"eNj c #c0b374", +"ftH c #c0b375", +"fpw c #c0b376", +"fZl c #c0b377", +"f5N c #c0b378", +"eyK c #c0b473", +"eSb c #c0b475", +"fcY c #c0b477", +"fpy c #c0b478", +"ggL c #c0b479", +"e5h c #c0b482", +"#U7 c #c0b488", +"eSa c #c0b577", +"eS. c #c0b578", +"fpz c #c0b57a", +"ekJ c #c0b673", +"eS# c #c0b679", +"gkm c #c0b67b", +"#Vg c #c0b67c", +"fA9 c #c0b77b", +"eXy c #c0b874", +"fBp c #c0b87b", +"gC3 c #c0b87c", +"fWa c #c0b87d", +"eXm c #c0b97c", +"g8n c #c0b97d", +"g0f c #c0b97e", +"g4h c #c0b97f", +"gSg c #c0ba7e", +"f5E c #c0ba7f", +"f8y c #c0ba81", +"gOq c #c0ba82", +"gcW c #c0bb82", +"fIi c #c0bb84", +"b0d c #c0bcad", +"e6# c #c0bd82", +"fPM c #c0bd84", +"evd c #c0be85", +"#fi c #c0be95", +"bQL c #c0beb8", +"ccn c #c0bebb", +"hhB c #c0bf86", +"eve c #c0bf87", +"hwf c #c0bf88", +"c5g c #c0bf95", +"cPt c #c0bfbe", +"hoQ c #c0c088", +"ezO c #c0c09a", +"h22 c #c0c18d", +"c0O c #c0c19b", +"c9R c #c0c1a6", +"hDm c #c0c289", +"evf c #c0c28c", +"hWY c #c0c28d", +"c40 c #c0c2a9", +"hDi c #c0c38a", +"hl. c #c0c38b", +"bGC c #c0c38e", +"cpH c #c0c3b9", +"hJ7 c #c0c48c", +"hQZ c #c0c48e", +"hNp c #c0c58d", +"fSO c #c0c68d", +"c5m c #c0c6a1", +".iB c #c0cafb", +".hV c #c0cafe", +"c98 c #c0cbb6", +"ddm c #c0cdaf", +"eqt c #c0d5b1", +"bR0 c #c0ecfe", +"eJP c #c0edf3", +"ceL c #c0edfe", +"b6I c #c0eefd", +"cA. c #c0eeff", +"c93 c #c0efff", +"gNw c #c1571e", +"iBx c #c15d13", +"iGt c #c16223", +"jIF c #c16425", +"jLo c #c16829", +"g6j c #c16e49", +"iQ. c #c17226", +"hMJ c #c17730", +"h4g c #c17742", +"bwC c #c17745", +"ijO c #c17b30", +"j6n c #c17c3f", +"j81 c #c17d3e", +"jhT c #c17f2e", +"hfv c #c1826d", +"hmR c #c1826e", +"i8C c #c1834a", +"hfz c #c18473", +"gIw c #c18776", +"hmN c #c18874", +"i6n c #c18a3e", +"k.u c #c18b2c", +"i4Y c #c18b40", +"hzv c #c18c3b", +"jP9 c #c18c41", +"jB# c #c18d3b", +"#e0 c #c18d43", +"hbT c #c18d77", +"g9S c #c18d79", +"hql c #c18e79", +"iva c #c18f5e", +".cL c #c18fc4", +"hmX c #c1907b", +"j7Y c #c1913b", +"jLT c #c1923c", +"g5P c #c1927a", +"hBz c #c1937e", +"jyg c #c19448", +"ip9 c #c1946d", +"hqA c #c1947c", +"hug c #c1947e", +".9H c #c1954b", +"iU4 c #c1955e", +"hEN c #c1957a", +"jyl c #c1964c", +"dOF c #c19656", +".d9 c #c197c5", +"jmj c #c19957", +"dSX c #c1995c", +"dPl c #c19a50", +"jfd c #c19a6c", +"iLy c #c19a73", +"j4V c #c19c62", +"cCT c #c19d53", +"en5 c #c19d62", +"eo8 c #c19d67", +".Z9 c #c19e5e", +"iFn c #c19f51", +"eRM c #c19f56", +"eCE c #c19f57", +"iJI c #c19f5e", +".0# c #c19f60", +"eIe c #c1a04c", +"cyJ c #c1a155", +"eIx c #c1a156", +"ejS c #c1a15c", +"cX8 c #c1a168", +"dLQ c #c1a24f", +"hC6 c #c1a25b", +".DL c #c1a25f", +".Z3 c #c1a267", +".LU c #c1a26c", +"exW c #c1a360", +"kGJ c #c1a45b", +"gZS c #c1a45d", +"kQe c #c1a461", +"et2 c #c1a552", +"d3w c #c1a557", +"d8k c #c1a558", +"ef7 c #c1a55b", +"hvP c #c1a55d", +"eIz c #c1a55e", +"hhe c #c1a560", +"aJc c #c1a564", +"aNr c #c1a565", +"imP c #c1a659", +"ef6 c #c1a65a", +"i3U c #c1a668", +"asF c #c1a66a", +"dHs c #c1a757", +"kBp c #c1a75c", +"kD0 c #c1a75d", +"d2E c #c1a768", +"aV4 c #c1a76a", +"#t6 c #c1a772", +"dqs c #c1a858", +"dHC c #c1a85a", +"kGK c #c1a85c", +"eIj c #c1a85f", +"jQS c #c1a866", +"dXT c #c1a869", +"a0k c #c1a86b", +"d7p c #c1a86c", +"#D4 c #c1a86d", +"ekU c #c1a960", +"js# c #c1a966", +"jpa c #c1a967", +"#DM c #c1a969", +"etf c #c1a96c", +"#nF c #c1a96d", +"e9w c #c1a96f", +"e9y c #c1a975", +"kD3 c #c1aa5c", +"kGM c #c1aa5d", +"#3# c #c1aa60", +"euq c #c1aa65", +"e40 c #c1aa67", +"eoG c #c1aa6e", +"exQ c #c1aa70", +"ka. c #c1aa71", +"e9x c #c1aa72", +"e0H c #c1aa77", +"d8s c #c1ab5f", +"cPP c #c1ab61", +"#60 c #c1ab68", +"#Af c #c1ab69", +"aRI c #c1ab6e", +"e0G c #c1ab7a", +"ciq c #c1ac55", +"kD7 c #c1ac5d", +"kGN c #c1ac5e", +"#6O c #c1ac60", +"fbE c #c1ac6b", +"#64 c #c1ac6d", +"eVQ c #c1ac6e", +"e0A c #c1ac74", +"e0I c #c1ac75", +"#6N c #c1ad61", +"cPQ c #c1ad62", +"eNh c #c1ad6a", +"e0r c #c1ad6e", +".DR c #c1ad70", +"#kF c #c1ad73", +"iYY c #c1ae6b", +"eXf c #c1ae6c", +"fBn c #c1ae6f", +"#Hg c #c1af67", +"c8I c #c1af6a", +"#k6 c #c1af73", +"#nl c #c1af74", +"kJD c #c1b061", +"agL c #c1b069", +"#OE c #c1b06b", +"j5# c #c1b071", +"kJG c #c1b162", +"eWY c #c1b16d", +"fc3 c #c1b171", +"fWe c #c1b173", +"#wx c #c1b176", +"acI c #c1b268", +"d8# c #c1b26e", +"ebd c #c1b26f", +"fha c #c1b273", +"fpv c #c1b274", +"a1q c #c1b278", +"ek8 c #c1b36e", +"flc c #c1b372", +"fhf c #c1b375", +"fxz c #c1b376", +"g#H c #c1b377", +"gc5 c #c1b475", +"fhd c #c1b476", +"fc6 c #c1b477", +"gn2 c #c1b478", +"gn1 c #c1b479", +"cgJ c #c1b47b", +"ggN c #c1b578", +"fPY c #c1b579", +"#Kw c #c1b57c", +"eV5 c #c1b582", +"eR9 c #c1b678", +"f.T c #c1b679", +"e5i c #c1b682", +"e0L c #c1b684", +"kP3 c #c1b774", +"efW c #c1b777", +"grC c #c1b77a", +"fSW c #c1b77b", +"gC1 c #c1b77c", +"e5j c #c1b781", +"e9G c #c1b782", +"eNy c #c1b876", +"eWZ c #c1b879", +"e15 c #c1b87b", +"gKB c #c1b87c", +"fW. c #c1b87d", +"dgb c #c1b8ad", +"fW# c #c1b97d", +"e1H c #c1ba7d", +"f2p c #c1ba7f", +"grt c #c1ba81", +"gCT c #c1ba82", +"ekL c #c1bb7d", +"bZK c #c1bb7f", +"fM. c #c1bb82", +"gSf c #c1bc80", +"c5D c #c1bc93", +"f.x c #c1bd81", +"hdY c #c1bd83", +"cBY c #c1bdb9", +"#.i c #c1be93", +"c7Q c #c1bfbb", +"c23 c #c1bfbd", +"hsy c #c1c086", +"hwg c #c1c087", +"bQ# c #c1c088", +"eAe c #c1c08c", +"hzQ c #c1c187", +"ezX c #c1c18a", +"#kw c #c1c198", +"hGK c #c1c289", +"bQa c #c1c28c", +"cxJ c #c1c2c1", +"hDo c #c1c38a", +"h56 c #c1c38f", +"hDh c #c1c48b", +"hNv c #c1c48c", +"hNw c #c1c48d", +"bB9 c #c1c490", +"h9b c #c1c491", +"dMY c #c1c4ae", +"hGE c #c1c58c", +"hv8 c #c1c58d", +"hsq c #c1c58e", +"evg c #c1c58f", +"ah7 c #c1c5af", +".hd c #c1c5ff", +".Lf c #c1c694", +"ddw c #c1c8a5", +"c5k c #c1ccae", +"cjy c #c1cdbb", +".kC c #c1d2eb", +"ezH c #c1d4cd", +"dds c #c1d7c2", +"eEK c #c1dddb", +"dns c #c1e0de", +"cmP c #c1eeff", +"cv5 c #c1efff", +"c95 c #c1f1ff", +".rs c #c1fdc5", +"il4 c #c24527", +"j#K c #c25d17", +"jFP c #c25e1b", +"iyJ c #c25f1b", +"iyX c #c26318", +"jIH c #c26624", +"gFR c #c26629", +"i9a c #c2681d", +"iAN c #c26822", +"iL7 c #c2701e", +"hTj c #c2722c", +"iq3 c #c27341", +"inT c #c27443", +"iM0 c #c27525", +"imf c #c27930", +"iKH c #c27a2d", +"jbA c #c27b41", +"iU0 c #c27d32", +"kj2 c #c28141", +"hi6 c #c2826f", +"hfB c #c28776", +"hfC c #c28876", +"jNA c #c2893b", +"jDV c #c28a35", +"jDO c #c28d35", +"jOt c #c28d39", +"jgs c #c28e1b", +"iCG c #c28e37", +"hjc c #c28f7b", +".04 c #c29044", +"jmw c #c29140", +"jDP c #c29241", +"j4K c #c29249", +"gTN c #c2927c", +"jYb c #c29446", +"jXC c #c2944a", +".dr c #c294c6", +"jSF c #c29650", +"dKw c #c29655", +"hm4 c #c2967e", +"j2u c #c29752", +"jvB c #c2984d", +"jV# c #c29853", +"dKy c #c2985a", +"hbV c #c29880", +"jVS c #c2993f", +"jt8 c #c29a6a", +"cyI c #c29b4f", +"kqC c #c29b73", +"cyD c #c29d52", +"jVp c #c29d53", +".Oy c #c29d61", +"esJ c #c29d62", +"hBS c #c29e61", +"esK c #c29e63", +"dCf c #c29e66", +".33 c #c29e6d", +"eMd c #c29f53", +"ejc c #c29f65", +"daz c #c2a067", +"hNe c #c2a159", +".O# c #c2a170", +".gK c #c2a1d0", +"eMZ c #c2a24e", +"dPZ c #c2a24f", +"dUm c #c2a251", +"jVo c #c2a259", +"gKp c #c2a25c", +".Mc c #c2a272", +"dLP c #c2a34f", +"eR3 c #c2a350", +"eHs c #c2a35d", +"eM2 c #c2a455", +"eIt c #c2a458", +"kJw c #c2a45b", +"hGu c #c2a45f", +"g2t c #c2a469", +"kMH c #c2a55d", +"bGx c #c2a562", +"i3W c #c2a565", +"kPN c #c2a65c", +"kDY c #c2a65d", +"aRJ c #c2a667", +"kDZ c #c2a75d", +"ek2 c #c2a75e", +"epS c #c2a75f", +"dbY c #c2a85b", +"cZm c #c2a85d", +"iQX c #c2a862", +"kpn c #c2a865", +"i6v c #c2a869", +"c80 c #c2a95c", +"cZl c #c2a95e", +"fjZ c #c2a966", +"fj0 c #c2a967", +"jtM c #c2a968", +"d7r c #c2a969", +"dXR c #c2a96d", +"duU c #c2aa59", +"dzh c #c2aa5b", +"a.0 c #c2aa5e", +"ftD c #c2aa66", +"ffS c #c2aa68", +"#Aj c #c2aa6a", +"#RN c #c2aa6b", +"j4m c #c2aa6e", +"d7q c #c2aa6f", +"#dW c #c2aa70", +"#av c #c2aa74", +"aBo c #c2aa7a", +"kBq c #c2ab5e", +"jl8 c #c2ab67", +"fjY c #c2ab68", +"fjX c #c2ab6a", +"#V1 c #c2ab6c", +"e46 c #c2ab6e", +"#kX c #c2ab71", +"kkq c #c2ab72", +"kqn c #c2ab75", +"khn c #c2ab76", +"#.Z c #c2ab78", +"i9L c #c2ac68", +"#Hm c #c2ac69", +"#Oy c #c2ac6a", +"#VO c #c2ac6b", +"#Lf c #c2ac6d", +"aV3 c #c2ac71", +"exR c #c2ac72", +"kD4 c #c2ad5f", +"kQ. c #c2ad62", +"kM4 c #c2ad63", +"#VU c #c2ad68", +"eXg c #c2ad6b", +"#w0 c #c2ad6d", +"#zR c #c2ad71", +"eCv c #c2ad79", +"eCu c #c2ad7a", +"eV1 c #c2ad7b", +"ekG c #c2ae5e", +"kGO c #c2ae60", +"ebs c #c2ae63", +"ebr c #c2ae64", +"duq c #c2ae67", +"eIq c #c2ae6a", +"fjW c #c2ae6c", +"fP1 c #c2ae6e", +"eVF c #c2ae6f", +".Qb c #c2ae71", +".1J c #c2ae72", +".8n c #c2ae74", +"fkb c #c2ae76", +"kGP c #c2af60", +"kGQ c #c2af61", +"dmk c #c2af62", +"eR7 c #c2af6a", +"dbG c #c2af6b", +"e0p c #c2af6d", +"fBm c #c2af70", +"#2D c #c2af7a", +"aoz c #c2b064", +"d3p c #c2b068", +"dyK c #c2b06b", +"akK c #c2b06c", +"fpu c #c2b06f", +"e0y c #c2b074", +"eQ7 c #c2b07e", +".fU c #c2b0f1", +"dqX c #c2b165", +"agp c #c2b16b", +"#OC c #c2b16c", +"atf c #c2b16d", +"fWf c #c2b172", +"aNo c #c2b176", +"#N6 c #c2b178", +"kJH c #c2b263", +"akW c #c2b26a", +"eV3 c #c2b280", +"eDz c #c2b370", +"eDw c #c2b371", +"fMo c #c2b373", +"ggP c #c2b375", +"f8G c #c2b376", +"eDy c #c2b470", +"eR8 c #c2b473", +"eIG c #c2b474", +"fhe c #c2b476", +"gn0 c #c2b477", +"#6f c #c2b47e", +"dC0 c #c2b575", +"flx c #c2b577", +"ggM c #c2b578", +"eV6 c #c2b581", +"eV4 c #c2b583", +"gvu c #c2b678", +"fSV c #c2b679", +"gGL c #c2b67a", +"e0M c #c2b681", +"gvr c #c2b77a", +"gza c #c2b77b", +"cb9 c #c2b77c", +"e0N c #c2b781", +"#fs c #c2b786", +"asX c #c2b86d", +"fZh c #c2b87b", +"bla c #c2b87d", +"#hL c #c2b88a", +"f5C c #c2b97e", +"f5A c #c2ba7e", +"g8l c #c2ba7f", +"g8k c #c2ba80", +"fIh c #c2ba81", +"fV9 c #c2bb7e", +"bZG c #c2bb80", +"#Vf c #c2bb81", +"cPf c #c2bbac", +"ekK c #c2bc7c", +"g4g c #c2bc80", +"bUR c #c2be84", +"dge c #c2beb3", +"h51 c #c2bf8a", +"hoP c #c2c085", +"hhA c #c2c086", +"bUT c #c2c089", +"kzT c #c2c08a", +"b0k c #c2c0be", +"hJ1 c #c2c18a", +"bGJ c #c2c1be", +"hDn c #c2c288", +"ccQ c #c2c2c0", +"hGN c #c2c389", +"hGA c #c2c38b", +"h9c c #c2c38e", +"chk c #c2c3b9", +"b9z c #c2c3c3", +"hNu c #c2c48c", +"dna c #c2c49c", +"hzH c #c2c58c", +"h0# c #c2c58f", +"hNq c #c2c68d", +"hNn c #c2c68e", +"evh c #c2c68f", +"hNm c #c2c78e", +".lm c #c2c8c7", +"eAn c #c2caa2", +"eE1 c #c2d0b9", +"aG# c #c2d4c5", +"ezJ c #c2d4c6", +"ezI c #c2d7ce", +"aDV c #c2dd96", +"aZe c #c2de93", +"dw. c #c2e1e4", +"eJR c #c2edf3", +"cz1 c #c2eefe", +"cd7 c #c2eeff", +"cEl c #c2efff", +"c94 c #c2f0ff", +".#g c #c31fc4", +"jAg c #c3591a", +"gJJ c #c35f24", +"iop c #c3611f", +"i#g c #c36528", +"iEP c #c36a1e", +"i0l c #c36f3e", +"iov c #c37029", +"i4o c #c3732b", +"hTz c #c3762b", +"hF9 c #c37b2b", +"iNx c #c37c2f", +"bPT c #c37c3f", +"kO1 c #c37e3e", +"gIz c #c37e61", +"i4V c #c37f1f", +"kck c #c37f40", +"i2# c #c38020", +"hi8 c #c3826e", +"c6G c #c38358", +"hmS c #c38471", +"iNQ c #c3852e", +"h5q c #c38539", +"hO0 c #c38672", +"cK. c #c3874d", +"i58 c #c3894d", +"hqf c #c38974", +"h5U c #c38b35", +"eMF c #c38c35", +"hEV c #c38d7b", +"jgz c #c38f39", +"ht5 c #c38f7c", +"jw0 c #c39045", +"hqj c #c3907b", +"g9T c #c3907c", +"jOp c #c39337", +"jmX c #c39367", +"jdI c #c3943c", +"hE0 c #c39480", +"##4 c #c3954a", +"g5Q c #c3957e", +"jdz c #c39848", +"dGr c #c39859", +"kgF c #c39948", +"jyf c #c3994d", +"jXw c #c39953", +"jLK c #c39955", +"jYa c #c39b4c", +"cyH c #c39b4f", +"cyG c #c39c4f", +"kaO c #c39c51", +".eL c #c39dc7", +"eBU c #c39e64", +"j.v c #c39e72", +"jba c #c39e77", +"en6 c #c39f64", +"keQ c #c39f7f", +"gcG c #c3a058", +"hWI c #c3a150", +"hzy c #c3a159", +"eIw c #c3a255", +"gVS c #c3a256", +"epc c #c3a25a", +"#dZ c #c3a262", +".Ui c #c3a265", +"##f c #c3a268", +"eDp c #c3a34c", +".13 c #c3a369", +"gYn c #c3a469", +"jgo c #c3a550", +"dYJ c #c3a554", +"hZS c #c3a557", +"hs# c #c3a55a", +"eti c #c3a560", +"ee4 c #c3a561", +"i0Z c #c3a564", +"d8j c #c3a659", +"ef5 c #c3a65a", +"eDF c #c3a65c", +"#ZH c #c3a663", +"eyS c #c3a75d", +"#V3 c #c3a766", +"#dX c #c3a769", +"ivP c #c3a76d", +"itf c #c3a76e", +"d3v c #c3a857", +"eWU c #c3a859", +"cUA c #c3a85d", +"ek0 c #c3a85f", +"eNe c #c3a861", +"dHE c #c3a959", +"epR c #c3a95f", +"eup c #c3a960", +"d2F c #c3a96a", +"kD2 c #c3aa5d", +"eun c #c3aa61", +"epP c #c3aa62", +"eSn c #c3aa65", +"j3t c #c3aa66", +"fn6 c #c3aa67", +"kEn c #c3aa68", +"#2H c #c3aa69", +"#Ak c #c3aa6a", +"aoQ c #c3aa6b", +"e9q c #c3aa6c", +"d2C c #c3aa6f", +"ff4 c #c3aa75", +"dqr c #c3ab5a", +"dqq c #c3ab5b", +"dYA c #c3ab5f", +"jNL c #c3ab62", +"eDG c #c3ab63", +"eNg c #c3ab65", +"jap c #c3ab66", +"aAo c #c3ab67", +"#6l c #c3ab69", +"fn5 c #c3ab6a", +"jKD c #c3ab6b", +"kQw c #c3ab6c", +"crn c #c3ab6d", +"fbN c #c3ab73", +"eIB c #c3ac64", +"jl9 c #c3ac67", +"jsa c #c3ac68", +"#K3 c #c3ac6b", +"#Hl c #c3ac6c", +"#fE c #c3ac6d", +"etg c #c3ac71", +"j9v c #c3ac72", +"dUe c #c3ad5e", +"kBu c #c3ad5f", +"d8t c #c3ad60", +"awt c #c3ad66", +"#Al c #c3ad6c", +"e0v c #c3ad6d", +"#A. c #c3ad6f", +"#Dy c #c3ad70", +"dXQ c #c3ad71", +"eCw c #c3ad74", +"aBy c #c3ad7a", +"f.s c #c3ae64", +"jAJ c #c3ae6a", +"#Ox c #c3ae6b", +"e0q c #c3ae6e", +"eQN c #c3ae6f", +"foi c #c3ae72", +"#qs c #c3ae73", +"eV0 c #c3ae7d", +"kE. c #c3af61", +"ebq c #c3af66", +"kuH c #c3af69", +"fsp c #c3af70", +"fbz c #c3af71", +".XR c #c3af73", +"eCt c #c3af7c", +"#24 c #c3b06d", +"fP2 c #c3b06f", +"foj c #c3b070", +"eVG c #c3b073", +"eV2 c #c3b07c", +"e0B c #c3b07e", +"kGU c #c3b162", +"agM c #c3b16b", +"akT c #c3b16c", +"#DG c #c3b16d", +"eIp c #c3b16f", +"j7H c #c3b170", +"eQO c #c3b172", +"eVH c #c3b174", +"kGV c #c3b262", +"#KY c #c3b267", +"eIo c #c3b26f", +"fbV c #c3b278", +"#ie c #c3b279", +"#Y6 c #c3b27c", +"eQ8 c #c3b282", +"dzH c #c3b367", +"#6I c #c3b36c", +"eDx c #c3b371", +"g#G c #c3b373", +"fpx c #c3b374", +"f8H c #c3b375", +"agR c #c3b46a", +"acE c #c3b46d", +"acC c #c3b46e", +"fZn c #c3b475", +"fBr c #c3b476", +"gn3 c #c3b477", +"acB c #c3b56f", +"fxP c #c3b576", +"fxy c #c3b577", +"e9E c #c3b579", +"#Dp c #c3b57d", +"#Sx c #c3b583", +"gvt c #c3b678", +"gvv c #c3b679", +"gC2 c #c3b779", +"gz# c #c3b77a", +"e9H c #c3b780", +"fbX c #c3b781", +"eDZ c #c3b878", +"flb c #c3b87a", +"cgK c #c3b87c", +"#wC c #c3b87e", +"f5B c #c3b97c", +"b4w c #c3b97e", +"f2n c #c3ba7d", +"f2o c #c3ba7e", +"gGH c #c3ba7f", +"gKy c #c3ba80", +"gy2 c #c3ba81", +"hd1 c #c3bb7d", +"fgY c #c3bb7e", +"gSe c #c3bb7f", +"bl# c #c3bb80", +"#qe c #c3bb83", +"bLA c #c3bbad", +"g8j c #c3bc80", +"fPL c #c3bc83", +"hlj c #c3bd80", +"df8 c #c3bda9", +"#nj c #c3bf93", +"bUS c #c3c088", +"hhz c #c3c186", +"kCy c #c3c18c", +"fSS c #c3c286", +"cYF c #c3c2b8", +"hGL c #c3c389", +"hGM c #c3c489", +"hJ9 c #c3c48a", +"hDb c #c3c48c", +"hk9 c #c3c58b", +"bli c #c3c593", +"hoI c #c3c68d", +"h9a c #c3c692", +"d.a c #c3c8a5", +"al8 c #c3cab4", +".hW c #c3cafe", +"eE0 c #c3d1bb", +"eEB c #c3d2b4", +"dZx c #c3d4b9", +"beF c #c3d787", +"e3i c #c3dbc4", +"a7J c #c3df95", +"aH1 c #c3e093", +".pj c #c3e39f", +"cvV c #c3eeff", +"cmM c #c3f0ff", +".#i c #c41fc3", +"g2m c #c45f33", +"h8n c #c46228", +"iBM c #c46519", +"gFQ c #c46529", +"j#N c #c46822", +"i6D c #c46b14", +"iQo c #c46c22", +"gB6 c #c46e2e", +"iL8 c #c47820", +"jF4 c #c4792c", +"koF c #c47936", +"hJq c #c47a2f", +"iVR c #c47c29", +"iHW c #c47c30", +"iWq c #c47e1c", +"g2j c #c47f5e", +"ke7 c #c48042", +"iNy c #c48136", +"khM c #c48243", +"hQu c #c48437", +"hi7 c #c48471", +"iS2 c #c48630", +"hi9 c #c48671", +"jGx c #c48931", +"hfA c #c48978", +"hSb c #c48b79", +"izQ c #c48d3a", +"feS c #c48d5f", +"hEQ c #c48f7d", +"jA9 c #c4903e", +"j2q c #c49057", +"ht1 c #c49079", +"ht6 c #c4907e", +"hhk c #c4913f", +".05 c #c49245", +"jOr c #c4933a", +"g9N c #c4957f", +"g1V c #c4977f", +"kIw c #c49965", +"ju# c #c49a54", +"dKv c #c49a58", +"iRp c #c49c71", +"i2S c #c49c7c", +".io c #c49c8b", +"cyF c #c49d50", +"cyE c #c49e52", +".G2 c #c49e63", +"cG7 c #c4a056", +"exj c #c4a066", +"eHu c #c4a157", +".19 c #c4a161", +".Md c #c4a165", +"ejd c #c4a166", +".GU c #c4a169", +".0j c #c4a16e", +"hEb c #c4a18c", +"##e c #c4a268", +"eey c #c4a26a", +"d18 c #c4a26b", +"jua c #c4a26c", +"eIu c #c4a358", +"dfI c #c4a36d", +"eDC c #c4a459", +"#dY c #c4a465", +"eId c #c4a54e", +"dLO c #c4a551", +"eDE c #c4a559", +"eDB c #c4a55b", +"ejT c #c4a55f", +".Z5 c #c4a569", +"igD c #c4a56a", +".UC c #c4a570", +".SF c #c4a578", +"ef4 c #c4a65b", +"chu c #c4a669", +".x6 c #c4a677", +"ek1 c #c4a75e", +"iY. c #c4a766", +".14 c #c4a76e", +"kBj c #c4a85f", +"i0Y c #c4a869", +".ke c #c4a877", +"ekZ c #c4a95f", +"euo c #c4a960", +"epQ c #c4a961", +"eIA c #c4a963", +"i3V c #c4a969", +"ija c #c4a96d", +"#x# c #c4a96e", +"hY6 c #c4a979", +"dqp c #c4aa5b", +"eum c #c4aa62", +"eyY c #c4aa63", +"kM8 c #c4aa66", +"gu1 c #c4aa67", +"fn7 c #c4aa68", +"eah c #c4aa69", +"e9p c #c4aa6c", +"dHD c #c4ab5b", +"dYB c #c4ab5d", +"dg4 c #c4ab5e", +"c4# c #c4ab5f", +"h2M c #c4ab60", +"jVk c #c4ab62", +"eyX c #c4ab63", +"eDH c #c4ab64", +"eSm c #c4ab65", +"eSl c #c4ab67", +"krx c #c4ab68", +"jCi c #c4ab6a", +"#aA c #c4ab72", +"kyS c #c4ac5f", +"eNf c #c4ac66", +"flm c #c4ac67", +"kBF c #c4ac69", +"aoR c #c4ac6a", +"bXs c #c4ac6e", +"fbO c #c4ac78", +"fbP c #c4ac7a", +"duT c #c4ad5c", +"dzg c #c4ad5e", +"dLB c #c4ad5f", +"kBr c #c4ad60", +"eIk c #c4ad66", +"e0w c #c4ad6b", +".t2 c #c4ad6f", +"e9v c #c4ad71", +"fbM c #c4ad73", +"cKq c #c4ad85", +"dPS c #c4ae5f", +"eQU c #c4ae6b", +"#Sc c #c4ae6d", +".DN c #c4ae75", +"d2y c #c4ae79", +"e9z c #c4ae7d", +"e5# c #c4ae80", +"kD9 c #c4af60", +"a.P c #c4af64", +"eHe c #c4af6b", +"eVE c #c4af6e", +"eVD c #c4af6f", +"dXU c #c4af70", +"#nz c #c4af71", +"#fZ c #c4af74", +"d2A c #c4af75", +"eCx c #c4af76", +"kD8 c #c4b060", +"kD6 c #c4b061", +"kD5 c #c4b062", +"#Sa c #c4b06d", +"eQM c #c4b06f", +"aNp c #c4b071", +".NT c #c4b074", +"#hZ c #c4b076", +"kqq c #c4b07a", +"e0C c #c4b082", +"eM7 c #c4b16d", +"fhb c #c4b16f", +"fwt c #c4b170", +"#Hp c #c4b171", +"fZm c #c4b172", +"#qC c #c4b173", +"#GU c #c4b175", +"dXO c #c4b178", +"#ne c #c4b17b", +"eL8 c #c4b17d", +"eHj c #c4b17f", +"eHl c #c4b180", +"eL7 c #c4b181", +"gc4 c #c4b272", +"ggO c #c4b273", +"eVO c #c4b279", +"#Vn c #c4b27d", +"eR. c #c4b27e", +"eQ9 c #c4b281", +"a.W c #c4b36a", +"eIn c #c4b36e", +"fWg c #c4b372", +"f2z c #c4b373", +"#6g c #c4b379", +"a.U c #c4b46c", +"agK c #c4b46e", +"g#K c #c4b474", +"f5P c #c4b475", +"gc6 c #c4b476", +"aov c #c4b47b", +"#kD c #c4b47d", +"eVV c #c4b484", +"acF c #c4b56e", +"g#J c #c4b575", +"f5O c #c4b576", +"#hX c #c4b57f", +"agl c #c4b581", +"#N4 c #c4b676", +"gvs c #c4b677", +"gKC c #c4b678", +"fg# c #c4b67e", +"e9I c #c4b67f", +"akZ c #c4b76d", +"eut c #c4b775", +"agF c #c4b776", +"fbY c #c4b77f", +"e5k c #c4b780", +"euF c #c4b876", +"fxx c #c4b878", +"fZg c #c4b87a", +"#aP c #c4b87f", +"f2l c #c4b97a", +"fA8 c #c4ba7b", +"f2m c #c4ba7c", +"gCS c #c4ba80", +"eSE c #c4bb75", +"e2g c #c4bb78", +"b4B c #c4bb7d", +"b9p c #c4bb7f", +"fL9 c #c4bb80", +"h#9 c #c4bc7f", +"fPK c #c4bc81", +"fgX c #c4bd7f", +"hdX c #c4bd81", +".Gf c #c4bd87", +"d.. c #c4bd8f", +"#cR c #c4bd91", +"bZH c #c4be83", +"bZJ c #c4be84", +"h50 c #c4be87", +"c76 c #c4beaf", +".gx c #c4befa", +"g8i c #c4bf82", +"dkW c #c4bfb1", +"fBq c #c4c081", +"g4f c #c4c083", +"kzU c #c4c08b", +"bLW c #c4c0b9", +"bLu c #c4c0bd", +"fcJ c #c4c183", +"hsz c #c4c184", +"fV1 c #c4c185", +"evc c #c4c186", +"kxh c #c4c18c", +"div c #c4c193", +"dpo c #c4c1bd", +"hsA c #c4c286", +"bgS c #c4c38e", +"ezQ c #c4c494", +"hDp c #c4c58a", +"hK. c #c4c58b", +"evb c #c4c58d", +"h0a c #c4c58f", +"bLo c #c4c592", +".he c #c4c5ff", +"hGP c #c4c68a", +"hQ0 c #c4c68d", +"hW6 c #c4c68e", +"hNl c #c4c78d", +"evi c #c4c790", +"bGE c #c4c795", +".hZ c #c4c7fd", +".hY c #c4c8fd", +"ddx c #c4cdaf", +"drR c #c4cdb0", +"diR c #c4dad4", +"aH7 c #c4dc96", +"bac c #c4e098", +"gWJ c #c4e0bf", +"aH8 c #c4e1a5", +"c9N c #c4e4e9", +"gsg c #c4eac7", +"eJr c #c4ebf1", +"dmU c #c4ebf6", +"eJQ c #c4eef4", +"crF c #c4efff", +"cmO c #c4f0ff", +"ior c #c5611f", +"iv4 c #c56419", +"iHj c #c5671a", +"jrW c #c56925", +"gpD c #c56b37", +"jIG c #c56c29", +"iQi c #c56f21", +"i1w c #c57026", +"iQp c #c57227", +"iJc c #c57228", +"iAJ c #c57a34", +"i4n c #c57b2b", +"hVB c #c57e3e", +"jQC c #c58136", +"hyq c #c5823b", +"jfa c #c58733", +"jK6 c #c5893a", +"hmQ c #c58975", +"i4U c #c58a2e", +"h6Z c #c58f5c", +"jpY c #c5905f", +"hbL c #c5907b", +"j7l c #c5914d", +"hIf c #c59180", +"#pP c #c59245", +"jyG c #c59362", +"#cr c #c59447", +"i2c c #c5944c", +"gww c #c59463", +"hqk c #c59580", +"hxU c #c59581", +"j28 c #c59644", +"hbF c #c5967f", +"gPT c #c59682", +"g9P c #c59780", +"hui c #c59782", +"eyl c #c5994a", +"kl3 c #c59965", +"kjJ c #c59967", +"hmZ c #c59982", +"jTo c #c59a39", +"iXT c #c59b55", +"j#C c #c59b5c", +"fPr c #c59c4e", +"jjM c #c59c78", +"gyL c #c59d4e", +"dOG c #c59d5f", +"ise c #c59e7a", +"#tY c #c59f61", +"cCU c #c5a055", +"dX5 c #c5a05a", +"dXv c #c5a065", +"iIC c #c5a076", +"fo1 c #c5a158", +"iOu c #c5a17e", +".fu c #c5a1c9", +"fH1 c #c5a259", +".Eb c #c5a264", +"d62 c #c5a268", +".Yo c #c5a26a", +"j4W c #c5a26c", +"eMe c #c5a356", +"eIv c #c5a357", +".JV c #c5a373", +"eDD c #c5a458", +"ccV c #c5a464", +"dtJ c #c5a46d", +"eoM c #c5a55e", +".12 c #c5a569", +"h1C c #c5a56a", +".Wd c #c5a56b", +"j9S c #c5a56e", +"dPY c #c5a652", +"j43 c #c5a65d", +"h4F c #c5a66a", +".GZ c #c5a673", +"ebj c #c5a75a", +"i01 c #c5a766", +"id8 c #c5a76b", +"iHm c #c5a85c", +"eM3 c #c5a85d", +"#OQ c #c5a86e", +"euh c #c5a95c", +"eyZ c #c5a962", +"eCC c #c5a968", +"i3X c #c5a969", +".JE c #c5a974", +"c4. c #c5aa5f", +"dK1 c #c5aa62", +"aX. c #c5aa6a", +"ebg c #c5ab5e", +"ekY c #c5ab61", +"epO c #c5ab62", +"eul c #c5ab63", +"dT3 c #c5ab64", +"fsb c #c5ab68", +"d7s c #c5ab6a", +"ilG c #c5ab71", +"kyO c #c5ac60", +"eyW c #c5ac63", +"awx c #c5ac68", +"exV c #c5ac6e", +"giu c #c5ac74", +"duS c #c5ad5c", +"chS c #c5ad5d", +"ef1 c #c5ad62", +"irV c #c5ad68", +"d7n c #c5ad69", +"js. c #c5ad6a", +"d2G c #c5ad6e", +"dUf c #c5ae5c", +"dHr c #c5ae5d", +"aAs c #c5ae69", +"ktY c #c5ae6b", +"jFb c #c5ae6c", +"#2G c #c5ae6e", +"e9r c #c5ae70", +"bGy c #c5ae71", +"#kY c #c5ae73", +"eoE c #c5ae78", +"#Hk c #c5af6d", +"e9n c #c5af6e", +"fn4 c #c5af6f", +"#tH c #c5af71", +"e5d c #c5af75", +"kBt c #c5b060", +"#Dz c #c5b071", +"#kI c #c5b074", +"d2B c #c5b076", +"eHo c #c5b077", +"cPG c #c5b166", +"klC c #c5b16b", +"#3b c #c5b16d", +"#Zu c #c5b170", +"exS c #c5b177", +"dXP c #c5b178", +"eHn c #c5b17a", +"eR# c #c5b17b", +"#3j c #c5b270", +"fsq c #c5b271", +"fkd c #c5b273", +".xC c #c5b276", +"eHm c #c5b27c", +"eHk c #c5b281", +"eVY c #c5b285", +"cL# c #c5b287", +"cLm c #c5b366", +"#3h c #c5b370", +"akP c #c5b371", +"g#L c #c5b372", +"eQL c #c5b373", +"fAh c #c5b374", +"g#I c #c5b375", +"eL9 c #c5b37d", +"eV7 c #c5b37e", +"jJO c #c5b381", +"eL6 c #c5b385", +"gc9 c #c5b474", +"#Or c #c5b569", +"#VQ c #c5b56d", +"agA c #c5b570", +"akS c #c5b571", +"eLW c #c5b573", +"fS1 c #c5b574", +"g4k c #c5b575", +"ftI c #c5b576", +".1z c #c5b579", +"#wH c #c5b57b", +"e0O c #c5b57e", +"egi c #c5b66a", +"g0j c #c5b675", +"gc7 c #c5b676", +"e9J c #c5b67d", +"ao2 c #c5b76a", +"akz c #c5b76d", +"a.J c #c5b76e", +"eVC c #c5b776", +"gSi c #c5b777", +"#Dh c #c5b77b", +"fga c #c5b77d", +"fbZ c #c5b77e", +"fZc c #c5b879", +"#zX c #c5b87d", +"ak2 c #c5b96b", +"fxw c #c5b979", +"e6y c #c5b97a", +"g#s c #c5b97c", +"gy1 c #c5b97d", +"gKx c #c5b97e", +".Ld c #c5b982", +"g8o c #c5ba7a", +"gvl c #c5ba7e", +"fla c #c5bb7c", +"b9u c #c5bb7d", +"cc. c #c5bb7f", +"b9q c #c5bc7f", +"#kq c #c5bc8e", +"b4A c #c5bd81", +"a.d c #c5bf7a", +"hli c #c5bf80", +"bl. c #c5bf84", +"bZI c #c5bf85", +"dbc c #c5bfb0", +"hoS c #c5c083", +"dkX c #c5c0b2", +"chm c #c5c0b8", +"h57 c #c5c38c", +"hWW c #c5c48a", +"hv7 c #c5c48b", +"h0b c #c5c48d", +"c8# c #c5c4c1", +"cYa c #c5c4c2", +"hGO c #c5c589", +"hsp c #c5c58b", +"h27 c #c5c58e", +"bQm c #c5c5c2", +"fV2 c #c5c689", +"hT4 c #c5c68e", +"ddD c #c5c6a6", +"hQS c #c5c78c", +"#ZY c #c5c89b", +"evj c #c5c993", +"d.b c #c5c9a6", +".hX c #c5cafd", +"c5G c #c5cdb5", +"d.d c #c5ceb1", +"drh c #c5ceb8", +".jX c #c5d1ed", +"aOO c #c5d3c1", +"ddU c #c5d3c8", +"dMZ c #c5d5c2", +"dn# c #c5d6bd", +"dvB c #c5d7c9", +".jT c #c5d7f6", +"dZw c #c5d9bf", +"aMj c #c5db8f", +"dZv c #c5dbc4", +"dzW c #c5dbd1", +"c44 c #c5dee0", +"ctt c #c5e0e6", +"beD c #c5e193", +"dMa c #c5e1e2", +"cQK c #c5e3ea", +"cEu c #c5e5e4", +"gdN c #c5e9be", +"fFS c #c5edcd", +"cM1 c #c5eefa", +"cIG c #c5eefc", +"cz3 c #c5eefe", +"cz2 c #c5effe", +"cd6 c #c5efff", +"cAd c #c5f0f9", +"c0q c #c5f0ff", +".rt c #c5fabc", +"gJH c #c65f22", +"gNv c #c66123", +"gNx c #c66325", +"iBL c #c66719", +"iQn c #c66d20", +"jII c #c66e26", +"iot c #c66e28", +"i6Z c #c66f21", +"i1x c #c67027", +"jN2 c #c6752d", +"kt# c #c67731", +"iS# c #c67a2c", +"h5p c #c67a33", +"iDI c #c67d2f", +"hq5 c #c67d34", +"jr1 c #c67e30", +"bJ7 c #c6804d", +"hJs c #c68238", +"hQe c #c68440", +"iB1 c #c68534", +"jQe c #c68b40", +"jn8 c #c68d3e", +"iFp c #c68e3c", +"d#J c #c68e5f", +"hI# c #c68e7b", +"jNC c #c6904b", +"hLt c #c6907a", +"hfD c #c69280", +"hEU c #c69281", +"gQd c #c69282", +"gZX c #c6933f", +"jaK c #c69439", +"hfr c #c6957d", +"fcs c #c69642", +"jQ3 c #c69730", +"fcp c #c6984d", +"hIj c #c69884", +"jGv c #c69947", +"fs3 c #c6994d", +"hbU c #c69982", +"hSi c #c69a83", +"jZV c #c69c55", +"efm c #c69c57", +"j#y c #c69c66", +"gXJ c #c69c83", +"k.c c #c69d4b", +"jOA c #c69d54", +".Ri c #c69f61", +"gjV c #c6a052", +"kFI c #c6a073", +"f8b c #c6a156", +"kdz c #c6a25f", +"en7 c #c6a268", +"iX1 c #c6a277", +"i71 c #c6a27a", +"eaD c #c6a358", +".0. c #c6a364", +"en8 c #c6a369", +"bxl c #c6a37a", +"iRu c #c6a382", +"iUi c #c6a383", +".Z1 c #c6a467", +"dUl c #c6a553", +".38 c #c6a566", +"dkF c #c6a56e", +".37 c #c6a66a", +"c7A c #c6a66c", +"jhZ c #c6a678", +"eDm c #c6a757", +"iHv c #c6a75c", +"eMc c #c6a761", +"iGW c #c6a767", +".Bl c #c6a76e", +"dLN c #c6a854", +"dPX c #c6a855", +"eyD c #c6a856", +"d8i c #c6a959", +"cLE c #c6a95a", +"ef3 c #c6a95d", +"h82 c #c6a963", +"#qK c #c6a96f", +"cUh c #c6aa61", +"asD c #c6aa68", +"dlW c #c6ab5b", +"fn8 c #c6ab69", +"gQw c #c6ab72", +"dbX c #c6ac5f", +"ead c #c6ac62", +"k.O c #c6ac64", +"asz c #c6ac69", +"fbF c #c6ac6c", +"fbG c #c6ac6d", +"i.t c #c6ac70", +"kyQ c #c6ad60", +"kD1 c #c6ad62", +"d8f c #c6ad63", +"ifl c #c6ad67", +"aAv c #c6ad6b", +"ff2 c #c6ad77", +"jf9 c #c6ae69", +"eVR c #c6ae6e", +"ff3 c #c6ae7b", +"cHc c #c6af65", +"jYE c #c6af6a", +"jpb c #c6af6b", +"asB c #c6af6c", +"e44 c #c6af6e", +"#tR c #c6af70", +"#dr c #c6af71", +"kPt c #c6af72", +"#id c #c6af74", +".uY c #c6af7e", +"dPT c #c6b05e", +"kBs c #c6b062", +"d3q c #c6b065", +"jNN c #c6b066", +"#wR c #c6b071", +"eth c #c6b074", +"e9A c #c6b07a", +"dzf c #c6b161", +"jDu c #c6b16d", +"jr8 c #c6b16e", +"#Zs c #c6b170", +"#Vl c #c6b172", +"#.u c #c6b174", +"cb4 c #c6b175", +"ea5 c #c6b25e", +"eIl c #c6b26b", +"fpl c #c6b26c", +"a.n c #c6b26e", +"#Ov c #c6b26f", +"#in c #c6b273", +"#qt c #c6b276", +"foh c #c6b277", +".uX c #c6b285", +"eIm c #c6b36e", +"#VL c #c6b370", +"eHd c #c6b371", +"#V5 c #c6b373", +"e47 c #c6b379", +"eCy c #c6b37c", +"eCs c #c6b384", +"f.t c #c6b46b", +"ggS c #c6b473", +"f2A c #c6b474", +"#ql c #c6b477", +"#fu c #c6b47b", +"ak0 c #c6b56b", +"#Ae c #c6b573", +"gc8 c #c6b574", +"hab c #c6b575", +"#kO c #c6b579", +"e5l c #c6b57c", +"#kC c #c6b57e", +"jGY c #c6b581", +"gvw c #c6b674", +"fhl c #c6b675", +"f2B c #c6b676", +"fop c #c6b67b", +"kGX c #c6b763", +"#KX c #c6b76b", +"a.M c #c6b76e", +"fP4 c #c6b775", +"ggQ c #c6b776", +"fZd c #c6b778", +"fb0 c #c6b77d", +"bDk c #c6b867", +"akY c #c6b870", +"f.u c #c6b872", +"fIE c #c6b878", +"gOp c #c6b87c", +"fg. c #c6b87f", +"#hW c #c6b884", +"acG c #c6b972", +"eSs c #c6b975", +"fZf c #c6b979", +"gGG c #c6b97d", +"a.K c #c6ba71", +"api c #c6ba78", +"gW# c #c6ba7d", +"fxv c #c6bb7a", +"fZb c #c6bb7b", +"fSJ c #c6bb7f", +"eIT c #c6bc78", +"agG c #c6bc7a", +"cca c #c6bc7e", +"fL8 c #c6bc7f", +"b4x c #c6bc80", +"#2x c #c6bd7b", +"b9r c #c6bd81", +"b4z c #c6bd82", +"b4y c #c6be83", +"bQC c #c6bea6", +"cTM c #c6beae", +"f.v c #c6bf7b", +"fV0 c #c6bf83", +"fE4 c #c6c07f", +"c3j c #c6c0b1", +"dye c #c6c0bc", +"f.w c #c6c181", +"hhy c #c6c285", +"hwh c #c6c385", +"hNA c #c6c386", +"c22 c #c6c3c1", +"ezN c #c6c49f", +"cIQ c #c6c4ae", +"hJ8 c #c6c589", +"kuL c #c6c58f", +"kxg c #c6c591", +"bLK c #c6c5b0", +"hTY c #c6c68c", +"hQT c #c6c78c", +"evk c #c6c994", +"evl c #c6cb95", +"eqw c #c6cc96", +"fSP c #c6cd8f", +"ezK c #c6d0ba", +".kA c #c6d6ea", +".jU c #c6d6f5", +"aH4 c #c6dd9c", +"cVv c #c6dddf", +"dEb c #c6ded2", +"dvG c #c6e4e4", +"dhV c #c6e5ea", +"eJE c #c6e6ea", +"eEr c #c6e8eb", +"gHe c #c6e9c9", +"fmr c #c6ead2", +"cr. c #c6efff", +"cEm c #c6f1ff", +".q7 c #c6f8b6", +"jxr c #c75f1f", +"ib7 c #c76329", +"i6E c #c76919", +"gfc c #c76c23", +"ibG c #c76d25", +"iNg c #c76e1e", +"iEo c #c76e20", +"jcO c #c77023", +"itx c #c77326", +"jLr c #c7742c", +"kqW c #c77834", +"kvz c #c77933", +"ioL c #c7793a", +"jbH c #c77943", +"iQq c #c77a2e", +"ime c #c77a2f", +"j.V c #c77f44", +"i8n c #c77f47", +"idK c #c77f48", +"iIZ c #c77f49", +"iQs c #c78033", +"jez c #c7814a", +"iGd c #c7814c", +"iAI c #c78238", +"iQt c #c78438", +"iB2 c #c78731", +"hTA c #c78739", +"iQP c #c7892d", +"doz c #c78b62", +"kGk c #c78e4a", +"jsS c #c7905c", +"hmO c #c7917c", +"j77 c #c79233", +"hiU c #c79280", +"hfh c #c79281", +"ipl c #c7943f", +"hER c #c79481", +"i7s c #c7953f", +"imR c #c79541", +"iWp c #c7963f", +"hIh c #c7967f", +"jYn c #c7994b", +"hU8 c #c79980", +"hxT c #c79984", +"jOo c #c79a3c", +"j7V c #c79a47", +"j74 c #c79b42", +"jvH c #c79c4c", +"eaw c #c79c54", +"kht c #c79d6c", +"ghP c #c79d71", +"iNP c #c79f4d", +"jyz c #c79f6d", +"huc c #c7a088", +"hfI c #c7a08a", +"jJ. c #c7a161", +"dPj c #c7a25b", +"dKz c #c7a265", +"koj c #c7a27b", +"cCV c #c7a357", +"hvY c #c7a358", +"jVR c #c7a35a", +".6u c #c7a367", +".O4 c #c7a368", +"cG8 c #c7a458", +".G3 c #c7a469", +"esL c #c7a46a", +"iU5 c #c7a480", +"khu c #c7a483", +"i5w c #c7a488", +"exX c #c7a55b", +"eBV c #c7a56b", +"cCZ c #c7a65a", +"g.8 c #c7a65f", +".I9 c #c7a661", +".Qu c #c7a669", +".f9 c #c7a6c9", +"ikj c #c7a752", +"gZZ c #c7a760", +"iuh c #c7a856", +"eyT c #c7a85c", +"jaQ c #c7a866", +".6n c #c7a86f", +".JF c #c7a872", +"dYI c #c7a956", +"eoN c #c7a962", +"dPW c #c7ab57", +"dLM c #c7ab58", +"bVy c #c7ab73", +"#bh c #c7ab76", +"d3u c #c7ac57", +"kDX c #c7ac62", +"kBi c #c7ac63", +"awA c #c7ac6a", +"fsc c #c7ac6b", +"ibo c #c7ac70", +"#dV c #c7ac73", +"duR c #c7ad5d", +"g3P c #c7ad67", +"awy c #c7ad6b", +"fbH c #c7ad6e", +"dYC c #c7ae5e", +"kyP c #c7ae61", +"kyM c #c7ae63", +"ju8 c #c7ae6a", +"kmY c #c7ae6b", +"e9o c #c7ae6d", +"#Y9 c #c7ae6f", +"#6k c #c7ae70", +"d7z c #c7af63", +"ekV c #c7af66", +"jm. c #c7af6b", +"ktW c #c7af6c", +"aAt c #c7af6d", +".8D c #c7af7d", +"kyR c #c7b062", +"e45 c #c7b06f", +"fwf c #c7b070", +"eM. c #c7b076", +"ff1 c #c7b078", +"dUg c #c7b15f", +"#6R c #c7b16c", +"e9s c #c7b175", +"fbL c #c7b176", +"ekF c #c7b25d", +"dDv c #c7b261", +"dze c #c7b262", +"akG c #c7b26a", +"ack c #c7b26d", +"#3i c #c7b26e", +"#VM c #c7b271", +"e9u c #c7b276", +"#fC c #c7b279", +"dTq c #c7b27a", +"kjB c #c7b27f", +"dzd c #c7b363", +"kse c #c7b36c", +"jxX c #c7b36e", +"#Oz c #c7b371", +"ggT c #c7b372", +".TX c #c7b376", +"#t4 c #c7b37a", +"e0P c #c7b37b", +"eV8 c #c7b37c", +"keK c #c7b387", +"kQ# c #c7b467", +"iV6 c #c7b46f", +"gGN c #c7b470", +"f8I c #c7b472", +"fws c #c7b475", +"acg c #c7b477", +"e48 c #c7b47b", +"eRa c #c7b47c", +"eVX c #c7b482", +"eVZ c #c7b487", +"kE# c #c7b563", +"agw c #c7b56b", +"hac c #c7b573", +"ach c #c7b574", +"fAg c #c7b576", +"eVW c #c7b583", +"agt c #c7b66a", +"#6Y c #c7b66d", +"gzb c #c7b673", +"gOu c #c7b675", +"fgb c #c7b67b", +"#nr c #c7b67d", +"agz c #c7b772", +"akQ c #c7b774", +".Gy c #c7b779", +"axD c #c7b785", +"eVU c #c7b787", +"kJK c #c7b864", +"agN c #c7b872", +"acD c #c7b873", +"agJ c #c7b874", +"haa c #c7b877", +"fZe c #c7b878", +"d2Q c #c7b87a", +"#Di c #c7b87c", +"akx c #c7b880", +"eby c #c7b96d", +"ftq c #c7b979", +"gKw c #c7b97c", +"#Kx c #c7b97d", +".Dx c #c7b985", +"f2k c #c7ba7a", +"agU c #c7bb6c", +"aoy c #c7bb71", +"fA7 c #c7bb7a", +"fpi c #c7bb7b", +"gWa c #c7bb7c", +"ggB c #c7bb7d", +"fPJ c #c7bb7e", +"#Z1 c #c7bb8c", +"acR c #c7bc6a", +"fl# c #c7bc7c", +"fL6 c #c7bc7e", +"fL7 c #c7bc7f", +"hdV c #c7bd7e", +"b9s c #c7bd82", +"jkM c #c7bd8a", +"cc# c #c7be83", +"fgW c #c7c081", +".tR c #c7c085", +"axX c #c7c1a4", +"h20 c #c7c288", +"c99 c #c7c29a", +"hoR c #c7c383", +"kxi c #c7c38e", +"h21 c #c7c48b", +"h9d c #c7c48c", +"ezP c #c7c497", +"hzG c #c7c58a", +"hZ7 c #c7c58c", +".hf c #c7c5fe", +"hk8 c #c7c78b", +"hNk c #c7c78c", +"hT5 c #c7c78d", +"kFi c #c7c792", +"bQc c #c7c796", +"cEx c #c7c7b1", +"kI# c #c7c892", +"fSR c #c7c989", +"fV3 c #c7c98a", +"hNx c #c7c98e", +"clB c #c7cac1", +"clA c #c7cac8", +".IW c #c7cc96", +"adw c #c7cca4", +".je c #c7d2f9", +"aMo c #c7d98e", +"cQS c #c7dee0", +"iCN c #c7e7bb", +"cvU c #c7efff", +"cmQ c #c7f0ff", +"cv4 c #c7f1ff", +"gYf c #c8602f", +"jft c #c86320", +"ijy c #c86721", +"gFP c #c86728", +"jxG c #c86927", +"iNf c #c86a1b", +"iyW c #c86c1c", +"ioD c #c86d33", +"jAv c #c86e28", +"gJK c #c86e2c", +"iK. c #c87322", +"iS6 c #c87324", +"gB5 c #c87330", +"iO7 c #c87524", +"iYH c #c87526", +"kvy c #c8762e", +"ib8 c #c87736", +"hOW c #c8774a", +"iP6 c #c87825", +"iqt c #c87d4c", +"hFq c #c87f32", +"iKG c #c88130", +"g2k c #c88361", +"iDA c #c88832", +"kvA c #c88846", +"gAS c #c88a67", +"iDD c #c88b2f", +"hns c #c88d44", +"j4R c #c8904c", +"hfy c #c8907c", +"gIy c #c8907f", +"i6m c #c89142", +"jhS c #c89444", +"gGt c #c89745", +"jVg c #c89847", +"gTM c #c89983", +"hSd c #c89984", +"hfG c #c89a85", +"kAm c #c89b64", +"hxZ c #c89b88", +"gMg c #c89b8e", +"koi c #c89c66", +"eMB c #c89d59", +"gXP c #c89d86", +"jvC c #c89e50", +"gEm c #c89e91", +"g7X c #c8a04a", +"jsz c #c8a155", +"jgS c #c8a17c", +"idO c #c8a18b", +"jSM c #c8a24f", +"gRX c #c8a250", +"fYQ c #c8a45b", +".Ug c #c8a465", +"kl4 c #c8a47e", +"hhm c #c8a55c", +"hJW c #c8a65c", +"jU6 c #c8a65f", +".Sq c #c8a668", +"kjK c #c8a683", +"jgp c #c8a747", +"eBW c #c8a76d", +"iSt c #c8a864", +"etm c #c8a961", +".Z4 c #c8a96f", +"dUk c #c8aa57", +"ebi c #c8aa5a", +".Y# c #c8aa70", +"d8g c #c8ab5b", +"hJO c #c8ab5d", +"jch c #c8ab81", +"eMW c #c8ac5c", +"eyV c #c8ac62", +"a5s c #c8ac68", +"fj1 c #c8ac6c", +"dPV c #c8ad5a", +"dK2 c #c8ad61", +"ekX c #c8ad62", +"kPM c #c8ad63", +"iZo c #c8ad66", +"fwg c #c8ad6c", +"c8Z c #c8ae60", +"ee0 c #c8ae61", +"euk c #c8ae64", +"#qO c #c8ae71", +"ij# c #c8ae74", +"dLL c #c8af5d", +"dPU c #c8af5e", +"icA c #c8af60", +"eM4 c #c8af66", +"flo c #c8af69", +"fln c #c8af6a", +"gO# c #c8af6c", +"d7t c #c8af6e", +"gl8 c #c8af77", +"#ay c #c8af78", +"dTw c #c8b066", +"fhc c #c8b06b", +"flq c #c8b06c", +"d7u c #c8b06f", +"#Sp c #c8b071", +"d3r c #c8b162", +"kBo c #c8b164", +"jNM c #c8b167", +"iTe c #c8b169", +"e0x c #c8b16d", +"a.m c #c8b170", +"d2H c #c8b171", +".TO c #c8b173", +"eM# c #c8b176", +"gBb c #c8b179", +"ju7 c #c8b26d", +"a5t c #c8b271", +"asI c #c8b275", +"#f1 c #c8b276", +"#fA c #c8b277", +"d8u c #c8b363", +"cUq c #c8b365", +"jGd c #c8b36e", +"jpH c #c8b370", +".Zy c #c8b375", +"#nw c #c8b377", +"a0j c #c8b379", +"eRb c #c8b37a", +"exT c #c8b37b", +"j.i c #c8b383", +"dzc c #c8b463", +"dDu c #c8b464", +"gKF c #c8b470", +"#67 c #c8b471", +"hd6 c #c8b472", +"gd. c #c8b473", +"#Lg c #c8b475", +"fwe c #c8b476", +"#h1 c #c8b479", +"eCz c #c8b47c", +"aEK c #c8b571", +"g8q c #c8b573", +"#26 c #c8b574", +"fn3 c #c8b576", +"#tE c #c8b578", +"fb1 c #c8b57a", +"asv c #c8b66f", +"iZe c #c8b671", +"ggR c #c8b672", +"gOv c #c8b674", +"#wT c #c8b675", +"fki c #c8b67b", +"#hY c #c8b67d", +"i7B c #c8b770", +"#Zv c #c8b771", +"akJ c #c8b772", +"fZo c #c8b774", +"#Y4 c #c8b77b", +"ega c #c8b86c", +"akA c #c8b86e", +"gGE c #c8b87b", +"eQP c #c8b87d", +"#h3 c #c8b87e", +"#U8 c #c8b889", +"ep6 c #c8b970", +"#6J c #c8b972", +"ac4 c #c8b975", +"hd5 c #c8b977", +"gCR c #c8b97a", +"gSd c #c8b97b", +"gW. c #c8b97c", +"a.g c #c8b984", +"#6H c #c8ba72", +"eDO c #c8ba75", +"ago c #c8ba77", +"hwm c #c8ba78", +"gWb c #c8ba79", +"gGF c #c8ba7c", +"fVV c #c8ba7d", +"fxu c #c8bb7a", +"fc7 c #c8bb7b", +"fPI c #c8bb7e", +"#fN c #c8bb84", +"aXq c #c8bb9c", +"epW c #c8bc73", +"fA6 c #c8bc7a", +"#Dg c #c8bc81", +"#zV c #c8bc82", +"hdW c #c8bd7d", +"g0e c #c8be7d", +"b9t c #c8be82", +".gy c #c8bfff", +"kCD c #c8c087", +"hGQ c #c8c182", +"kzX c #c8c188", +"kCC c #c8c18b", +"ax1 c #c8c1a6", +"bQt c #c8c2b4", +"hZ6 c #c8c389", +"hsB c #c8c484", +"hzR c #c8c485", +"hDa c #c8c489", +"c3r c #c8c4b6", +"kxj c #c8c58f", +"ezM c #c8c5a0", +"b4J c #c8c5c3", +"bVt c #c8c5c4", +"hKb c #c8c687", +"kuM c #c8c690", +"kCz c #c8c691", +"bLv c #c8c7c5", +"hTX c #c8c88b", +"h9# c #c8c891", +"#ni c #c8c89d", +"hQR c #c8c98d", +"evn c #c8cb95", +"evm c #c8cc96", +"atV c #c8cdba", +"fSQ c #c8ce8e", +"g8G c #c8dab5", +"aDT c #c8dc8c", +"dH7 c #c8dfdb", +"dIJ c #c8e6ea", +"cvZ c #c8efff", +"b6w c #c8f0ff", +"cM3 c #c8f1fe", +"cmN c #c8f1ff", +"cEn c #c8f2ff", +"eEc c #c8f3f9", +"i#f c #c96026", +"gtN c #c96826", +"iQk c #c96c1c", +"i6F c #c96d1e", +"ios c #c96d27", +"i#b c #c96d2b", +"itr c #c96f1f", +"iNd c #c97120", +"iHx c #c97421", +"iJf c #c97529", +"jEI c #c9773e", +"jiD c #c97827", +"iJd c #c97c2c", +"hVC c #c97d31", +"i1r c #c97f2c", +"i1v c #c97f2e", +"hMI c #c97f32", +"i5S c #c97f4c", +"iwh c #c98039", +"iQr c #c98134", +"iyh c #c98150", +"hq4 c #c9853b", +"iGm c #c98934", +"iB3 c #c98b33", +"gAT c #c98d6a", +"jND c #c9914b", +"jSL c #c9923a", +"koX c #c99355", +"jsk c #c9942e", +"ka9 c #c99437", +"j3c c #c99439", +"jzN c #c99541", +"hO1 c #c99583", +"jGt c #c99639", +"iuj c #c99644", +"jzQ c #c99647", +"hLu c #c99784", +"jIe c #c99949", +"hxV c #c99986", +"kdQ c #c99a39", +"jw1 c #c99b50", +"jsA c #c99c4a", +"g5U c #c99c85", +"gQc c #c99c8f", +"fxb c #c99d4c", +"foV c #c99e54", +"je9 c #c99e5e", +"g5W c #c99e87", +"ggh c #c99f4f", +"jYr c #c99f50", +"d2W c #c99f59", +"jJi c #c9a047", +"jre c #c9a059", +"i6p c #c9a06c", +"kb6 c #c9a06f", +"jA6 c #c9a153", +"cul c #c9a251", +"j3N c #c9a280", +"jVU c #c9a351", +"j29 c #c9a354", +"iW3 c #c9a378", +".Ed c #c9a466", +"i2N c #c9a478", +"cCW c #c9a558", +"jgB c #c9a559", +".2. c #c9a667", +"e#M c #c9a66c", +"hot c #c9a756", +"cG9 c #c9a75a", +"eHv c #c9a75c", +".6r c #c9a769", +"#nJ c #c9a76b", +"c7B c #c9a76d", +".Um c #c9a86d", +"h33 c #c9a888", +"hSz c #c9a96e", +"daD c #c9a970", +"hWP c #c9aa62", +".Ul c #c9aa70", +"dYH c #c9ab59", +"ebh c #c9ab5b", +"eyU c #c9ab5f", +"fn9 c #c9ab6a", +"h7D c #c9ab70", +"#AA c #c9ab72", +"d8h c #c9ac5a", +"ef2 c #c9ac5d", +"dUj c #c9ad5b", +"ee5 c #c9ad69", +"fo. c #c9ad6c", +"h0I c #c9ad9b", +"dqo c #c9ae5e", +"dPp c #c9ae66", +"cvL c #c9ae6d", +"hM7 c #c9af63", +"cY4 c #c9af66", +"flp c #c9af69", +"eak c #c9af6b", +"ffT c #c9af70", +"fj7 c #c9af71", +".t1 c #c9af73", +"#xa c #c9af79", +"dUi c #c9b05d", +"dO6 c #c9b064", +"hkR c #c9b069", +"ffW c #c9b071", +"ffY c #c9b073", +"gpO c #c9b079", +"#dT c #c9b07b", +"dUh c #c9b15e", +"dYE c #c9b15f", +"dYD c #c9b160", +"jxY c #c9b16b", +"jpc c #c9b16d", +"aoM c #c9b171", +"fbI c #c9b174", +"kyN c #c9b266", +"dPE c #c9b268", +"ips c #c9b26c", +"kww c #c9b26e", +"#DL c #c9b272", +"fbR c #c9b275", +"ffZ c #c9b278", +"fka c #c9b27e", +"#HH c #c9b281", +"aoF c #c9b36f", +"akM c #c9b372", +"fbK c #c9b376", +"fbJ c #c9b377", +"eRc c #c9b378", +"dzb c #c9b463", +"ebt c #c9b465", +"ifd c #c9b468", +"g0# c #c9b470", +"gkp c #c9b472", +"aoO c #c9b477", +"#fG c #c9b479", +"eHp c #c9b47a", +"ff0 c #c9b47c", +"kjC c #c9b484", +"gOw c #c9b572", +"had c #c9b573", +"hhM c #c9b574", +".ZH c #c9b578", +"exU c #c9b57a", +"e9t c #c9b57b", +"dDt c #c9b666", +"#OA c #c9b674", +".XP c #c9b677", +".xD c #c9b678", +"#kH c #c9b67a", +"#Dx c #c9b67b", +"#nt c #c9b67d", +"eVT c #c9b682", +"aOx c #c9b685", +"cGT c #c9b68f", +"akB c #c9b76e", +"gC6 c #c9b773", +"#K7 c #c9b775", +"a.k c #c9b777", +"#h7 c #c9b77a", +"foq c #c9b77b", +"duj c #c9b782", +"aku c #c9b787", +"egb c #c9b86b", +"f2C c #c9b875", +"gOo c #c9b879", +"fn2 c #c9b87a", +"d7C c #c9b87b", +"#Dv c #c9b87e", +"fog c #c9b87f", +"gOz c #c9b975", +"#DF c #c9b977", +"gcV c #c9b979", +"gvk c #c9b97a", +"fAf c #c9b97c", +"c3C c #c9b98e", +"fP3 c #c9ba75", +"hoW c #c9ba78", +"hsF c #c9ba79", +"#z4 c #c9ba80", +"#kr c #c9ba89", +"gWj c #c9bb78", +"fpj c #c9bb7a", +"fEL c #c9bb7b", +"fPH c #c9bb7d", +"atD c #c9bb8c", +"fE1 c #c9bc79", +"fph c #c9bc7c", +"agQ c #c9bd74", +"hwl c #c9bd7a", +"hoV c #c9bd7b", +"fl. c #c9bd7c", +"fVW c #c9bd80", +"#aQ c #c9bd82", +"#nm c #c9bd85", +"fIA c #c9be7a", +"hhJ c #c9be7b", +"fVX c #c9be81", +"kzY c #c9bf87", +"e2f c #c9c07c", +"fZa c #c9c07e", +"hdU c #c9c080", +"efV c #c9c17b", +"hKd c #c9c182", +"aBO c #c9c1a6", +"kFm c #c9c28a", +"dt3 c #c9c2b0", +"bQo c #c9c2b6", +"b95 c #c9c3b4", +"bCd c #c9c3bb", +"hKc c #c9c485", +"hGz c #c9c489", +"kuO c #c9c48d", +".hg c #c9c4fe", +"hwi c #c9c585", +"aqa c #c9c5aa", +"ccN c #c9c5c0", +"b9w c #c9c5c1", +"hsC c #c9c686", +"hKa c #c9c688", +"#dc c #c9c690", +"hWX c #c9c78c", +"h9. c #c9c790", +"kFj c #c9c791", +"hK# c #c9c88a", +"hoH c #c9c88b", +"hQ1 c #c9cb8f", +"eqJ c #c9cb95", +"fV4 c #c9cc8b", +"eqz c #c9cc96", +".iC c #c9cdfb", +"dz7 c #c9d5c8", +"evR c #c9d6a8", +"dEd c #c9dbca", +"cMw c #c9e0e3", +"azy c #c9e19d", +"cVn c #c9e4e9", +"cpd c #c9eef4", +"crE c #c9f0ff", +".qH c #c9f1ab", +"dh8 c #c9f1fd", +"c#E c #c9f1fe", +"dh7 c #c9f2fe", +"cII c #c9f2ff", +"juA c #ca6520", +"jcs c #ca7020", +"iwa c #ca711e", +"itq c #ca742f", +"iEp c #ca751d", +"ioK c #ca7834", +"gyf c #ca7e36", +"hU3 c #ca7e4d", +"gYd c #ca7e58", +"iHV c #ca8130", +"iO8 c #ca822c", +"jQD c #ca8233", +"iNw c #ca8535", +"hhb c #ca8a3b", +"fnb c #ca8d59", +"jSK c #ca8f3c", +"iB0 c #ca8f42", +"iTH c #ca9135", +"jq9 c #ca9341", +"hTN c #ca953f", +"jw3 c #ca9742", +"irS c #ca9840", +"jwX c #ca9845", +"hIe c #ca9887", +"hId c #ca9a87", +"hBq c #ca9a88", +"icC c #ca9b45", +"jdG c #ca9b48", +"j5j c #ca9c44", +"eRG c #ca9c54", +"hBu c #ca9c89", +"jA5 c #ca9e4a", +"hqx c #ca9e87", +"g1Q c #ca9f87", +"g52 c #ca9f8a", +"jpw c #caa04e", +"eo4 c #caa057", +"jAR c #caa159", +"iSd c #caa177", +"j5u c #caa24e", +"f5h c #caa252", +"i97 c #caa256", +"j2t c #caa45e", +"dGs c #caa464", +"dSY c #caa465", +"hua c #caa48d", +"i82 c #caa56a", +"jgR c #caa585", +"cCX c #caa659", +"cCY c #caa75a", +"j4I c #caa75f", +"eje c #caa76d", +"efq c #caa85c", +".39 c #caa86a", +"dCg c #caa86e", +"j3O c #caa88a", +"cLq c #caa95d", +"en9 c #caa96f", +"hGo c #caaa58", +"jgm c #caaa68", +"eez c #caaa72", +"fsd c #caab6a", +"#Ay c #caab6d", +".Eh c #caab75", +"i#E c #caac58", +"ekj c #caac61", +"fse c #caac6b", +"ee9 c #caad65", +"ejU c #caad67", +"fwh c #caad6b", +"d3t c #caae5a", +"dYG c #caae5e", +"kMG c #caae63", +"foa c #caae6e", +"fj4 c #caae6f", +"i.v c #caae74", +"jfe c #caae82", +"dYF c #caaf5f", +"ejO c #caaf62", +"epN c #caaf64", +"bP6 c #caaf6d", +"fj5 c #caaf6e", +"fob c #caaf70", +"hRy c #caaf9e", +"ekW c #cab065", +"j5Q c #cab068", +"ejY c #cab069", +"ee8 c #cab06a", +"kDH c #cab06d", +"ffX c #cab071", +".hq c #cab0d9", +"eM5 c #cab168", +"jzs c #cab16a", +"eVS c #cab175", +"gUt c #cab177", +"eM6 c #cab269", +"jsb c #cab26d", +"awz c #cab271", +"#Lh c #cab272", +"#fM c #cab274", +"jpd c #cab36e", +"jX# c #cab373", +".Lu c #cab375", +".VO c #cab377", +"kd7 c #cab46d", +"jLG c #cab46f", +"eRd c #cab477", +"#fv c #cab478", +"eMa c #cab479", +"e0Q c #cab47a", +"kM6 c #cab56a", +"dgP c #cab56d", +"ju6 c #cab571", +"asx c #cab572", +"hhN c #cab573", +"#fz c #cab579", +"eHq c #cab57a", +".J. c #cab57c", +"#V8 c #cab582", +"khp c #cab587", +"cUp c #cab669", +"i1R c #cab672", +"gn6 c #cab673", +".8m c #cab67a", +"eCA c #cab67d", +"e0F c #cab680", +"#6Z c #cab770", +"agq c #cab772", +"gko c #cab773", +"#Ab c #cab776", +".3N c #cab779", +"fkj c #cab77b", +"#h0 c #cab77d", +"g#r c #cab876", +"fIF c #cab877", +"fE6 c #cab878", +"gSc c #cab879", +"fso c #cab87b", +"#wL c #cab87d", +".VR c #cab87e", +"dml c #cab968", +"ep5 c #cab96c", +"#6K c #cab975", +"iH1 c #cab976", +"fpE c #cab977", +"grs c #cab97a", +".Jd c #cab97b", +"#KA c #cab97d", +"#qr c #cab97e", +".Lv c #cab981", +"ja4 c #cab98b", +"e2d c #caba6f", +"a.E c #caba76", +"agH c #caba77", +"fpk c #caba78", +"gZ8 c #caba7a", +"fSI c #caba7b", +"dbn c #caba8c", +"#6G c #cabb75", +"ali c #cabb7b", +"gkb c #cabb7c", +"fDS c #cabb7e", +"fDR c #cabb7f", +".Dy c #cabb86", +"#6z c #cabc77", +"hln c #cabc79", +"fIg c #cabc7d", +"acK c #cabd74", +"hd2 c #cabd7a", +"hDs c #cabd7b", +"eQK c #cabd7e", +"#zS c #cabd82", +"#De c #cabd83", +"acJ c #cabe76", +"#6y c #cabe7a", +"hlm c #cabe7c", +".tO c #cabe83", +"hlk c #cabf7c", +"kxm c #cabf87", +".gz c #cabfff", +"eXx c #cac078", +"f5z c #cac07e", +"fVY c #cac082", +"ccb c #cac085", +"#Do c #cac089", +"fVZ c #cac183", +"h0c c #cac184", +"#tq c #cac187", +"hNB c #cac282", +"dpJ c #cac2b1", +"a.z c #cac37b", +"bCe c #cac3b7", +"hJ0 c #cac488", +"hv6 c #cac489", +"kFl c #cac48d", +"kzW c #cac48e", +"axZ c #cac4aa", +"h58 c #cac58b", +"kxk c #cac58e", +"kzV c #cac58f", +"aqb c #cac5aa", +"hhx c #cac685", +"hWV c #cac689", +"kFk c #cac68f", +"kCA c #cac78f", +".h0 c #cac7fc", +"dCJ c #cac8c5", +"hT6 c #cac98e", +"aKk c #cac98f", +"cnR c #cac995", +"#Z2 c #cac99b", +"d.# c #cac9a2", +"bQh c #cac9c7", +"hQQ c #caca8c", +"cAx c #caca96", +"#Kv c #caca9f", +"chp c #cacbc9", +"eqI c #cacc94", +"eqy c #cacc95", +"evo c #cacc96", +"eqA c #cacd95", +"eqx c #cacd96", +"elO c #cace97", +"diS c #caceb6", +"a91 c #cad4bf", +"elL c #cad6a6", +"eqs c #cadaba", +"aDS c #cadc8e", +"dEe c #cadccb", +"aDU c #cae093", +"aY3 c #cae096", +"dEa c #cae1d5", +"aHZ c #cae499", +"dEM c #cae8ed", +"c00 c #caeff6", +"c#p c #caf0ff", +"cAc c #caf1fb", +"ciy c #caf1ff", +"dh6 c #caf2fd", +"cA# c #caf2ff", +"ilU c #cb6c25", +"iNe c #cb6f1d", +"iQl c #cb6f1e", +"iQj c #cb701e", +"jlG c #cb711d", +"iQm c #cb7121", +"gIB c #cb713f", +"gmk c #cb7328", +"jiB c #cb7423", +"j#O c #cb7528", +"ioJ c #cb7731", +"jlk c #cb7c24", +"iJj c #cb7e30", +"gye c #cb8132", +"isW c #cb8351", +"h.g c #cb845d", +"iEO c #cb8639", +"iPY c #cb872e", +"jN7 c #cb8736", +"bYx c #cb8754", +"ieP c #cb8a3d", +"i2a c #cb8c2e", +"iKI c #cb8c40", +"iDC c #cb8f33", +"jvX c #cb925c", +"feR c #cb9565", +"c6F c #cb9567", +"jK1 c #cb9646", +"jIh c #cb9748", +"jvr c #cb9832", +"hLx c #cb9a89", +"hO3 c #cb9b8b", +"iff c #cb9c44", +"eWy c #cb9c52", +"ixI c #cb9c6e", +"jvY c #cb9c6f", +"hfq c #cb9c84", +"jpl c #cb9d3c", +"jNw c #cb9e4f", +"jt3 c #cb9e51", +"gPS c #cb9e8a", +"j2j c #cb9f55", +"k#o c #cba06f", +"jYq c #cba153", +"jVa c #cba158", +"gXR c #cba28b", +"jDQ c #cba352", +"iD# c #cba379", +"hm5 c #cba48c", +"hTI c #cba54d", +"hsi c #cba559", +"jJR c #cba676", +"h8T c #cba74f", +"h48 c #cba767", +".Ec c #cba769", +"j#D c #cba770", +"eMf c #cba85a", +"jd0 c #cba87a", +"j1i c #cba888", +"cH. c #cba95d", +"esM c #cba96f", +"iuJ c #cba982", +"cLp c #cbaa5d", +".Lt c #cbaa63", +"iMx c #cbaa67", +"eeA c #cbaa71", +"cLr c #cbab5e", +"hyk c #cbab6e", +".Uj c #cbac73", +"hci c #cbad71", +"hYz c #cbad72", +".Uk c #cbad74", +".Ww c #cbad7d", +"d3s c #cbae5d", +"efu c #cbae62", +"eoO c #cbae68", +"eui c #cbaf63", +"fz9 c #cbaf6e", +"duQ c #cbb05f", +"euj c #cbb065", +"fj6 c #cbb071", +"cLn c #cbb163", +"fz8 c #cbb170", +"fj3 c #cbb172", +"dg3 c #cbb264", +"epM c #cbb267", +"iNY c #cbb26b", +".yb c #cbb280", +"dza c #cbb362", +"dO7 c #cbb364", +"kBl c #cbb369", +"gWf c #cbb36d", +"kNb c #cbb36e", +"aEM c #cbb372", +"e9K c #cbb378", +"fk# c #cbb37e", +"gWc c #cbb46f", +"jSk c #cbb473", +"#wZ c #cbb475", +"eV9 c #cbb478", +"jDv c #cbb56f", +"jaA c #cbb570", +"aoK c #cbb573", +"asy c #cbb574", +"asJ c #cbb579", +"eCB c #cbb57a", +"dHq c #cbb667", +"acj c #cbb674", +"j6T c #cbb679", +".h7 c #cbb6d8", +"dDs c #cbb768", +"gkn c #cbb771", +"gKG c #cbb772", +"ac5 c #cbb773", +"ggU c #cbb774", +"gZ7 c #cbb777", +"fz6 c #cbb778", +"ejM c #cbb785", +"kM5 c #cbb86b", +"jQj c #cbb870", +".1I c #cbb87a", +".VV c #cbb87b", +"#wJ c #cbb87e", +"gzc c #cbb974", +"gKv c #cbb979", +"#KD c #cbb97b", +"fsa c #cbb97c", +"#aO c #cbb97e", +"akD c #cbba71", +"iYZ c #cbba74", +"#Ot c #cbba75", +"g8p c #cbba76", +"apj c #cbba77", +"fBs c #cbba79", +"#KC c #cbba7a", +"#A# c #cbba7b", +"#Kz c #cbba7d", +"ffO c #cbba84", +".xo c #cbba85", +"ek9 c #cbbb6e", +"acL c #cbbb71", +"#6M c #cbbb73", +"ftm c #cbbb78", +"#DC c #cbbb79", +"#Ac c #cbbb7a", +"gnR c #cbbb7b", +"fwr c #cbbb7d", +"#tD c #cbbb80", +"a.I c #cbbc77", +"ha# c #cbbc78", +"fA5 c #cbbc79", +"hzV c #cbbc7a", +"#Hx c #cbbc7d", +"fDP c #cbbc80", +"#nc c #cbbc89", +"#Os c #cbbd71", +"ha. c #cbbd78", +"a.H c #cbbd79", +"hd4 c #cbbd7b", +"hQ5 c #cbbd7c", +"fHq c #cbbd80", +"ckX c #cbbd97", +"hsE c #cbbe7b", +"hGR c #cbbe7c", +"hNC c #cbbe7d", +"aJ# c #cbbe7f", +"hhL c #cbbf7c", +"e2e c #cbc07b", +"#wz c #cbc288", +"acw c #cbc37d", +"g8h c #cbc381", +"hW7 c #cbc385", +"kOn c #cbc389", +"kIb c #cbc38b", +"#GP c #cbc38d", +"bLH c #cbc3b0", +"kuP c #cbc48b", +"kxl c #cbc48c", +".hh c #cbc4fe", +"#YZ c #cbc587", +"kCB c #cbc68e", +"h28 c #cbc78c", +"kIa c #cbc790", +"kuN c #cbc792", +"fV8 c #cbc885", +"kL. c #cbc890", +"hTW c #cbc98b", +"i#T c #cbc991", +"i#U c #cbc992", +"ezL c #cbc9a8", +"df0 c #cbc9c6", +"cAw c #cbca96", +"bQj c #cbcac8", +"hNz c #cbcb8d", +"eqB c #cbcc93", +"el0 c #cbcc95", +"el1 c #cbcc96", +"btO c #cbcda0", +"eqK c #cbce97", +"elN c #cbce98", +"ap4 c #cbd0bc", +"atE c #cbd1a7", +"ctW c #cbd2d3", +"cIP c #cbd4c6", +"eEA c #cbd5b7", +"dcT c #cbd6c9", +"eE6 c #cbddc5", +"ba# c #cbdf92", +"aUO c #cbdf95", +"eb9 c #cbdfb8", +"a3m c #cbe397", +"a28 c #cbe495", +"aIc c #cbe597", +"dvH c #cbe8e9", +"dh9 c #cbe8ed", +"cEk c #cbf0ff", +"cv3 c #cbf1ff", +"cM4 c #cbf3fe", +".q8 c #cbf9ad", +".#h c #cc20cc", +"ioA c #cc5935", +"jxs c #cc651f", +"gZf c #cc6526", +"g3i c #cc6822", +"h8m c #cc692a", +"jC4 c #cc6a22", +"gRl c #cc6a27", +"i#c c #cc6c2a", +"gZg c #cc6c2c", +"juQ c #cc6d27", +"ib6 c #cc6d2d", +"iw# c #cc731f", +"iNh c #cc7520", +"gNy c #cc752f", +"iPH c #cc7718", +"iNc c #cc7824", +"iAO c #cc7833", +"g2l c #cc7b52", +"iTk c #cc7e32", +"iJe c #cc812f", +"hWB c #cc8231", +"ijN c #cc8336", +"hvt c #cc882c", +"iGi c #cc8936", +"iGj c #cc8d36", +"iGl c #cc9039", +"jK4 c #cc9444", +"gUf c #cc9481", +"jK7 c #cc9542", +"ihi c #cc9545", +"jf# c #cc954f", +"hmP c #cc9782", +"hC3 c #cc9843", +"j3j c #cc9943", +"iuT c #cc9968", +"kgu c #cc9a3d", +"kdU c #cc9b3f", +"i7u c #cc9b4e", +"ht0 c #cc9b84", +"hLv c #cc9b8b", +"gKn c #cc9c48", +"hO2 c #cc9c8c", +"ka4 c #cc9f3f", +"gre c #cca04f", +"kLC c #cca069", +"kHR c #cca54f", +"iIJ c #cca57b", +"g13 c #cca58f", +"j7P c #cca65a", +".i1 c #cca78b", +"kx# c #cca857", +".Bj c #cca96a", +".4. c #cca96b", +"dKA c #ccaa6b", +"d63 c #ccaa6f", +"d19 c #ccaa71", +".Be c #ccaa78", +"cH# c #ccab5f", +"fEv c #ccab62", +"c7C c #ccab6f", +"c2T c #ccab70", +"eGA c #ccab72", +".jC c #ccab83", +"ekf c #ccac5f", +"grh c #ccac64", +"iPv c #ccac67", +"dx1 c #ccac73", +"cHa c #ccad60", +"e5R c #ccad63", +"i6r c #ccad76", +"cLo c #ccae5f", +".We c #ccae76", +"jjK c #ccae8e", +"cp1 c #ccaf5a", +"cHb c #ccaf64", +"etn c #ccaf67", +"fwi c #ccaf6d", +"fsh c #ccaf6f", +"ejQ c #ccb063", +"kJv c #ccb065", +"fsf c #ccb06e", +"fo# c #ccb06f", +"ibp c #ccb075", +"ept c #ccb257", +"c8Y c #ccb265", +"d73 c #ccb266", +"fj2 c #ccb273", +"#Ax c #ccb274", +"#.Y c #ccb27f", +"dbW c #ccb366", +"c8J c #ccb368", +"kBk c #ccb369", +"gWd c #ccb36d", +"gWe c #ccb36e", +"bLh c #ccb372", +"eHr c #ccb377", +"fj8 c #ccb379", +"ekE c #ccb45c", +"hQz c #ccb468", +"jma c #ccb46f", +"asA c #ccb473", +"fz7 c #ccb474", +"ffV c #ccb477", +"e9L c #ccb479", +"eap c #ccb568", +"jm# c #ccb56f", +"aoN c #ccb578", +"eW. c #ccb579", +"iCJ c #ccb66e", +"jGe c #ccb670", +"e9M c #ccb679", +"#f0 c #ccb67a", +"#fw c #ccb67d", +"fk. c #ccb680", +"dDr c #ccb767", +"gn5 c #ccb772", +"hlo c #ccb774", +"aoI c #ccb775", +"a.l c #ccb778", +"j6S c #ccb779", +"kkr c #ccb77a", +"kfB c #ccb77b", +"#cX c #ccb77c", +"kp4 c #ccb870", +"grF c #ccb875", +"#K6 c #ccb877", +".ZG c #ccb879", +"fDD c #ccb87a", +"kfA c #ccb87b", +"fkk c #ccb87c", +"fof c #ccb880", +"aFH c #ccb883", +"aoA c #ccb972", +"jpG c #ccb974", +"aww c #ccb976", +"#Sb c #ccb978", +"gSb c #ccb979", +"#wO c #ccb97b", +"for c #ccb97c", +"fsl c #ccb97e", +"#tx c #ccb97f", +"#cU c #ccb984", +"ihL c #ccba71", +"akL c #ccba7a", +"fwd c #ccba7c", +"fs# c #ccba7d", +"fsm c #ccba7f", +"#S# c #ccbb77", +"hsG c #ccbb79", +"ggA c #ccbb7a", +"#wS c #ccbb7b", +"#aR c #ccbb7d", +"fn1 c #ccbb7f", +"eQT c #ccbb87", +"#VK c #ccbc77", +"ftl c #ccbc78", +"gcU c #ccbc7a", +"hQ6 c #ccbc7b", +"#Hy c #ccbc7e", +"fAe c #ccbc7f", +"#DE c #ccbd7a", +"fDQ c #ccbd80", +"dYV c #ccbe72", +"#KW c #ccbe76", +"#23 c #ccbe77", +"agI c #ccbe7b", +"agS c #ccbf75", +"a.N c #ccbf77", +"ey5 c #ccbf79", +"aEL c #ccbf7d", +"fY0 c #ccbf7f", +"#no c #ccbf86", +"f.2 c #ccc07c", +"fpg c #ccc07d", +"#2T c #ccc07f", +"kuS c #ccc087", +"hll c #ccc17c", +"hoT c #ccc17d", +"fk9 c #ccc17e", +"h29 c #ccc184", +"#G2 c #ccc18c", +"atm c #ccc18d", +"g4e c #ccc27f", +"#db c #ccc289", +"kLc c #ccc28a", +"h#8 c #ccc380", +"kCE c #ccc38a", +"kFn c #ccc48c", +"#fO c #ccc48d", +"hzF c #ccc588", +"jhN c #ccc593", +"bx7 c #ccc5bc", +"kOl c #ccc68d", +"hNj c #ccc78a", +"hZ5 c #ccc78c", +"i#S c #ccc78f", +"hwj c #ccc886", +"cwp c #ccc895", +"dCB c #ccc9c7", +"hDq c #ccca88", +"hQP c #cccb8c", +"eqH c #cccc94", +"aia c #ccccb9", +"eqG c #cccd95", +"el2 c #cccd96", +"cyq c #cccdcb", +"eqL c #cccf98", +"d.S c #ccd3bf", +"ctV c #ccd3d4", +"evS c #ccd49e", +"evQ c #ccd7a9", +"c5S c #ccd7ca", +"dII c #ccdada", +"dQy c #ccddd3", +"d.R c #cce0df", +"aH2 c #cce292", +"d9. c #cce3c5", +"c5J c #cce3e1", +"c9S c #cce8ed", +"dH6 c #ccedf1", +".qe c #ccefa1", +"cEg c #ccf0fe", +"cv0 c #ccf0ff", +"cAb c #ccf1fd", +"cEf c #ccf1ff", +"dh5 c #ccf2fd", +"cEq c #ccf3fb", +"cEp c #ccf3fd", +"cEo c #ccf3fe", +"irb c #cd5f38", +"gZe c #cd6825", +"i#d c #cd6929", +"gRk c #cd6e26", +"ig2 c #cd741f", +"iBK c #cd7421", +"iNb c #cd7521", +"its c #cd7722", +"hTy c #cd7b2a", +"ioI c #cd7b33", +"iJb c #cd7c34", +"iou c #cd7e2f", +"iXu c #cd814a", +"ivt c #cd8653", +"iTl c #cd8739", +"gyb c #cd8920", +"ca3 c #cd8a57", +"jLx c #cd8c37", +"huK c #cd8d40", +"iGk c #cd9038", +"gMq c #cd9078", +"j#J c #cd913b", +"iDz c #cd913d", +"iCC c #cd9841", +".dY c #cd9aec", +"kiY c #cd9c3c", +"ikl c #cd9d49", +"hBr c #cd9d8c", +"hET c #cd9e8b", +"e1j c #cda056", +"jsT c #cda176", +"k.l c #cda245", +"gOa c #cda24a", +"jsi c #cda352", +"f5c c #cda353", +"eMC c #cda563", +"gXL c #cda58c", +"g15 c #cda590", +"iF1 c #cda67e", +"jsv c #cda756", +"jmv c #cda758", +"j0a c #cda759", +"jyj c #cda75a", +"j3l c #cda75b", +"jRD c #cda775", +"dTK c #cda85b", +"joc c #cda86e", +"jd3 c #cda98a", +"kOL c #cdaa80", +"jXD c #cdab51", +".2a c #cdab6c", +"dXw c #cdab6e", +".Bk c #cdac6e", +"e#N c #cdac71", +"eBX c #cdac72", +"cLs c #cdaf61", +"cUi c #cdaf62", +"cY5 c #cdaf63", +"hVt c #cdaf75", +".Wg c #cdaf77", +"fwk c #cdb06f", +".6m c #cdb077", +"jk3 c #cdb07e", +"fsg c #cdb16f", +"#w6 c #cdb176", +".Oc c #cdb17b", +"jZR c #cdb272", +"i.u c #cdb278", +"hST c #cdb280", +"kwj c #cdb366", +"ejZ c #cdb369", +"gSh c #cdb36d", +"#ZI c #cdb371", +"h7E c #cdb37a", +"c8H c #cdb468", +"jCj c #cdb46b", +"eoT c #cdb46d", +"eai c #cdb473", +"id9 c #cdb47a", +"dDq c #cdb563", +"kwn c #cdb567", +"kPL c #cdb56b", +"hCX c #cdb56c", +"j03 c #cdb56e", +"fb2 c #cdb579", +".yc c #cdb587", +"g0a c #cdb66e", +"ffU c #cdb67a", +"gIQ c #cdb67e", +"j.j c #cdb68c", +"jg. c #cdb770", +"jiZ c #cdb771", +"hKf c #cdb774", +"#cY c #cdb77d", +"kJM c #cdb86a", +"jI3 c #cdb872", +"gn7 c #cdb874", +"hGT c #cdb875", +"g35 c #cdb877", +"fHf c #cdb879", +"fDE c #cdb87a", +"fj9 c #cdb880", +"j.n c #cdb88a", +"h5O c #cdb96d", +"gC9 c #cdb974", +"g#M c #cdb975", +"g34 c #cdb977", +"g36 c #cdb978", +"#wQ c #cdb97a", +"fwc c #cdb97b", +"gOA c #cdba73", +"awu c #cdba74", +"fxs c #cdba76", +"gka c #cdba78", +"#qu c #cdba7c", +"fsn c #cdba7f", +"e5a c #cdba80", +"agy c #cdbb76", +"fxt c #cdbb77", +"fA4 c #cdbb78", +"fPG c #cdbb7a", +"#N8 c #cdbb7c", +"#kJ c #cdbb7e", +"#nv c #cdbb7f", +"exN c #cdbb92", +"gSk c #cdbc76", +"#S. c #cdbc77", +"a.8 c #cdbc79", +"fIf c #cdbc7a", +"fL5 c #cdbc7b", +"#Ha c #cdbc7e", +"fwq c #cdbc7f", +"#3G c #cdbc8c", +"acl c #cdbd76", +"aci c #cdbd7b", +"fDO c #cdbd7f", +"fHp c #cdbd80", +"#wI c #cdbd81", +"eQY c #cdbd8e", +"e6G c #cdbe77", +"asw c #cdbe78", +"a.G c #cdbe7a", +"eAl c #cdbe7d", +"fHr c #cdbe80", +"a.O c #cdbf77", +"hd3 c #cdbf7a", +"hhK c #cdbf7b", +"kuT c #cdbf83", +"#Ky c #cdbf84", +".gA c #cdbfff", +"hoU c #cdc07c", +"kCF c #cdc084", +"#GR c #cdc087", +"bRE c #cdc17c", +"kxn c #cdc188", +"#Zm c #cdc278", +"kFo c #cdc288", +"kuR c #cdc28a", +"#Zl c #cdc37b", +"hJZ c #cdc385", +"kzZ c #cdc38a", +"kuQ c #cdc48b", +"kIc c #cdc48c", +".hi c #cdc4fe", +"hD# c #cdc587", +"kId c #cdc58c", +"kL# c #cdc68c", +"kOm c #cdc68d", +"cIR c #cdc6ac", +"dl# c #cdc6b5", +"dgj c #cdc6b6", +"g8g c #cdc782", +"fgV c #cdc783", +"h9e c #cdc78d", +"#Dd c #cdc793", +"g8f c #cdc883", +"iEJ c #cdc884", +"ksk c #cdc891", +"hk7 c #cdc98a", +"bVq c #cdc9c2", +"fcI c #cdca85", +"hTV c #cdca8b", +"i#V c #cdca91", +"c3p c #cdcbc7", +"b0i c #cdcbc8", +"bLs c #cdccc9", +"cxN c #cdccca", +"eqC c #cdcd94", +"elZ c #cdcd95", +"evp c #cdce97", +"el3 c #cdcf97", +"el4 c #cdcf98", +"eqM c #cdd098", +"elP c #cdd099", +"c5F c #cdd0b4", +"cff c #cdd0b7", +"elM c #cdd4a0", +"c5H c #cdd5c2", +"dU8 c #cdd6bd", +"c5I c #cddcd3", +"dMb c #cdddd2", +"dEf c #cde2d4", +"dD8 c #cde3d7", +"c0k c #cde4e6", +"bab c #cde598", +"ddT c #cde6e9", +"dD7 c #cdeeef", +"bIw c #cdf0fc", +"cvY c #cdf0ff", +"cEt c #cdf1f4", +"cv2 c #cdf1ff", +"cAa c #cdf2fe", +"cvr c #cdf2ff", +"cRy c #cdf3fc", +"dmT c #cdf3fe", +"gUj c #ce6834", +"i#e c #ce6929", +"gYe c #ce6f40", +"jox c #ce711b", +"jC7 c #ce7123", +"g3k c #ce712d", +"jAu c #ce742b", +"ib5 c #ce7832", +"iVU c #ce7b27", +"itw c #ce7b28", +"iYJ c #ce7c29", +"i#a c #ce7e2e", +"jry c #ce7f1a", +"jQE c #ce8534", +"hQb c #ce8537", +"bK5 c #ce8546", +"h96 c #ce854b", +"ibw c #ce8637", +".cD c #ce86e3", +"iDJ c #ce873b", +"iNv c #ce8a37", +"iVy c #ce8b1f", +"hQt c #ce8b38", +"ihh c #ce8b3c", +"hWC c #ce8e3c", +"hdu c #ce8f3f", +"iDB c #ce9138", +"cSm c #ce9263", +"j4N c #ce933b", +"jyF c #ce9359", +"hxh c #ce9369", +"ckD c #ce9449", +"jNF c #ce9744", +"c1Z c #ce976a", +"hL5 c #ce985b", +"ieQ c #ce9a4a", +"gQg c #ce9a8b", +"jJk c #ce9b3c", +"j5l c #ce9b3d", +"irO c #ce9b43", +"k.y c #ce9c3e", +"jCG c #ce9e50", +"i4W c #ce9e52", +"i#G c #ce9f49", +"hLw c #ce9f8e", +"iKW c #cea14a", +"hSc c #cea18e", +"fgC c #cea24c", +"fx. c #cea252", +"j0S c #cea34f", +"ggc c #cea452", +"fPm c #cea455", +"f.. c #cea459", +"kqB c #cea46d", +"jjN c #cea47b", +"hkS c #cea651", +"j5n c #cea654", +"hfH c #cea690", +"iny c #cea87c", +"jhR c #ceaa61", +"jYU c #ceaa86", +"ihM c #ceab50", +".2# c #ceab6c", +"cXx c #ceab90", +"#Az c #ceac70", +"ep. c #cead62", +".X8 c #cead71", +"eeB c #cead73", +"eMI c #ceaf62", +"kf6 c #ceaf74", +"#gr c #ceaf7c", +".Oa c #ceaf7d", +"cLt c #ceb063", +".34 c #ceb078", +"j#E c #ceb081", +"ex1 c #ceb169", +"fwj c #ceb16e", +"#dU c #ceb177", +".Ya c #ceb179", +".6l c #ceb17b", +"cLu c #ceb266", +"jdv c #ceb36c", +"jzW c #ceb37b", +"dz# c #ceb462", +"c3R c #ceb469", +"fsi c #ceb475", +"#fV c #ceb478", +".ye c #ceb485", +"#St c #ceb576", +"jtN c #ceb66d", +"jd# c #ceb66e", +"foc c #ceb679", +"jpe c #ceb771", +"fLb c #ceb778", +"eMb c #ceb779", +"ea4 c #ceb85e", +"cuv c #ceb868", +"kBn c #ceb86c", +"i4N c #ceb871", +"kkS c #ceb874", +"eaj c #ceb877", +"fDF c #ceb879", +"eRe c #ceb87a", +"gn4 c #ceb973", +"jAK c #ceb974", +"gkq c #ceb975", +"aoJ c #ceb979", +"#2I c #ceb97b", +"e0R c #ceb97c", +"dKY c #ceb98b", +"bgn c #ceb999", +"ebu c #ceba69", +"grD c #ceba74", +"jpD c #ceba75", +"awv c #ceba76", +"aoE c #cebb77", +".xE c #cebb7a", +"fsw c #cebb7d", +"fos c #cebb7e", +"e0D c #cebb85", +"btZ c #cebb95", +"epX c #cebc6e", +"gKH c #cebc75", +"#tF c #cebc7e", +"fwp c #cebc7f", +"ff7 c #cebd78", +"akI c #cebd79", +"#Zr c #cebd7b", +"fAd c #cebd7f", +"fMA c #cebe71", +"#27 c #cebe79", +"#25 c #cebe7b", +"j7G c #cebe7c", +"agD c #cebe7f", +"#qq c #cebe85", +"jdV c #cebe8f", +"akC c #cebf76", +"fHs c #cebf81", +"#GT c #cebf84", +"aFV c #cebf8d", +"kLi c #cec083", +"#He c #cec17b", +"acA c #cec17e", +"eAk c #cec182", +"bgU c #cec1a0", +"b6n c #cec27c", +"eAj c #cec285", +"#Y3 c #cec286", +"kso c #cec287", +"kz0 c #cec288", +"#kE c #cec28b", +"eNx c #cec37a", +"hDr c #cec37f", +"#2y c #cec388", +".hj c #cec3fd", +"kQu c #cec47e", +"kLb c #cec48b", +"hzE c #cec587", +"kLa c #cec58c", +"hdT c #cec682", +"kOo c #cec68d", +"hso c #cec789", +"h#7 c #cec883", +"#6d c #cec884", +"#6e c #cec889", +"fZ# c #ceca84", +"hQO c #ceca8b", +"#ZX c #ceca9b", +"bZW c #cecac5", +".j0 c #cecbd8", +"eAf c #cecc99", +"#kp c #cecca2", +"bU2 c #ceccca", +"cpF c #cecccb", +".kI c #cecdca", +"eg5 c #cecf97", +"eg4 c #cecf98", +"eg3 c #ced099", +"dnh c #ced0b3", +"chq c #ced1c8", +".jh c #ced1f3", +"hNP c #ced4a7", +".jf c #ced4f8", +"dEO c #ced6b6", +"eAo c #cedcba", +"dmV c #cedfd8", +"dit c #cee0cb", +"aDN c #cee49f", +"iz0 c #cee5b6", +"d4u c #cee7d2", +"c9X c #cee7ea", +"c0a c #cee8ee", +"dzV c #cee9e4", +"c9M c #ceebf0", +"dc7 c #ceebf3", +"cqV c #cef1ff", +"cEr c #cef3f9", +"cM5 c #cef3fd", +"cIJ c #cef4fd", +"dIp c #cef5fb", +"jxo c #cf6c24", +"jxn c #cf7020", +"iyV c #cf7621", +"iBJ c #cf7723", +"gVk c #cf7a31", +"gRn c #cf7a32", +"hWA c #cf7b29", +"iYI c #cf7c28", +"iL5 c #cf7d2e", +"ib4 c #cf7e33", +"hQa c #cf8031", +"hLm c #cf844e", +"hSH c #cf8636", +"jnm c #cf864a", +"jqi c #cf874c", +"gFL c #cf891e", +"h#J c #cf8938", +"jke c #cf8a4e", +"ied c #cf8b3d", +"co# c #cf8d59", +"iDy c #cf923d", +"hb9 c #cf926f", +"ioM c #cf934f", +"gAR c #cf9473", +"jQf c #cf9843", +"jVf c #cf9844", +"jid c #cf9941", +"img c #cf9c50", +"gEE c #cf9c8c", +"jQd c #cf9d60", +"jsl c #cf9f37", +"j5k c #cf9f43", +"iTL c #cfa04b", +"iKY c #cfa053", +"i4X c #cfa055", +"hBs c #cfa08e", +"j5v c #cfa246", +"ju. c #cfa24e", +"g3Q c #cfa348", +"eC6 c #cfa350", +"iDi c #cfa376", +"jpZ c #cfa378", +"kgp c #cfa442", +"ka5 c #cfa444", +"jmY c #cfa479", +"j0U c #cfa551", +"fAP c #cfa553", +"fkM c #cfa558", +"hHw c #cfa586", +"fSp c #cfa658", +"g9O c #cfa78f", +"huh c #cfa790", +"jXM c #cfa858", +"h31 c #cfa880", +"hmY c #cfa890", +"g50 c #cfa993", +"iq. c #cfaa7f", +"j2w c #cfab69", +"eyh c #cfac65", +".Bi c #cfac6e", +"#w8 c #cfac71", +".4# c #cfad6e", +"iCB c #cfae5a", +"e#O c #cfae73", +"kCZ c #cfae87", +"hdG c #cfaf65", +"c2R c #cfaf71", +"c2U c #cfaf72", +"fA. c #cfb16f", +".36 c #cfb178", +".35 c #cfb17a", +"c3T c #cfb266", +"hPp c #cfb278", +".Yb c #cfb27b", +".Wu c #cfb283", +"cPO c #cfb367", +"kf1 c #cfb371", +"g6u c #cfb37a", +"eto c #cfb46d", +"#t0 c #cfb47a", +"eaZ c #cfb55b", +"kGI c #cfb56c", +"ekD c #cfb65a", +"dXX c #cfb66a", +"kyL c #cfb66b", +"eoU c #cfb66c", +"#nL c #cfb678", +"cZk c #cfb76a", +"kBm c #cfb76d", +"etr c #cfb76e", +"jHW c #cfb76f", +"g0. c #cfb770", +"kBv c #cfb868", +"kEk c #cfb871", +"eoS c #cfb872", +"kJe c #cfb876", +"fLa c #cfb878", +"#t3 c #cfb87c", +"foe c #cfb87f", +"gvy c #cfb974", +"hoY c #cfb975", +"e9N c #cfb97b", +"fod c #cfb97e", +"#qT c #cfb981", +"#YO c #cfb989", +".fW c #cfb9ff", +"ftp c #cfba74", +"fxr c #cfba75", +"gvz c #cfba76", +"fHe c #cfba7b", +"#fY c #cfba7d", +"fsk c #cfba7e", +"#kS c #cfba82", +"#.e c #cfba85", +".fV c #cfbaff", +"ftn c #cfbb74", +"gKJ c #cfbb76", +"j9w c #cfbb7c", +"#cZ c #cfbb80", +"gC7 c #cfbc76", +"fEK c #cfbc77", +"fwo c #cfbc7e", +"aFG c #cfbc87", +"ftk c #cfbd76", +"acm c #cfbd77", +"g8# c #cfbd7a", +"fLm c #cfbd7e", +"fAc c #cfbd7f", +"ksq c #cfbd80", +"kJL c #cfbe6b", +"el. c #cfbe6f", +"acn c #cfbe77", +"fDN c #cfbe7f", +"#DA c #cfbe80", +"eVI c #cfbe88", +"d3J c #cfbf72", +"hND c #cfbf7c", +"akN c #cfbf81", +"fHt c #cfbf82", +".NM c #cfbf83", +"fjV c #cfbf8a", +".iJ c #cfbfda", +".gB c #cfbffe", +"#6L c #cfc07a", +"#22 c #cfc07d", +"#Hc c #cfc07f", +"#N7 c #cfc083", +"#nC c #cfc084", +"#6F c #cfc17d", +"fVU c #cfc17f", +"kFp c #cfc184", +"acd c #cfc18d", +"eQ6 c #cfc19a", +"fS2 c #cfc27b", +"kLh c #cfc286", +"kOr c #cfc287", +"bWt c #cfc37e", +"h3. c #cfc384", +"ksp c #cfc386", +"kxo c #cfc388", +"kLd c #cfc389", +"hD. c #cfc486", +"h59 c #cfc487", +"#VE c #cfc57c", +"fP5 c #cfc57d", +"hsD c #cfc57f", +"fID c #cfc681", +"#6x c #cfc683", +"#dd c #cfc78c", +"hzS c #cfc984", +"hoG c #cfc989", +"cAj c #cfcab0", +"c8d c #cfcaba", +"h#6 c #cfcb85", +"evC c #cfcc91", +"evB c #cfcc92", +"evA c #cfcd93", +"hNy c #cfcf90", +"el5 c #cfcf97", +"eg6 c #cfcf98", +"elQ c #cfd099", +".ji c #cfd0f1", +".IV c #cfd19d", +".jg c #cfd3f6", +"c5l c #cfd8bd", +"dIm c #cfdbd0", +"aQB c #cfdf91", +"dz8 c #cfdfd7", +"eu3 c #cfe4dd", +"aMk c #cfe698", +"diQ c #cfeaef", +"dZE c #cfece4", +"eJT c #cfeff4", +"b6G c #cfeffb", +"bDF c #cff0fd", +"bWI c #cff0ff", +"fQK c #cff1cd", +"dzU c #cff2f4", +"fJC c #cff3d5", +"cRx c #cff3fe", +"cVB c #cff3ff", +"jct c #d06a20", +"gVh c #d06d28", +"gVi c #d0702b", +"gVj c #d0742f", +"gRm c #d0752e", +"ijA c #d07636", +"gMw c #d07844", +"jtb c #d0793c", +"itt c #d07b25", +"gZh c #d07c32", +"ioo c #d08036", +"iN. c #d08229", +"iBw c #d0833d", +"i0j c #d0834b", +"kx1 c #d0853c", +"h1b c #d0854c", +"iTj c #d08639", +"kmn c #d08841", +"iNu c #d08933", +"guT c #d08c2f", +"jZ0 c #d09646", +"eRJ c #d09d3f", +"gFK c #d09e3c", +"h8Y c #d09e43", +"g3V c #d0a04a", +"hkX c #d0a04b", +"jFu c #d0a04e", +"hfi c #d0a08e", +"j5G c #d0a149", +"j3i c #d0a14a", +"hU7 c #d0a189", +"ihN c #d0a245", +"gui c #d0a247", +"hIa c #d0a28e", +"gL1 c #d0a392", +"jfq c #d0a450", +"ijP c #d0a453", +"i98 c #d0a650", +"jJ# c #d0a753", +"bsW c #d0a77b", +"fSu c #d0a856", +"iAv c #d0a87d", +"g51 c #d0aa94", +"hCY c #d0ab55", +"jWw c #d0ab80", +"i5v c #d0ab88", +"hVb c #d0ab94", +"dSZ c #d0ac6d", +".4a c #d0ad6f", +".Sp c #d0ae70", +"eCF c #d0af60", +"c2S c #d0af71", +".Wa c #d0af73", +"jrd c #d0af74", +"eoL c #d0b062", +"g#e c #d0b065", +"dPk c #d0b066", +"jTl c #d0b06a", +"d64 c #d0b074", +"knL c #d0b263", +"cPN c #d0b264", +"eaC c #d0b269", +"i02 c #d0b26e", +"j6a c #d0b295", +".VN c #d0b370", +"hnp c #d0b377", +"c3S c #d0b466", +"fA# c #d0b471", +"ex2 c #d0b56d", +"kGq c #d0b56f", +"j9K c #d0b57b", +"ekd c #d0b582", +"eaY c #d0b660", +"ets c #d0b66d", +"kJf c #d0b66f", +"dTx c #d0b769", +"jTN c #d0b76b", +"dT2 c #d0b76c", +"jAL c #d0b770", +"ejX c #d0b773", +"a1o c #d0b774", +"fAa c #d0b776", +"#d. c #d0b777", +"fDG c #d0b778", +"#aB c #d0b77d", +"jsc c #d0b872", +"#aC c #d0b87f", +"kM7 c #d0b96f", +"icI c #d0b970", +"ee6 c #d0b977", +"gyK c #d0b978", +"fHg c #d0b979", +"fgc c #d0b97b", +"dHp c #d0ba69", +"fto c #d0ba72", +"gZ9 c #d0ba74", +"ktV c #d0ba75", +"aAr c #d0ba78", +"fL# c #d0ba7a", +"fL. c #d0ba7b", +"#OO c #d0ba7c", +"dLA c #d0bb6d", +"fxq c #d0bb75", +"fL4 c #d0bb78", +"#2m c #d0bb89", +"jD5 c #d0bc75", +"gC8 c #d0bc76", +"grG c #d0bc77", +"hzX c #d0bc78", +"gZ6 c #d0bc79", +"g33 c #d0bc7a", +"kfC c #d0bc7d", +"fwn c #d0bc7e", +"gGO c #d0bd77", +"fEJ c #d0bd78", +"fHo c #d0bd7e", +"#Vq c #d0bd7f", +"#fy c #d0bd81", +"g4l c #d0be79", +"hzW c #d0be7a", +"fz5 c #d0be7f", +"dqW c #d0bf6b", +"hwn c #d0bf7a", +"hDt c #d0bf7b", +"kz2 c #d0bf80", +"kz1 c #d0bf81", +"kIh c #d0bf82", +"#qI c #d0bf86", +"aha c #d0c07e", +".5T c #d0c083", +"fBB c #d0c174", +"kQv c #d0c17e", +"#KU c #d0c181", +"#GV c #d0c184", +"#H. c #d0c185", +"fcF c #d0c278", +"fpf c #d0c27c", +"acr c #d0c27f", +"fYZ c #d0c280", +"eAh c #d0c281", +"#aS c #d0c283", +"#2A c #d0c285", +"aot c #d0c28e", +"#Oq c #d0c37b", +"fY1 c #d0c382", +"h0d c #d0c383", +"kFq c #d0c386", +"#Ds c #d0c387", +"#Hf c #d0c47b", +"kNp c #d0c47d", +"a.A c #d0c480", +"a.B c #d0c481", +"fY2 c #d0c482", +"eAi c #d0c484", +"#Dj c #d0c487", +"kIe c #d0c489", +"kLe c #d0c48b", +"kLf c #d0c58c", +"kOp c #d0c68c", +"aS6 c #d0c6ad", +"aXa c #d0c88c", +"a.y c #d0c986", +"bxZ c #d0c9c2", +"dpy c #d0cab7", +"hTU c #d0cb8a", +"cr3 c #d0cb98", +"c5E c #d0cba9", +"h#5 c #d0cc87", +"c5T c #d0ccb2", +"evz c #d0cd92", +"dCy c #d0cdcb", +"evD c #d0ce93", +"cjD c #d0ce9d", +"bQg c #d0cecd", +"b71 c #d0cfaa", +".iD c #d0cffa", +"eqF c #d0d097", +"ctp c #d0d0ce", +"bpJ c #d0d1a8", +"eqN c #d0d29a", +"eg2 c #d0d29b", +"d.g c #d0d2af", +"fV5 c #d0d48e", +"c1# c #d0d4c5", +"eEz c #d0d6b9", +"hKq c #d0d7a8", +"aON c #d0dcce", +"dAt c #d0dcdc", +"eAp c #d0ddbb", +"c4Y c #d0ddd4", +"dUT c #d0e0c0", +"dv4 c #d0e0e5", +"eEs c #d0ebee", +"drP c #d0ebf1", +"dvI c #d0ecee", +"eJu c #d0ecf0", +".pM c #d0ee96", +".qI c #d0f092", +"eu2 c #d0f0ed", +"ci6 c #d0f1ff", +"cM2 c #d0f2ff", +"cEs c #d0f3f8", +"dc6 c #d0f3fe", +"dh4 c #d0f4fd", +"cRq c #d0f4fe", +"jxq c #d16e26", +"jux c #d16f27", +"juz c #d17025", +"gp7 c #d1732e", +"jC6 c #d17526", +"jC5 c #d17626", +"h8j c #d1762c", +"gJ5 c #d1791a", +"iyK c #d17923", +"iEQ c #d17b22", +"iv5 c #d17b23", +"h8i c #d17b2f", +"iS5 c #d17c25", +"ioE c #d17c30", +"gIA c #d17e4d", +"itu c #d17f28", +"iS. c #d17f30", +"jiC c #d18026", +"iO6 c #d1802e", +"iUZ c #d18135", +"imd c #d18236", +"iVS c #d1842c", +"jN3 c #d18534", +"jLg c #d18933", +"h2G c #d18b35", +"gx7 c #d18c30", +"iJo c #d18c4b", +"hrP c #d18d31", +"hZH c #d18d39", +"gB1 c #d18e21", +"gq7 c #d19032", +"guq c #d1922c", +"hAK c #d19669", +"iQu c #d1994c", +"fna c #d19b6a", +"gQj c #d19c89", +"jFy c #d19d49", +"jzO c #d1a04d", +"jhW c #d1a05a", +"iWt c #d1a14f", +"h8V c #d1a44f", +"i94 c #d1a550", +"h5P c #d1a74a", +"jTq c #d1a74c", +"gu2 c #d1a751", +"hjb c #d1a792", +"g5V c #d1a991", +"jFC c #d1aa67", +"kNx c #d1ab62", +"j8L c #d1ab82", +"jpu c #d1ad5c", +"hGv c #d1ae62", +"d2Y c #d1ae6a", +".4b c #d1ae70", +".y# c #d1ae71", +"jmx c #d1af63", +"dKB c #d1af6f", +".Qo c #d1af77", +"jt7 c #d1af81", +"ifM c #d1af8d", +".Bh c #d1b076", +"iIK c #d1b08d", +"d7M c #d1b167", +"kiD c #d1b16d", +"dCh c #d1b176", +".ya c #d1b177", +"eeC c #d1b178", +"eo. c #d1b179", +"hqU c #d1b376", +".11 c #d1b37e", +"eI. c #d1b461", +".Ei c #d1b483", +"jk2 c #d1b487", +"gV1 c #d1b56d", +"fwl c #d1b675", +"ea0 c #d1b759", +"eaX c #d1b764", +"jWh c #d1b76d", +"eRi c #d1b76f", +"eRh c #d1b772", +"fDH c #d1b777", +"kQf c #d1b870", +"eoP c #d1b873", +"fOW c #d1b878", +"#qJ c #d1b87f", +"kwk c #d1b96a", +"kO. c #d1b96b", +"ejV c #d1b975", +"eRg c #d1b977", +"fOV c #d1b979", +"fHh c #d1b97a", +"fsj c #d1b97c", +"iyB c #d1b981", +"bkO c #d1b998", +"jmb c #d1ba73", +"etq c #d1ba74", +"fLc c #d1ba7a", +"eac c #d1bb66", +"g0b c #d1bb71", +"grE c #d1bb73", +"imY c #d1bb74", +"gze c #d1bb75", +"hQ7 c #d1bb76", +"ee7 c #d1bb79", +"ksr c #d1bb7b", +"eRf c #d1bb7d", +"#k5 c #d1bb7e", +"jVj c #d1bc6e", +"jdo c #d1bc74", +"jaz c #d1bc75", +"kpm c #d1bc76", +"aAq c #d1bc7b", +".Lz c #d1bc7f", +"cip c #d1bd5f", +"gOF c #d1bd77", +"gKK c #d1bd78", +"fIe c #d1bd79", +"fLk c #d1bd7d", +"fLl c #d1bd7e", +"e5m c #d1bd7f", +".RW c #d1bd81", +"cLw c #d1be6e", +"i7g c #d1be77", +"fwa c #d1be7a", +"fz3 c #d1be7d", +"fwz c #d1be7e", +"fsx c #d1be7f", +"kia c #d1be80", +".P3 c #d1be83", +"eQX c #d1be88", +".gC c #d1befe", +"hoX c #d1bf7a", +"#VN c #d1bf7d", +"fwb c #d1bf7e", +".R6 c #d1bf7f", +"#RR c #d1bf81", +"aBn c #d1bf8a", +"dO2 c #d1bf94", +"gKI c #d1c078", +"#Zt c #d1c07e", +"awr c #d1c07f", +"kOv c #d1c083", +"dpS c #d1c092", +"etc c #d1c099", +"dvi c #d1c16e", +"iw2 c #d1c17c", +"#R9 c #d1c17d", +"#VI c #d1c17e", +"fLn c #d1c182", +"#aT c #d1c183", +"#H# c #d1c185", +"#RO c #d1c188", +"#z1 c #d1c189", +"ace c #d1c18f", +"kGY c #d1c26c", +"fLo c #d1c282", +"foo c #d1c283", +"kCG c #d1c285", +"#KB c #d1c286", +"kOt c #d1c287", +"axm c #d1c28b", +"#6D c #d1c37f", +"#DD c #d1c380", +"kOs c #d1c387", +"kOu c #d1c388", +"#z6 c #d1c389", +"akw c #d1c38d", +"acc c #d1c38f", +"a.D c #d1c481", +"fY3 c #d1c483", +"kFr c #d1c487", +"kOq c #d1c489", +".xp c #d1c48d", +"eVN c #d1c498", +"eLV c #d1c582", +"acx c #d1c583", +"kIg c #d1c588", +"kIf c #d1c589", +"eAg c #d1c58a", +"#VF c #d1c67e", +"fdf c #d1c680", +"#2W c #d1c682", +"#Zi c #d1c686", +"fcG c #d1c77d", +"#2U c #d1c786", +"hv5 c #d1c788", +"hzU c #d1c880", +"#Y1 c #d1c88e", +"#3H c #d1c898", +"g8e c #d1c982", +"i#R c #d1c98e", +"cnQ c #d1c996", +"cAv c #d1c997", +"cYz c #d1c9b8", +"cEL c #d1ca97", +".h1 c #d1cafc", +"fE3 c #d1cb83", +"h2Z c #d1cb8e", +"cr4 c #d1cb98", +"bCr c #d1ccc5", +"#zY c #d1cd91", +"aBA c #d1cd9a", +"cTO c #d1cebf", +"eqX c #d1d096", +"cYE c #d1d0c9", +"c8m c #d1d0ce", +"eg7 c #d1d199", +"cp# c #d1d1d0", +"elR c #d1d299", +"axV c #d1d2bd", +"bVu c #d1d2d0", +"cBZ c #d1d3d2", +"hRh c #d1d7a7", +"dnn c #d1dbd8", +"c1. c #d1e1da", +"dEJ c #d1e1e4", +"dmG c #d1e5de", +"dEc c #d1e6da", +"dvA c #d1e9e6", +"dEn c #d1ebe8", +"cz4 c #d1f1ff", +"cWj c #d1f3f8", +"cIK c #d1f4fc", +"cW# c #d1f4fd", +"dc3 c #d1f4fe", +"dD6 c #d1f8fe", +"dzT c #d1f9ff", +"g3j c #d2712b", +"jxp c #d27227", +"jAc c #d27322", +"jxF c #d27629", +"iNa c #d27720", +"gJG c #d2782a", +"giL c #d2792d", +"jrE c #d27a22", +"gNU c #d27b1b", +"iv6 c #d27d24", +"jFU c #d27d26", +"jqg c #d27d3f", +"gtp c #d27d44", +"hZ. c #d27e24", +"iP9 c #d27e27", +"hV3 c #d27f27", +"itv c #d27f28", +"hZF c #d27f2a", +"g3l c #d28033", +"jfO c #d28329", +"kt. c #d2833a", +"h8h c #d2842f", +"gi1 c #d28537", +"gyE c #d28729", +"hZG c #d28733", +"hWh c #d28739", +"jbG c #d2874a", +"i3f c #d28751", +"hL7 c #d2883a", +"gJD c #d2891f", +"jLw c #d28933", +"jN6 c #d28934", +"gi0 c #d28c3f", +"iS3 c #d28d31", +"iKF c #d28e36", +"iSH c #d28f21", +"hdt c #d28f3c", +"iGh c #d29040", +"giZ c #d29045", +"hjO c #d2923b", +"bAQ c #d29663", +"hkO c #d29744", +"j1H c #d29758", +"jBy c #d2975b", +"hxi c #d2976c", +"fi2 c #d29d6b", +"gmg c #d29e3f", +"krc c #d29e5d", +"isl c #d29e6b", +"feQ c #d29e6d", +"gEI c #d29e8d", +"iCD c #d29f49", +"jkW c #d29f4a", +"jdB c #d2a53e", +"j3h c #d2a550", +"i2b c #d2a55a", +"hbJ c #d2a58e", +"jAS c #d2a64a", +"hES c #d2a691", +"hBt c #d2a694", +"kCY c #d2a76c", +"hxW c #d2a896", +"jye c #d2a951", +"fLO c #d2a959", +"jOm c #d2aa3b", +"j2v c #d2ab60", +"g1S c #d2ab91", +"jsx c #d2ac59", +"jU. c #d2ad7d", +"jmk c #d2ae58", +".Uf c #d2af70", +".Sm c #d2af72", +"hE3 c #d2af97", +"jpj c #d2b06e", +".6s c #d2b072", +".Uc c #d2b078", +"jEi c #d2b07c", +"jhY c #d2b07f", +"hqB c #d2b098", +"d20 c #d2b165", +"fVI c #d2b166", +"etl c #d2b262", +"etI c #d2b26b", +"c7D c #d2b274", +"iD. c #d2b289", +"cSL c #d2b296", +"e#P c #d2b377", +"dqn c #d2b461", +"jzV c #d2b47a", +"et1 c #d2b65b", +".Wf c #d2b680", +"eCJ c #d2b76f", +"j2g c #d2b775", +"eQV c #d2b873", +".fX c #d2b9ff", +"kPJ c #d2ba6e", +"kMF c #d2ba6f", +"ex6 c #d2ba70", +"kG5 c #d2ba73", +"g37 c #d2ba74", +"i3Y c #d2ba78", +"fDJ c #d2ba7a", +"jaq c #d2bb73", +"jmd c #d2bb75", +"hDu c #d2bb76", +"fHi c #d2bb7b", +"fwm c #d2bb7c", +"i10 c #d2bc74", +"fA3 c #d2bc75", +"hzY c #d2bc76", +"hGU c #d2bc77", +".Qa c #d2bc7c", +"eW# c #d2bc7d", +"e0S c #d2bc7e", +"geY c #d2bc85", +"gzd c #d2bd76", +"e9B c #d2bd7a", +"fLj c #d2bd7d", +"e9O c #d2bd7e", +"#fW c #d2bd81", +"iqP c #d2bd85", +"hae c #d2be77", +"fAb c #d2be7e", +"#6m c #d2be7f", +"#Su c #d2be80", +"ebv c #d2bf6d", +".3M c #d2bf7f", +"kks c #d2bf80", +"kLk c #d2bf81", +"epY c #d2c070", +"kjb c #d2c079", +"fz4 c #d2c07f", +"fR4 c #d2c080", +"fOS c #d2c081", +"ksC c #d2c08c", +"fMs c #d2c17b", +"fxQ c #d2c17c", +"kFt c #d2c184", +"kLj c #d2c185", +"kEa c #d2c26d", +"a.F c #d2c280", +"#KS c #d2c286", +"#G6 c #d2c28a", +"hKe c #d2c37e", +"#Oo c #d2c382", +"kFs c #d2c386", +"#if c #d2c388", +"#np c #d2c38b", +"a.o c #d2c481", +"#KE c #d2c488", +"#z7 c #d2c48a", +"acb c #d2c48d", +".hk c #d2c4fd", +"fWh c #d2c57c", +"eDY c #d2c57d", +"f.U c #d2c57e", +"kLg c #d2c58a", +"#.b c #d2c593", +"bH8 c #d2c67a", +"bMS c #d2c77e", +"#2X c #d2c782", +"fY4 c #d2c783", +"#VG c #d2c87f", +"ksn c #d2c88f", +"hQ4 c #d2c986", +"dk3 c #d2c9b5", +"hhw c #d2cb87", +"i#W c #d2cb90", +"iBR c #d2cd86", +"h#4 c #d2ce87", +"ddV c #d2ceb0", +"evF c #d2cf93", +"evE c #d2cf94", +"bUV c #d2d0a7", +"ccK c #d2d0c2", +"dpM c #d2d0ce", +"eqY c #d2d197", +"#GQ c #d2d19d", +"eqW c #d2d297", +"aic c #d2d2c1", +"fV7 c #d2d38b", +"eEw c #d2d4b9", +"drK c #d2d6ce", +"ccR c #d2d7cf", +"ddo c #d2d9bc", +"dQj c #d2ddce", +"aH3 c #d2e494", +"drL c #d2e4eb", +"aMl c #d2e596", +"dhT c #d2e7e3", +"dmJ c #d2ecec", +"dcW c #d2ecf0", +"eJs c #d2eef1", +"eEf c #d2eef2", +"crx c #d2f1ff", +"cDS c #d2f2ff", +"cRz c #d2f3f9", +"fNi c #d2f4d4", +"cM6 c #d2f4fb", +"dmS c #d2f4fc", +"dzR c #d2f7ff", +"dEo c #d2f8fd", +"dra c #d2f8ff", +"dzS c #d2f9ff", +"jif c #d36b21", +"jfs c #d36e22", +"jAf c #d37426", +"h8l c #d3762e", +"gMt c #d37642", +"jAh c #d37722", +"iyT c #d37b23", +"jcK c #d37c22", +"jrz c #d37c23", +"iyS c #d37c24", +"juv c #d37d22", +"juu c #d3801c", +"gGa c #d3811b", +"gx6 c #d3811f", +"iKl c #d38127", +"il1 c #d38131", +"jix c #d38224", +"i3h c #d3824c", +"jxg c #d38326", +"iHi c #d3832c", +"gi2 c #d38334", +"ixY c #d38345", +"h2F c #d38430", +"gB4 c #d38532", +"gqb c #d3862e", +"hTi c #d38735", +"iJT c #d3881f", +"jum c #d38828", +"jlf c #d38b27", +"guS c #d38b2e", +"gmo c #d38c38", +"i.D c #d38c3a", +"bOW c #d3925d", +"hCK c #d39339", +"h15 c #d3933a", +"iTm c #d39444", +"cOq c #d39458", +"guN c #d39524", +"gut c #d3953f", +"cJu c #d39865", +"giJ c #d39e3f", +"iPa c #d39f62", +"gEF c #d3a191", +"h8p c #d3a359", +"ipT c #d3a372", +"iZk c #d3a454", +"hq3 c #d3a45f", +"gKi c #d3a548", +"gp4 c #d3a54a", +"jDS c #d3a54b", +"gOf c #d3a54f", +"hbK c #d3a58e", +"hhf c #d3a84e", +"e5K c #d3a85d", +"hEY c #d3aa95", +"gB0 c #d3ab50", +"f8g c #d3ac57", +"iID c #d3ac80", +"hEZ c #d3ac95", +"jQ2 c #d3ae45", +"gXQ c #d3ae96", +"dY. c #d3af63", +"kQG c #d3af6b", +"dGt c #d3b06e", +".Sl c #d3b071", +"jra c #d3b07a", +"irN c #d3b156", +"j5J c #d3b160", +"d2. c #d3b277", +".Z0 c #d3b27b", +"j3. c #d3b363", +"k.b c #d3b46e", +"dfJ c #d3b479", +"esN c #d3b57c", +"duP c #d3b663", +"huE c #d3b677", +"eGB c #d3b67d", +"cPM c #d3b767", +"efp c #d3b774", +"eoJ c #d3b866", +"dXY c #d3b869", +"hLV c #d3b980", +"ea2 c #d3ba5a", +"ea3 c #d3ba5c", +"ggb c #d3ba76", +"kPK c #d3bb70", +"g39 c #d3bb72", +"ex3 c #d3bb75", +"kdg c #d3bb81", +"kwm c #d3bc6c", +"jKE c #d3bc74", +"jmc c #d3bc75", +"etp c #d3bc76", +"jrg c #d3bc86", +"jNK c #d3bd70", +"dPD c #d3bd73", +"izX c #d3bd74", +"gvx c #d3bd75", +"hoZ c #d3bd77", +"i9T c #d3bd78", +"i6w c #d3bd7c", +"asC c #d3bd7e", +"hTH c #d3be71", +"g0d c #d3be73", +"fxp c #d3be76", +"eaq c #d3be77", +"i9R c #d3be78", +"fHn c #d3be7e", +"fb3 c #d3be7f", +".gD c #d3befe", +"kJN c #d3bf71", +"gvA c #d3bf79", +"hwo c #d3bf7a", +"kxr c #d3bf7e", +"fOT c #d3bf7f", +"fot c #d3bf80", +"#kZ c #d3bf82", +"hsH c #d3c07a", +"kCI c #d3c080", +"gxm c #d3c08c", +"fz2 c #d3c17d", +"fHd c #d3c180", +"aJb c #d3c182", +"egc c #d3c272", +"aoD c #d3c281", +"kCH c #d3c282", +".Le c #d3c28a", +"g0k c #d3c37c", +"awq c #d3c381", +"kxp c #d3c385", +"#Vp c #d3c386", +"eCq c #d3c38c", +"eLX c #d3c392", +"#Aa c #d3c483", +"agn c #d3c48a", +"gSl c #d3c57b", +"ass c #d3c584", +"dXN c #d3c59b", +"cN. c #d3c5ab", +".tQ c #d3c68a", +"#qo c #d3c68c", +"fk8 c #d3c77f", +"hGy c #d3c786", +"eQZ c #d3c7a2", +".jl c #d3c7da", +"b1o c #d3c875", +"kQE c #d3c885", +"#O# c #d3c88b", +"#G3 c #d3c892", +"#ft c #d3c998", +"#Zn c #d3ca81", +"fY5 c #d3ca85", +"#R4 c #d3ca88", +"da5 c #d3cbb9", +"icP c #d3cc91", +"#aI c #d3cc97", +"bVm c #d3ccb4", +"fcH c #d3cd83", +"fE2 c #d3cd84", +"#7j c #d3cd97", +"dIH c #d3cdb6", +"dbb c #d3cdba", +"bxY c #d3cdc7", +"hdS c #d3ce86", +"#G1 c #d3ce98", +"#wD c #d3cf96", +"ksj c #d3d09b", +"cYC c #d3d0c7", +"evw c #d3d196", +"bZP c #d3d1cf", +"c8a c #d3d2d0", +"dEI c #d3d6cb", +".jY c #d3d6eb", +"hG8 c #d3d7a8", +".l2 c #d3d8bb", +"dEm c #d3dace", +"di. c #d3e0da", +"dEg c #d3e6d9", +"dE# c #d3e7da", +"aH0 c #d3e897", +"c5R c #d3eaeb", +"cMn c #d3ecf3", +"eJF c #d3edf0", +"ghq c #d3eec8", +"dvJ c #d3f0f4", +"cv1 c #d3f1ff", +"crD c #d3f2ff", +"dQz c #d3f3f9", +"cRs c #d3f3fd", +"cqW c #d3f3ff", +"cIL c #d3f4fa", +"c0p c #d3f4ff", +"dc5 c #d3f6ff", +"dvv c #d3f8ff", +"dD4 c #d3f9ff", +"dD5 c #d3faff", +"jrB c #d47227", +"juw c #d47528", +"jAd c #d47727", +"jC3 c #d47a25", +"h8k c #d47b2f", +"jxt c #d47c25", +"h5E c #d47c27", +"iw. c #d47e25", +"h2E c #d47f29", +"gFO c #d47f2c", +"iBy c #d48025", +"joT c #d4812a", +"iyM c #d48327", +"jAl c #d48328", +"ioH c #d48337", +"i4k c #d4842b", +"jz8 c #d48526", +"jlM c #d4872b", +"jIP c #d4872d", +"iJk c #d48738", +"i9g c #d4882c", +"iG6 c #d48922", +"iMa c #d48b3d", +"iNt c #d48c32", +"ieO c #d48c3e", +"bGi c #d48c4c", +"hX8 c #d48c54", +"iFc c #d48d33", +"kx2 c #d48e46", +"h#m c #d4902c", +"ion c #d4904a", +"gq6 c #d49232", +"gnj c #d49839", +"kDA c #d49c56", +"hvu c #d49f4c", +"iB4 c #d4a045", +"iFo c #d4a046", +"iFs c #d4a447", +"iBO c #d4a44e", +"jSJ c #d4a567", +"hfx c #d4a58f", +"jCD c #d4a653", +"iAu c #d4a676", +"ikk c #d4a747", +"j0P c #d4a74f", +"jkV c #d4a752", +"f1W c #d4a855", +"jgt c #d4aa3f", +"jvA c #d4aa52", +"gj0 c #d4ab56", +"fkP c #d4ac55", +"fEr c #d4ad58", +"fVz c #d4af63", +"jcb c #d4b07f", +"ipJ c #d4b08a", +".Ue c #d4b173", +"isA c #d4b181", +".Sn c #d4b276", +"eHT c #d4b379", +"jjJ c #d4b382", +".fj c #d4b3ff", +"c8K c #d4b466", +"cX9 c #d4b474", +"ejf c #d4b47c", +"ik4 c #d4b486", +"d65 c #d4b579", +"dkG c #d4b57a", +"eeD c #d4b57c", +"c3U c #d4b868", +"dbH c #d4b86a", +"ea1 c #d4b958", +"kMp c #d4b970", +"fDI c #d4b978", +".fY c #d4b9ff", +"#fL c #d4ba7b", +"jsQ c #d4ba9f", +"fR8 c #d4bb7a", +"dyW c #d4bc69", +"fA1 c #d4bc73", +"fA2 c #d4bc74", +"fLd c #d4bc7b", +"kPI c #d4bd71", +"g4. c #d4bd72", +"fId c #d4bd76", +"fO3 c #d4bd7c", +"fkl c #d4bd7e", +"cPH c #d4be6c", +"iTf c #d4be71", +"ji0 c #d4be76", +"ex5 c #d4be77", +"ejW c #d4be7c", +"fLi c #d4be7d", +"kKV c #d4bf70", +"i7j c #d4bf78", +"kwv c #d4bf79", +"fDM c #d4bf7e", +"kNs c #d4bf88", +"g0c c #d4c074", +"e5c c #d4c07c", +"kxq c #d4c07f", +"kz3 c #d4c080", +"#c1 c #d4c086", +"euw c #d4c171", +"dXV c #d4c178", +"gGP c #d4c17a", +"fU3 c #d4c181", +"cN# c #d4c19f", +"fly c #d4c27b", +"fbS c #d4c37b", +"agx c #d4c380", +"fO4 c #d4c382", +"#Sv c #d4c385", +"hGS c #d4c47e", +"fkh c #d4c482", +"fLp c #d4c484", +"e0E c #d4c486", +"fw# c #d4c488", +"aBh c #d4c48e", +"eVK c #d4c491", +"i18 c #d4c57b", +"iki c #d4c57c", +"#de c #d4c688", +"jEa c #d4c692", +"#O. c #d4c78b", +"aox c #d4c884", +"#6C c #d4c885", +"hzD c #d4c887", +"#KM c #d4c890", +"e0o c #d4c899", +"#R8 c #d4c97d", +"#z5 c #d4c98d", +"axp c #d4c992", +"hsn c #d4ca88", +"hoF c #d4ca89", +"#KF c #d4ca8f", +"#Dr c #d4ca91", +"kQt c #d4cb84", +"#2Y c #d4cb85", +"acv c #d4cb8b", +"icO c #d4cd92", +"fY6 c #d4cf87", +"cjC c #d4cfa1", +"bZX c #d4cfc5", +"cfi c #d4d0a3", +".iE c #d4d0f9", +"evv c #d4d196", +"bUZ c #d4d2d0", +"eqD c #d4d399", +"dfY c #d4d3d0", +"hau c #d4d7ae", +"hDH c #d4d8aa", +"fV6 c #d4d98f", +"dng c #d4d9bb", +"ah3 c #d4d9ca", +"dMq c #d4dccf", +"h0t c #d4deac", +"e7E c #d4dfc3", +"dH8 c #d4e2d0", +"aUN c #d4e495", +"dc8 c #d4e5e0", +"baa c #d4e899", +"aY4 c #d4e999", +"cIO c #d4e9e4", +"eEt c #d4ece9", +"c09 c #d4eeed", +"dAx c #d4eef6", +"eEe c #d4eff3", +"c5K c #d4eff4", +"cQJ c #d4eff7", +"b1M c #d4f0fb", +"b1L c #d4f1fb", +"ce. c #d4f2ff", +"c01 c #d4f4fb", +"cMl c #d4f4ff", +"cIM c #d4f5f8", +"dc4 c #d4f5fe", +"dc2 c #d4f5ff", +"dvy c #d4f7fc", +"drb c #d4f8ff", +"dvw c #d4f9ff", +"dH5 c #d4faff", +"joz c #d57125", +"jfr c #d57622", +"jig c #d57925", +"juB c #d57b29", +"iN# c #d57d23", +"jD. c #d58126", +"iv9 c #d58127", +"jFS c #d58230", +"iS4 c #d58429", +"iEA c #d5842c", +"jDh c #d5842f", +"jFK c #d58520", +"jCZ c #d58521", +"jz7 c #d58727", +"g7o c #d58735", +"h5o c #d58739", +"jCY c #d58824", +"jxf c #d5882a", +"ieo c #d5882c", +"jot c #d58923", +"iHh c #d58932", +"jLv c #d58a32", +"jqh c #d58b4e", +"iSG c #d58c20", +"jro c #d58e2d", +"h8g c #d5912f", +"jul c #d59234", +"hYH c #d5923e", +"g7S c #d5943d", +"huL c #d59441", +"iGb c #d59459", +"hWi c #d59549", +"iSV c #d59636", +"hz# c #d5993e", +"guh c #d59a31", +"j2o c #d59b46", +"jFz c #d59c46", +"iZi c #d59e41", +"hQv c #d5a14f", +"hTB c #d5a150", +"gfa c #d5a44b", +"h9S c #d5a46f", +"jCH c #d5a550", +"hfw c #d5a690", +"ihR c #d5a84d", +"hWK c #d5a853", +"fAL c #d5a856", +"j5F c #d5a951", +"jLU c #d5aa47", +"jLQ c #d5ab43", +"jLL c #d5ab4e", +"j3k c #d5ab54", +"gu7 c #d5ab56", +"j#B c #d5ab61", +"jSB c #d5ac55", +"etD c #d5ad62", +"h60 c #d5ad80", +"hzq c #d5ae53", +"etC c #d5ae61", +"hxY c #d5ae9b", +"hbD c #d5af97", +"jYp c #d5b05c", +"kKg c #d5b061", +"efj c #d5b062", +"hoB c #d5b064", +"fkN c #d5b065", +"jK3 c #d5b17f", +"jRE c #d5b185", +"jpv c #d5b25f", +".Sk c #d5b274", +"hqv c #d5b299", +"dS0 c #d5b476", +".So c #d5b479", +".fi c #d5b4fd", +"c7E c #d5b576", +"hTR c #d5b76f", +"dz. c #d5b864", +"dDp c #d5b964", +"eaG c #d5ba6c", +"iWx c #d5bb73", +"#ic c #d5bb7d", +"#x. c #d5bb80", +"e1C c #d5bc65", +"g38 c #d5bc72", +"jQT c #d5bc74", +"d7v c #d5bd75", +"fHj c #d5bd7c", +"fOU c #d5bd7d", +".IS c #d5bd83", +"ji5 c #d5be77", +"hlp c #d5be78", +"fDK c #d5be7d", +"fgd c #d5be7f", +"i85 c #d5be86", +".gE c #d5befe", +"kME c #d5bf74", +"iK4 c #d5bf76", +"ji3 c #d5bf77", +"hsJ c #d5bf78", +"hU# c #d5bf79", +"fR5 c #d5bf7e", +"giv c #d5bf89", +"dXW c #d5c075", +"dPC c #d5c077", +"jdn c #d5c078", +"iQA c #d5c079", +"e0T c #d5c07f", +"#dq c #d5c081", +"h4G c #d5c088", +"h6# c #d5c17d", +"eoR c #d5c17f", +"ilH c #d5c187", +"h1D c #d5c189", +"j0r c #d5c27c", +"jpF c #d5c27d", +"kz4 c #d5c281", +"gtA c #d5c28e", +"c#c c #d5c367", +"e2c c #d5c375", +"fK9 c #d5c382", +"#RP c #d5c388", +"cp7 c #d5c474", +"j7C c #d5c47c", +"fpe c #d5c57a", +"gGD c #d5c582", +"gy0 c #d5c583", +"aoH c #d5c585", +".XL c #d5c588", +".AR c #d5c58a", +"eHf c #d5c592", +"g4d c #d5c679", +"g4c c #d5c67a", +"fbU c #d5c67f", +"agC c #d5c687", +".Lw c #d5c689", +"#V7 c #d5c68c", +"iY0 c #d5c780", +"#6E c #d5c785", +"#RQ c #d5c78b", +"#qp c #d5c78e", +".j4 c #d5c7c7", +"#R7 c #d5c880", +"#2Z c #d5c883", +"#Ad c #d5c987", +"agB c #d5c98a", +"#Om c #d5c98e", +"cEK c #d5c996", +"#Zh c #d5ca8d", +"#R0 c #d5ca8e", +".h2 c #d5cafb", +"bMP c #d5cb7a", +"#VH c #d5cb81", +"#R2 c #d5cb8d", +".7Z c #d5cb9e", +"efU c #d5cd7f", +"cwo c #d5cd9c", +"du# c #d5cdb8", +"hWU c #d5ce8c", +"cTN c #d5cfbe", +"c8c c #d5d0bf", +"bG2 c #d5d0c8", +"evy c #d5d194", +"dnu c #d5d1ae", +"dGU c #d5d1cf", +"dwa c #d5d2af", +"b4Q c #d5d2c5", +"bQK c #d5d2d1", +".jj c #d5d2ef", +"b96 c #d5d3d1", +"fY7 c #d5d48a", +"hQ2 c #d5d493", +"elY c #d5d499", +"c2Y c #d5d4d2", +"el6 c #d5d59c", +"crW c #d5d5ba", +".ln c #d5d5c4", +"eg1 c #d5d6a0", +"evq c #d5d79f", +"hAd c #d5d9ad", +"dEl c #d5d9ca", +"b98 c #d5d9d3", +"dIl c #d5daca", +"dim c #d5dcbf", +"ddl c #d5dec3", +"dUN c #d5e1bc", +"g0J c #d5e5c4", +"dUS c #d5e5ca", +"ixh c #d5e6b4", +"dz9 c #d5ecea", +"f9k c #d5edc0", +"gv8 c #d5efcd", +"d.Q c #d5eff4", +"dvz c #d5f2f4", +"drk c #d5f2f6", +"bR6 c #d5f2fc", +"bNa c #d5f2fe", +"b1G c #d5f2ff", +"c#B c #d5f3fd", +"cnr c #d5f3ff", +"cRr c #d5f4fd", +"dIn c #d5f5f6", +"cWi c #d5f5fd", +"dvx c #d5f9ff", +"dA# c #d5faff", +"jlm c #d66e23", +"juy c #d67629", +"jAe c #d67928", +"jrU c #d67b27", +"gYg c #d67d48", +"gxy c #d67e2f", +"iBH c #d67f26", +"iGw c #d67f3d", +"iP8 c #d68024", +"jC8 c #d68124", +"iyU c #d68126", +"jFR c #d6812e", +"ioG c #d68234", +"jFT c #d6832d", +"gRH c #d68420", +"iv8 c #d68428", +"jcL c #d68522", +"jcJ c #d68824", +"iVT c #d6882d", +"hQ# c #d68831", +"h#l c #d68a35", +"iMI c #d68b21", +"gi3 c #d68b36", +"jrp c #d68c2f", +"gmI c #d68c33", +"iUB c #d68c52", +"hgY c #d68d2c", +"gbK c #d69033", +"iHU c #d69137", +"g7p c #d69235", +"b4g c #d6924d", +"hys c #d6933d", +"gi8 c #d69546", +"gff c #d6962d", +"hha c #d69642", +"hdd c #d69731", +"gZL c #d69835", +"iTi c #d69848", +"kx3 c #d69a55", +"gnk c #d69c3f", +"iDv c #d69d63", +"gqJ c #d69e3f", +"ds4 c #d69e70", +"hJt c #d69f4f", +"jCI c #d6a14b", +"iH3 c #d6a54a", +"hvv c #d6a658", +"jQb c #d6a762", +"iTh c #d6a958", +"iui c #d6aa4d", +"hqe c #d6ab94", +"kgy c #d6ac4a", +"klp c #d6ac4c", +"kgv c #d6ac4f", +"j8# c #d6ac51", +"ihO c #d6ac56", +"hQA c #d6ad4e", +"jst c #d6ad53", +"eyf c #d6ad60", +"eC0 c #d6ae60", +"jx4 c #d6b05d", +"gXG c #d6b09b", +"jvz c #d6b159", +"ekb c #d6b167", +"jsw c #d6b25f", +"#bs c #d6b375", +"jO1 c #d6b386", +"j1h c #d6b38f", +"jaP c #d6b45c", +"dOH c #d6b473", +".Qt c #d6b476", +"cum c #d6b55e", +"eMg c #d6b563", +"hOK c #d6b598", +"dKC c #d6b674", +"jbd c #d6b696", +"ex0 c #d6b769", +"dkJ c #d6b777", +"daE c #d6b77a", +".Bg c #d6b882", +"eRj c #d6b96d", +".x9 c #d6b983", +"iW2 c #d6ba91", +"fIc c #d6bb73", +"h0W c #d6bb99", +"h5X c #d6bc76", +".XH c #d6bc79", +"bpe c #d6bc96", +"j2C c #d6bd72", +"eHA c #d6bd76", +"fYl c #d6bd7a", +"eeZ c #d6be66", +"kJu c #d6be73", +"kLl c #d6be7b", +"fLe c #d6be7c", +"fO2 c #d6be7d", +"#.G c #d6be7e", +"ji1 c #d6bf77", +"ji4 c #d6bf78", +"fHk c #d6bf7d", +"fDL c #d6bf7e", +"bgo c #d6bf98", +"g#q c #d6c075", +"ji2 c #d6c078", +"hsI c #d6c079", +"i9S c #d6c07a", +"fHm c #d6c07f", +".TQ c #d6c086", +"iZb c #d6c177", +"jgh c #d6c17a", +"g8. c #d6c17b", +"ex4 c #d6c17c", +".8l c #d6c181", +"e9P c #d6c182", +"bCx c #d6c19e", +"i42 c #d6c279", +"ggV c #d6c27a", +"eoQ c #d6c280", +"fYe c #d6c281", +".53 c #d6c282", +"#i. c #d6c289", +"keI c #d6c28f", +"euv c #d6c373", +"jqV c #d6c376", +"gzf c #d6c37c", +"e5b c #d6c380", +"#HA c #d6c389", +"gOE c #d6c47a", +"j6U c #d6c482", +"agr c #d6c483", +"#fH c #d6c48c", +".hl c #d6c4fd", +"e9D c #d6c57d", +"grr c #d6c582", +"fLq c #d6c584", +".AU c #d6c586", +"gOn c #d6c682", +"akH c #d6c684", +"#fD c #d6c68b", +"g4b c #d6c779", +"fZp c #d6c77c", +"j96 c #d6c783", +"jMp c #d6c795", +"exM c #d6c7a5", +"#21 c #d6c886", +"#tB c #d6c88f", +"euu c #d6c97c", +"eDP c #d6c97f", +"#VJ c #d6c986", +"#On c #d6c98c", +"#wK c #d6c98f", +"#G9 c #d6ca92", +"eSD c #d6cb7c", +"#6B c #d6cb88", +"hsm c #d6cb89", +"efT c #d6cc77", +"#2R c #d6cc8e", +"#VB c #d6cc8f", +"hwk c #d6cd82", +"#2S c #d6cd8f", +"dk4 c #d6cdb9", +"hk6 c #d6ce8a", +"aky c #d6ce8d", +"#R3 c #d6ce91", +"dpI c #d6cfba", +"dkY c #d6cfbb", +"c77 c #d6cfbd", +"c3k c #d6cfbe", +"bx6 c #d6cfc5", +".iF c #d6cff7", +"#VD c #d6d090", +"dl. c #d6d0bb", +"cRO c #d6d1a1", +"b47 c #d6d1c1", +"bx8 c #d6d1cb", +"evx c #d6d296", +"bLz c #d6d2cd", +"erf c #d6d39e", +"da9 c #d6d4d0", +"bVw c #d6d4d2", +"eqV c #d6d599", +"eqZ c #d6d59a", +"eEy c #d6d8bb", +"hXk c #d6dead", +"ctX c #d6dee0", +"h3p c #d6dfad", +"fuG c #d6e8d5", +"c9W c #d6eaec", +"dVd c #d6ebe6", +"dAu c #d6eef6", +"dv9 c #d6eef8", +"eJt c #d6eff1", +"bIp c #d6f1fd", +"b6x c #d6f2ff", +"cRt c #d6f3fd", +"cIN c #d6f4f4", +"cej c #d6f4fe", +"cqX c #d6f4ff", +"cM7 c #d6f5f9", +"dvK c #d6f7fc", +"dIo c #d6f8fd", +"dmB c #d6f8ff", +"dmC c #d6f9ff", +"ioB c #d75d3b", +"jrA c #d77828", +"gIC c #d77d46", +"hTg c #d78029", +"iBI c #d78227", +"jC9 c #d78327", +"iPI c #d78522", +"iP7 c #d78527", +"hTh c #d78530", +"hWg c #d78532", +"i4. c #d78624", +"jAk c #d78628", +"iyQ c #d7862b", +"iR9 c #d78637", +"iJ# c #d78643", +"gp9 c #d78730", +"iJa c #d78742", +"iJ. c #d78745", +"iG7 c #d78929", +"iEB c #d78930", +"gmH c #d78a31", +"iI9 c #d78a47", +"jrq c #d78b31", +"gmt c #d78b36", +"i9f c #d78c30", +"i6G c #d78d32", +"ib3 c #d78d39", +"i6X c #d78e30", +"jIQ c #d78e33", +"iPG c #d79325", +"iYp c #d79529", +"jrn c #d79736", +"g3I c #d79737", +"h5G c #d79840", +"hkN c #d79944", +"csq c #d79964", +"iq2 c #d79c5f", +"jP. c #d79d60", +"hWj c #d7a053", +"ixW c #d7a060", +"gne c #d7a13d", +"itG c #d7a15e", +"jow c #d7a23d", +"hWD c #d7a456", +"fi0 c #d7a575", +"fn# c #d7a675", +"jLV c #d7a843", +"jOq c #d7a941", +"gZT c #d7a949", +"h2N c #d7aa49", +"gcy c #d7aa54", +"irP c #d7aa55", +"gbJ c #d7ab58", +"iH5 c #d7ab5c", +"h6Y c #d7ab7c", +"j8d c #d7ac52", +"jSG c #d7ac64", +"kdX c #d7ad4a", +"jjg c #d7ae42", +"j0N c #d7ae55", +"ksQ c #d7ae72", +"hja c #d7ae9a", +"k.z c #d7af54", +"jyi c #d7af56", +"j0T c #d7af59", +"d7H c #d7af62", +"jo# c #d7af75", +"fVE c #d7b05b", +"hLh c #d7b08e", +"jOk c #d7b14f", +"ife c #d7b151", +"j5q c #d7b157", +"jQ1 c #d7b34d", +".fk c #d7b3ff", +"jvn c #d7b469", +"#bt c #d7b475", +"dGu c #d7b574", +"j5s c #d7b65e", +"c2W c #d7b672", +"c2V c #d7b777", +"c7F c #d7b778", +"jsu c #d7b866", +"fAT c #d7b86e", +"dfO c #d7b87a", +"dpe c #d7b87c", +"dXx c #d7b87d", +".y. c #d7b880", +"iEN c #d7b96c", +"h#W c #d7b96e", +"#tZ c #d7b97f", +"ind c #d7b99a", +".fZ c #d7b9fe", +"iTg c #d7ba6c", +"kna c #d7ba7a", +"j7e c #d7bb6c", +"eGC c #d7bb82", +"jgE c #d7bc81", +"i2M c #d7bc91", +"dg2 c #d7bd6b", +"dYn c #d7bd6d", +"fEH c #d7bd74", +"fR7 c #d7bd7c", +"fEI c #d7be74", +"fYk c #d7be7b", +"fLf c #d7be7c", +"dX4 c #d7be8b", +"jda c #d7bf75", +"eCK c #d7bf78", +"kIi c #d7bf7c", +"fOX c #d7bf7d", +"kJt c #d7c076", +"fHl c #d7c07e", +"#HF c #d7c085", +"efo c #d7c08d", +"fL3 c #d7c179", +"fS# c #d7c17f", +"kuV c #d7c180", +"#Ll c #d7c188", +"i4M c #d7c279", +"iQB c #d7c27a", +"jdm c #d7c27b", +"iQz c #d7c27c", +"gMF c #d7c28c", +"chR c #d7c36c", +"g4# c #d7c376", +"gzg c #d7c37c", +"hd7 c #d7c37d", +"kuU c #d7c381", +"fb4 c #d7c383", +"kn8 c #d7c38a", +"e9C c #d7c47c", +"#DW c #d7c48a", +"fDC c #d7c583", +"ko7 c #d7c584", +".tP c #d7c68b", +"#ks c #d7c692", +"ebw c #d7c775", +"ep4 c #d7c776", +"a1p c #d7c788", +"aws c #d7c889", +"fs. c #d7c891", +"acp c #d7c985", +"aou c #d7c995", +"dTp c #d7c9a1", +"eIS c #d7ca7e", +"gWk c #d7ca7f", +"h6. c #d7ca87", +"aAp c #d7ca8c", +"#wM c #d7ca91", +"#KV c #d7cb87", +"ctj c #d7cbb1", +"fMr c #d7cc83", +"#Hd c #d7cc89", +"#6A c #d7cc8a", +"acz c #d7cc8c", +"agm c #d7cc91", +"#wE c #d7cc94", +"#nq c #d7cc95", +"cnP c #d7cc9c", +"#Zo c #d7cd86", +"#KQ c #d7cd95", +"cI6 c #d7cd9a", +"c1a c #d7cdb1", +"acu c #d7ce8f", +"cWn c #d7ceb4", +"f2j c #d7cf82", +"fMp c #d7cf83", +"iHu c #d7cf86", +"#Zj c #d7cf91", +"#VC c #d7cf92", +"fIB c #d7d084", +"cr2 c #d7d09f", +"dk5 c #d7d0bb", +"fIC c #d7d186", +"aGa c #d7d1bd", +"hdR c #d7d288", +"hT7 c #d7d28e", +"ksl c #d7d29c", +"#zZ c #d7d399", +"at1 c #d7d3c0", +"#G0 c #d7d49d", +"eq0 c #d7d59a", +"dlc c #d7d5d3", +"elS c #d7d69b", +"evt c #d7d69c", +"fZ. c #d7d78b", +"iHt c #d7d791", +"eg8 c #d7d79d", +"eEx c #d7d7bb", +"hwD c #d7d8ad", +"dv3 c #d7d9cc", +"cWm c #d7dcce", +"hUk c #d7deae", +"dc9 c #d7decc", +"aOQ c #d7e1d1", +"dD9 c #d7e6d6", +"fCh c #d7e7d0", +"dno c #d7eaf2", +"cWl c #d7ece8", +"dZF c #d7ede2", +"dv5 c #d7edf6", +"dEK c #d7eff8", +"dU2 c #d7f1ed", +"dMr c #d7f1f1", +"dU1 c #d7f2ee", +"ddS c #d7f2f9", +"b1K c #d7f2fc", +"c#A c #d7f2fd", +"cWk c #d7f3f3", +"bDI c #d7f3fd", +"crC c #d7f3ff", +"cRA c #d7f4f8", +"cRw c #d7f5ff", +"dIq c #d7f7fc", +"drc c #d7f8ff", +"dMs c #d7f9fe", +"i#w c #d87e23", +"hr1 c #d87f24", +"hQp c #d88025", +"hQq c #d88026", +"gNW c #d88120", +"h2D c #d88127", +"il7 c #d8812c", +"hTx c #d88429", +"ioF c #d88436", +"iO5 c #d88536", +"h#E c #d8861e", +"g7n c #d88634", +"gEM c #d8864b", +"jfK c #d88823", +"gmu c #d88930", +"jAm c #d88c2e", +"jnl c #d88c4d", +"jun c #d88d2d", +"gbL c #d89030", +"koE c #d89049", +"hdc c #d89131", +"jN4 c #d8913a", +"hkw c #d8922d", +"iDK c #d8924a", +"gRo c #d8933f", +"gJL c #d89342", +"hOz c #d89354", +"iG4 c #d89447", +"iKE c #d89538", +"gxw c #d8962b", +"gq5 c #d89633", +"ixX c #d89651", +"gq4 c #d8972f", +"jLf c #d89737", +"iv3 c #d89751", +"i0D c #d8984b", +"cSZ c #d8985b", +"gbN c #d89932", +"hoo c #d89a44", +"g3n c #d89b35", +"hB0 c #d89b40", +"i3y c #d89b54", +"gni c #d89c3a", +"igJ c #d89c52", +"jRN c #d89d61", +"coL c #d89e55", +"hjN c #d8a35a", +"giY c #d8a35d", +"hEc c #d8a378", +"ktq c #d8a662", +"h5Q c #d8a749", +"hGs c #d8a751", +"bpo c #d8a76a", +"inn c #d8a773", +"fi1 c #d8a776", +"h2q c #d8a858", +"eWB c #d8a94a", +"h2O c #d8a94e", +"kOh c #d8a955", +"gMl c #d8a99a", +"ium c #d8aa4c", +"jVe c #d8aa65", +"h7K c #d8aa67", +"g72 c #d8ab53", +"k.C c #d8ac4d", +"h2r c #d8ac5e", +"jQc c #d8ac6e", +"jt9 c #d8ad57", +"jmq c #d8ae43", +"fw8 c #d8ae5b", +"h5r c #d8ae60", +"ism c #d8ae80", +"jx9 c #d8af45", +"j0R c #d8b058", +"fEp c #d8b05e", +"jjc c #d8b23e", +"foX c #d8b25d", +"jTp c #d8b351", +"j7U c #d8b35b", +"hIi c #d8b39c", +"jvE c #d8b45d", +"i6q c #d8b478", +".6t c #d8b577", +".Sj c #d8b579", +"jmu c #d8b662", +"dOI c #d8b778", +".Qs c #d8b77a", +"jU# c #d8b78f", +"jCM c #d8b876", +"dGv c #d8b878", +"c7G c #d8b879", +".Ud c #d8b87d", +"dkI c #d8b97a", +"dpi c #d8b97b", +"dCi c #d8b97d", +".Sh c #d8b980", +"gnE c #d8bb71", +"dkK c #d8bb7e", +"cON c #d8bd84", +"hUT c #d8bd9a", +"fEG c #d8be74", +"fVa c #d8be7c", +"iJJ c #d8be7d", +"eQW c #d8be80", +".yd c #d8be8d", +".gF c #d8befe", +"cY6 c #d8bf6d", +"kPv c #d8bf73", +"j3u c #d8bf74", +"fVb c #d8bf7c", +"fO0 c #d8bf7d", +"jWi c #d8c074", +"fO1 c #d8c07d", +"jpf c #d8c179", +"jme c #d8c17a", +"ji6 c #d8c17b", +"f1y c #d8c17e", +"#Li c #d8c183", +"iEe c #d8c186", +"f.r c #d8c26e", +"kwi c #d8c274", +"kJR c #d8c277", +"jDw c #d8c279", +"fU4 c #d8c280", +"eWa c #d8c281", +"#a3 c #d8c282", +"i1Z c #d8c37a", +"jax c #d8c37d", +"gRW c #d8c37f", +"kss c #d8c381", +"kxs c #d8c382", +"fge c #d8c383", +"cyK c #d8c473", +"gSq c #d8c47b", +"ixb c #d8c47c", +"ky9 c #d8c47d", +"kQx c #d8c482", +"kjD c #d8c496", +"kHW c #d8c574", +"gd# c #d8c57d", +"ggz c #d8c57e", +"f1s c #d8c583", +"kmJ c #d8c684", +"fOR c #d8c685", +".Ly c #d8c688", +"aFI c #d8c690", +"keG c #d8c694", +"g4a c #d8c778", +"fO5 c #d8c785", +"cRE c #d8c7a8", +"gcT c #d8c880", +"fO6 c #d8c885", +"#Z. c #d8c88c", +"h8S c #d8c97b", +"kJ8 c #d8c98a", +"efS c #d8ca70", +"jdW c #d8ca9c", +"eVL c #d8caa4", +"acq c #d8cb87", +"#Op c #d8cb88", +"hv4 c #d8cb89", +"cI5 c #d8cb98", +"#20 c #d8cc89", +"a.C c #d8cd8c", +"c8o c #d8cdac", +"hNi c #d8ce8a", +"icQ c #d8ce91", +"#KN c #d8ce95", +"hzT c #d8cf83", +"#6v c #d8cf91", +"#R1 c #d8cf93", +"eHc c #d8cfa1", +"#2V c #d8d08f", +"da6 c #d8d0bf", +"dk2 c #d8d1bb", +"#Zk c #d8d292", +"#Dk c #d8d296", +"#3I c #d8d2a2", +"ccM c #d8d2c2", +"bCq c #d8d2c8", +"evG c #d8d396", +"hQ3 c #d8d490", +"evu c #d8d59a", +"dCz c #d8d5d3", +"eqE c #d8d79d", +"#nb c #d8d7aa", +"erd c #d8d9af", +"eqO c #d8daa1", +"b5d c #d8dcd8", +"egN c #d8dea9", +"atR c #d8dfd3", +"h6o c #d8e0ad", +"fyF c #d8e2cc", +"ddr c #d8e5cf", +"cI# c #d8e9ec", +"cI. c #d8ebef", +"dAw c #d8f0f9", +"dv8 c #d8f0fb", +"dv7 c #d8f1fc", +"ddR c #d8f2fe", +"cz6 c #d8f2ff", +"diO c #d8f3fe", +"cq9 c #d8f3ff", +"c08 c #d8f5fb", +"c#D c #d8f5fe", +"cWa c #d8f6fe", +"dA. c #d8f7fa", +"dEp c #d8f8ff", +"drd c #d8f9ff", +"dvL c #d8faff", +".#u c #d93ada", +"hok c #d97e23", +"iL4 c #d98038", +"hMU c #d98226", +"gRI c #d9851c", +"iyR c #d9862a", +"gBo c #d98731", +"iv7 c #d9882a", +"hS4 c #d98a2b", +"jrx c #d98b22", +"h5F c #d98b32", +"jxv c #d98d2b", +"gfd c #d98d2d", +"iJR c #d98d2f", +"imc c #d98d3b", +"iyP c #d98e2f", +"jlL c #d98f2c", +"hyt c #d99035", +"iNs c #d99133", +"hon c #d99339", +"jN5 c #d9943a", +"gNz c #d99443", +"ilQ c #d99445", +"g7R c #d99539", +"hPx c #d9953f", +"gNq c #d99726", +"giP c #d9972c", +"gVl c #d9973d", +"g.x c #d9982f", +"gFS c #d99843", +"gBl c #d9992f", +"gB7 c #d99945", +"jPp c #d99958", +"hyr c #d99b44", +"gqc c #d99b48", +"cwH c #d99d67", +"g7q c #d99e3b", +"gYy c #d99e3c", +"gnh c #d99f39", +"i57 c #d99f57", +"dxi c #d99f6d", +"gVM c #d9a23b", +"h#K c #d9a250", +"gi9 c #d9a459", +"gq8 c #d9a547", +"gqZ c #d9a637", +"jIi c #d9a654", +"k#S c #d9a663", +"iAE c #d9a773", +"gqy c #d9a93f", +"h8U c #d9a948", +"giQ c #d9a954", +"hjM c #d9a961", +"jn7 c #d9aa53", +"gRq c #d9aa54", +"kiG c #d9ab3d", +".ez c #d9acfa", +"j8c c #d9ad51", +"fYI c #d9ad58", +"iBZ c #d9ad60", +"gAu c #d9ad9f", +"j8. c #d9ae51", +"h5R c #d9ae58", +"jXx c #d9ae5c", +"j5E c #d9af54", +"grb c #d9af57", +"gyP c #d9af59", +"jsn c #d9b04b", +"imQ c #d9b04f", +"j8f c #d9b156", +"j5A c #d9b157", +"j0O c #d9b158", +"j5H c #d9b159", +"kOK c #d9b173", +"kaX c #d9b24e", +"jpt c #d9b259", +"j3g c #d9b25c", +"hxX c #d9b29f", +"kll c #d9b352", +"g#a c #d9b35c", +"fHW c #d9b362", +".fl c #d9b3ff", +"jGq c #d9b44f", +"jgx c #d9b45e", +"kiT c #d9b552", +"jGi c #d9b66a", +"eHw c #d9b866", +"i80 c #d9b88e", +"g14 c #d9b8a3", +".f0 c #d9b8fe", +"c7H c #d9b979", +"dKD c #d9b97a", +"dfN c #d9ba7c", +"#br c #d9ba81", +"hub c #d9baa1", +"fgG c #d9bb6f", +"kpt c #d9bb74", +"ejg c #d9bc84", +"jWx c #d9bc98", +"jcr c #d9bd69", +"eHz c #d9bd70", +"jOO c #d9bd76", +"exk c #d9bd85", +".x8 c #d9bd87", +".Bf c #d9bd8c", +"jQZ c #d9be7b", +".UA c #d9be8d", +".Bn c #d9be8e", +"eHZ c #d9bf72", +"fV# c #d9bf7c", +"#w9 c #d9bf84", +"dHo c #d9c06c", +"fA0 c #d9c074", +"fVc c #d9c07c", +"fS. c #d9c07d", +"fOY c #d9c07e", +"fR6 c #d9c07f", +"c1r c #d9c084", +"fLg c #d9c17e", +"jgq c #d9c185", +"hos c #d9c278", +"jTj c #d9c279", +"f1x c #d9c280", +"hIF c #d9c28a", +"jRn c #d9c375", +"jVK c #d9c379", +"ji8 c #d9c37b", +"ji7 c #d9c37c", +"e5n c #d9c382", +"kwl c #d9c472", +"hGn c #d9c478", +"jgi c #d9c47b", +"jdp c #d9c47c", +"i9Q c #d9c47e", +"#dp c #d9c486", +"jw7 c #d9c48a", +"efP c #d9c564", +"knR c #d9c57b", +"iTy c #d9c57c", +"gvB c #d9c57d", +"eCL c #d9c57f", +"kuW c #d9c583", +"jub c #d9c58d", +"efQ c #d9c665", +"gGQ c #d9c67d", +"i9M c #d9c67f", +"fYd c #d9c684", +"fR3 c #d9c685", +"#nR c #d9c68b", +".DO c #d9c68e", +"efR c #d9c769", +"ege c #d9c773", +"fHc c #d9c784", +".IT c #d9c78e", +".Gu c #d9c78f", +"d8v c #d9c874", +"eXt c #d9c878", +"ags c #d9c886", +"ku6 c #d9c892", +"f5Q c #d9c97f", +"aNq c #d9c98d", +"eab c #d9c998", +"jnW c #d9ca83", +"aoG c #d9ca89", +".ZF c #d9ca8d", +"#Hz c #d9ca8e", +"eIH c #d9cb7e", +"iKU c #d9cb85", +"#N9 c #d9cb90", +".h3 c #d9cbfa", +"hsl c #d9cc88", +"acs c #d9cd8e", +"#Vz c #d9cd8f", +"#df c #d9cd90", +"#z8 c #d9cd94", +"akv c #d9cd97", +"g8d c #d9ce7f", +"iY1 c #d9ce86", +"eQQ c #d9cea6", +"eQ0 c #d9ceb0", +"i#X c #d9cf91", +"#VA c #d9cf92", +"cEM c #d9cf9f", +".iG c #d9cff5", +"acy c #d9d091", +"cwm c #d9d09f", +"#cT c #d9d0a0", +"bLL c #d9d1b8", +"b9v c #d9d2a9", +"cYA c #d9d2c0", +"c3l c #d9d2c1", +"h89 c #d9d399", +"dk6 c #d9d3bf", +"aKC c #d9d3c0", +"b0h c #d9d3c4", +"#Oe c #d9d49e", +"aSQ c #d9d59e", +"bQI c #d9d5cb", +"bZL c #d9d6b2", +"eq1 c #d9d79b", +"dpR c #d9d7d6", +"ddb c #d9d8b4", +"clz c #d9d8d6", +"aib c #d9d9cb", +"cBU c #d9d9d9", +"ck6 c #d9dad9", +"fY8 c #d9db8e", +"cgX c #d9e0e1", +"a5J c #d9e1d4", +"fig c #d9e2c7", +"iut c #d9e6b2", +"aZf c #d9e894", +"aQC c #d9e897", +"aMm c #d9e89c", +"b#6 c #d9ea9a", +"cMx c #d9eaed", +"fZZ c #d9ebbd", +"fWW c #d9ebc0", +"c46 c #d9edf0", +"gL. c #d9eece", +"dhQ c #d9f0f0", +"eJM c #d9f0f3", +"dEL c #d9f0f9", +"eEd c #d9f1f5", +"b6F c #d9f1fc", +"dnr c #d9f2ff", +"cWg c #d9f3fe", +"c#q c #d9f3ff", +"c5M c #d9f4fc", +"c02 c #d9f4fe", +"cvp c #d9f4ff", +"c04 c #d9f5fd", +"cWh c #d9f5fe", +"c#C c #d9f5ff", +"d.M c #d9f6fd", +"c03 c #d9f6fe", +"dmD c #d9f9ff", +".#B c #da3ad9", +"joy c #da7a28", +"hTu c #da8126", +"hQo c #da8227", +"hTw c #da8428", +"iKm c #da8525", +"hZE c #da8529", +"iKp c #da8627", +"iEz c #da8729", +"iKq c #da8828", +"ijB c #da882f", +"iUY c #da893d", +"iyL c #da8b2c", +"iAP c #da8c46", +"jF1 c #da8d2f", +"gyD c #da8f2c", +"il0 c #da8f38", +"iyN c #da9030", +"joJ c #da9126", +"gfb c #da9131", +"gtP c #da9132", +"j#P c #da9234", +"hSP c #da9242", +"gI2 c #da9329", +"iG5 c #da932b", +"ijM c #da9341", +"i1e c #da942d", +"g3H c #da952f", +"jrX c #da9534", +"jIR c #da9539", +"iI1 c #da965a", +"gyz c #da9929", +"i## c #da9938", +"g3m c #da993e", +"gi7 c #da9944", +".fN c #da99b3", +"gyg c #da9d4c", +"kAH c #da9d58", +"gms c #da9e4f", +"iCr c #daa14c", +"iTn c #daa252", +"jEo c #daa265", +"kA1 c #daa35d", +"g6G c #daa445", +"i33 c #daa64b", +"gZr c #daa84c", +"i#h c #daa95e", +"irj c #daa965", +"hZT c #daac48", +".eA c #daacff", +"kpz c #daad46", +"hdy c #daad4d", +"h4L c #daad6c", +"fEm c #daae5c", +"kk9 c #daaf48", +"jvq c #daaf49", +"gR2 c #daaf58", +"icB c #dab04e", +"gny c #dab157", +"j3e c #dab158", +"gu4 c #dab159", +"jLR c #dab246", +"kbb c #dab251", +"kdT c #dab255", +"fAM c #dab261", +"j2p c #dab282", +"jji c #dab357", +"jXL c #dab35e", +"jJh c #dab44d", +"ipk c #dab454", +"iPb c #dab479", +"eHP c #dab566", +"d7I c #dab56a", +"gqz c #dab65a", +"fAN c #dab665", +"k.t c #dab756", +"hbE c #dab79e", +"hC7 c #dab86c", +"cY. c #dab872", +"iuK c #dab893", +"kBL c #dab974", +"dS1 c #dab97c", +"iDj c #dab992", +".f1 c #dab9fe", +"c7I c #daba78", +"dGw c #daba7b", +"jpV c #daba84", +"etj c #dabb66", +"daF c #dabb7c", +"daG c #dabb7d", +"eCI c #dabc6f", +"d2# c #dabc83", +"eyk c #dabd7b", +"jsh c #dabd7c", +"jpy c #dabe6c", +"dpj c #dabe81", +"kOw c #dabf7a", +"c6b c #dac082", +"kk2 c #dac085", +"eLo c #dac088", +"gCM c #dac178", +"fV. c #dac17e", +"bgq c #dac197", +"jd1 c #dac1a2", +"i2T c #dac1a6", +"ekC c #dac25d", +"eRZ c #dac26c", +"kwo c #dac271", +"iYb c #dac27d", +"fLh c #dac27f", +"hjG c #dac287", +"#kW c #dac289", +"dLm c #dac373", +"fMt c #dac37b", +"kFu c #dac37f", +"f1v c #dac381", +"dLz c #dac474", +"jwF c #dac476", +"kDW c #dac47a", +"fYf c #dac481", +"fkm c #dac483", +".52 c #dac484", +"hFj c #dac48c", +".hm c #dac4fc", +"kJP c #dac579", +"iQC c #dac57c", +"iZa c #dac57d", +"eCM c #dac57f", +"f1t c #dac583", +"fxo c #dac679", +"kyK c #dac67b", +"gk# c #dac67d", +"kMo c #dac680", +"h9g c #dac681", +"e9Q c #dac686", +"hYA c #dac790", +"kfD c #dac885", +"fwA c #dac886", +"#fx c #dac890", +"itg c #dac891", +"j2R c #dac982", +"h3# c #daca86", +"eVJ c #daca97", +"hSS c #dacaaa", +"hU. c #dacb87", +".XO c #dacb8e", +".mI c #dacc5e", +"cEJ c #dacc9b", +"eXn c #dacd82", +"akE c #dacd8a", +"#KT c #dacd8f", +"#wN c #dacd95", +"hC9 c #dace8b", +"#Oa c #dace92", +"e4Z c #dacea7", +"#R5 c #dacf8b", +"#KR c #dacf95", +"#G7 c #dacf97", +"cAu c #dacfa0", +"eXw c #dad081", +"#Zg c #dad093", +"f5y c #dad184", +"hQN c #dad18b", +"#6w c #dad193", +"h88 c #dad196", +"cwl c #dad1a0", +"a93 c #dad1ba", +"hhv c #dad289", +"#RS c #dad296", +"dt4 c #dad2bb", +"cRD c #dad2bc", +"icN c #dad394", +"du. c #dad3bb", +"dgi c #dad3bd", +"hdQ c #dad489", +"jhO c #dad49f", +"c78 c #dad4c4", +"hp. c #dad5ab", +"bx0 c #dad5cf", +"#KJ c #dad7a2", +"hsW c #dad7ac", +"bGM c #dad7d2", +"cce c #dad7d3", +"evs c #dadba3", +"blj c #dadbbb", +"evr c #dadca4", +"axU c #dadccb", +"egP c #dadda5", +"egO c #dadea7", +"ctY c #dadfe1", +"dUM c #dae4c1", +"eJU c #daeae1", +"dQG c #daede9", +"drM c #daf0f9", +"cRB c #daf2f1", +"drO c #daf2fd", +"dAv c #daf3fc", +"b6C c #daf3fd", +"cmR c #daf3ff", +"drr c #daf4fa", +"dv6 c #daf4fd", +"cEh c #daf4fe", +"cvh c #daf4ff", +"dVc c #daf5f3", +"cWb c #daf5fe", +"cvi c #daf5ff", +".qf c #daf689", +"dmR c #daf6fc", +"c5Q c #daf6fd", +"dh3 c #daf6fe", +"cQX c #daf6ff", +"c07 c #daf7fe", +"dEq c #daf8fe", +"drm c #daf9ff", +"dre c #dafaff", +"drf c #dafbff", +"hWe c #db8229", +"hTv c #db8327", +"hWf c #db852e", +"gNV c #db8621", +"hMT c #db892c", +"hkI c #db892d", +"jFV c #db8c2d", +"jF0 c #db8c2e", +"j#2 c #db8f2a", +"kqV c #db8f45", +"jIJ c #db9036", +"ilZ c #db9038", +"iI8 c #db904c", +"jrw c #db9126", +"jcv c #db913b", +"gCo c #db9324", +"i6K c #db932e", +"iyO c #db9332", +"iCq c #db9333", +"gbM c #db9528", +"hkM c #db953b", +"ihg c #db9745", +"iHT c #db9839", +"hIP c #db9a3f", +"h7L c #db9a40", +"iGg c #db9b4c", +"iBB c #db9c38", +"cfE c #db9d66", +"b3m c #db9d67", +"gyy c #db9f27", +"gZj c #dba039", +"gQG c #dba043", +"iXS c #dba051", +"jMD c #dba467", +"kyk c #dba661", +"gnd c #dba746", +"iB5 c #dba949", +"g2D c #dbab58", +"hza c #dbab5b", +"ikS c #dbab77", +"ji. c #dbac4d", +"iNz c #dbac64", +"gVn c #dbad58", +"gGo c #dbae50", +"hGq c #dbaf57", +"eHV c #dbaf58", +"kne c #dbb04c", +"hJQ c #dbb056", +"j5D c #dbb155", +"i.C c #dbb171", +"gCI c #dbb25b", +"gnA c #dbb35b", +".fm c #dbb3ff", +"jGl c #dbb447", +"knB c #dbb44e", +"gUB c #dbb461", +"eo5 c #dbb468", +"hqd c #dbb49e", +"j0Q c #dbb55e", +"klr c #dbb652", +"fs5 c #dbb762", +"krZ c #dbb858", +"izP c #dbb95f", +"gya c #dbb965", +"g.v c #dbb975", +".Si c #dbb97d", +"jvD c #dbba65", +"dX8 c #dbba71", +"f7D c #dbba79", +".Qr c #dbba7f", +"dpf c #dbbb7f", +"g1R c #dbbba1", +"jVT c #dbbc5b", +"d2M c #dbbc68", +"dTJ c #dbbc70", +"kEw c #dbbc77", +"dfM c #dbbc7f", +".Qp c #dbbc83", +"gXK c #dbbca2", +"dkH c #dbbd7f", +"dfL c #dbbd80", +"duO c #dbbe67", +"eal c #dbbe6c", +"eBY c #dbbe85", +".gG c #dbbefd", +"cun c #dbbf67", +"c8L c #dbbf6d", +"e1q c #dbbf72", +"bBD c #dbbf96", +"kAn c #dbbf9b", +"fst c #dbc072", +"eGD c #dbc087", +".Wv c #dbc08e", +"iLz c #dbc09f", +"eps c #dbc15c", +"fU6 c #dbc17e", +"fOZ c #dbc27f", +"dfP c #dbc285", +"kqb c #dbc380", +"f1z c #dbc381", +"c6a c #dbc389", +"hsK c #dbc47c", +"f1w c #dbc481", +"eaB c #dbc48c", +"cPI c #dbc570", +"dlF c #dbc571", +"jLH c #dbc57c", +"fIG c #dbc57d", +"fou c #dbc583", +"fwu c #dbc67d", +"jay c #dbc67f", +"jWm c #dbc681", +"fsy c #dbc684", +"eWb c #dbc685", +"#do c #dbc68b", +"iWi c #dbc77c", +"gOG c #dbc77e", +"ju9 c #dbc783", +"eWc c #dbc786", +"b5h c #dbc7a1", +"fK8 c #dbc885", +"kBw c #dbc973", +"kE8 c #dbc977", +"kcU c #dbc984", +"#nN c #dbc98f", +"gl9 c #dbc995", +"kri c #dbca88", +".Lx c #dbca8b", +"fcE c #dbcb7c", +"ff8 c #dbcb80", +"jOL c #dbcb83", +"h9f c #dbcb88", +".R5 c #dbcb8c", +"#HB c #dbcb90", +"aFL c #dbcb95", +"khl c #dbcb96", +"cI4 c #dbcb98", +"fke c #dbcc86", +"gOB c #dbcd7e", +"jaH c #dbce7c", +"#tA c #dbce95", +"j.o c #dbcea0", +"jdU c #dbcea1", +"dlj c #dbcead", +"#DB c #dbcf8f", +"#Hb c #dbcf90", +".iH c #dbcff3", +"a.t c #dbd08d", +"h87 c #dbd092", +"eVM c #dbd0ac", +"kQF c #dbd18f", +"cwe c #dbd1b4", +"jkN c #dbd29c", +"kQB c #dbd390", +"hlD c #dbd3aa", +"#RV c #dbd49c", +"#KP c #dbd49d", +"d.T c #dbd4b5", +"dk9 c #dbd4bd", +"bGO c #dbd4c2", +"iHr c #dbd58d", +"cgL c #dbd5af", +"chl c #dbd5c6", +"iy5 c #dbd68e", +"cjB c #dbd6ac", +"#KH c #dbd8a0", +"eq2 c #dbd99d", +"ere c #dbdaaf", +"dud c #dbdad8", +"erc c #dbdbae", +"fY9 c #dbdf90", +"dIL c #dbdfbd", +"dMp c #dbe0cf", +"h9o c #dbe1ab", +"dEk c #dbe1d3", +"eE7 c #dbe4c8", +"diJ c #dbe9ea", +"a3p c #dbeb90", +"aIb c #dbec9b", +"dU3 c #dbf2ec", +"dnq c #dbf2fa", +"ddO c #dbf3fc", +"cz5 c #dbf3ff", +"dQF c #dbf4f6", +"diP c #dbf4fc", +"drN c #dbf4fd", +"cm3 c #dbf4fe", +"ce# c #dbf4ff", +"cM8 c #dbf5f6", +"dcN c #dbf5fb", +"cMm c #dbf5fd", +"diN c #dbf5fe", +"cvq c #dbf5ff", +"c5N c #dbf6fd", +"c06 c #dbf6fe", +"cMB c #dbf6ff", +"dMw c #dbf7fb", +"dIr c #dbf7fc", +"d.N c #dbf7fe", +"c48 c #dbf7ff", +"dcU c #dbf8fe", +"c91 c #dbf8ff", +"dAa c #dbf9fe", +"dmA c #dbf9ff", +"drg c #dbfbff", +"ioC c #dc7f5d", +"hWx c #dc8427", +"h8D c #dc8627", +"juP c #dc8629", +"gJ8 c #dc8725", +"iKn c #dc8726", +"iKo c #dc8727", +"i#v c #dc8728", +"jln c #dc872a", +"hWz c #dc872b", +"gNX c #dc8924", +"j#1 c #dc8928", +"iNi c #dc8a28", +"hTf c #dc8a2a", +"hQr c #dc8d2d", +"h#k c #dc8e37", +"j.6 c #dc8e4b", +"hR8 c #dc8e55", +"h#D c #dc8f28", +"hJD c #dc9030", +"gRG c #dc9129", +"h2# c #dc912a", +"gJF c #dc912c", +"jlK c #dc922e", +"g7Q c #dc9230", +"iNr c #dc9233", +"hkx c #dc9243", +"jF3 c #dc9437", +"ihe c #dc9440", +"ibF c #dc9536", +"jLs c #dc953b", +"gJE c #dc9628", +"jrM c #dc9629", +"ieM c #dc9641", +"ieN c #dc9643", +"iKD c #dc9737", +"juD c #dc9934", +"jMP c #dc9957", +"bBR c #dc9958", +"ijj c #dc9b48", +"gtL c #dc9c2e", +"kPl c #dc9d53", +"gE9 c #dc9f37", +"h8f c #dca032", +"g.y c #dca33f", +"gnf c #dca841", +"kvU c #dca864", +"gMm c #dca99a", +"gqY c #dcaa3f", +"jzR c #dcaa50", +"gNB c #dcac51", +".eB c #dcacff", +"hWJ c #dcad4a", +"gmr c #dcad66", +"i#F c #dcae4c", +"jzS c #dcae5c", +"hZI c #dcae67", +"kdE c #dcb048", +"krJ c #dcb049", +"hM8 c #dcb04f", +"ku# c #dcb14a", +"iNS c #dcb161", +"jsj c #dcb250", +"hvQ c #dcb252", +"jA3 c #dcb34e", +"fLQ c #dcb35e", +"jpq c #dcb54a", +"eRF c #dcb569", +"jmr c #dcb65a", +"ib9 c #dcb667", +"fYM c #dcb760", +"foU c #dcb768", +"hIc c #dcb7a1", +"kpO c #dcb959", +"iF0 c #dcba8d", +"jTn c #dcbc50", +"jZ2 c #dcbc68", +"eC2 c #dcbc71", +"dfK c #dcbd80", +"dpg c #dcbd81", +".W# c #dcbd87", +"j6. c #dcbd97", +"hE2 c #dcbda4", +"dy9 c #dcbe67", +"f8k c #dcbe74", +"kOy c #dcbe75", +"jMf c #dcbe78", +"dx2 c #dcbe80", +"dtK c #dcbe81", +"dph c #dcbe82", +".X7 c #dcbe89", +"eeE c #dcbf85", +"e#Q c #dcbf86", +"dDo c #dcc069", +"ejh c #dcc088", +"kLD c #dcc099", +"jTO c #dcc172", +"kqa c #dcc17b", +"dtO c #dcc185", +"fU7 c #dcc27f", +"kaN c #dcc284", +"iRo c #dcc298", +"hXX c #dcc2a0", +"ejP c #dcc368", +"gR6 c #dcc37b", +"jTW c #dcc37d", +"fVd c #dcc37f", +"fR9 c #dcc380", +"c3V c #dcc471", +"j8t c #dcc480", +"fU5 c #dcc481", +"jw6 c #dcc48d", +"e55 c #dcc56e", +"cPZ c #dcc575", +"ho0 c #dcc57d", +"jYJ c #dcc57f", +"jWn c #dcc580", +"eke c #dcc58c", +"h9E c #dcc5b1", +"hzZ c #dcc67e", +"iWj c #dcc77c", +"iQD c #dcc77e", +"ikt c #dcc780", +"j09 c #dcc782", +"e9R c #dcc785", +"iWk c #dcc87d", +"gSs c #dcc87e", +"iWg c #dcc87f", +"jYI c #dcc883", +"j3z c #dcc884", +"f4N c #dcc885", +"fgf c #dcc886", +"eWd c #dcc887", +"jk4 c #dcc893", +"cio c #dcc967", +"gKL c #dcc980", +"i1S c #dcc982", +"jXa c #dcc983", +"fR2 c #dcc986", +"eWe c #dcc987", +"#t5 c #dcca94", +"egd c #dccb77", +"jPT c #dccb85", +"atl c #dccb9a", +".h4 c #dccbf8", +"fSH c #dccc84", +".3F c #dccc90", +"fIO c #dcce7e", +"fbT c #dcce80", +"jMo c #dcce9d", +"fhm c #dccf84", +"hoE c #dccf8a", +"j7F c #dccf8b", +"#Zp c #dccf8e", +"euE c #dcd084", +"#tz c #dcd098", +"#3A c #dcd09d", +"dTo c #dcd0af", +"a.q c #dcd18e", +"#Du c #dcd199", +"#tC c #dcd29a", +"ccc c #dcd2a8", +"er. c #dcd394", +"act c #dcd395", +"#G8 c #dcd39c", +"a1G c #dcd3bf", +"fMq c #dcd487", +"eq9 c #dcd496", +"cnO c #dcd4a9", +"#Z# c #dcd597", +"bLG c #dcd5c3", +"bCf c #dcd5c8", +"fgU c #dcd688", +"hei c #dcd6ae", +"cYB c #dcd7c8", +"elT c #dcda9d", +"#KI c #dcdba3", +".jZ c #dcdbed", +"dAs c #dcdcca", +"b0l c #dcdedc", +"eTJ c #dcdfc2", +"dUU c #dce0b0", +"ddk c #dce0c2", +"dUW c #dce2bb", +"d.F c #dce2d5", +"cRC c #dce6db", +"ir2 c #dce7b4", +"dis c #dce8d2", +"d4v c #dceac9", +"dhW c #dcf0f3", +"c9O c #dcf1f2", +"dcQ c #dcf3f5", +"cWe c #dcf4fe", +"cmS c #dcf4ff", +"diM c #dcf5fd", +"cQI c #dcf5fe", +"cq3 c #dcf5ff", +"d.L c #dcf6fd", +"c5L c #dcf6fe", +"cvl c #dcf6ff", +"dQD c #dcf7fb", +"dMx c #dcf7fc", +"dmQ c #dcf7fd", +"c5O c #dcf7fe", +"c49 c #dcf7ff", +"dEr c #dcf8fc", +"dAd c #dcf8fd", +"dmO c #dcf8fe", +"c92 c #dcf8ff", +"dAc c #dcf9fd", +"dAb c #dcf9fe", +"dhM c #dcf9ff", +"dmE c #dcfaff", +"dmK c #dcfbff", +"jll c #dd7a26", +"jie c #dd7c25", +"ilV c #dd8634", +"hdo c #dd8725", +"joR c #dd8726", +"hg8 c #dd8728", +"gJ7 c #dd8925", +"gRJ c #dd8a1a", +"h8E c #dd8a2e", +"gNY c #dd8c23", +"ixZ c #dd8d48", +"jxu c #dd8e2c", +"jFL c #dd8f24", +"jiw c #dd9027", +"ig3 c #dd902b", +"i6J c #dd912a", +"ilY c #dd9137", +"jD# c #dd9232", +"jF2 c #dd9334", +"gmG c #dd9336", +"ijK c #dd9441", +"ijL c #dd9442", +"ilR c #dd953d", +"imb c #dd9640", +"il6 c #dd966f", +"gG# c #dd9723", +"gCu c #dd972b", +"iSF c #dd972c", +"igg c #dd975b", +"hLl c #dd975f", +"hB3 c #dd9832", +"gMQ c #dd992d", +"guQ c #dd9931", +"gi4 c #dd9a3c", +"hB2 c #dd9b3a", +"huM c #dd9d3f", +"cbT c #dd9d55", +"csp c #dda069", +"jUk c #dda266", +"i08 c #dda540", +"gCf c #dda74a", +"hG. c #dda754", +"gZs c #ddaa49", +".eC c #ddacff", +"ipS c #ddad7a", +"gq0 c #ddae3b", +"i#J c #ddb053", +"g.9 c #ddb058", +"hM9 c #ddb155", +"hC0 c #ddb158", +"jZW c #ddb15c", +"gUe c #ddb1a2", +"gra c #ddb259", +"hTK c #ddb25b", +"e1m c #ddb355", +"fVC c #ddb35a", +"iKZ c #ddb364", +".fn c #ddb3ff", +"h#S c #ddb45b", +"fSs c #ddb45c", +"gGs c #ddb55c", +"gyN c #ddb55d", +"ibv c #ddb576", +"jLS c #ddb64c", +"jAU c #ddb651", +"j5x c #ddb658", +"jOn c #ddb748", +"iw4 c #ddb759", +"ioN c #ddb76a", +"klo c #ddb856", +"kdY c #ddb85a", +".f2 c #ddb8fe", +"j8g c #ddb961", +"jgv c #ddb962", +"jjd c #ddba4e", +"ihE c #ddba5a", +"fLS c #ddba63", +"ikM c #ddba93", +"kgq c #ddbb59", +"ki2 c #ddbb5b", +"exY c #ddbc65", +"dTI c #ddbc6f", +"kHj c #ddbe6d", +"kOz c #ddbe74", +"dtL c #ddbe81", +"dCj c #ddbe82", +".Qq c #ddbe83", +"jkU c #ddbf72", +"fSy c #ddbf73", +"dtM c #ddbf83", +"dtN c #ddbf84", +"eDl c #ddc066", +".Ob c #ddc18b", +".UB c #ddc290", +"#dR c #ddc395", +"c1q c #ddc48e", +"i70 c #ddc497", +"j8N c #ddc4a8", +"jTX c #ddc57f", +"fYj c #ddc581", +"c1s c #ddc58b", +"#dS c #ddc594", +".hn c #ddc5fa", +"kyT c #ddc675", +"jCN c #ddc686", +"cPL c #ddc772", +"g8a c #ddc779", +"hf8 c #ddc78d", +"efO c #ddc864", +"iTA c #ddc87d", +"iQE c #ddc87e", +"hQ8 c #ddc880", +"fSa c #ddc884", +"f1u c #ddc885", +"f4O c #ddc886", +"g2u c #ddc892", +"#aE c #ddc894", +"kPH c #ddc97d", +"gSr c #ddc97e", +"iTz c #ddc97f", +"grH c #ddc980", +"jaw c #ddc982", +"j3y c #ddc983", +"fOQ c #ddc987", +"kqo c #ddc991", +"fok c #ddca7f", +"jGK c #ddca81", +"jNf c #ddca82", +"fU2 c #ddca87", +"h7F c #ddca8e", +"jci c #ddca9d", +"i#Z c #ddcb87", +"krj c #ddcb88", +"kxt c #ddcb8b", +"#c0 c #ddcb92", +"hVu c #ddcb95", +"fO7 c #ddcc88", +"h1E c #ddcc91", +"gnO c #ddcd85", +"aX# c #ddcd8c", +"aoC c #ddcd8f", +"cNj c #ddcd9a", +".1H c #ddce91", +"cWo c #ddceae", +"izN c #ddcf89", +"dCQ c #ddcfb0", +"imO c #ddd086", +"iY2 c #ddd089", +"a.p c #ddd090", +"cWy c #ddd0a0", +"fk7 c #ddd181", +"e9i c #ddd1ad", +"eVB c #ddd28c", +"#ty c #ddd399", +"fP6 c #ddd485", +"h#3 c #ddd487", +"#Vy c #ddd499", +"#RZ c #ddd49c", +"hh0 c #ddd4ab", +"#Ok c #ddd6a0", +"bV# c #ddd7c6", +"#6s c #ddd897", +"#Dl c #ddd89f", +"dnm c #ddd8c1", +"evI c #ddd99e", +"#Ob c #ddd99f", +"d.z c #ddd9ba", +"bLU c #ddd9d8", +"elX c #ddda9d", +"evJ c #ddda9f", +"ax0 c #dddac9", +"#Oc c #dddba3", +"evP c #dddba4", +"bGH c #dddbda", +"eg0 c #dddca4", +"egQ c #dddfa6", +"cn4 c #dddfc9", +"dUV c #dde0b1", +"d9# c #dde3b1", +"dQx c #dde5d2", +"drs c #dde5d9", +"aS3 c #dde5da", +"axT c #dde6dd", +"f3g c #ddeabd", +"d.G c #ddeceb", +"cM9 c #ddefe9", +"c43 c #ddeff1", +"cH7 c #ddf0f5", +"eJN c #ddf1f4", +"eJG c #ddf2f5", +"diK c #ddf2fa", +"eJO c #ddf3f7", +"cqY c #ddf4ff", +"cRu c #ddf5fe", +"ci9 c #ddf5ff", +"cWf c #ddf6fe", +"cvj c #ddf6ff", +"drp c #ddf7fc", +"dmP c #ddf7fd", +"ddP c #ddf7fe", +"cq7 c #ddf7ff", +"dQE c #ddf8fb", +"dEs c #ddf8fc", +"dvM c #ddf8fd", +"drn c #ddf8fe", +"dcJ c #ddf8ff", +"dro c #ddf9fd", +"dmN c #ddf9fe", +"dc1 c #ddf9ff", +"dmF c #ddfbff", +"il5 c #de7b5b", +"jwb c #de8344", +"jrC c #de842d", +"hkJ c #de8628", +"h8B c #de872a", +"h5D c #de8929", +"hWd c #de8a29", +"i#x c #de8b2b", +"gEP c #de8b4f", +"jlF c #de8c27", +"h2z c #de8c2c", +"gxb c #de8c50", +"jAi c #de8d28", +"iNj c #de8d29", +"hJE c #de8d2b", +"h#F c #de8e23", +"jxm c #de8e24", +"iKr c #de8e2b", +"hZA c #de9032", +"gmv c #de9034", +"jFX c #de9132", +"ilX c #de9137", +"gI3 c #de9332", +"gCt c #de942c", +"gNt c #de9435", +"ilT c #de943c", +"i4g c #de952f", +"hGd c #de9535", +"gFN c #de962d", +"jxh c #de9631", +"jIO c #de9636", +"jDa c #de9736", +"hoj c #de973a", +"ima c #de9741", +"ihf c #de9744", +"hQs c #de9839", +"jiA c #de9933", +"h#I c #de993d", +"dBT c #de995e", +"jfL c #de9a32", +"iHS c #de9a38", +"ihd c #de9b41", +"cXL c #de9c5e", +"gVE c #de9d35", +"jrY c #de9d36", +"jol c #de9d3d", +"h1J c #dea042", +"kDf c #dea05a", +"co. c #dea069", +"guO c #dea12f", +"iMZ c #dea13c", +"gZi c #dea142", +"gAU c #dea172", +"hMr c #dea257", +"gmJ c #dea34b", +"jh9 c #dea440", +"cwG c #dea46e", +"bFj c #dea46f", +"gVm c #dea53e", +"iB6 c #dea945", +"gng c #deaa42", +"guH c #deaa44", +"hgh c #deaa50", +"gZt c #deac48", +"guM c #dead30", +"gq1 c #dead38", +"iFd c #dead5f", +"jh4 c #deae51", +"kwH c #deaf4e", +"izR c #deaf58", +"hM0 c #deaf5a", +"ika c #deb04b", +"gVT c #deb04d", +"gJN c #deb057", +"foS c #deb05a", +"iTJ c #deb15a", +"kOi c #deb15e", +"j2k c #deb25b", +"jDN c #deb44c", +"kga c #deb44f", +"f8e c #deb459", +"h2P c #deb45c", +"kFH c #deb472", +"h1I c #deb476", +"jVb c #deb56d", +"hZt c #deb66a", +"jyc c #deb754", +"gjY c #deb75b", +"grd c #deb75e", +"jzM c #deb760", +"e99 c #deb769", +"h0T c #deb78e", +"gcC c #deb85f", +"kgb c #deb865", +"jsm c #deb951", +"kba c #deb958", +"jmn c #deba48", +"gwz c #debaac", +"kb. c #debc62", +"fxa c #debc68", +"iOp c #debc8f", +"knv c #debd5d", +"dX9 c #debe71", +".gH c #debffc", +"jMe c #dec079", +"dS2 c #dec085", +"dlV c #dec169", +"duN c #dec16a", +"ef. c #dec16c", +"daH c #dec286", +"dKE c #dec287", +"d66 c #dec289", +"dDn c #dec36e", +"kLm c #dec37c", +"jRt c #dec47e", +".x7 c #dec491", +"jlj c #dec573", +"izi c #dec574", +"jTY c #dec580", +"fU8 c #dec581", +"fYg c #dec582", +"#At c #dec58c", +"eC4 c #dec592", +"fU9 c #dec681", +"eWT c #dec770", +"fol c #dec77b", +"jpg c #dec77e", +"hDv c #dec87f", +"d7R c #dec97b", +"iTx c #dec980", +"iWh c #dec981", +"jgg c #dec982", +"fkn c #dec986", +"fb5 c #dec987", +"#im c #dec989", +"gOH c #deca80", +"iTw c #deca82", +"jdl c #deca83", +"hxe c #decaba", +"cdZ c #decb6b", +"kwh c #decb7e", +"kgL c #decb80", +"gGR c #decb81", +"kst c #decb88", +"j#F c #decb9e", +".h5 c #decbf6", +"kbl c #decc82", +"jsI c #decc84", +"jpE c #decc85", +"g32 c #decc86", +".AT c #decc8e", +"hSA c #decc96", +"kb1 c #decca4", +"kCq c #decd7b", +"gSp c #decd81", +"gV9 c #decd88", +"h4H c #decd91", +"cI3 c #decd9b", +"jQi c #dece81", +"fHu c #dece8c", +"cRR c #decf9d", +"el# c #ded07c", +"kNr c #ded0a1", +"ey6 c #ded181", +"iV7 c #ded187", +"asr c #ded195", +"gSm c #ded282", +"hNh c #ded28d", +"icR c #ded293", +"#2J c #ded295", +"#qm c #ded29a", +"aow c #ded395", +"a.f c #ded39d", +"dgu c #ded3b6", +"#GW c #ded49a", +"hTT c #ded590", +"cwn c #ded5a8", +"bZ0 c #ded5c6", +"a.x c #ded699", +"#G4 c #ded69e", +"cRN c #ded6a8", +"dpH c #ded6c0", +"dnb c #ded7af", +"er# c #ded89c", +"c3m c #ded8c9", +"b4C c #ded9b7", +"#Vw c #dedaa4", +"#2O c #dedb9d", +"dgf c #dedbd2", +"dd. c #dedcbc", +"c3q c #dedcd2", +"am# c #dedfd2", +"co8 c #dedfde", +"ecp c #dee0a9", +"eco c #dee0aa", +"ec. c #dee1a9", +"egR c #dee1ab", +"dUO c #dee1b3", +".oV c #dee241", +"ipA c #dee6b3", +"eEu c #deece5", +"dE. c #deeddf", +"dVe c #deeee5", +"dMz c #def0ef", +"ddL c #def2f9", +"c9U c #def4f8", +"diL c #def4fb", +"b1J c #def4fd", +"cmT c #def4ff", +"d.K c #def5fe", +"ciB c #def5ff", +"dMy c #def6f9", +"ciH c #def6fe", +"cvk c #def6ff", +"dmL c #def7fc", +"ddQ c #def7fe", +"cDY c #def7ff", +"drq c #def8fc", +"dcO c #def8fe", +"dcI c #def8ff", +"dhZ c #def9fe", +"dhN c #def9ff", +"dhP c #defaff", +"dhU c #defbff", +".ac c #df59e3", +"gQp c #df834c", +"joA c #df872d", +"h5B c #df882a", +"hZB c #df8929", +"hol c #df892b", +"hWy c #df8a2a", +"iHy c #df8b27", +"hZC c #df8b2a", +"jrD c #df8b2d", +"hWc c #df8d28", +"hr2 c #df8e2f", +"jAj c #df8f2b", +"fKg c #df8f54", +"hOV c #df8f56", +"gGc c #df9028", +"iNk c #df902a", +"hkL c #df9031", +"gx. c #df9156", +"gCs c #df922b", +"ico c #df922f", +"jDg c #df9233", +"g7P c #df9325", +"i5U c #df9354", +"jIy c #df9429", +"gCq c #df942b", +"iNq c #df9533", +"hPy c #df953b", +"iJ6 c #df9635", +"gmE c #df963a", +"im# c #df963e", +"gmF c #df9739", +"gyB c #df982e", +"gmn c #df982f", +"jbF c #df9853", +"iMV c #df9a33", +"ijJ c #df9b40", +"hyA c #df9b41", +"jfH c #df9c27", +"guR c #df9c35", +"iFa c #df9c3b", +"jle c #df9d34", +"jlH c #df9d36", +"jrr c #df9d40", +"i9t c #df9e36", +"kAG c #df9f57", +"guP c #dfa031", +"gZK c #dfa034", +"hMH c #dfa043", +"jR2 c #dfa05d", +"gyF c #dfa23c", +"cs2 c #dfa25d", +"gyd c #dfa339", +"cjZ c #dfa36b", +"hoa c #dfa452", +"gq3 c #dfa536", +".dZ c #dfa6fe", +"iVL c #dfa83f", +"h2p c #dfa959", +"cAR c #dfa975", +"jok c #dfaa4e", +"gyr c #dfab48", +"guU c #dfac48", +"cE7 c #dfac7a", +".eD c #dfacff", +"hMZ c #dfaf57", +"hTJ c #dfb04f", +"j4L c #dfb159", +"hJP c #dfb24f", +"juk c #dfb25a", +"hQB c #dfb354", +"iQv c #dfb36b", +"ixH c #dfb383", +".fo c #dfb3fe", +"gFU c #dfb45f", +"kt8 c #dfb556", +"irH c #dfb558", +"jJj c #dfb64e", +"jCJ c #dfb66d", +"f5f c #dfb75e", +"gVX c #dfb75f", +"jx8 c #dfb84f", +"gMh c #dfb8ad", +"jvs c #dfb94e", +"e5N c #dfb95e", +"kek c #dfb96a", +"k.h c #dfba58", +"j7T c #dfba5b", +"j5z c #dfba5e", +"e5L c #dfba6e", +"jSI c #dfba88", +"jLO c #dfbb49", +"jXJ c #dfbb66", +"k.r c #dfbc58", +"jps c #dfbc61", +"eHI c #dfbc74", +"eHJ c #dfbc75", +"k.v c #dfbd5d", +"j3f c #dfbd64", +"eye c #dfbd6e", +"eHH c #dfbe78", +"kQZ c #dfbf5f", +"cTk c #dfbf7c", +"g1W c #dfbfa5", +"kwZ c #dfc05f", +"jjl c #dfc067", +"jml c #dfc074", +"dTi c #dfc084", +"g1Y c #dfc0a7", +"jvT c #dfc18a", +"kKR c #dfc264", +"ej0 c #dfc26e", +"izj c #dfc26f", +"dCk c #dfc287", +"dXy c #dfc288", +"eoK c #dfc369", +"ihj c #dfc36f", +"kOx c #dfc37e", +"dTj c #dfc389", +"#w7 c #dfc38a", +"eoV c #dfc474", +"g76 c #dfc47b", +".ho c #dfc5f9", +"eao c #dfc671", +"jOR c #dfc680", +"fYh c #dfc682", +"j2x c #dfc684", +"#D0 c #dfc68c", +"dtP c #dfc68d", +"j42 c #dfc779", +"jTZ c #dfc781", +"j5X c #dfc782", +"f1A c #dfc785", +"fov c #dfc883", +"hwp c #dfc97f", +"gjU c #dfc986", +"dkL c #dfc98f", +"i1Y c #dfca81", +"jTV c #dfca85", +"gCC c #dfca89", +"#il c #dfca8c", +"#qP c #dfca90", +"izh c #dfcb7c", +"kMC c #dfcb7f", +"i9U c #dfcb81", +"jXr c #dfcb88", +"h.r c #dfcb94", +"ey7 c #dfcc79", +"kPu c #dfcc85", +".Q# c #dfcc8d", +"#fX c #dfcc8e", +"gUu c #dfcc96", +"#c5 c #dfcd91", +"i.w c #dfcd92", +"gQx c #dfcd98", +"cir c #dfce74", +"kwy c #dfce86", +"jzX c #dfce94", +"cNk c #dfce9c", +"f8J c #dfcf85", +"kkW c #dfcf89", +"ktz c #dfcf8c", +"#c6 c #dfcf93", +"j97 c #dfd189", +".Gx c #dfd194", +"aBi c #dfd19b", +"cNn c #dfd1a1", +"cI7 c #dfd2a3", +"eNw c #dfd381", +"#R6 c #dfd392", +"jJK c #dfd3a2", +"c5U c #dfd4b4", +"fde c #dfd58a", +"#Of c #dfd6a0", +"#KK c #dfd7a2", +"#Ol c #dfd89d", +"dk8 c #dfd8c2", +"a5K c #dfd8c5", +"iEG c #dfd98f", +"evM c #dfd99c", +"erg c #dfd9a3", +"evO c #dfdaa0", +"#Dn c #dfdaa2", +"eq8 c #dfdba1", +"#Oj c #dfdba3", +"bLS c #dfdbd2", +"eqU c #dfdc9f", +"elU c #dfdca0", +"evK c #dfdca2", +"el7 c #dfdea4", +"#Od c #dfdea6", +"bgT c #dfdebf", +"dld c #dfdedc", +"bGL c #dfdedd", +"bcp c #dfe0c4", +"eqP c #dfe1a7", +"ec# c #dfe1aa", +"eEv c #dfe1ce", +"egS c #dfe2ae", +"iad c #dfe3ac", +"ddc c #dfe3c7", +"dde c #dfe5cd", +"d.e c #dfe6cc", +"iFz c #dfe9b4", +"aZh c #dfec90", +"dMc c #dfecdc", +"dQH c #dfece3", +"a3n c #dfed9b", +"gau c #dfeec3", +"ddN c #dff3fb", +"dU0 c #dff4ee", +"dnp c #dff4fb", +"cef c #dff5fe", +"cea c #dff5ff", +"c4V c #dff6fc", +"d.I c #dff6fd", +"czA c #dff6ff", +"dAe c #dff7fb", +"cvm c #dff7ff", +"c4U c #dff8ff", +"dcP c #dff9ff", +"dhO c #dffaff", +"iL3 c #e08541", +"hg9 c #e08929", +"h2A c #e08a2b", +"jBS c #e08a4b", +"gAZ c #e08d51", +"gJ9 c #e08e28", +"iDO c #e08f51", +"gEO c #e08f54", +"gGd c #e09029", +"iNl c #e0922c", +"jDe c #e0922d", +"hh# c #e09232", +"hom c #e09233", +"io2 c #e0932e", +"im. c #e0943b", +"hIV c #e0952c", +"hr3 c #e09535", +"gtM c #e09538", +"jut c #e09629", +"jIA c #e0962e", +"iXR c #e09648", +"jkd c #e09756", +"juC c #e09835", +"izF c #e09935", +"h1V c #e0994d", +"hds c #e09a3e", +"hVD c #e09a40", +"dG. c #e09a5e", +"iF# c #e09b38", +"iFb c #e09b39", +"kvx c #e09b4e", +"gpy c #e09b61", +"iGD c #e09c59", +"gyA c #e09d2e", +"gxz c #e09d36", +"hr4 c #e09e40", +"iJl c #e09e4b", +"io9 c #e0a039", +"iBA c #e0a03b", +"kIN c #e0a05b", +"bTC c #e0a16a", +"gi6 c #e0a242", +"igK c #e0a243", +"kFZ c #e0a35e", +"gRe c #e0a42a", +"iJ9 c #e0a442", +"hgZ c #e0a54e", +".d0 c #e0a5ff", +"jWJ c #e0a669", +"hPF c #e0a75d", +"j4a c #e0a965", +"kcB c #e0aa64", +"gq2 c #e0ab38", +"h5# c #e0ad5a", +"it8 c #e0b055", +"gyq c #e0b056", +"hY4 c #e0b05e", +"gMn c #e0b0a2", +"iTo c #e0b162", +"hGp c #e0b24f", +"h#P c #e0b34e", +"hZW c #e0b359", +"gMk c #e0b3a6", +"jce c #e0b464", +"fVA c #e0b661", +"jcd c #e0b672", +"kcl c #e0b67b", +"g#. c #e0b75c", +"hQC c #e0b75e", +"gZk c #e0b766", +"jq8 c #e0b862", +"gj. c #e0b875", +"gCF c #e0b95f", +"kvg c #e0b979", +".f3 c #e0b9fe", +"kaS c #e0ba54", +"jDE c #e0ba55", +"jw4 c #e0ba6a", +"eMz c #e0ba6b", +"kel c #e0ba6c", +"jK2 c #e0ba81", +"knf c #e0bb59", +"ggg c #e0bb62", +"fPp c #e0bb67", +"eRD c #e0bb6c", +"k.Y c #e0bb6d", +"k.Z c #e0bb6f", +"hLi c #e0bb94", +"ip. c #e0bc60", +"jCC c #e0bc65", +"jXI c #e0bc66", +"eka c #e0bc6f", +"jf. c #e0bc85", +"ki1 c #e0bd57", +"jpm c #e0bd5b", +"jjf c #e0be55", +"eo6 c #e0be71", +"eMs c #e0be79", +"jGr c #e0bf59", +"jvo c #e0bf6a", +"eHL c #e0bf72", +".gI c #e0bffb", +"jyh c #e0c06a", +"ek. c #e0c06d", +"eMy c #e0c075", +"kiS c #e0c164", +"etk c #e0c168", +"k.1 c #e0c27a", +"dOJ c #e0c389", +"dXL c #e0c38a", +"eyC c #e0c468", +"dGx c #e0c48a", +"d2t c #e0c48b", +"bth c #e0c497", +"d2v c #e0c58b", +"#bq c #e0c593", +"j2B c #e0c678", +"jOS c #e0c681", +"fYm c #e0c683", +"jYV c #e0c6a6", +"jWo c #e0c781", +"d#a c #e0c78e", +"jG8 c #e0c7a8", +"dLy c #e0c877", +"cWE c #e0c893", +"j5W c #e0c984", +"esO c #e0c992", +"cWD c #e0c994", +"c6# c #e0c996", +"c1p c #e0c997", +"fsr c #e0ca7e", +"hGV c #e0ca80", +"i7k c #e0ca81", +"jzt c #e0cb79", +"kG3 c #e0cb7f", +"hlq c #e0cb80", +"kGH c #e0cb82", +"jgf c #e0cb83", +"fSb c #e0cb86", +"fgg c #e0cb87", +"kJO c #e0cc7e", +"kGF c #e0cc83", +"e0W c #e0cc88", +"kz5 c #e0cc8b", +"hBT c #e0cc92", +"cWC c #e0cc9a", +"c1n c #e0cc9d", +"cmL c #e0cd6f", +"ey8 c #e0cd7a", +"j7B c #e0cd80", +"eHB c #e0cd87", +"j1. c #e0cd89", +".TP c #e0cd92", +"fE7 c #e0ce83", +"ksu c #e0ce8c", +"cRS c #e0ce9c", +"cNl c #e0ce9d", +"ftJ c #e0cf82", +"f2a c #e0cf84", +"j9x c #e0cf88", +"ktA c #e0cf8b", +"aFJ c #e0cf98", +"jh0 c #e0cf9c", +"c1m c #e0cfa0", +"cRF c #e0cfad", +"cp6 c #e0d07c", +"jSl c #e0d089", +"kys c #e0d08c", +"jCO c #e0d095", +"cNm c #e0d0a0", +"eXu c #e0d17f", +"fP8 c #e0d184", +"aSP c #e0d194", +"i#Y c #e0d290", +".8b c #e0d296", +"cI2 c #e0d2a2", +"#fP c #e0d398", +"hk5 c #e0d48c", +"iY3 c #e0d48f", +"aoB c #e0d494", +"fw. c #e0d4a6", +"fpM c #e0d587", +"f.1 c #e0d58a", +"#6o c #e0d597", +"cAr c #e0d6a9", +"diT c #e0d6b4", +"fgS c #e0d786", +"hhu c #e0d78c", +"#6r c #e0d798", +"a.u c #e0d799", +"emv c #e0d7a4", +"dpz c #e0d7bf", +"bln c #e0d7c3", +"evN c #e0d99b", +"#KG c #e0d9a0", +"dMU c #e0d9bf", +"dt9 c #e0d9c0", +"ksm c #e0daa5", +"cfh c #e0dab0", +"dk7 c #e0dac5", +"bx5 c #e0dad0", +"era c #e0dba1", +"#Dm c #e0dba3", +"cIS c #e0dbbf", +"iy4 c #e0dc91", +"erb c #e0dca3", +"elW c #e0dda1", +"evL c #e0dda2", +"eq3 c #e0dea1", +"cnL c #e0dfc5", +"cwB c #e0dfc9", +"db# c #e0dfdf", +".mD c #e0e1a7", +"ecq c #e0e1aa", +"dUP c #e0e1b4", +"eqQ c #e0e2a8", +"d9a c #e0e2ac", +"evT c #e0e2b2", +"dni c #e0e2c8", +"el8 c #e0e3aa", +"ikE c #e0e4b1", +"im7 c #e0e5b2", +"ddp c #e0e7d0", +"dUX c #e0e9cb", +"dEj c #e0e9da", +"dvQ c #e0e9e2", +"dU7 c #e0ead2", +"ddK c #e0ece6", +"eha c #e0edc2", +"dH9 c #e0edda", +"ehb c #e0eec4", +"ehe c #e0eec5", +"dEh c #e0eee1", +"ecA c #e0efc4", +"ecB c #e0f0c5", +"ecC c #e0f0c6", +"dU4 c #e0f4ec", +"b6D c #e0f5fd", +"cWd c #e0f5fe", +"cqZ c #e0f5ff", +"d.H c #e0f6fe", +"cry c #e0f6ff", +"dEt c #e0f7fa", +"dh2 c #e0f7fe", +"cDW c #e0f7ff", +"c0o c #e0f8ff", +"dcM c #e0f9ff", +"h5A c #e18b2a", +"hkK c #e18d2c", +"h2C c #e18e2b", +"gJ6 c #e19027", +"gqg c #e1912f", +"gmi c #e19139", +"gtl c #e19156", +"iR8 c #e19343", +"iKs c #e1942e", +"iNo c #e1942f", +"iBG c #e19433", +"gAY c #e19458", +"iER c #e19530", +"iNp c #e19532", +"jFW c #e19534", +"jIz c #e19629", +"i6T c #e1962a", +"gtX c #e1962d", +"iKt c #e19630", +"iHg c #e19634", +"h5n c #e1963e", +"bZr c #e19752", +"cBu c #e1975b", +"cxi c #e1985b", +"cFK c #e1995c", +"h73 c #e19a40", +"cJ6 c #e19a5d", +"i34 c #e19b31", +"joW c #e19b34", +"iKC c #e19b38", +"ks9 c #e19b4d", +"jFJ c #e19c32", +"ho# c #e19c43", +"g7L c #e19d36", +"irz c #e19d3b", +"dxA c #e19d61", +"gRF c #e19e2c", +"gqw c #e19e34", +"hJb c #e19e39", +"kj1 c #e19e54", +"joK c #e19f2f", +"gB3 c #e19f33", +"dae c #e19f62", +"dfg c #e19f63", +"jCX c #e1a037", +"dkd c #e1a064", +"ibH c #e1a13f", +"ib2 c #e1a142", +"ieL c #e1a143", +"kAF c #e1a158", +"kLT c #e1a15b", +"iB9 c #e1a340", +"hdn c #e1a343", +"gCn c #e1a429", +"h4M c #e1a444", +"hB9 c #e1a55c", +".d1 c #e1a5ff", +"hZq c #e1a651", +"djw c #e1a77a", +"hJp c #e1a84b", +"jY7 c #e1a86c", +"iVx c #e1a936", +"gqx c #e1a93a", +"gMP c #e1ab4a", +"ivb c #e1ab6d", +".eE c #e1acff", +"gF2 c #e1ae57", +"hMM c #e1b164", +"ilP c #e1b16c", +"gUd c #e1b2a2", +"hWk c #e1b362", +"iDu c #e1b37c", +".fp c #e1b3fe", +"hCZ c #e1b451", +"hsa c #e1b453", +"k#C c #e1b47a", +"j7m c #e1b672", +"hJT c #e1b75f", +"fYK c #e1b85f", +"hTm c #e1b870", +"kzg c #e1b94f", +"hBY c #e1b97f", +"fs1 c #e1ba67", +"gm0 c #e1ba6f", +"iHX c #e1ba75", +"jSH c #e1ba7c", +"gGq c #e1bb60", +"gKm c #e1bb61", +"gu6 c #e1bb62", +"gB9 c #e1bb68", +"jAX c #e1bc50", +"kmp c #e1bc83", +"fn. c #e1bc8f", +"jDF c #e1bd51", +"f.a c #e1bd66", +"jJc c #e1be4d", +"kBT c #e1be53", +"kED c #e1be58", +"f10 c #e1be65", +"jDC c #e1be66", +"jvy c #e1bf5e", +"j7R c #e1bf5f", +"jms c #e1bf65", +"fEn c #e1bf6f", +"eCV c #e1bf72", +"eHK c #e1bf76", +"eMt c #e1bf79", +"kNF c #e1c058", +"j7Z c #e1c05f", +"k.F c #e1c063", +"k.D c #e1c065", +"eMr c #e1c07c", +"eRv c #e1c07d", +"exZ c #e1c16b", +"fx# c #e1c170", +"j#z c #e1c193", +"g1X c #e1c3a9", +"kzJ c #e1c46b", +"dqm c #e1c46c", +"izk c #e1c470", +"d2Z c #e1c479", +"hQJ c #e1c57d", +"dx3 c #e1c58d", +"jRu c #e1c67f", +"jRv c #e1c680", +"dS3 c #e1c68d", +"dXK c #e1c68f", +"dHn c #e1c771", +"iLs c #e1c79d", +"dgR c #e1c86a", +"fom c #e1c877", +"eCN c #e1c880", +"jT0 c #e1c882", +"fYi c #e1c883", +"d7L c #e1c888", +"d## c #e1c892", +"ex7 c #e1c97c", +"fVe c #e1c983", +"j3A c #e1c984", +"jWj c #e1ca7e", +"iTP c #e1ca80", +"jOP c #e1ca86", +"#dk c #e1ca8d", +"dpk c #e1ca93", +"c1t c #e1ca96", +"c1o c #e1ca9b", +"bgp c #e1caa2", +"jg# c #e1cb81", +"i#O c #e1cb82", +"f4P c #e1cb87", +"gWp c #e1cc81", +"iZ# c #e1cc82", +"h#N c #e1cc84", +"jdk c #e1cc85", +"jRs c #e1cc87", +"kqc c #e1cc89", +"idg c #e1ccb3", +"i11 c #e1cd82", +"gn8 c #e1cd83", +"jRr c #e1cd89", +"gkr c #e1ce83", +"kEo c #e1ce85", +"fYc c #e1ce8a", +"#dl c #e1ce93", +"#k4 c #e1ce95", +"kGZ c #e1cf78", +"f2b c #e1cf83", +"kJW c #e1cf86", +"ko8 c #e1cf89", +"#cW c #e1cf94", +"gYo c #e1cf99", +"epZ c #e1d07c", +"kzN c #e1d07f", +"kmK c #e1d08a", +"ktB c #e1d08b", +"fLr c #e1d08c", +"ijb c #e1d08f", +".NS c #e1d094", +"#qS c #e1d098", +"gOD c #e1d181", +"jUS c #e1d18b", +"kuY c #e1d192", +".AS c #e1d195", +"kEb c #e1d27b", +"aco c #e1d293", +"hYB c #e1d297", +"c#d c #e1d379", +"e16 c #e1d386", +"gnP c #e1d38c", +"dTD c #e1d39a", +"cEN c #e1d3a4", +"c1b c #e1d4b1", +"bH6 c #e1d67e", +"d8w c #e1d680", +"fP7 c #e1d687", +"eQ1 c #e1d6bf", +"hdP c #e1d78b", +"kp7 c #e1d79b", +"#2Q c #e1d89c", +"#qn c #e1d8a1", +"ehx c #e1d8af", +".jk c #e1d8f2", +"a.w c #e1d99e", +"#Og c #e1d9a3", +"dQ6 c #e1d9c0", +"dpG c #e1d9c3", +"cWz c #e1daaf", +"emu c #e1dab3", +"evH c #e1db9f", +"#Vu c #e1dba2", +"#GZ c #e1dba3", +"dgh c #e1dbc6", +"da7 c #e1dbd0", +"aOy c #e1dca4", +"aKj c #e1dca6", +"drJ c #e1dcc3", +"dba c #e1dcc8", +"bx3 c #e1dcd2", +"ecH c #e1dd9f", +"#Zc c #e1dda5", +"ccL c #e1ddcf", +"ecG c #e1dea1", +"bQn c #e1deda", +"eqT c #e1dfa3", +"f9q c #e1dfae", +"cJl c #e1dfc6", +"eg9 c #e1e0a5", +"cE2 c #e1e0c8", +"bLr c #e1e0df", +"ccP c #e1e0e0", +"eca c #e1e1a8", +"ecF c #e1e2a8", +"el9 c #e1e2aa", +"ecb c #e1e2ab", +"ecn c #e1e2ae", +"ddE c #e1e2c6", +"bLq c #e1e2e0", +"emb c #e1e3a9", +"dmW c #e1e3ce", +"ifH c #e1e4b0", +"ih8 c #e1e4b1", +"diI c #e1e4d4", +"eh# c #e1e5b0", +"egT c #e1e5b5", +"di# c #e1e5d4", +"ecc c #e1e6b6", +"dil c #e1e6cb", +"d.E c #e1e6d4", +"ck3 c #e1e6e7", +"dUR c #e1e7c6", +"d9G c #e1e9b6", +"egU c #e1e9c0", +"ck2 c #e1e9e9", +"b#8 c #e1eb93", +"ecE c #e1ebbc", +"ddq c #e1ebd4", +"d4w c #e1eccb", +"dIk c #e1ecdd", +"d9F c #e1edbd", +"dEi c #e1eddf", +"ehd c #e1eec4", +"ehc c #e1efc4", +".om c #e1f086", +"ecz c #e1f0c3", +"ecD c #e1f0c7", +"eJL c #e1f3f6", +"cEj c #e1f5ff", +"dhY c #e1f6fa", +"d.J c #e1f6fd", +"cWc c #e1f6ff", +"cQH c #e1f7ff", +"c0# c #e1f8ff", +"c9L c #e1f9ff", +"drl c #e1faff", +".ao c #e259df", +"gUk c #e2874e", +".b2 c #e288f2", +"hdp c #e28c28", +"gID c #e28d51", +"h2B c #e28f2c", +"h8C c #e28f2d", +"h8A c #e2902d", +"i#u c #e2912e", +"irA c #e2922d", +"hZm c #e2922f", +"hZn c #e29333", +"iDN c #e29354", +"bGg c #e29357", +"iNm c #e2952e", +"iHC c #e29531", +"iEy c #e29533", +"hdr c #e29534", +"gNZ c #e2961d", +"jDd c #e2962e", +"jrF c #e29730", +"gmx c #e29737", +"il9 c #e2973a", +"i0C c #e29749", +"jC0 c #e2982b", +"iHD c #e29832", +"gqv c #e29833", +"iHE c #e29933", +"iI7 c #e29953", +"hFy c #e29a2e", +"gCp c #e29b2c", +"ie2 c #e29b34", +"gVg c #e29b36", +"dOl c #e29b5e", +"dKc c #e29b5f", +"gNT c #e29c27", +"joC c #e29c2e", +"hWw c #e29c3d", +"iRP c #e29c5d", +"cJ5 c #e29c60", +"gF. c #e29d34", +"ihy c #e29d39", +"hZp c #e29d44", +"cOn c #e29d60", +"h#h c #e29e2c", +"hGe c #e29e35", +"jLu c #e29e3c", +"jxA c #e29f2d", +"joD c #e29f31", +"imz c #e29f36", +"h8F c #e29f3c", +"jLt c #e29f3d", +"i8B c #e29f55", +"kx0 c #e2a053", +"c2y c #e2a05f", +"cSV c #e2a063", +"gFM c #e2a12e", +"izw c #e2a13b", +"iJU c #e2a238", +"gi5 c #e2a241", +"g3C c #e2a33b", +"iC. c #e2a33f", +"kO0 c #e2a35d", +"ihc c #e2a443", +"hr0 c #e2a445", +"b8i c #e2a46c", +"ijI c #e2a543", +"gqd c #e2a553", +"c7b c #e2a56b", +"h79 c #e2a63b", +"iSE c #e2a63c", +"gRE c #e2a730", +"iB8 c #e2a741", +"jlr c #e2a83b", +"iB7 c #e2a943", +"jxe c #e2a94c", +"gI1 c #e2aa43", +"jou c #e2aa49", +"iMc c #e2aa5b", +"g3J c #e2ad4e", +"gRQ c #e2ae3f", +"iMF c #e2af59", +"iwP c #e2b051", +"jJZ c #e2b074", +"izv c #e2b14e", +"h#n c #e2b153", +"hop c #e2b25a", +"j82 c #e2b277", +"fs0 c #e2b662", +"iom c #e2b677", +"hN. c #e2b85e", +"h8G c #e2b863", +"hZU c #e2b95e", +".f4 c #e2b9fd", +"jGs c #e2ba50", +"iZj c #e2ba68", +"ie9 c #e2bb59", +"kt9 c #e2bb5b", +"ggf c #e2bb5f", +"jId c #e2bb63", +"fHV c #e2bb6b", +"gjX c #e2bc64", +"eWv c #e2bc6b", +"gCG c #e2bd62", +"j#A c #e2bd80", +"jJf c #e2be50", +"kk8 c #e2be65", +"f1Z c #e2be67", +"j8s c #e2be72", +"k.0 c #e2be73", +"gxv c #e2bf6a", +"d2V c #e2bf6f", +"jLN c #e2c04d", +"jvu c #e2c055", +"eMv c #e2c075", +"iec c #e2c083", +"knE c #e2c158", +"j3d c #e2c168", +"fPq c #e2c16a", +"fcr c #e2c16c", +"guj c #e2c16e", +"eCU c #e2c175", +"eMu c #e2c178", +"hIb c #e2c1a9", +"kiZ c #e2c265", +"fAO c #e2c26f", +"eHG c #e2c27d", +"eRu c #e2c280", +"fgA c #e2c377", +"huJ c #e2c383", +"giX c #e2c385", +"kNT c #e2c462", +"kuq c #e2c463", +"kKB c #e2c466", +"kdP c #e2c469", +"d2L c #e2c46e", +"hzz c #e2c47a", +"eMj c #e2c571", +"i81 c #e2c596", +"jYT c #e2c59d", +"f1V c #e2c67e", +"dOW c #e2c68c", +"d7k c #e2c68e", +"fxf c #e2c77d", +"j1# c #e2c780", +"jYK c #e2c781", +"dXz c #e2c78e", +"d2a c #e2c78f", +"d2u c #e2c790", +"dbI c #e2c872", +"d2K c #e2c875", +"kk3 c #e2c878", +"jWp c #e2c882", +"j5Y c #e2c883", +"kzb c #e2c885", +"e#R c #e2c890", +"ieR c #e2c974", +"jYL c #e2c983", +"jMg c #e2c984", +"d3c c #e2ca77", +"efN c #e2cb63", +"jsd c #e2cb81", +"#Sw c #e2cb8e", +"ipI c #e2cbaf", +"fsz c #e2cc86", +"f4Q c #e2cc89", +"c6. c #e2cc9d", +"jCk c #e2cd7a", +"iQF c #e2cd82", +"jI4 c #e2cd83", +"i4L c #e2cd84", +"fb6 c #e2cd8b", +"cdY c #e2ce69", +"g8b c #e2ce7c", +"fP9 c #e2ce82", +"kMD c #e2ce83", +"iQy c #e2ce87", +"kQC c #e2ce8c", +".5Z c #e2ce91", +"#hM c #e2ce97", +"eyj c #e2ce9e", +"kG0 c #e2cf7a", +"fxn c #e2cf7f", +"c39 c #e2cf81", +"iuq c #e2cf88", +"fwy c #e2cf89", +"#dj c #e2cf92", +"#DZ c #e2cf94", +"hWH c #e2d080", +"kyJ c #e2d085", +"kq. c #e2d08e", +"d#B c #e2d0b1", +"g8c c #e2d17e", +"fsv c #e2d18c", +"#aU c #e2d192", +"#dm c #e2d197", +"hIG c #e2d199", +"hPq c #e2d19c", +"cPR c #e2d280", +"kxd c #e2d283", +"jZy c #e2d28b", +"jUT c #e2d28c", +"cNo c #e2d2a4", +"hVv c #e2d399", +"ksH c #e2d39d", +"iY4 c #e2d490", +"cNi c #e2d4a6", +"kpr c #e2d58d", +"cWB c #e2d5a9", +"hW8 c #e2d68e", +"hJY c #e2d693", +"cAq c #e2d7aa", +"fS3 c #e2d886", +"dpF c #e2dbc4", +"#Vv c #e2dca5", +"kQA c #e2dd9b", +"ehj c #e2dd9d", +"#Zd c #e2dda5", +"d5f c #e2ddbc", +"dQ7 c #e2ddc4", +"ehi c #e2de9f", +"#Za c #e2dea2", +"#RT c #e2dea6", +"dEH c #e2dec6", +"b92 c #e2dece", +"bx1 c #e2ded8", +"emd c #e2dfa0", +"ehk c #e2dfa1", +"elV c #e2dfa2", +"b9G c #e2dfde", +"ecI c #e2e0a4", +"emc c #e2e1a4", +"eqS c #e2e1a6", +"eq7 c #e2e1a7", +"dtU c #e2e1df", +"ccU c #e2e1e0", +"eqR c #e2e2a7", +"ema c #e2e2a8", +"em# c #e2e2a9", +"em. c #e2e3aa", +"d9b c #e2e3ae", +"diE c #e2e4ca", +"ic5 c #e2e5b1", +"dUQ c #e2e5be", +"diz c #e2e6c8", +"ehf c #e2e9b7", +"fTD c #e2e9c5", +"egV c #e2eac0", +"ecd c #e2eac3", +"g4L c #e2eac9", +"dMA c #e2ece3", +"d9E c #e2eebf", +"aI# c #e2ef98", +"ecy c #e2f0c2", +"dvP c #e2f0ef", +"cH8 c #e2f1f5", +"gk5 c #e2f3d0", +"eJI c #e2f3f6", +".oT c #e2f47f", +"dZG c #e2f4e7", +"b6y c #e2f5ff", +"bIv c #e2f6fd", +"ciA c #e2f6ff", +"ddM c #e2f7fd", +"cm1 c #e2f7ff", +"dAf c #e2f8fa", +"cId c #e2f8ff", +"c90 c #e2f9ff", +".c5 c #e386ce", +"gQn c #e3894e", +"gUl c #e38a52", +"hh. c #e38f2c", +"h5C c #e3902d", +"gEQ c #e39053", +"gEN c #e39153", +"iXQ c #e39347", +"gVF c #e3941e", +"g7m c #e3953b", +"iDP c #e39555", +"hWb c #e3962b", +"iNn c #e39630", +"bK2 c #e39658", +"gGb c #e39729", +"gmw c #e39738", +"jnf c #e39752", +"hZo c #e3993b", +"hdb c #e3993c", +"iKu c #e39a33", +"ijo c #e39a3b", +"hPV c #e39b30", +"gqf c #e39b39", +"jKe c #e39b56", +"csY c #e39b5c", +"gGf c #e39c26", +"gJ4 c #e39c27", +"jz9 c #e39c31", +"iHF c #e39c35", +"icn c #e39e35", +".di c #e39efa", +"iMG c #e39f2f", +"gmD c #e39f3c", +"gtk c #e39f64", +"irG c #e3a038", +"it0 c #e3a039", +"c7f c #e3a061", +"iC# c #e3a13d", +"hCO c #e3a13f", +"gfe c #e3a230", +"io1 c #e3a240", +"i9r c #e3a33c", +"gB2 c #e3a430", +"gyc c #e3a431", +"gtO c #e3a439", +"jis c #e3a52b", +"h2o c #e3a54e", +"c2u c #e3a56a", +"dab c #e3a56c", +".d2 c #e3a5ff", +"iMH c #e3a631", +"hB4 c #e3a632", +"jrv c #e3a63a", +"jz6 c #e3a643", +"j#5 c #e3a73b", +"jos c #e3a73c", +"bxz c #e3a769", +"iBD c #e3a842", +"gZD c #e3a940", +".eF c #e3acff", +"gRp c #e3ae47", +"j1w c #e3ae73", +"j32 c #e3b076", +"j4M c #e3b154", +"j6o c #e3b177", +"gJV c #e3b25a", +"hLj c #e3b284", +"gqX c #e3b34f", +".fq c #e3b3ff", +"jk9 c #e3b458", +"jLe c #e3b552", +"hPU c #e3b578", +"iio c #e3b783", +"iwH c #e3b856", +"fcm c #e3b966", +"hZs c #e3b968", +"iji c #e3b976", +"h2. c #e3b982", +"iw8 c #e3ba5a", +"h#C c #e3ba5e", +"guV c #e3bb5e", +"gnx c #e3bb64", +"hse c #e3bc64", +"e5H c #e3bc6b", +"gsP c #e3bcad", +"j8r c #e3bd6f", +"jFA c #e3bd7d", +"khN c #e3bd84", +"jk0 c #e3be81", +"jAY c #e3bf52", +"eHQ c #e3bf71", +"kK4 c #e3bf75", +"koI c #e3bf86", +"jsr c #e3c055", +"ifg c #e3c065", +"jpn c #e3c152", +"kd3 c #e3c162", +"fs2 c #e3c172", +"jVd c #e3c190", +"iif c #e3c19a", +"kdH c #e3c258", +"kHq c #e3c25c", +"kpV c #e3c25e", +"eHM c #e3c276", +"eCT c #e3c279", +"eRw c #e3c27e", +"iAn c #e3c29b", +"kHM c #e3c35a", +"kzF c #e3c35b", +"kbe c #e3c367", +"eCG c #e3c36d", +"fLR c #e3c370", +"eCW c #e3c376", +"eCS c #e3c379", +"eRy c #e3c37c", +"eRx c #e3c37e", +"iuU c #e3c399", +"kQN c #e3c45c", +"knF c #e3c463", +"kd1 c #e3c468", +"jQg c #e3c474", +"j71 c #e3c566", +"jwW c #e3c570", +"hPv c #e3c589", +"hk1 c #e3c67b", +"j8i c #e3c770", +"eRk c #e3c773", +"jJD c #e3c780", +"jFB c #e3c78d", +"gj3 c #e3c87e", +"kHi c #e3c886", +"dGM c #e3c88d", +"eGE c #e3c88f", +"dTh c #e3c890", +"dCl c #e3c891", +"jvF c #e3c976", +"fYn c #e3c984", +"jDB c #e3c988", +"#HD c #e3c98d", +"jw5 c #e3c990", +"dOK c #e3c992", +"dTk c #e3c996", +"jMi c #e3ca83", +"jRw c #e3ca85", +"epr c #e3cb62", +"d#b c #e3cb96", +"c2X c #e3cb99", +"jYM c #e3cc86", +"jDA c #e3cc8f", +"c59 c #e3cc9e", +"ixB c #e3cca7", +"ktO c #e3cd7b", +"eD. c #e3cd7f", +"jmf c #e3cd83", +"jja c #e3cd8e", +"cWF c #e3cd9b", +"i4P c #e3ce83", +"fko c #e3ce8a", +"f4R c #e3ce8b", +"dfQ c #e3ce94", +"jBt c #e3ceb3", +"cp2 c #e3cf71", +"iWf c #e3cf85", +"jAM c #e3cf88", +"fSc c #e3cf89", +"e9S c #e3cf8a", +".8k c #e3cf8f", +"bKQ c #e3cfa4", +"f2c c #e3d082", +"kwg c #e3d086", +"fww c #e3d087", +"#c9 c #e3d094", +"eo9 c #e3d0a0", +"hUA c #e3d0bd", +"cPJ c #e3d178", +"cq# c #e3d17d", +"jX2 c #e3d185", +"h6a c #e3d18b", +"jXb c #e3d28c", +"hLW c #e3d29e", +"kv8 c #e3d38d", +"jXc c #e3d38e", +"#c2 c #e3d39a", +".VU c #e3d49a", +".Jb c #e3d599", +"gpP c #e3d5a2", +"keH c #e3d5a9", +"j95 c #e3d690", +"agk c #e3d6a3", +"cEI c #e3d6aa", +"kQD c #e3d898", +"#Zf c #e3d99f", +"kQs c #e3da98", +"eL5 c #e3dac4", +"#6c c #e3db9e", +"#KL c #e3dba6", +"dt5 c #e3dbc1", +"dMX c #e3dcc1", +"gaA c #e3ddab", +"d9Z c #e3ddb7", +"ecY c #e3ddbd", +"eme c #e3dea0", +"#z0 c #e3dea6", +"gdU c #e3deb1", +"ehh c #e3dfa1", +"#Oi c #e3dfa7", +"cNH c #e3dfc5", +"emi c #e3e0a2", +"#Oh c #e3e0a9", +"f2i c #e3e18c", +"emj c #e3e1a4", +"egZ c #e3e1a5", +"ecJ c #e3e1a7", +"fFT c #e3e1c4", +"dQ8 c #e3e1c6", +"at5 c #e3e1d3", +"eh. c #e3e2a7", +"dGP c #e3e2e0", +"diw c #e3e3c2", +"ehl c #e3e4ab", +"f6t c #e3e4b8", +"d9H c #e3e6af", +"egW c #e3e6b7", +"dUL c #e3e6c3", +"eJV c #e3e6cb", +"d9c c #e3e7ba", +"eOC c #e3e7d2", +"dQk c #e3eeda", +"d9D c #e3efc0", +"ecx c #e3f0c1", +"dcZ c #e3f3f6", +"eJH c #e3f5f7", +"b6E c #e3f5fc", +"bR1 c #e3f5fe", +"dIs c #e3f6f4", +"crz c #e3f6ff", +"c05 c #e3f7fe", +"cq5 c #e3f7ff", +"dvN c #e3f8fa", +"cq6 c #e3f8ff", +"dcK c #e3faff", +"bPQ c #e48d4f", +"hZD c #e4912e", +"gpz c #e49356", +"h#G c #e4942b", +"jAb c #e49529", +"g7l c #e49536", +"iHB c #e49730", +"jAt c #e49732", +"je. c #e49757", +"iDM c #e49859", +"do. c #e49864", +"i9q c #e4992c", +"hMV c #e49a34", +"cky c #e49a5c", +"hTe c #e49b2e", +"gCr c #e49b30", +"koD c #e49b50", +"cBv c #e49b5d", +"coG c #e49c5f", +"iI5 c #e49d5b", +".dj c #e49dff", +"gNs c #e49e33", +"gyC c #e49e34", +"jIK c #e49e3b", +"csX c #e49e61", +"glU c #e49e63", +"jfJ c #e49f2d", +"hQ. c #e49f38", +"bBP c #e49f66", +"jfI c #e4a02e", +"iBF c #e4a03b", +"juJ c #e4a131", +"giN c #e4a136", +"jcx c #e4a13c", +"jcw c #e4a240", +"cOm c #e4a267", +"g7k c #e4a336", +"gxQ c #e4a337", +"cXH c #e4a368", +"gug c #e4a534", +"j#Q c #e4a63e", +"iBE c #e4a641", +"joI c #e4a733", +"gp5 c #e4a738", +"iSB c #e4a835", +"kIM c #e4a863", +"joH c #e4a936", +"gNu c #e4a941", +"ijH c #e4a943", +"jon c #e4a94c", +"iPE c #e4ab3f", +"gus c #e4ab42", +"hFQ c #e4ab49", +"h8z c #e4ac49", +"c7a c #e4ac77", +"gRD c #e4ad36", +"c2t c #e4ad76", +"gVx c #e4ae43", +"hF8 c #e4af52", +"jHb c #e4af72", +"icj c #e4b04d", +"hMY c #e4b050", +"h.C c #e4b145", +"g.w c #e4b14d", +"i1d c #e4b23c", +"hre c #e4b249", +"i#z c #e4b24e", +"hCL c #e4b45e", +"iWr c #e4b55a", +"izG c #e4b75d", +"g7Y c #e4b852", +"gRY c #e4b854", +"guI c #e4b947", +"iH7 c #e4b958", +"gCE c #e4b959", +"gnl c #e4bb64", +"e1g c #e4bb69", +"e97 c #e4bc69", +"iko c #e4bd60", +"gcA c #e4bd61", +"iWs c #e4bd6b", +"jcf c #e4bd6e", +"gRR c #e4be59", +"hdC c #e4be66", +"gBX c #e4bf53", +"gcB c #e4bf64", +"gZW c #e4bf66", +"jZ6 c #e4bf69", +"gjJ c #e4bf6a", +"krG c #e4c063", +"gjZ c #e4c066", +"jFt c #e4c068", +"gjI c #e4c06a", +"gjK c #e4c06c", +"kj3 c #e4c087", +"jJg c #e4c152", +"jvt c #e4c154", +"gmK c #e4c16c", +"kbz c #e4c174", +"kzh c #e4c252", +"jAT c #e4c263", +"f5g c #e4c26a", +"eay c #e4c274", +"kgZ c #e4c277", +"jmm c #e4c356", +"kw6 c #e4c35a", +"jP7 c #e4c36c", +"jcc c #e4c391", +"kpS c #e4c460", +"jA8 c #e4c46c", +"k.4 c #e4c47b", +"jpo c #e4c55d", +"kCh c #e4c55f", +"eHx c #e4c56e", +"eMq c #e4c584", +"kKo c #e4c65d", +"kle c #e4c663", +"kls c #e4c664", +"knw c #e4c667", +"j8e c #e4c66b", +"eHy c #e4c671", +"fgB c #e4c672", +"fEq c #e4c673", +"j3B c #e4c680", +"kdO c #e4c767", +"imG c #e4c76c", +".gN c #e4c7e8", +"k.s c #e4c866", +"kdR c #e4c867", +"kHC c #e4c869", +"dKV c #e4c88f", +"gjp c #e4c891", +"iLx c #e4c89d", +"kzz c #e4c96a", +"d7y c #e4c971", +"ej1 c #e4c973", +"dKU c #e4c991", +"dgS c #e4ca6c", +"fcw c #e4ca7d", +"fYo c #e4ca84", +"d2s c #e4ca92", +"d2b c #e4ca93", +"d67 c #e4ca94", +"ekA c #e4cb61", +"krD c #e4cb7e", +"knY c #e4cb85", +"j8u c #e4cb86", +"kwD c #e4cb87", +"dS4 c #e4cb93", +"dXA c #e4cb94", +"dKF c #e4cb95", +"j4P c #e4cbab", +"ekB c #e4cc60", +"efM c #e4cc61", +"eo# c #e4cc96", +"kf7 c #e4cd7a", +"jOi c #e4cd8c", +"#HE c #e4cd90", +"j.w c #e4cdad", +"jOQ c #e4ce89", +"#OP c #e4ce93", +"#aD c #e4ce95", +"duD c #e4cf77", +"dbV c #e4cf80", +"hKg c #e4cf84", +"i7m c #e4cf86", +"h2W c #e4cf8b", +"iVi c #e4cf8c", +"hPH c #e4cf9f", +"cyQ c #e4d07b", +"jFc c #e4d07d", +"kEj c #e4d083", +"jge c #e4d086", +"jgj c #e4d087", +"iNF c #e4d088", +"iNE c #e4d089", +"#a2 c #e4d091", +"cRT c #e4d0a0", +"kMB c #e4d185", +"#.B c #e4d197", +"jNg c #e4d289", +"etH c #e4d2a5", +"cC3 c #e4d37f", +"izg c #e4d385", +"kPG c #e4d386", +"fon c #e4d38a", +".1G c #e4d395", +"cAn c #e4d3a9", +".iI c #e4d3f6", +"kuI c #e4d485", +"jZz c #e4d48d", +"jXd c #e4d48e", +"icS c #e4d490", +"#aF c #e4d4a2", +"eDQ c #e4d584", +"j1Y c #e4d590", +".XN c #e4d599", +"gnQ c #e4d691", +".DP c #e4d69e", +"cEB c #e4d6ac", +"b6i c #e4d77a", +"gOC c #e4d783", +"cwi c #e4d7ad", +"cNa c #e4d7b7", +"eSC c #e4d884", +"eze c #e4d889", +"aKi c #e4d89f", +"fpd c #e4d985", +"#Zq c #e4d99a", +"i4S c #e4da8a", +"#6u c #e4dca2", +"#GY c #e4dca5", +"drS c #e4dcb9", +"dIG c #e4ddc2", +"ehg c #e4dea0", +"dMT c #e4dec4", +"emh c #e4dfa0", +"emf c #e4dfa1", +"bx4 c #e4dfd5", +"emg c #e4e0a2", +"bx2 c #e4e0d7", +"iHs c #e4e196", +"aFW c #e4e1ac", +"emk c #e4e2a6", +"egY c #e4e2a8", +"f9r c #e4e2b4", +"eq6 c #e4e3a9", +"egX c #e4e3ad", +"dCK c #e4e3e1", +"dyf c #e4e3e2", +"eml c #e4e4a9", +"ecr c #e4e4aa", +"emm c #e4e4ab", +"ehn c #e4e4ac", +"dCA c #e4e4e2", +"c7L c #e4e4e3", +"ecs c #e4e5ab", +"ecK c #e4e5ad", +"ecm c #e4e5b2", +"ddj c #e4e5c6", +"ah6 c #e4e5dc", +"ehm c #e4e6af", +"ecj c #e4e6b4", +"d9I c #e4e9b5", +"ddd c #e4ead1", +"d9C c #e4f0c0", +"ecw c #e4f0c1", +"gO1 c #e4f0cf", +"dU6 c #e4f0dd", +"ece c #e4f2da", +"dMd c #e4f2e3", +"gzO c #e4f3d2", +"dU5 c #e4f3e6", +"eJJ c #e4f5f7", +"c#r c #e4f6ff", +".pN c #e4f778", +"cns c #e4f7ff", +"dhX c #e4f8fc", +"cm2 c #e4f8ff", +"d.O c #e4f9fe", +"dcL c #e4faff", +"bK3 c #e58e50", +"hdq c #e5922d", +"cgl c #e59657", +"iHz c #e5972d", +"jng c #e59752", +"jnk c #e59855", +"gRK c #e5991c", +"hPz c #e59a3b", +"gF# c #e59a3c", +"hMc c #e59b2e", +"h#i c #e59b34", +"coH c #e59b5c", +"il8 c #e59c38", +"iwI c #e59d36", +"iEx c #e59d3a", +".dk c #e59dff", +"gN0 c #e59e1d", +"iKv c #e59e36", +"h5k c #e59e3b", +"h7d c #e59e60", +"iJ5 c #e59f38", +"dSC c #e59f60", +"hWa c #e5a02e", +"j#0 c #e5a02f", +"iHG c #e5a039", +"iDL c #e5a05c", +"jey c #e5a05d", +"jAq c #e5a12d", +"dtk c #e5a164", +"iGz c #e5a252", +"cxh c #e5a266", +"i39 c #e5a330", +"gt6 c #e5a339", +"g3h c #e5a33c", +"hL8 c #e5a342", +"iDX c #e5a360", +"kmm c #e5a45d", +"iA5 c #e5a465", +"juo c #e5a53e", +".d3 c #e5a5ff", +"iCa c #e5a641", +"hzh c #e5a645", +"iPT c #e5a732", +"c7c c #e5a76c", +"hvE c #e5a849", +"cSU c #e5a86f", +"jlB c #e5a92c", +"kOZ c #e5a964", +"hLk c #e5a973", +"i1n c #e5aa42", +"kMd c #e5ab60", +"cgp c #e5ab63", +"bJ6 c #e5ab75", +"ib1 c #e5ac45", +".eG c #e5acff", +"gRd c #e5ad30", +"ieK c #e5ad45", +"iBC c #e5ae46", +"jlt c #e5af3d", +"hr5 c #e5b154", +"gNK c #e5b35d", +"hFz c #e5b473", +"j2l c #e5b558", +"hou c #e5b856", +"gIv c #e5b8aa", +"f8c c #e5b960", +"hJR c #e5bb5f", +"gEG c #e5bbad", +"gyH c #e5bc5b", +"fkK c #e5bc67", +"kwI c #e5bd5a", +"fgx c #e5bd6a", +"hct c #e5bf73", +"gKk c #e5c062", +"e96 c #e5c06e", +"gyO c #e5c165", +"ino c #e5c192", +"j8q c #e5c274", +"jDI c #e5c357", +"g## c #e5c369", +"f8f c #e5c36a", +"efl c #e5c374", +"kej c #e5c375", +"kgY c #e5c377", +"kE1 c #e5c458", +"fYL c #e5c46e", +"jDK c #e5c557", +"kdD c #e5c569", +"fSt c #e5c56e", +"gyi c #e5c57a", +"kr6 c #e5c65c", +"k.B c #e5c669", +"eMh c #e5c66f", +"eRm c #e5c678", +"kiX c #e5c767", +"kgz c #e5c768", +"jjj c #e5c76c", +"eCH c #e5c772", +"kgC c #e5c86f", +"etO c #e5c871", +"kIj c #e5c880", +"eHF c #e5c885", +"kiN c #e5c971", +"jZ4 c #e5c978", +"jfj c #e5c97c", +".ht c #e5c9e7", +"kup c #e5ca6c", +"fPv c #e5ca7f", +"e#9 c #e5ca91", +"dGL c #e5ca92", +"iUh c #e5caa3", +"jWq c #e5cb84", +"ea. c #e5cb92", +"dKT c #e5cb93", +"e#8 c #e5cb94", +"d2c c #e5cb95", +"iRt c #e5cba2", +"efJ c #e5cc64", +"jcg c #e5cc90", +"dXB c #e5cc95", +".i. c #e5cce5", +"efK c #e5cd62", +"eyp c #e5cd7c", +"fwv c #e5cd7f", +"eC5 c #e5cd93", +"e#S c #e5cd97", +"d#. c #e5cd9c", +"job c #e5cda3", +"cHm c #e5ce7a", +"eMk c #e5ce85", +"f1B c #e5ce8d", +"jga c #e5cf84", +"jMh c #e5cf8a", +"iSu c #e5cf8b", +"exl c #e5cf99", +"cWG c #e5cfa0", +"d.9 c #e5cfa1", +"bF5 c #e5cfa2", +"c58 c #e5cfa3", +"jav c #e5d088", +"knZ c #e5d08b", +"dtQ c #e5d099", +"f7C c #e5d09d", +"cWH c #e5d0a1", +"d.8 c #e5d0a2", +"i74 c #e5d0b8", +"jtO c #e5d17f", +"kG4 c #e5d183", +"gSt c #e5d185", +"i9W c #e5d186", +"eQb c #e5d19e", +"kHd c #e5d1a2", +"bkP c #e5d1b1", +"iTv c #e5d28a", +"fSd c #e5d28c", +"#aW c #e5d295", +"hyl c #e5d297", +"gqA c #e5d384", +"f2# c #e5d386", +"kBI c #e5d387", +"kGE c #e5d388", +"krw c #e5d48a", +"kpl c #e5d48b", +"kMq c #e5d48c", +"krk c #e5d48d", +"ksv c #e5d495", +"hcj c #e5d49b", +"cPK c #e5d57b", +"elb c #e5d57f", +"kib c #e5d58c", +"jZA c #e5d58e", +"hX. c #e5d592", +".NR c #e5d599", +"ie. c #e5d59a", +".VS c #e5d59b", +"iBo c #e5d59d", +"g#N c #e5d68b", +"jUU c #e5d68f", +"kv7 c #e5d690", +"j4o c #e5d691", +"#ig c #e5d69b", +"hSB c #e5d69c", +"fkf c #e5d78e", +"ff9 c #e5d88b", +".Jc c #e5d89c", +"i#D c #e5d988", +"kuZ c #e5d99f", +"eL0 c #e5d9b2", +"#dh c #e5da9e", +"cNg c #e5daaf", +"a.r c #e5db9d", +"#Vr c #e5dba3", +"cr1 c #e5dbb1", +"b6m c #e5dc94", +"b1s c #e5dc95", +"#Vx c #e5dca3", +"#GX c #e5dca5", +"cAt c #e5dcb2", +"cEA c #e5dcb6", +"c1Q c #e5dcbf", +"cYQ c #e5dcc8", +"fgT c #e5dd88", +"icM c #e5dd9a", +"dAA c #e5ddbb", +"ecZ c #e5deb3", +"cSe c #e5dec1", +"eHi c #e5dec9", +".IU c #e5dfa7", +"#RU c #e5dfa8", +"cfg c #e5dfbc", +"dv2 c #e5e0c6", +"dMV c #e5e0c7", +"dVL c #e5e1c8", +"c79 c #e5e1d5", +"eq4 c #e5e2a6", +"gaz c #e5e2b7", +"f6u c #e5e2b8", +"da8 c #e5e2dc", +"btV c #e5e2df", +"eq5 c #e5e4a9", +"amd c #e5e4da", +"bLy c #e5e4e3", +"ddJ c #e5e5cf", +"cT2 c #e5e5e4", +"ect c #e5e6ae", +"eho c #e5e6b0", +"eck c #e5e6b4", +"eAq c #e5e6c2", +"ecl c #e5e7b5", +"d.D c #e5e7cf", +"bxV c #e5e7d2", +"b9I c #e5e7e4", +"emp c #e5e8b6", +"dIu c #e5e8dd", +"iCO c #e5eab7", +"eci c #e5eabe", +"ecL c #e5ebb8", +"d.f c #e5ebd2", +"ecu c #e5ecb8", +".nP c #e5ed8c", +"d4Z c #e5edba", +"d40 c #e5edbb", +"d9d c #e5edcd", +"ecM c #e5eebd", +"d4x c #e5efd5", +"ecv c #e5f0c1", +"d9B c #e5f1c0", +"aIa c #e5f29b", +"dUZ c #e5f6ec", +"dEu c #e5f7f6", +"c#w c #e5f7fd", +"ci7 c #e5f7ff", +"cq8 c #e5f8ff", +"dmM c #e5f9fc", +"cVm c #e5f9ff", +"bUy c #e69457", +"jrT c #e6962a", +"iHA c #e6982e", +"cbO c #e6985b", +"gBn c #e6993e", +"hU2 c #e69959", +"iex c #e69b35", +"h#H c #e69c37", +"kqU c #e69c4c", +"h5m c #e69d3e", +"iES c #e69e37", +"gtT c #e69f39", +"iAQ c #e69f57", +"iyb c #e69f5f", +"iI6 c #e6a05b", +"g7O c #e6a126", +"iCn c #e6a13a", +"giK c #e6a23b", +"doR c #e6a265", +"iLQ c #e6a363", +"ij5 c #e6a441", +"ilS c #e6a445", +"it7 c #e6a53a", +"jfu c #e6a545", +"cxm c #e6a562", +"iYz c #e6a630", +"gNr c #e6a632", +"cBt c #e6a66c", +"ijk c #e6a746", +"kAE c #e6a75c", +"i#s c #e6a83d", +"c2v c #e6a86c", +"bYw c #e6a971", +"iee c #e6ab46", +"gur c #e6ac36", +"iPJ c #e6ac3d", +"jRL c #e6ac6e", +"jr0 c #e6ad3e", +"cXG c #e6ad75", +"ijG c #e6ae42", +"ihb c #e6af45", +"jh7 c #e6af47", +"gNp c #e6b037", +"i#. c #e6b043", +"ihD c #e6b046", +"iMb c #e6b064", +"gNA c #e6b24d", +"gGi c #e6b448", +"gJM c #e6b450", +"kfk c #e6b46c", +"btt c #e6b478", +"gmY c #e6b551", +"guu c #e6b55d", +"hMd c #e6b674", +"gCe c #e6b964", +"hrQ c #e6b965", +"hZr c #e6b968", +"gUc c #e6baab", +"iQR c #e6bb65", +"eME c #e6bc60", +"jfb c #e6bc6e", +"hGr c #e6bd60", +"kxJ c #e6bd75", +"kBP c #e6be5b", +"gGp c #e6bf61", +"gge c #e6c066", +"fPo c #e6c069", +"kIv c #e6c07e", +"kBS c #e6c25a", +"hkV c #e6c265", +"gOe c #e6c268", +"j5V c #e6c273", +"g70 c #e6c367", +"kpA c #e6c45b", +"kby c #e6c477", +"kg0 c #e6c478", +"h2H c #e6c487", +"jLP c #e6c556", +"jJb c #e6c55b", +"kbw c #e6c577", +"jIj c #e6c591", +"kr8 c #e6c65a", +"j7S c #e6c666", +"jx5 c #e6c669", +"fVD c #e6c66f", +"jDL c #e6c75e", +"jA0 c #e6c75f", +"eCX c #e6c779", +"knG c #e6c861", +"eMi c #e6c871", +"eCR c #e6c87e", +"hYG c #e6c88d", +"kr7 c #e6c965", +"ki3 c #e6c967", +"kbc c #e6c96d", +"j7A c #e6c972", +"eWn c #e6c98a", +"ka0 c #e6ca69", +"kC# c #e6ca6a", +"ki5 c #e6ca6d", +"j8b c #e6ca70", +"j5B c #e6ca71", +"ef# c #e6ca73", +"epe c #e6ca74", +"jXG c #e6ca75", +"jn6 c #e6ca79", +"fs4 c #e6ca7b", +"guw c #e6ca86", +"kdK c #e6cb69", +"gup c #e6cb81", +"j5Z c #e6cb84", +"eHE c #e6cb89", +"hqw c #e6cbb2", +"dy8 c #e6cc75", +"kEx c #e6cc78", +"gfg c #e6cc80", +"f5l c #e6cc82", +"dGK c #e6cc93", +"dTg c #e6cc94", +"d2r c #e6cc95", +"dGy c #e6cc96", +"iOt c #e6cca3", +"efL c #e6cd61", +"klj c #e6cd70", +"eMV c #e6cd75", +"jXF c #e6cd76", +"jfi c #e6cd84", +"f5b c #e6cd87", +"kt5 c #e6cd8d", +"dx4 c #e6cd98", +"hVZ c #e6cda2", +"j3M c #e6cda8", +"kiR c #e6ce76", +"jx3 c #e6ce89", +"dx5 c #e6ce99", +"dea c #e6ce9d", +"jse c #e6cf86", +"fVf c #e6cf88", +"jzU c #e6cf95", +"dx6 c #e6cf9a", +"de# c #e6cfa1", +".h6 c #e6cffa", +"dqa c #e6d076", +"cuo c #e6d077", +".8g c #e6d090", +"dx7 c #e6d09b", +"cZb c #e6d179", +"dHm c #e6d17d", +"fow c #e6d18c", +"jfh c #e6d18e", +"cRU c #e6d1a3", +"j5t c #e6d27e", +"g0o c #e6d285", +"gzh c #e6d286", +"iTB c #e6d287", +"i9P c #e6d28b", +".3J c #e6d292", +".50 c #e6d294", +"iGX c #e6d295", +"#ib c #e6d297", +"j7p c #e6d29d", +"i7L c #e6d2a3", +"i7M c #e6d2ae", +"kG1 c #e6d382", +"f2d c #e6d383", +"i2i c #e6d389", +"cRW c #e6d3a5", +"klD c #e6d487", +"fAj c #e6d48c", +"#a1 c #e6d499", +"#kU c #e6d49d", +"c1l c #e6d4a6", +"h3J c #e6d4c0", +"cUr c #e6d582", +"fkg c #e6d587", +"jJB c #e6d589", +"kPw c #e6d58b", +"kGG c #e6d58c", +"fO8 c #e6d591", +"#nO c #e6d59c", +"geZ c #e6d5a2", +"kRh c #e6d67d", +"kyH c #e6d68c", +"jSm c #e6d68f", +"#nM c #e6d69b", +"#nG c #e6d69e", +"#kT c #e6d69f", +"cWx c #e6d6a9", +"cAo c #e6d6ab", +"fS5 c #e6d787", +"kv5 c #e6d791", +"#k0 c #e6d79d", +"#qQ c #e6d79f", +".Gv c #e6d7a0", +"#.j c #e6d7a4", +"g#p c #e6d88a", +"gBZ c #e6d88b", +"#6n c #e6d89f", +"aBm c #e6d8a0", +"gSn c #e6d986", +"eII c #e6d988", +"hzC c #e6d994", +"jMn c #e6daaa", +"cI1 c #e6dab0", +".kJ c #e6dac8", +"eXv c #e6db86", +"fgR c #e6db89", +"hht c #e6db8e", +"ipj c #e6db8f", +"jMq c #e6dbaa", +"cEy c #e6dbbc", +"eoD c #e6dcc6", +"i91 c #e6dd8a", +"jnX c #e6dd9d", +"axo c #e6dda8", +"cwk c #e6ddb4", +"cWA c #e6ddb5", +"dYW c #e6df88", +"bWp c #e6df8b", +"hZ4 c #e6df9c", +"#G5 c #e6dfa7", +"eCr c #e6dfca", +"#RW c #e6e0ab", +"dAr c #e6e0c6", +"gdV c #e6e1b1", +"dVK c #e6e1c8", +"fZ5 c #e6e2bd", +"ehw c #e6e2c5", +"dEF c #e6e2c9", +"iBT c #e6e397", +"btW c #e6e3df", +"btT c #e6e3e1", +"ghv c #e6e5bb", +"emq c #e6e6b9", +"eYF c #e6e6c6", +"f#U c #e6e6c8", +"daR c #e6e6e4", +"cht c #e6e6e5", +"dUJ c #e6e7c5", +"dUK c #e6e8c6", +"dEx c #e6e8df", +"f9p c #e6e9bc", +"fQL c #e6e9ca", +"emn c #e6eab8", +"d9o c #e6eab9", +"d9n c #e6eabd", +"diq c #e6eace", +"dAi c #e6eae3", +"d9p c #e6ebba", +"f6n c #e6ebc1", +"dEw c #e6ece4", +"d4Y c #e6eebb", +"d9J c #e6eebe", +"dQl c #e6f0d8", +"cQU c #e6f3f6", +"cMy c #e6f3f7", +"ecf c #e6f4de", +"dQu c #e6f4e7", +"dQt c #e6f5e8", +"dMe c #e6f5e9", +"dvO c #e6f7f7", +"ci8 c #e6f7ff", +"ciG c #e6f8ff", +".pk c #e6f97c", +"c5P c #e6f9fe", +"cVz c #e6f9ff", +"gx# c #e79356", +"cbP c #e79453", +"ilW c #e7993b", +"iDQ c #e79a59", +"hOU c #e79a5c", +"iDR c #e79b59", +"ckz c #e79b5a", +"hR7 c #e79b5e", +"je# c #e79c5b", +"hZl c #e79d32", +"gub c #e79d33", +"jjW c #e79d5c", +".dl c #e79dff", +"it1 c #e79e35", +"gqu c #e79e39", +"gqs c #e79e3a", +"h5l c #e79e3c", +"gp6 c #e79e40", +"i8p c #e79f56", +"cgk c #e79f63", +"gGe c #e7a02e", +"iKw c #e7a037", +"i#y c #e7a039", +"gqq c #e7a03b", +"dXa c #e7a061", +"ia0 c #e7a063", +"bBQ c #e7a064", +"hTd c #e7a12f", +"iHf c #e7a13b", +"iI4 c #e7a15e", +"i4f c #e7a22e", +"iCh c #e7a238", +"iON c #e7a260", +"gFa c #e7a33b", +"hYJ c #e7a342", +"iyc c #e7a362", +"cJ7 c #e7a363", +"cOo c #e7a465", +"i1m c #e7a52e", +"h2n c #e7a548", +".d4 c #e7a5ff", +"juK c #e7a62f", +"gqp c #e7a63b", +"h5j c #e7a63d", +"iyg c #e7a669", +"cXI c #e7a76a", +"imy c #e7a844", +"dac c #e7a86f", +"jAp c #e7a936", +"iCg c #e7a941", +"ij6 c #e7aa3d", +"jUx c #e7ab64", +"gBW c #e7ac35", +"hCP c #e7ac3e", +"gZd c #e7ac45", +"iJm c #e7ac59", +"iGf c #e7ac60", +"jh8 c #e7ae45", +"gJC c #e7b136", +"jlv c #e7b23d", +"iYC c #e7b242", +"huV c #e7b568", +"deB c #e7b588", +"gVs c #e7b860", +"gKd c #e7b94c", +"iYh c #e7b94f", +"hg7 c #e7b95f", +"gZM c #e7ba59", +"j2m c #e7ba65", +"gZu c #e7bd58", +"hzr c #e7bd59", +"hzs c #e7bd60", +"iuS c #e7be8f", +"hC1 c #e7bf63", +"kEz c #e7c05d", +"f1Y c #e7c067", +"jlg c #e7c068", +"how c #e7c162", +"hNa c #e7c169", +"kze c #e7c261", +"gVV c #e7c264", +"gwC c #e7c2b5", +"gR0 c #e7c367", +"gnz c #e7c469", +"krH c #e7c566", +"g3T c #e7c56a", +"gmp c #e7c57d", +"jGp c #e7c657", +"jDH c #e7c659", +"g3v c #e7c66e", +"jhX c #e7c68e", +"kwK c #e7c757", +"jGm c #e7c758", +"kuy c #e7c75b", +"izu c #e7c765", +"f7E c #e7c77c", +"j3C c #e7c77f", +"j4Q c #e7c799", +"jso c #e7c85b", +"k.X c #e7c87c", +"kKn c #e7c963", +"iUd c #e7c99b", +"kux c #e7ca66", +"jss c #e7ca6b", +"ka8 c #e7ca6d", +"kbh c #e7ca6e", +"j5C c #e7ca70", +"fkO c #e7ca78", +"kRn c #e7ca87", +"iII c #e7ca9d", +"k.o c #e7cb6a", +"eDk c #e7cb73", +"ekl c #e7cb75", +"jgw c #e7cc74", +"epd c #e7cc75", +"eCQ c #e7cc82", +"jJE c #e7cc88", +"dOV c #e7cc94", +"jk1 c #e7cc9c", +"k.G c #e7cd73", +"dql c #e7cd75", +"ekk c #e7cd76", +"jOT c #e7cd86", +"eWj c #e7cd8d", +"dGJ c #e7cd95", +"dCv c #e7cd96", +"ekz c #e7ce65", +"etN c #e7ce79", +"ett c #e7ce82", +"epq c #e7cf65", +"et0 c #e7cf6f", +"jYN c #e7cf8a", +"dXC c #e7cf9a", +"d68 c #e7cf9b", +"dnM c #e7cf9d", +"dj. c #e7cf9e", +"di9 c #e7cf9f", +"iF2 c #e7cfab", +"j.x c #e7cfb0", +"dnL c #e7d09e", +"kxL c #e7d0ac", +"jmy c #e7d17b", +"h#1 c #e7d182", +"jsf c #e7d186", +"gyT c #e7d188", +"f4S c #e7d18f", +"dx8 c #e7d19c", +"de. c #e7d1a3", +"iOv c #e7d1b2", +"eaW c #e7d27d", +"jYF c #e7d286", +"cRV c #e7d2a4", +"di6 c #e7d2a5", +"kEc c #e7d37c", +"jmt c #e7d37f", +"kEg c #e7d386", +"gOI c #e7d387", +"jgd c #e7d388", +"kCJ c #e7d390", +".51 c #e7d394", +"iZ0 c #e7d3ba", +"cl1 c #e7d47d", +"gBY c #e7d484", +"kJQ c #e7d486", +"kEh c #e7d489", +"hUa c #e7d48d", +"kn6 c #e7d4a3", +"jHX c #e7d587", +"kqd c #e7d591", +"huF c #e7d59c", +"cUo c #e7d683", +"kwf c #e7d68e", +"kuX c #e7d698", +"#dn c #e7d69b", +"kBx c #e7d780", +"jqW c #e7d787", +"e6z c #e7d788", +"ko9 c #e7d78f", +"kyw c #e7d790", +"iY5 c #e7d791", +".TS c #e7d79e", +"g4m c #e7d889", +"jMa c #e7d88d", +"kB. c #e7d892", +"fDT c #e7d893", +"igE c #e7d89b", +".VT c #e7d89f", +".Gw c #e7d8a0", +"jk5 c #e7d8a3", +"ela c #e7d982", +"cHf c #e7d986", +"e2b c #e7d987", +"gWl c #e7d988", +"j98 c #e7d98d", +"j5a c #e7d98e", +"hoD c #e7d990", +"j1Z c #e7d993", +"ioe c #e7d9a2", +"d.4 c #e7d9af", +"ksB c #e7daa6", +"ksx c #e7dba1", +"cr0 c #e7dbb3", +"cAm c #e7dbb4", +"fS4 c #e7dc89", +"#2M c #e7dca2", +"ftP c #e7dd8b", +"iNN c #e7dd92", +"#DX c #e7dda5", +"ebx c #e7de8b", +"c#h c #e7de94", +"bWs c #e7de95", +"#Dw c #e7dea8", +"cRQ c #e7deb6", +"dk1 c #e7dec5", +"#RY c #e7dfa8", +"ehy c #e7dfb1", +"eCp c #e7dfc2", +"dkZ c #e7dfc4", +"bCp c #e7e1d5", +"#KO c #e7e2ab", +"f6q c #e7e2bb", +"dEG c #e7e2c8", +"axE c #e7e3ae", +"fZ4 c #e7e3bf", +"d5e c #e7e3ca", +"f3k c #e7e4bd", +"dv1 c #e7e4ca", +"dv0 c #e7e4cb", +"dIE c #e7e4cc", +"emt c #e7e5ca", +"dGR c #e7e6e5", +"f3m c #e7e7be", +"dnj c #e7e7ce", +"e3j c #e7e9ca", +"d9q c #e7ebba", +"d9Q c #e7ebbe", +"dMB c #e7ebe0", +"ehp c #e7ecbc", +"f6s c #e7ecc0", +"d9m c #e7ecc3", +"din c #e7ecd3", +"d41 c #e7eec1", +"d4X c #e7efbc", +"d9K c #e7efc0", +"ech c #e7efcd", +"ecN c #e7f0c3", +"dQI c #e7f0e3", +"dIt c #e7f0e8", +"d9A c #e7f1c1", +"dQm c #e7f1dc", +"dQn c #e7f2de", +"dUY c #e7f3e2", +"ecg c #e7f4db", +"dMo c #e7f4e6", +"dI. c #e7f5e8", +"dMf c #e7f6eb", +"dMg c #e7f6ec", +"dMh c #e7f7ed", +"ciC c #e7f7ff", +"dAg c #e7f8f7", +"ceg c #e7f8fe", +"cvX c #e7f8ff", +"dh1 c #e7f9fe", +"cMA c #e7f9ff", +"c9K c #e7faff", +"bPR c #e88e4e", +"iL2 c #e8914c", +"bUz c #e89151", +"b88 c #e89455", +"iL0 c #e89654", +"jqf c #e89956", +"koC c #e89a4b", +"jC2 c #e89b2d", +"gxI c #e89c2d", +"gua c #e89c34", +"ig1 c #e89c38", +"ijx c #e89d3b", +".dm c #e89dff", +"gqt c #e89e3b", +"iiM c #e89e5e", +"idG c #e89e5f", +"izx c #e89f35", +"jDf c #e89f36", +"gqr c #e89f3b", +"h#j c #e89f3e", +"gK. c #e8a029", +"gqj c #e8a03a", +"izC c #e8a138", +"i3x c #e8a156", +"cxj c #e8a161", +"gK# c #e8a322", +"i6S c #e8a32f", +"h46 c #e8a33c", +"gx5 c #e8a435", +"hYK c #e8a43b", +"gBm c #e8a43c", +"iLN c #e8a45f", +"jhd c #e8a560", +"hRK c #e8a568", +"ckx c #e8a56a", +"jus c #e8a636", +"iHH c #e8a63d", +"jrN c #e8a730", +"khL c #e8a75e", +"ivs c #e8a769", +"hXT c #e8a76b", +"hTb c #e8a831", +"iJ4 c #e8a840", +"iIY c #e8a864", +"bxy c #e8a870", +"iyf c #e8a969", +"jcy c #e8aa40", +"ivr c #e8aa6a", +"joN c #e8ab2f", +"ivq c #e8ab6b", +"coF c #e8ab72", +"cFJ c #e8ad73", +"jlq c #e8ae3f", +"jxx c #e8b044", +"bwx c #e8b07a", +"gqK c #e8b23e", +"icq c #e8b24b", +"jls c #e8b344", +"ib0 c #e8b345", +"ieJ c #e8b346", +"jh6 c #e8b44e", +"hz. c #e8b453", +"gCw c #e8b64b", +"gyG c #e8b94f", +"jHd c #e8bb81", +"hJJ c #e8bc62", +"hGj c #e8bd63", +"iVq c #e8be59", +"g3R c #e8bf5a", +"gOb c #e8bf5b", +"gCx c #e8c05d", +"iTK c #e8c06b", +"h2R c #e8c165", +"gGj c #e8c25f", +"hzt c #e8c267", +"hdA c #e8c363", +"gZV c #e8c465", +"gjH c #e8c46f", +"fEo c #e8c471", +"hhi c #e8c56a", +"gCH c #e8c56b", +"g3U c #e8c56c", +"gOd c #e8c66a", +"eC1 c #e8c677", +"kg1 c #e8c67a", +"krK c #e8c757", +"kaT c #e8c768", +"j7z c #e8c76e", +"gq9 c #e8c772", +"kua c #e8c857", +"etE c #e8c879", +"eHR c #e8c87a", +"kbx c #e8c87c", +"j8w c #e8c87f", +"j50 c #e8c881", +"jVc c #e8c890", +"ej6 c #e8c975", +"gjL c #e8c978", +"j3x c #e8c97d", +"j1a c #e8c982", +"hWl c #e8c986", +"gjo c #e8c988", +"jAZ c #e8ca5d", +"eo0 c #e8ca76", +"eyc c #e8ca79", +"hFo c #e8ca92", +".hp c #e8cafe", +"kuw c #e8cb60", +"kpR c #e8cb67", +"k.f c #e8cb6e", +"dPt c #e8cb72", +"ety c #e8cb76", +"eRl c #e8cb7a", +"jNG c #e8cb7c", +"eMw c #e8cb7d", +"eCZ c #e8cb7e", +"eRz c #e8cb81", +"gj# c #e8cb8d", +"eam c #e8cc74", +"izl c #e8cc7a", +"foW c #e8cc7e", +"kRm c #e8cc89", +"eRt c #e8cc8e", +"kE0 c #e8cd66", +"k.g c #e8cd6f", +"eRC c #e8cd83", +"jfc c #e8cd92", +"kwQ c #e8ce69", +"kzA c #e8ce6f", +"d7w c #e8ce76", +"gBk c #e8ce7e", +"fYp c #e8ce88", +"jJF c #e8ce8d", +"dXJ c #e8ce97", +"e#7 c #e8ce99", +"jMt c #e8ce9c", +"jWv c #e8cea1", +"kgi c #e8cf6c", +"kET c #e8cf70", +"kNS c #e8cf73", +"ean c #e8cf78", +"hPI c #e8cf98", +"jMv c #e8cfa5", +"knt c #e8d072", +"efa c #e8d079", +"g3Z c #e8d089", +"gqN c #e8d093", +"dCt c #e8d098", +"dCm c #e8d09d", +"deb c #e8d09f", +"dec c #e8d0a0", +"i5s c #e8d0aa", +"hRU c #e8d0ac", +"dbJ c #e8d173", +"j5r c #e8d177", +"ktP c #e8d17f", +"eWF c #e8d183", +"jfk c #e8d185", +"d2o c #e8d19b", +"dCs c #e8d19c", +"eGF c #e8d19e", +"eji c #e8d19f", +"hV0 c #e8d1a5", +"jTP c #e8d284", +"jdq c #e8d289", +"kgn c #e8d295", +"eob c #e8d29c", +"di8 c #e8d2a2", +"di7 c #e8d2a3", +"haA c #e8d2aa", +"cC9 c #e8d37e", +"ktL c #e8d380", +"jdj c #e8d38a", +"dd9 c #e8d3a6", +"ktK c #e8d483", +"d2I c #e8d484", +"i7l c #e8d48b", +"fwB c #e8d491", +"i3Z c #e8d493", +"dd6 c #e8d4a7", +"dnF c #e8d4a8", +"eDR c #e8d580", +"ize c #e8d584", +"gKM c #e8d588", +"e0X c #e8d58e", +"f1r c #e8d590", +"fgh c #e8d591", +"cI9 c #e8d5a8", +"dd7 c #e8d5a9", +"hOh c #e8d5bb", +"cl2 c #e8d67e", +"kBE c #e8d68a", +"ihV c #e8d68e", +"fz1 c #e8d690", +"jEe c #e8d6a6", +"jmV c #e8d6bd", +"izf c #e8d788", +"jQh c #e8d78a", +"kcW c #e8d78c", +"kfE c #e8d78d", +"jGf c #e8d78f", +"i6x c #e8d796", +"#Aw c #e8d79e", +"cp8 c #e8d883", +"ktU c #e8d88e", +"i86 c #e8d8a1", +"gQy c #e8d8a5", +"kyI c #e8d98e", +"jZB c #e8d991", +"j6V c #e8d992", +"kv6 c #e8d993", +".DQ c #e8d99d", +"hFk c #e8d99e", +".TW c #e8d99f", +"j93 c #e8da91", +"kyv c #e8da93", +"jZQ c #e8da98", +"jFE c #e8da9d", +"hPr c #e8daa1", +".J# c #e8daa2", +"gMH c #e8daa6", +"ilI c #e8db9d", +"#di c #e8db9f", +"kql c #e8dba7", +"gIR c #e8dba8", +"hen c #e8dbb5", +"#DY c #e8dca2", +"aBj c #e8dca7", +"eQJ c #e8dd94", +".ZB c #e8dda4", +"cwh c #e8ddb7", +"bQD c #e8dec0", +"fk6 c #e8df88", +"dt6 c #e8dfc4", +"a.v c #e8e0a6", +"bpL c #e8e0d1", +"exL c #e8e1ce", +"bLB c #e8e1d0", +"f2g c #e8e48e", +"dMW c #e8e4cc", +"fms c #e8e5c9", +"dnl c #e8e5ca", +"drI c #e8e5cb", +"dIF c #e8e5cc", +"c3n c #e8e5dc", +"dd# c #e8e6c6", +"dQ5 c #e8e6cd", +"drH c #e8e6ce", +"bCc c #e8e6e4", +"bG3 c #e8e6e5", +"f2h c #e8e891", +"emr c #e8e8c6", +"d.C c #e8e9cf", +"d9R c #e8eabc", +"f3l c #e8eac3", +"dix c #e8eacd", +"ah4 c #e8eae2", +"dIv c #e8ebe0", +"dip c #e8ecd1", +"d9r c #e8edbc", +"ddf c #e8edd4", +"aXo c #e8ede6", +"ecS c #e8eec2", +"d9P c #e8eec5", +"d9l c #e8eeca", +"ehr c #e8efc2", +"d4W c #e8f0be", +"ehq c #e8f0c2", +"d9L c #e8f0c5", +".pl c #e8f25e", +"d9z c #e8f2c1", +"dAh c #e8f2ed", +"dQo c #e8f3e1", +"dVf c #e8f4e7", +"cIa c #e8f4f8", +"dZH c #e8f6e7", +"dMi c #e8f6ec", +"dIi c #e8f6ed", +"dI# c #e8f7ed", +"b1H c #e8f7ff", +"dMn c #e8f8f0", +"cH6 c #e8f8fe", +"cmY c #e8f8ff", +"dh0 c #e8f9fe", +"cDX c #e8f9ff", +"b4c c #e99454", +"jwa c #e99455", +"bZo c #e99554", +".cF c #e996ff", +"bUB c #e99853", +"gA0 c #e99858", +"jHs c #e99954", +"gA2 c #e99a5b", +"jgZ c #e99b59", +"bGh c #e99b5a", +"bZn c #e99c5e", +"iiL c #e99d5d", +"kmk c #e99e4f", +"igd c #e9a060", +"bPP c #e9a064", +"iUX c #e9a150", +"irB c #e9a237", +"ili c #e9a25f", +"igc c #e9a262", +"iiO c #e9a266", +"gBP c #e9a32f", +"izD c #e9a339", +"ilj c #e9a362", +"g7N c #e9a429", +"hTc c #e9a430", +"iET c #e9a43d", +"iI3 c #e9a461", +"iA2 c #e9a462", +"iXs c #e9a463", +"iGy c #e9a556", +"i5J c #e9a562", +"j.J c #e9a564", +"iBz c #e9a63e", +"j6m c #e9a657", +"cSW c #e9a667", +"hvF c #e9a73a", +"gxx c #e9a73f", +"b9a c #e9a75e", +"gqa c #e9a839", +"i9p c #e9a931", +"jxi c #e9a93a", +"gmh c #e9a93d", +"iyd c #e9a967", +"iwO c #e9aa40", +"iA4 c #e9aa67", +"isU c #e9aa6a", +"jrP c #e9ab30", +"iye c #e9ab69", +"jrZ c #e9ac3a", +"iSR c #e9ad30", +"iPF c #e9ad36", +"iep c #e9ae41", +"iHe c #e9ae47", +"iJS c #e9af36", +"i9h c #e9af43", +"iJn c #e9af60", +"bOV c #e9af79", +"kDe c #e9b06a", +"kFX c #e9b06b", +"kFY c #e9b06c", +"jUi c #e9b071", +"h8e c #e9b13a", +"csW c #e9b179", +"gRC c #e9b23d", +"ijF c #e9b240", +"g2E c #e9b445", +"hvs c #e9b44e", +"gN4 c #e9b541", +"jcM c #e9b547", +"iJ2 c #e9b54b", +"jom c #e9b551", +"jil c #e9b644", +"iSD c #e9b745", +"ih# c #e9b845", +"iha c #e9b847", +"jh5 c #e9b855", +"c2s c #e9ba88", +"hJI c #e9bb56", +"hIW c #e9bc81", +"gMp c #e9bcad", +"hkT c #e9bd5b", +"guG c #e9bd61", +"gyM c #e9c060", +"hsc c #e9c062", +"jZX c #e9c06e", +"gN5 c #e9c156", +"gKj c #e9c160", +"bsX c #e9c192", +"iq1 c #e9c381", +"hvT c #e9c56c", +"gZq c #e9c56f", +"gu5 c #e9c669", +"hvU c #e9c66e", +"fra c #e9c69b", +"jrm c #e9c779", +"grc c #e9c86b", +"gKl c #e9c86c", +"j8x c #e9c880", +"jGo c #e9c95a", +"jGn c #e9c95b", +"gfp c #e9c993", +"jJd c #e9ca59", +"jy. c #e9ca5b", +"kCi c #e9ca5c", +"kBQ c #e9ca6a", +"jXH c #e9ca70", +"fw9 c #e9ca7a", +"kef c #e9ca7d", +"j8v c #e9ca82", +"kq1 c #e9ca91", +"jOl c #e9cb59", +"etz c #e9cb79", +"kpw c #e9cc79", +"ej9 c #e9cc7a", +"eyb c #e9cc7b", +"eHN c #e9cc7f", +"kN3 c #e9cd62", +"kpW c #e9cd66", +"kr3 c #e9cd69", +"k.2 c #e9cd85", +"eMp c #e9cd91", +"kKM c #e9ce66", +"jsp c #e9ce68", +"klt c #e9ce6c", +"icr c #e9ce73", +"efx c #e9ce78", +"etP c #e9ce79", +"jh3 c #e9ce86", +"eWr c #e9ce89", +"hSF c #e9ce92", +"iZW c #e9cea2", +"jXA c #e9cea4", +"kdL c #e9cf6e", +"jdE c #e9cf71", +"d7x c #e9cf77", +"epf c #e9cf79", +"ekm c #e9cf7a", +"hvZ c #e9cf88", +"eLP c #e9cf92", +"d2q c #e9cf98", +"kHr c #e9d067", +"kuh c #e9d069", +"kzo c #e9d06b", +"knC c #e9d070", +"kpN c #e9d072", +"eyB c #e9d075", +"kQH c #e9d079", +"eyq c #e9d07c", +"e5D c #e9d08d", +"e92 c #e9d08e", +"eWi c #e9d090", +"eG6 c #e9d093", +"d2p c #e9d099", +"dKS c #e9d09a", +"dTf c #e9d09b", +"kdV c #e9d175", +"efb c #e9d17a", +"dT1 c #e9d17b", +"fss c #e9d181", +"gYx c #e9d189", +"hNf c #e9d18a", +"fci c #e9d190", +"eLQ c #e9d192", +"jCL c #e9d194", +"dOU c #e9d19b", +"dCw c #e9d1a1", +"krX c #e9d274", +"dlG c #e9d275", +"ft. c #e9d287", +"jRx c #e9d28d", +"eeP c #e9d29c", +"d7f c #e9d29d", +"dnK c #e9d2a1", +"iie c #e9d2b5", +".iM c #e9d2e4", +"ikb c #e9d37e", +"kwp c #e9d380", +"g79 c #e9d388", +"dGz c #e9d3a0", +"ejj c #e9d3a1", +"dwl c #e9d3a8", +"kEd c #e9d47e", +"hs. c #e9d487", +"jgc c #e9d489", +"#Lk c #e9d498", +"dCr c #e9d4a0", +"dCq c #e9d4a2", +"dnH c #e9d4a5", +"dnG c #e9d4a6", +"dwm c #e9d4a7", +"dr9 c #e9d4a8", +"gmL c #e9d587", +"jgb c #e9d589", +"iZ. c #e9d58a", +"jdr c #e9d58c", +".5Y c #e9d595", +"cp4 c #e9d67b", +"jjp c #e9d680", +"kab c #e9d68a", +"gVR c #e9d692", +"#.C c #e9d699", +"cI8 c #e9d6a9", +"k#q c #e9d6bb", +"kyU c #e9d781", +"d24 c #e9d789", +"gvC c #e9d78a", +"iNG c #e9d78f", +"ifs c #e9d793", +"cEC c #e9d7ad", +"ksf c #e9d88a", +"ka# c #e9d88c", +"kaa c #e9d88d", +"j9y c #e9d88e", +"fDB c #e9d894", +".3L c #e9d89a", +"kiC c #e9d89e", +"cEE c #e9d8ac", +"jLb c #e9d98b", +"kcV c #e9d98d", +"kic c #e9d98e", +"kmL c #e9d98f", +"jPU c #e9d990", +".3K c #e9d99d", +"hqV c #e9d9a1", +"cUj c #e9da7e", +"eux c #e9da85", +"g0l c #e9da8a", +"jic c #e9da8c", +"jSn c #e9da92", +"kyt c #e9da94", +".XM c #e9da9e", +"aFK c #e9daa3", +"kyu c #e9db95", +"gMG c #e9dba8", +"j94 c #e9dc94", +".TR c #e9dca4", +"#c7 c #e9dca6", +"jBm c #e9dcb8", +"eSB c #e9dd87", +"ftj c #e9de88", +"fWi c #e9de8a", +"eDX c #e9de8c", +"hT9 c #e9de97", +"i#Q c #e9de9f", +"a.s c #e9dea3", +"cEF c #e9deb5", +"cNI c #e9debd", +"cWp c #e9debe", +"hT8 c #e9df94", +"cAs c #e9dfb6", +"cIV c #e9dfba", +"hh4 c #e9e0b9", +"ddW c #e9e0bf", +"fr9 c #e9e0c1", +"dt8 c #e9e0c6", +"etb c #e9e0ce", +"jkO c #e9e1a6", +"#2N c #e9e1a7", +"#Dt c #e9e2aa", +"#2P c #e9e3aa", +"hem c #e9e3bb", +"cRP c #e9e4bf", +"b93 c #e9e4d3", +"f9n c #e9e5be", +"gax c #e9e5bf", +"cjz c #e9e5c9", +"iy3 c #e9e69a", +"ghu c #e9e6bf", +"f9m c #e9e6c0", +"fJD c #e9e6ca", +"bx9 c #e9e6e3", +"btU c #e9e6e4", +"f6r c #e9e7bf", +"ems c #e9e7cb", +"d0l c #e9e7ce", +"btS c #e9e7e4", +"bLT c #e9e7e5", +"dID c #e9e8cf", +"co5 c #e9e9e9", +"cpa c #e9ebec", +"atS c #e9ece6", +"emo c #e9edbe", +"ecT c #e9edc0", +"d43 c #e9eec4", +"d42 c #e9efc4", +"ecQ c #e9efc6", +"ecR c #e9f0c7", +"d4V c #e9f1c0", +"gdO c #e9f1cb", +"d9k c #e9f1d1", +"ecO c #e9f2c6", +"d9j c #e9f3d6", +"d4H c #e9f4d0", +"d4G c #e9f4d6", +"d4y c #e9f4e0", +"dEv c #e9f5ef", +"dQw c #e9f6e9", +"dIj c #e9f7eb", +"dIa c #e9f7ed", +"dIb c #e9f7ee", +"dMm c #e9f7ef", +"dMj c #e9f7f0", +"eJK c #e9f7f9", +"cIb c #e9f7fc", +"c#z c #e9f7fd", +"dIh c #e9f8ef", +"dMl c #e9f8f0", +"dMk c #e9f8f1", +"dcY c #e9f8fa", +"bDG c #e9f8fd", +"bIu c #e9f8fe", +"bWJ c #e9f8ff", +"cmZ c #e9f9ff", +"d.P c #e9faff", +"kjX c #ea923f", +"jyZ c #ea9352", +"kmj c #ea9443", +"bPS c #ea9552", +"bK4 c #ea9553", +"jyY c #ea9655", +".cE c #ea96fd", +"koB c #ea9846", +"glV c #ea985b", +"iLZ c #ea9c5b", +"gtY c #ea9d2f", +"jjV c #ea9d5b", +"jjT c #ea9d5e", +"jp4 c #ea9d5f", +"gqh c #ea9f38", +"inN c #ea9f5c", +"gIE c #ea9f5f", +"jMF c #ea9f63", +"gZE c #eaa026", +"gu# c #eaa038", +"hda c #eaa03c", +"ix0 c #eaa056", +"ilh c #eaa05e", +"jJ2 c #eaa064", +"jbj c #eaa15f", +"jd9 c #eaa161", +"jjS c #eaa164", +"g7M c #eaa22b", +"jFM c #eaa22d", +"icp c #eaa237", +"b4f c #eaa25a", +"iA0 c #eaa262", +"hU1 c #eaa264", +"jsY c #eaa265", +"kqT c #eaa350", +"iA1 c #eaa361", +"iAZ c #eaa362", +"iaX c #eaa365", +"hSK c #eaa43d", +"j.X c #eaa457", +"jj6 c #eaa45b", +"i8f c #eaa461", +"i0f c #eaa462", +"iKx c #eaa53a", +"iCo c #eaa53b", +"j30 c #eaa555", +"i3. c #eaa562", +"csZ c #eaa563", +"cFL c #eaa564", +"iCp c #eaa63b", +"i28 c #eaa663", +"iXr c #eaa664", +"idF c #eaa665", +"jv2 c #eaa66a", +"iXq c #eaa764", +"cBx c #eaa766", +"iqr c #eaa769", +"h2m c #eaa842", +"iA3 c #eaa865", +"i8e c #eaa866", +"isV c #eaa86b", +"gx1 c #eaa937", +"ik# c #eaa93c", +"iHI c #eaa93e", +"iqq c #eaaa6b", +"c7d c #eaaa6d", +"dfd c #eaaa6f", +"isT c #eaab6a", +"joU c #eaac3c", +"h5i c #eaac3d", +"iMU c #eaac3e", +"ivp c #eaac6c", +"jlJ c #eaad3c", +"i#t c #eaad3f", +"hTt c #eaad4c", +"jfv c #eaae48", +"bGf c #eaae72", +"gBO c #eaaf37", +"h5g c #eab038", +"kDd c #eab06a", +"ijE c #eab13e", +"jur c #eab141", +"cJ4 c #eab27b", +"huU c #eab33d", +"gUC c #eab34f", +"gBE c #eab53e", +"hrd c #eab63a", +"iJ7 c #eab651", +"ih. c #eab845", +"iPX c #eab84b", +"ieI c #eab947", +"iMR c #eab94c", +"kh1 c #eaba72", +"gFT c #eabb56", +"dxj c #eabd8f", +"gVy c #eabf4f", +"gjW c #eac165", +"j2n c #eac174", +"gys c #eac252", +"hJK c #eac26e", +"gu3 c #eac366", +"iFq c #eac36e", +"fSq c #eac36f", +"kHm c #eac461", +"hhh c #eac463", +"hTL c #eac467", +"e5I c #eac471", +"hS3 c #eac58d", +".gJ c #eac5ff", +"hhj c #eac66e", +"hkP c #eac67d", +"gwy c #eac6b9", +"krI c #eac760", +"iEn c #eac77b", +"hr7 c #eac781", +"kwF c #eac868", +"gR1 c #eac86e", +"fco c #eac876", +"fLN c #eac87c", +"jDG c #eac95e", +"gKe c #eac96a", +"gGr c #eac96d", +"g71 c #eac96f", +"hsd c #eac970", +"jxd c #eac97a", +"kg2 c #eac97d", +"kei c #eaca7d", +"j52 c #eaca81", +"k.5 c #eaca82", +"iKJ c #eaca88", +"jZ5 c #eacb75", +"eyg c #eacb7b", +"jJe c #eacc5c", +"jDM c #eacc5f", +"j51 c #eacc84", +"itZ c #eacd6b", +"kpx c #eacd71", +"eo1 c #eacd7b", +"eyd c #eacd7d", +"eWo c #eacd8f", +"iDh c #eacda0", +"jvx c #eace64", +"dPu c #eace76", +"ej7 c #eace7b", +"k.3 c #eace86", +"klc c #eacf64", +"klb c #eacf65", +"jy# c #eacf67", +"kgB c #eacf71", +"dDf c #eacf78", +"dDe c #eacf79", +"efw c #eacf7a", +"irk c #eacf83", +"fcq c #eacf84", +"eL2 c #eacf8b", +"knm c #ead068", +"dy2 c #ead079", +"dLq c #ead07a", +"etx c #ead07b", +"eaK c #ead07c", +"eya c #ead07d", +"eRn c #ead089", +"eG5 c #ead095", +"iW5 c #ead0ad", +"kKC c #ead16e", +"j75 c #ead172", +"kEQ c #ead173", +"dqd c #ead17a", +"efv c #ead17b", +"eys c #ead17d", +"eyr c #ead17e", +"jT1 c #ead18c", +"eLO c #ead196", +"dCu c #ead19a", +"kHy c #ead26f", +"dlH c #ead275", +"dYm c #ead27c", +"jdD c #ead28a", +"eMo c #ead298", +"e5v c #ead299", +"eeS c #ead29b", +"e9d c #ead29c", +"d2n c #ead29e", +"dse c #ead2a1", +"eky c #ead36f", +"efI c #ead371", +"kun c #ead374", +"kBM c #ead37d", +"eeT c #ead39b", +"d7e c #ead39e", +"d7g c #ead39f", +"kiH c #ead3a0", +"epp c #ead471", +"dgQ c #ead47a", +"ej2 c #ead47f", +"dx9 c #ead4a0", +"ea# c #ead4a1", +"ejk c #ead4a2", +"dnI c #ead4a5", +"dwn c #ead4a6", +"e1B c #ead57b", +"kpZ c #ead57f", +"fsA c #ead58e", +"kHg c #ead595", +"kKf c #ead596", +"dGI c #ead5a0", +"dnJ c #ead5a5", +"di5 c #ead5a8", +"i4O c #ead68b", +"gnv c #ead695", +".8i c #ead697", +"#nI c #ead69f", +"eLp c #ead6a3", +"cp3 c #ead779", +"dHf c #ead780", +"kG2 c #ead787", +"kEi c #ead789", +"i4G c #ead78c", +"jQU c #ead78e", +"#fK c #ead79b", +"cNp c #ead7aa", +"dd8 c #ead7ac", +"dr8 c #ead7ad", +"cp5 c #ead881", +"gGS c #ead88b", +"i4K c #ead892", +"fK7 c #ead895", +"d2T c #ead8a2", +"jgr c #ead8aa", +"jpI c #ead98d", +"kMA c #ead98e", +"kDV c #ead991", +"e0Y c #ead994", +"kNt c #ead997", +"kn5 c #ead9a4", +".j5 c #ead9d5", +"gx8 c #eada8c", +"gda c #eada8f", +"jZC c #eada90", +"j4q c #eada91", +"kBh c #eada92", +"fSe c #eada95", +"#aY c #eadaa0", +"#c3 c #eadaa3", +"g6v c #eadaa5", +"gSo c #eadb89", +"hk4 c #eadb8f", +"j4r c #eadb91", +"jPV c #eadb92", +".1F c #eadb9c", +"gQz c #eadba8", +"fc8 c #eadc8b", +"fBt c #eadc8c", +"kBb c #eadc95", +"giw c #eadcaa", +"cd0 c #eadd84", +"egf c #eadd86", +"eNv c #eadd88", +"eNk c #eadd8c", +"gcS c #eadd90", +"gKu c #eadd98", +"ivQ c #eadda7", +"eIR c #eade89", +"gvj c #eade98", +"jw8 c #eadea2", +"aBl c #eadea5", +"aBk c #eadea7", +"gIS c #eadeab", +"flJ c #eadf8e", +"cEH c #eadfb7", +"cwj c #eadfb8", +"#dg c #eae0a5", +"#Ze c #eae0a9", +"cEG c #eae0b8", +"cI0 c #eae0b9", +"iQM c #eae193", +"kNo c #eae1a3", +"cNh c #eae1b9", +"dpA c #eae1c6", +"hWT c #eae29c", +"aBz c #eae2ab", +"d3L c #eae38c", +"dTn c #eae3cf", +"gaB c #eae5b5", +"bVp c #eae5d5", +"bCg c #eae5d8", +"gdS c #eae7c0", +"f3j c #eae7c2", +"bxX c #eae7e5", +"iEM c #eae89c", +"d5g c #eae8c7", +"fNj c #eae8cc", +"c8. c #eae8e3", +"ddI c #eae9cf", +"dAq c #eae9d0", +"drG c #eae9d1", +"dgm c #eae9e8", +"ehu c #eaeabe", +"dda c #eaeacc", +"d0k c #eaead2", +"cgO c #eaeae8", +"ah5 c #eaebe5", +"iz1 c #eaecbb", +"eht c #eaecc1", +"d9s c #eaefbf", +"dvR c #eaefdf", +"ehs c #eaf0c6", +"d9O c #eaf0cb", +"ecP c #eaf1c7", +"d9M c #eaf1c8", +"d9y c #eaf2c1", +"d9e c #eaf4df", +"d9f c #eaf6e0", +"d9g c #eaf6e1", +"dQq c #eaf6e8", +"dIc c #eaf8ef", +"dIg c #eaf8f0", +"ciz c #eaf8ff", +"cm0 c #eaf9ff", +"cQW c #eafaff", +"dc0 c #eafbff", +".#0 c #eb50ea", +".#T c #eb50eb", +"kmi c #eb9442", +"bUA c #eb9651", +"iL1 c #eb9652", +"b89 c #eb9653", +".cG c #eb96ff", +"gtm c #eb9859", +"jta c #eb9959", +"khI c #eb9a45", +"kjY c #eb9b49", +"cgm c #eb9b57", +"jm4 c #eb9c5d", +"bZq c #eb9d56", +"jm3 c #eb9d5f", +"jgY c #eb9e5e", +"hX7 c #eb9f5e", +"jp3 c #eb9f62", +"jsX c #eb9f63", +"jm2 c #eba064", +"jxE c #eba130", +"gqi c #eba13b", +"jkc c #eba15c", +"jv1 c #eba165", +"jEs c #eba166", +"gt0 c #eba237", +"jBC c #eba267", +"iCi c #eba337", +"j.L c #eba361", +"h4f c #eba364", +"b4b c #eba366", +"jjR c #eba367", +"jyJ c #eba368", +"ijs c #eba43b", +"gu. c #eba43c", +"h2l c #eba43d", +"i8g c #eba461", +"iXt c #eba462", +"iiK c #eba463", +"jEw c #eba465", +"idH c #eba466", +"jHg c #eba469", +"hPE c #eba533", +"iwJ c #eba539", +"iDS c #eba560", +"inO c #eba562", +"i0g c #eba563", +"h2k c #eba63b", +"iGx c #eba65a", +"i5K c #eba663", +"iUz c #eba664", +"jBE c #eba668", +"iaY c #eba669", +"ijC c #eba737", +"jbE c #eba75c", +"iDU c #eba761", +"i29 c #eba763", +"iUy c #eba764", +"igb c #eba765", +"jyL c #eba76c", +"jA. c #eba836", +"gFb c #eba83e", +"kcj c #eba85e", +"i0e c #eba864", +"i27 c #eba865", +"iLT c #eba866", +"iqm c #eba867", +"jEv c #eba86c", +"gAV c #eba86f", +"gFh c #eba930", +"iey c #eba93b", +"j80 c #eba95c", +"k#B c #eba95d", +"ke6 c #eba961", +"iDV c #eba963", +"iXp c #eba965", +"inP c #eba966", +"iOQ c #eba967", +"i8d c #eba968", +"i8c c #eba969", +"gw9 c #eba96d", +"b87 c #eba96e", +"gBw c #ebaa34", +"iEV c #ebaa40", +"iDW c #ebaa66", +"i5I c #ebaa69", +"gGg c #ebab32", +"iqn c #ebab6a", +"joV c #ebac39", +"inQ c #ebac6a", +"iGA c #ebad5e", +"isR c #ebad6e", +"glT c #ebad73", +"hB8 c #ebae37", +"iqp c #ebae6d", +"jxB c #ebaf32", +"gmy c #ebaf40", +"hFu c #ebb03a", +"ien c #ebb03f", +"ckC c #ebb169", +"ick c #ebb241", +"bAP c #ebb27c", +"jit c #ebb333", +"h5h c #ebb33c", +"ibx c #ebb34c", +"kLS c #ebb36e", +"ho. c #ebb447", +"bTB c #ebb47d", +"gFy c #ebb63c", +"jl. c #ebb652", +"joo c #ebb656", +"cxg c #ebb781", +"jlu c #ebb841", +"cOl c #ebb884", +"ibZ c #ebba46", +"iJ1 c #ebbb51", +"iEs c #ebbb52", +"kke c #ebbb73", +"cBs c #ebbb87", +"iHc c #ebbc53", +"gw4 c #ebbc8d", +"iMW c #ebbd57", +"cXF c #ebbd8b", +"gRw c #ebbe68", +".f5 c #ebbfff", +"gB8 c #ebc15f", +"hvS c #ebc163", +"hGk c #ebc371", +"g7T c #ebc372", +"gZU c #ebc460", +"h5z c #ebc566", +"gOc c #ebc665", +"hQD c #ebc669", +"eRI c #ebc66e", +"fw7 c #ebc676", +"ku. c #ebc760", +"hCV c #ebc779", +"gfq c #ebc788", +"hN# c #ebc86d", +"jXK c #ebc86e", +"hQE c #ebc86f", +"fcl c #ebc876", +"iTp c #ebc982", +"hdB c #ebca6f", +"gVW c #ebca70", +"hkW c #ebca72", +"kbv c #ebca7d", +"krF c #ebcb6d", +"h#R c #ebcb71", +"keh c #ebcb7d", +"kgX c #ebcb7f", +"hox c #ebcc73", +"eMA c #ebcc7b", +"kgW c #ebcc7f", +"e1k c #ebcc83", +"kt6 c #ebcd6f", +"g7K c #ebcd73", +"jCK c #ebcd88", +"ine c #ebcda6", +"j7y c #ebce77", +"ej5 c #ebce7a", +"etA c #ebce7e", +"jA1 c #ebcf61", +"jNv c #ebcf78", +"efg c #ebcf7f", +"eCY c #ebcf81", +"dDg c #ebd07a", +"eoZ c #ebd07b", +"epg c #ebd07c", +"eo2 c #ebd07f", +"ej8 c #ebd080", +"eCP c #ebd086", +"eL1 c #ebd08a", +"jzT c #ebd092", +"fcd c #ebd099", +"gfo c #ebd09b", +"kpG c #ebd169", +"krR c #ebd16a", +"kgx c #ebd16e", +"dlJ c #ebd178", +"dlK c #ebd179", +"dlL c #ebd17a", +"dPv c #ebd17c", +"eaL c #ebd17d", +"jMj c #ebd18b", +"fce c #ebd199", +"fcc c #ebd19a", +"jmo c #ebd267", +"jpr c #ebd273", +"j5I c #ebd277", +"dgT c #ebd278", +"dgU c #ebd27a", +"dqe c #ebd27b", +"dLr c #ebd27c", +"etw c #ebd27d", +"eaJ c #ebd27e", +"ey# c #ebd280", +"e1b c #ebd291", +"eLN c #ebd298", +"eeU c #ebd299", +"eox c #ebd29a", +"fcb c #ebd29b", +"eQv c #ebd29d", +"kB0 c #ebd36f", +"kBZ c #ebd370", +"kKv c #ebd371", +"kEU c #ebd374", +"dlI c #ebd377", +"dqc c #ebd378", +"duH c #ebd37b", +"dlM c #ebd37c", +"hhn c #ebd38a", +"e1c c #ebd38d", +"ejE c #ebd39a", +"es7 c #ebd39b", +"eeR c #ebd39c", +"eeQ c #ebd39d", +"eQu c #ebd39e", +"deC c #ebd3ac", +"kdZ c #ebd475", +"dbL c #ebd478", +"i9# c #ebd47d", +"fLX c #ebd48b", +"ggl c #ebd48c", +"e02 c #ebd49b", +"ejD c #ebd49c", +"ejC c #ebd49d", +"e0e c #ebd49e", +"d7h c #ebd4a0", +"dNb c #ebd4a6", +"dAK c #ebd4a8", +"dbK c #ebd578", +"e91 c #ebd596", +"dXI c #ebd5a0", +"dCp c #ebd5a4", +"ds. c #ebd5a6", +"dEX c #ebd5a8", +"jXB c #ebd5b3", +"k.k c #ebd67b", +"imh c #ebd684", +"i9V c #ebd68c", +"f4T c #ebd694", +"krC c #ebd699", +"ds# c #ebd6a6", +"dsa c #ebd6a8", +"dI5 c #ebd6ab", +"j1j c #ebd6b8", +"hz0 c #ebd78b", +"iQY c #ebd78e", +"jjv c #ebd794", +"dr7 c #ebd7ac", +"jpx c #ebd881", +"ktN c #ebd884", +"izd c #ebd887", +"iWl c #ebd88d", +"kq# c #ebd895", +"#.F c #ebd898", +"cED c #ebd8ad", +"jXE c #ebd983", +"hJN c #ebd989", +"fsu c #ebd98f", +"iFw c #ebd990", +"iND c #ebd996", +".RX c #ebd99b", +"g8M c #ebd9b2", +"f2e c #ebda86", +"kJr c #ebda8f", +"irW c #ebda93", +"kaA c #ebdaa4", +"i5# c #ebdaaf", +"ey9 c #ebdb85", +"jwG c #ebdb87", +"ky4 c #ebdb8f", +"kkt c #ebdb90", +"j6W c #ebdb91", +".Gc c #ebdba2", +"iwG c #ebdc7c", +"hZR c #ebdc8b", +"kPF c #ebdc8f", +"ggW c #ebdc91", +"jXe c #ebdc92", +"j10 c #ebdc93", +"i#0 c #ebdc98", +"eSA c #ebdd89", +"kBa c #ebdd96", +"hLX c #ebdda2", +"i87 c #ebddaa", +"hsk c #ebde96", +"kB# c #ebde97", +"gCQ c #ebde9a", +"ktZ c #ebdf94", +"gSa c #ebdf9a", +"kjz c #ebdfa9", +"gBd c #ebdfac", +"gE2 c #ebdfad", +"haz c #ebdfb8", +"eL3 c #ebdfc0", +"gtB c #ebe0ad", +"j.k c #ebe0c7", +"gBc c #ebe1af", +"hh5 c #ebe1bb", +"crZ c #ebe1bc", +"c5V c #ebe1c1", +"bRD c #ebe294", +"d.U c #ebe2c1", +"dt7 c #ebe2c7", +"#2K c #ebe4a9", +"#Vt c #ebe4ad", +"eQ4 c #ebe4d3", +"b0f c #ebe5d3", +"b94 c #ebe6d5", +"bU8 c #ebe6d9", +"bG1 c #ebe6da", +"d90 c #ebe7bd", +"hel c #ebe7bf", +"fZ3 c #ebe7c4", +"gdR c #ebe9c3", +"btX c #ebe9e6", +"dCL c #ebe9e8", +"f9o c #ebeac3", +"d.B c #ebead1", +"d9Y c #ebead2", +"bG4 c #ebeae9", +"dMS c #ebebd2", +"diH c #ebebd3", +"ecU c #ebecbf", +"d9S c #ebecc1", +"dAj c #ebeee0", +"aZg c #ebf092", +"d9t c #ebf1c1", +"d9N c #ebf1cb", +"d4U c #ebf2c1", +"d9x c #ebf3c2", +"d4I c #ebf4cf", +"dQp c #ebf4e3", +"dZS c #ebf5d4", +"dZR c #ebf5d7", +"cQT c #ebf5f8", +"d4F c #ebf6dd", +"d9i c #ebf6de", +"dZI c #ebf6e6", +"d9h c #ebf7e1", +"dQs c #ebf7eb", +"dQv c #ebf7ef", +"dQr c #ebf8ec", +"dId c #ebf8ee", +"dIe c #ebf8ef", +"bWR c #ebf8fd", +"b1I c #ebf8fe", +"cmU c #ebf8ff", +"dIf c #ebf9f1", +"cRv c #ebf9fe", +"ciD c #ebf9ff", +"cvn c #ebfaff", +"c9J c #ebfbff", +"jBR c #ec9655", +"geL c #ec995d", +".er c #ec9acd", +"gij c #ec9b5e", +"jjU c #ec9e5d", +"gMu c #ec9e5f", +"ke3 c #ec9f47", +"jnj c #eca05b", +"iqk c #eca05c", +"gER c #eca05f", +"jBF c #eca160", +"jPb c #eca164", +"isN c #eca25d", +"iql c #eca260", +"i0i c #eca261", +"jsV c #eca267", +"jm6 c #eca361", +"jHf c #eca369", +"it2 c #eca438", +"hSL c #eca43b", +"ilg c #eca461", +"dF9 c #eca463", +"h1a c #eca465", +"hOy c #eca466", +"jJ3 c #eca469", +"hVK c #eca539", +"j.K c #eca562", +"i0h c #eca563", +"jyM c #eca566", +"gif c #eca569", +"jEu c #eca56a", +"jyK c #eca56b", +"jxl c #eca631", +"ijv c #eca63e", +"i8h c #eca663", +"iUA c #eca664", +"jWN c #eca669", +"iwN c #eca73a", +"izE c #eca73b", +"i3# c #eca764", +"iAY c #eca765", +"jea c #eca766", +"jHi c #eca769", +"iiN c #eca76a", +"jWM c #eca76b", +"hPA c #eca83e", +"gt7 c #eca840", +"jbm c #eca865", +"iiJ c #eca866", +"jZ. c #eca86a", +"h94 c #eca86b", +"ige c #eca86c", +"jEt c #eca86e", +"gBz c #eca934", +"gxR c #eca93d", +"iRO c #eca966", +"iLS c #eca967", +"iya c #eca968", +"iqs c #eca96b", +"jJ5 c #eca96c", +"idI c #eca96d", +"iHR c #ecaa3f", +"iEU c #ecaa40", +"iDT c #ecaa62", +"iOM c #ecaa66", +"i26 c #ecaa67", +"i5H c #ecaa6b", +"dkb c #ecaa6c", +"jd8 c #ecaa6d", +"ilk c #ecaa6f", +"i8b c #ecab6a", +"iy# c #ecab6b", +"jHh c #ecab6f", +"gBF c #ecac3b", +"jIL c #ecac42", +"kml c #ecac62", +"gFz c #ecad37", +"iEW c #ecad43", +"kxZ c #ecad5e", +"jbz c #ecad60", +"jeu c #ecad61", +"iqo c #ecad6b", +"isQ c #ecad6e", +"inR c #ecad6f", +"dad c #ecad70", +"isS c #ecae6d", +"juL c #ecaf33", +"hyu c #ecb040", +"cbN c #ecb078", +"gFp c #ecb23b", +"hn9 c #ecb23d", +"i6R c #ecb333", +"hzi c #ecb341", +"gqe c #ecb351", +"iPS c #ecb438", +"gCv c #ecb442", +"ihz c #ecb443", +"jWH c #ecb472", +"gKc c #ecb641", +"hnv c #ecb647", +"j6B c #ecb66d", +"gVw c #ecb84e", +"bxx c #ecb882", +"jru c #ecb94c", +"iCf c #ecb953", +"i.9 c #ecbb45", +"jiy c #ecbb48", +"iJ8 c #ecbb55", +"bYv c #ecbb86", +"ig9 c #ecbc45", +"ibY c #ecbc46", +"iHd c #ecbc52", +"iPU c #ecbc53", +"cST c #ecbc89", +"ieH c #ecbd47", +"gF3 c #ecbd60", +"h74 c #ecbd63", +"kmA c #ecbd76", +"cFI c #ecbd8a", +"cJ3 c #ecc08e", +"gnc c #ecc165", +"cSS c #ecc191", +"f5d c #ecc26a", +"cFH c #ecc292", +"hvR c #ecc361", +"cJ2 c #ecc393", +"hhg c #ecc460", +"kAl c #ecc47d", +"cOj c #ecc494", +"jUl c #ecc590", +"hkU c #ecc664", +"h#Q c #ecc763", +"gVU c #ecc764", +"fgy c #ecc772", +"gRZ c #ecc865", +"g3S c #ecc867", +"ie1 c #ecc869", +"ifW c #ecc897", +"fkJ c #ecc979", +"kwJ c #ecca62", +"kt7 c #ecca6a", +"hJS c #ecca70", +"jZ7 c #ecca71", +"foT c #ecca76", +"guL c #eccb48", +"kzf c #eccb64", +"hY9 c #eccb9d", +"kpy c #eccc6a", +"jXy c #eccc8b", +"iyI c #eccd82", +"jDJ c #ecce5f", +"jAV c #ecce64", +"eWA c #ecce7f", +"keg c #ecce82", +"g3o c #ecce84", +"kpv c #eccf78", +"k#n c #eccf9d", +"kKN c #ecd061", +"kEA c #ecd070", +"efh c #ecd080", +"jya c #ecd166", +"kpU c #ecd167", +"etB c #ecd180", +"efi c #ecd181", +"kbA c #ecd189", +"fgq c #ecd19a", +"jmp c #ecd268", +"dPs c #ecd27b", +"duI c #ecd27c", +"d7U c #ecd27e", +"etW c #ecd27f", +"eo3 c #ecd282", +"kbB c #ecd28a", +"fcj c #ecd28b", +"eG4 c #ecd299", +"fca c #ecd29a", +"fkB c #ecd29b", +"knl c #ecd36c", +"k.d c #ecd374", +"kaR c #ecd376", +"dLp c #ecd37c", +"dy1 c #ecd37d", +"d27 c #ecd37e", +"d26 c #ecd37f", +"etQ c #ecd380", +"etv c #ecd382", +"eDg c #ecd383", +"jIo c #ecd387", +"h.B c #ecd392", +"igI c #ecd395", +"es8 c #ecd39b", +"exE c #ecd39c", +"eLH c #ecd39d", +"eGW c #ecd39e", +"kQ0 c #ecd470", +"kd0 c #ecd476", +"klv c #ecd477", +"k.I c #ecd478", +"dLo c #ecd47b", +"duG c #ecd47d", +"efc c #ecd47e", +"dy3 c #ecd480", +"f1C c #ecd493", +"e5C c #ecd495", +"eRs c #ecd49a", +"eow c #ecd49c", +"dy# c #ecd49d", +"eCg c #ecd49e", +"d2m c #ecd4a0", +"kB8 c #ecd574", +"klm c #ecd576", +"kpK c #ecd577", +"k.E c #ecd578", +"j8a c #ecd57c", +"dgV c #ecd57e", +"jt2 c #ecd585", +"eDd c #ecd587", +"gbO c #ecd58a", +"kFv c #ecd58f", +"fgs c #ecd593", +"gqI c #ecd595", +"kRo c #ecd597", +"fch c #ecd599", +"eHU c #ecd59c", +"eov c #ecd59d", +"eou c #ecd59e", +"e0d c #ecd5a0", +"kzm c #ecd66f", +"knp c #ecd676", +"dbM c #ecd67d", +"dg1 c #ecd683", +"i#A c #ecd68a", +"kgj c #ecd694", +"dkM c #ecd69d", +"ejB c #ecd69f", +"eeO c #ecd6a2", +"e#0 c #ecd6a4", +"e#1 c #ecd6a5", +"dCn c #ecd6a6", +"dIW c #ecd6a8", +"dAL c #ecd6a9", +"dRm c #ecd6aa", +"dI4 c #ecd6ab", +"kQO c #ecd770", +"kaW c #ecd77a", +"j73 c #ecd77b", +"fVg c #ecd792", +"eG7 c #ecd7a4", +"dGD c #ecd7a7", +"dwo c #ecd7a8", +"dEY c #ecd7a9", +"dIY c #ecd7aa", +"dr6 c #ecd7ab", +"dI6 c #ecd7ad", +"c6x c #ecd7b1", +"jdi c #ecd88d", +"eLR c #ecd898", +"eoa c #ecd8a3", +"dIV c #ecd8aa", +"dd5 c #ecd8ac", +"dwk c #ecd8af", +"iFT c #ecd8b0", +"if. c #ecd985", +"kEf c #ecd989", +"k.P c #ecd98c", +"i1X c #ecd98e", +"fwx c #ecd990", +"kjw c #ecd9a4", +"exm c #ecd9a6", +"dOX c #ecd9b5", +"kBC c #ecda89", +"gE8 c #ecda8d", +"eWf c #ecda8f", +"gGm c #ecda99", +".8h c #ecda9d", +"daI c #ecdaad", +"c1k c #ecdaaf", +"hNE c #ecdb91", +"jn5 c #ecdb93", +"fAm c #ecdb96", +"jmF c #ecdb97", +"kdy c #ecdb9f", +"giW c #ecdba1", +"cUn c #ecdc87", +"kJs c #ecdc90", +"kmM c #ecdc91", +"kku c #ecdc92", +"kv9 c #ecdc93", +"i7C c #ecdc94", +".TT c #ecdca2", +"jEd c #ecdcad", +"fpF c #ecdd8b", +"kwe c #ecdd94", +"ifr c #ecdd99", +"kNw c #ecdd9e", +"iEf c #ecdd9f", +".R4 c #ecdda3", +"cW4 c #ecddba", +"eXs c #ecde8b", +"kz. c #ecde92", +"jNh c #ecde94", +"j4p c #ecde97", +"jvd c #ecdea2", +"hBU c #ecdea4", +"ku7 c #ecdea8", +"g2v c #ecdeab", +"j9J c #ecdf95", +"kGr c #ecdf97", +"kDI c #ecdf98", +".ZC c #ecdfa2", +"#.v c #ecdfa3", +".NN c #ecdfa4", +"fWj c #ece08b", +"f2D c #ece08e", +".ZD c #ece0a3", +"#fR c #ece0a5", +"cAp c #ece0b8", +"kp9 c #ece1a9", +"#Zb c #ece2aa", +"gxn c #ece2b0", +"jdX c #ece2b7", +"d.3 c #ece2bb", +"b6j c #ece38d", +"iCz c #ece398", +"#6t c #ece4aa", +"#2L c #ece4ab", +"#Vs c #ece4ad", +"#RX c #ece4ae", +"dk0 c #ece4c8", +".nS c #ece549", +"jhP c #ece5ab", +"bCk c #ece5cd", +"b49 c #ece6d2", +"bQs c #ece6d4", +"b48 c #ece7d5", +"iBQ c #ece89a", +"f6p c #ece9c4", +"gay c #eceac4", +"d.A c #ecead1", +"dyv c #eceae9", +"ecV c #ecebbf", +"g8H c #ecebca", +"dyu c #ecebeb", +"b97 c #ecebec", +"dm7 c #ecedd1", +"diG c #ecedd5", +"d44 c #ecf0cc", +"goM c #ecf1c9", +"dMC c #ecf1e6", +"d9u c #ecf2c3", +"gl. c #ecf2c8", +"d4T c #ecf3c2", +"d9w c #ecf3c3", +"dZQ c #ecf6dd", +"d4E c #ecf7e0", +"d4D c #ecf7e1", +"dVg c #ecf7e8", +"cmV c #ecf8ff", +"cIH c #ecf9fe", +"ceb c #ecf9ff", +"cVy c #ecfaff", +"cDV c #ecfbff", +".b3 c #ed8efe", +"khH c #ed9943", +"jEG c #ed9b57", +"bZp c #ed9c56", +"b4d c #ed9d56", +"cbQ c #ed9e57", +"jsW c #eda267", +"jRQ c #eda366", +"jp1 c #eda368", +"jFO c #eda433", +"jqe c #eda45f", +"inM c #eda460", +"iLY c #eda462", +"gBx c #eda52f", +"ke4 c #eda552", +"isO c #eda562", +"jRR c #eda568", +"juO c #eda62f", +"ijw c #eda63f", +"jsZ c #eda664", +"dX# c #eda666", +"jPd c #eda66a", +"khJ c #eda756", +"coI c #eda763", +"dth c #eda767", +"jJ6 c #eda769", +"jPc c #eda76b", +"jm1 c #eda76e", +"hd# c #eda838", +"ijt c #eda83d", +"iju c #eda83e", +"i5L c #eda864", +"jbn c #eda865", +"iRS c #eda867", +"ill c #eda86b", +"jBD c #eda86e", +"joB c #eda938", +"gt9 c #eda941", +"jne c #eda961", +"iAR c #eda962", +"jef c #eda967", +"iOR c #eda968", +"h7c c #eda96c", +"jMG c #eda96e", +"iCm c #edaa3f", +"iiI c #edaa65", +"iRN c #edaa67", +"cFN c #edaa68", +"isP c #edaa6a", +"igf c #edaa6e", +"gKa c #edab2a", +"iKy c #edab3e", +"gI4 c #edab41", +"iUx c #edab67", +"iLR c #edab68", +"cJ8 c #edab69", +"cOp c #edab6a", +"iaZ c #edab6f", +"h4e c #edab70", +"iRM c #edac68", +"i25 c #edac6a", +"ivo c #edac6b", +"cXJ c #edac6c", +"hX6 c #edac6d", +"c2w c #edac6e", +"jJ4 c #edac71", +"jJ1 c #edac74", +"g3G c #edad32", +"jAr c #edad34", +"iHJ c #edad41", +"jbl c #edad6d", +"i5G c #edad6e", +"jMH c #edad70", +"jgX c #edad72", +"hR6 c #edad73", +"hSJ c #edae41", +"i56 c #edae5c", +"j.I c #edae6d", +"dfe c #edae71", +"bUx c #edae73", +"iLM c #edaf6b", +"iEX c #edb045", +"h1# c #edb075", +"h5f c #edb138", +"ijD c #edb13e", +"iGC c #edb167", +"jbi c #edb173", +"bol c #edb37c", +"iEw c #edb44b", +"hCq c #edb535", +"gJc c #edb53b", +"hYI c #edb54f", +"kOY c #edb772", +"bfx c #edb781", +"iSC c #edb843", +"guf c #edb844", +"h1U c #edb864", +"cgj c #edb882", +".fr c #edb8ff", +"gVc c #edb935", +"gFk c #edb93f", +"jxw c #edb947", +"i1q c #edba45", +"jJX c #edba7d", +"iMS c #edbb4b", +"gNo c #edbc3d", +"jlw c #edbc46", +"i6U c #edbc52", +"gRj c #edbd43", +"iCb c #edbd59", +"iSI c #edbe44", +"hCJ c #edbe5d", +"ckw c #edbe8b", +"ieG c #edbf47", +"iEt c #edbf55", +"gJh c #edc045", +"kPi c #edc07a", +"coE c #edc08d", +"cOk c #edc191", +"csV c #edc291", +"hr6 c #edc368", +"cXE c #edc392", +"gIr c #edc3b6", +"hsb c #edc464", +"gyh c #edc468", +"cBr c #edc493", +"gIs c #edc4b7", +"ggd c #edc56a", +"hrf c #edc65c", +"hdz c #edc662", +"hov c #edc665", +"hCU c #edc666", +"iw6 c #edc66d", +"cSR c #edc696", +"iH6 c #edc771", +"gfr c #edc77e", +"izT c #edc869", +"j0# c #edc86b", +"g7Z c #edc967", +"jWK c #edc995", +"f5e c #edca72", +"kOg c #edca79", +"jov c #edcb6f", +"hzu c #edcb73", +"eRE c #edcb7a", +"kLB c #edcb89", +"imU c #edcc6d", +"hC2 c #edcc74", +"hvL c #edcc87", +"kBR c #edcd67", +"kEC c #edcd69", +"kKj c #edcd6a", +"icD c #edcd6e", +"iFV c #edcda3", +"jAW c #edce63", +"kee c #edce80", +"isD c #edce9a", +"hV2 c #edce9e", +"k.6 c #edcf88", +"kbE c #edd088", +"kzG c #edd161", +"kNE c #edd26c", +"eff c #edd285", +"eCl c #edd299", +"kdI c #edd36a", +"k.m c #edd36e", +"dTS c #edd37e", +"d7V c #edd380", +"eHO c #edd386", +"kbC c #edd38a", +"e93 c #edd38b", +"eQD c #edd398", +"eCm c #edd39a", +"foI c #edd39c", +"ixJ c #edd3ab", +"kiL c #edd476", +"eyA c #edd47d", +"eDj c #edd47f", +"eaI c #edd480", +"eDh c #edd481", +"ey. c #edd484", +"eRA c #edd48a", +"eWs c #edd48c", +"es9 c #edd49c", +"eCh c #edd49e", +"eGX c #edd49f", +"kpF c #edd56e", +"kgA c #edd575", +"ki4 c #edd576", +"duF c #edd57b", +"dDc c #edd57c", +"dDd c #edd57d", +"dy0 c #edd57e", +"i6C c #edd57f", +"d7T c #edd580", +"dTT c #edd581", +"ej4 c #edd582", +"eDf c #edd586", +"eH7 c #edd587", +"eCO c #edd58b", +"eWp c #edd598", +"hyp c #edd59a", +"eQC c #edd59b", +"exF c #edd59d", +"fkA c #edd59e", +"eCf c #edd59f", +"eGV c #edd5a0", +"kw5 c #edd66e", +"kzp c #edd670", +"kut c #edd676", +"etZ c #edd67b", +"dyY c #edd67d", +"dyZ c #edd67e", +"iEF c #edd67f", +"eaH c #edd681", +"eyx c #edd686", +"eDe c #edd687", +"eMO c #edd688", +"knX c #edd68f", +"jWr c #edd691", +"eHD c #edd694", +"e5u c #edd69d", +"fgr c #edd69e", +"eot c #edd69f", +"es6 c #edd6a0", +"d7d c #edd6a3", +"e#Z c #edd6a5", +"dsd c #edd6a6", +"kKI c #edd775", +"kbd c #edd779", +"c8N c #edd77a", +"j7X c #edd77c", +"dlU c #edd77f", +"eoX c #edd784", +"jaO c #edd785", +"iBY c #edd786", +"f8a c #edd793", +"eWk c #edd799", +"e03 c #edd79d", +"e9X c #edd79e", +"fcf c #edd79f", +"es5 c #edd7a2", +"ejA c #edd7a3", +"dCo c #edd7a7", +"dGC c #edd7a8", +"dsb c #edd7aa", +"heo c #edd7af", +"kIx c #edd7b1", +"jXz c #edd7b8", +"kwO c #edd871", +"kzx c #edd878", +"kB7 c #edd87a", +"kzv c #edd87b", +"j5o c #edd87d", +"kbf c #edd87f", +"jTQ c #edd88c", +"fo2 c #edd88d", +"fv1 c #edd89b", +"#kV c #edd8a0", +"gm1 c #edd8a2", +"jgO c #edd8a6", +"e#2 c #edd8a7", +"dGA c #edd8a8", +"dIZ c #edd8ab", +"dI0 c #edd8ac", +"dE4 c #edd8ae", +"efH c #edd97e", +"g4p c #edd989", +"jvf c #edd992", +"fv2 c #edd99b", +"e#T c #edd9a8", +"exv c #edd9a9", +"dN. c #edd9ac", +"dAJ c #edd9af", +"dRr c #edd9b0", +".jo c #edd9e4", +"kpM c #edda7e", +"jdh c #edda8e", +"i7n c #edda8f", +"hsL c #edda90", +"#aX c #edda9b", +"#D3 c #eddaa1", +"#HC c #eddaa2", +"dIX c #eddaae", +"kBy c #eddb85", +"izc c #eddb8b", +"jVL c #eddb8c", +"gD. c #eddb8e", +"kNc c #eddb8f", +"iQG c #eddb91", +"fOP c #eddb97", +".P4 c #eddb9c", +"dnE c #eddbb3", +"i07 c #eddc8a", +"kBD c #eddc91", +"jI5 c #eddc92", +"jve c #eddc9a", +"dTl c #eddcba", +"fPF c #eddd8f", +"j11 c #eddd93", +"jLa c #eddd94", +"jLJ c #eddd9f", +"d0p c #edddb0", +"dNh c #edddb7", +"jzu c #edde8a", +"kid c #edde92", +"j9z c #edde93", +"jUV c #edde95", +"kMr c #edde96", +"#fU c #eddea3", +"c57 c #eddeb6", +"kbY c #eddeb7", +"kDK c #eddf94", +"kDU c #eddf95", +"kDJ c #eddf96", +"jPW c #eddf97", +"kJg c #eddf98", +"#c4 c #eddfa6", +"cJm c #eddfba", +"j4H c #ede098", +".8c c #ede0a3", +".3G c #ede0a5", +"cIZ c #ede0b9", +"f2f c #ede18a", +"fZq c #ede18e", +"j.m c #ede1c2", +"h0e c #ede29c", +"gpR c #ede2b0", +"gE3 c #ede3b0", +"cAk c #ede3c2", +"bH7 c #ede58c", +"i7q c #ede591", +"#6p c #ede5ab", +"dpE c #ede5cb", +"bCm c #ede5ce", +"emw c #ede6bb", +"bVo c #ede6d2", +"eeX c #ede6d6", +"bGR c #ede7d4", +"cjA c #ede8c5", +"eQR c #ede8d5", +"bQp c #ede8d7", +"eQS c #ede8d8", +"eJW c #ede9c9", +"iwl c #edea9b", +"dgg c #edeadd", +"dM0 c #edebce", +"bG6 c #edebe9", +"d9T c #edecc1", +"d9U c #edecc2", +"gdT c #edecc6", +"ecW c #edecc7", +"drt c #edecd5", +"bQJ c #edecea", +"dtZ c #ededec", +"d48 c #edeec7", +"gk9 c #edeec8", +"ehv c #edeeca", +"d5d c #edeed6", +"d0# c #edf0c6", +"d47 c #edf0cd", +"diy c #edf0d6", +"d0. c #edf1c6", +"dnf c #edf1d8", +"a1E c #edf1eb", +"gSS c #edf2d1", +"d4S c #edf3c3", +"d9v c #edf3c4", +"d4J c #edf4ce", +"dZT c #edf5d3", +"goH c #edf6d4", +"dZP c #edf6e1", +"dZO c #edf6e2", +"d4B c #edf6e3", +"dQJ c #edf6e8", +"d4C c #edf7e2", +"cH9 c #edf7fb", +"b6B c #edf9fd", +"bDH c #edf9fe", +"cmX c #edf9ff", +"ciF c #edfaff", +"cDU c #edfbff", +"dcX c #edfcff", +"kjW c #ee9744", +"jEH c #ee9855", +"jBQ c #ee9c59", +"jw# c #ee9c5b", +"i0B c #ee9e52", +"gpA c #ee9e5e", +"gxa c #ee9f5e", +"glY c #eea05f", +"jm5 c #eea260", +"iXP c #eea353", +"ivk c #eea35a", +"isM c #eea35c", +"ivl c #eea35d", +"gBQ c #eea431", +"iUF c #eea464", +"gtZ c #eea535", +"jp2 c #eea56a", +"izy c #eea73a", +"ijp c #eea742", +"jbo c #eea765", +"jHj c #eea768", +"jWO c #eea769", +"jv0 c #eea76d", +"kch c #eea853", +"i8i c #eea865", +"jm0 c #eea86f", +"dBS c #eea967", +"iOS c #eea969", +"doP c #eea96b", +"gAX c #eea96d", +"iwM c #eeaa3c", +"jj7 c #eeaa60", +"cBw c #eeaa67", +"kth c #eeaa69", +"j86 c #eeaa6a", +"kL3 c #eeaa6b", +"inS c #eeaa6c", +"idJ c #eeaa6e", +"imF c #eeab3c", +"cbS c #eeab63", +"ilf c #eeab65", +"ivn c #eeab68", +"iLU c #eeab69", +"cSX c #eeab6a", +"h95 c #eeab6e", +"gAW c #eeab6f", +"gxW c #eeac3e", +"iF. c #eeac40", +"jbk c #eeac69", +"jeb c #eeac6b", +"jRS c #eeac6f", +"gxL c #eead3c", +"k#A c #eead5e", +"kci c #eead5f", +"i0d c #eead68", +"i0c c #eead6a", +"iAX c #eead6b", +"i24 c #eead6d", +"gJa c #eeae2f", +"gBV c #eeae3a", +"j1u c #eeae60", +"iXo c #eeae68", +"iRL c #eeae69", +"dkc c #eeae70", +"jPe c #eeae72", +"jxj c #eeaf3b", +"gt1 c #eeaf3f", +"ijn c #eeaf4a", +"iOL c #eeaf6a", +"jRT c #eeaf71", +"gxX c #eeb03c", +"j6l c #eeb05d", +"coK c #eeb06c", +"i23 c #eeb072", +"iGB c #eeb164", +"kj0 c #eeb169", +"ivc c #eeb16a", +"h2j c #eeb23d", +"hYL c #eeb23f", +"iEY c #eeb247", +"gpx c #eeb277", +"h7b c #eeb37a", +"gtQ c #eeb440", +"iMJ c #eeb445", +"jWX c #eeb469", +"iGe c #eeb46c", +"jlA c #eeb535", +"giO c #eeb53b", +"hkv c #eeb53e", +"gM1 c #eeb634", +"icl c #eeb644", +"gGh c #eeb742", +"kIL c #eeb773", +"jO8 c #eeb77b", +"jxz c #eeb842", +"iMT c #eeb848", +"hUM c #eeb881", +"hCp c #eeb942", +"juq c #eeb949", +"gRh c #eeba41", +"io3 c #eeba47", +"iGa c #eeba7b", +"jAn c #eebc4c", +"jld c #eebc52", +"gZ. c #eebd35", +"i.8 c #eebd44", +"jcN c #eebe46", +"iEv c #eebf56", +"koW c #eec079", +"kMa c #eec07a", +"iPQ c #eec24f", +"kI6 c #eec27b", +"hvJ c #eec35c", +"kGg c #eec37d", +"iCe c #eec561", +"iK0 c #eec566", +"hGi c #eec85b", +"jRO c #eec894", +"h5T c #eec96c", +"f0w c #eec9a1", +"kwG c #eeca69", +"e1h c #eeca77", +"hTM c #eecb72", +"bAO c #eecb9c", +"cA0 c #eecbb0", +"hzo c #eecc83", +"hpD c #eecc99", +"gQW c #eecd4b", +"kNz c #eecd6a", +"gjG c #eecd77", +"kRq c #eecd7c", +"hkH c #eece78", +"kzc c #eecf6f", +"iSA c #eecf75", +"kKZ c #eecf84", +"jZY c #eecf91", +"gwD c #eecfc4", +"fgw c #eed080", +"k.7 c #eed089", +"gsQ c #eed0c4", +"jLM c #eed167", +"kEB c #eed16b", +"jGk c #eed16e", +"j8y c #eed18a", +"kte c #eed19a", +"ip8 c #eed1a0", +"jJa c #eed26e", +"jLd c #eed274", +"kgV c #eed285", +"j8A c #eed289", +"kbD c #eed28a", +"dkN c #eed28b", +"kKk c #eed372", +"eWu c #eed386", +"e1l c #eed38c", +"jA2 c #eed46a", +"kHn c #eed475", +"efe c #eed488", +"eoy c #eed499", +"eG3 c #eed49b", +"jyb c #eed56d", +"eDi c #eed581", +"fgv c #eed58a", +"jOU c #eed58d", +"fgt c #eed58f", +"eLM c #eed59b", +"eCi c #eed59c", +"ffE c #eed59f", +"eOV c #eed5a0", +"hM1 c #eed5a1", +"kR. c #eed66c", +"jvv c #eed66e", +"klu c #eed678", +"eMU c #eed680", +"eyz c #eed681", +"eoY c #eed683", +"eaM c #eed684", +"eyy c #eed685", +"eH8 c #eed686", +"ex9 c #eed688", +"eVx c #eed699", +"eQB c #eed69c", +"eGZ c #eed69d", +"eGY c #eed69f", +"d7j c #eed6a2", +"jT9 c #eed6a3", +"d#C c #eed6ad", +"krQ c #eed770", +"kKH c #eed775", +"kr2 c #eed776", +"kHH c #eed777", +"iry c #eed778", +"kgg c #eed77a", +"dqb c #eed77b", +"dHg c #eed77e", +"dqf c #eed783", +"dDh c #eed784", +"eyt c #eed785", +"eDb c #eed786", +"eoW c #eed787", +"eMN c #eed788", +"eMP c #eed789", +"f15 c #eed78e", +"eWq c #eed799", +"eWm c #eed79f", +"fkz c #eed7a0", +"exD c #eed7a1", +"eos c #eed7a2", +"eOW c #eed7a3", +"haB c #eed7af", +"kEE c #eed86f", +"kr4 c #eed872", +"kuu c #eed873", +"knI c #eed879", +"eRY c #eed881", +"dDm c #eed884", +"duJ c #eed885", +"iYg c #eed886", +"etV c #eed888", +"eRU c #eed88a", +"fv0 c #eed89b", +"e01 c #eed89c", +"eRr c #eed8a0", +"exC c #eed8a3", +"dy. c #eed8a4", +"e#6 c #eed8a5", +"d7i c #eed8a6", +"dGB c #eed8a9", +"dsc c #eed8ab", +"dE3 c #eed8ae", +"g8N c #eed8b0", +"kug c #eed974", +"kEK c #eed977", +"ka1 c #eed97a", +"izt c #eed97b", +"kKE c #eed97c", +"c8O c #eed97e", +"d2J c #eed982", +"jZ3 c #eed984", +"ej3 c #eed985", +"jvg c #eed98f", +"gKq c #eed993", +"fzV c #eed99b", +"eQF c #eed99e", +"eWl c #eed99f", +"e5x c #eed9a0", +"dpl c #eed9a3", +"dfR c #eed9a4", +"ejz c #eed9a5", +"eor c #eed9a6", +"dTe c #eed9a7", +"eeJ c #eed9aa", +"dwp c #eed9ab", +"dEZ c #eed9ac", +"dRl c #eed9b1", +"j1g c #eed9b3", +".j6 c #eed9ce", +"kuf c #eeda72", +"kwW c #eeda7b", +"klk c #eeda7e", +"knb c #eeda83", +"cZc c #eeda85", +"i12 c #eeda8e", +"i13 c #eeda8f", +"jsg c #eeda93", +"fr3 c #eeda9c", +"e90 c #eeda9f", +"fcg c #eedaa1", +"fjJ c #eedaa7", +"dGE c #eedaab", +"eon c #eedaac", +"dNc c #eedaae", +"di4 c #eedaaf", +"dNa c #eedab0", +"iRv c #eedabd", +"kpL c #eedb7e", +"kEe c #eedb88", +"gWq c #eedb8d", +"j5R c #eedb8e", +"iWe c #eedb90", +"jdd c #eedb91", +"eQG c #eedb97", +"eLq c #eedbaa", +"dRi c #eedbaf", +"dnD c #eedbb0", +"dEW c #eedbb1", +"kyV c #eedc86", +"jLc c #eedc88", +"dLx c #eedc8a", +"gSu c #eedc8f", +"ji9 c #eedc94", +"eHC c #eedc97", +"esP c #eedcab", +"d0o c #eedcae", +"dRq c #eedcb3", +"j7K c #eedd8c", +"grI c #eedd8f", +"iNH c #eedd95", +"kz6 c #eedd9b", +"iPw c #eedd9e", +".8j c #eedd9f", +"#Lj c #eedda3", +"d0F c #eeddb4", +"dV4 c #eeddb6", +"d0G c #eeddb7", +"cyL c #eede88", +"kac c #eede8e", +"kcX c #eede90", +"e0U c #eede95", +"jxZ c #eede9b", +"d5n c #eedeb2", +"dGN c #eedebc", +"c3W c #eedf86", +"jY. c #eedf90", +"gI0 c #eedf93", +"jZD c #eedf94", +"kyx c #eedf95", +"jmE c #eedf98", +"e5o c #eedf99", +".Q. c #eedfa6", +"d.7 c #eedfb8", +"ep0 c #eee089", +"ijQ c #eee08b", +"jCl c #eee08e", +"kPD c #eee092", +"kPx c #eee096", +"jSo c #eee097", +"#nQ c #eee0a9", +"kaG c #eee197", +"jFg c #eee198", +"jPX c #eee199", +".5U c #eee1a4", +"#qR c #eee1a9", +"d.5 c #eee1ba", +"cIW c #eee1bc", +"j7I c #eee296", +"ifq c #eee29f", +".NQ c #eee2a8", +"kJ9 c #eee2b0", +"euD c #eee38f", +"hv3 c #eee3a0", +"axn c #eee3ae", +"bLM c #eee3c4", +"j2f c #eee4a1", +"jrh c #eee4a7", +"g4O c #eee4be", +"dnv c #eee4c2", +"#aH c #eee5ae", +"c1c c #eee6c5", +"hpd c #eee7c6", +"fqu c #eee7cc", +"bCl c #eee7cf", +"bCj c #eee7d0", +"iV8 c #eee899", +"g8L c #eee8c1", +"eOD c #eee8ca", +"bGS c #eee8d2", +"bLF c #eee8d4", +"cwf c #eee9cb", +"cxI c #eee9df", +"iwm c #eeeb9c", +"cxO c #eeecec", +".nd c #eeed8f", +"fZ6 c #eeedca", +"bCs c #eeedec", +"ixi c #eeeec1", +"ap6 c #eeeee7", +"dfZ c #eeeeed", +"cGb c #eeeeee", +"eAr c #eeefcd", +"ddH c #eeefd6", +"dnk c #eeefd7", +"dm8 c #eef0d6", +"ddF c #eef0d8", +"dmX c #eef0d9", +"atU c #eef0eb", +"d46 c #eef1d1", +"dnd c #eef1d6", +"ctk c #eef1f2", +"dZ9 c #eef2c6", +"d0a c #eef2cd", +"d45 c #eef2d3", +"d4R c #eef3c3", +"dn. c #eef3db", +"d4K c #eef4cc", +"gDB c #eef6d5", +"dVq c #eef6d9", +"d4z c #eef6e1", +"dVh c #eef7e7", +"c#x c #eef9fd", +"cq0 c #eef9ff", +"cq4 c #eefaff", +"c9Y c #eefbfe", +"c9Z c #eefbff", +"b4e c #efa158", +"jHr c #efa15c", +"i0o c #efa15e", +"gES c #efa362", +"b9# c #efa45b", +"iOW c #efa462", +"iUG c #efa463", +"jyN c #efa562", +"gxK c #efa634", +"ckA c #efa760", +"iRU c #efa766", +"jEx c #efa767", +"iR7 c #efa853", +"ivm c #efa863", +"i3c c #efa865", +"iUE c #efa868", +"iUW c #efa955", +"i3b c #efa966", +"dSB c #efa969", +"g3D c #efaa2d", +"joQ c #efaa31", +"i3a c #efaa66", +"iRT c #efaa68", +"dxy c #efaa69", +"j1A c #efaa6a", +"khQ c #efaa6b", +"io8 c #efab3b", +"it5 c #efab3c", +"jg6 c #efab67", +"jeg c #efab68", +"koL c #efab69", +"j6t c #efab6a", +"jZ# c #efab6b", +"kti c #efab6c", +"jj5 c #efac63", +"cxk c #efac69", +"cFM c #efac6a", +"kf# c #efac6b", +"dti c #efac6c", +"gFE c #efad36", +"jxk c #efad38", +"kjZ c #efad60", +"j.U c #efad61", +"jem c #efad62", +"ix8 c #efad68", +"jg0 c #efad6b", +"jWP c #efad6d", +"j1B c #efad6e", +"hOT c #efad72", +"gFj c #efae38", +"gt8 c #efae44", +"jg7 c #efae64", +"jee c #efae6a", +"jZb c #efae6f", +"jPf c #efae70", +"hZk c #efaf38", +"iI2 c #efaf6b", +"jec c #efaf6d", +"iy. c #efaf6e", +"j6r c #efaf72", +"jjQ c #efaf79", +"j.H c #efb06d", +"i0b c #efb06e", +"j85 c #efb074", +"ijr c #efb142", +"iXn c #efb16b", +".eH c #efb1ff", +"iE0 c #efb247", +"kf. c #efb276", +"jgW c #efb27c", +"gJr c #efb33a", +"hP9 c #efb33d", +"h5a c #efb33f", +"jIN c #efb346", +"iEZ c #efb348", +"guc c #efb43d", +"gtS c #efb43e", +"ie8 c #efb445", +"jY5 c #efb46b", +"kP. c #efb478", +"gxH c #efb53d", +"h1M c #efb544", +"ktg c #efb57a", +"jIx c #efb648", +"iVG c #efb735", +"igT c #efb743", +"hrN c #efb74c", +"h93 c #efb780", +"jcI c #efb835", +"hc8 c #efb836", +"iVH c #efb841", +"jfw c #efb84d", +"kDc c #efb870", +"bK1 c #efb97e", +"hq6 c #efba48", +"jup c #efba4c", +"ie3 c #efbb47", +"iJ3 c #efbc51", +"j9f c #efbc71", +"hvH c #efbd4b", +"gVb c #efbe37", +"juE c #efbe4e", +"jor c #efbe51", +"ibX c #efbf45", +"ig8 c #efbf46", +"hMX c #efbf4f", +"jik c #efbf50", +"ieF c #efc048", +"hcu c #efc14a", +"iYA c #efc258", +"kMb c #efc27b", +"iVE c #efc33f", +"iSU c #efc352", +"kPj c #efc37b", +"iSO c #efc44a", +"jCW c #efc461", +"kGh c #efc47d", +"kDx c #efc47e", +"gCg c #efc55d", +"kAY c #efc57f", +"iPP c #efc85a", +"guv c #efc96f", +"coD c #efca9c", +"cBq c #efcb9c", +"cFG c #efcb9d", +".i# c #efcbea", +"hWL c #efcc72", +"fSr c #efcc75", +"hde c #efcc78", +"eWw c #efcc79", +"gVD c #efcd68", +"htq c #efcd9a", +"htp c #efcd9d", +"ifi c #efce6f", +"hw8 c #efce9b", +"hhc c #efcf8b", +"ids c #efcfa0", +"bYu c #efcfa1", +"gVN c #efd079", +"jY8 c #efd09d", +"hpA c #efd0a2", +"ked c #efd183", +".iN c #efd1e4", +"kQI c #efd26f", +"kbF c #efd28b", +"jGj c #efd375", +"j3w c #efd387", +"k.8 c #efd38b", +"j3D c #efd38d", +"g3w c #efd47b", +"k.9 c #efd48c", +"jYO c #efd48f", +"h9B c #efd4a2", +"e95 c #efd588", +"fck c #efd58b", +"eG2 c #efd59c", +"kaY c #efd66e", +"efd c #efd683", +"e94 c #efd68b", +"f.# c #efd68e", +"eG0 c #efd69c", +"exG c #efd69d", +"inB c #efd6a0", +"eTV c #efd6a1", +"klq c #efd770", +"krE c #efd77a", +"kNy c #efd77b", +"eH9 c #efd783", +"eMS c #efd785", +"eH6 c #efd788", +"eMR c #efd789", +"eav c #efd78b", +"fgu c #efd78c", +"e5E c #efd78f", +"jWs c #efd791", +"e5M c #efd792", +"eCj c #efd79d", +"et. c #efd79e", +"exI c #efd7a2", +"j8K c #efd7ac", +"g6Y c #efd855", +"g2Y c #efd857", +"kNY c #efd876", +"iy1 c #efd87f", +"etX c #efd882", +"eMT c #efd884", +"dYf c #efd885", +"dLs c #efd886", +"dTU c #efd887", +"eyu c #efd888", +"fYq c #efd895", +"ilO c #efd899", +"fgp c #efd8a0", +"eQw c #efd8a1", +"eLI c #efd8a2", +"fwN c #efd8a3", +"fwM c #efd8a4", +"bkV c #efd8ac", +"dNe c #efd8ad", +"kr5 c #efd970", +"kwR c #efd973", +"knH c #efd978", +"k.i c #efd97c", +"duE c #efd97e", +"jCB c #efd983", +"dbN c #efd984", +"d7S c #efd985", +"eRX c #efd986", +"dlN c #efd987", +"etR c #efd988", +"eDc c #efd989", +"eyv c #efd98a", +"eyw c #efd98b", +"eMQ c #efd98d", +"knd c #efd98e", +"foH c #efd9a1", +"fgo c #efd9a2", +"e0f c #efd9a3", +"ffD c #efd9a4", +"eQt c #efd9a5", +"ejx c #efd9a6", +"ejy c #efd9a7", +"eK. c #efd9a9", +"kHD c #efda77", +"kHI c #efda78", +"klf c #efda79", +"kr1 c #efda7a", +"kzC c #efda7b", +"k.A c #efda80", +"j2Z c #efda83", +"eWR c #efda86", +"gZ0 c #efda96", +"hsj c #efda97", +"fvZ c #efda9b", +"fr2 c #efda9c", +"e08 c #efdaa0", +"e07 c #efdaa1", +"fE# c #efdaa5", +"eeM c #efdaa7", +"dwq c #efdaad", +"dwr c #efdaae", +"dAP c #efdaaf", +"kNG c #efdb72", +"krP c #efdb73", +"kgw c #efdb7e", +"eWS c #efdb85", +"dgW c #efdb88", +"eDa c #efdb8c", +"f.f c #efdb8e", +"i4Q c #efdb90", +"fDt c #efdb9a", +"fnV c #efdb9c", +"fr1 c #efdb9d", +"e04 c #efdb9f", +"e5y c #efdba1", +"e9Y c #efdba2", +"foD c #efdba5", +"dtR c #efdba6", +"ffC c #efdba7", +"dKR c #efdba8", +"dOT c #efdba9", +"eeK c #efdbad", +"dNd c #efdbb0", +"jrc c #efdbb7", +"kKp c #efdc72", +"kzw c #efdc7e", +"kdA c #efdc81", +"c3Z c #efdc82", +"d72 c #efdc88", +"dPB c #efdc8b", +"g0p c #efdc8e", +"iTu c #efdc97", +"fnW c #efdc9c", +"klT c #efdca0", +"fbp c #efdcaa", +"eB5 c #efdcad", +"eB4 c #efdcae", +"eQE c #efdcaf", +"dE0 c #efdcb0", +"di3 c #efdcb2", +"bpf c #efdcb8", +"c8M c #efdd81", +"kwE c #efdd8a", +"ho1 c #efdd93", +"iQx c #efdd97", +"fkp c #efdd9a", +"fb7 c #efdd9b", +"dGH c #efddad", +"d5m c #efddb0", +"d5l c #efddb1", +"dEV c #efddb2", +"dRn c #efddb3", +"fAi c #efde94", +"jDx c #efde98", +"eQH c #efde99", +"hZ1 c #efde9c", +"eLS c #efdea0", +"#.D c #efdea1", +"#Au c #efdea8", +"dRp c #efdeb5", +"d0E c #efdeb6", +"hh7 c #efdeb7", +"fS6 c #efdf8e", +"dYd c #efdf91", +"gOJ c #efdf94", +"gQF c #efdf95", +"j4X c #efdfa0", +"kKc c #efdfa2", +".RZ c #efdfa6", +"dRo c #efdfb6", +"d0A c #efdfb7", +"dV5 c #efdfba", +"kw. c #efe095", +"kBf c #efe098", +"h9h c #efe09a", +"jkT c #efe09b", +".8d c #efe0a1", +"#aV c #efe0a3", +"dVP c #efe0b2", +".lo c #efe0b3", +"c7J c #efe0bf", +"kO# c #efe185", +"jFd c #efe191", +"jU5 c #efe195", +"jfl c #efe196", +"kMs c #efe197", +".5V c #efe1a6", +"d5o c #efe1b6", +"cWw c #efe1bc", +"kMy c #efe294", +"jFf c #efe298", +"jSp c #efe299", +"jCo c #efe29a", +"#k3 c #efe2a8", +"#fI c #efe2ac", +"cNd c #efe2be", +"eNu c #efe38d", +"jCm c #efe396", +"j6X c #efe399", +"jH1 c #efe39a", +"jUW c #efe39b", +"jUX c #efe39c", +"iBp c #efe3a5", +"hIH c #efe3a7", +"hjH c #efe3aa", +"hym c #efe3ab", +"fMz c #efe490", +"c#e c #efe491", +"j#G c #efe4b4", +"fCi c #efe4c8", +"icz c #efe592", +"jkP c #efe5a6", +"#6q c #efe5ac", +"jG4 c #efe5b5", +"jdT c #efe5bb", +"cRG c #efe5c5", +"ifp c #efe69f", +".Ge c #efe6ad", +"dpB c #efe6c9", +"fFU c #efe6cb", +"b1r c #efe79b", +"j.h c #efe7ba", +"dpC c #efe7ca", +"dpD c #efe7cc", +"hNQ c #efe8c3", +"cAl c #efe8c7", +"bQG c #efe8d2", +"cpL c #efe8d9", +"f5x c #efe991", +"hh3 c #efe9c4", +"bV. c #efead9", +"bCh c #efeadc", +"aXp c #efece4", +"ghw c #efeec3", +"d9V c #efeecb", +"goL c #efefc9", +"d49 c #efefcb", +"fW1 c #efefcf", +"dVM c #efefd6", +"blk c #efefe1", +"c.# c #efefee", +"bQN c #efefef", +"d9W c #eff0d0", +"ddG c #eff0d9", +"iIb c #eff1c5", +"dne c #eff1d6", +"dry c #eff1d7", +"drD c #eff1d9", +"dQ4 c #eff1da", +"dZ8 c #eff2c5", +"drA c #eff2d9", +"ddi c #eff2da", +"dEy c #eff2e3", +"aS4 c #eff2eb", +"dZ7 c #eff3c4", +"dio c #eff3db", +"d4Q c #eff4c3", +"d4L c #eff4ca", +"b#7 c #eff59f", +"dVr c #eff6d6", +"dVp c #eff6de", +"dVo c #eff6e0", +"d4A c #eff6e1", +"dVn c #eff6e2", +"dZM c #eff6e4", +"dZJ c #eff7e3", +"cQV c #eff8fa", +"cee c #eff9fe", +"cIc c #effafe", +"cei c #effaff", +"c9V c #effbfd", +"cVl c #effbff", +"b9. c #f0a159", +"koA c #f0a34f", +"iXA c #f0a360", +"gA1 c #f0a361", +"gig c #f0a363", +"iXz c #f0a464", +"iO4 c #f0a551", +"i3w c #f0a556", +"cbR c #f0a55c", +"iqj c #f0a55d", +"gtn c #f0a562", +"jni c #f0a65f", +"iRV c #f0a765", +"gxJ c #f0a833", +"iew c #f0a83e", +"ix1 c #f0a85e", +"jnh c #f0a860", +"jHq c #f0a862", +"iOV c #f0a866", +"jBG c #f0a867", +"j.M c #f0a966", +"iLX c #f0a968", +"gFD c #f0aa33", +"kqR c #f0aa53", +"j.N c #f0aa67", +"jg5 c #f0aa68", +"iCj c #f0ab3b", +"jKd c #f0ab62", +"inL c #f0ab63", +"i8m c #f0ab64", +"ix7 c #f0ab65", +"cXK c #f0ab6a", +"kj7 c #f0ab6b", +"gx2 c #f0ac3a", +"irE c #f0ac3c", +"izB c #f0ac3f", +"jk. c #f0ac62", +"jj9 c #f0ac63", +"jeh c #f0ac69", +"kmt c #f0ac6a", +"cJ9 c #f0ac6b", +"c2x c #f0ac6c", +"doQ c #f0ac6e", +"irF c #f0ad3d", +"jbC c #f0ad5e", +"cgo c #f0ad64", +"ile c #f0ad66", +"j6v c #f0ad6a", +"cs1 c #f0ad6b", +"cxl c #f0ad6c", +"jZa c #f0ad6d", +"gRL c #f0ae24", +"jA# c #f0ae37", +"io7 c #f0ae3d", +"jj8 c #f0ae64", +"jnd c #f0ae65", +"cs0 c #f0ae69", +"j89 c #f0ae6b", +"iAU c #f0ae6c", +"jZc c #f0ae6d", +"jUn c #f0ae6e", +"it4 c #f0af3e", +"iHQ c #f0af41", +"kvv c #f0af5a", +"ks7 c #f0af5b", +"jg8 c #f0af64", +"jKc c #f0af66", +"ix9 c #f0af6c", +"j87 c #f0af6d", +"ijq c #f0b043", +"jg9 c #f0b064", +"jed c #f0b06d", +"k#F c #f0b075", +"gBK c #f0b13f", +"jeo c #f0b164", +"ild c #f0b169", +"iUw c #f0b16b", +"i5F c #f0b173", +"kco c #f0b175", +"iE1 c #f0b246", +"iOK c #f0b26d", +"i0a c #f0b271", +"jyI c #f0b27a", +"imD c #f0b341", +"hVE c #f0b342", +"jMO c #f0b368", +"jIM c #f0b446", +"jFY c #f0b447", +"iiH c #f0b46e", +"gie c #f0b479", +"khP c #f0b47a", +"jDc c #f0b543", +"iEq c #f0b54a", +"kDo c #f0b57a", +"kq4 c #f0b57b", +"jrO c #f0b637", +"hSI c #f0b645", +"ijm c #f0b650", +"kG. c #f0b67a", +"koK c #f0b67b", +"kj6 c #f0b67c", +"joO c #f0b736", +"h1L c #f0b74a", +"kms c #f0b77d", +"j3Z c #f0b866", +"bZm c #f0b880", +"i4e c #f0b936", +"hFt c #f0b946", +"iga c #f0b977", +"jrL c #f0ba43", +"hrO c #f0ba56", +"j6k c #f0ba66", +"jbh c #f0ba85", +"hAL c #f0bb89", +"i.E c #f0bc51", +"hB1 c #f0bd4b", +"hQn c #f0bd5c", +"gRf c #f0be3b", +"gt5 c #f0be43", +"hJo c #f0be53", +"j4# c #f0be71", +"idE c #f0be81", +"iSS c #f0bf4e", +"b4a c #f0bf8b", +".gP c #f0bfef", +".gO c #f0bff3", +"kcA c #f0c077", +"jPa c #f0c08b", +"iYx c #f0c13c", +"j6A c #f0c173", +"k#R c #f0c176", +"kfj c #f0c178", +"kh0 c #f0c179", +"kPh c #f0c27a", +"kI5 c #f0c27b", +"kA0 c #f0c27c", +"iYw c #f0c33f", +"kkd c #f0c37b", +"kI7 c #f0c37c", +"krb c #f0c47c", +"kGi c #f0c47d", +"kDy c #f0c47e", +"bts c #f0c490", +"b86 c #f0c492", +"gJq c #f0c543", +"kAZ c #f0c57e", +".hv c #f0c5ea", +".hu c #f0c5ee", +"gMZ c #f0c63b", +"gFo c #f0c644", +"kyh c #f0c67f", +"kyg c #f0c680", +"cbM c #f0c798", +"i4j c #f0c850", +"hvK c #f0c86d", +"iQS c #f0c86e", +"jEq c #f0c890", +"gQP c #f0c93d", +"cgi c #f0c99b", +"h5S c #f0ca6b", +"cbL c #f0ca9d", +"gcz c #f0cb71", +"ckv c #f0cb9d", +"cku c #f0cb9f", +".ia c #f0cbe5", +"eWx c #f0cc79", +"bTA c #f0cc9c", +"cJ1 c #f0cc9e", +"coC c #f0cc9f", +"gMi c #f0ccc0", +"fPn c #f0cd79", +"gFJ c #f0ce54", +"h8X c #f0ce71", +"imS c #f0ce73", +"csU c #f0cea0", +"f0v c #f0cea6", +"fHX c #f0cf7c", +"hw9 c #f0cf9b", +"hmd c #f0cf9d", +"guJ c #f0d056", +"hw7 c #f0d09f", +"hm# c #f0d0a1", +".iO c #f0d0df", +"gfs c #f0d18e", +"hid c #f0d1a8", +"kKY c #f0d28a", +"kNB c #f0d36f", +"kec c #f0d385", +"hib c #f0d3ac", +"jvp c #f0d474", +"j53 c #f0d48e", +"h3E c #f0d4a1", +"ipU c #f0d4aa", +"kHN c #f0d563", +"j5U c #f0d58a", +"j1b c #f0d590", +"exH c #f0d59b", +"gTb c #f0d5b5", +"jx6 c #f0d675", +"j8B c #f0d68d", +"jJH c #f0d68f", +"kgO c #f0d691", +"kb5 c #f0d6a4", +"jZZ c #f0d6ab", +"gYT c #f0d750", +"kw7 c #f0d768", +"izm c #f0d785", +"guW c #f0d78e", +"eta c #f0d79c", +"eG1 c #f0d79d", +"fkH c #f0d890", +"eCk c #f0d89d", +"eTU c #f0d8a4", +"kpf c #f0d985", +"dT0 c #f0d986", +"eWQ c #f0d988", +"eH5 c #f0d98b", +"ex8 c #f0d98c", +"f1D c #f0d996", +"eVw c #f0d99d", +"eQA c #f0d99e", +"dfS c #f0d9a0", +"eTW c #f0d9a5", +"jvw c #f0da76", +"kw3 c #f0da77", +"i#r c #f0da7c", +"etY c #f0da84", +"dPr c #f0da86", +"duM c #f0da87", +"dy4 c #f0da89", +"eH4 c #f0da8b", +"eRT c #f0da8c", +"e5F c #f0da90", +"jjw c #f0da95", +"kK0 c #f0da9b", +"fbr c #f0daa2", +"ffF c #f0daa3", +"fAx c #f0daa5", +"e0c c #f0daa6", +"eeN c #f0daa7", +"ejw c #f0daa8", +"h6A c #f0daae", +"dI3 c #f0daaf", +"dws c #f0dab0", +"kpE c #f0db6e", +"kpD c #f0db6f", +"kCg c #f0db75", +"kNM c #f0db78", +"ka3 c #f0db79", +"knA c #f0db7a", +"kCd c #f0db7b", +"kCc c #f0db7c", +"j78 c #f0db7d", +"dDb c #f0db7f", +"e1A c #f0db86", +"e1z c #f0db8a", +"eWL c #f0db8e", +"fkT c #f0db90", +"eau c #f0db95", +"hdH c #f0db96", +"hJX c #f0db97", +"f4U c #f0db99", +"eRq c #f0dba1", +"fgn c #f0dba4", +"fbq c #f0dba6", +"es4 c #f0dba7", +"es3 c #f0dba8", +"e#5 c #f0dba9", +"ejF c #f0dbac", +"dAM c #f0dbae", +"h6y c #f0dbb1", +"iZY c #f0dbbb", +"kEX c #f0dc7a", +"kdG c #f0dc7b", +"kw2 c #f0dc7c", +"knr c #f0dc7e", +"kgt c #f0dc7f", +"ekx c #f0dc80", +"c8P c #f0dc85", +"kBz c #f0dc87", +"d3b c #f0dc88", +"dbO c #f0dc89", +"dqg c #f0dc8a", +"dPw c #f0dc8c", +"fcx c #f0dc91", +"kiK c #f0dc93", +"fkE c #f0dc9d", +"fnU c #f0dc9e", +"eMn c #f0dca0", +"e5z c #f0dca2", +"fE. c #f0dca8", +"ejv c #f0dcaa", +"e#3 c #f0dcab", +"dE1 c #f0dcb1", +"ial c #f0dcb6", +"kiM c #f0dd7d", +"ka6 c #f0dd7e", +"kHF c #f0dd80", +"j70 c #f0dd81", +"epo c #f0dd82", +"ki6 c #f0dd83", +"eIK c #f0dd88", +"dlR c #f0dd8b", +"epm c #f0dd8d", +"hdw c #f0dd93", +"e9Z c #f0dda4", +"h5H c #f0ddaa", +"fjI c #f0ddac", +"esW c #f0ddaf", +"dGF c #f0ddb0", +"dI1 c #f0ddb1", +"d5E c #f0ddb4", +"kwP c #f0de7a", +"kli c #f0de7f", +"kC. c #f0de82", +"e54 c #f0de86", +"jRo c #f0de8f", +"hDw c #f0de93", +"jdc c #f0de95", +"jdb c #f0de97", +"i9O c #f0de99", +"e5w c #f0dea2", +"fkC c #f0dea5", +"ffB c #f0dead", +"exw c #f0deb0", +"d5F c #f0deb4", +"c1R c #f0deb6", +"cSf c #f0deb7", +"kvi c #f0debb", +"kp5 c #f0df92", +"j04 c #f0df93", +"gmq c #f0df9a", +"fR1 c #f0df9b", +"jpJ c #f0df9c", +"jgF c #f0dfa0", +"dM9 c #f0dfb5", +"dwh c #f0dfb6", +"dRs c #f0dfb8", +"e.n c #f0dfb9", +"edj c #f0dfba", +"cUz c #f0e091", +"jX3 c #f0e093", +"e5q c #f0e099", +"kKe c #f0e0a2", +"iMy c #f0e0a3", +"jmi c #f0e0a5", +"d95 c #f0e0b4", +"dVQ c #f0e0b5", +"dr5 c #f0e0b7", +"cIY c #f0e0b9", +"dNg c #f0e0ba", +"dya c #f0e0bc", +"cuu c #f0e18b", +"j2T c #f0e193", +"jX4 c #f0e194", +"ktC c #f0e195", +"j92 c #f0e196", +"hX# c #f0e199", +"eVz c #f0e19b", +"i03 c #f0e1a2", +"#.z c #f0e1a3", +"klP c #f0e1b7", +"dVZ c #f0e1ba", +"dV3 c #f0e1bb", +"eIJ c #f0e28e", +"gk. c #f0e294", +"krl c #f0e296", +"jVM c #f0e297", +"jNj c #f0e29a", +".3I c #f0e2a5", +".8f c #f0e2a8", +"#c8 c #f0e2ac", +"d93 c #f0e2b5", +"cY# c #f0e2c7", +"kPE c #f0e393", +"kPy c #f0e396", +"kJh c #f0e397", +"jCn c #f0e399", +"jzx c #f0e39a", +"jKH c #f0e39b", +"jFh c #f0e39c", +"jvc c #f0e3a7", +"hlK c #f0e3bf", +"d7l c #f0e3c7", +"jFe c #f0e499", +"jHZ c #f0e49a", +"jH0 c #f0e49b", +"jXf c #f0e49c", +"jn0 c #f0e4a0", +".5W c #f0e4aa", +"#fS c #f0e4ab", +"hck c #f0e4b0", +"f4v c #f0e4b5", +"hh6 c #f0e4bf", +"jfp c #f0e597", +"jZF c #f0e59c", +"kix c #f0e5a0", +"jkQ c #f0e5a3", +".ZE c #f0e5a9", +"gm. c #f0e5b4", +"jEc c #f0e5bb", +"eSt c #f0e695", +"fF# c #f0e793", +"ele c #f0e794", +"jCP c #f0e7a9", +"jhQ c #f0e7ad", +"jBl c #f0e7b3", +"hpf c #f0e7c3", +"kp6 c #f0e8b3", +"dIR c #f0e8bc", +"c54 c #f0e8c5", +"hs2 c #f0e8c7", +"bVn c #f0e8cd", +"kJ7 c #f0e9af", +"cIT c #f0e9cb", +"hRi c #f0eac3", +"hs1 c #f0eac9", +"fJE c #f0eacf", +"b0e c #f0ead3", +"b0g c #f0ead6", +"bCi c #f0ead8", +"bCo c #f0eadb", +"bG8 c #f0eadd", +"eQ2 c #f0ebdf", +"cCC c #f0ebe1", +"gdW c #f0ecbf", +"eOE c #f0eccb", +"eHb c #f0ecd3", +"b4O c #f0ece5", +"hay c #f0eec9", +"c8b c #f0eee7", +"gk8 c #f0f0cc", +"fW0 c #f0f0cf", +"bCb c #f0f0ef", +"clE c #f0f0f0", +"g4N c #f0f1cb", +"d5. c #f0f1d0", +"d5# c #f0f1d1", +"d5a c #f0f1d2", +"d5b c #f0f1d4", +"dVH c #f0f1d5", +"diF c #f0f1da", +"f9l c #f0f2cc", +"ecX c #f0f2d6", +"dVI c #f0f2d8", +"dMR c #f0f2db", +"dZ6 c #f0f3c3", +"d4O c #f0f3c5", +"dVD c #f0f3d0", +"d9X c #f0f3d7", +"dvZ c #f0f3da", +"dvY c #f0f3db", +"d5c c #f0f3dc", +"dZ5 c #f0f4c3", +"d4P c #f0f4c4", +"d4N c #f0f4c6", +"d4M c #f0f4c8", +"d0b c #f0f4d6", +"d0e c #f0f4d7", +"d0d c #f0f4d9", +"dED c #f0f4dc", +"dVJ c #f0f4dd", +"g0O c #f0f5cf", +"a3o c #f0f69c", +"dZU c #f0f6d2", +"dZL c #f0f6e2", +"dZN c #f0f7e3", +"dQK c #f0f7e8", +"cEi c #f0f9ff", +"bIq c #f0fafe", +"ciE c #f0faff", +"cvo c #f0fbff", +"c47 c #f0fcff", +".#v c #f13ff2", +"jyX c #f1a25f", +"jEF c #f1a35f", +"gpC c #f1a461", +"glW c #f1a464", +"gto c #f1a562", +"cgn c #f1a65d", +"iXx c #f1a665", +"iXy c #f1a666", +"jkb c #f1a860", +"i3e c #f1a866", +"jv3 c #f1a867", +"ivg c #f1a95e", +"i5R c #f1a966", +"i3d c #f1a967", +"gFC c #f1aa33", +"gBR c #f1aa36", +"gBT c #f1aa37", +"ig0 c #f1aa3f", +"ivf c #f1aa5e", +"jka c #f1aa61", +"jqd c #f1aa65", +"jMI c #f1aa68", +"iOU c #f1aa69", +".d5 c #f1aaff", +"ix4 c #f1ab61", +"jk# c #f1ab62", +"jbr c #f1ab66", +"jbp c #f1ab68", +"iOT c #f1ab6b", +"gBy c #f1ac35", +"iev c #f1ac3d", +"iqg c #f1ac61", +"ix5 c #f1ac62", +"i5M c #f1ac67", +"jei c #f1ac69", +"cSY c #f1ac6b", +"it6 c #f1ad3d", +"isI c #f1ad62", +"jel c #f1ad65", +"ckB c #f1ad66", +"coJ c #f1ad68", +"kcq c #f1ad6a", +"c7e c #f1ad6c", +"dff c #f1ad6d", +"jAa c #f1ae35", +"iqf c #f1ae63", +"inK c #f1ae65", +"k#I c #f1ae6b", +"j36 c #f1ae6c", +"k#J c #f1ae6d", +"j1z c #f1ae6f", +"jbs c #f1af66", +"jZd c #f1af6c", +"j1C c #f1af6d", +"iAV c #f1af6e", +"khT c #f1af6f", +"j35 c #f1af70", +"gxV c #f1b042", +"kcp c #f1b06e", +"khR c #f1b06f", +".gp c #f1b0c2", +"jh. c #f1b164", +"jen c #f1b165", +"k#G c #f1b16f", +"j6u c #f1b170", +"iKz c #f1b243", +"iHK c #f1b244", +"iE2 c #f1b245", +"jep c #f1b264", +"ke5 c #f1b267", +"inJ c #f1b268", +".fw c #f1b2f6", +"gFc c #f1b342", +"gFu c #f1b43b", +"khK c #f1b46c", +"iRK c #f1b46d", +"iXm c #f1b46e", +"imE c #f1b542", +"gtU c #f1b546", +"iUv c #f1b56e", +"hd. c #f1b638", +"irD c #f1b643", +"hgX c #f1b644", +"jUw c #f1b66b", +"icm c #f1b744", +"ilc c #f1b770", +"iXl c #f1b772", +"iLL c #f1b774", +"ky. c #f1b77c", +"j1G c #f1b86c", +"jZi c #f1b86d", +"hc9 c #f1b937", +"gqk c #f1b943", +"ijl c #f1b951", +"jd7 c #f1b981", +".g# c #f1b9f2", +"gM0 c #f1ba34", +"h#g c #f1ba39", +"hMG c #f1ba4c", +"jPn c #f1ba6e", +"gx0 c #f1bb3f", +"gQH c #f1bb4d", +"jWW c #f1bb6e", +"iIX c #f1bb7a", +"gRP c #f1bc3f", +"hEk c #f1bc87", +"h#f c #f1bd38", +"gNe c #f1bd3d", +"iVr c #f1bd47", +"i6H c #f1bd49", +"jR0 c #f1bd70", +"jMB c #f1bd81", +"iSQ c #f1be39", +"kIK c #f1be7a", +"gVd c #f1bf3a", +"ig7 c #f1bf45", +"hMW c #f1bf4a", +"jZh c #f1bf70", +"kGj c #f1bf77", +"bPO c #f1bf89", +"i4d c #f1c03d", +"kDz c #f1c07a", +"gZ# c #f1c23a", +"hYV c #f1c268", +"jRP c #f1c28c", +"jUm c #f1c28d", +"gQQ c #f1c338", +"iPR c #f1c349", +"ie6 c #f1c34b", +"kPk c #f1c37b", +"kMc c #f1c37c", +"iSP c #f1c444", +"gNL c #f1c469", +"j9e c #f1c476", +"gZc c #f1c548", +"gRx c #f1c56c", +"kmz c #f1c57d", +"kyj c #f1c57e", +"kyi c #f1c57f", +"gVe c #f1c641", +"iVD c #f1c643", +"jfN c #f1c64c", +"hvI c #f1c654", +"gJW c #f1c668", +"kvS c #f1c67f", +"jlI c #f1c74e", +"iEu c #f1c75d", +"kvR c #f1c780", +"kvQ c #f1c781", +"bZl c #f1c899", +"j#3 c #f1c959", +"gQR c #f1ca40", +"iSN c #f1ca57", +"b4# c #f1ca9c", +"cgh c #f1ca9e", +"b85 c #f1cb9e", +"bUu c #f1cb9f", +"h2Q c #f1cc6d", +"gqW c #f1cc70", +"b4. c #f1cc9f", +"bZk c #f1cca0", +"hzm c #f1cd5e", +"hZV c #f1cd70", +"jP# c #f1cd99", +"iCd c #f1ce6d", +"kCX c #f1ce8b", +"boP c #f1ce9e", +"ckt c #f1cea1", +"h8W c #f1cf70", +"f8d c #f1cf76", +"hpE c #f1cf9d", +"iLf c #f1cfa4", +"fgz c #f1d07d", +"hit c #f1d09d", +"cxf c #f1d0a2", +"kK3 c #f1d182", +"heU c #f1d19f", +"gM6 c #f1d251", +"htr c #f1d29f", +"ikT c #f1d2a4", +"hic c #f1d2aa", +"fPl c #f1d389", +"hto c #f1d3a4", +"jx7 c #f1d46c", +"kHp c #f1d470", +"h6F c #f1d4a0", +"jZ8 c #f1d681", +"kOj c #f1d68e", +"kbG c #f1d68f", +"h0E c #f1d6a3", +"h6E c #f1d6a4", +"h6D c #f1d6a6", +"j8z c #f1d790", +"j1c c #f1d791", +"hpz c #f1d7b0", +"e5G c #f1d88d", +"jT2 c #f1d892", +"jMk c #f1d894", +"f#4 c #f1d8b2", +"kQM c #f1d975", +"kHo c #f1d976", +"etu c #f1d98c", +"eoz c #f1d99d", +"eLL c #f1d99e", +"h9z c #f1d9ab", +"fm9 c #f1d9b0", +"gN6 c #f1da84", +"knc c #f1da88", +"iJQ c #f1da8b", +"fkG c #f1da93", +"jJG c #f1da98", +"kH2 c #f1da99", +"iq0 c #f1da9a", +"eLJ c #f1daa2", +"jG6 c #f1daa5", +"h30 c #f1dab4", +"knj c #f1db71", +"dyX c #f1db80", +"g3B c #f1db82", +"dLn c #f1db83", +"gGk c #f1db90", +"jgH c #f1db96", +"jGS c #f1db9c", +"e1. c #f1dba0", +"e09 c #f1dba1", +"fjK c #f1dba5", +"hQw c #f1dba8", +"dwu c #f1dbae", +"iam c #f1dbb0", +"hep c #f1dbb3", +"knk c #f1dc72", +"dYl c #f1dc8a", +"duK c #f1dc8c", +"etS c #f1dc8d", +"eWM c #f1dc91", +"eRV c #f1dc92", +"e1d c #f1dc94", +"fDu c #f1dc9c", +"fDv c #f1dc9f", +"eQx c #f1dca4", +"fjL c #f1dca7", +"eCe c #f1dca8", +"es2 c #f1dcaa", +"e#4 c #f1dcab", +"kHs c #f1dd74", +"kuv c #f1dd75", +"kBU c #f1dd78", +"kNX c #f1dd7a", +"kHG c #f1dd7b", +"kdW c #f1dd7d", +"epn c #f1dd87", +"h#2 c #f1dd88", +"dTR c #f1dd8a", +"dqh c #f1dd8d", +"eH3 c #f1dd8e", +"eph c #f1dd8f", +"jTR c #f1dd92", +"fgH c #f1dd93", +"gv# c #f1dd96", +"fH2 c #f1dd97", +"jmG c #f1dd98", +"jgG c #f1dd9a", +"fzW c #f1dd9e", +"fr0 c #f1dd9f", +"fjQ c #f1dda0", +"gja c #f1dda1", +"fnT c #f1dda2", +"eVu c #f1dda3", +"fc# c #f1dda4", +"fsO c #f1dda5", +"fkv c #f1dda7", +"fkw c #f1dda8", +"exB c #f1ddaa", +"e3u c #f1ddab", +"d7c c #f1ddac", +"eeL c #f1ddaf", +"eK# c #f1ddb0", +"dI2 c #f1ddb2", +"hD2 c #f1ddba", +".l8 c #f1de76", +"krO c #f1de77", +"kpT c #f1de79", +"kiU c #f1de7f", +"kwq c #f1de89", +"dlQ c #f1de8d", +"eH2 c #f1de8f", +"hhO c #f1de91", +"f.g c #f1de93", +"i9X c #f1de96", +"fv3 c #f1de9e", +"jGQ c #f1dea1", +"eRp c #f1dea2", +"e9W c #f1dea5", +"fsP c #f1dea6", +"fku c #f1dea8", +"e9c c #f1deab", +"ejt c #f1deb0", +"eKa c #f1deb2", +"e.k c #f1deb5", +"kzB c #f1df80", +"klg c #f1df81", +"kwX c #f1df82", +"kb# c #f1df84", +"ktJ c #f1df8e", +"ggy c #f1df8f", +"f7T c #f1df99", +"fjS c #f1df9d", +"fjR c #f1df9e", +"kgf c #f1dfa0", +"e0j c #f1dfa5", +"fkD c #f1dfa6", +"eju c #f1dfaf", +"eGN c #f1dfb1", +"dGG c #f1dfb2", +"e.i c #f1dfb5", +"kHE c #f1e083", +"f.q c #f1e089", +"kyW c #f1e08b", +"f2. c #f1e08e", +"eRN c #f1e092", +"jq7 c #f1e095", +"jxc c #f1e09a", +"fnX c #f1e09c", +".RY c #f1e0a3", +"#D1 c #f1e0a9", +"dXD c #f1e0b3", +"dnC c #f1e0b7", +"e.l c #f1e0b9", +"ehT c #f1e0ba", +"emR c #f1e0bc", +"cZa c #f1e18a", +"fAk c #f1e19a", +"joj c #f1e19e", +"jv. c #f1e19f", +"kxu c #f1e1a0", +".P9 c #f1e1a9", +"fbo c #f1e1b1", +"ejl c #f1e1b4", +"klV c #f1e1b5", +"ehU c #f1e1bb", +"edi c #f1e1bc", +"ioO c #f1e290", +"ktH c #f1e295", +"gzi c #f1e297", +"jwJ c #f1e298", +"jOe c #f1e299", +"jTk c #f1e29b", +"kNu c #f1e2a8", +"#ia c #f1e2ac", +"klO c #f1e2ad", +"d94 c #f1e2b6", +"d0z c #f1e2bc", +"iW7 c #f1e2ca", +"jtP c #f1e393", +"j5c c #f1e394", +"kEp c #f1e395", +"jX5 c #f1e397", +"kPC c #f1e398", +"jNi c #f1e39a", +"jKI c #f1e39b", +"jaN c #f1e3b7", +"d0q c #f1e3bb", +"dVY c #f1e3be", +"khi c #f1e3c0", +"jvV c #f1e3c9", +"gWm c #f1e492", +"j2U c #f1e497", +"hQM c #f1e498", +"jHY c #f1e499", +"jlh c #f1e49a", +"jNk c #f1e49b", +"jH2 c #f1e49c", +"jCp c #f1e49d", +"jzy c #f1e49e", +"kqe c #f1e4a7", +"#aZ c #f1e4ab", +"#nP c #f1e4ac", +"d96 c #f1e4b8", +"d5p c #f1e4ba", +"jwH c #f1e595", +"jzv c #f1e597", +"fVT c #f1e598", +"kBc c #f1e59a", +"jKF c #f1e59b", +"jKG c #f1e59c", +"jH3 c #f1e59e", +"#.x c #f1e5aa", +".NO c #f1e5ab", +"#fT c #f1e5ac", +"h.s c #f1e5b1", +"gUw c #f1e5b2", +"e6F c #f1e695", +"jNJ c #f1e69a", +"kf2 c #f1e69c", +"jZE c #f1e69d", +"jn1 c #f1e6a3", +"gxo c #f1e6b4", +"dRc c #f1e6ba", +"feb c #f1e6c1", +"cEz c #f1e6c5", +"dXM c #f1e6ce", +"ihk c #f1e792", +"kJ4 c #f1e799", +"gmM c #f1e79f", +"icL c #f1e7a2", +"hf9 c #f1e7b1", +"gpQ c #f1e7b6", +"f#0 c #f1e7c2", +"hs3 c #f1e7c3", +"hqW c #f1e8ae", +"hnq c #f1e8af", +"#au c #f1e8b5", +"bLN c #f1e8ca", +"b1p c #f1e990", +"iTE c #f1e999", +"jb. c #f1e9bf", +"bGX c #f1e9cc", +"bQF c #f1e9ce", +"bMR c #f1ea96", +"hKr c #f1eac3", +"eTK c #f1eac8", +"bGZ c #f1ead0", +"bGT c #f1ead2", +"bCn c #f1ead5", +"bQO c #f1eade", +"hav c #f1ebc9", +"dEP c #f1ebcb", +"bQq c #f1ebda", +"eE8 c #f1eccc", +"iy2 c #f1ed9d", +"ec0 c #f1edc6", +"e7F c #f1edce", +"erh c #f1eec8", +"e0n c #f1eed7", +"iEL c #f1efa0", +"hek c #f1efca", +"bUW c #f1efec", +"bU6 c #f1efee", +"iuu c #f1f0c6", +"fQM c #f1f0d4", +"atZ c #f1f0e9", +"f3i c #f1f1cd", +"d0i c #f1f1d4", +"b5# c #f1f1f1", +"fZ2 c #f1f2d0", +"fTE c #f1f2d4", +"d0j c #f1f2d5", +"dVG c #f1f2d8", +"f9s c #f1f3ca", +"f6v c #f1f3cc", +"d0g c #f1f3d7", +"d0h c #f1f3d8", +"dia c #f1f3da", +"dZ4 c #f1f4c3", +"dZ3 c #f1f4c4", +"dVC c #f1f4d1", +"dVE c #f1f4d6", +"d0f c #f1f4d9", +"dVF c #f1f4da", +"dm6 c #f1f4db", +"dik c #f1f4dc", +"drE c #f1f4dd", +"dZW c #f1f5ce", +"dZV c #f1f5d0", +"d0c c #f1f5da", +"drz c #f1f5dc", +"dir c #f1f5dd", +"drF c #f1f5de", +"dAk c #f1f5e0", +"dIw c #f1f5e4", +"a7K c #f1f69f", +"dVs c #f1f6d4", +"dvX c #f1f6de", +"dVi c #f1f6e1", +"dVj c #f1f6e3", +"dZK c #f1f7e0", +"dVm c #f1f7e3", +"dMD c #f1f7e7", +"cec c #f1f9ff", +"cVw c #f1fafc", +"c#s c #f1faff", +"c0l c #f1fbfd", +"cMz c #f1fbfe", +"czB c #f1fbff", +"c0m c #f1fcff", +".#A c #f23ff1", +".bu c #f286f9", +".cq c #f288e2", +"gQo c #f2a063", +".dn c #f2a2ff", +"i0A c #f2a356", +"khG c #f2a44c", +"gMv c #f2a465", +"iOX c #f2a562", +"geK c #f2a565", +".e# c #f2a5fb", +"jt# c #f2a663", +"gIF c #f2a665", +"gbl c #f2a666", +"geI c #f2a667", +"iUH c #f2a764", +"i3l c #f2a85f", +"jyO c #f2a867", +"igZ c #f2aa3d", +"ke2 c #f2aa51", +"ivj c #f2aa5e", +"isL c #f2aa5f", +"js0 c #f2aa67", +"jbq c #f2aa68", +"gBS c #f2ab37", +"isJ c #f2ab60", +"j.O c #f2ab68", +"ivh c #f2ac60", +"isK c #f2ac61", +"i5N c #f2ac68", +"dKb c #f2ac6b", +".eN c #f2acf9", +"gFB c #f2ad35", +"igY c #f2ad3f", +"kcg c #f2ad54", +"jej c #f2ad6a", +"dxz c #f2ad6c", +"dtj c #f2ad6d", +"gVG c #f2ae27", +"izz c #f2ae3e", +"iqh c #f2ae63", +"jek c #f2ae68", +"kfc c #f2ae6a", +"jPg c #f2ae6b", +"j6s c #f2ae6c", +"gBU c #f2af3b", +"ive c #f2af63", +"khS c #f2af6b", +"kj8 c #f2af6c", +"j9. c #f2af6d", +"koN c #f2af6e", +"iCl c #f2b042", +"ix2 c #f2b065", +"jbt c #f2b067", +"kq5 c #f2b06b", +"kfb c #f2b06c", +"iLV c #f2b06d", +"kcr c #f2b06e", +"kfa c #f2b06f", +"hSO c #f2b13a", +"jh# c #f2b164", +"iAT c #f2b16b", +"jg4 c #f2b16d", +"ky# c #f2b16e", +"iAW c #f2b170", +"igS c #f2b241", +"iHP c #f2b242", +"gxU c #f2b244", +"k#z c #f2b25b", +"jbu c #f2b266", +"isH c #f2b267", +"iAS c #f2b26a", +"j88 c #f2b270", +"iwL c #f2b341", +"gxT c #f2b343", +"iE3 c #f2b346", +"jPo c #f2b36a", +"j.G c #f2b36c", +"hMs c #f2b437", +"iE5 c #f2b444", +"iE4 c #f2b446", +"ks8 c #f2b462", +"jeq c #f2b464", +"iqe c #f2b46a", +"gw8 c #f2b478", +".fv c #f2b4fb", +"gJv c #f2b537", +"j8Z c #f2b563", +"jer c #f2b565", +"kvw c #f2b665", +"jR1 c #f2b66c", +"gtj c #f2b67b", +"jiv c #f2b736", +"j8Y c #f2b760", +"iOJ c #f2b772", +"i5E c #f2b77a", +"kAD c #f2b86b", +"iRJ c #f2b871", +"i0# c #f2b87a", +"i22 c #f2b87b", +"hW# c #f2b93a", +"inI c #f2b970", +".ga c #f2b9f0", +"hFR c #f2ba38", +"hTa c #f2ba39", +"jrQ c #f2ba3a", +".g. c #f2bbf9", +"hFv c #f2bc3c", +"gJm c #f2bc3f", +"hJF c #f2bd48", +"iG8 c #f2bd52", +"gRg c #f2be40", +"juI c #f2be48", +"jUv c #f2be70", +"jfG c #f2bf3a", +"hB5 c #f2bf3e", +"joG c #f2bf47", +"io6 c #f2bf49", +"igL c #f2bf54", +"k#x c #f2bf6a", +"ilb c #f2bf78", +".gQ c #f2bfec", +"gFF c #f2c040", +"i.7 c #f2c042", +"j8X c #f2c16c", +"hvG c #f2c24c", +"ibW c #f2c347", +"ieE c #f2c34a", +"jZg c #f2c374", +"hRJ c #f2c390", +"kGf c #f2c47c", +"iaW c #f2c48c", +"k#Q c #f2c577", +"ktp c #f2c57e", +"kvT c #f2c57f", +".hw c #f2c5e7", +"jrt c #f2c65a", +"j4. c #f2c676", +"kcz c #f2c679", +"jWL c #f2c693", +"bUw c #f2c694", +"kfi c #f2c77a", +"koV c #f2c77f", +"kra c #f2c780", +"kyf c #f2c781", +"jY9 c #f2c793", +"k#O c #f2c878", +"kto c #f2c881", +"hXS c #f2c898", +"gM7 c #f2c94e", +"kmy c #f2c97f", +"koU c #f2c980", +"jiz c #f2ca50", +"iMQ c #f2ca5e", +"hCn c #f2cb4a", +"bK0 c #f2cb98", +"bUv c #f2cb9e", +"gQh c #f2cbbe", +"hzn c #f2cc6b", +"bGe c #f2cc95", +"iLq c #f2cc9b", +"bPL c #f2cc9f", +"f1X c #f2cd75", +"bKY c #f2cd9e", +"iOl c #f2ce9a", +"bKZ c #f2ce9d", +"b39 c #f2cea2", +"iCc c #f2cf6f", +"btr c #f2cf9f", +"isk c #f2cfa2", +"kzd c #f2d06e", +"fcn c #f2d07c", +"hG# c #f2d083", +"gUN c #f2d149", +"fLP c #f2d17e", +"cBp c #f2d1a4", +"gUM c #f2d24b", +"hCT c #f2d25d", +"i#H c #f2d273", +"iIo c #f2d2a7", +"hJa c #f2d392", +"hip c #f2d3a2", +"iOb c #f2d3a8", +"kKi c #f2d472", +"kea c #f2d486", +"hez c #f2d4ab", +"kRr c #f2d589", +"g8V c #f2d5af", +"gPh c #f2d5b3", +"keb c #f2d688", +"hvw c #f2d68f", +"h9D c #f2d6a3", +"j1x c #f2d6a5", +"h9T c #f2d6a9", +"gPi c #f2d6b5", +"jZ9 c #f2d780", +"e1f c #f2d78b", +"kl2 c #f2d79f", +"kvE c #f2d7a2", +"kx8 c #f2d7a3", +".jq c #f2d7db", +"jDD c #f2d87b", +"k#. c #f2d890", +"kjI c #f2d8a3", +"h3D c #f2d8a7", +"fr# c #f2d8af", +"fee c #f2d8b2", +"hlT c #f2d8b3", +"gUX c #f2d952", +"izH c #f2d98d", +"kbH c #f2d991", +"j3E c #f2d992", +"kgP c #f2d994", +"isf c #f2d9b5", +"h2y c #f2da7f", +"gCy c #f2da8d", +"jRy c #f2da93", +"f1E c #f2da95", +"et# c #f2da9f", +"iaq c #f2daab", +"iap c #f2daac", +"hoi c #f2db88", +"jjy c #f2db95", +"eLK c #f2dba0", +"iar c #f2dbaa", +"gW6 c #f2dbbd", +"jpp c #f2dc75", +"iwQ c #f2dc90", +"gjM c #f2dc92", +"jjx c #f2dc96", +"jmJ c #f2dc98", +"eQz c #f2dc9f", +"eMD c #f2dca2", +"eOU c #f2dca8", +"eYQ c #f2dca9", +"ian c #f2dcae", +"dwt c #f2dcb2", +"h3y c #f2dcb3", +"hHg c #f2dcb4", +"g64 c #f2dd53", +"kuz c #f2dd72", +"kCk c #f2dd73", +"kHL c #f2dd76", +"jsq c #f2dd77", +"krq c #f2dd89", +"ji# c #f2dd8a", +"eWt c #f2dd95", +"jjz c #f2dd9a", +"e0i c #f2dd9d", +"e5A c #f2dda3", +"fky c #f2dda7", +"fkx c #f2dda8", +"e3t c #f2dda9", +"h9w c #f2ddb1", +"dAN c #f2ddb2", +"h0A c #f2ddb5", +"g8O c #f2ddb6", +"hAz c #f2ddb7", +"hKF c #f2ddbb", +".kK c #f2ddbd", +"h.U c #f2de64", +"kla c #f2de74", +"kiJ c #f2de77", +"kCe c #f2de7c", +"krr c #f2de89", +"f5t c #f2de8a", +"kpe c #f2de8b", +"dYe c #f2de8d", +"dTX c #f2de8f", +"eRW c #f2de94", +"fG9 c #f2de9e", +"jGR c #f2dea1", +"fjP c #f2dea4", +"ffG c #f2dea6", +"e4U c #f2dea8", +"fAw c #f2deaa", +"eTZ c #f2deab", +"eJ9 c #f2deac", +"d2l c #f2deae", +"h6z c #f2deb4", +"hHf c #f2deb9", +"hAw c #f2deba", +"kui c #f2df77", +"kge c #f2df7b", +"k.x c #f2df83", +"jjh c #f2df84", +"kpu c #f2df86", +"c30 c #f2df87", +"dlO c #f2df8f", +"dTV c #f2df91", +"dPx c #f2df92", +"epl c #f2df93", +"etT c #f2df94", +"etU c #f2df95", +"kg# c #f2df97", +"fYR c #f2df98", +"eWh c #f2df9c", +"h2s c #f2dfa0", +"fwL c #f2dfab", +"eCb c #f2dfac", +"eCa c #f2dfad", +"e0. c #f2dfaf", +"e.j c #f2dfb5", +"d5D c #f2dfb6", +"f#3 c #f2dfb8", +"kHx c #f2e07c", +"kiP c #f2e081", +"kQ3 c #f2e082", +"kaP c #f2e083", +"kB6 c #f2e085", +"ekw c #f2e08b", +"kBB c #f2e08d", +"d3a c #f2e08f", +"dlP c #f2e090", +"dy5 c #f2e091", +"eD# c #f2e092", +"dTW c #f2e093", +"jde c #f2e095", +"iY9 c #f2e096", +"jaB c #f2e099", +"f7U c #f2e09a", +"fwC c #f2e09b", +"jpK c #f2e09d", +"d7F c #f2e0a0", +"eRo c #f2e0a1", +"e06 c #f2e0a3", +"fsN c #f2e0a7", +"fzU c #f2e0a8", +"dTd c #f2e0b1", +"esV c #f2e0b3", +"eoo c #f2e0b4", +"dVV c #f2e0b6", +"edg c #f2e0b7", +"kEI c #f2e17d", +"c3Y c #f2e188", +"jsy c #f2e18a", +"kwr c #f2e18b", +"kiO c #f2e194", +"g78 c #f2e196", +"i4H c #f2e198", +"fAl c #f2e19b", +"e4Q c #f2e1b1", +"dXH c #f2e1b2", +"dKG c #f2e1b4", +"dKJ c #f2e1b5", +"edf c #f2e1b8", +"d5y c #f2e1ba", +"g4P c #f2e1bb", +"knu c #f2e286", +"kgm c #f2e28a", +"ktI c #f2e291", +"eH1 c #f2e296", +"jXg c #f2e298", +"e0V c #f2e299", +"jmg c #f2e29f", +"eLT c #f2e2a1", +"g6F c #f2e2a5", +"kjx c #f2e2a6", +"hIM c #f2e2ab", +"eB6 c #f2e2b4", +"dNf c #f2e2ba", +"dAG c #f2e2bb", +"edh c #f2e2bd", +"d5G c #f2e2be", +"kb8 c #f2e2c7", +"iUj c #f2e2c9", +"kwY c #f2e387", +"jOM c #f2e395", +"it9 c #f2e398", +"jI9 c #f2e3a8", +"klS c #f2e3a9", +"khf c #f2e3af", +"gfn c #f2e3b2", +"dwi c #f2e3bc", +"dV0 c #f2e3bd", +"e.m c #f2e3bf", +"htj c #f2e3ce", +"j99 c #f2e494", +"j7J c #f2e495", +"gWo c #f2e496", +"kaF c #f2e499", +"ipt c #f2e49f", +"fAn c #f2e4a4", +"kHf c #f2e4a5", +".5X c #f2e4a8", +"keD c #f2e4b5", +"d0s c #f2e4bb", +"dd4 c #f2e4bd", +"dN# c #f2e4c0", +"hAv c #f2e4cd", +"j5b c #f2e595", +"j2S c #f2e596", +"j6Y c #f2e59a", +"gKN c #f2e59b", +"h3a c #f2e59f", +"j.c c #f2e5a1", +".l3 c #f2e5a5", +"#ih c #f2e5ab", +".Gd c #f2e5ac", +".TV c #f2e5ad", +"jvR c #f2e5b5", +"i2x c #f2e5ba", +"keE c #f2e5bc", +"i2w c #f2e5bd", +"cRM c #f2e5c1", +"fWk c #f2e694", +"fYY c #f2e697", +"jzw c #f2e69a", +"j12 c #f2e69b", +"jFi c #f2e69f", +"hGx c #f2e6a2", +"#.y c #f2e6a9", +"gUv c #f2e6b4", +"c1j c #f2e6c1", +"khg c #f2e6c2", +"kH. c #f2e79a", +"eLU c #f2e79d", +"jnZ c #f2e7a5", +"ksw c #f2e7ae", +"jn2 c #f2e8a5", +"hBV c #f2e8ad", +"huG c #f2e8b0", +"ksy c #f2e8b2", +"d92 c #f2e8bf", +"f#1 c #f2e8c3", +"dwb c #f2e8c6", +"cIU c #f2e8c7", +"i5a c #f2e8c9", +"jnY c #f2e9a9", +"iyC c #f2e9b3", +"hpg c #f2e9c6", +"bGV c #f2e9cc", +"bGU c #f2e9ce", +"irL c #f2ea9d", +"ec2 c #f2eabd", +"fir c #f2eac3", +"fv9 c #f2eac7", +"bQE c #f2eacc", +"bGY c #f2eace", +"j.l c #f2ead4", +"b1q c #f2eb98", +"b6l c #f2eba2", +"hG9 c #f2ebc5", +"hlJ c #f2ebc6", +"hlE c #f2ebca", +"fd5 c #f2ebcc", +"c5W c #f2ebcd", +"gy# c #f2eca6", +"hlI c #f2ecc8", +"hp# c #f2ecc9", +"bGP c #f2ecdc", +"bRB c #f2ed97", +"fNk c #f2edd2", +"bGQ c #f2eddd", +"bQH c #f2edde", +"dyA c #f2ede1", +"fn0 c #f2eedf", +"bLR c #f2eee0", +"eQ5 c #f2eee3", +"hXl c #f2efc6", +"fyG c #f2efd5", +"h9p c #f2f0c7", +"iae c #f2f1c7", +"dGO c #f2f1f1", +"f6o c #f2f2ce", +"hax c #f2f3ce", +"dZX c #f2f4cb", +"g8K c #f2f4cf", +"dQ2 c #f2f4d6", +"dQ3 c #f2f4db", +"drx c #f2f4dc", +"al9 c #f2f4ef", +"dZ2 c #f2f5c5", +"dZ1 c #f2f5c6", +"dVy c #f2f5c7", +"dZY c #f2f5c9", +"dVz c #f2f5cb", +"dVA c #f2f5cf", +"dVB c #f2f5d1", +"dQ1 c #f2f5d3", +"dnc c #f2f5da", +"dMO c #f2f5db", +"dm1 c #f2f5dc", +"dij c #f2f5dd", +"drC c #f2f5de", +"dME c #f2f5df", +"dvS c #f2f5e0", +"dQY c #f2f6d3", +"dQZ c #f2f6d5", +"dMN c #f2f6d9", +"dIB c #f2f6db", +"drw c #f2f6dc", +"dm0 c #f2f6dd", +"ddg c #f2f6de", +"dmZ c #f2f6df", +"dih c #f2f6e0", +"dmY c #f2f6e1", +"dvT c #f2f6e2", +"dQP c #f2f7dd", +"dIC c #f2f7df", +"dQN c #f2f7e1", +"dQM c #f2f7e2", +"dQL c #f2f7e4", +"dVk c #f2f7e5", +"dQO c #f2f8e0", +"dMF c #f2f8e2", +"dVl c #f2f8e4", +"c#v c #f2fafd", +"c#y c #f2fafe", +"bNb c #f2faff", +"ceh c #f2fbff", +"c0n c #f2fcff", +".aR c #f36bec", +".dt c #f39efd", +".ea c #f3a5f9", +".e. c #f3a5ff", +"iO3 c #f3a655", +"i0p c #f3a660", +"j.5 c #f3a758", +"koy c #f3a84f", +"gih c #f3a868", +"iXO c #f3a957", +"i3k c #f3a962", +"gpB c #f3a966", +"i3j c #f3aa65", +"jp5 c #f3aa66", +"jyP c #f3aa67", +"js1 c #f3ab67", +"iqi c #f3ac62", +".eO c #f3acf7", +"j.P c #f3ad68", +"i5O c #f3ad69", +".eM c #f3adfe", +"ibO c #f3ae3d", +"iR6 c #f3ae58", +"iUV c #f3ae5a", +"j.2 c #f3ae5e", +"ivi c #f3ae62", +"jj4 c #f3ae67", +"ix6 c #f3af66", +"j.Q c #f3af68", +"kvH c #f3af6b", +"jm7 c #f3af6c", +"gFA c #f3b039", +"ieu c #f3b03f", +"izA c #f3b040", +"ix3 c #f3b066", +"kq6 c #f3b06b", +"koM c #f3b06c", +"j6w c #f3b06e", +"gZF c #f3b12c", +"ibP c #f3b140", +"iCk c #f3b141", +"j.Y c #f3b162", +"k#H c #f3b16c", +"kvJ c #f3b170", +"gFi c #f3b236", +"gJu c #f3b23a", +"iE9 c #f3b242", +"iKB c #f3b244", +"jha c #f3b265", +"kL4 c #f3b26f", +"g3E c #f3b32f", +"iE6 c #f3b342", +"jbv c #f3b366", +"jg3 c #f3b36e", +"jg1 c #f3b370", +".fx c #f3b3f4", +"gxS c #f3b443", +"iKA c #f3b445", +"jes c #f3b566", +"gJb c #f3b638", +"jMN c #f3b66c", +"jrS c #f3b736", +"gBG c #f3b742", +"igV c #f3b745", +"kce c #f3b75d", +"jlE c #f3b837", +"k#y c #f3b860", +"i6I c #f3b942", +"ihC c #f3ba46", +"gw7 c #f3ba84", +"it3 c #f3bb47", +"isG c #f3bb6f", +"jPm c #f3bc6f", +"jBB c #f3bc85", +"h2i c #f3bd3f", +"iqd c #f3bd73", +"iLK c #f3bd7b", +"gti c #f3bd87", +"hL9 c #f3be48", +"j.D c #f3be81", +"jjP c #f3be8e", +"gBL c #f3bf43", +"ig6 c #f3bf45", +"ik. c #f3bf49", +"huN c #f3bf4a", +"kFW c #f3bf7a", +"gJw c #f3c03d", +"iYy c #f3c13a", +"jWV c #f3c172", +"hU0 c #f3c18b", +"gBp c #f3c244", +"igU c #f3c24a", +"ie4 c #f3c24b", +"kM# c #f3c27a", +"hK2 c #f3c28e", +"gmC c #f3c444", +"iEr c #f3c459", +"gVv c #f3c45d", +"iVF c #f3c53c", +"gRc c #f3c53e", +"hjP c #f3c54d", +"hF7 c #f3c55d", +"j1E c #f3c575", +"kDw c #f3c57d", +"hOx c #f3c595", +"j1F c #f3c676", +"kcw c #f3c678", +"iiG c #f3c683", +"gxP c #f3c749", +"j6z c #f3c777", +"j9d c #f3c778", +"khZ c #f3c77b", +"kvO c #f3c780", +"hHI c #f3c794", +"gJ# c #f3c83f", +"g7j c #f3c847", +"iHa c #f3c85d", +"j9c c #f3c878", +"kcx c #f3c879", +"khY c #f3c87b", +"kkc c #f3c87d", +"kmw c #f3c87e", +"koS c #f3c87f", +"kvP c #f3c881", +"gQ5 c #f3c944", +"ij7 c #f3c950", +"iHb c #f3c95e", +"gVt c #f3c96d", +"k#P c #f3c978", +"kcy c #f3c979", +"kfh c #f3c97a", +"kmx c #f3c97e", +"koT c #f3c980", +"kL2 c #f3c994", +"iJ0 c #f3ca5f", +"j1y c #f3ca97", +"iVK c #f3cb59", +"k#w c #f3cb79", +"bBO c #f3cb95", +"bPN c #f3cb9c", +"gEH c #f3cbbd", +".ib c #f3cbe2", +"iMY c #f3cc5e", +"iNT c #f3cc6e", +"hVY c #f3cc73", +"bPM c #f3cc9f", +"imA c #f3cd53", +"i1p c #f3cd59", +"j34 c #f3cd9c", +"gyx c #f3ce41", +"iPV c #f3ce64", +"b84 c #f3cea2", +"bUt c #f3cfa4", +"gM2 c #f3d047", +"gVr c #f3d07e", +"hVP c #f3d081", +"iIy c #f3d0a1", +".iP c #f3d0db", +"bGd c #f3d19f", +"bGc c #f3d1a0", +"iDt c #f3d1a2", +"coB c #f3d1a5", +"i#I c #f3d274", +"jME c #f3d2a0", +"hAE c #f3d2a1", +"iLg c #f3d2a4", +"iAb c #f3d2a5", +"gUW c #f3d34b", +"ihQ c #f3d375", +"fkL c #f3d380", +"h78 c #f3d384", +"ipn c #f3d476", +"iW# c #f3d487", +"iCV c #f3d4a7", +"jz5 c #f3d580", +"fAK c #f3d58a", +"heT c #f3d5a2", +"hlV c #f3d5ad", +".jr c #f3d5d4", +"gUT c #f3d654", +"bpn c #f3d6a4", +"hma c #f3d6a8", +"kbp c #f3d789", +"kbo c #f3d78a", +"kH5 c #f3d78d", +"htn c #f3d7aa", +"haK c #f3d7b0", +"kbq c #f3d88a", +"kbr c #f3d88b", +"fkI c #f3d890", +"eWz c #f3d894", +"iAt c #f3d8ad", +"hw6 c #f3d8ae", +"iOa c #f3d8b0", +"hlU c #f3d8b1", +"g4V c #f3d8b2", +"gTa c #f3d8b6", +"kKm c #f3d974", +"kbs c #f3d98c", +"jYP c #f3d993", +"khs c #f3d9a4", +"hAD c #f3d9b0", +"gO8 c #f3d9b6", +"doA c #f3d9ba", +"jKX c #f3da81", +"fef c #f3dab3", +"kE2 c #f3db68", +"kND c #f3db77", +"f1F c #f3db96", +"dpm c #f3db9c", +"iTq c #f3db9e", +"h9A c #f3dbab", +"hXx c #f3dbae", +"g0X c #f3dbb8", +"gUS c #f3dc5a", +"hAx c #f3dcb3", +"htm c #f3dcb9", +"kiE c #f3dd80", +"jIc c #f3dd83", +"kQg c #f3dd8d", +"eMx c #f3dd95", +"jmH c #f3dd97", +"jmI c #f3dd98", +"eoB c #f3dda6", +"ida c #f3ddad", +"iao c #f3ddaf", +"hDY c #f3ddb3", +"hD0 c #f3ddb4", +"hHh c #f3ddb5", +"gYP c #f3de5d", +"dlT c #f3de89", +"kah c #f3de90", +"jvh c #f3de93", +"e1e c #f3de96", +"f4V c #f3de9c", +"gft c #f3dea2", +"eQy c #f3dea3", +"e1a c #f3dea4", +"e5B c #f3dea5", +"eOY c #f3deab", +"dE2 c #f3deb3", +"hN5 c #f3deb6", +"hXu c #f3deb7", +"hRs c #f3deb8", +"g1. c #f3dec2", +"kQ6 c #f3df7d", +"kpg c #f3df8a", +"kmV c #f3df8b", +"dqk c #f3df8d", +"dTY c #f3df90", +"e1y c #f3df93", +"gcH c #f3df99", +"j08 c #f3df9a", +"fkF c #f3df9b", +"j8p c #f3df9d", +"jGT c #f3dfa3", +"e1# c #f3dfa5", +"fjM c #f3dfaa", +"eCc c #f3dfac", +"eCd c #f3dfad", +"eT0 c #f3dfae", +"hXr c #f3dfb6", +"hDX c #f3dfbc", +"hw2 c #f3dfbd", +"hcM c #f3e06b", +"kKJ c #f3e07e", +"kNU c #f3e07f", +"kCm c #f3e081", +"cLD c #f3e08c", +"dTZ c #f3e090", +"duL c #f3e092", +"dYj c #f3e093", +"iZc c #f3e095", +"eWP c #f3e096", +"f7V c #f3e09a", +"f4M c #f3e09c", +"gV2 c #f3e09e", +"iol c #f3e0a3", +"kK5 c #f3e0a5", +"foE c #f3e0ab", +"e3s c #f3e0ac", +"eYP c #f3e0ad", +"eC# c #f3e0ae", +"es1 c #f3e0af", +"exA c #f3e0b0", +"h.V c #f3e163", +"knD c #f3e17c", +"kEF c #f3e17d", +"kQ7 c #f3e17e", +"kNZ c #f3e17f", +"kzI c #f3e180", +"kN6 c #f3e181", +"kzi c #f3e183", +"kBA c #f3e18c", +"ktM c #f3e18d", +"c31 c #f3e18e", +"e53 c #f3e18f", +"d25 c #f3e190", +"dbP c #f3e191", +"dqi c #f3e192", +"j4w c #f3e195", +"g.z c #f3e198", +"f7W c #f3e19d", +"gnF c #f3e19e", +"eat c #f3e1a0", +"e05 c #f3e1a4", +"jmT c #f3e1ad", +"eLE c #f3e1af", +"e7W c #f3e1b2", +"eoq c #f3e1b3", +"eGG c #f3e1b4", +"eop c #f3e1b5", +"h3x c #f3e1b9", +"h6v c #f3e1bb", +"e7N c #f3e1bc", +"bkQ c #f3e1bf", +"hN8 c #f3e1c2", +"krS c #f3e278", +"kue c #f3e27b", +"kus c #f3e284", +"krV c #f3e285", +"kd2 c #f3e289", +"c8Q c #f3e28f", +"d71 c #f3e290", +"dgY c #f3e293", +"g4q c #f3e294", +"eML c #f3e296", +"eRS c #f3e297", +"jdg c #f3e298", +"gZR c #f3e29d", +"fwX c #f3e2a9", +"e4R c #f3e2b3", +"dS5 c #f3e2b5", +"dKK c #f3e2b6", +"dRh c #f3e2b8", +"h3v c #f3e2bb", +"haG c #f3e2bd", +"kER c #f3e383", +"kEV c #f3e385", +"knq c #f3e386", +"krY c #f3e388", +"f.V c #f3e38d", +"kdC c #f3e390", +"d70 c #f3e394", +"dbU c #f3e395", +"eMK c #f3e396", +"eMJ c #f3e398", +"kjc c #f3e399", +"hwq c #f3e39b", +"iCK c #f3e39c", +"fo3 c #f3e39d", +"jje c #f3e3a0", +"giR c #f3e3a2", +"ear c #f3e3a6", +"dKI c #f3e3b7", +"d5x c #f3e3bc", +"iak c #f3e3bd", +"dRt c #f3e3c0", +"emQ c #f3e3c1", +"jrb c #f3e3c6", +"efG c #f3e48f", +"kfF c #f3e494", +"irl c #f3e495", +"kkv c #f3e498", +"kyE c #f3e49a", +"jUY c #f3e49b", +"e0Z c #f3e4a1", +"#.A c #f3e4a7", +"dV1 c #f3e4bd", +"dV2 c #f3e4be", +"ehS c #f3e4c1", +"isd c #f3e4c8", +"cyP c #f3e591", +"j0s c #f3e598", +"gn9 c #f3e599", +"jSq c #f3e59c", +"jNl c #f3e59d", +"#nH c #f3e5af", +"eQc c #f3e5b7", +"dr4 c #f3e5be", +"dAH c #f3e5bf", +"dRj c #f3e5c1", +"euB c #f3e691", +"fcD c #f3e694", +"kp. c #f3e698", +"j5d c #f3e699", +"c8X c #f3e69a", +"eVA c #f3e69b", +"jtR c #f3e69c", +"kyG c #f3e69d", +"jPY c #f3e69e", +"jmD c #f3e6a2", +"jEf c #f3e6b5", +"d5k c #f3e6be", +"d0n c #f3e6bf", +"di2 c #f3e6c0", +"fec c #f3e6c1", +"e7M c #f3e6c2", +"cNe c #f3e6c3", +"cRK c #f3e6c4", +"hs8 c #f3e6cd", +"euy c #f3e791", +"kMx c #f3e797", +"kMw c #f3e799", +"jqX c #f3e79a", +"jwI c #f3e79b", +"kDL c #f3e79c", +"haf c #f3e79d", +"jH4 c #f3e7a0", +"#.E c #f3e7ad", +"jsO c #f3e7b5", +"i5. c #f3e7ba", +"d0r c #f3e7c0", +"cNf c #f3e7c3", +"h2L c #f3e896", +"kwd c #f3e89d", +"j13 c #f3e89e", +"jqY c #f3e8a4", +".Ja c #f3e8af", +"dKW c #f3e8cf", +"kJ3 c #f3e99b", +"jkR c #f3e9a9", +"gpS c #f3e9b7", +"dRd c #f3e9c0", +"hwO c #f3e9d2", +"hDW c #f3e9db", +"cY7 c #f3ea8b", +"iV9 c #f3ea99", +"j#I c #f3ea9c", +"i7R c #f3eac4", +"bLO c #f3eace", +"i7Q c #f3ead2", +"d2w c #f3ead6", +"fpc c #f3eb92", +"h2Y c #f3eba9", +"dM5 c #f3ebc1", +"fea c #f3ebc5", +"g4S c #f3ebca", +"bLP c #f3ebcf", +"hAt c #f3ebe0", +"fht c #f3ec9b", +"c#g c #f3eca3", +"hej c #f3eccb", +"diU c #f3eccc", +"bLQ c #f3ecd3", +"c.a c #f3ecdf", +"fmC c #f3edc8", +"hsX c #f3edc9", +"bG0 c #f3edd7", +"bQr c #f3edda", +"hwJ c #f3eecb", +"bLD c #f3eeda", +"bLC c #f3eedd", +"hUl c #f3efc6", +"im8 c #f3efca", +"hlH c #f3efcf", +"iwk c #f3f0a1", +"h6p c #f3f0c8", +"ikF c #f3f0cb", +"hpc c #f3f0d0", +"ir3 c #f3f1ca", +"ipB c #f3f1cb", +"at4 c #f3f2ec", +"gaw c #f3f3cf", +"f3h c #f3f4d0", +"g8J c #f3f4d2", +"fWZ c #f3f4d5", +"bC. c #f3f4ea", +"b5b c #f3f4f4", +"dVx c #f3f5c5", +"dZ0 c #f3f5c6", +"dZZ c #f3f5c7", +"dVv c #f3f5cc", +"dQX c #f3f5ce", +"dVu c #f3f5cf", +"fZ0 c #f3f5d1", +"dQ0 c #f3f5d4", +"dMP c #f3f5dd", +"dEE c #f3f5de", +"dMQ c #f3f5df", +"dVw c #f3f6c7", +"dVt c #f3f6d1", +"dMK c #f3f6d8", +"dIz c #f3f6d9", +"dIA c #f3f6da", +"dIy c #f3f6db", +"dEC c #f3f6dc", +"dm2 c #f3f6dd", +"dm3 c #f3f6de", +"dii c #f3f6df", +"dAl c #f3f6e0", +"dMM c #f3f7d9", +"dML c #f3f7da", +"dvV c #f3f7db", +"dvW c #f3f7dc", +"dAp c #f3f7dd", +"drv c #f3f7de", +"dm4 c #f3f7df", +"did c #f3f7e0", +"die c #f3f7e1", +"dig c #f3f7e2", +"dAm c #f3f7e3", +"dEz c #f3f7e4", +"dic c #f3f8e1", +"dIx c #f3f8e2", +"dEA c #f3f8e3", +"dAn c #f3f8e4", +"b6z c #f3faff", +"bWN c #f3fbff", +"cVA c #f3fcff", +".cN c #f496fd", +".cM c #f496ff", +".cH c #f49aff", +".du c #f49dfb", +"khE c #f49e47", +".ds c #f49eff", +"kjU c #f4a44c", +"iO2 c #f4a457", +"jBP c #f4a561", +"iXB c #f4a863", +"iUI c #f4a964", +"gii c #f4a968", +"f99 c #f4a969", +"i0n c #f4aa67", +"glX c #f4aa68", +"jBH c #f4ab67", +"iUT c #f4ac57", +"iXN c #f4ac58", +"j.3 c #f4ac5c", +"iUU c #f4ad58", +"i8l c #f4ad67", +"i8j c #f4ad69", +"i5P c #f4ad6a", +"i8k c #f4ae69", +"jv5 c #f4ae6c", +"js3 c #f4ae6d", +"ks6 c #f4af57", +"jqc c #f4af68", +"jj3 c #f4af6b", +"jHp c #f4b06a", +"jUo c #f4b06c", +"j37 c #f4b06d", +"j.R c #f4b167", +"jnc c #f4b168", +"kvI c #f4b16b", +"jj2 c #f4b16d", +"iLW c #f4b170", +"iE7 c #f4b241", +"igX c #f4b243", +"kvu c #f4b25c", +"i8q c #f4b264", +"kAR c #f4b26b", +"jj1 c #f4b26e", +"kyb c #f4b271", +"iE8 c #f4b342", +"kDq c #f4b36b", +"jj0 c #f4b36f", +"kAT c #f4b372", +".fy c #f4b3f2", +"iwK c #f4b442", +"iHL c #f4b445", +"jbw c #f4b466", +"jKb c #f4b46b", +"jg2 c #f4b471", +"k#K c #f4b473", +"khU c #f4b474", +"iHO c #f4b543", +"iHN c #f4b544", +"iHM c #f4b545", +"kxY c #f4b561", +"jbx c #f4b566", +"jet c #f4b567", +"kP# c #f4b571", +"gJt c #f4b63c", +"gBJ c #f4b643", +"ivd c #f4b66a", +"j.F c #f4b66f", +"gNh c #f4b73b", +"hgW c #f4b740", +"ig4 c #f4b83e", +"gBH c #f4b843", +"i8a c #f4b874", +"ibQ c #f4b943", +"gI5 c #f4b945", +"kAC c #f4b969", +".gb c #f4b9ee", +"gQ8 c #f4ba3a", +"hPB c #f4ba44", +"gFq c #f4bb44", +"hYM c #f4bb45", +"igQ c #f4bb4a", +"gZJ c #f4bc3b", +"kcd c #f4bc64", +"jiu c #f4bd3a", +"gN3 c #f4bd3b", +"h1N c #f4bd48", +"igP c #f4bd4f", +"igO c #f4bd53", +"kDb c #f4bd74", +"iUu c #f4bd78", +"hrM c #f4be46", +"jRZ c #f4be71", +"iOI c #f4be79", +"h8d c #f4bf40", +"kPg c #f4bf78", +"jUu c #f4c072", +"i5D c #f4c087", +"jUt c #f4c174", +"kFV c #f4c17c", +"gNS c #f4c23a", +"kI4 c #f4c27a", +"kGe c #f4c27c", +"gtW c #f4c34b", +"jWU c #f4c374", +"inH c #f4c37b", +"kvN c #f4c37d", +"gBA c #f4c447", +"jAo c #f4c44e", +"ieD c #f4c54a", +"ie7 c #f4c54d", +"j9b c #f4c576", +"ij9 c #f4c64e", +"k#N c #f4c677", +"khX c #f4c67a", +"kAX c #f4c67f", +"iVs c #f4c751", +"j6y c #f4c777", +"kfg c #f4c779", +"kkb c #f4c77a", +"kr# c #f4c77f", +"ktn c #f4c780", +"gqo c #f4c846", +"gVu c #f4c866", +"gRy c #f4c867", +"j3Y c #f4c879", +"kka c #f4c87c", +"kO9 c #f4c892", +"hAM c #f4c89b", +"i1l c #f4c943", +"gNn c #f4c944", +"hgi c #f4c94e", +"ie5 c #f4c94f", +"kIY c #f4c995", +"kF9 c #f4ca97", +"ihB c #f4cb51", +"joq c #f4cb62", +"hMS c #f4cb6d", +"hCo c #f4cc51", +"gMo c #f4ccc0", +"kDn c #f4cd9a", +"j.C c #f4cda0", +"gIq c #f4cdc1", +"iPW c #f4ce5f", +"i4h c #f4ce61", +"iVI c #f4cf64", +"iST c #f4cf65", +"j6q c #f4cf9f", +"gNd c #f4d049", +"cbK c #f4d0a5", +"i6W c #f4d157", +"hzl c #f4d158", +"iCF c #f4d174", +"gJU c #f4d282", +"boQ c #f4d2a2", +"iCW c #f4d2a3", +"iIp c #f4d2a4", +"hCS c #f4d359", +"j0. c #f4d376", +"fVB c #f4d37d", +"j84 c #f4d3a4", +"hJu c #f4d489", +"kOJ c #f4d493", +"bBN c #f4d4a1", +"bBM c #f4d4a2", +"iFH c #f4d4a5", +"csT c #f4d4a8", +"gQ1 c #f4d550", +"gVz c #f4d55e", +"hSU c #f4d585", +"hx. c #f4d5a4", +"ikn c #f4d677", +"hb. c #f4d6a5", +"g9j c #f4d6a6", +"haL c #f4d6ae", +"hpG c #f4d7a7", +"g5g c #f4d7a8", +"heV c #f4d7a9", +"iuB c #f4d7ae", +"g8W c #f4d7af", +"g4W c #f4d7b0", +"kQK c #f4d873", +"iW. c #f4d88b", +"g3K c #f4d890", +"ha9 c #f4d8a8", +"hpB c #f4d8aa", +"iR# c #f4d8ae", +"kNA c #f4d977", +"koh c #f4d99e", +"h0F c #f4d9a7", +"g0Y c #f4d9b2", +"gS3 c #f4d9b3", +"kbu c #f4da8d", +"kbn c #f4da8f", +"ke# c #f4da90", +"h3F c #f4daa7", +"hx# c #f4dab2", +"keP c #f4dba7", +"hXy c #f4dbab", +"gWT c #f4dbb7", +".jp c #f4dbe4", +"kbI c #f4dc95", +"j1d c #f4dc96", +"ias c #f4dcaa", +"h0D c #f4dcad", +"hia c #f4dcb7", +"kbK c #f4dd96", +"kgQ c #f4dd98", +"h3B c #f4ddb1", +"hN9 c #f4ddb6", +"gPj c #f4ddc0", +"kR# c #f4de6e", +"j2A c #f4de89", +"kc1 c #f4de8f", +"kgU c #f4de96", +"kbJ c #f4de97", +"j54 c #f4de98", +"jOV c #f4de99", +"dtS c #f4dea5", +"hHj c #f4deb5", +"bxm c #f4deb6", +"gS1 c #f4debc", +"gO7 c #f4debd", +"k.e c #f4df7e", +"kKh c #f4df81", +"kag c #f4df91", +"gnm c #f4df95", +"jvi c #f4df96", +"iCs c #f4df9a", +"k#a c #f4df9b", +"eVv c #f4dfa3", +"eOX c #f4dfae", +"h6B c #f4dfb3", +"dAO c #f4dfb4", +"hKD c #f4dfb7", +"hKB c #f4dfb8", +"g08 c #f4dfc0", +"kKl c #f4e080", +"izn c #f4e08e", +"kc2 c #f4e092", +"eRB c #f4e099", +"kh. c #f4e09f", +"ket c #f4e0a0", +"fbs c #f4e0a7", +"jRC c #f4e0ab", +"fHJ c #f4e0ac", +"eLG c #f4e0ae", +"iFZ c #f4e0b4", +"h9v c #f4e0b5", +"hKA c #f4e0b7", +"hRp c #f4e0b8", +"hRt c #f4e0b9", +"het c #f4e0ba", +"fed c #f4e0bb", +"heF c #f4e0c1", +"hgv c #f4e16a", +"kN2 c #f4e179", +"kpX c #f4e181", +"kmW c #f4e18d", +"kai c #f4e194", +"eMM c #f4e195", +"dYk c #f4e196", +"f7X c #f4e19c", +"f7Y c #f4e19d", +"j8C c #f4e19e", +"fzX c #f4e1a0", +"kh# c #f4e1a1", +"fDw c #f4e1a2", +"ffH c #f4e1a6", +"fjO c #f4e1a7", +"e9e c #f4e1a9", +"fEa c #f4e1ac", +"eGS c #f4e1af", +"eLF c #f4e1b0", +"e3x c #f4e1b1", +"hUp c #f4e1b8", +"hN3 c #f4e1ba", +"hcL c #f4e26e", +"kzE c #f4e27b", +"kr9 c #f4e27e", +"kQ5 c #f4e280", +"kzD c #f4e281", +"kwL c #f4e286", +"f5r c #f4e28d", +"dgX c #f4e293", +"dYg c #f4e294", +"ekn c #f4e295", +"d3. c #f4e296", +"j4x c #f4e297", +"jdf c #f4e298", +"fEz c #f4e29c", +"gri c #f4e29d", +"fox c #f4e29e", +"jpL c #f4e29f", +"h#X c #f4e2a0", +"#D2 c #f4e2ac", +"fsH c #f4e2af", +"eGU c #f4e2b0", +"eC. c #f4e2b1", +"e7V c #f4e2b3", +"hXs c #f4e2b9", +"h3w c #f4e2ba", +"hXt c #f4e2bb", +"h0z c #f4e2bc", +"h6x c #f4e2bd", +"iuF c #f4e2c5", +"gPk c #f4e2c7", +"kKG c #f4e382", +"kdM c #f4e384", +"kpY c #f4e385", +"io0 c #f4e386", +"knJ c #f4e387", +"kum c #f4e388", +"ktQ c #f4e38f", +"kyX c #f4e390", +"ky0 c #f4e391", +"c8R c #f4e393", +"dgZ c #f4e395", +"dPy c #f4e396", +"dDi c #f4e397", +"dYi c #f4e398", +"iTC c #f4e399", +"eWN c #f4e39a", +"fgI c #f4e39b", +"fr4 c #f4e39d", +"ft# c #f4e39e", +"hoC c #f4e3a2", +"e00 c #f4e3a3", +"jmL c #f4e3aa", +"fG8 c #f4e3ac", +"fnO c #f4e3b0", +"fnN c #f4e3b3", +"dfT c #f4e3b4", +"dXG c #f4e3b5", +"dKQ c #f4e3b6", +"h0G c #f4e3c5", +"hpk c #f4e3c6", +"kKq c #f4e479", +"kzn c #f4e47f", +"kCb c #f4e485", +"k.p c #f4e487", +"kpJ c #f4e488", +"kub c #f4e48a", +"kmN c #f4e497", +"e52 c #f4e498", +"jXh c #f4e499", +"eRQ c #f4e49a", +"hGW c #f4e49b", +"jUZ c #f4e49c", +"iWd c #f4e49e", +".R0 c #f4e4a8", +"fwY c #f4e4ac", +"dOS c #f4e4b6", +"esX c #f4e4b7", +"eGO c #f4e4b8", +"dKL c #f4e4b9", +"d0x c #f4e4bb", +"err c #f4e4c2", +"hs9 c #f4e4c8", +"is# c #f4e4ca", +"krW c #f4e588", +"j72 c #f4e58b", +"kQY c #f4e58c", +"eIL c #f4e591", +"hdO c #f4e593", +"eQI c #f4e59b", +"jKJ c #f4e59c", +"i4I c #f4e59f", +"jds c #f4e5a0", +"fjT c #f4e5a4", +"jpi c #f4e5ad", +"#ax c #f4e5ae", +"e9b c #f4e5b7", +"dKO c #f4e5b8", +"dKP c #f4e5b9", +"dKN c #f4e5ba", +"e7Y c #f4e5bb", +"dVW c #f4e5c0", +"emS c #f4e5c4", +"hw0 c #f4e5cd", +"izb c #f4e696", +"k.. c #f4e697", +"ktD c #f4e698", +"ky2 c #f4e69a", +"kGD c #f4e69b", +"eRO c #f4e69c", +"gZ5 c #f4e69e", +"iNI c #f4e6a0", +"jwK c #f4e6a1", +"jk8 c #f4e6a6", +"hVA c #f4e6ae", +"dr3 c #f4e6c1", +"jgQ c #f4e6ce", +"kcY c #f4e795", +"kMz c #f4e797", +"kaJ c #f4e798", +"jjk c #f4e799", +"ihF c #f4e79a", +"kJq c #f4e79c", +"irI c #f4e79d", +"hd8 c #f4e79e", +"jPZ c #f4e7a0", +"jtS c #f4e7a1", +"jGg c #f4e7a2", +"jgk c #f4e7a5", +"iGY c #f4e7a9", +"iJK c #f4e7aa", +"#i# c #f4e7b2", +"jBq c #f4e7b8", +"d0t c #f4e7be", +"d5z c #f4e7c1", +"dr2 c #f4e7c2", +"cWu c #f4e7c5", +"kKW c #f4e88b", +"flz c #f4e893", +"kie c #f4e89b", +"j2V c #f4e89c", +"j15 c #f4e89d", +"jFj c #f4e8a2", +"jva c #f4e8ab", +"jvb c #f4e8ac", +".8e c #f4e8ad", +"i30 c #f4e8af", +"kEu c #f4e8b5", +"keF c #f4e8bf", +"ehR c #f4e8c2", +"f#2 c #f4e8c3", +"c56 c #f4e8c4", +"dRk c #f4e8c5", +"c1g c #f4e8c6", +"eG8 c #f4e8c8", +"j4s c #f4e99d", +"j14 c #f4e99e", +"gMO c #f4e9a0", +"jX6 c #f4e9a1", +"jCq c #f4e9a3", +"c55 c #f4e9c6", +"g8S c #f4e9c9", +"gLk c #f4e9d2", +"eIQ c #f4ea95", +"ezd c #f4ea97", +"jcq c #f4ea9d", +"gm# c #f4eab9", +"ec4 c #f4eabf", +"jyv c #f4eac5", +"d.6 c #f4eac9", +"cNc c #f4eaca", +"bGW c #f4eacd", +"jqZ c #f4eba8", +"ijc c #f4ebb3", +"kp8 c #f4ebb6", +"giy c #f4ebba", +"iZC c #f4ebbf", +"c1i c #f4ebc8", +"i2u c #f4ebd1", +"hAu c #f4ebdf", +"iwF c #f4ec8f", +"iqQ c #f4ecb6", +"jff c #f4ecb8", +"jJP c #f4ecbc", +"ja3 c #f4ecc1", +"cwg c #f4eccd", +"fk5 c #f4ed92", +"fmD c #f4edc7", +"hpe c #f4edca", +"cWq c #f4edcf", +"hAe c #f4eec9", +"hwE c #f4eeca", +"hwK c #f4eecb", +"cnN c #f4eece", +"eTL c #f4efce", +"dQ9 c #f4efd1", +"crX c #f4efd3", +"bU9 c #f4efe1", +"hwI c #f4f0cd", +"dGV c #f4f0e6", +"eLY c #f4f1e6", +"eQ3 c #f4f1e9", +"iBW c #f4f2a3", +"ic6 c #f4f2cb", +"ih9 c #f4f2cc", +"ifI c #f4f2cd", +"iQZ c #f4f2cf", +"hs0 c #f4f2d1", +"gaC c #f4f3ca", +"iFA c #f4f3cd", +"iN3 c #f4f3cf", +"hwH c #f4f3d1", +"hpb c #f4f3d2", +"bQd c #f4f3f0", +"bCw c #f4f3f2", +"dGQ c #f4f4f3", +"dQV c #f4f5c7", +"dQU c #f4f5c9", +"dQW c #f4f5ca", +"dQT c #f4f5cc", +"ghs c #f4f5d2", +"dQS c #f4f6cf", +"dQR c #f4f6d1", +"dMJ c #f4f6d2", +"dMI c #f4f6d4", +"dQQ c #f4f6d5", +"dAo c #f4f6dc", +"dEB c #f4f6de", +"aS5 c #f4f6f1", +"atT c #f4f6f3", +"goK c #f4f7d3", +"f3n c #f4f7d4", +"dMH c #f4f7d9", +"dvU c #f4f7dc", +"dMG c #f4f7de", +"dm9 c #f4f7df", +"drB c #f4f7e0", +"a7L c #f4f89b", +"gl# c #f4f8d1", +"g0N c #f4f8d4", +"dib c #f4f8e0", +"ddh c #f4f8e1", +"dif c #f4f8e2", +"dru c #f4f8e3", +"bIt c #f4fbfe", +"bWO c #f4fbff", +"crB c #f4fcff", +".c. c #f58dff", +".dv c #f59dfa", +"iO1 c #f5a358", +".eb c #f5a5f8", +"kmg c #f5a64e", +"iRX c #f5a662", +"kmh c #f5a750", +"iOY c #f5a762", +"iR3 c #f5a857", +"iXC c #f5a862", +"ke0 c #f5a94e", +"iRW c #f5a965", +"keZ c #f5aa51", +"jw. c #f5aa65", +"i3m c #f5ab5f", +"jEy c #f5ab67", +"geJ c #f5ab6b", +"gbk c #f5ab6c", +"iR4 c #f5ac57", +"iUS c #f5ac58", +"jv4 c #f5ac68", +"i5Q c #f5ac69", +".eP c #f5acf5", +"iR5 c #f5ad58", +"i51 c #f5ad5a", +"js2 c #f5ad6a", +"jEE c #f5ae69", +"i50 c #f5af5c", +"i5Z c #f5af5e", +"iXM c #f5b058", +"i5Y c #f5b060", +"i5X c #f5b062", +"jex c #f5b063", +"i5W c #f5b064", +"jnb c #f5b16a", +"j1D c #f5b16d", +"iXL c #f5b257", +"jhb c #f5b267", +"i0z c #f5b357", +"j.T c #f5b367", +"j.S c #f5b368", +"jjX c #f5b371", +"j9# c #f5b372", +"gx3 c #f5b440", +"j.1 c #f5b462", +"kGa c #f5b46c", +"kq7 c #f5b473", +"koO c #f5b474", +"jAs c #f5b538", +"kDp c #f5b570", +"jm8 c #f5b572", +"kcs c #f5b574", +"kfd c #f5b575", +"gVH c #f5b629", +"kqS c #f5b65f", +"jby c #f5b667", +"kG# c #f5b670", +"gZG c #f5b72d", +"gNg c #f5b73b", +"gJs c #f5b73c", +"h72 c #f5b742", +"gx4 c #f5b743", +"iet c #f5b744", +"igW c #f5b845", +"kcf c #f5b860", +"jMM c #f5b86f", +"j.E c #f5b872", +"kct c #f5b875", +"kj9 c #f5b876", +"gNf c #f5b93c", +"kfe c #f5b975", +"gBI c #f5ba43", +"gQ7 c #f5bb3a", +"jPl c #f5bb71", +"gKb c #f5bc39", +"gFr c #f5bd45", +"jlD c #f5be3a", +"joP c #f5be3b", +"hZj c #f5be3e", +"jRY c #f5be73", +"kM. c #f5be78", +"juM c #f5bf3a", +"gVL c #f5bf3e", +"gtR c #f5bf43", +".gR c #f5bfe9", +"iRI c #f5c079", +"gmm c #f5c143", +"h1W c #f5c158", +"kDv c #f5c17b", +"gpw c #f5c18b", +"jlC c #f5c23c", +"i.6 c #f5c241", +"jWT c #f5c274", +"jZf c #f5c275", +"kk# c #f5c279", +"kmv c #f5c27a", +"ktm c #f5c27c", +"kye c #f5c27d", +"iXk c #f5c282", +"gNi c #f5c340", +"jDb c #f5c350", +"kcv c #f5c377", +"gFv c #f5c443", +"gJi c #f5c44e", +"j39 c #f5c475", +"k#M c #f5c476", +"kLR c #f5c47f", +"gxY c #f5c543", +"irC c #f5c54d", +"ief c #f5c558", +"j6x c #f5c576", +"isF c #f5c57b", +"kOX c #f5c580", +"kLQ c #f5c581", +"iIW c #f5c585", +".hx c #f5c5e4", +"gJn c #f5c643", +"gmz c #f5c649", +"iLJ c #f5c685", +"gw6 c #f5c696", +"jgV c #f5c697", +"ij8 c #f5c74e", +"iqc c #f5c780", +"jEr c #f5c792", +"hR5 c #f5c896", +"ihA c #f5c950", +"g6H c #f5c953", +"hCI c #f5c95e", +"gNM c #f5ca65", +"i.O c #f5cb5e", +"iJV c #f5cb60", +"gth c #f5cb9d", +".ic c #f5cbde", +"hGf c #f5cc52", +"gQi c #f5cdc0", +"gNa c #f5ce48", +"gmZ c #f5ce70", +"jHe c #f5ce9b", +"gRi c #f5cf4b", +"hGg c #f5cf55", +"jfM c #f5cf59", +"iH# c #f5cf65", +"hky c #f5cf81", +"hEj c #f5cfa3", +"iVz c #f5d053", +"iYq c #f5d05f", +"kAQ c #f5d09d", +"h4d c #f5d0a0", +"gtg c #f5d0a5", +"gIt c #f5d0c4", +".iQ c #f5d0d7", +"i4i c #f5d15c", +"iVJ c #f5d162", +"iMX c #f5d166", +"i.P c #f5d168", +"iCE c #f5d178", +"i9s c #f5d25e", +"iPO c #f5d264", +"j8W c #f5d286", +"iLp c #f5d2a0", +"hJH c #f5d359", +"kBO c #f5d371", +"fYJ c #f5d37c", +"iFI c #f5d3a3", +"a4B c #f5d3a6", +"j#4 c #f5d45a", +"jJ0 c #f5d4a2", +"gQ0 c #f5d551", +"hGh c #f5d55a", +"kFG c #f5d593", +"hVL c #f5d5a0", +"k#E c #f5d5a6", +"cgg c #f5d5aa", +"bxw c #f5d6a4", +"kcn c #f5d6a7", +"icE c #f5d777", +"his c #f5d7a4", +"hiu c #f5d7a5", +"hts c #f5d7a6", +"iIz c #f5d7ab", +"cxe c #f5d7ac", +"gU1 c #f5d855", +"hD6 c #f5d8a8", +"g9i c #f5d8a9", +"iRa c #f5d8ae", +"gWV c #f5d8b2", +"iuC c #f5d9b0", +"ixo c #f5d9b2", +"g24 c #f5da48", +"guK c #f5da5b", +"gZv c #f5da76", +"gyp c #f5da8b", +"kbt c #f5da8e", +"kAO c #f5daa6", +"hpC c #f5daad", +"iLu c #f5daaf", +"iFG c #f5dab2", +"iAa c #f5dab4", +"gLr c #f5dab8", +"gYS c #f5db55", +"gjF c #f5db86", +"h9C c #f5dba8", +"j33 c #f5dbac", +"heE c #f5dbba", +"eoA c #f5dc9e", +"fit c #f5dcb6", +"g81 c #f5dcba", +"iWa c #f5dd96", +"hXz c #f5ddae", +"iLe c #f5ddb7", +"gO9 c #f5ddbb", +"ihx c #f5de7f", +"kHk c #f5df81", +"k## c #f5df98", +"kbL c #f5df9a", +"f4W c #f5df9d", +"idb c #f5dfae", +"fis c #f5dfb9", +"hpq c #f5dfbf", +"h#0 c #f5e091", +"kgT c #f5e09a", +"kgR c #f5e09b", +"kep c #f5e09c", +"jpN c #f5e09f", +"hSR c #f5e0a6", +"iNA c #f5e0a7", +"hDZ c #f5e0b6", +"hAy c #f5e0b9", +"hOL c #f5e0ba", +"haQ c #f5e0c1", +"hig c #f5e0c2", +"gTc c #f5e0c4", +"j41 c #f5e18e", +"dy7 c #f5e18f", +"kif c #f5e190", +"hrZ c #f5e191", +"j9C c #f5e195", +"kgS c #f5e19b", +"keo c #f5e19d", +"fsD c #f5e19e", +"jpM c #f5e19f", +"g.7 c #f5e1a0", +"kK6 c #f5e1a1", +"jmK c #f5e1a4", +"e0g c #f5e1a6", +"fAy c #f5e1ac", +"eTX c #f5e1af", +"hHk c #f5e1b8", +"hKz c #f5e1b9", +"haC c #f5e1ba", +"f#5 c #f5e1bb", +"ixv c #f5e1c1", +"g2V c #f5e262", +"d7Y c #f5e297", +"k.T c #f5e29e", +"k.W c #f5e29f", +"k#b c #f5e2a0", +"kes c #f5e2a1", +"e0h c #f5e2a3", +"fwO c #f5e2ae", +"fnP c #f5e2af", +"eQs c #f5e2b0", +"eGT c #f5e2b1", +"hRo c #f5e2b9", +"hUt c #f5e2ba", +"bkT c #f5e2bb", +"hUx c #f5e2bf", +"gLi c #f5e2c5", +"g45 c #f5e2c6", +"kHJ c #f5e37f", +"kQL c #f5e384", +"kfG c #f5e391", +"dlS c #f5e393", +"kc3 c #f5e396", +"kaj c #f5e397", +"d3# c #f5e398", +"fEA c #f5e39d", +"e4X c #f5e39e", +"fVJ c #f5e39f", +"k.U c #f5e3a1", +"foP c #f5e3a2", +"kRl c #f5e3a7", +"fbt c #f5e3a8", +"fgm c #f5e3ab", +"foG c #f5e3ad", +"fHI c #f5e3b0", +"hvM c #f5e3b2", +"hTC c #f5e3b5", +"e7Z c #f5e3b7", +"bkU c #f5e3bb", +"hRq c #f5e3bd", +"bpg c #f5e3bf", +"iIL c #f5e3c3", +"hlZ c #f5e3c6", +"kw4 c #f5e482", +"kNC c #f5e485", +"gZC c #f5e488", +"j8h c #f5e489", +"kg. c #f5e48a", +"kk4 c #f5e48c", +"kyZ c #f5e490", +"kws c #f5e491", +"eaV c #f5e492", +"cZd c #f5e494", +"kGx c #f5e496", +"kJl c #f5e497", +"dHh c #f5e498", +"j63 c #f5e499", +"eWK c #f5e49a", +"jau c #f5e49b", +"fH7 c #f5e49e", +"klE c #f5e4a1", +"gR7 c #f5e4a3", +"kLn c #f5e4a7", +"fwW c #f5e4ac", +"foJ c #f5e4ad", +"eVr c #f5e4b2", +"e4T c #f5e4b5", +"e9a c #f5e4b6", +"eGP c #f5e4b7", +"exx c #f5e4b8", +"id# c #f5e4c0", +"h3G c #f5e4c2", +"hKE c #f5e4c5", +"kwN c #f5e580", +"kln c #f5e587", +"kgr c #f5e588", +"j5y c #f5e589", +"kzu c #f5e58a", +"dPq c #f5e591", +"ktR c #f5e592", +"h#B c #f5e594", +"kiF c #f5e595", +"c32 c #f5e597", +"kJX c #f5e599", +"e5S c #f5e59a", +"jXi c #f5e59b", +"eWJ c #f5e59c", +"eWO c #f5e59e", +"fcz c #f5e59f", +"fxh c #f5e5a0", +"fSz c #f5e5a3", +"gKg c #f5e5a5", +"dTc c #f5e5b8", +"dOQ c #f5e5b9", +"dKH c #f5e5bb", +"h6w c #f5e5c0", +"ksS c #f5e5c4", +"hHe c #f5e5c8", +"kNH c #f5e67a", +"kpH c #f5e67d", +"knz c #f5e689", +"klh c #f5e68a", +"krL c #f5e68e", +"f8q c #f5e692", +"hM6 c #f5e695", +"cZe c #f5e697", +"dbQ c #f5e699", +"j61 c #f5e69b", +"eRR c #f5e69c", +"f.i c #f5e69d", +"fcy c #f5e69e", +"fSf c #f5e6a2", +"fxg c #f5e6a3", +"fO9 c #f5e6a4", +"klF c #f5e6a6", +"kOA c #f5e6aa", +"fsQ c #f5e6ae", +"gmX c #f5e6af", +"esQ c #f5e6b9", +"dOR c #f5e6ba", +"dKM c #f5e6bb", +"eeF c #f5e6bc", +"dVU c #f5e6bd", +"cIX c #f5e6c4", +"jIl c #f5e6c5", +"gLh c #f5e6ca", +"joa c #f5e6cd", +"hD3 c #f5e6ce", +"hKI c #f5e6cf", +"knx c #f5e78a", +"kgl c #f5e78b", +"kuo c #f5e78c", +"fIH c #f5e794", +"kad c #f5e798", +"dTP c #f5e799", +"eH0 c #f5e79a", +"ky1 c #f5e79b", +"kGz c #f5e79c", +"jU0 c #f5e79d", +"eWG c #f5e79e", +"jKK c #f5e79f", +"d7D c #f5e7af", +"jjC c #f5e7b3", +"kk5 c #f5e7b6", +"ffA c #f5e7bb", +"d2d c #f5e7bd", +"eB3 c #f5e7be", +"d0D c #f5e7c1", +"d5C c #f5e7c2", +"ev6 c #f5e7c6", +"hKH c #f5e7d3", +"cp9 c #f5e893", +"cC7 c #f5e895", +"ky3 c #f5e89a", +"kmX c #f5e89b", +"kGC c #f5e89c", +"kyD c #f5e89f", +"jKL c #f5e8a1", +"kgk c #f5e8a5", +"jv# c #f5e8a8", +"fbn c #f5e8bc", +"ehQ c #f5e8c2", +"d5w c #f5e8c3", +"cRL c #f5e8c5", +"eFm c #f5e8c6", +"gPa c #f5e8ce", +"hAA c #f5e8d3", +"f8w c #f5e991", +"j5e c #f5e99b", +"kJn c #f5e99c", +"jtQ c #f5e99d", +"j0t c #f5e99f", +"kBe c #f5e9a0", +"kBg c #f5e9a1", +"jP0 c #f5e9a3", +"h0h c #f5e9a7", +"ift c #f5e9a8", +"i7i c #f5e9a9", +"#.w c #f5e9ad", +".3H c #f5e9af", +"kn7 c #f5e9b1", +"kk7 c #f5e9be", +"dVS c #f5e9c1", +"g4Q c #f5e9c3", +"dnB c #f5e9c5", +"cWv c #f5e9c7", +"kJo c #f5ea9b", +"kaH c #f5eaa0", +"jH5 c #f5eaa3", +"i6y c #f5eaaf", +"kEv c #f5eab6", +"ge2 c #f5eaba", +"d5q c #f5eac3", +"dVO c #f5eac5", +"c50 c #f5eac7", +"d.Y c #f5eac8", +"dVX c #f5eaca", +"cRJ c #f5eacb", +"euC c #f5eb96", +"jib c #f5eba3", +"jOf c #f5eba6", +"ics c #f5eba9", +"jxb c #f5ebac", +".1E c #f5ebb0", +"#k2 c #f5ebb2", +"hYC c #f5ebb6", +"gtC c #f5ebb8", +"ge0 c #f5ebbb", +"kHe c #f5ebc0", +"dEU c #f5ebc7", +"c1h c #f5ebc8", +"dIU c #f5ebc9", +"c5Z c #f5ebca", +"hwZ c #f5ebd8", +"kNk c #f5ec9e", +"kt1 c #f5eca0", +"hTS c #f5eca5", +"jq0 c #f5ecaa", +"hyn c #f5ecb2", +"giV c #f5ecb3", +"gma c #f5ecbb", +"gHp c #f5ecd9", +"gp3 c #f5eda9", +"gmf c #f5edab", +"iqR c #f5edb6", +"ec3 c #f5edc3", +"dIS c #f5edc6", +"ec1 c #f5edc7", +"eYG c #f5edcb", +"klQ c #f5eddb", +"b6k c #f5ee9f", +"f#Z c #f5eeca", +"dER c #f5eecb", +"c53 c #f5eecd", +"cRH c #f5eed1", +"bWr c #f5ef9d", +"d.2 c #f5efce", +"ddX c #f5efd1", +"bLE c #f5efda", +"itY c #f5f093", +"gqB c #f5f0a9", +"jGX c #f5f0bd", +"eYH c #f5f0d0", +"iTV c #f5f1cb", +"g0R c #f5f1d0", +"g0S c #f5f1d3", +"dO1 c #f5f1e8", +"iQ0 c #f5f2ce", +"evU c #f5f2d0", +"hNR c #f5f2d1", +"hlG c #f5f2d2", +"fd6 c #f5f2d5", +"ejL c #f5f2e9", +"iy6 c #f5f3a3", +"iWC c #f5f3ce", +"hh2 c #f5f3d1", +"im9 c #f5f3d2", +"co4 c #f5f3ed", +"iZt c #f5f4ce", +"iIe c #f5f4cf", +"g0P c #f5f4d0", +"hAf c #f5f4d1", +"haw c #f5f4d2", +"hsZ c #f5f4d3", +"hH# c #f5f4d4", +"iId c #f5f4d5", +"fij c #f5f4d8", +"btR c #f5f4f4", +"ii. c #f5f5d3", +"hpa c #f5f5d4", +"fFV c #f5f5db", +"bpK c #f5f5ec", +"b9F c #f5f5f4", +"bGG c #f5f5f5", +"goJ c #f5f6d2", +"h3q c #f5f6d4", +"hKt c #f5f6d5", +"d5h c #f5f6dd", +"cCB c #f5f6f6", +"gdQ c #f5f7d4", +"fZ1 c #f5f8d6", +"dm5 c #f5f8e0", +"aBN c #f5f8f5", +"ght c #f5f9d5", +"gzP c #f5f9d6", +"bR2 c #f5fbff", +"cVx c #f5fcfe", +"c#t c #f5fcff", +".bA c #f684ff", +".c# c #f68dfe", +".b9 c #f68dff", +".b4 c #f691ff", +".cO c #f696fc", +".dw c #f69df9", +"iUN c #f6a059", +"iUO c #f6a157", +"iR1 c #f6a159", +"iXF c #f6a15a", +"iXG c #f6a259", +"iUM c #f6a25b", +"iR2 c #f6a458", +"iUP c #f6a557", +"iXD c #f6a560", +".ec c #f6a5f7", +"iXH c #f6a658", +"i0s c #f6a65b", +"i0r c #f6a65d", +"i0q c #f6a660", +"iUK c #f6a661", +"i0t c #f6a758", +"kmf c #f6a84f", +"iUJ c #f6a964", +"iUQ c #f6aa56", +"iXI c #f6ab57", +"jyW c #f6ab66", +"i0m c #f6ab69", +"iUR c #f6ac57", +"i3p c #f6ac59", +"j.4 c #f6ac5b", +"i3o c #f6ac5c", +"i3n c #f6ac5e", +".eQ c #f6acf3", +"jt. c #f6ad68", +"i3i c #f6ad6a", +"f98 c #f6ad6d", +"jBI c #f6ae6a", +"jJ7 c #f6ae6b", +"koz c #f6af57", +"i3q c #f6af58", +"jHk c #f6af6b", +"iXJ c #f6b057", +"i8w c #f6b05c", +"i5V c #f6b067", +"jEA c #f6b06e", +"f7a c #f6b071", +"i8v c #f6b15d", +"jp6 c #f6b16e", +"jyQ c #f6b170", +"iXK c #f6b256", +"i8u c #f6b25f", +"jhc c #f6b267", +"jna c #f6b26d", +"jHl c #f6b26f", +"js4 c #f6b271", +"i8t c #f6b361", +"kya c #f6b36c", +".fz c #f6b3f0", +"i8s c #f6b463", +"kDr c #f6b46c", +"kAS c #f6b46d", +"jp7 c #f6b472", +"i0y c #f6b557", +"i8r c #f6b565", +"jjZ c #f6b572", +"ktj c #f6b574", +"hSM c #f6b641", +"j.Z c #f6b665", +"jKa c #f6b66f", +"ibN c #f6b73f", +"kIZ c #f6b770", +"jm9 c #f6b773", +"k#L c #f6b874", +"kq8 c #f6b875", +"gN1 c #f6b92a", +"g3F c #f6b92f", +"koP c #f6b976", +".gc c #f6b9ec", +"hVH c #f6ba43", +"gN2 c #f6bb30", +"jxD c #f6bb38", +"gFt c #f6bb40", +"khV c #f6bb75", +"gZI c #f6bc30", +"kff c #f6bc75", +"kI3 c #f6bc77", +"kGd c #f6bc78", +"gVK c #f6bd31", +"igR c #f6bd48", +"jUs c #f6bd74", +"kk. c #f6bd78", +"kmu c #f6bd79", +"gRO c #f6be34", +"gFs c #f6be43", +"ktl c #f6be79", +"jxC c #f6bf3a", +"koQ c #f6bf7a", +"juN c #f6c03a", +"hP8 c #f6c03f", +"h2h c #f6c040", +"gxD c #f6c045", +"jrR c #f6c13b", +"khW c #f6c177", +"kAW c #f6c17c", +"jrG c #f6c24a", +"igN c #f6c256", +"hYQ c #f6c25f", +"koR c #f6c27b", +"kr. c #f6c27c", +"j#Z c #f6c33b", +"hvq c #f6c34f", +"i21 c #f6c388", +"hFr c #f6c44a", +"kII c #f6c484", +"gue c #f6c547", +"kOW c #f6c582", +"hyz c #f6c644", +"ibV c #f6c649", +"jrK c #f6c64e", +"h7M c #f6c656", +"hvr c #f6c659", +"kIJ c #f6c682", +"gxM c #f6c750", +"jmZ c #f6c796", +"i6Q c #f6c842", +"jcz c #f6c852", +"hF6 c #f6c857", +"gRz c #f6c85d", +"jrJ c #f6c954", +"gQ9 c #f6ca42", +"j#R c #f6ca54", +"gw5 c #f6cb9d", +"gN# c #f6cc4a", +"gxB c #f6cd46", +"iPK c #f6cd59", +"jlc c #f6cd64", +"inG c #f6cd8a", +"iG# c #f6cd94", +"gBq c #f6ce45", +"imB c #f6ce53", +"hzk c #f6ce54", +"gJX c #f6ce66", +"ila c #f6ce8d", +"gxA c #f6cf46", +"imC c #f6cf54", +"hCR c #f6cf55", +"hzj c #f6d053", +"hCQ c #f6d054", +"io5 c #f6d155", +"j6j c #f6d183", +"kx9 c #f6d19f", +"hAN c #f6d1a8", +"gCm c #f6d23f", +"hJG c #f6d256", +"kvG c #f6d2a1", +"io4 c #f6d357", +"i6V c #f6d35c", +"iYB c #f6d364", +"iMP c #f6d367", +"a0r c #f6d3a5", +"gQX c #f6d457", +"i1o c #f6d466", +"ktf c #f6d4a4", +"iYo c #f6d55a", +"e98 c #f6d582", +"iiF c #f6d599", +"ig# c #f6d59e", +"iRk c #f6d5a6", +"bKX c #f6d5aa", +".js c #f6d5cf", +"ikm c #f6d67a", +"hJC c #f6d67c", +"kq3 c #f6d6a6", +"bGb c #f6d6a8", +"kHl c #f6d775", +"kxI c #f6d78f", +"hme c #f6d7a6", +"a80 c #f6d7ac", +"bbj c #f6d7ad", +"bke c #f6d7ae", +"bwS c #f6d7af", +"irR c #f6d87a", +"hD8 c #f6d8a6", +"ke9 c #f6d8a9", +"bxv c #f6d8ab", +"cks c #f6d8ae", +"boI c #f6d8af", +"heA c #f6d8b0", +"hpF c #f6d9a7", +"g00 c #f6d9b1", +"gyt c #f6da5e", +"hQf c #f6da95", +"heQ c #f6daa9", +".j7 c #f6dac7", +"i1c c #f6db60", +"foR c #f6db93", +"iT5 c #f6dbb1", +"iC3 c #f6dbb5", +"gS2 c #f6dbb8", +"g25 c #f6dc4b", +"fSo c #f6dc95", +"heP c #f6dcaf", +"hio c #f6dcb0", +"iWR c #f6dcb1", +"hpm c #f6dcb7", +"kBN c #f6dd7e", +"hdv c #f6dd9f", +"iZH c #f6ddb2", +"hE. c #f6ddb4", +"gHx c #f6ddbc", +"f1G c #f6de99", +"eRH c #f6de9f", +"hm. c #f6deb9", +"kEy c #f6df80", +"f4X c #f6df9d", +"ha5 c #f6dfb9", +"gS6 c #f6dfbd", +"g23 c #f6e04f", +"kN4 c #f6e06b", +"f4Y c #f6e09f", +"h61 c #f6e0b7", +"bpm c #f6e0bb", +"hHs c #f6e0bd", +"gHy c #f6e0c1", +"kE3 c #f6e171", +"kbM c #f6e19d", +"keq c #f6e19e", +"iq# c #f6e1ae", +"hyB c #f6e1b5", +"hUw c #f6e1b6", +"hKC c #f6e1ba", +"hlS c #f6e1bf", +"gS7 c #f6e1c2", +"j2z c #f6e28e", +"kfH c #f6e291", +"kfI c #f6e292", +"kLt c #f6e299", +"kOD c #f6e29a", +"k.R c #f6e29d", +"k.S c #f6e29e", +"ker c #f6e29f", +"kqh c #f6e2a1", +"ksz c #f6e2a2", +"hD1 c #f6e2ba", +"hes c #f6e2bb", +"bpi c #f6e2bd", +"iAh c #f6e2c1", +"g65 c #f6e355", +"g6W c #f6e364", +"j7x c #f6e38f", +"hdM c #f6e394", +"ke. c #f6e3a1", +"jMl c #f6e3a2", +"keu c #f6e3a4", +"jpO c #f6e3a5", +"ffI c #f6e3a7", +"fjN c #f6e3aa", +"jOZ c #f6e3af", +"eOT c #f6e3b2", +"eYS c #f6e3b3", +"e3y c #f6e3b4", +"hN2 c #f6e3b9", +"bkS c #f6e3bc", +"bph c #f6e3bd", +"gWS c #f6e3c4", +"gP# c #f6e3c5", +"jFs c #f6e48d", +"kkw c #f6e493", +"kc0 c #f6e494", +"kc4 c #f6e498", +"kc5 c #f6e499", +"d7Z c #f6e49b", +"kIl c #f6e49c", +"jvj c #f6e49e", +"fwD c #f6e49f", +"gr. c #f6e4a1", +"fK4 c #f6e4a3", +"jGV c #f6e4a6", +"ffJ c #f6e4a7", +"eTY c #f6e4b2", +"eVs c #f6e4b3", +"e3w c #f6e4b5", +"haF c #f6e4bf", +"i2R c #f6e4c5", +"i72 c #f6e4c6", +"gDQ c #f6e4c7", +"g46 c #f6e4c9", +"kEL c #f6e580", +"kdB c #f6e587", +"dHl c #f6e593", +"kBd c #f6e594", +"dqj c #f6e596", +"dg0 c #f6e597", +"kGy c #f6e599", +"kMv c #f6e59a", +"j4y c #f6e59b", +"i1W c #f6e59d", +"e1t c #f6e59f", +"fH8 c #f6e5a0", +"g#f c #f6e5a1", +"gCN c #f6e5a3", +"e5t c #f6e5a9", +"kOd c #f6e5aa", +"fnS c #f6e5ae", +"fD9 c #f6e5b2", +"eVt c #f6e5b4", +"eQr c #f6e5b5", +"eGR c #f6e5b6", +"esY c #f6e5b9", +"hUo c #f6e5bd", +"g8P c #f6e5bf", +"gO6 c #f6e5c9", +"ha4 c #f6e5ca", +"h.0 c #f6e65f", +"kHt c #f6e67e", +"ki0 c #f6e686", +"cup c #f6e68d", +"kyY c #f6e693", +"f5q c #f6e694", +"eaU c #f6e697", +"c8S c #f6e698", +"c33 c #f6e699", +"kJm c #f6e69a", +"kMu c #f6e69b", +"kc6 c #f6e69c", +"f.h c #f6e69d", +"e1s c #f6e69e", +"e5W c #f6e69f", +"f.j c #f6e6a0", +"e5X c #f6e6a1", +"fgi c #f6e6a4", +"ffK c #f6e6a5", +"fVh c #f6e6a6", +"kIk c #f6e6a7", +"iFe c #f6e6ad", +"fvY c #f6e6af", +"jRB c #f6e6b5", +"jT8 c #f6e6b7", +"eVm c #f6e6b8", +"eLC c #f6e6b9", +"dXF c #f6e6bb", +"dOL c #f6e6bc", +"j59 c #f6e6c5", +"hw5 c #f6e6cd", +"h.T c #f6e772", +"j7W c #f6e78b", +"j9Z c #f6e793", +"f18 c #f6e795", +"ekv c #f6e796", +"f.p c #f6e798", +"c8T c #f6e799", +"kPB c #f6e79a", +"d29 c #f6e79d", +"d7X c #f6e79e", +"eWg c #f6e79f", +"e5T c #f6e7a0", +"f.k c #f6e7a1", +"fH9 c #f6e7a2", +"ggm c #f6e7a6", +"gyU c #f6e7a7", +"j8D c #f6e7a9", +"jD7 c #f6e7ae", +"hjL c #f6e7af", +"fnM c #f6e7b8", +"eTT c #f6e7b9", +"eLB c #f6e7ba", +"frS c #f6e7bb", +"dTa c #f6e7bc", +"e7X c #f6e7bd", +"dS6 c #f6e7be", +"e7O c #f6e7c4", +"gLj c #f6e7cd", +"hKJ c #f6e7d1", +"kBY c #f6e883", +"kEW c #f6e889", +"k.n c #f6e88c", +"klw c #f6e88d", +"kBV c #f6e890", +"krs c #f6e896", +"eku c #f6e899", +"f8p c #f6e89b", +"dYh c #f6e89d", +"eRP c #f6e89f", +"jNm c #f6e8a1", +"kl# c #f6e8a2", +"h8q c #f6e8a4", +"h83 c #f6e8a5", +"ijh c #f6e8aa", +"kje c #f6e8af", +"kju c #f6e8b0", +"dTb c #f6e8bd", +"fnL c #f6e8be", +"d0w c #f6e8bf", +"iAl c #f6e8c4", +"dkO c #f6e8c6", +"ejG c #f6e8c8", +"kNW c #f6e98a", +"fAZ c #f6e997", +"fEF c #f6e998", +"fMu c #f6e999", +"j91 c #f6e99a", +"hhs c #f6e99b", +"kpk c #f6e99c", +"j62 c #f6e99e", +"jKM c #f6e9a1", +"jZJ c #f6e9a2", +"jKN c #f6e9a3", +"jar c #f6e9a7", +"iTt c #f6e9ab", +"kg4 c #f6e9ac", +"jAQ c #f6e9ae", +"jgI c #f6e9b0", +"khj c #f6e9b1", +"kk6 c #f6e9b4", +"fjH c #f6e9bd", +"fbm c #f6e9be", +"dVT c #f6e9c1", +"d0B c #f6e9c3", +"g8R c #f6e9c4", +"emN c #f6e9c5", +"ic9 c #f6e9c8", +"ikL c #f6e9d1", +"jzL c #f6ea96", +"kJp c #f6ea9b", +"kds c #f6ea9c", +"g4o c #f6ea9d", +"kkR c #f6ea9e", +"kyF c #f6eaa1", +"gvD c #f6eaa2", +"jI6 c #f6eaa3", +"jH6 c #f6eaa5", +"kKb c #f6eaab", +"kHh c #f6eaac", +"fjG c #f6eac0", +"emO c #f6eac6", +"emP c #f6eac8", +"ev7 c #f6eaca", +"id. c #f6eace", +"hXA c #f6ead4", +"eDS c #f6eb96", +"g0m c #f6eb9c", +"kaK c #f6eb9d", +"kwz c #f6eb9e", +"kGB c #f6eba1", +"jzz c #f6eba6", +"jtT c #f6eba8", +"i9N c #f6eba9", +"kjj c #f6ebae", +"#ii c #f6ebb1", +".TU c #f6ebb2", +".7O c #f6ebb3", +"#Av c #f6ebb5", +"gfm c #f6ebbc", +"iZD c #f6ebc1", +"dAF c #f6ebc9", +"cWt c #f6ebcb", +"hXD c #f6ebd7", +"jIk c #f6ebd8", +"ep1 c #f6ec95", +"eDW c #f6ec99", +"g#o c #f6ec9c", +"gWn c #f6ec9f", +"ip# c #f6eca2", +"ktG c #f6eca3", +"grp c #f6eca6", +".1D c #f6ecb2", +"hVw c #f6ecb6", +"h.t c #f6ecba", +"kK# c #f6ecbc", +"kgo c #f6ecc1", +"d97 c #f6ecc4", +"i5d c #f6ecc8", +"diZ c #f6ecca", +"ev5 c #f6eccc", +"c1f c #f6eccd", +"fa. c #f6eccf", +"eCn c #f6ecd4", +"cUm c #f6ed92", +"iBP c #f6ed9a", +"eNt c #f6ed9b", +"kwc c #f6eda1", +"jli c #f6eda5", +"iyD c #f6edb6", +"jh1 c #f6edb7", +"gix c #f6edbd", +"di1 c #f6edca", +"c51 c #f6edcb", +"d0y c #f6edcc", +"ifc c #f6ee9c", +"kNl c #f6ee9f", +"kJ5 c #f6eea0", +"ifo c #f6eea4", +"jZP c #f6eeaa", +"jn3 c #f6eeaf", +"jxa c #f6eeb1", +"iof c #f6eeb8", +"ith c #f6eeb9", +"hjI c #f6eeba", +"kNq c #f6eebe", +"ec5 c #f6eec5", +"dd1 c #f6eecd", +"fih c #f6eed0", +"i2t c #f6eed2", +"gtK c #f6efa9", +"giI c #f6efb2", +"ilJ c #f6efb7", +"e7L c #f6efcb", +"drT c #f6efcf", +"crY c #f6efd0", +"cNb c #f6efd1", +"cRI c #f6efd2", +"juc c #f6f0b0", +"iWE c #f6f0c4", +"dM6 c #f6f0c9", +"eJX c #f6f0cf", +"d.1 c #f6f0d1", +"e3k c #f6f1d1", +"jEb c #f6f1de", +"i7E c #f6f2c0", +"ehz c #f6f2ce", +"f#W c #f6f2d3", +"d7m c #f6f2e1", +"j.e c #f6f3c1", +"iTW c #f6f3cb", +"hKs c #f6f3d2", +"ddY c #f6f3d5", +"eL4 c #f6f3e9", +"fby c #f6f3eb", +"iBV c #f6f4a3", +"iN4 c #f6f4cf", +"ixj c #f6f4d0", +"ipC c #f6f4d1", +"in. c #f6f4d2", +"ii# c #f6f4d4", +"eAs c #f6f4d5", +"cgM c #f6f4eb", +"iFB c #f6f5cf", +"iz2 c #f6f5d0", +"gav c #f6f5d1", +"ir4 c #f6f5d2", +"hwG c #f6f5d3", +"hlF c #f6f5d4", +"g8I c #f6f5d5", +"fmt c #f6f5d9", +"bVr c #f6f5f5", +"iz3 c #f6f6d1", +"iCP c #f6f6d2", +"hXm c #f6f6d3", +"hDJ c #f6f6d4", +"hDI c #f6f6d5", +"bCa c #f6f6f6", +"fJF c #f6f7dc", +"fTF c #f6f8db", +"fCl c #f6f8dd", +"fNl c #f6f8de", +"fFY c #f6f8df", +"gsj c #f6f9d5", +"gw. c #f6f9d6", +"gHf c #f6f9d8", +"fWY c #f6f9da", +"fTG c #f6f9db", +"fQN c #f6f9dd", +"fFX c #f6f9df", +"gsk c #f6fad6", +"gDD c #f6fad7", +"fTH c #f6fadc", +"cvg c #f6fbff", +"bWP c #f6fcfe", +"bWK c #f6fcff", +".oU c #f6fd62", +"cDT c #f6fdff", +".a9 c #f77aff", +".bz c #f784ff", +".ca c #f78dfd", +".cP c #f796fb", +"iR0 c #f7a25b", +"iXE c #f7a25d", +"iRZ c #f7a45d", +"iUL c #f7a45e", +"iO0 c #f7a65c", +"iRY c #f7a660", +"kjV c #f7a850", +"khF c #f7aa50", +"khD c #f7ab52", +"i0u c #f7ac58", +"jv9 c #f7ae6a", +"kqQ c #f7af57", +"jBO c #f7af6b", +"jEz c #f7af6c", +"i8A c #f7b05c", +"jMJ c #f7b06c", +"i0v c #f7b159", +"jqb c #f7b16b", +"jyV c #f7b16d", +"jBJ c #f7b16f", +"ke1 c #f7b359", +"jRU c #f7b36e", +"jyR c #f7b371", +"jJ8 c #f7b372", +"i0w c #f7b457", +"i52 c #f7b45a", +"ks5 c #f7b45d", +"kGb c #f7b46d", +"js5 c #f7b473", +"i0x c #f7b558", +"jHo c #f7b570", +"kvK c #f7b574", +"jC1 c #f7b637", +"kI0 c #f7b66c", +"kI1 c #f7b66e", +"jp8 c #f7b674", +"j38 c #f7b675", +"jFN c #f7b737", +"kPc c #f7b770", +"i.W c #f7b841", +"kxX c #f7b865", +"jPk c #f7b872", +"jjY c #f7b874", +"jWR c #f7b875", +"ktk c #f7b876", +"jZe c #f7b974", +"jUr c #f7b975", +"gRM c #f7ba2a", +"gVI c #f7ba2b", +"jWS c #f7ba75", +"gVJ c #f7bb2c", +"gZH c #f7bb2d", +"ibM c #f7bb43", +"j9a c #f7bb73", +"kDu c #f7bb78", +"gRN c #f7bc2d", +"jRX c #f7bc73", +"kcu c #f7bc74", +"kvM c #f7bd79", +"iez c #f7bf45", +"jFZ c #f7bf4c", +"kq9 c #f7bf7a", +".gS c #f7bfe7", +"ibL c #f7c04a", +"gQ6 c #f7c13e", +"ig5 c #f7c144", +"glS c #f7c188", +"gMR c #f7c248", +"gid c #f7c289", +"gml c #f7c345", +"joE c #f7c349", +"joM c #f7c43f", +"kFU c #f7c481", +"gBr c #f7c545", +"gJk c #f7c548", +"jih c #f7c551", +"h1K c #f7c557", +".hy c #f7c5e1", +"gU3 c #f7c63f", +"ieC c #f7c64a", +"hIQ c #f7c64b", +"igM c #f7c659", +"iRH c #f7c682", +"i0. c #f7c68c", +"h#e c #f7c73c", +"gud c #f7c746", +"ieq c #f7c74d", +"i35 c #f7c74e", +"hJn c #f7c750", +"i.Z c #f7c751", +"hVX c #f7c752", +"iby c #f7c75a", +"gic c #f7c791", +"gJj c #f7c84f", +"iOH c #f7c884", +"iUt c #f7c887", +"gU4 c #f7c941", +"hy8 c #f7c956", +"gRA c #f7c957", +"hCH c #f7ca57", +"iXj c #f7ca8e", +"jxy c #f7cb53", +"hy9 c #f7cb5f", +"hOS c #f7cb98", +".id c #f7cbda", +"gqL c #f7cc5e", +"i5C c #f7cc9a", +"jd6 c #f7cc9f", +"gNj c #f7cd44", +"iIV c #f7cd8f", +"gJA c #f7ce47", +"gNN c #f7ce5e", +"iYv c #f7cf47", +"gBN c #f7cf49", +"jop c #f7cf69", +"gF4 c #f7d168", +"gMj c #f7d3c7", +"i1f c #f7d471", +"hS1 c #f7d474", +"hX5 c #f7d4a3", +"iuk c #f7d57a", +"e1i c #f7d583", +"gY0 c #f7d64b", +"gNJ c #f7d686", +"iIq c #f7d6a5", +"iAc c #f7d6a8", +"gnb c #f7d77f", +"bbi c #f7d7ad", +"gwx c #f7d7c8", +"gJg c #f7d856", +"iul c #f7d87b", +"bBL c #f7d8aa", +"bkg c #f7d8ac", +"ixp c #f7d8ae", +"heB c #f7d8af", +"imT c #f7d97b", +"iOc c #f7d9ad", +"bUs c #f7d9b0", +"kvf c #f7da94", +"hD7 c #f7daa9", +"khO c #f7daac", +"kmr c #f7daad", +"g4Y c #f7dab2", +"kqA c #f7db9e", +"idD c #f7dba7", +"hmf c #f7dbab", +"bxu c #f7dbb1", +"hrS c #f7dc95", +"hiv c #f7dcae", +"heW c #f7dcaf", +"gWU c #f7dcb6", +"gQ4 c #f7dd57", +"kRp c #f7dd92", +"kq2 c #f7ddae", +"koJ c #f7ddaf", +"iip c #f7ddb2", +"gYJ c #f7de56", +"huX c #f7de8b", +"j6p c #f7deb0", +"ha6 c #f7deb2", +"i5m c #f7deb3", +"iWQ c #f7deb4", +"iZS c #f7deb7", +"gS4 c #f7deba", +"g42 c #f7debc", +"gLs c #f7debe", +"bpj c #f7dfb8", +"iuA c #f7dfba", +"gQV c #f7e058", +"iat c #f7e0ad", +"gWZ c #f7e0be", +"kg9 c #f7e19f", +"ik5 c #f7e1b0", +"h3C c #f7e1b2", +"isn c #f7e1b8", +"iuE c #f7e1bf", +"gW4 c #f7e1c3", +"kKO c #f7e26c", +"kIo c #f7e29c", +"f4Z c #f7e2a3", +"h9y c #f7e2b6", +"i5g c #f7e2ba", +"fiu c #f7e2bc", +"hHp c #f7e2bf", +"g5c c #f7e2c2", +"g7r c #f7e39d", +"jT3 c #f7e3a0", +"f7Z c #f7e3a2", +"kjo c #f7e3a5", +"h3z c #f7e3b9", +"hHi c #f7e3ba", +"fmF c #f7e3bd", +"g09 c #f7e3c5", +"gLt c #f7e3c7", +"g2X c #f7e465", +"kCj c #f7e478", +"kig c #f7e494", +"k.Q c #f7e49f", +"j3F c #f7e4a0", +"klJ c #f7e4a3", +"fwI c #f7e4a6", +"e4V c #f7e4ab", +"h9x c #f7e4b8", +"hUu c #f7e4bc", +"hUr c #f7e4bd", +"bti c #f7e4be", +"i5o c #f7e4bf", +"hN7 c #f7e4c1", +"g82 c #f7e4c5", +"kf9 c #f7e58a", +"kih c #f7e595", +"hdL c #f7e597", +"h#Z c #f7e599", +"kbN c #f7e5a3", +"fH. c #f7e5a5", +"fwH c #f7e5a6", +"kH6 c #f7e5a8", +"fnQ c #f7e5b3", +"e3v c #f7e5b4", +"heq c #f7e5be", +"hlN c #f7e5bf", +"bkR c #f7e5c0", +"g9f c #f7e5c8", +"kf8 c #f7e687", +"j40 c #f7e695", +"kaf c #f7e696", +"kfJ c #f7e697", +"kJi c #f7e698", +"kPA c #f7e699", +"kJk c #f7e69a", +"fEy c #f7e69f", +"e1x c #f7e6a0", +"fsC c #f7e6a1", +"fsB c #f7e6a2", +"k.V c #f7e6a4", +"jGU c #f7e6ab", +"eVq c #f7e6b6", +"eB9 c #f7e6b8", +"es0 c #f7e6b9", +"hRu c #f7e6c7", +"j9Y c #f7e793", +"kwt c #f7e795", +"f19 c #f7e796", +"hg6 c #f7e798", +"kJj c #f7e799", +"ekt c #f7e79a", +"dLt c #f7e79c", +"f5p c #f7e79d", +"fv4 c #f7e7a0", +"fAU c #f7e7a1", +"fcA c #f7e7a2", +"j3H c #f7e7a4", +"foO c #f7e7a8", +"kjs c #f7e7ab", +"eas c #f7e7ac", +"fzT c #f7e7af", +"fzN c #f7e7b9", +"exy c #f7e7ba", +"esZ c #f7e7bb", +"dT# c #f7e7bc", +"dOP c #f7e7bd", +"hlL c #f7e7c2", +"g4U c #f7e7c9", +"g47 c #f7e7cf", +"knn c #f7e883", +"kEY c #f7e884", +"kuA c #f7e889", +"kw9 c #f7e88a", +"ks# c #f7e88d", +"hZz c #f7e890", +"f5u c #f7e895", +"kcZ c #f7e896", +"g#l c #f7e897", +"fYV c #f7e898", +"dPA c #f7e899", +"kDS c #f7e89a", +"kpb c #f7e89b", +"fYU c #f7e89c", +"d28 c #f7e89d", +"jTS c #f7e89e", +"knS c #f7e89f", +"f8o c #f7e8a0", +"e1u c #f7e8a2", +"eMl c #f7e8a3", +"e5Y c #f7e8a4", +"fPw c #f7e8a8", +"e9V c #f7e8ac", +"khc c #f7e8ad", +"foK c #f7e8b2", +"foC c #f7e8b4", +"eB7 c #f7e8bb", +"eB8 c #f7e8bc", +"ejn c #f7e8bd", +"eLx c #f7e8be", +"hpr c #f7e8ce", +"g6Z c #f7e96a", +"kEG c #f7e980", +"kKu c #f7e982", +"kCf c #f7e985", +"kni c #f7e989", +"kCa c #f7e98c", +"kns c #f7e98d", +"j79 c #f7e98e", +"cuq c #f7e992", +"ktS c #f7e997", +"kik c #f7e998", +"kmT c #f7e999", +"dTQ c #f7e99b", +"c8U c #f7e99c", +"kpa c #f7e99d", +"jZG c #f7e9a0", +"f17 c #f7e9a1", +"fYT c #f7e9a2", +"e5r c #f7e9a3", +"f.l c #f7e9a4", +"e5Z c #f7e9a5", +"jat c #f7e9a7", +"hWQ c #f7e9a9", +"ken c #f7e9aa", +"hk2 c #f7e9ab", +"fAE c #f7e9b0", +"kLr c #f7e9b2", +"frT c #f7e9ba", +"e4P c #f7e9bb", +"eQp c #f7e9bc", +"eLA c #f7e9bd", +"dOO c #f7e9be", +"dT. c #f7e9bf", +"eQm c #f7e9c0", +"iOn c #f7e9c1", +"hKy c #f7e9c9", +"gDR c #f7e9cf", +"kzl c #f7ea86", +"kHv c #f7ea87", +"kw1 c #f7ea8c", +"kpQ c #f7ea8d", +"kiW c #f7ea8e", +"fL2 c #f7ea99", +"g4n c #f7ea9c", +"kpj c #f7ea9d", +"guk c #f7ea9f", +"kyB c #f7eaa0", +"i#i c #f7eaa1", +"e5V c #f7eaa2", +"jNn c #f7eaa3", +"jKO c #f7eaa4", +"gf7 c #f7eaa7", +"gva c #f7eaaa", +"kg5 c #f7eaad", +"iNC c #f7eaaf", +".P6 c #f7eab1", +"#fJ c #f7eab4", +"exn c #f7eabc", +"fbj c #f7eabe", +"fbk c #f7eabf", +"fbl c #f7eac0", +"eVb c #f7eac1", +"d5v c #f7eac5", +"gS0 c #f7eace", +"kQ4 c #f7eb8d", +"c3X c #f7eb92", +".mE c #f7eb93", +"kzj c #f7eb94", +"fd. c #f7eb96", +"j0y c #f7eb97", +"izo c #f7eb99", +"cHj c #f7eb9c", +"j6Z c #f7eb9d", +"iVp c #f7eb9e", +"j5f c #f7eb9f", +"j4v c #f7eba0", +"j9B c #f7eba1", +"hk3 c #f7eba2", +"jNo c #f7eba4", +"fYS c #f7eba5", +"jKP c #f7eba6", +"jCr c #f7eba7", +"jaW c #f7ebac", +"jgu c #f7ebad", +"klG c #f7ebaf", +"kgN c #f7ebb1", +".R3 c #f7ebb2", +".R2 c #f7ebb3", +"j9T c #f7ebb5", +"gfu c #f7ebb7", +"jjD c #f7ebb8", +"esR c #f7ebc0", +"ffz c #f7ebc1", +"k#h c #f7ebc4", +"d0C c #f7ebc6", +"fhn c #f7ec96", +"fho c #f7ec97", +"kir c #f7ec9f", +"kaE c #f7eca0", +"kw# c #f7eca3", +"gGT c #f7eca5", +"jNp c #f7eca6", +"jSs c #f7eca7", +"icT c #f7eca8", +"jwL c #f7eca9", +"iY6 c #f7ecab", +"iYc c #f7ecb1", +"iVj c #f7ecb2", +"d2R c #f7ecb6", +"hq2 c #f7ecb7", +"e.d c #f7ecc8", +"emM c #f7ecc9", +"dwj c #f7ecca", +"eFn c #f7eccc", +"heG c #f7ecd5", +"hih c #f7ecd7", +"g9e c #f7ecdd", +"ha3 c #f7ecde", +"kHX c #f7ed92", +"izs c #f7ed93", +"fpH c #f7ed98", +"fBv c #f7ed9a", +"fgQ c #f7ed9e", +"kG9 c #f7ed9f", +"kiq c #f7eda2", +"kwa c #f7eda3", +"j0u c #f7eda5", +"jIu c #f7eda7", +"jP1 c #f7eda8", +"jtU c #f7eda9", +"jtV c #f7edaa", +"#fQ c #f7edb3", +"#ij c #f7edb4", +"gUx c #f7edbd", +"dAI c #f7edcc", +"hOf c #f7edd8", +"hl0 c #f7edd9", +"ep3 c #f7ee9a", +"kJ2 c #f7eea0", +"hNg c #f7eeac", +"jkS c #f7eeb2", +"h4I c #f7eeb7", +"h7G c #f7eeb9", +"jD9 c #f7eebc", +"giz c #f7eebd", +"ge1 c #f7eebe", +"dVR c #f7eecc", +"diY c #f7eecd", +"daJ c #f7eed9", +"hHd c #f7eedc", +"fti c #f7ef96", +"kQm c #f7efa0", +"kkY c #f7efa1", +"kt0 c #f7efa2", +"jq5 c #f7efac", +"jq1 c #f7efae", +"jk6 c #f7efb6", +"ie# c #f7efb7", +"jMm c #f7efbf", +"cWs c #f7efd0", +"d.X c #f7efd1", +"gPb c #f7efdb", +"gxu c #f7f0ab", +"i2o c #f7f0c2", +"c52 c #f7f0cf", +"i2v c #f7f0d2", +"hwN c #f7f0da", +"gHo c #f7f0dc", +"iZw c #f7f1c2", +"e7G c #f7f1d1", +"dnz c #f7f1d2", +"f#V c #f7f1d3", +"gLm c #f7f1de", +"bZZ c #f7f1e2", +"hl5 c #f7f1e6", +"jzY c #f7f2b1", +"iWD c #f7f2c6", +"iWF c #f7f2c9", +"hs4 c #f7f2d3", +"c1d c #f7f2d5", +"hwX c #f7f2e8", +"i45 c #f7f3c8", +"iTX c #f7f3ce", +"fiq c #f7f3cf", +"fmB c #f7f3d0", +"eOF c #f7f3d2", +"emx c #f7f3d3", +"drW c #f7f3d5", +"fii c #f7f3d6", +"d.V c #f7f3d7", +"fCj c #f7f3d8", +"cyr c #f7f3ec", +"iwj c #f7f4a4", +"gx9 c #f7f4ab", +"i7D c #f7f4c2", +"hAg c #f7f4d2", +"eri c #f7f4d3", +"hAh c #f7f4d4", +"ifJ c #f7f4d5", +"diW c #f7f4d7", +"ct4 c #f7f4ed", +"iy9 c #f7f5a5", +"i2l c #f7f5cd", +"iQ1 c #f7f5d0", +"iCQ c #f7f5d1", +"iz5 c #f7f5d2", +"gdP c #f7f5d3", +"hDK c #f7f5d4", +"emy c #f7f5d5", +"h0u c #f7f5d6", +"dny c #f7f5d7", +"cT3 c #f7f5f0", +"iIf c #f7f6d1", +"iz4 c #f7f6d2", +"ixk c #f7f6d3", +"gWN c #f7f6d4", +"hh1 c #f7f6d5", +"g4M c #f7f6d6", +"fd7 c #f7f6d9", +"fqw c #f7f6da", +"gWO c #f7f7d5", +"fuJ c #f7f7dc", +"d0m c #f7f7dd", +"amc c #f7f7f4", +"bGI c #f7f7f6", +"dpt c #f7f7f7", +"b0j c #f7f7f8", +"g0M c #f7f8d7", +"fim c #f7f8db", +"fyI c #f7f8dc", +"fik c #f7f8dd", +"fmu c #f7f8de", +"bLp c #f7f8f2", +"atY c #f7f8f5", +"cpK c #f7f8f8", +"gsn c #f7f9d5", +"gLa c #f7f9d7", +"fqy c #f7f9db", +"fmw c #f7f9dc", +"fil c #f7f9dd", +"fuK c #f7f9de", +"fFW c #f7f9df", +"gHg c #f7fad8", +"fWX c #f7fada", +"fuN c #f7fadb", +"fuM c #f7fadc", +"fTI c #f7fadd", +"fQO c #f7fade", +"goN c #f7fbd6", +"fQP c #f7fbdc", +".on c #f7fc67", +"b6A c #f7fcff", +"cq2 c #f7fdff", +".aE c #f86fff", +".a8 c #f87aff", +".bB c #f884fe", +".cb c #f88dfc", +".cQ c #f896fa", +".dx c #f89df8", +".ed c #f8a5f5", +"iOZ c #f8a760", +".eR c #f8acf2", +"i3v c #f8b158", +"js9 c #f8b16c", +"i8x c #f8b25c", +"i3r c #f8b359", +"jWQ c #f8b36e", +"jv8 c #f8b36f", +"jED c #f8b370", +".fA c #f8b3ed", +"i3u c #f8b458", +"i3s c #f8b459", +"i53 c #f8b45b", +"jBK c #f8b473", +"i3t c #f8b559", +"jn# c #f8b570", +"jPi c #f8b572", +"jMK c #f8b574", +"kL7 c #f8b66f", +"jp9 c #f8b674", +"jEB c #f8b675", +"j.0 c #f8b764", +"jML c #f8b772", +"jRW c #f8b774", +"kAU c #f8b776", +"kvL c #f8b976", +"kyc c #f8b977", +".gd c #f8b9e9", +"kPd c #f8ba78", +"hVJ c #f8bb40", +"kPf c #f8bb75", +"kyd c #f8bb78", +"i.V c #f8be45", +"kDa c #f8bf76", +"h5e c #f8c040", +"i.0 c #f8c049", +"i.X c #f8c04e", +"h8c c #f8c240", +"hVG c #f8c246", +"ieA c #f8c247", +"ibR c #f8c248", +"hYN c #f8c249", +"h1O c #f8c24a", +"kD# c #f8c27c", +"i8# c #f8c27f", +"h2g c #f8c341", +"gJl c #f8c343", +"hVF c #f8c347", +"gq. c #f8c445", +"iej c #f8c456", +"hMF c #f8c54a", +"h1S c #f8c55f", +"kOV c #f8c585", +"joL c #f8c642", +"gxC c #f8c646", +"ibU c #f8c649", +"hFs c #f8c64a", +"kLP c #f8c685", +"iei c #f8c75b", +"joF c #f8c84e", +"i.U c #f8c852", +"h4N c #f8c857", +"hc7 c #f8c93d", +"gRB c #f8c952", +"gt2 c #f8ca4e", +"gYz c #f8ca5b", +"i.F c #f8cb59", +"ieg c #f8cb5d", +"gmA c #f8cc4d", +"jfx c #f8cc59", +"ibz c #f8cc5d", +"glR c #f8cc9a", +"jp0 c #f8cc9b", +"gmB c #f8cd4a", +"keY c #f8cd7c", +"gY9 c #f8ce3f", +"gJx c #f8ce47", +"iLI c #f8ce8e", +"gFg c #f8cf47", +"i09 c #f8cf5e", +"gJB c #f8d049", +"jrs c #f8d066", +".iR c #f8d0d3", +"gG. c #f8d13c", +"gM8 c #f8d158", +"gpv c #f8d1a2", +"gFx c #f8d24b", +"gJY c #f8d360", +"gZa c #f8d446", +"jBA c #f8d49d", +"iJZ c #f8d56a", +"iFr c #f8d57a", +"gYZ c #f8d64c", +"iSM c #f8d667", +"iFL c #f8d6a4", +"iIv c #f8d6a5", +"jbg c #f8d6ae", +"iw7 c #f8d77d", +"iRj c #f8d7a5", +"iFO c #f8d7a9", +"iC1 c #f8d7aa", +"gpu c #f8d7ad", +"hEd c #f8d7b0", +"e5J c #f8d884", +"iCY c #f8d8a7", +"bfS c #f8d8ae", +"bbh c #f8d8af", +"gCh c #f8d963", +"j3X c #f8d995", +"h1. c #f8d9aa", +"ipR c #f8d9ae", +"guF c #f8da88", +"kIu c #f8da98", +"inF c #f8da9f", +"i2I c #f8daac", +"iWW c #f8daad", +"iOd c #f8daae", +"g8X c #f8dab2", +"gJd c #f8db56", +"ifh c #f8db7c", +"gF1 c #f8db8e", +"hmc c #f8dba9", +"haM c #f8dbb2", +"haN c #f8dbb3", +"gYY c #f8dc4f", +"ksP c #f8dc9a", +"j1r c #f8dca0", +"hAF c #f8dcad", +"kj5 c #f8dcae", +"coA c #f8dcb1", +"g8Y c #f8dcb3", +"g4X c #f8dcb5", +"g0Z c #f8dcb6", +"gsR c #f8dcd1", +"gUU c #f8dd59", +"hGc c #f8dd87", +"kAk c #f8dd98", +"j6i c #f8dd9b", +"kL1 c #f8dda8", +"kIW c #f8dda9", +"ha8 c #f8ddae", +"kIX c #f8ddaf", +"g5f c #f8ddb0", +"g01 c #f8ddb6", +"gWW c #f8ddb8", +"gVA c #f8de62", +"kDl c #f8dea9", +"iaV c #f8deae", +"kF8 c #f8deb0", +"g1k c #f8deb1", +"g9h c #f8deb2", +"hHH c #f8deb6", +"coe c #f8deb7", +"haP c #f8deba", +"iZK c #f8dfb5", +"hlW c #f8dfb7", +"iAg c #f8dfb8", +"ixu c #f8dfba", +"gPg c #f8dfbd", +"gYK c #f8e059", +"gVC c #f8e079", +"hFN c #f8e088", +"kmq c #f8e0b2", +"hlY c #f8e0bd", +"gWY c #f8e0be", +"ksO c #f8e19b", +"kAi c #f8e19c", +"kvd c #f8e19e", +"j83 c #f8e1b2", +"kcm c #f8e1b3", +"g1h c #f8e1b9", +"ikN c #f8e1bc", +"hpl c #f8e1be", +"gYX c #f8e257", +"h6G c #f8e2b2", +"k#D c #f8e2b3", +"i5k c #f8e2b9", +"hK1 c #f8e2ba", +"btq c #f8e2c0", +"gW5 c #f8e2c2", +"gYQ c #f8e361", +"kLu c #f8e3a1", +"kg8 c #f8e3a2", +"i5h c #f8e3ba", +"kHO c #f8e470", +"kOE c #f8e4a1", +"kOF c #f8e4a3", +"kqi c #f8e4a4", +"g07 c #f8e4c8", +"foQ c #f8e5a4", +"klK c #f8e5a5", +"kjp c #f8e5a6", +"fHK c #f8e5b1", +"huW c #f8e5b4", +"hXv c #f8e5bd", +"hHl c #f8e5be", +"fmE c #f8e5c0", +"iIn c #f8e5c3", +"gP. c #f8e5c4", +"hin c #f8e5c7", +"gDP c #f8e5c8", +"gW7 c #f8e5cb", +"hvD c #f8e698", +"jRz c #f8e6a5", +"jYQ c #f8e6a6", +"kjr c #f8e6a7", +"key c #f8e6a8", +"fbu c #f8e6a9", +"e9f c #f8e6ab", +"i7T c #f8e6be", +"hRr c #f8e6bf", +"h0B c #f8e6c1", +"iuz c #f8e6c8", +"kkx c #f8e796", +"kGu c #f8e79a", +"j55 c #f8e7a6", +"kg7 c #f8e7a7", +"kev c #f8e7a8", +"gZN c #f8e7ab", +"eJ8 c #f8e7b7", +"e70 c #f8e7b9", +"eGQ c #f8e7ba", +"haD c #f8e7c0", +"hXq c #f8e7c1", +"gLu c #f8e7ce", +"kaQ c #f8e889", +"imx c #f8e88a", +"cHl c #f8e894", +"kkJ c #f8e898", +"dDl c #f8e899", +"kGv c #f8e89b", +"kMt c #f8e89d", +"fo4 c #f8e8a3", +"fEx c #f8e8a4", +"j3G c #f8e8a7", +"kbO c #f8e8a8", +"kKX c #f8e8ab", +"fc. c #f8e8ac", +"klM c #f8e8ad", +"iTr c #f8e8b1", +"jOY c #f8e8b7", +"eYR c #f8e8b8", +"hr8 c #f8e8b9", +"eLD c #f8e8ba", +"e4S c #f8e8bb", +"hN4 c #f8e8c4", +"hlO c #f8e8c5", +"htb c #f8e8ca", +"gPl c #f8e8cd", +"g63 c #f8e965", +"hgw c #f8e972", +"kEZ c #f8e984", +"kw8 c #f8e988", +"krm c #f8e997", +"f5s c #f8e998", +"kmU c #f8e999", +"kDR c #f8e99b", +"dy6 c #f8e99c", +"kGt c #f8e99d", +"kDP c #f8e99e", +"kfM c #f8e99f", +"eks c #f8e9a0", +"j4z c #f8e9a1", +"g.X c #f8e9a3", +"fH5 c #f8e9a4", +"fH6 c #f8e9a5", +"jaD c #f8e9a6", +"f8l c #f8e9a7", +"kLo c #f8e9a8", +"fsE c #f8e9ab", +"k#c c #f8e9ac", +"jpP c #f8e9b0", +"foL c #f8e9b3", +"fnR c #f8e9b5", +"eYO c #f8e9ba", +"exz c #f8e9bd", +"eQl c #f8e9c0", +"h0y c #f8e9c3", +"h6t c #f8e9c5", +"hw1 c #f8e9c9", +"hKP c #f8e9cf", +"g6V c #f8ea71", +"kpC c #f8ea82", +"kBW c #f8ea83", +"kB1 c #f8ea84", +"kdF c #f8ea88", +"kKF c #f8ea8d", +"kr0 c #f8ea8e", +"k.H c #f8ea90", +"fYW c #f8ea98", +"ktT c #f8ea9a", +"kky c #f8ea9b", +"krn c #f8ea9d", +"kGs c #f8ea9e", +"eaT c #f8ea9f", +"f.o c #f8eaa0", +"kmR c #f8eaa1", +"d7W c #f8eaa2", +"ffL c #f8eaa3", +"f.m c #f8eaa4", +"e1v c #f8eaa5", +"icJ c #f8eaa6", +"eMm c #f8eaa7", +"g30 c #f8eaab", +"kg6 c #f8eaad", +"fwV c #f8eab0", +"#aG c #f8eab2", +"fvS c #f8eabb", +"frV c #f8eabc", +"eOS c #f8eabd", +"eLz c #f8eabe", +"eLy c #f8eabf", +"frR c #f8eac0", +"dON c #f8eac1", +"d5u c #f8eac2", +"hUn c #f8eac8", +"iFR c #f8eacc", +"gLv c #f8ead2", +"h.S c #f8eb75", +"kEJ c #f8eb85", +"krM c #f8eb8b", +"kuc c #f8eb8c", +"kld c #f8eb8d", +"ka2 c #f8eb8f", +"kiQ c #f8eb91", +"f.W c #f8eb95", +"fpI c #f8eb96", +"cC8 c #f8eb99", +"f8s c #f8eb9b", +"cLC c #f8eb9c", +"cZj c #f8eb9d", +"kkG c #f8eb9e", +"c34 c #f8eb9f", +"jMb c #f8eba0", +"kDO c #f8eba1", +"j64 c #f8eba2", +"j4A c #f8eba3", +"eWI c #f8eba4", +"jZI c #f8eba5", +"e50 c #f8eba6", +"fDU c #f8eba7", +"fEw c #f8eba8", +"fH3 c #f8eba9", +"i1T c #f8ebac", +"jjt c #f8ebad", +"kjf c #f8ebb3", +"jjB c #f8ebb6", +"frU c #f8ebbc", +"eVl c #f8ebbf", +"eQo c #f8ebc0", +"d7b c #f8ebc1", +"dOM c #f8ebc2", +"eFl c #f8ebc3", +"ehV c #f8ebd0", +"kaZ c #f8ec90", +"kaU c #f8ec92", +"kgD c #f8ec93", +"kdN c #f8ec95", +"fc9 c #f8ec96", +"cq. c #f8ec97", +"kkK c #f8ec9c", +"kyz c #f8ec9d", +"krv c #f8ec9e", +"kpi c #f8ec9f", +"kpd c #f8eca1", +"kGA c #f8eca2", +"kyC c #f8eca3", +"kc7 c #f8eca4", +"j16 c #f8eca5", +"hQ9 c #f8eca6", +"jH7 c #f8eca7", +"f16 c #f8eca8", +"fI# c #f8eca9", +"iNJ c #f8ecaa", +"i1V c #f8ecab", +"iWc c #f8ecae", +"#a0 c #f8ecb1", +"jsN c #f8ecb2", +"d7E c #f8ecb4", +"gjq c #f8ecbd", +"fvR c #f8ecc1", +"ffy c #f8ecc2", +"hpi c #f8ecc9", +"hph c #f8ecca", +"g0W c #f8ecd1", +"haR c #f8ecd4", +"kgs c #f8ed94", +"cZ# c #f8ed95", +"flA c #f8ed98", +"kz# c #f8ed9e", +"kaD c #f8ed9f", +"k.# c #f8eda0", +"j7L c #f8eda1", +"kDT c #f8eda2", +"kgd c #f8eda3", +"kwb c #f8eda4", +"jXj c #f8eda6", +"jU1 c #f8eda7", +"jH8 c #f8eda8", +"jH9 c #f8eda9", +"jzA c #f8edaa", +"jQW c #f8edab", +"i#P c #f8edad", +"jAN c #f8edaf", +"jx0 c #f8edb1", +".NP c #f8edb4", +"jdM c #f8edb6", +"j7q c #f8edb7", +"dRg c #f8edc5", +"d0v c #f8edc7", +"ehP c #f8edcb", +"ers c #f8edd2", +"heN c #f8eddd", +"ftK c #f8ee99", +"fxR c #f8ee9a", +"eXr c #f8ee9b", +"cLx c #f8ee9c", +"kdt c #f8ee9f", +"j4t c #f8eea0", +"kaI c #f8eea1", +"ktF c #f8eea3", +"ktE c #f8eea4", +"kd. c #f8eea5", +"j17 c #f8eea7", +"gS# c #f8eea9", +"jwM c #f8eeaa", +"jwN c #f8eeab", +"jwO c #f8eeac", +"#ik c #f8eeb5", +"#k1 c #f8eeb6", +"hPs c #f8eeb7", +"gYp c #f8eebd", +"e.h c #f8eecc", +"eeV c #f8eed9", +"elc c #f8ef9a", +"e2a c #f8ef9c", +"f5R c #f8ef9e", +"ic. c #f8efa3", +"jSr c #f8efaa", +"jzB c #f8efac", +"jtW c #f8efad", +"jn4 c #f8efb1", +"juh c #f8efb2", +"jAO c #f8efb4", +"kiI c #f8efb7", +"hII c #f8efb9", +"d2S c #f8efbb", +"jgJ c #f8efbd", +"g2w c #f8efbe", +"f4u c #f8efc1", +"fnY c #f8efc4", +"e4Y c #f8efcb", +"d5A c #f8efcc", +"ede c #f8efcd", +"erq c #f8efd0", +"eAC c #f8efd4", +"hpj c #f8efd6", +"gDS c #f8efdc", +"krB c #f8f0a2", +"jfo c #f8f0a5", +"jtZ c #f8f0ac", +"jwQ c #f8f0ae", +"jtX c #f8f0af", +"jq4 c #f8f0b0", +"juj c #f8f0b2", +"gjb c #f8f0b9", +"hLY c #f8f0ba", +"jdN c #f8f0be", +"g6w c #f8f0c1", +"dd2 c #f8f0d0", +"d.Z c #f8f0d1", +"eKb c #f8f0d2", +"fa# c #f8f0d4", +"hps c #f8f0dd", +"fk4 c #f8f19b", +"km3 c #f8f1a2", +"jwV c #f8f1a3", +"c#f c #f8f1a5", +"jXq c #f8f1ad", +"jui c #f8f1b3", +"gf# c #f8f1bb", +"ivR c #f8f1bc", +"i2p c #f8f1c4", +"iZx c #f8f1c5", +"iZy c #f8f1c6", +"e0l c #f8f1ce", +"cWr c #f8f1d4", +"gLl c #f8f1de", +"hwY c #f8f1e4", +"ici c #f8f298", +"f5w c #f8f29a", +"ieS c #f8f2a2", +"jz3 c #f8f2b4", +"jz4 c #f8f2b5", +"iWG c #f8f2ca", +"dRb c #f8f2cf", +"d.0 c #f8f2d4", +"c5Y c #f8f2d5", +"c1e c #f8f2d6", +"kbZ c #f8f2e3", +"k#i c #f8f2e4", +"dOY c #f8f2e6", +"hAs c #f8f2e7", +"hl4 c #f8f2e8", +"h8y c #f8f399", +"gBj c #f8f3af", +"jaZ c #f8f3c6", +"fe# c #f8f3cf", +"dnw c #f8f3d5", +"cTl c #f8f3e7", +"iTY c #f8f4ce", +"iFC c #f8f4d0", +"g0Q c #f8f4d1", +"ixl c #f8f4d2", +"eF. c #f8f4d3", +"eAt c #f8f4d4", +"dIO c #f8f4d6", +"dwe c #f8f4d7", +"fqv c #f8f4d8", +"iy8 c #f8f5a5", +"ehE c #f8f5cd", +"iIg c #f8f5d0", +"evV c #f8f5d4", +"erj c #f8f5d5", +"hRj c #f8f5d6", +"diV c #f8f5d7", +"ddZ c #f8f5d8", +"b0o c #f8f5ef", +"iEK c #f8f6a6", +"iTU c #f8f6d1", +"hH. c #f8f6d4", +"hwF c #f8f6d5", +"hDL c #f8f6d6", +"iia c #f8f6d7", +"fuH c #f8f6db", +"gdX c #f8f7cf", +"ghx c #f8f7d2", +"gk7 c #f8f7d5", +"g0K c #f8f7d6", +"gWP c #f8f7d7", +"fd9 c #f8f7d8", +"fuI c #f8f7db", +"d5i c #f8f7dd", +"btY c #f8f7f6", +"ghr c #f8f8d6", +"gWL c #f8f8d8", +"fd8 c #f8f8d9", +"fin c #f8f8da", +"fmx c #f8f8db", +"bGF c #f8f8f2", +"ap7 c #f8f8f5", +"gSU c #f8f9d6", +"gO2 c #f8f9d7", +"gWM c #f8f9d8", +"fqz c #f8f9d9", +"fuO c #f8f9da", +"fuL c #f8f9dd", +"fqx c #f8f9de", +"fmv c #f8f9df", +"b5g c #f8f9f9", +"gsm c #f8fad6", +"gv9 c #f8fad7", +"gsl c #f8fad8", +"fyJ c #f8fada", +"fNm c #f8fadb", +"fTJ c #f8fadc", +"fJG c #f8fadd", +"f6w c #f8fbd7", +"gST c #f8fbd8", +"fNn c #f8fbda", +"f3o c #f8fcd9", +"fTK c #f8fcda", +"fW3 c #f8fcdb", +"fW2 c #f8fcdc", +"bNf c #f8fcfd", +"bWQ c #f8fcfe", +"bWM c #f8fcff", +"cq1 c #f8fdff", +".ad c #f963fa", +".aD c #f96fff", +".bk c #f979f0", +".b. c #f97aff", +".bR c #f983ec", +".bC c #f984fe", +".cc c #f98dfb", +".cR c #f996f9", +".dy c #f99df6", +".ee c #f9a5f3", +"kjT c #f9a94e", +".eS c #f9acf0", +"kox c #f9b157", +"jqa c #f9b36e", +"jUp c #f9b36f", +"i55 c #f9b45c", +"jPh c #f9b46f", +"jBN c #f9b471", +"kqP c #f9b55d", +"jPj c #f9b573", +"jK# c #f9b672", +"jyU c #f9b673", +"jHm c #f9b675", +"jJ9 c #f9b676", +"kL6 c #f9b76c", +"kPb c #f9b86b", +"jn. c #f9b873", +"jRV c #f9b877", +"kDs c #f9b976", +"kL5 c #f9ba71", +"jUq c #f9ba78", +"hYP c #f9bb41", +"kL9 c #f9bb76", +"kAV c #f9bb77", +"kvt c #f9bc67", +"kI2 c #f9bc76", +"kGc c #f9bc77", +"kPe c #f9bd78", +"hVI c #f9be46", +"hPC c #f9bf44", +".gT c #f9bfe3", +"hMa c #f9c043", +"h1R c #f9c04b", +"hM# c #f9c144", +"ies c #f9c14c", +"hgV c #f9c241", +"hZi c #f9c441", +"hP7 c #f9c540", +"h4W c #f9c558", +".hz c #f9c5dd", +"i.5 c #f9c645", +"ier c #f9c64f", +"iek c #f9c654", +"ibB c #f9c656", +"kFT c #f9c688", +"gq# c #f9c747", +"hM. c #f9c749", +"ibT c #f9c74a", +"ieB c #f9c74b", +"iem c #f9c74d", +"kIH c #f9c78b", +"hFw c #f9c843", +"jlp c #f9c850", +"h4O c #f9c851", +"iel c #f9c852", +"ibC c #f9c855", +"hJm c #f9c94a", +"gUD c #f9c95b", +"hy7 c #f9ca50", +"i.Y c #f9ca56", +"kAz c #f9ca8a", +"jcH c #f9cb41", +"jir c #f9cb46", +"hF5 c #f9cb51", +"h7O c #f9cb55", +"ieh c #f9cb5e", +"i20 c #f9cc95", +"gNR c #f9cd44", +"gql c #f9cd4e", +"i.G c #f9cd5b", +"iRG c #f9cd8e", +"hyR c #f9cf3f", +"hyv c #f9cf50", +"g6I c #f9cf55", +"gJ3 c #f9d03b", +"gxZ c #f9d047", +"gFG c #f9d048", +"jsU c #f9d09f", +"gU2 c #f9d14a", +"gN. c #f9d151", +"gNO c #f9d158", +"jrH c #f9d159", +"gJz c #f9d249", +"huQ c #f9d24f", +"hq9 c #f9d254", +"gM9 c #f9d257", +"jl# c #f9d26b", +"hgj c #f9d358", +"hjR c #f9d359", +"hCm c #f9d446", +"iVC c #f9d454", +"hnx c #f9d458", +"iLH c #f9d496", +"iIU c #f9d499", +"gZb c #f9d54c", +"gBD c #f9d550", +"hny c #f9d558", +"kcc c #f9d588", +"bfO c #f9d5a7", +"gR. c #f9d649", +"gU5 c #f9d64a", +"g3g c #f9d652", +"iqb c #f9d697", +".jt c #f9d6cb", +"iPN c #f9d769", +"iH. c #f9d76c", +"gQZ c #f9d854", +"hPS c #f9d873", +"iOj c #f9d8a6", +"iLn c #f9d8a7", +"iOf c #f9d8a9", +"iAd c #f9d8aa", +"glQ c #f9d8ad", +"gVf c #f9d94c", +"gQY c #f9d95a", +"gF5 c #f9d964", +"iIs c #f9d9a7", +"iFJ c #f9d9a8", +"iRe c #f9d9ac", +"ipm c #f9da7e", +"iCX c #f9daaa", +"iZP c #f9daab", +"iT8 c #f9daac", +"ixr c #f9daae", +"cfJ c #f9dab0", +".j8 c #f9dac0", +"ihP c #f9db7d", +"ixq c #f9dbaf", +"i2F c #f9dbb0", +"iFQ c #f9dbb1", +"heC c #f9dbb3", +"ixs c #f9dcb1", +"b38 c #f9dcb5", +"g4Z c #f9dcb6", +"gUV c #f9dd55", +"jFI c #f9dd82", +"k#v c #f9dd95", +"heS c #f9ddac", +"bPK c #f9ddb4", +"cgf c #f9ddb5", +"hg0 c #f9de90", +"kF7 c #f9deaa", +"hD9 c #f9dead", +"kDm c #f9deb1", +"bGa c #f9deb6", +"j8V c #f9df9d", +".kL c #f9dfb5", +"iWU c #f9dfb6", +"g80 c #f9dfba", +"fEl c #f9e099", +"hzb c #f9e09a", +"iRq c #f9e0b6", +"csS c #f9e0b7", +"heD c #f9e0bc", +"hif c #f9e0bd", +"hFP c #f9e197", +"kve c #f9e199", +"kxH c #f9e19b", +"j3W c #f9e1a5", +"kj4 c #f9e1b3", +"g5e c #f9e1b4", +"gXf c #f9e1b5", +"hpn c #f9e1bc", +"g03 c #f9e1bd", +"gLq c #f9e1bf", +"hCN c #f9e291", +"kAj c #f9e29d", +"kqz c #f9e29e", +"ke8 c #f9e2b3", +"i2A c #f9e2b8", +"hHq c #f9e2ba", +"gT# c #f9e2c4", +"kLv c #f9e3a2", +"f1H c #f9e3a3", +"kvc c #f9e3a4", +".lp c #f9e3a8", +"j1q c #f9e3ad", +"i7X c #f9e3ba", +"iW0 c #f9e3bd", +"ixD c #f9e3c0", +"g2P c #f9e458", +"kQJ c #f9e483", +"ksN c #f9e4a5", +"bBE c #f9e4bf", +"hpp c #f9e4c2", +"bxt c #f9e4c3", +"hgg c #f9e5a5", +"kqx c #f9e5a6", +"kv# c #f9e5a7", +"j3V c #f9e5b1", +"i7Y c #f9e5bc", +"hD5 c #f9e5c1", +"gXc c #f9e5c4", +"kQh c #f9e696", +"kNd c #f9e697", +"hzg c #f9e698", +"j3v c #f9e6a2", +"ku1 c #f9e6a5", +"khb c #f9e6a6", +"klL c #f9e6a7", +"kz8 c #f9e6a8", +"f40 c #f9e6a9", +"ksK c #f9e6ab", +"hVM c #f9e6b0", +"h6C c #f9e6b9", +"jUd c #f9e6bd", +"hUq c #f9e6bf", +"jRJ c #f9e6c1", +"g6X c #f9e765", +"kRa c #f9e775", +"kjq c #f9e7a7", +"gcx c #f9e7a8", +"kxv c #f9e7a9", +"kex c #f9e7aa", +"j6g c #f9e7b4", +"her c #f9e7c0", +"g8U c #f9e7c6", +"ixn c #f9e7cb", +"gHz c #f9e7cc", +"g1# c #f9e7cd", +"kN5 c #f9e87a", +"hhd c #f9e89e", +"fYb c #f9e8a5", +"kjn c #f9e8a9", +"kew c #f9e8aa", +"ku3 c #f9e8ab", +"kxx c #f9e8ac", +"hgf c #f9e8ad", +"fEb c #f9e8b5", +"fLF c #f9e8b6", +"e3r c #f9e8b7", +"i7U c #f9e8c0", +"hN6 c #f9e8c1", +"hlM c #f9e8c2", +"btk c #f9e8c8", +"is. c #f9e8cb", +"gPr c #f9e8cc", +"g48 c #f9e8d0", +"h.1 c #f9e95e", +"kKP c #f9e981", +"kzH c #f9e983", +"ij4 c #f9e98b", +"j2y c #f9e999", +"kDQ c #f9e99a", +"jCV c #f9e99b", +"fwE c #f9e9a6", +"foy c #f9e9a8", +"e4W c #f9e9a9", +"kbP c #f9e9aa", +"gu0 c #f9e9ab", +"jjA c #f9e9b1", +"fLE c #f9e9b6", +"fAz c #f9e9b7", +"fLD c #f9e9b8", +"e3z c #f9e9bb", +"h3t c #f9e9c3", +"h3u c #f9e9c4", +"h0x c #f9e9c5", +"kFJ c #f9e9c7", +"gYU c #f9ea63", +"g2U c #f9ea6c", +"krt c #f9ea9b", +"kGw c #f9ea9e", +"dPz c #f9ea9f", +"kDN c #f9eaa0", +"h#Y c #f9eaa1", +"efy c #f9eaa2", +"gKf c #f9eaa3", +"fI. c #f9eaa6", +"fSg c #f9eaa7", +"fDx c #f9eaa8", +"fkq c #f9eaa9", +"jvk c #f9eaaa", +"fD3 c #f9eaab", +"kbQ c #f9eaac", +"kbR c #f9eaae", +"kn1 c #f9eab0", +"fsM c #f9eab1", +"kF# c #f9eab2", +"foF c #f9eab6", +"fDl c #f9eabb", +"e0b c #f9eabd", +"h6u c #f9eac4", +"hRn c #f9eac5", +"hSQ c #f9eac9", +"hcK c #f9eb76", +"kQP c #f9eb82", +"kw0 c #f9eb8f", +"iPD c #f9eb9a", +"kkL c #f9eb9b", +"dLw c #f9eb9c", +"kwu c #f9eb9d", +"kmO c #f9eb9e", +"kDM c #f9eb9f", +"kfL c #f9eba0", +"jD6 c #f9eba1", +"kkz c #f9eba2", +"jZH c #f9eba3", +"iWy c #f9eba5", +"e51 c #f9eba6", +"fta c #f9eba8", +"e5s c #f9ebaa", +"j07 c #f9ebac", +"jOW c #f9ebad", +"kbS c #f9ebb0", +"foN c #f9ebb1", +"fkt c #f9ebb3", +"jEg c #f9ebbc", +"ejr c #f9ebbf", +"ejo c #f9ebc0", +"fnK c #f9ebc1", +"eeG c #f9ebc2", +"g8Q c #f9ebc5", +"j6b c #f9ebce", +"krN c #f9ec83", +"kpB c #f9ec8c", +"ks. c #f9ec90", +"kbg c #f9ec92", +"f8r c #f9ec9b", +"kPz c #f9ec9c", +"kru c #f9ec9d", +"kkI c #f9ec9e", +"fcC c #f9ec9f", +"kfK c #f9eca0", +"g8r c #f9eca1", +"kmQ c #f9eca2", +"eaS c #f9eca3", +"e5U c #f9eca4", +"f.n c #f9eca5", +"epk c #f9eca6", +"e1w c #f9eca8", +"fL0 c #f9eca9", +"fgJ c #f9ecaa", +"jaC c #f9ecab", +"f5m c #f9ecac", +"kem c #f9ecae", +"fsW c #f9ecb0", +"knU c #f9ecb1", +"kez c #f9ecb2", +"jsM c #f9ecb3", +"fDn c #f9ecbd", +"fvT c #f9ecbe", +"gfM c #f9ecc1", +"d2k c #f9ecc2", +"dS9 c #f9ecc3", +"dS7 c #f9ecc4", +"h9u c #f9ecc8", +"hXp c #f9eccc", +"hlR c #f9ecd0", +"keR c #f9ecd1", +"gLw c #f9ecd6", +"kud c #f9ed83", +"kzk c #f9ed85", +"kdS c #f9ed90", +"k.w c #f9ed91", +"kB9 c #f9ed92", +"flB c #f9ed99", +"kae c #f9ed9c", +"cUs c #f9ed9d", +"cHk c #f9ed9e", +"kij c #f9ed9f", +"ggx c #f9eda0", +"kdr c #f9eda1", +"cZi c #f9eda2", +"kkF c #f9eda3", +"g#k c #f9eda4", +"eaR c #f9eda5", +"jRp c #f9eda6", +"fIa c #f9eda7", +"fL1 c #f9eda8", +"fED c #f9eda9", +"fEC c #f9edaa", +"fEB c #f9edab", +"jmC c #f9edad", +"gZ1 c #f9edae", +"hho c #f9edaf", +"keC c #f9edb0", +"kA. c #f9edb1", +"jYH c #f9edb2", +"jsL c #f9edb5", +"eQn c #f9edc2", +"eom c #f9edc3", +"e#U c #f9edc4", +"dXE c #f9edc5", +"gS8 c #f9edd2", +"gTk c #f9edda", +"gPq c #f9eddc", +"kzq c #f9ee88", +"kCl c #f9ee91", +"kno c #f9ee93", +"knh c #f9ee94", +"kKA c #f9ee96", +"fpG c #f9ee99", +"kp# c #f9ee9d", +"j90 c #f9ee9f", +"kim c #f9eea0", +"j60 c #f9eea1", +"c37 c #f9eea2", +"cZf c #f9eea3", +"kfP c #f9eea4", +"jVQ c #f9eea5", +"ffM c #f9eea6", +"kal c #f9eea7", +"jXk c #f9eea8", +"jTT c #f9eea9", +"jP2 c #f9eeaa", +"i#1 c #f9eeab", +"h0i c #f9eeac", +"iqZ c #f9eeaf", +"jmh c #f9eeb2", +"k#g c #f9eeb7", +"kjt c #f9eeb9", +"klU c #f9eeba", +"fvQ c #f9eec4", +"ejm c #f9eec5", +"e.c c #f9eeca", +"hFO c #f9eecb", +"heu c #f9eecd", +"ejJ c #f9eed2", +"dpn c #f9eed3", +"hti c #f9eed9", +"g86 c #f9eeda", +"hpy c #f9eedc", +"kQS c #f9ef8b", +"kES c #f9ef95", +"kE9 c #f9ef97", +"fII c #f9ef9c", +"eSz c #f9ef9e", +"kil c #f9efa0", +"j7u c #f9efa1", +"j4u c #f9efa2", +"kkQ c #f9efa3", +"kfQ c #f9efa4", +"j2W c #f9efa5", +"kro c #f9efa6", +"kfO c #f9efa7", +"jdu c #f9efa8", +"hQL c #f9efa9", +"jI7 c #f9efaa", +"jI. c #f9efab", +"h86 c #f9efac", +"hC8 c #f9efad", +"iY8 c #f9efb0", +"kji c #f9efb5", +"kjd c #f9efb7", +"kbX c #f9efbf", +"i5p c #f9efd0", +"hwP c #f9efd6", +"hl9 c #f9efdf", +"ez. c #f9f09d", +"fQ. c #f9f0a3", +"kda c #f9f0a4", +"kc9 c #f9f0a6", +"gks c #f9f0a7", +"kyy c #f9f0a8", +"jNH c #f9f0a9", +"j18 c #f9f0aa", +"jSt c #f9f0ab", +"jCs c #f9f0ac", +"jwP c #f9f0ad", +"jCt c #f9f0ae", +"jQV c #f9f0af", +"g2C c #f9f0b5", +"ibq c #f9f0ba", +"ku4 c #f9f0bb", +"g2x c #f9f0bf", +"gmb c #f9f0c0", +"gQA c #f9f0c1", +"g4R c #f9f0ce", +"eAE c #f9f0d2", +"iC4 c #f9f0d6", +"h3s c #f9f0d8", +"gLg c #f9f0d9", +"dtT c #f9f0da", +"izp c #f9f19f", +"eNr c #f9f1a0", +"kH# c #f9f1a2", +"j9H c #f9f1a4", +"kdb c #f9f1a5", +"imH c #f9f1a8", +"hZ3 c #f9f1ac", +"jzC c #f9f1ad", +"jzD c #f9f1ae", +"jwR c #f9f1b0", +"kKd c #f9f1b9", +"huH c #f9f1bc", +"ivS c #f9f1bd", +"gBe c #f9f1c0", +"jyx c #f9f1c2", +"erp c #f9f1d1", +"ev2 c #f9f1d4", +"fej c #f9f1d5", +"eAB c #f9f1d6", +"h9t c #f9f1d9", +"exJ c #f9f1df", +"hKx c #f9f1e0", +"h3H c #f9f1e1", +"hUy c #f9f1e3", +"g5b c #f9f1e7", +"izr c #f9f29d", +"izq c #f9f29f", +"eNs c #f9f2a0", +"kJ1 c #f9f2a3", +"iFl c #f9f2a4", +"kkX c #f9f2a5", +"jq6 c #f9f2ae", +"iog c #f9f2bc", +"i6z c #f9f2bd", +"hg. c #f9f2c0", +"jE. c #f9f2c2", +"i47 c #f9f2c4", +"iWI c #f9f2c5", +"iT0 c #f9f2c6", +"iWH c #f9f2c7", +"iTZ c #f9f2c9", +"e9h c #f9f2cc", +"e3o c #f9f2ce", +"dM8 c #f9f2d1", +"dr1 c #f9f2d2", +"f#9 c #f9f2d3", +"haH c #f9f2d5", +"jdC c #f9f2d7", +"iwE c #f9f399", +"fQc c #f9f3a0", +"km2 c #f9f3a5", +"cd2 c #f9f3a9", +"jU4 c #f9f3aa", +"kQz c #f9f3b2", +"jrl c #f9f3b7", +"i2n c #f9f3c3", +"jdO c #f9f3c4", +"i7I c #f9f3c5", +"i7J c #f9f3c6", +"iQ3 c #f9f3c7", +"i2r c #f9f3c8", +"iQ4 c #f9f3c9", +"iQ2 c #f9f3ca", +"iN6 c #f9f3cb", +"iN5 c #f9f3cc", +"iK8 c #f9f3ce", +"e7J c #f9f3d0", +"dRe c #f9f3d3", +"di0 c #f9f3d4", +"dnA c #f9f3d5", +"htk c #f9f3e7", +"hl6 c #f9f3e9", +"bWq c #f9f49d", +"iWn c #f9f4a0", +"i32 c #f9f4a7", +"gUA c #f9f4b3", +"i7F c #f9f4c3", +"i2m c #f9f4c5", +"iZu c #f9f4c6", +"jdP c #f9f4c7", +"iIh c #f9f4cf", +"e7I c #f9f4d0", +"e7K c #f9f4d1", +"ipD c #f9f4d2", +"in# c #f9f4d3", +"eJ0 c #f9f4d4", +"dIQ c #f9f4d5", +"c5X c #f9f4d9", +"hAo c #f9f4e0", +"hRl c #f9f4e6", +"bRC c #f9f59e", +"iBX c #f9f5a3", +"i44 c #f9f5c6", +"i48 c #f9f5c9", +"eFa c #f9f5d0", +"ir5 c #f9f5d4", +"eJZ c #f9f5d5", +"eOG c #f9f5d6", +"iaf c #f9f5d7", +"diX c #f9f5d9", +"gy. c #f9f6ae", +"jdQ c #f9f6ca", +"iTT c #f9f6ce", +"iN2 c #f9f6cf", +"iK7 c #f9f6d0", +"iIc c #f9f6d1", +"ehD c #f9f6d3", +"fqD c #f9f6d4", +"eYI c #f9f6d5", +"evX c #f9f6d6", +"emz c #f9f6d7", +"ehC c #f9f6d8", +"drV c #f9f6d9", +"d.W c #f9f6da", +"b4P c #f9f6f0", +".nQ c #f9f771", +"irx c #f9f79b", +"iwn c #f9f7a6", +"fqE c #f9f7d3", +"hsY c #f9f7d5", +"gL# c #f9f7d6", +"eJY c #f9f7d7", +"e7H c #f9f7d8", +"f#X c #f9f7d9", +"hNS c #f9f7da", +"dVN c #f9f7dc", +"fr8 c #f9f7f0", +"dTm c #f9f7f1", +"bVx c #f9f7f2", +"ghA c #f9f8d2", +"gDC c #f9f8d7", +"fmy c #f9f8d8", +"fe. c #f9f8d9", +"axW c #f9f8f6", +"cpE c #f9f8f7", +"b4M c #f9f8f8", +"gdZ c #f9f9d4", +"fuQ c #f9f9d6", +"gsi c #f9f9d7", +"fuP c #f9f9d8", +"gDF c #f9f9da", +"gDG c #f9f9dc", +"gO3 c #f9f9dd", +"fCk c #f9f9df", +"bll c #f9f9f5", +"ap8 c #f9f9f6", +"ckY c #f9f9f8", +"clx c #f9f9f9", +"fCn c #f9fad7", +"fCm c #f9fad8", +"fyK c #f9fad9", +"gwb c #f9fada", +"gzS c #f9fadb", +"aKB c #f9faf8", +"cL. c #f9fafa", +"f9t c #f9fbd6", +"gwa c #f9fbd7", +"fFZ c #f9fbd8", +"fJH c #f9fbd9", +"f6x c #f9fcd6", +"fTL c #f9fcd9", +"fZ8 c #f9fcda", +"fZ7 c #f9fcdb", +"cmW c #f9fcfe", +"bR5 c #f9fdfe", +"bR4 c #f9fdff", +".#w c #fa41fa", +".#U c #fa54fa", +".an c #fa63fa", +".aC c #fa6ffd", +".aF c #fa6fff", +".b# c #fa7afe", +".bD c #fa84fd", +".cd c #fa8dfa", +".cS c #fa96f8", +".dz c #fa9df5", +".dL c #fa9ee4", +".e4 c #faacd9", +"kme c #fab054", +"kjS c #fab055", +".fB c #fab3eb", +"i54 c #fab45c", +"js8 c #fab46f", +"jHn c #fab573", +"jEC c #fab674", +"jq# c #fab771", +"jv7 c #fab774", +"jyS c #fab775", +"js6 c #fab776", +"kow c #fab85e", +"jK. c #fab876", +"kmd c #fab95f", +"jq. c #fab975", +".ge c #fab9e6", +"jbD c #faba68", +"kDt c #fabb78", +"kPa c #fabc71", +"kL8 c #fabc78", +"hYO c #fabe43", +"hSN c #fabe44", +"kAB c #fabe70", +".g4 c #fabec4", +"hPD c #fac043", +"ks4 c #fac06a", +"kxW c #fac071", +"h2c c #fac141", +"h1Q c #fac149", +"kqO c #fac169", +"h2b c #fac243", +"hMb c #fac244", +"hZc c #fac340", +"h2f c #fac341", +"h8. c #fac34b", +"h7T c #fac34f", +"h4T c #fac351", +"kov c #fac368", +"hZf c #fac441", +"h1P c #fac448", +"h4S c #fac44f", +"kAA c #fac47e", +"ibS c #fac549", +"i.K c #fac552", +"hV9 c #fac641", +"hIT c #fac645", +"jlo c #fac646", +"h4U c #fac65b", +"hV8 c #fac742", +"hku c #fac745", +"h7S c #fac754", +"kLO c #fac78b", +"hZh c #fac843", +"hME c #fac847", +"hIS c #fac84a", +"h4V c #fac860", +"kD. c #fac88a", +"kOU c #fac88d", +"hgS c #fac940", +"hS9 c #fac941", +"hIR c #fac94a", +"h71 c #fac950", +"khC c #fac974", +"hT. c #faca42", +"gUE c #faca4b", +"kqN c #faca71", +"kFS c #faca8f", +".ie c #facbd6", +"hB6 c #facc45", +"hF4 c #facc4b", +"hCG c #facc51", +"j#Y c #facd43", +"gYB c #facd49", +"h7N c #facd58", +"kC9 c #facd91", +"i9o c #face45", +"g2F c #face5a", +"ibA c #face60", +"j1t c #face80", +"kxU c #face88", +"kFR c #face94", +"kIF c #face95", +"hyx c #facf48", +"hjQ c #facf53", +"hPR c #facf57", +"kLM c #facf97", +"huO c #fad052", +"h.E c #fad055", +"gNQ c #fad14a", +"hyw c #fad14c", +"gNP c #fad150", +"jlx c #fad151", +"h1T c #fad176", +"i8. c #fad19b", +"hnE c #fad241", +"gVa c #fad242", +"gBM c #fad24a", +"huP c #fad252", +"h.D c #fad258", +"iYi c #fad25c", +"iXi c #fad29b", +"gFw c #fad34b", +"hcv c #fad35a", +"gNk c #fad448", +"h.F c #fad452", +"hq8 c #fad456", +"hr. c #fad553", +"iG9 c #fad569", +"hjS c #fad659", +"iYj c #fad65f", +"jlb c #fad76f", +"izS c #fad77d", +"j1s c #fad793", +"isE c #fad797", +"gR# c #fad84a", +"gJp c #fad84f", +"gJZ c #fad95b", +"iMO c #fad96f", +"iJY c #fada71", +"irQ c #fada7e", +"iLl c #fadaa8", +"iLm c #fadaa9", +"iCZ c #fadaaa", +"iLi c #fadaab", +"iT9 c #fadaac", +"iOh c #fadba9", +"iZQ c #fadbab", +"iFN c #fadbac", +"hPJ c #fadc8c", +"iZR c #fadcac", +"hUZ c #fadcae", +"iZM c #fadcb0", +"iC2 c #fadcb1", +"hMg c #fadd90", +"il# c #fadda4", +"iLh c #faddaf", +"b83 c #faddb6", +"iRc c #fadeb4", +"bUr c #fadeb5", +"gF6 c #fadf5f", +"hir c #fadfaf", +"hiq c #fadfb0", +"kAP c #fadfb1", +"iT7 c #fadfb5", +"i2E c #fadfb6", +"bZj c #fadfb7", +"cbJ c #fadfb8", +"gna c #fae08d", +"kLA c #fae0a1", +"hmb c #fae0b1", +"kvF c #fae0b2", +"ckr c #fae0b7", +"coj c #fae0b9", +"f3K c #fae0ba", +"g41 c #fae0bb", +"gQ2 c #fae15a", +"kCW c #fae19e", +"iiE c #fae1ae", +"jRK c #fae1b2", +"hHr c #fae1b5", +"gCi c #fae263", +"kCV c #fae29f", +"kCU c #fae2a2", +"g5d c #fae2b7", +"fz# c #fae2bb", +"bBK c #fae2bd", +"gUO c #fae35a", +".lu c #fae388", +"kH4 c #fae39b", +"kxG c #fae3a3", +"ifX c #fae3b7", +"bF6 c #fae3bc", +"gS5 c #fae3c1", +"gVB c #fae470", +"fVy c #fae4a0", +"kvb c #fae4a7", +"j6h c #fae4a9", +"hYR c #fae4b5", +"i2C c #fae4ba", +"g9g c #fae4bc", +"gHw c #fae4c5", +"j.B c #fae4c6", +"g26 c #fae552", +"kcb c #fae5a9", +"ksM c #fae5aa", +"j8U c #fae5ab", +"kxE c #fae5ad", +"e3N c #fae5bb", +"i2D c #fae5bc", +"bto c #fae5c6", +"gYR c #fae664", +"kOc c #fae6a4", +"k#u c #fae6aa", +"ksL c #fae6ab", +"kva c #fae6ac", +"h92 c #fae6bb", +"heO c #fae6c4", +"ht# c #fae6c6", +"g2Q c #fae75f", +"gjC c #fae798", +"kqj c #fae7a7", +"f70 c #fae7a9", +"kqw c #fae7ad", +"idc c #fae7b9", +"h0C c #fae7bd", +"h7a c #fae7bf", +"hUL c #fae7c3", +"haJ c #fae7c6", +"hEi c #fae7c7", +"btp c #fae7c9", +"gUY c #fae860", +"ku2 c #fae8a9", +"kha c #fae8aa", +"kIn c #fae8ab", +"kv. c #fae8ae", +"h3A c #fae8be", +"h7# c #fae8bf", +"hUv c #fae8c0", +"hUs c #fae8c1", +"haE c #fae8c2", +"h0S c #fae8c3", +"hey c #fae8c7", +"g2W c #fae96a", +"hj7 c #fae976", +"hzp c #fae99c", +"gcg c #fae9a0", +"fbv c #fae9a8", +"kxw c #fae9ab", +"kCL c #fae9ad", +"ku9 c #fae9af", +"iaU c #fae9be", +"hXQ c #fae9c4", +"fmG c #fae9c5", +"hHm c #fae9c7", +"gW0 c #fae9cb", +"bpk c #fae9cc", +"gTd c #fae9cf", +"gcf c #faeaa1", +"e9g c #faeaaa", +"kFx c #faeaaf", +"kCM c #faeab0", +"fHL c #faeab7", +"j3U c #faeabb", +"ht. c #faeacb", +"btl c #faeace", +"g6R c #faeb67", +"hgu c #faeb78", +"kKL c #faeb86", +"kNe c #faeb9d", +"hdm c #faeb9f", +"fAq c #faeba8", +"hMQ c #faebac", +"fHD c #faebad", +"kjm c #faebae", +"klI c #faebaf", +"kqg c #faebb0", +"kqk c #faebb2", +"fwJ c #faebb3", +"jEh c #faebb7", +"jG5 c #faebba", +"frW c #faebbb", +"fDm c #faebbc", +"j6f c #faebbd", +"eYT c #faebbe", +"eQq c #faebbf", +"i7S c #faebc3", +"hHG c #faebca", +"kqD c #faebcc", +"g2Z c #faec6a", +"hj8 c #faec7a", +"kQ9 c #faec86", +"kHP c #faec89", +"j9A c #faec9b", +"kph c #faec9d", +"hkG c #faeca1", +"fbw c #faeca2", +"jGL c #faeca3", +"fH4 c #faeca9", +"fb8 c #faecaa", +"e9U c #faecac", +"fwG c #faecad", +"hTp c #faecae", +"fsX c #faecb0", +"kOb c #faecb1", +"fsL c #faecb5", +"foM c #faecb6", +"jBr c #faecba", +"frZ c #faecbc", +"j8T c #faecbe", +"e0a c #faecbf", +"e0# c #faecc0", +"eVn c #faecc1", +"frQ c #faecc2", +"fiv c #faecc9", +"g1g c #faecd3", +"bpl c #faecd4", +"gHA c #faecd6", +"kwM c #faed83", +"kQ8 c #faed89", +"kaV c #faed8d", +"kgE c #faed8f", +"kkM c #faed9e", +"dHk c #faed9f", +"kmP c #faeda1", +"kkA c #faeda2", +"kkH c #faeda3", +"hhP c #faeda4", +"kyA c #faeda5", +"jWk c #faeda6", +"epi c #faeda7", +"j5S c #faeda8", +"fLZ c #faedaa", +"fgM c #faedab", +"fPA c #faedac", +"hJy c #faedae", +"fgl c #faedaf", +"hWq c #faedb0", +"i#m c #faedb1", +"fsV c #faedb2", +"fwU c #faedb4", +"ksA c #faedb6", +"kFa c #faedb7", +"j8S c #faedc1", +"eoj c #faedc2", +"ejs c #faedc3", +"iuO c #faedc4", +"d2h c #faedc5", +"eoc c #faedc6", +"iaj c #faedcd", +"jjI c #faedd8", +"kHw c #faee88", +"kNN c #faee89", +"kzt c #faee92", +"kdJ c #faee93", +"hQy c #faee9e", +"cPY c #faee9f", +"efF c #faeea0", +"gcP c #faeea1", +"cUy c #faeea2", +"c8W c #faeea3", +"c36 c #faeea4", +"krp c #faeea5", +"fcB c #faeea6", +"kak c #faeea7", +"eWH c #faeea8", +"fgN c #faeea9", +"jON c #faeeaa", +"epj c #faeeab", +"fgL c #faeeac", +"i14 c #faeead", +"fkU c #faeeae", +"gcI c #faeeaf", +"hzA c #faeeb0", +"hQk c #faeeb1", +"kz9 c #faeeb2", +"gFV c #faeeb3", +"knW c #faeeb4", +"jmM c #faeeb8", +"fzO c #faeebe", +"eoi c #faeec3", +"ffx c #faeec4", +"eoh c #faeec5", +"dS8 c #faeec6", +"d2g c #faeec7", +"i7Z c #faeecb", +"j3L c #faeecd", +"jbb c #faeed4", +"jmS c #faeed8", +"gHB c #faeeda", +"kBX c #faef8b", +"kKs c #faef8c", +"k.j c #faef92", +"k.q c #faef93", +"krU c #faef94", +"kQ1 c #faef95", +"kEP c #faef96", +"jNu c #faef99", +"cur c #faef9a", +"fd# c #faef9c", +"fVR c #faef9f", +"kfS c #faefa1", +"kfT c #faefa2", +"cPX c #faefa3", +"cUx c #faefa4", +"kmS c #faefa5", +"gWr c #faefa6", +"kii c #faefa7", +"kc8 c #faefa8", +"g31 c #faefa9", +"e9T c #faefaa", +"ihZ c #faefab", +"fo5 c #faefad", +"fgK c #faefae", +"gnG c #faefaf", +"jaE c #faefb0", +"hzf c #faefb1", +"jdt c #faefb2", +"j1e c #faefb3", +".P8 c #faefb5", +".R1 c #faefb6", +".P5 c #faefb7", +"kbT c #faefb8", +"jpQ c #faefba", +"kn3 c #faefbc", +"eBZ c #faefc4", +"fvP c #faefc5", +"eGH c #faefc6", +"eGM c #faefc7", +"eTS c #faefc8", +"d5t c #faefca", +"e.a c #faefcd", +"iA# c #faefd4", +"g05 c #faefd7", +"g83 c #faefd8", +"hKK c #faefdc", +"kNK c #faf08b", +"kiV c #faf093", +"ka7 c #faf095", +"kKD c #faf096", +"kgh c #faf098", +"fBu c #faf09b", +"cis c #faf09c", +"eNm c #faf09d", +"eNn c #faf09e", +"cC6 c #faf09f", +"cHi c #faf0a1", +"kin c #faf0a2", +"kap c #faf0a3", +"kao c #faf0a4", +"c35 c #faf0a5", +"dbR c #faf0a6", +"j9D c #faf0a7", +"kfN c #faf0a8", +"g0q c #faf0a9", +"jWl c #faf0aa", +"jXl c #faf0ab", +"gOm c #faf0ac", +"fVO c #faf0ad", +"ilN c #faf0b0", +"iKL c #faf0b4", +"kn# c #faf0b5", +"knV c #faf0b6", +"ku5 c #faf0ba", +"jD8 c #faf0bb", +"kOB c #faf0bd", +"fzM c #faf0c6", +"eB0 c #faf0c7", +"f#6 c #faf0cf", +"hh8 c #faf0d0", +"ejH c #faf0d6", +"emT c #faf0d9", +"ifL c #faf0da", +"kzy c #faf197", +"fpb c #faf19d", +"eza c #faf19f", +"cyM c #faf1a0", +"fBw c #faf1a1", +"kaC c #faf1a2", +"kdc c #faf1a3", +"j68 c #faf1a4", +"j67 c #faf1a5", +"j4C c #faf1a6", +"kam c #faf1a7", +"ihY c #faf1a8", +"gSv c #faf1a9", +"jZK c #faf1aa", +"j65 c #faf1ab", +"jJC c #faf1ac", +"iqV c #faf1ad", +"jI# c #faf1ae", +"h5Z c #faf1af", +"jOg c #faf1b0", +"jGh c #faf1b2", +"i4J c #faf1b5", +"fbx c #faf1b6", +"fr5 c #faf1b7", +"kg3 c #faf1b8", +"iSv c #faf1b9", +"jdL c #faf1bb", +"dX3 c #faf1be", +"gpT c #faf1bf", +"gxp c #faf1c0", +"ge3 c #faf1c1", +"hN1 c #faf1dd", +"htl c #faf1e2", +"euA c #faf29f", +"kt2 c #faf2a3", +"j7d c #faf2a4", +"kfR c #faf2a5", +"j9F c #faf2a6", +"kkD c #faf2a7", +"itl c #faf2a8", +"kkE c #faf2a9", +"iqW c #faf2aa", +"jK8 c #faf2ac", +"itk c #faf2ad", +"jIp c #faf2ae", +"jFk c #faf2af", +"jzE c #faf2b0", +"icU c #faf2b4", +"kjh c #faf2b9", +"ku0 c #faf2ba", +"kjk c #faf2bb", +"i.x c #faf2bc", +"kqf c #faf2bd", +"j8E c #faf2bf", +"gYq c #faf2c2", +"gpU c #faf2c3", +"iZz c #faf2c5", +"d0u c #faf2d1", +"gO5 c #faf2db", +".ng c #faf364", +"eIP c #faf3a1", +"eXq c #faf3a2", +"kNj c #faf3a3", +"kEs c #faf3a4", +"iyG c #faf3a5", +"iv0 c #faf3a6", +"itm c #faf3a8", +"jfm c #faf3a9", +"j19 c #faf3ad", +"jIt c #faf3ae", +"jKQ c #faf3b0", +"jq2 c #faf3b3", +"iok c #faf3b4", +"jz2 c #faf3b6", +"h7J c #faf3b8", +"iqS c #faf3be", +"kFw c #faf3bf", +"hqX c #faf3c0", +"i7G c #faf3c5", +"i2q c #faf3c7", +"iT1 c #faf3c8", +"iQ5 c #faf3ca", +"e7P c #faf3d1", +"d5r c #faf3d2", +"dRf c #faf3d3", +"dIT c #faf3d5", +"ev3 c #faf3d6", +"gWR c #faf3db", +"hXo c #faf3e1", +"f.0 c #faf4a4", +"iv1 c #faf4a5", +"kiy c #faf4ac", +"ivX c #faf4ad", +"kf3 c #faf4b3", +"jx# c #faf4b4", +"jz1 c #faf4b5", +"iSx c #faf4b6", +"i.B c #faf4b9", +"j8F c #faf4c1", +"iZv c #faf4c2", +"gbI c #faf4c4", +"i46 c #faf4c5", +"jaY c #faf4c6", +"gfl c #faf4c7", +"iZA c #faf4c8", +"iN7 c #faf4cc", +"kng c #faf4cf", +"e3n c #faf4d0", +"e3p c #faf4d1", +"iz6 c #faf4d3", +"jvS c #faf4d5", +"dIM c #faf4d6", +"eFo c #faf4d8", +"fG7 c #faf4e0", +"eG9 c #faf4e3", +"d3K c #faf598", +"bMQ c #faf59b", +"fxW c #faf5a0", +"jL# c #faf5b0", +"jCR c #faf5b6", +"jaX c #faf5c2", +"ja0 c #faf5c9", +"eJ2 c #faf5d0", +"eOJ c #faf5d1", +"eJ1 c #faf5d2", +"eOH c #faf5d3", +"ipE c #faf5d4", +"eYJ c #faf5d5", +"dM4 c #faf5d7", +"fei c #faf5d8", +"hs7 c #faf5de", +"hAm c #faf5e0", +"hDR c #faf5e2", +"gPc c #faf5e3", +"e0k c #faf5e5", +"iai c #faf5e7", +"hN0 c #faf5eb", +"hil c #faf5ec", +"ha2 c #faf5ee", +"itX c #faf69a", +"itH c #faf6a1", +"ihl c #faf6a5", +"gE7 c #faf6b1", +"j.f c #faf6c4", +"i7K c #faf6ca", +"jdR c #faf6cb", +"i2k c #faf6cd", +"iK6 c #faf6ce", +"eTN c #faf6d1", +"eOM c #faf6d2", +"e3m c #faf6d3", +"eAv c #faf6d5", +"eE9 c #faf6d6", +"eF# c #faf6d7", +"iib c #faf6d8", +"dd0 c #faf6d9", +"dd3 c #faf6da", +"e0m c #faf6db", +"gHq c #faf6e3", +"jyw c #faf6e6", +"hl7 c #faf6eb", +"heK c #faf6ec", +"k#j c #faf6ed", +"iz. c #faf7a6", +"iN1 c #faf7cd", +"eON c #faf7d2", +"eJ3 c #faf7d3", +"fip c #faf7d4", +"fmA c #faf7d5", +"eTM c #faf7d6", +"eAw c #faf7d7", +"evY c #faf7d8", +"dIN c #faf7d9", +"hRk c #faf7da", +"dnx c #faf7db", +"hs5 c #faf7dc", +"i5b c #faf7e7", +"bZY c #faf7ee", +"itL c #faf8a6", +"iy7 c #faf8a7", +"gla c #faf8d3", +"ghz c #faf8d4", +"fqC c #faf8d6", +"fqA c #faf8d7", +"emA c #faf8d8", +"hAi c #faf8dc", +"fyH c #faf8de", +"exK c #faf8f1", +"eHg c #faf8f2", +"d2x c #faf8f5", +"iBU c #faf9a7", +"gdY c #faf9d5", +"fqB c #faf9d6", +"fuR c #faf9d7", +"gk6 c #faf9d8", +"gWK c #faf9d9", +"gHi c #faf9db", +"gLc c #faf9dc", +"gHj c #faf9dd", +"gzT c #faf9de", +"gSW c #faf9df", +"eLZ c #faf9f4", +"dui c #faf9f5", +".oo c #fafa4e", +"gaD c #fafad5", +"fyL c #fafad6", +"fF0 c #fafad7", +"gso c #fafad8", +"gzR c #fafad9", +"gHh c #fafada", +"gsp c #fafadb", +"gwc c #fafadd", +"g0T c #fafade", +"gDH c #fafadf", +"btP c #fafaf6", +"bZM c #fafaf8", +"cKs c #fafafa", +"fJI c #fafbd7", +"f6y c #fafbd8", +"gw# c #fafbd9", +"cly c #fafbfc", +"fNo c #fafcd7", +"fQQ c #fafcd8", +"fZ9 c #fafcd9", +"f3p c #fafcda", +"c#u c #fafcff", +"bIs c #fafdff", +".#x c #fb41fb", +".ae c #fb63fe", +".af c #fb63ff", +".aG c #fb6fff", +".ba c #fb7afd", +".bF c #fb84fb", +".bE c #fb84fc", +".ce c #fb8df9", +".ef c #fba5f1", +".eT c #fbaced", +".fC c #fbb3e9", +"jBM c #fbb775", +"js7 c #fbb875", +"jyT c #fbb876", +"jv6 c #fbb877", +"jBL c #fbb977", +".gU c #fbbfe0", +"hZ# c #fbc23f", +"hZa c #fbc240", +"h2d c #fbc241", +"h2a c #fbc243", +"hZb c #fbc341", +"i.1 c #fbc349", +"hZd c #fbc441", +"kvs c #fbc473", +"h2e c #fbc541", +"h5d c #fbc542", +"hIU c #fbc544", +"i.2 c #fbc549", +"hY3 c #fbc54d", +".hJ c #fbc5bf", +".hA c #fbc5da", +"hV6 c #fbc641", +"hZe c #fbc642", +"h8a c #fbc645", +"h5c c #fbc648", +"h4R c #fbc64d", +"hZg c #fbc742", +"h8b c #fbc743", +"i.3 c #fbc748", +"h8# c #fbc74a", +"h45 c #fbc74d", +"kjR c #fbc771", +"hW. c #fbc842", +"i.4 c #fbc848", +"i.L c #fbc84f", +"h7U c #fbc851", +"kxV c #fbc880", +"hgT c #fbc941", +"hMD c #fbc943", +"hn8 c #fbc946", +"gI6 c #fbc94a", +"ks3 c #fbc974", +"hS7 c #fbca41", +"hP6 c #fbca42", +"hMC c #fbca43", +"hJl c #fbca47", +"gQI c #fbca4b", +"h4Q c #fbca50", +"hS8 c #fbcb41", +"gQJ c #fbcb4a", +"h4P c #fbcb52", +"h7R c #fbcb55", +"i.J c #fbcb57", +"kIG c #fbcb90", +"hJi c #fbcc42", +"hMB c #fbcc43", +"hJk c #fbcc45", +"hvp c #fbcc4b", +"gtV c #fbcc53", +"gYA c #fbcc55", +"hVQ c #fbcc5a", +"kLN c #fbcc92", +"hF0 c #fbcd43", +"gUF c #fbcd47", +"g2G c #fbcd4e", +"ibK c #fbcd55", +"h7Q c #fbcd56", +"kou c #fbcd74", +"ks2 c #fbcd7a", +"kvr c #fbcd80", +"kOT c #fbcd94", +"hP1 c #fbce42", +"hP4 c #fbce43", +"gQK c #fbce48", +"h7P c #fbce59", +"hP2 c #fbcf42", +"hP3 c #fbcf43", +"ibD c #fbcf55", +"i.I c #fbcf5b", +"h#d c #fbd040", +"hP0 c #fbd042", +"g3f c #fbd044", +"gYC c #fbd047", +"g2H c #fbd049", +"g6J c #fbd04d", +"i.H c #fbd05e", +"kAy c #fbd08f", +".iS c #fbd0ce", +"g7g c #fbd142", +"gUG c #fbd146", +"gQL c #fbd147", +"gqm c #fbd150", +"ibI c #fbd156", +"kC8 c #fbd194", +"kFQ c #fbd198", +"hMy c #fbd242", +"hMz c #fbd243", +"hMx c #fbd342", +"gt3 c #fbd351", +"jim c #fbd353", +"i2Z c #fbd3a1", +"gUH c #fbd449", +"gJy c #fbd44a", +"gt4 c #fbd44b", +"gqn c #fbd44d", +"huR c #fbd44e", +"juH c #fbd45b", +"jrI c #fbd45e", +"iZ9 c #fbd49e", +"hyQ c #fbd540", +"gQM c #fbd547", +"g2I c #fbd54e", +"hFZ c #fbd644", +"gNl c #fbd64a", +"i1k c #fbd64b", +"iUs c #fbd69d", +".ju c #fbd6c5", +"hcw c #fbd758", +"hgk c #fbd759", +"gIu c #fbd7cc", +"gRa c #fbd849", +"gJo c #fbd84d", +"gBB c #fbd857", +"juF c #fbd862", +"jla c #fbd871", +"jvZ c #fbd8a7", +"gJ2 c #fbd945", +"gMX c #fbd948", +"g6L c #fbd957", +"hjT c #fbd959", +"hMp c #fbd96a", +"jO7 c #fbd9a8", +"gYE c #fbda54", +"hFG c #fbda5c", +"iJW c #fbda6f", +"iG. c #fbdaa5", +"jUh c #fbdaa8", +"jjO c #fbdab1", +"gFn c #fbdb53", +"gFl c #fbdb55", +"hI5 c #fbdb5d", +"iML c #fbdb70", +"iMN c #fbdb71", +"iJX c #fbdb72", +"jyH c #fbdba9", +"iLj c #fbdbaa", +"hOR c #fbdbad", +"gU6 c #fbdc4c", +"gNb c #fbdc52", +"gJ0 c #fbdc54", +"g6M c #fbdc59", +"iVw c #fbdc5f", +"iIt c #fbdcaa", +"iIw c #fbdcae", +"iAe c #fbdcb0", +"h.J c #fbdd58", +"hcA c #fbdd5a", +"hFH c #fbdd5f", +"hCd c #fbdd66", +"jWF c #fbdda9", +"iFK c #fbddab", +"iRh c #fbddac", +"iRg c #fbddad", +"iRf c #fbddaf", +"iZN c #fbddb0", +"iRd c #fbddb2", +"hcB c #fbde5b", +"hFJ c #fbde5f", +"hrg c #fbde6d", +"hI0 c #fbde8b", +"iIx c #fbdeb1", +"inm c #fbdeb5", +"hCe c #fbdf67", +"gqV c #fbdf8c", +"jUg c #fbdfaf", +"jMy c #fbdfb0", +"iWX c #fbdfb2", +"hR4 c #fbdfb4", +"jgU c #fbdfbb", +"gQO c #fbe04c", +"jO6 c #fbe0b1", +"jMz c #fbe0b2", +"b36 c #fbe0b8", +"b37 c #fbe0b9", +"gY1 c #fbe152", +"hCf c #fbe16b", +".kR c #fbe195", +"kFE c #fbe1a0", +"jY2 c #fbe1ab", +"heR c #fbe1b2", +"jH. c #fbe1b5", +"iAf c #fbe1b6", +"ixt c #fbe1b8", +"b82 c #fbe1ba", +"i5B c #fbe1bd", +"gF9 c #fbe249", +"jUf c #fbe2b1", +"iRb c #fbe2b9", +"iuD c #fbe2bd", +"i79 c #fbe2be", +"gCl c #fbe34e", +"gyw c #fbe354", +"gF7 c #fbe359", +"g1j c #fbe3b8", +"iZI c #fbe3b9", +"fza c #fbe3bc", +"gjE c #fbe491", +"keX c #fbe4a5", +"jUe c #fbe4b4", +"ha7 c #fbe4b7", +"g1i c #fbe4b9", +"bKR c #fbe4bc", +"gCj c #fbe55e", +"gyu c #fbe562", +"hrT c #fbe5a2", +"kOG c #fbe5ab", +"inp c #fbe5bb", +"bPE c #fbe5bd", +"hX3 c #fbe5be", +"bG# c #fbe5c2", +"gCk c #fbe658", +"gjD c #fbe694", +"kxF c #fbe6ac", +"iau c #fbe6b6", +"ig. c #fbe6b8", +"idt c #fbe6bb", +"gXd c #fbe6bf", +"gU0 c #fbe762", +"gn# c #fbe797", +"gF0 c #fbe7a1", +"koc c #fbe7ae", +"kof c #fbe7af", +"h08 c #fbe7c0", +"gTl c #fbe7c2", +"g2O c #fbe85b", +"gfY c #fbe89f", +"kod c #fbe8b1", +"kxA c #fbe8b3", +"j1p c #fbe8b9", +"jWB c #fbe8bc", +"hO. c #fbe8c2", +"iUa c #fbe8c3", +"hHx c #fbe8c9", +"bBJ c #fbe8ca", +"g6Q c #fbe960", +".l4 c #fbe999", +"gjA c #fbe99d", +"gf0 c #fbe99e", +"g.S c #fbe9a3", +"f7R c #fbe9a4", +"kRt c #fbe9a6", +"kRs c #fbe9a8", +"hCa c #fbe9b0", +"ksJ c #fbe9b3", +"h#L c #fbe9b4", +"jY0 c #fbe9bc", +"j1m c #fbe9be", +"idC c #fbe9bf", +"h91 c #fbe9c0", +"hXw c #fbe9c1", +"h06 c #fbe9c2", +"h05 c #fbe9c3", +"hEh c #fbe9cc", +"gfZ c #fbeaa0", +"f1m c #fbeaa6", +"fY# c #fbeaa7", +"fY. c #fbeaa8", +"kxz c #fbeab4", +"kca c #fbeab8", +"j3S c #fbeabe", +"iDg c #fbeabf", +"j3R c #fbeac0", +"h09 c #fbeac1", +"h4c c #fbeac2", +"hi# c #fbeacb", +"g04 c #fbeacc", +"g1a c #fbeace", +"btn c #fbeacf", +"gYO c #fbeb69", +"hnM c #fbeb7c", +"kQi c #fbeb9e", +"g3u c #fbeb9f", +"g3O c #fbeba6", +"fUX c #fbeba7", +"f1k c #fbeba8", +"fU0 c #fbeba9", +"hQj c #fbebad", +"jMs c #fbebb9", +"fwP c #fbebba", +"j3T c #fbebbe", +"j8Q c #fbebc1", +"iIH c #fbebc2", +"h4b c #fbebc3", +"h4a c #fbebc4", +"jWA c #fbebc6", +"hXR c #fbebc8", +"hOt c #fbebc9", +"btj c #fbebca", +"jO5 c #fbebcb", +"g1b c #fbebcd", +"gW9 c #fbebce", +"gTe c #fbebcf", +"hnP c #fbec6b", +"h.O c #fbec72", +"g3x c #fbec99", +"fRW c #fbeca7", +"fOL c #fbeca9", +"fwF c #fbecab", +"fVj c #fbecad", +"gcn c #fbecaf", +"kH7 c #fbecb1", +"ku8 c #fbecb3", +"kxy c #fbecb4", +"f43 c #fbecb8", +"fLG c #fbecbb", +"j6e c #fbecbf", +"j8R c #fbecc0", +"klW c #fbecc1", +"h7. c #fbecc3", +"i5f c #fbecc5", +"hUJ c #fbecc9", +"hOw c #fbecca", +"jWy c #fbeccd", +"bxn c #fbeccf", +"hEg c #fbecd1", +"btm c #fbecd2", +"bxs c #fbecd3", +"h.P c #fbed75", +"kN0 c #fbed89", +"kQl c #fbed9f", +"kJZ c #fbeda1", +"g.W c #fbeda9", +"fH# c #fbedab", +"fK5 c #fbedac", +"fD2 c #fbedae", +"hTo c #fbedaf", +"fHC c #fbedb0", +"fD4 c #fbedb2", +"kOC c #fbedb3", +"kFy c #fbedb4", +"kAa c #fbedb5", +"fAs c #fbedb6", +"fsK c #fbedb8", +"fHH c #fbedbb", +"fPh c #fbedbd", +"frX c #fbedbe", +"eVp c #fbedc0", +"keV c #fbedc1", +"iuP c #fbedc4", +"hMf c #fbedc6", +"if4 c #fbedc8", +"jYZ c #fbedc9", +"hOs c #fbedcc", +"jRF c #fbedcd", +"hHF c #fbedce", +"gTf c #fbedd5", +"hcS c #fbee68", +"kE4 c #fbee8f", +"g7J c #fbee9e", +"kJY c #fbeea0", +"fv5 c #fbeea4", +"hoh c #fbeea5", +"kgM c #fbeea7", +"eaN c #fbeea8", +"eaQ c #fbeea9", +"fb9 c #fbeead", +"fPz c #fbeeae", +"hGa c #fbeeaf", +"hvx c #fbeeb0", +"fgj c #fbeeb1", +"fVk c #fbeeb2", +"jx2 c #fbeeb3", +"gJO c #fbeeb4", +"fsF c #fbeeb6", +"kFz c #fbeeb7", +"f1K c #fbeeb9", +"fG0 c #fbeebd", +"fG1 c #fbeebe", +"fvX c #fbeebf", +"fvU c #fbeec0", +"hoq c #fbeec1", +"eJ7 c #fbeec2", +"eeH c #fbeec4", +"eeI c #fbeec5", +"hPG c #fbeec6", +"iiw c #fbeec7", +"j1l c #fbeeca", +"hHE c #fbeed0", +"kok c #fbeed1", +"hwT c #fbeed3", +"hHt c #fbeed6", +"g6U c #fbef77", +"hj9 c #fbef78", +"kNI c #fbef82", +"klx c #fbef93", +"j9X c #fbef9e", +"fVQ c #fbefa1", +"kkN c #fbefa2", +"kkP c #fbefa3", +"fVP c #fbefa4", +"gOL c #fbefa5", +"fv6 c #fbefa8", +"jRq c #fbefa9", +"eaP c #fbefaa", +"jGN c #fbefab", +"ekr c #fbefac", +"fDV c #fbefad", +"gcm c #fbefae", +"fVK c #fbefaf", +"gGw c #fbefb0", +"hJz c #fbefb1", +"hvy c #fbefb2", +"fgk c #fbefb3", +"gC. c #fbefb4", +"k#d c #fbefb5", +"gNC c #fbefb6", +"jJI c #fbefb9", +"jmN c #fbefbc", +"jyy c #fbefbf", +"fzP c #fbefc0", +"fKV c #fbefc2", +"eok c #fbefc4", +"ejq c #fbefc5", +"ejp c #fbefc6", +"e#Y c #fbefc7", +"d2f c #fbefc8", +"eZ7 c #fbefc9", +"fqG c #fbefcb", +"keL c #fbefcc", +"jRI c #fbefd2", +"iFF c #fbefd3", +"hHD c #fbefd5", +"hHB c #fbefd7", +"gHC c #fbefdd", +"hcN c #fbf07a", +"kKr c #fbf087", +"kpP c #fbf093", +"kny c #fbf094", +"kwV c #fbf096", +"j4Z c #fbf0a1", +"kip c #fbf0a2", +"gcQ c #fbf0a3", +"c38 c #fbf0a4", +"kkB c #fbf0a6", +"dDj c #fbf0a7", +"e5p c #fbf0a8", +"fgO c #fbf0a9", +"jsJ c #fbf0aa", +"fAX c #fbf0ab", +"jGO c #fbf0ac", +"fPB c #fbf0ad", +"fHv c #fbf0ae", +"fLY c #fbf0af", +"icK c #fbf0b0", +"g#g c #fbf0b1", +"hdI c #fbf0b2", +"jVO c #fbf0b4", +"kCK c #fbf0b5", +".P7 c #fbf0b6", +"keB c #fbf0b7", +"icd c #fbf0b8", +"kqr c #fbf0ba", +"khd c #fbf0bb", +"jpR c #fbf0bc", +"gfL c #fbf0c5", +"eol c #fbf0c6", +"eVk c #fbf0c7", +"e#X c #fbf0c8", +"d7# c #fbf0c9", +"eVj c #fbf0ca", +"ini c #fbf0cb", +"ixw c #fbf0d7", +"hwU c #fbf0d8", +"gLx c #fbf0de", +"kKt c #fbf18a", +"kQR c #fbf18b", +"kNJ c #fbf18c", +"kpI c #fbf193", +"kur c #fbf195", +"kCr c #fbf19c", +"e6B c #fbf19e", +"fYX c #fbf1a1", +"fPD c #fbf1a2", +"gcR c #fbf1a3", +"j9G c #fbf1a4", +"ggv c #fbf1a5", +"cPV c #fbf1a6", +"cUu c #fbf1a7", +"kkC c #fbf1a8", +"kpc c #fbf1a9", +"j9E c #fbf1aa", +"gf6 c #fbf1ab", +"gOl c #fbf1ac", +"h#s c #fbf1ad", +"g#j c #fbf1ae", +"h5Y c #fbf1af", +"fAW c #fbf1b0", +"ftb c #fbf1b1", +"ioi c #fbf1b3", +"jX7 c #fbf1b4", +"kz7 c #fbf1b7", +"iKK c #fbf1b8", +"kbW c #fbf1b9", +"khe c #fbf1ba", +"hcs c #fbf1bb", +"k#f c #fbf1bc", +"kLq c #fbf1be", +"fzL c #fbf1c7", +"eB1 c #fbf1c9", +"exu c #fbf1ca", +"eB2 c #fbf1cb", +"eOR c #fbf1cc", +"fqH c #fbf1ce", +"e.# c #fbf1cf", +"gz2 c #fbf1db", +"g88 c #fbf1de", +"gHD c #fbf1e1", +".ne c #fbf27c", +"kwS c #fbf28d", +"kQ2 c #fbf297", +"kul c #fbf298", +"cus c #fbf2a0", +"cC4 c #fbf2a1", +"cC5 c #fbf2a2", +"j9V c #fbf2a3", +"kde c #fbf2a4", +"j7t c #fbf2a5", +"g0n c #fbf2a6", +"j2d c #fbf2a7", +"cZg c #fbf2a8", +"kd# c #fbf2a9", +"kan c #fbf2aa", +"jMd c #fbf2ac", +"gGC c #fbf2ad", +"jGP c #fbf2ae", +"jyu c #fbf2af", +"jBj c #fbf2b0", +"h6b c #fbf2b1", +"jYG c #fbf2b2", +"jgl c #fbf2b5", +"jDy c #fbf2b6", +"i1U c #fbf2b7", +"ivV c #fbf2b8", +"kjy c #fbf2bb", +"hge c #fbf2be", +"iNB c #fbf2c0", +"gtD c #fbf2c1", +"ge4 c #fbf2c2", +"gtE c #fbf2c6", +"exp c #fbf2ca", +"fmH c #fbf2d0", +"j57 c #fbf2d2", +"iAi c #fbf2d8", +"ejI c #fbf2d9", +"gW1 c #fbf2da", +"jpX c #fbf2db", +"hAq c #fbf2dc", +"gDT c #fbf2e2", +"gDU c #fbf2e4", +"eIM c #fbf3a1", +"cut c #fbf3a2", +"cyN c #fbf3a3", +"fIJ c #fbf3a4", +"j7s c #fbf3a5", +"jZM c #fbf3a6", +"jZL c #fbf3a7", +"j66 c #fbf3a8", +"j2c c #fbf3a9", +"grJ c #fbf3ac", +"gro c #fbf3ad", +"gyZ c #fbf3ae", +"jyt c #fbf3af", +"ioj c #fbf3b0", +"jju c #fbf3b1", +"jsK c #fbf3b2", +"ivW c #fbf3b5", +"jq3 c #fbf3b6", +"kQy c #fbf3b8", +"itj c #fbf3b9", +"kKa c #fbf3ba", +"iPx c #fbf3bd", +"kn0 c #fbf3be", +"iBq c #fbf3bf", +"jBk c #fbf3c0", +"kH3 c #fbf3c4", +"giA c #fbf3c5", +"i49 c #fbf3c9", +"iWJ c #fbf3ca", +"e7U c #fbf3d0", +"d5B c #fbf3d1", +"e.e c #fbf3d2", +"e.b c #fbf3d3", +"hlP c #fbf3d5", +"eAD c #fbf3d7", +"ic8 c #fbf3db", +"iuG c #fbf3dc", +"hRm c #fbf3dd", +"jKW c #fbf49d", +"eDT c #fbf4a2", +"ezc c #fbf4a3", +"cd1 c #fbf4a4", +"kps c #fbf4a5", +"iv2 c #fbf4a6", +"iyF c #fbf4a7", +"iug c #fbf4a8", +"ifn c #fbf4a9", +"ivY c #fbf4aa", +"jt1 c #fbf4ac", +"jia c #fbf4ad", +"j2. c #fbf4ae", +"iqX c #fbf4af", +"hW9 c #fbf4b1", +"jOh c #fbf4b2", +"jdK c #fbf4b3", +"jFl c #fbf4b4", +"i#2 c #fbf4b7", +"ibu c #fbf4b9", +"ivU c #fbf4bc", +"hL4 c #fbf4bd", +"gYv c #fbf4be", +"klH c #fbf4bf", +"i6A c #fbf4c0", +"iJL c #fbf4c1", +"hyo c #fbf4c2", +"hcl c #fbf4c3", +"h.u c #fbf4c4", +"hcm c #fbf4c5", +"i7H c #fbf4c6", +"kgc c #fbf4c8", +"i2s c #fbf4c9", +"iT2 c #fbf4ca", +"feg c #fbf4d2", +"e3l c #fbf4d5", +"ev4 c #fbf4d7", +"hAp c #fbf4de", +"j8H c #fbf4e1", +"hpM c #fbf4e2", +"g87 c #fbf4e3", +"h0H c #fbf4e6", +"fQd c #fbf59f", +"ihK c #fbf5a3", +"eDV c #fbf5a4", +"km5 c #fbf5a5", +"iBv c #fbf5a7", +"ivZ c #fbf5a8", +"jfn c #fbf5ac", +"j2# c #fbf5ae", +"jt0 c #fbf5b0", +"jwT c #fbf5b1", +"km6 c #fbf5b2", +"jCv c #fbf5b3", +"jtY c #fbf5b4", +"igH c #fbf5ba", +"iPz c #fbf5bb", +"h4K c #fbf5bc", +"giU c #fbf5bd", +"hIL c #fbf5be", +"h7I c #fbf5bf", +"g2B c #fbf5c0", +"g2A c #fbf5c1", +"iMz c #fbf5c2", +"hqY c #fbf5c5", +"jgK c #fbf5c8", +"iQ6 c #fbf5cb", +"kl. c #fbf5cc", +"iK9 c #fbf5ce", +"ec6 c #fbf5cf", +"iIi c #fbf5d0", +"eTO c #fbf5d1", +"eOK c #fbf5d2", +"eOL c #fbf5d3", +"fiw c #fbf5d5", +"faa c #fbf5d8", +"ev1 c #fbf5d9", +"fK3 c #fbf5e1", +"eaa c #fbf5e9", +"gDV c #fbf5ea", +"g9d c #fbf5eb", +"egh c #fbf6a0", +"iEm c #fbf6aa", +"jzH c #fbf6b0", +"iSy c #fbf6b3", +"iPA c #fbf6b5", +"jCU c #fbf6b6", +"iBt c #fbf6b7", +"iJO c #fbf6b8", +"jug c #fbf6b9", +"joi c #fbf6bc", +"ivT c #fbf6c2", +"jE# c #fbf6c3", +"i43 c #fbf6c6", +"gfv c #fbf6c9", +"j.g c #fbf6cb", +"iN8 c #fbf6cc", +"ehG c #fbf6d1", +"eOI c #fbf6d2", +"d98 c #fbf6d3", +"eFb c #fbf6d4", +"f#Y c #fbf6d5", +"d5s c #fbf6d6", +"iuv c #fbf6d7", +"cnM c #fbf6d9", +"dwc c #fbf6da", +"hDP c #fbf6e0", +"gS9 c #fbf6e1", +"hDQ c #fbf6e4", +"gz3 c #fbf6e6", +"h6s c #fbf6e7", +"hUm c #fbf6ea", +"haZ c #fbf6ec", +"ha0 c #fbf6ed", +"g9c c #fbf6ee", +"gIZ c #fbf7b4", +"jw9 c #fbf7b6", +"jx. c #fbf7b7", +"guo c #fbf7b9", +"iZr c #fbf7cb", +"iWB c #fbf7cd", +"ehF c #fbf7cf", +"iFD c #fbf7d1", +"eAy c #fbf7d2", +"eTP c #fbf7d3", +"fio c #fbf7d6", +"ipF c #fbf7d7", +"dM7 c #fbf7d8", +"dr0 c #fbf7d9", +"eAu c #fbf7da", +"drU c #fbf7db", +"hNT c #fbf7dc", +"hXn c #fbf7dd", +"hwM c #fbf7e2", +"hpu c #fbf7e9", +"hpv c #fbf7ea", +"hKw c #fbf7ec", +"cY8 c #fbf896", +"iwo c #fbf8a7", +"iEl c #fbf8b1", +"iG2 c #fbf8b2", +"iPB c #fbf8b3", +"iEk c #fbf8b4", +"gmN c #fbf8b5", +"ja1 c #fbf8cc", +"emC c #fbf8d0", +"eOO c #fbf8d3", +"eFf c #fbf8d4", +"evZ c #fbf8d5", +"fmz c #fbf8d6", +"eAx c #fbf8d7", +"eFe c #fbf8d9", +"evW c #fbf8da", +"dM3 c #fbf8db", +"drX c #fbf8dc", +"d91 c #fbf8dd", +"hDM c #fbf8de", +"hAn c #fbf8e4", +"hl2 c #fbf8eb", +"ic7 c #fbf8ec", +"heJ c #fbf8ee", +"itN c #fbf9a6", +"itM c #fbf9a7", +"ghy c #fbf9d5", +"fuS c #fbf9d6", +"g0L c #fbf9d8", +"goO c #fbf9d9", +"iux c #fbf9da", +"gSV c #fbf9db", +"h0v c #fbf9dc", +"hAj c #fbf9de", +"gWQ c #fbf9df", +"g0U c #fbf9e0", +"cBT c #fbf9f8", +"fyM c #fbfad6", +"fCo c #fbfad7", +"gd0 c #fbfad8", +"gDE c #fbfad9", +"gLb c #fbfada", +"gHk c #fbfadf", +"gzU c #fbfae0", +"gLd c #fbfae1", +"gSX c #fbfae2", +"g0V c #fbfae3", +"a1F c #fbfaf7", +"by. c #fbfafa", +"fJJ c #fbfbd7", +"gzQ c #fbfbd9", +"gsq c #fbfbdf", +"c8n c #fbfbf8", +"at3 c #fbfbf9", +"bCv c #fbfbfb", +"fNp c #fbfcd7", +"fNq c #fbfcd8", +"fTM c #fbfcd9", +"f3q c #fbfcda", +"bVs c #fbfcfc", +"cho c #fbfcfd", +"bIr c #fbfdfe", +"bNd c #fbfdff", +"ced c #fbfeff", +".#y c #fc41fc", +".ag c #fc63ff", +".aI c #fc6ffd", +".aH c #fc6ffe", +".bb c #fc7afc", +".bG c #fc84fa", +".cT c #fc96f6", +".dA c #fc9df3", +".eg c #fca5f0", +"i8y c #fcb65e", +".gf c #fcb9e3", +"hV4 c #fcc23e", +"hV5 c #fcc541", +"hYX c #fcc649", +"h5b c #fcc64a", +"hV7 c #fcc741", +"hY2 c #fcc84c", +"hJc c #fcc93d", +"h13 c #fcc950", +"gxE c #fcca4b", +"gMS c #fcca4c", +"hVR c #fcca50", +"hYW c #fcca53", +"hT# c #fccb43", +"hFx c #fccb47", +"gFd c #fccb4b", +"hY1 c #fccb4e", +"kmc c #fccb75", +".if c #fccbd2", +"hJj c #fccc43", +"hF3 c #fccc47", +"gMT c #fccc4a", +"h12 c #fccc52", +"hYY c #fccc53", +".in c #fcccb9", +"hF1 c #fccd44", +"hCF c #fccd4a", +"hy6 c #fccd4b", +"hP5 c #fcce44", +"hy5 c #fcce46", +"hVS c #fcce57", +"hSV c #fcce58", +"kqM c #fcce77", +"hPZ c #fccf42", +"hMA c #fccf43", +"gMU c #fccf49", +"jlz c #fccf4a", +"jii c #fccf5c", +"kvq c #fccf82", +"hy4 c #fcd043", +"i.M c #fcd052", +"h44 c #fcd059", +"hPK c #fcd05a", +"hCC c #fcd144", +"jij c #fcd15e", +"kxT c #fcd188", +"kIE c #fcd199", +"g3e c #fcd242", +"kOS c #fcd299", +"kLL c #fcd29a", +"g7f c #fcd342", +"jly c #fcd351", +"hq7 c #fcd354", +"hnw c #fcd355", +"ibJ c #fcd35a", +"hy3 c #fcd444", +"gBv c #fcd44e", +"jY4 c #fcd493", +"g3c c #fcd543", +"gV# c #fcd544", +"gNm c #fcd54a", +"gYD c #fcd54b", +"g6K c #fcd551", +"gxN c #fcd554", +"ibE c #fcd555", +"hMo c #fcd556", +"iOG c #fcd595", +"gY8 c #fcd643", +"hrc c #fcd650", +"i6P c #fcd651", +"jip c #fcd654", +"jfB c #fcd655", +"jfA c #fcd656", +"jcB c #fcd658", +"jcA c #fcd659", +"g3b c #fcd745", +"gV. c #fcd746", +"gRb c #fcd747", +"gFI c #fcd74a", +"gFH c #fcd74b", +"i4c c #fcd74d", +"gxO c #fcd74e", +"i9n c #fcd756", +"hCB c #fcd845", +"hnF c #fcd84a", +"hnz c #fcd858", +"jcC c #fcd85b", +"hMm c #fcd85c", +"h70 c #fcd860", +"juG c #fcd862", +"i9i c #fcd863", +"iMK c #fcd867", +"gQN c #fcd949", +"gJ. c #fcd94a", +"gUI c #fcd94d", +"i1j c #fcd952", +"i4b c #fcd953", +"gBC c #fcd954", +"hr# c #fcd955", +"jfC c #fcd959", +"iSJ c #fcd95b", +"hMl c #fcd95d", +"hFF c #fcd95e", +"i.T c #fcd960", +"iVt c #fcd964", +"i6L c #fcd96c", +"kvn c #fcd995", +"jWG c #fcd9a2", +"jMA c #fcd9a9", +"hFX c #fcda44", +"g2J c #fcda57", +"h.H c #fcda59", +"hcx c #fcda5b", +"hI3 c #fcda5f", +"ksZ c #fcda97", +"jJW c #fcdaa8", +"i2Y c #fcdaac", +"hra c #fcdb58", +"hcy c #fcdb5a", +"hI6 c #fcdb5b", +"hI4 c #fcdb5d", +"hCc c #fcdb62", +"gqM c #fcdb7e", +"jY3 c #fcdba1", +".j9 c #fcdbba", +"hCx c #fcdc45", +"gJ1 c #fcdc4d", +"h.I c #fcdc59", +"hcz c #fcdc5a", +"hgl c #fcdc5b", +"hjU c #fcdc5c", +"iPM c #fcdc6f", +".kd c #fcdc9f", +"kxP c #fcdca5", +"iIT c #fcdca7", +"jBx c #fcdcad", +"gMY c #fcdd49", +"hCk c #fcdd52", +"hFK c #fcdd59", +"g6N c #fcdd5a", +"g2K c #fcdd5b", +"hgm c #fcdd5c", +"i.Q c #fcdd62", +"iSL c #fcdd6c", +"iMM c #fcdd73", +"iC0 c #fcddb0", +"hyN c #fcde49", +"hgo c #fcde5a", +"hgn c #fcde5d", +"huZ c #fcde66", +"hyF c #fcde68", +"hFD c #fcde83", +"iU# c #fcdeac", +"iLk c #fcdead", +"iWZ c #fcdeae", +"iOe c #fcdeb1", +"gYF c #fcdf5a", +"hFI c #fcdf62", +"iVv c #fcdf63", +"kvm c #fcdfa8", +"iIr c #fcdfad", +"hOQ c #fcdfb2", +"gNc c #fce055", +"hgp c #fce059", +"hcC c #fce05a", +"g2L c #fce05b", +"hCj c #fce05e", +"hri c #fce067", +"h75 c #fce08a", +"iFP c #fce0b5", +"b81 c #fce0b8", +"bZi c #fce0b9", +"hgq c #fce154", +"hu0 c #fce16b", +"hyG c #fce16c", +"hyD c #fce188", +"gRv c #fce193", +"kLy c #fce19f", +"khB c #fce1a0", +"kOI c #fce1a1", +"jJU c #fce1b1", +"jH# c #fce1b4", +"i2H c #fce1b5", +"hcD c #fce25b", +"h.K c #fce25e", +"hCi c #fce263", +"kOH c #fce2a3", +"hX4 c #fce2b5", +"bPJ c #fce2ba", +"b35 c #fce2bb", +"gF8 c #fce352", +"g6O c #fce35c", +"hyM c #fce35f", +"hnH c #fce366", +"hCg c #fce369", +"hyH c #fce36c", +"kFF c #fce3a3", +"kIr c #fce3a7", +"ksY c #fce3ae", +"jWE c #fce3b2", +"jMx c #fce3b6", +"cbI c #fce3bb", +"bUq c #fce3bc", +"bKW c #fce3bd", +"iXd c #fce3be", +"gUL c #fce458", +"gM5 c #fce45d", +"hyL c #fce462", +"hyI c #fce46e", +"gCd c #fce49b", +"kLw c #fce4a7", +"kFD c #fce4a9", +"kIp c #fce4aa", +"inE c #fce4b1", +"iWS c #fce4ba", +"iZL c #fce4bb", +"iT6 c #fce4bc", +"b80 c #fce4bd", +"iXc c #fce4be", +"h.L c #fce55c", +"hyJ c #fce56d", +"hyK c #fce56e", +"gJT c #fce59e", +"kAh c #fce5ab", +"jWD c #fce5b6", +"hUY c #fce5be", +"ixL c #fce5c0", +"gYI c #fce65a", +"iYn c #fce66b", +"hu3 c #fce66d", +"hYS c #fce6a5", +"kCT c #fce6ad", +"kog c #fce6af", +"i5n c #fce6bb", +"gTm c #fce6bd", +"iUp c #fce6be", +"hX2 c #fce6bf", +"ckq c #fce6c0", +"iDa c #fce6c2", +"bKV c #fce6c3", +"bUl c #fce6c4", +"jd5 c #fce6c7", +"gPf c #fce6c8", +"gQS c #fce758", +"hu5 c #fce765", +"hu4 c #fce76f", +"gZp c #fce79b", +"gJS c #fce7a3", +"fsZ c #fce7a5", +"h76 c #fce7a8", +"kqy c #fce7af", +"kCS c #fce7b0", +"kCQ c #fce7b1", +"kAf c #fce7b2", +"jWC c #fce7b9", +"i7W c #fce7bd", +"iRy c #fce7be", +"ixM c #fce7c0", +"g6P c #fce85d", +"hrq c #fce85f", +"gyv c #fce860", +"hcF c #fce865", +"gfX c #fce8a0", +"fHU c #fce8a4", +"kxC c #fce8b1", +"kqv c #fce8b2", +"kxB c #fce8b3", +"kAc c #fce8b4", +"iOA c #fce8be", +"ipP c #fce8bf", +"iRz c #fce8c0", +"iAA c #fce8c2", +"hrp c #fce968", +"hrm c #fce976", +"gjB c #fce99c", +"g.Q c #fce9a2", +"f4K c #fce9a4", +"f4J c #fce9a5", +"f1o c #fce9a6", +"kK9 c #fce9a8", +"kI. c #fce9a9", +"kCP c #fce9b4", +"kxD c #fce9b5", +"jY1 c #fce9bb", +"j1n c #fce9bd", +"ink c #fce9c0", +"h07 c #fce9c1", +"iDp c #fce9c2", +"bKS c #fce9cb", +"g66 c #fcea55", +"gUZ c #fcea64", +"h.N c #fcea66", +"hcG c #fcea6a", +"hrn c #fcea77", +"hj5 c #fcea79", +"g.R c #fceaa3", +"gfW c #fceaa4", +"f1n c #fceaa6", +"f1p c #fceaa7", +"fYa c #fceaa8", +"fUZ c #fceaa9", +"kOk c #fceaaa", +"kH9 c #fceaab", +"kK8 c #fceaac", +"f41 c #fceab3", +"kAb c #fceab5", +"kqu c #fceab8", +"kl1 c #fceab9", +"kor c #fceaba", +"inj c #fceac1", +"h04 c #fceac2", +"iIQ c #fceac3", +"iT4 c #fceac5", +"iR. c #fceac8", +"jmW c #fceaca", +"bG. c #fceacd", +"hnQ c #fceb64", +"gYL c #fceb66", +"hcH c #fceb6e", +"hj6 c #fceb78", +"hnL c #fceb7c", +"gn. c #fceba1", +"g.T c #fceba4", +"gce c #fceba7", +"f1l c #fceba8", +"fUY c #fceba9", +"kK7 c #fcebab", +"kFg c #fcebac", +"kFf c #fcebad", +"f1I c #fcebb2", +"khA c #fcebb8", +"keW c #fcebb9", +"j1o c #fcebbd", +"keO c #fcebc0", +"idA c #fcebc2", +"e3O c #fcebc3", +"h4. c #fcebc4", +"h4# c #fcebc5", +"hnR c #fcec60", +"gUR c #fcec6b", +"gf1 c #fceca0", +"kNf c #fceca1", +"f7S c #fceca8", +"fX9 c #fceca9", +"fRZ c #fcecaa", +"fRY c #fcecab", +"kOf c #fcecae", +"kCv c #fcecaf", +"kOe c #fcecb0", +"ksI c #fcecbc", +"j6d c #fcecc1", +"idB c #fcecc3", +"h69 c #fcecc4", +"h66 c #fcecc5", +"h67 c #fcecc6", +"hRG c #fcecca", +"i2O c #fceccb", +"hRI c #fceccc", +"ir9 c #fceccf", +"gW8 c #fcecd0", +"g1c c #fcecd1", +"gDO c #fcecd2", +"gW3 c #fcecd3", +"gYV c #fced63", +"g22 c #fced64", +"g2R c #fced6d", +"hgt c #fced79", +"hnN c #fced7b", +"gch c #fceda3", +"fRX c #fcedab", +"fON c #fcedac", +"fOM c #fcedad", +"hJx c #fcedae", +"fX7 c #fcedb0", +"fX8 c #fcedb1", +"g.Y c #fcedb2", +"f42 c #fcedb9", +"fsI c #fcedba", +"khz c #fcedc1", +"k#t c #fcedc2", +"iAr c #fcedc4", +"h68 c #fcedc5", +"h9Z c #fcedc6", +"koq c #fcedc7", +"if5 c #fcedc8", +"iDk c #fcedcb", +"hUK c #fcedcc", +"hOu c #fcedcd", +"g49 c #fcedd2", +"g6S c #fcee71", +"hcJ c #fcee79", +"gZw c #fcee8f", +"hdN c #fcee9e", +"fz0 c #fceea9", +"fzZ c #fceeaa", +"fDy c #fceeac", +"fDz c #fceead", +"fAp c #fceeae", +"kjg c #fceeaf", +"gO. c #fceeb0", +"hWp c #fceeb1", +"gco c #fceeb2", +"kIm c #fceeb4", +"fLy c #fceeb5", +"kCO c #fceeb8", +"fK1 c #fceeb9", +"f72 c #fceeba", +"fD8 c #fceebd", +"fzS c #fceebe", +"iAy c #fceec4", +"iDf c #fceec5", +"khy c #fceec7", +"j6c c #fceec9", +"hK0 c #fceecd", +"hRH c #fceece", +"hKX c #fceecf", +"hKY c #fceed0", +"k#r c #fceed1", +"kb9 c #fceed2", +"hKW c #fceed3", +"i78 c #fceed4", +"g44 c #fceed5", +"gX. c #fceed7", +"gPm c #fceed9", +"hk# c #fcef6d", +"g2T c #fcef6f", +"h.Q c #fcef76", +"h.R c #fcef7a", +"kKK c #fcef8c", +"kN1 c #fcef8d", +"j7v c #fcef9f", +"h#A c #fcefa3", +"kG8 c #fcefa6", +"hrY c #fcefa9", +"fzY c #fcefab", +"fK6 c #fcefae", +"hze c #fcefb0", +"fVi c #fcefb1", +"hvz c #fcefb2", +"fkr c #fcefb3", +"hMR c #fcefb4", +"fLx c #fcefb5", +"fHE c #fcefb6", +"hWm c #fcefb7", +"fUW c #fcefb8", +"fVl c #fcefba", +"fVm c #fcefbb", +"f1L c #fcefbc", +"f44 c #fcefbd", +"fG2 c #fcefbe", +"fLC c #fcefbf", +"g7U c #fcefc1", +"fvV c #fcefc2", +"e71 c #fcefc7", +"f6T c #fcefc8", +"iDe c #fcefc9", +"iuN c #fcefca", +"j3Q c #fcefcc", +"hOv c #fcefce", +"hKZ c #fcefd0", +"iLA c #fcefd2", +"ir8 c #fcefd5", +"bxr c #fcefd9", +"kHK c #fcf08d", +"kRb c #fcf090", +"gf2 c #fcf0a2", +"kEq c #fcf0a5", +"hg5 c #fcf0a7", +"g7A c #fcf0aa", +"jMc c #fcf0ab", +"jGM c #fcf0ac", +"gcl c #fcf0ae", +"fAo c #fcf0af", +"ifm c #fcf0b0", +"fSE c #fcf0b1", +"fD1 c #fcf0b2", +"gCz c #fcf0b3", +"kbm c #fcf0b4", +"hTq c #fcf0b5", +"fHB c #fcf0b6", +"kzQ c #fcf0b7", +"fLz c #fcf0b8", +"i#n c #fcf0b9", +"kA# c #fcf0ba", +"foA c #fcf0bb", +"fsG c #fcf0bd", +"fwK c #fcf0be", +"jmO c #fcf0bf", +"frY c #fcf0c2", +"fOD c #fcf0c3", +"eVo c #fcf0c4", +"gr# c #fcf0c6", +"eZ9 c #fcf0c7", +"gnr c #fcf0c8", +"d7a c #fcf0c9", +"eog c #fcf0ca", +"iFX c #fcf0ce", +"jYW c #fcf0d1", +"jUc c #fcf0d3", +"h6H c #fcf0d4", +"hwS c #fcf0d5", +"hHC c #fcf0d7", +"gLM c #fcf0db", +"h.Z c #fcf16f", +"hgx c #fcf17c", +"kQQ c #fcf184", +"kuB c #fcf195", +"ki7 c #fcf196", +"hWv c #fcf19c", +"kkO c #fcf1a3", +"cUt c #fcf1a7", +"dDk c #fcf1a8", +"efB c #fcf1ab", +"e1r c #fcf1ac", +"hdK c #fcf1ad", +"ekp c #fcf1ae", +"j05 c #fcf1af", +"fPy c #fcf1b0", +"fkZ c #fcf1b1", +"fVN c #fcf1b2", +"j06 c #fcf1b3", +"hv0 c #fcf1b4", +"kd8 c #fcf1b5", +"jDz c #fcf1b6", +"j5T c #fcf1b7", +"fw3 c #fcf1b8", +"fAD c #fcf1b9", +"fks c #fcf1ba", +"klN c #fcf1bb", +"ko. c #fcf1bd", +"jpS c #fcf1bf", +"gyJ c #fcf1c0", +"fYw c #fcf1c3", +"jOX c #fcf1c4", +"fDk c #fcf1c7", +"eYN c #fcf1c8", +"esU c #fcf1c9", +"d2e c #fcf1ca", +"e#V c #fcf1cb", +"ifP c #fcf1cf", +"ipO c #fcf1d0", +"jWz c #fcf1d4", +"gz1 c #fcf1d9", +"i5x c #fcf1db", +"hOd c #fcf1dd", +"hOc c #fcf1de", +"bxq c #fcf1df", +"h.X c #fcf271", +"kNL c #fcf28a", +"kHu c #fcf28b", +"kEH c #fcf28c", +"kKw c #fcf28f", +"kzO c #fcf2a1", +"kNi c #fcf2a2", +"j9W c #fcf2a3", +"kfU c #fcf2a4", +"kio c #fcf2a5", +"cPU c #fcf2a6", +"efE c #fcf2a7", +"cPW c #fcf2a8", +"cUw c #fcf2a9", +"efD c #fcf2aa", +"efC c #fcf2ab", +"fPC c #fcf2ac", +"hhq c #fcf2ad", +"eko c #fcf2ae", +"fk0 c #fcf2af", +"ihW c #fcf2b0", +"g#i c #fcf2b1", +"fPx c #fcf2b2", +"fD0 c #fcf2b3", +"fAV c #fcf2b4", +"gR8 c #fcf2b5", +"hQK c #fcf2b6", +"i7o c #fcf2b7", +"jaG c #fcf2b8", +"fv7 c #fcf2b9", +"kn9 c #fcf2ba", +"h8t c #fcf2bb", +"khk c #fcf2bc", +"jj# c #fcf2bd", +"kn4 c #fcf2be", +"jmP c #fcf2c1", +"gVO c #fcf2c2", +"jjG c #fcf2c3", +"fDj c #fcf2c8", +"exo c #fcf2ca", +"d2j c #fcf2cb", +"d2i c #fcf2cc", +"gnp c #fcf2cd", +"hIZ c #fcf2d2", +"ixG c #fcf2d3", +"iIA c #fcf2d4", +"iuI c #fcf2d5", +"jYY c #fcf2d6", +"hEe c #fcf2d9", +"hHz c #fcf2da", +"jbc c #fcf2dd", +"hAG c #fcf2df", +"krT c #fcf390", +"gZB c #fcf39d", +"f.X c #fcf3a0", +"e6A c #fcf3a1", +"kdq c #fcf3a4", +"cHh c #fcf3a5", +"kf5 c #fcf3a6", +"cLz c #fcf3a7", +"ggu c #fcf3a8", +"fgP c #fcf3a9", +"cZh c #fcf3aa", +"c8V c #fcf3ab", +"gV8 c #fcf3af", +"jvP c #fcf3b0", +"iku c #fcf3b1", +"fSA c #fcf3b2", +"f8n c #fcf3b3", +"fSD c #fcf3b4", +"gV3 c #fcf3b5", +"iFx c #fcf3b6", +"jas c #fcf3b7", +"i9Y c #fcf3b8", +"iNZ c #fcf3b9", +"iSw c #fcf3ba", +"jx1 c #fcf3bb", +"kjl c #fcf3bc", +"k#e c #fcf3bd", +"jQX c #fcf3be", +"kbU c #fcf3bf", +"kd9 c #fcf3c0", +"jpT c #fcf3c1", +"kn2 c #fcf3c2", +"jjF c #fcf3c3", +"jmQ c #fcf3c5", +"gZO c #fcf3cb", +"gnq c #fcf3cc", +"fqF c #fcf3ce", +"fab c #fcf3cf", +"hZJ c #fcf3d0", +"iuH c #fcf3d3", +"hS2 c #fcf3d8", +"iav c #fcf3da", +"htc c #fcf3db", +"jd2 c #fcf3dd", +"kuk c #fcf497", +"cZ. c #fcf49c", +"eNl c #fcf4a1", +"eSw c #fcf4a2", +"cyO c #fcf4a4", +"kaB c #fcf4a5", +"j4Y c #fcf4a6", +"j7r c #fcf4a7", +"kiA c #fcf4a8", +"j4E c #fcf4a9", +"j9U c #fcf4aa", +"j4B c #fcf4ab", +"kdo c #fcf4ac", +"gGV c #fcf4ad", +"gOK c #fcf4ae", +"hWS c #fcf4af", +"gKs c #fcf4b0", +"gV7 c #fcf4b1", +"h0f c #fcf4b2", +"gCP c #fcf4b3", +"hv2 c #fcf4b4", +"gV6 c #fcf4b5", +"grk c #fcf4b6", +"ijg c #fcf4b8", +"ikw c #fcf4b9", +"ilM c #fcf4ba", +"jAP c #fcf4bb", +"i7h c #fcf4bc", +"kLp c #fcf4bd", +"iMB c #fcf4bf", +"kbV c #fcf4c0", +"keA c #fcf4c1", +"f77 c #fcf4c2", +"jjE c #fcf4c3", +"hg# c #fcf4c4", +"gns c #fcf4c6", +"iKR c #fcf4c7", +"gbF c #fcf4c8", +"gpV c #fcf4ca", +"g.t c #fcf4cb", +"eGI c #fcf4cc", +"gtF c #fcf4cd", +"giD c #fcf4ce", +"gmc c #fcf4cf", +"ipH c #fcf4d6", +"iuy c #fcf4e0", +"kRi c #fcf596", +"kQW c #fcf59a", +"iwi c #fcf59f", +"ez# c #fcf5a3", +"ezb c #fcf5a4", +"e6D c #fcf5a5", +"flC c #fcf5a6", +"kar c #fcf5a7", +"j9I c #fcf5a8", +"kf4 c #fcf5a9", +"j7# c #fcf5aa", +"j7M c #fcf5ab", +"j2b c #fcf5ac", +"g#O c #fcf5ad", +"gdb c #fcf5ae", +"grq c #fcf5af", +"kdw c #fcf5b0", +"jSu c #fcf5b1", +"jCu c #fcf5b2", +"j.d c #fcf5b3", +"hdJ c #fcf5b4", +"hzB c #fcf5b5", +"h3d c #fcf5b6", +"gyV c #fcf5b7", +"icV c #fcf5b8", +"ifu c #fcf5b9", +"jI8 c #fcf5ba", +"ikx c #fcf5bb", +"iPy c #fcf5bc", +"iJN c #fcf5bd", +"h1H c #fcf5be", +"iG0 c #fcf5bf", +"iJM c #fcf5c0", +"h.A c #fcf5c1", +"huI c #fcf5c2", +"g6D c #fcf5c3", +"jvQ c #fcf5c4", +"hjJ c #fcf5c5", +"jgL c #fcf5c6", +"gMI c #fcf5c7", +"gBf c #fcf5c8", +"fOm c #fcf5ca", +"iWK c #fcf5cb", +"gBg c #fcf5cc", +"iZE c #fcf5cd", +"giB c #fcf5ce", +"gpX c #fcf5d1", +"klR c #fcf5d2", +"j.u c #fcf5d6", +"kb0 c #fcf5d7", +"fDs c #fcf5da", +"ev8 c #fcf5de", +"gLC c #fcf5ea", +"gPp c #fcf5ec", +"iwD c #fcf6a0", +"euz c #fcf6a3", +"e6E c #fcf6a5", +"eIN c #fcf6a6", +"eNp c #fcf6a7", +"km4 c #fcf6a8", +"f8K c #fcf6aa", +"itn c #fcf6ab", +"iBu c #fcf6ad", +"j2a c #fcf6b1", +"jXm c #fcf6b2", +"hGw c #fcf6b4", +"h0j c #fcf6b5", +"iqY c #fcf6b6", +"jCT c #fcf6b7", +"if# c #fcf6b8", +"icX c #fcf6b9", +"i#3 c #fcf6ba", +"iG1 c #fcf6bb", +"iMC c #fcf6bc", +"izI c #fcf6bd", +"ijf c #fcf6be", +"hL3 c #fcf6bf", +"hFm c #fcf6c0", +"g6E c #fcf6c1", +"gYu c #fcf6c2", +"h.y c #fcf6c3", +"iVk c #fcf6c4", +"hnr c #fcf6c5", +"hLZ c #fcf6c6", +"hcn c #fcf6c8", +"fRK c #fcf6cb", +"ge5 c #fcf6cc", +"iN9 c #fcf6cd", +"iL. c #fcf6ce", +"iLa c #fcf6cf", +"iLb c #fcf6d0", +"gBi c #fcf6d2", +"iCR c #fcf6d3", +"iz7 c #fcf6d4", +"iuw c #fcf6d6", +"edd c #fcf6d7", +"fek c #fcf6da", +"j8G c #fcf6df", +"gHn c #fcf6e1", +"hw4 c #fcf6ea", +"him c #fcf6ec", +"eIO c #fcf7a7", +"iG3 c #fcf7ac", +"ito c #fcf7af", +"ikc c #fcf7b4", +"jzF c #fcf7b5", +"iVm c #fcf7b6", +"iMD c #fcf7b7", +"iEj c #fcf7b8", +"gQE c #fcf7bb", +"gUz c #fcf7bc", +"jLI c #fcf7be", +"i.A c #fcf7bf", +"iyE c #fcf7c0", +"hYF c #fcf7c1", +"iBr c #fcf7c3", +"iMA c #fcf7c4", +"hIJ c #fcf7c6", +"hqZ c #fcf7c7", +"g.u c #fcf7c9", +"i2j c #fcf7ca", +"jdS c #fcf7cb", +"ja2 c #fcf7cc", +"iL# c #fcf7ce", +"iZB c #fcf7cf", +"iIj c #fcf7d0", +"ev0 c #fcf7d2", +"iCS c #fcf7d3", +"iz9 c #fcf7d5", +"e7Q c #fcf7d6", +"e3q c #fcf7d7", +"d5j c #fcf7da", +"jBp c #fcf7df", +"hIX c #fcf7e2", +"hDS c #fcf7e4", +"gHE c #fcf7ec", +"irw c #fcf89b", +"jFr c #fcf8a3", +"fdb c #fcf8a9", +"jzJ c #fcf8ad", +"iME c #fcf8b0", +"jwU c #fcf8b2", +"iVn c #fcf8b3", +"jP3 c #fcf8b5", +"jSv c #fcf8b6", +"jz0 c #fcf8b9", +"jrk c #fcf8bd", +"jcl c #fcf8bf", +"iqU c #fcf8c2", +"iti c #fcf8c3", +"jvm c #fcf8c4", +"hSC c #fcf8c5", +"hga c #fcf8c7", +"i9Z c #fcf8c8", +"iZs c #fcf8ca", +"f4w c #fcf8cb", +"jdF c #fcf8d0", +"emD c #fcf8d2", +"erl c #fcf8d4", +"ir6 c #fcf8d7", +"erk c #fcf8d8", +"eFc c #fcf8d9", +"ikG c #fcf8da", +"dES c #fcf8db", +"dwg c #fcf8dc", +"dAC c #fcf8dd", +"h0w c #fcf8de", +"hAl c #fcf8e2", +"hHa c #fcf8e3", +"hHc c #fcf8e4", +"htd c #fcf8e5", +"hwW c #fcf8ed", +"eVy c #fcf8ee", +"ha1 c #fcf8ef", +"cUl c #fcf997", +"ie0 c #fcf9a0", +"imi c #fcf9a5", +"iwp c #fcf9a8", +"iyH c #fcf9ab", +"jzI c #fcf9b0", +"gMN c #fcf9b6", +"jIq c #fcf9b9", +"gIY c #fcf9ba", +"jcn c #fcf9bd", +"gfh c #fcf9be", +"hYD c #fcf9ca", +"goI c #fcf9d8", +"fmI c #fcf9d9", +"emB c #fcf9da", +"ina c #fcf9db", +"dM2 c #fcf9dc", +"dET c #fcf9dd", +"dwd c #fcf9de", +"hh9 c #fcf9df", +"hev c #fcf9e0", +"hNU c #fcf9e1", +"gSZ c #fcf9e3", +"hHb c #fcf9e4", +"haV c #fcf9eb", +"hl1 c #fcf9ec", +"h9s c #fcf9ed", +"haY c #fcf9ef", +"hpx c #fcf9f0", +"dOZ c #fcf9f4", +"imw c #fcfaa0", +"itK c #fcfaa7", +"itO c #fcfaa8", +"gjc c #fcfac3", +"fuT c #fcfad5", +"fyN c #fcfad6", +"fF1 c #fcfad7", +"fF2 c #fcfad8", +"gsh c #fcfad9", +"ehB c #fcfadd", +"ehA c #fcfade", +"dIP c #fcfadf", +"h3r c #fcfae0", +"gzV c #fcfae1", +"gwd c #fcfae2", +"gss c #fcfae3", +"gLe c #fcfae4", +"hwV c #fcfaed", +"hDV c #fcfaf0", +"eH# c #fcfaf2", +"daK c #fcfaf4", +"dCx c #fcfaf6", +"i#q c #fcfba4", +"iz# c #fcfba9", +"jzK c #fcfbac", +"fCp c #fcfbd8", +"f9u c #fcfbd9", +"gaE c #fcfbda", +"ghB c #fcfbdc", +"h9q c #fcfbdf", +"h6q c #fcfbe0", +"hs6 c #fcfbe1", +"hwL c #fcfbe2", +"gHl c #fcfbe3", +"gDI c #fcfbe4", +"gO4 c #fcfbe5", +"eH. c #fcfbf3", +"dbm c #fcfbf8", +"bLX c #fcfbf9", +"bxW c #fcfbfb", +"fNr c #fcfcd8", +"fTN c #fcfcd9", +"f6z c #fcfcda", +"f6A c #fcfcdb", +"gd1 c #fcfcdc", +"dKX c #fcfcfa", +"at2 c #fcfcfb", +"bZV c #fcfcfc", +"b5a c #fcfcfd", +"ccO c #fcfdfd", +"bWL c #fcfdff", +"bR3 c #fcfeff", +".#z c #fd41fd", +".#X c #fd54ff", +".#V c #fd55fd", +".ai c #fd63fe", +".ah c #fd63ff", +".aJ c #fd6ffd", +".aQ c #fd70f9", +".bc c #fd7afb", +".bH c #fd84f9", +".cf c #fd8df8", +".c4 c #fd96ea", +".cU c #fd96f5", +".dB c #fd9df1", +".eh c #fda5ee", +".eU c #fdaceb", +".fD c #fdb3e6", +".fM c #fdb4d6", +"i8z c #fdb75f", +".gg c #fdb9e0", +".gV c #fdbfdd", +"hS5 c #fdc43e", +".hB c #fdc5d6", +"hS6 c #fdc740", +"h14 c #fdc74d", +"hgU c #fdca43", +"hn7 c #fdcb44", +"hrI c #fdcc42", +"hrK c #fdcc44", +"hPY c #fdcd41", +"hvl c #fdcd43", +"hCE c #fdcd46", +"hrL c #fdcd48", +"hVW c #fdcd50", +"hrH c #fdce42", +"hvk c #fdce43", +"hvm c #fdce44", +"hF2 c #fdce45", +"hvo c #fdce47", +"hY0 c #fdce51", +"hYZ c #fdce54", +"hCD c #fdcf44", +"hVV c #fdcf52", +"hB7 c #fdd049", +"hVT c #fdd054", +"hSW c #fdd059", +"kAw c #fdd08a", +"kC7 c #fdd093", +".iT c #fdd0c9", +"hgR c #fdd142", +"g7h c #fdd143", +"g7i c #fdd144", +"hSX c #fdd15a", +"ks1 c #fdd181", +"kAv c #fdd18d", +"kAx c #fdd18e", +".i0 c #fdd1b1", +"hMv c #fdd241", +"hvj c #fdd244", +"h11 c #fdd259", +"hPL c #fdd25b", +"hc6 c #fdd341", +"hMw c #fdd342", +"hJh c #fdd344", +"gMV c #fdd349", +"gxG c #fdd350", +"g3d c #fdd443", +"hyy c #fdd44e", +"hPM c #fdd45c", +"hMh c #fdd460", +"h4X c #fdd462", +"kvp c #fdd486", +"kxR c #fdd48c", +"h#c c #fdd542", +"jfF c #fdd553", +"hPP c #fdd558", +"kqL c #fdd585", +"ks0 c #fdd58b", +"kvo c #fdd58c", +"kAu c #fdd596", +"hJg c #fdd642", +"hn3 c #fdd643", +"hgP c #fdd645", +"gMW c #fdd64a", +"gFf c #fdd64c", +"jiq c #fdd653", +"jin c #fdd654", +"jfz c #fdd657", +"hI1 c #fdd661", +"kot c #fdd686", +".jv c #fdd6bf", +"g7e c #fdd743", +"hnD c #fdd745", +"gI9 c #fdd749", +"huT c #fdd752", +"i.N c #fdd755", +"jcG c #fdd757", +"hPO c #fdd75a", +"hPN c #fdd75b", +"jfy c #fdd75c", +"kxQ c #fdd795", +".jB c #fdd7a9", +"hyS c #fdd843", +"gY7 c #fdd845", +"huS c #fdd853", +"h.G c #fdd857", +"hMn c #fdd85a", +"hMj c #fdd85e", +"j#S c #fdd860", +"hI2 c #fdd861", +"h43 c #fdd863", +"kIA c #fdd8a6", +"hc4 c #fdd945", +"gU9 c #fdd948", +"jfD c #fdd956", +"jio c #fdd95a", +"jfE c #fdd95b", +"hFE c #fdd964", +"kC3 c #fdd9a8", +"hCv c #fdda43", +"h#a c #fdda45", +"gY6 c #fdda46", +"iYu c #fdda50", +"hI7 c #fdda55", +"hI8 c #fdda57", +"i9m c #fdda5a", +"hMk c #fdda5d", +"jcE c #fdda5f", +"jcD c #fdda63", +"kAt c #fddaa3", +"iRF c #fddaa4", +"kLH c #fddaa9", +"kOO c #fddaab", +"hyV c #fddb43", +"hFY c #fddb45", +"hCA c #fddb46", +"hjZ c #fddb48", +"hn2 c #fddb49", +"gU8 c #fddb4b", +"hFL c #fddb50", +"hFM c #fddb51", +"hnA c #fddb59", +"hrb c #fddb5a", +"iVB c #fddb5e", +"iPL c #fddb68", +"kmb c #fddb90", +"kFL c #fddbad", +"hyW c #fddc43", +"hy2 c #fddc46", +"hj0 c #fddc47", +"hrE c #fddc48", +"hc3 c #fddc4a", +"hjY c #fddc56", +"hnC c #fddc59", +"i1i c #fddc5a", +"hjX c #fddc5b", +"hnB c #fddc5c", +"iSK c #fddc65", +"j#T c #fddc68", +"kqK c #fddc9a", +"jHa c #fddcaa", +"jEn c #fddcac", +"kLG c #fddcb0", +"kON c #fddcb1", +"hyX c #fddd44", +"hyO c #fddd45", +"hCz c #fddd47", +"g7c c #fddd48", +"gU7 c #fddd4d", +"hko c #fddd4f", +"hjW c #fddd5b", +"hjV c #fddd5c", +"i6O c #fddd5f", +"iVu c #fddd65", +"h42 c #fddd66", +"j#U c #fddd6a", +"hCb c #fddd74", +"iZ8 c #fdddac", +"kIz c #fdddaf", +"hvb c #fdde44", +"hva c #fdde46", +"hn1 c #fdde4f", +"gUJ c #fdde51", +"h41 c #fdde67", +"hyE c #fdde6c", +"kjQ c #fdde9a", +"iOk c #fddead", +"hvc c #fddf44", +"gY4 c #fddf4c", +"hrD c #fddf4d", +"hgO c #fddf51", +"gFm c #fddf58", +"i.R c #fddf65", +"i.S c #fddf66", +"iOi c #fddfae", +"iFM c #fddfb0", +"iWY c #fddfb2", +"hvd c #fde046", +"g7b c #fde04b", +"h## c #fde051", +"hkn c #fde053", +"hrh c #fde066", +"i1g c #fde06e", +"kos c #fde0a0", +".kM c #fde0ae", +"iIu c #fde0af", +"iOg c #fde0b0", +"iLo c #fde0b1", +"hrv c #fde147", +"hvf c #fde14d", +"g7a c #fde14e", +"gY3 c #fde14f", +"hn0 c #fde152", +"hnG c #fde15d", +"huY c #fde178", +"i2X c #fde1b7", +"hu7 c #fde249", +"hgN c #fde252", +"gUK c #fde255", +"h7Z c #fde26a", +"i4# c #fde27c", +"kLz c #fde2a1", +"kIt c #fde2a2", +"jJV c #fde2b4", +"i2J c #fde2b5", +"iZ5 c #fde2bb", +"hu6 c #fde34d", +"gY2 c #fde352", +"hkm c #fde353", +"h#. c #fde355", +"hj1 c #fde357", +"gYG c #fde35a", +"g2M c #fde35b", +"hCh c #fde369", +"hu1 c #fde36c", +"i6M c #fde37e", +"kIs c #fde3a4", +"kLx c #fde3a5", +"jEm c #fde3b7", +"iWV c #fde3b9", +"fXk c #fde3bc", +"iXe c #fde3bd", +"hru c #fde44b", +"g7# c #fde454", +"gJf c #fde461", +"h7Y c #fde46b", +"hrR c #fde49a", +"kIq c #fde4aa", +"iqa c #fde4b0", +"hR1 c #fde4ba", +"kAs c #fde4bb", +"iZ6 c #fde4bc", +"bUp c #fde4bd", +"bPI c #fde4be", +"g28 c #fde554", +"hnZ c #fde555", +"gYH c #fde55a", +"hnI c #fde56c", +"hu2 c #fde56e", +"hrj c #fde56f", +"kFB c #fde5ac", +"kFC c #fde5ad", +"kFA c #fde5ae", +"jyE c #fde5bc", +"iAB c #fde5bd", +"bZh c #fde5be", +"iRA c #fde5bf", +"iXb c #fde5c0", +"iZ4 c #fde5c1", +"g2N c #fde65a", +"hcE c #fde65e", +"gJe c #fde65f", +"gQ3 c #fde662", +"hj2 c #fde666", +"iYl c #fde66b", +"hI9 c #fde690", +"gNI c #fde69e", +"kma c #fde6ad", +"kqJ c #fde6b5", +"hOP c #fde6ba", +"iWT c #fde6bc", +"gXe c #fde6bd", +"iOC c #fde6be", +"b34 c #fde6bf", +"hX1 c #fde6c0", +"bZg c #fde6c2", +"iuY c #fde6c3", +"g69 c #fde753", +"g27 c #fde755", +"gqU c #fde799", +"kAg c #fde7b1", +"kAe c #fde7b4", +"il. c #fde7b6", +"hR3 c #fde7be", +"iOz c #fde7bf", +"hX0 c #fde7c0", +"cge c #fde7c1", +"iIO c #fde7c3", +"iAx c #fde7c4", +"g68 c #fde850", +"hrs c #fde852", +"h.7 c #fde856", +"hrr c #fde858", +"h.M c #fde860", +"gM4 c #fde862", +"iYm c #fde86e", +"hrk c #fde872", +"hnJ c #fde875", +"hrl c #fde877", +"f7P c #fde8a3", +"gJR c #fde8a5", +"gCc c #fde8a7", +"kCR c #fde8b1", +"kAd c #fde8b4", +"ik8 c #fde8ba", +"iZJ c #fde8be", +"kvl c #fde8bf", +"iIP c #fde8c0", +"ixP c #fde8c2", +"iLE c #fde8c3", +"gWX c #fde8c4", +"iOy c #fde8c5", +"bUo c #fde8c6", +"gLp c #fde8ca", +"hj4 c #fde972", +"guE c #fde99e", +"g.P c #fde9a3", +"f7Q c #fde9a4", +"f7O c #fde9a6", +"gCb c #fde9a7", +"fYH c #fde9a8", +"h77 c #fde9ae", +"ikU c #fde9bf", +"iDn c #fde9c0", +"hRY c #fde9c2", +"iF6 c #fde9c3", +"iUo c #fde9c6", +"jbf c #fde9c7", +"bZf c #fde9c9", +"bPF c #fde9ca", +"iLD c #fde9cb", +"g67 c #fdea52", +"gQT c #fdea61", +"gQU c #fdea64", +"hgr c #fdea6e", +"hnK c #fdea77", +"gyo c #fdeaa3", +"gjz c #fdeaa5", +"gm7 c #fdeaa6", +"f4L c #fdeaa7", +"f1q c #fdeaa8", +"kjP c #fdeab5", +"koe c #fdeab8", +"if7 c #fdeabc", +"iiy c #fdeabd", +"iiD c #fdeabe", +"isi c #fdeac1", +"iOB c #fdeac2", +"iAz c #fdeac3", +"kAq c #fdeac6", +"ipK c #fdeac8", +"iXa c #fdeaca", +"bPH c #fdeacb", +"bZe c #fdeacc", +"h.4 c #fdeb52", +"hro c #fdeb73", +"gqT c #fdeba1", +"gm8 c #fdeba5", +"gyn c #fdeba7", +"gqR c #fdeba8", +"kK2 c #fdeba9", +"kFc c #fdebaa", +"kFh c #fdebab", +"kH8 c #fdebac", +"kob c #fdebbb", +"idz c #fdebc0", +"if6 c #fdebc2", +"hRV c #fdebc3", +"iDo c #fdebc4", +"h9Y c #fdebc5", +"iWP c #fdebc6", +"iZ3 c #fdebcc", +"h.3 c #fdec55", +"gUP c #fdec6a", +"gm9 c #fdeca4", +"gfV c #fdeca7", +"gcd c #fdeca8", +"fU1 c #fdecab", +"kFd c #fdecac", +"fw6 c #fdecad", +"kCu c #fdecae", +"fX6 c #fdecb0", +"fX5 c #fdecb5", +"f4H c #fdecb9", +"km# c #fdecbe", +"idx c #fdecc2", +"iix c #fdecc3", +"if9 c #fdecc4", +"iaT c #fdecc5", +"iaS c #fdecc6", +"ksW c #fdecc7", +"kvk c #fdecc8", +"kqH c #fdecc9", +"kFK c #fdecca", +"ksU c #fdeccb", +"jBw c #fdeccc", +"bF7 c #fdecd2", +"gYW c #fded62", +"gUQ c #fded6b", +"hnO c #fded73", +"hgs c #fded74", +"gcc c #fdedab", +"fR0 c #fdedac", +"fOO c #fdedad", +"kCw c #fdedaf", +"gJP c #fdedb0", +"f1j c #fdedb1", +"kLs c #fdedb4", +"fUQ c #fdedb6", +"f7L c #fdedba", +"koa c #fdedbe", +"kqt c #fdedbf", +"kjO c #fdedc0", +"keU c #fdedc3", +"iAs c #fdedc4", +"h90 c #fdedc5", +"kl9 c #fdedc6", +"ksX c #fdedc8", +"iRl c #fdedcb", +"kon c #fdedcc", +"ga9 c #fdedcd", +"kom c #fdedce", +"gHv c #fdedd3", +"bBF c #fdedd4", +"h.2 c #fdee5e", +"gYN c #fdee6d", +"gYM c #fdee6f", +"g2S c #fdee70", +"hcI c #fdee77", +".mF c #fdee86", +"fDA c #fdeead", +"fHa c #fdeeae", +"kFe c #fdeeaf", +"hJw c #fdeeb0", +"f4I c #fdeeb1", +"kCt c #fdeeb2", +"gVo c #fdeeb3", +"f7N c #fdeeb5", +"fRU c #fdeeb6", +"fUR c #fdeeb8", +"f71 c #fdeeb9", +"fOI c #fdeebb", +"fX2 c #fdeebc", +"fUN c #fdeebd", +"g.L c #fdeebe", +"kqs c #fdeec0", +"kc# c #fdeec3", +"kjF c #fdeec4", +"iFY c #fdeec5", +"iIG c #fdeec6", +"f6S c #fdeec7", +"khx c #fdeec8", +"kl8 c #fdeecd", +"hkb c #fdef61", +"hka c #fdef6d", +"g6T c #fdef76", +"j7w c #fdef9d", +"g3t c #fdefa7", +"g.U c #fdefaa", +"fHb c #fdefaf", +"hQi c #fdefb0", +"hTn c #fdefb1", +"hrW c #fdefb2", +"hGb c #fdefb3", +"kFb c #fdefb4", +"fsY c #fdefb5", +"kCN c #fdefb6", +"g.M c #fdefb7", +"g.Z c #fdefb8", +"fOH c #fdefba", +"fAt c #fdefbb", +"fAv c #fdefbd", +"fDr c #fdefbe", +"h49 c #fdefc2", +"kjG c #fdefc6", +"khr c #fdefc8", +"f6U c #fdefc9", +"kb4 c #fdefca", +"jO2 c #fdefcb", +"kol c #fdefd0", +"jEl c #fdefd1", +"j.A c #fdefd3", +"g06 c #fdefd6", +"gT. c #fdefd7", +"bF9 c #fdefd9", +"hcT c #fdf065", +"g21 c #fdf06b", +"hk. c #fdf070", +".mH c #fdf075", +"hCW c #fdf0a4", +"kQk c #fdf0a5", +"kJ0 c #fdf0a6", +"kQj c #fdf0a7", +"hvC c #fdf0ab", +"hkC c #fdf0b1", +"hkD c #fdf0b2", +"hvA c #fdf0b3", +"hZx c #fdf0b4", +"hQl c #fdf0b5", +"knT c #fdf0b6", +"fLw c #fdf0b7", +"fAr c #fdf0b8", +"fD5 c #fdf0b9", +"fPa c #fdf0bb", +"fsJ c #fdf0bc", +"fPb c #fdf0bd", +"fPc c #fdf0be", +"fEc c #fdf0bf", +"fDo c #fdf0c0", +"f1P c #fdf0c1", +"fDq c #fdf0c2", +"fzQ c #fdf0c3", +"kjH c #fdf0c7", +"fm8 c #fdf0c8", +"j.p c #fdf0c9", +"khq c #fdf0ca", +"kc. c #fdf0cf", +"keT c #fdf0d0", +"kjM c #fdf0d2", +"khw c #fdf0d3", +"jJT c #fdf0d4", +"jjL c #fdf0d5", +"g89 c #fdf0db", +"hcR c #fdf16e", +"g7I c #fdf1a3", +"dLu c #fdf1ac", +"g.V c #fdf1ad", +"gck c #fdf1ae", +"kuK c #fdf1af", +"ekq c #fdf1b0", +"hdi c #fdf1b1", +"hg3 c #fdf1b2", +"fDY c #fdf1b3", +"gqO c #fdf1b4", +"hJA c #fdf1b5", +"hWr c #fdf1b6", +"fHA c #fdf1b7", +"kxf c #fdf1b8", +"fLv c #fdf1b9", +"foz c #fdf1ba", +"fw2 c #fdf1bb", +"fHF c #fdf1bc", +"foB c #fdf1bd", +"fKY c #fdf1be", +"fOG c #fdf1bf", +"fHM c #fdf1c0", +"fKX c #fdf1c1", +"fDp c #fdf1c2", +"f1M c #fdf1c3", +"f1O c #fdf1c4", +"f45 c #fdf1c5", +"fOC c #fdf1c6", +"f46 c #fdf1c7", +"gg. c #fdf1c8", +"gjP c #fdf1c9", +"eQk c #fdf1ca", +"gno c #fdf1cb", +"fac c #fdf1cc", +"k#s c #fdf1d0", +"j8P c #fdf1d1", +"keS c #fdf1d3", +"jO3 c #fdf1d4", +"hwR c #fdf1d5", +"hHo c #fdf1d9", +"bxo c #fdf1dd", +"bBI c #fdf1e0", +"g20 c #fdf26c", +"hgA c #fdf26e", +"hgz c #fdf274", +"hgy c #fdf279", +"g3A c #fdf2a3", +"kxe c #fdf2a5", +"kEr c #fdf2a7", +"kuJ c #fdf2a8", +"g7B c #fdf2aa", +"dHi c #fdf2ab", +"kCs c #fdf2ac", +"hkF c #fdf2ad", +"fSG c #fdf2ae", +"h#t c #fdf2af", +"jTU c #fdf2b0", +"fDW c #fdf2b2", +"g#h c #fdf2b3", +"fDX c #fdf2b4", +"hhp c #fdf2b5", +"gf8 c #fdf2b6", +"fHz c #fdf2b7", +"fLt c #fdf2b9", +"fEf c #fdf2ba", +"fAF c #fdf2bb", +"fwZ c #fdf2bc", +"fsR c #fdf2bd", +"fVv c #fdf2be", +"fYv c #fdf2c2", +"fOE c #fdf2c3", +"fVn c #fdf2c4", +"fYy c #fdf2c5", +"fYx c #fdf2c6", +"f1Q c #fdf2c7", +"fKU c #fdf2c8", +"fGZ c #fdf2c9", +"eGJ c #fdf2ca", +"gcs c #fdf2cb", +"e#W c #fdf2cc", +"eVi c #fdf2cd", +"f9L c #fdf2ce", +"ga4 c #fdf2d0", +"idd c #fdf2d3", +"idj c #fdf2d4", +"iAq c #fdf2d5", +"ish c #fdf2d6", +"i5u c #fdf2d7", +"jRH c #fdf2d8", +"iZX c #fdf2d9", +"hKQ c #fdf2da", +"i2P c #fdf2db", +"jjH c #fdf2dd", +"jpU c #fdf2de", +"g60 c #fdf36f", +"g62 c #fdf370", +"h.W c #fdf375", +"hcP c #fdf37b", +"hcO c #fdf37d", +"kQX c #fdf393", +"kRc c #fdf395", +"kx. c #fdf396", +"knK c #fdf397", +"kRk c #fdf3a3", +"hTs c #fdf3a4", +"gf3 c #fdf3a5", +"fth c #fdf3a6", +"cLA c #fdf3a8", +"dbT c #fdf3a9", +"gcO c #fdf3aa", +"dHj c #fdf3ab", +"dLv c #fdf3ad", +"fk1 c #fdf3ae", +"eaO c #fdf3af", +"gSx c #fdf3b0", +"fVL c #fdf3b1", +"fSB c #fdf3b2", +"fxj c #fdf3b3", +"fSC c #fdf3b4", +"gOj c #fdf3b5", +"hrX c #fdf3b6", +"gN7 c #fdf3b7", +"fP. c #fdf3b8", +"iWb c #fdf3b9", +"iZp c #fdf3ba", +"iWz c #fdf3bb", +"f1T c #fdf3bc", +"fw4 c #fdf3bd", +"f1R c #fdf3be", +"fVu c #fdf3bf", +"fYC c #fdf3c0", +"f1S c #fdf3c1", +"f5. c #fdf3c2", +"gcv c #fdf3c3", +"f76 c #fdf3c4", +"gjR c #fdf3c5", +"f75 c #fdf3c6", +"fjC c #fdf3c7", +"f74 c #fdf3c8", +"g.0 c #fdf3c9", +"frP c #fdf3ca", +"eLr c #fdf3cb", +"d69 c #fdf3cc", +"d7. c #fdf3cd", +"eof c #fdf3ce", +"guZ c #fdf3cf", +"f9M c #fdf3d0", +"jYR c #fdf3d5", +"j3P c #fdf3d6", +"inh c #fdf3d7", +"iDd c #fdf3d8", +"jUb c #fdf3d9", +"hKG c #fdf3dc", +"g85 c #fdf3dd", +"hRv c #fdf3de", +"g61 c #fdf46e", +"kuj c #fdf48f", +"kKz c #fdf496", +"kNV c #fdf49b", +"f5v c #fdf49d", +"gZA c #fdf49f", +"cLy c #fdf4a6", +"fpa c #fdf4a7", +"cPT c #fdf4a8", +"cLB c #fdf4a9", +"j4D c #fdf4aa", +"cUv c #fdf4ab", +"dbS c #fdf4ac", +"kk1 c #fdf4ad", +"gKO c #fdf4ae", +"ihX c #fdf4af", +"hg4 c #fdf4b0", +"gSw c #fdf4b1", +"fSF c #fdf4b2", +"efA c #fdf4b3", +"fkY c #fdf4b4", +"fxi c #fdf4b5", +"gZ2 c #fdf4b6", +"gve c #fdf4b7", +"h84 c #fdf4b8", +"iIa c #fdf4b9", +"iKN c #fdf4ba", +"iKM c #fdf4bb", +"iTQ c #fdf4bc", +"gjS c #fdf4bd", +"i#l c #fdf4be", +"jvl c #fdf4bf", +"fYD c #fdf4c0", +"f49 c #fdf4c1", +"f78 c #fdf4c2", +"f79 c #fdf4c3", +"g.2 c #fdf4c4", +"fzE c #fdf4c5", +"fvK c #fdf4c6", +"frJ c #fdf4c7", +"fvM c #fdf4c8", +"frM c #fdf4c9", +"fjD c #fdf4ca", +"fnH c #fdf4cb", +"gN8 c #fdf4cc", +"ext c #fdf4cd", +"esT c #fdf4ce", +"fft c #fdf4cf", +"eJ6 c #fdf4d0", +"gCA c #fdf4d1", +"jWu c #fdf4d3", +"jYS c #fdf4d4", +"ixz c #fdf4d5", +"hC. c #fdf4d6", +"inc c #fdf4d7", +"hMe c #fdf4d8", +"ipL c #fdf4db", +"hHy c #fdf4dc", +"iAp c #fdf4de", +"hOb c #fdf4e1", +"kQT c #fdf58d", +"kzr c #fdf594", +"kwT c #fdf595", +"kNQ c #fdf598", +"kEO c #fdf599", +"kB5 c #fdf59a", +"kHB c #fdf59b", +"kzs c #fdf59c", +"kRj c #fdf59e", +"kHY c #fdf5a1", +"kQn c #fdf5a3", +"e19 c #fdf5a4", +"cHg c #fdf5a5", +"cPS c #fdf5a6", +"fVS c #fdf5a7", +"kaq c #fdf5a8", +"kdu c #fdf5a9", +"jZN c #fdf5aa", +"ggw c #fdf5ab", +"jFH c #fdf5ac", +"kk0 c #fdf5ad", +"gGU c #fdf5ae", +"gvF c #fdf5af", +"j0v c #fdf5b0", +"fxk c #fdf5b1", +"gvg c #fdf5b2", +"gyX c #fdf5b3", +"gGA c #fdf5b4", +"gj4 c #fdf5b5", +"ftc c #fdf5b6", +"fo6 c #fdf5b7", +"gyW c #fdf5b8", +"hWR c #fdf5b9", +"icW c #fdf5ba", +"imZ c #fdf5bb", +"iN0 c #fdf5bc", +"h8r c #fdf5bd", +"f8. c #fdf5be", +"iWm c #fdf5bf", +"iCw c #fdf5c0", +"hcr c #fdf5c1", +"h.z c #fdf5c2", +"iwT c #fdf5c3", +"ipa c #fdf5c4", +"iCx c #fdf5c5", +"gjQ c #fdf5c6", +"fzF c #fdf5c7", +"fDf c #fdf5c8", +"fzG c #fdf5c9", +"gUy c #fdf5ca", +"f7z c #fdf5cb", +"g.s c #fdf5cc", +"fjE c #fdf5cd", +"ge6 c #fdf5ce", +"ge7 c #fdf5cf", +"gpW c #fdf5d0", +"gtG c #fdf5d1", +"gIT c #fdf5d2", +"e.. c #fdf5d4", +"j3J c #fdf5d5", +"fad c #fdf5d6", +"iZT c #fdf5d7", +"iid c #fdf5d9", +"ikK c #fdf5db", +"hex c #fdf5dc", +"iih c #fdf5dd", +"ing c #fdf5de", +"ert c #fdf5e2", +"kEN c #fdf698", +"kB3 c #fdf69a", +"kKy c #fdf69c", +"kwU c #fdf69d", +"kNR c #fdf69f", +"e17 c #fdf6a5", +"e2# c #fdf6a6", +"eNq c #fdf6a7", +"eSy c #fdf6a8", +"fk3 c #fdf6a9", +"jXn c #fdf6aa", +"j69 c #fdf6ab", +"j7a c #fdf6ac", +"j2X c #fdf6ad", +"gj8 c #fdf6ae", +"gzj c #fdf6af", +"grL c #fdf6b0", +"gWs c #fdf6b1", +"jVN c #fdf6b2", +"ixe c #fdf6b3", +"gV5 c #fdf6b4", +"gZ4 c #fdf6b5", +"gnH c #fdf6b6", +"grl c #fdf6b7", +"h85 c #fdf6b8", +"hNF c #fdf6b9", +"ifv c #fdf6ba", +"h3c c #fdf6bb", +"j7O c #fdf6bc", +"iBs c #fdf6bd", +"iHZ c #fdf6be", +"iFh c #fdf6bf", +"iCu c #fdf6c0", +"hPu c #fdf6c1", +"iCt c #fdf6c2", +"iEg c #fdf6c3", +"hcq c #fdf6c4", +"iFg c #fdf6c5", +"iFk c #fdf6c6", +"gE4 c #fdf6c7", +"ihG c #fdf6c8", +"fGN c #fdf6c9", +"fKH c #fdf6ca", +"g6x c #fdf6cb", +"f4s c #fdf6cc", +"g6y c #fdf6cd", +"ge8 c #fdf6cf", +"giC c #fdf6d0", +"gmd c #fdf6d1", +"gtH c #fdf6d2", +"iz8 c #fdf6d4", +"isc c #fdf6d8", +"ikJ c #fdf6d9", +"eOZ c #fdf6db", +"hi. c #fdf6dd", +"haI c #fdf6de", +"eAF c #fdf6df", +"gTg c #fdf6e7", +"hXB c #fdf6e9", +"ioY c #fdf79d", +"imu c #fdf79f", +"ij2 c #fdf7a0", +"fIN c #fdf7a2", +"itW c #fdf7a3", +"ep2 c #fdf7a4", +"eSv c #fdf7a6", +"eNo c #fdf7a7", +"eDU c #fdf7a8", +"kdd c #fdf7a9", +"fS7 c #fdf7aa", +"kiB c #fdf7ab", +"j0x c #fdf7ac", +"jZO c #fdf7ad", +"iPC c #fdf7ae", +"g#R c #fdf7b0", +"gku c #fdf7b1", +"f8M c #fdf7b2", +"g4r c #fdf7b3", +"jNq c #fdf7b5", +"ikv c #fdf7b6", +"jwS c #fdf7b7", +"gSy c #fdf7b8", +"h0g c #fdf7b9", +"ifw c #fdf7ba", +"ih0 c #fdf7bb", +"h6c c #fdf7bc", +"iky c #fdf7bd", +"im0 c #fdf7be", +"ioh c #fdf7bf", +"igG c #fdf7c0", +"hVz c #fdf7c1", +"ibs c #fdf7c2", +"hBW c #fdf7c3", +"hIK c #fdf7c4", +"g6C c #fdf7c5", +"hq1 c #fdf7c6", +"hjK c #fdf7c7", +"i15 c #fdf7c8", +"gp0 c #fdf7c9", +"fKI c #fdf7ca", +"gbS c #fdf7cb", +"fRL c #fdf7cc", +"fXU c #fdf7cd", +"f4t c #fdf7ce", +"gbG c #fdf7cf", +"iQ7 c #fdf7d0", +"iO. c #fdf7d1", +"f1c c #fdf7d2", +"iLc c #fdf7d3", +"ixm c #fdf7d5", +"eTR c #fdf7d6", +"fRV c #fdf7db", +"fUS c #fdf7de", +"hlQ c #fdf7e0", +"iCU c #fdf7e1", +"hAr c #fdf7e2", +"hFB c #fdf7e3", +"gX# c #fdf7e7", +"haW c #fdf7e8", +"gPn c #fdf7e9", +"gTj c #fdf7eb", +"ioZ c #fdf89d", +"imv c #fdf89f", +"ij3 c #fdf8a0", +"ihv c #fdf8a1", +"ihu c #fdf8a2", +"ieY c #fdf8a4", +"iwC c #fdf8a5", +"iht c #fdf8a7", +"fhs c #fdf8a8", +"e2. c #fdf8a9", +"fBx c #fdf8ab", +"fMv c #fdf8ac", +"iJP c #fdf8ad", +"gdd c #fdf8b0", +"g#S c #fdf8b1", +"gde c #fdf8b2", +"ggX c #fdf8b3", +"iwy c #fdf8b4", +"iwz c #fdf8b5", +"jCw c #fdf8b6", +"jFF c #fdf8b7", +"iYe c #fdf8b8", +"jCS c #fdf8b9", +"kiz c #fdf8bb", +"iu. c #fdf8bd", +"gYw c #fdf8be", +"gQD c #fdf8bf", +"giT c #fdf8c0", +"ibt c #fdf8c1", +"ilL c #fdf8c2", +"gmU c #fdf8c3", +"h1G c #fdf8c4", +"gfj c #fdf8c5", +"g2z c #fdf8c6", +"gbQ c #fdf8c7", +"f7H c #fdf8c8", +"gbR c #fdf8c9", +"g.C c #fdf8ca", +"f7I c #fdf8cb", +"g.D c #fdf8cc", +"gbT c #fdf8cd", +"f1. c #fdf8ce", +"gbU c #fdf8d0", +"erm c #fdf8d3", +"iIk c #fdf8d6", +"iCT c #fdf8d7", +"eda c #fdf8d8", +"ed# c #fdf8da", +"eAA c #fdf8dc", +"dEQ c #fdf8dd", +"eKc c #fdf8df", +"g4T c #fdf8e3", +"hIY c #fdf8e4", +"hC# c #fdf8e6", +"hFC c #fdf8e7", +"hw3 c #fdf8eb", +"cY9 c #fdf99c", +"fMy c #fdf9a6", +"eSx c #fdf9a9", +"fhp c #fdf9aa", +"fT. c #fdf9ab", +"fS9 c #fdf9ac", +"i89 c #fdf9ad", +"iSz c #fdf9b2", +"iYf c #fdf9b3", +"jCx c #fdf9b4", +"iwx c #fdf9b5", +"iwA c #fdf9b6", +"jFG c #fdf9b7", +"jIr c #fdf9b9", +"gMM c #fdf9bc", +"irJ c #fdf9bd", +"gfD c #fdf9c0", +"gIX c #fdf9c1", +"ieb c #fdf9c2", +"gp1 c #fdf9c3", +"hFn c #fdf9c4", +"iGZ c #fdf9c5", +"hgb c #fdf9c6", +"h.x c #fdf9c7", +"hco c #fdf9c8", +"f4y c #fdf9c9", +"f4z c #fdf9ca", +"gfk c #fdf9cd", +"iQw c #fdf9cf", +"gb0 c #fdf9d0", +"gbY c #fdf9d1", +"eFg c #fdf9d4", +"ehH c #fdf9d5", +"ern c #fdf9d6", +"eYK c #fdf9d7", +"emE c #fdf9d8", +"f#7 c #fdf9d9", +"e.f c #fdf9da", +"eFd c #fdf9db", +"dM1 c #fdf9dc", +"dR. c #fdf9dd", +"dRa c #fdf9de", +"dAD c #fdf9df", +"ikH c #fdf9e0", +"fr6 c #fdf9e1", +"hDO c #fdf9e4", +"fUV c #fdf9e5", +"fTO c #fdf9e6", +"fW4 c #fdf9e7", +"f0# c #fdf9e8", +"fOK c #fdf9e9", +"htf c #fdf9ec", +"gz4 c #fdf9ed", +"eHh c #fdf9ee", +"g9b c #fdf9f1", +"g5a c #fdf9f2", +"ieZ c #fdfaa2", +"h5y c #fdfaa4", +"h8x c #fdfaa6", +"ijR c #fdfaa7", +"jCA c #fdfaa9", +"jSA c #fdfaac", +"i88 c #fdfaae", +"jU2 c #fdfaaf", +"i06 c #fdfab1", +"iVo c #fdfab3", +"jIs c #fdfab8", +"gjg c #fdfab9", +"gjh c #fdfaba", +"gxs c #fdfabd", +"gqF c #fdfabe", +"jcm c #fdfabf", +"hcp c #fdfac7", +"h1F c #fdfaca", +"gfz c #fdfacb", +"f4x c #fdfacc", +"gfy c #fdface", +"gfw c #fdfacf", +"eFh c #fdfad7", +"fuU c #fdfad9", +"fix c #fdfada", +"feh c #fdfadb", +"fuW c #fdfadc", +"d99 c #fdfadd", +"dAB c #fdfade", +"drZ c #fdfadf", +"dwf c #fdfae0", +"fJS c #fdfae1", +"hNV c #fdfae2", +"glb c #fdfae3", +"glc c #fdfae4", +"gst c #fdfae5", +"gLf c #fdfae6", +"gLn c #fdfae8", +"haS c #fdfae9", +"hpt c #fdfaea", +"hJ# c #fdfaeb", +"i7N c #fdfaec", +"haU c #fdfaed", +"hl3 c #fdfaee", +"hNZ c #fdfaef", +"gDW c #fdfaf0", +"g9a c #fdfaf1", +"daM c #fdfaf2", +"heM c #fdfaf3", +"ihw c #fdfba3", +"iro c #fdfba8", +"irp c #fdfba9", +"jSy c #fdfbac", +"jL. c #fdfbb8", +"gun c #fdfbb9", +"fyO c #fdfbd8", +"fF4 c #fdfbd9", +"fF5 c #fdfbda", +"fuV c #fdfbdd", +"fyP c #fdfbde", +"ec8 c #fdfbdf", +"ghD c #fdfbe0", +"gsr c #fdfbe1", +"hNW c #fdfbe2", +"hAk c #fdfbe3", +"hew c #fdfbe4", +"gzW c #fdfbe5", +"gwe c #fdfbe6", +"gHm c #fdfbe7", +"gDL c #fdfbe8", +"eHa c #fdfbea", +"kjv c #fdfbeb", +"hte c #fdfbed", +"hpw c #fdfbee", +"iah c #fdfbef", +"gHF c #fdfbf1", +"htg c #fdfbf2", +"cOO c #fdfbf5", +"eCo c #fdfbf6", +"dO0 c #fdfbf8", +"itI c #fdfca9", +"jP5 c #fdfcab", +"gum c #fdfcb9", +"fJK c #fdfcd8", +"fF3 c #fdfcd9", +"fJL c #fdfcda", +"fNt c #fdfcdb", +"f0. c #fdfcdc", +"gaF c #fdfcdd", +"gd2 c #fdfcdf", +"gSY c #fdfce7", +"fjU c #fdfcf4", +"eoC c #fdfcf8", +"ejK c #fdfcf9", +"cgN c #fdfcfa", +"bcq c #fdfcfb", +"cGa c #fdfcfc", +"ctq c #fdfcfd", +"jNt c #fdfda9", +"jFq c #fdfdac", +"b4D c #fdfdfb", +"blm c #fdfdfc", +"btQ c #fdfdfd", +"bCt c #fdfdfe", +"bC# c #fdfefe", +"bNc c #fdfeff", +".#W c #fe54ff", +".am c #fe63fb", +".aj c #fe63fd", +".aL c #fe6ffb", +".aK c #fe6ffc", +".bd c #fe7afa", +".bj c #fe7bf5", +".bQ c #fe84f1", +".bI c #fe84f8", +".ch c #fe8df5", +".cg c #fe8df7", +".cp c #fe8eed", +".cV c #fe96f3", +".dC c #fe9df0", +".ei c #fea5ec", +".eq c #fea6df", +".eV c #feace9", +".fE c #feb3e4", +".gW c #febfda", +".hC c #fec5d3", +"hPW c #fec93e", +"hPX c #feca3f", +"hn5 c #fecb42", +"hkt c #fecb43", +".ig c #fecbce", +"hks c #fecc42", +"hn4 c #fecd41", +"hrJ c #fecd43", +"hkr c #fece41", +"hvn c #fece44", +"gBs c #fece4c", +"hMu c #fecf3f", +"kC6 c #fecf90", +"hVU c #fed053", +".iU c #fed0c5", +"hkq c #fed142", +"h1Y c #fed151", +"hS0 c #fed154", +"kC5 c #fed193", +"kFP c #fed199", +"hJe c #fed23f", +"hrG c #fed243", +"h1X c #fed256", +"kxS c #fed289", +"kOR c #fed29b", +"kID c #fed29c", +"hgQ c #fed343", +"hSY c #fed358", +"kLK c #fed39c", +"hCr c #fed43f", +"gI8 c #fed44a", +"gBu c #fed44d", +"hSZ c #fed457", +"kC4 c #fed49b", +"hJf c #fed541", +"hkp c #fed543", +"hPQ c #fed556", +"kIB c #fed5a0", +"kLI c #fed5a2", +"kOP c #fed5a4", +"hCs c #fed641", +"hc5 c #fed643", +"h7V c #fed657", +"h4Y c #fed65b", +"h1Z c #fed65c", +"hMi c #fed660", +"kFM c #fed6a2", +".jw c #fed6bb", +"hCt c #fed740", +"hFV c #fed741", +"hrF c #fed743", +"h10 c #fed760", +"h#b c #fed844", +"hvi c #fed845", +"h4Z c #fed857", +"hFW c #fed943", +"g7d c #fed945", +"i38 c #fed957", +"hyT c #feda44", +"jcF c #feda5b", +"hyP c #fedb42", +"hyU c #fedb43", +"iYt c #fedb55", +"j#X c #fedb5f", +".k. c #fedbb5", +"hCw c #fedc44", +"g3a c #fedc47", +"hCl c #fedc49", +"i1# c #fedc5d", +"j#W c #fedc62", +"i9k c #fedc65", +"jIw c #fedc74", +"iXh c #fedca8", +"hv# c #fedd46", +"hCy c #fedd47", +"gY5 c #fedd4a", +"iVA c #fedd5b", +"iYs c #fedd5c", +"h40 c #fedd62", +"j#V c #fedd69", +"hyY c #fede46", +"hy1 c #fede48", +"i1h c #fede64", +"i9l c #fede65", +"i4a c #fede66", +"hv. c #fedf47", +"g3# c #fedf48", +"hyZ c #fedf49", +"hy0 c #fedf4a", +"i6N c #fedf6b", +"i9j c #fedf71", +"hrx c #fee046", +"hu9 c #fee049", +"hve c #fee04a", +"i1a c #fee062", +"iYr c #fee067", +".kN c #fee0a8", +"iUr c #fee0ad", +"hrw c #fee146", +"hry c #fee147", +"hrz c #fee14a", +"g3. c #fee14c", +"hvh c #fee14f", +"hrC c #fee150", +"hvg c #fee151", +"h7X c #fee163", +"iYk c #fee168", +"iF9 c #fee1b0", +"iU. c #fee1b2", +"hu8 c #fee249", +"hrA c #fee24f", +"hrB c #fee254", +"iRi c #fee2b1", +"iRE c #fee2b2", +"iZ7 c #fee2b8", +"hc2 c #fee354", +"iIS c #fee3b5", +"iXf c #fee3ba", +"iRC c #fee3bb", +"hnV c #fee447", +"hnW c #fee44c", +"g29 c #fee451", +"hnX c #fee452", +"hgM c #fee454", +".lq c #fee4a0", +"iLG c #fee4b9", +"inl c #fee4bb", +"iRB c #fee4bc", +"kIy c #fee4bd", +"hnU c #fee54a", +"hkl c #fee554", +"hnY c #fee555", +"hc1 c #fee557", +"hob c #fee598", +"i2G c #fee5ba", +"hR2 c #fee5bb", +"iIR c #fee5bc", +"iLF c #fee5bd", +"iDq c #fee5be", +"haO c #fee5bf", +"g8Z c #fee5c0", +"hrt c #fee64f", +"g7. c #fee655", +"h.9 c #fee656", +"hgL c #fee657", +"hCM c #fee6a0", +"ipQ c #fee6be", +"hie c #fee6c0", +"g40 c #fee6c1", +"hnT c #fee74d", +"hkh c #fee74e", +"hki c #fee754", +"hkj c #fee756", +"h.8 c #fee757", +"hkk c #fee758", +"hc0 c #fee759", +"hgK c #fee75a", +"hkz c #fee79c", +"hMN c #fee7a4", +"i5l c #fee7bd", +"isj c #fee7bf", +"b8Z c #fee7c1", +"g02 c #fee7c2", +"hkg c #fee84c", +"hcZ c #fee857", +"hgJ c #fee859", +"hj3 c #fee86d", +"gVq c #fee89f", +"gFZ c #fee8a5", +"ik7 c #fee8b9", +"iuR c #fee8bf", +"hlX c #fee8c3", +"iIE c #fee8c4", +"hkf c #fee950", +"h.6 c #fee953", +"hgI c #fee954", +"hcY c #fee956", +"gM3 c #fee95f", +"i1b c #fee96d", +".l5 c #fee990", +"hg1 c #fee9a2", +"gNH c #fee9a5", +"gJQ c #fee9a6", +"gFY c #fee9a7", +"iiA c #fee9b9", +"iiz c #fee9ba", +"inD c #fee9bc", +"i2B c #fee9c0", +"i5i c #fee9c2", +"jvW c #fee9c3", +"kAr c #fee9c5", +"iF5 c #fee9c7", +"iuX c #fee9c9", +"iLC c #fee9ca", +"hgG c #feea50", +"hgH c #feea51", +"hke c #feea52", +"h.5 c #feea53", +"hcX c #feea54", +"gNG c #feeaa7", +"gym c #feeaa8", +"ik6 c #feeaba", +"if8 c #feeabc", +"iaM c #feeac1", +"kvj c #feeac4", +"kxO c #feeac5", +"kC2 c #feeac6", +"kAp c #feeac7", +"hpo c #feeac8", +"gsM c #feeae3", +"hcW c #feeb53", +"hgF c #feeb54", +"hnS c #feeb57", +"gqS c #feeba4", +"gjy c #feeba7", +"gm6 c #feeba8", +"gyl c #feeba9", +"hoe c #feebaa", +"fLM c #feebab", +"gNE c #feebad", +"ik9 c #feebbd", +"idy c #feebbf", +"iiC c #feebc0", +"hXY c #feebc2", +"iuQ c #feebc3", +"ksV c #feebc7", +"kLF c #feebc8", +"kxN c #feebc9", +"ga8 c #feebcb", +"ixK c #feebcc", +"hcV c #feec56", +"guD c #feeca6", +"gVp c #feeca7", +"gjx c #feeca8", +"gfU c #feeca9", +"hkB c #feecac", +"f1U c #feecad", +"gRs c #feecae", +"gND c #feecb0", +"gRr c #feecb1", +"f1h c #feecb6", +"f1g c #feecb8", +"hOO c #feecc4", +"kop c #feecc6", +"iAw c #feecc7", +"kqI c #feecc9", +"kAo c #feecca", +"iuW c #feeccb", +"kqG c #feeccc", +"iX# c #feeccd", +"iIN c #feecce", +"iDm c #feeccf", +"iOx c #feecd0", +"hkd c #feed56", +"hgE c #feed5c", +"gZo c #feeda6", +"gfT c #feedaa", +"kCx c #feedaf", +"fPk c #feedb1", +"f1i c #feedb4", +"f7M c #feedb8", +"fX4 c #feedb9", +"f1f c #feedba", +"kl0 c #feedbf", +"klZ c #feedc0", +"klY c #feedc1", +"i5j c #feedc3", +"i7V c #feedc4", +"koo c #feedca", +"f9S c #feedcb", +"f9R c #feedcc", +"hta c #feedcd", +"iUn c #feedcf", +"j.z c #feedd0", +"iX. c #feedd1", +"hkc c #feee5a", +"hcU c #feee5c", +"gcb c #feeeae", +"gCa c #feeeaf", +"gyj c #feeeb0", +"kzS c #feeeb1", +"kzR c #feeeb3", +"fX3 c #feeebb", +"fUO c #feeebc", +"klX c #feeec2", +"kjE c #feeec4", +"km. c #feeec7", +"iRs c #feeec8", +"kqF c #feeece", +"i2W c #feeed2", +"i5A c #feeed3", +"bUm c #feeed5", +"bUn c #feeed6", +"hgD c #feef64", +"hkQ c #feefa6", +"g.O c #feefb0", +"guz c #feefb1", +"f5a c #feefb2", +"fAJ c #feefb3", +"kK1 c #feefb4", +"gjT c #feefb5", +"fUP c #feefbb", +"fRT c #feefbd", +"fKZ c #feefbe", +"gc. c #feefbf", +"fG5 c #feefc1", +"ko# c #feefc3", +"j.r c #feefc4", +"f6R c #feefc7", +"f9K c #feefc8", +"kjN c #feefc9", +"iZG c #feefca", +"k#m c #feefcc", +"iig c #feefd0", +"kl5 c #feefd1", +"kLE c #feefd2", +"khv c #feefd3", +"i5z c #feefd4", +"iRx c #feefd7", +"g9. c #feefd9", +"hgC c #fef067", +"g3s c #fef0ac", +"gca c #fef0b0", +"hzd c #fef0b1", +"g.N c #fef0b2", +"gc# c #fef0b3", +"gFW c #fef0b4", +"fSn c #fef0b5", +"gm2 c #fef0b6", +"ksi c #fef0b7", +"kzP c #fef0b8", +"fK0 c #fef0bd", +"fwQ c #fef0be", +"fLA c #fef0bf", +"fG4 c #fef0c0", +"fzR c #fef0c2", +"fvW c #fef0c3", +"j.q c #fef0c7", +"keN c #fef0ca", +"keM c #fef0cb", +"kb3 c #fef0cc", +"j8J c #fef0ce", +"kl7 c #fef0d1", +"iF4 c #fef0d2", +"jMw c #fef0d3", +"jyD c #fef0d4", +"iZ2 c #fef0d5", +"hgB c #fef16b", +"gci c #fef1a8", +"kNg c #fef1a9", +"g7W c #fef1ad", +"g7z c #fef1ae", +"kH1 c #fef1af", +"g7y c #fef1b0", +"kF. c #fef1b1", +"hof c #fef1b2", +"ixc c #fef1b3", +"guy c #fef1b4", +"gZl c #fef1b5", +"f8# c #fef1b6", +"gnu c #fef1b7", +"gjr c #fef1b8", +"h5s c #fef1b9", +"fLu c #fef1ba", +"fYr c #fef1bb", +"gyI c #fef1bc", +"fP# c #fef1bd", +"fAA c #fef1be", +"fG3 c #fef1bf", +"fLB c #fef1c0", +"fYu c #fef1c1", +"fKW c #fef1c2", +"fG6 c #fef1c3", +"f1N c #fef1c4", +"fRS c #fef1c5", +"f73 c #fef1c6", +"eLt c #fef1c7", +"e3P c #fef1ca", +"j.t c #fef1cb", +"ga6 c #fef1ce", +"kC0 c #fef1d1", +"inf c #fef1d3", +"j8O c #fef1d4", +"isg c #fef1d5", +"i2V c #fef1d6", +"iW4 c #fef1d7", +"bPG c #fef1db", +"kNh c #fef2a7", +"gcj c #fef2aa", +"ksg c #fef2ab", +"kOa c #fef2ae", +"ksh c #fef2b0", +"h#u c #fef2b1", +"gvb c #fef2b2", +"gvc c #fef2b3", +"fDZ c #fef2b4", +"gGy c #fef2b5", +"hkE c #fef2b6", +"fHy c #fef2b7", +"g.6 c #fef2b8", +"fwT c #fef2b9", +"fAC c #fef2ba", +"fYt c #fef2bb", +"fw5 c #fef2bc", +"gnn c #fef2bd", +"f1J c #fef2be", +"fHG c #fef2bf", +"fD6 c #fef2c0", +"fAu c #fef2c1", +"fLH c #fef2c2", +"fPg c #fef2c3", +"fVr c #fef2c4", +"fVp c #fef2c5", +"eLs c #fef2c7", +"f47 c #fef2c8", +"g.1 c #fef2c9", +"gct c #fef2ca", +"gcr c #fef2cb", +"gcq c #fef2cc", +"gjO c #fef2cd", +"ga5 c #fef2d0", +"jRG c #fef2d4", +"iOs c #fef2d5", +"iIF c #fef2d6", +"jO4 c #fef2d7", +"iUf c #fef2d8", +"i76 c #fef2d9", +"i5y c #fef2da", +"gPe c #fef2db", +"bKU c #fef2dd", +"bKT c #fef2de", +"bF8 c #fef2df", +"hcQ c #fef372", +"h.Y c #fef374", +"gZx c #fef398", +"hTG c #fef3a6", +"kHZ c #fef3a8", +"g7C c #fef3aa", +"hhr c #fef3ab", +"kH0 c #fef3ac", +"gGx c #fef3b2", +"f8m c #fef3b3", +"fVM c #fef3b4", +"fHw c #fef3b5", +"fHx c #fef3b6", +"fLs c #fef3b7", +"hJB c #fef3b8", +"gf9 c #fef3b9", +"fYG c #fef3ba", +"fEe c #fef3bb", +"gga c #fef3bc", +"fAI c #fef3bd", +"fsS c #fef3be", +"fw1 c #fef3bf", +"fYE c #fef3c0", +"gYr c #fef3c1", +"f5# c #fef3c2", +"fOF c #fef3c3", +"fSj c #fef3c4", +"fVo c #fef3c5", +"fVq c #fef3c6", +"fOB c #fef3c7", +"f48 c #fef3c8", +"fGY c #fef3c9", +"fvO c #fef3ca", +"gcp c #fef3cb", +"eQj c #fef3cc", +"eVh c #fef3cd", +"e4M c #fef3ce", +"guY c #fef3d0", +"iOm c #fef3d4", +"j58 c #fef3d6", +"j1k c #fef3d7", +"jyC c #fef3d8", +"ixE c #fef3d9", +"iDb c #fef3da", +"iLw c #fef3db", +"i77 c #fef3dc", +"i5t c #fef3dd", +"g9# c #fef3df", +"bxp c #fef3e1", +"kHQ c #fef497", +"gf4 c #fef4a8", +"gf5 c #fef4aa", +"g7H c #fef4ac", +"g7D c #fef4ad", +"g7G c #fef4ae", +"h#z c #fef4af", +"hdl c #fef4b0", +"h#y c #fef4b1", +"gcJ c #fef4b2", +"f5n c #fef4b3", +"f5o c #fef4b4", +"gvd c #fef4b5", +"gGz c #fef4b6", +"ggo c #fef4b7", +"gOk c #fef4b8", +"gjN c #fef4b9", +"gux c #fef4ba", +"hZy c #fef4bb", +"#.. c #fef4bc", +"fHQ c #fef4bd", +"fAH c #fef4be", +"fsT c #fef4bf", +"fAG c #fef4c0", +"fVw c #fef4c1", +"g.4 c #fef4c2", +"g.3 c #fef4c3", +"iNL c #fef4c4", +"jj. c #fef4c5", +"gcu c #fef4c6", +"frK c #fef4c7", +"frL c #fef4c8", +"fKT c #fef4c9", +"fGX c #fef4ca", +"ffs c #fef4cb", +"fnJ c #fef4cc", +"eGK c #fef4cd", +"eLw c #fef4ce", +"eoe c #fef4cf", +"e4L c #fef4d0", +"eZ6 c #fef4d1", +"k#l c #fef4d4", +"jT6 c #fef4d5", +"j1f c #fef4d6", +"jUa c #fef4d7", +"jT5 c #fef4d8", +"jYX c #fef4d9", +"hwQ c #fef4da", +"jWt c #fef4db", +"ipN c #fef4dc", +"g43 c #fef4dd", +"gLo c #fef4de", +"gz0 c #fef4df", +"jmR c #fef4e0", +"bBH c #fef4e1", +"kHz c #fef593", +"kHA c #fef595", +"gZz c #fef59d", +"f8t c #fef5a7", +"kdv c #fef5aa", +"ggt c #fef5ab", +"fAY c #fef5ac", +"fk2 c #fef5ae", +"gcN c #fef5b0", +"gKt c #fef5b1", +"gvh c #fef5b2", +"efz c #fef5b3", +"grj c #fef5b4", +"fo9 c #fef5b5", +"fkX c #fef5b6", +"fkV c #fef5b7", +"gnI c #fef5b8", +"i#5 c #fef5b9", +"h6e c #fef5ba", +"iK5 c #fef5bb", +"fHR c #fef5bc", +"jph c #fef5bd", +"fSm c #fef5be", +"g.5 c #fef5bf", +"ijX c #fef5c0", +"ijY c #fef5c1", +"iuc c #fef5c2", +"izK c #fef5c3", +"iKS c #fef5c4", +"iFi c #fef5c5", +"fvL c #fef5c6", +"frI c #fef5c7", +"fnG c #fef5c8", +"ffr c #fef5c9", +"gRS c #fef5ca", +"jaF c #fef5cb", +"frN c #fef5cc", +"ffw c #fef5cd", +"eZ8 c #fef5ce", +"eod c #fef5cf", +"esS c #fef5d0", +"e4I c #fef5d1", +"gBh c #fef5d2", +"jT7 c #fef5d3", +"ixA c #fef5d6", +"j3I c #fef5d7", +"iAk c #fef5d8", +"h19 c #fef5d9", +"jT4 c #fef5db", +"i2Q c #fef5dc", +"iDc c #fef5dd", +"ixF c #fef5de", +"ikO c #fef5df", +"ipM c #fef5e0", +"iW8 c #fef5e1", +"hOa c #fef5e2", +"g5. c #fef5e3", +"kQU c #fef693", +"kNO c #fef694", +"kB2 c #fef695", +"kNm c #fef6a4", +"fxm c #fef6a6", +"eXp c #fef6a7", +"kdp c #fef6a8", +"g3y c #fef6a9", +"g#m c #fef6aa", +"kaL c #fef6ab", +"fxl c #fef6ac", +"gj9 c #fef6ad", +"ftg c #fef6ae", +"fp# c #fef6af", +"gkt c #fef6b0", +"gyY c #fef6b1", +"fp. c #fef6b2", +"gGB c #fef6b3", +"gCO c #fef6b4", +"gcM c #fef6b5", +"ggn c #fef6b6", +"gcK c #fef6b7", +"fkW c #fef6b8", +"fo7 c #fef6b9", +"hZ2 c #fef6ba", +"i#4 c #fef6bb", +"iCM c #fef6bc", +"iZq c #fef6bd", +"iZd c #fef6be", +"gcw c #fef6bf", +"h8s c #fef6c0", +"ieW c #fef6c1", +"iwS c #fef6c2", +"irK c #fef6c3", +"iub c #fef6c4", +"iKQ c #fef6c5", +"hYE c #fef6c6", +"iQH c #fef6c7", +"iCy c #fef6c8", +"fGO c #fef6c9", +"fbh c #fef6ca", +"gfK c #fef6cb", +"fvN c #fef6cc", +"e9# c #fef6cd", +"e4O c #fef6ce", +"gE5 c #fef6cf", +"giE c #fef6d0", +"eVc c #fef6d1", +"gpY c #fef6d2", +"eFk c #fef6d4", +"iC9 c #fef6d6", +"j56 c #fef6d7", +"j3K c #fef6d8", +"h18 c #fef6da", +"hY8 c #fef6db", +"idf c #fef6dc", +"iii c #fef6df", +"iuM c #fef6e0", +"iC5 c #fef6e1", +"hRw c #fef6e2", +"hKL c #fef6e3", +"hHn c #fef6e4", +"hD4 c #fef6e5", +"kQV c #fef796", +"kNP c #fef79a", +"kKx c #fef79c", +"kB4 c #fef79e", +"irv c #fef7a0", +"iru c #fef7a5", +"itV c #fef7a6", +"km9 c #fef7a7", +"fda c #fef7a8", +"flD c #fef7a9", +"g#n c #fef7aa", +"j7c c #fef7ab", +"kaM c #fef7ac", +"j7N c #fef7ad", +"j4F c #fef7ae", +"j7b c #fef7af", +"gvf c #fef7b0", +"fZs c #fef7b1", +"g#Q c #fef7b2", +"ftf c #fef7b3", +"gKP c #fef7b4", +"gD# c #fef7b5", +"gKQ c #fef7b6", +"gKR c #fef7b7", +"ftd c #fef7b8", +"g4t c #fef7b9", +"ih2 c #fef7ba", +"ih1 c #fef7bb", +"h9i c #fef7bc", +"h6d c #fef7bd", +"ipu c #fef7be", +"i#j c #fef7bf", +"iCv c #fef7c0", +"izJ c #fef7c1", +"i#k c #fef7c2", +"icc c #fef7c3", +"iwR c #fef7c4", +"iua c #fef7c5", +"iTD c #fef7c6", +"hL0 c #fef7c7", +"iQK c #fef7c8", +"iQJ c #fef7c9", +"iQI c #fef7ca", +"fzH c #fef7cb", +"fGP c #fef7cc", +"f7A c #fef7cd", +"fXW c #fef7ce", +"gpZ c #fef7cf", +"ge9 c #fef7d0", +"giF c #fef7d1", +"fv8 c #fef7d2", +"ec9 c #fef7d6", +"j8I c #fef7d8", +"ed. c #fef7d9", +"iLr c #fef7da", +"e72 c #fef7db", +"e3A c #fef7dc", +"ifK c #fef7df", +"g8T c #fef7e0", +"eFr c #fef7e1", +"h5. c #fef7e2", +"hV1 c #fef7e3", +"gHu c #fef7e4", +"hFA c #fef7e5", +"gLy c #fef7ea", +".nR c #fef85e", +"ioX c #fef8a3", +"imt c #fef8a4", +"kt3 c #fef8a7", +"e18 c #fef8a8", +"f.Y c #fef8a9", +"fpJ c #fef8aa", +"fxS c #fef8ab", +"jXo c #fef8ac", +"j7. c #fef8ad", +"jX9 c #fef8ae", +"f2E c #fef8af", +"f5T c #fef8b0", +"fQa c #fef8b1", +"f5S c #fef8b2", +"f8L c #fef8b3", +"gdf c #fef8b4", +"gzk c #fef8b5", +"itU c #fef8b6", +"jP4 c #fef8b7", +"gKS c #fef8b8", +"kn. c #fef8b9", +"iYd c #fef8ba", +"irY c #fef8bb", +"irX c #fef8bc", +"j2Y c #fef8bd", +"h3b c #fef8be", +"iTR c #fef8bf", +"iKO c #fef8c0", +"i16 c #fef8c1", +"imI c #fef8c2", +"iu# c #fef8c3", +"ijd c #fef8c4", +"gmV c #fef8c5", +"i.y c #fef8c6", +"gjl c #fef8c7", +"gmW c #fef8c8", +"gxq c #fef8c9", +"gjn c #fef8ca", +"fKJ c #fef8cb", +"fOn c #fef8cc", +"fUE c #fef8cd", +"fUD c #fef8ce", +"f4A c #fef8cf", +"f4B c #fef8d0", +"iWL c #fef8d1", +"fXX c #fef8d2", +"fXY c #fef8d3", +"f1d c #fef8d4", +"f4D c #fef8d5", +"f1e c #fef8d6", +"eYM c #fef8d8", +"eOQ c #fef8da", +"i2K c #fef8db", +"eYU c #fef8dd", +"eT1 c #fef8de", +"ixx c #fef8e0", +"eFq c #fef8e1", +"hJ. c #fef8e2", +"eO1 c #fef8e3", +"eFs c #fef8e4", +"hPT c #fef8e5", +"gzZ c #fef8e6", +"h6I c #fef8e7", +"h3I c #fef8e8", +"hO# c #fef8e9", +"hAC c #fef8eb", +"fF. c #fef9a7", +"eXo c #fef9a8", +"e6C c #fef9a9", +"fdc c #fef9aa", +"fhq c #fef9ab", +"flG c #fef9ac", +"fE8 c #fef9ad", +"f2F c #fef9ae", +"fIK c #fef9af", +"f5U c #fef9b0", +"fZt c #fef9b1", +"fZu c #fef9b2", +"g#T c #fef9b3", +"ic# c #fef9b4", +"i05 c #fef9b5", +"iwB c #fef9b6", +"jSw c #fef9b7", +"ica c #fef9b8", +"itT c #fef9b9", +"itS c #fef9ba", +"kdx c #fef9bc", +"iWA c #fef9be", +"gfF c #fef9bf", +"gtI c #fef9c0", +"gmT c #fef9c1", +"gfC c #fef9c2", +"gxr c #fef9c3", +"iea c #fef9c4", +"gfB c #fef9c5", +"gYt c #fef9c6", +"gfA c #fef9c7", +"gjm c #fef9c8", +"hL1 c #fef9c9", +"gb1 c #fef9ca", +"h.v c #fef9cb", +"iFf c #fef9cc", +"f7B c #fef9cd", +"f1# c #fef9ce", +"f09 c #fef9cf", +"f4C c #fef9d0", +"f1a c #fef9d1", +"f1b c #fef9d2", +"g.F c #fef9d3", +"e7R c #fef9da", +"edb c #fef9db", +"fqJ c #fef9dc", +"fiy c #fef9dd", +"ir7 c #fef9de", +"fem c #fef9e0", +"eO0 c #fef9e1", +"fen c #fef9e2", +"feo c #fef9e5", +"eT4 c #fef9e6", +"haT c #fef9e7", +"hyC c #fef9e9", +"hMq c #fef9ea", +"g1d c #fef9eb", +"gXb c #fef9ef", +"gLB c #fef9f0", +"ich c #fefaa4", +"fBA c #fefaa5", +"iH0 c #fefaa8", +"fIM c #fefaa9", +"flE c #fefaaa", +"fdd c #fefaab", +"flF c #fefaac", +"i9. c #fefaae", +"i31 c #fefaaf", +"ieT c #fefab0", +"jU3 c #fefab2", +"icg c #fefab4", +"ihs c #fefab5", +"jFm c #fefab6", +"jzG c #fefab7", +"jCQ c #fefab8", +"jKR c #fefab9", +"jco c #fefabb", +"gmR c #fefabd", +"gfE c #fefabe", +"gML c #fefabf", +"giS c #fefac0", +"gqG c #fefac1", +"gMK c #fefac2", +"gQC c #fefac3", +"jQY c #fefac4", +"jck c #fefac5", +"g.B c #fefac6", +"f7G c #fefac7", +"hBX c #fefac8", +"i.z c #fefac9", +"hVy c #fefaca", +"hPt c #fefacb", +"hVx c #fefacc", +"iHY c #fefacd", +"iTs c #feface", +"gbZ c #fefad0", +"g.E c #fefad2", +"gbV c #fefad3", +"eOP c #fefad6", +"ehI c #fefad7", +"emG c #fefad8", +"emF c #fefad9", +"ec7 c #fefada", +"ehJ c #fefadb", +"e.g c #fefadc", +"ehM c #fefadd", +"eAz c #fefade", +"dAE c #fefadf", +"fel c #fefae0", +"iag c #fefae1", +"h6r c #fefae2", +"h9r c #fefae3", +"e3B c #fefae4", +"fQU c #fefae5", +"fQT c #fefae6", +"fW5 c #fefae7", +"fW6 c #fefae8", +"f0a c #fefae9", +"f0b c #fefaea", +"hth c #fefaee", +"hAB c #fefaf0", +"gPo c #fefaf2", +"h2x c #fefbaa", +"itP c #fefbab", +"i6B c #fefbb0", +"ims c #fefbb1", +"iwu c #fefbb4", +"iww c #fefbb6", +"gmQ c #fefbb9", +"gqD c #fefbba", +"gqE c #fefbbb", +"gjf c #fefbbc", +"gji c #fefbbd", +"jrj c #fefbc0", +"gfi c #fefbc5", +"gqH c #fefbc6", +"jJJ c #fefbc8", +"h4J c #fefbcb", +"gfx c #fefbcf", +"gbX c #fefbd2", +"gbW c #fefbd3", +"eFi c #fefbd8", +"emH c #fefbd9", +"ehL c #fefbda", +"ehK c #fefbdb", +"fqI c #fefbdc", +"ehN c #fefbdd", +"eYL c #fefbde", +"dR# c #fefbdf", +"drY c #fefbe0", +"fJQ c #fefbe1", +"fJR c #fefbe2", +"fNv c #fefbe3", +"hDN c #fefbe4", +"hKu c #fefbe5", +"gwf c #fefbe6", +"hKv c #fefbe7", +"gsu c #fefbe8", +"gHr c #fefbe9", +"g84 c #fefbea", +"khh c #fefbec", +"gz5 c #fefbee", +"hDU c #fefbef", +"g5# c #fefbf0", +"heL c #fefbf1", +"hl8 c #fefbf2", +"g1f c #fefbf3", +"irn c #fefca9", +"ioR c #fefcaa", +"irq c #fefcab", +"ihm c #fefcad", +"jSx c #fefcae", +"jFo c #fefcb0", +"itp c #fefcb3", +"gul c #fefcb7", +"gmP c #fefcb8", +"jK9 c #fefcba", +"gxt c #fefcbb", +"gje c #fefcbf", +"gjd c #fefcc2", +"f7F c #fefcc8", +"fNs c #fefcd9", +"fQR c #fefcda", +"fJM c #fefcdb", +"fQS c #fefcdc", +"ghC c #fefcdf", +"gwg c #fefce7", +"gzX c #fefce8", +"gDM c #fefce9", +"gHs c #fefcea", +"iA. c #fefceb", +"hDT c #fefcee", +"hij c #fefcef", +"hik c #fefcf0", +"gz6 c #fefcf1", +"ffN c #fefcf2", +"haX c #fefcf3", +"fOJ c #fefcf4", +"fUT c #fefcf5", +"eeW c #fefcf9", +"itJ c #fefdaa", +"iza c #fefdab", +"gmO c #fefdb9", +"gqC c #fefdba", +"gbP c #fefdc5", +"g.A c #fefdc7", +"gDK c #fefdea", +"heI c #fefdef", +"heH c #fefdf0", +"hNY c #fefdf1", +"g1e c #fefdf2", +"gXa c #fefdf3", +"fUU c #fefdf6", +"fr7 c #fefdf9", +"daL c #fefdfb", +"fK2 c #fefdfc", +"ccd c #fefdfd", +"chn c #fefdfe", +"jNs c #fefeac", +"jP6 c #fefead", +"fnZ c #fefefb", +"c7K c #fefefc", +"cKr c #fefefd", +"ap5 c #fefefe", +"bCu c #fefeff", +"jKV c #feffaa", +"bG7 c #feffff", +".#Z c #ff54fd", +".#Y c #ff54fe", +".al c #ff63fb", +".ak c #ff63fc", +".aP c #ff6ff8", +".aO c #ff6ff9", +".aN c #ff6ffa", +".aM c #ff6ffb", +".bi c #ff7af5", +".bh c #ff7af6", +".bg c #ff7af7", +".bf c #ff7af8", +".be c #ff7af9", +".bP c #ff84f1", +".bO c #ff84f2", +".bN c #ff84f3", +".bM c #ff84f4", +".bL c #ff84f5", +".bK c #ff84f6", +".bJ c #ff84f7", +".co c #ff8dee", +".cn c #ff8def", +".cm c #ff8df0", +".cl c #ff8df1", +".ck c #ff8df2", +".cj c #ff8df3", +".ci c #ff8df4", +".c3 c #ff96e9", +".c2 c #ff96ea", +".c1 c #ff96ec", +".c0 c #ff96ed", +".cZ c #ff96ee", +".cY c #ff96f0", +".cX c #ff96f1", +".cW c #ff96f2", +".dK c #ff9de5", +".dJ c #ff9de6", +".dI c #ff9de7", +".dH c #ff9de9", +".dG c #ff9dea", +".dF c #ff9deb", +".dE c #ff9ded", +".dD c #ff9dee", +".ep c #ffa5e0", +".eo c #ffa5e2", +".en c #ffa5e4", +".em c #ffa5e5", +".el c #ffa5e7", +".ek c #ffa5e8", +".ej c #ffa5ea", +".e3 c #ffacdb", +".e2 c #ffacdc", +".e1 c #ffacde", +".e0 c #fface0", +".eZ c #fface1", +".eY c #fface3", +".eX c #fface5", +".eW c #fface7", +".fL c #ffb3d5", +".fK c #ffb3d7", +".fJ c #ffb3d9", +".fI c #ffb3db", +".fH c #ffb3de", +".fG c #ffb3e0", +".fF c #ffb3e2", +".gn c #ffb9d0", +".gm c #ffb9d2", +".gl c #ffb9d5", +".gk c #ffb9d7", +".gj c #ffb9d9", +".gi c #ffb9db", +".gh c #ffb9de", +".go c #ffbacf", +".g3 c #ffbfc8", +".g2 c #ffbfcb", +".g1 c #ffbfce", +".g0 c #ffbfd0", +".gZ c #ffbfd2", +".gY c #ffbfd5", +".gX c #ffbfd7", +".hI c #ffc5c2", +".hH c #ffc5c4", +".hG c #ffc5c7", +".hF c #ffc5ca", +".hE c #ffc5cd", +".hD c #ffc5d0", +".im c #ffcbbb", +".il c #ffcbbe", +".ik c #ffcbc1", +".ij c #ffcbc5", +".ii c #ffcbc8", +".ih c #ffcbcb", +"hn6 c #ffcc42", +"hMt c #ffce3f", +"hJd c #ffd040", +".iZ c #ffd0b4", +".iY c #ffd0b7", +".iX c #ffd0bb", +".iW c #ffd0be", +".iV c #ffd0c2", +"gBt c #ffd14c", +"kFO c #ffd198", +"gI7 c #ffd24b", +"gxF c #ffd24f", +"hFT c #ffd340", +"hFS c #ffd341", +"gFe c #ffd34a", +"kFN c #ffd39c", +"kIC c #ffd39d", +"kLJ c #ffd39e", +"kOQ c #ffd39f", +"hFU c #ffd540", +".jA c #ffd6ac", +".jz c #ffd6b0", +".jy c #ffd6b4", +".jx c #ffd6b8", +"hCu c #ffd841", +"h7W c #ffda5a", +".kc c #ffdba3", +".kb c #ffdba8", +".ka c #ffdbac", +".k# c #ffdbb0", +"i1. c #ffde65", +"i37 c #ffdf5d", +"i36 c #ffdf5e", +"iOF c #ffdfa7", +".kQ c #ffe09a", +".kP c #ffe09f", +".kO c #ffe0a3", +"iXg c #ffe2b4", +"iOE c #ffe3b3", +"iZO c #ffe3b6", +"iF8 c #ffe4b6", +"iUq c #ffe4b8", +"iRD c #ffe4ba", +".lt c #ffe58f", +".ls c #ffe595", +".lr c #ffe59a", +"iDs c #ffe5b9", +"iDr c #ffe5ba", +"iOD c #ffe5bb", +"iF7 c #ffe6bc", +"hoc c #ffe7a0", +"hkA c #ffe8a2", +".l6 c #ffea89", +"hod c #ffeaa5", +"gRu c #ffeaa7", +"guC c #ffeaa8", +"gNF c #ffeaaa", +"inC c #ffeabb", +"iiB c #ffeabc", +"iOq c #ffeac6", +".l7 c #ffeb83", +"gqQ c #ffeba8", +"guB c #ffeba9", +"gFX c #ffebaa", +"gRt c #ffebab", +"hRX c #ffebc3", +"ipV c #ffebc4", +"hdf c #ffeca8", +"gjw c #ffeca9", +"guA c #ffecab", +"hrU c #ffecac", +"h62 c #ffecc3", +"hUV c #ffecc4", +"iso c #ffecc5", +"isp c #ffecc8", +"gm5 c #ffedaa", +"gjv c #ffedab", +"gqP c #ffedac", +"gyk c #ffedad", +"gZn c #ffedae", +"h2u c #ffedb1", +"h9U c #ffedc4", +"iuV c #ffedc5", +"iUe c #ffedcc", +"kOM c #ffedcd", +".mG c #ffee7d", +"gfS c #ffeeac", +"gm4 c #ffeeae", +"hg2 c #ffeeaf", +"gZm c #ffeeb0", +"hJv c #ffeeb1", +"hWo c #ffeeb2", +"hZv c #ffeeb3", +"hZu c #ffeeb4", +"j.s c #ffeec4", +"hON c #ffeec5", +"hRW c #ffeec6", +"icy c #ffeec7", +"imM c #ffeec8", +"ipe c #ffeec9", +"ksT c #ffeece", +"kxM c #ffeecf", +"iRr c #ffeed1", +"iUm c #ffeed2", +"jIv c #ffef99", +"gju c #ffefae", +"gm3 c #ffefaf", +"hrV c #ffefb0", +"hdg c #ffefb1", +"h#o c #ffefb2", +"hMP c #ffefb3", +"hZw c #ffefb5", +"h5t c #ffefb6", +"h5M c #ffefc2", +"imN c #ffefc4", +"h0X c #ffefc5", +"hUU c #ffefc6", +"hOM c #ffefc7", +"ihJ c #ffefc8", +"ipf c #ffefc9", +"ipd c #ffefca", +"iDl c #ffefcc", +"kC1 c #ffefcf", +"kl6 c #ffefd0", +"kqE c #ffefd1", +"iAo c #ffefd2", +"iLB c #ffefd3", +"iOw c #ffefd4", +"gfR c #fff0af", +"g3r c #fff0b0", +"gjt c #fff0b1", +"gfQ c #fff0b2", +"hzc c #fff0b3", +"gjs c #fff0b4", +"hMO c #fff0b5", +"hQg c #fff0b6", +"hWn c #fff0b7", +"ipg c #fff0c0", +"f4F c #fff0c1", +"h2K c #fff0c2", +"h8Q c #fff0c3", +"hM4 c #fff0c4", +"ikg c #fff0c5", +"h34 c #fff0c6", +"hWG c #fff0c7", +"h8P c #fff0c8", +"hZP c #fff0c9", +"h8O c #fff0ca", +"icx c #fff0cb", +"imL c #fff0cc", +"i17 c #fff0cd", +"kb2 c #fff0ce", +"iUg c #fff0cf", +"iuL c #fff0d0", +"jsR c #fff0d1", +"jgT c #fff0d2", +"kjL c #fff0d3", +"iLv c #fff0d4", +"iW9 c #fff0d5", +"g7w c #fff1b2", +"gC# c #fff1b3", +"g7v c #fff1b4", +"g3q c #fff1b5", +"gfP c #fff1b6", +"fEk c #fff1b7", +"hQh c #fff1b8", +"h2t c #fff1b9", +"gfO c #fff1ba", +"i#o c #fff1bb", +"gfN c #fff1be", +"fHO c #fff1bf", +"fSk c #fff1c0", +"f4G c #fff1c1", +"fYz c #fff1c2", +"f7K c #fff1c3", +"hJL c #fff1c4", +"fX0 c #fff1c5", +"hM5 c #fff1c6", +"eQf c #fff1c7", +"hTE c #fff1c8", +"hM3 c #fff1c9", +"hQx c #fff1ca", +"hZO c #fff1cb", +"h2J c #fff1cc", +"ikf c #fff1cd", +"iw0 c #fff1ce", +"iKT c #fff1cf", +"ict c #fff1d0", +"h5L c #fff1d1", +"ipc c #fff1d2", +"i#C c #fff1d3", +"ipb c #fff1d4", +"iFW c #fff1d5", +"jG9 c #fff1d6", +"iIM c #fff1d7", +"iZ1 c #fff1d8", +"iUl c #fff1d9", +"hor c #fff2ac", +"g7x c #fff2b1", +"h#q c #fff2b4", +"h#p c #fff2b5", +"g7t c #fff2b6", +"g7u c #fff2b7", +"fVx c #fff2b8", +"h2v c #fff2b9", +"fHT c #fff2ba", +"h5u c #fff2bb", +"h8u c #fff2bc", +"fAB c #fff2bd", +"fLI c #fff2be", +"fwR c #fff2bf", +"fSl c #fff2c0", +"fPi c #fff2c1", +"fPd c #fff2c2", +"fPe c #fff2c3", +"fX1 c #fff2c4", +"fUM c #fff2c5", +"fUJ c #fff2c6", +"fUI c #fff2c7", +"hTF c #fff2c8", +"eQe c #fff2c9", +"eQg c #fff2ca", +"g3L c #fff2cb", +"hGl c #fff2cc", +"hM2 c #fff2cd", +"h8N c #fff2ce", +"h8M c #fff2cf", +"hZN c #fff2d0", +"hZM c #fff2d1", +"h8L c #fff2d2", +"h8K c #fff2d3", +"h5K c #fff2d4", +"iF3 c #fff2d5", +"jBv c #fff2d6", +"jEk c #fff2d7", +"jBu c #fff2d8", +"iOr c #fff2d9", +"iRw c #fff2da", +".nf c #fff36e", +"h#M c #fff3b2", +"iph c #fff3b3", +"h#r c #fff3b4", +"hdh c #fff3b5", +"g7s c #fff3b6", +"hog c #fff3b7", +"hvB c #fff3b8", +"hQm c #fff3b9", +"g3N c #fff3ba", +"g7V c #fff3bb", +"fwS c #fff3bc", +"fEd c #fff3bd", +"fHP c #fff3be", +"fEh c #fff3bf", +"fLL c #fff3c0", +"fHN c #fff3c1", +"fD7 c #fff3c2", +"fVs c #fff3c3", +"fPf c #fff3c4", +"fSh c #fff3c5", +"fUL c #fff3c6", +"fUK c #fff3c7", +"gRU c #fff3c8", +"g.K c #fff3c9", +"guX c #fff3ca", +"eLu c #fff3cb", +"frO c #fff3cc", +"eQh c #fff3cd", +"eVg c #fff3ce", +"eVf c #fff3cf", +"e4K c #fff3d0", +"hTD c #fff3d1", +"hWE c #fff3d2", +"hZL c #fff3d3", +"hZK c #fff3d4", +"h8J c #fff3d5", +"ifb c #fff3d6", +"icw c #fff3d7", +"imJ c #fff3d8", +"ifa c #fff3d9", +"ikd c #fff3da", +"imK c #fff3db", +"iUk c #fff3dc", +"jJQ c #fff3dd", +"iZU c #fff3de", +"f0i c #fff3df", +"bBG c #fff3e0", +"hGm c #fff4aa", +"g7F c #fff4af", +"g7E c #fff4b0", +"h#x c #fff4b2", +"h#w c #fff4b3", +"h#v c #fff4b4", +"hdk c #fff4b5", +"hdj c #fff4b6", +"gRV c #fff4b7", +"gV4 c #fff4b8", +"gZQ c #fff4b9", +"g3p c #fff4ba", +"hr9 c #fff4bb", +"gN9 c #fff4bc", +"fYs c #fff4bd", +"fHS c #fff4be", +"fEj c #fff4bf", +"fsU c #fff4c0", +"fPj c #fff4c1", +"fYB c #fff4c2", +"fVt c #fff4c3", +"fYA c #fff4c4", +"gb9 c #fff4c5", +"fSi c #fff4c6", +"fOA c #fff4c7", +"fKS c #fff4c8", +"fOz c #fff4c9", +"fGW c #fff4ca", +"fjF c #fff4cb", +"ffv c #fff4cc", +"eQi c #fff4cd", +"eLv c #fff4ce", +"eVe c #fff4cf", +"eZ4 c #fff4d0", +"eZ5 c #fff4d1", +"hvN c #fff4d2", +"gZP c #fff4d3", +"hWF c #fff4d4", +"ihI c #fff4d5", +"h5I c #fff4d6", +"h5J c #fff4d7", +"icv c #fff4d8", +"h8I c #fff4d9", +"ihH c #fff4da", +"ike c #fff4db", +"de6 c #fff4dc", +"iAj c #fff4dd", +"iC6 c #fff4de", +"fW8 c #fff4df", +"erw c #fff4e0", +"fTR c #fff4e1", +"eO5 c #fff4e2", +"fNx c #fff4e3", +"gZy c #fff59a", +"g3z c #fff5ab", +"gnM c #fff5ae", +"hJM c #fff5af", +"gj6 c #fff5b0", +"kNn c #fff5b1", +"h5N c #fff5b2", +"hvO c #fff5b3", +"hv1 c #fff5b4", +"g4s c #fff5b5", +"gS. c #fff5b6", +"gKr c #fff5b7", +"gZ3 c #fff5b8", +"gR9 c #fff5b9", +"g77 c #fff5ba", +"hTr c #fff5bb", +"hWs c #fff5bc", +"fLJ c #fff5bd", +"fLK c #fff5be", +"fEg c #fff5bf", +"fw0 c #fff5c0", +"fEi c #fff5c1", +"ice c #fff5c2", +"ieX c #fff5c3", +"gb7 c #fff5c4", +"gb8 c #fff5c5", +"g.J c #fff5c6", +"gnt c #fff5c7", +"f7J c #fff5c8", +"f4E c #fff5c9", +"fRR c #fff5ca", +"fzK c #fff5cb", +"ffu c #fff5cc", +"e4N c #fff5cd", +"eQd c #fff5ce", +"eGL c #fff5cf", +"exs c #fff5d0", +"eVd c #fff5d1", +"gCB c #fff5d2", +"gVP c #fff5d3", +"g3M c #fff5d4", +"h2I c #fff5d5", +"iwW c #fff5d6", +"iwV c #fff5d7", +"iud c #fff5d8", +"icu c #fff5d9", +"h8H c #fff5da", +"i#B c #fff5db", +"iC7 c #fff5dc", +"ixy c #fff5dd", +"h9I c #fff5de", +"inb c #fff5df", +"f0j c #fff5e0", +"fNy c #fff5e1", +"eKg c #fff5e2", +"eAJ c #fff5e3", +"erv c #fff5e4", +"fNw c #fff5e6", +"kKQ c #fff69a", +"kJ6 c #fff6a3", +"kQp c #fff6a4", +"fPE c #fff6a6", +"kQo c #fff6a7", +"kwC c #fff6a9", +"kHc c #fff6aa", +"kBJ c #fff6ac", +"gj7 c #fff6ad", +"kBK c #fff6ae", +"kQr c #fff6af", +"ggs c #fff6b0", +"gnL c #fff6b1", +"ggr c #fff6b2", +"gj5 c #fff6b3", +"gnK c #fff6b4", +"grm c #fff6b5", +"fte c #fff6b6", +"ggp c #fff6b7", +"gcL c #fff6b8", +"g0r c #fff6b9", +"h2X c #fff6ba", +"h2w c #fff6bb", +"iFy c #fff6bc", +"hWu c #fff6bd", +"hWt c #fff6be", +"gg# c #fff6bf", +"fYF c #fff6c0", +"h5v c #fff6c1", +"gYs c #fff6c2", +"g2y c #fff6c3", +"icf c #fff6c4", +"g6z c #fff6c5", +"g.I c #fff6c6", +"iwZ c #fff6c7", +"iwY c #fff6c8", +"iue c #fff6c9", +"iwX c #fff6ca", +"fRQ c #fff6cb", +"fzJ c #fff6cc", +"fbi c #fff6cd", +"fnI c #fff6ce", +"e4J c #fff6cf", +"exq c #fff6d0", +"exr c #fff6d1", +"fKR c #fff6d2", +"gGl c #fff6d3", +"gRT c #fff6d4", +"gVQ c #fff6d5", +"izL c #fff6d6", +"iWO c #fff6d7", +"iwU c #fff6d8", +"iRn c #fff6d9", +"iC8 c #fff6da", +"iFS c #fff6db", +"i5q c #fff6dc", +"ikI c #fff6dd", +"ide c #fff6de", +"iic c #fff6df", +"f0h c #fff6e0", +"fJT c #fff6e1", +"fmL c #fff6e2", +"fqN c #fff6e3", +"eAI c #fff6e4", +"emU c #fff6e5", +"ew. c #fff6e6", +"eO4 c #fff6e7", +"e77 c #fff6e8", +"glk c #fff6ea", +"kEM c #fff795", +"kHb c #fff7a2", +"kHa c #fff7a4", +"kQq c #fff7a5", +"kEt c #fff7a6", +"km7 c #fff7a7", +"km8 c #fff7a8", +"kza c #fff7a9", +"kt4 c #fff7aa", +"fEE c #fff7ab", +"fIb c #fff7ac", +"iw1 c #fff7ad", +"gnN c #fff7ae", +"grn c #fff7af", +"fWm c #fff7b0", +"gdc c #fff7b1", +"ikh c #fff7b2", +"iQL c #fff7b3", +"gkv c #fff7b4", +"gdg c #fff7b5", +"ggq c #fff7b6", +"gnJ c #fff7b7", +"fo8 c #fff7b8", +"gGW c #fff7b9", +"hXa c #fff7ba", +"h0k c #fff7bb", +"ifx c #fff7bc", +"ixd c #fff7bd", +"ioT c #fff7be", +"iCL c #fff7bf", +"ieV c #fff7c0", +"h5w c #fff7c1", +"gQB c #fff7c2", +"h8v c #fff7c3", +"gb6 c #fff7c4", +"h.w c #fff7c5", +"gfI c #fff7c6", +"gIU c #fff7c7", +"iNK c #fff7c8", +"iKP c #fff7c9", +"iFj c #fff7ca", +"fKK c #fff7cb", +"fDg c #fff7cc", +"fzI c #fff7cd", +"fDh c #fff7ce", +"fGU c #fff7cf", +"fDi c #fff7d0", +"fGV c #fff7d1", +"fOw c #fff7d2", +"fKQ c #fff7d3", +"fRO c #fff7d4", +"fRP c #fff7d5", +"iZF c #fff7d6", +"jb# c #fff7d7", +"jdZ c #fff7d8", +"i2L c #fff7d9", +"iUb c #fff7da", +"hY7 c #fff7db", +"ipG c #fff7dc", +"isb c #fff7dd", +"iIB c #fff7de", +"jyB c #fff7df", +"i75 c #fff7e1", +"i2U c #fff7e2", +"isa c #fff7e3", +"fqM c #fff7e4", +"eFt c #fff7e5", +"eAH c #fff7e6", +"eru c #fff7e7", +"eO3 c #fff7e8", +"eT5 c #fff7e9", +"f9z c #fff7ea", +"gwn c #fff7eb", +"f8v c #fff8a3", +"kkZ c #fff8a7", +"h8R c #fff8a8", +"kwB c #fff8a9", +"ipi c #fff8aa", +"fBz c #fff8ab", +"ftM c #fff8ac", +"iuf c #fff8ad", +"hZQ c #fff8ae", +"fZr c #fff8af", +"fS8 c #fff8b0", +"fQb c #fff8b1", +"ggY c #fff8b2", +"gvi c #fff8b3", +"ggZ c #fff8b4", +"go. c #fff8b5", +"gkw c #fff8b6", +"go# c #fff8b7", +"grM c #fff8b8", +"gzl c #fff8b9", +"hz1 c #fff8ba", +"h0l c #fff8bb", +"h3e c #fff8bc", +"i#6 c #fff8bd", +"h5x c #fff8be", +"icb c #fff8bf", +"gfG c #fff8c0", +"i#p c #fff8c1", +"h8w c #fff8c2", +"gfH c #fff8c3", +"gb5 c #fff8c4", +"g6A c #fff8c5", +"g6B c #fff8c6", +"hgd c #fff8c7", +"hL2 c #fff8c8", +"g.H c #fff8c9", +"giG c #fff8ca", +"gfJ c #fff8cb", +"fKL c #fff8cc", +"fGQ c #fff8cd", +"fGR c #fff8ce", +"fGT c #fff8cf", +"fGS c #fff8d0", +"fOu c #fff8d1", +"fKN c #fff8d2", +"fKM c #fff8d3", +"fOx c #fff8d4", +"fOy c #fff8d5", +"fUH c #fff8d6", +"jdY c #fff8d8", +"iQ8 c #fff8d9", +"iW1 c #fff8da", +"iRm c #fff8db", +"iQ9 c #fff8de", +"k#k c #fff8df", +"fCr c #fff8e2", +"eKe c #fff8e3", +"eKf c #fff8e4", +"eO2 c #fff8e5", +"eAG c #fff8e6", +"ev9 c #fff8e7", +"e76 c #fff8e8", +"e75 c #fff8e9", +"f3v c #fff8ea", +"f6E c #fff8eb", +"f9x c #fff8ec", +"ge. c #fff8ed", +"gz9 c #fff8ef", +"gz8 c #fff8f0", +"f8u c #fff9a8", +"kwA c #fff9a9", +"fxU c #fff9aa", +"fpK c #fff9ab", +"flH c #fff9ac", +"fBy c #fff9ad", +"fE9 c #fff9ae", +"fMx c #fff9af", +"fMw c #fff9b0", +"fWl c #fff9b1", +"fZv c #fff9b2", +"g#P c #fff9b3", +"grK c #fff9b4", +"gvE c #fff9b5", +"j5g c #fff9b6", +"k.a c #fff9b7", +"i04 c #fff9b8", +"imo c #fff9b9", +"ihp c #fff9ba", +"h3g c #fff9bb", +"h3f c #fff9bc", +"h6f c #fff9bd", +"ipv c #fff9be", +"izY c #fff9bf", +"imp c #fff9c0", +"ihq c #fff9c1", +"gjk c #fff9c2", +"iY7 c #fff9c3", +"gMJ c #fff9c4", +"gb4 c #fff9c5", +"gb3 c #fff9c6", +"hgc c #fff9c7", +"gb2 c #fff9c8", +"hFl c #fff9c9", +"iVl c #fff9ca", +"g.G c #fff9cb", +"fOo c #fff9cc", +"fOp c #fff9cd", +"fRM c #fff9ce", +"fXV c #fff9cf", +"fKP c #fff9d0", +"fKO c #fff9d1", +"fOv c #fff9d2", +"fOq c #fff9d3", +"fXZ c #fff9d4", +"fUF c #fff9d5", +"fUG c #fff9d6", +"iO# c #fff9d7", +"iLd c #fff9d8", +"iIl c #fff9d9", +"iFE c #fff9da", +"iIm c #fff9db", +"fiz c #fff9dc", +"fJN c #fff9df", +"eKd c #fff9e1", +"fqL c #fff9e2", +"eT3 c #fff9e3", +"fmK c #fff9e4", +"e3C c #fff9e5", +"eYX c #fff9e6", +"e73 c #fff9e7", +"e74 c #fff9e8", +"f0g c #fff9e9", +"f3u c #fff9ea", +"f6B c #fff9eb", +"f6C c #fff9ec", +"f9w c #fff9ed", +"ghI c #fff9ee", +"glj c #fff9ef", +"gwm c #fff9f0", +"gz7 c #fff9f3", +"eSu c #fffaa7", +"fWn c #fffaa9", +"ftN c #fffaaa", +"f.Z c #fffaab", +"fhr c #fffaac", +"ftL c #fffaad", +"fxT c #fffaae", +"fIL c #fffaaf", +"fQ# c #fffab0", +"irs c #fffab1", +"ijV c #fffab2", +"irt c #fffab3", +"jXp c #fffab4", +"ijW c #fffab5", +"iho c #fffab6", +"ioS c #fffab7", +"ieU c #fffab8", +"itQ c #fffab9", +"itR c #fffaba", +"ioU c #fffabb", +"jog c #fffabc", +"ihr c #fffabd", +"iTS c #fffabe", +"imq c #fffabf", +"gmS c #fffac0", +"gjj c #fffac1", +"jX8 c #fffac2", +"gE6 c #fffac3", +"iEi c #fffac4", +"iEh c #fffac5", +"gIV c #fffac6", +"ije c #fffac7", +"ibr c #fffac8", +"hq0 c #fffac9", +"gf. c #fffaca", +"hSD c #fffacb", +"gbH c #fffacc", +"jgN c #fffacd", +"jgM c #ffface", +"jMr c #fffacf", +"fOt c #fffad0", +"fOs c #fffad1", +"fOr c #fffad2", +"fRN c #fffad3", +"i5e c #fffad5", +"i2z c #fffad6", +"iT3 c #fffad7", +"i2y c #fffad8", +"iWN c #fffad9", +"iWM c #fffada", +"fCq c #fffadb", +"eTQ c #fffadc", +"eJ4 c #fffadd", +"eJ5 c #fffade", +"fyQ c #fffadf", +"eFp c #fffae0", +"fqK c #fffae1", +"eT2 c #fffae2", +"fmJ c #fffae3", +"eYV c #fffae4", +"eYW c #fffae5", +"fTQ c #fffae6", +"fep c #fffae7", +"fW7 c #fffae8", +"f0e c #fffae9", +"f0f c #fffaea", +"f3t c #fffaeb", +"f6D c #fffaec", +"f9v c #fffaed", +"gaK c #fffaee", +"gd9 c #fffaf0", +"ghH c #fffaf1", +"goQ c #fffaf2", +"gwl c #fffaf3", +"gTi c #fffaf4", +"fT# c #fffba8", +"fxV c #fffbaa", +"izM c #fffbab", +"irr c #fffbad", +"imm c #fffbae", +"ihn c #fffbaf", +"ioW c #fffbb0", +"imn c #fffbb1", +"j4G c #fffbb2", +"iwt c #fffbb3", +"ij1 c #fffbb4", +"iwv c #fffbb5", +"jFn c #fffbb6", +"ioV c #fffbb7", +"jIa c #fffbb8", +"jKS c #fffbb9", +"j0w c #fffbba", +"ij0 c #fffbbb", +"joh c #fffbbd", +"gp2 c #fffbbe", +"ijZ c #fffbbf", +"jk7 c #fffbc0", +"jVP c #fffbc1", +"gme c #fffbc2", +"gIW c #fffbc3", +"jGW c #fffbc5", +"giH c #fffbc6", +"iqT c #fffbc7", +"ilK c #fffbc8", +"igF c #fffbc9", +"h7H c #fffbca", +"hSE c #fffbcb", +"jRA c #fffbcc", +"kK. c #fffbd1", +"emI c #fffbd9", +"emJ c #fffbda", +"emK c #fffbdb", +"ehO c #fffbdc", +"edc c #fffbdd", +"emL c #fffbde", +"ero c #fffbdf", +"eFj c #fffbe0", +"fJO c #fffbe1", +"fiA c #fffbe2", +"fNu c #fffbe3", +"fQW c #fffbe4", +"fQV c #fffbe5", +"fTP c #fffbe6", +"gle c #fffbe7", +"f3r c #fffbe8", +"f0d c #fffbe9", +"f0c c #fffbea", +"f3s c #fffbeb", +"f9y c #fffbec", +"ghE c #fffbed", +"gaH c #fffbee", +"gaJ c #fffbef", +"gaM c #fffbf0", +"gli c #fffbf1", +"ghG c #fffbf2", +"gsx c #fffbf3", +"gLA c #fffbf4", +"egg c #fffca5", +"iNM c #fffca8", +"eld c #fffca9", +"fpL c #fffcaa", +"ijT c #fffcab", +"iml c #fffcac", +"ijU c #fffcad", +"iwq c #fffcae", +"iwr c #fffcb0", +"jKT c #fffcb1", +"iws c #fffcb3", +"jNr c #fffcb4", +"jcp c #fffcb9", +"imr c #fffcba", +"jud c #fffcbb", +"gtJ c #fffcbc", +"juf c #fffcbd", +"jh2 c #fffcc3", +"jfg c #fffcc4", +"jcj c #fffcc7", +"f#8 c #fffcdd", +"e7S c #fffcde", +"e7T c #fffcdf", +"fF6 c #fffce0", +"fF7 c #fffce1", +"fJP c #fffce2", +"gd3 c #fffce3", +"gd4 c #fffce4", +"gaG c #fffce5", +"gld c #fffce6", +"hNX c #fffce7", +"gsv c #fffce8", +"gwh c #fffce9", +"gzY c #fffcea", +"gW2 c #fffceb", +"hii c #fffcec", +"glf c #fffced", +"gd5 c #fffcee", +"gaI c #fffcef", +"gaL c #fffcf0", +"gd8 c #fffcf1", +"glh c #fffcf2", +"goP c #fffcf3", +"gLz c #fffcf4", +"cUk c #fffd97", +"i4R c #fffda5", +"i7p c #fffda6", +"i90 c #fffda8", +"ioQ c #fffda9", +"imk c #fffdaa", +"ijS c #fffdab", +"flI c #fffdac", +"jKU c #fffdae", +"jFp c #fffdaf", +"jCy c #fffdb2", +"j2e c #fffdb7", +"jNI c #fffdba", +"jzZ c #fffdbb", +"jof c #fffdbc", +"jri c #fffdbd", +"j#H c #fffdc9", +"kNv c #fffdcf", +"gwi c #fffde8", +"gwj c #fffde9", +"gDJ c #fffdea", +"gDN c #fffdeb", +"gHt c #fffdec", +"gPd c #fffded", +"gsw c #fffdee", +"glg c #fffdef", +"gd6 c #fffdf0", +"gd7 c #fffdf1", +"ghF c #fffdf2", +"gwk c #fffdf3", +"gTh c #fffdf4", +"imj c #fffeab", +"jIb c #fffead", +"jSz c #fffeb0", +"kdf c #fffeb4", +"jue c #fffebd", +"jBn c #fffeec", +"jBo c #fffeed", +"i7P c #fffeef", +"i7O c #fffef0", +"i5c c #fffef3", +"cgW c #fffefe", +"bNe c #fffeff", +"ftO c #ffffab", +"irm c #ffffac", +"ioP c #ffffad", +"jCz c #ffffb1", +"a92 c #fffffe", +"am. c #ffffff", +"Qt.Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#", +"QtaQt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#Qt#", +"QtbQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtdQteQt#QtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtc", +"QtfQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtgQthQtiQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtcQtc", +"QtjQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtgQthQtlQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtkQtk", +"QtmQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtnQtoQtkQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtgQthQtpQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtqQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtd", +"QtrQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtsQttQtuQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtgQthQtpQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtkQtvQtwQtxQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtdQtd", +"QtrQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtzQtAQtBQtCQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtDQthQtEQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtcQtFQtGQtHQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtIQtJQtKQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQty", +"QtLQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtMQtNQtOQtPQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtDQthQtEQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtQQtJQtJQtxQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtRQtwQtSQtTQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQtyQty", +"QtLQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtVQtWQtXQtYQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtZQt0Qt1Qt2Qt3Qt3Qt2Qt1Qt0QtZQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtDQtHQtEQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQt4QtJQt5QtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQt6QtwQtSQteQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtU", +"Qt7QtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQt8Qt9.#..##QtUQtUQtUQtUQtUQtU.#a.#b.#c.#d.#e.#f.#g.#h.#h.#i.#f.#e.#d.#c.#b.#aQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtDQtHQtEQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtU.#jQtJ.#kQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtU.#lQtw.#mQteQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtUQtU", +".#nQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtz.#oQt9.#p.#qQtzQtzQtz.#a.#r.#s.#t.#u.#v.#w.#x.#y.#z.#z.#y.#x.#w.#A.#B.#C.#D.#r.#aQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtDQtH.#EQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtz.#FQtJQtpQtzQtzQtzQtzQtzQtzQtzQtzQtzQtz.#GQtw.#HQtdQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtU.#I.#JQtzQtzQtzQtzQtzQtzQtzQtzQtT.#KQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtz", +".#LQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtz.#M.#N.#O.#PQtz.#Q.#R.#S.#T.#U.#V.#W.#W.#X.#X.#W.#Y.#Z.#Z.#Y.#Y.#V.#U.#0.#1.#2.#3QtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtDQtH.#EQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtqQtJ.#4QtzQtzQtzQtzQtzQtzQtzQtzQtzQtz.#k.#5QtRQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtc.#m.#6.#KQtzQtzQtzQtzQtzQtzQtz.#7.#j.#FQtTQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtzQtz", +".#n.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#9.a..a#.aa.ab.ac.ad.ae.af.af.af.ag.ag.ah.ai.aj.aj.ak.ak.al.al.al.am.an.ao.ap.aq.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.arQtH.as.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.atQtJ.au.#8.#8.#8.#8.#8.#8.#8.#8Qty.av.#4.#K.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.awQtJQth.#8.#8.#8.#8.#8.#8.#8.#8.axQtJQtv.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8", +".#n.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.ay.az.aA.aB.aC.aD.aE.aD.aD.aF.aG.aG.aH.aI.aJ.aK.aL.aM.aN.aO.aO.aP.aP.aQ.aR.aS.aT.aU.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.arQtH.as.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.aVQtJ.#G.#8.#8.#8.#8.#8.#8.#8QtE.aW.aX.aY.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#JQtK.#8.#8.#8.#8.#8.#8.#8.#8.aZQtJQtJ.a0.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8.#8", +".a1.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a3.a4.a5.a6.a7.a8.a9.a9.a8.a8.b..b#.ba.ba.bb.bc.bd.be.be.bf.bg.bh.bi.bi.bj.bk.bl.bm.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.arQtH.bn.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.#JQtJQtl.a2.a2.a2.a2.a2.#8QtH.bo.bp.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2QtUQtd.a2.a2.a2.a2.a2.a2.a2.a2.bqQtJ.br.#8.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2", +".a1.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.bs.bt.bu.bv.bw.bx.by.bz.bA.bA.bz.bB.bC.bD.bE.bF.bG.bH.bI.bJ.bK.bL.bM.bN.bO.bP.bQ.bR.bS.bT.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.arQtH.bn.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.bU.#6QtU.a2.a2.a2.a2.bV.bW.bXQtq.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.bYQtJ.#k.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2.a2", +".a1.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.b0.b1.b2.b3.b4.b5.b6.b7.b8.b9.c..c..c#.ca.cb.cc.cd.ce.cf.cg.ch.ci.cj.ck.cl.cm.cn.co.cp.cq.cr.cs.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.arQtH.bn.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bW.ct.bZ.bZ.bZQtpQtv.cu.cv.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.cw.cxQtd.bZ.bZ.bZQty.#K.bZ.bZ.bZ.bZ.bZ.bZ.bZQtz.at.cy.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.br.#6QtT.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.a2Qtz.bZ.bZ.a2.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ.bZ", +".cz.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cB.cC.cD.cE.cF.cG.cH.cI.cJ.cK.cL.cM.cM.cN.cO.cP.cQ.cR.cS.cT.cU.cV.cW.cX.cY.cZ.c0.c1.c2.c3.c4.c5.c6.cB.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.c7.c8.c9.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.bZ.#j.bUQtz.#7.d..#F.#JQtU.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cvQtw.cu.bZ.cA.bZ.d#.daQtJ.as.cA.cA.cA.cA.cA.#8.dbQtJQtI.cA.cA.cA.cA.dc.db.ct.ctQtJ.#F.ct.ct.ct.dd.bn.cA.cA.cA.cA.cAQtz.#G.de.#FQtS.df.aWQtF.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA", +".cz.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.dg.dh.di.dj.dk.dl.dm.dn.do.dp.dq.dr.ds.dt.du.dv.dw.dx.dy.dz.dA.dB.dC.dD.dE.dF.dG.dH.dI.dJ.dK.dL.dM.dN.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.c7.c8.c9.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.dOQtKQtJ.da.#F.bo.d#QtT.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.aWQtJ.dP.cA.cA.dQQtG.#jQtJ.c9.cA.cA.cA.cA.cA.c8QtJ.cu.#8.cA.cA.cA.cA.dc.d#QthQtvQtJQth.bnQtTQty.cA.cA.cA.cA.cA.cA.dR.bo.#4.dS.#E.cw.bXQtJ.dT.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA.cA", +".dU.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dW.dX.dY.dZ.d0.d1.d2.d3.d4.d5.d6.d7.d8.d9.e..e#.ea.eb.ec.ed.ee.ef.eg.eh.ei.ej.ek.el.em.en.eo.ep.eq.er.es.dW.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.c7.c8.dR.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.aYQtGQtJQtJ.dO.a2.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.bnQtJ.#6Qte.dV.dP.etQt#.daQt5.cA.dV.dV.dV.dVQtU.euQtJ.ev.dV.dV.dV.dV.dV.dV.dV.dVQtv.#FQtU.dV.dV.dV.dV.dV.dV.dV.dVQtz.bWQtGQtq.dV.dV.dVQt5QtJ.#G.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV", +".ew.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.ex.ey.ez.eA.eB.eC.eD.eE.eF.eG.eH.eI.eJ.eK.eL.eM.eN.eO.eP.eQ.eR.eS.eT.eU.eV.eW.eX.eY.eZ.e0.e1.e2.e3.e4.e5.e6.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.c7.c8.dR.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.e7QtJQtJ.aZ.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dVQthQtJQtK.dV.e8.e9.cA.f..f#Qtl.dV.dV.dV.dV.dV.faQtJ.fb.cA.dV.dV.dV.dV.dV.dV.dV.cA.da.fc.dV.dV.dV.dV.dV.dV.dV.dV.dV.dfQtJ.fd.dV.dV.dV.asQtJ.e9Qtz.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV.dV", +".fe.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.fg.fh.fi.fj.fk.fl.fm.fn.fo.fp.fq.fr.fs.ft.aA.fu.fv.fw.fx.fy.fz.fA.fB.fC.fD.fE.fF.fG.fH.fI.fJ.fK.fL.fM.fN.fO.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.c7.c8.cy.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ffQt6QtJQtw.boQtq.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.dOQtJ.fPQtT.aWQtk.ff.#K.c9.ff.ff.ff.ff.ff.ff.#kQtJ.c8.ff.ff.ff.ff.ff.ff.ff.ffQtxQtJ.fQ.ff.ff.ff.ff.ff.ff.ff.ffQtq.#FQtS.dV.ff.ff.ff.fRQtJ.cy.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff", +".fe.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.fS.fT.fU.fV.fW.fX.fY.fZ.f0.f1.f2.f3.f4.f5.f6.f7.f8.f9.g..g#.ga.gb.gc.gd.ge.gf.gg.gh.gi.gj.gk.gl.gm.gn.go.gp.gq.gr.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.c7.c8.cy.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.awQtJ.dS.#5.fb.aY.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.dO.gs.a2.dT.aZ.ff.ff.ff.ff.ff.ff.ff.ff.ff.ffQtQ.f#Qty.ff.ff.ff.ff.ff.ff.ff.ff.aw.#FQty.ff.ff.ff.ff.ff.ff.ff.ff.aXQtJQtx.ff.ff.ff.bnQtw.br.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff.ff", +".gt.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gv.gw.gx.gy.gz.gA.gB.gC.gD.gE.gF.gG.gH.gI.gJ.gK.gL.gM.gN.gO.gP.gQ.gR.gS.gT.gU.gV.gW.gX.gY.gZ.g0.g1.g2.g3.g4.g5.g6.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.g7.c8.cy.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.bq.da.gu.#7Qtw.bYQtk.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.ax.g8Qth.g9.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.h.QtF.gu.gu.gu.gu.gu.gu.gu.gu.guQtS.bX.gu.gu.gu.gu.gu.gu.gu.guQtTQtw.bX.gu.gu.gu.gu.h#QtJ.dO.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu", +".gt.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.ha.hb.hc.hd.he.hf.hg.hh.hi.hj.hk.hl.hm.hn.ho.hp.hq.hr.hs.ht.hu.hv.hw.hx.hy.hz.hA.hB.hC.hD.hE.hF.hG.hH.hI.hJ.hK.hL.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.g7.c8.cy.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.e9.bY.gu.gu.fQQtwQt5Qty.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.#8.#6Qt6QtGQtk.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.hMQtJQti.gu.gu.gu.gu.gu.gu.gu.guQtkQtwQtI.gu.gu.gu.gu.gu.gu.gu.gu.hNQtJ.dc.gu.gu.gu.fPQtwQtJ.at.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu.gu", +".hO.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hQ.hR.hS.hT.hU.hV.hW.hX.hY.hZ.h0.h1.h2.h3.h4.h5.h6.h7.h8.h9.i..i#.ia.ib.ic.id.ie.if.ig.ih.ii.ij.ik.il.im.in.io.ip.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.g7.c8.hM.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.h..iq.hP.hP.hPQtIQtJ.h.Qtk.hP.hP.hP.hP.hP.hP.hP.hP.hP.#K.cy.hP.hP.hP.hP.hP.cw.#6.e9Qth.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hPQth.fb.gu.hP.hP.hP.hP.hP.hP.hP.hP.bpQtJ.dR.hP.hP.hP.hP.hP.hP.hP.dVQtG.bY.gu.hP.hP.cy.#mQt5.f#.cA.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP", +".hO.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.ir.is.it.iu.iv.iw.ix.iy.iz.iA.iB.iC.iD.iE.iF.iG.iH.iI.iJ.iK.iL.iM.iN.iO.iP.iQ.iR.iS.iT.iU.iV.iW.iX.iY.iZ.i0.i1.i2.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.g7.c8.hM.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hPQtG.aX.hP.hP.hP.hP.cxQtJ.aWQtc.hP.hP.hP.hP.hP.hP.hP.hPQtH.#k.hP.hP.hP.hP.hP.aw.#5.#4.cA.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hPQtS.#J.hP.hP.hP.hP.hP.hP.hP.hP.hP.aX.de.hP.hP.hP.hP.hP.hP.hP.hP.atQtJ.aV.hP.hPQtzQtS.as.#F.d..hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP.hP", +".hO.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i4.i5.i6.i7.i8.i9.j..j#.ja.jb.jc.jd.je.jf.jg.jh.ji.jj.jk.jl.jm.jn.jo.jp.jq.jr.js.jt.ju.jv.jw.jx.jy.jz.jA.jB.jC.jD.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.g7.c8Qtq.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.ffQtw.#H.i3.i3.i3.i3.i3.#lQtw.ctQt#.i3.i3.i3.i3.i3.i3.i3.aV.g8.i3.i3.i3.i3.i3.jEQtJ.aV.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.hMQtJ.cw.i3.i3.i3.i3.i3.i3.i3.i3.hP.gs.et.i3.i3.i3.i3.i3.i3.i3.i3.dfQtJ.aY.i3.hP.fc.#7.cwQtJ.jF.i3.i3.hP.ff.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3", +".hO.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.jG.jH.jI.jJ.jK.jL.jM.jN.jO.jP.jQ.jR.jS.jT.jU.jV.jW.jX.jY.jZ.j0.j1.j2.j3.j4.j5.j6.j7.j8.j9.k..k#.ka.kb.kc.kd.ke.kf.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.g7.c8Qtq.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3QtcQtJ.dO.i3.i3.i3.i3.i3.i3.e8.#6.bo.#E.i3.i3.i3.i3.i3.i3.hN.hN.i3.i3.i3.i3.bZ.#6.f#.a2.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.d#.#6.bZ.i3.i3.i3.i3.i3.i3.i3.i3QtpQtJ.e8.i3.i3.#K.e7.i3.i3.i3.i3.bYQtG.i3.hP.et.kg.i3.awQtJ.cv.i3.hP.hN.bZ.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3.i3", +".hO.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.ki.kj.kk.kl.km.kn.ko.kp.kq.kr.ks.kt.ku.kv.kw.kx.ky.kz.kA.kB.kC.kD.kE.kF.kG.kH.kI.kJ.kK.kL.kM.kN.kO.kP.kQ.kR.kS.kT.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kUQtI.kV.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.asQtJ.aw.kh.kh.kh.kh.kh.kh.kh.cw.#j.#j.kW.kh.kh.kh.kh.kh.bU.ev.kh.kh.kh.khQtIQtJQtF.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.khQt4Qt5.ff.ev.hN.i3.kh.kh.kh.kh.khQtIQtJ.kV.khQt6.df.gu.kh.kh.kh.i3.#6.#m.cA.bq.g9.kh.kh.bUQtJ.as.ff.cx.kV.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh", +".hO.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kX.kY.kZ.k0.k1.k2.k3.k4.k5.k6.k7.k8.k9.l..l#.la.lb.lc.ld.le.lf.lg.lh.li.lj.lk.ll.lm.ln.lo.lp.lq.lr.ls.lt.lu.lv.lw.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kUQtI.kV.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.a0QtJQtF.kh.kh.kh.kh.kh.kh.kh.kh.hMQt5QtJ.etQtU.kh.kh.gu.bWQtc.kh.kh.kh.kh.deQtJ.as.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.cyQtJQtJ.gsQtF.hP.kh.kh.kh.kh.kh.kh.aXQtJ.c8Qtv.#I.kh.kh.kh.kh.khQtzQtJQtJ.gs.dQ.i3.kh.kh.bWQtJQtS.auQty.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh.kh", +".lx.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.lz.lA.lB.lC.lD.lE.lF.lG.lH.lI.lJ.lK.lL.lM.lN.lO.lP.lQ.lR.lS.lT.lU.lV.lW.lX.lY.lZ.l0.l1.l2.l3.l4.l5.l6.l7.l8.l9.m..ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.kUQtI.kV.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.lyQtp.#F.g8.ly.ly.ly.ly.ly.ly.ly.ly.ly.guQtQQtw.f#.#J.#7.db.#k.ly.ly.ly.ly.hPQtw.g8.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.bVQtw.h#Qtl.ly.ly.ly.ly.ly.ly.ly.ly.fcQtJ.bX.bn.ly.ly.ly.ly.ly.ly.ly.br.#4.e8.ly.ly.ly.ly.#7.jE.fQ.kh.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly.ly", +".m#.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.mb.mc.md.me.mf.mg.mh.mi.mj.mk.ml.mm.mn.mo.mp.mq.mr.ms.mt.mu.mv.mw.mx.lW.my.mz.mA.mB.mC.mD.mE.mF.mG.mH.mI.mJ.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.kUQtIQtT.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.maQtT.i3.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.as.df.#4.#4.#G.ma.ma.ma.ma.ma.maQtc.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.maQtU.ma.ma.ma.ma.ma.ma.ma.ma.ma.maQtzQte.ma.ma.ma.ma.ma.ma.ma.ma.ma.hP.ly.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma", +".mK.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.mL.mM.mN.mO.mP.mQ.mR.mS.mT.mU.mV.mW.mX.mY.mZ.m0.m1.m2.m3.m4.m5.m6.m7.m8.m9.n..n#.na.nb.nc.nd.ne.nf.ng.nh.ni.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.kUQtIQtT.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma.ma", +".nj.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nl.nm.nn.no.np.nq.nr.ns.nt.nu.nv.nw.nx.ny.nz.nA.nB.nC.nD.nE.nF.nG.nH.nI.nJ.nK.nL.nM.nN.nO.nP.nQ.nR.nS.nT.nU.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.kUQtIQte.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk", +".nV.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nW.nX.nY.nZ.n0.n1.n2.n3.n4.n5.n6.n7.n8.n9.o..o#.oa.ob.oc.nG.od.oe.of.og.oh.oi.oj.ok.ol.om.on.oo.op.oq.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.kUQtIQte.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk.nk", +".or.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.ot.ou.ov.ow.ox.oy.oz.oA.oB.oC.oD.oE.oF.oG.oH.oI.oJ.oc.oK.od.oL.oM.oN.of.oO.oP.oQ.oR.oS.oT.oU.oV.oW.oX.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.oYQtI.aY.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os", +".or.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.oZ.o0.o1.o2.o3.o4.o5.o6.o7.o8.o9.p..p#.pa.pb.pc.pd.pe.oL.oM.oM.of.oO.pf.pg.ph.pi.pj.pk.pl.pm.pn.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.oYQtI.aY.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.#7.aV.e7.cvQtxQty.os.os.os.os.fP.kg.os.os.os.os.os.os.os.os.os.os.os.d.QtU.os.lyQtT.nk.os.os.os.os.os.os.os.os.os.os.os.bV.#J.os.os.os.os.os.os.nk.aV.aV.e7.kW.hM.os.os.os.os.os.os.os.os.os.osQtd.po.os.os.os.os.os.os.os.os.os.os.osQtd.cA.os.os.os.dR.fR.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.osQtk.bp.d#QtH.dS.hP.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.osQte.i3.os.os.os.kWQtH.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.dS.aV.aV.aV.aV.cw.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.osQtk.e9.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os.os", +".or.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pq.pr.ps.pt.pu.pv.pw.px.py.pz.pA.pB.pC.pD.pE.pF.pd.oK.oK.pG.pH.pH.pI.pJ.pK.pL.pM.pN.pO.pP.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.oYQtI.aY.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.#H.df.cv.e7.aw.d..c8.ly.pp.pp.hM.aZ.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.fQ.gu.ppQtz.pQ.i3.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.bV.dQ.pp.pp.pp.pp.pp.pp.ly.pQQtH.cv.d#.iq.fQ.pp.pp.pp.pp.pp.pp.pp.pp.pp.dV.bp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.jF.#7.pp.pp.ppQtz.#7.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.cw.bX.#G.#K.dc.aw.#H.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.e9.hM.pp.pp.pp.hMQti.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.g8.g9.fQ.fQ.fQ.#K.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.ppQtc.d..pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp", +".or.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pR.pS.pT.pU.pV.pW.pX.pY.pZ.p0.p1.p2.p3.p4.p5.p6.p7.p8.p9.q..q#.qa.qb.qc.qd.qe.qf.qg.qh.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.oYQtI.aY.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.#H.e8.pp.pp.ppQtdQtK.fd.pp.pp.dV.a2.pp.pp.pp.i3.cyQtc.osQty.i3.pp.ppQtc.ma.pp.as.pQQtTQtc.dV.pp.ppQty.asQtq.kh.pp.pp.pp.bV.dQ.pp.pp.pp.pp.pp.pp.ly.pQ.dR.pp.pp.bp.dT.ma.pp.a2.c9.dR.dV.pp.pp.pp.lyQtc.pp.pp.i3Qty.osQtcQt#.pp.pp.pp.cA.dQ.aVQtcQty.pp.i3Qty.pp.pp.guQtz.os.aYQtd.pp.pp.pp.pp.pp.dV.c9Qtz.osQtc.os.pp.pp.pp.pp.pp.pp.pp.pp.pp.ppQty.iqQtp.pp.pp.pp.pp.aY.pp.ppQtc.ma.cA.bn.i3.pp.osQtd.bnQtz.pp.pp.pp.pp.i3.hM.asQtU.pp.pp.ppQtz.e9.bVQtc.a2.pp.dV.a2.pp.guQtz.pp.pp.pp.ppQtz.dV.pp.pp.osQtc.asQtz.pp.pp.pp.pp.pp.pp.pp.pp.g8.bp.pp.pp.pp.pp.ppQtc.ly.cA.bn.i3.pp.osQtc.asQtz.pp.pp.pp.pp.pp.bZ.c9.aY.os.pp.pp.pp.pp.a2.c9.bZQtc.d..pp.pp.pp.ppQty.asQtz.pp.pp.pp.osQtc.os.#8.cy.ly.pp.osQt#Qtz.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp.pp", +".qi.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qk.ql.qm.qn.qo.qp.qq.qr.qs.qt.qu.qv.qw.qx.qy.qz.qA.qB.qC.qD.qE.qF.qG.qH.qI.qJ.qK.qL.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.oY.#GQt#.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qjQtF.e8.qj.qj.qj.qj.a0.d..pp.qj.fP.dP.qj.qjQty.dd.dd.qM.d#.dd.dR.qj.qj.pQQtz.pp.g9.pQ.dO.df.aZ.qjQt6.et.d#.dd.ddQtU.qj.qj.bV.dO.qj.qj.qj.qj.qj.qj.ma.pQ.dR.qj.qjQtE.pQ.dV.aZ.dd.aw.bq.bX.#E.qj.qjQty.dT.qj.qjQtp.aX.#k.av.h#QtF.i3.qj.a0.fc.au.df.#k.qj.dR.aX.qj.qj.dS.g9.dO.bq.e9.dO.pp.qj.qj.#E.d..#H.ddQtR.pQ.hP.qj.qj.qj.qj.qj.qj.qj.qj.qj.qjQtR.g9.qj.qj.qj.qj.qj.qj.qj.qj.iq.aV.e9QtQQtc.khQtQ.bX.df.iq.fd.qj.qj.bZ.fc.#J.dO.iq.fd.qj.qj.#l.dT.#H.df.#I.qj.kW.kg.qjQtk.bX.kh.qj.qj.nk.e9.hM.qj.gu.dO.e9.dO.iq.e8.qj.qj.qj.qj.qj.qj.qj.g9.bp.qj.qj.qj.qj.pp.pQ.e7.e9QtQQty.hP.#J.po.df.iq.bp.qj.qj.qj.cv.dT.dQ.h#.g9.i3.qj.qjQtx.dT.g8QtKQt6.d..qj.qj.nk.cx.dT.g9.dTQt6.qj.qj.dV.pQ.ev.dd.aXQtKQtz.g8.#H.bX.#G.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj", +".qN.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qO.qP.qQ.qR.qS.qT.qU.qV.qW.qX.qY.qZ.q0.q1.q2.q3.q4.q5.q6.q7.q8.q9.r..r#.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.oY.#GQt#.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qjQtF.e8.qj.qj.qj.qjQte.pQ.#8.qj.fP.dP.qj.qj.jF.dP.nk.qj.#7.pQ.dR.qj.qj.pQQtz.qj.#8.pQ.kh.qj.qj.qj.gu.qj.qj.qj.kg.dP.qj.qj.bV.dO.qj.qj.qj.qj.qj.qj.ma.pQ.dR.qj.cAQtQ.aX.qj.i3.pp.qj.qj.a0Qtv.qj.qjQty.dT.qj.qjQtp.pQ.f..qj.nk.bqQtp.qj.qj.jF.#7.qj.qj.qj.dR.aX.qj.qj.dS.pQ.bn.qj.maQtKQte.qj.ma.bU.fa.qj.nkQth.pQ.hP.qj.qj.qj.qj.qj.qj.qj.qj.qj.qjQtQQtR.qj.qj.qj.qj.qj.qj.qj.qj.iq.df.kh.qj.qj.aV.dO.ma.qj.dV.d.QtT.qj.ma.ly.qj.qjQty.dTQtU.qj.qj.e9Qtq.qj.qj.qj.kW.kg.qj.qj.#H.at.qj.qjQtlQtv.pp.qj.#GQtQ.nk.qj.#8.dTQt#.qj.qj.qj.qj.qj.qj.g9.et.kg.kg.kgQt#.pp.pQQtQ.kh.qj.qj.#l.#J.nk.qj.bZ.iq.aY.qj.cy.d..#8.qj.nk.dO.fd.qj.i3.e9.bV.qj.kh.dQ.d..qj.qj.dcQtK.#8.qjQtk.dTQtE.qj.dV.pQ.#G.pp.pp.dO.d..dR.qj.bZ.dT.i3.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj.qj", +".ra.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rc.rd.re.rf.rg.rh.ri.rj.rk.rl.rm.rn.ro.rp.rq.rr.rs.rt.ru.rv.rw.rx.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.ry.#GQtc.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rbQtF.cv.rb.rb.rb.rbQtU.pQQtc.rb.fa.dP.rb.qj.iq.#E.rb.rb.gu.pQ.dR.rb.rb.pQ.#8.rb.a2.pQ.ly.rb.rb.rb.rb.bZQtx.#I.cx.et.rb.rb.#K.dO.rb.rb.rb.rb.rb.rb.nk.pQ.fc.bU.dT.fR.aY.rb.rb.i3.#E.#IQtR.pQ.ly.rbQty.dT.rb.rbQtE.bX.nk.rb.rb.e7Qt6.rb.rb.jF.dS.rb.rb.rb.cy.au.rb.rb.dS.aX.qj.rb.rb.#k.kW.rbQt#.pQ.ff.rb.rb.bn.pQ.i3.rb.rb.rb.rb.rb.rb.rb.rb.rb.rbQtF.fQ.rb.rb.rb.rb.rb.rb.rb.rb.iq.at.rb.rb.rb.h#.e8.aY.aY.aY.g8.kW.rb.rb.nk.kV.kW.bp.fcQtE.rb.rb.e9.kV.rb.rb.rb.kW.kg.rb.rb.f..dQ.rb.rb.jF.#I.rb.rb.po.fa.aY.aY.aY.bq.a0.rb.rb.rb.rb.rb.rb.g9QtQ.dc.dc.dc.bZ.qj.pQQtx.rb.rb.rb.e9.kW.aY.aY.aY.#H.#7.rb.#l.df.aY.aY.aY.fdQtF.rb.c9.iq.nk.rb.rb.f..d..rb.rb.hNQth.rb.rb.rb.df.#G.rb.ff.pQ.aY.rb.rb.cv.aX.rb.rb.rb.aX.bn.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb", +".rz.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rA.rB.rC.rD.rE.rF.rG.rH.rI.rJ.rK.rL.rM.rN.rO.rP.rQ.rR.rS.rT.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.ry.#GQtc.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rbQtF.cv.rb.rb.rb.rb.as.pQ.ly.rb.fa.dP.rb.i3.pQQty.rb.rb.rb.e9.dR.rb.rb.pQ.#8.rb.a2.pQ.ly.rb.rb.rb.#I.fR.e7.f.Qt6.dd.rb.rb.#K.dO.rb.rb.rb.rb.rb.rb.nk.pQ.#K.#8.i3.rb.rb.rb.bnQtK.#l.a0.#7.pQ.dV.rbQty.dT.rb.rbQtE.fR.rb.rb.rb.cv.kg.rb.rb.jF.dS.rb.rb.rb.cy.au.rb.rb.dSQtQ.rb.rb.rb.#l.fQ.rb.dR.po.qj.rb.rbQtz.pQ.i3.rb.rb.rb.rb.rb.rb.rb.rb.rb.rbQth.kg.rb.rb.rb.rb.rb.rb.rb.rb.iqQt#.rb.rb.os.pQ.dO.cx.cx.cx.cx.at.rb.hP.e9.kg.kW.bV.ddQtx.rb.rb.e9.kV.rb.rb.rb.kW.kg.rb.rb.i3.iq.#8.ff.dT.#8.rb.kh.pQ.df.cx.cx.cx.cx.aZ.rb.rb.rb.rb.rb.rb.g9.#I.rb.rb.rb.rb.qj.pQQtd.rb.rb.ly.pQ.df.cx.cx.cx.cxQtx.rb.jF.av.cx.cx.cx.cx.#G.rb.#K.fR.rb.rb.rb.kV.d..rb.rb.#H.fa.rb.rb.rb.e7.d#.rb.ff.pQ.i3.rb.rb.a0QtQ.rb.rb.rb.bqQti.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb.rb", +".rU.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rW.rX.rY.rZ.r0.r1.r2.r3.r4.r5.r6.r7.r8.r9.s..rW.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.ry.#GQtk.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rVQtF.cv.rV.rV.rV.rVQtQ.g9.rV.rV.fa.dP.rV.rV.fc.at.rV.rVQtU.pQ.cy.rV.rV.pQ.#8.rV.ff.pQ.ma.rV.rV.os.e9Qtk.rV.rV.ev.dd.rV.rV.#K.dO.rV.rV.rV.rV.rV.rV.os.pQ.hM.rV.rV.rV.rV.rV.df.cw.rV.rVQtE.pQ.ff.rVQtU.dT.rV.rVQtE.et.rV.rV.rV.kWQth.rV.rV.d#.fa.rV.rV.rV.hM.au.rV.rV.a0QtQ.rV.rV.rVQt6.fQ.rV.#8.pQQtd.rV.rVQtx.pQ.kh.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.#K.e9.i3.rV.rV.rV.rV.rb.rV.rV.iqQtk.rV.rV.rV.dd.fP.rV.rV.rV.rV.rV.rV.fP.d#.rV.rV.i3.iqQtx.rV.rV.h#Qtq.rV.rV.rV.fPQth.rV.rV.rV.cx.#I.#7.dO.rV.rV.rV.fc.a0.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.g9.#I.rV.rV.rV.rV.rb.pQQtU.rV.rV.rVQtK.dS.rV.rV.rV.rV.rV.rVQtR.g8.rV.rV.rV.rV.rV.rV.hM.dT.kh.rV.rV.fa.d..rV.rV.d#.#k.rV.rV.rVQtFQtR.rV.gu.pQ.i3.rV.rV.dcQtQ.rV.rV.rV.qMQti.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV", +".rU.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.s#.sa.sb.sc.sd.se.sf.sg.sh.si.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.ry.#GQtk.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rVQtF.bp.ma.dV.kV.aw.bXQty.rV.rV.fa.dP.rV.rV.ev.et.hMQty.d#.d..cy.rV.rV.pQ.#8.rV.rV.dd.as.rb.rV.qj.bU.bn.rVQt#.dd.dd.rV.rV.#K.dO.rV.rV.rV.rV.rV.rV.os.pQ.hM.rV.rV.rV.rV.rV.aw.bp.rV.bZ.dO.pQ.ff.rVQtU.dT.rV.rVQtE.et.rV.rV.rV.kWQth.rV.rV.#7.cx.ma.rV.rV.hM.au.rV.rV.a0QtQ.rV.rV.rVQt6.fQ.rV.rV.dQ.jFQty.hMQtF.pQ.kh.rV.osQtIQtU.rV.rV.rV.rV.rV.rV.rbQtF.dO.#8.rV.pp.kV.#k.rV.rV.iqQtk.rV.rV.rV.kW.aX.aY.rb.rV.a2.cA.rV.dc.g9.pp.ly.e7.dTQtx.rV.rV.#k.cv.pp.rV.rV.fPQth.rV.rV.rV.bn.dd.et.#K.rV.rV.rV.bp.avQt#.rV.rV.#8.gu.rV.rV.rV.rV.rV.rV.g9.#I.rV.rV.rV.rV.rb.pQQtU.rV.rV.rV.#I.au.aY.rb.rV.#8.ff.rVQtk.dTQtx.os.rV.maQtc.rV.os.bU.bp.osQtz.bq.d..rV.rVQtp.e9.hM.rbQtE.dTQtT.rV.gu.pQ.i3.rV.rV.dcQtQ.rV.rV.rV.qMQti.rV.rV.#I.bn.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV.rV", +".rU.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.ry.#GQtk.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sjQtF.pQ.pQQtKQtF.e7.gu.sj.sj.sj.#7.kg.sj.sj.ppQt6QtK.et.aZ.fc.aY.sj.sj.pQ.a2.sj.sj.aZ.g9.dT.fP.sjQtx.bU.bUQtv.#7.dd.sj.sjQtx.dO.sj.sj.sj.sj.sj.sj.pp.pQ.hM.sj.sj.sj.sj.sj.aY.et.h#.e9.#K.pQ.gu.sjQtz.dT.sj.sj.#E.et.sj.sj.sj.kWQth.sj.sj.cA.#k.fc.dd.sjQtq.au.sj.sj.a0QtQ.sj.sj.sjQt6.bp.sj.sj.gu.hN.e9.g9Qti.dT.qj.sj.ma.pQQtq.sj.sj.sj.sj.sj.sj.sj.nkQtR.po.fc.d..dd.aZ.sj.sj.iqQtd.sj.sj.sj.qj.fQ.d..bU.dd.aXQtd.sj.lyQtQ.e9.e9.evQtF.aZ.sj.sjQtTQtQ.d..cx.sj.fPQth.sj.sj.sj.rb.h#.bX.ma.sj.sj.sj.pp.e7.dT.dd.bU.avQtz.sj.sj.sj.sj.sj.sj.g9.e8.sj.sj.sj.sj.rV.pQQtU.sj.sj.sj.pp.fd.iq.dd.bU.auQtU.sj.sj.#E.bU.bX.avQtK.f..sj.sjQtTQtK.e9.e9.dS.d..sj.sj.rV.#I.dT.fc.bX.f..sj.sj.hP.pQ.kh.sj.sj.dcQtQ.sj.sj.sj.qMQtl.sj.sj.et.kW.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj.sj", +".rU.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sl.#GQtd.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.skQte.pQ.hP.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.rV.hP.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.gu.rV.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.a0Qtv.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sj.ff.kh.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.rV.cA.kh.sk.sk.sk.sk.sk.kh.qj.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.rb.cA.kh.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.rV.cA.kh.sk.sk.sk.sk.sk.sk.hP.ff.sj.sk.sk.sk.sk.sj.ff.rV.sk.sk.sk.sk.sk.sk.rb.dV.rV.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk", +".rU.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sl.#GQtd.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.#8.fa.hM.fa.fRQtH.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.c9.at.cy.fdQtK.cw.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk.sk", +".sm.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sl.#GQty.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.ly.#I.dPQtI.#K.sk.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.snQtz.e7.#kQt6.dR.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn", +".sm.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sl.#GQty.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn.sn", +".smQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtg.sl.#lQtUQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtg", +".smQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtg.sl.#lQtUQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtgQtg", +".soQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtD.kU.bn.i3QtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtD", +".soQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtDQtD", +".sp.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar", +".sq.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar.ar", +".sr.ss.ss.st.su.st.su.su.su.su.sv.su.sw.sv.sx.sy.sx.sw.sx.sx.su.su.su.su.st.sz.su.sx.sx.sx.sx.sx.sx.sx.sy.sy.sA.sA.sB.sB.sC.sC.sD.sD.sD.sE.sE.sE.sD.sF.sF.sF.sF.sG.sG.sG.sH.sH.sI.sI.sJ.sJ.sJ.sJ.sJ.sJ.sJ.sJ.sK.sI.sL.sL.sL.sL.sM.sH.sM.sG.sN.sN.sO.sP.sP.sQ.sQ.sR.sS.sS.sT.sT.sT.sU.sT.sN.sV.sV.sV.sV.sR.sR.sQ.sR.sQ.sW.sX.sX.sX.sY.sY.sZ.s0.sZ.sZ.s1.sJ.s2.s3.s4.s5.s6.s7.s3.s3.s8.s9.t..t..t#.t#.ta.tb.tb.ta.tc.td.t..td.te.ta.ta.tb.tb.tc.tf.s6.s6.tg.tg.tg.tg.s6.th.ti.tj.tk.tl.tm.tn.to.tp.ti.tq.tr.tr.to.tr.ts.ts.tt.tu.tt.tv.tv.tw.tx.tx.tx.tx.ty.tz.tA.tB.tB.tC.tD.tE.tF.tC.tG.tH.tI.tJ.tK.tL.tM.tN.tO.tP.tQ.tR.tS.tT.tU.tV.tW.tX.tY.tZ.t0.t1.t2.t3.t4.t5.t6.t7.t8.t9.u..u#.ua.ub.ub.ub.ub.uc.ud.tE.ue.uf.ug.uh.ui.uj.uk.ul.um.un.uo.up.uq.ur.ur.ur.us.us.ut.uu.ut.ut.uo.uo.uv.uv.uw.un.uv.ux.uw.uy.uz.uy.uy.uy.uA.uy.uw.uw.uw.uB.uA.uw.uA.uw.uw.uo.uo.uw.uo.uv.uv.uv.uC.uv.uC.uC.uC.uv.ux.uD.ut.ut.uE.uC.uF.uC.uC.uC.uC.uC.uC.uy.uB.uy.uG.uG.uE.uF.uC.uG.uy.uH.uI.uJ.uH.uH.uI.uK.uK.uI.uK.uK.uL.uJ.uM.uN.uO.uP.uQ.uR.uS.uT.uU.uV.uW.uX.uY.uZ.u0.u1.u2.u3.u4.u5.u6.u7.u8.u9.v..v#.va.vb.vc.vd.ve.vf.vg.vh.vi.vj.vk.vl.vm.vn.vo.vp.vq.vr.vs.vt.vu.vv.vw.vx.vy.vz.vA.vB.vC.vD.vE.vF.vG.vH.vI.vJ.vK.vL.vM.vN.vO.vP.vQ.vR.vS.vT.vU.vV.vW.vX.vY.vZ.v0.v1.v2.v3.v4.v5.v6.v7.v8.v9.w..uD.w#.wa.wb.wc.wd.we.wa.wa.wf.wb.wa.wg.wh.wi.wj.wk.wl.wm.wn.wn.wo.wo.wp.wq.wr.ws", +".wt.wt.wu.wt.wt.wt.wt.wv.ww.ww.ww.ww.ww.ww.ww.wx.ww.ww.wy.ww.ww.wy.wy.wy.wx.ww.ww.ww.wy.ww.wv.wy.wz.wA.wA.wB.wB.wA.ss.wC.wD.st.wE.sx.wF.wG.wF.wH.wH.wH.wI.wJ.wJ.wJ.wI.wK.wJ.wL.wM.wM.sQ.sQ.sQ.sY.sS.sY.sY.sQ.sQ.sS.sS.sS.sP.sP.wN.wL.sV.sV.sV.sV.wM.wO.sP.sP.sV.wM.sV.sV.sN.sN.wP.sO.sR.sR.sR.sR.sQ.sQ.wM.sV.sV.wM.sW.wQ.sQ.sW.sX.sY.sY.wR.wS.wT.sX.s0.wU.wV.wW.s5.sJ.sJ.s5.s5.s5.wX.s2.s2.wY.wZ.w0.wX.wX.wX.wX.wX.w0.w1.w1.wY.wY.w1.w1.w2.wY.w3.w3.wY.w4.w1.w4.w4.wY.w5.tp.tw.tx.tx.w5.w6.w7.w6.tp.tw.w6.tn.ts.tn.tn.w8.w9.x..x#.ts.xa.xa.w6.w6.w6.w7.xb.xc.xd.tG.xe.xe.xf.xg.tF.tC.tI.xh.xi.xj.xk.xl.xm.xn.xo.xp.xq.xr.xs.xt.xu.xv.xw.xx.xy.xz.xA.xB.xC.xD.xE.xF.xG.xH.xI.xJ.xK.xL.wI.xM.xN.ub.xO.ub.xP.xQ.xR.xS.xT.xU.xV.uk.um.un.un.uF.xW.xW.ur.uq.uq.uq.xX.uq.uq.xX.xX.xW.ut.ut.ut.ut.uC.uF.uF.ut.uC.xY.uo.uo.uv.uo.uo.uo.uF.uo.uF.uv.uv.uC.uv.uF.uC.uC.uC.uC.uF.xW.xW.xW.xW.xW.xW.xW.xW.xW.ut.uu.ut.ut.uu.uu.ut.ut.ut.uu.uu.ut.uC.uC.uC.uC.uy.uC.ut.uC.uC.uG.uy.uz.uK.xZ.uJ.uH.uH.uJ.uK.uK.uK.uK.x0.x1.x2.x3.x4.x5.x6.x7.x8.x9.y..y#.ya.yb.yc.yd.ye.yf.yg.yh.yi.yj.yk.yl.ym.yn.yo.yp.yq.yr.ys.yt.yu.yv.yw.yx.yy.yz.yA.yB.yC.yD.yE.yF.yG.yH.yI.yJ.yK.yL.yM.yN.yO.yP.yQ.yR.yS.yT.yU.yV.yW.yX.yY.yZ.yZ.y0.y1.y2.y3.y4.y5.y6.y7.y8.y9.z..z#.za.zb.zc.zd.ze.zf.zg.zh.zi.zj.zk.zl.zm.zn.uD.zo.zp.zq.zr.w#.wd.zs.zs.zt.zt.wc.zu.wb.wa.zv.zw.zx.zy.zz.zA.zB.zC.zD.zE.zF.zw", +".zG.zG.zG.zH.zH.zH.zH.zH.zI.zH.zJ.zK.zL.zM.zK.zK.zK.zM.zK.zK.zK.zK.zK.zK.zM.zN.zN.zJ.zK.zN.zN.wu.wt.wt.wu.wt.wt.wu.wt.wt.ww.wx.wx.wx.zO.zP.sr.uq.uq.zQ.zR.zR.zR.zS.ur.zT.sw.zU.zU.zV.zV.zV.zW.zW.zW.zX.zW.zY.zV.zZ.zZ.zY.zZ.z0.z1.z2.z2.z3.z4.z5.z5.z6.wK.z7.z7.z7.z8.z8.z7.z7.sV.sR.sO.sP.wM.wN.wN.sW.sW.sW.sQ.wN.wN.wN.sW.z9.sW.sW.z9.A..A..A..A..A..s0.A#.Aa.wU.s0.s0.Ab.sK.wV.Ac.wV.wV.Aa.wU.Ad.sI.sI.sI.sJ.wW.sJ.sJ.sI.Ae.Af.Ad.Ag.Af.Ag.Ag.Ah.Ag.Ai.Aj.Ai.Ai.Aj.Ak.Al.w6.Ak.Ak.w8.Ak.Ak.w8.w6.Am.Am.An.Ao.Ao.Ao.Ao.Ao.Ap.Ao.Ap.Aq.Aq.Ar.Aq.xc.Aq.xc.As.At.tE.tE.Au.xg.xg.xe.Av.Aw.xi.Ax.Ay.Az.AA.AB.AC.AD.AE.AF.AG.AH.AI.AJ.AK.AL.AM.AN.AO.AP.AQ.AR.AS.AT.AU.AV.AW.AX.AY.AZ.A0.uw.A1.xM.ub.A2.ub.A3.xP.A4.A5.A6.xV.A7.A8.un.A9.xW.xW.uq.ur.uq.xX.xX.xX.xX.xX.uq.uq.uq.uq.uq.uq.uq.xX.ut.uC.uF.xW.uC.uC.xW.xW.ut.xW.xW.xW.xW.xW.xW.ut.ut.uu.uu.ut.uu.uu.uu.ut.xW.xW.xW.xW.xW.xW.xW.xW.xW.xW.ut.ut.ut.ut.ut.uu.ut.ut.xW.ut.ut.xW.xW.xW.ut.ux.ux.uH.uz.uv.uG.uG.ux.uC.B..xZ.uK.uJ.uI.uI.uK.uK.uJ.uL.uK.B#.Ba.Bb.Bc.Bd.Be.Bf.Bg.Bh.Bi.Bj.Bk.Bl.Bm.Bn.Bo.Bp.Bq.Br.Bs.Bt.Bu.Bv.Bw.Bx.By.Bz.BA.BB.BC.BD.BE.BF.BG.BH.BI.BJ.BK.BL.BM.BN.BO.BP.BQ.BR.BS.BT.BU.BV.BW.yO.BX.BY.BZ.B0.B1.B2.yU.B2.B3.B4.B5.B6.B7.B8.B9.C..C#.Ca.Cb.Cc.Cd.Ce.Cf.Cg.Ch.Ci.Cj.Ck.Cl.Cm.Cn.Co.Cp.Cq.Cr.Cs.Ct.Cu.Cv.Cv.Cv.Cv.Cv.zp.zr.zr.Cw.zr.Cx.Cy.Cz.Cw.CA.wc.CB.wf.CC.CD.CE.CF.CG.CG.CE.CD.wg.CC", +".zL.CH.CI.CI.CJ.CI.CI.CJ.CJ.CI.CJ.CJ.CJ.CJ.CJ.CJ.zG.zG.zG.zG.zG.zG.zG.zM.zM.zG.zM.zG.zG.zH.zG.zJ.wu.zJ.zM.zM.zM.CK.CK.zM.CK.CL.CL.CL.CL.CM.CN.CN.CO.CO.CO.CO.CO.CO.CP.CQ.CQ.up.us.zT.ur.ur.CR.CS.CT.CR.CR.CR.ur.CU.CU.CU.CV.CP.uq.CW.CQ.CU.CT.CX.z1.z1.z0.wJ.wK.wK.wK.wK.wO.wK.z6.z6.wM.CY.CZ.CZ.wN.wM.wN.wN.wM.wN.wN.C0.C1.C2.C3.C3.wQ.wQ.C4.sX.z9.wQ.sW.z9.C5.s0.z9.C3.A..s0.s0.z9.C6.C7.C8.C9.D..C9.C7.sS.sS.C5.sS.sS.sS.wU.C5.C7.C7.sU.wP.wP.D#.Da.D#.D#.Db.D#.C9.C9.D#.C9.C7.Dc.Dd.De.De.De.Ap.Df.An.Df.Dd.Dg.Dg.Ap.Ap.Dd.Ap.Dh.Dh.Ar.Di.Dj.Dk.Dl.Dm.Dn.Do.Do.tE.Dp.xg.tC.xe.Dq.Dr.Ds.Dt.Du.Dv.Dw.Dx.Dy.Dz.DA.DB.DC.DD.DE.DF.DG.DH.DI.DJ.DK.DL.DM.DN.DO.DP.DQ.DR.DS.DT.DU.DV.DW.DX.DY.DZ.D0.ub.sv.D0.D1.xP.D2.D2.D3.um.um.A9.zT.xW.uq.ur.uq.uq.xX.xX.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.xW.xW.xW.xW.xW.xW.uF.uF.ut.ut.xW.xW.xW.xW.xW.xW.ut.uu.uu.ut.ut.ut.ut.xW.xW.xW.xW.xW.xW.xW.xW.xW.xW.ut.ut.ut.ut.ut.ut.ut.xW.xW.up.xW.xW.ut.ut.ut.uv.D4.uL.D4.uH.uy.uC.uC.uC.uz.B..B..B#.uK.uK.D5.uK.uH.uH.D6.D5.D7.D8.D9.E..E#.Ea.Eb.Ec.Ed.Ee.Ef.Eg.Eh.Ei.Ej.Ek.El.Em.En.Eo.Ep.Eq.Er.Es.Et.Eu.Ev.Ew.Ex.Ey.Ez.EA.EB.EC.ED.EE.EF.EG.BL.EH.EI.EJ.EK.EL.EM.EN.EO.EP.EQ.ER.ES.ET.EU.EV.EW.EX.EY.EZ.E0.E1.E2.yU.E3.E4.E5.E6.E7.E8.E9.F..BA.F#.Fa.Fb.Fc.Fd.Fe.Ff.Fg.Fh.Fi.Fj.Fk.Fl.Fm.Fn.Fo.Fp.uD.Cv.Cv.Fq.zo.zp.Fr.zo.Fs.Fs.Ft.Ft.Ft.zo.Fr.zr.w#.zt.zs.Fu.wf.Fv.CC.CC.wf.wf.Fu.Fw", +".CH.CH.CH.zL.zL.CH.CI.CH.CH.Fx.Fx.Fx.Fx.CH.CH.CH.CH.CH.Fy.Fy.Fy.Fy.Fy.Fy.Fy.Fy.Fy.Fy.zL.zL.zL.zL.zK.zK.zN.zN.wt.Fz.zK.zK.zK.Fz.Fz.FA.Fz.FA.FB.FB.FC.zP.zP.zR.zR.CO.CO.zP.CP.CQ.uq.CR.CR.CU.CV.CV.CU.CV.CV.CU.CU.CU.CP.CP.CQ.uq.CQ.zR.CP.FD.CU.z1.FE.z1.FF.z2.FG.z6.wJ.zV.zZ.zY.z3.z3.z0.zY.wK.FH.wL.wM.wM.wL.FI.FJ.C0.C1.CY.z9.C2.wQ.FK.FK.wQ.sW.wQ.FL.FM.FK.FK.FN.C1.C1.C1.C3.sW.sW.wQ.C2.FO.C8.FP.C8.FO.FQ.FR.CY.FQ.FR.FR.FR.sT.D#.C8.FS.FT.FP.C8.FU.Dc.FO.C8.C8.FP.FP.FP.FV.FW.FX.FY.FZ.C8.FX.FU.FU.FZ.Di.F0.F1.F1.F1.F0.F0.F0.FZ.FZ.F2.F3.F4.F5.F6.F7.tI.Do.Do.tC.tC.tC.xg.F8.F9.G..G#.Ga.Gb.Gc.Gd.Ge.Gf.Gg.Gh.Gi.Gj.Gk.Gl.Gm.Gn.Go.Gp.Gq.Gr.Gs.Gt.Gu.Gv.Gw.Gx.Gy.Gz.GA.GB.GC.GD.GE.GF.ub.ub.GG.sv.sv.ub.uk.GH.GI.GJ.um.A9.A9.xW.uq.ur.ur.uq.xX.zO.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.xW.xW.uF.uF.uF.ut.uu.uu.ut.xW.uC.uC.uF.xW.ut.uC.xW.xW.uF.xW.xW.xW.xW.xW.ut.ut.xW.xW.xW.xW.xW.xW.xW.uu.uu.uu.xY.up.up.xW.up.up.xY.uD.ux.uv.uv.uC.uz.uz.uw.uv.uC.uy.uC.uy.GK.GL.GL.GK.uH.uG.uC.uG.D6.GM.GN.GO.GP.GQ.GR.GS.GT.GU.GV.GW.GX.GY.GZ.G0.G1.G2.G3.G4.G5.G6.G7.G8.G9.H..H#.Ha.Hb.Hc.Hd.He.Hf.Hg.Hh.Hi.Hj.Hk.Hl.Hm.BL.Hn.Ho.Hp.Hq.Hr.Hs.Ht.Hu.Hv.Hw.Hx.Hy.Hz.HA.HB.HC.HD.HE.HF.HG.HH.HI.HJ.HK.HL.HM.HN.HO.HP.HQ.HR.HS.HT.HU.HV.HW.HX.HY.HZ.H0.H1.H2.H3.H4.H5.H6.H7.H8.Fq.Ft.uD.uD.Fs.zo.zo.Ft.Ft.H9.uD.uD.uD.uD.uD.Ft.Ft.zo.zp.I..I#.Ia.Ib.Ic.Ic.Ib.Ib.Id.Ia", +".Ie.Ie.Ie.CH.CH.CH.CH.CH.CH.CI.CI.If.Ig.If.CI.Fy.Fy.CH.CH.CH.CH.CH.CH.CH.CH.CH.CH.CH.CH.Fy.Fy.Fy.Fy.Fy.zL.zN.zI.zN.zK.Fz.zK.zK.Fz.Fz.Fz.Fz.FA.FB.FB.FC.FC.zP.zP.zR.zP.zP.zP.zP.zR.zR.zR.zR.zR.CV.CV.CV.zR.zR.zR.zR.ur.ur.ur.ur.zP.Ih.Ih.Ii.Ii.Ij.Ik.Il.FF.FF.FF.z0.z0.FG.z6.wJ.z6.z6.wJ.wJ.wK.Im.wK.wK.wK.wO.C2.C1.zX.CY.FJ.In.Io.Ip.Ip.Ip.Ip.Ip.FL.Iq.Iq.Ir.Is.Ir.Ip.It.Iu.C1.C1.Iv.Ip.wQ.C1.C0.C0.C1.FJ.Iw.FJ.C1.C0.FJ.FJ.Iw.C2.Iw.Ix.Iy.Iy.Iz.Iy.Ix.uj.Ix.Iy.IA.Ix.Ix.Iy.A3.IB.A3.IC.ID.uj.uj.ID.IE.IE.FZ.FZ.FZ.FZ.IF.IG.IH.IG.IG.IE.IG.IH.II.IJ.IJ.IK.IL.tG.tG.tC.IM.Do.IN.IO.IP.IQ.IR.IS.IT.IU.IV.IW.IX.IY.IZ.I0.I1.I2.I3.I4.I5.tE.I6.I7.I8.I9.J..J#.Ja.Jb.Jc.Jd.Je.Jf.Jg.Jh.Ji.Jj.Jk.Jl.ub.GG.A9.sv.xO.A3.Iy.Jm.Jn.Jo.zT.xW.xX.ur.ur.ur.uq.uq.xX.xX.xX.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.xW.xW.uF.uF.uF.ut.ut.ut.ut.uF.uC.ut.xW.xW.uC.uC.xW.xW.uF.xW.xW.xW.xW.xW.uu.uu.ut.xW.xW.xW.up.xW.xW.ut.uD.H9.uD.xY.up.xW.xW.up.uD.H9.uC.uE.uE.uE.uC.uC.uy.uG.Jp.Jp.Jp.Jq.Jp.Jr.Jq.Jq.Jq.uC.uG.D6.Js.Jt.uJ.Ju.Jv.Jw.Jx.Jy.Jz.JA.JB.JC.JD.JE.JF.JG.JH.JI.JJ.JK.JL.JM.JN.JO.Ep.JP.JQ.JR.JS.JT.JU.JV.JW.JX.JY.JZ.J0.J1.J2.BL.J3.J4.J5.J6.J7.J8.J9.K..K#.Ka.Kb.Kc.Kd.Ke.Kf.Kg.Kh.Ki.Kj.Kk.y2.Kl.Km.Kn.Ko.Kp.Kq.Kr.Ks.Kt.Ku.Kv.Kw.HS.Kx.Ky.Kz.KA.KB.KC.KD.KE.KF.KG.KH.KI.KJ.KK.KL.uD.Ft.uD.uD.Cv.Fs.Ft.uD.uD.uu.ut.xX.xX.uu.ut.zO.uD.Ft.Ft.zo.zp.KM.I#.zt.KN.KO.KN.I#.KN", +".KP.KP.KP.KP.KP.KP.KP.KP.Fy.CH.CH.CH.Fx.KQ.Fx.CI.zL.zL.zL.zL.zL.zL.Fy.Fy.Fy.CH.Fy.Fy.CH.CH.Fy.KR.KR.KR.KR.zL.zI.zI.zN.zK.Fz.zL.zK.Fz.Fz.zK.Fz.FA.FB.FB.FC.FC.FC.zP.zR.zR.zP.zP.zP.zR.zR.CV.CV.zR.zR.CV.CV.CV.zR.uq.uq.uq.CV.KS.KS.KS.Ih.Ih.FF.Ii.Ij.FF.FF.Il.FF.FF.FF.KT.FG.FG.FG.FG.FG.zY.zZ.z6.wJ.wJ.wJ.zW.C1.C1.C0.C2.KU.Io.Io.Io.wQ.Ir.KV.Iq.Is.KW.KW.Iq.Is.Iq.Is.C0.KX.KX.It.It.It.Iv.It.KY.KZ.KZ.KZ.K0.K0.Iu.Iu.KZ.C0.FJ.K1.K1.K2.Jm.ul.K3.K4.K5.IA.Jm.Iy.Jm.Jm.Jm.Jm.Jm.K6.ul.ul.Jm.uk.K7.K8.IC.uk.uk.GH.GH.K7.IG.IG.K9.L..L#.K7.xV.L..La.ug.IJ.uf.xi.tI.tG.IN.tC.tI.xi.Dr.Lb.Lc.Ld.Le.Lf.Lg.Lh.Li.Lj.Lk.Ll.Lm.Ln.Lo.Lp.Lq.xe.tC.xg.Lr.Ls.Lt.Lu.Lv.Lw.Lx.Ly.Lz.LA.LB.LC.LD.LE.LF.LG.LH.A1.A3.sv.D0.xO.sv.A3.K4.LI.un.zT.ur.uq.ur.ur.ur.ur.uq.uq.uq.xX.xX.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.xW.xW.uF.ut.ut.uF.uF.uF.uF.xW.xW.xW.uF.xW.xW.xW.uF.xW.xW.xW.xW.xW.ut.uu.ut.up.up.xW.xW.up.up.up.xY.LJ.uu.st.xW.xW.xW.xW.uu.wA.ss.st.ss.Jr.uC.uA.uy.uy.Jp.Jq.Jr.Jr.Jq.Jr.Jq.Jq.uG.GK.D6.LH.LK.LL.LM.LN.LO.LP.LQ.LR.LS.LT.LU.LV.LW.LX.LY.LZ.L0.L1.L2.L3.L4.L5.JN.L6.L7.L8.L9.M..M#.Ma.Mb.Mc.Md.Me.Mf.Mg.Mh.Mi.BL.Mj.Mk.Ml.Mm.Mn.Mo.Mp.Mq.Kl.Mr.Ms.Mt.Mu.Mv.Mw.Mx.EN.My.Mz.MA.MB.MC.MD.ME.MF.MG.MH.MI.MJ.MK.ML.MM.Kt.MN.MO.MP.MQ.MR.MS.MT.MU.MV.MW.MX.MY.MZ.M0.M1.M2.M3.Ft.uD.uD.ux.Ft.Ft.uD.xY.uu.uu.xX.xX.xX.zO.zO.zO.uD.uD.uD.Fq.Ft.zo.zp.I..M4.KM.KM.KM.KM", +".M5.M5.M5.M5.M5.M5.M5.M5.M5.KP.Ie.Ie.Ie.M6.M6.Fx.CH.CH.CH.CH.zL.Fy.zL.zL.zL.zL.zL.zL.zL.Fx.Fy.Fy.KR.KR.KR.KR.zK.zL.zI.zN.wt.zN.zN.zK.FA.Fz.Fz.Fz.FB.FB.FC.FC.FC.FC.zP.zR.zR.zR.zP.zP.zP.uq.zR.uq.CV.zR.uq.uq.xX.xX.xX.zR.KS.M7.Ih.Ih.Ih.Ih.Ih.FF.Ij.Ij.Ii.FF.FF.Ik.Ik.KT.M8.M8.M8.M8.KT.M9.FG.KT.M8.N..z0.M9.N#.Na.It.KU.Iv.FM.FM.In.FL.FL.KV.Ir.Ir.KW.KW.KW.Ir.Ir.KV.Ip.KX.Nb.Nc.Nc.Nc.Nd.It.KY.Ne.KY.KY.Nf.Ng.K0.Nh.Ni.Ni.Nf.Nf.Nj.Ng.A8.Nk.Jm.Jm.K2.K2.LI.um.K4.um.LI.LI.LI.un.K4.un.LI.A7.GH.K7.ID.IC.Nl.Nm.Nk.Nn.Nl.K7.Nl.K9.No.Nl.K9.Np.Nq.IJ.Nr.Ns.Nt.Do.IN.IN.Do.Nt.Nu.xQ.Nv.Nw.Nx.Ny.Nz.NA.NB.NC.ND.NE.NF.NG.NH.Dq.tH.xe.tC.tC.Dq.NI.NJ.NK.NL.NM.NN.NO.NP.NQ.NR.NS.NT.NU.NV.NW.NX.NY.K6.D0.D0.sv.sv.sy.GG.A3.K4.um.up.ur.uq.ur.ur.ur.ur.ur.ur.uq.uq.xX.xX.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.xW.xW.xW.uF.uF.uF.xW.xW.xW.uF.xW.up.uo.xW.xW.up.xW.xW.xW.xW.xW.xW.ut.ut.NZ.up.xW.xW.up.NZ.up.uu.ss.st.st.su.su.su.su.st.st.st.Jq.Jq.N0.N1.N1.N2.N2.N2.Jq.Jr.Jr.uC.uG.uG.uy.uG.N3.Js.LK.N4.N5.N6.N7.N8.N9.O..O#.Oa.Ob.Oc.Od.Oe.Of.Og.Oh.y9.Oi.Oj.Ok.Ol.Om.On.Oo.Op.Oq.Or.Os.Ot.Ou.Ov.Ow.Ox.Oy.Oz.OA.OB.OC.OD.OE.OF.OG.OH.OI.OJ.OK.OL.OM.ON.OO.OP.OQ.OR.OS.OT.OU.OV.OW.OX.OY.OZ.O0.O1.O2.O3.O4.O5.O6.O7.HR.O8.O9.P..P#.Pa.Pb.Pc.Pd.Pe.Pf.Pg.Ph.Pi.Pj.Pk.Pl.Pm.Pn.Po.Pp.uD.uD.Ft.Ft.uD.ut.uu.uu.zO.zP.zR.zR.zP.zP.xX.zO.uu.uu.uD.uD.Fq.Pq.Fs.Pr.Pr.Ps.Ps.Ps", +".M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.KP.Ie.Ie.Ie.M6.M6.M6.M6.M6.M6.CH.CH.CH.CH.CH.CH.CH.zL.Fy.CI.CI.CI.zL.zK.KR.KR.zK.KR.zL.zL.Fz.Fz.zL.wt.wt.ww.zK.FA.FA.FA.FB.wx.xX.wx.FC.zP.zR.zR.zR.uq.xX.zP.xX.zR.zR.zP.xX.xX.zP.zP.zP.zP.KS.KS.Ih.Ih.FF.Ih.Ih.Ih.Ik.Ik.Ij.Ij.Pt.Ij.Ij.M8.M8.M8.KT.KT.KT.KT.KT.M8.M8.M8.Ik.N..N..KT.M9.C2.Nc.FM.FM.Pu.Pu.Pv.Ir.Ir.Ir.Iq.Iq.KW.Iq.Ir.Ir.Ir.Iu.KX.KX.Iv.Iv.Iv.Nd.Pw.FD.Px.Pw.Py.Pz.Nf.Py.Nf.PA.PB.PC.PD.Nf.LI.PE.A7.K2.PF.K3.LI.PG.PH.PH.um.LI.um.um.um.K4.um.Jn.GJ.D3.No.PI.PJ.PK.PK.PL.PE.PK.PJ.PK.PM.PN.PL.PO.PP.PQ.uf.PR.Nt.Do.tG.tG.ue.tH.PS.Nr.xQ.xR.PT.PU.PV.PW.PX.PY.PZ.Nt.tE.xe.Do.tC.tC.xe.tG.tG.Nu.P0.P1.P2.P3.P4.P5.P6.P7.P8.P9.Q..Q#.Qa.Qb.Qc.Qd.Qe.Qf.Qg.sv.A9.N2.sy.xO.DY.A9.Jo.CR.CR.xX.uq.ur.ur.ur.ur.ur.ur.uq.uq.xX.xX.xX.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.xW.uF.uF.xW.xW.xW.uF.uF.up.uo.uo.up.xW.up.up.xW.up.up.up.up.xY.xY.up.up.up.su.xW.xW.xW.st.st.st.st.su.su.su.N2.N2.su.su.N2.N1.N1.N2.uF.uF.uF.uF.uF.uE.uC.Jr.Qh.uG.uG.GK.Js.Qi.Qj.Qk.Ql.Qm.Qn.Qo.Qp.Qq.Qr.Qs.Qt.Qu.Qv.Qw.Qx.Qy.Qz.QA.QB.QC.QD.QE.QF.QG.QH.QI.QJ.QK.QL.MG.QM.QN.QO.QP.QQ.QR.QS.QT.QU.QV.QW.QX.QY.QZ.Q0.JR.Q1.Q2.Q3.Q4.Q5.Q6.Q7.Q8.Q9.R..R#.Ra.Rb.Rc.Rd.QA.Re.Rf.Rg.Rh.Ri.Rj.Rk.Rl.Rm.Rn.Ro.Rp.Rq.Rr.Rs.Rt.Ru.Rv.Rw.Rx.Ry.Rz.RA.RB.RC.RD.RE.zn.Ft.uD.uD.Pp.uD.ut.uu.zO.zO.zP.zR.zR.zR.zR.zR.zR.zP.xX.zO.uu.uu.uD.uD.Ft.Fs.Fs.Fs.Fs.Fs", +".M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.KP.KP.Ie.Ie.M6.Ie.Ie.Ie.Ie.Ie.Ie.M6.M6.M6.M6.M6.Fx.CH.CH.CH.CH.CH.zL.zL.zL.zL.zL.CH.KR.RF.RF.Fy.Fz.zK.ww.wt.ww.wt.wx.ww.zO.zP.zO.zO.zO.uq.zR.uq.uq.uq.zR.zP.zP.xX.xX.zR.zP.M7.M7.M7.RG.KS.KS.Ih.Ih.FF.Ih.Ih.FF.Ik.Ik.Ik.Ik.FF.FF.Ij.RH.RH.RH.RH.M8.M8.M8.M8.M8.M8.KT.KT.FF.Ik.N#.zY.C0.KX.Ip.Iv.FL.RI.FL.Is.Is.Is.Is.Iq.KW.KW.Ir.Ir.Ir.Iv.Iv.Nb.Iv.Iv.Iv.Iv.It.KY.FD.KZ.Ni.CS.Ng.Nh.KZ.CS.CS.PD.PD.PD.Jn.RJ.RK.A7.IA.PF.PF.LI.PG.PH.PG.LI.Jn.Jn.un.K4.um.Jn.RL.GJ.PE.PL.PJ.K7.L#.Nl.Nl.RM.K9.K9.PI.RM.Nn.RM.RN.Nu.tH.PR.RO.xi.tI.tH.tH.Nr.A6.PS.ug.xQ.xi.xi.xR.RP.RQ.RR.I6.Do.Av.Do.IM.tC.Do.IM.RS.At.RT.RU.RV.RW.RX.RY.RZ.R0.R1.R2.R3.R4.R5.R6.R7.R8.R9.S..S#.Sa.Qg.N1.K6.Sb.sy.xO.DY.zU.CR.CR.CQ.xX.ur.ur.ur.ur.ur.ur.ur.uq.uq.xX.xX.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.xW.uF.uF.xW.up.up.uo.uo.xW.uo.uo.xW.up.up.NZ.up.up.xW.up.xW.xW.xW.xW.xW.xW.su.su.su.su.su.su.su.su.su.su.uF.uF.uF.uF.N2.uF.uA.uA.uF.uF.N2.uF.uF.uF.Jq.Jr.Jr.Jp.N0.N0.Sc.sw.Sd.Se.Sf.Sg.Sh.Si.Sj.Sk.Sl.Sm.Sn.So.Sp.Sq.Sr.Ss.St.Su.Sv.Sw.Sx.Sy.Sz.SA.SB.SC.SD.SE.SF.SG.SH.SI.SJ.SK.SL.SM.SN.SO.QT.SP.SQ.SR.SS.ST.SU.SV.SW.SX.SY.SZ.S0.S1.S2.S3.B2.S4.S5.S6.S7.S8.S9.T..zc.T#.Ta.Tb.Tc.Td.Te.Tf.Tg.Th.Ti.Tj.Tk.Tl.Tm.Tn.To.Tp.Tq.Tr.Ts.Tt.Tu.Tv.Tw.Tx.Ty.Tz.Pq.uD.uD.Ft.Ft.Ft.uu.zO.zP.zP.zR.zR.zR.zR.zR.zR.zR.zR.zP.xX.zO.zO.uu.uu.uD.H9.Fq.H9.Fq.Ft", +".M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.KP.KP.Ie.KP.KP.KP.KP.KP.KP.KP.KP.Ie.Ie.Ie.Ie.Ie.Ie.Ie.Ie.M6.M6.M6.CH.CH.Fy.CH.Fy.zL.zL.zK.Fz.zK.KR.RF.TA.zK.FA.FA.FB.FB.FC.RG.zP.FC.FC.xX.uq.uq.zR.uq.uq.zR.zR.zP.zP.zR.zP.M7.M7.KS.M7.M7.KS.Ih.KS.FF.FF.KS.FF.FF.Ik.Ik.Ik.Ik.FF.FF.Ik.Ik.RH.RH.RH.RH.RH.Ik.Ik.M8.M8.Ik.Ij.RH.N#.M9.M9.K0.It.Nc.Nc.TB.TB.Iv.N#.N#.N#.Iq.Iq.Iq.Iq.Ir.Ir.Ir.KX.KX.KX.Iv.Iv.Iv.It.KZ.KY.KY.FD.Jo.Jo.Ng.It.KZ.FD.Ne.Nf.TC.PA.um.PA.RK.TD.IA.K2.LI.LI.PG.TE.um.PF.Jn.PG.um.um.um.Jn.TF.TG.Nl.PI.K7.K7.K7.K7.No.No.No.TH.PJ.Nl.RM.TI.Nu.tI.Nt.RO.RO.tI.Nu.xQ.Nr.Nr.TJ.A6.TK.tI.xi.ug.tH.Do.Do.Do.Do.Do.Do.Do.TL.Nu.tG.ud.IN.TM.TN.TO.TP.TQ.TR.TS.TT.TU.TV.TW.TX.TY.TZ.T0.T1.T2.T3.T4.T5.DY.A9.N1.Sb.sy.sy.A3.zU.ur.uq.CQ.CQ.ur.ur.ur.ur.ur.ur.ur.ur.ur.uq.xX.xX.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.uq.CQ.CQ.up.xW.uo.uo.up.up.xW.xW.xW.xW.xW.xW.xW.xW.xW.up.xW.xW.su.xW.xW.su.su.su.su.su.su.su.su.su.su.su.xW.xW.uF.uF.N2.N1.N1.N1.uA.uA.uF.N1.N2.N2.N2.N2.N2.N2.T6.T7.Jq.T6.T8.T9.U..U#.Ua.Ub.Uc.Ud.Ue.Uf.Ug.Uh.Ui.Uj.Uk.Ul.Um.Un.Uo.Up.Uq.Ur.Us.Ut.Uu.Uv.Uw.Ux.Uy.Uz.UA.UB.UC.UD.UE.Pj.UF.UG.UH.UI.UJ.UK.UL.UM.UN.UO.UP.UQ.UR.US.UT.UU.UV.UW.UX.UY.UZ.U0.U1.U2.U3.U4.U5.U6.vK.U7.U8.U9.V..V#.Va.Vb.Vc.Vd.Ve.Vf.Vg.Vh.Vi.Vj.Vk.Vl.Vm.Vn.Vo.Vp.Vq.Vr.Vs.Vt.Vu.Vv.Vw.Tz.zn.Fq.Fq.zo.uD.uD.uu.zP.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.xX.zO.zO.uu.uu.uu.zO.Vx.H9", +".M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.KP.M6.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.Ie.Ie.Ie.M6.M6.M6.Ie.Ie.CH.Fy.Fy.Fy.KR.zK.zK.Fz.Fz.RF.RF.TA.TA.FB.FB.Vy.RG.RG.FC.zP.zP.zR.zR.zR.zR.KS.KS.M7.KS.KS.M7.KS.KS.KS.KS.RG.KS.KS.Ih.Ih.FF.Ih.Ih.Ih.Ik.Ik.Ik.Ik.Ik.FF.FF.FF.Ik.Ik.Ik.Ik.Ii.Ij.Ij.RH.RH.Ij.Ij.M8.Vz.Vz.VA.K0.Pw.Nd.Nd.TB.VB.KX.It.N#.N#.N#.Vz.Vz.Iq.Ir.Ir.Ir.Iv.Iv.Nb.Nc.Iv.Iv.It.KZ.FD.FD.FD.Ni.us.Ni.Nh.KZ.KY.FD.Ne.VC.VD.VD.VE.PA.Jn.TD.TD.IA.LI.PG.TE.Jn.PF.LI.Jn.PG.um.un.LI.Jn.TF.A8.PK.PK.uk.uk.VF.PK.Nn.K9.TH.L#.K7.VG.VH.VI.xi.VJ.VJ.xe.Do.Do.tH.VK.Nr.PQ.Nu.xi.Nu.tH.tI.Do.Av.tE.Do.Av.Do.tI.IL.RS.Do.Do.tH.xg.VL.VM.VN.VO.VP.VQ.VR.VS.VT.VU.VV.VW.VX.VY.VZ.V0.V1.V2.V3.V4.V5.V6.sw.sw.Sb.sx.K4.Jo.wG.wG.uq.CQ.CR.CR.CR.CR.CR.CR.CR.ur.ur.CQ.xX.xX.xX.CQ.uq.uq.CQ.uq.uq.CQ.CQ.CQ.CQ.CQ.uq.xW.uo.uo.up.up.xW.su.su.su.su.xW.xW.su.su.su.su.su.su.su.su.su.su.su.su.su.su.su.su.su.xW.xW.xW.N2.N1.uA.N2.N2.N1.T6.N1.N2.N2.N2.V7.N2.N2.N2.N2.N2.N2.N1.T6.N1.T8.T9.V8.V9.EO.W..W#.Wa.Uh.Wb.Wc.Wd.We.Wf.Wg.Wh.Wi.Wj.Wk.Wl.Wm.Wn.Wo.Wp.Wq.Wr.vD.Ws.Wt.Wu.Wv.Ww.Wx.Wy.Wz.WA.WB.WC.WD.WE.WF.WG.WH.UL.WI.WJ.WK.WL.WM.WN.WO.WP.WQ.WR.WS.WT.WU.WV.WW.WX.WY.WZ.W0.W1.W2.W3.Hh.W4.W5.W6.W7.W8.W9.X..X#.Xa.Xb.Xc.Xd.Xe.Xf.Xg.Xh.Xi.Xj.Xk.Xl.Xm.Xn.Xo.Xp.Xq.Xr.Xs.Xt.zn.Fs.Xu.Ft.Fq.zO.xX.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.zO.zO.uu.ut.ut.zO.wx", +".M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.KP.Ie.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.Ie.M6.Xv.M6.KP.Ie.KP.M5.Ie.KP.RF.KR.KR.Fz.FA.RF.RF.TA.FA.FB.Vy.RG.M7.RG.RG.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.M7.KS.KS.Ih.Ih.Ih.Ih.FF.Ik.Ik.Ik.Ik.Ik.Ik.FF.FF.FF.FF.FF.FF.Ih.FF.M8.M8.M8.FF.Ik.M8.N#.N#.C0.KX.Py.Pw.KZ.It.TB.TB.Iv.Is.Is.Is.Vz.Xw.Xx.Iq.Ir.Ir.Ir.Iu.KX.KX.Iv.It.KZ.KZ.KY.CU.FD.KY.Jo.Jo.Ni.KY.KZ.KY.Ne.Ne.VC.Xy.Xz.VE.XA.Jn.A7.IA.K3.LI.RL.TF.Jn.LI.LI.XB.PG.PH.PG.PG.Jn.TG.Nl.XC.Nk.VF.VF.PJ.K9.VG.No.Np.xV.XD.VG.XE.xi.VJ.Do.tE.tE.Do.tG.tG.Do.tE.Do.tH.tH.Do.tC.tC.tF.tF.tC.tC.xe.IM.tC.Do.Av.tI.tI.I6.XF.XG.XH.XI.XJ.XK.XL.XM.XN.XO.XP.XQ.XR.XS.XT.XU.XV.XW.XX.XY.XZ.X0.Qg.sv.Sb.sy.D0.zU.ur.wG.X1.xX.ur.CR.ur.ur.ur.ur.CR.CR.CR.CQ.CQ.CW.xX.CQ.CQ.CQ.CQ.uq.CQ.CQ.CQ.uq.xW.xW.su.N2.uF.xW.xW.xW.su.su.su.su.su.su.su.su.su.su.su.su.su.su.su.su.su.su.su.xW.xW.xW.xW.xW.su.uF.N1.N1.N1.N2.N1.T6.V7.V7.V7.N2.N2.N2.N2.N2.V7.V7.V7.N1.T6.T6.T6.T8.X2.X3.X4.X5.X6.X7.X8.X9.Y..Y#.Ya.Yb.Yb.Uk.Wd.Yc.Yd.Ye.Yf.Yg.Yh.Yi.Yj.Yk.WD.Yl.Ym.Yn.Yo.Yp.Yq.Yr.Ys.Yt.Yu.Yv.UF.Yw.Yx.Yy.Yz.YA.YB.UL.YC.YD.YE.YF.YG.YH.YI.QW.YJ.YK.YL.YM.YN.YO.YP.YQ.YR.YS.YT.YU.YV.YW.YX.YY.YZ.Y0.Y1.Y2.Y3.Y4.Y5.Y6.Y7.Y8.Y9.Z..Z#.Za.Zb.Zc.Zd.Ze.Zf.Zg.Zh.Zi.Zj.Zk.Zl.w#.uD.Ft.Xu.Zm.Cv.uD.zO.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.zO.zO.zO.ut.ut", +".M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.KP.KP.M6.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.Ie.M6.Ie.KP.Ie.KP.KP.Ie.M5.M5.Zn.KP.KR.Fz.FA.Fz.Fz.TA.TA.Vy.Vy.RG.RG.Vy.M7.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.M7.KS.KS.KS.Ih.Ih.FF.FF.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.FF.Ik.FF.Ik.Ik.Ik.Ik.M8.N#.N#.VA.It.K1.Zo.KZ.KZ.KX.TB.TB.Iv.Is.Is.Is.Vz.Vz.Iq.Ir.Ir.Ir.Ip.KX.Nj.Nd.KZ.KY.It.KZ.FD.CU.KY.CS.Jo.Ng.KZ.KY.KY.KY.FD.Ne.Xz.Xz.VE.PD.TE.Nk.LI.K3.K2.Zp.Zq.TF.PF.um.RL.Jn.PG.Zr.un.um.GJ.Nk.PN.PL.Zs.K7.TH.Np.K9.Nn.K9.Zt.Zu.Zt.Zv.xQ.ue.RO.tE.xe.tC.tC.Do.Do.xf.tF.tF.tF.xg.xg.tF.xg.xg.tF.IN.IN.xe.xf.xe.Do.tH.tI.Lq.Zw.Zx.Zy.Zz.ZA.ZB.ZC.ZD.ZE.ZF.ZG.ZH.ZI.ZJ.ZK.ZL.ZM.ZN.ZO.ZP.ZQ.ZR.A9.uA.sv.sy.sv.DY.Jo.sw.wG.X1.X1.wG.wG.wG.wG.wG.ur.ur.ur.ur.CR.CQ.ZS.CQ.CQ.uq.CQ.CQ.CQ.CQ.uq.X1.su.su.N2.N2.su.su.xW.xW.su.su.su.su.su.su.su.su.su.su.su.su.su.su.su.su.xW.xW.xW.xW.N2.N2.N2.N1.N2.N1.T6.T6.V7.V7.V7.N2.N2.N2.N2.N2.V7.V7.T6.T6.V7.T6.ZT.ZU.T8.ZV.ZW.N2.A9.ZX.ZY.ZZ.Z0.Z1.Z2.Z3.Z4.Z5.Y..Z6.Z7.Z8.Z9.0..0#.0a.0b.0c.0d.0e.0f.0g.0h.0i.0j.0k.0l.0m.0n.0o.0p.0q.0r.0s.0t.0u.0v.0w.0x.0y.Rn.0z.0A.0B.0C.0D.0E.0F.0G.0H.0I.0J.0K.YM.0L.0M.0N.0O.0P.0Q.0Q.0R.0S.0T.0U.0V.YZ.0W.0X.0Y.0Z.00.01.02.03.04.05.06.07.08.09.1..1#.LQ.1a.1b.1c.1d.1e.1f.1g.Po.1h.Xu.1i.wv.uu.ut.zP.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.FC.FC.FC.xX.ut", +".M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.M5.Ie.Ie.Ie.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.M6.Ie.Ie.KP.Ie.Ie.KP.KP.KP.M5.Zn.M5.KP.M5.TA.Fz.Fz.Fz.FA.TA.Vy.Vy.RG.RG.RG.RG.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.M7.M7.KS.KS.KS.Ih.Ih.FF.FF.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.FF.Ih.FF.Ik.FF.M8.M8.N#.N#.C0.1j.KX.Pw.KZ.KZ.KX.KX.It.N#.N#.N#.Vz.KW.KW.Iq.Ir.Ir.Ir.Iu.KX.1k.KZ.KZ.It.KZ.KY.CU.FD.Ni.CS.CS.Ni.KY.KY.KY.KZ.FD.FD.CU.CP.VE.1l.RK.A8.LI.K2.Zp.Zp.Zq.RL.um.PF.RL.Jn.PG.un.LI.XB.Nk.Nl.PL.1m.PK.L#.L#.L#.Zu.Nn.Zu.1n.1o.TJ.Nr.1p.1q.1r.1s.1t.1u.1s.xe.xf.1v.1v.1v.1v.xg.xg.xg.xg.xg.xg.1v.1v.xe.Av.tH.uf.1w.1x.1y.1z.1A.1B.1C.1D.1E.ZD.1F.1G.1H.1I.1J.1K.1L.1M.1N.1O.1P.1Q.1R.LK.uA.1S.uA.Sb.V7.K4.K4.xW.CX.X1.X1.X1.wG.wG.wG.wG.wG.wG.wG.wG.ur.uq.ZS.CQ.uq.uq.uq.uq.uq.uq.uq.X1.N2.N2.N2.su.su.su.su.su.su.su.su.su.su.su.su.su.su.su.su.su.xW.xW.xW.xW.xW.su.su.N2.N2.T6.T6.T6.T6.V7.N2.N2.N2.N2.N2.N2.V7.sz.sz.1T.1T.sz.T6.T7.1U.T8.1V.1V.ZT.zZ.1W.1X.1Y.1Z.10.11.12.13.14.15.16.17.18.19.2..2#.2a.2b.2c.2d.2e.Oz.2f.2g.2h.2i.2j.2k.2l.2m.MS.2n.2o.2p.2q.2r.2s.2t.2u.2v.2w.2x.2y.2z.2A.2B.2C.2D.2E.2F.2G.2H.2I.2J.2K.2L.2M.2N.2O.2P.2Q.2R.2S.2R.2T.2U.2V.YX.2W.2X.2Y.2Z.0X.20.21.22.23.24.25.26.27.28.29.3..3#.3a.3b.3c.3d.3e.3f.3g.3h.3i.3j.CW.uu.LJ.Zm.1h.zO.xX.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.FC.FC.zP.zP.zO", +".M5.M5.KP.KP.M5.M5.M5.M5.M5.M5.M5.Ie.M6.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.Ie.Ie.KP.KP.Ie.Ie.Ie.KP.KP.M5.M5.Zn.KP.Zn.Zn.TA.RF.Fz.FA.FA.TA.Vy.Vy.RG.RG.RG.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.M7.KS.KS.KS.KS.Ih.FF.FF.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.FF.FF.FF.Ik.Ik.M8.N#.N#.VA.Iu.K1.3k.It.KZ.Py.Py.KZ.KZ.M8.M8.M8.RH.KW.KW.Is.Ir.Ir.Ip.Iv.Nj.Px.It.KZ.KZ.KY.FD.FD.FD.CR.us.Jo.KY.KZ.KY.KZ.KY.KY.FD.FD.FD.Nf.XA.RK.A8.LI.3l.Zp.Zq.Jn.Jn.LI.PF.RL.Jn.PG.um.Jn.GJ.Nk.K9.PE.Nm.K7.PJ.XD.K9.Zu.D2.1o.uh.3m.3n.3o.3p.3q.3r.3s.3t.1s.3u.tF.xg.xe.xe.3v.3w.3x.1v.tC.1v.tE.tE.xe.1u.3y.uf.3z.zZ.3A.3B.3C.3D.3E.3F.3G.3H.3I.3J.3K.3L.3M.3N.3O.3P.3Q.3R.3S.3T.3U.3V.Qg.D0.uB.sv.Sb.sy.D0.zU.zT.ur.wG.wG.sr.wG.wG.wG.wG.wG.wG.wG.wG.wG.xX.xX.xX.X1.X1.X1.X1.X1.X1.su.su.N2.N2.su.xW.su.su.su.su.su.su.su.su.xW.xW.su.xW.xW.xW.xW.xW.xW.su.su.su.su.su.sx.V7.T6.T6.N1.N2.N2.N2.N2.V7.sz.sz.sz.sz.1T.V7.V7.V7.ZT.T7.T7.1V.ZU.ZU.ZU.3W.3X.3Y.3Z.30.31.32.33.34.35.36.37.38.39.4..4#.4a.4b.2#.4c.4d.4e.Rf.4f.4g.4h.4i.4j.4k.4l.4m.4n.4o.4p.4q.4r.4s.4t.4u.4v.4w.2E.4x.4y.4z.4A.4B.4C.4D.4E.4F.4G.4H.4I.4J.4K.4L.HP.4M.4N.4O.4P.4Q.4R.4S.4T.4U.4V.4W.4X.4Y.4Z.40.41.42.43.44.45.46.47.48.49.5..5#.5a.5b.5c.5d.5e.5f.5g.5h.5i.5j.5k.5l.Po.CW.uE.1h.Xu.Zm.uu.xX.FC.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.FC.FC.zP.FC", +".KP.KP.M5.M5.KP.KP.KP.KP.KP.KP.KP.KP.Ie.Ie.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.Ie.Ie.KP.KP.Ie.Ie.Ie.KP.KP.M5.M5.M5.M5.M5.5m.5m.Zn.RF.FA.FA.TA.Vy.Vy.RG.RG.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.M7.M7.KS.Ih.Ih.Ih.Ik.Ik.Ik.Ik.Ik.Ik.FF.FF.FF.FF.Ik.Ik.Ik.Ih.Ik.Ik.Ik.M8.M8.N#.VA.VA.1j.Nd.Nd.It.It.KX.KX.KZ.M8.N#.M8.Ik.Vz.Vz.Iq.Ir.Ir.Ir.Iv.Iu.PC.It.KZ.KY.KY.KY.CU.CU.CU.CR.VE.PB.Px.KY.KZ.KZ.KY.KY.KY.KZ.KZ.Py.XA.RK.A7.PF.IA.5n.RL.RL.um.PF.PF.RL.RL.Jn.um.Jn.Nm.Nl.Nl.VG.Nk.5o.XD.XD.5p.5q.5r.5s.5t.5u.5v.5w.5x.5y.5z.5A.5B.Dq.1s.5C.5D.5E.5F.5G.5H.5I.5J.5K.1v.tC.5L.5M.5N.PS.5O.5P.5Q.5R.5S.5T.5U.5V.5W.5X.5Y.5Z.50.51.52.53.54.55.56.57.58.59.6..6#.6a.D0.D0.sv.Sb.Sb.xO.DY.zU.zT.ur.wG.X1.X1.wG.wG.wG.wG.wG.wG.wG.wG.X1.X1.wD.X1.X1.X1.X1.X1.su.xW.uF.uF.uF.xW.su.xW.xW.xW.xW.xW.xW.xW.xW.su.xW.xW.su.su.su.su.su.sx.su.sx.sx.6b.sx.su.N2.N2.N1.T6.V7.V7.sz.sz.1T.6c.V7.T7.sz.T6.T6.T6.ZT.U..ZT.ZT.6d.z3.6e.6f.6g.6h.6i.6j.6k.WJ.Te.6l.6m.6n.6o.6p.6q.6r.6s.6t.Sk.6u.6v.4q.6w.6x.6y.6z.6A.6B.6C.6D.6E.6F.WB.6G.6H.6I.6J.6K.6L.6M.6N.JH.6O.6P.0A.6Q.6R.6S.6T.6U.6V.6W.6X.6Y.6Z.60.61.62.63.64.65.66.KG.67.68.69.7..7#.7a.7b.7c.7d.7e.7f.7g.7h.7i.20.7j.7k.7l.7m.7n.Z..7o.7p.7q.02.7r.7s.7t.7u.7v.7w.7x.7y.7z.7A.Tz.ux.7B.Xu.Xu.H9.uu.xX.zP.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.zP.FC.FC.FC", +".7C.7C.7C.7C.M5.M5.M5.M5.M5.M5.M5.KP.KP.Ie.Ie.Ie.Ie.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.Ie.Ie.Ie.KP.KP.KP.Ie.Ie.Ie.KP.KP.M5.M5.M5.M5.Zn.Zn.Zn.Zn.RF.FA.FA.TA.RG.RG.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.M7.KS.KS.Ih.FF.FF.FF.FF.FF.FF.Ih.Ih.Ih.Ih.FF.Ik.Ik.FF.FF.Ik.Ik.Ik.Ik.M8.N#.C0.Iu.Iu.3k.It.It.Py.Nb.Nf.KY.M8.N#.M8.RH.Xw.KW.Iq.Ir.Ir.Ip.Pw.Nj.Nd.KZ.KZ.KY.KY.CU.7D.Xz.Xz.CR.CR.FD.Px.Px.Pw.KZ.FD.KY.KY.KY.KZ.Nf.7E.TG.LI.LI.IA.PF.Jn.Jn.LI.K2.PF.PF.RL.LI.um.A7.TG.Nm.XD.VG.Nl.5p.1n.7F.7G.7H.7I.7J.7K.7L.7M.7N.7O.7P.7Q.7R.7S.7T.7U.7V.7W.7X.7Y.7Z.70.71.72.73.74.75.76.77.78.79.8..8#.8a.8b.8c.8c.8d.8e.8f.8g.8h.8i.8j.8k.8l.8m.8n.8o.8p.8q.8r.8s.8t.CX.uB.D0.sv.Sb.Sb.Sb.sv.DY.zT.ur.CT.wG.X1.X1.wG.wG.wG.wG.wG.wG.wG.wG.X1.sr.sr.sr.sr.sr.xW.xW.uC.N2.N2.ut.xW.su.xW.xW.xW.su.su.xW.xW.xW.sx.su.su.sx.sx.sx.sx.sx.sx.sx.st.N2.Jq.N1.N2.N1.T6.V7.T6.1T.1T.6c.V7.V7.6c.6c.ZT.ZT.ZT.U..8u.U..U..ZU.8v.8w.8x.8y.8z.8A.8B.8C.8D.8E.8F.Zg.8G.8H.8I.8J.8K.8L.8M.8N.8O.8P.8Q.8R.BV.8S.8T.8U.8V.8W.8X.8Y.8Z.80.81.82.83.84.85.86.OC.87.88.89.9..9#.9a.YC.9b.9c.9d.9e.9f.KH.OC.9g.9h.9i.9j.9k.9l.9m.9n.9o.9p.9q.9r.9s.9t.9u.9v.9w.9x.9y.9z.9A.9B.9C.9D.9E.9F.9G.9H.9I.9J.9K.9L.9M.9N.9O.9P.9Q.9R.9S.9T.9U.9V.9W.9X.9Y.uD.ux.1h.Xu.9Z.zq.uD.ut.xX.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.FC.FB", +".90.Zn.Zn.Zn.90.90.90.Zn.Zn.Zn.Zn.M5.KP.KP.KP.KP.Ie.Ie.Ie.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.Ie.M6.M6.KP.KP.KP.KP.KP.Ie.Ie.Ie.KP.KP.KP.M5.M5.M5.M5.Zn.RF.RF.FA.FA.FB.RG.RG.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.RG.M7.KS.KS.Ih.FF.FF.FF.FF.Ih.Ih.FF.FF.KS.Ih.Ik.Ik.Ik.FF.FF.Ik.Ik.Ik.Ik.M8.M9.VA.K1.Nd.Pw.KZ.KY.Nf.Nf.KY.Ik.M8.N#.Ik.Vz.Xx.KW.Iq.Ir.Is.KY.Iu.1k.It.KY.KY.KY.Ne.Xz.Xz.FD.CP.CV.CU.FD.FD.Px.Px.Px.FD.KY.KY.KZ.Py.7E.7E.Pz.Pz.A7.IA.TD.Jn.um.K3.PF.K2.K2.K4.K4.um.LI.LI.TG.XD.Zu.xU.IF.91.92.93.94.95.96.97.98.99#..#.##.a#.b#.c#.d#.e#.f#.g#.h#.i#.j#.k#.l#.m#.n#.o#.p#.q#.r#.s.Z7#.t#.u#.v#.w#.x#.y#.z#.A#.B#.C#.D#.E#.F#.G#.H#.I#.J#.K#.L#.M#.N#.O.uF.T9.x0.uB.uA.Sb.Sb.Sb.su.GG.sv.zT.ur.ur.ur.uq.X1.wG.wG.wG.wG.ur.wG.wG.X1.X1.sr.sr.uq.xW.uF.uC.N2.sz.6b.ss.st.sx.su.su.su.sx.sx.su.su.su.sx.sx.sx.sx.sx.6b.st.st.st.st.Jq.N2.V7.T7.T7.T7.6c.V7.sz.sz.sz.V7.xO#.P#.Q#.Q#.Q.U..8u.8u.8u.8u#.R#.S#.T#.U#.V#.W#.X#.Y#.Z#.0#.1.0J#.2#.3#.4#.5#.6#.7#.8#.9##.#####a##b##c##d##e##f##g##h##i##j##k##l##m##n##o##p.X.##q##r##s##t##u##v##w##x##y##z##A##B##C##D##E##F##G.KH##H##I##J##K##L.QJ##M##I##N##O##P##Q##R##n##S##T.7b##U##V##W##X##Y##Z##0##1##2##3##4##5##6##7##8##9.Z##a.#a##aa#ab#ac#ad#ae#af#ag.3j.Ft.Cv.Qh.zq.Xu.zq.zq.uD.ut.xX.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.FC.FC.FC", +".Zn.Zn#ah.Zn.Zn.Zn.90.90.90.90.90.Zn.M5.KP.KP.M5.KP.Ie.Ie.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.Ie.M6.M6.Ie.KP.KP.KP.KP.KP.KP.Ie.Ie.Ie.Ie.KP.KP.KP.M5.M5.M5.M5.5m.Vy.FA.ww.FB.RG.RG.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.RG.RG.RG.RG.M7.KS.KS.Ih.Ih.Ih.FF.FF.FF.FF.FF.Ih.FF.Ik.Ik.Ik.FF.FF.FF.Ik.Ik.Ik.Ik.M8#ai.Nh.Nh.Zo.KY.KY.KY.Nf.Nf.FD.Ik.M8.M8.N#.Vz.Vz.Iq.Is.N#.M9.Nd.1j.It.KZ.KZ.Ne.Ne.FD.CU.CV.CV.z1.z1.CV.z1.FD.Px.Px.Px.KY.FD.KZ.KZ.Py.Py.7E.7E.Ng.Jn.PF.TD.LI.LI.A7.TD.PF.LI.LI.K4.K3.TD.A8.K7.xP#aj#ak#al#am#an#ao#ap#aq#ar#as#at#au#av#aw#ax#ay#az#aA#aB#aC#aD#aE#aF#aG#aH#aI#aJ#aK#aL#aM#aN#aO#aP#aQ#aR#aS#aT#aU#aV#aW#aX#aY#aZ#a0#a1#a2#a3#a4#a5#a6#a7#a8#a9#b.#b##ba.x0#bb.x0.N1.Sb.Sb.Sb.su.Qg.GG.sv.sy.ur.CT.ur.uq.uq.ur.ur.ur.wG.ur.ur.ur.uq.X1.uq.xW.uF.N1.sx.sx.su.su.st.st.st.N2.su.su.su.6b.6b.sx.sx.su.sx.sx.st.st.st.6b.sx.su.sx.T7.T7.6c.T6.ZW.sz.1T.sz.1T.6c.6c#.Q#.Q#.Q#.Q.8u.U..8u#bc#bc#bc#bd#be#bf#bg.yt#bh#bi#bj#bk#bl#bm.JQ#bn#bo#bp.Bn#bq#br.Sk#bs#bt.G3#bu#bv#bw#bx#by#bz#bA#bB#bC#bD#bE#bF#bG#bH#bI#bJ#bK.2L#bL#bM#bN#bO#bP#bQ#bR#bS#bT#bU#bV#bW#bX#bY#bZ#b0#b1.6Q#bX#b2#b3#b4#b5#b6##M#b7#b8#b9#c.#c#.vC#ca#cb#cc#cd#ce.7b#cf#cg#ch#ci#cj#ck#cl#cm#cn#co#cp#cq#cr#cs.7p#ct#cu#cv#cw#cx#cy#cz#cA#cB#cC.CP#cD.1h#cE.Xu#cF#cG.uD.ut.ut.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.FC.FC", +"#ah.M5.Zn#ah#ah.M5.M5.M5.M5.M5.Zn.90.90.7C.KP.KP.M5.KP.Ie.Ie.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.KP.Ie.M6.M6.M6.M6.Ie.Ie.KP.KP.KP.KP.KP.KP.M6.Ie.KP.KP.KP.M5.M5.Zn.Zn.Zn.5m.TA.FA.FA.Vy.Vy.RG.M7.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.M7.RG.RG.M7.M7.Vy.M7.M7.KS.KS.KS.KS.Ih.Ih.FF.FF.FF.Ih.FF.Ik.Ik.Ik.Ik.Ik.FF.FF.FF.Ik.Ik.M8.M9.FE.K0.Px.Px.KY.FD.PB.XA.Nf.FD.Ik.M8.N#.Vz.KW.KW.Iq.M8.M8.It.KX.KX.It.Pw.Px.Px.FD.z1.CV.CV.z1.z1.z1.CV.z1.FD.Px.Pw.Px.KY.KY.KZ.It.Py.Nb.7E.Nf.Pz.LI.GH.GH.uk.uk.uk.GH.uk.VF.A7.TD.Nk.K7.xV#cH#cI#cJ#cK#cL#cM#cN#cO#cP#cQ#cR#cS#cT#cU#cV#cW#cX#cY#cZ#c0#c1#c2#c3#c4#c5#c6#c7#c8#c9#d.#d##da#db#dc#dd#de#df#dg#dh#di#dj#dk#dl#dm#dn#do#dp#dq#dr#ds#dt#du#dv#dw#dx#dy#bb#dz.x0.T9.D0.Sb.Sb.Sb.sw.sw.DY.GG.xO.sw.sw.wG.wG.X1.X1.X1.wG.wG.wG.wG.wG.wG.ur.xW.N2.N2.N2.sv.sv.V7.V7.xO.sz#dA.sz.T7.sz.sz.su.su.st.st.6b.su.st.st.st.sx.sx.sy.xO.xO.V7#dB.T7.ZT.6c.6c.ZT.ZT.ZT.ZT#.Q.8u.8u#bc.8u#bc#dC#bd#dD#dE#dF#dG#dH#dI#dJ#dK.0O#dL#dM.Ey#dN#dO#dP#dQ#dR#dS#dT#dU#dV#dW#dX#dY#dZ#d0#d1#d2#d3#d4#d5#d6#d7#d8#d9.0t#e.#e##ea#eb#ec#ed#ee#ef#ef#eg#eh#ei#ej#ek#el#em#en#eo#ep#eq#er#es#et#eu#ev##C#ew#ex#ey#ez#eA#eB#eC#eD#eE#eF#eG#eH#eI#eJ#eK#eL#eM#eN#eO#eP.Xj#eQ#eR#eS#eT#eU#eV#eW#eX#eY#eZ#e0#e1#e2#e3#e4#e5#e6#e7#e8.yT#e9#f.#f#.RE.LJ.Fs.Pr.1i.Zm.uD.zO.xX.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.zP.FB", +"#fa#fa#fa#fa#fb#fb.Zn.Zn.Zn#ah.M5.Zn.7C.90.7C.KP.KP.KP.KP.M6.KP.KP.KP.Ie.Ie.Ie.Ie.Ie.Ie.Ie.Ie.M6.M6.M6.Ie.M6.M6.M6.Ie.Ie.Ie.KP.KP.Ie.Ie.KP.KP.KP.M5.M5.M5.M5.Zn.Zn.Zn.TA.TA.wx.Vy.Vy.Vy.RG.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.RG.RG.RG.RG.M7.M7.RG.RG.M7.KS.Ih.KS.KS.KS.KS.Ih.Ih.FF.KS.Ih.FF.Ik.Ik.Ik.Ik.Ik.Ik.FF.FF.FF.Ik.Ik#fc.Ni.CS.Ne.Ne.FD.KY.PB.PB.PB.KZ.Ik.N#.M8.Iq.Xx.KW.Vz.M8.It.Iu.1j.KX.Pw.Px.KY.z1.z1.z1.CV.CV.CV.z1.CV.CV.z1.FD.Px.VC.KY.KY.KZ.KZ.Pw.KX.Nj.LI.Jm.IA.K2.GH.IG.IB.IB.Ix.IC.uk.xV.K7#fd#fe#ff#fg#fh#fi#fj#fk#fl#fm#fn#fo#fp#fq#fr#fs#ft#fu#fv#fw#fx#fy#fz#fA#fB#fC#fD#fE#fF#fG#fH#fI#fJ#fK#fL#fM#fN#fO#fP.NO#fQ#fR#fS#fT#fU#fV#fW#fX#fY#fZ#f0#f1#f2#f3#f4#f5#f6#f7#f8#f9.A9.T9.T9.D0.Sb.Sb.Sb.sy.sw.sv.Im.GG.xO.sv.sv.sw.sw.su.sx.wE.wE.wE.wE.sw.sw.sw.sv.sv.sv.sv#g.#g.#g.#.Q#g..ZT.ZT.T7.ZT.ZT.T6.V7.V7.V7.V7.V7.V7.T7.V7.V7.6c.6c.6c.6c.6c.ZW.ZW.ZW#g#.ZT.ZW#.R#.R#.R#.R#.R#dC#dC#ga#dD#gb#gc#cN#gd#ge#ge#gf#gg#gh#gi#gj#gk#gl#gm#gn#go#gp#gq#gr#gs#gt#gu#gv#gw#gx#gy#gz#gA#gB.DS#gC#gD.v1#gE#gF#gG#gH#b2#gI#gJ#gK#gL#eb.U2#gM#gN#gO#gP#gQ#gR#gS#gT#et#gU#gV.Pj##L.Fj#gW#gX#es#gY##B#gZ#g0#g1#g2#g3#g4#g5#g6#g7#g8#g9#h.#h##ha#hb.BU#hc#hd#he#eM#eN#hf#hg#hh#hi#hj#hk#hl#hm#hn#ho#hp#hq#hr#hs#ht#hu#hv#hw#hx#hy#hz#hA#hB#hC.CO#cD.Zm.Xu.Pr.1i.Zm.Cv.zO.zP.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.FC.FC.FC", +"#hD#hD#hD#hD#hD#hE#hD.5m.Zn.Zn#fb#ah.M5.7C.90.7C.KP.M5.KP.Ie.Ie.Ie.M6.Ie.Ie.M6.Ie.M6.Ie.M6.Ie.M6.Ie.Ie.Ie.Ie.Ie.M6.Xv.M6.Ie.KP.Ie.M6.KP.KP.M5.Ie.KP.M5.Zn.M5.M5.Zn.Zn.Zn.FA.FA.FA.Vy.Vy.Vy.M7.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.RG.Vy.M7.M7.M7.M7.M7.Vy.RG.M7.KS.Ih.Ih.KS.M7.Ih.Ih.Ih.Ih.Ih.FF.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.FF.FF.FF.z1.z1.Jo.Px.VC.KY.KY.FD.PB.Nf.KZ.M8.N#.M8.N#.Iq.KW.KW.RH.N#.It.KX.1k.Zo.KY.KY.z1.CV.z1.z1.CV.CV.z1.z1.CV.CV.CV.Ne.Px.Ne.FD.Px.Py.Py.K0.IA.uk.IA.3l.3l.FO.Ix.uj.D1.FV.FV.Ix.ID#hF#hG#hH#hI#hJ#hK#hL#hM#hN#hO#hP#hQ#hR#hS#hT#hU#hV#hW#hX#hY#hZ#h0#aO#h1#h2.XI#h3#h4#h5#h6#h7#h8#h9#i.#i##ia#ib#ic#id#ie#if#ig#ih#ii#ij#ik#fT#il#im#in#io#ip#iq#ir#is#it#iu#iv#iw#ix#iy.zT#dz.x0.uB.sv.Sb.Sb.Sb.sw.sv#iz#iA#iz.GG.xO.xO.xO.sw.sw.sy.sy.su.su.sx.sx.N2.V7.V7.V7.T6.ZT.ZU.ZT.ZU.ZU#g##g##.R#.Q#iB#.Q#.Q#.Q#.Q.6c.6c.ZW.ZT.ZT.ZT.ZT.ZW.ZT.1V.1V.1V.1V#iC#iD#iD#iE#iE#iF#an#iG#iH#iI#iI#iJ#iK#iL#iM#iN#iO#iP#iQ#iR#iS#iT#iU#iV#iW#iX#iY#iZ#i0#i1#i2#i3#i4#i5#i6#i7#i7#i8#i9#j.#j##ja.Rr#jb.vS.2p.9q#jc#jd#je#jf#jg#jh#ji#jj#jk#jl#jm#jn#jo#jp.Oi##E#jq#jr#js#jt#ju#jv#jw#jx#jy#jz#jA#jB#jC#jD#g0#jE#jF#jG#jH#jI#jJ#jK#jL#jM.vT#jN.J9#jO#jP#hc#jQ#jR#jS#jT#hf#jU#jV#jW#jX#jY#jZ#j0#j1#j2#j3#j4#j5#j6#j7#j8#j9#k.#k#.yk.4k#ka#kb.Cx.ZS#kc.1i.Xu#kd#cF.zq#kd.1h.zO.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.FC.FC", +"#hE#hE#hD#hE#hE#hD#hD#hD#hD.5m.5m.Zn.Zn.M5.7C#ke.7C.7C#kf#kg.M6.Ie#kh.M6.M6.Ie.M6.Ie.M6.M6.M6.Ie.Ie.Ie.Ie.M6.M6.M6.M6.M6.KP.KP.Ie.Ie.KP.M5.M5.KP.Ie.KP.Zn.M5.M5.M5.Zn.5m.Vy.RF.wx.RG.Vy.RG.RG.RG.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.RG.RG.M7.M7.M7.M7.M7.RG.RG.RG.M7.KS.KS.Ih.KS.KS.Ih.Ih.z1.CV.Ih.z1.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik.Ik#fc#fc.Ni.Px.Px.KY.KY.CU.Nf.Nf.KZ.N#.N#.M8.Is.Vz.KW.RH.Vz.N#.It.Py.Nf.KY.z1.CV.CV.z1.z1.CV.CV.CV.z1.z1.CV.CV.CU.FD.VC.Px.Nf.Ng.K0.K0.FJ.Iw.FO.C8.C8.FP.FP#ki.C8.FW.FP#kj#kk#kl#km#kn#ko#kp#kq#kr#ks#kt#ku#kv#kw#kx#ky#kz#kA#kB#kC#kD#kE#kF#kG#kH#kI#h4#kJ#kK#kL#kM#kN#kO.Qb#kP#kQ#kR#kS#kT#kU#kV#kW#kX#kY#kZ#k0#k1#ij#k2#k3#k4#k5#k6#k7#k8#k9#l.#l##la#lb#lc#ld#le#dz.T9.T9.uB.uA.Sb.Sb.Sb.sw.sv#iz#lf#iA#iz.GG.Sb.xO.xO.xO.sy.xO.xO.sy.sy.V7.V7#.Q#.P.ZT.ZU#.R#bc#lg#dC#dC#dC#dC#lg#lg#dC#bc#.R#.R#.R.1V#lh#lh#lh.1V#iD#li#lj#lk#lk#ll#ll#lm.X3#ln#ln#ln#lo#lp#lq#lr#ls#iL#iM#lt#lu#lv#lw#lx#ly#lz#lA#lB.3g#lC#lD#lE#lF#lG#lH#lI#lJ#lK#lL#lM#lN#lO#lP#lQ#lR#lS#lT#lU#hw#lV#lW#lX#lY#lZ#l0#l1#l2#l3#l4#l5#l6#l7#l7#l8#l9#m.#m##ma#mb#mc#md##E#me#mf#mg.SR#mh#mi#ep#mj#mk#ml#jB#mm#jD#mn#mo#mp#mq#mr#ms#mt#l5#mu#mv#mw#mx#my#mz.vE#mA#mB#cc#mC#mD#mE#mF#mG#mH#mI#mJ#mK#hk#mL#mM#mN#mO#mP#mQ#mR.ML#mS#mT#mU#mV#mW#mX#mY#mZ.CP#m0#cF.zq#m1#m1#kd.zq.7B.1h.xX.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.FC.FC", +"#m2#m2#m2#m2#hE#hE#hE#hE#hD#hE#hD#hD#fb#fb.M5.90.M5.M5.KP.Ie#kg.M6.M6#m3#m3#m3#kg#kg.M6.M6.M6#kg#kg#kg#kg.Ie.Ie.Ie.M6.Ie.KP.Ie.M6.KP.Ie.M5.M5.M5.KP.M5.M5.Zn.KP.Zn.Zn.5m.5m.TA.wx.RG.TA.RG.RG.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.RG.RG.RG.M7.M7.M7.M7.M7.M7.RG.RG.RG.M7.KS.KS.KS.KS.zR.CV.z1.Ih.CV.CV.z1.FE.Ik.FE.Ik.Ik.Ik.Ik.Ik.Ik.Ik.FE.FE.Ng.Px.Px.Px.KY.FD.Nf.Nf.Nf.KZ.N#.N#.Is.Is.Vz.Xw.KW.Vz.It.Nf.Ni.KY.z1.z1.CV.z1.CV.CV.CV.CV.z1.z1.z1.CV.zR.CS.Nf.Nf.Ng.K0.K1#ai.FJ#m4.Dc.C8.FP.FP#m5.C8#m6.Da#m7#m8#m9#n.#n##na#nb#nc#nd#ne#nf#ng#nh#ni#nj#nk#nl#nm#nn#no#np#nq#nr#ns#nt#nu#nv#nw#.u#nx#ny#ny#nz#nA#nB.DR#nC#nD#nE#h5#nF#nG#nH#nI#nJ#nK#nL#nM#nN#nO#nP#nQ#aZ#nR#nS#nT#nU#nV#nW#nX#nY#nZ#n0.Jt.T9.uA#n1.uB.sv.Sb.Sb.Sb.sw.xW.GG#n2#iA.ub.GG.GG.GG.GG.sy.xO.GG.GG#n3#n3#.Q#n4#n4#n5#bc#n6#n6#n7#n8#n9#o.#o.#o.#dF#dE#dE#dE#o##iF#iF#oa#iE#iD#iE#lm#lm#lm#ob#ln#ln#oc#od#oe#of#og#oh#oi#oj#ok#ol#om#on#oo#op#oq#or#os#ot#ou#ov#ow#ox#oy#oz#oA#oB#oC#oD#oE#oF#oG#oH#oI#oJ#oK#oL#oM#oN#oO#oP#oQ#oR#oS#oT#oU#oV#oW#oX#oY#oZ#o0.Oq#o1#o2#o3#o4#o5#o6#o7#o8#o9#p.#p##eQ#pa#pb#pc#pd#pe#pf#pg#ph.Xm#pi#pj#pk#pl#pm#pn#ev#po.2x#pp#pq#pr#ps#pt#mn#pu.Z##pv#pw#px#py#pz#pA#pB#pC#pD#pE#hf#pF#pG#pH#pI#pJ#pK#pL#pM#pN#pO#pP#pQ#pR#pS#pT#pU#px#pV#iX#pW#pX#pY#pZ#p0.Qh#cF#kd#m1.KM.KM.zq.7B.uu.uu.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.zR.zP.FC.FB.zP", +"#p1#m2#m2#p1#m2#m2#m2#m2#hE#hE#m2#m2#hE#hE#fa#fb#ah#ah#p2.KP.Ie#kg.M6.M6.Ie.M6.M6.Ie#m3#m3#m3.Ie.Ie.Ie.Ie#m3#kf#kf#kf.Ie.Ie.Ie.Ie.KP.KP.KP.M5.M5.Ie.KP.M5.Zn.M5.Zn.M5.5m.5m.FA.FA.FC.Vy.RG.Vy.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.M7.Vy.M7.M7.M7.M7.M7.M7.M7.RG.RG.RG.M7.M7.M7.KS.zR.zR.Ih#p3.Ih.Ih.CV.FF.z1#fc.Ik.Ik.FF.FF.Ik.Ik.FF.FF.z1.CT.CS.Px.Px.Ne.FD.KY.Py.Py.KZ.KZ.N#.Is.Ir.M8.RH.KW.Vz.It.KZ.Ng.Ni.CV.z1.z1.CV.CV.z1.z1.z1.z1.z1.z1.z1.CV.CR.Jo.Jo.Ng#ai#ai#ai.FI.sT.C9.D#.Db#p4#m7#p4#p4#p5#p6#p7#p8#p9#q.#q##qa#qb#qc#qd#qe#qf#qg#qh#qi#qj#qk#ql#qm#qn#qo#qp#qq#qr#qs.3N#qt#qu#qv#nu#qw#qx#qy#qz#qA#qB#qC#qD#qE#qF#qG#qH#qI#qJ#qK#kK#qL#qM#qN#qO#qP#qQ#qR#qS#qT#qU#qV#qW#qX#qY#qZ#q0#q1.NZ.x0.uA.uB.uB.D0.sv.sv.Sb.Sb.xW.A2.A2#g..sv.GG.GG.sv.sv.sw.sv.GG.ub.A2#q2#q3#q4#q4#q4#q5#q6#q6#q7#q8#q7#q9#r.#q6#n8#dD#ln#r##ra#rb#rc#rd#re#rf#rg#rh#ri#rj#rk#rl#rm#rn#ro#rp#rq#rr#rs#rt#ru#rv#rw#rx#ry#rz#rA#rB#rC#rD#rE#rF#rG#rH#rI#rJ#rK#rL#rM#gL#rN#rO#rP#rQ#rR#rS#rT#rU#rV#rW#rX#rY#rZ#r0#r1#r2#r3#bJ#r4.1##r5#r6#l1#r7.Br#r8#r9#s.#s#.1Z#sa#sb#sc#sd#se#sf#sg#sh#si#sj#sk#sl#sm#sn#so#sp#sq#sr#ss#st#su#sv#sw#sx#sy#sz#sA#sB.O9#sC#po#sD#sE#sF#sG#sH.6Q#sI#sJ.Mu#sK.Pk#sL#sM#sN#sO#sP#sQ#sR#sS#sT#sU#sV#sW#sX#sY#sZ#s0#s1#s2#s3#s4##a#s5#s6#s7#s8#p0.Cv#cF#kd#m1#s9#t..zp.7B.LJ.uu.xX.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.zP.FC.FC.FC.zP", +"#p1#m2#m2#m2#p1#p1#p1#m2#hE#hD#m2#m2#m2#m2#t##fa#ah#ah#p2#p2#ta.Ie.Ie#tb#tb#tb#ta.Ie.KP.KP.KP.KP#p2#ta.Ie.KP.KP.KP.7C#kf#kf.KP.KP.M5.M5.KP.KP.KP.KP.M5.M5.Zn.M5.Zn.Zn.5m.Zn.Vy.FB.FC.FB.RG.RG.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.M7.RG.RG.M7.M7.M7.M7.M7.M7.M7.M7.M7.RG.RG.RG.M7.zP.zR.KS.Ih#p3#p3.z1.Ih.Ih.Ih.z1.z1.FF.FF.Ih.FF.FF.FF.Ih.CV.ur.zU.FD.Ne.Xz.FD.FD.KZ.Py.Py.KZ.It.Is.Ir.N#.RH.Vz.KW.Vz.KZ#fc#fc.z1.z1.z1.zR.z1.z1.z1.z1.z1.z1.z1.z1.CT#tc.A9.K4#td#ai#td.zW.sT.C9#te.Ah#tf#tg#tg#tg#th#p6#ti#tj#tk#tl#tm#tn#to.xF#tp#tq.xF#tr#ts#tt#tu#tv#tw#tx#ty#tz#tA#tB#tC#tD#tE.xD#tF#tG#tH#kP#tI#tJ#tK#tL#tM#tN#tO#tP#tQ#tR#tS#tT#tU#tV#tW#tX#tY#tZ#t0#t1#t2#t3#t4#t5#t6#t7#t8#t9#u.#u##ua#ub#uc.VE.LH.uB.uB.uB.xN.uB.uB.D0.sv.sw.xO.ub.xO.sv.sv.sw.sw.sw.Qg.sy.sv.xO.A2#ud#ue#uf#ug#uh#ui#uj#uk#ul#um#un#gb#uo#up#uq#ur#us#ut#uu#uv#uw#ux#uy#uz#uA#uB#uC#uD#uE#uF#uG#uH#uI#uJ#uK#uL#uM#uN#uO#uP#uQ#uR#uS#uT#uU#uV#uW#uX#uY#uZ#u0#u1#u2#u3#u4#u5#u6#u7#u8#u9#v.#r3#v##va#vb#vc#vd#vd#ve#vf#vg#vh.S5.R###n#vi#vj#vj#vk#vl#vm#vn#vo#vp#vq#vr#vs#mT#vt#vu#sG#vv#vw#vx#vy#vz#vs#vA#vB#vn.U3.Op#vC#hh#vD#vE#g1#vF#vG.Th#eu#jw#vH#vI#vJ#vK#vL#vM#mn#vN.y5#vO#vP.Ro#vQ#vR#vS#vT#sK#vU#jP.Bw#vV#vW#vX#vY#vZ#v0#v1#v2#v3#v4#v5#v6#v7#v8#v9#w.#d9#w##wa#wb#wc#wd#we#wf.Qh.Cz.zp.KM#wg.KM.zr#cF.7B.uu.xX.xX.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.FC.FC.FC.FC.FC.zP.zP", +"#wh#p1#m2#m2#m2#p1#p1#p1#m2#hE#hE#hE#m2#hE#t##t##wi#wi#p2#ta#ta#p2#kf#ta#ta#ta#p2#p2#p2#p2#p2#p2#ta#ta#p2#p2#ah#ah.M5#kf#kf#kf.M5.Zn.Zn.M5.M5.M5.M5.M5.Zn.Zn.KP.Zn.Zn.5m.5m.Vy.Vy.FC.FA.RG.Vy.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.RG.RG.RG.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.RG.RG.RG.uq.zR.M7#wj#p3#p3.FF.FF#p3.FF.CV.ur.Ih.Ih.Ih.Ih.Ih.Ih.FF.FF.CV.ur.ur.CU.7D.Xz.KY.KY.KZ.KX.Py.KZ.Is.Ir.N#.M8.RH.Vz.KW.Px.KY#td.z1.z1.z1.zR.z1.z1.z1.z1.z1.z1.z1.CT.zT.up.zT.zU#fc.zZ.zW#wk.Db#p4#lf#lf#wl#wm#wn#wo#wp#wq#wr#ws#wt#wu#wv#ww#k6#wx#wy#wz#wA#wB#wC#wD#wE#wF#wG#wH#wI#wJ#wK#wL#wM#wN#aR.ZH#wO.XP#wP#wQ#wR#qy#wS#wT#wU#wV#wW#wX#wY#wZ#w0#w1#w2#w3#w4#w5#w6#nI#w7#w8#w9#x.#x##xa#xb#xc#xd#xe#xf#xg#xh#xi#xj.Xy.x0#dz#xk.D0.D0.D0.uB.uB.sv.sw.DY.xO.DY.sw.Sb.Qg.Qg.Qg.Qg.wG.zZ.z5#xl#xm#xn#xo#xp#xq#xr#xs#xt#xu#xv#xw#xx#xy#xz#xA#xB#xC#xD#xE#xF#xG#xH#xI#xJ#xK#xL#xL#xM#xN#xN#xO#xP#xQ#xR#xS#xT#xU#xV#xW#xX#xX#xY#xZ#x0#x1#x2#x3#x4#x5#x4#x6#x7#x8#x9#y.#y##ya#yb#yc#yd#ye#yf#yg#yh#yi#yj#yk#yl#ym#yn#yo#yp#yq#yr#ys#ys#yt#yu#yv#rT#yw#yx#yy#yz#yA#yB#yC#yD#yE#vm#yF#yG#yH#yI#vk#yJ#yK#yL#yM.69#vU#yN#yO#yP.y8#yQ#yR#yS#yT#yU#yV#yW#yX#yY.EK.6z#yZ#y0##C#y1#y2#y3#y4#y5#y6#y7#vh.B4#y8#y9#z..WW#z##za#zb#zc#zd#ze#jD#zf#zg#zh#zi#zj#zk#zl#zm.WB#zn#zo#zp#zq#zr#zs#zt#zu#zv#kc#m1#s9#zw#t..Cz.KM#kc.Qh.uu.xX.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.zP.zP.FC.FC.zP.zP", +"#p1#p1#p1#p1#m2#m2#m2#t##m2#m2#hE#hE#hE#t##fa#zx#zx#zy#zy#ta#ta#p2.KP.KP.KP#p2#p2#p2#p2#p2#p2#ta#ta#p2#p2#ah#ah#ah#ah.KP.KP.7C.90.90.Zn.Zn.Zn.Zn.Zn.M5.M5.M5.M5.Zn.Zn.Zn.5m.5m.RG.wx.FB.Vy.RG.RG.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.RG.Vy.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.Vy.zP.zP.zP.CV#zz#zz#wj#wj#p3#p3#p3#p3.z1.z1.z1.FF.FF.FF.FF.FF.FF.FF.z1.z1.CT.CQ.CU.Ne.Px.KY.KY.It.Py.KX.Iv.Ir.Is.Ik.M8.N#.Vz.Xw.Px.CT.CV.z1.CV.CV.z1.z1.z1.z1.z1.z1.z1.CT.ur#zA.Jo.zU.CT.zY#zB#zC#zD#zE#zF#zG#zH#zI#zJ#zK#zL#zM#ws#zN#zO#zP#zQ#zR#zS#zT#zU#zV#zW#zX#zY#zZ#z0#z1#z2#z3#z4#z5#z6#z7#z8#tz#if.1I#z9#A.#A##Aa#Ab#Ac#Ad#Ae#Af#Ag#Ah#Ai#Aj#Ak#Al#Am#An#Ao#Ap#Aq#Ar#As.2b#At#Au#Av#Aw#Ax#Ay#Az#AA#AB#AC#AD#AE#AF#AG#AH.u##AI#dz.uB.xN.uB.uB.uB.uA.Sb.Sb.Qg.CX.z0.z0.z0.Qg.T6.N1#AJ#AK#AL#AM#AN#AO#AP#AQ#AR#AS#AT#AU#AV#AW#AX#AY#AZ#A0#A1#A2#A3#A4#A5#A6#A7#A8#A9#B.#B##Ba#Bb#Bc#Bd#Be#Bf#Bg#Bh#Bi#Bj#Bk#Bl#Bh#Bm#Bn#Bo#Bp#Bq#Bo#Bq#Br#Bs#Bt#Bs#Bu#Bv#Bw#Bx#By#Bz#BA#BB#BC#BD#BE#BF#BG#BH#BI#BJ#BI#BK#BL#BM#BN#BO#BP#BQ#BR#BS#BT#BU#BV#BW#BX#BY#BZ#B0.80#rT##n#B1#B2#rQ#B3#B4.yK#oA#rX#B5#B6#B7#B8#B9#C.#sK#C##Ca#Cb#Cc#Cd#Ce#Cf#Cg#Ch#Ci#Cj#Ck#Cl#Cm#Cn#Co#Cp.Pl#gk#Cq#Cr#Cs.Rl#Ct#Cu#Cv#Cw.OS.Q9.B2#Cx.9l#Cy#Cz#CA#CB#CC#CD#CE#CF#CG#CH#CI#CJ#CK#CL#CM#CN#CO#CP#CQ#CR#CS#CT#p0.Cv#CU#CV#CW#CX#CU#CY.I.#kc#zv.ut.xX.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.FC.zP.zP.FC.FC.FC.zP.zP", +"#wh#p1#p1#CZ#CZ#CZ#CZ#p1#t##t##p1#m2#m2#t##t##zx#zx#C0#zy#C1#zy#p2#p2.KP.KP.KP.KP.KP.KP#p2#p2#tb#ta#p2#ah#ah#ah#ah#p2#p2.KP.Zn.Zn.90.90.90.Zn.Zn.M5.M5.M5.Zn.Zn.M5.Zn.5m.5m#C2.RG.FA.Vy.RG.RG.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.RG.RG.M7.M7.M7.M7.M7.M7.M7.M7.M7.M7.FC.zP.zP.KS.Ih#wj#zz#zz#zz#wj#wj#p3#p3.FF.z1.z1.Ih.Ih.KS.Ih.Ih.FF.FF.FF.z1.CT.ur.FD.Px.Pw.Px.KZ.It.Nf.Py.TB.FL.N#.M8.Ik.N#.Vz.RH.KZ#fc.z1.CV.CV.z1.z1.z1.z1.z1.z1.z1.z1.z1.CP.CR.zU.zU.zV.wO.sF#C3#C4#uf#zI#zJ#C5#C6#C7#C8#C9#D.#kl#D##Da#Db#Dc#Dd#De#Df#Dg#Dh#Di#Dj#Dk#Dl#Dm#Dn#Do#Dp#Dq#Dr#Ds#Dt#Du#Dv#Dw#Dx#Dy#Dz#DA#DB#DC#DD#DE#DF#DG#DH#DI#DJ#DK#DL#DM#DN#DO#DP#DQ#DR#DS#DT#DU#DV#DW#DX#DY#DZ#D0#D1#D2#D3#D4#D5#D6#D7#D8#D9#E.#E##Ea.T9#Ea.D0.uB.uA.Qg.KT.KT.sv#Eb#Ec#Ed#Ee#Ef#Eg#Eh#Ei#Ej#Ek#El#Em#En#Eo#Ep#Eq#Er#Es#Et#Eu#Ev#Ew#Ex#Ey#Ez#EA#EB#EC#ED#EE#EF#EG#EH#EI#EH#EJ#EK#Bk#EL#EM#Bi#Bm#EN#EO#EP#EQ#ER#ES#ET#EU#EV#EW#EX#EY#EZ#EU#xY#E0#E1#E2#E3#E4#E5#E6#E7#E8#E9#F.#F##Fa#Fb#Fc#Fd#Fe#Ff#Fg#Fh#Fi#Fj#Fk#Fl#Fm#Fn#Fo#Fp#Fq#Fr#Fs#Ft#Fu#Fv#Fw#Fx#Fy#Fz#FA#FB#FC#FD#FE#FF#FG#oC#FH#FI#FJ#oI#FK#B3#B6#FL#FM.W1#FN#FO#FP#ca#FQ#pD#FR#FS#lE#lE#FT#FU#FV#FW#FX#FY#FZ#Ch#F0#F1#F2#F3#F4#Cu#F5.HC.OU#F6#F7.4K#F8#F9#G.#G##pI#Ga#Gb#Gc#Gd#Ge#Gf#Gg#Gh#Gi#Gj#Gk#Gl#Gm#Gn#Go#Gp#Gq#Gr.Xt.Qh#Gs#Gt#Gu#CX#wg#m1.Cz#kd.zq.uD.ut.zP.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.zP.FC.FC.FC.zP.zP.zP", +"#Gv#Gw#CZ#CZ#p1#wh#wh#p1#p1#t##t##CZ#p1#m2#t##zx#C0#Gx#Gy#Gz#Gy#GA#p2#p2#p2#p2#p2#p2#p2.Ie.Ie.Ie#ta.M5.M5.M5.M5#ah#ta#ah.M5#fb#fb.Zn.Zn.90.7C.M5.M5.Zn.Zn.5m.Zn.Zn.5m.5m#C2.Vy.Vy.FB.RG.RG.M7.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.M7.RG.M7.M7.M7.M7.M7.M7.M7.zP.zP.zP.FC.M7.KS#zz#wj#wj#wj#zz#zz#zz#wj#wj#wj#wj.CV.CV.zR.KS.KS.KS.Ih.FF.FF.FF.FF.z1.ur.CT.KY.Pw.Px.Pw.KZ.KZ.KX.TB.Pu.Iv.M8.Ik.N#.N#.Vz.KZ#ai.z1.CV.zR.z1.z1.z1.z1.z1.z1.CU.FD.FD.CR.ur.ur.K5.Im#GB#GC#GD#uf#GE#GF#GG#GH#GI#GJ#zL#GK#GL#kl#GM#GN#GO#GP#GQ#GR#GS#GT#GU#wL#GV#GW#GX#GY#GZ#G0#G1#G2#G3#G4#G5#G6#G7#G8#G9#H.#H##Ha#Hb#Hc#Hd#He#Hf#Hg#Hh#Hi#Hj#Hk#Hl#Hm#Hn#Ho#Hp#Hq#Hr#Hs#Ht#Hu#Hv#Hw#Hx#Hy#Hz#HA#HB#nN#HC#HD#HE#HF#HG#HH#HI#HJ.PR#HK.uB.xN.sw.CT.CT#AJ#HL#HM#HN#HO#HP#HQ#HR#HS#HT#HU#HV#HW#HX#Et#HY#HZ#H0#H1#H2#H3#H4#H5#H6#H7#H8#H9#I.#I##I.#Ia#Ib#Ic#Id#Ie#If#Ig#Ih#Ii#Ij#Ik#Il#Im#Im#In#Io#Ip#Iq#Ir#Is#It#Iu#Iv#Iw#Ix#EW#Iy#Iz#IA#IB#IC#ID#IE#IF#IG#IH#II#IJ#IK#IL#IM#IN#IO#IP#IQ#IR#IS#IT#IU#IV#IW#IX#IY#IZ#I0#I1#I2#BR#I3#I4#I5#I6#I7#I8#I9#J.#J##Ja#Jb#Jc#Jd#Je#Jf#Jg#Jh#Ji#Jj#Jk#Jl#Jm#Jn#Jo#Jp#Jq#Jr##n#B5#Js#Jt#Ju#Jv#mB#yC#Jw#Jx#Jy#Jz#JA.BQ#JB#JC#JD#JE#JF#JG#JH#JI#JJ#JK#JL#JM#F5#JN#JO.U2.B2#JP.9r#JQ#JR#JS#JT#JU#JV#JW#JX#JY#JZ#J0#J1#J2#eR#J3#J4#J5#J6#J7#J8#J9#K.#p0.ux#zv#K##Gu#Ka#Kb#m1#kd.Cx.Cx#Kc.xY.xX.xX.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.FC.zP.xX.zO.zP.zP.xX.xX", +"#wh#Kd#Gw#wh#Ke#Kf#p1#p1#Ke#p1#t##t##CZ#CZ#Gx#Gx#zx#C0#Kg#Kg#Gy#Gy#GA#ta#GA#ta#ta#GA#ta#ta.Ie#p2.KP#ah#ah#ah#ah.M5.KP.M5#fb#fb#fb#fb#ah.M5.7C.90.Zn.5m.5m.Zn.Zn.5m.5m.5m#C2.FC.Vy.wx.Vy.M7.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.M7.RG.RG.RG.M7.M7.M7.M7.M7.zP.zP.zP.M7.RG#Kh#zz#zz#wj#wj#wj#wj#wj#wj#zz#zz#zz#zz.KS.zR.uq.KS.Ih.KS.KS.Ih.FF.FF.FF.z1.CV.zU.CT.KZ.Pw.Pw.Pw.It.It.Iv.TB.TB.It.M8.M8.M8.N#.M9#ai.FE.z1.CV.z1.z1.z1.z1.z1.FD.CU.CU.CT.zU.Qg.Qg.Sb#n3#n2#Ki#Kj#uh#Kk#Kl#Km#Kn#Ko#Kp#tk#ws#Kq#Kr#Ks#Kt#Ku#Kv#Kw#Kx#Ky#Kz#KA#KB#KC#KD#KE#KF#KG#KH#KI#KJ#KK#KL#KM#KN#KO#KP#KQ#KR#GW#KS#KT#KU#KV#KW#KX#KY#KZ#K0#K1#K2#K3#K4#K5#K6#K7#K8#K9#L.#L##La#La#Lb#Lc#Ld#Le#tM#Lf#Lg#Lh#Li#Lj#Lk#Ll#Lm#Ln#Lo#Lp#wr.D0.zU#AJ#Lq#Lr#Ls#Lt#Lu#Lv#Lw#Lx#.r#Ly#Lz#LA#Lz#Lz#LB#LC#LD#LE#LF#LG#LG#LH#LI#LJ#LK#LL#LM#LL#LN#LO#LP#LQ#LR#LS#LT#LT#LU#LU#LV#LW#LX#LV#LY#LZ#L0#L1#L2#Ip#EP#L3#L4#L4#L5#L6#L3#ET#L7#L8#L9#M.#M##Ma#Mb#Mc#Md#Me#Mf#Me#Mg#Mh#Mi#Mj#Mk#Ml#Mm#Mn#Mo#Mp#Mq#Mr#Ms#Mt#Mu#Mv#Mw#Mx#My#Mz#MA#MB#MC#MC#MD#ME#MF#MG#MH#MI#MJ#MK#ML#MM#MN#MO#MP#MQ#MR#MS#MT#MU#MV#MW#MX#MY#MZ#M0#M1#M2.vv#M3#M4.6E#rN#M5#M6#M7#M8.B5#M9#N.#N##Na.BQ#Nb#Nc#Nd#Ne#Nf#sF#Ng#Nh#Ni#Nj#Nk#Nl#Nm#Nl.Q8#Nn#No#Np#Nq#Nr.Os#Ns#Nt#Nu#Nv#Nw#Nx#Ny#Nz#NA#NB#NC#ND#NE#NF#NG#NH#NI#NJ#NK.H9.uD#Gu#NL#Ka#Kb#NM#kc.Cy.Cy.RE.uD.ut.xX.zP.zR.zR.zR.zR.zR.zR.zR.zR.zR.zR.xX.FC.zO.xX.ut.ut.xX.xX.ut.ut", +"#NN#NN#NN#Kf#p1#wh#wh#Kf#Kf#Ke#Ke#Ke#p1#p1#CZ#Gx#Gx#zx#C0#C0#Gx#C0#zy#zy#zy#ta#ta#GA#zy#p2#p2#p2#ah#ah#ah#ah#ah#ah#p2#ah#fb#fb#fb#ah#ah#ah.Zn#NO.5m.5m.5m.M5.5m.5m#C2.Zn#C2.Vy.FA.FC.RG.RG.M7.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.KS.zR.zP.FC.CN.RG.M7.zP.zP.zP.zP.M7.M7#Kh#C2#Kh#Kh#Kh#wj#wj#wj#wj#wj#wj#wj#wj#wj#wj.Ih.Ih.CV.CV.CV.Ih.KS.KS.Ih.Ih.Ih.FF.CV.CT#fc.FE.KZ.Pw.Nd.Iv.KZ.Iv.TB.KX.TB.It.M8.M8.M8.M9.zX.FE.z1.CV.z1.z1.z1.z1.z1.FD.CU.ur.Qg.zU.ur.GG.GG#n2#Ki#NP#ug#ui#Km#NQ#NR#NS#NT#NU#NV#Kq#NW#NX#NY#NZ#N0#N1#N2#N3#N4#N5#N6#N7#N8#N9#O.#O##Oa#Ob#Oc#Od#Oe#Of#Og#Oh#Oi#Oj#Ok#G4#Ol#Om#On#Oo#Op#Oq#Or#Os#Ot#Ou#Ov#Ow#Ox#Oy#Oz#OA#OB#OC#OD#OE#OF#OG#OH#OI#OJ#OK#Ai#OL#OM.ZG#tK#ON#OO#OP#OQ#OR#OS#OT#OU#OV.LL#OW#OX#OY#OZ#O0#O1#O2#O3#O4#O5#O6#O6#O7#O8#O9#P.#P##Pa#Pb#Id#Pc#Pd#Pe#Pf#Pf#Pg#Ph#Pi#Pj#Pk#Pl#O5#Pm#Pn#Po#Pp#Pq#Pr#Ps#Pt#Pu#Pv#Pw#Px#Py#Pz#PA#PB#EH#PC#PD#PE#PF#PG#PH#PI#M##EY#PJ#PJ#PK#PL#E1#EV#EV#PM#PN#PO#PP#PQ#Mg#PR#PS#PT#PU#PV#PW#PX#PY#PZ#P0#P1#P2#P3#P4#P5#P6#P7#P8#P9#Q.#Q##Qa#Qb#Qc#Qd#Qe#Qf#Qg#Qh#Qi#Qj#Qk#Ql#Qm#MM#Qn#Qo#Qp#Qq#MQ#Qr#Qs#Qt#Qu#Qv#Qw#Qx#Qy#Qz#QA#QB#QC#QD#QE#QF#QG#QH#QI.S5#QJ#QK#QL#Jx#QM#QN#QO#QP#QQ#QR#vv#QS#QT#QU#vW.Kh.Q9#QV#Nl#QW#QX#QY#QZ#Q0#Q1#Q2#Q3#Q4#JX#Q5#Q6#Q7#Q8#Q9#R.#R##Ra#Rb#Rc#Rd#Re#Rf#Rg#Rh.7D.ux.uD#Ri#K##Rj#CW#wg#NM#kc#Kc.ux.Qh.uu.xX.zP.zR.zR.zR.zR.zR.zR.zR.zR.zP.zP.zO.zO.xX.ut.ut.ut.ut.uu.uu.uu", +"#Rk#Rk#Rk#Rl#Kf#NN#NN#Rl#Rm#Rm#Rm#Rm#Kf#Kf#Kf#p1#p1#Gw#CZ#Gx#Gx#Gx#Gx#zx#zx#wi#zy#zx#wi#wi#ah#wi#p2#wi#wi#wi#wi#wi#zy#ah#fb#fa#wi#wi#fb#fb.5m#Rn#Rn.5m.5m.Zn.5m.5m#C2.5m.TA.TA.wx.RG.M7.Vy.M7.KS.M7.KS.M7.M7.M7.KS.KS.KS.zR.zP.CW.CW.ZS.zO.CN.CO.CO.zP.M7.M7#Kh#Kh#Kh#Ro#Ro#Ro#Kh#zz#wj#wj#wj#wj#wj#wj#wj#wj#wj#wj.Ih.Ih.Ih.CV.CV.Ih.KS.KS.KS.Ih.KS.KS.CV#fc#ai.M9.It.Nc.Nc.Pw.Iv.It.Iv.TB.KX.It.M8.Ik.VA#ai#fc.z1.zR.z1.z1.z1.z1.z1.FD.FD.uq.zU.zU.Qg.Sb.A2#Rp#Rq#Rr#Rs#Rt#Ru#Rv#Rw#Rx#Ry#Rz#RA#tl#RB#RC#RD#RE#RF#RG#RH#RI#RJ#RK#RL#RM#RN#RO#RP#RQ#RR#RS#Ob#RT#RU#RV#Dm#RW#RX#RY#RZ#R0#R1#R2#R3#R4#R5#R6#R7#R8#R9#S.#S##Sa#OA#Sb#Sc#Sd#Se#Sf#Sg#Sh#OF#Ah#Si#Sj#Sk#Sl#Sm#Sn#So#Sp#Sq#Sr#Ss#St#Su#Sv#Sw#Sx#Sy#Sz#SA#SB#SC#SD#Et#SE#SF#SG#O7#SH#SI#LA#Bj#SJ#SK#SL#LZ#SM#SN#SO#SP#SQ#SR#SS#ST#SU#SV#SW#SX#SY#SZ#S0#S1#S2#S3#S4#S5#O4#S6#S7#S8#S9#T.#T##Ta#Tb#Tc#Td#Te#Tf#Tg#Th#EU#PL#Ti#Tj#Tj#Tk#Tl#Tm#Tk#Tn#To#Tp#IC#Tq#Tr#Ts#Tt#Tu#Tv#Tv#Tw#Tw#Tx#IW#Ty#Tz#TA#TB#TC#TD#TE#TF#TG#TH#TI#TJ#TK#TL#TM#I2#TN#TO#BR#TN#I2#TP#TQ#TR#TS#TT#TT#TU#TV#TW#TX#TY#TZ#T0#T1#T2#T3#T4#T5#T6#T7#T8#T9#U.#U##Qx#Ua#Ub#Uc#Ud#Ue#Jj#Uf#Ug#Uh#Ui#Uj.B7#oU#oU#Uk#Ul#Um#Un#Uo#Up#Uq#Ur#Us#Ut#Uu.EN#Uv.yU#QX#vi#Nk#Uw#Ux#Uy#Uz#UA#UB#UC#UD#UE#UF#UG#UH#UI#UJ#UK#UL#UM#UN#Gi#UO#UP#UQ#UR#US.1h#UT#Gs#NL#Ka#Kb#NM#kc.7B#Kc#Kc.uu.uu.zO.FC.zP.zR.zR.zR.zR.zP.zP.zO.zO.uu.ut.ut.uu.zO.zO.zO.wx.zO.zO", +"#UU#UU#UU#UV#UV#UV#Rk#Rk#Rl#Rm#Rl#Rl#Rm#Rm#Rl#UW#Ke#Ke#wh#wh#Gw#wh#Gw#CZ#CZ#CZ#CZ#Gx#zx#CZ#t##zx#C0#C0#zx#zx#wi#wi#zy#ah#ah#fa#zy#wi.Zn#hD.5m#Rn#Rn.5m.5m.Zn.5m.5m#C2.5m.TA.FA.FB.Vy.M7.Vy.M7.KS.M7.M7.KS.M7.M7.KS.KS.CP.CW.uD.uu.zO.zO.xX.zO.zO.CN#UX#UY#Kh#Kh#Kh#Kh#Ro#C2#Kh#Kh#Kh#zz#wj#wj#wj#wj#wj#wj#wj#wj#wj#zz#zz.Ih.CV.CV.CV.Ih.Ih.KS.KS.KS.Ih.z1#ai#ai.C0.Ip.Iv.Nc.Nd.Nd.Iv.FL.Iv.Py.TB.KZ.KZ.VA#ai#fc.z1.CV.z1.CU.z1.FD.FD.CS.CT.zT.zT.wG.Qg.sB#UZ#Rp#U0#U1#U2#U3#U4#U5#U6#U7#U8#U9#V.#V##Va#Vb#Vc#Vd#Ve#Vf#Vg#Vh#Vi#Vj#Vk#Vl#Vm#Vn#Vo#Vp#qu#Vq#Vr#Vs#Vt#Vu#Vv#Vw#RU#Vx#Vy#Vz#VA#VB#VC#VD#VE#VF#VG#VH#VI#VJ#VK#VL#VM#VN#VO#VP#VQ#VR#VS#VT#VU#VV#VW#VX#VY#VZ#V0.NK#V1#V2#Ak#V3#V4#V5#V6#V7#V8#V9#W.#W##Wa#Wb#xJ#Wc#Wd#SG#Bi#We#Wf#Wf#Wg#SI#Wh#Wi#Wj#Wk#Wl#Wm#Wn#Wo#Wp#Wq#Wr#Ws#Wt#Wu#Wv#Ww#Wx#Wy#Wz#WA#WB#WC#WD#WE#WF#WE#WG#WH#WI#WI#WJ#WK#WL#WM#WN#WM#WO#WP#WQ#WR#WS#WT#WU#WV#WW#WX#WY#WZ#W0#W1#W2#W3#W4#W5#W6#W6#W7#W8#W9#X.#X##Xa#Xb#Xc#Xd#Xe#Xf#Xg#Xh#Xi#Xj#Xk#Xl#Xl#Xm#Xn#Xo#Xp#Xq#Xr#Xs#Xt#Xt#Xu#I4#Xv#Xw#Xx#TU#Xy#Qk#MI#Xx#Xz#XA#XB#XC#XD#XE#XF#XG#XH#XI#XJ#XK#XL#Qz#Qz#XM#XN#XO#XP#XQ#XR#XS#XT#XU#XV#XW#XX#XY#XZ#X0#Jx.SY#X1#X2#X3#X4#X5#X6#X7#X8#X9#Y..Q9#vi#QX#Y##Ya.U0#Nl#X3#Yb#Yc#Yd#Ye#Yf#Yg#Yh#Yi#Yj#Yk#Yl#Ym#Yn#Yo#Yp#Yq#Yr#Ys#Yt#Yu#Yv#Yw.ux#Gs#Yx#Yy#Kb#Yz#YA#YB#kc#zv#Kc.ux.uu.uu.zO.xX.xX.xX.zP.xX.zO.zO.uu.uu.uu.zO.zO.zO.wx.LJ.LJ.LJ.LJ.LJ", +"#YC#YD#YD#YD#Rk#UV#UU#UV#NN#NN#NN#Rk#Rl#Rl#Rm#Rm#p1#Ke#Gw#Gw#Gw#wh#wh#wh#wh#wh#Gw#YE#YE#Gw#CZ#Gx#C0#Kg#Gx#Gx#zx#zx#C0#wi#ah#ah#wi#fa#hD#hD.5m#Rn#Rn.5m.5m.M5.5m#C2#C2.RF.Vy.FB.FC.RG.RG.RG.RG.KS.M7.KS.KS.M7.M7.M7.KS.CQ.uD.1h.Jr.uu.zO.zO.wB.wA.LJ.wx.CN#YF#UX#Kh#Kh#Kh#Ro#Ro#Kh#Kh#Kh#zz#zz#wj#wj#wj#wj#wj#zz#zz#Kh#Kh#zz.KS.Ih.CV.zR.KS.KS.Ih.Ih.FF.Ik.FE#fc.C0.Ip.Ip.Iv.Nd.Pw.Iv.FL.It.It.TB.KX.It.It#ai#fc.z1.CV.CV.CU.FD.z1.FD.CT.Qg.Jo.su.CX.wI.sC#UZ#YG#YH#YI#YJ#YK#YL#YM#YN#YO#YP#YQ#YR#YS#YT#YU#YV#YW#YX#YY#YZ#Y0#Y1#Y2#Y3#Y4#Y5#Y6#Y7#Y8#Oz#Y9#Z.#Z##Za#Zb#Vx#Zc#Zd#Ze#Zf#Zg#Zh#Zi#Zj#Zk#Zl#Zm#Zn#Zo#Zp#Zq#Zr#S##Zs#Zt#Zu#Zv#Zw#Zx#Zy#Zz#ZA#ZB#K1#ZC#ZD#K9#ZE#ZF#VM#OM#Hk#ZG#ZH#ZI#ZJ#ZK#ZL#Ce#ZM#ZN#ZO#A3#ZP#Lz#Wg#Wg#ZQ#ZR#ZS#ZT#ZU#ZV#ZW#ZX#ZY#ZZ#Z0#Z1#Z2#Z3#Z4#Z5#Z6#Z7#Z8#Z9#0.#0##0a#0b#0c#0d#0e#0f#0g#0h#0i#0j#0k#0l#0m#0n#0o#0p#0q#0r#0s#0t#0u#0v#0w#0x#0y#0z#0A#0A#0B#0C#0D#0E#0F#0G#0H#0I#0J#0K#0L#0M#0N#0O#0O#0O#0P#0Q#0R#0S#0T#0U#0V#0W#0X#0Y#0Z#00#01#01#02#03#04#05#I4#06#07#08#09#09#1.#Xw#Xw#1##1a#MJ#1b#1c#1d#1e#1f#1g#1h.xm#1i#1j#1k#1l#1m#1n#1o#1p#1q#1r#Ud#1s#XQ#1t#1t#1u#1v#1w#1x#XL#1y#1z#TZ#1A#1B#1C#1D#1E#1F#1G#1H#1I#1J#vL#1K.HA#Nl.E2.E2.Q9#1L.OS.OS#1M#1N#1O#1P#1Q#1R#1S#1T#1U#1V#UI#1W#gR#1X#1Y#1Z#10.O8#11#12#13#14#15#16.uD#cD#YA#Yx#17#YA#18#YA#NM#kc.7B#Kc.H9.uD.ut.ut.ut.CW.zO.uu.ut.zO.uu.uD.uu.LJ.LJ.LJ.wv.LJ.Zm.wv.wv.Zm", +"#19#2.#YD#YD#2.#YD#YD#Rk#Rk#UV#NN#NN#NN#Rk#Rl#Kf#Kf#p1#p1#Gx#p1#p1#p1#wh#wh#wh#Gw#2##Gw#Gw#CZ#zx#GA#Gx#Gx#Gx#wi#zx#zy#wi#wi.M5#fa#fa#hE#hD.5m#Rn#Rn.5m.Zn.Zn.5m#C2.5m.TA.FA.FB.RG.M7.RG.RG.M7.KS.Ih.Ih.KS.KS.M7.M7.KS.7D.ut.Jp.1h#2a.wA.wA.wA#2a#2b#2b.wz.LJ.CN#UX#UY#Kh#Kh#Ro#Ro#Kh#Kh#Kh#Kh#zz#zz#zz#zz#zz#Kh#Kh#Kh#Kh#Kh#Kh.Ih.zR.uq.KS.Ih.Ih.FF.Ik.Ik.Ik.M9.C0.C0.Ip.Ip.Iv.Nd.Nc.Nc.Iv.Iv.Iv.TB.KX.Pw.M9#fc.CV.z1.CV.CU.FD.z1.z1.z1.CT.zU.xW.wH.3W#2c#2d#2e#2f#2g#2h#2i#2j#2k#2l#2m#2n#2o#2p#2q#2r#2s#2t#2u#2v#2w#2x#RS#2y#2z#2A#2B#2C#2D#2E#2F#2G#2H#2I#2J#2K#2L#2M#2N#2O#2P#2Q#2R#2S#2T#2U#2V#2W#2X#2Y#2Z#20#21#22#23#24#25#26#27#28#29#3.#3##3a#3b#3c#3d#3e#ZD#3f#3g#3h#3i#3j#3k#3l#3m#3n#3o#3p#3q#3r#3s#3t#Wg#Il#Wg#3u#Wf#3v#LA#3w#3x#3y#3z#3A#RW#3B#3C#3D#3E#3F#3G#3H#3I#3J#3K#3L#3M#3N#LH#3O#3P#3Q#3R#3S#3T#3U#3V#3W#3X#3V#3Y#3Z#3S#3S#30#31#32#33#34#35#36#37#38#39#4.#4##4a#4b#4c#4d#4e#4f#4g#4h#4i#4j#4k#4l#4m#4n#4o#4p#4q#4r#4s#Xo#4t#4u#4v#4w#4x#4y#4z#4A#4B#4C#4C#4D#4E#4F#4G#4H#4I#4J#4K#4L#4M#1b#Qi#Qj#1c#4N#4O#4P#4Q#4R#4S#4S#4S#4S#4R#1d#4T#4U#1i#4V#4W#4W#4X#4Y#4Z#40#41#42#Uc#43#MY#Qz#44#45#46#47#48#1u#49#5.#5##5a#5b#5c#5d#5e#5f#5g#5h#5i#5j#Uu.EW.OS#5k.Q9.EY#5l#5m#5n#5o#5p#5q#5r#5s#5t#5u#5v#5w#5x#5y#5z#5A#5B#5C#sv#5D#5E#5F#5G#5H#5I#p0.ux#UT#5J#5K#5L#5M#5N#Yx#UT#UT#zv.zq.Cv.uD.uD.uD.uu.uD.CW.uD.uD.H9.uu.Cv.Cv.Zm.Zm.Zm.Xu.9Z.9Z.9Z.9Z", +"#5O#19#2.#2.#2.#2.#YD#YD#2.#Rk#Rk#Rl#Rl#Rl#NN#NN#Kf#wh#wh#CZ#p1#wh#wh#p1#p1#p1#CZ#Gx#CZ#CZ#Gw#Gx#C0#zx#Gx#Gx#C0#C0#GA#zy#ah.M5#fb#hE#hE#hD.5m.5m#NO.5m.Zn.Zn.5m#C2.RF.Vy.wx.Vy.RG.M7.Vy.CO.CO.CP.CV.Ih.KS.KS.M7#UX.CP.CO.xY.1h#2a#2a#5P#5Q#5P#5R#5S#5S#5T#5S.wv.Vx.CN#UX#UY#Kh#Ro#Ro#Kh#Kh#Kh#Kh#Kh#zz#zz#Kh#Kh#Ro#Ro#Ro#Kh#Kh.Ih.zR.zR.CV.CV.FF.Ik.Ik.Ik.M8.M9.M9.C0.C1.Ip.Ip.It.Nc.Nc.Nc.Iv.Iv.Iv.3k.Pw.M9.FE.z1.CV.CV.CV.Ne.FD.z1.CT.ur.K4.wG.wF.6d.8v#5U#5V#Rs#5W#5X#5Y#5Z#50#51#52#53#54#55#56#57#58#59#6.#6##6a#6b#6c#6d#6e#6f#6g#6h#6i#nB#6j#6k#6l#6m#6n#6o#6p#6q#6r#6s#6t#6u#6v#6w#6x#6y#6z#6A#6B#6C#6D#6E#6F#6G#6H#6I#6J#6K#6L#6M#6N#6O#6P#6Q#6R#6S#6T#6U#6V#6W#6X#6Y#6Z#60#61#62#63#64#65#66#67#68#69#7.#7##7a#LB#7b#7c#7d#7e#7f#7g#7h#7i#7j#7k#7l#7m#7n.HI#7o#7p#7q#7r#7s#7t#7u#7v#7w#7x#7y#7z#7A#7B#7C#7D#7E#7F#7G#7H#7I#7E#7J#7K#7L#7M#7N#7O#7P#7Q#7R#7S#7T#7U#7V#7W#7X#7Y#7Z#70#71#72#73#74#75#76#77#78#79#8.#8##8a#8b#8c#8d#8e#Xn#8f#8g#8h#4z#8i#8j#8k#8l#8m#8n#8o#8p#8q#8r#8s#8t#8u#8v#8w#8x#8y#8y#8y#8y#8z#8z#8A#8B#4R#8C#8D#8E#8F#8G#8H#8I#8J#8y#8K#8L#8M#8N#8O#8P#8Q#8R#8S#8T#8U#8V#8W#8X#8Y#8Z#80#81#XQ#82#49#83#84#85#86#87#88#89#9.#9##9a#9b#9c.B2#Ux#9d#9e#9f#9g#9h#9i#9j#9k#9l#9m#9n#9o#9p#9q#9r#9s#9t#9u.9M#bQ#9v#9w#9x#9y#9z#9A#9B#9C#9D#9E.uD#kc#YA#9F#Yx#Yy#Yy#YA#Yx#5J#9G#9H#5R.7B.1h#2a#9I.ss.LJ.LJ.Cv.Zm.Zm.Xu.zq.Pr.Pr.Pr.1i.Pr#9J#9J#9J", +"#9K#9L#5O#19#19#5O#19#19#19#2.#2.#Rk#9M#Rl#9N#9N#NN#Kd#wh#Gw#wh#wh#wh#wh#wh#wh#Gw#YE#Gw#Gw#CZ#Gx#Kg#zx#zx#Gx#Kg#GA#p2#zx#wi#fb#hD#hE#hD#hD.5m#Rn#Rn.5m.5m.M5.5m.5m.TA.FB.FB.RG.Vy.CO.ZS.zO.uu.ut.CW.CQ.CP.CO.CO.CW.ut.uE.LJ#9O#9O.wA#5S#9O#5S#9O#5Q#9P#9Q#5T#5S.wz.LJ.CN#YF#UY#Kh#Ro#Ro#Ro#Kh#Kh#Kh#Kh#Kh#Kh#Ro#Ro#C2#Kh#zz#zz#wj.M7.Ih.CV.z1.Ik.Ik.Ik.M8.N#.M8.M9#ai.C0.C1.Ip.VA.Iv.Nc.Pv.Nc.Iv.Nd.Nd.KY.KZ.FD.z1.FD.CU.FD.CU.CV.CV.ur.xW.sv.wH.wI#9R#9S#9T#9U#9V#9W#9X#9Y#9Z#90#91#92#93#94#95#96#97#98#99a..a.#a.aa.ba.ca.da.ea.fa.ga.ha.ia.ja.ka.la.ma.na.oa.pa.qa.ra.sa.ta.ua.va.wa.xa.ya.za.Aa.Ba.Ca.Da.Ea.Fa.Ga.Ha.Ia.Ja.Ka.La.Ma.Na.Oa.Pa.Qa.Ra.Sa.Ta.Ua.Va.Wa.Xa.Ya.Za.0a.1a.2a.3a.4a.5a.6a.7a.8a.9a#.a##a#a#LBa#ba#c#O3a#da#ea#fa#ga#ha#ia#ja#ka#la#ma#na#oa#p.JRa#qa#ra#sa#ta#ua#va#wa#xa#ya#za#Aa#Ba#Ca#Da#Ea#Fa#Ga#Ha#Ia#Ja#Ka#La#Ma#Na#Oa#Pa#Qa#Ra#Sa#Ta#Ua#Va#Wa#X#7Za#Ya#Za#Za#0a#1a#2a#3a#4a#5a#6a#7a#8a#9a#9aa.aa#aaaaabaacaad.DTaaeaafaagaah#8laaiaajaak#8laalaamaanaao#XAaapaaqaaraasaataau#8HaavaawaawaawaaxaaxaawaayaazaazaaAaaA#8IaaB#8I#8JaaCaaD#8JaaEaaFaaGaaHaaIaaJaaKaaKaaLaaMaaNaaOaaPaaQaaRaaSaaRaaTaaUaaVaaWaaWaaX#T3aaY#1raaZaa0aa1#Jlaa2aa3aa4aa5aa6aa7aa8aa9ab.ab#abaabb.Kl#JCabcabdabe#1Iabfabgabhabiabj#X7abkablabmabnaboabpabqabrabs#5Jabt#5K#5K#Yz#5MabuabuabvabwabxabyabzabAabBabCabDabCabEabEabF.1i.1i.1i#cG#cG#cGabF#cG#cG.9ZabG", +"#9KabH#9L#9K#9L#9L#9LabI#19#19#5O#YC#2.#YD#UU#UU#9N#9NabJabK#Kd#Kd#Kd#Kd#Kd#Kd#GvabK#Gw#Gv#Gw#YEabL#Gx#zx#zx#Gy#Gy#zy#wi#wi#fb.5m#hE#hD.5m.5m#NO.5m.5m.5m.Zn.Zn.TA.FA.FB.CM.ZS.uD.uD.uu#2a#2b#2b.1h.uE.xY.CW.xY.uE.1h#2a#9OabM#9PabN#9P#9P#9PabO#9P#9P#9Q#9Q#9QabN#5S.wz.Vx#YF#UY#Ro#Ro#Kh#Ro#Ro#Ro#Ro#Ro#Ro#Ro#Kh#Ro#Kh#zz#zz#zz#zz.KS.CV.ur.FE.Ik.M8.M8.N#.N#.M8.M9#ai.C0.C0.M9.Ip.FL.Pv.Nc.Nc.Nd.It.KY.KZ.KY.FD.z1.KY.FD.CV.z1.CV.z1.CX.Qg.wIabPabQabR#U0abSabTabUabV#hgabWabXabYabZab0ab1ab2ab3ab4ab5ab6ab7ab8ab9ac.ac#acaacbaccacdaceacfacgachaciacjackaclacmacnacoacpacqacracsactacuacvacwacxacyaczacAacBacCacDacE#6IacFacGacHacIacJacKacLacMacNacOacPacQacRacSacTacUacVacWacXacYacZac0ac1ac2ac3ac4ac5ac6ac7ac8#LAac9ad.ad#adaadbadcaddadeadfadgadhadiadjadkadladmadnadoadpadqadradsadtaduadvadwadxadyadzadAadBadC#LFadDadDadEadFadGadH#IiadIadJadKadLadMadNadOadPadQadRadSadTadUadVadWadXadYadZad0ad1ad2ad3ad4ad5#TKad6ad7ad8ad9ad9ae.ae#aeaaafaeb#8kaagaecaedaeeaakaefaegaegaehaeiaejaekaelaemaen#8Eaeo#8H#8J#8IaepaeqaeraeraeraesaetaeuaevaevaevaewaexaeyaezaeAaeBaeCaeDaeEaeFaeGaeHaeIaeJaeKaeLaeLaeMaeNaeOaePaeQaeRaeSaeTaeUaeVaeWaeXaeYaeZ#XI#41ae0ae1ae2ae3ae4ae5ae6ae7ae8ae9af.af#afaafbafcafdafeaff#1Gafgafhafiafjafkafl#yZafmafnafoafpafqafrafsaftafuafv.7B#YAafw#9F#YxafxafyafzafAafBafCafDafEafFafGafHafIafIafJafKabEafLabFafLafMafLabM#9OabFabFabF#cG", +"#5O#9KafN#9LabHafNabHafNafNafOafOabIafPafQafQafQafQafRafSafSabJafSabJ#Gv#Kd#9NabK#2##Gw#Gv#Gv#YE#2##C0#Gx#C0#zy#C0#zx#fa#p2#fa.Zn#hE#hD.5m#Rn#Rn.5m.5m.Zn.Zn.Zn.TA.FA.CM.H9.ux.1h#2a#9OabMabMabM#9O#9O#2a.uE.ux#2a.wz#9OafTabD#9I#9I#9I#9P#9P#9I#9I#9I#9Q#9Q#9Q#9Q#5T#5S.wA.ZS#UX#UX#Kh#Kh#Ro#Ro#Ro#Ro#RoafUafU#Ro#C2#Kh#Kh#zz#zz#wj#wj.FF.z1.FE.M9.N#.N#.N#.N#.N#.M8.FE#ai.C0.VA.Ip.FM.Iv.It.Nd.KX.Iu.Nh.KY.FE.FE.z2.CT.CT.FE.z1.z1.zZ.Qg.wI.wIafVafW#5UafXafYafZaf0af1af2af3af4af5af6af7af8af9ag.ag#agaagbagcagdageagfaggaghagiagjagkaglagmagnagoagpagqagragsagtaguagvagwagxagyagzagAagBagCagDagEagFagGagHagIagJagKagLagM#6IagNagOagPagQagRagSagTagUagVagWagXagYagZag0ag1ag2ag3ag4ag5ag6ag7ag8ag9ah.ah#ahaahbahcahdaheahfahgahhahiahjahkahlahmahnahoahpahqahrahsahtahuahvahwahxahyahzahA.4KahBahCahDahEahFahGahH#PdahIahJahKahKahLahKahMahNahOahPahQahRahSahTahUahV#71ahWahXahYahZah0ah1ah2ah3ah4ah5ah6ah7ah8ah9ai.ai#aiaaibaicaidaieaifaigaihaiiaij#8kaikailaimaegainaioaipaiqairaisaitaiuaivaiwaixaiyaizaiAaiBaiCaenaiDaiDaiEaiFaiGaiHaiI#T2#T2aiJaiKaiLaiLaiMaiNaiOaeCaiPaiQaiRaiSaiTaiUaiVaiWaiXaiYaiYaiZai0ai1aePaePai2ai3ai4ai5ai6ai7ai8ai9aj.aj#ajaajbajcajdajeajeajfaiN#Xzajgajhajiajjajkajlajmajnajo.4Jajp#rN#Y#ajqajrajsajtajuajvajwajx#r9ajyajzajAajBajCajD.Xt#5Jabv#5K#YxafyajEajFajGajHajIajJajKajKajLajMajNajOajPajQajRajSabCabDafMajTajUafMafMafMafMafM", +"#9KajVabH#9K#9KabHabHajWajWajWajWajWafOafP#YC#UUajXafQafRajYafS#9N#9N#9N#Gv#Gv#Gw#YEabKabKabK#2##Kg#Kg#Gx#Kg#Gy#zx#fa#zx#wi#wi#fb#hD.5m#Rn#Rn.5m.Zn.Zn.5m.Zn.5m.Vy.FBajZ.uE.uG#2b#9OabD#9I#9I#9I#9Iaj0#9O#2a.uE.Jr.wA#2aaj1aj2abOaj3abO#9I#9I#9PabO#9I#9P#9Q#9Q#9Q#9Q#5T#5S.wz.zO.CO#UX#Roaj4#Kh#UY#UY#UY#Ro#RoafUaj4aj4aj4#NK#NK#p0aj5#p3.Ik.z1.FE.M9.M8.N#.N#.N#.N#.M8.M9#ai.C0.VA.Ip.Ip.Iv.Iu.FJ.zX.zX.FE.z0.z2.z2.CT.CT.z2.z1.z1.zZ.wI.sC.sCafW#9Saj6aj7aj8aj9ak.ak#akaakbakcakdakeakfakgakhakiakjakkaklakmaknakoakpakqakraksaktakuakvakwakxakyakzakAakBakCakDakEakFakGakHakIakJakKakLakMa.l#2IakNakOakPakQakRakSakTakUakVakWakXakXakYakZak0ak1ak2ak3ak4ak5ak6ak7ak8ak9al.al#alaalbalcaldalealfalgalhalialjalk#Fqall#ZUalmalnaloalpalq#mnalrals#b5altalualvalwalxalyalzalAalBalCalDalEalFalGalHalIalJalKalLalLalMalNalOalPalQalRalSalTalUalValWalXalYalZal0al1al2al3al4al5al6al7al8al9am.am.am.am.am.am.am#amaambamcam.am.am.am.amdameamfamg#8oamhamiamjamkamlammamnamoaiqampamqamramsamtamuamvamwamxamyamz#4xamAamBamC#XWamDamEamFamGaesaiIaiIamHaaxamH#8QamIamIaiMamJamKamLamMamNamOaiUamPamQamRamSamTamUamVamWamXamYaeP#86amZam0am1am2am3am4am5aeNam6ai6am7am8#41am9an.an#ae1anaanbancandaneanfanganhanianjankab.anlanmannanoanpajuanq#Neanransantanuanvanwanxanyanz#m0abt#9GanAanBanCanDanEanFanGanHanIanJanKanLanManNanOanPajQajQajQanQafKafHajTanRanSanTanUajT", +"anVanWanXanYanXanXanXanZanZanZanZajWafOafOafPafQafQafQafQ#UU#UV#UV#NN#NN#wh#wh#Gw#Gw#GvabKabK#Gx#Gx#Kg#Kg#Kg#C0#zx#fb#wi#wi#ah#fb.5m#Rn#Rn.Zn.Zn.Zn.5m.5m.5m#C2.Vy.CM.uD.uGan0afTabDabOabOabOabO#5PabEaj0aj1.uG.uE.1h#2aaj1abM#9IabOan1an1abO#9I#9I#9I#9I#9P#9Q#9Q#9Q#9Q#5T#5S#2b.wx.CN#UX#Kh#UY#UY#Kh#Kh#Kh#Ro#Ro#Roaj4#UY#zz#Kh#wj#p0aj5an2.Pt.z1.FD.KY.M8.Vz.Vz.Vz.M8.M9.M9.C0.C1.Ip.FL.KU.FJ.zW.zX#fc.z0.z0.FE.z0.CT.CT#fc.FE.zZ.zZ.wI.wIan3#9San4an5an6an7an8an9ao.ao#aoaaobaocaodaoeaofaogaohaoiaojaokaolaomaonaooaopaoqaoraosaotaouaovaowaoxaoyaozaoAaoBaoCaoDaoEaoFaoGaoHaoIaoJaoKaoLaoMaoNaoOaoPaoQaoRaoS#VXaoTaoUaoVaoWaoXaoYaoZao0ao1ao2ao3ao4ao5ao6ao7ao8ao9ap.ap#apaapbapcapdapeapfapgag9aphapiapjapkaplapmapnapoappapqaprapsaptapu#gkapvapwapxapyapzapA#saapBapC.yLapD#l7apEapFapGapHapIapJapKapLapMapNapOalNapPalMalN#3MapQapRapSapTapUapVapWapXapYapZap0ap1ap2ap3ap4ap5am.am.am.am.am.am.am.am.ap6ap7am.am.am.am.am.am.ap8ap9amAaq.aq#aqaaqbaqcaqdaqeaitaqfaqgamsamsaqgaqhaqi#Jgaqjaqkaqlaqmaqnaqoaqpaqqaqqaivaqraqs#8Laqt#I9aquaqvaqwaqxaiJaiI#T2aqy#T2aqzaqAaqA#8RaqBaqCaqDaqEaqFaqGaeIaqHaqIaqJaqJaqKaqLaqMaqN#86aqOaqPaqQaqRaqSaqTaqUam4am1aqVaqWaqXaqYaqZaq0aq1aq2aq3aq4aq5aq6aq7ancaq8aq9ar..B6#Nqar#ara.U5arbarbarc#5lardann#vyarearfargarhariarjark#5K#UT#YxarlarmarnaroarparqarrarsartaruarvarwanLarxaryarzarAarBajOarCarDarEarFarGarHarIarJarJ", +"arKarKarKanWarKarKanWanVanXarLanYarMarN#9LabIabI#YCafQ#YD#Rk#Rk#Rk#NN#Kf#Kf#Kf#Kd#Kd#Gv#Gv#Gv#Gw#Gx#Gx#Kg#C0#zx#zy#fa#fb#ah.M5.90#Rn.90.Zn.Zn.Zn.5m.5m.5m.5mafU#YF.Vx.1h#zv#5KarOaj3aj3aj3arParQarO.ZmarRaj1#2a.uG.uE.uu#kdarSarTarU#5KarPan1an1abO#9I#9I#9I#9P#9P#9Q#9Q#9Q#9PafL.Zm.wx.CN.RGarVarVarV#Kh#Kh#Kh#Kh#Ro#C2arWarWarXarYarY#p3an2aj5.Pt.KY.KY.Ij.RH.N#.Vz.Vz.RH.M9.KZ.C1.KU.Iu.FJ.zX.zX.zZ.M9#fc#fc#td.zV#td#td.zY.FG.CZ.wK.wK.sDarZar0ar1ar2ar3ar4ar5ar6ar7ar8ar9as.as#asaasbascasdaseasfasgashasiasjaskaslasmasnasoaspasq#GRasrassastasuasvaswasxasyaszasAasB.QaasCasDasEasFasGasHasIasJasKasLasMasN#LcasOasPasQasRasSasTasUasVasWasXasYasZas0as1as2as3as4as5as6as7as8as9at.at#ataatbatcatdateatfatgathatialnatjatkatlatmatnatoatpatqatratsatt#Giatuatvatw.O0atxatyatzatAatBatCatDatEatFatGatHatIatJatJatKatLatMatNatNapQatLatO#LJ#EF#BdatPatQatRatSatTatUatVatWatXatYam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.atZat0at1at2am.am.am.at3at4at5at6at7at8at8at9au.aqjaqjau#auaaubaucaudaueaudaufaugauhauiaujaujaqnaukaulaqvaumaunaqwamHauoaupaup#T2#T2auqauqaurausautauuauvauwauwauxauyauzauAauBauCauDauEauF#86#U.auGauHauIauJaqSauKauLauMauNauOauPauQauRaqYauSauTan.auUauVauWauXauYauZ#4Kau0au1au2au3ajqau4#QH#5h#9hannau5.E4au6au7au8au9av.av#avaavb#9Favcavdaveavfavgavharraviarwaruaruarwavjarvarwavkavlavmavnavoavpavqavravsavtavuavvavwavx", +"anWavyavzanWanWavzavzarKarKavAavAarKavBavCarNavDavDavE#YD#2.#9MavF#Rm#Rm#NN#NN#NN#Kd#wh#wh#Gw#CZ#t##zx#wi#wi#ah#ah#fb.M5.Zn#kf.7C.Zn.Zn.5m.5m#C2#C2#C2#C2#RnavG.ZS.uE.RE#m0afTaj1aj1abOaj1avHavIavJavKavL#2b#5P.Jr.CvavMavNavOavPavQavRavSafzarPafTaj1#9I#9I#9I#9P#9PabNabN#9OabMaj1.wA.FCavTarWarVarVarVarW#Kh#KharVarVavUavUarXarXavVavWavWavX.Ii.FF#fc.Ik.Ik.KT.N#.N#.Vz.RH.KZ.Nh.Iu.zX.zX#ai#fc.M9#ai#fc.zV.K5#td#fc.FG.FG.z4.wL.wL.z7#GCavYavZav0av1av2av3av4av5av6av7av8av9aw.aw#awaawbawcawdaweawfawgawhawiawjawkawlawmawnawoawpawqawrawsawtawuawvawwawxawyawzawAawBawCawDawEawFawGawHawIawJawKawLawMawNawOawPawQawRawSawTawUawVawWawXawYawZaw0aw1aw2aw3aw4aw5aw6aw7aw8aw9ax.ax#axaaxbaxcaxdaxe#ULaxfaxgaxhaxiaxjaxkaxlaxmaxnaxoaxpaxqaxraxsaxt##baxuaxv.QLaxwaxxaxyaxzaxA#CoaxBaxCaxDaxEaxFaxGaxHaxIaxJaxKaxLaxMaxNaxNatLatOaxOatOaxPaxQaxRaxSaxTap5am.am.am.am.am.axUaxVam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.axWam.am.am.am.am.am.am.am.ap5axXaxYaxZax0ax1ax2ax3ax4ax5ax6ax7ax8ax9ay.ay#ax8ayaaybaycaydayeayeayeaydayfayf#XUaeraupaupaupaiHaygayhayhayiayjaykaylaylaymaynayoaypayqayrai0aysaytauG#80#80ayuayvaqMaywayxayyayzayAaaVayBayCayDayEayFayGayH#87#XIayIayJayKayLayMayNayOayPayQaeoayR.XnaySayT#QY.S7##S#9hayU#rNannafpayVayWayXayYayZarOafJanPajOavqay0ay0ay1ay2ay3avuay4ay5ay6ay7ay8ay9az.ay9az#azaay5ay6ay5ay5ay5azbazcazdaze", +"avyavyazfazfazgazgazgazganWanWanXanXavAavBazhazhaziazjazkazlazmaznazoazpazn#Kf#Kf#Ke#p1#m2#hE#fa#fa#fb#ah#fb.M5#ah.M5.7C.90.90.Zn.5m.5m#C2#C2#C2#Ro#Roaj4avG.CM.1hazqazqaj1#5NazrazsaztazuazvazwazxazyazzazA.LJ#dBazBazCazDazEazFazGazHazIazJazKazLarPafT#5P#9I#9IabM#9O#9O#5PazMabOazMazNazOazPazQazRazSazSavUavUazSavUavUazRazSazQazQavVavWavWavW.z2.z2.z0azTazT.6a.6aazU.N#.N#.VA#ai#fc#fc.FE.FG.zY.zZ.zV.zV.zV.zZ.FG.FG.Na.z6.wKazV.sD.sEazWazXazYazZaz0az1az2az3az4az5az6az7az8az9aA.aA#aAaasdaAbaAcaAdaAeaAfaAgaAhaAiaAjaAkaAlaAmaAnaAoaApaAqaAraAsaAtaAuaAvaAwaAxaAyaAzaAAaABaACaADaAEaAFaAGaAHaAIaAJaAKaALaAM.EzaANaAOaAPaAQaARaASaATaAUaAVaAWaAXaAYaAZaA0aA1aA2aA3aA4aA5aA6aA7a.3aA8aA9aB..BNaB#aBa#gzaBbaBcaBdaBeaBfaBgaBhaBiaBjaBkaBlaBmaBnaBoaBp#YsaBqaBraBsaBtaBuaBvaBwaBxaByaBzaBAaBBaBCaBDaBEaBFaBGaBHaBIaxPaBJ#LK#EE#EEaBK#I.aBLaBMaBNam.am.am.am.am.am.am.am.at2am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.at2aBOaBPaBQaBRaBSaBTaBUaBVaBWaBXaBYayaaBZaB0aB1aB2aB3aB4aB5aB6aB7#XGaB8#1naB9aC.aiHaygaC#aCaaCbaCcaCbaCdaCdaCeaCfaCgaChaCiaCjaCkaClamXauG#80aCmaCn#86aCoaeNaCpam5aCqaCeaCraCsayzaeWaCt#84aCuaCv#87aCwaCxaavaCyaCzaCAaCBaCCaCDaCEaCFaCGaCHaCIaCJaCKaCL#y8#9iard.U6aCMaCNaCO.6iaCPaCQaCRaCSaCTaCUaCVaCWaCXaCYaCZaC0aC1aC2aC3aC4aC4aC5aC6aC7azaaC8aC9azaaD.aD#aDaaDbaDcaDdaDeaDf", +"aDgaDhaDiaDhaDhaDjaDjaDkaDiaDiaDlaDmavAaDnavCaDoaDoaDpaDqaDraDqaDsaDtaDsaDtaDuaDvaDwaDxaDyaDyaDyaDzaDAaDy.TA.TA.5maDBaDB#Rn#RnafUaj4aj4aj4aj4aj4#Ro#YF.CM.VxabFabE#RiaDCaDDaDEaDFaDGaDHaDIaDJaDKaDLaDMaDNaDOaDPaDQaDRaDSaDTaDUaDVaDWaDXaDYaDZaD0aD1aD2abvarPafT#9O#9O#5PazMazMaD3aD3aD4aD5aD6aD7aD8aD8aD9aD9aE.aD9aD9aD8aD8aD8aD9aD9aD9aE.aE#aE#aEaaEbazT.6daEcaEcaEd.6a.z4.z4.wL.z6.zZ.zZ.zZ.zZ.zY.zW.wI.wI.z6.wI.zV.zY.zY.z6.wK.z7.z8aEeaEfaEg#2faEhaEiaEjaEkaElaEmaEnaEoaEpaEqaEraEsaEtaEuaEvaEwaExaEyaEzaEAaEBaECaEDaEEaEFaEGaEHaEIaEJaEKaELaAqaEMaENaEOaEPaEQaERaESaET.EvaEUaEVaEWaEXaEYaEZaE0aE1aE2aE3aE4aE5aE6aE7aE8aE9aF.aF#aFaaFbaFcaFdaFeaFfaFgaFhaFiaFjaFkaFlaFmaFnaFoaFpaFqaFraFsaFtaFuaFvaFw#kxaFxaFyaFzaFAaFBaFCaFDaFEaFFaFGaFHaFIaFJaFKaFLaFMaFNaALaFOaFPaFQaFRaFSaFTaFUaFVaFWaFXaFYaFZaF0aF1aF2aF3aF4aF5aF6aF6aF7aF8aF1aF9aG.aG#ap5am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.aGaaGbaGcaGdaGeaGfaGgaGhaGiaGjaGkaGlaGmaGnaGoaGpaGqaGraGsaGtaGu#TZaawaGvaGwaeqaGxauoaGyaGzaGAaGBaGBaCbaGCaGDaGEaGFaGGaGHaGIaGJaGKaGLaywaCmaCmaGMauF#86auDaGNaGOaeNaGPaGQaGRaGSaGTaGUaGVayuaGWaqZ#8ZaGXaGYaGZaG0aG1amGaG2aG3aCCaG4aG5aG6aG7aG8aG9aH.aH#aHaaHb.T.aHcaHdaHeaHfaHgaHhaHiaHjaHkaHlaHmaHnay5aHoaHpaHpaC5aHqaHraHsaHtaHuaHvaHwaHvaHxaHyaHzaHAaHBaHCaHDaHEaHFaHG", +"aDkaHHaHIaDkaDkazfazfaHIaHJaHIaDjaHKaDmavAaDmaHLaHMaHLaDoaHMaHNazpaHOaDsaDtaHPaHQaHRaHS.FBaDxaHSaHRaDx.Vy.Vy.Vy.Vy.Vy.RG.RG.RG.M7.M7.M7.M7.M7.M7#UX.CN.LJabEaHTaHUaHVaHWaHXaHYaHZaH0aH1aH2aH3aH4aH5aH6aH7aH8aH9aI.aI#aIaaIbaIcaIdaIeaIfaIgaIhaIiaIjaIkaIlaImabvarPaj1aIn.ZWaD3aIoaIpaIpaIqaIraIsaItaIuaIvaIvaIvaItaIvaIwaIwaIuaItaItaIvaIxaIxaIyaIzaIAaIBaIBaIAaIBaICaIDazVazVazV.3W.wJ.sC.GG.wI.wJ.wJ.3WazV.3W.3W.sC.wK.wK.wO.sN.z8aIEaIFaIGaIHaIHaIIaIJaIKaILaIMaINaIOaIPaIQaIRaISaITaIUaIVaIWaIXaIYaIZaI0aI1aI2aI3aI4aI5aI6aI7aI8aI9aJ.aJ#aJaaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaJmaJnaJoaJpaJqaJraJsaJtaJuaJvaJw.KqaJxaJyaJzaJAaJBaJCaJDaJEaJFaJGaJHaJIaJJaJKaJLasYaJMaJNaJOaJPaJQaJRaJSaJTaJUaJVaJWaJXaJYaJZaJ0aJ1aJ2aJ3aJ4aJ5aJ6aJ7aJ8aJ9aK.aK#aKaaKbaKcaKd.Rt.O9ahpaKeaKfaKgaKhaKiaKjaKkaKlaKmaKnaKoaKpaKqaKraKsaKtaKuaKvaKwaKxaKyaKzaKAaKBam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.aKCaKDaKEaKFaKGaKHaKIaKJaKKaGkaKLaKMaKNaKOaKPaKQaKRaKRaKSaGu#8N#8N#8N#8N#8NaKTaKUaKVaaxaqvaKWaKXaKYaKZaK0aK1aGEaGEaK2aK3aK4aClaGKaK5aePaK6#85aCm#86aK7aK8aeOaK9aL.ai6aL#aLaaLbaLcaLdaLeaLfayuaLg#XNaLhaK8aLiaLjaLkaLlamGaLmaLnaLoaLpaLqaLraq7aLsaLtaLu.KlaLvayW#Jy#mAaLwaLxaLyaLzaLAaLBaHlaLCaLDaLEaLFaHsaLGaHsaLHaLIaLJaLKaLLaLMaHzaHtaLNaLOaLOaLPaLQaLRaLSaLTaLUaHF", +"aHHaLVaLWaLWazfaDgaLXaLXaDgaLWaHIaDjaHKaLYaDmaLZaDoaHLaHMaL0aIsaIsaIwaL1azpaL2azoaL3aL4aL4aHRaDwaDxaHSaHSaL5aL6aL5aL5.zP.zP.zPaL7aL7aL7aL7aL7.M7.zP.ssabDaL8aL9aM.aM#aMaaMbaMcaMdaMeaMfaMgaMhaMiaMjaMkaMlaMmaMnaMoaMpaMqaMraMsaMtaMuaMvaMwaMxaMyaMzaMAaMBaMCaMDaME#ljaMFaMGaMHaMIaMJaMKaMLaMLaMMaL0aMNaMOaL0aL0aMPaMPaIsaHMaHMaHMaMQaIsaL0aMRaMSaMSaMSaMSaMRaMTaMSaMSaMUaICaMVaMVaMWaMWaMW.sB.sB.sBaMWaMW.8vaMWaMWazV.z8.z8.sV.sV.sGaEf#C3#9TaMXaMYaMZaM0aM1aM2aM3aM4aM5aM6aM7aIUaM8aM9aN.aN#aNaaNbaNcaNdaNeaAfaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaNqaNraNsaNtaNuaNv.QLaNwaNxaNyaNzaNAaNBaNCaNDaNEaNFaNGaNHaNIaNJaNKaNLaNMaNNaNOaNPaNQaNRaNSaNTaNUaNVaNWaNXaNYaJLaNZaN0aN1aN2aN3aN4aN5aN6aN7aN8aN9aO.aO#aOaaOb#jnaOcaOdaOeaOfaOgaOhaOiaOjaOkaOlaOmaOnaOoaOpaOqaxyaOraOsaOtaOuaOvaOwaOxaOyaOzaOAaOBaOCaODaOEaOFaOGaOHaOIaOJaOKaOLaOMaONaOOaOPaOQam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.aORaOSaOTaOUaOVaOWaOXaOYaOZaO0aO1aO2aKMaO3aO4aO5aO6aO7aO8aKSaO9aP.aP##4XaPaaPb#8QaunaPcaPdaPeaPfaK0aPgaPhaPfaK1aGEaGDaCsaPiaPjaPkaPlaPmaPnaPoauF#U.aaRaPpaPqauJaPraPsaPtaaWaPuaPvaK3aaRai4aK6aCmaaSaaSaCuaPwaPxaPyaPzaPAaG2aPBaPCaCEaPDaPEaPFaPGaPHaPIaPJaPKaPLaPMaPNaPOaPPaPQaPRaPSaLAaPTaPUaPVaPWaPXaLIaLJaPYaPZaP0aP1aP2aP3aLUaLMaP4aP5aLPaP6aP6aP7aP8aP9aQ.aQ.", +"aQ#aQaaQaaQbaQbaQcaQcaQdaQbaQbaQbaHJaQeaQfaQgaQhaLZaQhaDoaHMaHMaQiaIzaIsaL1aIwaQjaQkaL3aL3aL3aQlaDwaL4aL4aL4aL3azPazPavT.M7.M7.KSaQmaQmaQmavT.CP.sr#5PaQnaQoaQpaQqaQraQsaQtaQuaQvaQwaQxaQyaQzaQAaQBaQCaQDaQEaQFaQGaQHaQIaQJaQKaQLaQMaQNaQOaQPaQQaQRaQSaQTaQUaQVaQWaMFaQXaMJaQYaQYaQZaMLaQgaQgaQ0aQ0aQ0aQ1aQ1aQ2aMOaMNaQ3aQ4aQ5aQhaL0aMOaMOaL0aQ6aQ2aQ6aQ7aQ6aQ6aQ6aQ6aQ8aQ8aQ8aQ9aMVaMVaICaMV#2c#2caR.aR#aR#aRaaRbaRbaIEaIE.z8aEe.sF#C3aIGazWaRcaRdaReaRfaRgaRhaRiaRjaRkaRlaRmaRnaRoaRpaRqaRraRsaRtaRuaRvaRwaRxaRyaRzaRAaRBaRCaRDaREaRFaRGaRHaRI#f1aRJaRKaRLaRMaRNaROaRPaRQaRRaRSaRTaRUaRVaRWaRXaRYaRZaR0aR1aR2aR3aR4aR5aR6aR7aR8aR9aS.aS#aSaaSb.UraScaSdaSeaSfaSgaShaSiaSjaSkaSlaSmaSnaSoaSpaSqaSraSs#SoaStaSuaSvaSwaSxaSyaSzaSAaSBaSCaSDaSEaSF#qVaSGaSHaSIaSJaSKaSLaSMaSNaSOaSPaSQaSRaSSaSTaSUaSVaSWaSWaSXaSYaSZaS0aS1aS2aS3am.am.am.aS4aS5am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.aS6aS7aS8aS9aT.aT#aTaaTbaTcaTdaTeaTfaTgaThaTiaTjaO5aTkaTlaTmaTnaToaTpaTqaTraTsaTtaTuaTvaTuaKWaCbaKXaTwaTxaTyaTzaTzaTAaGEaGEaTBaTCaTDaTEaPsaTFaTGaTH#86aTIaaRaTJai1aTKaGFam6aTLaK9aTMaTNaTOam0auGauFauFaTPaK7#U.aTQ#8XaTRaTSaTTaTUaq3aTVaTWaTXaTYaTZaT0aT1aT2#yD#F0aT3aT4aT5aT6aT7aT8aT9aU.aU#aUaaUbaHEaUcaUdaUeaUfaUgaUhaUiaUjaUkaUlaUmaUnaUoaP6aUpaUqaUqaUraUsaUs", +"aUtaUuaUuaQdaUvaUwaUxaUwaUyaUyaQcaLWazfaDlaUzaLZaQhaL0aLZaDoaDoaIsaMRaMRaIsaIwaQjaQkaQjazoazoaL3aL3azPazPaL3aL3aL3aUAaUAaQm.KS#USaQmaQmaQmaQm.uq.starPaUBaUCaUDaUEaUFaUGaUHaUIaUJaUKaULaUMaUNaUOaUPaUQaURaUSaUTaUUaUVaUWaUXaUYaUZaU0aU1aU2aU3aU4aU5aU6aU7aU8aU9aIqaMJaV.aQYaV#aVaaVbaVcaQ1aVdaVeaVfaVgaVhaViaVjaVkaVlaVmaVnaVnaVjaQ3aMNaMNaQ3aQ3aQ3aVkaVjaQ2aQ3aQ0aQ0aQ0aVoaVpaVqaVpaVraQ9aQ9aQ9aR#aVsaVsaVtaVtaVuaVvaVvaVv#xlaIEaEfaVwaVxaVyaEgaMYaVzaVAaVBaVCaVDaVEaVFaVGaVHaVIaVJaVKaVLaVMaVNaVOaVPaVQaVRaVSaVTaVUaVVaVWaVXaVYaVZaV0aV1aV2aV3aV4aV5aV6aV7aV8aV9aW.aW#aWaaWbaWcaWdaWeaWfaWgaWhaWiaWjaWkaWlaWmaWnaWoaWpaWqaWraWsaWtaWuaWvaWw#pVaWxaWyaWzaWAaWBaWCaWDaWEaWFaWGaWHaWIaWJaFraWKaWLaWMaWNaWOaWPaWQaWRaWSaWTaWUaWVaWWaWXaWYaWZaW0aW1aW2aW3aW4aW5aW6aW7aW8aW9aX.aX#aXaaXbaXcaXdaXeaXfaXgaXhaXiaXjaXkaXlaXmaXnaXoam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.aXpaXqaXraXsaXtaXuaXvaXwaXxaXyaXzaXAaXzaTdaXBaXCaXDaXEaO5aXFaXGaXHaXIaXIaXJaKWaXKauoaPbauoaqwaXLaKWaCdaylaXMaXNaXOaPfaK1aK1aXPaXQam6aXRaXSaGFaXTaXUaTHaCmaqOauG#8ZaXVaXWaXXaCbaTraKWaXYaXZaX0aaQ#QyaTQaK7aX1aX2aX3aX4aX5#T4aCxaX6aX7aX8aX9#1faY.aY#aYaae1aYbaYcaYdaYeaYfaYgaYhaYiaYjaYkaU.aYlaU.aUbaYmaYmaYnaYoaYpaUfaYqaYraYsaYtaYuaYvaYwaYxaYyaYzaYAaYBaYCaYDaYE", +"aYFaYGaYGaUuaUuaUyaYHaYHaYIaYJaYKaYLaYMazfaYNaYOaVdaQ2aQhaLZaL0aQ6aYPaMRaMRaIzaYQaYRaIzaQjaQjaQjaQjazPaUAaUAaUAaUAaQkaYSaYRaQm.KS.KSaYSaQm.KS.uq.utafzaYTaYUaYVaYWaYXaYYaYZaY0aY1aY2aY3aY4aY5aY6aY7aY8aY9aZ.aZ#aZaaZbaZcaZdaZeaZfaZgaZhaZiaZjaZkaZlaZmaZnaZoaZpaZqaQYaQYaZraDlaZsaZtaZtaZuaZuaZvaZvaZwaZwaZuaVeaVnaZxaZyaZzaZxaZAaZBaZBaVnaVmaVjaVkaVjaViaVjaVjaZCaVfaVeaVdaVcaVqaZDaVdaVqaVpaZEaZFaZGaZHaZIaZIaZJaVtaZKaZLaZMaZNaZNaZOaZOaZPaZQaRdaZRaZSaZTaZUaZVaZWaZXaZYaZZaZ0aZ1aZ2aZ3aZ4aZ5aZ6aZ7aZ8aZ9a0.a0#a0aa0ba0ca0da0ea0fa0ga0ha0ia0ja0ka0la0ma0na0oa0pa0qa0ra0sa0ta0ta0ua0va0wa0xa0ya0za0Aa0Ba0Ca0Da0Ea0Fa0Ga0Ha0Ia0Ja0Ka0La0Ma0Na0Oa0Pa0Qa0Ra0SaWAa0Ta0Ua0Va0Wa0Xa0Ya0Za00a01##Ja02a03a04a05a06a07a08a09a1.a1#a1aa1ba1ca1da1ea1fa1ga1ha1ia1ja1ka1la1ma1na1oa1pa1qa1ra1sa1ta1ua1va1wa1xa1ya1za1Aa1Ba1Ca1Da1Eam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.a1Fa1Ga1Ha1Ia1JaXyaTcaXAaTba1KaXza1La1Ma1Na1Oa1Pa1Qa1Ra1RaTma1Sa1Ta1Ua1VaGBaCa#QuayiaGCa1WaCba1Xa1Ya1Za10aTzaXOaTzaK1aK1a11aXQaCsaXRaGOa12a13a14aCn#U.#86#86aqP#8YaXVa15a16a17a18a19a2.a2#a2aa2b#XLa2c#U.#T5#T6ayka2da2ea2fa2gayMa2ha2ia2ja2ka2la2maCza2na2oa2pa2qa2raLla2sa2ta2ua2va2wa2xaU.aHEa2ya2za2Aa2Ba2CaYsa2Da2Da2Da2Ea2Fa2Ga2Ha2Ia2Ja2Ka2La2Ma2Na2O", +"a2PaYFa2QaYFa2Ra2PaYIa2Sa2Ta2Ta2UaYFa2VaYMa2WaYNaZsaVcaVoaQ0aQ0a2XaQ7aYPaMRaMRaIzaYQaYQaYQaYQaYQaYQaQkaYQaYQaYQaYQaEbaEb.Il.FF.Il.Ii.Il.Il.Ih.CU.xWa2Ya2Za20a21a22a23a24a25a26a27a28a29a3.a3#a3aa3ba3ca3da3ea3fa3ga3ha3ia3ja3ka3la3ma3na3oa3pa3qa3ra3sa3ta3ua3va3wa3xa3ya3za2WaZwaZwa3Aa3Ba3Ca3Ca3Da3Ca3Aa3Ba3Ea3Fa3Ga3Ha3Ia3Ia3Ja3Ka3Ka3LaZya3MaZAaVeaViaZBa3Na3Oa3Pa3Pa3QaVea3Ra3Sa3Ra3TaVcaVqa3Ua3Va3Wa3Xa3Xa3Xa3Ya3Za30a31a31aZMaEga32aRcaRda33a34a35a36a37a38a39a4.a4#a4aa4ba4ca4daVMaZ4a4ea4fa4ga4ha4ia4ja4ka4la4ma4na4oa4pa4qa4ra4sa4ta4ua4va4wa4xa4ya4za4Aa4Ba4Ca4Da4Ea4Fa4Ga4Ha4Ia4Ja4Ka0ya4LaWga4Ma4Na4Oa4Pa4Qa4Ra4Sa4Ta4Ua4Va4Wa4Xa4Ya4Z.H3a40a41a08a42a43a44a45a46a47a48a49.yBa5.a5#a5a.uRa5ba5ca5da5ea5f.JLa5ga5h#CJa5ia5ja5ka5la5ma5na5oa5pa5qa5ra5sa5ta5ua5va5wa5xa5ya5za5Aa5Ba5Ca5Da5Ea5Fa5Ga5Ha5Ia5Jam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.a5Ka5LaXwaXxa5MaXva1Ka5Na1Ka5Oa5Pa1La5Qa5Ra5Sa5Ta5Ua5Va5Wa5Xa5Ya5Za50a51a52aCcaCcaTwa53a1ZaX3aX3a54a55a56aTza57a58a59a6.a6#aTBaGOa6aa6ba6caqWayua6daX1a6ea6faeQa6ga6g#Uba6ha6iaPzaiua6ja1Xa6ka6la6m#U#a6na6oa6pa6qa6ra6sa6ta6ua2hauVa6va2ka6w#Xwaqta6xa6y#8Ca6za6Aa6Ba6Ca6Da6Ea6Fa6Ga2wa6Ha6Ia6Ja6Ka6La6Ma6Na6Oa6Pa2Da6Qa6Ra6Sa6Ta6Ua6Va6Wa6Xa6Ya6Za6Z", +"a60a61a62a2Ua63a64a65a66a67a67a68a2Ua69a7.aYMa7#a7aaZsa3TaVqaVqaVqa7baQ8a7ca7caMSaIra7da7eaYQa7ea7daMRaMRaMRaMRaYPaICa7f.z0.FF.FF.Ii.Ik.FF.Ik.FFa7ga7ha7ia7ja7ka7la7ma7na7oa7pa7qa7ra7sa7ta7ua7va7wa7xa7ya7za7Aa7Ba7Ca7Da7Ea7Fa7Ga7Ha7Ia7Ja7Ka7La7Ma7Na7Oa7Pa7Qa7Ra7Sa7Ta7Ua7VaZva3Ca7Wa7Wa7Wa7Wa7Xa7Ya7Za70a70a71a72a3Ia73a73a74a3Ha3Ha72a74a3Ja74a75a76a77a78a79a8.a8#a8aa8ba8ca3Qa3Sa8daZsaZsa3Xa8ea8ea7wa7wa7wa8fa8ga8ga8ha8ia8ja8ka8la8ma8na8oa8pa8qa8ra8ra8sa8ta8ua8va8wa8xa8ya4da4da8za4da8Aa8Ba8Ca8Da8Ea8Fa8Ga8Ha8Ia8Ja0fa8Ka8La8Ma8Na8O.ywa8Pa8Qa8Ra8Sa8Ta8Ua8Ta8Va8Wa8Xa8Ya8Xa8Za80a81a82a83a84a85a86a87a88a89a9.a9#a9aa9ba9ca9da9eanta9fa9ga9ha9ia9ja9ka9l#g2a9ma9na9oa9pa9qa9ra9sa9ta9ua9va9wa9xa9y.0P.OHa9za5ka9Aa9Ba9Ca9Da9Ea9F.vga9Ga9Ha9Ia9Ja9Ka9La9Ma9Na9Oa9Pa9Qa9Ra9Sa9Ta9Ua9Va9Wa9Xa9Ya9Za90a91a92am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.a93a94a95a96a5Na97a1KaTga1Ka5OaTga98a99a1Jb..b.#b.ab.bb.cb.db.eb.eb.fb.gaTwaGCayjb.ha1Zb.ib.jb.jb.kb.la57b.mb.mb.nb.nb.oaTFaTBb.paeXaPob.qayEb.rb.sb.tb.ua6laXV#8Yb.vb.wb.xb.yb.zb.Ab.Bb.Cb.Db.Eb.Fb.Gb.Ha6ob.Ib.Jb.Kb.Db.Lb.Mb.Nb.NaG4b.Ob.Pb.Qb.R#1gb.Sb.Tb.U#8Cb.Vb.Wb.Xb.Yb.Zb.0b.1b.2b.3b.4b.5b.6b.7a2Hb.8b.9b#.b##b#ab#bb#cb#db#eb#fb#gb#hb#i", +"b#jb#kb#jb#lb#mb#nb#ob#pb#qb#rb#ma65a63a69b#sb#tb#tb#ub#va3RaZDb#wa2Xa2XaQ7aQ7aMRaMRaMRaMSaMSaMRaMPaMMa7baVqb#xb#yb#z#.Sb#AaIDaIDaID.z5.z0azTb#Bb#Cb#Db#Eb#Fb#Gb#Hb#Ib#Jb#Kb#Lb#Mb#Nb#Ob#Pb#Qb#Rb#Sb#Tb#Ub#Vb#Wb#Xb#Yb#Zb#0b#1b#2b#3b#4b#5b#6b#7b#8b#9ba.ba#baababbacbadbaeaLya70bafbaga7Zbaha7Ya7Ybaibajbakbalbalbalbambambama70balbalbalbanbaobalbalbanbapbaqbarbarbarbasbasa8#bata8bbaub#Tb#Ta7#bava7#bawbaxbaybazbaAbaBbaCbaAbaDbaEbaFbaGbaHbaIbaJbaKbaLbaMbaNbaObaPbaQbaRbaSbaTbaUaZ5aVMbaVbaWbaXbaYbaZa8Dba0ba1ba2ba3ba4ba5ba6ba7ba8ba9bb.bb#bbabbbbbcbbdbbebbfa4Ga8Vbbgbbhbbibbjbbka81bblbbmbbnbbobbpbbqbbrbbsbbtbbubbvbbwbbxbbybbzbbAbbBbbC.S3bbDbbEbbFbbGbbHbbIbbJbbKbbLbbM.BObbNbbObbPbbQbbRbbSbbTbbUbbVbbWbbXbbYbbZbb0bb1bb2bb3bb4bb5bb6bb7bb8bb9bc.bc#bcabcbbccbcdbcebcfbcgbchbcibcjbckbclbcmbcnbcobcpam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.bcqbcrbcsbctaXvbcubcvaTgbcwbcxbcya5ObczbcAbcBbcCb.abcDbcEbcFbcGbcHbcIbcJaXObcKa55bcLbcMbcNbcObcPbcNbcQb.mbcRbcSbcTbcUa58b.oaTFaaWbcVbcW#86aK6aK6bcXbcYbcZbc0bc1bc2bc3bc4#42aCCbc5bc6bc7bc8bc9a2.bd.bd#bdabdbb.Kbdcbddbdebdfbdgbdh#9.bdibdjaLpbdk#1gbdlbdmaqsa6xaCAbdnaiwbdobdpbdqb.ybdrbdsbdtbdubdvbdwbdxa2Ga2GbdybdzbdAbdBbdCbdAbdDbdEbdFbdGbdHbdH", +"bdIbdIbdJbdKbdLbdMbdNbdObdPbdQb#pbdRb#la63bdSbdTbdUbdVbdWbdXbdYaZCa3ObdZbd0bd0bd0aMNbd1bd1bd1bd0aZCa3Sa8dbd2bd3bd3bd4bd5bd5bd6bd7bd8bd9be.be#aZIbeabebbecbedbeebefbegbehbeibejbekbelbembenbeobepb#kb#kbeqberbesbetbeubevbewbexbeybezbeAbeBbeCbeDbeEbeFbeGbeHbeIbeJbeKbeLbeMbeNbeObePbeQbeRbeSbeTbeTbeUbeVbeWbakbeXbeYbeZbe0be0beYbajbajbaibalbe1bakbeZbakbe1be2baha7Zbe3be4bahbe5b#Rb#Rbe6b#Sbe6be7baxbe8be9bf.beobeobf#bfabfabfbbfcbfdbfebffbfgbfhbfibfjbfkbflbfmbfnbfobfpbfqbfrbfsbftbfsbfubfvaZ5bfwbfxbfybfzbfAbfBbfCbfDbfEbfFbfGbfHbfIbfJbfKbfLbfMbfNbfObfPa8UbfQbbfbfRbbibfSbbhbbibblbfTbfTa4Ea83bfUbfVbfWbfXbfYbfZbf0bf1bf2bf3bf4bf5arebf6bf7bf8bf9bg.bg#bgabgbbgcbgdbgebgfbggbgh#.1bgibgjbgkbglbgmbgnbgobgpbgqbgrbgsbgtbgubgvbb1bgwbgxbgybgzbgAbgBaTabgCbgDbgEbgFbgGbgHbgIbgJbgKbgLbgMbgNbgObgPbgQbgRbgSbgTam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.bgUbgVbgWbgXaXvbgYbgZbg0bg1bg2bgZbczaXvbg3bg4bg5bg6bg7bg8bg9bh.bh#bcHbhabhbbhcbhdbcMbcObhebhfbhgb.kbcLbhhbhib.mbhjbhjb.oa58aaWbhkbhlaLeai4bhmbhnbcXbhobhpbhqbhrbhsbhtbhubhvbhw#89bhxbhybhzbhAbhBbhCbhDbhEbhFbhGbhHbhIbhJbhKbhLbhMbhNbhObhPaTWaTWaTTbhQbhRbhSbhTbhUbhVbhWbhXbhYbhZ#XQbc4bh0bh1bh2bh3bh4bh5bh6bh7bh8bh9bi.bi#biabibbicbidbiebifbig", +"b#qb#qbihbdObdPbiibijbikbikbdPbdQbilb#pbimbinbiobeSbipbaha79a78a78biqbirbisbitbitbitbiubivbita78biwbe5bixbixbiybiybizbiAbizbiBbiCbiDbatbiEbiFbiGbiHbiIbiJbiKbiLbiMbiNbiObiPbiQbiRbiSbiTbiUbiVbdKbiWbiXbiYbiZbi0bi1bi2bi3bi4bi5bi6bi7bi8bi9bj.bj#bjabjbbjcbjdbjebjfbjgbjhbjibjjbjkbjlbjmbjmbjmbjnbeQbjnbjnbjobjpbjqbjqbeVbjrbjrbjqbePbeUbeUbeZbajbeQbeUbajbjsbjtbePbeUbagbjsbjsbjubarbe3bdVbjvbjvbdUbjwbdTbdTbjxbjybjzbjzbjybjAbjBbjCbjDbjEbjFbjGbjHbjIbjJbjKbjLa8sbjMbjNbjObjPbjQbjRbftbjSaVMaVMaVLbjTbjUbjVbjWbjXbjYbjZbj0bj1bj2bj3bj4bj5bj6bj7bj8bj9bk.bk#bkaaVPbkbbkcbbfbkdbkebkfa80bkgbkhbkia83bkjbkkbklbkmbknbkobkpbkqbkrbksbktbkubkvbkwbkxbkybkzbkAbkBbkCbkDbkEbkFbkGbkHbkIbkJbkKbkLbkMbkNbkObkPbkQbkRbkSbkTbkUbkVbkWbkXbkYbkZbk0bk1bk2bk3bk4bk5bk6bcabk7bk8bk9bl.bl#blablbblcbldbleblfblgblhblibljblkbllblmam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.blnbloblpblqa5UblrblsbltblublvblwblxblyblyaFcblzblAblBblCblDblEblFblGblHaXOblIblJblKblLb.jbcMblMbhibhhbcRa57b.lblNblOblPblPblQblRaeSai4ai4aeSblSbhpblTbcZaGWblUblVblWblXbhvblYblZbhUbl0bl1bl2bl3bl4bl5bl6bl7bl8bl9bm.bm#bmabmbbmcbmdbmebmfbmgbmhaTWbmibmjbmkbmlbmmbmnbmobmpbmqbhWaPwbmrbms#0zbmtbmubmvbmwbmxbmybdEbmzbdFbdFb#gbmAbmBbmCbmDbmD", +"bmEbmEbmFbmGbmGbmFbmFbmHbmIbmHbmJbmKbmKbmLbmMbmNbmObjnbmPbmQbmRbmSbmTbmUbmVbmUbmWbmXbmXbmYbmTbmZbm0bmQbm1bmQbm0bm2bm3bm3bm4bm4bm3bjvbjvbjwaQabm5bm6bm7bm8bm9bn.bn#bnabnbbncbndbnebdPbnfbngbnhbiWbnibnfbiXbnjbnkbnlbnmbnnbnobnpbnqbnrbnsbntbnubnvbnwbnxbnybnzbnAbnBbnCbnDbnEbnFbnGbnHbnIbnJbnKbmObjmbjmbnLbnMbnNbnObnPbnQbnRbnSbnQbnPbeVbnTbeQbeVbnUbnUbnUbjnbjmbjmbnVbePbnWbnXbnYbnYbeRbnZbe3bjwbdTbeSbeSbeRbeRbepbepbn0bn1bn1bn2bn3bn4bn5bn6bn7bn8bn9bo.bfmbfmbo#boabobbocbodboebofbogbohaRraVMboibojbokbolbombonboobopboqborbosbotboubovbowboxboybozboAboBboCboDboEboFboGboHboIboJboKboLboMboNboOboPboQboRboSboTboUboVboWboXboYboZbo0arebo1bo2bo3bo4bo5bo6bo7bo8bo9bp.bp##ZLbpabpbbpcbpdbpebpfbpgbphbpibpjbpkbplbpmbpnbpobppbpq#e6bprbps.yibptbpubpvbpwbpxbpybpzbcdbpAbpBbpCbpDbpEbpFbpGbpHbpIbpJbpKam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.bpLbpMbpNbpObpPbpQbpRbpSbpTbpUbpVbpWbpXbpYbpZbp0bp1b.ebp2bp3bp4bp4bhabhcaTGbp5bp6bcMbp7bp6bhhblMbhgbp8bhibcLa58bp9blOblNblObq.#85aLfai4ai4ai4bhqbq#bqabqbai3bqcbqd#MWbqebqfbqgam8bqh#Qxbqibqjbl3bl3bqkbhybql#5#bqmbmcbqnbqobqpbqqbqrbqsbqlbqtbqubqv#1f#4HbqwbqxbqybqzbmmbqAbqBbdfbqCbqDbqEbmhbqFbqGbqHbqIbqJbqKbqLbdFbqMbdHbqNbqNbqObqPbqQ", +"bqRbqSbqTbqUbqUbqVbqWbqXbqYbqZbqYbq0bnfbmHbq1bq2biYbq3bq4bq5bq6bq7bq8bq9br.br.br#brabr#brbbrcbrcbq9bq8brdbrdbq9brebrcbrfbjobrgbrfbrgbrhbria63brjbrkbrlbrmbrnbrobrpbrqbrrbrsbrtbrubnfbrvbnfbrwbnfbrxbrybnhbrzbrAbrBbrCbrDbrwbrEbrFbrGbrHbrIbrJbrKbrLa7nbrMbrNaLNbrObrPbrQbrRbrSbrTbrUbrVbrWbrXbnKbnLbnKbrYbrYbnMbnKbrZbr0brZbrZbjlbnObr1br2bjmbnMbrZbr3br1bnMbnMbjlbnLbjmbmObr4bjobnXbr5a60bipbeRa60br6br7br7br8br8br9bs.bs#bdIbdJbsabsbbscbsdbsebsfbsgbo#bshbshbsibsjbskbslbsmbsnbsobfsbspbsqaRra8zbsrbssbstbsubsvbswbsxbsybszbsAbsBbsCbsDbsE#d8bsFbsGbsHbsIbsJbsKbsLbsMbsNboIbkebsObsPbsQbsRbsSbsTbsUbsVbsWbsXbsYbsZbs0bs1bs2bs3bs4bs5bs6bs7bs8bs9bt.bt#btabtbbtc#mybtdbtebtfa9hbtgbthbtibtjbtkbtlbtmbtnbtobtpbtqbtrbtsbttbtubpqbtvbtwbtxbtybtzbtAbtBbtCbtDbtEbtFbtGbtHbtIbtJbtKbtLbtMbpHbtNbtObtPam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.btQbtRbtSbtTbtUbtSbtVbtWbtXbtYam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.btZbt0bt1bt2bt3bt4bt5bt6bt7bt6bt8bt9bpXbu.bu#buabubbucbcJblGbhabhaaXObcUbudbhibcRblIbcTb.mblJbuebhfbuebcMbufbp9aTFaTFaTFblObugaPobuhaeSaeSauQbuibujbukaqZbulaaRauGbumbunaGNaK4buobqh#1ybupbuqburbusbl3butbqlbuubl1buvbuwbuxbuybuzbdcbuAbuB#MSbuCbuDbuEbuFbuGbuHb.S#XSbuIbuJbuKbuL#T7buM#45buNaasbuObuPbqHbuQbuRbidbqMbuSbqNbqNbuTbqNbmC", +"buUbuVbuWbuXbuYbuXbuXbuZbu0bu1bu2bu3bu4bu5bqWbu6bu7bu8bu9bv.bv#bvabvbbvcbvdbvdbvebvdbvfbvfbvgbvgbvhbvhbvhbvhbvibvjbvgbvkbvlbvlbvlbvmbvnbvobvobiFbe8bvpbvqbvrbvsbvtbvubvvbvwbiXbrwbvxbnibrvbnfbrybrxbrybrwbvybvzbvAbvBbvCbvDbvEbvFbvGbvHbvIbvJbvKbvLbvMbvNbvObvPbvQaC7bvRbvSbvTbvUbvVbvWbvXbvYbvZbv0bvZbv1bvYbvZbvZbnHbv2bv3bv4bv0bvZbrXbv0bv5brXbrVbv6bv4brVbv7brVbv8bv9bmNbnNbnNbnLbw.bw#br9brib#kbiVb#kbw.bwab#nbwabdIbdJbdNbwbbvxbwcbwdbwebwfbwgbwhbwibwjbwkbsjbwlbwmbwnbwobwpbwqbjRbwrbwsbwtaRrbwubwvbwwbwxbwybwzbwAbwBbwCbwDbwEbwFbwGbwHbwIbwJbwKbwLbwMbwNbwObwPbwQbwRbwSbwTbwUbwVbwWbwXbwYbwZbw0bw1bw2bw3bw4bw5bw6bw7bw8bw9bx.bs4bx#bxabxbbxcbxdbxebxfbxgbxhbxibxj.KdbxkbxlbxmbxnbxobxpbxqbxrbxsbxtbxubxvbxwbxxbxybxzbxAbxBbxC.H6bxDbxEbxFbxGbxHbxIbxJbxKbxLbxMbxNbxObxPbxQbxRbxSbxTbxUbxVam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.bxWbxXbxYbxZbx0bx1bx2bx3bx4bx5bx6bx7bx8bx9by.am.ap5ap5am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.a1Fby#byabybbycbydbyebyfbygbyhbgWbt8byibyja46bu#bykbylbymbynbyobhabhabcKa59bypbyqaTzaK1bypbyrblLbhfbueblJbcSbysbugbytblOa6.a6.byubq.byvaCobywbyxai3aPp#MXauGbunbyybyzaePaaPaeNbyAbyBaChbyCbyDbyEa6na1Zbl3byFbyGbyHbyIbyJbqpbm#bm.bl1bl1byKbyLbyMbyNbyObyP#XzbyQbyRbySaLibyTa6tbyUbyVbyWbyXaX5b.ubyTbyYbyZby0by1by2by3by4bdHby5bqNbuTby5", +"by6by7by8by9by9by8bz.bz#bzabzabzbbzcbzdbzebuVbzfbzgbzhbzibzjbzkbzkbzlbzmbzmbznbvhbzobvhbzpbzqbzrbzsbztbzubzvbzqbzwbzwbzwbu9bzxbzybzybzzbvnbzybeRbzAbzBbzCbzDbzEbzFbzGbzHbzIbzJbrwbrybnibrvbrvbu6bzKbqXbnfbzL.VMbzMbzNbzObzPbzQbzRbzSbzTbzUbzVbzWbzXbzYbzZbz0bz1bz2bz3bz4bz5bz6bz7bz8bz9bA.bA#brUbAabAbbAcbAcbAbbAbbAdbAebAfbAfbAgbrUbAcbAhbAgbAibAjbAkbAkbAlbAlbAlbAmbAnbAnbrWbrWbq2bv8bwabwabdIbdJbdJbAobvobq2bApbdNbAqbArbrwbq0bAsbAtbAubAvbAwbAxbAybAzbAAbABbACbACbADbAEbAFbAGbAHbAHbAIbAJbAKbALbAMbANbAObAPbAQbARbASbATbAUbAVbAWbAXbAYbAZbA0bA1bA2bA3bA4bA5bA6bA7bA8bA9bB.bB#bBabBbbBcbBdbBebBfbBgbBhbBibBjbBkbBlbBmbBnbBobBpbBqbBrbBsbBtbBu.BvbBvbBwbBxbBybBzbBAbBBbBCbBDbBEbBFbBGbBHbBIbxrbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBVbBW.M1bBXbBYbBZbpwbB0bgFbB1bB2bB3bB4#nnbB5bB6bB7bB8bB9bC.am.am.am.am.am.am.am.am.am.am.am.am.am.ap5bC#ap5am.am.bCabCbap5am.am.am.am.am.am.am.am.am.bCcbCdbCebCfbCgbChbCibCjbCkbClbCmbCnbCobCpbCqbCrbCsam.bCtap5bCuam.am.am.am.am.am.am.bCvbCwap5ap5am.am.am.am.am.am.am.am.am.am.am.am.am.am.bCxbCybCzbCAbCBbCCbyebCDbCEbCEbCFbCGbCHbCIbykbcPbCJbCKbynbCLbCMbCNaXOaTzaK0aXObCOaTzbhjblJbuebCPbhfblMbcLbCQbCRbCSbCTblQaTGbysblQaPtbCUbCVbcWbCWbCXbCYbCZbyzbumbunbyybyybyzaTCbC0am2bC0bC1bC2aTOaGDbC3busbC4#MZbhNbC5bC6bC7bC8bC9bD.bD.bhJbD#bDabDbbDcbDdbDebDf#8CbDgaiJbDhbDiaiLbyUbDjbDkbDlbyqb.ubDmbDnbDobDpbDqbDrbqNbDsbqNbdHbqN", +"bDtbDubDvbDwbDxbDxbDybDzby7by7bDAbDAbzabzcbDBbDCbDDbzlbDEbDFbDGbDHbDIbDJbDKbDLbDMbzpbDNbDObDPbDQbDRbDSbDTbDUbDDbDDbDVbDVbDWbDXbu7bu8bDYbDYbDZbiYbvobD0bD1bD2bD3bD4bD5bD6bD7bD8bD9bnfbrvbq0brwbrwbE.bqYbD9bE#bEabEbbEcbEdbEebEfbEgbEhbEibEjaYrbEkbElbEmbEnbEobEpbEqbErbEsbEtbEubEvbEwbExbEybEzbEAbEBbEBbECbEDbECbEEbEEbEFbEGbEHbEHbvVbEIbEJbEKbELbEIbz9bEMbENbEObENbEPbEQbEQbERbq1bq1bESbETbEUbAnbAnbdNbAqbwbbmJbrwbvxbEVbEWbAsbEXbEYbEZbE0bE1bE2bE3bE4bE5bE6bE7bE8bE9bF.bF#bFabFbbfrbFcbFdbjRbFebFebFfbFgbFhbFibFjbFkbFlbFmbFnbFobFpbFqbFrbFsbFtbFubFvbFwbFxbFybFzbFAbFBbFCbFDboHbfPbFEa8DbFFbFGbFHbFIbFJbFKbFLbFMbFNbFObFPbFQbFRbFSbFTbFUbFVbFWbFXbFYbFZbF0bF1bF2bF3bF4bF5bF6bF7bBGbF8bF9bG.bG#bGabGbbGcbGdbGebGfbGgbGhbGibGjbGkbGlbGmbGnbGobGpbGqbGrbGsbGtbGubGvbGwbGxbGybGzbGAbGBbGCbGDbGEbGFam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.bGGbGHbGIbGJbGKbGLam.am.am.am.am.am.am.blmbGMbGNbGObGPbGQbGRbGSbGTbGUbGVbGWbGVbGXbGYbGZbG0bG1bG2bG3am.ap5ap5am.am.am.am.am.am.am.bG4bG5bG6bG7ap5am.am.am.am.am.am.am.am.am.am.am.am.am.bG8bG9bH.bH#bHabHbbHcbHdbHebHfbHgbHhbHibHjbHkbHlbHmbHnbHobHpbhabHqbHraPfbCObHrbHsbHtaXObhjbHubHvbHwbHxbhibcSbHybHzbHAbHBbHCbHDbHEblSbHFam7bHGai9bCXbHHbHIbHJbyzbHKbumamYai2ai2aj.aPsaTNbHLaPraCgam6a6.byubHMaTQbqda6mbHNbHObHPbHQbHRbHSbHTbHUbHVbHWbHXbHYbHZbH0bH1bH2bH3aB7aLibDibH4bdfbH5bH6bH7bH8bH9bI.bI#bIabIbbIcbIdbqNbDsbqNbqN", +"bDvbIebIfbIgbIhbIibDxbIjbDybIkby8by7by8bIlbImbDLbInbIobIpbIqbIrbIsbItbIubIvbIwbIgbDNbzrbzpbIxbIybIzbIAbIBbICbIDbIEbIDbIFbIFbIFbIGbIGbIGbIHbIIbIJbIKbIFbILbIMbINbIObIPbIQbIRbrEbISbITbISbIUbAsbE.bISbrxbrybIVbIWbIXbIYbIZbI0bI1bI2bI3bI4aYra2DbI5bI6bI7bI8bI9bJ.bJ#bJabJbbz3bJcbJdbJebJfbJgbJhbJibJjbJkbJlbJlbJmbJjbJkbJnbJnbJobJpbJqbJpbJpbJrbJsbJpbJtbEwbJubJvbJwbEwbJxbJybzfbIObIObJzbJzbnfbJAbJBbJCbrwbzKbqWbISbJDbJEbJFbJGbJHbJIbJJbJKbJLbJMbJNbJObJPbJQbJRbJSbJTbJUbJVbJWbJXbJYbJZbJ0bJ1aVLbJ2bJ3bFgbJ4bJ5bJ6bJ7bJ8bJ9bK.bK#bKabKbbKcbKdbKebKfbKgbKhbKibKjbKkbKlaRtbKmbKnbB#bKobKpbKqbKrbKsbKtbKubKvbKwbKxbKybKzbKAbKBbKCbKDbKEbKFbKGbKHbKIbKJbKKbKLbKMbKNbKObKPbKQbKRbKSbKTbKUbF7bKVbKWbGabKXbKYbKZbK0bK1bK2bK3bK4bK5bK6bK7bK8bK9bL.bL#bLabBZbLbbLcbLdbLebLfbLgbLhbLibLjbLkbLlbLmbLnbLobLpam.am.am.am.am.am.am.am.am.am.am.am.am.bLqbLrbLsbLtbLubLvbLwbLxbLyam.am.am.am.am.ap5bLzbLAbLBbLCbLDbLEbLFbLGbLHbLIbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTam.ap5ap5am.am.am.am.am.am.bLUbLVbLWbtQap5am.am.am.am.am.am.am.am.am.am.am.am.am.bLXbLYbLZbL0bL1bL2bL3bL4bL5bL6bL7bL8bL9bM.bM#bMabMbbMcbMdbHpbHpblHbHraPfbCOaXObHraPfaXObCMb.laTG#83bMeblLblLbMebMfbMgbMhbMibMibMjbhobhqbMkbCZbCZbHJbHIbMlbMmbHIbMnbMnaywbMobMpbMkbHGai6bMqbMrbMsbMtbMuaTFbMvbugaTIbMwbMxbMybMzbC6bMAbMAbMBbMCbMDbMEbhKbMFbMGbMHbMIbMJbMKbMLbMMbuxbuybMNbMOaK2bMPbMQbMRbMSbMTaTybMUbMVbMWbMXbqNbqNbdH", +"bMYbMZbMZbM0bM1bM2bM3bM4bM5bM6bM7bDybM8bM9bN.bIGbN#bNabNbbNcbCubCubNdbNea92bNfbNgbNhbJjbNibNjbz#bNkbNlbNmbNnbNobNpbNqbNrbNqbNqbNsbNsbNtbNubNvbNwbNxbNxbNybNzbzabNAbNBbNCbNDbEYbNEbz#bNFbNGbz#bNHbJebrxbrybNIbNJbNKbNLbNMbNNbNObNPbNQbNRbNSbNTbDvbNUbNVbNWbNXbNYbNZbN0bN1bM5bIkbN2bN3bN4bN5bNAbN6bN7bN8bN9bN7bO.bO#bOabObbOcbOdbOebOebJfbOfbJgbJfbJfbOgbOhbNAbOibOjbOkbOibzdbOlbOlbOmbOnbOnbE.bOobOobOpbOqbOrbuZbOsbNHbOtbOubOvbOwbOxbOybOzbOAbOBbOCbODbOEbOFbOGbOHbOIbOJbOKbOLbOMbONbJ0bOObaSbOPbOQbORbOSbOTbOUbOVbOWbOXbOYbOZbO0bO1bO2bO3bO4bO5bO6bO7bO8bO9bP.bP#bPabPabPbbPcboKbPda0qbPebPfbPgbPhbPibPjbPkbPlbPmbPnbPobPpbPqbPrbPsbPtbPubPvbPwbPxbPybPzbPAbPBbPCbPDbPEbPFbKUbPGbPHbPIbPJbPKbbjbPLbPMbPNbPObPPbPQbPRbPSbPTbPUbPVbPWbPXbPYbPZbP0bpubP1bP2bP3bP4bP5bP6bP7bP8bP9bQ.bQ#bQabQbbQcbtPam.am.am.am.am.am.am.am.am.am.am.am.bQdbQebQfbQgbQhbQibQjbQkbQlbQmam.am.am.am.am.bQnbQobQpbQqbQrbQsbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbQEbQFbQGbQHbQIbQJam.ap5am.am.am.am.bG7bG7bQKbQLbQMbQNap5am.am.am.am.am.am.am.am.am.am.am.am.am.bQObQPbQQbQRbQQbQSbQTbQUbQVbL7bQWbL9bQXbM.bM#bHjbcNbQYbQZbQZbQ0bHpbCMaK0bQ1bQ2aXObQ3aPfbhabCMbcRbHzbQ4bQ5bhfbQ6bMbbQ7bQ8bQ9bR.bMhbMjbR#bRaai2byzbyzbRbbRcbRdbRdbRebRfbyzaeQaCvaGUbMkaCoa6bbRgbRhbRhayzaPobRibRjbp9amZaqYbRkbRlbuBa1XbRmbRnbRobRpbRqbRrbRsaGpbMFbRtbRubRvbRwbRxbRybH4buyaLibRzbMNbRAbRBbRCbRDbREbRFbRGbRHbRIbRJbRKbRL", +"bRMbRNbRObNZbRPbRQbRRbRSbRTbRUbRVbRWbM7bRXbRYbRZbR0bR1bR2bNdbR3bIsbR4bNdbNcbR5bR6bR7buYbR8bR9bS.bS#bSabSbbScbSdbSebSfbSgbShbSibSibSjbSkbSlbSkbz3bSmbSnbSnbSobSpbSqbIjbSrbSsbStbzlbSubIhbSvbSwbSxbJIbOubNHbSybSzbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbMYbSKbSLbSMbSNbSObSPbSQbSRbSSbSTbSUbM5bSVbRVbRWbSWbSXbSYbSmbSmbSnbSZbS0bS1bS2bS3bN4bS4bS5bS5bS6bS7bS6bS8bS9bDubDubT.bS9bT#by8bz#bIlbzdbNBbNBbuXbJebTabJEbTbbTcbIAbTcbTdbTebTfbTgbThbTibTjbTkbTlbOAbTmbTnbTobTpbTqbTrbTsbTtbTubTvbTwbTxaVLbTya8AbAHbOQbwta8zbTzbTAbTBbTCbTDbTEbTFbTGbTHbTIbTJbTKbTLbTMbTNbTObTPbTObTQbTRbTSbTTbTUbTVbTWbTXbTYbTZbT0bT1bT2bT3bT4bT5bT6bT7bT8bT9bU.bU#bUabUbbxbbUcbUdbUebUfbUgbUhbUibUjbUkbUlbUmbUnbUobUpbUqbUrbUsbUtbUubUvbUwbUxbUybUzbUAbUBbUCbUDbPVbUEbUFbUGbUHbUIaSRbUJbUKbULbUM#.tbUNbUObUPbUQbURbUSbUTbUUbUVap5am.am.am.am.am.am.am.am.am.am.am.am.bUWbUXbUYbUZbU0bU1bU2bU3bU4bU5ap5am.am.am.bU6bU7bU8bU9bV.bV#bVabVbbVcbVdbVebVfbVgbVhbVibVjbVkbVlbVmbVnbCjbVobVpbVqbVram.ap5am.am.am.ap5bVsbVtbVubVvbVwam.am.am.am.am.am.am.am.am.am.am.am.am.am.bVxbVybVzbVAbVBbVCbVDbVEbVFbVGbQXbVHbVHbVIbM#bVJbuea55bVKbVLbHnbMdbVMbQ3aXOaTzbVNaTzaXObyobVNblMbVObVPbQ4bQ8bVQbMbbVRbVSbVTbVUbVVbVWbVX#1wbVYai2byzbunbMnbVZbV0bV1a6bbRbai9bMpbV2bMpbcWbV3aCrbV4bMsbV5aaUbCSbV6bV6bV7#83b.ublVbV8bV9bc6bW.bW#a5Xa5XbWabWbbWcbWdbWebWfbWgbWhbWibWjbWkbWlbMCbWmbMNbWnbWobWpbWqbWrbWsbWtbWubWvbWwbWxbdH", +"bWybWzbWAbWBbWzbRNbWCbWDbRSbWEbWFbRWbSXbWGbNtbWHbWIbWJbWKbWLbWMbWNbWObWPbWQbWRbR6bWSbWTbWUbWVbWWbWXbWYbWZbW0bW1bW2bW3bW4bW5bW6bW7bW8bW8bW8bW9bW9bX.bX#bXabXbbXcbXdbXebXfbXgbXhbXibXjbXkbXlbXmbXnbXkbXobXpbSvbXqbXrbXsbXtbXubXvbXwbXxbXybTebXzbXAbSRbXBbXCbXDbXEbXFbXGbXHbXIbXJbXKbSSbSSbSSbSSbJabEqbXLbXMbSUbM5bErbXNbXObXPbXQbXRbXSbXSbXTbXUbRRbXVbXWbXXbXYbXcbXZbX0bX1bIebDwbX2bDtbX3bX3bDzbX4bIAbX5bX6bX7bX7bNmbOwbM1bScbX8bX9bY.bY#bYabYbbYcbYdbYebYfbYgbYhbYibYjbYkbYlbYmbYnbYobYpbYqbYra4dbfubYsbJ3bYtbYubYvbYwbYxbYybYzbYAbYBbYCbYDbYEbYFbYGbYHbYIbYJbYKbYLbYMbYNbYObYPbYQbP#bYRbYSbYTbYUbYVbYWbYXbYYbYZbY0bY1bY2bY3bY4bY5bY6bY7bY8.ySbUfbY9bZ.bZ#bZabZbbZcbZdbZebZfbZgbZhbKWbZibZjbkebZkbUubZlbZmbZnbZobZpbZqbZrbZs.WobZtbPVbZu.XTbZvbZwbZxbZybZzbZAbZBbZCbZDbZEbZFbZGbZHbZIbZJbZKbZLam.am.am.am.am.am.am.am.am.am.am.am.ap5bZMbZNbZObZPbZQbZRbUZbZSbZTbZUbZVam.ap5ap5bZWbZXbZYbZZbZ0bZ1bZ2bZ3bZ4bZ5bZ6bZ7bZ8bZ9b0.b0#b0ab0bb0cb0db0eb0fb0gb0hb0iam.ap5am.am.am.btQb0jb0kb0lb0mb0nap5am.am.am.am.am.am.am.am.am.am.am.am.am.am.b0ob0pb0qb0rb0sb0tb0ub0vb0wb0xb0ybCFb0zbHib0AbcMbcTbhbbVLb0Bb0Cb0Db0Ebhba55b0Fb0GbVNb0Hb0Ib0Jb0Kb0Lb0Mb0Nb0ObMbb0Pb0Qb0Rb0Sb0Tb0Ub0Vb0WbVYbV2b0XbHKbunai9b0Yb0Zb00b0YbMpb01b02b03aaRam7aCsb04b05b06b07aLfb08b09b1.b1#blIaK7a6kb1ab1bb1caylaCbbRob1dbWebMGb1eb1fb1gb1hb1ib1jb1kb1lb1mbWebHVbHRbuxb1na1Zb1ob1pb1qb1rb1s#R7b1tb1ub1v", +"b1wb1xbXnbXnbXkb1yb1zbRSbSUb1Ab1Bb1Cb1DbNub1Eb1Fb1Gb1HbR2bIsbWMbWMbWOb1Ib1Jb1Kb1Lb1Mb1Nb#cb1ObWXbIibWYb1Pb1QbW1b1Rb1Sb1Tb1Ub1VbXGb1Wb1Wb1XbXGbW3b1YbW3b1Zb1Yb10b11b12b13b14b15b16b16b17b15b15b15b17b18b19b2.b2#b2ab2bb2cb2db2eb2fb2gb2hbDwb2ibXAb2jbXGb2kb2lb2mb2nb2ob1Vb2pb2qb2rb2sb2tb2sb2tb2ub2ub2vb2wbSSb2xb2yb2zb2zb2zb2Ab2Bb2Cb2Db2Eb2Fb2Gb2Hb2Ib2Jb2Jb2Jb2Kb2Lb2MbRNbRPbWCb2NbSqb2Ob2PbRTbDxb2Qb2Rb2Sb2Sb2Tb2Ub2Vb2Wb2Xb2Yb2Zb20b21b22b23b24b25b26b27b28b29b3.b3#b3ab3bb3cb3db3ebJZb3fb3gb3haRrb3iaVNb3jb3kb3lb3mb3nb3ob3pb3qb3rb3sbfQb3tb3ub3vb3wb3xb3yb3zb3Ab3Bb3Cb3Db3Eb3FbYQb3GbYKb3Hb3Ib3Jb3Kb3Lb3Mb3Nb3ObY1b3Pb3QbKtb3Rb3Sb3Tb3Ub3Vb3Wb3Xb3Yb3Zb30b31b32b33b34b34b35b36b37b38b39b4.b4#b4ab4bb4cb4db4eb4fb4gb4h.0fb4ib4jb4kb4lb4mb4nb4ob4pb4qb4rb4sb4tb4ub4vb4wb4xb4yb4zb4Ab4Bb4Cam.am.am.am.am.am.am.am.am.am.am.am.btQb4Db4Eb4Fb4Gb4Hb4Ib4Jb4Kb4LbGKb4Mam.btQbGGb4Nb4Ob4Pb4Qb4Rb4Sb4Tb4Ub4Vb4Wb4Xb4Yb4Zb40b41b42b43b44b45b46b47b0gb48b49b5.b5#am.am.am.am.b5ab5bb5cb5db5eb5fb5gam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.b5hb5ib5jb5kb5lb5maA7b5nb5ob5pbyebyeb5qb5rbp6b5saTzbHnb5tb5ub5vb5ub5wbypb5xb.kb5yb5zb5AbcOb5Bb5Cb5Db5Eb5Fb5GbMbb5Hb5Ib5Jb5Kb5Lb5Mb0Wb5Nb5Ob5PbCZaePam0b5Qb5RaeRb5Rb5SbyxaGUb5Tai2aeNb5UbMqbMrb5Vb5Wb5XbCTb5Yb5Zb50b5Zb51b52buMb53bhyb54aXX#QubMGb1db55b56b57b58b59b6.b6#b6ab6bbWdb6cb6daO5b6eb6fb6gb.Mb6hb6ib6jb6kb6lb6mb6nb6o", +"b6pbSdbXjbSdb6pbXpbXAbX#b6qb6rb6sb6tbNub6ub6vb6wb6xb6yb6zb6AbWMbWMbWKb6Bb6Cb6Db6Eb6Fb6Gb6Hb6Ib6Jb6Kb1yb6LbXkb6Mb6Nb6Ob6Pb6Qb6Rb1Ub6Sb6Tb1Ub10b6Rb6Ub6Ub6Vb6Wb6Xb6Yb6Zb60b61b62b60b63b64b65b63b66b63b63b67b68b69b7.b7#b7ab7bb7cb7db7eb7fbSwb7gb7hb7ib7jb7kb7lb6Wb6Vb7mb7nb2nb6Xb7obW3b7pb6Sb6Sb7pb7qb7rb7sb7tb7ub2rb7ub7vb7wb7xb7yb7zb7Ab7Bb7Cb7Db7Eb7Fb7Gb7Hb7Ib7Jb7Kb7Lb7Mb7NbSdbWBb7ObWAbNZbWCbRQbScb1Pb7Pb7Qb7Rb7Sb7Tb7Ub7Vb7Wb7Xb7Yb7Zb70b71b72b73bYjb74b75b76b77b78b79b8.b8#b8ab8bboib8cb8daZ2aZ3bFfb8eb8fb8gb8hb8ib8jb8kb8lb8mb8nb8ob8pb8qbPab8rb8sb8tb8ub8vb8wb8xb8yb8zb8Ab8Bb3Gb8Cb8Db8EbKmbYGb8Fb8Gb8Hb8Ib8Jb8Kb8Lb8Mb8Nb8Ob8Pb8QbFXb8Rb8Sb8Tb8Ub8Vb8WaRub8Xb8Yb8Zb80b81b82b83b84b85b85b86b87b88b89b9.b9#b9ab9badrb9cb9db9eb9fb9g.ZMb9hb9ib9jb9kb9lb9mb9nb9ob9pb9qb9rb9sb9tb9tb9ub9vap5am.am.am.am.am.am.am.am.am.am.am.blmap5b9wb9xb9yb9zb9Ab9Bb9Cb9Db9Eb9Fam.am.b9Gb9Hb9Ib9Jb9Kb9Lb9Mb9Nb9Ob9Pb9Qb9Rb9Sb9Tb9Ub9Vb9Wb9Xb9Yb9Zb90b91b92b93b94b95b96am.am.am.am.b5ab97bUYb98b99c..c.#am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.c.ac.bc.cc.dc.ec.fc.gc.hc.ibCHbCHbyjc.jc.kblJbhjaTzc.lc.mc.nc.oc.pc.qc.rb5xc.sc.tc.ubMbc.vc.wc.xc.yc.zc.Ac.Bc.CbVQc.Db5Ic.Ec.Fc.Gbhpbuic.Hc.IauSam0b5TauSaqZb01b5Sc.Jc.Kc.Lc.MbCYam7bRea6bc.Nb5Wc.Oc.Pc.QaaWc.Rc.Sc.Tc.UblHc.Va6nc.Wc.Xc.YaaOb.Kc.Zc.0c.1c.2c.3c.4b1gc.5c.6c.7b1hc.8c.6c.9c#.byMc##c#aayMc#bc#cc#dc#ec#fc#gc#h", +"c#ic#jc#jbXjbSdbWBbNUc#kc#lc#mc#nc#mb7qc#oc#pc#qc#qc#rc#sbWOc#tc#ubR4c#vc#wc#xc#yc#zc#Ac#Bc#Cc#Dc#Ec#Fb1xc#GbSdc#Hb6Pb6Pc#Ic#Jb6Vc#Kb1Ub1Ub6Vb11b11c#Lb2nc#Mc#Nb64c#Oc#Pc#Qc#Rc#Sc#Sb62b63b65b62c#Tb60c#Uc#Vc#Wc#Xc#Yc#Zc#0c#1c#2c#3b18c#4b15b12c#Hc#Hb7nb2nb11b11b11b12c#Hb6Vb6Vb6Vb6Vb6Vb6Vb6Vb1Ub6Sc#5c#6c#7c#8c#9b7yca.ca#ca.caacabcaccadcaecafcagcahcaicaicajcakb7FcalcamcancaocapcaocaqcarcascatcaucavcawcaxcaycazcaAcaBcaCcaDcaEcaFcaGcaHcaIcaJcaKcaLcaMcaNcaOcaPcaQcaRcaScaTcaUcaVcaWcaXbYraZ2caYbFfcaZca0ca1ca2ca3ca4ca5ca6ca7ca8ca9b8qcb.cb#cbacbbcbccbdcbecbfcbgaNacbhcbib31cbjcbkcbkcblcbmcbncbocbpcbqcbrcbscbtcbucbvcbwcbxcbycbzbkwcbAcbBcbCcbDcbEcbFcbGcbHb8ZbUpcbIcbJcbKcbLb4.cbMcbNcbOcbPcbQcbRcbScbTcbUcbVcbWcbXcbYcbZcb0cb1cb2cb3cb4cb5cb6cb7cb8cb9cc.b9rb4ycc#b9tccaccbcccccdam.am.am.am.am.am.am.am.am.am.am.ap5am.cceccfccgcchcciccjcckcclccmbCvam.am.ccnccoccpccqccrccscctccuccvccwccxccycczccAccBccCccDccEccFccGccHccIccJccKccLccMccNam.ap5ap5am.ccOccPccQccRccSccTccUam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.bcqccVccWccXccYccZcc0cc1cc2cc3cc4a46cc5bp6bhicc6bcKcc7cc8cc9cd.cd#cdab5ycdbcdcbCJc.tcddbMfcdecdfcdgcdhcdicdjcdkbQ6cdlcdmcdnbVScdoc.Ecdpcdpcdqcdrb03ayyb02auScdscdqayGc.Jcdtb0Yai9bHGaeNaTCcdub06cdvb06cdwcdxcdycdzcdAcdBcdCcdDcdEaXMa6ocdFcdGaCecdHcdIcdJcdKb1dbDacdLcdMcdNcdOcdPc.5cdQcdRc.9cdScdTcdUcdVcdWcdXcdYcdZcd0cd1cd2", +"cd3c#ic#ic#jbXeb2.c#icd4cd5cd6cd7cd8cd9ce.ce#c#qceacebcecbWOb6AbNdcedbWPbIqbItbWPceecefcegcehceicejcekcelbROcemb12b1Scenceocapcepb11b2nb2nc#Lceqb2nc#NbXFbXdc#Nb12b64b60b62cercesb63b65b6Zcetb15b63b66ceucevcewcexceycezceAceBceCb63b19ceDb63b60b60b60b66b6ZcepceEcepceFb7nb6Uc#Jb6Rb6Rb6Ub6Ub6Uc#Kc#KceGceHceIceJcadceKceLceMceNceOcePceQceRceSceTceUceVceWceWceXceYcaiceZce0ce1ce2ce3ce4ce5ce6ce7ce8ce9cf.cf#cfacfbcfccfdcfecffcfgcfhcficfjcfkcflcfmcfmcfncfocfpcfqcfrcfscfscftcfucfvcfwcaXcfxcfyaVMbfvcfzcfAcfBcfCcfDcfEcfFcfGcfHcfIcfJcfKbYHb8qbB.cfLcfMcfNcfOcfPcfQb3AcfRaNacfScfTcfUaRuaRub8YcblcfVcfWcfXcfYcfZcf0cf1cf2cf3cf4cf5cf6cf7cf8cf9cg.aRucg#cgacgbcgccgdcgeb80cgfcggcghbUucgicgjcgkcglcgmcgncgocgpcgqcgrcgscgtcgucgvcgwaqmcgxcgycgzcgAcgBcgCcgDcgEcgFcgGcgHcgIcgJcgKcgLcgMcgNap5am.am.am.am.am.am.am.am.am.am.am.am.am.cgOcgPcgQ.bqcgRcgScgTcgUcgVam.cgWcgXcgYcgZcg0cg1cg2cg3cg4cg5cg6cg7cg8cg9ch.ch#chachbchcchdchechfchgchhchichjchkchlchmbZVchnbtQam.chobGLchpchqchrchschtam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.b4DchuchvchwchxchychzchAchBchCchDbpZchEchFchGbhdb.mchHchIchJchKchLbVOchMchNb0JbHlchOchPchQchRchSchTchUchVchWaFochXbCQb50chYchZb0Rch0ch1bhmch2buhauGaywaywbMpb5Pch3aaSaeSaeWai5ai5bCUaeXch4a6bbMqch5cdwb04ch6cdxch7ch8cdCch9ci.ci#ciacibaKY#Qucica1Y#QubMGcidcdKbRobDacdKciecifcigcihciicdQcijcikcilcimaX0cinblRciocipciqcircis", +"citb1Rb2ociucivciwcixciycizbWNc#sbWJciAciBc#qce#ciCciDciEb6zbWQbIrbNdbWKc#scehc#tciFciGb6AbNdc#yciHciIciJbDJc#MciKciLciLc#Hc#NciMc#Nc#NbXFc#MciNbXFciNbXdb2rbXdb6XciKciOb60b62cesciPb15b65b63b63ciPciPciQceqciRciSciTciUciVciWciXb66cetciYciZb60c#Tci0c#TciZci1ciKciKb6Ub6RbW2bW2c#Jci2ci2b1Tb6Rb6Rci3ceGci4c#Kci5ci6ci7ciCci8ci9cj.cj#cjacjbcjccjdcjdcjecjfcjgcjhcjicjjcjkcjlcjmcjnceYcjocjpcjqcjrcjscfacjtcjucjvcjwcjxcjycjzcjAcjBcjCcjDcjEcjFcjGcjFcjHcjIcjJcjKcjLcjMcjNcjOcjPcjQcjRcaUcjScjTcjUbFdaZ5bfvcjVcjWcjXcjYcjZcj0cj1cj2cj3cj4bPccj5cj6cj7cj8bY2cj9ck.ck#ckab3Cb8WcblcfTckbcfTcfTaRucfUb31b31cbjb3DckcckdckeckfckgckhckickjckkcklckmcknckocgccgackpcgacgdcgdckqckrckscktckuckvckwckxckyckzckAckBckCckDckEckFckGckHckIckJckKckLckMckN#kRckOckPckQckRckSckTckUckUckVckWckXblmam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.ckYckZck0ck1ck2ck3ck4ck5cgOap5ck6ck7ck8ck9cl.cl#claclbclccldcleclfclgclhclicljclkcllclmclncloclpclqclrclscltcluclvclwclxbCtbC#cgWclyclzclAclBclCclDclEam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.bLXclFclGclHclIclJclKclLclMclNclOclPclQclRbhdbhdb.mclSclTchJclUclVclWclXaJQclYclZbR#bqbcl0cl1cl2cl3cl4cl5cl6cl7cl8cl9cm.cm#cmacmbb1#cmccmdb.qbCSbugcmeaeNbCZaaQaaQayyaaVaPtai5cmfcmgb5UaTCaTCcducmhcmicmjcmjcmkcmlcmmaJLblHci.cmncmocmpcmqcmrcmscdGaTwcmtcmucmvcmwcmxcmyb56cmzbRtcigcmAcmBcmCcmDcmEcmFcmGbQ3cmHcmdcmIcmJcmKcmL", +"cmMcmNcmOcmPcmQb1GcmRbWJbWKbR4bWMbWKceibWJcmScmTbWJcmUb1HcmVbItcmWb6AcmXcmYcmZcm0cm1cm2c#tbIsbIqcm3cm4.k2cm5bXdb2nciKciKcivb7ob7ob7ob7ocm6bXdb7jb7ob7ob7jb6Xb2ocm7bW2cm8cm9c#Ocn.ceDb65b60b60b60c#Tcn#cnacnbcnc#kGcndcnecnfcngcnhc#ScnicnjciZb62b62c#Sc#SciQc#Rb62cm9c#Jc#Jc#Jb1Rcevcnkci4cnlcnmcnncnocnpb6Ucnqcnrcizc#scehcehc#scnscntcnocnucnucd8cd5cd5cnvcd5cnwcnxcjfcnycnqcixcnzcnAcnBcnCcnDcnEcnFcnGcnHcnIcnJcnKcnLcnMcnNcnOcnPcnQcnRcnScnTcnScnUcnUcnVcnWcnXcnYcnZcn0cn1cjIcn2cn3cn4cn5bjTcn6bOSbaWb3gaZ2cn7cn8cn9co.co#coacobcoccodcoecofcfKcogcohbfRcoiaRtcojbPabTQb31cfTcfTcfTcfTcfTcfTckbcbDcblcbjcokcolcomconcoocopcoqcorcoscotcoucovcowcoxcoycozcozcgccg#cg#b80coAcoBcoCcoDcoEcoFcoGcoHcoIcoJcoKcoLcoMcoNcoOcoPcoQcoRcoScoTcoUcoV.XQcoWcoXcoYcoZco0co1co0ckSckUco2co3co4am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.co5co6co7co8co9cp.cp#am.cpacpbcpccpdcpecpfcpgcphcpicpjcpkcplcpmcpncpocppcpqcprcpscptcpucpvcpwcpxcpycpzcpAcpBcpCcpDcpEam.am.am.clxcpFcpGcpHcpIcpJcpKam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cpLcpMcpNcpOchzcpPclKclLcpQcpRcpScpTcpUcpVchGbcTb0FcpWcpXcpYcpZcp0cp1cp2cp3cp4cp5cp6cp7cp8cp9cq.cq#cqacqbcqccqdcqecqfcqgcqhcqicqjcqkcqlcqmcqncqocqpcqqcqoch4bunbunaeNbuncqrcmgcqscqtcqucqrcqvcducqwcqxcqycqzcqAcqBcqCcqDcqEcqFcqGcqGch9cqHc.PaXMaj.aXXbyWa5WcqIcqJb6bb6dc.0cqKb59b6bc.7ciicqLcqMcqNcqOcqPcqQcqQcqRaCrcqScqTcqU", +"cqVcqWcqXce#cqYcmRcqZcq0bR2cq1cq2bWKb6zcmXciAcq3cnsci8ce#cqYcebcq4cmZcq5cq5cq6cm2cm1cq7cq8cm0ciAcq9cr.cr#c#ib7jb6Uc#Jb7mb10b1Yb2ocm7cm7cm7crabW2cm8crbcrccrdcreb6Ocrecnkcrcb6Ocrfcrgcrhcrhceucricrjcrkcrkcrlcrm#nucrncrocrpcrqcrrc#TcniciYcnicnicnib60b62b62crsb60crtcm8crbc#Icnkcrucrvcrwcrxcrycrzci7ciycrAcqXcnsciEbWNbWOcrBbWNcmUcmRci6b6xcrCcrDcrEcrFcrGcj.crHcrIcrAcrJcrKcrLcrMcrNcrOcrPcrQcrRcrScrTcrUcrVcrWcrXcrYcrZcr0cr1cr2cr3cr4cr5cr6b78cr7cr8cr8cr9cs.cs#csacsbcsccsdcsecsfcsgcshcsicsjcskcslbfvcsmcn7csncsocspcsqcsrcsscstb3IbYHcsucsvcswcsxcsycszcsAb36bYMb8WcfTaRucfTcsBcsCckbcfScbhb31b31cbmcsDcsEcfZcsFcsGcsHcsIcsJcsKaR3csLcsMcsNcsOcozcsPcsQcg#csRcsCcsScsTcsUcoDcsVcsWcsXcsYcsZcs0cs1cs2cs3cs4cs5cs6cs7a09cs8cs9ct.ct#ctactbctcctdctectfctgcoZctfcthco0ctictjam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.ctkctlctmctnctoctpctqctrctscttctuctvctwctxcphctyctzctActBctCctDctEctFctGctHctIctJctKctLctMctNctOctPctQctRctSctTctUctVctWctXctYctZct0ct1ct2ct3ap5am.am.am.am.am.am.am.am.am.am.am.am.am.am.ct4ct5ct6ct7ct8ct9cpPcu.cu#cuacubcuccudcuecufbhcbcKcugax.cuhcuicujcukculcumcuncuocupcuqcurcuscutcutcuucuvcuwcuxcuycuzcuAcuBcuCaL#aPucuDcuEcuFcuDcuGcuHcuIcqqcuJaPsaeNaeNcuKaeNc.NcuLcuLcuMcmlcuHcuNcmgcuOcuPcuPcuQcuRcuScuTcdAcuUcuVcuWcuXcuYcuZbytauGbC2cdF#QubWdaXHcu0cu1cu2cu3b6acu4cu5cigcmAcu6cu7cu8cu9cv.cv#cvacvbcdwb5Wcvc", +"cvdcvecvfcrKcrJcrEceacizcvgbWMb6AbWOcrBbWNciCcvhcq3ci9cvicvhcvjcvkcvlcvlcvmcvncehcvocq6cvicvhcvpcvqcrycvrcvscrbcrbcrdcd4ciwcvtb6Ob6Pcreb6O.k1crvcvucvvcvwcvxcvycvzcvAcvBcvwcvwcvwcvCcvDcvEcvCcrjcvFcvGcvHcvIcvJcvKcvLcvMcvNcvOceuc#Sceqb12b6Zb60ceucvPcvQc#ScvRc#RcvScvTcmPcvUcvVcvWcrFcqYcmYcmXciEcmXcizcm0cvXcq4cvgcrBbR2c#tbWOcmXcq9cvYcvZcrEcv0crEcqVce.cv1cv2cv3cv4cv5cv6cv7cv8cv9cw.cw#cwacwbcwccwdcwecwfcwgcwhcwicwjcwkcwlcwmcwncwocwpb78cnVcr9cwqcr9cwrcwscwtcwucwvcwwcwxcwycwzcwAcwBcwCaVLcjUbwqaRraVNcwDcwEcwFcwGcwHcwIcwJcwKcwLcwMca9cwNcwOcwPcwQcwRcwScwTcwUcwVcwWcwXcwYb8AcfTcblcbDcbDaRucfTcwZcw0cw1cw2cw3cw4cw5cw6cw7cw8cw9cx.cx#cxacxbckockocg#cxccxccxdcxecxfcoDcsVcxgcxhcxicxjcxkcxlcxmcxncxo#bKcxpcxqcxrcxscxtcxucxvcxwcxxcxycxzcxAcxBcxCcxDcxEcxFckRcxGcxHcxIam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.ap5chocxJcxKcxLcxMcxNcxOcxPcxQcxRcxScxTcxUcxVcxWcxXcxYcxZcx0cx1cx2cx3cx4cx5cx6cx7cx8cx9cy.cy#cyacybcyccydcyecyfcygcyhcyicyjcykcylcymcyncyocypcyqam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cyrcyscytcyucyvct9cu.clKcywcyxcyycyzb0IblGblFbp3bCNcyAcyBcyCcyDcyEcyFcyGcyHcyIcyJcyKcyLcp9cyMcyNcyOcyPcyQcyRcyScyTcyUcyVaFpcyWcyXcyYb08cdBcyZcuEcy0cuOcqscy1b5VaPvaTNaGOam1ch4ch4cuLcy2cy3aAUcy4cy5cy6cy7cy0cy8cy8cy9cz.cz#aAWczaczbczccuXcm#czdczeczfczga6p#QuczhaXJb1ecziczjczkczlb6.cigczmcznciiczoczpbCMczqczrczscztczcczuczv", +"b1RczwczxczyczzcrFce#cqZcizc#scehbWKcq1crBcvXcq3cvicvicvjcvkcvjcq3cq3cvqczAcvoc#tbWOcmZcvlcvqcvkcm0czBceicm1czCcvvcrfcvBczDcvBczEczFczGczGczFczHczIczJczJczKczKczKczLczLczLczJczMcvzcvycvyczNcvCczOczPczQczRczSczTczUczVczWbmuczXcerc#Hb12b6ZczYczZcz0ceLcz1cz2cz3cd7cz4c#qce#ce#cz5cqYcizciEbWObWObWNbNbciEcizcehb6Ac#tbWObWOciEc#rcz6cv1c#pcz7cz8cz9cA.crFcmNcA#cvrcAacAacAbcAccAdcAecAfcAgcAhcAicAjcAkcAlcAmcAncAocApcAqcArcAscAtcAucAvcAwcAxcnVcAycAzcAAcABcACcADcAEcAEcAFcAGcAHcAIcAJcAKcALcAMcANbwvbofaVNcAOcAPcAQcARcAScATcAUcAVcAWcAXcj6cAYcAZcA0cA1cA2cA3cA4cA5cA6cA7cA8cA9b31b31cB.cbkcbHcB#cBacBbcBccBdcBecBfcBgcBhcBicBjcBkcBlaITcBmcBncgcckocg#cbDcsBcfUcBocBpcBqcBrcBscBtcBucBvcBwcxkcBxcBycBz#jCcBAcBBcBCcBDcBEcBFcBGcBHcBIcBJcBKcBLcBMcBNcBOcBPcBQcBQcBQcBRcBScBTam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cBUcBVcBWcBXcBYcBZcB0cB1cB2cB3cB4cB5cB6cB7cB8cB9cC.cC#cCacCbcCccCdcCecCfcCgcChcCicCjcCkcClcCmcCncCocCpcCqcCrcCscCtcCucCvcCwcCxcCycCzcCAcCBam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cCCcCDcCEcyvcCFcCGcCHcCIcCJcCKcCLcCMcCNcCOcCPcCQcCRcCScCTcCUcCVcCWcCXcCYcCZcC0cC1cC2cC3cC4cC5cC6cC7cC8cC9cD.cD#cDacDbcDccDdcDecDfayGcDgcDhc.UcDicmocuLb06aPvcdvb5VaCrayzaPmb5UcqvcDjcuDcDkcDlcDmcy4cDncDocDpcDqcDrcDscz#cDtcDucDvcDwczccdBcDxcDycDzcDAaPta6oa1YaXYcDBbDacDCcDDcDEcDFcDGcDHciib6.cmCcDIcmnci.cDJcDKcDLcDMcDNcDO", +"crvcvvcDPcDQcDRcDSce#cqZci7cizciFcDTcDTczBcDUcDVcq8cq5ciGcmZcmZcvXcq6cDWcvkcq4c#tbWOcDXcvlcvjcmZcehbWKc#tc#tcDYcDZczFczHczDcD0cD1czKczKcD2cD3cD3cD3cD3cD4cD3cD3cD3cD3cD5cD2cD1cDPczGcvzcvzcvxcvCcD6cvHcD7cD8cD9#wFcE.cE#cEacEbcEcc#Sc#4cEdbXmb16b64ceDcvEcD0cD1czHcD0cvdcEecrEcEfcEgcEhcebbWNbNbcmXbWNb6AczBcm0cEibR2bWKbWNczBcmXcEjce#c#qcrCcrDcEkcElcmOcEmcEncA#cEocEpcEqcErcEscEtcEucEvcEwcExcEycEzcEAcEBcECcEDcEEcEFcEGcEHcEIcEJcEKcELcEMcENcEOcjKcEPcEQcERcEScETcEUcEVcEWcEXcEYcEZcE0cE1cE2cE3a8AcE4a8AbJ0cn7cE5cE6cE7cE8cE9cF.cF#cFacFbcFccFdcFecFfcFgcFhcFicFjcFkcFlcFmcFncwZcFocbDb31ckbcFpcFqcFrcFscFtcFucFvcFwcFxcFycFzcFAcFBaITcFCcFDcbGckocg#b31cbDcfUcFEcFFcFGcFHcFIcFJcFKcxicFLcFMcFNcFOcFPcFQcFRcFScFTcFUcFVcFWcFXcFYcFZcF0cF1cF2cF3cF4cF5cF6cF7cF8cF7cF9cG.cG#cGaam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cGbcGccGdcGecGfcGgcGhcGicGjcGkcGlcGmcGncGocGpcGqcGrcGscGtcGucGvcGwcGxcGycGzcGAcGBcGCcGDcGEcGFcGGcGHcGIcGJcGKcGLcGMcGNcGOcGPcGQcGRcGScyqam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cGTcGUcGVcGVcGWcCGcGXcGYcGZcG0cG1cdacG2cG3cG4cG5cG6cG7cG8cG9cH.cH#cHacHbcHccHdcHecHfcHgcHhcHicHjcHkcHlcHmcHncHocDbcHpcHqcHrbq#bhqbcXcHscHtb1.cHucHvcHwbMrb5WbMrcHxc.OaPsayzaL#aLacDkcDrcHycHzcHAcHBcHCcHDcHEcHFcz#cHGcHHcHIcHJcHKcDwcy2cqmch7cHLcHMcHNaPscHOauDcHPcHQcHRb58cHScHTcHUcHVcHWcHXb1icHYcHZbQ0aTycH0cH1cH2cH3cH4", +"crfczHcH5ciycq9ce#ce#crycm0cH6cH7cH8cH9czBcI.cI#cIacIbcIccehcvoceicmZcq8cDYcIdcvncm0cDWcvqcvmbWNcq1bR4cq1bWKcvncEncIecIfcIgcIhcD1czIcD0cIfcIicDQcDQcDQcDQcIjcIkcIkcIkcIkcIlcD5cImczGczPcvyczzcvDczOcIncIocIpcIqcIrcIscItcIucIvczXcercIwbX9cIxcIycIzc#HceqcIAcIBcICcIDcitcrfcIEcr#cIFcIGcIHb6zcmXcmXc#tcq1bWNbWJcmUc#scehciEcq0ciDcmUcnscq3ce#crCce.c#pcmQcIIcEocIJcIKcILcIMcINcIOcIPcIQcIRcIScITcIUcIVcIWcIXcIYcIZcI0cI1cI2cI3cI4cI5cI6cI7cI8cI9cJ.cJ#cJacJbcABcJccJdcJecEVcEWcJfcJgcJhcJicJjcJkcJlcJmcJna8AcJocJpcJqcJrcJscJtcJucJvcJwcJxcJycFccJzcJAcJBcJCcJDcJEcJFcJGcJHcfXcJIb8EcbmcbDcblcJJcJKcJLcJMcJNcJOcJPcJQcJRcJScJTcJUcJVcJWaITcJXcJYcgccbEcsBcbDcbEcJZcJ0cJ1cJ2cJ3cJ4cJ5cJ6cJ7cJ8cJ9cK.#jIcK#cKacKbcKccKdcKecKfcKgcKhcKicKjcKkcKlcKmcKn.EtcF9cKocF7cF7cF7cF9cKpcKqcKram.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cKscKtcKucKvcKwcKxcKycKzcKAcKBcKCcKDcKEcKFcKGcKHcKIcKJcKKcKLcKMcKNcKOcKPcKQcKRcKScKTcKUcKVcKWcKXcKYcKZcK0cK1cK2cK3cK4cK5cK6cK7cK8cK9cL.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cL#cLacLbcLccLdcGVcLecLfcLgcLhcLichHcLjcLkcLlcLmcLncLocLpcLqcLrcLscLtcLucHccLvcLwcLxcLycLzcLAcLBcLzcLCcLDcLEcLFcLGcLHcDccLIbMhcLJcLKb0RcLLcHtcmdcLMcLNcLOcLPcHxcdwcdEc.PayAaaWc.NcLQcHycHycLRcLScLTcLUcLVcLWcLXcLYcLZcHHcL0cH0cmlcL1cL2cL3cL4cL5cL6cL7cL8aCs#U#bqCbl3a6rcL9b58cDEcM.cM#cMacMbcMccMdcMecMfbWocMgcH2cMhcMicMj", +"cvxcMkcMlcvqcvhcvhcvqcMmcMncMocMpcMqcMrcMscMtcMucMvcMwcMxcMycMzczBciFcMAcDWcMBcvkcDYcMBcvlcvmczBbR4bIsbR4c#tcvncMlcMCcMDcMEczIcD0cMFcIhcnwcMGcMGcMGcMHcMGcIicDQcDQcIjcIjcIjcMIcMJcIEczEcvzcvycvycMKcnCcMLcMMcMNcMOcMPcMQcMRcMSb63cMTcMUcMUcMUcIycIwc#4cMVcMWcMXb2ocIBcraczJcMYcMZcM0cM1c#wcmXbDHbDHbItbWPcIcb1HciCbWJcmUcizcmUcq4ciEcq4cm0cvXciBcq9cM2cM3cM4cM5cM6cM7cM8cM9axUcN.cN#cNabGXcNbcNccNdcNecNfcNgcArcNhcNicNjcNkcNlcNmcNncNocI8cNpcNqcNrcNscNtcNucNvcNwcNxcNycNzcNAcNBcNCcNDcNEcNFcNGcNHcNIcNJbAHa8zcNKcNLcNMcNNcNOcNPcNQcNRcNScNTcNUcNVcNVcNWcNXcNYcNZcN0cN1bKncN2cN3cN4b31cFocFocFccN5cN6cN7cN8cN9cO.cO#cOacObcOccJVcOdcOecOfcOgcgccbFcsCaRucOhcJZcOicoCcOjcOkcOlcOmcOncOocOpcJ9cOqcOrcOscOtcOucOvcOwcOxcOycOzcOAcOBcOCcODcOEcOFcOGcOHcOIcOJcOKcF9cF7cF9cOLcOMcONcOOam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cOPcOQcORcOScOTcOUcOVcOWcOXcOYcOZcO0cO1cO2cO3cO4cO5cO6cO7cO8cO9cP.cP#cPacPbcPccPdcPecPfcPgcPhcPicPjcPkcPlcPmcPncPocPpcPqcPrcPscPtam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cPucPvcPwcPxcPwalacPycPzcPAcPBcPCcPDcPEcPF#SicPGcPHcPIcPJcPKcPLcPMcPNcPOcPPcPQcPRcPScPTcPUcPVcLBcPWcPXcPYcPZcP0cP1cP2cP3cP4cP5cP6cP7cP8cP6cP9cQ.cQ#cu8cQacHvcQbcQcch6cdxcuYcQdcuNcuNcmlcDqcQecQfcQgcQhcQicQjcQkcQlcQmcQncQocQocQpcDscQqcHKcuWcQrcQscdzcQtcQub07auD#U#bur#Qrb58cQvcQwcDFcQxcQycQzcQAcHYb1icQBcQCcQDcQEcQFcQG", +"b6wcq3cQHcm2cq6cq3cvqcQIcQJcQKcQLcQMcQNcQOcQPcQQcQRcQScQTcQUcQVbWNceicQWcq6cq7cvlcMBcvmciGcm0crBbR4cq1bWKcvocm2cQXcEmcrHcnwcnqcQYcnqcvscnwcQZcQZcQ0cQ0cQ1cQZcMHcMGcIicDQcDQcQ2cQ3cMJcQ4cvzcQ5cQ6cvwcQ7cQ8cQ9cR.cR#cRacRbcRccRdcRecRfcRgcRhcRicRjcMUcMUcRkcRlcRmcRncRoceqcRpcRqcRrcRscRtcRuciCbIubIucRvbDHbIub1Hb1HciCciCciCcm0cehcrBcehcvobWJceac#qcRwcRxcRycRzcRAcRBcRCcRDcREcRFcRGcRHcRIcRJcRKcRLcRMcRNcROcRPcRQcRRcRScRTcRUcRVcRWcRXcNqcRYcRYcRZcR0cR1cR2cR3cR4cR5cR6cR7cR8cR9cS.cS#cSacSbcSccSdcSecSfbofaVMcSgcShcSicSjcSkcSlcSmcSncSocSpcSqcSrcSscStcSscSucSvcSwcSxbKncSycSzcbmcSzcSAcSBcSCcSDcSEcSFcSGcSHcSIcSJcSKcSLcSMcSNaRoaITcSOcgdaRucfTaRuaRuaNacSPcSQcSRcSScSTcSUcSVcSWcSXcSYcSZcS0#jC.yHcS1cS2cS3cS4cS5cS6cS7cS8cS9cT.cT#cTacTbcTccTdcTecTfcTgcOLcThcTicTj.BkcTkcTlam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cTmcTncTocTpcTqcTrcTscTtcTucTvcTwcTxcTycTzcTAcTBcTCcTDcTEcTFcTGcTHcTIcTJcTKcTLcTMcTNcTOcTPcTQcTRcTScTTcTUcTVcTWcTXcTYcTZcT0cT1cT2am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cT3cT4cT5cT6cT7cT8cT9cU.cU##HrcUacUbcUccUdcUecUfcUgcUhcUicUjcUkcUlcUmcUncUocUpcUqcUrcUscPXcUtcUucUvcUwcUxcUycUzcUAcUBcUCcUDcUEcUFcUGcUHc.EcUIcLKcUJcmdcUKcULcUMcUNcUOcmlcQtcUPcUQcQtcLQcqucURcUScUTcUUcUVcUWcUXcUYcUZcU0cU1cU2cU3cU4cdAcU5cy9cU6cU7cU8cU9cV.cV#cQcaLb#T6#U#b.Hb1ecVacVbcVccVdcMbcdwcVecVfcdPcu1cVgcVhcVicVjcVk", +"ce#cq3cq4bWOcVlcDXcvlcvjcvkcVmcVncVocVpcVqcVrcVscVtcVucVvcVwcVxcrBcVlciFcVycDUcVzcDYcm2cVycVlcehcVAczBcmZcm2cvmc#CcVBciycmOcvecVCcVDcVDcVEcQ0crKcMYcVFcrKcIecQ0cMDcMGcMGcVGcVHcVIcVJcVKcVLcVMcVNcVOcVPcVQcVRcVScVTcVUcVVcVWcVXcVYcVZcV0cV1cV2cV3cV4cV5cV6b7QcV7cV8cV9cW.cW#cWacWbcvhc#qc#qciBcWccWdcWecWfcefci7cebcm0cq8cvXcQWcvncvocvocebc#rcmRcWgcWhcWicWjcWkcWlcWmcWncWocWpcWqcWrcWscWtcWucWvcWwcWxcWycWzcWAcWBcWCcWDcWEcWFcWGcWHcWIcWJcWKcWLcWMcWNcWOcWPcWQcWRcWScWTcWUcWVcWWcWXcWYcWZcW0cW1cW2cW3cW4aVMa8AboicW5cW6cW7cW8cW9cX.cX#cXacXbcXccXdcXecXfcXgcXgcXhcXicXicXjcXkcXlcXmcwWcXncXocXpcXqcXrcXscXtcXucXvcXwcXxcXyaM8aRocXzcXAcbGcfTcfTaRucfUcXBb8qcXCcXDcXEcXFcXGcXHcXIcXJcXKcXLcXMcXNcXO#Ys.RlcXPcXQcXRcXScXTcXUcXVcXWcXXcXYcXZcX0cX1cX2cX3cX4cX5awKcX6cX7cX8cX9cY.cY#am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cYacYbcYccYdcYecYfcYgcYhcYicYjcYkcYlcYmcYncYocYpcYqcYrcYscYtcYucYvcYwcYxcYycYzcYAcYBcYCcYDcYEcYFcYGcYHcYIcYJcYKcYLcYMcYNcYOcYPbZVam.am.ap5am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cYQ#HrcYRcYScYTcYUcYVcYWcYXcYYcYZ#DScY0cY1cY2cY3#VUcY4cY5cY6cY7cY8cY9cZ.cZ#cZacZbcZccZdcZecZfcZgcZhcUucZfcZicZjcZkcZlcZmcZncZocZpcZqchZc.vcZrcZscZtcZubyXcZvcZwcZxcZyaFfcZzcZAaFecZBcZCcZDcZEcZFcZGcZHcZIcZJcZKcZLcZMcZNcZOcZPcZQcZRcZScZTcZUcZVcDucuWbCLcZWcZXcZYcuUcZZ#T7cZ0b.HcmucZ1cZ2cMccZ3cZ4ch6cVecZ5cZ6cZ7cZ8cZ9cQCc0.", +"c#qcryceicq2b6AcVlc0#cq7cIdc0ac0bc0cc0dc0ec0fc0gc0hc0ic0jc0kc0lc0mcVlcvoc0ncVAcVlcm2cVzcDUcVycMAcm2cq7cvlcvlcDWc0ocDYc#Cc0pc0qcrJc0rcIfcVEcQ1crAc0sczCcrKcQ0cQZc0tcVHc0uc0vc0wc0xc0yc0zc0Ac0Bc0Cc0Dc0Ec0Fc0G.96c0Hc0Ic0Jc0Kc0Lc0Mc0Nc0Oc0Pc0Qc0Rc0Sc0Tc0Uc0Vc0Wc0Xc0Yc0Zc00c01cWbcvhcWgc02cWbcvicvhcMBc03c04c05cmZcVzcDWcMAcvncVycMAcvmcq3c#qc#qc06c07c08c09c1.c1#c1ac1bc1cc1dc1ec1fc1gcRLc1hc1ic1jc1kc1lc1mc1nc1oc1pc1qc1rc1sc1tc1uc1vc1wc1xc1yc1zc1Ac1Bc1Cc1Dc1EcWLc1Fc1Gc1Hc1Ic1Jc1Kc1Lc1Mc1Nc1Oc1Pc1Qc1RaVLc1Sc1Tc1Uc1Vc1Wc1Xc1Yc1Zc10c11c12c13c14cFcc15c16c17c18c19c2.c2#c2ac2bc2cc2dc2ec2fc2gc2hc2ic2jc2kc2lc2mcBlc2nc2ocXzcx#coycblcblcbEaRub8Wc2pc2qbwVc2rc2sc2tc2uc2vc2wc2xc2yc2z.UU#Cl#5nc2Ac2Bc2Cc2Dc2Ec2Fc2Gc2Gc2Hc2Ic2Jc2Kc2Lc2Mc2Nc2Oc2Pc2QcX8c2Rc2Sc2Tc2Uc2Vc2Wc2Xb4Dam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.c2Yc2Zc20c21c22c23c24c25c26c27c28c29c3.c3#c3ac3bc3cc3dc3ec3fc3gc3hc3ic3jc3kc3lc3mc3nc3oc3pc3qc3rc3sc3tc3uc3vc3wc3xc3yc3zc3Ac3Bam.am.ccdap5am.am.am.am.am.am.am.am.am.am.am.am.am.am.ap5c3Cc3Dc3Ec3Fc3Gc3H#AncYWc3Ic3Jc3Kc3Lc3Mc3Nc3Oc3Pc3Qc3Rc3Sc3Tc3Uc3Vc3Wc3Xc3Yc3Zc30c31cZdc32c33c34c35cZgc36c37c38c39c4.c4#c4ac4bc4cc4dc4ec4fasVc4gc4hc4ic4jc4kc4lc4mc4nc4oc4pc4qcu9c4qc4rc4sc4tcU6c4uc4uc4vc4waA0c4xc4yc4zc4Ac4Bc4Cc4Dc4Ec4Fc4Gc4HcUKcL4c4IcdBci.cZvc4Jcimcimc4KaX3c4Lcu3c4McZ5c4Nc4OcqycL2cZ8c4Pc4QcMdc4Rc4Sc4T", +"cvicvkcm0bWKc#tcVlcIdc4Uc4Vc4Wc4Xc4Yc4Zc40c41c42cQLc43c44c45c46c47czBc0nc0nc0ncvoc0#cDYcq6c0ocDYcq7c48c49cMBcq8cq4ciFcvncq8cRwc5.c5#cnwcIicQ0czCcDZcrKcIecIec5ac5bc5cc5dc5ec5fc5gc5hc5ic5jc5kc5lc5mc5nc5oc5pc5qc5rc5sc5tc5uc0Jc5vc5wc5xc5yc5zc5Ac5Bc5Cc5Dc5Ec5Fc5Gc5Hc5Ic5Jc5Kc5Lc06cMmc5Mc5Nc5Oc5Oc5Oc5Oc5Oc5Pcvncm2cvqcq8cvncQWcIdcQXcvpcvic49c5Oc5Qc5Rc5Sc5Tc5Uc5Vc5Wc5Xc5Yc5Zc50c51c52c53c54c55c56c57c58c59c6.c6#c6ac6bc1sc6cc6dc6ec6fc6gc6hc1AcWQc6ic6jc1Ec6kcWSc6lc6mc6nc6oc6pc6qc6rc6sc6tc6uc6vc6wc6xbOQc6yc6zc6Ac6Bc6Cc6Dc6Ec6Fc6Gc6Hc6Ic6Jc6Kc6Lc6Mc6Nc6Oc6Pc6Qc6Rc6Sc6Tc6Uc6Vc6Wc6Xc6Yc6Zc60c61c62c63c64c65cXyaITc66aM8c67b8zcfScbEcfUaNac68bO7c69c7.c7#c7ac7bc7cc7dc7ec7fc7gc7hc7ic7jc7kc7lc7mc7nc7oc7pc7qc7rc7sc7tc7tc7uc7vc7wc7xc7yc7zc7Ac7Bc7Cc7Dc7Ec7Fc7Gc7Hc7Hc7Ic7Jc7Kam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.c7Lc7Mc7Nc7Oc7Pc7Qc7Rc7Sc7Tc7Uc7Vc7Wc7Xc7Yc7Zc70c71c72c73c74c75c76c77c3lc78c79c8.c8#c8ac8bc8cc8dc8ec8fc8fc8gc8hc8ic8jc8kc8lc8mam.ap5ccdam.am.am.am.am.am.am.am.am.am.am.am.am.am.c8nc8oc8pc8qc8rc8sc8tc8uc8vc8wc8xc8yc8zc8Ac8Bc8Cc8Dc8Ec8Fc8Gc8Hc8Ic8Jc8Kc8Lc8Mc8Nc8Oc8Pc8Qc8Rc8Sc8Tc32c8Uc8VcUuc8WcUtc8Xc8Yc8Zc80c81c82c83c84c4ec85c86c87c88c89asTc9.c9#c9ac9bc9cc9dc9ec9fc9gc9hcDnc4pcqhc9ic9jcU1c9kc9lc9mc9nc9oc9pc9qc9rc9sc9tc9uc.SbRib51cyZcLPcZZc9vcZYcZZc9wc9xc9yc9zcHRc9AcVfczlcQBc9Bcqzc9Cc9Dc9Ec9Fc9Gc9Hc9I", +"cMBcvlcm1cVyc9Jc9Kc0oc9Lc9Mc9Nc4Uc9Oc9Pc9Qc9Rc9Sc9Tc9Uc9Vc9Wc9Xc9Yc0mc0mc0mc9Zc90c91c92c92c92c92c49c49c49cvlcVmcVlcvoczBcq4cQHcmNcMkc93c94cEmcIIcEmc95cz8c96c97c98c99d..d.#d.ad.bd.cd.dd.ed.fd.gd.hd.id.jd.kd.ld.md.nd.od.pd.qd.rd.sd.td.ud.vd.wd.xd.yd.zd.Ad.Bd.Cd.Dd.Ed.Fd.Gd.Hd.Id.Jd.Jd.Kc5Ld.Ld.Mc5Qd.Nd.Od.PcQHcq9cqYcm2cm2cvjcvicvqc49c5Qd.Qd.Rd.Sd.Td.UcWqd.Vd.Wd.Xd.Yd.Zd.0d.1d.2d.3d.4d.5d.6d.7d.8d.9d#.d##d#ad#bd#cd#dc6fd#ed#fd#gd#hd#id#jd#kd#ld#md#nd#od#pd#qd#rd#sd#td#ud#vd#wd#xd#yd#zd#Ad#Bd#Cd#Dd#Ed#Fd#Gd#Hd#Ib3Md#Jd#Kd#Ld#Md#Nd#Od#Pd#Qd#Rd#Rd#Rd#Sd#Tc2dd#Ud#Vd#WcJNd#Xd#Yd#Zd#0d#1d#2d#3d#4cFBd#5c2od#6d#7b31d#8cbFcfUckbcfVd#9bwVda.da#daadabdacdadc2xdaedafdagdahdaidajdakdaldamdanc7odaodapdaqdardasdatdaudavdawdaxday.G4dazdaAdaBdaCdaDdaEdaFdaFdaGdaGdaHdaIdaJdaKdaLdaMdaLam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.b5#daNdaOdaPdaQdaRbZPdaSdaTdaUdaVdaWdaXdaYdaZda0da1da2da3da4da5da6chlda7da8da9db.db#cT3dbadbbdbcdbddbedbfdbgdbhdbidbjdbkdblcGbam.ccdap5am.am.am.am.am.am.am.am.am.am.am.am.am.am.dbmdbndbo.3OdbpdbqdbrdbsdbtdbudbvdbwdbxdbybCJdbzdbAdbBdbCdbDdbEdbFdbGdbHdbIdbJdbKdbLdbMdbNdbOdbPc32c32dbQdbRdbSdbTdbUdbVdbWdbXdbYdbZdb0db1db2db3c84db4db5db6db7db8db9dc.cUGdc#dcadcbdccawUc9ec9edcddcedcfdcgdchdcidcjdckdcldcmdcndcodcpdcqdcrdcsdctbVKdcuc.UdcvdcwdcxcDIdcycQccimcQycQcdczcMcdcAcQvdcBcqMdcCch6cuUdcDcVgdcEdcFdcGdcH", +"dcIdcJdcIdcKdcLc9LdcMdcMdcNdcOdcPdcQdcRdcSdcTdcUdcVdcWdcXdcYdcZc5Pc9Jdc0c9Kc4Uc91c92dc1dc1dc1dcJdcJdcJc91c48cIdciFcVlceiciDcDWdc2dc3dc3dc4dc2dc5dc6dc7dc8dc9dd.dd#ddaddbddcdddddeddfddgddhddiddjddkddlddmddnddoddpddqddrddsddtdduddvddwddxddyddzddAddBddCddDddEddFddGddHddIddJddKddLb6DddMddNddOc06c04d.Md.NddPddQc02ddRc#qcvhcvqcvqcMBc5LddSddTddUddVddWddXddYddZdd0dd1c55dd2dd3d.0dd1dd4dd5dd6dd7dd8dd9de.de#deadebdecdeddeedefd#ddegdehdeidejd#kdekdeldemdemdendeodepdeqderdesdeta8LdeudevdewdexdeydezdeAdeBdeCdeDdeEdeFdeGdeHdeIdeJdeKdeLdeMdeNdeOdePdeQd#RdeRdeSdeTdeUdeVdeWdeXb8KdeYdeZde0de1de2de3de4de5de6aIUde7aN.de8de9aRuaRucsCaRucfVdf.aVOdf#dfadfbdfcdfddfedffdfgdfhdfidfjdfkdfldfmdfndfodfpdfqdfrdfsdftdfudfvdfwdfxdfydfzdfAdfBdfCdfDdfEdfFdfGdfHdfIdfJdfKdfLdfMdfNdfOdfPdfQdfRdfSdfTcgNam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.bCvdfUdfVdfWdfXdfYam.bGIdfZdf0df1df2df3df4df5df6df7df8df9dg.dg#dgadgbdgcdgddgedgfdggdghdgidgjdgkdgldgmdgndgodgpdgqdgrdgsdgtb5aam.cGabtQam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.dgudgvdgwdgx#nBdgydgzdgAdgBdgCdgDdgEdgFdgGdgHdgIdgJdgKdgLdgMdgNdgOdgPdgQdgRdgSdbLdgTdgUdgVdgWdgXc32dgYdgZdgZdg0dg1dg2dg3dg4c81dg5dg6dg7db3dg8dg9dh.clYdh#aARdhadhbcqedhcdhddhedhfdhgdhhdhidhjawUdhkdhldhmdhndhodckdhpcqedhqdhrdhsdhpdhtdhudhvdhwdhxdhydhzdhAdhBdhCcHTdhDdhEcuUbHscqmcQcdhFdhGdhHdczcZ8dhIc9Bb51c4JciacHSdhJdhKdhL", +"c9LdhMdhMdhNdcPdcMdcMdcPdhOdhPdhPdhQdhRdhSdhTdhUdhVdhWdcLdhXdhYdhZdc1dc1c92c92c92dhMdc1dcJdcJdc1dc1dc1dhMc92dcIcVmdh0dh1dh2dh3dh4dh5dh6dh7dh8dh9di.di#ddHdiadibdicdidddgdiddibdiedifdigdihdiiddgdijdikdildimdindiodipdiqdirdisditdiudivdiwdixdiydizdiAdiBdiCdiDdiEdiFddFdiGddHdiHdiIdiJdiKd.JdiLdiMdiNcWbcWbcEhc02diOdiOcvpc#qcvqc49diPdiQdiRdiSdiTdiUdd0diVdiWdiXdiYdiZdd1di0c51di1di2di3di4di5di6de.di7di8di9dj.dj.dj#djadjbd#edjcdjddjedjfc6jc6jdjgdeideid#jcWQdjhdjidjjdjkdjldjmdjndjodjpdjqdjrdjsdjtdjudjvdjwdjxdjydjzdjAdjBdjCdjDdjEdjFdjGdjHdjIdjJdjKdjLdjMdjNdjOdjPdjQdjRdjSdjTdjUdjVdjWdjXdjYdjZdj0dj1dj2dj3cOddj4dj5dj6cbHaRudj7dj8bPca0sdj9dk.dk#dkadkbdkcdffdkddkedkfdkgdkhdkidkjdkkdkldkmdkndkodkpdkqdkrdksdktdkudkvdkwdkxdkydkzdkAdkBdkCdkDdfFdkEdkFdkGdkHdfNdaFdkIdkJdkKdkLdkMdkNdkOam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.dkPdkQdkRdkSbQiap5am.am.bZVbU2dkTdkUdkVdkWdkXdkYdkZdk0dk1dk2dk3dk4dk5dk6dk7dk8dk9dl.dl#dladlbdlcam.dldb9Edledlfdlgdlhdliam.am.btQap5am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.dlj#bydlkdlldlmdlndlodlpdlqdlrdlsdltdludlvdlwdlxdlydlzdlAdlBdlCdlDdlEdlFdlGdlHdlIdlJdlKdlLdlMdlNdlOdlPdlQdlRdgXdlSdlTdlUdlVdlWdlXdlYdlZdl0dl1dl2cUEdl3dl4dl5aARdl6dl7dl8dl9ag0dm.dhedm#dmadmbdmccUGdmdclYdhicZpdmec9bdmfdmgdmhcLjdmicv.dmjdmkdmldmmdmndmodmpdmqdmrdmsdmtcQxcqFbQ3b51aJHbQ3cHZdhDdmudmvciadmwcQcb.lcHZdmxdmydcEdmz", +"dmAdmBdmCdmDdmAdhMdhMdhMdhMdmEdmFdmGdmHdmIdmJdmKdmLdmMc92dcPdc1dmAdmEdmAdmAc92c92c92dc1dc1dcJdcJdcJdc1dmNdmOc5Oc5OdmPdmQc06dmRdmScRxdmTdmUdmVdmWdmXdiididdiddiddidddgdiddmYdiedigdigdmZdm0dm1dijdm2dm3dm4dm5dm4dm4dm6dm7dm8dm9dn.dn#dnadnbdncdm6dnddnednfdngdnhdnidnjddGddidnkdiGdnldnmdnndnodnpdnqcWbcvqcvic#qc#qcvpdnrcvpcvhdiNddSdnsdntdnudnvdnwdnxdiWdnydnxdnzd.ZdnAc1hdnBdnBdnCdnDcIYdnEdnFdnGdnHdnIdnJdnKdnLdnMdj#dnNdnOdnPdekdnQdjfdnRcWQcWQc1AdnSdnTdnUc1AdnVdnWdnXdnYdnZdn0dn1dn2dn3dn4dn5dn6dn7dn8dn9do.do#doadobdocdoddoedofdogdohdoidojdokdoldomdondoodopdoqdordosdotdoudovdowdoxdoydozdoAdoBdoCdoDdoEdoFdoGdoHdoIcsRb8YcbhdoJcBodoKdoLdoMdoNdoOdoPdoQc7edoRdoSdoTdoUdoVdoWdoXdoYdkkdoZdo0do1do2do3do4do5do6do7do8do9dp.dp#dpadpbdpcdfEdpddkF.yadpedpfdpgdphdfLdaGdpic7Fdpjdpkdpldpmdpnam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.dpodppdpqdprdpsdptam.am.am.bCvbUZdpudpvdpwdpxdpydpzdpAdpBdpCdpDbVndpEdpFdpGdpHdpIdpJdpKdpLdpMbtQam.bZVco5dpNdpOdpPdpQdpRam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.cKrdpS#fF#tQdpTdpUdpVdpWdpXdpYdpZdp0dp1a0Zdp2dp3dp4dp5dp6dp7dp8dp9dq.dgKdq#dqadqbdqcdgTdlKdgUdqddqedqfdqgdqhdqidgXdqjdqkdqldqmdqndqodqpdqqdqrdqsdqtdqudqvdqwdqxdqydqzdqAdqBdqCdqDdqEdm.dqFcUFdqGdqHdqIdqJdqKdqLdqMdqNdqOdqPdqQdqRdqSdmjdqTdqUdqVdqWdqXdqYdqZdq0dq1dq2dq3dq4dq5cuVbhbbyXb5Yb5YblObHtcdEdq6dq7dq8dq9dr.dr#ciaczkdmydmq", +"dradradrbdrbdmCdrcdrddmDdredrfdrgdrhdridrjdrkdrgdrldhOdmAdmAdmAdmAdrmdredrmdmAdhMdc1dcJdc1dcJdcJdrndmNdrodmPdmPdmQdmQdmQdmQdrpdrqdrrc9Wdrsdrtdm3diddiidiidmZdmZdmZdmZdmZdigdrudiedrvdrwdm1drxdijdm2dm3diidiiddgddgdm4dijdrydrzdijdm0drAdnedrzdijdmZdiddiddrBdiddrCdrDdrAdrEdrFdrGdrHdrIdrJdrKdrLdrMdrNdiNcvlcvqc02diOddRcWgdrOdrPdrQdrRdrSdrTdrUdrVdrWdrXdrYdrZdr0dr1dr2dr3dr4dr5dr6dr7dr8dr9dnGds.ds#dsadsbdscdsddsedsfdsfdsgdshdsic1Adsjc1Bc1BcWOdskdsldsmdsndsodspdsqdsrdssdstdsudsvdswdsxdsydszdsAdsBdsCdsDdsEdsFdsGdsHdsIdsJdsKdsLdsMdsNdsOdsPdsQdsRdsSdsTdsUdsVdsWdsXdsYdsZds0ds1ds2ds3ds4ds5ds6ds7ds8ds9cxadt.dt#cbFcbHcxcdtadtbdtccSQdtddtedtfdtgdthdtidtjdtkdtldtmdtndtodtpdtqdtrdtsdttdtudtvdtwdtxdtydtzdtAdtBdo6dtCdtDdtEdtEdtFdtGdtHdtIdtJ.yadtKdtLdfKdpgdphdtMdtNdtNdtOdtPdtQdtRdtSdtTam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.dtUdtVdtWdtXdtYclxam.am.am.am.am.dtZcgVdt0dt1dt2dt3dt4dt5dt6dpAdt7dt8dt9du.du#duadubducdudap5am.am.am.bVsduedufdugduhb5#am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.duidujdukdul#fFdum#tM#Agdun#3eduodupduqdurdusdutduuduvduwduxduyduzduAduBduCduDduEduFduGduHdqedqedlLduIduJduKduLdgZdqjduMduNduOduPduQduRduSduTduTduUduVduVduWduXduYduZdu0du1du2du3du4du4du5dm.du6du7du8du9dv.dv#dvacHddvbdvcdvddu5cl6dveao9dvfdvgdvhdvidvjdvkdvldvmdvndvodvpczldvqblOdvrdvrdcub51b5Xch6cZ4dmudvscDIdcCc9vdcvdcxdvtdvu", +"dvvdvvdradradvvdvwdvxdvydvzdvAdvBdvCdvDdvEdvFdvGdvHdvIdvJdvKdvLdvLdvLdmDdrmdmDdrmdhMdcJdcJdc1dmNdrodvMdroc5Oc5Oc5OdmPdrqdvNdvOdvPdvQdvRdvSdiedm4ddgdmZdvTdigdigdigdigdiediedm9dvUdvVdvWdm0dvXdm3dm3diidiidm3dm0dijddgdiiddgddgddgddgdm0dirdrzdirddgdmZdm4dmZddgddgdikdvYdvZdikdikdiHdv0dv1dv2dv3dv4dv5diNdiNdiNdv6dv7dv8dv9dw.dw#dwadwbdwcdwddd3dwedrXdrYdrYdwfdwgdr2dwhdwidwjcWvdwkdwldwmdwndwodwpdwqdwrdwsdwtdwudwvdwwdwxdwydwzdwAdwBdwCc1AdwDdwEdwFdsmcNJdwGdwHdwIdwJdwKdwLdwMdwNdwOdwPdwQdwRdwSdwTbYYdwUdwVdwWdwXdwYdwZaRPdw0dw1dw2dw3dw4dw5dw6dw7dw8dw9dx.dx#dxadxbdxcdxddxedxfdxgdxhdxidxjdxkdxldxmdxndxodxpdxqdoIdj6cbkdxrcSAaZ9dxsdxtdxudxvdxwdxxdxydxzdxAdxBdxCdxDdxEdxFdxGdxHdxIdxJdxKdxLdxMdxNdxOdxPdxQdxRdxSdxTdxUdxVdxWdxWdxXdxYdxZdx0dx1dpedfKdx2dphdx3dx4dx5dx5dx6dx7dx8dx9dy.dy#dyaam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.bCvdybdycdyddyeam.am.am.am.am.am.am.bZVdyfdygdyhdyidyjdykdyldymdyndyodypdyqdyrdysdytdyuam.am.am.am.am.dyvdywdyxdyydyzdptbtQam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.dyAdyB#DVdpTdyCdyDdyEdyFdyGdyHdyIdyJdyKdyLdyMdyNdyOdyPdyQdyRckOdySdyTdyUdyVdyWdyXdyYdyZdy0dy1dqddy2dlLdy3dy4dy5c33dy6dy7dy8dy9dz.dz#dzadzbdzcdzddzedzfdzgdzhdzidzjdzkdzldzmdzndzodzpas4dzqdzrdcsasSdzsdztdzucLjdzvdzwdzxdzydzzdzAdzBdzCdqPdzDdzEdzFdzGdzHdzIdzJdzKdzLdvtdvncHTcHZb.oa6cbCRbyXb51dzMdzNcdEdzOdhIczodq5cQBc4kdzPdzQdhC", +"dzRdradradzSdzTdzUdzVdzWdzXdzYdzZdz0dz1dz2dz3dz4dz5dz6dz7dz8dz9dA.dA#dvxdrcdmDdmDdAadAbdmOdmNdvMdrodrndAcdAddrpdAedAfdAgdAhdAidAjdAkdiedAldihdmZdihdiedAmdAndrudrudiedAldm3dAodm2dm2dApdrwdm0ddgdm4dm4dm4diiddgdijdm3dm3dm3dm3drvdm4ddgdirdirddgdrCddgdiidmZdmZdiididdidddgddFdikdvYdAqdv0dv2dArdAsdAtdAudiNdAvdAvdAwdAxdAydAzdAAd.ZdABdwddnxdACdrZdADdAEdrYdrZdAFdAGdAHdAIcRLdAJdAKdALdwpdAMdANdAOdANdwsdAPdwsdAQdARdASdATdAUdAVdAWa8ydAXdskdAYdAYdAZaVLdA0dA1dA2dA3dA4dA5dA6dA7dA8dsudA9dB.dB#dBadBbdBcdBddBedBfdBgdBhdBidBjdBkdBldBmdBndBodBpdBqdBrdBsdBtdBudBvdBwdBxdBydBzdBAdBBdBCdBDdBEdBFdBGdBHbYKcgcdBIcBndoIdoIcbDdBJdBKdBLdBMdBNdBOdBPdBQdBRdBSdxzdBTdBUdBVdBWdBXdBYdBZdB0dB1dB2dB3dB4dB5dB6dB7dB8dB9#hudC.dC#dCadCbdCcdCddCedCfdCgdChdCidpgdCjdCkdCldCmdCndCodCndCpdCqdCrdCsdCtdCudCvdCwdCxam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.dptdCydCzbVsam.am.am.am.am.am.am.am.am.cKsdCAdCBdCCdf1dCDdCEdCFdCGdCHdCIdCJdCKclxam.ap5am.am.am.am.dCLdCMdCNdCOdCPcKsbtQam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.dCQdCR#V4#V4dCSdCTdCUdCVcY0dCWdCXdCYdCZdC0dC1dC2dC3dC4dC5dC6dC7dC8dC9dD.dD#dDadDbdDcdDddlMdqedy2dDedDfdDgdDhdDidDjdDkdDldDmdDndDodDpdDqdDrdDsdDtdDudDvduTdDwdDxdDydg5dDzdDAdDBdDCdDDdDEdDFdDGdDHdDIdDJ#6WdDKdqzdDLdDMdDNdqPdDOdDPdzydDQdDRdDSdDTdDUdDVdDWdDXc4kcZ4ciadhFczldDYcVecHZb.odDZbp9b.ldzMc.QcdEdq9dhFdD0dD1dD2cqMc4kdD3dq1", +"dD4dD5dD6dD7dD8dD9dE.dE#dD8dEadEbdEcdEddEedEfdEgdEhdEidEjdEkdEldEmdEndEodvxdEpdEqdmOdAddAddmNdrodrodAddErdEsdEtdEudEvdEwdExdEydigdAldihdihdmYdigdAmdEzdEAdEAdifdicdiddEBdECdvWdvWdApdvWdrwdrwdm0dm3dm4dm4diddrFdEDdiidiidm3dm3diidiidirdvZdijdm4dm3dEEdEEdm3diididdiddiddiddrFdrEdirddidrGdEFdEFdEGdEHdEIdEJdEKdELdEMdENdEOdEPdEQdrYdrUdnxdABdrZd.2dERdESdETdEUdEVdEWdwhdAJdEXdEYdEZdE0dE1dANdE2dE2dwsdE3dE4dE4dE5dE6dE7dE8dE9dF.dF#ckadFadAZdFbdFcdFddFedFfdFgdFhdFidFjdFkdFldFmdFndFodFpdFqdFrdFsdFtdFudFvdFwdFxdFydFzdFAdFBdFCdFDdFEdFFdFGdFHdFIdFJdFKdFLdFMdFMdFNdFObBpdFPdFQdFRdFSdFTdFUdFVdFWdFXdFYdFZdF0doIcfTcbmcXmdF1dF2dF3dF4dF5dF6dF7dF8dF9dxzdG.dG#dGadGbdGcdtodGddGedGfdGgdGhdGidGjdB6dGkdGl.WjdGmdGndGodGpdGqdGrdGsdGtdGudGvdGwdtLdGxdGydGzdGAdGBdGCdGDdGAdGEdGFdGGdGHdGIdGJdGKdGLdGMdGNam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.btQdGOdyfbLrdGPbG4dGQbtQam.am.am.am.am.am.am.am.am.ap5dGRdGSdGTdGUam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.dGVdGWdGXdGYdGZdCS#AmdG0dG1dCWdG2dCXdG3dG4dG5dG6dG7dG8dG9dH.dH#dHadHbdHcdHddq.dHedHfdHgdy0duGdqddDgdDedDedy2dy3dHhdHidHjdHkdHldHmdHndHodHpdHqdHrdHsdHtdHudHvdHwdHxdHydHzdHAdHBdHCdqqduSdHDdHEdHFdHGdHHdDGdHIdg6c4edHJdHKdHLdHMdDPdHNdHOdHPdHQdHRdHSdHTdHUdHVdHWdHXcLPcuUc4JdHYaGQaCfdHZaGEblQb5sbyqbHtdzNcdwdq6cZ8cHTdH0dH1dH2dmxdH3dH4", +"dH5dH6dH7dH8dH9dI.dI#dIadIbdIcdIddIedIfdIgdIhdIidIcdIhdIhdIjdI.dIkdIldImdIndrddIodIpdvydIqdErdvMdAddIrdrpdAedIsdItdIudIvdIwdiddmZdmZdmYdigdAmdAndEAdIxdIxdifdiedm4dIydIzdIAdvVdvWdvWdvWdIBdrwdm0dm3dm4dm4dm4dmZddgdm3diidm3diiddgddgdikdm8ddgdm4dEEdm2diidEEdEEdiidiidiiddgdmZdICdiddmZddidIDdIEdEFdIFdIGdIHdIIdIJdIKdILdIMdrYdrYdINdIOdwddIPdIQdIRdISdITdIUdIVdIWdIXdAJdIYdIZdsbdI0dE0dI1dI2dwtdI3dI4dI5dI6dnEdI7dI8dI9dJ.dAWdJ#dJacfQdJbdJcdJddJedJfdJgdJhdJidJjdJkdJldJmdJndJodJpdJqdJrdJsdJtdJudJvdJwdJxdJydJzdJAdJBdJCdJDdJEdJFdJGdJHdJIdJJdJKdJLdJMdJNdJOdJPdJQdJRdJSdJTdJUdJVdJWdJXdJYdJZdJ0bTVdFZdJ1dJ2dJ3dJ4dBKdtcdJ5dJ6dJ7dJ8dJ9dK.dK#dKadKbdKcdKddKedKfdKgdKhdKidKjdKkdKldKmdKndKodKpdKqdKrdKsdKtdKudKvdKwdKxdKydKzdKAdKBdKCdKDdphdKEdKFdKGdKHdKIdKJdKKdKLdKMdKNdKOdKPdKQdKRdKSdKTdGLdKUdKVdKWam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.bG7am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.dKXdKYdKZdK0dK1dK2dK3dK4dK5cUedK6dK7dK8dK9dL.dL#dLadLbdLcdLddLedLfdLgdLhdLidLjdLkdLldLmdLndLodLpdDfdy2dDgdLqdLrdLsdLtdLudLvcPWdLwdLxdLydLzdLAdLBdLCdDydLDdLEdLFdLGdLGdLHdLIdLJdLKc82dqqdHrdLLdLMdLNdLOdLPdLQdLRdLSdLTdLUdLVdLWdqydLXdqzdHQdLYdLZdL0dqydL1dL2dL3dL4dL5dL6cZYcuUdhDdL7dL8ayvauFaTGa59aGEaPfbHtb5WdL9dmucHTdM.dM.dH2cDEcu6dM#", +"dMadMbdMcdMddMedMfdMgdMhdI#dMidMidMjdMkdMldIhdIhdIhdMmdMndMndIhdIadModMpdMqdMrdMsdMtdMudMvdMwdErdMxdErdMydMzdMAdMBdMCdMDdAldMEdmYdAmdAmdEAdEAdMFdMFdIxdiedMGdMHdMIdMJdMJdMJdMKdMLdMLdMMdMNdncdMOdMPdiidm4dm4diddiidiidiidiidiidijdm6dijddgddgdiidiidm3dEEdMQdrCdrCdm3diidiidm4diidmZdrFdMRdMSdMTdMUdMVdMWdMXdMYdMZdM0dM1drZdrYdM2dM3dwddrYdM4dM5dM6dM7dM8dM9dN.dIZdwhdN#dNadNbdEXdNcdNddAPdI3dNedI4dNadNfdNgdNhdNidNjdNkdNldNmdNndNodNpdNqdNrdNsdNtdNudNvdNwdNxdNydJmdJldFkdJndNzdsgdNAdNBdNCdNDdNEdNFdNGdNHdNIdNJdNKdNLdNMdNNdNOdNPdNQdNRdNSdNTdNUdNVdNWdNXdNYdNZdN0dN1dN2dN3dN4dN5dN6dN7dN8dN9dO.dO#dOacJYdJ2dObdOca0.dOddOedOfdOgdOhdOidOjdxwdOkdOldOmdOndOodGddOpdOqdOrdOsdOtdOudOvdOwdOxdOycOHdOzdOAdOBdOCdODdOEdOFdOG.Ed.4#dOHdOIdfKdOJdOKdGEdKHdKLdOLdOMdONdOOdOPdKMdOQdORdOSdOTdOUdOVdKTdGLdKVdOWdOXdOYdOZdO0daLap5am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.dO1dO2dO3dO4dO3dO5dO6dO7dCUdO8dO9dP.dP#dPadCXdPbdPcdPddPedPfdPgdPhdPidPjdPkdPldPmdPndPodPpdPqdPrdPsdPtdPudPvdy3dPwdPxdPydLtdPzc8WdPAdPBdPCdPDdPEdPFdPGdPHdPIdPJdPKdPLdPMdPNdLKdPOdPPdPQdPRdPSdPTdPUdPVdPWdPXdPYdPZdP0dP1dP2dP3dP4dLWdP5dP6dP7dP8dP9dQ.dQ.dQ#dQadQbc3PdQcdQddQedQfdQgdH1dhGcMbdhDdmvdq5dvsdcyc4JcdEdL9dhDdD2dH0dvodH1dQhdQidQh", +"dQjdQkdQldQmdQndQodQpdQqdIadQrdQsdQtdQudMgdMkdIgdIcdIedQvdMldMldIddQwdI.dQxdQydQzdQAdQBdQCdQDdQEdQDdQFdQGdQHdQIdQJdQKdmYdihdmYdQLdAndAmdQMdQNdQOdICdQPdIzdQQdQRdQSdQTdQUdQVdQWdQXdQYdQZdQZdQ0dQ1dQ2dncdmZdm4dm3dm3diidiidiidiidrCdikdm6dm1dm1dirdrzdQ3dm1dirdrzdijdEEdiididdm4diidmZdirdQ4diHdMVdMSdQ5dQ6dQ7dQ8dQ9dR.drZdrZdR#dABdrZdRadRbdRcdRddRedRfdRgdRhdRidEWdRjdRkdRldRmdRndRodRpdRqdRrdEWdRsdAHdr3dRtdRudRvdRwdRxdRydRzdRAdRBdRCdRDdREdRFdRGdRHdRIdRJdRKdRLdRMdRNdRNdROdRPdRQdRRdRSdRTdRUdRVdRWdRXdRYdRZdR0dR1dR2dR3dR4dR5dR6dR7dR8dR9dS.dS#dSadSbdScdSddSedSfdSgdShdSidSjdSkdSldSmdSndSodSpbbgdSqdSrdSscwWdStdSudSvdSwdSxdSydSzdSzdSAdSBdSCdSDdSEdSFdSGdSHdOpdSIdSJdSKdSLdSMdSNdSOdSPdSQdSRdSSdSTdSUdSVdSWdSXdSYdSZdS0dS1dkHdS2dS3dS4dGzdS5dS6dS7dS8dS9dT.dT#dTadOOdTbdTcdTddTedTfdGJdTgdGLdThdS3dTidTjdTkc2XdTlap5am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.dTmdTndTodTpdTqdTrdTsdTtdTu#fFdTvdTwdTxdTydO9dTzdP.dTAdPadTBdTCdTDdTE.24dTFdTGdTHdTIdTJdTKdTLdTMdTNdTOdTPdTQdTRdTSduIdTTdTUdTVdTWdTXdTYduLdTZdT0dT1dT2dT3dT4dT5dT6dPHdT7dT8dT9dU.dPNdU#dUadUbdUcdb1dUddUedUfdUgdUhdUidUjdUkdUldUmdUndUodUpdUqdUrdUsdUtdUudUvdUwdUvdUxdUydUzdUAdUBdUCdzIdhzdUDdq1dUEczkdzKdUFdvldUGdUHdUIdq9cZ4dq6dzOdhIdH1dvpdM.dH1dQidH1", +"dUJdUKdULdUMdUNdUOdUPdUQdURdUSdUTdUUdUVdUWdUXdUYdUZdU0dU1dU2dU3dU4dU5dU6dU7dU8dU9dV.dV#dVadVbcIMdVcdVddVedVfdVgdVhdVidmZdVjdVkdVldVmdVndVodVpdVqdVrdVsdQYdVtdVudVvdQWdVwdVwdVxdVxdVydVzdVAdVBdVBdVCdVDdVEdmZdm4dm3diidiidiiddgdrxdrxdiadm6dm1dVFdVGdVHdVIdm6dirddgdiididdiddiddiddiddiddmZdVJdvYdnkdVKdVLdVMdVNdrZdrZdwfdrYdR#drZdwgdVOdVPdVQdVOdVRdVSdVTdVUdVVdNfdVWdVXdVYdRpdVZdV0dV1dV2dAHdr4dV3dV4dV5dV6dV7dV8dV9dW.dW#dWadRAdWbdWcdWdds9dWebjTcfxdWfdWgdWhdWidWjdWkdWldWmbwsdWndWodWpdWqdWrdWsdWtdWudWvdWwdWxdWydWzdWAdWBdWCdWDdWEdWFdWGdWHdWIdWJdWKdWLdWMdWNdWOdWPdWQdWRdWSdWTdWUdWVdWWdWXdWYdWZdW0dW1dW2dW3dW4dW5dW6dW7dW8dW9dK#dX.dX#dXadXbdXcdXddXedSGdXfdXgdXhdXidXjdXkdXldXmdXndXodXpdXqdXqdXrdXsdXtdXudXvdXwdXxdXydS3dXzdXAdXBdXCdXDdONdOMdS7dXEdS9dXFdXGdKQdKKdXHdOTdXIdOUdXJdGJdTgdGLdThdXKdOJdCkdXLdXydXMam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.blmdXNdXOdXPdXQdXRa0kdXSdXTaoQdXUdXVdXWdXXdXYdXZdyLdX0dX1dTBdX2#ifdX3dX4#1SdX5dX6dX7dX8dX9dY.dY#dYadYbdYcdYddTQdYedYfduMdYgdYhdYidTVdlOdYjdYkdqidYldYmdYndYodYpdYqdYrdYsdYtdPHdYudLJdqFdYvdYwdDTdYxdYydYzdYAdYBdYCdYDdYEdYFdYGdYHdYIdYJdYKdYLdYMakUdUsdYNdUtdYOdYPdYQdYRdYSdYSdYTdYUdYVdYWdYXdYYdYZdY0dY1dY2dY3dY4dY5dvldq0dY6cQBdmvdmudmvdcBdvndY7dY8dY8dY9", +"dZ.dZ#dZadZbdZcdZddZedZfdZgdZhdZidZjdZkdZldZmdZndZodZpdZqdZrdZsdZtdZudZvdZwdZxdZydZzdZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKdZLdZMdZNdZJdZOdZPdZQdZRdZSdZTdZUdZVdZWdZXdZYdZZdZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9d0.d0#d0ad0bd0cd0dd0edVFd0fd0gd0hd0id0hd0fd0gd0gd0jdVHdVGdijdiidm4diddiddm4dm4dICdrFdVJddid0kdMVd0ldiad0mdrXdrZdrYdrYdR#drYdwgd0nd0od0pd0qd0rd0sd0td0ud0vd0wd0xdr3d0yd0zd0AdAGd0Bd0Cd0DdNfd0Ed0FdnEd0Gd0Hd0Id0Jd0Kd0LdW#d0Md0Nd0Od0Pd0Qd0Rd0Sd0Td0Ud0Sd0Vd0Wd0Xd0Yd0Zd00d01d02d03d04d05d06d07d08d09d1.d1#d1ad1bd1cd1dd1ed1fd1gd1hd1id1jd1kd1ld1md1nd1od1pd1qd1rd1sd1td1ud1vd1wd1xd1yd1zd1Ad1Bd1Cd1Dd1Ed1Fd1Gd1Hd1Id1Jd1Kd1Ld1Md1NdX.d1Od1Pd1Qd1Rd1Sd1Td1Udtqd1Vd1Wd1X#FTd1Yd1Zd10d11d12d13d14d15d16d13dSRd17d18d19d2.d2#d2adXAd2bd2cdGzd2dd2ed2fd2gd2hd2id2jd2kd2ld2md2nd2odOUdOUd2pd2qd2pd2rd2sdCld2adGxd2td2ud2vd2wam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.d2xd2yd2zd2Ad2Bd2Cd2Dd2Ed2Fd2Gd2Hd2Id2Jd2Kd2Ld2Md2NdTCd2Od2Pd2Qd2Rd2Sd2Td2Ud2Vd2Wd2Xd2Yd2Zd20d21d22#Q2d23d24d25dqfd26d27dy4d28d29dYjdTVd3.d3#duLd3ad3bd3cd3ddYpd3ed3fdPId3gd3hd3idzAdDNd3jdHUdQbd3kd3ld3md3nd3od3pd3qd3rdYFdYGd3sd3td3ud3vd3wd3xd3yd3zd3Ad3BdYOd3Cd3Dd3Ed3Fd3Gd3Hd3Id3Jd3Kd3Ld3Md3Nd3Od3Pd3Qd3Rd3Sd3TdYZd3Ud3VdcwczodhFdhFczldvnd3Wd3Xd3Yd3Z", +"d30d31d32d33d34d35d36d37d38d39d4.d4#d4ad4bd4cd4dd4ed4fd4gd4hd4id4jd4kd4ld4md4nd4od4pd4qd4rd4sd4td4ud4vd4wd4xd4yd4zd4Ad4Bd4Cd4Cd4Cd4Dd4Ed4Fd4Gd4Hd4Id4Jd4Kd4Ld4Md4Nd4Od4Od4Pd4Qd4Rd4Rd4Sd4Td4Ud4Vd4Wd4Xd4Yd4Zd40d41d42d42d43d44d45d46d47d48d49d5.d5#d5ad5bd5bdm6drCdiididdiddm4dmZdrEd5cd5dd5ed5fd5gd5hd5idrXdrZdrYdrZdrZdrYd5jd5kd5ld5md5nd5od5pd5qd5rd5sd5td5ud5vd5wd5xd5yd5zd5Ad5Bd5Cd5Dd5Ed5FdRpcIYd5GdV6d0TbTyd5HbOPd5Id5Jd5Kd5LcJVcJVd5Md5Nd5Nd5Od5Pd5Qd5Rd5Sd5Td5Ud5Vd5Wd5Xd5Yd5Zd50d51d52d53d54d55d55d56d57d58d59d6.d6#d6ad6bd6cd6dd6ed6fd6gd6hd6id6jd6kd6ld6md6nd6od1vd1wd6pd6qd6rd6sd6td6ud6vd6wd6xd6yd6zd6Ad6Bd6Cd6Dd6Ed6Fd6Gd6Hd6Id6Jd6Kd6Ld6Md6Nd6Od6Pd6Qd6Rd6Sd6Td6Ud6Vd6Vdpbd6Wd6Xd6Yd6Zd60d61d62d63d64d65d66dOKdXAd67d68dKHd69d7.d7.d7#d2ed2jd7ad7bd7cd7dd7ed7fd7gd7fd7hd7id7jdOUd2cdCldCld7kd2ud2udGxd7lam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.d7md7naEOd7od7pd7qdXTd7rd7sd7td7ud7vd7wdDfd7xd7yd7zd7Ad7Bd7Cd7Dd7E#Avd7Fd7Gd7Hd7Id7Jd7Kd7Ld7Md7Nd7Od7Pd7Qd7Rd7Sd7Td26d7Ud7VdTXd7Wd7Xd7Yd7Yd7ZdYid70d71d72d73d74dYqdPId75dT5dT5dHAd3ed76d77d78d79d8.d8#d8adbFd8bd8cd8dd8eakTd8fd8gd8hd8hd8id8jd8kd8ld8md8nd8od8p#VSd8qc3QaJad8rd8sd8td8ud8vd8wd8xd8yd8zd8Ad8Bd8Cd8Dd8Ed8Fd8Gd3Vd3VdUGcqMdDYdH2cmBdH2dH0dY7d8H", +"d8Id8Jd8Kd8Id8Ld8Md8Nd8Od8Pd8Qd8Rd8Sd8Td8Ud8Vd8Wd8Vd8Xd8Yd8Zd80d8Qd81d82d83d84d85d86d87d88d89d9.d9#d9ad9bd9cd9dd9ed9fd9gd9hd9id9jd9kd9ld9md9nd9od9pd9qd9rd9sd9td9ud9vd9wd9wd9xd9yd9zd9Ad9Bd9Cd9Dd9Ed9Fd9Gd9Hd9Id40d9Jd9Kd9Ld9Md9Nd9Od9Pd9Qd9Rd9Sd9Td9Ud9Vd9Wd9Xdm1ddgdiddmZdrFd5cdQ4d9Ydv2d9Zd90dINd91dETdAEdrYdR#drZdrZdwgd92d93d94d95d96d97d98d99dM1e..e.#e.ae.be.ce.de.ee.fe.ge.he.ie.je.ke.ldV1dVWe.me.ne.odFce.pe.qd0Oe.re.sd5LcJVe.te.ue.ve.we.xe.xe.ye.ze.Ae.Be.Ce.De.Ee.Fe.Ge.He.Ie.Je.Ke.Le.Me.Ne.Oe.Pe.Qe.Re.Se.Te.Ue.Ve.We.Xe.Ye.Ze.0e.1e.2e.3e.4e.5e.6e.7e.8e.9e#.e##e#ae#be#ce#de#ee#fe#ge#he#id6ze#je#ke#le#me#ne#oe#pe#qe#re#se#te#ue#ve#we#xe#ye#ze#Ae#Be#Ce#De#Ee#Fe#Fe#Ge#He#Ie#Je#Ke#Le#Me#Ne#Oe#Pe#Qe#RdThd2be#Se#Te#Ue#Ve#Wd2jd7.e#We#Xe#YdS8dOQe#Zd7he#0e#1e#2e#3e#4e#5e#6e#7e#8d2rd2rdKTe#9ea.ea#eaaam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.ap5eabeaceadeaedGZeafeageahawAeaieajeakealeameaneaneaoeapeaqeareaseateaueaveaweaxeayeazeaAeaBeaCeaDeaEeaFdC1eaGeaHeaIeaJeaKeaLeaMeaNeaOeaPeaQeaReaSeaTeaUeaVeaWeaXeaYeaZea0ea1ea2ea3ea4ea5ea6ea7ea8ea9eb.eb#ebaebbaJaebc#OEebdebeebfebgebhebiebjd8jd8kebkeblebmebndYMeboebpebqebrebsebtebuebvebwebxebycu9ebzebAebBebCebDebEebFebGdq1ebHdQhdM.ebIcmBczldhGdD0cmB", +"ebJebKebKebKebLebMebNebOebPebQebRebSebTebUebVebVebWebXebYebZeb0eb1eb2eb3d8Keb4eb5eb6eb7eb8eb9ec.ec#ecaecbeccecdeceecfecgecheciecjeckeclecmecnecoecoecpecqecrecsectecuecvecwecxecyeczecAecBecCecDecEecFecGecHecIecJecKecLecMecNecOecPecQecRecRecSecTecUecVecWecXdrCdiidmZdrEdvYd5ddrHecYecZec0dM2dABdETdrZdR#drYdrZdrZdABec1ec2ec3ec4ec5ec6ec7ec8dABec9ed.dESdM1ed#edaedbedceddeded5zedfedgdNfdr2dVWedhediedjdFdedkedld0Qd5Ld5Ld5Ledme.te.te.sednedledoedpedqedredsedteduedvedwedxedyedzedAedBedCedDedEedFedGd1tedHedIedJedKedLedMedNedOedPedQdWsedRedSedTedUedVedWedXedYedZed0ed1ed2ed3ed4ed5ed6ed7ed8ed9ee.ee#eeaeebeeceedeeeeefeegeeheeieejeekeeleemeeneeoeepeeqeereeseeteeueeve#Ieeweexe#LeeyeezeeAeeBeeCeeDdkGeeEd2vdGxdKFe#TdKIeeFeeGeeHd2ee#Wd7aeeIe#Xd2ed2fdKKe#ZeeJeeKeeKeeLe#4eeMeeNeeMeeOeePeeQeeReeSeeSeeTeeUe#6eeVeeWam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.eeXeeYdK1eeZee0ee1ee2ee3ee4ee5ee6ee7ee8ee9ef.ef#efaefbefcefdefeeffefgefhefiefjefkeflefmefnefoefpefqefrefseftefuefvefvefwefxefwdTTefyefzefzefAefBefCefDefEefFefGefHefIefJefKefLefMefNefOefPefQefRefSefTefUefVefWefXefYefZdYQdQbef0d3yebpef1ef2ef3ef4ef5ef6ef7d2Nef8ef9dYUeg.eg#egaegbegcegdegeegfeggeghegiegjegkeglegmegnegoegpegqegregsegtdmsdvpegudD2dDYc9DdDY", +"egvegwegvegwegxegxegyegzegxegxegwegAegyegyegBegCegCegCegDegEebJegFebKegGegHegIegJegKegLegMegNegOegPegQegRegSegTegUegVegWegXegYegZeg0eg1eg2eg3eg4eg5eg6eg7eg8eg9eh.eh#ehaehbehcehdeheeheehbehaehfegZehgehhehhehiehjehiecGehkehlehmehnehnehoehpehqehrehsehtehuehvd9Xdm6drDdnkdiHehwehxehyehzehAehBehCdINdrZdrZdrZehAehBehAehDehEehFehGehHehIehJehKehLec7edbe.gehMehNehOedced#ehPehQehRd0nd5CcRLehSehTehUdRtehVehWehXehYehZehYeh0e.seh1eh2e.ueh3d0Qeh4eh5eh6eh7dNueh8eh9ei.ei#eiaeibeiceideieeifeigeiheiieijeikeileimeineioeipeiqeireiseiteiueiveiweixeiyeizeiAedVeiBeiCeiDeiEeiFeiGeiHeiIeiJeiKeiLeiMeiNeiOeiPeiQeiReiSeiTeiUeiVeiWeiXeiYeiZei0ei1ei2ei3ei4ei5ei6ei7ei8ei9ej.ej#ejaejbejcejdejedCgejfejgejhejhd##ejiejjejkejlejmd7#dXEdT.ejnejoejpejqejrejodS9ejseeFeeJdwpdGFdGFejtejuejvejwejxejyejzejAejBdy#ejCejDejDdy#ejEeeUejFejGejHejIejJejKam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.ejLejMdTtejNejOejPejQejRejSejTejUejVejWejXejYejZej0ej1ej2ej3ej4ej5ej6ej7ej8ej9ek.ek#ekaekbekcekdekeekfekgekhekiekjekkeklefxefxekmeaLeknekoekpekqekreksektekuekvekwekxekyekzekAekBekCekDekEekFekGekHekIekJekKekLekMekNekOekPekQekRekSekTekUekVekWekXekYekZek0ek1ek2ek3ek4ek5ek6ek7ek8ek9el.el#elaelbelceldeleelfelgelhelieljelkellelmelneloelpelqelrcDDcHTdDYczoels", +"elteluelvelwelwelvelwelxelyelzelyelyelwelxelAelAelBelBelweltelCelDelEelFelGelHelIelJelKelLelMelNelOelPelQelRelSelTelUelVelWelXelYelZel0el1el2el3el4el3el3el5el6el7ecael8el9em.em#emaembemaemcelVemdemeehhemfemgemgemfemhemfehhemiemjegZemkemlemmegYemnemoempemqemremsdrIemtemuemvemwemxdrZdETemyemzdrZdABemAdM2drZdABdrYemBemCemDemEemFemGemHemIemJemKehOehOedcedcedcemLeddemMemNemOedeemPemQemRehUemSemTemUemVemWemVehYehYd5Le.sd5LednemXeh3emYemZem0em1em1dj1em2em3em4em5em6em7em8em9en.en#enaenbencendeneenfengenhenienjenkenlenmennenoenpenqenrensentedVenuenvenwenxenyenzenAenBenCenDenEenFenGenHenIenJenKenLenMenNenOenPenQenRenSenTenUenVenWenXenYenZen0en1en2en3en4.GVen5en6en7en8en9eo.eo#eoaeobdCsdKGeocd2jeodeoeeoeeofeogeohd2keoieojeokeoleomd7bdKKeeJeondGGeooeopdKKeoqd7cejweeMeordy.eoseoteoudy#dy#eovdy#eoweoxeeUeoyeozeoAeoBeoCam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.eoDeoEeoFeoGeoHeoIeoJeoKeoLeoMeoNeoOeoPeoQeoReoSeoTeoUeoVeoWeoXeoYeoZeo0eo1eo2eo2eo3eo4eo5eo6eo7eo8eo9ep.ep#epaepbepcepdepedDeepfekmepgephepiepjepkeplepmdlNeaHdbNepnepoeppepqeprepseptepuepvepwepxepyepzepAepBepCepDepEepFepGepHepIepJepKepLekXepMepNeadepOepPepQepRepSepT#VPd3CepUepVepWepXepYepZep0ep1ep2ep3ep4ep5ep6ep7ep8ep9eq.eq#eqaeqbeqceqdeqeeqfczkcDEdD2dDY", +"elvelweqgeqheqhelweqiegxegyegyelteqjelvegvegyegzeqkeqkegzeqlegEeqmeqneqoeqpeqqeqreqseqtequeqveqweqxeqyeqzeqAeqBeqCeqDeqEeqFeqGeqHeqIeqyeqJeqxeqKeqLeqLel4eqMeqNeqO.mDeqPeqQeqReqReqReqSeqTeqUeqVeqWeqXeqYeqDelYeqZeq0eq0eq1eq2eq3eq4eq5eq6eq7eq8eq9er.er#eraerbercerdereerfergerheridrXdETerjemzdRadABemAemAdwddrYd99erkerlermernemGemHemIemJemKemKehOedcedcedcemLemLerodM1erpdAFerqc5ZdN#dRterrerserteruerverwc2nerxehYe.terye.serzerAerBerCerDd5Kem1erEaISerFerGerHerIerJerKerLerMerNerOerPerQerRerRerSerTerUerVerWerXerYerZer0er1er2er3er4er5er6er7er8er9es.es#esaesbescesdeseesfesgeshesiesjeskeslesmesnesoespesqesressestesuesveswesxesyeszesAesBesCesDesEesFesGesHesIesJesKen6esLesMesNesOesPdKOesQesRd2jeodeodesSeodeoeesTd7.d7.d2eesUd69d7.d2jdS9esVdCodCoesWesXesYesZdT#es0es1es2es3es4dy.es5es6eouejCejDeovejDes7es8es8es9et.et#etaeeVam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.bLXetbetcetdeteetfetgethbXsetietjetketletmetnetoetpeoQetqetretsettetuetvetwetxetyetzetAeo2etBetCetDetEetFetGetHetIetJetKetLetMetNetOetPetPefwetQetRetSetTetUetVetWetQdqfetXetYetZet0et1et2et3et4et5et6et7dzvet8dG5et9eu.eu#euaeubeucepGeudeuedL4eufeugeuheuieujeukeuleumeuneuoeupeuqeurd3Gd3FeuseuteuueuveuweuxeuyeuzeuAeuBeuCeuDeuEeuFeuGeuHeuIeq#euJeqbeuKeuLeuMdvmczkdM.czl", +"egveqkeuNeuOegyeqkegyelCelveuPelveuQeuReuSeuTeuUeuVeqkegyeuWegyeuXeuYeuZeu0eu1eu2eu3eu4eu5eu6eu7eu8eu9ev.ev#bxTevaevbevcevdeveevfevgevhevievjevkevlevmevnevoevpevqevrevseqOevtevuevvevwevxevyevzevAevBevzevCevCevDevDevEevEevFevGevHeq8evIevJevKevLevMevNevOevPevQevRevSevTevUerievVevWevXevYdETdrZdM2emBdM2drZdM1evZev0ehHehIemFemIemJemKemKehOehOedcemLedcemLerodR#dRaev1ev2ev3ev4ev5ev6ev7ev8ev9eruew.ervew#erxewaehYd5Leh0ewbewbednerDerDcJVd0PewcewdeweewfewgewhewiewjewkewlewmewnewoewpewqewrewsewtewuewvewwewxewyewzewAewBewCdWPewDewEewFewGewHewIewJewKewLewMewNewOewPewQewRewSewTewUewVewWewXewYewZew0ew1ew2ew3ew4ew5ew6ew7ew8ew9ex.ex#exaexbexcexdexeexfexgexhexiexjen6ejdesMexkexlexmexnexoexpd7.d2iesTexqexrexseodeoeextd69eodexsesSeoeexudKHexve#1dGAexwdXGexxexyesZexzes0exAes2exBexBeeMexCexDes6es6eoueoveowexEes9exFexGexGexHexIexJap5am.am.am.am.am.am.am.am.am.am.exKam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.exLexMexNexOexPexQexRexSexTexUexVexWexXexYexZex0ex1ex2ex3ex4ex5ex6ex7ex8ex9ey.ey#eyaeybeyceydeo2ej8eyeeyfeygeyheyieyjeykeyleymeyneyoeypeyqeyreyseaJeyteyuetReyveyweyxeo3ey.eyyeyzeyAeyBeyCeyDat.eyEeyFet3dLTeyGeyHeyIekTek6eyJeyKeyLeyMeyNeyOeyPeyQdCYdQ.eyReySeyTeyUeyVeyWeyXeyYeyZeumey0ey1ey1ey2ey3ey4ey5ey6ey7ey8ey9ez.ez#ezaezbezcezdezebREezfezgezhezieuJeqbelpezjdq1dQidD2dD2", +"ebJezkegzeltezlezmezmeuPezmezneqkezoeuWezpezqeuVeltezrezsezseztezlezuezvezwezxezyezzezAezBezCezDezEezFezGezHezIezJezKezLezMezNezOc5gezPezQezRezSezTezUezVezWezUezXezXezYezZez0ez1ez2epAez3ez4ez5ez6ez7ez8ez9eA.eA#eAaeAbeAceAdeAeeAfeAgeAheAieAjeAkeAleAmeAneAoeApeAqeAreAseAteAteAueAveAwdrZdrZdrZd99drZdETeAxeAyemDernemGemIemJemKemKehOehOehOedcemLemLeroeroeAzeAAeABeACev1dABdRaeADeAEeAFeAGeAHew.eAIeAJeAKew#ewad5Ld5Le.sewbeALeAMe.sewbeANeAOdt.eAPeAQeAReASeATeAUeAVeAWeAXeAYeAZeA0eA1eA2eA3eA4eA5eA6eA7eA8eA9eB.eB#eBaeBbewCeBceBdeBeeBfeBgeBheBieBjeBkeBleBmeBneBoeBpeBqeBreBseBteBueBveBweBxeByeBzeBAeBBeBCeBDeBEeBFeBGeBHeBIeBJeBKeBLeBMeBNeBOeBPeBQeBReBSeBTeBUeBVeBWeBXeBYea#dOSeBZexoeB0eB1d7.esSexqexqexrexqeoed7.d7.eofesSexsesSeofeB2eB3eB4dGAeB5eB6dKQdKQexxesZeB7eB8eB9eC.eC#eC#eCaeCbeCceCdeCeeCfeCgeChdy#eoweCieCjeCkexGeCleCmd5meCneCoam.am.am.am.am.am.ap5eCpeCqdTmam.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.am.eCreCseCteCueCveCweCxeCyeCzeCAeCBeCCeCDeCEeCFeCGeCHeCIeCJeCKeCLeCMeCNeCOeCPeCQeCReCSeCTeCUeCVeCWeCXeCYeCZeC0eC1eC2eC3eC4eC5eC6eC7eC8eC9eD.eD#eDaeDbej4eDbeyueyveDceDdeDeeDfeDgeDheDieDjeDkeDleDmeDneyEeDoeDpeDqeDreDseDt#DHeDueDveDweDxeDyeDzeDzeDAdYTdQ##KZeyReDBeDCeDDeDEeDFeupeDGeDHeyXeDIeDJeDKeDLeDMeDNeDOeDPeDQeDReDReDSeDTcC4ezbeDUeDVeDWeDXeDYeDZeD0eD1eD2eD3eD4eD5eD6eD7dD2cqM", +"eD8euPeuPeD9ezsezmezmeuPezmezrezmelAelAelteluegweuQeE.egyeuPezmezsezleE#eEaeEbeEceEdeEeeEfeEgeEheEieEjeEkeEleEmeEneEoeEpeEqeEreEsdmJeEteEueEveEweExeEyeEzeEAeEBeECeEDeEEeEFeEGeEHeEIeEJeEKeELeEMeENeEOeEPeEQeEReESeETeEUeEVeEWeEXeEYeEZeE0eE1eE2eE3eE4eE5eE6eE7eE8eE9emzeAteF.eF#dM7eFaeFbeFceFddR.dM1eFeeFfemDeFgeFheFiemJemKemKehOehOedcedcemLemLeFje.geFke#VeFlcRLeFmeFneFodRaeFpeFqeFreFseFtemUemUeAJeFuew#emWehYd5Le.sewbeAMdj0eFveFweFweFvemZcOfeFxeFyedseASeFzeFAeFBeFCeFDeFEeFFeFGeFHeFIeFJeFKeFLeFMeFNeFOeFPeFQeFReFSeFTeFUeFVeFWeFXeFXeFYeFZeF0eF1eF2eF3eF4eF5eF6eF7eF8eF9eG.eG#eGaeGbeGceGdeGeeGfeGgeGheGieGjeGkeGleGmeGneGoeGpeGqeGreGseGteGueGveGweGxeGyeGzeGAeGBeGCeGDeGEeGFeGGeGHeGIesTesSexqexsexrexqesSd7.d2jeGJeGKeGLexsexseoee#WeGMeeFdKGeGNdGGeGOesQeGPeGPeB7eB7exyeGQeGReC.eGSeC#eGTeGUeCdes5eGVeGWeGXeCfeGYeGZeG0eG1eG2eG3eG4eG5eG6eG7eG8eG9eH.eH#eHaeHbeHceHdeHeeHfeHgam.am.am.am.am.am.am.am.am.am.am.am.eHhejHam.am.am.am.am.am.am.am.am.am.am.am.am.eHieHjeHkeHleCteHmeHneHo#fCeHpeHqeHreHseHteHueHveHweHxeHyeHzeHAeHBeHCeHDeHEeHFeHGeHHeHIeHJeHKeHLeHLeHMeHNeHOeHPeHQeHReHSeHTeHUeHVeHWeHXeHYeHZeH0eH1eH2eH3eH4eH5eH6eoWeDeeH7eH7eDfeH8eaMeH9duGeI.eI#eIaeIbeIceIdeIeeIfeIgeIheIieIjeIkeIleImeIneIoeIoeIpeIqeIreyReIseIteIueIveIweIxeIyeIzeIAeIBeIBeDJeICeIDeIEeIFeIGeIHeIIeIJeIKeILeIMcC4cyOeINeIOeIPeIQeIReISeITeICeIUeIVeIWeD6dmpeIXdhIdq5", +"eIYezrezmezneIZeD8euPeI0euPezmezmezmezsezrezrezsezreI0eI1eI2euSeI3euReI4ezpeuPeI5eI6eI7eI8eI9eJ.eJ#eJaeJbeJceJdeJeeJfeJgeJheJieJjeJkeJleJmeJneJoeJpeJqeJrdH6eJseJteJueEreJveJweJxeJyeJzeJAeJBeJCeJDeJEeJFeJGeJHeJIeJJeJKeJLeJMeJNeJOeJPeJQeJReJSeJTeJUeJVeJWeJXevXeJYeJZeF.eJ0d5seJ1eJ2eJ1eJ1d98eJ3eJ3eAyemDehHemGemIemJemKehOehOehOeJ4eJ5eroeFjedbeJ6eJ7eJ8eJ9eK.eK#e#4eKaeKbeKceKdeKeeKfeAGerueAHerveKgew#ew#ewae.td5Le.sewbewbeAMeKheKieFxeKjdNueKkcxaeFyeKleKmeKneKoeKpeKqeKreKseKteKueKveKweKxeKyeKzeKAeKBeKCeKDeKEeKFeKGeKHeKIeKJeKKeKLeKMeKNeKOeKPeKQeKReKSeKTeKUd6jeKVeKWeKXeKYeKZeK0eK1eK2eK3eK4eK5eK6eK7eK8eK9eL.eL#eLaeLbeLceLdeLeeLfeLgeLheLieLjeLkeLleLmeLneLoexleLpeLqeGNeeFdS8d69eodesSexrexrexrexrexqeodeLreLseLteLueLvexseoeeLwd2feLxdKMdTbeeGeLyeLzeLAeLBeLCeLAeLzeLzeLDeGReGTeGSeLEeLFeLGeCbexCeGWeLHeLHeGVeLIeLJeLKeLLexGeLMeCmeLNeLOeLPeLQeLReLSeLTeLUeLVeLW#Zu#ZseHeeLXeLYam.am.am.am.am.am.am.am.am.eLZeL0eL1eL2eL3eL4cKram.am.am.am.am.am.am.am.a1FeL5eL6eL7eL7eL8eHmeL9eCyeM.eM#eMaaoNeMbeMceMdeMeeMfeMgeMheMieMjeMkeMleMmeMneMoeMpeMqeMreMseMteMueMveCVeHMeMweMxeMyeMzeMAeMBeMCeMDeMEeMFeMGeMHeMIeH0eMJeMKeMLeMMdTVeH4eMNeoWeMOeMPeMQeMReMSeMTeMUeMVeMWdHHeMXeMYdLOeMZeM0eM1eM2ef4eM3eM4eM5eM6akGeIleM7#DGeM8eM9eN.ef9eN#eNaeNbcC0eNceNdeIyeNeeNfeNgeNheNieNieICepDeNj#6GeNkeNleNmeNncuteNoeNpeNqeNreNseNteNueNveNweNxeNyeNzeNAeNBeNCdUHeNDeNE", +"eNFeNGeIYeNHeNIezmeqjeqheqjezmezrezseNJezneIZeNIeIZeNJezneD9elteuVeuUeNKeNLeNMeNNeNOeNPeNQeNReNSeNTeNUeNVeNWeNXeNYeNZeN0eN1eN2eN3eN4eN5eN6eN7eN8eN9eO.eO#eOaeObeOceOdeOeeOfeOgeOheOieOjeOkeOleOmeOneOoeOpeOqeOreOseOteOteOueOveOweOxeOyeOzeOAeOBeOCeODeOEeOFevXeJYemzeOGeJ0eOHeOIeOJeOKeOLeOMeONeONeOOeFgeOPemFemJemKemKehOedceJ4eJ5eroeroeOQeOReOSeOTeOUeOVeOWd7ceOXeOYesYeOZeO0eO1eO2ev9eO3eO3eO4emUeAJeO5emVehYd5Ld5Le.tewbeFweFweALcOfeO6eO7eO8eO9eP.eP#edteASePaePbePcePdePeePfePgePhePiePjePkePlePmePnePoePpePqePrePsePtePuePvePwdWOePxePyePzePAePBePCePDePEePFePGePHePIePJePKePLePMePNePOePPePQePRePSePTePUePVePWePXePYePZeP0eP1eP2eP3eP4eP5eP6eP7eP8eP9eQ.eQ#eQaeQbeQceoleB1d7.eoeeoeeoeesSesSesSesSexrexrexrexqeQdeQeeQfeQgeQheQieQjeQkd2heQleQmd2hd69esUeQneQoeB7eQpeOSeLAeLzeQqeLDeQreQseGUeGTeQseLGeQteQueQveeQeCfeQweQxeQyeQzeQAeQBeQCeQDeoueQEeQFeQGeQHeQIeQJeQKeQLeQM#SceQNeQOeQPeQQeQRcgNam.ap5am.am.ap5eQSeQTeQUeQVeQWeQXeQYeQZeQ0eQ1eQ2eQ3eQ4exLeQ5b0feQ6eQ7eQ8eQ9eR.eR#eCyeRaeRbeRceRdaoNeReeRfeRgeRheRieRjeRkdLqeRleRmeRneRoeRpeRqeRreRseRteRueRveRweRxeRyeCSeRzeRAeRBeRCeRDeREeRFeRGeRHeRIeRJeRKeRLeRMeRNeROeRPeRQeRReRSepleRTeRUeyweRVeRWex8dy4eRXdqfeRYeRZeR0eR1c4beR2eR3eR4eR5eR6eR7eR8eR9eS.eS#eS#eSaeSbeSceSdeSeeSf#SieSgeSh#VWeSieSjeSh#DIeSkeSleSmeSneSoeSpeSpeSqeSreSseSteSueSvcyOeSweSxeDUeSyezbeSzeDWeSAeNveSBeSCeSDeSEeSFeSGeNCdQheSHdq5", +"eSIeqhezseIYeSJeSJeNIeSKeNIeSLeSLeSMeSLeSNeSOeSPeSPeSQeuXeuXeNJeSReSSelxeSTeSUeSVeSWeSXeSYeSZeS0eS1eS2eS3eS4eS5eS6eS7eS8eS9eT.eT#eTaeTbeTceTdeTeeTfeTgeTheTieTjeTkeTleTmeTneToeTpeTqeTreTseTteTueTveTweTxcaCeTyeTzeTAeTBeTCeTDeTEeTFeTGeTHeTIeTJeTKeTLevVeTMeAweF#emzeOGeOHeTNeTOeOKd98eOMeONeTPerlernemGemIemJemKehOehOeTQeJ4erodR#eTReTSeTTes1eTUeTVeTWeTXeTYeTZeT0e.ceT1eT2eT3eT4ev9eO3eT5eO3ew.ew.ew.eFueT6emVewad5Leh0ewbeAMeALcOfcOfcOfeT7eT8eT9eP.d5ReU.eU#eUaeUbeUceUdeUeeUfeUgeUheUieUjeUkeUleUmeUneUoeUpeUqeUreUseUteUueUveUweUxeUyeUzeUAeUBeUCeUDeUEeUFeUGeUHeUIeUJeUKeULeUMeUNeUOeUPeUQeUReUSesseUTeUUeUVeUWeUXeUYeUZeU0eU1eU2eU3eU4eU5eU6eU7eU8eU9eV.eV#eVaeVbeGIexqesSeVcexreVdexsexseodeoeeoeexsexrexsexseVeeVfeVgeQheQheQheVheVieVjdS8d2geB1d7.esTeVkejseVldOSdTddTdeVmeVneVoeVpeVqeVreVseVteOTeQteQueLHeGWeCgeGYeRreVueVveQzeVweVxeQBexJam.eVydi1eVzeVAeVBeVC#HpeVDeVEeVFeVGeVHeVFeQNeVIeVJeVKeVLeVMeVNeVOeVPeVQeVReVSeVTeVUeVVeVWeVXeVYeVZeV0eV1eV2eV2eV3eV4eV5eV6eV7eHmeV8eRb#fGeV9eW.eReeW#eWaeWbeWceWdeWeeWfeWgeWheWieWjeWkeRpeRqeWleWmeRseRteWneWoeWpeWqeWreWseWteWteWueWveWweWxeWyeWzeWAeWBeWCeWDeWEeWFeWGeWHeWIeRPeWJeWKetTeWLeWMeWNeWOeWPeH4eWQeWReWSeWTeWUdHHeWVeWWdb0dzjeWXeWYeWZeW0eW1eW2eW3eW4ebEeW5eW6eW7eW8eW9eX.eX#eXaeXbeSh#ZxeXceXdeXeeXfeXgeXheXieqaeXjeXkeXleXmeXneuzeXoeXpcHgeNoeSxeNoeNoeXqeXreXseXteXueXveXweXxeXyeSFeXzcildQfeXA", +"eXBeXCeXDeXEeXBeNIeXFeXGeXHeXIeXJeXKeXLeXMeXNeXOeXPeXQeSLeSQeSQeSTeXReI4eXSeXTeXUeXVeXWeXXeXYeXZeX0eTceX1eX2eX3eX4eX5eX4eX6eX7eX8eX9eY.eY#.3oeYaeYbeYceYdeYeeYfeYgeYheYieYjeYkeYleYmeYneYoeYpeYqeYreYseYteYueYveYweYxeYyeYzeYAeYBeYCeYDeYEeYFeYGeYHeYIeTMeTMeJYemzeOGeYJeOHeOKeOLeOHeOMeONeOOerleYKemFemJemKehOehOeJ4eJ4eJ4eYLeYMeYNeYOeYPeYQeTUeTWeQseYReQreLFeYSeYTeYUeYVeYWeYXev9eO3eT5eruew.emUew.eAHeYYeYZew#ewae.tewbe.reALcOfcOfeO6eFxeT7eY0eY1eY2d5ReY2eY3eY4eY5eY6eY7eY8eY9eZ.eZ#eZaeZbeZceZdeZeeZfeZgeZheZieZjeZkeZleZmeZneZoeZpeZqeZreUHeZseZteUAeZueZveZweZxeZyeZzeZAeZBeZCeZDeZEeZFeZGeZHeZIeZJeZKeZLeZMeZNeZOeZPeZQeZReZSeZTeZUeZVeZWeZXeZYeZZeZ0eZ1eZ2eZ3d2iesSexrexrexrexrexrexqexsesSesSesSexsexrexseZ4eZ4eZ5exseZ4eZ4eZ4eZ6eoeeVieZ7d2fd2jeZ8eZ8eGKeZ9eLBdTdejue0.eoqexye0#e0ae0beYReVteGUeQse0ce0deCge0eeoueoueote0fe0ge0he0ie0je0kam.am.am.am.e0le0me0ne0oe0p#Sce0qe0re0se0te0ue0ve0we0x#VO#wPeVQe0ydXO.XRe0z#nFeoGe0Ae0Be0Ce0De0Ee0Fe0Ge0He0Ie0Je0Ke0LeV5e0Me0Ne0Oe0PexTe0QeCB#f0e0Re0Se0Te0Ue0Ve0We0Xe0Ye0Ze00e01e02e03e04e05e06eRqe07e08eRqe09e1.e1#e1ae1be1ce1de1ee1fe1ge1he1ie1je1ke1le1me1ne1oe1pe1qeWGeWHe1repke1se1teWOe1te1ue1ve1we1xe1ye1zduMe1Ae1Be1CeR0e1De1Ee1Fe1Gd8#e1He1Ie1Je1Ke1Le1Me1Ne1Oe1Pe1QebEegpepEe1Re1Se1Te1Ue1Ve1We1Xe1Ye1Ze10e11ezge12eq.e13e14eqabk9e15e16e17e18e19eSweDUe2.eNoe2#cC6e2ae2be2ce2de2ee2fe2ge2hdvle2idY6eSH", +"eSMe2jeNIeD9eXBe2keuXe2le2me2ne2oe2pe2qe2reXGe2seSUeSUe2teSQeNIe2ueSKeXKeXKe2ve2we2xe2ye2ze2Ae2Be2Ce2De2Ee2Fe2Ge2He2Ie2Je2Ke2Le2Me2Ne2Oe2Pe2Qe2Re2Se2Te2Ue2Ve2We2Xe2Ye2Ze20e21e22e23e24e25e26e27e28e29e3.e3#e3ae3be3ce3de3ee3fe3ge3he3ie3jeJXe3kevXeTMevXeJYeJYdM4e3ld98eOKd98e3meJ1e3ne3oe3peOHe3qec7emKehOeJ4eJ4eJ4emLemLehMd2je3re3se3te3ueCde3ve3we3xe3ye3zeoge3Ae3Be3CeYXev9eO3eT5eO3eruerueAHew.emUe3DeAKew#ewad5LewbewbeFvcOfeFveALdt.eT7e3EeAPeARe3Fdxoe3Gem2e3He3Ie3Je3Ke3Le3Me3Ne3Oe3Pe3Qe3Re3Se3Te3Ue3Ve3We3Xe3Ye3Ze30e31e32e33e34e35e36e37e38e39e4.e4#e4ae4be4ce4de4ee4fe4ge4he4ie4je4ke4le4me4ne4oe4pe4qe4re4se4te4ue4ve4we4xe4ye4ze4Ae4Be4Ce4De4Ee4Fe4Ge4He4Iexrexrexrexrexqexqexqe4Jexqexqexsexsexsexsexse4KexsexsexseZ4eZ4eZ4e4Leoee4Md7.eGKeGKe4Ne4OeYNe4PdfTe4Qe4RdfTeLCe4SeVme4TeC.eJ9eTZeTZeCeexDe0eeeQeeQeoueLIe4Ue4Ve4We4Xe4Yam.am.am.am.am.am.am.am.cgNe4Ze40#VO#Lbe41e42e43e44e45#2Ge46#Dy#kIe47e48.NTaRIetfe49e5.e0He5#e5ae5be5ce5de5ee5fe5ge5he5ie5je0Ne5ke5leRceMaeCB#f0e0Re5m#dqe5ne5oe5pe5qe5re5se5te5ue5veoxes9eWleRpe5we08e5xe5ye5ze5Ae5Be1#eVue5Ce5De5Ee5Fe5Ge5He5Ie5Je5Ke5Le5Me5Ne5Oe5Pe5Qe5Re5Se5Te5Ue5Ve5We5Xe5Ye5Ze1ve1ve50e51e1ue52dbPe53e54e55e56e57e58e59e6.e6#e6ae6be6ce6de6ee6fe6ge6he6ie1Le6je6ke6leSqe6me1Re6ne6oep7e6pe6qe6re6se6teuIelle6ue6ve6weXjeuIe6xe6ye6ze6AeSwe6Bezbe6CeNoeNoe6Dezbe6Ee6Fe6Ge6He6IeNye6Je6KdM.eNCdvl", +"e6Le6Me6Me6Ne6MeNIeSQe6Oe6Me6PeXFe6Qe6Re6Se6Te6Ue6Ue6Ve6We6Xe6LeSJe6Le6XeXFe6Ye6Ze60e61e62e61e63e64e65e66e67e68e69e2Ce7.e7#e69e7ae7be7ce7de2Ae7ee7fe7ge7he7ie7je7ke7le7me7ne7oe7pe7qe7re7se7se7te7ue7ve7we7xe7ye7ze7Ae7Ae7Be7Ce7De7Ee7Fe7GemxevXeE9eJYe7He7HeF#d5seOHe7Ie7Je7Ke7Le7Me7Ne7Oe7Pe7Qe7RehKeTQeTQeJ4edcedce7Se7TeYLe7Ue7Ve7WdS5d0xe7Xe7Ye7Ze70e71e72e3BeYWeYXe73e74eO3eT5eT5e75e76e76e77eO4emUe3Dew#emVewaehYedmewbewbeALeALeALdt.cOfcOfeALe78eFye79e8.e8#e8ae8be8ce8de8ee8fe8ge8he8he8ie8je8ke8le8me8ne8oe8pe8qe8re8se8te8ue8ve8we8xe8ye8ze8Ae8Be8Ce8De8Ee8Fe8Ge8He8Ie8Je8Ke8Le8Me8Ne8Oe8Pe8Qe8Re8Se8Te8Ue8Ve8We8Xe8Ye4we8Ze80e81e82e83e84e85e86e87e88e89e9.exsexrexrexrexqexqe4Je4Je4JexqexqexseZ4eZ4exseGLeVeeZ4eZ4eZ4eZ4eZ4eZ4eZ4eVeeGLeZ8eQde4Ne4Ne9#eLreokeTTe4Re7We9aexyesQesQe9be4Rejue9ce9ceCeeoseeQe9deeSeCfeQxe9ee9fe9gekse9ham.am.am.am.am.am.am.am.am.cKre9ie9j#Lbe9ke9le9me9ne9oe9pe9qe9re9se9t#h1e9ue9v#nFe9we9xe9ye9ze9Ae9Be9Ce9De9Ee9F.ADe9Ge0Ne9He9Ie9J#fGe9Ke9Le9Me9Ne9Oe9Pe9Qe9Re9Se9Tekre9Ue9Ve9Weowe5ves8exEeovdkMe02eoxeoxes8es9e9Xe9Ye9Ze90e91e92e93e94e95e96e97e98e99f..f.#f.af.bf.cf.df.ef.ff.gf.hf.ie1sf.jf.ke5Zf.le1vf.me50e50f.nf.of.pf.qf.rf.sf.tf.uf.vf.wf.xf.ye6bf.zf.Af.Bf.Cf.Df.Ef.Fe6id3Vf.Gf.Heqa.tSf.If.Jf.Kf.Leq#f.Mf.Nf.Of.Pf.QeuIegoe6uegoe6wf.Rf.Sf.Tf.Uf.Vf.Wcq.f.XeNoe18eNoeNof.Yf.Zf.0f.1f.2#V6f.3f.4d3Qf.5f.6f.7", +"f.8f.8f.9f.8f#.e2ue2ue2ue2uf##f#af#af#bf#bf#cf#ce2qf#ce6Xe6Xe6Le6Lf#de6Wf#ef#ef#ff#gf#hf#if#jf#ke2If#le7.f#mf#nf#oeNNf#pf#nf#qf#rf#sf#tf#uf#vf#wf#xf#yf#zf#Af#Bf#Bf#Cf#Df#Ef#Fe7yf#Gf#Hf#If#Jf#Kf#Lf#Mf#Nf#Of#Pf#Qf#Qf#Rf#Sf#Tf#Uf#Vf#WerjeJYeJYe7Hf#XevYeF#f#YeJ1f#Zf#0f#1f#2f#3f#4f#5f#6f#7ehJehOeTQeTQeTQedce7Sf#8e7Se7TehMf#9c50c1gdVXfa.fa#faafabfacfade3Be3CeYXe73e74eT5eT5eT5e75e76eO3e77eO4ew.eFteAIeAJemVehYehYehYd5Lewbewbe.reAMeALeFveALfaeeKhe78faffagfahfaifajfakfalfamfanfaofapfaqfarfasfatfaufavfawfaxfayfazfaAfaBfaCfaDfaEfaFfaGfaHfaIfaJfaKfaLfaMfaNfaOfaPfaQfaRfaSfaTfaUfaVfaWfaXfaYfaZfa0fa1fa2fa3fa4fa5fa6fa7fa8fa9fb.fb#fbafbbfbcfbdfbefbffbgfbheQdexsexqesSesSeodeodeodesSexrexqexseVeeVfeZ4eGLeVeeVeeVeeVfeZ4eVeeGLeVeeLveQde4Nfbie4Ne4Ne4Ne4Ne4NeYNejreB7eQpfbjdOOfbkfblfbmfbnesXfbofbpfbqeoseQueeQeChfbrfbsfbtfbufbvfbwfbxc7Kam.am.am.am.am.am.am.am.am.fbyfbzfbAfbBfbCfbDfbEfbFfbGfbHfbIeCBfbJ.TOfbKfbLfbM#dWfbNfbOfbPfbQfbRfbSfbTfbUfbVfbWfbXfbYfbZfb0fb1eMaasJfb2e9Nfb3fb4eWcfb5fb6fb7fb8fb9fc.fc#eRre5ueeUfcaexEeowfcbfccfcdfcdfcefcees7fcfe9Yfcgfchfcifcjfcke95fclfcmfcnfcofcpfcqfcrfcsfctfcufcvfcwfcxeWJe5WfcyfczfcAe50e50e1ve50e50e50epifcBfcCfcDfcEfcFfcGfcHfcIfcJfcKfcLfcMfcNfcOfcPfcQf.Ce6he1Ne6efcRfcSfcTfcUfcVfcVfcWfcXfcYfcZfc0fc1fc2fc3fc4fc5eXleXlezhezhe6weW6fc6fc7fc8fc9fd.fd#cHgfdae2.fdbfdcfddfddb6kfdefdfefXfdgeIVfdheuLeuL", +"fdifdjfdjfdkeztezseIYeIYfdleIYfdmeNGeNHeNIfdnfdofdpeSKe2ue2ue2ueNHe6Me2teXGfdqfdrfdsfdsfdtfduf#gfdvfdwfdxfdyfdyfdzfdAfdBfdCfdDfdEf#qfdFfdGfdHfdIfdJfdKfdLfdMfdNfdNfdOfdPfdQe7CfdRfdSfdTfdUfdVfdWfdXf#QfdYfdZfd0fd1fd2fd3fd4fd5drWfd6fd7fd8fd9f#Xfe.emAeTMeFbfe#feafebfecfedfeefefbkRfegfehehJeTQeTQeTQedcedce7Sf#8f#8emLemLeAzdESfeifejeFofekdRadrYfelfemfenfeoeYXfepe76eT5eT5eT5e76eO3eO3e77eO4ew.eFteAIeAIeAJew#emWehYe.tehYe.sewbeANewbewbeFweFveFveALeO6feqferfesfetfeufevfewfexfeyfezfeAfeBfeCfeDfeEfeFfeGfeHfeIfeJfeKfeLfeMfeNfeOfePfeQfeRfeSfeTfeUfeVfeWdxefeXfeYfeZfe0fe1fe2fe3fe4fe5fe6fe7fe8fe9ff.ff#ffaffbffcffdffefffffgffhffiffjffkfflffmffnffoffpffqffrffseodesSesSfftffteodeodesSexqexqeVeexseZ4eVeeVeeVeeVfeVeeZ4eZ4eVeeQde4NeQde4NffuffuffvffveQie4NffweGJeoieomeolffxffyffzesRfbmffAesXdXHffBffCffDeCfffEffFffGffHffIffJffKffLffMffNam.am.am.am.am.am.am.am.am.dKXffOffPffQffR#60ffS#2HffTeMbffUffVffWffXffYffZff0ff1ff2ff3ff4ff5ff6ff7ff8ff9acqfg.fg#fbZfgafgb#kH.8m#f0fgcfgdfgefgffggfghfgifgjfgkfglfgmfgnfgofgpes8es7dy#eoweoxfccfcefgqfcdeoxes7fgre9Ye9Ze90fgsfgtfgufgvfgwfgxfgyfgzfcpfgAfgBfgCfgDfgEfgFfgGfgHfgIe1se5Wf.ke5ZfgJfgKfgLfgMfgMe1wfgNfgOfgPfgQfgRfgSfgTfgUfgVfgWfgXfgYfgZfg0fg1fg2fg3fg4fg5fg6fg7fg8#L.fg9fh.fh#fhafhbfhca.nfhdfhefhffhgfhhfhie9megoeqaezheXlegofhjfhkfhlfhmfhnfhocq.cC4cHgf.Yfhpfhqfddfhqfhrfhsfht#6Jfhufhvfhwelpelo", +"fdleNFeNFeNFfdlfhxfhxfhyfdlfhyfhzfdleIYfhzfhzezreD8eE#ezlezreNJeznfdneXLfhAfhBfhCfhDfdsfhEfhFfhGfhHfhIfhJfhKfhLfhMfhNfhOfhPfhQfhRfhSfhTfhUfhVfhWfhXfhYfhZfh0fh1fh2fh3fh4fh5fh1fh6fh7fh8fh9fi.fi#fiafi#fibficfidfiefiffigfihfiifijfikfilfimfinfe.eAwfiofipfiqfirfebdVWfisfitfiufivfiwfixe.gfiyfizeJ4edceJ5emLemLedcehNehMeJ4eJ5emLemLeJ5eJ5eroeFjeFpfiAeYVe3CeYXe73e76eT5eT5e75e76eO3e77eO4ew.eFteFteAIeAJeAJeAJaITemWemWeh2fiBehYcJVewbewbfiCeh0eANeFweAOeALfiDe.BfiEfiFfiGfiHfiIfiJfiKfiLfiMfiNfeBfiOfiPfiQe3LfiRfiSfiTfiUfiVfiWfiXfiYfiZfi0fi1fi2fi3fi4fi5fi6fi7fi8fi9fj.fj#fjafjbfjcfjdfjefjffjgfjhfjifjjfjkfjlfjmfjnfjofjpfjqfjrfjsfjtfjufjvfjwfjxfjyfjzfjAfjBfjCfjDfjEesTesTesTeZ8eode4Je4Je4JexqeGLeGLe4KeGLeVeeVgeVeeZ4eVeeLveLvffvffuffuffvffvfjFfjFfjFffve4NeZ8eZ9eoheB1eold2kd7bd7bfjGfjHffAdKOe4RfjIfjJfbqfjKfjLfjMfjNfjOfjPfjQfjRfjSfjTfjUam.am.am.am.am.am.am.am.am.bcqfjVfjWeXgfjXfjYfjZfj0fj1fj2fj3fj4fj5fj6fj7fj8fj9fk.fk#fkafkbfkc.3Ofkdfkefkffkgfkh#zXfgafkiexUfkjfkk#fYfklfkmfknfkofkpfkqfkrfksfksfktfkufkvfkwfkxfkyfkzfkAejCfcbfkBfkBfccfccfkBeovfcge9ZfkCfkDfkEfkFfkGfkHfkIfkJfkKfkLfkMfkNfkOfkPfkQfkRfkSep.fkTfgIe1ueWge5Te5ZfkUfkVfkWfkXfkYfkZfk0fk1fk2fk3fk4fk5fk6fk7fk8fk9fl.fl#flaflbflcfldfleflfflgflhfliflifljflkfllflmflnfloflpflqfhefhefhfflrflseXdflte0teq#eqafluflvf.QflwflxflyflzflAcq.flBflCflDfdcflEflFflGflHf.ZflIflJflKflLflMf.5elp", +"eqheD8eIZfdlfdleNFfdlfdlfdlfdlfhzfdlfdleIYfhyflNfhzezsezleD8flOflPflQflRflSflTflUfduflVflWfdsfhHflXfhIflYfhLflZfl0fl1fl2fl3fl4fl5fl6fl7fl8fl9fm.fm.fm#fmafmbfmcfmdfmefmdfhYfmffmgfmhfmifmjfmkfmlfmmfmnfmofmpfmqfmrfmsf#VdiWfmtfmufmvfmufmwfmxfmyfmzfmAfmBfmCfmDd0CfmEfmFfmGfmHfmIehJe.geJ4eJ4eJ4eJ4eJ5eJ5eJ4eAzdABdRadR.ehMehMemLeJ5ehMeAzeroeFpeT2fmJfmKeYXe73e76eO3eT5e76eO3eO4eO4ew.eFteFteAIeAIeAJeAJeAJfmLaITaITaITemWewac2ne.te.seANewbcJVe.teh0eFwewcfmMfmNfmOfmPfmQfmRfmSfmTfmUfeyfmVfmWfmXfmYfmYfeBfmZfm0fm1fm2fm3fm4fm5fm6fm7fm8fm9fn.fn#fnafnbfncfndfnefnffngfnhfnifnje4bfnkfnlfnmfnnfnofnpfnqfnrfnsfntfnufnvfnwfnxfnyfnzfnAfnBfnCfnDfnEfnFfjzfjzfjAfnGfjCffrfjDfnHexteZ8fnIe4Je4Jexqe4Je4JeVeeQdeVeeVeeVfeVgeVgeQieQhffveQiffvffvffvffvffue4Ne4Ne4Nffue4NfnJesUd2eesUejpejsfnKd7bfblfnLdKMesQeTTfnMfnNfnOfnPfnQfnRfnSfjOfnTfnUfnVfnWfnXfnYfnZam.am.am.am.am.am.am.am.fn0fn1fn2fn3fn4fn5fn6fn7fn8fn9fn9fo.fo#foafobfocfodfoefoffogfohfoieVQfojfokfolfomfonfoofopfoqfkjforfosfotfoufovfowfoxfoyfgkfozfoAfoBfoCfbqfoDes4foEfoFfoGfgnfoHeWme5ufoIeowfgreRre9ZfoJfoKfoLfoMfoNfoOfoPfkFfoQfoRfoSfoTfoUfoVfoWfoXfoYfoZfo0fo1fo2fo3fo4e1se5Tf.lfo5fo6fo7fkWfo8fkWfo9fp.fp#fpafpbfpcfpdfpefpffpgfphfpifpjfpka.EfplepPfpmfpnfpofppfpqfprfpsfptfpufpvfpwfpwfpxfpyfpzfpAfpBfpCe1W#K2fjYezgeXke13eXlf.QfpDfc6fpEfpFfpGfpHfpIcusfpJfhqflFflFfhrflHfpKf.ZfpLfpMfpNdmodhBfpO", +"fpPfpQfpReSIeSIfpSelteSIfpSfpTeD8eD8ezrfdlfdlfdlfhxfdlfdlfhzflOfpUfpVfpWfpXfpYfpZfdCfhEfdufdsfdCfp0fp1fp2fp3fp4fp5fp6fp7fp8fp9fq.fq#fqafqbfqcfl6fl6fm.fqdfqefqffqgfqefmefqhfqifqjfqkfqlfqmfqnfqofqpfqqfqrfqsfqtfqufqvfd7fqwfmufqxfqxfmwfqyfqzfqAfqBfqCfqDfqEehGfqFfqGfqHe7QfixfqIeTQeJ4eJ4emLemLedceJ4ehNehMd99d99d99dABdR.fqJeAzeJ5ehMeYLeFpfqKfqLfmKeYXev9eO3eO3eO3eO3erue77eO4emUfqMeAIeAIeAJeAJeAJfmLfmLfmLfmLfqNfqOew#emVewae.te.te.tedmd5Ld5LeANeALdNufqPfqQfqRfqSfqTfmRfqUfqVfqWfqXfaofqYfqZfeBfaqfqZfarfq0fq1fq2fq3fq4fq5fq6fq7fq8fq9fr.fr#frafrbfrcfrdfrefrffrgfrhfrifrjfrkfrlfrmfrnfrofrpfrqfrrfrsfrtfrufrvfrwfrxfryfrzfrAfrBfrCfrDfrEfrFfrGfrHfjAfrIfrJfrKfrLfrMffsfrNfbie4Ne4NeQdeQde4Je4JeGLeVeeVfeLveLveQhfrOfrOeQifrOeLuffve4Ne4Nffue4NfnIfnIeQde4Ne4NfnJfrPeGJesUe#XejqfrQd2kfrRfrSdOQesXfrTfrUfrVfrUfrWfrXfrYfrZfgmfr0fr1fr2fr3fnVfr4fr5dADfr6fr7am.am.am.fr8fr9fs.#wOfs#fsa.xDfn4aoRfsbfscfsdfsefsffsgfshfsifsjfskfslfsmfsnfso#Vlfspfsqfsrfssfstfsufsv#DAfsa#qufswfsxfsyfszfsAfsBfsCfsDfsEfsFfoAfsGfsHeosexCffDe3sfsIfsJfsKfsLfsMfgmfsNe9WfsOfsPfsQfsRfsSfsTfsUfozfsVfsWfsXfsYfsZfs0fs1fs2fs3fs4fs5fs6fs7fs8fs9ft.ft#e1xe5We5Te1ue1vftaftbftcftdfkWfteftfftgfthfpbftiftjftkftlftm#S#ftnftoftpagHftq#N4ftrftsdyLfttftu#OBftve6rftwftxftyfcZbxLftzftzezgftAftBftCfbBftDfhgftEe6weziftFftGftHftIftJflAftKflAfd#flGftLftLfhrfhrfhrftMfpKftNftOftPftQftRdmp", +"ftSftTftUftVftWftXeSIeSIfpSftYeSIftZft0eSIft1fpSfpTft2ft3ezrezrezrflOfpUft4ft5ft6ft7ft8ft8ft9fu.fu#fuafubfucfu.eXUfudfuefuffugfuhfuifujfukfulfumfunfuofupfuqfurft9fusfutfuufuvfuwfuxfuyfuzfuAfuBfuCfuDfuEfuFfuGfuHfuIfuJfmufuKfuLfuMfuNfuOfuPfuQfqBfuRfuRfuSfuTehHeYKfuUehKehKeJ4eJ4edcedcf#8f#8edcehNehMdABd99d99fuVd99fuWfuWehMehNeJ5eJ5eFpeKdeKeeO2ev9e76eO3eO3erueO4eO4ew.eFteFteAIeAJeAJeAJfmLfmLfmLfmLfqNfqNfqNfqOfqOew#emVe.te.tcBlemVewae.seALeO6fuXfuYfuZfu0fu1fu2fu3fu4fu5fu6fu7fu8fmZfu9farfeAfaofv.fv#fvafvbbTOcblcbjfvcfvdfvefvffvgcblcbEfvhfvifvjfvkfvlfvmfvnfvofvpfvqfvrfe1fvsfvtfvufvvfvwfvxfvyfvzfvAfvBfvCfvDfvEfvFfvGfvHfvIfvJfrFfjzffpfrIfvKfvLfvKfvMfbhfvNffuffue4NfnIfnIeQdeQdeQdfnIeQdeQdeQde4NffuffuffuffuffuffuffueQdeQdfbifbifnIe4Je4JeQde4NffvfvOeGJexoe#XeolejpfvPfvQfvResZeTTfrTfvSfvTfvUfvVfvWfvWfvXfvYfkEfvZfv0fv1fv2fv3fv4fv5fv6fv7fv8fv9fw.fw#fwafwb#qufwcfwd#KDfwefwffwgfwgfwhfwifwjfwkfwlfwmfwnfwofwofwpfwqfwrfwsfwtfojfwuey.fwvfwwfwxfwy.R6fwzfwAfwBfwCfwDfwEfwFfwGfwHfwIfwJfsJfwKfwLfwMexIfwNfwOfwPfwQfwRfwSfwTfwUfwVfwWfwXfwYfwZfw0fw0fw0fw0fw1fw2fw3fw4fw5fw6fw7fw8fw9fx.fx#fxafxbfxcfxdfxefxffxge1vf.jeWOfcyeMlfxhe5Yftbfo7fxifxjfxkfxlfxmfhofxnfxofxpfxqfxrfxsfxt#S#fxufxvfxwfxxfxyfxzfxAfxBellfxCftxfxDfxEfxFfxGfxGfxHfxFfxIfxJfxKftBfxLfxM#OyfxNfxOe6weXkeuIfpAfc1fxPfxQflzelcfxRcC4fxSftLfxTftLftLfhrflHflHfxUfxVfxWfxXfxYdcw", +"fxZfx0fx1ftUfx2fx3fx4fx5ezufx6ftWftYfx7fx8fx9eSIftZfy.fy.fy#egyeqifyafyafybfycfydezpeuQeuQfyeeXEeXEelBft3elBfyffygfyhfyifyjfykfylfymfynfyofypfupfuqfyqfyrfysfytfyufyvfywfyxfyyfyzfyAeuTfyBeE#fyCfyDfyEfyFfyGfyHfyIfuJfqxfuKfuLfmwfuMfyJfyKfuQfyLfyLfuSfyMfyNeFhfyOehLehKfqIeTQeJ4edcf#8e7Se7SemLemLeYLeAzdABdABfyPfyPehBd99d99ehMeYLeJ5fyQeKdfqLeKfeO2eAHeO3eO3erueO4eO4eFteFteAIeAIeAJeAJfmLfmLfmLfmLfqNfmLfmLfqNfqOfqOfyRfqOew#emWehYemVew#fySeALeKifyTfyUfyVfyWfyXfqTfyYfyZfu3fy0fy1csRfy2fy3fy4fy5fqUfu5fy6fy7fy8fy9fz.fvdbTOcFocfVbTSfz#fzacxdcXBcj4fzbfzcfzdfzefzffzgfzhfzifzjfzkfzlfzmfznfzofzpfzqfzrfzsfztfzufzvfzwfzxfzyfzzfzAfzBfzCfvJfrFfjyfzDfzEfvLfzFfrJfzGfzHfzIfbifbifnIfnIfnIfnIfnIfbifzJfzIfzIfbifnIfnIfbie4Nffue4NeQdeQdeGLeGLfnIe4Je4Je4JfnIfnIe4NfzKfvOeGJeGJesUfzLfzLeolfzMeomeLAfzNfvSfvTfzOfzPfzQfzQfzRfzSfzTfzUfsPfzVfzVfr2fzWfzXftafzYfzZfz0fz1fz2fz3fz4fz5e0R#qufwd.VV.1Ifz6fz7fz8fz9fA.fA#fAa.QafAbe9Oe5mfAcfAdfAefAefAffAgfAhawqfAid7XfAjfAkfAlfAmfAnfkUfAofApfwFfAqfkqfgjfArfAsfAtfAufAvfAwfAxfwNfwMfAyfAzfwQfAAfABfACfADfwUfAE.P6fAFfw0fw0fw0fw0fw0fAGfsTfsSfAHfAIfAJfAKfALfw9fAMfANfAOfAPfAQfARfASfATfxgeMmfAUfv4f.ke1te4XeWOeMlfAVfAWepjfAXfAYflDfAZfA0fA1fA2fA3fA4#DC#DCfA5fA6fA7fA8fA9fB.fxEfB#fBafB#fBbfBcfBdev#fBefBffBgfxGfBhfBifBjf.NfxKfBkfBlfBmfBnfBofBpfBqeXme6tfxAfBrfBsfBtfBufBvfBwfBxfByftLftLfxTftLfhrfBzf.ZflEfBAfBBfBCfBD", +"fBEfBFfBGfBHfBHfBIfBIfBJfBKfBKfBLfBMfBNfBNfBOfBPfBQfBReqleuQfBSfyeeqielBeXBft2eSReqheXBeXBfpSft0ftZeuOeuOfBTfBUfBVfBWfBXfBYfBZfB0fB1eE.ezkfB2fB3fyufB4fB5fB6fB7fB8fB9fC.fC#fCafCbfCcfCdfCefCffCgfChfCifCjfCkfmufClfuKfqxfuMfmwfuMfyJfCmfCnfyLfuSfCofCofCpfyOemFehLfCqehOeJ4eJ4edcemLe7Te7Se7TeroeroerodR#eYLdrZdrZdIPdABdABeAzemLemLfyQeKdfCreKfeKfeFtew.ew.eAHeO4ew.eFteAIeAIeAJeAJeAJfmLfmLfmLfqNfqNfqNfmLfmLaITfqOfqOfqOfyRfqOaITerxeAKew#ewaeAMe78fCsfCtfCufCvfCwfCxfCyfCzfCAcJJcsRfCBfCCdoIfCDfCDdoIfCEfCFfCFfCGfCHfCIfCIbTOfCJbYNfz#fzacbmfCKfCLfCMfCNfCOfCPfCQfCRfCSfCTfCUfCVfCWfCXfCYfCZfC0fC1fC2fC3fC4fC5fC6fC7fC8fC9fD.fD#fDafDbfDcfvJfDdfDefrIfrIfzFfzFfDffbhfDgfbifbifDhfDhfnIfDhfDhfbifbifzJfzJfzIfDhfnIfnIfnIe4Ne4NfnIe4JexqfDie4JeGLeGLe4Je4Je4JeQdffufzKfzKfvOfrPfDjfDkfDkfzLfzMeomeLzfDlfDmfDnfvXfDofDpfzRfDqfDrfDscOOeCodAFfDtfDufDvfDwfDxfDyfDzfDAfDBfDCfz4.R6fz5e0R#2I#2I.1IfDDfDEfDFfDGfDHfDIfDJfDKfDLfDM#6mfz5fDNfDOfDPfDQfDPfDRfDSfDQfDTfDUfDVfDWfDXfDYfDZfDXfD0fD1fD2e4WfD3fD4fD5fAAfD6fD7fD8fD9fE.fE#fbqfEafEbfEcfD6fwRfEdfEefAD.R1fEffEgfw0fEhfEhfw0fEifw0fEgfEgfEjfEjfEkfElfEmfEnfEofEpfEqfErfEsfEtfEufEvft#fEwfExfv4fcAfEyfEzfEAe1tfEBfECfEDe9TdbSfEEfEFfEGfEHfEIeaqfEJfEKfA4fELb9pfEMfENezSfEOfEOfEPfEQfBdfBdfBdfERev#fBefESfETfBffEUfEUfEVfxEfEWfEXfEYf.MfEZfE0fE1fE2fE3fE4fE5fhefE6fE7fpGfxRcyMfE8fE9fxTftLftLftLftLflHflHflEfF.fF#fFafFb", +"fFcfFcfFdfFefFffFgfFhfFgfFifFjfFkfFlftVeE#fFmeD8eD8eD8ezrezrfybfFnfFofFpfFqfFrfFsfpVfFtfFufpUfFvfFveXBfpTfpTfpTfpSfFwfFxfyyfFyfFzfFAfFBfFCfFDfFDfFEfFFfFGfFHfFIfFJfFKfFLfFMfFNfFOfFPfFQfFRfFSfFTfFUfFVfFWfFXfFYfuKfuLfmwfuMfuMfyJfFZfF0fyLfCofF1fF2fCpfF3fF4fF5emKfizeJ4eJ5erofF6fF6fF6fF6fF6fF6fF7fF6drYdrYdrZdrZdrZdABdABdR#eroeFpeKdfqLeKfeO2eO2ew.ew.emUeAIemUeAIeAIeAJeAJeAJfmLfmLfmLfmLfqNfqNaITaITcFCcFCcFCc66fqOaITaITc66aITeFuew#emWewaeFvfF8fF9fG.fG#fGafGbfCzfGcfGdfGefGfbTOfGgdJ3ckocsQcsQdoIfGhfGifCCfGjfy9fGkfy9fvcdJ4fveb8EbTRfCKfGlfGmfGnfGofGpfGqdOhfGrfGsfGtfGufGvfGwfGxfGyfGzfGAfGBfGCfC4fGDfGEfGFfGFfGGfGHfGIfGJfGKfGLfvJfGMfDbfDefGNfGNfGNfGOfbhfGPfGQfGRfGSfGSfGSfGSfGTfGUfDhfbifbifDhfGRfGQfDhfnIfnIfbifnIe4JfGUfGVfGVfGVexrexseGLeGLexqe4NfGWfGWfzKfGXfGYfGZeYNfDkeVkfvPeomfvUfG0fG1fG2fEcfG3fG4fG5fzSfG6c7Kam.am.cKrfG7fG8fG9fH.fH#fApfHafHbfDBfHcfHdfwzfz5fHee9NeRefDDfHfeMbfHgfHhfHifHjfHkfHlfHlfHmfHnfHofAcfDOfHpfDQfHqfHrfHsfHtfHufHvfHwfHwfHxfHyfHzfHzfHAfHBfHCfHDfsXfHEfHFfHGfAufAufAufHHfHIe3tfHJfHKfHLfHMfHNfHOfHPfHQfHR#..fHSfsUfEifwRfEhfEifEifw0fEjfEgfEjfEjfHTfHUfHVfHWfHXfw8fEqfoXfHYfHZfH0fH1fH2fH3fH4fH5fH6fAUfH7fH8fH9fI.fI#e1wfIadbSfIbcHgeD.fIcfIdfIefIffIgcc.fIhfIifIjfIkfIlfImfEQfBdfInfInfIofIpfIqfIrfIsfItfESfIufIvfIwfIwfIxfBhfBhfIyfEYe6rbtHfIzfIAfIBfICfIDfIEfIFfIGfIHfIIfIJfIKfILfxTfxTftLftLfxTfhrfBzflEfIMfINfIOfIP", +"fIQfIRfISfITfIUfIVfIWfIXfIYfIZfI0fI1ftVeE#fI2fdlfI3fdlfdlfI3eqhfybe2kflPflPfI4fI5fI6fI7fI8fI9fJ.fJ#fJafJbfJcfJdfJefJffJgfJhfJifJjfJkfJlfJmfJnfJofJpfJqfJrfJsfJtfJufJvfJwfJxfJyfJzfJAfJBfJCfJDfJEfJFfFWfFXfFXfuKfJGfmwfmwfuNfyJfJHfJIfJIfJJfCpfyOfF4fJKfJLfJLfJMedceJ5fJNeroeFjfF6fF7fF6fF6fJOfiAfJPfJQfJRfJSfJQfJQdrYdR#e7TeFjeFpfqLeT3eKfeO2eFtew.ew.emUerveAJeAJfmLeAJeAJeKgfmLfmLfmLfmLfJTfmLfqOfJUcFCcFCcFCcFCcFCaITaITaITfqOc66eFuemWewaeAOe78fJVfJWfJXfJYfJZfyYfJ0fJ1fJ2fJ3fJ4fJ5fJ6fJ7fJ8cgcckodoIfJ9fCEfJ7fJ7fCEfCEfCGfK.fK#fKabYKfKbcj6fKcfKdfKefKffKgfKhfKifKjfKkfKlfKmfKnfKofKpfKqfKrfKsfKtfKufKvfKwfKxfKyfKzfKAfKBfKCfKDfKEfKFfKGfKDfDefKHfKIfKJfKJfKKfKLfGQfGRfGSfKMfKNfKOfKPfGTfGSfKPfGTfGTfKOfKPfGTfGTfGSfGSfGUfGUfGUfDifGVfGVfKNfKMfKQfKReZ4eQdffuffufzKfGWfKSfKTfGYfKUfDkeolffxfKVfKWfKXfDofHMfKYfAAfKZfK0fK1fzQfK2am.am.am.am.fK3fK4fK5fK6fApfApfApfK7fK8fK9.R6.R6fL.fL#fLafLbfDFfLafLcfLdfLefLffLgfLhfLgfLifLjfLkfLlfLmfDOakNfLnfLofLpfLqfLrfD0fLsfHzfLtfEffozfLufLvfLwfLxfLyfLzfw2fAAfG3fHGfLAfLBfEcfLCfLDfLEfLFfLGfLHfHNfHOfLIfHSfLJfLKfHSfEjfsUfwRfLLfEifw0fw0fEjfEjfHPfEjfEefLMfLNfLOfLPfLQfLRfLSfLTfLUfLVfLWfLXfH3fLYfLZfLZepje1ufH7e5XftafECfL0fL1efCcLBflDfL2fL3fL4fL5fL6fL7fL8fL9fM.fM#fMafMbfMcfIrfIrfIpfIpfMdfMefMffMgfMhfIrfMifMjftxfMkfxIfxIfIwfBhfMlfIyf.OfMmfMnfMofxwfMpfMqfMrfMsfMtfMuflGfMvfIKfMwfMxfMxfxTftLftLftLflHfpKflEfMyfMzfMA", +"fhzfMBfx6fMCfMDfMEfMFfMGfMHfMIfMJfMKfMLfMMebRfMNegBelvezrfdleSJfMOe2jeSJeSJeSJfdlfMPfMQfMRfMSfMTfMUfMVfMWfMXfMYfMZfM0fM1fM2fM2fM3fM4fM5fM6fM7fM8fM9fM9fN.fN#fNafNbfNcfNdfNefNffNgfNhfNifNjfNkfyIfilfNlfFXfuKfJGfuMfuMfNmfNnfJHfNofNpfNqfNrfJKfF3fNsfF3fF3fNtfqIfyQfJNfqKfJOfF7fiAfiAfmJfNufmJfNvfNvfNvfNvfNvfJRfJPfJPfJOfJOeT2fmJfmKeO2eO2eAGew.fNweFtervfNxfmLeKgfNyfNyeKgfmLfmLfJTfJTfmLaITaITaITcFCcFCaITaITfJUcFCcFCfNzew#aITfqOeT6fySewbeO6fNAfNBfNCfNDfNEfNFfNGfNHfNIfNJfNKfNLfNMfNNfJ9fNOdoIfNPfNPfNQbTPfJ8fJ8fJ9fNRfNScSqfNTbYLcFcfNUfNVfNWfNXfNYfNZfN0fKifN1fN2fN3fN4fN5fN6fN7fN8dxffN9fO.fO#fOafObfOcfOdfOefOffOgfOhfzCfOifKEfOjfOkfOlfGNfOmfOnfOofOofOpfGRfGRfGSfKNfOqfOqfOrfOsfOtfKPfOsfOrfOrfOsfKOfOufOufOvfOvfKNfKNfOufGVfOufOwfKQfOxfOyexreLve4NfzJfzJfzKfOzfOAfKSfKTfOBfOCeVofODfOEfOFfLHfKXfOGfOGfAAfK0fK0fOHfOIfOJam.am.am.am.fOKfOLfDzfDzfOMfONfOOfOPfOQfORfOSfOTfLifOUfOVfOWfLafLcfOXfOYfOYfOZfLgfO0fO1fO2fO3.QafLkfAbfO4fO5fO6fO5fO7fO8fO9fP.fLtfLufw2fsJfP#fP#fsJfPafPafw2fPafHFfP#fPbfPcfLBfPdfPefPffPgfDofPhfKXfPdfPifwRfEhfEjfHSfLKfEhfw0fLLfEhfPjfw0fw0fsUfEjfEhfEhfEgfHQfPkfPlfPmfPnfPofPpfPqfPrfPsfPtfPufPvfPwfPxfPyfPyfxjfgLfH6ftafPzfgLfPAfPBfPCc38fPDfPEfPFfPGfPHfPIfPJb9qfPKfPLfPMfPNfPOfIqfIpfIrfPPfMffPQfPRfPSfPTfPUfPVfPWfMkfPXfPYfPZfxIfIwfBhfPWfEXfP0fP1fP2fP3fP4fP5fP6fP7fP8fP9fQ.fQ#fMxfQafQbfQbfMwfMxfxTfhrfxTftLfxSfhqftNfQcfQd", +"fQefQefdlfhyfhxfhzeE#eE#eE#ftVftVfQfeluegBfQgfMNegEfQhfQielBflOfMPeIZeSJfMOfMOe2jfdlfQjfQkfQlfMUfQmfQnfQofQpfQqfMYfQrfQrfM0fQsfQtfQufQvfQwfQxfQyfQzfQAfQBfQCfQDfQEfQFfQGfQHfQIfQJfQKfQLfQMfmwfmwfQNfQNfQOfuMfuMfQPfNnfJHfFZfQQfNqfNrfNrfJKfF3fQRfJLfJLfNtfQSemLeFjfqKfiAfJPfNufNueYVeYWeYWfQTfQUfQUfQUfQVfQWfQWfQWfNueYVeYVeYVeYWeAGeAGeAGeAHeO4emUeAIeAJeAJfmLfNyfNyerwerweKgeAJfmLfmLfmLfqOaITaITcFCcFCcFCaITcFCcFCaITew#eFuaITew#emVd5LcOffQXfQYfQZfQ0fQ1fQ2fQ3fQ4fQ5fQ6fQ7fQ8fNRfQ9fR.fR#fRafRbfy4fRcfCDfRddj6bTPdJ#cfSfRefRffRgfRhfRifNVfRjfRkfRlfRmfRnfRofRpfRqfRrfKkfRsfRtfRufRvfRwfRxfRyfRzfRAfRBfRCfRDfREfRFfRGfRHfRIfzCfRJfOjfKFfKFfzHfRKfRKfRLfOpfOpfRMfGRfGTfKOfOvfRNfOrfOrfOrfOrfOrfRNfRNfOrfOrfOvfKNfKNfKMfOvfOqfOqfOqfOxfOxfOxfROfRPfOxexreQdeQdfzJfRQfRQfRRfKSfOAfOAfOBfOBfRSfG6fPgfLHfAufAufOGfOGfwQfK0fRTfAtfRUeFsam.am.am.am.fRVfRWfRXfONfRYfRZfR0fR1fR2fR3fR4fAbfR5fR6fR7fR8fLdfOYfR9fR9fOZfS.fO0fO0fO0fO0fLffLefS#fSafSbfScfSdfSefSffSgfgjfEffw2fsJfK0fP#fAAfP#fPbfPbfoBfPbfPafsJfAAfLBfHMfPgfPffShfSifPffPgfPgfSjfPdfSkfSlfsUfHSfLJfAHfw1fAGfw1fw1fPjfsUfPjfsUfsUfsUfLIfEgfSmfSnfSofSpfSqfSrfSsfStfSufSvfSwfSxfSyfSzftbfSAfSBfxjfSCfSDftcfSCfSEfkZfSFfSGcUtfPDcHifBwfSHfSIfPIfPJfSJb9rb4ybZJevdfSKfSLfPUfSMfSNfSOfSPfSQfSRfSSfSTfMkfSUfA9fSVfSWfSXfSYfSZfBefBifIvfS0fIze9nfS1fpxfS2fS3fS4fS5fS6fS7fMxfMwfS8fQbfS8fS8fMxfE9ftLftLftLfS9fT.flEfxVfT#", +"e2jfdlfdlfdlfdleIZfI2fI2ft3ft3fI2ezrfhzeIZeD8ezrezrft2eqhfybfTafTafTaeXBft2flOflOezrft3fFvfTbfMQfTcfTdfTefTffTgfThfTifTjfTkfTlfTmfTnfTofTpfTqfTrfTsfTtfTufTvfTwfTxfTyfTzfTAfTBfTCfTDfTEfTFfTGfTHfQNfTIfTJfQPfQPfTKfTLfQQfNqfTMfTNfTNfF3fNsfJLfNtfNtfNtfQSe7SfJOfiAfiAfNufQWfQUfQUfQTeT4fTOfTOfTOeT4eT4eT4e3CeYWe3CeYWfTPfTQe73eYXev9ev9erueO4ew.eFterveAJeKgfmLfmLerwerwerwerwfTReKgeAJfqOfqOfqOfqOaITcFCcFCemWemWcFCcFCew#fqOeFuemVeh2cOffuXfTSfTTfTUfTVfTWfTXfQ5fTYfTZfK.fNLfT0fNRfT1fT2fT2fT3fT4fT5fT6fqWfqWfy4fRdfT7fT8cStcSsfT9fU.fU#fUafUbfUcfUdfUefUffUgfUhfUifUjfUkfUlfUmfUnfUofUpfUqfUrfUsfUtfUufUvfUwfUxfUyfUzfUAfRIfUBfKFfUCfDgfUDfUEfUEfOnfUEfOpfUEfUDfGTfKOfOrfOrfOsfOrfOrfOrfRNfRNfRNfRNfRNfOrfOrfOvfKNfOwfOvfOvfOqfOqfUFfUGfUGfUHfUHfOxexreGLeLve4NffufzKfOzfUIfUJfUKfUJfULfUMfPefD7fAufAufAufOGfOGfwQfUNfUOfUPfUQfURfUSfUTfUUfUVfUWfUXfOLfUYfUZfU0fU1foxfU2fR3fU3fOTfU4fU5fU6fU7fU8fU9fU8fR9fV.fS.fV#fVafVbfVcfV.fVdfVefVffVgfVhfVifVifVjfVkfozfoAfVlfVmfPcfOGfG3fKZfPcfOGfG3fG3fG3fHMfKXfDpfDpfVnfVofVpfVqfVrfPefPefPffPffPefVsfVtfw0fAHfw4fVufVvfVvfVwfPjfHNfHNfsUfsUfEjfHPfEjfEgfVxfVyfVzfVAfVBfVCfVDfVEfVFfVGfVHfVIfVJfVKfVLfSBfxjfVMfxifxifD0fVNfAWfVOeaPfVPfVQfVRfVSfVTfVUfVVfPIfVWfVXfVYfVZfV0fV1fV2fV3fV4fV5fV6fV7fV8f.wfV9fW.fW#fW.fW#fWafWafWbfPVfBefWcfEUfBgfBhfWdfWefWffxzfWgfWhfWifWjfWkfByfMwfS8fS8fWlfWlfWmfS8fMxftLfhrftLflGfBxfhqf.ZfWn", +"fWofMBfWpfhzfWpeD8elvelvelvft1eSIeqieSIeqiftZeqiftZfyefyaeqifBUfWqfWrfWsfWtfBUfBSfy.fBVfWufWvfWwfWxfWyfWxfWzfWAfWBfWCfWDfWEfWFfWGfWHfWIfWJfWKfWLfWMfWNfWOfWPfWQfWRfWSfWTfWUfWVfWWdQ1fWXfWYfWZfW0fW1fTGfQPfW2fW3fTLfQQfNqfNrfTNfTNfJLfQRfJLfNtfNtehKehNe7TfJOfiAfmJfQWeYWeT4eT4fTOfW4fW4fW4fW5fW6fW7fW7fepfepe73eYXe73fepe74e74e74e74eO3eO3eO4ew.eFteAIfNxfqNfJTfJTerwerwerwerwfW8erwfNyeAKeAKfqOaITaITaITemWemWemWcFCcFCaITew#emVc2nfW9fX.fX#fXafXbfXcfXdfXefXffXgfXhfNLfXifT0fXjfT1fXjfXkfKafXlfXmdxpfXnfXofXpfevfy4fy2fXqfXrfXsfXtfXufXvfXwfXxfXyfXzfXAfXBfXCfXDfXEfXFfXGfXHfXIfXJfXKfXLfRzfRzfXMfXNfXOfXPfXQfXRfXSfbefXTfKDfDcfUCfUCfUEfXUfXUfXVfRMfRMfUDfRLfXWfKPfOsfOsfOtfOtfKPfKOfKOfOvfRNfRNfRNfRNfOrfOrfOrfKOfKQfOqfXXfXYfXYfXZfUFfUGfUGfUGfRPfKQexrexsfnIffufzKfUKfX0fUMfUJfUMfPffX1fVsfD7fPifSkfLBfEcfPcfK0fX2fX3fX4fX5fX6fRZfX7fX8fX9fUXfY.fY#fY#fYafYafUYfYbfYcfYdfYefYefYffYgfR9fYhfYifYjfVdfVcfYkfYlfVafOZfYmfYnfYofYpfYqe9ffYrfHSfYsfEefYtfYrfPafPafVmfPcfHMfHMfDofLAfEcfKXfYufKWfKWfYvfOEfDpfDpfYwfYwfYxfYxfYyfX1fYzfX1fULfULfYAfYBfVwfYCfVufVvfoBfVufYDfYEfPifLLfLLfEhfHSfABfEhfYFfYGfYHdX8fYIfYJfYKfYLfYMfYNfYOfYPfYQfYRfkUfDWfPxfxjfVMfSCfxjfHvfPAfgJfYSfYTfYUfYVfYWfYXfYYfSHfYZfY0fY1fY2fY3fY4fY5fY6fY7fY8fY9fZ.fZ#fZafZbfZcfZdfZeftqfZffZffZcfZgfZhfZifERfIofZjfxHfMkfZkfZlfZmfZnfS1fZofZpfZqezbfE9fZrfZsfZtfZufZvfQbfS8fMxfxTftLftLfxTflGflGfByflH", +"fITfZwfZxfZyezufZzft3ezrfZAezreqhelvfpSelteqifyaeSIfybfFveXBeD8fZAeIZfZBfZBfQjfZCfQjfhzezrezrflOfpTftZfZDfZEfZFfZGfZHeXDfZIfZJfZKfZLfZMfZNfZOfZPfZQfZRfZSfZTfZUfZVfZWfZXfZYfZZfZ0fZ1fZ2fZ3fZ4fZ5fZ6fWXfW3fZ7fZ8fZ9fNqfTNfTNfTNfJLfJMfNtfNtf0.fJMedcerofF7fiAfmJeYVfTQfTQfW5f0#f0#fOKf0af0bf0cf0cf0cf0cf0df0efW7fW7e74e74f0ff0ef0gf0ge75eO3erueO4ew.erveAJeKgfmLf0hfNyfNyf0ifNyf0jerwewaewaemVew#fqOaITeFuew#emWemWc66aITaITemWewacJVf0kf0lf0mf0nf0of0pf0qf0qf0rf0scfRckbfNLfXjf0tf0uf0vf0wf0xf0yf0zf0Aedrf0Bf0Cf0DcgacsRf0EfXrf0Ff0Gf0Hf0If0Jf0Kf0Lf0Mf0Nf0Of0Pf0Qf0Rf0Sf0Tf0Uf0Vf0Wf0Xf0Yf0ZfRzf00f01f02f03f04f05f06fUzf07e89fKDfOkf08fXUfXUfUDfXVfXVfUDfXUfUEfXVf09f1.f1#f1#fXVfXVfGTfGSf1af1bf1bfOrfOrfOsfOsfOsfKNfKMfKMfXXf1cf1df1df1df1efUFfUFfOyfOxfOwfGVfDifnIfzKfUJfX1fPffX1fX1fX1fX1fPefPdfLBfwQfPcfPbfOIfX3f1ff1gf1hf1if1jfR0f1kf1lfX9f1lfY#f1mf1nf1of1pf1qfUYf1rf1sf1tf1uf1vf1wf1xf1yfLgfV.f1zf1Af1Bf1Cf1Df1Ef1Ff1Gf1Hf1IfK0fPifLLfwRfLIfHPf1JfHFfK1f1Kf1LfKXfKXfKXfDqfDpfDpf1Mf1MfG6f1NfYyf1Of1PfrYfrYf1Of1QfYxfVrfVqfX1fULfUMfShfShfOFfVuf1Rf1SfVufVuf1SfYCfVwfLLfPjfLLfsUfEjfEdfHPfEgf1Tf1Uf1Vf1Wf1Xf1Yf1Zf10f11f12f13f14f15fkUfSBfSBfxjfVMfxjfPyfb9fgJf16fYSf17d29f.pf18f19f18f2.f2#f2af2bf2cf2df2ef2ff2gf2hf2if2jf.2f2kf2lf2lfA8f2mf2nf2of2pf2qf2rf2sbxMf2tf2uf2vfxDftxf2wf2xf2yf2zf2Af2Bf2Af2Cf2DeXofILfMwfZsfZtfZtfWlfZvfZsf2EfE9fxTfxTfxTf2Ff2FfE9fxT", +"fZxfMDf2Gf2Hf2If2Jf2KftVfI2fI2ezrfhzfhzfdlfdlfdleSJeSJf2LeSJeSJeSJf2LfZJf2Mf2Nf2Of2Pf2Qf2Rf2Sf2Tf2Uf2Vf2Wf2Xf2Yf2Zf20f21f22f23f24f25f26f27f28f29f3.f3#f3af3bf3cf3df3ef3ff3gf3hf3if3jf3kf3lf3mf3kf3nf3ofTLfZ8f3pf3qfTNfTNfF3fJLfJMf0.f0.fQSfqIedcerofJOfiAfNueYWfTQfepf3rf0af0af0bf0cf3sf3sf3sf3sf3sf3sf3tf3tf3uf0gf0gf0gf3uf0ff3uf3vf3veO3eO3e77ew.emUeAJeKgfJTfJTfmLfNyf3wemWemWemWemWfySfySewaew#ew#ew#eAKaITaITfqOaITc66ewae.tf3xf3yf3zf3AfJYf3Bf3Cf3DfXgf3Ef3Ff3Gf3Hf3If3Jf3Kf3Lf3Mf3Nf3Of3Pf3Qf3Rf3Sf3Tf3Uf3Vf3WcbEfXjf3Xf3Yf3Zf30f31f32f33f34f35f36f37f38f39f4.f4#f4af4bf4cf4df4ef4ff4gf4hf4if4jf4kf4lf4mf4nf4of4pfRIfOkf4qf4rf4sf4tfUDfXVfGQfGRfUDf1#f4uf4vf4wf4xf4yf4zfOnfUEfGRfGTf4Af4Bf1afOsf4Cf1afOsfOtfKOfKMfKNfXYf1dfOxf1df1df4DfUGfOyfOxfKQfOwfGVfDifDhf4EfULfPffUMfX1fPefPef4Ff4GfPefLBfLAfEcfPcfUOf4HfX4f1gf1hf1if4IfONfOLfX9f1lf1pf1mf1mf4Jf4Kf4Jf4Jf4Lf4Mf4Nf4Nf4Of4Pf4Qf4Rf4Sf4Tf4Uf4Vf4Wf4Xf4Yf4Zf40f41fOIfwQfK0fG3fAufHNfLLfLLfSlfHGfoBf42f43f44fLHfLHfOEf1Mf1Of1Of45f1OfRSeLsfOCf1Of1OfOCfYxf46f47f48eLsf1Qf1Qf48fVqfOBfVofYvf49fYCfVwf5.fYCf1Sf5#fHNfHNfPjfsUfsUfEjfHPfEdfEjfHQf5af5bf5cf5df5ef5ff5gf5hf5if5jf5kf5lf5mfxjf5nf5ofVMfD0fPyfb9fb8f16fYSe5Vf5pc8Tekvf18f5qf5rf5sdTRd7Sf5tf5uf5vf5wf5xf5yf5zf5Af5Bf5CfSTf5Df5Ef5Ff5GfIkf5Hf5If5Jf5KfSXfxDf5LfZif5MfBjfxIf2xf5Nfpxf2Af5Of5Pf2zf5Qf5RfQ#fS8f5SfQaf5Sf5Sf5SfZsf5TfMxfILfILf2FfMxf5UfS8fMw", +"fFgfFgfBIf2Jf5Vf5Vfx7fx7fx7ftYftYelvfpTfpTft2ft2f5Wf5Xf5XfpUf5Xf5Yf5Zf50f51fI9f52fI8fMSf53fMTf54f55fMXf56f57f58f59f6.f6#f6af6bf6cf6df6ef6ff6gf6hfMQfI6f6if6jf6kf6lf6mf6nf6of6pf6qf6rf6sf6tf6uf6vf6wf6xf6yfZ9f6zf6Af6zfJLfJLf0.f0.f0.eYLeroeroeFjfJPfNufQWfQVfepfW7f0df0df0cf3tf3tf6Bf3tf6Cf6Df6Df6Df6Df6Cf6Cf6Bf3tf3tf0ff3uf3tf6Ef6Ef3veT5eT5eO3eO4emUerveKgfmLfJTfmLemWewaemWemWemWemWemWemWewaewaemVew#ew#fqOfqOaITc66emWcFBf6Ff6Gf6Hf6If6Jf6Kf3Cf6Lf6Mf6Nf6Of6Pf6Qf6Rf6Sf6Tf6Uf6Vf6Wf6Xf6YfiDf6Zf60f61f62f3Tf63f3WcxcfK.f64f65f66f67f68f69f7.f7#f7af7bf7cf7df7ef7ff7gf7hf7if7jf7kf7lf7mf7nf7of7pf7qf7rf7sf7tf7uf7vf4pf7wf7xf7yf7zf4sfUEfGTfGRfzIf7AfGQf7Bf7Cf7Df7Ef5mf7Ff7Gf7Hf7IfUEfUDfGTfGTfKPfOrf1af1afOsfOsfOvfOvfOvfOqfKMfOqfKMfOxfXZfOyfOxfKMfOwfGVfGSfGRfGRfKKf7JfULfX1fX1fShfPef7KfYzfPefShfSjfYufKXfG4fAvfX2f7Lf7Mf7Nf4IfDAfRZfX9f1pf7Of1nf4Kf7Pf7Qf4Kf7Rf7SfRXfAlf7Tf7Uf7Vf7Wf7Xf7Yf7YfsDf7Zf70f1If71fK0fwQfRTfDrfLAfLHfVsfD7fHNfHNfHNfPifHMf72fEcfDpfDpfPgf1Nf45fOCf73eLsf1Qf1Qf47eLsf47f47eLsf47fKUfGZfGZf47f47fKUfKUfKUf74f74f75f76f77f78fVwf79f1Sf1SfYBfHNfYBfPjfsUfsUfEjfHPfEdfEgf8.f8#f8af8bf8cf8df8ef8ff8gf8hf8if8jf8kf8lfPxfSBf5nf8mfSCf8nfPyfgLfL0fDUfYSf8of8pfYVf18f18f8qf8rcLCf8sf8tf8uf8vf8weDPf5Af5Ff8xfV9f8yf8zf8Af8BfIqf8CfIofMifESfBefSYfPVf8Df5Mf8Ef8Ff8Ff2xfpyf8Gf8HfAhfZnf8HeQLf8If8Jf8KfZvfZsf5Sf8Lf8Lf8Mf5SfQbfZrfxTfILfIKf2EfQafQbfQb", +"f8Nf8Of8Pf8Qf8Rf8Sf8TfI1f8Uf8UeSIelBfpSfybfycfFvfycf8Vf8Vf8Vf8Wf8Xf8Yf8Zf80f8Yf8Yf8Zf81f82f83f55f84f84f85f86f87f87f88f89f9.f9#f9#f9af9bf9cf9df9ef9ff9gf9hf9if9jf9kf9lf3if9mf9nf9of9pf9qf9rf9sf9tfNqfNqf9uf9ufTNf6zfF5fqIeYLeYLeYLdrYfF7fJOfF7fJPfNufNufQVfTQe74f0df0cf3tf3tf6Df6Bf6Cf9vf9vf9vf9vf9vf9vf9wf9xf6Df6Df9yf6Bf6Bf6Cf6Cf6Ef9zf9zeO3erufNweAHemUeAJfqOaITemWerxewaemWemWemWemWemWemWemWewaewaewaew#eFuaITcFCc2nf9Af9Bf9Cf9Df9Ef9Ff9Gf9Hf9If3Df3DfXef6Of9Jf6Qf9Kf9LeJ6f9Mf9Nf9Of9Pf9Qf9Rf9Sf9Tf9Uf9Vf9Wf9Xf9Yf9ZfNLf90f91f92f93f94f95f96f97f98f99g..g.#g.ag.bg.cg.dg.eg.fg.gg.hg.ig.jg.kg.lg.mg.ng.og.og.pg.qfbeg.rfXUg.sg.te9#fXWfGTfDhfGRfXWfOpg.ug.vg.wg.xg.yg.zg.Ag.Bf7Hg.Cg.DfUDfUDf4Af1af1afOsfOrg.Eg.EfOrfOrfRNfRNfRNfOvg.Fg.FfKMf1dfOqf1af09fGRfKLg.Gg.Hg.Ig.JfYAfD7fX1fPffShg.KfRRfRRfrLfVofVnfOEfDqg.LfX2fOHg.Mg.Ng.OfR0fX9f1pf1nf7Qg.Pg.Qg.Rg.Sg.Tg.Ug.Vg.Wg.XfcAe1xfcAfExfwEe9gfVjg.Yg.ZfsJfPbfwQfwQfG4fLHfPefD7fD7fD7fPdfPifD7f5#fG3fG2fKXfLHfG6f1NfRSeLsf47f48f48fGYeGJfGZfvOfvOfGYg.0fGZf47fGYfGYg.1g.1fGZfGZf1QfKUf74fjCf75g.2f78f49g.2g.3g.4fD7fD7fYBfPjfsUfsUfHSfEjfLIfEjg.5g.6g.7g.8g.9f8dg#.g##g#ag#bg#cg#dg#eg#fg#gfSBf5nf5ofSCfSCfkYg#hfPxg#ig#je9Tg#kdTQf18f5qg#lcHkg#mg#ncHig#og#pg#qg#rg#sf5Dg#tg#uf8Bg#vg#wg#xg#yg#zg#Ag#Bg#Cg#DfIsfSZfBhg#Eg#Ffpxg#Gfxzg#Hfhdfheg#Ig#Jg#KfAhg#Lg#Mg#Ng#Og#Pg#Pg#Qftff8Mf5SfQbfMwfE9fIKf5Tg#Rg#Sg#Tg#P", +"g#Ug#Vg#Wg#Xg#Yg#Zg#Zg#0g#1eI1ezpfBSg#2g#2g#3g#4g#5g#6g#7g#8fZMf80f8Zg#9f8Yf8Yf8Zga.ga#gaagabgacgadgadf86gaegafgaggahgaigajgajgakgalgamgangaogapgaqgargasgatgaugavgawgaxf6pgaygazgaAgaBgaCgaDfF0fJJfTNgaEgaEf6AgaFeYLdrYfJOfJOfiAfiAfJPfJPfJPfiAfQWgaGfTPfepf0ef0cf3tf3tgaHgaIgaJgaKgaKgaKgaJgaJgaJgaLgaMgaHgaHf9vf6Df6Df6Cf6Cf9wf9xf6Ef3veT5eO3eO4eAHe3DeAJfqOc66emWemWfySfySemWemWemWemWemWemWc2nc2nfySewaemVerxcSMgaNgaOgaPgaQgaRgaSgaTgaUgaVgaWgaXgaYgaZga0ga1ga2ga3ga4ga5ga6ga7f9Sga8ga9gb.gb#gbaf9Uf9Vgbbf63gbcf9ZfQ8gbdgbef0HgbfgbggbhgbigbjgbkgblgbmgbngbogbpgbqgbrgbsgbtgbugbvgbwgbxgbygbzgbAgbBf7sgbCgbDgbEgbFfXWf4seGIfjEf4tgbGfDifDhfXWfUEgbHgbIgbJgbKgbLgbMgbNgbOgbPg.BgbQgbRgbSg.DgbTgbUf1afOrfRNgbVgbVgbWgbXgbYf09f09gbZf1agb0f4Bf1agbUf09f7Bgb1gb2gb3gb4gb5gb6gb7gb8gb9fSifRQfGTfGTfzJffrfrLfvMfjCf1Mgc.fK0fYrfEkgc#gcagcbgccgcdgcef1ng.Rg.QgcfgcggchgcigcjdLvfk1gckgclekrgcmfwGgcngcofLwfozfP#fG3fSlfPifPdfLHfLHfHNfHNfHNfPifPifX1fVofDpfKXfVnf1NfRSf73eLsf47fGYfvOgcpeQje#We#WeQjgcqgcreLrgcsgctfGYfGYfGYfGYg.1fKUf46f74f74f74f75gcuf76f5.gcvg.3fVtfPdfYBfPjfsUfPjfEjfHSfEjfHPfHPgcwfAFgcxeoOgcygczgcAgcBgcCgcDgcEgcFgcGgcHgcIefAgcJf5nfSCfSCfo9gcKfkVgcLgcKgcMgcNgcOgcPf8scHkgcQcLzgcRgcSgcTgcUgcVgcVgcWg#tgcXg#xg#vgcYgcZgc0gc1gc2g#BfMifZjfMkbxLgc3fxzfpxgc4fsqfpxfpyfxzfZlgc5gc6gc7gc8gc9eQLgd.gd#gdagdbg#Pf8Mf8Lf5Sf5SgdcfMxfIKf5Tgddgdef8Lgdfgdg", +"fMDgdhgdigdjgdkgdlgdmfBRfWKfWtgdngdogdpgdqgdrgdsgdtgdufI8gdvgdwgdwgdxgdxf80gdyga.f82f54gdzgdzgdAgdBf86gdCgdDgaggahgahgdEgdFf9#gdGgdHgdIgaogdJgdKgdLgdMgdNgdOgdPgdQgdRgdSgdTgdUgdVgdWgdXfyMgdYgdZgd0f0.gd1gd1gd2fF7fJPfJPgd3gd3gd3fNufNufNufNugd4gaGfTPfW7f0ef0ff3tf6Dgd5gd6gd7gd6gaLgaLgaLgd8gd7gd7gd7gd6gd6gd8gd9gaKf9vf6Cge.f9wge.f6Cf6Ef9zeT5eO3ge#e3Dew#fqOc66aITemWewaewaemWemWemWemWemWc2nc2newafySehYcBlcFBgeagaOgebgecgedgeegefgeggehgeigejgekgaYgelcfUgemgemgengeof0zgepgeqgergesgetgeufaqgevgewgexgeygezgeAdFZgeBgeCgeDgeEfGngeFgeGgeHgeIgeJgeKgeLgeMgeNgeOgePgeQgeRgeSgeTgeUgeVgeWgeXgeYgeZge0ge1ge2ge3ge4ge5gbGge6ge6ge7ge8ge9fGSfGTf4AfKLgf.gf#gfagfbgfcgfdgfegffgfggfhgfigfjgbQf7Hf4zf7BgfkgflgfmgfneeMgfogfpgfqgfrgfsgftgfugfvgfwgfxgfygfzgfAgfBgfCgfDgfEgfFgfGgfHgfIg.HgfJfKLfKLfGRfGRfRQffrgfKgfLgfMfVqgfNgfOgfPgfQgfRgfSgfTgfUgfVgfWgfXgfYgfZgf0gf1gf2gf3gf4gf5efCgf6epjgf7gcmfVNgf8gf9fw5fLIfSlfHNfHNfD7fLHfLHfHNfLLfPifPdfShfShfVrfKXf1OfKUeLsfOCeLsf48fvOeQjeQjeQjgcqeVheVhgcqd7.e#WgcqgcqgcpgctgcpfvOeGJfGZgg.fKUfrPfrPf74fjCgcugcuf76fOEf76fSjfPffVsfYBfsUfsUfsUfEjfEjfEhfHSgg#ggafX7ggbggcggdggeggfggggghggiggjggkgglggmfSBfxjf5nf5ng#hfkYggnggoggpgcLggqggrggsggtgguggvggwggxggyggz.xEggAggBb9pggCggDggEg#vgcZggFggGggHggIggJggKfPWggLggMggNggNggMflxf8HggOggPfcXfhdg#Hf8GfBrggQggRachggSggTggUggVggWf5Sf8LggXfZsf5SggYfMwfIKf5Tf5Sf8LggZgdgggq", +"eE#gg0f2KftVeD8eXLe2qe2pgg1gg1eXBeXBeXBft4gg2gg3gg4gg5gg6gg7gg8gg9gh.gh#ghaghbghcghdfMZgdAgheghfghfghgghhgahghighigaigdEf9#ghjgamghkghlghmghnghoghpghqghrgdPghsghtgdTghughvghwghxgdYghyghzghAfF0ghBghCghDfJRfNvfNugd4gd4gaGgaGgd4gd4gd4gaGgaGgaGfTPfW7f0ef0ff6DghEgaIgd6gd7gd7gd7gd7ghFghFghFghFgd7gd7gd6gd8ghGghHghHgd9ghIf9xge.ge.f9xf9xf9zeT5eO3ge#eYYghJfqOaITc66erxehYewaemWemWemWemWc2nc2nemVewaehYcBlcFBf6FghKghLghMghNghOghPghQghRghSghTghUghVghWghXghYghZgh0gh1gh2gh3dNqcoxfiHgh4feAgh5gh6gh7gh8gh8gh9gi.gi#cfUb8ycj6giagibgicgidgiegifgiggihgiigijgikgilgimgingiogipdB6giqgirgisgitgiugivgiwgixgiygizge4giAgiBgiCgiDge7giCgiEgiFfDifGSfGRgiGgiHgiIgiJgiKgiLgiMgiNgiOgiPgiQgiRgiSgiTgiUgiVgiWgiXgiYgiZgi0gi1gi2gi3gi4gi5gi6gi7gi8gi9gj.gj#gjagjbgjcgjdgjegjfgjggjhgjigjjgjkgb4gjlgjmgjnfKJf7BfOpfrIfbsgjogjpgjqfLLgjrgjsgjtgjugjvgjwgjxgjygjzg.QgfYgjAgjBgjCgjDgjEgjFgjGgjHgjIgjJgjKgjLgjMfLYgjNggafEdfHOfLLfHNfHNfD7fD7fPifHNfPdfPdfUMfSifVqfVnfYxf48fKUf1QfGZgcsd7.eofe#WgcseQkeVid7.e#Wd7.d7.eVhgjOgcrgcrgcqgcsgjPeYNgjPfGZfGZg.0f74fKUfrJgjQgjRgcvgcugcufShfPffD7fLLfEjfPjfsUfEjfEhfHSfEggjSgjTgjUgjVgjWgjXgjYgjZgj0gj1gj2.7lgj3fjSfPyfPxfxjf5nfVMfSCgj4ftcfkVfkWggqgj5gj6gj7ftggj8gj9gk.gk#gkaggA#wSgkbbl#ggCgkcgkdgkegkfgkgggHgkhgkigkjgkkgklfxEgkmfSVfSVggMfxyfZnggOf8Gfc0fcYfc6fc6fxygc7gkngkof8IggTgkpgkqgkrgksg#Pf8MgktgkufWlfMwf5TfQafZvgkvgdggdggkw", +"ftXfZAfI2fI2gkxgkygkzgkzgkAe2rflOflPgkBgkCgkDgkEgkFgkGgkHgkIgkJgkKgkLgkMgkNgkOgkPgkPgkQgkRgg8gkSgkTgkUgkVgkWgaigaigdEgkXgkYgangkZgk0gk1gk2gk3gk4gk5gk6gk7f6ogk8gdTgk9gl.gl#fyLgdYghyghzglafuRghBghDfJRglbglcfQWfQVfQVfQVfTPfQVgaGgldgldgldfTPglefW7f0ef0ff3tglfglggd6gd7gd6gd6ghFghFgd7gd7ghFghFgd7gd7glhghGglighGghHghHghHgljghIf9wf9xf6EglkeT5eO3eYYeYYeYZeFuaITemWemWfySemWemWemWc2nemWc2nemWewaewacBlcFBf6FghKgllglmglngloglpglqglrglsgltgluglvglvglwglxglyglzglAglBglCglDglEglFglGglHglIgi.gezgh9glJglKglLglMf6OglNglOglPcNUglQglRglSglTglUglVglWglXglYglZgl0gl1giogl2gl3gl4gl5gl6gl7a05gl8gl9gm.gm#gmagmbge4gbFgiBgmcgmcgmdgmdgiFfOwfGVfDifUEgfAgmegmfgmggmhgmigmjgmkgmlgmmgmngmogmpgmqeHGgmrgmsgmtgmugmvgmwgmxgmygmzgmAgmBgmCgmDgmEgmFgmGgmHgmIgmJgmKgmLgmMgmNgmOgmPgmQgjfgmRgmSgmTgmUgmVgmWg.CgmXe1ggmYgmZgm0gm1fEjgm2gjtgm3gm4gm5gjwgm6gm7gm8gm9gn.gjBgn#gnagnbgncgndgnegnfgnggnhgnignjgnkgnlgnmfD1ggagnnfHGfLLfHNfD7fD7fYzfPffShfShfULfKSfGYf48f48f48fGYeGJgcsgcse#We#WgnoeQke#Vgnpgnqd7.eofeLweLweVheVie#WgjPgnrfm8eQkeGJgcseGJg.0f74f74fjCgnsfvKfrKfOAgntfSigb9fPffHNfLLfsUfsUfsUfwRfYsfEgf8.gnugnvgnweMEgnxgnygnzgnAgnBgnCgnDgnEgnFgnGfPxfSAf5nfDZfHwfxignHftcgnIgnJgnKgnLgnMgj9gnNdbRgnOgnPgnQakLgnRfSIb9pgnSgnTgnUgnVgnWgnXgkhgcZg#vgkignYev.fBcfSWfSWfA9gnZf8Efc0gn0f8GggLgn1ggLgn2gn3fhlagqgn4gn5f8Ign6gn7gn8gn9g#Qf8LfZsfZsfZvfMwf5UfQaf8Lgo.ftegkwgo#", +"gdif8Tgg0goaft0euOgobgocgodgodgoegofgoggohgoigojgokgolf6jf6jgomgomgongoogopgoqgorgorgosgotgougovgowgaigoxgkWgoxgoygozgoAgoBghlgoCgoDgoEgoFgoGgoHgoIgk7goJgoKgdQgoLgoMgoNfCnfuQfqBgdYgdYgoOehBghDglbglcglcfQUfQVfTQglefTQfTQfTQglegleglegleglefW7f0ef0ff9ygd5glggd6gd7gd6gd6gd7ghFghFghFgd7gd7ghFgd6gd7goPglighGghGghHgoQglighHgljge.f6Cf6Ef9zeT5erugoRgoSeFueFuc66ewafySfySd#5goTgoUd#5emWc2nemVehYcBlgoVgoWgoXgoYgoZgo0go1go2go3go4go5go6go7go8go9gp.gp#gpagpbgpcgpdgpegpfgpggphgpigpjgpkgplgpmbJ1dWjglLf0CgpngpogppgpqgprgpsgptgpugpvgpwgpxgpygpzgpAgpBgpCgpDgpEgpFgpGgpHgpIgpJgpKgpLgpMgpNgpOgpPgpQgpRgpSgpTgpUgpVgpWgmcgpWgmdgpXgpYfOwfKNgpZgp0gp1gp2gp3gp4gp5gp6gp7gp8gp9gq.gq#gqagqbgqcgqdgqegqfgqggqhgqigqjgqkgqlgqmgqngqogqpgqqgqrgqsgqtgqrgqugqvgqwgqxgqygqzgqAgqBgmOgqCgqDgqEgjfgqFgqGgqHgqIgqJgqKgqLgqMfgygqNfLJgqOg.Ogm4gqPgjwgqQgqRf4Lgm7gqSgqTgqUgqVgqWgqXgqYgqZgq0gq1gq2gq3gq4gq5gq6gq7gq8gq9gr.fACf1JfSlfHNfHNfD7fPdfShfOAfOAfKSg.KfOzfOzfGYfvOfvOfvOgcsgcseGJgjPeQkeQkgcsgcseLrd7.eoeeLweoeeofe#WgjPgr#gjPgcpgcre#Wd2ifrPfrPfKTfKTf74fjCfKTf7JfOAgntfSigb9fSifVsfPifsUfsUfsUfEhfHPfHSg.5fACd7FejRgraggegrbgrcgrdgregrfgrggrhgrif5mfSBg#hf8mfVMfVMgrjgcMgrkgrlfo8grmgnLgrnftggktgrogrpgrqgdbgrrgrsfPJgrtgrugc0grvgrwgrxgrygrvggFgcZgcYgkifIpfBcgrzbUQgrAgrBgnZgrCflxf8HggLggLggLfc6fxyfhlgkogrDgrEgn6grFgrGgrHgrIgrJgrKgrLfZsf5SfQafMwf5Sftfgdgggqgo#grM", +"grNgrOgdmfBRgrPgrQgrRfFCgrSgrTfFJgrUgrVgrWgrXgrYgojgrZgr0gr1fMVgr2gr3gr4gr5gr6fMZgr7ghfgr8gr9gkVgs.gs#gs#goygsagoAgdIgsbgscgdJgsdgsegsfgsgdQQgshgsigsjgskgslfZ9gsmgsnfFZgsofF0gsofuPgspgsqgsrgsse3Bglcgstgsuglegsvgsvf3rfepfW7f3rfepfW7glefW7f0ef3sglfgswglggd6gd7gd7gd7ghFghFghFghFghFghFgd7gd7gd7glhgsxghGglhgoQgoQgoQghGghHgd9gljf6Cf6EglkgsygszgsAe3Dew#c66emWemWewad#5gsBgsCcSNd#5c2nemWgsDgsEgsEgsFgaOgsGgsHgsIgsJgsKgsLgsMgsNgsOgsPgsQgsRgsSgsTgsUgsVgsWgsXgsYgsZgs0gs1gs2gs3gs4gs5gs6gs7gs8d6mgs9gt.gt#gtagtbgtcgtdgtegtfgtggthgtigtjgtkgtlgtmgtngtogtpgtqgtrgtsgttgtugtvgtwgtxgtygtzgtAgpRgpQgtBgtCgtDgtEgtFgpWgtGgpYfv8gpXgtHfKMfDifRLgfjgtIgtJgtKgnygtLgtMgtNgtOgtPgtQgtRgtSgtTgtUgtVgtWgtXgtYgtZgt0gt1gt2gt3gt4gt5gt6gt7gt8gt9gu.gu#guagubgucgudguegufgugguhguigujgukgulgumgungjgguogupguqgurgusgutguuguvguwguxguyguzgm4guAguBguCgjygcegjyguDguEguFguGguHguIguJguKguLguMguNguOguPguQguRguSguTguUguVguWfHAf1JfD6fD6fHMfAufVqfKSfOzfKSguXfKSfGWguXfvOfvOgcpgcseGJgjPfKUgjPeGJeGJgcpgcse#WfftguYf9MguZgcsfGZgnogcqeQjeQje#We#WfGXfnJfGXfrLf48frLffrfKSfKSf7JgntfSifSigb9fD7fLLfsUfsUfEjfHPfABfEjggagu0gu1gu2gu3gu4gu5gu6gu7gu8gu9gv.gv#gvafSBfPxgvbf5ogvcgvdggngveggnfkWgrmfp.gvffxkgvggvhfp.fp.gvigvjgvkgvlfIhggCgvmgvngvogkdgrygrvgrvgcYg#ugvpfcLgvqgvrgvsgvtgvugvvfSWfSWfpzf8Ffc0ggLfc6fxygvwfZoawugvxgvygvzgvAgvBgvCgvDgvEgvFgktf5Sf5SfWlf5Sgdfftego#go#grM", +"gvGgvHgvIfWsgrQgrRgvJgvKgrSgvLgrUgvMgvNgvOgvPgvQgvRgvQfQmgvSgr7gadghff6.gvTgvTgvUgr8gvVgvWgvXgvYgvYgvZgv0gozgv1gsbgv2gv3gv4gv5gv6gv7gv8ghrgd0gv9gw.gw.gv9gw#gwagwaf6ygw#gw#fyKgwbgwcgsqgwdglbglcgwegwfgwggwhgwigwjgwjgwhfW7fW7f0dfW7f0dfW7f0ff0bf0ef3tgaIgd7gd7ghFghFgwkgwkgwkgwkghFgwkghFgd7gd7ghFgsxghGghGglhgsxgwlgwlghGghHgwmgljf9wgwneT5gwoeO4eYYe3DgwpgwqcJWew#gwrgwserCd#5emWc2nfiBewaehYcBlf9Af9BgoYgwtgwugwvgwwgwxgwygwzgwAgwBgwCgwDgwEgwFgwGgwHgwIgwJgwKgwLgwLgwMgwNgwOgwPgwQgwRgwSgwTgwUgwVgwWgwXgwYgwZgw0gw1gw2gw3gw4gw5gw6gw7gw8gw9gx.gx#gxagtogxbgxcgxdgxegxfgxggxhgxigxjgxkgxlgxmgxngpRgxogxpgnsgpVge7gmcgmdf1cgtHgtHfXXfOufDhgxqgxrgxsgxtgxugxvgxwgxxgxygxzgxAgxBgxCgxDgxEgxFgxGgxHgxIgxJgxKgxLgxMgxNgxOgxPgxQgxRgxSgxTgxUgxVgxWgxXgxYgxZgx0gx1gx2gx3gx4gx5gx6gx7gx8gx9gy.gy#gyagybgycgydgyegyfgyggyhgyifHBguygyjgykguAgylgymf7Of4LgyngyogypgyqgyrgysgytgyugyvgywgyxgyygyzgyAgyBgyCgyDgyEgyFgyGgyHe5Ggf8gyIfKYfOGgyJfYyfrLfKSg.Kg.KfOzfGWguXfvOgcpeGJgcseQkgjPfGZgcrgcpgcpgcpgcseViguZf9MguZe4LeLweGKeLweVheVheVheQjeVhffsfnJffsfKTfKTffrfKSfKSf4Ef7Jf7JfOAgb9fSifVsfHNfEjfEjfHSfHSfHPfEjfHQgcogyKgyLgyMgyNgyOgjZgyPgyQgyRgySgyTgyUfPxg#hgvcf5ngvcf5ofo9gyVfkXgyWgdggyXgvggvggyYfp.fp.gvhfp.gyZgy0gy1gy2gy3gy4gy5f8Bgy6gy6gy7gy8g#tf8zgy9gz.bxMfSVgvrgvrgz#gzaf2tf2tfIxfEVf8Fgn2f8Gg#JgzbakQgzcgzdgzefxrgzfgzggzhgzigdfgvFgzjfZsgkufZvf8Lgzkggpgo#grMgzl", +"eSIfyefBVgzmgzngzogzpgzqgoegzrgzsgvNgvOgvOgztgzugzvgzwgzxgzyghfgzzgzzgzAgzAgzBgzCgkUgzDgkVgkVgzEgzFgoxgs#gzGgzHgzIgzJgzKgzLgzMgzNgzOfuRgk6gv9gw.gzPgslgzQfFZfCngsogzQgzRfyKgzSgzTgzUgzVglcgzWgwfgzXgwjgwjgwjgwjgwjgwjgzYf3rf0cf0cfW7f0df0cgzZgz0gz1gz2gz3gz4gz5gz6gwkgwkgwkgwkghFghFgwkghFgd7ghFgoPgsxgsxglhgoPgsxgz7gwlghGgd9gz8gz9f9wf9xeT5gszgsAgsAeYYgwqgA.gA#aISgAagAbcJWemWemWc2newaehYewagAcgAdgAegAfgAggAhgAigAjgAkgAlgAmgAngAogApgAqgArgAsgAtgAugAvgAwgAxgAygAzgAAgABgACgADgAEgAFgAGgAHgAIgAJgAKgALgAMgANgAOgAPgAQgARgASgATgAUgAVgAWgAXgAYgAZgA0gA1gA2gA3gA4gA5gA6gA7gA8gA9gB.gB#gBagBbgBcgBdgBegBfgBggiCe4IfftgBhgBigtHfXYfOwf4AgfJgb4gmTgxsgqDgBjgBkgBlgBmgBngBogBpgBqgBrgBsgBtgBugBvgBwgBxgBygBzgBAgBBgBCgBDgBEgBFgBGgBHgBIgBJgBKgBLgBMgBNgBOgBPgBQgBRgBSgBTgBUgBVgBWgBXgBYgBZgB0gB1gB2gB3gB4gB5gB6gB7gB8gB9gC.gC#gCagqPguAgymgCbgCcf4JfHUgCdgCegCfgCggChgCigCjgCkgClgCmgCngCogCpgCqgCrgCsgCtgCugCvgCwgCxgCygCzgyIfKYfHMfVqfrLg.Kg.Kg.KfGWfGWguXguXgctgcteQkeGJeGJfGZgcpeQjgcpgcpgctd69guZgCAeZ6gCBexseLveQdeLweLweVheVheQiffvfzKfzKfOzf4Ef4EfKSf4Ef4Ef4Ef4Ef7JfSifSifVtfSlfEjfsUfEjfYsfLIfEjf8.gnugCCgCDgCEgCFgCGgCHgCIgCJgCKgCLgCMgCNfVNfxjgvbf8mfVMfHwgvdgnHgvefkWggqgCOgCPgvgfp.gyYgyYgvhfxkggZgCQgCRgCSgCTgCUgCVgy4gCWgCXgCYfSKgCWfEQgCZgC0gC1gC2gz#gvrgvvgC3grzgC4gC5fxFfxHg#Ef8GggSgC6fZo#6KgC7gC8gC9gzfgzggkrgD.gyZgrLgvFgrLgrLggZgdfgD#gnJgo#gzlgzl", +"fpTeSIgDagDbgDcgDdgDegDfgDggDhgrVgDigDjgg4gDkgDlgzugDmgDngDogDpgDqgzBgDrgDsgDsgkUf6bf6bf6bgvYgzFgDtgs.gsagDugDvgDwgDxgDygDzgDAgDBfqCgDCfCngskgDDfCmgw#fFZfCmgzRgDEgDEgDFgDGgDHgzUgwdgDIgwegzXgwjgDJgDKgDLgDMgDJgDJgDJgDNf0df0ef0ef0ef0egz0gDOgDPgDQgDRgDSgDTgDUgDVgDWffNgwkgwkghFgwkghFghFghFglhgoPgoQgsxgoPgoPgsxgwlgwlgoQgd9gljghIge.f9xf6EgDXgwrgDYgDZgD0gD1gD2gD3gD4e.uemWemWc2nemWewaewacBlcx.gD5gD6gD7gD8gD9gE.gE#gEagEbgEcgEdgEegEfgEggEhgEigEjgEkgElgEmgEngEogEpgEqgErgEsgEtgEugEvgEwgExgEygEzgEAgEBgECgEDgEEgEFgEGgEHgEIgEJgEKgELgEMgENgEOgEPgEQgERgESgETgEUgEVgEWgEXgEYgEZgE0aOagE1ff1gE2gE3gE4f4sge7gpYgpWeJ6gtHgtHfv8fXYgE5fOngb2gE6giSgxsgjhgE7gE8gE9gF.gF#gFagFbgFcgFdgBtgFegFfgFggFhgFigFjgFkgFlgFmgFngFogFpgFqgFrgFsgFtgFugFvgFwgFxgFygFzgFAgFBgFCgFDgFEgFFgFGgFHgFIgFJgFKgFLgFMgFNgFOgFPgFQgFRgFSgFTgFUgFVgFWgyjgykgFXgFYgFZf7OfHUgF0gF1gF2gF3gF4gF5gF6gF7gF8gF9gG.gG#gGagGbgGcgGdgGdgGegGfgGggGhgGigGjgGkgf8fw5fVofjFfjFeLug.Kg.KfOzfGWfjFeLueQgfvOgcrgcpgcrgcpgcpgcpgcpgcpeGJeVheLwe4IgBhgGlexseLveQdeLveQdeQieQieQiffvfzKfzKfGWfKSf4EfOzf4Ef7JfRRf7Jf7JfOAgb9fYAfHNfsUfsUfsUfHSfEdfHPg.5fYGgGmgGngGogGpgGqgGrgGsgGtgGugGvex1f7WgGwfxjgGxf8mfHwgGygGzgcKgyVgyWftegGAgGAgyXgGBfp.fp.fp.gvgfxkgGCgGDgGEgGFgGGgGHfIhgGIgGJgGKgCWgCWfEOfB#fWagGLgvrfZhgvrgvrbUQfIpfIofBcgGMfxFfBiggLgGNgkogzc#6KagygGOgkqgGPgGQgGRgGSgGTgktgGUgGVgvFgdfgdggdggo#grMgzlgGW", +"gGXfWKfZFgGYgGZgrSgoggohgG0gG1gG2gDjgg4gg4gG3gG4gG5gG6gG7gG8f86gzzfQtgDsgzCgkUf6bgzDf6bghigG9gs.gs.gH.gH#gHagDwgHbgHcgHdgHegHffqCghrfCngDDgHggw#fFZfFZfCmgzRgDEgHhgHigHjgHkgzUgHlgzWgHmgDMgDLfUVgHngHogHpgHqgHrgHsgDNgHtf0ff0ef0cgHugHvgHwgHxgHygHzgHAgHBgHCgHDgHEgHFffNgwkghFghFghFghFghFghFgsxghGgsxgoPgoPgsxgsxgz7ghGghHgwmgljgljgHGgHHgsCgHIgHJgHKgHLgHMgHNgHOgHPgHQehYemWc2nfiBewaehYgsEgAcgHRgHSgHTgHUgHVgHWgHXgHYgHZgH0gH1gH2gH3gH4gH5gH6gH7gH8gH9gI.gI#gIagIbgIcgIdgIegIfgIggIhgIigIjgIkgIlgImgIngIogIpgIqgIrgIsgItgIugIvgIwgIxgIygIzgIAgIBgICgIDgIEgIFgIGgIHgIIgIJgIKgILgIMgINgIOgIPgIQgIRgISgp0fGPge8gtHesTguZgITgtHf1dfGVfRRgIUgIVgIWgIXgfEgIYgIZgI0gI1gI2gI3gI4gI5gI6gI7gI8gI9gJ.gJ#gJagJbgJcgJdgJegJfgJggJhgJigJjgJkgJlgJmgJngJogJpgJqgJrgJsgJtgJugJvgJwgJxgJygJzgJAgJBgJCgJDgJEgJFgJGgJHgJIgJJgJKgJLgJMgJNgJOfsYgJPgykguBgylgJQgJRgJSgJTgJUgJVgJWgJXgJYgJZgJ0gJ1gJ2gJ3gJ4gJ5gJ6gJ7gJ8gJ9gK.gK#gKagKbgKcgKdgKegKffYGeLweZ8eGKeLvfrOguXguXfOzfjFeLuguXeLufnJeQjgcpffvffvgcpfvOgctgcreLweQdgCBfKRfKReZ5eVeeGLeLveQieQdeQieQiffvfjFfzKfzKfOzfOzfKSf4Ef4EfRRf4Ef4EfOAfSifYAfD7fPjfsUfsUfEjfYsfEdfHS#..gKggKhgKigKjgKkgKlgKmgKngKoggkgKpgKqf5mfxjf8mfVMgvdfVMgGzftcfo6fkVgKrgcMgCOgCPgGBgGBfp.fp.gGBgKsgKtgKugKv#KCgKwgKxgKygCTgGIgKzgCWgKAgvpfEOgKBgvre15gzagvvgKCgKDfInfBcf8DgKEgGMfIwf8EgKFgKGgKHgKIftkgGOgKJgKKgKLgrHgKMgKNgvFgvFcUugKOgKPggqgKQgKRgKSgzlgGW", +"grPfWsgKTgdogKUgrUgohgrWgKVgKWgDigKXgvOgKYfQrgKZgDogK0gK0gzzgK1gzBgK2gvVgK3gaggagf6bghigzFgzEgDtgK4gK5gK6gzJgK7gK8gK9gL.fuPgL#gsigslgLagslgw#fFZfCmfCmgzRgDEgLbgLcgzTgzUgLdgLegwegzXgLfgLggLhgLigDQgLjgLkgLlgLmgLngHtgHtf3sf0cgLogLpgLqgLrgLsgLtgLugLvgLwgLxgLyffNgwkgwkghFgd7ghFgwkgwkgwkgoPglhgwlgoPgoPgLzgLAgwlgwlgoQghHgLBgLCgLDgLEdRyfq6gLFgLGgLHgLIgLJgLKgLLeAMemWemWc2nc2nemVewac2ncFBf6FgHTgHTgLMgLNgLOgLPgLQgLRgLSgLTgLUgLVgLWgLXgLYgLZgL0gL1gL1gL2gL3gL4gL5gL6gL7gL8gL9gM.gM#gMagMbgMcgIbgMdgMegMfgMggMhgMi.jtgMjgMkgMlgMmgMngMogMpgMqgMrgMsgMtgMugMvgMwgMxgMygMzgMAgMBgMCgMDgMEasHgMFgMGgMHgMIf7Age9eVcgiDgiDe4IgpYgpYe4Ogb8fEigMJgE6gMKgMLgMMgMNgMOgMPgMQgMRgMSgMTgMUgMVgMWgMXgMYgMZgM0gM1gM2gM3gM4gM5gM6gM7gM8gM9gN.gN#gNagNbgNcgNdgNegNfgNggNhgNigNjgNkgNlgNmgNngNogNpgNqgNrgNsgNtgNugNvgNwgNxgNygNzgNAgNBgNCgm2gNDgNEgNFguCgNGgNHgFZgNIgNJgNKgNLgNMgNNgNOgNPgNQgNRgNSgNTgNUgNVgNWgNXgNYgNZgN0gN1gN2gN3gN4gN5gN6gN7ge6frNgN8eLweLveLueQgfGWfGWfjFfjFffveQhffvffvffvfjFfjFgcpgcpeLueVeeGLgCBgGlgGlgCBeVdeZ4eLveLveQdeLveQiffveLufzKfzKfGWfRRfOzfOzf4EfRRfRRf7Jf7JfUKgb9fHNfPjfPjfsUfEjfHSfYsfEdgN9gO.gO#gOagObgOcgOdgOegOfgOggOhgOifVffPwfPxfSCf5of5ogGygOjftcgcKgOkggpgrmgj4gGAgGAgGBfp.fp.gGBgvggOlgOmgOngOogGEgOpgKxgKygOqgOrgKzgOsgOsgOtgz#gOugOvgOwgOuflbgKBgOxfBigOygOyfBfftwf2rgOzgOAgOBgOCgODgOEgKJgOFgOGgOHgOIgOJgOKefCgOLgKOggZgKQgCOgGAgKSgzlfo8", +"fWsgOMgONgGYgOOgOPgOPgOQgrXgKVgrWgORgOSfQrgKZgOTgK0gK0gG8f86gDqgr8gOUgOVgOVgagf6bghigzFgzFgDtgvZgK5gOWgOXgOYgOZgO0gO1fqAgk7gk6gO2gLafCmfJHfFZgslgsogzRgDEgHhgO3gzTgzUgssgO4gwegwegO5gO6gO7gO8gO9gP.gP#gPagPbgPcgHsgDNgPdf0cgPegPfgPggPhgPigPjgPkgPlbtmgPmgPnglhgwkgwkghFghFghFgwkgwkgwkglhgsxghGgsxgoPgoPgsxgwlgwlgsxgPogPpgPqgPrgPsgPtgtagHLgPugPvgPwgPxgPygPzgPAgwremWc2nc2newaewacBlcBlgAdgD5gPBgPCgPDgPEgPFgPGgPHgPIgPJgPKgPLgPMgPNgPOgPPgPQgPRgPSgPTgPUgPVgPWgPXgPYgPZgP0gP1gP2gP3gP4gP5gP6gP7gP8gP9gQ.gQ#gQagQbgQcgQdgQegQfgQggQhgIqgQigQjgQkgQlgQmgQngQogQpgQqgQrgQsgQtgQugQvcBJ.LWgQwgQxgQygQzgQAfGPfXWeVcgiDesTeodgtGge6fDffYBfwSgQBgb4gQCgQDgQEgjggQFgQGgQHgQIgQJgQKgQLgQMgQNgMYgQOgQPgQQgQRgQSgQTgQUgQVgQWgQXgQYgQZgQ0gQ1gQ2gQ3gQ4gQ5gQ6gQ7gQ8gQ9gR.gR#gRagRbgQMgRcgRdgRegRfgRggRhgRigRjgRkgRlgRmgRngRogRpgRqfLtgnugRrgRsgRtguCguCgRugRug.PgRvgRwgRxgRygRzgRAgRBgtWgRCgRDgREgRFgRGgRHgRIgRJgRKgRLgRMgRNgROgRPgRQgRRf.mgRSffsgnqd7.eGKeQiguXeLufjFfjFfGWfrOfrOffveLuffvfjFfjFfjFeLufrOeVeexseVdgRTgRTgGleVdeVdeQdeLveQdeLveQiffvfrOfRRffufzKfzKf4Eg.Kf4EfRRfRRf4Ef7JgRUgb9fD7fPjfPjfsUfHSfHSfHSfHPfEdgRVgRWgRXgRYgRZgR0gR1gR2gR3gR4gR5gR6gR7g#gfD0gvdf5nfHwgR8fkXfkWgR9gKrgS.gCOgGAgj4gCOgGBgGBgGBgrjgS#gOlgSagSbgScgvkgSdgGGgvlgSebl#bZGgSfgSggOwgShgSheoTgSibxMf8EfEVfBifBifBifBefxIgSjfxwgSkgSlgSmgSngSogSpgSqgSrgSsgStgSugSvc8VefCfp.ggZftfgSwgSxgSygrMgGW", +"gSzgSAgdogSBgSCgOPgOQgOQf6kgoigG2gSDgSEgSFgSGgSHgSIgG8gzzgzzgvUgOUgOUf89f89gSJgSKgSLgG9gDtgK4gSMgSNgSOgSPgSQgSRgSSgk6gDCgk6fuPgO2gslgSTgv9gSUgsigzQgDEgSVgHjgSWgSXgLegstgSYgSZgS0gS1gS2gS3gS4gS5gS6gS7gS8gS9gHsgDNgHtfW7gT.gT#gLsgTagTbgTcgTdgTebtngTfgTgffNgwkgwkghFghFghFgwkgwkgwkgThgoPghGgsxgLzgLzgsxgsxgTigLAgTjgTkgPrgTlgTmgTngTogTpgTqgTrgTsgTtgTugTvgsBgoUcOdemWc2nemVewaehYcBlgoWf9BgTwgTxgTygTzgTAgTBgTCgTDgTEgTFgTGgTHgTIgTJgTKgTLgTMgTNgTOgTPgTQgTRgTSgTTgTUgTVgTWgTXgTYgTZgT0gT1gT2gT3gT3gT4gT5gT6gT7gT8gT9gU.gU#gUagUbgUcgUdgUegUfgUggUhgUigUjgUkgUlgUmgUngUogUp.RrgUqgUrgUsgUtgUugUvgUwgUxgbFfGRgmdfftesTgiCgiCgUyfSjfEhfYsgb5g.BgmUgiUgUzgUAgUBgUCgUDgUEgUFgUGgUHgUIgUJgUKgULgUMgUNgUOgUPgUQgURgUSgUTgUUgUVgUWgUXgUYgUZgU0gU1gU2gU3gU4gU5gU6gU7gU8gU9gV.gV#gVagVbgVcgVdgVegVfgNagVggVhgVigVjgVkgVlgVmgVnf1Tg.6gVogyjgykguAgFXgFXguBgVpgVqgVrgVsgVtgVugVvgVwgVxgVygVzgVAgVBgVCgVDgVEgVFgVGgVHgVIgVJgVKgVLgq3gVMgVNgVOeLrgN8eLweLweLveLuguXfjFfjFfjFeLuffvffveLuffvfjFfjFeLueLufjFeVeexseVdgVPgRTgVQgCBgCBeGLeQheQdeLveQifrOeQifzKe4Nfbiffuf4EfOzfRRfRRf4Ef4Ef7JfOAgb9fVsfsUfsUfsUfEjfEjfEjfEdfYsgR9gVRgVSgVTgVUgVVgVWgVXgVYgVZgV0gV1gV2gcIfSCgvdf5ogvdgV3gGzgnIgcLgV4ftegCOgV5gV6gcMgCOgGBgGBgCOgV7gOlgV8gV9#K6#Sb#SbgrsgW.gW#gWagWbf5AflbgWcgWdgWegWfgvugWgf8Ef5Mf8DfSYfBcgWhf8DgC0gWigvwggQgWjgWkgWlgWmgWngWogWpfP9gWqgWrgvFgWsgKPgkvgKPgyXgSxgj4gGWgGW", +"gSAgSzgWtgOOgrUgKVgWugOQgWvgKVgWwfJjgSFgSGgWxgSGgWygzzf87gvUgWzgWAf89gWBgWCgWCgWDgzFgs.gWEgWFgWGgWHgWIgK9gWJdQ0goOgWKgWKgWLgWMgw.f6wgO2gWNgWOgL#gWPgHigwcgWQgSXgLegLfgHmgWRgWSgWTgWUgWVgWWgWXgWYgWZgW0gW1gHrgDNgW2gHugW3gW4gW5gS7gW6gW7gW8gW9gTegX.gX#ffNgXagwkgwkghFghFgwkgwkgwkgwkgoPgoPgsxgLAgLzgLzgwlgTigXbbxrgXcgXdgXegXfgXggXhgXigXjgXkgXlgXmgXngHIgXocSNgwsd#5erxehXfySehYcBlgoWcx.gXpgXqgXrgXsgXtgXugXvgXwgXxgXygXzgXAgXBgXCgXDgXEgXFgXGgXHgXIgXJgXKgXLgXMgXNgXOgXPgXQgXRgXSgXTgXUgXVgXWgXXgXYgXZgX0gX1gX2gX3gX4gX5gX6gX7gX8gX9gY.gY#gYagYbgYcgYdgYegYfgYggYhgYidoZgYjgYk.WzgYlgYmgYngYogUvgYpgYqfKHfUEfv8gmdgiCeVcge9f7JgYrfHPgYsgb4gYtgYugYvgYwgYxgYygYzgYAgYBgYCgYDgYEgYFgYGgYHgYIgYJgYKgYLgYMgYNgYOgYPgYQgYRgYSgYTgYUgYVgYWgYXgYYgYZgY0gY1gY2gY3gY4gY5gY6gY7gY8gY8gY9gZ.gZ#gZagZbgZcgZdgZegZfgZggZhgZigZjgZk#..fP.gZlgfQgZmgZngqPgqPgjvgfSgZogZpgZqgZrgZsgZtgZugZvgZwgZxgZygZzgZAgZBgZCgZDgZEgZFgZGgZHgZIgZJgZKgZLgZMgZNgZOd69eofeLweLveQheLueLufjFfjFfjFffvffvffvffvfjFfjFeLuguXffvexseVdexsgZPgRTgRTeZ5gCBeGLeQheQdeQieQiffve4NffuffufbiffufRRfGWfGWfRRf4EfOzf7JfOAgb9fVsfPjfsUfsUfEjfEjfEjfHPfHSgZQgZRgZSgZTgZUgZVgR1gZWgZXgZYgCLgZZgZ0gZ1fSCgvdf5ogvdfDXgZ2fkVgcLgZ3ggpgnKfo9gj4gj4gZ4gCOgGBgGBgV5ekogvhgZ5gZ6gZ7#Sb#SbfBsgZ8gZ9g0.f2Ag0#g0ag0bg0cg0dg0ef.xg0fg0gfxDfBcfBbg0hg0hg0igz.gc7g0jg#Jf2Bg0kg0lg0mg0ngrIg0og0pg0qgyYftfgdggrmgrmgcMfSFfVLftdg0r", +"g0sgGYg0tg0ugOQgKVg0vgoigKVgWwfJjg0wg0xgSGfM1g0yg0zgr8gWAgWAg0Af89g0BgWBg0Cg0Bg0DgvZgSMg0Eg0Fg0Gg0Hg0Ig0Jg0Kg0LgoOgk6gWPg0Mg0Ng0Og0Pg0QdEReYIg0Rg0Sg0Tg0Ug0VgDIgwegstg0Wg0Xg0Yg0Zg00g01g02g03gWZg04g05fW5gDNgW2eO1g06g07g08g09g1.g1#g1ag1bg1cgLMg1dg1eghFgwkgwkghFgd7gwkgwkgwkgwkgThgoPghGgsxgLzgoPgsxg1fgLBg1gg1hg1ig1jg1kgXhgXgg1lg1mg1ng1og1pg1qg1rg1sg1tgwsd#5ewaemVewaewag1ug1vgAcgXpg1wg1xg1yg1zg1Ag1Bg1Cg1Dg1Eg1Fg1Gg1Hg1Ig1Jg1Kg1Lg1Mg1Ng1Og1Pg1Qg1Rg1Sg1Tg1Ug1Vg1Wg1Xg1Yg1Zg10g11g12g13g14g15g16g17g18g19g2.g2#g2ag2bg2cg2dg2eg2fg2gg2hg2ig2jg2kg2lg2mg2ng2og2pg2qg2ra5g.Wyg2saWLg2tg2ug2vg2wg2xgBffRLgiCgiCgiEf4BfGQg.JfPjg2ygb5gb3g2zg2Ag2Bg2Cg2Dg2Eg2Fg2Gg2Hg2Ig2Jg2Kg2Lg2Mg2Ng2Og2Pg2Qg2Rg2Sg2Tg2Ug2Vg2Wg2Xg2Yg2Zg20g21g22g23g24g25g26g27g28g29g3.g3#g3agY6g3bgY8g3cg3dg3eg3fgxZg3gg3hg3ig3jg3kg3lg3mg3ng3og3pg.6fLsg3qgC#gjtg3rgm3gfRgfRg3sg3tg3uetWg3vg3wg3xg3yfxlfAYg3zcPTgf3g3Ae6Ag3Bg3Cg3Dg3Eg3FgN2g3Gg3Hg3Ig3Jg3KfDje#Wd7.d7.eVheLveQig3LeLufjFffvfjFfjFffvffvffvfGWfjFg3LeQiexseVdexsg3MgGlgGleVdeZ5exseLveLveQheQhffuffue4NfRRe4Ne4NfzKguXfGWfRRf4EfOzf7JfUKfYAfPdfYBfEjfEjfEjfEjfEjfEjfHSg3Ng3Og3Pg3Qg3Rg3Sg3Tg3Ug3Vg3Wg3Xg3Yg3Zg30gOjgvdf5ogvdfHwgV3gveg0rgR9gcLgrmgrmggnfxigV5gcMgCOgGBgGBgSwfSFg31g32g33g34g35g36g37g38g39g4.g4#g4ag4bg4cg4dg4eg4fg4gg4hf2qg4ifEOg4jfMbgGIfSTfxxfhlg#Jg4kachg4lg4mg4ng4og4pg4qgOKg4rgKPgnKg4sgdggdggrjfSFgj4g4t", +"gGYg4ug0ugOQgKVgohf6kg4vg4wg4xg4xg4yfJogWxg4zgvUf88gWAgWAg4Ag4Bg4Cg4Df6ag4DgSLg4Eg4Fg4Gg4Hg4Ig4Jg4Kg4LfqAemAgoOemAg4MdQQf3ng4Ng4OdRsg4Pg4Qg4Rg4SfiigzUgssgO4gHmg4Tg4Ug4Vg4Wg4Xg4Yg4Zg40g41g42g1bgW1gHrgHtgW2fepg43g44g45g46g47g48g49gW8g06g5.g5#ghFghFghFgwkgwkghFghFgwkgwkgwkgwkgoPgoPgsxgLzgLzgsxg1fg5ag5bg5cg5dg5eg5fg5gg5hg5ig5jg5kg5lg5mg5ng5og5pg5qg5rcJWgwrewaewaehYcBlg5sg5tgXpg5ug5vg5wg5xg5yg5zg5Ag5Bg5Cg5Dg5Eg5Fg1Hg5Gg5Hg5Ig5Jg5Kg5Lg5Mg5Ng5Og5Pg5Qg5Rg5Sg5Tg5Ug5Vg5Wg5Xg5Yg5Zg12g50g51g52g53g54g55g56g57g58g59g6.g6#g6ag6bg6cg6dg6eg6fg6gg6hg6ig6jg6kg6lg6mg6ng6og6pg6qg6rg6sg6tg6ug6vgpSg2xg6wg6xg6ygbGf4AfGQgiGg6zgb6g6Ag6BgYtg6Cg6Dg6Eg6Fg6Gg6Hg6Ig6Jg6Kg6Lg6Mg6NgYFg6OgYIg6Pg6Qg6Rg6Sg6Tg6Ug6Vg6Wg6Xg6Yg6Zg60g61g62g63g64g65g66g67g68g69g7.g7#g7ag7bg7cgY6g7dg7eg7fg7gg7hg7ig7jg7kg7lg7mg7ng7og7pg7qg7rg7sg7tg7ug7tg3qg7vgC#g7wg7xg7yg7zdLug7Ag7Bg7Cg7DfxkgSwgSwg7Eg7Fg7Gg7HdbTg7Ig7Jg7Kg7Lg7Mg7Ng7Og7Pg7Qg7Rg7Sg7Tg7Ud7.d7.d7.esTeLveLvfrOeLuffveQiffvfjFffvffvffvfjFeLueLueQieZ4gCBexsgVPgRTgRTeVdeVdeVdeGLeQieQieQiffvffve4NfzKeQifbifjFfGWfGWfRRfRRf7JgntfUKgb9fVsfHNfLLfHSfEjfsUfsUfEjfYsg7Vg7Wg37g7Xg7Yg7Zg70g71g72g73g74g75g76fVhgV3gvdf5nf5ogvdfDXgGzg0rg77gcLftegnKg4sgZ2gZ4gV5gCOgCOgGBgyXgyXefAd7Wg78g79g8.g8#ggVg8ag8bg8cg8dg8eg8ffgVg8gg8hg8ig8jg8kg8lf5FgCVfIlg8mfEMg8ng8og8pgc7g4kgc8g8qgrGfPFfgPg8rfcBftfgKPgKPgrmgrmgdggrmgcMgrjgyXfkW", +"gKUg0ug8sgG2grVgzsg8tg8ugSGg4xg4xg8vfJog8wgvUgOUgWAgWAg4Bg8xg4Cf6ag8yg8zg8AgK4g8Bg8Cg8Dg8Eg8Fg8Gg8HfqAfuRgWKfmyg8Ig8Jg8Kg8Lg8Mg8Ng8Og8Pg8Qg8Rg8SfyHgwdgDIgweg8Tg8Ug8Vg8WbPKg8Xg8Yg8Zg80g81g82g83g84gHtgW2e73fmLf0ig85g86g87g88g89g9.g9#g1dgd8ghFgd7ghFgwkgwkgwkgd7gwkgwkgwkgThgwkffNgPog9agPog9bg9cg9dg9eg9fg9gg9hg1kg9ig9jg5ig9kg9lg9mgXig9ng1sg9ofqOfqOew#aITew#emVehYcBlg1vg5tg9pg9qg9rg9sg9tg9ug9vg9wg9xg9yg9zg9Ag9Bg9Cg9Dg9Eg9Fg9Gg9Hg9Ig9Jg9Kg9Lg9Mg1Pg9Ng9Og9PgPQg9Qg9Rg9Sg9Tg53g9Ug9Vg9Wg9Xg9Yg9Zg90g91g92g93g94g95g96g97g98g99h..h.#h.ah.bh.ch.dh.eh.fh.gh.hh.ih.jh.kh.lh.mh.nh.oh.ph.qh.rh.sh.th.ugBffKIfRLg.Dh.vgb2h.wg6Ag6Agb3h.xh.yh.zh.Ah.Bh.Ch.Dh.Eh.Fh.Gh.Hh.Ih.JgYFh.Kh.Lh.Mh.Nh.Oh.Ph.Qh.Rh.Sh.Th.Uh.Vh.Wh.Xh.Yh.Zh.0h.1h.2h.3h.4h.5h.6h.7h.8h.9h#.h##gY5h#ah#bh#ch#dh#eh#fh#gh#hh#ih#jh#kh#lh#mh#ngcdgm3h#og3qh#pg7th#ph#qh#qh#rgvbekqekph#sh#th#ufkYfSCfVMgvdh#vh#wh#xh#yh#zgcOh#Ah#Bh#Ch#Dh#Eh#Fh#Gh#Hh#Ih#Jh#Kh#LesTe4MeLweLweLveLvfrOeQgfjFffvffvfjFffvffvffvfGWguXeLueVfeZ4eVdeVdgCBgRTgRTgCBeVdeVdeGLeQhffveQiffvffve4NffuffufbiffufOzguXfRRf4Ef4EgntfOAfYAfPffPifLLfEjfEjfsUfsUfEjfHSfwSh#Mh#Nh#Oh#Ph#QgVVh#Rh#Sh#Th#Uh#Vh#Wh#XfAVf5of5of5ngvdgV3fHxfo7g77g0rgnJgdggrmfo9fo9gZ4gZ4gCOgCOgCOgrjefAh#Yh#Zh#0eDdfsrh#1h#2cyLh#3h#4h#5h#6h#7h#8fl.h#9gSegSebl#bZGfIjgCWgvpf5EfW#fA8ha.ha#haahabhachadhaehafgrKfp.ftfgkvgrmgrmgdgfteftefteggngGAftc", +"g0thaggKVhahhaig4xgSGhajg0xhakhakg4xgWxhalgr8gWAgWAgWBhamg4Cg0Cf6ag8zhanhaohaphaqharhashathauhaveAwemAgWKgWPhawhaxhayhazhaAhaBhaChaDhaEhaFhaGhaHgHlgO4gwehaIhaJhaKhaLcgfhaMhaNhaOhaPg81haQhaRhaSgHtgDNf0ceFtfmLeKghaThaUhaVhaWerue75gaIghFghFgd7ghFgd7gwkgwkghFghFgwkgwkgThhaXhaYhaZha0ha1ha2ha3ha4ha5ha6ha7ha8ha9g9jhb.hb#hbahbbhbchbdhbeg1sfqOfqOaITew#ew#cFCaITew#fiBgAchbfhbghbhhbihbjhbkhblhbmhbnhbohbphbqhbrhbsgAOhbthbugAPhbvhbwhbxhbyhbzhbAhbBhbCg5ThbDhbEhbFhbGhbHhbIhbJhbKhbLhbMhbNhbOhbPhbQhbRhbShbThbUhbVhbWhbXhbYhbZhb0hb1hb2hb3g2ahb4hb5hb6hb7hb8hb9hc.hc#hcahcbhcchcdhcehcfhcghchhcihcjhckhclhcmhcngxqgbRhcogfAg6Bg6Bg6Bgb3hcphcqhcrhcshcthcuhcvgM9hcwhcxhcyhczhcAhcBhcChcDhcEhcFhcGhcHhcIhcJhcKhcLhcMhcNhcOhcPhcQhcRhcShcThcUhcVhcWhcXhcXhcYhcZhc0hc1hc2h##hc3hc4hc5hc6hc7hc8hc9hd.hd#hdahdbhdchddhdehdfguAgm4hdgg7vg3qg7tg7thdhhdhg#hfkZfPyfPyhdif8mfHwfHxg7sgGzgGzhdjhdkh#vgcJhdlefDhdmdPrhdnhdohdphdqhdrhdshdthduhdveLweLveGLeLveLveLvfjFeLuffvffvffvffvffvffvffvfjFeLuffveVeeZ4eZ5eVdeVdgRTgRTgVPexseVdexseQieQhffvfjFffvffuffvfzKe4NffufRRguXf4Ef4Ef4Ef7JfOAfVsfPffVsfwRfEjfEjfsUfsUfsUfEhfYsh#vhdwhdxhdyhdzhdAhdBhdChdDhdEhdFhdGhdHhdIgvdf5of5ogvdgOjgZ2gyWgZQg0rgnJgdggnKgnKgj4fo9hdJgcMgcMgCOgcMfkYhdKeaPh#YhdLhdMhdNhdOhdPhdQhdRhdShdThdUhdVhdWhdXhdYfPMhdZgGJhd0gCYgCVg0ffW#hd1hd2hd3hd4hd5achhd6asxhd7hd8efCfxkgrmgrmgdgftegS.ggpgnJggqgrlgj4", +"fTogWvhd9he.g8vhajgSGg4yg4yg4yg0xgSGgvTgvUgK2gOUhe#g8xheag0Cg4DgzEhebhechedheehefheghehheihejeJYeJYfmyg4Mhekhelhemheng8Mheohepheqherheshetheuhevhewgsthexheyg4VhezheAheBheChaOheDheEheFheGf0agW2gHtgHtf0dev9eAGf0fgaIheHheIgaIgaLgd7gd7ghFghFgd7ghFghFgwkghFghFgwkgwkgwkffNheJheKha1heLheMheNheOhePheQheRheSheTheUheVheWg5hheXheYheZhe0he1cOefNzew#c66aITc66aITcFCemWcXycFBhe2he3he4he5he6he7he8he9hf.hf#hfahfbhfchfdhfehffhfghfhhfihfjewHhfkhflhfmhfnhfohfphfqhfrhfshfthfuhfvhfwhfxhfyhfzhfAhfBhfChfDhfEhfFhfGhfHhfIhfJhfKhfLhfMhfNhfOhfPhfQhfRhfShfThfUhfVhfWhfXhfYhfZhf0hf1hf2hf3hf4hf5.YXhf6hf7hf8hf9hg.hg#gE4gfAgfAhgahgbg6Bhgchgchgdgjlhgehgfhgghghhgihgjhgjhgkhcxhglhgmhgng2KhgohgphgqgYHhcFhgrhgshgthguhgvhgwhgxhgyhgzhgAhgBhgChgDhgEhgFhgGhgHhgIhcZhgJhgKhgLhgMhgNhgOgU8hgPhgQhgRhgShgThgUhgVhgWhgXhgYhgZhg0hg1gRuguAhg2h#og7vg7tg7tg7sfDZgvchdifkZhg3g#hfDXgGyg7tg7tggoggogKrgKrhdjgvdf5nhg4hg5hg6hg7hg8hg9hh.hh#h#IhhahhbhhcfnJeoeeGLeLveLveLveLug3LfrOffvfjFfrOffvfjFfjFfjFeLuffveZ4eVeeZ4gCBeVdgVPgRTgCBexseVdexseLvffvfjFffufjFffueQiffuffuffufzKfOzfOzf4Ef7Jf7JfKSfUMfVsfPffLLfEhfEhfEhfEjfsUfLIfYshdjhhdhhehhfhhghhhhhihhjhhkhhl#qMhhmhhnhhogvdf5of5ogvdhhpfxiggogR9g0rgnJgdggrmgnKgCOgj4gj4gj4gCOgcMgcMgGAgSxhdKfv6hhqhhrhhshhthhuhhvhhwhhxhhyhhzhhAhhBhhChhDhhEhhFezUhhGhhHezUhhIfgYfgYhhJhhKhhLagIapjhhMhhNgvyfwuhhOhhPgcMggqgdgg4sfteftego#go#ftdgZ4", +"fTog0vg4wfJnfJohhQhakg0xg4yg4yhajg4zhhRf58gWAhhSg8xg4Cg0Bg4DgG9hhThhUhhVhhWhhXhhYhhZhh0hejgL#gDCgDChh1hh2hh3hh4hh5hh6hh7g8Nhesherhesbphhh8hh9gDIglchi.hi#hiahibhichidg8XhiehifgO9highihf0bf3sgzYgHtgHthiif3shiiglggd6hijhikhikgd7gd7gd6ghFgwkghFghFgwkgwkghFhaXffNhaYha0hilheJg9agsxgsxhimhinhiohiphiqhirhishithiuhivhiwhixhiyhizhiAhe1gwqeFueFuew#fqOaITfqOaITeAKfiBcBlhiBhiChiDhiEhiFhiGhiHhiIhiJhiKhiLhiMhiNhiOhiPhiQhiRhiShiThiUhiVhiWhiXesbhiYhiZhi0hi1hi2hi3hi4hi5hi6hi7hi8hi9hj.hj#hfBhfhhjahjbhjchjdhjehjfhjghjhhjihjjhjkhjlhjmhjnhjohjphjqhjrhjshjthjuhjvhjwhjxhjyhjzhjAhjBhjChjDhjE.0chjFhjGhjHhjIhjJhjKgfAg2zgbQgfAg6Bgb2gb2hgcgfAhjLhjMhjNhjOhjPhjQhjRhjShjThjUhjVhjWhjXhjYhjZhj0hj1hj2hj3hj4hj5hj6hj7hj8hj9hk.hk#hkahkbhkchkdhkehkfhkghkhhkihkjhkkh.8h.9hklhkmhknhkogU9hkphkqhkrhkshkthgUhkuhkvhkwhkxhkyhkzhkAgm6hkBgZmgC#h#pg7thdhfDZgvbhkChkDhg3fDXfDXhkEg7ug7ugV4gZ3gZ3gKrgKrgGzfkYfSBhkFhkGhkHhkIhkJhkKhkLhkMhkNhkOhkPf46eoeeGLeLveLveLvg3LeLufrOffvfjFeLufjFfjFfGWfjFeQgeQieZ4eVeeZ4gCBexsgZPgRTgVPeGLeVdexseQdfjFffvffvffvffue4Ne4NeQie4NffufRRg.Kf4Ef7Jf7JfKSfULfVsfUMfHNfwRfSlfSlfEhfEhfEhfYsgV4hkQhkRhkShkThkUhkVhkWhkXhkYhkZhk0hk1hk2gvdf5of5nf5ofHwfSDfkXg0rg0rfo8ggqgrmgrmgnKgCOgrjgCOgCOgGAgGBgGBgCOfSFfVLgSwhk3hk4hk5hk6hk7hk8hk9hl.hl#hlahlbhlchhDhldfPUhhEhlehlfhlghlhhlihljhlkhllhlmhlnftlfxthlogn7hlphlqe5SgCOgdggrmfteggpgnJgo#grMfo8gcK", +"hlrgvOgSEfM1g4xhlshltg0xg4yhajhluf6.f6#g4Ahlvg8xg4Cf6ag8zgG9hlwhlxhlyhlzhlAhlBhlChlDhlEgL#gDCg4MhlFhlGhlHcAlhlIhlJhlKdNghlLhlMhlNhlOhlPgzVgDIgzWhlQhlRhlShlThlUhlVhlWhlXhlYgO9hlZhl0g84gzYf0cf3sgHtgHtgswgswglghijhl1hl2hl3gz6gd7gd7gd6gd7ghFghFgd7gwkghFghFgHFhl4hl5hl6hl7heLhl8ghGgwlhl9hm.hm#hmahmbhmchmdhmehmfg9jhmghmhhmihmjhmkgwqaITew#eFuc66fqOaITfqOeAKemWcBlgAghmlhmmhmnhmohmphmqhmrhmshmthmuhmvhmwhmxhmyhmzhfbhmAhmBhmChmDhmEhmFhmGhmHhmIhmJhmKhmLhmMhmNhmOhmPhmQhmRhmShmThmUhmVhmWhmXhmYhmZg11g16hm0hm1hm2hm3hm4hm5hm6hm7hm8hm9hn.hn#hnahnbhnchndhnehnfhnghnhhnihnj.GShnkhnlhnmhnnhno#dZhnp#qRhnqhg#hnrgfAg2zgbQgfAhgcgb2gb2gb2g2zfwYhnshnthnuhnvhnwhnxhnyhnzhnAhjXhnBhnChnDhnEhnFhnGhnHhnIhnJhnKhj5hnLhnMhnNhnOhnPhnQhnRhnShgHhnThnUhnVhnWhnXhnYhc1h.9hnZhklhc2hn0hn1hn2hn3hkqhn4hn5hn6hn7hn8hn9ho.ho#hoahobhochodhoegZngfQg7vh#ph#pfDZhofhkCfVihkDfDXgOjfHxfHyg7uhoggV4gR9gZ3gZ3gRVgvdg#hh#thohhoihojhokholhomhonhoohophkPhoqeLweGLeLveLveQiguXfrOffvfjFfjFffvffvffvfGWeLueLueQiexseZ4eZ4gCBexsgCBgRTgZPeGLexse4JeQdffvffvfjFffuffve4NeQdfrOeQiffvfRRfOzf4Ef7Jf4EfKSfULfPffShfD7fSkfHNfSlfSlfEhfEjfHPg3phorhoshothouhovhowhoxgR2hoyhozhoAhoBhoCgZ2gvdf5of5ngvdfAVgGzfkWgZ3ggpgnJgrmgrmgnKgnKgGBgGBgGAgyXgGAgGAgGAgGAgCOg31hoDhoEhoFhoGhoHhoIhoJfPRhoKhoLhlahlbhoMhoNhhDfMehoOhhBhoPhoQhoRhoShoThoUhoVhoWftmhoXfIehoYhoZho0ho1gcMggqftegnJgnJgo#grMgrMgrMg4t", +"gkFho2gvSg8uhlsg8vhltg8vhajg4zho3hhRf6#hhShhSg4CgWDho4ho5hlwhlxho6hlzho7ho8ho9hp.hp#gL#eJYg0KhpahpbhpchpdhlEhpehpfhpgedehphhpierpdrUgzVgHlgzWglchpjhpkgO7hplhpmhpnhpohpphpqhprhpshptgzYf0cgW2hiigHtgPdgswglggz5hpuhpvhpwhikgd6ghFgd6gd7ghFghFghFghFgwkghFgwkffNhpxdaMhl6hl6ffNghGgoQghGhpyhpzhpAhpBhpChpDhpEhpFhpGhpHhpIhpJhpKg1tg9oaITaITaITfqOfqOaITaITaITemWgsEhpLhpMhpNhpOhpPhpQhpRhpShpThpThpUhpVhpWhpXhiLhpYhpZhp0hp1hp2hp3hp4hp5hp6hp7hp8hp9hq.hq#hqahqbhqchqdhqehqfhqghqhhqihqjhqkhqlhqmhqnhqohqphqqhqrhqshqthquhqvhqwhqxhqyhqzhqAhqBhqChqDhqEhqFhqGhqHhqIhqJhqKhqLhqMhqNhqOhqPhqQhqRhqShqThqUhqVhqWhqXhqYf7HgYthqZgjmgjmhgdhq0hq0hq1hq2hq3hq4hq5hq6hq7hq8hq9hr.hr#hrahrbhrchrdhrehrfhrghrhhrihrjhrkhrlhrmhrnhj5hrohrphrqhrrhrshrthruhrvhrwhrxhryhrzhrAhnXg7#g7#hrBhrChrDhrEhrFhrGhrHhrIhrJhrKhrLhrMhrNhrOhrPhrQhrRhrShrThrUhrVgC#h#qg7vguyhkDfVifVihrWhhpgOjhrXfLsg7ug7uhoggV4gV4gV4gRVg7sfDZg#ihrYhrZhr0hr1hr2hr3hr4hr5hr6hr7hr8eGKeLweLweLwfnJeLuffvfjFfjFffveQieQifjFfjFguXeLueVeexsexseZ4gCBeZ5eVdgRTgVPexsexsexseGLeQhffvffuffueQiffveQdffveQiffvfRRfOzf7Jgntf4EfKSfUJgb9fSifD7fSlfHNfLLfSkfwRfEhfwRhr9g7Ehs.hs#hsahsbhschsdhsehsfhsghshhsihsjgOjf5of5of5ogvdgOjfxigrlgcLgcLgnJggqgrmgrmgdgefzefzgGBgyXgGAgGAgGAgGAgCOhskhslhsmhsnhsohsphsqhsrhsshsthoKhsuhsvfMfhswhoMhsxhoOhsyhszhsAhsBhsChsDhsEfA6hsFhsGfwahsHhsIhsJhsKhsLgCOggqggpfo8go#go#grMgrMgrMgzl", +"fQmgKYfQrhsMhsNhsOfJnfJog4zho3f6#f6#gWzhsPf6agzFhanhaohsQhsRhsShlzhsThsUhsVhsWhsXhsYg0Kg0KhsZhpbhs0hs1hs2fv9hs3diUhs4d.0dIOhs5gzUhs6gHlgzWgwfhs7hs8hs9ht.ht#heOhtag04htbhtchtdgHrgzYgzYf3thiigHtgPdgswgswhtehpvhtfhikgd6gd7gd7ghFgd7gd7ghFghFghFgwkgwkgwkhtghpxhthhtihtjhtkghGghHghHgd9htlhtmhtnhtohtphtqhtrhtshivhtthtuhtvg1tfqOew#ew#aITaITfqOaITc66c66ew#c2ncSMhtwhtxhtyhtzhtAhtBhtChtDhtEhtFhtGhtHhtIhtJhtKhtLhtMhtNhtOhiKhtPhtQhtRhtShtTe8mhtUhtVhtWhtXhtYhtZht0ht1ht2ht3ht4ht5ht6ht7ht8ht9hu.hu#huahubhuchudhuehufhughuhhuihujhukhulhumhunhuohuphuqhurhushuthuuhuvhuwhuxhuyhuzhuA.QzhuBhuChuDhuEhuFhuGhuHhqYf7HgfAgbQgjmgjlgb2hq0hq0gjmhuIhuJhuKhuLhuMhuNhuOhuPhuQhuRhuShuThuUhuVhuWfEahuXhuYhuZhu0hu1hu2hu3hu4hu4hu5hcEhnZhu6hu7hu8hu9hv.hv#hvahvbhvbhvchvdhvehvfhvghvhgY4hrEhvihvjhvkhvlhvmhvnhvohvphvqhvrhvshvthvuhvvhvwgqPgm4gfQgC#g7vhg3fVihvxhvyhvzhvAfDZhhpgOjfHxfHyg7uhvBhvBhoghvBg7tguyftbhvChvDhvEhvFhvGhvHhvIhvJhvKhvLhvMfnJeLweLweLwfnJg3LffvfjFfjFffveQiffvffvffveQgffveVeeVdexseZ4eVdhvNexsgVPg3MexsexseZ4eVeeQiffvffuffuffvffve4NffuffvffufRRfOzf4Ef7JfOzgRUfUKfVsfULfD7fSlfHNfHNfSlfSkfwRfHPgN9hvOduLhvPhvQhvRhvShvThvUhvVhvWhvXhvYhvZhv0gvdf5of5ngvdhhpfSDfkXgKRgR9fo8gnJggqggqgnKgnKhv1gCOgCOhv2gj4gcMggnggnhv3hslhv4hv5hv6hv7hv8hv9hsshw.hw.hw#hwahwbhwchwdhwehwfhwghsAhwhhwihwjhwkbREhwlhwmfA5hwnhwohsIfwuhwphwqg4sggpfo8gzlgzlgzlgrMgzlgrMgrM", +"hwrgKYho2g4whltg8vg0xhluf6.g0Af6#gWzhwshwtgDthwuhwvhwwhwxhwyhwzhwAhwBhwChwDhwEhwFgk7gk7hwGhawhwHhwHhwIhwJhwKe3kdIOehCdnxgHjgWQgzVhwLhewfQThwMhwNhwOhwPhwQhwRhwShwThwUg4TgzYgzYgzYgzYf3sf9yf9ygPdgswglghtehpvhwVgd7gd6gd6gd7ghFghFgd6gd7gwkgz6hwWhl7hwXhwYhwZhw0hw1fedhw2hw3ghGgd9gljghIhw4hw5hw6hw7hw8hw9hx.htshx#hxahxbhxcg9oaITew#eFuaITaITaITaITaITemWemWgAchxdhxehxfhxghxhhxihxjhxkhxlhxmhxnhxohxphxqhxrhxshxthxuhxvhxwhxxhxyhxzeBchxAhxBhxChxDhxEhqbhxFhxGhxFhxHhxIhxJhxKhxLhxMhxNhxOhxPhxQhxRhxShmXhxThxUhxVhxWhxXhxYhxZhx0hx1hx2hx3hx4hx5hx6hx7hx8hx9hy.hjmhy#hyahybhychydhyehyfhyghyhhyihyjhykhylhymhynhyohqZgfAgjmgjmgjmgb2hq0gjmgjmg2zhyphyqhyrhyshythyuhyvhywhyxhyyhyzhyAhyBgHrhyCejphyDhyEhyFhyGhyHhyIhyJhyKhyLhyMhn0hyNhyOhyPhyQhyRhyShyThyUhyVhyWhyXhyYhvahyZhy0hy1hy2gY7hy3hy4hvmhvnhvnhy5hy6hy7hy8hy9hz.hz#hzahzbgjwgjvhdghzcgfQhzdhzefgjhzffVihvzfDYfDZfSCfSCfHxfHyg7ug7ufVxfVxfHxfDZfkZdLuhzghzhhzihzjhzkhzlhzmhznhzoeLGffseoeeLweLvfjFguXffvfjFffveQieQiffvffvfjFeLufrOeVeeVdexseZ4eZ4gCBexshvNgRTexsexseVeeLvffvfjFffuffuffvfzKe4Ne4NfjFe4NfzKfGWf4EgntfKSfOAfUKfPefUMfVsfPifLLfHNfLLfSkfLLfwRgN9gS.hzpeulhzqhzrhzshzthzuhzvhzwhzxhzyhzzhzAfHxf5nf5ogvdfVMfAVf5ogcKg0rfo8ggpgkwgrmg4sgnKgnKfkXfo9hzBfkXggnggnggngyXhzChzDhzEhzFhzGhzHhzIhzJhzKhsshzLhzMhzNhzOhzPhlbhzQhzQhsAhzRhhxhzShzThzUhlkgWbhzVhzWhzXhzYhzZhz0ekrfo9gnJgrMgzlhz1hz1hz1gzlgrMgrM", +"hwrhz2g8tgSDhe.g4xgWxho3hz3f6#gWzhz4hwthz5hz6hz7hz8hz9hA.hA#hAahAbhAchAdhAeeYIhwFhh1hlFhlFhlFhawhAfhAghAherje7Hdd3dnxhAihAjgzUgwdhAkgsthAlhAmhAnhAogS9hApdtThAqhArgsugzYgzYgzYgzYgzYf6Dhiiglfgswgswgswhl1hpvhl3gd7glggd7gd7ghFgd7gd7ghFheLhAshAthAuhAvhAwhAxhAybkShAzhAAhABgd9gljf9wf9xhACgLxhADhpEhpDhAEbBMbBNhAFgDQhAGcOefyRaITfqOaITaITfqOaITaITeAKemWc2nhAHhAIhAJhAKhALhAMhANhAOhAPhAQhARhAShAThAUhAVhAWhAXhAYhAZhA0hA1hA2hA3hA4hA5hA6hA7hA8hA9hB.hB#hBahBbhBchBdhBehBfhBghBhhBihBjhBkhBlhBmhBnhBohBphBiht6hBqhBrhBshBthBuhBvhBwhBxhByhBzhBAhBBhBChBDhBEhBFhBGhBHhBIhBJhBKhBLhBMhBNhBOhBPhBQhBRhBShBThBUhBVhqXgbQgYtf7Hgjmgjmgjmhq0gjmhBWhBXhBYhBZhB0hB1hB2hB3hB4hB5hB6hB7hB8hB9hC.gzZgzZhC#hCahCbhCchCdhCehCfhCghChhCihCjhCkhClhCmhCnhCohCphCqhCrhCshCthCuhCvhCwhCxhCyhCzhy2hCAhCBhy3hCChCDhvlhvnhCEhCFhCGhCHhCIhCJhCKhCLhCMgRuguAgZmgfQhdgg.OgO.hvxhvxgGwfVigCzguyguyfDYfDXgOjfHxfLsfLsfLshkEgGyfVNekohCNhCOhCPhCQhCRhCShCThCUhCVfAweQjeGLeLveQhfGWeLufjFffveQieQieQieQieQiffvfjFfrOeQheLveZ4exse4KgCBexseVdgRTeVdexsexseLvffvffvffuffuffuffuffueQdffuffufRRfRRf7Jf4EfKSgRUfUKfPffUIfPefYzfPdfPdfHNfPifSlfEhfYsgKrhCWhCXhCYhCZhC0hC1hC2hC3hC4hC5hC6hC7fsEgGzf5ogvdf5of5og#hfkYgnHg0rfo8gnJgkwgrmgrmgrmhv1hdjftcgZ4gZ4ggnggngj4ggnhC8hC9hD.hD#hDahDbhDchDdhDehDfhDfhDghDhhDihDjhwbhDkhDlhDmhDnhDohDphDq#6dhDrhDshhKhDtawvhDuhDvhDwefAgZ4gKRgzlhz1hz1gzlhz1gzlgrMgzl", +"hz2gvPgORhDxg0xfM1hDyg0Ag0Ag4Ahz4hDzhz5hDAhz7hDBhz8hDChDDhDEhDFhDGhDHhsXhwFhwFhwFhlFhlFhDIhDJhlFerihDKhDLeJYdiXdd3hAihDMhevgzVhAkhDNhDOhDPfUVgHmfUVhDQhDRhDSgsugzYgwhgwhgzYgzYgW2f3sf9yglfgswgswgswglghDThDUhikgd6gd6gd6ghFghFgd7g1ehDVhl4hDWhAvhDXhDYhDZhD0hD1bkThD2hD3hD4gaKf9wf9xf3veT5ervhD5hD6hD7htshD8hD9hE.hE#fqOaITaITfqOaITaITfqOaITc66c66ew#c2ncXyhEahEbhEchEdbpkhEehEfe.vhEghEhhEihifhEjhEkhElhEmhEnhEohEphEqhErhEshEthEuhEvhEwhExhEyhEzhEAhEBhEChEDhEEhEFhEGhEHhEIhEJhEKhELhEMhENhEOhEPhEQhERhEShEThEUhEVhEWhEXhEYhEZhE0hBwhE1hE2hE3hE4hE5hE6hE7hE8hE9hF.hF#hFahFbhFchFdhFehFfhFghqShFhhFihFjhFk#.xhuHgbQgYthqZgjmgjmgjlhFlhq0hFmhFnhFohFphFqhFrhFshFthFuhFvhFwhFxhFyhFzeFqhFAhFBhFCeoghFDhFEhFFhFGhFHhFIhFIhFJhFKhFLhFMhFNhFOf46hFPhFQhFRhFShFThFUhFVhFWhFXhFYhc4hc4hCBhFZg3dhCChF0hF1hF2hF3hF4hF5hF6hF7hF8hF9hG.hG#hvwguAgZnhdgh#ogyjfPzfD2fD2hGagGwfgjhvzhvAhGbhvAfDYgqOgGygR8hrXf8#fHygOjgSwhGchGdhGehGfhGghGhhGihGjhGke3tesTeGLeLvhGlfGWfjFfjFfjFeQieQieQieQieQiffvffvfjFhGleVgeVdexse4KeVdeVdeVdgRTeVdexsexseQdeQiffvffuffuffvffvffue4Ne4NfjFf4Ef4Ef4EfOzgRUgRUfUKfULg.KfX1fYzfX1fPefPdfPdfPifLLfHSgR9hGmhGnhGohGphGqhGrhzuhGshGt.BLhGuhGvhoCggof5nf5nf5nf5nfVMfxjfkXgZ3gcLfo8gnJggqggqggqgrmg4sfkXgZ4hGwgZ4gZ4ggnfkXgnJhGxhGyhD#hGzhGAhGBhGChGDhDehzLhGEhGFhGGhGHhGIhGJhGKhGLhGMhGNhGOhGPfSShGQhGR#6DhGShGThGUhGVhGWgcMggnfkWgzlgzlgzlgzlhz1hz1gzlgzl", +"hGXho2g4wg4xgWxhGYhGZf6#g4AhwthG0hG1hDAhG2hG3hwwhG4hG5hA#hG6hG7hG8hG9hH.hwFhDKgWNhH#hlFhDIhDIhDKevVhwFemzdrVdd3drUd91g0UgzVhwLhAkglbhDOhHagsthHbhHcfW4gHrgHsgzYgwhgwhgzYgzYgzYf3sf9yglfgd5gswgswglgglggd6gd6gd7gd6gd6gd7ghFgz6gDWhl7hHdhHehHfhHghHhhHihHjhHkhHlhDXhw2hHmhHnf9wf9xf3veT5eO3ew.hHohHphHqhHrgXfhHshHtg9oaITaITaITaITaITfqOc66aITaITew#emWcSMhHuhHvhHwhHxhtchHyhHzhHAf6YhHBhHChHDhHEhHFhHGhHHhHIhHJhHKhHLhHMhBdhHNhHOhHPhHQhHRhHShHThHUhHVhHWhHXhHYhHZhH0hH1hH2hH3hH4hH5hH6hH7hH8hH9hI.hI#hIahIbhIchIdhIehIfhIghIhhIihIjhIkhIlhImhInhIohIphIqhIrhIshIthIuhIvhIwhIxhIyhIzhIAhIBhIChIDhIEhyjhIFhIGhIHhIIhIJh.xf7HhcogmWgjlg.HhFlhIKhILhIMhINhIOhIPhIQhIRhIShITgJlhIUhIVhIWf3rgzZhIXhIYhIZhI0hI1hI2hI3hI4hI4hI5hI6hI7hI8hI9hJ.hJ#g1df0ahJahJbhJchJdhJehJfhJgg7ehn3gY8gV#hFZhy3hJhhy4hJihJjhJkhJlhJmhJnhJohJphJqhJrhJshJthJugZmhJvgZmhdghJwhJxe9UfwGhJyfD2hGahGahJzhvzhvyhvzfkrhvAhJAhkEf8#hJBgZ2fxkhJChJDhJEhJFhJGhJHhJIhJJhJKe0cffteQdeLveLufGWfjFfjFfjFeQieQieQieQieQieQiffvffvfrOeLvgCBeVdeZ4eVdgCBeVegVPeVdexsexseQieQiffuffuffuffvffvffuffuffufjFfOzfOzgRUfKSfOzg.KfUIfUKguXfUMhJLfX0fUMfX1fPefYzfHNfHPg3phJMhJNhJOhJPhJQhJRhJShJThJUhJVhhehJWhJXggof5ogcJgcJf5ofVMfSDgvdgZ3gR9gcLgcLgnJgkwgkwggqg4shdjgnHgZ4gZ4ggnggnggnggngrjhJYhJZhJ0hJ1hw#hDchJ2hJ3hJ4hJ5hJ6hGEhJ7hw#hJ8hJ9hJ9hK.hK#hKahKbhKchKdhGRhKefz2hKfhoZhKgfIafo9gcKg4tgzlgzlgzlgzlgzlhz1gzlgzl", +"hKhho2gSEfM1fQshKif6#gWzhKjhKkhG1hlwhKlhKmhKnhG4hDChDDhKohKphKqhKrhKshH.hDKhh1hpahlFhh1hKthDKgdPhwFemzdrVd.WdnxhAigWQgzVhwLhAkglbglchKugstgstgsthKvgwhgzYgzYgwhgwhgwhgwhgzYf3sf9yglfgd5gswgswglgglggd6gd6gd7gd7glggd7ghFg5#hKwhKxhKyhKzhKAbkShKBheqhKChKDhlMhKEhKFhKChKGghIf6Ef9zeO3eO4ew.eAIhHngHChKHhKIhKJhKKhKLfqNfqOc66aITaITfqOfqOaITaITew#emWcBlhKMhKNhKOhKPhHyhKQgwuhKRdJfhKShKThKUhKVhKWhKXhKYhKZhK0hK1hK2f39hK3hK4hK5hK6hK7hK8hK9hL.hL#hLahLbhLchLdhLehLfhLghLhhLihLjhLkhLlhLmhLnhLohLphLqhLrhLshLthLuhLvhLwhLxhLyhLzg5RhLAhLBhLChLDhIohLEhLFhLGhLHhLIhLJhLKhLLhLMhLNhLOhLPhLQhLRdC6hLShLThLUhLVhLWhLXhLYhLZhgahL0gbRhL1hL2hL2g.HgjlhL3hL4hL5hL6hL7hL8hL9hM.hM#hMahMbhMchMdeFqfW4g4ThMehMfhMghMhhMihMjhMkhMlhMmhMnhMohMpfPchMqhC#hC#hMqe.#hMrhMshMthMuhMvhMwhMwhMxhMyhMzhMzhMzhCChMAhMBhMChMDhMEhMFhMGhMHhMIhMJhMKhMLhMMhMNgjshMOhMPhJvguzfHafVjhMQfwGfVjhJyhJyhJyhGahJzhzffVkhMRhhpfHzg7ufP.fxig7GhMShMThMUhMVhMWhMXhMYhMZhM0hM1e4LeQdeQieQgfvOgcpffvffveQieQieQieQieQieQiffveQihM2eLvgCBgCBeZ5eZ4eVdeVehvNhvNeZ4eZ5eLveQie4Ne4Ne4Ne4Ne4Ne4Ne4Ne4NfjFguXg.Kg.Kg.KguXeQeeQfeQehM3fX0fX0hM4hM5fX0fX1fX1fPdfEhhr9ggrhM6hM7hM8hM9hN.hN#hNahNbhNchNdhNehNffP.gvdf8mf5nf5of5ofD0fSCgcKgR9gR9ggpggpgnJgkwggqftegS.fkXggnggnggpggpgKrfo9ggnhNghNhhNihNjhNkhNlhNmhNnhNohNphNqhw.hNrhNshNthNuhNvhNwhNxhNyhNzhNAhNBhNChNDfwahoYhsIhNEgSxgrjgcKhNFgzlgzlgzlgzlgzlhz1gzlgzl", +"hz2gKYfM0g4zhKif6#g4AhNGhNHhNIhNJhKlhNKhNLhwwhNMheehNNhNOhNPhNQhNRhH.hwFhh1hlFhlFhh1hDJhDJhDKerjemzdrVhNSdnxhNThDMhNUhNVhNWglbglbhDNhKuhNXgsvgsvhNXgsvgwhgwhgwhgwhgzYgzYgW2f6Df9ygd5gPdgswgswglggd6gd7gd7gd7gd6gd6hNYhNZhN0hN1haDhN2hN3hN4fedbkShHlhN5hN6hN7hN8hN9hO.hO#f6Ee75eO3eO4ew.eAIeAJeAJhOahObhOchOdhObfqNfqNew#ew#fqOfqOfqOaITaITc66erxfiBhOehOfhOghOhhOiedlhOjhOkhOlga3hOmhOnhOohOphOqhOrhOshOthOuhOvhOwhOxhOyhOzhOAhOBhOChODhOEhOFhOGhOHhOIeZphOJhOKhOLhOMhONhOOhOPhOQhORhOShOThOUhOVhOWhOXhOYhOZhO0hO1hO2hO3g53hO4hO5hO6hO7hO8hO9hBBhP.hP#hPahPbhPchPdhPehPfhPghPhhPihPjhPkhPlhPmhyhhPnhPohPphPqhPrhPshq1gbQgmWgb1hPthFlhL2gmWgjmhPugfChPvhPwhPxhPyhPzhPAhPBhPChPDhPEhPFhMeeFshPGhPHhPIhPJhPKhPLhPMhPNhPOhPPhPQhPRhPSguZhaThPThC#haTe3BhPUhPVhPWhPXhPYhPZhP0hP1hP2hP1hP3hP4hP5hP5hP6hP7hP8hP9hQ.hQ#hQahQbhQchQdhQehQfhQgfEkhQhhQgh#oh#ohQihJxhMQhMQhMQhQjfVjhJyhJygcIhQkfgkhQlgf8hJBhQmggoefAcLBhQnhQohQphQqhQrhQshQthQuhQvhQwesSeQdeQiguXfvOgcpffvffveQiffvffvffvffvffvfjFeQifrOeQheZ5eZ5eZ5eZ4hvNeZ5eZ5gVPeVdeVdeVeeLveVeeQdeQdeVeeVeeLveQdeQdeQifjFfGWg.Kg.KeQgeQeeQeeQghQxeQfeQffX0hM5hM5hM5fUMfPefSlfwSg4shQyhQzhQAhQBhQChQDhQEhQFhQGhQHhQIhQJhQKfHxf8mf5nf5nf5nfDXfkYfo6gZQgcLfo8gKrgnJgnJgkwggqgrmgS.gS.ggpggpggpgKrfkXgj4ggnhQLhQMhQNhQOhQPhQQhQRhQShQThQUhQVhQWhQXhQYhQZhQ0hoIhQ0hQ1hQ2hQ3hQ4hQ5hQ6hzXhQ7hQ8hQ9fSFgj4gcKftdgzlgrMgzlhz1gzlgzlhz1gzl", +"gvSfM0g0yhKif6#gWzhNGhR.hR#hRahRbhRchRdhz6hDBhRehRfhRghRhhRihNRhwFg0Kg0KhlFhlFhh1hDJhDJemyhRjdiVehCf#XhRkhNThDMdwdhNVglbglbglbhDNhKugldhNXgsvhNXhNXhNXgsvgwhgwhgwhgwhgW2f9yf9ygd5gswgswgswgswglggd6gd7gd7gd6gd6gz6heJhRlhRmhRnhRohRpherhRqhaCherhKDhRrhlNhRshRthRuhRvf6Ee75eO3eO4emUeAIeAJeKgeKgfmLfqNfqNfqNhRwfmLeKgew#eFufqOfqOaITaITaITew#fiBcXyhRxhRyhRzhKVf9PhOjhRAdJhhRBhOmhRChOmhOnhRDhREhRFhOqhRFhOwhRGhRHhRIhRJhRKhRLhRMhRNhROhRPhRQhRRhRShRThRUhRVhRWhRXhRYf6OhRZhR0hR1hR2hR3hR4hR5hR6hR7hR8hR9hS.hS#hSahSbhSchSdhSehSfhSghShhSihSjhSkhSlhuphSmhSnhSohSphSqhSrhSsa9DhSthSuhSvhSwhSxhSy.Ye.WchSzhSAhSB.7OhSCgbQgjmhSDhSEgf.hL1gmWgmWgfjgxrhSFhSGhSHhSIhSJhSKhSLhSMhSNhSOhSPhSQeT4hSRhSShSThSUhSVhSWhSXhSYhSZhSZhS0hCHhS1eGQhS2hC#gzZhPTf0dhS3hS4hS5hS6hgThS7hS8hgThS9hT.hJihT#hTahTbhTchTdhTehTfhTghThhTihTjhTkhTlhTmgZNfHTfHTfHTfEkhMPhzcf5ahTnhTohTphTpfwGhTpfglfglhzAhvyhTqfHyfYGhTrgZQggofp.hTshTthTuhTvhTwhTxhTyhTzhTAhTBhTCexqe4NffvfGYfvOeGJffvffvffvffveQieQiffvffvffvffvfrOeVfhTDeZ5eZ5hTDgZPgZPhvNg3MgVPgCBexseZ4eZ4eZ4eVeeVeeVeeVeeVeeVeeLveQifjFeQgeQgeQghQxhM3hQxeQgeQfhTEhTFeQfeQfeQfhM5fX1fPdfABhdjhTGhTHhTIhTJhTKhTLhTMhTNhTOhTPhTQhTRhJzgjNfVMf8mf5nf5ofDXfSDggogR9gcLfo8ggpgcLftegkwgkwggqgrmg4sgKrggpggpgKrggpggngcMgj4gGBhTShTThTUhTVhTWhTXhTYhTZhQXhT0hT1hT2hDdhT3evghT4hT5hT6hT7hT8hT9hU.hzXhU#hUaeaOfSAgj4gcKfo8grMgzlhz1hz1grMgzlgGWgGW", +"hUbfQshKif6#gWzhUchR.hUdhRahUehUfhRchwvhUghUhhUihUjhUkhUlhNRhDKgDCg0KhlFhsZhh1hDJhDJemyhRjeOGemzehChRkhNTd91dwddIPhNVhNVglchDNgd4gldgldgldgsvgsvhNXhNXgwhgzYgwhgzYgzYf9yf9yglfgswgswgswgswglggd6gd6gd7gd6gd6gz6hUmgLghUnhUobkUhUphUqhUrhKDhUshUthUuhUvdwthUwhUxhUyhACe75eO3eO4emUeAIeAJeKgeKgfmLfqNfqNfqNfmLfmLeKgeKgeAJfqOfqOfqOaITc66c66emVcBlhUzhUAhUBhUCf9QhUDhbfhUEhUFhOnhUGhUHhRChREfeChRDhOphUIe3LhUJhRGhUKhRHhULhUMhUNhUOhUPhUQhURhUShUThUrhUUhUVhUWf6Of3GcxccxchUXfCBbZhbZhbUpbZhhUYhUZhU0hU1hU2hU3hU4hU5hU6hU7hU8hU9hV.hV#hVahVbhVchVdhVehVfhVghVhhVihVjhVkhVlhVmhVnhVohSuhVphVqhVr.zc.VahVshVthVuhVvhVwg2zgjmhFlgf.hVxhVygmWhjKhjKgfAhVzhVAhVBhVChVDhVEhVFhVGhVHhVIhVJhVKhVLhiihVMhVNhVOhVPhVQhVRhVShVThVUhVVhVWhVXhVYhVZhV0hJ.hV1gHugzYhV2hV3hV4hV5hV6hV7hV6hV6hV8hV9hW.hMDhW#hWahWbhWchWdhWehWfhWghWhhWihWjhWkhWlhWmfEdfEdfEdhWnhWohMOgjsgFWhrWhWpfHChvxhWqhzAhvyfkrhWrgf9hWshWthWugZ3g4sgddhWvhWwhWxhWxhWyhWzhWAhWBhWChWDdS7exseLvgcpfGYfvOgcpffvffvffveQieLveQieQieQieQheQheQheVfhTDhvNhWEgZPgZPgZPhTDhWFgZPgZPeZ4e4Ke4KhTDhTDe4Ke4Ke4KeVfeVfeVfeQhfrOg3LeQghQxg3LhM3g3LhQxeQfhTFhTFhTEhTEhTFhWGfX0fPefEhgRVfEEhWHhWIhWJhWKhC1hWLgfahWMhWNhWOhWPhWQhWRfVMgGxgcJf5ofHwfAVgGzfo7gR9g0rfo8gKrgnJgnJgo.go#ggqgrmgS.gKrfkXfkXfkXggngnHgj4gGAgrmhWShWThWUhWVhWWhWXhWYhWZhW0hW1hT2hW2hW3hW4hW5hW6hT5hW7hW8grJhW9hX.hzZhX#fSBefAhdJggngcLgzlgzlgzlgzlgzlhXahXahz1", +"hXbhGYf6#gWzhXchR.hUdhXdhXehXfhXehXghUghXhhXihXjhXkhXlhh2emygDCg0KhlFhlFhlFhDIhXmhlFhRjhRjevXevYevWhXnd91dwddIPgsrglbglbhDNgd4gaGgaGhNXhNXgsvgsvhNXhNXgsvgzYgwhgwhgW2f9yf9yghEglggswgswglggd6gd7gd7gd6gd7gz6hXohXphXqhXrhXshXthXqhRrhXuhN6hXvhUthXwhXxhXyhXzhXAhXBhO#erueO4emUeAIeAJeKgeKgfmLfqNfqNfqNfmLfmLfqNeKgeKgfqNfqNfqOaITaITcFCemWcBlhXChXDhXEhXFgeshXGg1uhXHhXIhXJhOnhXKglLhRChOnfiQfiQhXLhXMhXNhXOhXPhXQhXRhK0hXShXThXUhXVhXWhXXhUvhONhXYgPyhUWhUWhUWhUWfmRcbGhXZcbEhX0hX1hX0hX2hX3bKRhX4hX5hX6hX7hX8hX9hY.hY#hYahYbhYchYdhYegXThYfhYghYhhYihYjhYkhYlhYmhYnhYohYphYqhYrhYshYthYuhYvhYwhYxhYyhYzhYAhYBhYCgjlgjmgjmgf.h.vhYDf7HhYEgbQgfAgYuhYFhYGhYHhYIhYJhYKhYLhYMhYNhYOhYPhYQhYRhYShYThYUhYVhYWhYXhYYhYZhY0hY1hY2hY3hY4hY5hY6hY7hY8gHuf3rhY9hZ.hZ#hZahZbhZchZdhZehZehZfhZghZhhZihZjhZkhZlhZmhZnhZohZphZqhZrhZshZte5tfYsfHSfHSfABhZuhZvhZwgfPfEkfEkgZlhZxhZxhQlhQlhWrgjrhZyhWtfYFgg#hWuggpgdcfE8hZzhZAhZBhZChZDhZEhZFhZGhZHhZIhZJeGLeLvfvOfvOgcpfjFfjFffveQieQieQheQheQheQheQhfrOeQhhWEhTDhWEgZPgZPgZPhZKhWEhZLg3MhvNhTDe4KhTDeZ5hTDhTDhZMhZNhZNe4KeVfhM2hGlhZOhZOg3LhGlhM3g3LhZPhWGeQeeQehTFhM3hTEeQfhM5hJLfSlhQmhZQhZRhZShZTgOfhZUhZVhZWhZXhZYhZZhZ0hZ1hZ2gvdgvcf8mf5ogvdhhpfxigyWg3pgR9gnJftegcLggpgo.gkwgkwggqftegS.fo9fo9fxifkXggngZ4gGAefAfSFgvhhZ3hZ4hZ5hZ6hZ7hWYhWZhQXhZ8hZ9h0.hW4h0#h0ah0bh0ch0dh0eh0fh0gh0hh0igV6efAh0jggnfkWgzlgzlgzlhz1hXah0kh0lh0l", +"h0mhhRf6#hXch0nhUdh0ohUehXfhRchNKh0ph0qh0rh0sh0thXlhwGhh1gDCg0Khh1hlFhlFhDIhpagWNh0uhRjhDLevYevWh0vd91h0whh9ghDhNVglbe3Bgd4gaGgldgldhNXhNXgsvgsvhNXhNXgwhgwhgzYgzYf3sf9yghEgd5gswgswglggd6gd6gd7gd7gd7gz6gLgh0xh0yhRphUth0zhXqhXqh0Ah0BhN6haCh0Ch0Dh0Eh0Fh0Gh0HhO#eruew.emUeAIeAJeAJfmLfmLfqNfqNfqNfqNfmLfmLeKgeKgfqNfqNfmLaITaITaITemWc2ncSMgAgh0Ih0Jh0Kh0Lg1ug1udJhhUFfaphRCfiPfiPfiPh0MhOoh0Nh0Nh0Nh0Oh0Ph0Qh0Rh0ShXRh0Th0Uh0Vh0WhXwh0XgPygPyh0Yh0Zh00h00h01gPycsQh02h02h03hRYhRYh04h05h06h07h08h09h1.h1#h1ah1bh1ch1dh1eh1fhIlh1gh1hh1ih1jh1kh1lh1mh1nh1oh1ph1qh1rh1sh1th1uh1vh1wh1xh1yh1zh1Ah1B.vYh1Ch1Dh1EhYCgbQgjmgjmgf.hPth1Ff7HhL0gbQgYth1GhILh1Hh1Ih1Jh1Kh1Lh1Mh1Nh1Oh1Ph1Qh1Rh1Sh1Th1Uh1Vh1Wh1Xh1Yh1Zh10h11h12h13h14h15h16h17h18h19haIeYVh2.h2#h2ah2bh2ch2dhZdh2ehZbh2fh2gh2hh2igx0h2jh2kh2lh2mh2nh2oh2ph2qh2rh2sfLKfAHfEjfEjh2th2uhZvhQgfEkh2vfHTfHTh2vhQmg3Ng7VgN9fLKfYFfYFfYFgg#h2wgkvhZQh2xh2yh2zh2Ah2Bh2Ch2Dh2Eh2Fh2Gh2HeFkesSeGKg.1fvOfjFfjFffveQieQheQhfrOeQheQheQheQhhGleZ5hZKhZLhZLhWFhZLhZLhZLhZLhvNh2IgVPhvNhTDeZ5hTDhWEhZMhZMhZNhZNhZNe4KeVgeQhg3LhGlfrOh2JhM3hGlhZPh0XhM3hQxhQxhM3hTEhTEeQfh2KfSkhr9gdch2Lh2Mh2Nh2Oh2Ph2Qh2Rh2Sh2Th2Uh2Vh2Wh2wgGzf8mgvbf5nf5ofHxfSDfkVgR9h2Xfo8ggpgKrggqgkwgo.gkwgkwggqfteg4sfo9fkYfSCfo9gcMhdJfo9fkYg#ig#igrmh2Yh2Zh20h21h22h23h24h25h25hW3h26h27h28h29h3.h3#h3agV6h3bh3cgyWf5oh3dgKRg4tgzlgrMhz1hXah0kh3eh3fh3g", +"h3hh3ihlvh3jh0oh3khRdhXfhRch3lh3mh3nhUih3oh3phXlemyhh1g0Kg0Khh1hsZhlFhh1h3qhlFemyhRjhRjemzevWdrXd91dETdwdh3rdwffJSfNvfQWgaGgaGgldgldhNXhNXgsvhNXhNXgsvgwhgwhgwhgW2f6DghEgd5glggswgswglggd6gd7gd7gd7gz6h3sh3th3uh3vhUoh3wh3xhXqh3yh3zh3Ah3Bh3Ch3Dh3Eh3Fh3Gh3Hh3Ieruew.emUeAIeAJeKgfmLfmLfmLfmLfmLfqNfqNfmLfmLeKgeAJfqNfqNfmLfmLeKgemWc2ncFBhHuh3Jh3Kh3Lh3Mg1vhbfh3Nh3Oh3PfiPhOnh3Qh3Rh3Sh0Mh3Th3Uh3Vh3Vh3Wh3Xh3Yh3Zh30h31h32h33hUrh34h35h00h01h36h37h0Zh01h00gPygPygpogpoh38h39h4.h4#h4#h4ah4ah4bh4chXwh4bh4dh4eh4fh4gh4hh4ih4jh4kh4lh4mh4nh4oh4ph4qh4rh4sh4th4uh4vh4wh4x.yRh4ybb3h4zh4Ah1xh4Bh4Ch4Dh4Eh4Fh4Gh4Hh4If7HgbQgbQhq0h4JhVyhcogbQhq1g2zgYtg6EgYvh4Kh4Lh4Mh4NhVXh4Oh4Ph4Qh4Rh4Sh4Th4Uh4Vh4Wh4Xh4Yh4Zh40h41h42h43h44h45h46h47h48h49g8Th5.eOZh5#h5ah5bh5chIUhZdh5dhZdh5eh5fh5gh5hh5ih5jh5kh5lh5mh5nh5oh5ph5qh5rgR7fHRfSmg.5fsSfAIh5sgjTh5thQhh2th5ufwSfHPfLKfEgfEgfYFh5vh5vh5vh5wh5wh5xgo#fMwflEh5yh5zh5Ah5Bh5Ch5DhQqh5Eh5Fh5Gh5Hfv8esSgcpfGYfvOgcpfrOfrOfrOfrOeQheQheVgeQheVgeVgeVgh5Ih5JhZKh5KhZLhZKhZKhZLhZLhWEgZPgVPgZPhZMhTDhTDhWEhZMh5LhZMhZMhZNhZNeVfeVgeQhhM2hM2hGlhZPh2JhOMhONhUUhZPhQxeQehM3eQeeQfh5Mf4GfEdh5NeIMh5Oh5Ph5Qh5Rh5Sh5Th5Uh5Vh5W#3lh5XggognIfSCf8mgcJf5ogGzgR8gGzfo7g77g0rggpgKrgnJgo#gkwgo.go#go#ggqftegS.gvdfxifo9ggngj4gGAfo9fo9fSBh5YfSFh5Z#Zjh50h51h52h26h53h54h55h56h57h58h59h6.h6#h6ah6bh6ch6dh6egj4grlftdgzlgzlhz1hXah0kh3eh6fh3fh0l", +"h6gh6hgWBh6ih6jh6khXehRch3lh6lhXhh6mh6nh6oh6phh1hlFhlFhh1hh1hlFhlFhh1hDJhlFemydiVevXeOGdd0dM3d91dETehBdIPh6qfJSh6re3BgaGgaGgd4gldgldgldhNXgsvgldhNXgwhgwhgzYgzYf9yf9yghEglggswgswglggd6gd7gd7gd7gz6h6sh6th6uh6vh6wh6xh6yh6zh6Ah6Bh6Ch6Dh6Eh3Eh6Fh6Gh6HhaWh6Ieruew.emUeAIeAJeKgfmLfJTfmLfmLfJTfJTfmLfmLfmLfmLeAJeAJfqNfqNfmLeKgfTRemVcFBgAch6Jh6Kh6Lh6MhUDhbfh3Nh6Nh6OfiPhOnh3Rfeuh6Pfeuh6Qh6Rh6Sh6Th6Uh6Vh6Wh6Xh6Yh6Zh60h61eQfh62h00gPyh0Yh0Yf9Jh63h63h0Yh0Yh64gpogpoh65fu8fv#h66h67h67h66h68h69h7.h7#h7ae3Nh7bh7ch7dh7eh7fh7gh7hh7ih7jh7khE5h7lh7mh7nh7oh7ph7qh7rh7sh7th7ubteh7vh7wh7xh7yh7zh7Ah7Bh7Ch7Dh7Eh7Fh7Ggjlh.xgfAgf.h7HhVyhVyhcog2zgYtg2zh1Gg2Bh7Ih7Jh7Kh7Lh7Mh7Nh7Oh7Ph7Qh7Rh7Sh4Th7Th7Uh11h7Vh7Wh7XhChh7Yh7Zh70h71h72h73h74h75h76h77h78h79h8.h8#h5ch8ah8bh5dh8ch8dh8eh8fh8gh8hh8ih8jh8kh8lh8mh8nh8oh8ph8qhWRh8rh8sh8tgJOgJOfw5fLugfOh2tgfOh8ufHSfsUh5vgYsh8vh8vg2yg2yh8vh8wgfGhz1fQafhqh8xh8yh8zh8Ah8Bh8Ch8DhQoh8Eh8Fh8GgUxfXWeLvfGWguXfvOgcpeLufrOfrOeQheVgeVfeVfeVfeVfeVfhvNh8Hh8Ih8JhZLhZKhZKh8Kh8LgZPhZMhWEgZPhWFhWEhWEhvNhWEh8Lh8LhWEhWEhZMhZNh8Mh8NhM2hM2hM2hGlh8OhZOhWGh0XhUUhUUh8PhQxhM3hQxeQeh8QfPefHPh#xh8Rh8Sh8Th8Uh8Vh8Wh8Xh8Yh8Zh80h81h82h83h84fD0f8mf5nf5nf5ofSDfHwh85g3pg0rfo8gS.gnJgnJgo#gkwgo#gkwgkwgnJggpfkXfkXfo9ggnggnhdJgrjfo9fo9grjg#ifSBh86h87h88h89h9.h9#h9ah9bh9ch9dh9e#2Rh9fh9gh9hftbh6ch6dh9igyVh85ftdgzlhz1h0kh0kh3eh3eh6fh3ehXa", +"h3hhamho5h9jhNLhXghRbh9kh0ph9lh9mh9nh9oh9pg4Mhh1hlFhh1hlFhlFhh1hh1hDJhlFemydIOhRjeYIeF#drUdrXdETehBh9qghDgsrh9rfmJfNugd4gaGgaGgldgldgldgldhNXhNXhNXgwhgwhgwhf3sf6Dglfgd5glggPdgswglggd6gd7gd7gd7h9sh9th9uh6xh3xh9vh9wh9xh9yh9zh9Ah9Bh3Eh9Ch9DhN6hArf0fe74ev9ew.emUeAIeAJeKgfmLfqNfmLfJTfJTfmLfJTfJTfJTfmLfmLfqNfqNfqNfqNeKgfTRfNycBlcx.hUzh9Eh9Fh9Gh9Hh9Icx#h9Jh3OfaphOnh3Sfeuh9Kh9Lh9Mh9Ne8ch6Qh3Uh9Oh9Ph9Qh9Rh9Sh9ThUUh9UhUWhUWgHPh0Yh0Yh0Yf9Jh0Yh9Vf9Jh3Qh9WfqUfv#h9Xh9Xh9Yh66h67h9Zh67h90h90e3Oh91h3Ah92h93h94h95h96h97h98h99h7ji..i.#i.ai.bi.ci.di.ei.fi.gi.hi.ii.ji.ki.li.mi.ni.oi.pi.qi.ri.si.ti.ui.vi.wi.xi.ygfAgjmgf.h7HhSEhVyi.zgfAgfAgYtgfBh1Gg6Ei.Ai.Bi.Ci.Di.Ei.Fi.Gi.Hi.Ii.Jh7Si.Ki.Li.Mi.Ni.Oi.Pi.Qi.Ri.Si.Ti.Ui.Vi.Wi.Xi.Yh7Qh7Pi.Zi.0i.1i.2i.3i.4i.5i.6i.7i.8i.9i#.i##i#ai#bi#ci#di#ei#fi#gi#hi#ignHh3ci#ji#ki#lgJOi#mi#nfABi#oh5uh5ufEdfEigYsgYsg2ygb6gb5gb5gb5gfHi#ph3gg#PfBxfMyi#qi#ri#si#ti#ui#vi#wi#xi#yi#zi#Ahg#e9#frNguXfGWeLueLueLufrOeVgeVfe4Ke4Ke4Ke4Ke4KhZNh5Ii#Bh8Ih5IhZKh5Kh8Ki#Ch8LhWEhWEhTDhvNhWFgZPgZPgZPhZLh8Kh8Kh8KhWEhTDhZMe4KeVfh8NeVgeVghGlhQxhGlhWGhOMhUUhUUhONh8PeQghQxeQghTFfUMfEhhdkfpKi#Di#Ei#Fi#Gi#Hi#Ii#Ji#Ki#Li#Mi#Ni#OfHvftbfxjf5nf5nf5nfDXfkYgnIg77g77gGWggpggpggpgo#go#gkwgo#go#gkwfo8ggpgS.gS.gS.gnHgj4gGAgGAefAefAfo9fxjefAg#ii#Pi#Qi#Ri#Si#Ti#Ui#Vi#Wi#Xi#Yi#Zi#0i#1i#2i#3i#4i#5gyWfkWh0ghXah0kh0kh3eh6fi#6h3eh0khXa", +"i#7gWBi#8i#9hG2ia.hKmia#iaaiabiaciadiaeg4Mhh1hh1hh1hh1hh1hh1hh1hDJhwGemyh0uiafeJZeF#eAudrXdETehBh9qghDiagh9reYVfQWgd3gd3gd4gaGgldgldgldhNXhNXhNXhNXgsvgwhgzYf3sf9yglfglggswgswglggd6gd6gd7gd7iahiaiiajiakialiamianiaoiapiaqiariasiatiauh66iavf0af0ae73ev9eFtemUeAIeAJeKgeKgfmLfqNfmLfJTfJTfmLfJTfJTfJTfJTfqNfqNfqNfqNeKgfNyfNyf0jiawgD7iaxiayiazeP#g1vhbfiaAh6NiaBhRDiaCh6Ph9LiaDiaEiaFiaGiaHf3WiaIiaJiaKiaLca0iaMiaNhUWhXZiaOgHPh0Yf9Jh9Vh9Vh3Qh3Qh3QiaPgeAiaQfare8diaRh67h66iaSiaSh66h69iaTh69e3OiaUiaViaWiaXiaYiaZia0ia1ia2ia3ia4ia5ia6ia7ia8ia9ib.ib#ibaibbibcibdibeibfibgibhibiibjibkiblibmibniboibpfj8i.wibqi.ygbQh.xhFlhSEhVyhVyhVyibrgb3gb3gIVgYtgmVibsibtibuibvibwibxibyibzibAgUDibBibCh7RibDibEibFibGibHibIibJibKibLibMibNibOibPibQibRibSh8#h8#ibTibUibVibWibXibYibZib0ib1ib2ib3ib4ib5ib6ib7ib8ib9ic.ic#icai#6icbgQBiccf1Ticdh8tfPjfLIh8ufHPfsUg2yg2yiceicfh.wgb4gb5h8vi#ph3gicgfhqfMyichiciicjickiclicmicnicoicpicqicricsf7HgfKgRSfGWfjFeLufrOeQheVgeVfe4Ke4KhZNhZMhZMicth5Lh5Jicuicvicwh5Kh5Kh5Kh5KhZLhZLgZPeZ5eVdhZLgZPg3MhWFhZKh5Kh8Kh8LhWEhWEhZMhZNeVfh8Mh8Nh8Nh2JicxhGlhUUicyhWGh34h0XhUUhM3eQgeQghTFfULfSlgZ3fByiczicAicBicCicDicEhowicFeHYicGicHicIicJicKf8nf5ngcJf5ofVMfSDfkVg77g77g0rgcLgKrggpfo8go#gkwgo#go#go#fo8gnJftegKrg4sfkXggnh0jgrjgrjgGAfkYfkYf5ofo9fo9hZ3icLicMicNicOicPicQicRfHuicSicTicUicVicWgOkgnIicXh0ghZ2h0kh0lh0lh3fh6fh3eh0khXahz1", +"h6hhKjicYicZic0h0pic1ic2ic3ic4ic5ic6g4Mhh1hh1hh1hh1hh1hh1hh1hDJhwGhAhh0udiVhDLeE9dr0drXdETehBdIPghDfelh9reYVfQWfQWgd4fJPgd3gaGgaGhNXgldgldhNXgldgsvgwhgzYgzYf3tghEgd5gswgswgswglggd6gd6gd7hikic7hl1ic8ic9id.id#iaoidaidbh6Gidch69iddhV1f3sf3sfepeYXeAGeFteAIfqNeAJeKgeKgfmLfmLfmLfJTfJTfJTfmLfJTfJTfNyeKgfqNfqNfqNeKgfNyfJTf0hideidfeT3idgidhidihUDhRAh3Nidjh6OhRDh0Mh6PidkidlgHOidmidnidofveidpidqidridsidth9Uf9Jf3Gf9ZhUWiduh0Yh0Yh3Qh3QiaPhOnfiOfq0fq0farfaridvidwfv.h67iaTidxidyidzidAe3OidBidCidDidEidFidGidHidIidJidKidLidMidNidOidPg2cidQidRidSidTidUidVidWidXidYidZid0id1id2id3id4id5id6id7.t1id8id9ie.ie#gmVg2zi.yhq0hSEf4yhcoi.zhq0hgcg6BgIVgIVgfBgfBieaiebibuieciedieeiefiegiehieiiejiekieliemienieoiepieqieriesietieuieviewiexieyiezieAieBieCieDieEieFieGieHieIieJieKieLieMieNhSPieOiePieQieRieSieTicgieUh0lh5xieVgQBieWieWgb6g2yfEifHPfEhfYBieXg6zh.wh.wg6Bg6Agb6i#ph6ficgeSxieYieZie0ie1ie2ie3ie4ie5ie6ie7ie8ie9if.if#gjlfbhfKSfGWffveQheVgh8Nh8Mh8Mh8Mh8Micticticticth8Kicvh8Iicuifah8Jh8Jifbifbh8JgZPgZPgCBeZ5hvNhZLgVPhWFh5KhZKh5Kh8Kh8LhWEhWEhZNe4KeVfh8Nh8Nicxicxg3LhOMicyhWGhWGh34hUUhOMh8PhQxeQefULfHNgR9fZrifcifdifeiffifgifhifiifjifk.JYbtJiflfo3ifmfDWgcJf5nf5ofVMfD0gGzfo7g3pgR9gGWgcLggpggpfo8gnJgo#grMgo#ggpgKrgS.ftegS.fo9fkXgZ4gZ4fo9grjgyXgGAgGAfxifxjg#ifxkftgifnifoifpifqifrifsifticUifuh3cicWi#5ifvifwifwh0kh0lh3gh3fh3eh3eh0kifxh0khz1", +"ifyifzifAifBifCifDifEifFifGifHifIg4MgWNhh1hh1hh1hh1hh1hh1hlFhpaifJh0udiVeOGevXdr0dESdETdETdwdghDdwfhNVe3BfQWgd4gd4gd3gd3gd4gaGgldhNXgaGgldhNXhNXgsvgwhgzYgzYf3sglfgd5gswgswgswglggd6gd7gd7hikhl1h9shl3gz5gd6glgeFseAFifKeFrhyCgz5gd5f3sf0ee73eYXeAGeFteAIeAIeAJfNxeKgfmLfJTfJTfJTfJTfmLfmLfmLfJTfJTeKgeKgfqNfmLeKgfTRfNyf0hideidfidfifLifMifNifOh9IhXHdJhifPgh5hOofq8h9LgppifQifRifSifTa8ZifUifVifWifXhXYh35ifYcbFf9ZifZgHPh9Vh3Qh3Qh0MhRCif0faqglKif1e8gif2if3if4if5iaSif6if7if8if7idzif9idAig.ig#igaigbigcigdigdigeigfiggighigiigjigkigligmignigoigpi.figqibeigrigsigtiguigvigwigxigyigzigAigBigC#x#igDe9KigE#k2gfBgfjgfBibrh7Hi.zi.zi.zigFibrhgcgb3gIVgIVgfBh1GieaigGigHigIigJigKigLigMigNigOigPigQigRigSigTigUigVigWigXigYigZig0ig1ig2ig3ig4ig5ig6ig7ig8ig9ih.ih#ihaihbihcihdiheihfihgihhihiihjihkihlihmihng#Pihoihpi#6icbh5wgQBgfHgfHgfHh8vfEifEhfPjieXh.wg6Ag6Ag6AgfHihqihrihsihtihuihvihwihxihyihzhjPihAihBihBihCihDihEihFgiShq1ihGfOzffveLveVgh8Nh8Mh8Mh8Mh8MicthZNhZNhZMhZMh8Jh8Iifah8IihHicvifbicwicwihIgZPhvNgCBeZ4hvNhvNgZPhWFh5KhWFh8Jh8Jh8Kh8KhWEhZMh8MeVfh8Nh8Nh2Jh2JhZOihJihJhWGhWGhOMhWGihJhRWh34eQefUKfVshr9fWmihKihLihMihNihOihPihQihRihS.L2ihTihUihVifmfkZf5nf5nf5ofDZfSCgOjgyWg77g0rfo8gcLgnJgS.fo8gnJgrMgrMgrMgKRfkXhdjggpgKrfkXgj4fkYgj4gZ4gcMgcMgZ4gV5gGAgj4gvdfxjfDWihWihXgGUgGUihYihZgrkicVifvicWifui#4ih0ih1ih2h3eh3eh3fh3eh0kh0kifxh0lh0lhz1", +"hUchKkih3ic1ih4ih5ih6ih7ih8ih9g8IgWNhh1hh1hh1hh1hh1hh1hDJii.ii#h0uiiadIOeJZiibevWgSVdM2dwddABdrZdwfh9rfQWgd4gd4gd4fJPgd4gd4gldgldgldgldgldhNXhNXhNXgwhgzYgW2f6Df9ygd5gswgswgswglggd6gd6gd7hikhikhikhikglgglggd6gd7gd6gd6gaIgaHf9yf0ffW7e73e3CeO2eFtfqMfqNeAJeAJeKgfJTfJTfJTfmLfmLfmLfmLfmLfJTfJTfJTfmLfmLfqNeKgfTRfNyf0hiicidfiidf0hiieiifiigiihiiiiaAiijfaphOnfeuh9LiaEifRiikfQ8iiliimiiniioiiphXYh35h00fT3dJ2cxciduiiqh3Qh3Qh0MhOniirbfriisidvgeziitiiuiiviiwh67iixiiyiiziiAiiBiiCiiDiiEiiFiiGiiHiiIiiJiiKiiLiiMiiNidIiiOiiPiiQiiRiiSiiTiiUiiViiWiiXiiYiiZ#hdii0ii1ii2ii3ii4hccii5ii6ii7ii8ii9aFvij.ij#ijaijbijcijdh1GgfBijeigFigFigFh7HigFigFibrhgcgb3gb3gfBh1Gh1GgmUijfijgijhijiijjijkijlijmijnijoh#jijpijqijrijsijtijuijvijwijxijyijzijAijBijCijDijEijFijGijHijHijIijJijKijLijMijNijOijPijQijRijSijTijUfILijVijWieUh3gi#6icbh5wh5wgQBgfHh8wgQBijXijYgYsgb6g6AgfHgjkijZij0ij1fF.ij2ij3ieZij4ij5ij6ij7ij8hJFij9ik.ik#ikaikbikcgmThq1fvLfGWeQheVgeVfh8Mh8MeVfeVfhZNhZMhTDhTDhZNh8Lifbifaikdikdikeh8IicwicwifbhWFhvNeVdeVdeGLeVdhvNhZLhWFhZKhZKihIifbhZKh8Kh8LhZMhZNe4KeVfh8Nh2JikfhZOhOMhOMhWGhWGhOMh8Ph8PhOMh0XikgfX0fVsfYsikheXoikiikjikkiklikmiknikoikpikqikriksiktgcmfkZfxjgcJf5of8mfDXhv2gnIg77gR9g0rgcLfo8fteggpggpfo8fo8gnJgcKggngKrggpfteftefo9fkYgj4gj4gnHgZ4gnHgZ4gj4gGAgGAgGAfo9fo9fkYfxjihWikuikvgSyh0ghNFikwikxikyh6ch9ih3eh3fh3fh0lh0kh0kh0kh0lhz1h0lh3e", +"g8yhR#ikzikAikBikCikDikEikFhsZhwGhh1hh1hh1hh1hh1gWNhlFhwGhwGh0uiiahRjeJZeF#evWikGdESdETehAdABikHhNWfQWgd4gd4gd4gd3gd3gd4gd4gaGgldgldgldgldhNXgldgsvgwhgzYf3sf9yglfgswgswgswgswgd6glggd6gd7gd6gd6gd6glgglggd6glggd5gd5ghEghEf9yf0ff0ee73e3CeKfeO2fqMfqNeKgeKgeKgfJTfJTfJTfmLfmLfmLfmLfmLfmLfJTfJTfJTfmLfJTfmLeKgeKgfJTiicikIikJikKikLikMikNhwQikOiihhIZikPhOnh9Vh6Ph9LidniikikQa8YikRikSikTikUh62h01ikVdJ2dJ3ikWfeuh3Sh0Mh3QhOngeAhUHikXikYikZik0ikPik1ik2ik3ik4ik5ik6ik7ik8ik9il.il#ilailbilcildileilfilgilhiliiljilkidIillilmilniloilpilqilrilsiltiluilva#tilwilxilyilzilA#bwii6ilBilCid3#xcilDilEilFilGilHilIilJh1GijdgfjibrigFigFigFhBXhBXhBXilKijegYtgYtgYtgfBh1GhFnilLilMfLYilNilOilPilQilRilSilTilUilVilWhPzilXilYilZil0il1il2il3il4il5il6il7il8il9im.im#imaimaimbimcimdimeimfimgimhimiimjimkimkfpLimlimmimng#Pihoimoh3gi#6h5xgfGh5wh5wi#ph5wh8sh8sfYFi#pgjkimpimqimrimsimtimuimvimwimximyimzimAimBimCimDimEimFgVmimGimHgfEimIhLZfzEfvOeQhh8NeVfh8Mh8MhZNe4KhTDhWEhWEhZMhZMh8LimJihHimKde6ikdh8Ih8Ih5IihIhZKhvNeZ4eGLeQdeGLeZ5hWEhZLgZPh5Kh8Jifbh8Jh8KhZMh8LhZNh8MeVfh8NimLikficximMihJhWGhWGicyhWGhM3hOMh0XimNh5MfSkh5uh5NftNimOimPimQimRimSimTimUimVimWimXfttimYftaicKg#hf5nf5ogvcgvcfSDfkVfo7gZQgR9fo8ggpggpgS.gS.ggpfo8ggpggpggpgKrgcLggpfkXfkXfkXfkXfkXggnggnggngZ4ggngj4gGAefAefAgyXgrjgrjgrjgrjftcfo6hNFgnHgGAimZim0h6di#6h6fh6fh0lh0khXah0kh0lhz1h0lh0lh0l", +"im1im2im3im4im5im6im7im8im9hsZhDJhh1hh1hh1hh1gWNhwGin.hsZemyhwFerjin#eAveFeikGinadM2dwddR.dABiagfNvfQWfQWgd4gd3gd3gd4gd4gaGgd4gaGgldgldhNXhNXhNXgsvgwhf0cf3tgW2glfgswgswgPdglggd6glggd6gd6gd6glgglgglgglgglggaIgd5ghEghEhiif0cf0ee73e3CeKeeKffqMfqNeKgeKgeKgfmLf0hfJTfmLfmLfmLfmLfmLfmLfmLfJTfJTfJTfJTfmLeKgeKgfJTinbidee72inchKGindineinfingikOinhinieeHh7.injinkgTminlinmcJ2inninoinph62h0ZgLKdoIdJ3dObinqh3Sh0Mh0MhOnhOnhOnhOoinrinsintinuinvinwinxinyinzinAinBinCinDinEinFinGinHinIinJinKinKinLinMinNinOinPinQinRigeinSinTinUinVinWinXinYinZin0in1in2in3in4in5.E7in6in7in8in9io.io#ioaiobiocaFviodilGioeiofiogh1Gg2zgfBibrigFigFigFf7GhBXhBXigFhBXh.xgfjgfBgmVh1GhFnibsiohioiepjiojiokioliomioniooiopioqioriosiotiouioviowioxioyiozioAioBioCioDioEioFioGioHioIioJioKioLioMioNioOimkioPimjioQioReldijTijTijUihnijVgrKioSimoh3gh3eh5xh5xicbicbicbioTioTioTh5xh6fioUioVioWioXioYioZimwio0io1io2io3io4io5io6io7io8io9ip.ip#gmRgtIgmVipafzEfrPgcqh8Nh8MeVfe4KhZNhZNhZNhZNhZMhZMh8LhZKh8Ih8HihHi#Bh8HihHh8HihIhWFhvNeZ5eQde4Ne4NeQieGLeZ5gZPgZPh5KhZKifbhZKipbhWEipchZMeVfeVfikfhZOikfipdipeipfhZPh8PhOMh8PhM3hOMhUUh0Xh5Mipgi#oiphipiipjebmipkiplgnxipmipnipoippipqipripsiptfkZg#hgcJf5nfVMhofg#hgZ2hWRg77gR9g0rgcLfo8gKrgS.gS.ggpgcLfo8fkVfkVfkVgcLfkVfteftefteggpggpggpggnggnggnggnggngZ4gGAgGAgyXgvggvggvggrjgcKgGAfxigZ4ggnipugfGipvh6fh3ehXahXahXagzlgzlh3eh3eh0lh0l", +"ipwhG5ipxipyipzipAipBg8IhlFhh1hh1hh1hh1hh1hh1hwGipChawhlFg4MerjipDipEipFerkeFcdESehBd99dABdrZh6rfNufQWfQWgd4gd3gd3gd4gd4gd4gd4gaGgaGgaGgldhNXhNXgsvgwhf0cf3shiigPdgPdgswgswglggd6glgglgglggd6glggswgswglgglggaIghEf0ff0af0#f0afW7e3CeKeeKefqMfqNfqNeKgeAJfmLfJTfJTfmLfmLfmLfmLfmLfmLfmLfJTfNyfNyfmLfmLeKgfNyfNyf0hideipGipHidfipIipJipKipLipMipNipOeeIh68idAinjipPipQipRipSipTipUh62h62ipVipWcbHipXcsBipYh9VhOnhOnhOngh5hRDipZip0ip1ip2ip3ip4ip5ip6ip7ip8ip9iq.iq#iqaiqbiqciqdiqeiqfiqgiqhiqiiqjiqkiqliqmiqniqoiqpiqqiqriqsiqtiquiqviqwiqxiqyiqziqAiqBiqCiqDiqEiqFiqGiqH.vhiqIiqJiqKiqLiqMiqNhjCiqOgl8iqPiqQiqRiqShIKhgbgIVibrigFigFilKiqTiqTiqTilKhBXhgbhSCgmVgmVh1Ggp1iqUhL3ikwfVNiqViqWiqXiqYiqZiq0iq1iq2iq3iq4iq5iq6iq7iq8iq9ir.ir#irairbircirdireirfirgirhiriirjirkirlfMyirmimjirnirnirniroiroirpirqimlirrfILirsirtijWioSimoihph3gh3fh3fh6fh3eh0kh0lgzlgdggrng#niruirvioYirwirxiryirzirAirBhuNirCirDirEirFirGirHirIirJgtIimIi.yirKg.2fvMgcpeQhh8NeVfeZ4eZ5e4Ke4Ke4KhTDhZMhWEh8Jh8IihHh8Ih8Ih8IihHh8Ih5IgZPeZ5eVee4NfzKfRQffueLveZ5hvNgZPhZKh5Kh8JhZKh8Kh8Lh8LhZNeZ4eVfikfhZOikfipfipfipfipfhZPimMipfh8PhWGhWGh34fX0fPdfHPg4sfBzirLirMirNirOirPirQirRirSirT#mlirUirVirWifmg#if8mf5nf5ogvcfSCfxignIg77g77g0rgGWgcLgcLgKrgRVgZ3g0rgGWh85ftcgGzfkVgcLfkVfo9fo9fteggpggpggpggpggpggpgcKggngZ4gZ4gV5gGBgvggvgfp.fp.gKtgvhgyXgGAih2irXirYirYih1hXahz1hz1gzlh0lh3eh0lh0lh0l", +"hRairZir0ir1ir2ir3hh1hh1hh1hh1hh1hh1hh1hh1hlFin.ir4g8IgWNevVg0Qir5eF#fioir6ikGinadR.ir7drZfeleT2eYVfQWgd4gd4gd3gd3gd3gd4gd4gd4gd4gaGgldgldgldhNXgsvf3rf0ff3shiigHtgPdgswgswgswgswglggd6gd6glggswgswglggd6glfhRwir8ir9is.is#hiheFseKefCreKeisafmLeKgeKgfmLfJTfJTfmLfmLfmLfmLfmLfmLfmLfJTfJTfNyfNyfJTeKgeO5eKgf0hiicisbischC.isdiseisfisgikOikOishiiweeHh69hRVisiisjiskislismisnh9Uisoisphpoisqcblinqh3Sh3QhOnisrhOnhRDgh5h0NissistisuisviswisxisyiszisAisBisCisDisEisFisGisHisIisJisKisLcgnisMisNisOisPisQisRisSiqpisTisUisVisWisXisYisZis0is1is2is3is4is5is6is7is8is9it.it#itahSxitbitc.BFaBgitditeitfitgithiofg2Bh1GgYtgb3ibrilKilKilKiqTiqTiqTiqTiqTf7Ghgbhgbgfjgfjitiitih7IitjgR8h6bitkitlitmifnitnitoitpi#iitqitritsittituitvitwitxityitzitAitBitCitDitEitFitGitHitIitJitKitLitMitMitMitMitNitMitOioRitPirrimmioWijVirtijWioSieUitQitRitSitTgKSitUgrKfMwfEEitVitWij3ioYitXitYitZit0it1it2igSit3it4it5it6it7it8it9iu.gmTgfCiu#iuaiubiucfvKfrMgcpeVhh8NeVfe4Ke4KhTDhTDhTDhZNhWEhWFicuicuicvicuicvh8Hiudh2IhvNeZ4e4NfRQiuef4EfRQeZ8eodeZ5hvNgZPhZLhZKh5Ki#Ch8LhZMhTDeVfh8Nh8NhZOikfh8OipfipfihJihJihJh8PhQxhM2hM2frOg.KfShfLLgKriufiugeM7iuhiuiiujiukiuliumiuniuoiupeSkiuqfAoicKfxjf5nfVMgvcfDZfSDggohZ2g77gR9hXag0rfo8gGWgGWhXah2wh2whZ2fo7fo7gnIgKrfkVgZ2fo9grmfo9fkXfkVggpggpfteftefteggngcMgZ4gV5gGBgGBgGBgvhgyYgKtgvggvggyXgcMggnggnftcgrlfkWih2h0lh0lh0lh0lh3eh3e", +"ho6iuriusiutiuug4MgWNhh1hh1hh1hh1hh1gWNhlFipCgavhlFhDJhDKg0QeJ0eE9iuviuwedaiuxeFddR.dAEdrYeFpfqKeYVeYVfQWgd4fJPgd3gd4gaGgaGgd4gd4gaGgaGgldgaGhNXhNXf0ef0cgW2gHtgDNgHtgPdgPdgswgPdgswglggswgPdgswgd6glgiuyiuziuAiuBiuCiuDiuEiuFiuGfqLg8Th5.fmLeKgfNyfmLfJTf0hfmLfmLfmLfmLfmLfmLfmLfmLfJTfJTfJTfJTfmLeKgeKgfJTf0hidee72iuHiuIiuJiuKiuLhHyiuMhHyiuNiuOiuPiixiuQiuRiuSiuTiuUiuQiuVispiuWiuXiuYb34h6PiuZisrhOniu0fiOhOnfiOiu1iu2iu3iu4iu5iu6iu7iu8iu9iv.iv#ivaivbivcivdiveivfivgivhiviivjivkivlivmivnivohX6isQiqqiqqivpivqivrivsivtivuivvivwivxivyivzivAivBivCivDivEivFhqOivGivHivIivJivKivLivMivNa5#ivOivPivQivRivSivTgYtgb3gIViqTilKigFigFilKiqTiqTiqTijef7Gf7GhgbgYtgfjh1GibshFmivUivVivWhW9ivXivYivZiv0iv1iv2iv3iv4iv5iv6iv7iv8iv9iv9iw.iw#iwaiwbiwciwdiweiwfiwgiwhiwiiwjiwkiwliwmiwnitLitLitMitMiwoiwpirnflIijUiwqiwriwsiwtiwuiwviwwiwxiwyiwziwAiwBfQafMvfhsiwCieYiwDiwEiwFiwGiwHiwIiwJirFiwKiwLiwMiwNit5iwOiwPiwQiu.imIgxrijdijdiwRiwSijYiwTfvKfrMffseVheVgh8Me4Ke4KeVfeVfh8MhvNgZPiwUiudiwViwVh5IicuiwWg3MeVdeQdiwXiwYiwZiwZf4EffweZ8e4LhTDhvNgZPhZKhZKh8Kh8KhWEhTDh8Mh8NeQhhGlh2JhM3ipfipdimLiw0h8Nh8Nh8Mh8Mh8NeQhguXfUKfVsgR9iw1fddiw2iw3iw4iw5iw6iw7iw8iw9ix.ix#ixaixbepjgGwfD0f5ofVMixcguyfxjgOjhWRhTrg77hXagzlgzlhz1h0lh0ki#6i#6ixdifxh3eh0kgcLgKrgS.fkXftegrjfo9fo9fteftegrmgrmgrmgrmggnggngZ4gV5gGBgGBgGBfp.gKtgvggGBixegGAgnHgcKgcKgrlh85ftdhz1h0lh3ei#6h3eh3e", +"ixfixgixhixihh1hh1hh1hh1hh1hh1hh1gWNir4g0Pixjir4ixkgdPixlin#eYJd5siuwixmerkeFcdM1eAzfeleFjeroeFjfmJfmJeYVfNugd3gd4fQWfQWfQWfQWfQWgd4gaGgaGgldgldfTPf3rgwhgDJgDNgDNgDNgHtgHtgPdgswgswgswgPdgswglggzZixnixoixpixqixrixsixtixuixvixwixxeAFeFrfNyfNyfmLfJTfmLfJTfmLfmLfmLfmLfmLfmLfmLfJTfJTeKgfNyfmLeKgeKgfNyiicixyi#BixzixAixBixCixDixEixFingixGhPGiuPidBhOOinpixHixIixJhRWisoiuWixKbUoixLixMinjh0MhOnixNhOnixNfiOfiOiu1ixOixPcN4cwVixQixRixSixTixUixVixWixXixYixZix0ix1ix2ix3ix4ix5ix6ix7ix8ix9iy.cXJiy#iyaiybiyciydiyeiyfiygiyhiyiiyjiykiyliymiyniyoiypiyqiyrcxp#zkiysiyth.niyuiyviywiyxiyyiyz.LYiyAiyBiyCiyDd2ShuIgIVgIVijeilKigFibribrgIVgIVijegIVhgcgb3g.Bg.Bf7GgfAgfjibsiyEijfikxi#3hzBgrJgguiyFiyGiyHiyIiyJiyKiyLiyMiyNiyOiyPiyQiyRiySiyTiyUiyViyWiyXiyYiyZiy0iy1iy2iy3iy4iy5iy6iy7iy8iy9iz.itLiz#izaihKizbizcizdizeizfizgizhiziizjizkizlizmiznizoizpizqizrizsiztizuizvizwizxizyizzizAizBizCizDizEizFizGizHizIiu#iccijdijdhBWizJg.5h8siucizKfvKfvMfjDgcpeVheQheVgeQieQheQieZ4eVdizLizLh2Ih2Ih2IizLg3MgCBexsfzJiwYg.IgfIgfIiwZg6xg.seLweZ4hTDhvNhZLhZLhWEhWEeZ5e4Kh8NeQhffvfrOhGlhZOipfikfhZMhTDe4KeVfeVfh8Mh8NeQheLugRUfYAhTrfS8izMizNizOizPizQizRizSizTizUizVizWctbizXfH6gnGfVNf5nf5ofDZfDZfVMgV3gnIi#4g3phXahz1hz1h0lh3eifxioTicbizYh5xi#6i#6ifxh2XfkVfkXg4sfo9fo9fo9grmgrmgrmftegrmgrmgrmgcMggngZ4gV5ixegGBgGBfp.fp.gKtgvhefzgGAgj4ftcgnHh85g4tgzlh0lh0lh0lh0lh0l", +"izZiz0iz1hlFhh1gWNhh1hh1hh1hh1gWNir4g0Piz2iz3iz4iz5ixliz6ipEf#Yiz7iz8iz9e3qe.fe.gemLeFjeroeFjfJOfqLfNufmJfNufQWfQWfQWfmJfQWfmJfQWgaGgd4gaGhNXgldfTPglegsvgwjgDJgDNgDNgDNgHtgHtgHtgHtgHtgPdiA.iA#iAaiAbiAciAdiAeixrixsiAfiAgiAhiAiiihg8TfmLeKgfNyfJTfJTfJTfJTfmLfmLfmLfmLfmLfmLfmLfJTfJTeKgfmLeKgfNyerwfW8iAji#BiAke..iAliAmiAniAoiApikOiAqe#YeohiAriAsiAtiAuiAvbpiipfiAwiuWbPFiAxhX2injidBiAriAyiAriArh68fiOglMiAziAAhX1haOiABiACiADiAEiAFiAGiAHiAIiAJiAKiALiAMiANiAOiAPiAQiARiASiATix9iAUiAViAWiAXiAYiAZiA0iA1iA2iA3iA4iA5iA6iA7iA8iA9iB.iB#iBaiBbiBciBdiBeiBfiBgiBhiBiiBj.QyiBkiBliBm.zdiBn.Ck.Z3iBoiBpie#iBqiBrijeijeilKibrijegb3gb3gb4gb4gb4gb4gb3hgchgcgYthgbhgbgmVhVzhILijfiBsh3ciBtgE7iBuiv2iBviyGiBwiBxiByiBziBAiBBiBCiBDiBEiBFiBGiBHiBIiw.iBJiBKiBLiBMiBNiBOiBPiBQiBRiBSiBTiBUiy9iBViy6iBWiBXiBYiBZiB0iB1iB2iB3iB4iB5iB6iB7iB8iB9iC.iC#iCaiCbiCciCdiCeiCfiCgiChiCiiCjieuiCkiCliCmiCniCoiCpiCqiCriCsiCtgfAhBWiubirKiCtiCuiCvgcwiCwijYijYizKiCxgnsfvMfKTfOzfGWfOzfOzf4EffufnIfKQgRTgGlgVPgCBgVPeVdexqe4JfRQg.Igb6gb6gb6hYEiCygpVfjEeodeZ4e4KhWEhWEhZMhTDhTDeVeeQhffsgcpgcpeQjhM2hQxh8OipdimLh8Mh8MeVfh8Mh8NeQhfrOeQefShfLJikhizMiCziCAiCBiCCiCDiCEiCFiCGiCHiCIa49iCJiCKgGwg#gfxjf5ngvcixcfDZfDXh84h3cg77hTrh0kh0kh0lh3eioTiCLieVi#pimpizYizYh5xioTiCMgnIfkXftegrmftegrmgrmgrmgrmfteftefteftegrmggngZ4gV5ixegGBgGBgGBfp.fp.gGBf5ofkXggnfo6fo6h85gzlhz1hz1h0lh0kixd", +"iCNiCOipChh1gWNhh1hh1hh1hh1gWNhwGg0Piz2gaviCPiCQg0Qe7KeOHeFbiCReOLiCSiz9iCTe7Re.gedceroeroeFjeFjfqLfNufNufQWfQWeYVfmJfQWfmJfmJeYVfQWfNugaGgd4gaGfTPgleglegsvgDJgDJgDNgDJgDNgDNgDNgDNgHtiCUhN7iCViCWiCXiCYiCZiC0iC1iC2ixtiC3hKEiC4iihiC5fNyeO5fJTfJTfmLfJTfmLfmLfmLfmLfmLfmLfmLfJTfJTfJTfNyfNyerwerwfW8iC6iC7iC8iC9e4IiD.iD#iDaiDbiDciDdiDeeeIiDfiDgiDhiDiiDjiDkiDlf9SiDmbZfg02iDnidAiAreeHiAriAriArh68if9iDoiDphX1haOiDqiDriDsiDtiDuiDviDwiDxiDyiDziDAiDBiDCiDDiDEiDFiDGiDHiDIiDJiDKiDLiDMiDNiDOiDPiDQiDRiDSiDTiDUiDViDWiDXiDYiDZiD0iD1iD2iD3iD4#CoiD5iD6iD7iD8iD9#tX.U9iE.iE#iEaiEbiEchcgiEd.2biEeiEf#iiiBqh.AiEgijeijegIVgb4gb4gb4iEhgIViEhiEiiEhgIVijeijeijei.yhSCh1GhVzh1HijfiBsikxiEjiEkiEliEmfT.iEniEoiEpiByiEqiEriEsiEtiEuiEvicqiEwiExiEyiEziEAiEBiBKiECiEDiEEiEFiEGiEHiEIiEJiEKiwniELiEMiy4iENiEOiEPiEQiERiESiETgFbiEUiEViEWiEXiEYiEZiE0iE1iE2iE3iE4iE5iE6iE7iE7iE8iE8iE9iF.giKiF#iFaiFbiFciFdiFei.yiFffKJiFgipaiCtiCuiFhigGiFhiFhieWiCuhPuh.ziwTiFigb8fSig.Jg.Jgb8g.JiwYfRQfDifDifGVexqe4JexqfnIfnIfbiiFjg.Ig2yh8vg2yg6CiFkfDff7zgN8eLweoeeZ5hTDhZNe4KeVeeLwffsfrPfrMg.0fGXfrOhM2h2JimLikfh8MhZMhTDh8Miw0h8NhM2guXfULfEjgrmftNiFliFmiFniFoiFpiFqiFriFsiFtiFuiFvftDiFwfLYfVKf8nf5ofDZixcguyguyiFxh6efHRhTriFyifxh3ei#6iCLieVi#ph8wimpizYizYizYicbipuhZ2fkXfkXfteggpftefteftefteggpggpggpggpfteftegcMgZ4gV5ixegGBgGBgGBgGBgrjgj4gj4gj4ftcfo6h85gzlhXah0kifxi#6h5x", +"iFziFAhh1hlFhh1hh1hh1hh1gWNhwGg0PiFBiz3iCPiCQiFCeFaeJ1eOMeOIiFDgBieTPiz9eYMiFEeTQedcemLeroeroerofqKfNufNufmJfmJeYVfmJfNufNufmJfNufmJfmJfNufNufQWgaGgldfTPglehNXgsvgsvgwjgDJgDJgDNgwhiFFiFGiFHiFIiFJiFKiFLiFMiFNiFOiFPiFQiuBiFRhexiiif0hf0jfNyfJTfmLfJTfJTfmLfmLfmLfmLfmLfmLfJTfJTfNyfNyerwerwfW8erwfW8ixyiFSiwUfUHiFTiFUiFViFWixFipNiFXiFYh7.iFZiF0iF1iF2iF3iF4iuWbZeiF5ixPisiidBiAriDfiAriArh68h69iF6hRYb8Zb34ipQiF7iF8iF9iG.iG#iGaiGbiGciGdiGeiGfiGgiGhiGiiGjiGkiGliGmiGniGoiGpiGqiGriGsiGtiGuiGviGwiGxiGyiGziGAiGBiGCiGDiGEiGFiGGiGHiGIiGJiGKiGLiGMiGNcKcbbKiGOiGPiGQiGRiGSiGTiGUcoW.yziGViGWiGXiGYiBqhuIh.yiGZijegIVgb3gb3ijegIViEhiEhgIViEhiEhgfBgYtgfBgfjgfBh1Gg6EiG0izIim0iBsiG1iEjgmNiG2iG3iBviG4iG5iG6iG7iG8iG9iH.iH#iHaiHbiHciHdiHeiHfiHgiyQiHhiHiiHjiHkiHliHmiHniHoiHpiHqiHriHsiHtiHuiHviHwiHxiHyiHziHAiHBiHCicoiHDiHEiHFiHGiHHiHIiHJiHKiHLiHLiHMiHNiHOiwKiHPiHQiHRiBFiHSiHTiHUiHViHWiHXgxpiHYi.ygjlhFli.yizJi#ji#jiHZiHZiohi#jhVziFhiCuhPuieWgYsgYsgYsicegYsiceg6zg6ziFjfDhfDhfGTfDhfbifnIfzJfDgfKKfKKgIUh8vh8wicchIKhnrfrIffrgUyfnHexte4Ie4Ie4LeoeeZ8gN8frMfvMgcugcufvMfjFhGlh8Nh8NhZNhZMhZMhWEhTDh8Mh8NhM2eLufUKfHNgKrflHiH0iH1iH2iH3iH4iH5iH6iH7iH8iH9iI.iI#gn8fDVfkUfDWf5ofVMguyixcfDZhhpiIaimZfHRiCMixdh5xicbieVh5wgfGi#pihqimpizYizYipvh5xiCMfkVgGzfteggpggpggpggpggpggpggpggpggpggpftefteggngZ4gV5ixegGBgGBgyXgZ4gcKftcfo6h85fo7ih2h0kifxi#6ipvipvipv", +"iIbiIciz4iIdhh1hh1hh1gWNhwGg0PiIeiz2iIfiIfiIgiIheFaeOJiIiehFiIjgpXgBiiIkiIliFEiImeTQedcemLeroeFjeFpfJOeT2eT2fiAfNufiAfiAfNufNufiAeT2fiAeT2eT2fmJfQWfQWgaGfTPfTPfTPhNXhNXgsvgDJfeniIniIoiIph1.iIqiIriIsiItiIuiIviIwiIxiIyiIziIAiIBiicf0jfTRfNyfmLfmLfJTfmLfmLfmLfmLfmLfmLfmLfNyfNyerwerwerwf0jerwfW8iC6iC7icuizLeVjiICiIDiIEde6hHyiIFiIGiIHiIIiIJiIKiILikIiIMiINbPFiIOiIPisiidAidBiAriAsiAriAriIQcgehX1b34haOiIRiISiITiIUiIViIWiIXiIYiIZiI0iI1iI2iDWiI3iI4iI5iI6iI7iI8iI9iJ.iJ#iJaiJbiJciJdiJeiJfiJgiJhiJiiJjiJkiJliJmiJniJoiJpiJqiJriJsiJtiJuiJviJwiJxiBfiJyiJziJAiJBiJC.YciJDiJEiJFiJGiJHiJIiJJiJKibqiJLhuIhIKgYtgIViEhiEhgIVgIVijeijeijeijeiEhiEhgYth1Gh1GgfjgfjhBWiJMgYviJNim0iBsimZiJOiEkiEliJPiJQiJRiJSiJTiJUiJViJWiJXiJYiJZiJ0iJ1iJ2iJ3iJ4iJ5iJ6iJ7iJ8iJ9iK.iK#iKaiKbiKciKdiKeiKfiKgiKhiKiiKjiKkiKliKmiKniKoiKpiKpiKqiKriKsio2iKtiKuiKviKwiKxiKyiKziKAiKBgxViCmiCniKCiKDiKEiKFiKGiKHiKIiKJg.DfOpiCtiKKiKLiKMiKNhZ2h6dikyiBsipuiKOiCvhVziFhhVzgcwfYFfw0fYFfYFfYFfYFfw0g2yg2yiwYfRQfDgfzIfDgfRQfDgfKKiwXiFjiFjiKPgb5imIibshBWipaiKQfvLfnGffrfjDge7giCgE5e4Of7zfrMiKRiFiiKSipafrKfGWfrOh8Nh8Niw0iw0iw0iKThZMhZNh8Miw0hGlg.KfVsg0rhZQeldiKUiKViKWiKXiKYiKZiK0hkYiK1iK2iK3iK4e51gnGfDWf5ofVMfDZixcfDZgZlgN7iIaicWiK5hWticbgfGh8wgYsi#pgfGimpimpizYizYizYizYifxfkVgGzftefteggpggpggpggpggpggpggpggpftefteftefteggngZ4gV5ixegyXftcfkWih1i#6ixdh0kh0kifxi#6i#6i#6i#6ipvizY", +"iK6iK7hlFg8Ihh1hh1gWNhwGg0PiIeiz2iz3iCQiIgiK8iK8iIhiK9iL.iL#iLaiLbiLcfUHiLdiIliFEiImehOedceroeFjeFjerofJOfiAfiAfiAfiAfiAfJOfiAfiAfiAfJOfiAfiAfqKeT2eT2fNufQWgaGfQVgaGglehNXhS2iLeiLfiLgiLhiLiiLjiLkiLliF9iLmiLniLoiLpiLqg9giLrideiicf0herwfJTfmLfmLf0hfmLfmLfmLfmLfmLfNyfNyerwerwerwfNyf0jinbbBGiC6iC7iC8izLgGliLsiLtiLuiLviAjiLwf6UidxiLxiLyiLziLAideiLBiLCiLDiLEhR3isiidAidAe3Oiixh69h04cgeb34bZhiDqiLFiLGiITiLHiLIiLJiLKiLLiLMiLNiLOiLPiLQiLRiLSiLTiLUiLViLWc7eiLXiLYiLZiL0iL1iL2iL3iL4iL5iL6iL7iL8iL9iM.iM#iMaiMbiMciMdiMeiMfiMgiMhanpiMiiMjiMkiMliMmiMniBhiMoiMpiMqiMriMsiMtiMuiMviMwiMxiMyi.xiJLiMzhIKgYtgYtgYtgb4gb4gb4gb3gb3hgchgchgcgb4gb4gYtgfjh1GgfjiMAhuIiMBh1Hh1HizIiMCifviMDiEkiMEfS7iMFiMGiMHiMIiMJiMKiMLiMMiMNiMOiMPiMQiMRiMSiMTiMUiMViMWiMXiMYiMZiM0iM1iM2iM3iM4iM5#kxiM6iM7iM8iM9iN.iN#iNaiNbiNciNdiNeiNfiNgiNhiByiNiiNjiNkiNliNmiNniNoiNpiNqiNriNsiNtiNuiNviNwiNxiNyiNziNAg.uiNBiNCiNDiNEiNFiNGiNHiNIiNJhWRh5xixdicbh8wi#kiHZgcwi#jiCLiCLgg#iCLiCLiCLfYFgQBgQBiNKiKPiwXfDgfKKiwXiFjiFjiFjg.Hg.Hg.HhgdimIibsiCtirKiKSiubfvLfrIfnGfvNf7AfRLg6xiCyfrIipaiwTirKiwTiNLgRUguXh2Jiw0h8Niw0iw0iw0iw0iw0h8Mh8MhM2guXfYAhTrgrniNMiNNiNOiNPiNQiNRiNSiNTiNUiNViNWiNXiNYhwqicKgOjf5nf5of8mgc#fDZgGyhkEgf9iNZiN0hWtieVi#pi#pg2ygQBimpihqimpimpizYizYipvh5xg0rgS.gS.fteggpggpggpggpggpggpftefteggpggpggpfkVfkXfkXgcMgV5gCPfo7ipuh6dioTi#6i#6i#6ifxi#6i#6ipvipvipvipv", +"iN1iN2gdPg8Ihh1gWNhwGhh2iN3iN4iz2iz4iIgiN5iN6iN5iN7iN8iN9iN9iL.iO.f1dfOyiO#iLdiIliFEfCqedcemLeFjeFjeFjeFjfJOfiAfJOfJOfiAfJOfJOfJOfJOfJOfJOfJOfJOeFjeFpeT2eT2fNufQWgaGfmJhHFiOaiObiOciOdiOeiOfiOgiOhiOiiOiiOjiOkiFKiOliOdiOmipGidef0jf0jfNyfJTfJTfmLf0hfmLfmLfmLfmLfNyerwerwerwfNyfNyf0jinberwfW8iAjiC8iwVfRPiOniOoiOpiOqiOrinbiOsidxiOtiOuiOvh8Hde6iOwiOxbPFiOyiOziOAh91injiOBiOBiDpiIPiOCbZhiDqiDqiODiOEiOFiOGiOHiOIiOJiOKiOLiOMiONiOOiOPiOQiLSiORiOScXKiOTiOUiOViOWiOXiOYiOZiO0iO1iO2iO3iO4iO5iO6iO7iO8iO9iP.iP#iPaiPbiPciPdiPeiPf#9hiPgiJxiPhiPiiPjiPkiPliPmiPniPoiPpiPqiPriPsiPtiPuiPviPwiPxh.yiMziMzgYtgfBi.ygYtg6Bg6Bg6Bhgchgchgchgchgcg6Bg6Bi.yi.yg2zg2zgfjibshPuiFhiHZiPyiPzicXiPAiPBiPCiPDiPEiPFiPGiPHiPIiPJiPKiPLiPMiPMiPNiPOiPPiPQiPRiPSiPTiPUiPViPWiPXiPYiPZiP0iP1#YXiP2iP3iP4iP5iP6iP7iP8iP9iQ.iQ#iQaiQbiQciQdiQeiQfiQgiQhiQiiQjiQkiQliQmiQniQoiQpiQqiQriQsiQtiKIiQuiQveQyfGNiQwiNCiQxiQyiQziQAiQBiQCiQDiQEiQFiQGgf7gyWi#jh8whVzgcwieWgg#gg#iCLiCLieViCLiCLieVh5vh8vhL2hL2iKPgiGgfJiFjgiGiKPg.HgiGg.Hg.HhL2hIKiCtiCtiwSirKirKiubiFiiQHiQIiQIiQJiQKiKQiubh.zhPuieWieWizKfSieQeg3LhM2h8Nh8Niw0iw0iw0ikfikfh8NhM2g3LfULfHSiQLeldiQMiQNiQOiQPiQQiQRiQSiQTiQUiQViQWiQXiQYicKgZ2f5ofVMfVMixcgvcfVMgGygjNilMfHRi#jh5wgQBgQBgQBi#pihqihqimpimpizYizYizYioThWsgZ3hdjgS.fteggpggpggpfteftefteggpgcLgcLgcLfkVgZ2gZ2ftegcMgGAh85ipuicbizYipvipvipvh5xipvipvimqizYipvh5x", +"iK7iN2hwGg8IgWNhlFhAfiQZiQ0iN4iQ1iFCiQ2iQ3iQ4iQ5iQ6iN9ge5iL.iQ7fXXfOqfOxfUHiO#iLdiQ8iFEeTQedcemLemLeroeroeFjfiAfJOfJOfJOfJOeFjeroemLemLemLemLemLemLemLerofqKeT2fNuiQ9iR.iR#iRaiRbiRciRdiReiRfiRgiRhiRiiLmiOhiIuiRjiRkiRliRmiFSidef0hfTRfJTfmLfmLfmLf0hfJTfmLfNyfNyerwerwerwfNyfNyfNyf0jerwf0iixyi#BiRnh2IfKQiRoiRpiRqiRrikdixEiRsiRtiRuiRvixyiC6iRwiRwiRxiuXb34gTmiRyipPinkiRzckqiRAiRBinliRCiRDiREiRFiRGiRHiRIiRJiRKiRLiRMiRNiROiRPiRQiRRiA2iRSdxyiRTiRUiRVgpBiRWiRXiRYiRZiR0iR1iR2iR3iR4iR5iR6iR7iR8iR9iS.iS#iSaiSbiSciSdiSeiSfiSgiShiSiiSj.yNiSk#zkiSliSmiSnctbiSoiSpiSqiSriSsiMriStiSuiSvhqXiJLhIKgfjgYtiFgi.ygb3hgchgchgcgb2hFlhFlhFlgb2hgchgchgdg6Bi.ygfBgfBgxrilLiFhiPyiSwitjiSxiSyiSzggwiSAiSBiSCiSDiSEiSFiSGiSHiSIiSJiSKiSLiSMiSNiSOiSPiSQiSRiSSiSTiPWiSUiSViSWiSXiSYiSZiS0iS1iS2iS3iS4iS5iS6iS7iS8iS9iT.iT#iTaiTbiTciTdiTeiTfiTgiThiTiiTjiTkijNiTliGhiTmiTniToiTpiTqiTriwTiTsiFfhuIiTtiTuiTviTwiTxgOGiTygOGiTziQEiTAiTBiTCgR8i#pi#kgcwgb6gYsgg#gg#ieViCLiCLgg#fYFfYFh.wg.HhL2hL2g.HiFjgiGg.HiNKg.HgiGg.Hg.HhL2iTDiMAiwSiwSi#kirKiubiubhL0gmWgmWgjliuaicciwShFmh8sh8siFhiwSfSigRUg3LhM2h8Niw0iw0iw0h8Miw0ikfh2JhGleQgfUJfEjgrmftNiTEiTFiTGiTHiTIiTJiTKiTLiTMiTNiTOicHiTPekrgvefVMfVMfVMfDZfDZfHwgGyhJBiTQiTQiFhgQBgQBgQBgQBi#pgjkihqimpimpizYimpimpicbhWtiFyg0rgKrgS.gS.gS.fteftefteggpgcLgcLgcLgcLfkVfkVfkVggpfkXgvdfo7iTRgjjgmSimqimqimqimqimqiTSizYizYimpimp", +"iTTiTUhlFg8IhlFhsZiQZiTViTWiTXiTYiTZiT0iQ3iT1iT2g.sge5iN9gbGfXXfOvfOvfOqfROfUGiT3iLdiFEiImeTQeJ4ehOemLemLeroeFjfJOeroemLemLemLedcedcehOehOehOehOehOehOedcemLfyQiRniT4iT5iLuiT6bPJiT7iIxiT8hOQiT9iU.iLkiIsiU#iLliRkiUahY7iUbipGidef0hfTRfJTfmLfmLfJTfJTfJTfNyerwerwerwfNyfNyfNyfNyerwfW8fW8iAjde6iC8iwWfRPd0wiUciUdiUeiUfihHiUgiUhiUiiUjiC5gz0gLoiUkiUliUmiUniUoiABiUpiUphUYbPIbPIiRBiUqiF8iUriUsiUtiUuiUviUwiRLiUxiROiUyigbiUziUAiUBiUCiUDdF9iUEiUFiUGiUHiUIiUJiUKiULiUMiUNiUOiUPiUQiURiUSiUTiUUiUViUWiUXiUYiUZiU0iU1iU2iU3iU4iU5iU6iU7iU8iU9iU9bbGiV.iV#iVaiVbiVciVdiVeiVfiVgiVhfwiiViiVjhuIiJLiJLh.ygfAg6CiVkhgbgIVgIVibrhFlhFliVlgf.g.GgiGg.Hg.Hgb2gb2hgcg6Bg6AgMJi#pi#jiBsimZif#iVmiVniVoiVpiVqiVriVsiVtiVuiVviVwiVxiVyiVziVAhnAiVBiVCiVDiVEiVFiVGiVHiVIiVJiVKiVLiVMiVNiVOiVPiVQiVRiVSiVTiVUiVViVWiVXiVYiVZiV0iV1iV2iV3iV4iV5fbCiV6iV7iV8iV9izbc8Sh#ZiW.iW#iWafwGiWbiu#gmVhIKiwRijdgb4iG0iWciWdiWeiWfiWgiWhgrHgOGgk#iWiiWjiWkiWlicKizJgQBfYFh8vgb6fYFgg#gg#gg#fYFg2yicfieViwYg.Hg.Hg.Hg.HiKPgiGgiGiKPg.HgiGg.Hg.HgjliQHhIJiwRicciwSicciuaiKQhL0gjli.ygmViccizJh8siFhgcwi#jiWmiwSg.JfOzeLueVgh8NhZNiKTiw0iw0iKTiw0h2Jikfg3LfUKfPjggpf.ZiWnffPiWoiWpiWqiWriWsiWtiWuiWv.ZYiWwiWxiWygZ2gGzf8mf5nfDZguyfHwgGyfLsfYGiWzf8.ieWgQBgQBi#pimpihqimpimpimpizYizYimpizYicbicbh5xixdi#4fo7fkVfkXgS.gS.gKrgKrgKrgKrggpgcLgcLgcLgcLgKrfkXh6dgtIih1iWAimqgtIgfFimqipvizYicbizYgmSihq", +"iN2iWBiN1iz5hH#iWCiWDiWEiWFiWGiWHiWIiQ3iT1iWJiWKf4sfXUiL#iWLfKOfOufOvfOvfOxfOyiO#iO#iIliFEiFEiFEfCqeTQeJ4emLemLemLemLedcehOehOehOfCqiWMiWMiWMiWMiWNiWMemKeJ4iWOiWPiWQiWRiWSiWTiWUiWViWWiWXiT8iWYiLoiCYiLkiWZiRkiW0iLriW1iC8ikIiicinbf0jfJTfmLfJTfJTfNyfNyerwerwerwfNyfNyfNyf0jf0jfW8fW8iC6ixyi#BiwUgRTfGViW2iW3ixMiW4iDbifbiW5iW6iW7eKfiC5iW8iAjiW9iX.iX#iXaiXbbUqiXciXdiXeiXfiXgiXhiXiiXjiXkiXliXmiXniXoiXpiXqiUyiXrcsZiXscsZiXtiXuiXviXwiXxiXyiXziXAiXBiXCiXDiXEiXFiXGiXHiXIiXJiXKiXLiXMiXNiXOiXPiXQiXRiXSiXTiXUiXViXWiXXiXYiXZiX0iX1iX2iX3iX4iX5#ULiX6iX7iX8iX9iGTiY.hVsiY#iYaiYbiYchIKg6DiVkg6DgfjgYthIKgfjg.BgIVijehFliVliVlg.Gg.Gg.GgfJgfJiVliVlhFlibrhgcg6Agb5gfGioTifxiYdiYeiwyiYfiSziYgiYhiYiiYjiYkiYliYmiYniYoiYpiYqiYriYsiYtiYuiYviYwiYxiYyiYziYAiYBiVKiYCiYD.HkiYEiYFiYGiYHiYIiYJiYKiYLiYMiYNiYOiYPiYQiYRiYSiYTiYUiYViYWiYXiYYiYZiY0iY1iY2iY3iY4iY5eVziY6f8.hVzibtimIgfHiY7iEiiJNiY8fH9iY9iZ.iZ#hQ8iZaiQBiQBdPCiZbg0oiZce5siZdi#ph5vh5vgb6h8vg2ygYsgb6h.wgIUgb6g2yiNKg.Hg.HgiGg.HiwYg.HgfJiFjiKPgiGg.HgxqhL0hq1iFkhL0iTDiuai.ygjlhL0gjlgYtieaijdi#kiCviohiHZi#ji#jiZdhVzg6zf4EeQih8Nh8MhZNh8MiKTiw0iw0ikfikfhGlg3LhTFfD7gR9iufichiZeiZfiZgiZhiZiiZjiZkiZliZmiZn.J4iZoe0VfAVggofVMf5nfDZgvcfVMgGyfLsgf9iZpiKMh8riZdioTiCLiCLicbimpizYizYizYizYizYimpimpimpizYicbi#jiZdiZqfHRhTrg77gR9g0rgcLgZ3gKrgKrgKrggpgKrgS.ifxh8wh9iih2gfFimqgfFgfFizYipvimpimpgmSgmSimp", +"iZrf4wiZsiN2iZtiZuiZviZwiZxiZyiZziQ3iZAiT2g.tfRLiZBiTZiZCiZDiZEfKOfKOfKOfOqfOxfRPfUHiLdiWNiWNiIliFEfCqiImiImeTQedcehOfCqiWMiIliWMiIliIliLdiLdiLdiLdiLdiWMiZFiZGhHqiZHiZIiZJiZKiZLiRcixsiZMiZNiZOiZPiZQiOEiZRiZSiZTiRmiQ8hY7ikIinbf0jf0jfJTfmLfmLfNyerwerwerwfNyfNyfNyfNyf0jf0jinbh9IiZUixyiC7iRniwWgGle7YiZViZWipbiZXi#BiZYiZZiZ0eKefmLfNyiC6imKiZ1iZ2iZ3iZ4iZ5fXkiZ6iZ7iZ8iZ9i0.i0#i0ai0bi0ciRLi0diUxi0eiXqcsZiA2i0fcsZi0gi0hi0ii0ji0ki0li0mi0niUHi0oi0pi0qi0ri0si0ti0ui0vi0wi0xi0yi0ziUTi0Ai0Bi0Ci0Di0Ei0Fi0Gi0Hi0Ii0Ji0Ki0Li0Mi0Ni0Oi0Pi0Qi0Ri0Si0Ti0Ui0Vi0Wi0Xi0Yi0Zi00i01i02i03hBWh.yiVkiVkhIKgfBg.Bg.Bg.BgIVhgchFliVlg.GgfJfKLfKLfKLfKLfKLgfJgfJiVlhFlhgcgMJgjkicbh3ehz1i04i05f8LfZti06i07i08i09i1.i1#i1ai1bi1ci1di1ei1fi1gi1hi1ii1ji1ki1liYxiYyi1mi1ni1oi1pi1qi1ri1si1ti1ui1vi1wi1xi1yi1zi1Ai1Bi1Ca1Pi1Di1Ci1Ei1Fi1Gi1Hi1Ii1Ji1Ki1Li1Mi1Ni1Oi1Pi1Qi1Ri1SiFwho1i1Ti#khVzimIgMJgMJgMJiFhi1Ui1Ve5ZfAUi1Wi1Xi1Yi1Zi10grEi11i12i13i14iHZh8wgQBfYFgYsh.wgIUiNKiNKhgdh.wh5vgIUhL2hgdhL2g.HgiGiNKhL2giGiFjiFjg.Hg.Hi15hjKhLZiFifrIhL0hL0gmWgjlgjli.ygfBieagxri16iCviohiFhi#jipuiZqiCvgb7f7JfrOeVfe4KhZNhZNh8Miw0iw0i17ikfhGlhGlguXfYAh2XfZreggi18i19i2.i2#i2ai2bi2ci2di2ei2fi2gi2hi2ifLYgvefHwf8mf8mgvcfVMgvdgGzhJBgf9iWbh84hWRhZ2i#4i#4iZqhWtioTicbimpimpipvizYimpizYizYh5xiCLhWtgg#gg#gg#fYFieVfYFfYFgg#hWuiFyg0rgKrhdjgKrixdi#piTRiTRimpgmSizYh5xipvipvimpgmSgmSgmSgmS", +"i2jiZsi2ki2li2mhqYi2ni2oi2piT0i2qi2ri2sfRKfRLeTOi2ti2ui2vi2wi2xfKOfKOfKOfOvfOqfOxfUFfUHfUGiO#i2yiWNiWNiWMiIliWMfCqiWMiIliLdiLdiO#iT3iT3i2zi2zi2zi2ziO#fUHeVgiDohHqi2Ai2Bi2Ci2DiUpbxui2Ei2Fi2Gi2Hi2IiISi2JiZSixGi2KiQ8i2LiFSikIf0herwfJTfmLfmLfNyerwerwerwfNyfNyfNyfNyf0jf0jinbfW8iC6iAjiC7h8HiWOgVPe4Ji2Mi2Ni2Oi2Pi2Qi2Ri2Si2Ti2UhRwfJTiAjiW4iZ2i2Vi2WiAxi2Xi2Yi2Zi20i21i22i23hX6i24i25i26iLTi27i28iUyiUyi29i3.i3#i3ai3bi3ci3di3ei3fi3gi3hi3ii3ji3ki3li3mi3ni3oi3pi3qi3ri3si3ti3ui3viR4i3wi3xi3yi3zi3Ai3Bi3Ci3Di3Ei3Fi3Gi3Hi3Ii3Ji3Ki3Li3Mi3Ni3Oi3Pi3Qi3Ri3Si3Ti3Ui3Vi3Wi3Xi3Yi3Zi30gYuiJLh.yiGZg.BgfBgYtgIVgIVibrhFliVlg.GfKLfKLfOpfOpfOofOofOofKLgfJgiGhFlhgcgMJgjkh5xhz1grMgvEg#PfZtieTi31i32i33i34i35hMoi36i37i38i39i4.irQi4#i4ahcyi4bi4cgFwi4di4ei4fi4gi4hi4ii4ji4ki4li4mi4ni4oi4pi4qi4ri4saXAa5Mb..i4ti1Ci4ub1fi4vi4wi4xi1Hi4yi4zi4Ai4Bi4Ci4Di4Ei4FgOFi4Gi4Hi4Ii4JizJiyEi16imIgMJgb4gb4gMJgjkiZqi1Vi4Ki4Li1Yi4Mi4NiTxi4Oi4Pi4QfkUgcwh8wh8wgQBh5vh8viNKiFjgiGgb6g2ygfIhL2hgdhgdhL2g.HgiGhL2hL2g.HiKPg.Hg.HhL0hL0hjKhq1iFihYEhYEhYEiTDgjlgjli.yieaiu#iu#iKOi#jiFhiFhi#jipuh6diCLg2yiwZfjFeLve4KhTDhZMhZMiw0ikfikfhM2hZOhZOhTFfVth2wfMxi4Ri4S#tOi4Ti4Ui4Vi4Wi4Xi4Yi4Zi40.9fi41i42e50hrXgvdfVMfDZf8mfVMgvdgvdggofLsfHxfLsgGzgZ2fo6gyWhNFfHRioTicbimpimpizYizYizYipvh6ficbiCLgg#gg#gg#ieVgQBgQBgQBgQBgQBgQBgfHgfHgfGioTixdioTgfGgjkh8wi#pimph5xipvizYgmSgmSgmSgmSgmSgjj", +"i43i44i45i2mgbIi46i47i2piT0iQ3i48i49gpVi2ji5.i5#i5ai5bi5chAoi5dfGTfKPfKOfOvfOqfOqfOqfOxfOyfUGiO#iO#iO#iO#iO#iLdiLdiLdfUGi2zi2zi5efUFfUFfXZfXZfXZfUFi2zgpYi5fi5gi5hi5ih07h0Ci5ji5ki2AiiphR1i5li5mi5niaMi5oi5piRmiQ8iQ8iRni5qikIf0hfTRfmLfmLfNyerwerwerwfNyfNyfNyfNyf0jf0jf0jfW8iC6iC6iC7i#BiRnh2IfOwfbmi5ri5sifai5ti5ui5vi5wi5xisahRwi5yiLBi5ziZ2i5Ai5Bi5Ci5Di5Ei5Fi5Gdkbi5Hi5IiOQiLTiUycsZi5Ji5Ji0fi0gi5Ki5Li3ai5Mi5Ni5Oi5Pi5Qi5Ri5Si5Ti5Ui5Vi5Wi5Xi5Yi5Zi50i51iUTiXMi52i53i54i55i56i57i58i59i6.i6#i6ai6bi6ci6di6ei6fi6gi6hi6ibxji6ji6ki6li6mi6ni6oi6pi6qi6ri6si6ti6ui6vi6wi6xi6yhIIi6zi6Ah.yh1Gh1Gh.yg2zhgcijegb2hFliVlgfJfKLfOofOofOofOofKLfKLgfJiVlhFlgb2gb4iY7imph3fgrMgkwg#PfZvfIKi31fMvi6Bi6Ci6Di6Ei6Fi6Gi6Hi6Ii6Ji6Ki6Li6Mi6Ni6OhnBi4bi6Pi6Qi6Ri6Si6Ti6Ui6Vi6Wi6Xi6Yi6Zi60i61i62i63i64i65iYNi66i67i1Ci1Di1Di4ui68i69a1Qi7.i7#i7ai7bi7ci7di7effPi7fi7giptgrlih1h9iiZqiFhigGilLgMJgb4i7hivVi7ifz1hQ8hsJi7ji7jgvxi7ki7li7mi7nfH9i7oi#kh8wh8wgfHh.wh.wiNKgiGg.Hgb6gIUhgdhgdhgdhL2hL2hL2g.HhL2hgdg.HiNKhL2iNKhjKgbQf7HhjKiKQhYEiTDiQHhYEhYEiTDgmVgfBiu#imIi16i#jiWmiFhi#jipuh6diCLgQBg.IfRReQheVfhTDhWEh8LhZMhZMhZNh8NhGlhQxhTFfOFh6ef5Ti7pi7q#Hvi7ri7si7ti7ui7vi7wi7xi7yi7zi7Ai7Bi7CfxjgZ2gvdgOjfDXhhpgGzgGzgGzfHxfHwgvdgvdf5ofkYfkYgj4gyWiCMipuicbimpizYipvizYipvh5xhWthWthWtioTicbgfGieVieVh5wgQBh8wh8wh8wiY7iY7gjkgjkgjkgjkgjkgjki#picbicbgmSgmSimqgmSgmSgmSimpgfG", +"i7Di7Ei7FhqYhqYi7Gi7Hi7Ii7Ji48i7KfOmgUyfRLi7Li7Mi7Ni7Oi7Pi7Qi7RfXVfXVfKOfKOfOvfOvfOvfOvfKMfOxfOyfOyfOyfUHfUHfUHfUGfUGfUFfUFfUFfOxfOxfOxfKMfKMfKMfXZfXZeVci7Si7Th4.f6Si7UiAsi7VipPiDni7WiaMi7Xi7YhQxi7ZeFned.iW1iQ8i2LiUbikIinbinbfNyfNyerwerwerwerwfNyfNyfNyfNyf0jf0jinbfW8fW8fW8ixyiC7h8HizLfKRfGTi70i71iLAi2Pixyi72i73i74i75fJTi76i2WiW4i77i78i79i8.i8#i8aiAUi8bi8ci8di8ecFLiUzi5KcsZi3.i3.i8fi8gi8hi8iiOVi5Ni8ji8ji8ji8ki8li8mi8ni8oi8pi8qi8ri8si8ti8ui8vi8wi8xi8yi8zi8Ai8Bi8Ci8Di8Ei8Fi8Gi8Hi8Ii8Ji8Ki8Li8Mi8Ni8Oi8Pi8Qi8Ri8Si8T#9yi8Ui8Vi8Wi8Xi8Yi8Zi80i81i82i83i84i85i86i87iqSgiHgfBgfBh1GhFngfBgYtijegb3gjmhL1gfJgfJg.Gg.Gg.GfKLfKLgfJgfJgiGgb2gfAgIViEhihqipvihpgo#go.fZvirsi88i89i9.i89i9#i9ai9bi9ci9di9ei9fi9gi9hi9ii9ji9ki9lh40i9mi9ni9oi4ei9pi9qi9ri9siYoi9ti9ui9vi9wi9xi9yi9zi9Ai9Bi9Ci9Ba5Nb..i1Ci9Di9Ei9Fi9Gi9Hb.bi9Hb.di9Ii9Ji9Ki9L#6Ri9Mi9Nftdg4thZ2i#4iCMh6dgQDi16iHZhQki9Oi9Pi9Qi9Ri9Si9Tgzei4Ni9Ui9Vi9Wi9XeMmf5mi9YizJi#ph8wgfHg6BhgdiNKiKPg.HgIUg6Bg6Bg6BhgdhgdhgdhgdhL2hL2hL2g.HhL2hL2iQKhL0i9ZgfAgjliTDhYEhYEhYEiTDiKQiubiubijdiu#i#kizJgcwiG0ipuipuipuh6dgg#h5wicff4EffveVgeZ4hTDhTDhZMhZMhZNe4KeVfg3Lf48fYviWbg#Ri90i91i92i93i94i95i96i97i98i99j..j.#j.aj.b#Saj.cg0rfxigOjfD0fDXgGzgGzfLsfHxfHwfSCfxigGAj.dgCPhv2hzBgyWiCMipuicbimpipvh5xh5xhWuhWuhWuixdh5xiCLgg#iCLieVi#pgfHgjkgjkgjkgjkgjkgjkgjkgjkgjkihqi16i16i#pgfGizYgmSgmSimpimpgfGicbieV", +"j.ej.fhnrhqYi46i7HiT0iWIiQ3i7KiZrj.ggbSj.hj.ij.jj.kj.lj.mj.nj.ofOsfKPfXVfKPfKOfKOfKOfOvfOvfOvfOqfOqfKMfXZfXZfOxfOxfXZfOxfKMfOxfKMfKNfOvfOqfXZfKMfKMfOqfv8eLvgcrgcrgcsj.pj.qj.rj.sh62hUViaThUvj.tgGle.bj.uiW1iQ8iW1iUbiFSiIBf0hf0jfNyerwerwerwfNyfNyfNyfNyfNyf0jf0jf0jinbfW8fW8h9Iixyi#BiwUg3MfDifvTj.vj.wixyg85i5qj.xj.yhKIiOrj.zj.AhKQgLoj.Bj.Cj.Dj.Ej.Fj.Gj.Hj.IcBxj.JiXri0giUAi3#i5Lj.Kj.Lj.Ki8ij.Mj.Nj.Oi5Oj.Pj.Qj.Rj.Sj.Tj.Uj.Vj.Wj.Xj.Yj.Zj.0j.1j.2j.3j.4j.5j.6j.7j.8j.9j#.j##j#aj#bj#cj#dj#ej#fj#gj#hj#ij#jj#kj#lj#mj#nj#oj#pj#qj#rj#sj#tj#uj#vj#wj#xj#yj#zj#Aj#Bj#Cj#Dj#Ej#Fj#Gj#HgiHgfBg.BgfBgYtgIVf7GgbQgxqgiGg.GfKLgfJg.GgfJfKKgfJgiGg.HgmWhgbgp1iebgqGgmRihpi04gvEg#PfQ#i9.iJPi89j#Ij#Jj#Kj#Lj#Mj#Nj#Oj#Pj#Qj#Rj#Sj#Tj#Uj#Vj#Wj#XhMnj#Yj#Zj#0j#1j#2j#3j#4j#5j#6j#7j#8j#9ja.ja#jaajabjaci65jadjaejafjagjahjaijajjakjaljamjancubjaoi7ejapjaqjargcKfo6gvegN7jasi9YijggnGjatjauhdwjavjawhd7jaxjayjazjaAiTxi9Vi9WjaBjaCjaDjaEiCvh8wh8wh8wgfHg6AgfIgIUgfJgiGgIUh.wg6Ag6Ag6BhgdhgdhL2hL2hgdhgdhL2hL2gIUhL0hjKgbQgfAi.yiTDiTDhL0hYEhYEiKQirKirKirKicciccieWgcwiFhiBsipuipuh6dioTiCviucfvLjaFeQieVfe4KhTDhTDe4Ke4KeVfeVgeQjg.0gVOjaGfZvioQjaHjaIjaJjaKjaLjaMjaNjaOjaPjaQjaRjaSjaTjaUjaVjaWgGWgGzhrXhrXfHxggofHxfHwf5ofSChv2hv2j.dgyXgCPgCPhv2gyWiCMioTizYizYh5xhWtioTh5xh5xixdiFyhWuhWtgg#gfGh8wgjkgjkgjkgjkgjkgjkgjkgjkgjkihqiKOigGi16ihqi#pgfGizYicbieViCLiCLieVgfG", +"jaXhnri43i7IjaYi7IiT0jaZja0iZrja1ja2fRLja3ja4ja5ja6ja7ja8ja9jb.fOsfKPfXVfXVfKPfKPfKPfOufKOfKOfOvfOvfOvfOvfOvfKOfOvfKMfOvfOqfOvfKOfKOfKOfKOfOqfOqfOqfKMfKNfGVfGVfGVge9eQieQeeQfhWGh8PhQxj.teGKfOwfUHjb#i2LiW1iQ8iQ8iC8i5qideinberwfTRerwfNyfNyfNyfNyfNyfNyfNyf0jf0jf0jfW8fW8h9Iixyi#BiRngVQexrfKKd#.jbajbbjbcikOiC7jbdjbehHtga8jbfi5yg06jbgjbhjbii3#jbjinOjbkjblj.IcJ8i27jbmjbni5Ljbni8ijboj.Mjbpjbqi5NjbrjbsjbtjbujbvjbwjbxjbyjbzjbAjbBjbCjbDi8rjbEjbFjbGjbHjbIjbJjbKjbLjbMjbNjbOjbPi8KjbQjbRjbSjbTjbUjbVjbVjbWjbXjbYjbZjb0jb1jb2jb3jb4jb5jb6jb7jb8jb9jc..Rxjc#jcajcbjccjcdjcejcfjcgjchjciiGZjcjjckijdijdgb4gfAf7HgxqgxqgjngiGhFlgiGgiGiKPhL2hgdgfAg2zibsigGjcljcmjcnjcojcpijWf8LfZtieTiJPjcqjcrjcsjctjcujcvjcwjcxjcyjczjcAjcBjcCjcDjcEjcFjcEjcGjcHjcIjcJjcKjcLjcMi6VjcNjcOjcPjcQjcRjcSjcTjcUjcVjcWjcXjcYjcZjaejc0jc1jc2jc3jc4jc5jc6jc7jc8jc9jd.jd#jdajdbjdcjddf.gjdejdfjaujdgjdhjdijdijdjjdkjdleCMjdmjdnjdojdpjdqjdrjdsjaCf8ljdti#ji#pi#ph8wgfHh8wgb5h.wiNKfKLg.HgfIgb6h.wh.wg6Bg6Bhgdhgdhgdg6BhgdhgdhL2gIUhjKhq1iFki.yi.yi.ygjli.yi.yiuaiwRiubirKirKiwSi#kizJh8sipuh1Hh6dh6dh9ih6diFhiCwg6DfrKffseLveVeeZ4e4Ke4KeVfeVgeQhgcpfrLf5.i9YjdujdvjdwjdxjdyjdzjdAjdBjdCjdDjdEjdFjdGjdHjdIiw9jdJ.6qfLYggpggofHxhkEfHxfLsgGzfVMg#hfxjjdKgyXgGAgyXj.dgCPhv2hWRiZqiCLizYicbipvh5xixdhWuiFyiFyhWuhWuiCLgfGihqihqihqihqihqihqgjkgjkgjkgjkihqi16hVzimIh8wi#pgfGicbgg#iCLiCLiCLgfGieV", +"jdLjdMi30jdNjdOjdPja0jdQjdRiWBjdSg.Cgp0fXWf4tjdTjdUjdVjdWjdXfKPfGTfXVfXVfXVfXVfGTfKPfGTfGSfKPfKOfOvfOvfKOfKOfKPfKOfOvfOvfOvfKOfKOfKOfKOfKOfKOfOvfOvfOvfOwfOvfOqfOrfKOfDifnIeQdeLveGLeGLexqfKMfXZfUHiWOiQ8iQ8jdYjdZhY7ikIiicfW8bBGfTRfNyfNyfNyfNyfNyf0jf0jf0jf0jinbfW8fW8h9IixyiC7iRniWOgCBfbifLCjd0jd1f0hjd2iAjiC7jd3jd4iW4ga8bPFjd5jd6jd7jd8jd9je.je#jeajebjecjecjedjeejefi5LjbnjegjehjeijejcoJjekjeljemjenjeojepjeqjerjesjetjeujevjewjexjeyjezjeAjeBjeCjeDjeEjeFjeGjeHjeIjeJjeKjeLjeMjeNaPOjeOjePjeQjeRjeSjeTj#mjeUjeVjeWis9jeXjeYjeZje0je1aFXje2je3je4je5je6je7je8je9jf.jf#jfajfbjfcjfdjfejffjfgiY7iY7gfHg6AijehgcgjlgfAgb2ijehgchL2hgchgcgYtieagmUhL4#aVjfhjfijfjjfkjfljfmgdegrqjfnjfojfpjfqjfrjfsjftjfujfvjfwjfxjfyjfzjfAjfBjcCjfCjfDjfEjfFjfGjfHjfIjfJjfKjfLjfMjfNjfOjfPjfQjfRjfSjfT.STjfUjfVjfWjfXjfYjfZjf0jf1jf2jf3jf4jf5jf6jf3jf7jc9jf8jf9jg.iZ#hlqjg#jgahs.jgbjgbjgcjgdjgejgfjgfjggiQzeaqjghjgijgjiWdjgkiKLimZiKNiZdi16i#ph8wh8wh8wgfHgfHgb6gIUgiGgfJhgdg6zg6AgfIh.wg6Ag6Bg6Bg6Bhgdg6Ag6BhgdhgdgjliTDhLZiKQiuai.ygYtgYtgYtgmVgfBgfBiwRiubirKiwSieWiCvgcwim0f8.ipuh6dh9ih9ih8rh1Hf49g.2fvMfjFeQieLve4Me4MeVheVhfrOfvOfrKfVwjgljgmjgnjgojgpjgqjgrjgsjgtjgujgvjgwgbXjgxjgyjgzjgAjgBjgCjgDjgEfkVgZ2gGzggoggofkVgvdfSCfPxgCPefAgyXfSFfSFh0fgCPgV6imZipuizYh5xh5xhWuiFyiFyiFyiFyixdh5xh5xizYimpihqgjkihqgjkgjkgjkgjkihqihqihqgjkgjkiY7h8wi#pi#piCLiCLiCLieVicbicbieV", +"jgFjgGjgHfDwjgIjgJjaYjgKgfviZAjgLiFkgBfg.tg6yfXWjgMfOogbHjgNfRMfXVfRMfRMfXVfXVfGTfXVfXVfGTfXVfKPfKOfKOfKPfKOfKPfKOfKOfOvfKOfKOfKOfOvfOvfOvfKOfKOfKOfKNfKNfKOfKNfOsfOsfKOfOufKNfKNfKNfKMfOqfOqfOxiZFiWOiQ8jdYjdYiRni5qideh9IfW8erwfNyfNyfNyf0jgz0gz0inbinbinbinbfW8fW8iC6ixyiC7h8HiwUgRTe4Jf7JjgOjgPjgQiuMgz0de6h8IjgRjgSjgTjgUjgVjgWjgXh94jgYjgZje.cxjjg0jg1jg1jg2jg3jg4cxki3bj.Njg5j.Mjg6ilecgojg7jg8jg9jg9jh.jh.jh#jhajhbjhcjhdjhejhfjhgjhhjhijhji0KjhkjhljhmjhnjhojhpjhqjhrjhsjhtjhujhvjhwjhxjhyjhzjhAjhBjhBjhCjhDiD8jhEjhF.3PjhGjhHjhIjhJjhKjhLjhMjhNjhOjhPjhQfb5jhRjhSjhTjhUjhVjhWjhXjhYjhZjh0jh1gjjjh2gE6gE6gE6iY7gE6gE6iEigb4gMJgMJiEiieagxrgiUjh3jh4jh5jh6jh7jh8jh9ji.ji#jiajibip#jicjidjiejifjigjihjiijijjikjilig8jimjinjiojfBjipjiqjirjisjitjiujivjiwjixjiyjizjiAjiBjiCjiDjiEjiFjiGjiHjiIjiJjiKjiLjiMjiNjiOjiPjiQjiRjiSjiTjiUjiVjiWjiXjiYi9L#6RjiZfA3ji0ji1ji2ji0ji3ji4ji5ji6ji7ji8hsIfIGi4Lji9gGwgfGgjki#pi#pi#pi#pi#ph8wh8wh8wi#pgfHgfHgfIiKPgiGiFjh.wgb6gb5g6Ag6Ag6Ag6Bhgdg6Bg6Bg6Ag6Ag6Bhgdhq1iFgiCxiubiKSiwRgmVgfBgmViubiwRgmViwRiubirKi#kiCvi#ji#jim0iHZiZqh6dih1h0kfHRh8rg.5izKfvLf7JfGXffsffseLrgcseLrfGWfrLjj.jj#jjajjb#fVdlVjjcjjdjjejjfjjgjjhjjijjjjjkjjljjmjjnjjojjpjjqjjrjjsjjtg0rfkVfkVi#5h6egcKfo9f8nfSAefAfSFgSwfVLfSFjjufSBfo6ikyh5xioThWuiFyiFyiFyifxh5xipvipvizYizYizYimpihqgjkihqihqgjkihqihqgjkgjkgjkgjkgjkihqihqihqi#piCLiCLicbiCLiCLgfG", +"jjvjjwjjxjjyjjzffJjjAjjBjjCjjDjjEjjFjjGgjRfDffKHgp0ihGi15gjlgxqgjnfOpfXVfXVfXVfXVfKPfKPfXVfXVfXVfXVfKPfKPfKPfKOfKPfKOfOvfKOfKOfOvfOvfKOfKOfOvfKOfKOfOufOufKPfKOfOsfOsfOsfKOfKNfOvfOqfOqfOqfOqfROizLjb#jdYjdYjdZhY7ikIh9IfW8bBGfNyf0jf0jf0jf0jjjHjjIgz0f0jinbinbfW8f0ih9IiC7i#BiRnizLexqf4EfLHjjJjjKixxikOg43ixyjjLjjMjjNjjOjjPjjQjjRjjSjjTjjUjjVjjWiORjjXjjYjjYjjZjj0jj1jj2jj3i8kjj4ckBilejj5jj6jj7jj8jj9jk.jk#jkajkbjkcjkdjkejkfjkgjkhjkijkjjkkjkljkmjknjkojkpjkqjkrjksjktjkujbZjkvjkwjkxjkyjkzjbXjkAjkBjkCjkDjkEjkFiJyjkGjkHiqIbkHjkIjkJjkKjkLjkMjkNjkOjkPjkQjkRjkSjkTjkUjkVjkWjkXjkYjkZjk0jk1jk2jk3jk4jk5jk6jk7ijZimqimqgmSgmSgjjgjkgjkihqgmTgfDjk8jk9jl.jl#jlajlbjlcjldjlejlfjlgjlhjlijljjlkjlljlmjlnjlojlpjlqjlrjlsjltjlujlvjlwjlxjlyjlzjlAjlBjlCjlDjlEjlFjlGjlHjlIjlJjlKjlLjlMjlNjlOjlPjlQjlRjlQ.1BjlSjlTjlUjlVjlWjlXjlYjiUjlZjl0jl1jl2jl3jl4jl5jl6jl7jl8jl9jm.jm#jmajmbjmcjmdjmdjmejmfi9Vjmgjmhi#ji#pgfGieVi#ph8wh8wh8wh8wh8wh8wgQBh8wgQBgb6gfIgIUhL2g.Hh.wgb5gb5gb5gb5g6Ag6Ag6Ah.wh.wh.wg6Ag6Bi.yiuaiVkiubiwRiubirKiwRijdiubirKirKiwRirKirKicci#kiCvi#jipuiBsiBsiZqiBsi#4h2XiFyhWugg#h5viubfvLfrJfjCf74f74fvMfrLgntiFigYsjmijmjjmkjmld0zjmmjmnjmojmpjmqiryjmrjmsjmtjmujmvjmwjmxjmyjmzjmAjmBfSdfPyfkVgOjfVKjmCjmDjmEfL1fSBfSBfVLfVLfVLikuikuh0fgj4h9iioTixdifxiFyh2wixdh5xipvizYizYizYizYizYimpimpihqihqihqgjkgjkgjkh8wh8wh8wihqihqgjkgjkihqi#pgfGgg#iCLiCLiCLieV", +"jmFjmGjmHjmIjmJf4VjmKjmLfoKjmMjmNf44jmOjmPjmQfGNfOnfKJiQJhjKhq1hq1gmWfKJf7BfRMfRMfGRfGRfRMfXVfRMfRMfXVfKPfKPfKPfKPfKOfOvfKOfKOfOvfOvfKOfKOfOvfOvfOvfKNfOufKOfOsfOtfOtfKOfGSfDifOvfOvfOqfOvfKNfOyiWOjdYiQ8jdYi2Li5qixyiC6fW8erwfNyf0jf0jf0jf0jjmRjmShOdf0jh9IfW8fW8iC6ixyiC7icuiWOfKRfzJf7JjmTjmUjmVfmKf0jiAjiC7jmWjmXjmYjmZjm0jm1jm2jm3jm4jm5jm6jm6jm7jm8jm9jjYjjZjjZjn.jn#jnajnbjncjndjnejnfjngjnhjnijnjjnkjnljnmjnnjnojnpjnqjnrjnsjntjnujnvjnwjnw#9ijnxjnyjnzjnAjnBjnCjnDjkvjkvjnEjnFjnGjnHjnIjnJjnKjnLjnMjnNjnObbVjnPjnQ.BOjnRjnSjnTjnUjnVjnWjnXjnYjnZjn0jn1jn2jn3jn4jn0jn5jn6jn7jn8jn9jo.jo#joajobjocjodjoehSAgqEjofjogjohiTSimqgmSimpgiSgfDjoijojjokjoljomjonjoojopjoqjorjosjotjoujovjowjoxjoyjozjoAjoBjoCjoDjoEjoFjoGjoHjoIjoJjoKjoLjoMjoNjoOjoPgKbjoQjoRjoSjoTi#tjoUjoVjoVjoWjoXjoYjoZjo0jo1jo2jo3jo4jo5jo6jlXi1Ni1Mjo7jo8jo9jp.i4Bjp#jf5i7ejpajm.jpbjpcjpcjpdgWejpeeCKjpfji1jpgjdqfEAi7ogb4gMJgfHi#ph5wh5wgQBh8wi#ph8wh8wh5wgQBgQBh8vgfHgb6gb6h.wh.whgdgb6h8vgb6h8vgfHgb5gb5gb5icficfgb6g6Ag6Bg6Ciubg6DiccicciccirKiubiubiubiwRicciubicciccicciwSizJiCviZdjphiN0fHRiBsi#4g77h2wiFyfLJgg#h8sh.zf79iNLg.2f76fzEiFiiKSf78jpijpjjpkjpljmqjmljpmjpnjpojppjpqjprjpsjptdHmjpujpvjpwjpxjpyjpzjpAjpBjpCjpDjpEjpFjpGjpHeNhgGNjpIhdKfSFfVLgSwgSwg#iikugvggGAifvi#6ifxifxifxixdi#6h6fipvizYizYizYizYimpimpihqimpimpihqgjkh8wh8wi#pi#pi#pihqgjkgjkihqihqgfGgfGgg#icbiCLiCLgfG", +"jpJjpKjpLjpMfsDjpNjpOjpPjmMjpQjpRfsGjpSjpTfzEiQIfOofOogfJiVlgmWiTDhq1iFkiQKgjnfOofOpfGQfGQfGRfRMfXVfXVfKPfKOfKPfKPfKOfKOfKOfKOfKOfOvfKOfKOfOvfOvfOvfOwfOufOufOtfOtfOtfOufGSfGSfKOfOvfOvfOvfROiZFjb#iQ8iQ8jdYiC8iC7h9IfW8fW8fNyfNyfNyfNyfNyfNyfNyjmRjpUinbinberwiC6iAjiC7h8HiwUgGleQdfRRfOFjpVjpWjpXfJTh9Ide6ifabKRjpYjpZjp0jp1jp2jp3jp4hX7iOViRVjp5jp6jjXjp7jp8jp9jq.jq#jqajqbjqcjqdjqejqfjqgjqhjqijqjjqkjqljqmjqnjqojqpjqqjqrjqsjqtjquiPhjqvjqwjqxiMjjqyjqzjqAjqBjqCjqDjqEjqFjqEjqGjqHjqIjqJjqKjqLjqMjkEjqNjqOjqPjqQjqRjqSjqT.XI#tIjqUjqVjqWjqXgMOjqYjqZjqZjq0jq1jq2jq3jq4jq5jq6jq7jq8jq9jr.jr#jrajrbjrcjrdjrejrfjrgjrhgqDjrijohgp2ijZjrjgiSjrkh7JjrljrmjrnjrojrpjrqjrrjrsjrtjrujrvjrwjrxjryjrzjrAjrBjrCjrDjrEjrFjrGjrHjrIjrJjrKjrLjrMjrNjrOjrPjrQjrRjrSjrTjrUjrVjrWjrXjrYjrZjr0gyFjr1jr2i1Fjo2jr3jr3jo2jlYjr4i1Njr5jr6iZfjr7jr8#Oyjr9aFwaszjpbjs.js#jl7jsajsbjscfIdfMtjsdjsejsfjsgg#fhTpfksgjSh8sieWgYsgQBh8wgQBgYsi#ph8wh8vgQBgQBi#ph8wh8wiY7iY7gfHh8vgb6gfIicfg.Igb6h8vh8vh8vgb5gb6gfIh.wh8vgb5h.wiuahIKiEgirKiccicciccicciwRiwRiwRiwRicciubiEgirKirKi#kieWgcwiHZiN0hZyiN0hZ2gR9g77h2wh2whWsfLJg.5ieWiuciwSizKirKgYsieWgf9jshjsijsjjskjsljsmjsnjsojspjsqjsrjssjjjjstjsujsvjswjsxjsyjszjsAjsBjsC.4mjsDjsEjsF#DRjsGjsH#3ojsIjsJgSwgSwgSwfSBjsKfSFgyXgj4g4th3ei#6h3ei#6i#6i#6i#6h6fipvipvizYizYimpimpimpimpihqihqh8wi#pi#pi#pihqihqihqihqihqihqihqgfGicbieVieVgg#h5xizY", +"iVj#k1jsLjsLjsMjsNjsLjpQhyoiFgiFggE4iFkhL0gxqg.GhSDg.Ggb1gYpjsOgpTg6DhcqiFggE4gxqiVlg.GfOofGQfGRfGRfRMfXVfKOfKOfKPfKPfKPfOvfOvfKOfKOfOvfOvfOvfOvfOvfKNfKNfKOfOsfOsfKPfKPfGVfKOfKOfKOfKOfOvfOyiWOjdYiQ8iQ8i2LiFSixyiC6fW8erwfNyfNyfNyfNyfNyfNyf0jf0jinbinbfW8fW8iC6iC7i#BiRngVQeGLjaFgnte3sjsPjsQfmJiAjikeimKjsRiLhjsSjsTjsUjsVjsWjsXjsYjsZjs0iOVjs1js2js3js4js5js6js7js8js9jt.jt#jtab4cjtbjtcjtdjtejtfgbxjtgjthjtijtjjtkjtljtmjtnjtojtpardardjtqau7aCMaHejtrjtsjttjtujtvjtwjtxjtyjtzjtAjnLjtBjtC.0ijtDjtEjtFjtGjtHjtIjtJjtKjtLjtMjtNjtOjtPjtQjtRjtSjtTjtUjtVjtWjtXjq2iqYgyVjtYjtZjt0jt1jt2jt3jt4jt5jt6jt7jt8jt9ju.ju#juajubjucjudjuejufgjigxsjugjuhjuijujf15jukjuljumjunjuojupjuqjurjusjutjuujuvjuwjuxjuyjuzjuAjuBjuCjuDjuEjuFjuGjuHjuIjuJjuKjuLjuMjuNjuOjuPjuQjuRjuSjuTjuUfoYjuVjuWjuXjuYa5LjuZju0ju1ju2ju3ju4ahb#wXju5#Hmju6ju7ju8ju9jv.jv#jvajvbjvcjvdjvejvfjvggGkjvhjvijvjjvkiWzijXijXjvlfw4fw4iCwizJgYsh8vgb5h8vgQBh8vh8vgfHh8wh8wgjkgjkgjkgjkiY7gb5g6AgfIh.wg.IgfIh8vgb6h.wg6Bgb6gIUh.wgb6h8vgb6iuajvmiwRirKiwSi#ki#kirKicciwRiwRiubiEghcqicchBWhBWibsiCui#jiHZjph#..iN0i#5g0rg77g77h2wi#4fHRhWsfLJfEggg#fYFfYFfYFipufzYjvnjvojvpjvqjvrjvsjvtjvujvvjvwjvxjvyjvzjvAjvBjvCjvDjvEjvFjvGjvHjvIjvJjvKjvLjvMjvN.SSjvOjlW#OJfone1rgSwjvPjvPikufSAefAgrjfkXg4tifxipvipvipvipvi#6h5xh5xh5xizYimpizYimpimpihqihqi#pi#pieVgfGgjkihqihqihqihqi16i16i16ihqgfGiCLiCLiCLicbizYgmS", +"hcqiTDhcqhcqhuIiBqiJLjvQgbRhVxfOohSDgf.gf.gf.hq0hq0hq0g6DjvRjvSdi0di0fRLjvQhq1iFkgmWg.Hg.GfOofGQfGRfGTfKPfKPfKOfKPfXVfKOfOvfOvfOvfKPfOvfOvfOvfOvfOvfOwfKOfKOfOsfOtfGSfGSfKNfOvfKOfKOfKOfKMfUHiWOiQ8iQ8jdZiRni#BikIinbbBGfNyfNyfNyfNyfNyf0jf0jf0jf0jinbinbfW8iC6ixyiC7h8HiWOeVde9#fjCfHMjvTjvUjvViicifaifaixEjvWiZQjvXjvYjvZjv0jm2jv1jv2dX#i3ejv3jv4jp5jv5js4js5jv6jv7jv8jv9jw.jw#jwajwbjwcjwdjwejwfjwgjwhjwijqsjwjjwkiPh.U6jwljwm#Cw#Cwjwnjwo#5ljnx.2jaCMiJv.MujwpjwqjnAjwrjhCjwsjwtjwuiGNjwvjwwjwxjwyjwzjwAjwBjwCgIOjwDjwEju8jwFjwGjwHjwIjwJjwKjwLjwMjwNjwOjwPjwQjwRhzBjwSjtYjwTjwUiSzitpjwVjwWjwXjwYjwZjw0jw1jw2jw3jw4jw5jw6jw7jw8jw9judgjhjx.jx#iSxjujjxajxbjxcjxdjxejxfjxgjxhjxijxjjxkjxljxmjxnjxojxpjxqjxrjxsjxtjxujxvjxwjxxiMSjxyjxzjxAjxBjxCjxDjxEjxFjxGjxHjxIjxJjxKjxLjxMjxNjxOjxPjxQjxRjxSjxTjxUjxVahbjxWi9LjxXju7jxYjpfjxZiWcjx0jx1fSmieVi#ph8wieVfHRgCzfPzfkqjx2fADiCwijXjvljvljvlfYDf1RjvliwSieWirKgb5gb5h8vgb5g6Agb4gMJiY7gjkgjkgjkgjkgjkgjkgMJg6Bg6Agb6g6Bh.wh.wiNKiNKh.wh.wg.Hg6AgQBicchIKh1Gicci#ki#kiwSiwSiwSiwSiwRiubiEghIKiwRiu#iu#iu#i#kiCwiohfSmh8rimZiN0gjNgZ3g0rh6eh6ei#4iCMhTrhTrhWshWshWufHRhWuiWbjx3jx4jx5jx6jx7jx8jx9jy.jvujy#jyajybjycjydjyejyfjygjyhjyijyjjykjyljymjynjyojypjyq#pq.4gjyrjysjr7gQFeaOjvPjytjyuh6bikuh0ffkYgnHifwh9iixdi#6h6fipviTSipvipvicbgfGizYizYimpihqihqgfGieVgfGgfGgfGihqihqihqgjkgjkimIiKOi16i#piCLioTipvizYgmSgmSgmS", +"hgcgjlhq1i.yhcqf77hnrhL0gbRgfzhSDgf.igFigFigFilKilKilKg2Bjyvjywh9sheHglcjyxi.yiFgiFkgxqg.HiVlfOofGQfGTfKPfXVfKOfKOfKPfKPfOvfOvfOvfKPfOvfKOfKOfKOfKOfDifKOfOsfOtfOtfXVfGSfOufKOfKOfKPfKOfROiZFjdZiQ8iQ8i2LiC8ixyh9IinbbBGfNyfNyfNyfNyf0jf0jinbinbinbinbf0jfW8iAjiC7i#BiRngRTe4JfrMjyyfoFjyzjyAjyBifaimJjyCjyDjyEiZRjyFjyGjyHjyIjyJjyKjyLjyMjyNjyOjv4jyPjyQjyRjySjyTjyUjyVjyWjyXjyYjyZjy0jy1jy2jy3jy4jy5jy6jy7arbjy8#cc.vKjy9#mBardjz..My#9gjz#jzajzbjzcjzdjzejqMjzfjzgjzhjzijzjjzkjqMjzljzmjwwjznjtDjtEjkFjzojzpjzqjzrfn5jzsjztjzujzvjzwjzxjzyjzzjzAjwNjzBh86jzCjzDjzEjdKhGwjzFjzGggXjzHjzIjzJjzKjzLjzMjzNjzO#j3jzPjzQjzRjzSjzTjzUjzVjzWjzXjzYjzZiVmiEjjz0jz1jz2jz3jz4jzBjz5jz6jz7jz8jz9jA.jA#jAajAbjAcjAdjAejAfjAgjAhjAijAjjAkjAljAmjAnjAojApjAqjArjAsjAtjAujAvjAwjAxjAyjAzjAAjABjACjADjAEjAFjAGcpScpRjAHjAI#K2jAJjAKjm#jALjAMjmDjANjAOjAPiKMiN0iN0iBsjphjphfHRiCMiZqjphijXiCwjvlfSmfSmiWmfYDfsTfHQfw4gjSg.5ijXh5vh8vg6Ag6Agb4g6Ag6Agb4iY7gjkgjkgjkgjkgjkiY7gb4gb3g6Ah8vgb6h.wg6AgfIgIUhL2hq0gb5irKiCtiBrhBWicciu#imIizJi#ki#kizKiEgiEgiEgiwRijdgfHgb5iccizJhPuigGgcwh8riN0fHRgnIgRVgR9hZ2hZ2hZ2h2wiFyh2whTrhTriK5hZyiCMjAQjARjASjATjAUjAVjAWjAXjAYjAZjA0jA1jA2jA3jA4jA5jA6jA7jA8jA9jB.jB#jBajBbjBcjBdjBe#jdjBfjBgjBhjBie40d29eaOjyujyuh5Zh5YjBjjvPfSAftchNFih0h9ih9iifxi#6ipvipvipvicbicbizYimpgfGgfGicbieVgfGimpimpihqihqimpihqihqihqihqi16i16ieVgfGgmSimqimqimqimpihq", +"iJLiJLhuIjBkiJLhq1gbQf7HgbRgb1gf.igFilKiqTiqTiqTijeilKjBljBmi7NjBnjBojBpjBqgmWgjljvQgjlg.Hg.HiVlfOofGRfGTfXVfKPfKPfKOfKOfKOfOvfKOfKOfKOfKPfKPfKPfGSfGSfKPfOrfOsfXVfKPfDifKPfKOfOvfKPfOvfOxizLjdYiQ8iQ8iUbipGideiC6fW8erwfNyfNyfNyf0jinbinbf0jf0jh9IiC6fW8iC6ixyi5qicuiwWexse9#fKVjBre0fjBsjBtisbjBujBviIFjBwiABjBxjByjBzjBAjBBjBCjBDjyLjBEjBFjBGjBHjBIjBJjBKjBLjBMjBNjBOjBPjBQjBRjBSjBTjBUjBVjBWjBXjtG#sZjBYjBZ#M8#mBjwl#jQjB0jB1ajp#QWjB2jB3jB4jB5jB6jB7jzfjqMjB8jkujB9jC.jC#jCajCbjCcjCdaxwiX4jCejCfjCgalvjChjwEjCijCjjCkjCljCmjCnjCojCpjCqjCrjwMjwNjCsjwPjCth5ZiojjCujCvjtYjCwhGwjCxicgiwujCyjCzjCAjCBjCCjCDjCEjCFjCGjCHjCIjCJjCKjCLjCMjCNjCOjCPjCQiMDjCRiBtjCSiEjjCTjCUjCVjCWjCXjCYjCZjC0jxljC1jC2jC3jC4jC5jC6jC7iNjjC8jC9jD.jD#jDajDbjDcjDdjDejDfjDgjDhjDijDjjDkjDljADjDmiYNjDnjDojDpa5MjDqjDrjDsjDtjDu#3ijDvjALjDwjDxjaEjDyikwimZh8riN0imZi#4ih1h2XiFyfHRiK5fHRh8rjphi#lg.5fSmfSmiWmjvlgjSh8riTQiWbiWzjphfLKgg#g2yg6zg6Bg6Ag6Agb5gb5iY7iY7iY7iY7iY7gjkiY7gMJgMJg6Agb5g6AgMJg6Ah.wg6Bgb2gfHirKicchBWi#ki#kgfCi16i16izJieWiuch.ziEgiwRgb5gfHgfHh8vg2ygYsijYiCuiFhjphizIfHRiIahvBgV4g77h0kh2Xg77hTrh2whTrg77iK5iK5jDzjDAjDBjDCjDDjDEjDFjDGjDHjDIjDJjDKjDLjDMjDNjDOjDPjDQjDRjDSjDTjDUjDVjDWjDXjDYjDZjD0jD1jD2jD3jBijD4jD5jD6ekpfPBfPBiqViqVekofk1ekojBjjsKgrkifvikyh6dh9ii#6ipvh6fizYicbgfGgfGicbicbicbimpihqimpimpihqimpimpimpimpihqihqgfGgfGgfGimpgmSimqgmSgmSihqh8w", +"hPsjdMjD7fAEjD8jBkjD9jE.hL1hFlhq0ilKgiHgiHiqTiqTiqTjE#jEaeVLjEbjEcjEdjEejEfgb1gb2gmWgxqhFliKPhFlg.GfGQfGRfXVfGTfGSfKOfKOfKOfKOfKOfOvfKOfKPfKPfKOfGUfKOfKOfOrfOsfXVfGSfGVfKOfOvfKOfKOfKMfRPiWOjdYjdZi2LiRnikIideinbf0if0jfNyfNyf0jinbinbinbf0jf0jinbiC6iC6ixyiC7h8Hh5JgVPeQdgRSjEgjEhjEijEjhwSimJjEkiFWjElhX2jEmjEnjEojEpjEqjErjEsjEtjEujEvjEwjExjEyjEzjEAjEBjv6jECjEDjEEjEFjEGjEHjEIjEJjEK.H#jELjEM#gnjENjEOjEP#mBjEQ.vM.E5.OVjER.MxjESjETjEUjEVjEWjqMjEXjEYjzhjEZjE0jE1jqMjE2jE3jE4jE5.XijE6jE7jE8jE9jF.jF#jFajFbjtNjFcjFdjFejFfjFgjFhjFijFjjzzjwMjwNh86jwPjzDjFkiojj.dhGwjFliVmjCwjFmjFniwviwtjFojFpjFqjFrjFsjFtjFujFvjFwjFxjFyjFzjFAeeLjFBjFCjFDjFEjofjw9gUAiEjiYejwSjFFjFGjFHjFIiJ3jFJjFKjFLjFMjFNjFOjFPjFQjFRjFSjFTittjFUjFVjFWjFXjFYjFZiHRjF0jF1jF2jF3jF4jF5jF6jF7jaejF8jF9jG.jxQjG#jGajGbjGcdCVjGdjGeji2hQ8jGfjGgjGhicVh85hWRimZiN0iN0i#4ih2hXah2XiK5iN0imZfHRjphfHRfAHjphfHRfSmfSmjphfHRiKMiKNiKNiKNfHRfHRfLJh5vg6zh.wgfIh.wg6Ah8wizJiu#iu#iY7iY7iY7iY7gjkgjkiY7gMJgMJgMJgMJgb5h.wg6BgfHiCtilLgYui16iKOgiTgtIgtIi16i#kiEgiEgiwRijdgfHgfHgb5h8vgYsh5vieWijYiHZiHZiHZiCMi#5hvBgV4gZQh2wh3eh0kh0kh2wg77g77h2wiK5h6e.8hc2SjGijGjjGkjGljGmjGnjy.jGojGpjGqjGrjGsjGtjGujGvjGwjGxjGyjGzjGAjGBjGCjGDjGEjGF#vIjGGjGHjGIjGJjGKjGLjGMjGMjGMjGNfPBh#sekogOljGOjGOjGPfSAgyWh6ch6dixdh5xiTSipvizYiCLiCLicbizYimpizYimpimpimpimpimpimpimpimpimpgfGieVgfGimpimpimpimpihqihqi#ph8w", +"jGQjGRjGSjGTjGUjGVhjLg6DhL1hq0ilKgiHjGWgiHiqTiqTilKjGXjGYjGZjG0jG1jG2jG3jG4hSDhFlhFlhFlhFlg.HgiGg.GfOpfGRfGTfKPfGSfOufKOfKOfKOfKOfKOfKOfKPfKPfKPfGSfGSfKOfOsfOtfGTfGSfOufKOfOvfKPfOufKQiZFjb#jdZiwUiwUiUbiC7ideinbfW8f0jfNyf0jinbinbinbf0jf0jinbfW8fW8iC6de6ihHicvh2IeVdfbifODjG5jG6jG7jG8iFSjEkjG9iF3jBwjH.jH#jHajHbjHcjHdjHejHfjHgjEujHhjHijHjjBHjHkjHljHmjv6jHnjHojHpjHqjHrjHsjHtjHualujqrjHvjHwjHxjwl.Kd.E5jHyjts.E5jHz#UvjHAjHBjHC.HH.HHi6hjHDjHEjHFjHGjHHjHIjHJalDjHKjHLjHMjHNjHOjHPjHQjHRjHSjHTjHUjHV#HojHWjHXjHYjHZjH0jH1jFhjH2jH3jH4jH5jH6jH6jH7jH8jH9jI.jI#h6bjdKjx#iMDicajCQieUjIajFniwtiwrjFpjIbirmiwDjIcjIdjIejIfjIgjIhjIijIjjIkjIljImjInjIojIpiVmjw9jIqjIrjIsjItjIucUvjIvjIwjIxjIyjIzjIAiChjIBjICjIDjIEjIFjIGjIHjIIjIJjIKjILjIMjINjIOjIPjIQjIRjISjITjIUjIVjAyjIWjIXjIYjIZjI0jI1jf2jI2jI3jI4jI5jI6jI7h5ZhdJgrlh85hWRjI8imZi#4ifvh6eifvh2Xh2wiK5iTQiTQiN0fHRiK5fHQiTQiK5jphjphiZqiZqhWshZyfHRhZyhZyfHRhWsfEggb7g6zg6zg6zh.wi#kiCuizJizJimIgb5gMJiY7gjkihqgjkgjkgjkiY7iY7iY7gb5h.wgb5gmVgmVhBWibtgfDgmTgtIgQDgtIimIiBriwRiccgfHgfHgfHgb5h8vgYsh5vh5viCwf8.iHZiZdh6cgGWgKrgZ3gV4gZQh2Xh2Xifxh3eh0kh0kh2wh2XhZ2h3ejI9jJ.jJ#jJajJbjJcjJdjJejJfjJgjJhjJijJjjJkjJljJmjJnjJojJpjJqjJrjJsjJtjJujJvjJwjJxjJy#szjJzjJAjJBg8rgf6jGOjGOjGMh#sjGOjGMjGMfAXeaPjJChhqjvPftch9iipuixdh5xipvh5xioTicbizYizYizYizYizYiTRiTRiTRiTRiTRicbimpizYicbgfGi#pi#pi#pi#ph8wh8wimIi16iu#", +"jJDjJEjJFfr2jJGjJHeasjJIhPujJJgiHjGWgiHgiHiqTiqTilKh.xjJKjJLjJMcgDjJNjJOjJPgf.hL2g.Hg.Hg.Hg.HiVlg.GfGQfRMfKPfKPfKPfGVfKNfOvfOvfKOfKOfKOfKOfKOfKPfKPfGUfKPfOtfXVfKPfDifKOfKOfOvfKOfOufKQizLiWOjdZiWOiWOiC8i#Bideinberwf0jf0jinbinbinbf0jf0jfW8iC6fW8inbjJQimKh8IiwVgGle4JfOBeYRfOIjJRjJSjJTihHjyCiFWiF3ixPjJUjJVjJWjJXjJYjJZjJ0jJ1jJ2jJ3jJ4jJ5jJ6jyPjJ7jJ8jJ9jK.jK#jKajKbjKcjKdjKejKfjKgapBjnOcOxivE.y0jKhjwljKijKj#9h.B4#oIjKkjKljKmjKnjKojKpjKqjzejHD.OMjKrjKsjKti8TgtujKujKvjKwjKxjB8jKyjKzjKAjKBalvjKCjKDjKEgdajKFjKGjKGjKHjKHjzxjzxjKIjKJjKKjKLjKMjKNjI6jKOjKPjH7jI7jJCjKQjCvh0jjFGicajKRjKSjFnij1jKTjKUflIftOjKVjKWjKXhTKjKYjKZjK0jK1jK2jK3jK4jK5jK6jK7eHNjK8jK9gunjL.jL#jLafPFjLbjLcjLdjLejLfjLgjLhjLijLjjLkjLljLmjLnjLojLpjLqjLrjLsio1jLtjLujLvjLwjLxjLyjLzi9Ci1BjLAjLBjAyjLCjLDjLEjLF#SajLGjLHjKMgOmjH6jtUh0fgV5hdJh85iN0imZhZ2h2XhZ2i#5hWRi#4h6eh6ejphjphiKMiWzh6ehZygjSfHRiCMiCMiZqiZdhWufHRiTQ#..fHRfHRhWuhWtieXgb7icficfirKi#ki#kizJiCvh8sh8siu#iY7iY7gjkiY7iY7gjkiY7gjkgjkgMJg6AgmVgmVgjlgjlgmVgYtgjmgiTjLIgiThVziCtiu#iu#gb6gb6gb6h8vh8vgQBh5vh5wijXf8.iZdiBsi#4h2XgGWhXahXahXah0kh2Xh0kh3eh3eh0lh0lh0kh0lih1iTSjLJjLKjLLjLMjLNjLOjLPjLQjLRjLSjLTjLUjLVjLWjLXjLYjLZjL0jL1jL2jL3jL4jL5jL6jL7jL8jL9jM.jiKjM#jMajMbfgOjsJjsJfAXhdKjGOjGOfAXfAXjMcfAXjMdjGPjvPftch9iioTh5xicbicbicbicbizYicbicbh5xicbiTRi#jim0im0iohicbizYizYgmTgfCiY7iY7gjkihqgjkgMJijdibsizJ", +"jMejMfjMgjMhjMijMjjMkjMl.P7jckgiHgiHiqTgiHgiHiqTibrigFh7HjMmjMnjMojMpjMqi15g.HhFlhFliVlgf.hSDhSEfOofOpfRMjMrjMrfOufGSfGVfOvfKOfKOfKOfKOfKOfKOfKOfKPfGSfKPfXVfRMfKPfGSfKOfOvfKOfKOfKNfROiZFiWOiwUiwUjb#icuikeikIh9If0if0jf0jinbinbinbf0jfW8iC6fW8f0jiAjimKikdiudh2IexrfrNjEgjMsjMtjMujMviRniUfiIFjBvjMwjMxjMyjMzjMAjMBjMCjMDjMEhUMjMFjJ3jMGjMHinSjMIjMJjMKjEBjv7jMLjMMjMNjMOinKjMPjMQjMRjMSjMTjMUjKhjMVjy8jMWjMXjMYjwojMZ#QLjM0jM1jM2jM3jzbjM4jM5jwvjnujM6jM7jM8jM9cBBjCgh1ujN.jN#jtBjNajNbjNcjNdjNeg34jNfjNgjNhjH0jH0jKGjNijNjjNjjNijNkjNljNmjNnjNofYSfYSjKOfYSjKPjNpjI.iqVjyuiojhW9hGwjNqjFGjCQieUjFnjNrjKTiwqflIizajNsjNtjNujNvjNwjNxjuXjNyjNzjNAjNBjNCjNDjNEjNFjNGjNHjNIiwwjNJjNKjNLjNMjNNjNOjNPjNQjNRjNSjNTjNUjNVjNWjNXjNYjNZjN0jN1jN2jN3jN4jN5jN6jN7jN8jN9jcXjadjO.jABjO#jOajObjOcjxRjOde40ji2jOegS#jOfjzAjOgjOgjOhgGAgZ4fkWimZhZ2hXafo7gyWh84h6eiKNguxfHRi#liKMhZyguxiKMgjSimZiN0iK5jphhWtiFyfHRfHRfHRjphjphfSmgg#g2ygb9gb7g2yiwSiwSiccieWh5vh8siFhiCuiu#iY7ihqiY7iY7gjkgjkgjkgjkiY7gMJgmVi#ki#ki.yhgchgchgbgfDgiTiu#h1GhIKgfjg6BgIUhgdhgdh.wgb6gb6g6AgQBgfHh8siHZiCMg77i#5gnIih2hz1h0lh0lh3eh3eh0lh0lh0lhz1hz1h0lh0lh0lhXajOijOjjOkjOljOmjOnjOojOpjOqjOrjOsjOtjOujOvjOwjOxjOyjOzjOAjOBjOCjODjOEjOFjOGjOHjOIjOJjOKjOLjOMeaRg31fgNjONjGNfAXeaPjONjONfAXjMcgOljGPh#tfVLfo7icbimpicbizYizYicbizYicbiCLioTiCLiCLi#jipuipuh3bimpihqihqi16imIh8wh8wgfHgfHgfHh8wi#jiZqhWs", +"jOOjOPjOQjORjOSjOTjOUjOVjOWilLiqTiqTiqTgiHiqTiqTilKgf.h7Hh7HhSDiVliFkhL2gb2hq0gf.gf.hSDhSEhSEhSEhSDgbHfGRjgMjMrfKPfKPfGSfOufKOfKOfKOfKPfKOfKOfKOfKOfGSfKPfGRjgMfKPfGSfKOfOvfKOfKOfKNfOyiZFiWOiWOjb#iZFiRniC7ikIiC6iC6fW8inbinbinbf0jf0jfW8fW8f0jiC6iUkikeh8Ih5JgVPeQdjOXjOYjOZjO0jO1jO2infjO3hwRjO4jO5hiqjO6jO6jO7jO8jO9jP.jP#jPajPbjPcjPdjPejPfjPgjPhjPijEBjPjjPkjPljPmjPnjPojPpjPqjPrjwijPsjPt.vMjPujPvjPwjPxjPy#QHjPz#pBjPAjPBjPCjPDiD5jPEjPFjtjjPGjPHjPIjPJjPKaxChVnjPLjPMjPNjPOjPPjPQjPRjPSjPTjPUjPVjPWjPXjH1jzxjH0jzxjH0jH2jPYjPZjP0jH8gS#jwMjwMjH9jwMjP1icTjP2jI#jyuiojiojhW9ikcjP3jP4icaieUioSiwviwtiwriwqflIirqjP5jP6itJjzLjP7fs6jP8jP9jQ.jQ#jQajQbjQcjQdjQejQfjQgjQhjQijQjjQkfljjQljQmjQnjQojQpjQqjQrjQsjQtjQujQvjQwjQxjQyjQzjQAjQBjQCjQDjQEjQFjQGjQHjQIjQJjQKjQLjQMjQNjQOjQPjQQjQRjQSjQTjQUjCrjzEjQVjQWjI#jCuhdJgj4fkVimZi#4i#5fP.gR8gN7iIai9YiKNiTQjQXjx1fHRguxiZpiTQiN0fHRfHRjphhWthWuhWufLJjphh8rjphjphgg#icfgb8gb7g2yg2ygQBgYsgYsg2ygYshPuiWmiCuimIgjkiY7gjkihqihqihqgjkgjkgfHgb6ijdimIgxrgMJiY7jQYjckhL1iFfgmWg6ChL0fGQfRMfOpfOoiVlg.Hhgcg6AgfHgMJizJi#jiCMg77i#5gOkfo7hXah0kh0lh0lh3eh0lh0lh0lh0lh0lih1ih1ih2ih2ftcjQZjQ0jQ1jQ2jQ3jGljQ4jQ5jQ6jQ7jQ8jQ9jR.jR#jRajRbjRcjRdjRejRfjRgjRhjRijRjjRkjRljcX#2ujRmjRnjRod29jRpeWHfL1fgNe9TjRqfEDepjjGOh#sekph#th#tfSBi#4gfGimpimpimpizYizYizYicbiCLiCLioTioTioTicbgfGimpgjkgjkimIimIimIgfHgfHh5whWthWshTrhTrhTr", +"jRrjRsjRtjRujRvjRwjRxjRyjRziCuiqTiqTiqTgiHiqTilKilKh7HigFhFlhL2hL2g.Hgb2ibrigFigFh7Hh7Hh7HhSEjRAh7Hg.GfOpfRMjMrjMrfOtfKOfDifKOfKOfKPfKPfKOfKOfKOfKPfGUfXVfXVfXVfKPfGSfKOfOvfKOfKOfKNfOyizLiWOiwUjb#jb#icui#Bixyh9IiC6iC6iC6iC6fW8fW8fW8fW8f0jiC6iUkde6i#Bicvh2IexsfOCjRBjRCjRDjREjRFjRGiAqinhjRHjRIjRJjRKheRjO6iLjjRLjRMjRNjROjRPjRQjPdjRRjRSjRTiAVjRUjv8jRVjRWjRXjRYjRZjR0jR1jR2jR3jPrjR4iGNjR5jtsjPujBZjR6jR7#QI#sKjtmjR8jR9jM4jS.jqujS#jPEjSajE4dOsjSbjPIjPIjScjSdjSejSfa#tjSgjShjSijSjjSkjSljSmjSnjSojSpjFgjH1jKHjKHjH2jSqjKJgZ5jP0jH7jH7f16jwMjwMjSrgS#jSsjH9jStiqVjytjyujyujSuiwyjSvjSwjCQjIaioSihoiwviwtimnihnjSxjSyjSyihmjSzjSAimhjSBjSCjNUjSDjSEjSFjSGjSHjSIjSJjSKjSLjSMjSNjSOjSPjSQjSRjSSjSTjSUjSVjSWjSXjSYjSZjS0jS1jS2jS3jS4jS5jS6jS7jS8jS9jT.jT#jTajTbaOijGIjTcjTdjTejTfjTgjThjTihkRjTjjTkjyujtVjtVjBjjBjjyuixegnHgvei#5#..iIah84hQKiIaiIaiKNiKMfHRjvljx1fHRiKNiZpgjSiZqiZqhWuhWugg#hWufLJjph#..fSmfSmg.5h8siubgb7ieXieXh8vh8vh5vh8vg2yh8vieWiCuiFhgcwiu#iY7gjkgjkihqihqihqi#pgQBh8wgfHiY7gjkihqgjjgE6iEhgb2hSDgmWhIKiwRfGQfOphgdg.Hg.Ggf.gb2g6Bgb6iY7i#pimph5xifxh6ei#5hZ2h0kh0lh0kh0kh0lih1ih1h3eh3eh3ehZ2ifvhNFfo7fkWfk0jTljTmjTnjTojTpjTqjTrjTsjTtjTujTvjTwjTxjTyjTzjTAjTBjTCjTDjTEjTFjTGjTHjTIjTJjTKjTLjp.jTMjTNjTOjTPjTQjTRjTSffLeWHfgNjTTgOmhhqekofk0jTUekqgOjipuh8wieVi#pgfGgfGimpimpicbiCLipuipuicbgfGimpgjkgjki#pimIiu#iu#i#phWthWshWshTrhTrhTriK5", +"jTVjTWjTXjTYjTZjT0jT1jT2jT3ibsiqTiqTgiHiqTiqTiqTilKigFigFhq0hFliNKg.HhL2hFligFh7HhSEh7HhSEhSEjRAh7HgbHgbHfGRjgMjMrjMrfOufDifKOfKOfKPfKOfKPfKPfKPfGTfGTfXVjMrfXVfKPfGSfKPfOvfKOfKOfOvfOyiZFizLiWOjdZiZFiwUiFSde6ixyh9IiC6jJQjJQiAjjJQfW8f0jfW8iUkde6jT4jT5jT6jT7gnrjT8jT9jU.jU#hOujUajUbiDdinhjUcfmGjUdjUejUfjUgjUhjUijUjjUkjUljUmjRRjRRhOyh7cjRTjUnjUojUpjUqjUrjUsjUtjUujUvjUwjUxjUyjUzjUAjMX#M6jUBjUCjUDjUE.S8jPyiMjjUFjUGjUC.S6jUFjUHjUIjUJiyrjUKjULjqMjUMjPKcxqjHKjUNjUOadmjUPjUQjURe9BjUSjUTjUUjUVjNjjH1jH1jUWjUXjzxjUYhGWjUZjU0e5VjH7jH8jH8jP2jTTjH8jU1jH7gS#jStiqViojjIpgyZjSuiwyiwziwBicaieUioSjSwic#f5Uf2Fi9.i9.i9.jU2ieTimsjU3jU4jU5jU6jU7jU8jU9jV.jV#jVajVbjVcjVdjVejVfjVgjVhjVijVjjVkjVljVmjVnjVojVpjVqjVrjVsjVtjVujVvjVwjVxjVyjVzjVAjVBjVCjVDjVEjiIjVFjVGjVH#mpjVIjVJiV1a9K#6SjVKjVLjVMgrpjtUjwPiojjOgjjujVNgV5gnHfo6gcKfHRiKNioijVOjash84guximZiK5jvlgjS#..iZpiKNjphfSmjphiFyhWthWtjphjphiTQiTQjvlg.5ijXijXiubgb8gb7g2yg2ygQBgQBh8vh8vgYsgYsizJiFhiFhi#kh8wgjkiY7gjkgjkgjkieVieVgfGgfGgfGipvipvijZjVPgMJgb3iVlgb1gxqgxqfOofOoiVlg6Bgb2gb2hgcg6Agb5gjkgfGizYipvh5xh3eh0lh3eh3fh3fh0lifxifxih1ih1h0lh0lih1ifvijggnIhWRfkVgCOjVQjVRjVSjVTjVUjVVjVWjVXjVYjVZjV0jV1jV2jV3#YgjV4jV5jV6jV7jV8jV9jW.duujW#jWajWbiNWdlDjWcjWdjWejWfjWgjWhjWijWjdYijWkjWlgOlfk1fk0fk0ekqh#ufPxgV3gcwgQBh5wh5wh5wgfGimpiKOiTRi#jiKOihqi16i16imIimIimIiu#h8wiCLiFyiK5iK5iK5iK5iK5fHRiN0", +"i9QjWmjWnjWojWpjWqjWrjWsiCsf8.iqTiqTiqTilKiqTiqTilKilKigFigFhFlhL2g.Hg.HhFlh7Hh7Hh7Hh7Hh7HhSEhSEhSEhSDgbHfOpjgMjgMfOtfKOfGSfOufOufKOfKPfKPfKPfXVfGRfGTfGTfXVfXVfKPfGSfKPfKOfKOfKPfKNfOxfRPh2Ijb#jb#jb#jb#icuikeiC7h9IiAjiUkiUkiUkiUkjJQiC6iUkde6jWtinhidjjWue#VesYjWvjWwjWxjWyicvjyCjyCinhjWzjWAjWBjWCjWDjWEjWFjWGjWHjWIjWJjWKjWLjWMjWNjWOinSjPfjWPjm7jWQjWRjWSjRXjWTjWUjWVjWWjWXjWYjWZjW0jW1#jQjW2jnvin5jW3#QIjUGjW4#N#jUIjS#au4jW5jW6iBdbxjjW7jzcjMVjPHjPtcKbjHKcBBjE6jW8jW9jX.jX#jXajXbjXcjXdjXejSpjXfjKHjUWjKHjKHjXgdYijXhjXieWgffLjXjjTTjTTfL1e50jKPfYSfYShQ9jXke9TjXljJCitkgyZjXmg4rjCwjP4jP4jP4gkuggwggwjXnjXofMxirsirsirsg#PjXpihsic#jXqjXrhqTjXsjXtjXujXvjXwjXxjXyhN8jXzjXAjXBjXCjXDjXEjXFjXGjXHjXIjXJjXKgOejXLjXMjXNjXOjXPjXQjXRjXSjXTjXU.OljXVcgsjcWjXWjXXjXYjXZjX0jX1#wUjX2irljX3jX4jX5jX6iqVjytiojj.dixeftfixegj4ftcfo6iK5iSwjX7hQKiKNiIaiKMiK5iN0jvliWmiTQiKNiK5fSmh8rfHRhWuhWufEgjphiTQiKMiN0fYDfYCfYDf49iKSg6zfYAg2yg2ygQBh5wgQBgYsgYsg2yiwRicciwSg2ygfHiY7gjkgjkihqi#picbioTioTi#6h3fh3fioUjohijZjX8gb4gb2giGgfJfOohSDhSDhSDhq0gb2hgdgb5gb5gMJgjkimpicbicbipvi#6h3fh3fh3fh6fh3fh3eifxifxh3eh0lh3eh9iifvg4tfo7icVfo6ixejX9jY.jY#jYajYbjYcjYdjYejYfjYgjYgjYhjYijYjjYkjYljYmjYnjYojYpjYqjYrjYsjYt.CijYujYvjYwjYxjYyjYzjYAjYBjYCjYDjYEetqjYFjWke1rekph5YfPyekqfkZfkZjYGiIai#ki#kgQBieWiCviKOigGgiTiKOi16i16i16igGhVzibsibshVziZdfHRiK5guxiKNhZyhZyfHRiN0jYH", +"jYIjYJjYKjYLjYMfowjYNjYOjYPjYQigGhVzh1GgYtf7GilKiqTilKilKilKhq0gb2iKPiKPg.HigFigFh7Hh7HhSEhSEhSEhSEjRAgbHfKLjgNjgMjMrfKPfKOfKOfGSfGSfKPfKPfXVfXVfXVfGRfDhfGRfXVfGSfGUfGSfKOfOvfKOfOufKNfROh2IiZFjb#jb#jb#iWOh8HiC7de6iUkiAjiUkiUkiUkiUkimKikeikehMejYRjYSifPh3wjYTjYUjYVjYWjT5jyCixEjYXjYYjYZjWBjY0jY1iaujY2jY3jY4jY5jY6jY7jY8jY9h7cjZ.jZ#jZajZbjZcjZdjnajm9jZejRXjZfjWUjZgjZhjZijZjjZkjZljZmiBdjZndGjjZoiD5aCLjtqjZpardjZpaCM#vTjZqjZr.y0jZsjZtjZujZva#pjHxjHKjZljCf#gvjZwjZxfOTjZyjZzjZAjZBjZCjZDjZEjZFjKHjH0jzxjXgeRSdDijXhjXijZGe5VjZHjZIf.mfYTe5rjNnjZJfYTjNnjZIfIajXkhQLhQLjZKgyZhWSixegzkgzkgrLfgPjZLjZMcLzjZNjZOf5UiwtirtjXpijWihsic#ihsiwwjZPjZQjZRjZSjZTjZUjZVjZWjZXjZYjZZh0GjZ0jZ1jZ2jZ3jZ4jZ5jZ6jZ7jZ8jZ9j0.j0#gZWj0ah#Vj0bj0cj0dj0ej0fj0gj0hj0ij0jj0kj0lj0mj0nj0oj0pj0qj0rj0shQMjX4it9j0tj0ugGVj0vixeftfgV5gyXgGAftcfkWimZiKMjDzi7oiKNicWfHRiFyfHRjvlg.5#..fHRfHRi#lfHQhWuhWufSmfAH#..iKMiTQfHQf49h.zfVwf78f79iKSgb7icfg2yh8vgQBh5wh5vg2yh.whgdg6Bh.wg6Bgb5gfHiY7gjkimpgfGiCLixdh3eh3gitRitQj0wij0iTSgjjgMJg6BhL2g.Hg.HiVlhSDhq0ibrhgcg6Agb5gMJiY7ihqizYh5xh3bh3bi#6h3fh3gh3fh6fh6fh3eifxh2wifxi#6ixdi#6h3eh0lfo7h84gZ2fp.j0xj0yeMfj0zj0Aj0Bj0Cj0Dj0Ej0Fj0Gj0Hj0Ij0Jj0Kj0Lj0Mj0Nj0Oj0Pj0Qj0Rj0SfAPj0Tj0Uj0Vj0Wj0Xj0Yj0Zj00jYzj01iMpj02jd.j03j04eWHfPBj05ifmifmfSEfD1j06gR8iTQiccgfHiCtiJMhVzibti16i16igGiohigGhVzhVzilLhVzf8.iN0iK5iKMiN0f8.iTQguxiIaj07j08", +"jTXj09jYIfU2j1.j1#j1aj1bj1cj1dj07j1ej1ei7hf7GiqTilKilKigFilKilKgb2hL2hL2hFlgf.igFh7Hh7HhSEhSEhSEjRAgbHg.GfOogbHjgMjMrjMrfOtfKPfKOfGSfKPfGTfKPfRMfRMfRMfGRfGRfRMfXVfGSfGUfKPfKOfKNfKQfKQfKQgVQizLjb#jdZizLiWOiRni#BikdimKiUkiUkiUkiUkimKikei#Bh8IjT5j1fifPj1gj1hj1ij1jh5Jj1kjyCjYXhwQiDdj1lj1mj1nj1oj1pj1qj1rj1sj1tj1uj1vj1wj1xj1yj1zj1AjZ#iAVj1Bj1Ccxlj1DjWRjUrjRXjZfj1Ej1FjZgj1Gj1Hj1IjHOjUJjE4j1Jj1Kj1LiJwjZq#Ujj1Mj1Nj1OiMij1Mj1PjPAj1Qj1RjZtjPzaBxj1Sj1Tj1Uafoj1Vj1Wj1XfOTj1Yj1ZjZBjPUj10j11j12j13j14j15gKNjwJeMLd3.e52d3#d29jZGd7Wd7WjZGjNnj16j16hQ9fIajU1j17j18gf6gOlj19j2.j2#j2agWsfxkgdbj2bj2ccUuj2djZLcLzgguggujZOirsijVg#TgrKgrKfZufZufZuicgj2eiwwj2fj2gj2hj2ij2jj2kj2lj2mj2nj2oj2pj2qj2rj2sj2tj2uj2vj2wj2xj2yj2zj2AdDhj2Bj2Cj2Dj2Ej2Fj2Gj2Hj2Ij2Jj2Kj2Lj2Mj2NiV5j2Oj2Pj2Qj2Rj2Sj2Tj2Uj2Vj2WihYg#Oj2XgWsfp.gyXgyXgj4fkWgGWi#4gjSilMikwiKNiK5fHRhWujphf8.h8riK5hWsiZqfSmfSmiFyiFyjphjvliTQfHRiTQgjSf78f79g.3gcviwTiwTizKh.ziuciwSiccgQBg2yicfgfIgb2gb2gb2hgcgb6g6AgMJgfHihqiCLixdh3ehz1go#ihoioVjIaitRihrimpiY7gMJgb3gIUgIUhFlhFlgb2hgcg6Bgb5gMJiu#imIi16h3bim0iBsj2Yh3bi#6h3firYirXirXh6fh6fh3ei#6i#6ixdifxh0lh0khWRijgfkXjVNfk3j2Zj20j21j22j23j24j25j26j27j28hkSj29j3.j3#j3aj3bj3cdqbj3dj3ej3fj3ggKnj3hj3ij3jj3kj3lj3mj3nj3oj3pj3qalcj3rj3sj3tj3ujdgfPBfLYifmhkChg3fDYfDXgR8i9YhPuiwRiccicciu#iu#imIi16igGigGiKOhVzhVzizJiCuh8rjphf8.iCuiCuhZyguxiIaj3vj3wj3x", +"j3yju9j3zj3Aj3Bj3CdkNjYOj3Dj3Ej3Fj3Gj3HfD3hPuigFibrilKilKilKilKhq0hL2iNKg.HiVlh7HigFh7Hh7Hh7HhSEgbHg.GiVlg.GgbHjgNjgMfXVfXVfXVfOtfKPfGTfGTfXVfRMfRMfRMfRMfGRfGRfRMfXVfGSfGSfKOfOufKQiWOizLiC9j3Ij3JixAj3KiwUiRnihHikdikdjBujBuikdikeikeh8Hh8Ij1kjUaj3Lj3Mj3Nj3OhpkiudiOsj1kjyCjYXj3Pj3Qj3Rj3Sj3Tj3Uj3Vj3Wj3Xj3Yj3Zj30j31j32j33j34j35j36jZ#iAVjUnj1CcJ9j37j38jUrjRXj39j1Fj1Fj4.j4#j4aj4bj4cj4dj4eiSjj4fj4gjqujnwjW2j4hjPv.B8.MAaH.jKkjKqj4ijR9jPzjwkjKijMYj4jj4kj4lj4mj4nfDDfO5j4oj4pj4qj4rjSojHZj4sj4tj4uj4vdYij4wd3.j4xd7Yj4yj4zd7Wj4Af.mfL1jJCiqVgOmfVOh#sjXljI7iqVekohhqgyZgrJivYj2bgdbj4Bj2dj4Cj4CcPVcPVg0ncLzggucZgj4DjZNj4Ej4FfWlfWlf5Tf2Ef5TfWlfWlfZviwtj4Gj4Hj4Ij4Jj4Kj4Lj4Mj4Nj4Oj4Pj4Qj4Rj4Sj4Tj4Uj4Vj4Wj4XhTsj4YgcRj4ZfYVj40j41j42j43j44j45j46#DSj47j48.DSj2Oj49j5.fWfj5#j5aj5bj5cj5dj5ej5fj4Egj8iPCftggrLixegV5fo6gyWg0ri#4iNZh84h6eiKMfHRfHRfLJiK5fHRfHQguxhTrhWtfSmjphiCMiCMjphi#l#..fHRfHRi#lizKf79g.3f78g.3f78f78f78fYDf49iwSirKg2yiKQgmWgmWgIUiNKg6Bgb5h.wh8vh8vi#pieVi#6hXai04j5gjXpjXpihoimoh3fizYihqiY7gb5g6Ag6Bg6Bg6Bg6Bg6Agb5gMJiY7imIiKOiohjLIiBsiN0h6ch6dh9iirXirXifwh6cirXj2Yh6fh6fi#6ifxifxh3eh2wh6egyWgZ4ftfdbQj5hj5ij5jj5kj5lj5mj5nj5oj5pj5qj5rj5sj5tj5uculj5vj5wj5xj5yj5zj5Aj5Bj5Cj5Dj5Ej5Fj5Gj5Hj5Ij5Jj5Kj5L.M#j5Mj5Nj5Oj5Pj5Qj5Rj5SfDVifmfVNfDYfDZhhpgf8j5TgjSiccg6Ag6Agb5gfHhBWhVzhVzhVziKOi16igGh8sh8sh8sh8sizJh8sguxgOkgjNgR8j5Ue96j5V", +"j5Wj5Xj5Yj5Zj50j51j52j51j53dkNj54j55fsBfsCiKKhBXgYtf7GibrilKigFigFhFliNKiKPhFlh7HigFigFh7HhSEhSEhSDfOogfJhSDhSDgbHjgNfOpfGRfGRfRMfGTfGTfGTfXVfRMfRMfRMfOpfRMfDhfGRfRMfGTfGTfXVfRMfXVfGVizLj56ixAixzj57j56iRnh8HihHihHikdjG9jsRi#CiF3icvimJj58idjj59j6.j6#j6aj6bh5JhwRjO3iOsjyCidjj6cj6dj6ej6ej6fj6gj6hj6ij6jj6kj6lj6mj6nj6oj6pj6qj6rj6sj6tiAVj6uiLVj6vj6wjp7jUrjRXj6xj6yj6zj6zj6Aj6Bj6Cj6Dj6Ej6Fj1Kj6Gj6HaCL#boannj6IjPuj6Jj6Kj6Lj6Mj6Ni6hj6Oj6Pj6QjW2jKs#i4j6R#nFethj6Sj6Tj6Uj6VjFgjPVj6Wj6Xj6Yj6ZfVRj60j61e5Sj62d3.dDij63j64jRpjXkjP2jJCjGPgGCh#sgOmjXlgOljXlhQLgOlgyZgGCj65itlj66itlcZgj2dj4Cj4CcPVcPUcPVj67j2dcPUcPUg0nj68j68j69j7.j69j7#jZLj7afMxfMxfZrj7bj7aj7cj7dj7ej7fj7gj7hj7ij7jj7kj7lj7mj7nj7oeezj7pj7qh2wh0fj7rj7sj7tj7dj7uj7vj7wj7xj7yj7zj7Aj7Bj7CgOuj7Dj7E#22j7Fj7Gj7Hj7Ij7Jj7Kj5ej7Lj4Cj7Mj7Nj4FftggrLjVNh0fgrkfkWh2Xi#5h84fkVfkWicWimZiK5g3pg3phr9hWsgZQhTrfLJfAHjphiZqjphgjSf1RfAHfSmfSmfYDf79iwTf79f79izKipaiKSiKSf78f78f49iEgiubhq1iFkhL0iwZiwZh.wgfIicfiucieWimIi#pi#6gzlgkwgvEjXpijWj5gi04ihpjogizYi#pi#piu#ijdijdh.wg6Agb5gxrgjkgjkihqicbiTRim0j7Oi#4iCMh3ch6cgUzh9iirXh3ch3ch9iirXi#6h3eiFyh3eh3eh0kih2hNFgKQgKOj7Pj7Qj7Rj7Sj7Tj7Uj7Vj7Wj7Xj7Yj7Zj70j71j72j73j74j75j76j77j78j79j8.j8#j8aj8bj8cj8dj8ej8fj8gj8hj8ij8jj8kj8lj8mjD4j8nj8ojWijdegclfSEfD1hkDgqOgGyfHyfHA#..g2ygb5gb6h8vgfHicchBWibshVziKOi16i16izJh8siCuiFhh8riIagf8gf8fHzj8pj8qj8rj8s", +"j8tj8ujMjj8vj8wj8xj8xj8yj8zj8Aj8BjmIj8Cj8Cj8Dj8EhqXj8FiMziMzhcqi.yhq0hFlg.HhL2hq0h7Hh7Hh7HhSEhSDg.Gg.Gg.GhSDgbHjgNjgNgbHfOofGQfGQfGQfGRfRMfOpfOpfOpfOpfOpfOpfGQfGQfRMfGQfGQfGQfDgfDgfGQj8Gj8He3Aj8IixAj56iudh8IihHh8IjEki#Ch5Lh5LicthZMj8Jh4aj8Kj8Lj8Mj8Nj8Oj8OisgisgjO3jYRj8Ph9Zj8Qj8Rj8Sj8TfLFj8Uj8Vj8Wj8Xj8Yj8Zj80j81j82j83j84j85j6sj86j87j88jg4j89j9.j9#jjYj9aj9bj6yj9cj9dj9ej9fj9gj9hj9ijkEj9jj9kj4gj9ljW2jPyj4hj9mj9n.y2j9oj9pj9qj9rj9saCMiMkaBx.Hwj9tj9uj9vfbMfbLj9wj9xgdajXej9yj9zjzwcLCj9AdPAeknd3.j9BjZGj9Cj4xjTSfIafIajTTjJCgOljStihZjI7jI7jXlj65jZKj9Dj9EjJCj65gSvj2dj4CcPVj4Cj9Fj67j9FcPVcPVj67cPVcPVj9GcPVj68j9Hj9Gj7tjZMj68j68cLzjXoj7.jXofByj7.jXnj9IfS7flGj9Jj9Kj9Lj9Mj9Nj9Oj9Pj9Q.03j9Rj9Sj9Th5wi#lfVuiNZj9UflCj9Ij4Yj9Vj9Vj9Wj9Xj9Yj9Zj90j91j92j93j94j95j96j97j98j5cj99k..k.#j4Eggwj69fxlgj9gj9gGUhWSjjuftcfo7hZ2fkWfkWggpfkVgjNiCMiK5g77gZQg3piK5guxgZQhZyf8.fAHfLJjphiTQfYDfAGfsTfVuf78f78fVwf49iwTiwTf79iwTf79f79izKiKSiubhL0gjlhL0iNKhL0iubiubiubiubh.ziCwimIi#ph5ximoj5gg#PjXpj5gk.ai04imoihph3fizYgfGiKOhVzimIimIi#kimIimIimIiKOgfGicbicbh5xiZqh9ih3eih0h6ch6cj2Yj2Yh6ch3ch9iirXifxh0kh0kh3eh0lh0lih1g4tgrjk.bk.ck.dk.ek.fk.gk.hk.ik.jk.kk.lk.mk.nk.ok.pk.qk.rk.sk.tk.uk.vk.wk.xk.yk.zk.Ak.Bk.Ck.Dk.Ek.Fk.Gk.Hk.Ik.Jk.Kk.LjTak.Mk.Nk.Ok.PjGMhkCfD1gCzgCzgqOhrXfHzfw4irKgb6iwRiwRiuaiwRibshVzigGiHZiN0jAPjdtf8lk.Qk.Rk.Sk.Tk.Uk.Vk.Wk.Xk.Yk.Zk.0", +"k.1k.2k.3k.4j8vk.5k.6k.7k.8k.9k#.k##j54k#ak#bk#ck#dh8tk#ek#fk#gjdMk#fg6Cgf.gf.gf.i.zhVygb1gb1h.vg.GhSDh.vh.vhVxgbHjgNgbHgbHfOofOofKLfKLfGQfKLfKLfOpfKLfKLgfJiFjiFjiFjiFjiwXiuefnGf75k#hk#ik#jgd8k#kk#liwWh5Jicvh8Ih8Ii#CiuLh5Lictictk#mhUvk#nk#ok#pk#qjBvk#rjJTisgiOsishk#sh90k#tfrQeoje0afAzk#uk#vk#wk#xk#yk#zk#Ak#Bj81k#Ck#Dk#Ek#Fj36dxyj36k#Gk#Hk#Ik#Jk#Kk#Lj9ak#Mk#Nk#Ok#Pk#Qk#Rk#Sk#Tk#Uk#Vk#Wk#Xj1LiD5jUCj1Ok#Yk#Zk#0k#1k#2k#3iGLk#4apDjZvk#5k#6ivEk#7k#8k#9ka.j6TjpEka#kaakabkackadkaef8rkafkagkahkaidYhkajeMMkajjZGeWIj16kakjRpjXjkalkaljdug0qj18jZKkamihYfAXjXlkanitlj67j67j7tj4Cj4Cj9Fg0ncPVj67ggvcPVkaokaoj67j7dj68gcQkapj68fQ.j7tkaqj9IiyFj7cfxSfk3kariyFf2EjXoftLirs#aWkaskatjsBkaukavkawkaxkaykazkaAg.5i#lfAHfkXfxlflDfk3karfIJcC5kaBfVSkaBj9VkaCkaDkaEkaFkaGkaHkaIkaJj7JkaKcLzggwggwj69kaLj7ckaMj7ag#Ogrqj2agCOfo7ih2fo8gKrhdjgS.gKriCMi#4g77g77iK5jphh6egZQiK5f8.iCwfSmfAHjvlf79f78f78g.3izKf49g.4f77iwTizKiucizKizKiKSg6zg.IgIUhL2hL2hL2iNKhYEiucirKizKiuciCtijYizJiCvi#6imoj5girtjXpijWioSieUimoihph3gh3eh5xh3biKOiKOiKOi16i16iCvi#jipuipuioTixdi#6ifxh3eh3eiCMh9ij2Yj2Yj2Yj2Yj2Yj2Yi#6h3ehXah0kh3eh9ih9ihNFgzlkaNkaOkaPkaQk.xkaRkaSkaTkaUkaVkaWkaXkaYkaZka0ka1ka2ka3jGqd72ka4ka5ka6ka7ka8ka9kb.kb#kbakbbkbckbdkbekbfkbgkbhkbiaEZ#bUkbjkbkjl7kbljZHekqhg3gqOgCzkbmgf8gf8jx1h.zirKiwRhcqh.zgjSiTQiHZh8rjaGfD2g7rkbnkbokbpkbqkbrkbskbtkbukbvkbwkbxkbykbz", +"k.3kbAkbBkbCkbDkbEkbFk.8kbGkbHkbIkbJkbKkbLkbMk.WkbNkbOkbPkbQjOWkbRkbRkbSkbTkbUh.zhq1f7HgbQiFkhL0iVlg.GkbVkbWi15h.vgbHgbHgbHgbHgbHfOog.Gg.Gg.GgfJfOogfJfzFjjFiCxhYEfvLjj.fvLjj.iFikbXkbYkbZfW6kb0kb1cWwhWFh8JicwicvifbipciUgkb2kb3kb4j3Rkb5kb6kb7kb8icvkb9jJTj8OiIFiOskc.iAskc#eeHffxeVpkcakcbkcckcdkcekcfkcgkchkcikcjkckkclkcmkcnkcoj89j1Acxlkcpk#HkcqkcrkcskctkcukcvkcwkcxkcykczkcAkcBkcCkcDkcEkcFkcGkcHkcIjZmj1MjW1kcJkcKkcLkcM.B6kcNiGMjZvkcOkcPkcQkcRkcSkcTka.#fAkcUkaakcVkcWkcXkcYkcZf5skc0hrZkc1kagkc2kc3kc4kc5kc6f17j4Aj4Akc7j4AffMkaljdug0qkc8kc8kc9kd.j17jWlkd#kamkdakdaj68j7tg0nkdbggvg0nj67g0ncUuc35cUxkaoj68j68j9Gj9Gkdcj9Gj68j9Gggvj68j7sflDkddkdejZMg#RfQaf8LitUgvEkdfkdgkdhkdikdjkdkdHbkdlkdmkdn#LiiTSih2fo7icWkdokaqeSykdpeSyj4Ykdqkdqj4Yj4Ykdqkdej68kdrj60kdsj5ekdtj7dj2dkdukdvkaLkaLkaLj7cj7cj7aj2XgOKkdwgcMh2XgGWgGWgcLggpgKrgR9fHRh6eg77iFyjphiZdfHRiK5fHRi#liCwhcrhcrh.ziucf78f78g.4izKh.zf79h.zizKg2ygb7gb7gb8g6zg.IiNKhL2hL2gIUiNKhgdh.wg2yh8vicciucirKh5viCvi#jh3eimoihoirtirtijWioSi04i04gzlhz1hz1h3fh3eh6fh5xioTiCLiTRiTRiHZiBsh9ih3eifxh9ih9ih3eh3eifxifxi#6ipvipvipvh6fi#6i#6h3eh2Xhz1hXai#4h3ckdxkdykdzkdAimxkdBkdCkdDkdEeLTj79kdFkdGkdHkdIkdJkdKkdLkdMkdNkdOi4OkdPkdQkdRkdSj79kdTkdUkdVkdWkdXkdYkdZkd0kd1kd2k.qkd3kd4kd5.Yukd6#DSkd7i1XgckgvbgvcgqOgqOhhpkd8ivVkd9iwTiEgiCtjAPiSwiHZjAPhWqke.ke#keakeakebkeckedkeekefj3xkegkehkeikejkekkel", +"fsWhhohWqkemkengr.k.SkeokepkeqkbMkepkeokeqkerk.TjpLkesfzXj8pketkeukevkewkexfbukeykezkeAiFgiwTiwTiTDgjniFgkeBkeCiFkgbHhSDhSDgbHgbHhSDhSDgf.gf.hSDgb1gYpkeDkeEkeFf77h.zf49f78f78f1SjpTkeGkeHjmQkeIkeJkeKkeLh8Lh8KipciUgkb3keMkeNf6SkeOkePkb6keQkeRicvj.Aj8Oj8OkeSidjkeTh68keUiDfiAykeVkeWkeXkeYkeZke0ke1ke2ke3ke4ke5ke6ke7hBYke8ke9kf.cs1j6tkf#kfakfbkfckfakfdkfekffkcvkfgkcxkfhkfikfjkfkkflkfmkfnkfokfpcKakfq.U5kfrkfskftjPyjZpkfrkfukfviJxkfwkfxkfykfzasIkfAkfBkfCkfDkfEgdakaagI0g4okfFkfGhrZkfHkfIkc0kfJdy6kfKkfLkfMeaSeaRf.ne5UkaljdukfNkc8g0qkfOeaRj2WkfPj16kakj9Dkc9kfQkdaj68j68j4Cj9Fc35c35kfRkfRcUuj9DcUxcPXkaoj7tkdckfSkfTgcRkapkdcj68j68kfRfVScPSkfUgcQkdocPWiPCf5SgKSimHiyFflGkfVkfWkfXkfYkfZkf0kf1kf2kf3hVxjMriY7ftdjFHj4Ekf4kaqkarkarfVScd1cyNkf5karkdqkfUkdckdskaKj7dj7rkduj4Ej4EkdvjZNj69kaMfS7jXnjFHgGVhWSgvggKQgzlhz1gGWgcLgcLgR9hTrhWshTrhWshWufHRiZqjphfHRgjSfYDh.zhcrh.zirKh.zh.zh.zh.zizKizKizKiubg2ygb7gb7gb8g6zg.IgIUiNKhL2gb2hL2hL2g6Bh8vh8vh8vh8viwSieWh5vieVh5xh0li04ihoirtjXpijWihoi04grMgnJimoi04ihpihph3gh3eh3eixdixdixdh6dh6dh6di#6ifxh9iih1h0lh0lifxh2wh3eh5xipvipvipvi#6i#6ih1ih2iYdhZ2icWih1ijgkf6kf7kf8kf9kg.kg#kgakgbkgckdMkgdkgekgfkggkghkgikgjkgkkglkgmkgnkgokgpkgqkgrkgskgtkgukgvkgwkgxkgykgzkgAkgBkgCkgDkgEkgFkgGkgHkgIkgJkgKkgLkgMhdifDYgqOgqOgqOgqOfHBk#ejjEiuciCuh8rivVkgNh2skgOkgPkgQkbLkgRkgSkgTkgUkgVkehkgWkgXkgYkgZkg0kg1kg2", +"gfBieagb4ieagxrgxrimIimIizJigGkg3#a0kg4kg5hk2kg6fsWkevkg7kg8kg9kh.kh.kh#fwIkhakhbfwHkhckhdfYDfVuh.zhL0h.vkhekbWfKJjgNgbHjgNjgNgbHg.Gh.vhL1gjlf77khfkhghDRkhhkhikhjfAFh8tkhkjj#jQXf1Rkhlkhmkhn#.0khokhpi5fkeNiZGkeNkeNkhqeQkkhrkeOkhskhtkhuiFFimJkhvkhwjO3infjO3kc.khxiIGkhyiDfkhzkhAkhBkhCkhDkhEkhFkhGkhHkhIkhJkhKkhLkhMkhNk#DkhOkhPcSYkhQcJ9khRkhSkhSkhTkhUkctkhVkhWkhXkfgkhYkhZkh0kh1kh2kh3kh4kh5kh6.HJjE4j6QiGLjHJkh7j6QkcIiMkkh8k#4j6Pkh9ki.ki#fwcfwnkia#SukfDkibgdakickidkiej2VeRNkifkigkihdDlggxc8WcUyc8Wc8Wfv5kiikiikc7ffMkc8jdug0qjWlkaleaRj2WjVQeaSj60kfTkaodbRdbRj4Cj67j4CihYitlcPVj67ggvdbRkfPcZfcUxc8WkaokapkijkikkilefFkimkinkapj7dj9Gkf5kiokfTcPWfgPkipkiocLzgrqkiqkirfpaj9Fkiskitkiukivkiwkixkiyj2#jNqkizgjmgbZgYth0ggrLg#Oggwfk3fdaeNqe6DkaBeNqfdae2#flCkf5jZMj7rkdukdukiAcLBkdvjXnkiBg#njXnjZNjFHgGUj0vixegKQgrMgGWgcLg0rgR9g3ph2wh2whWshWuhWsfLJhWuhWsfHRfsTijYizKf49f78iwTf78izKizKhcrh.zg2yieXieXieXgb7g6zg6zg.IiNKhL2iNKiNKgb3gb3g6Bg6Ag2ygfHgfHgfHieWijXh8siCLioTh3ek.aijWijWjXpjXpijWgo#grMgo#j5gi04i04imoimoihph3gh0lh0lifxifxh3eh3eh3eh3eh3eh0lh0lh0lh3eh0kh0kh3eipvipvimqipvipvih1g4tih2ih2i#4ipvkiCkiDgZCkiEkiFjgJjh3kiGkiHg6Egf7kiIkiJkiKkiLivWkiMkiNkiOkiPkiQkiR#ihkiSkiTkiUkiVkiWkiXkiYkiZki0ki1ki2ki3ki4ki5ki6ki7j5rki8ki9kj.kj#kjakjbkjcgclfSEhv0gCzkbmgqOkbmfADjpTizKijYiWmkjdkjekjffADijXgQBh8vi#kieWh8sfSmhJAkjgkjgfX7gJOfozhWrhQlhWr", +"iCuiccijdiEhgMJiEiiEhgIVgfBiPykjhkjikjjkjkiSvh.AhuIkjlh8tgC.kjmkjnjYQfwHkjokjpgcxkjqkjrkjsjJIjvlfVuhcqiQKgxqiFfgbHgbHjgNjgNgbHhSDgjnhL0ipakjtkjuc1kkbZhikkjvkjwkjxfv7iKKkjykhkk#eg.5kjzkjAkjBkjCkjDdXFkjEkeUkjFkjGkjHfm8kjHkeOkjIkjJkjKjWzimJkjLjgTiF4kjMkeSkc.f6Sf6SkjNkjGkjOkjPkjQkjRkjSkjTkjUkjVkjWkjXkjYkjZkj0kj1kj2kj3kj4kj5kj6cSYkj7cJ9iAVkj8kj8khTkhUkj9kk.kk#kkakkbkkakkckkdkkekkfkkgkkhkkikkjkkkkklkkmiD5#QIkfrin3kknjZvjW5.vLkcOkkokkpkkqkkrfwnkksfYdjZykktjZCkkujwIj2VkkveD#kkwkkxkkyj60cUxcUxcUyc8Wg#kjVQkc8jRpeaRjdukc8g0qjWleWHeaRkfOeaRkkzkkAgcPcUykkBkkCj4Cj4CkkDkd#jZKkkEj2dj2dcUukkFkkGkkHc36cPXj4ukkIkkJkkKcLCkcZkkLkkMkapj68gcQkkNkipkkNcPVkkOgcQkkPkfSkkQggxggxkkRhQMkkSkkTkkUkkVkkWkkXkkYkkEfk3ezbflCf8Mgxrh.xgiTh0jg#Rg#nkkZh8Re18eNoeDUe18e18eNqfVSkdufk3flDflDflDg3ykdvkaLg#mg#ng#mggtkk0kk1j0vgCOgo#grMgcLgZ3hXag77g77h2XiFyiFyhWsfSmfSmhWshWshWsfw0icefVwfYCf78iKSiKSizKizKizKiwSg2yieXicfgb7g6zg6zg.IiNKhL2hL2iwZhL2g6Bg6Agb6gb5h8vh8wh8wh8wgQBizJi#jioTixdh0li04ijWijWgvEgvEijWgvEggqj5gk.ak.ak.ai04i04i04imoihpihph0lih2ih1ifxh3eh3eh0lh0lh3eh3eh0lh3eh2wifxh6fi#6ipvipvi#6ih1hNFih2hXah0kj2Ykk2kk3kk4kk5kk6kk7kk8kk9fa.j67kl.kl#klaklbklckldj79kleklfklgklhklikljklkkllklmk.jkaZklnkloklpkiPklqklrklskltkluklvklwklxklyklzklAklB.NKklCklDjRqgcmfSEfDYhvAkbmkbmj5TjQXiwTizKijXfsTijYh8vh8vgQBh8vh8vh8vh8vh8vh8vh8vgYsfAHfEff1Tg.5ijXijXh8s", +"kjlk#ehIKf8.fv7iTQiCuibsfsWklEklFjojklGi.xklHh.ziEgi.ygb2gfAgmViCtkjlgNCklIkjpklJklKklLkeyklMklNfYCf78iFgiQJg.GgbHgbHjgNgbHg.GiVliQKhq1iNBklOjmMklPklQgLfklRklSklTfv7fw3klNh8tkhkkjlkjkklUe9bklVklWklXklYklZkjOklYklYkl0kl1kl2kl3kl4jUcicvjMwkl5kl6kl7kl7kl8kl9km.f9KkjGkm#kmakmbkmckmdkmekmfkmgkmhkmikmjkmkkmlkmmkmnkmokmpkmqkmrkmskmtkj7c2xj1CjZdkj8khRkfdkj9kmukmvkmwkkckmxkmykmzkmAkmBkmCkmDkmEkmFkfpiGNkmGjW2#QHiGNkmHayVjwjjkl#vTjPwkmI#Y8j6TfLlkkskmJkmKkmLkktkmMjzwj2VkkvkmNc8TdPAkmOkmPc8WgWrc36kmQe5Ue5UeaRj16d7Wkc7jRpkalhQLkalffMkfOjVQkmRkfMkfKcUykmSkiij9DkamihYkd#kd#gSvkd#ihYkkBj9DkfPg8rg8rcZigcPcLCkmTkmUkikkmVkmWkcZefFj9GkfTfVQefFefFkinkfTkipkingcPggxggxefFkmXkmLex5kmYkmZkm0km1km2km3kkDj7bkm4km5flCe2#e2#itnkm6iqYiwyfxSkm7km8h8Re18fdafdafdakm9fVSkddg#nkddflDkddfdag#mjXnfk3j69j69ggwj2bgvFfp.gD#gdggnJgKrg0rg0rgZ3g0rh2XhTrhTrhWsg.5fSmhWshWsfLJfEiiceijYg.4izKg2yirKizKizKieXicficficficfg6zg6ziwZiNKg.HhL2iQKiCyhgdh.wgb5gfHgb5gQBi#ph8wi#ph8wh5wiCLioTh5xh0lk.aihoijWgvEgrKgrKgvEgdggvEj5gj5gj5gk.ak.ak.ai04grMgzlgzlkn.ih2h0kh0lh0lh0lh0lh3eh0lh0lh0lh2wh3ei#6i#6i#6i#6h3eh3eh9iih1h2Xh2Xkn#knaknbkncjGQkndex9kneknfkngknhkniknjknkknlknmknnknoklmknpknqknrknskntknuknvknwknxknyknzknAknBknCknDknEknFknGknHknIknJknKknLknMknNknOknPknQknRknSfK6ifmfVNj06kbmhTqknTfozfw4f1RfAGijYiwSizJhVziwSieWieWh8sh8siFhh8sieWieWieWijXfAHiWzfEffAFfw4", +"knUfw4knVgFVknWkbNhMQfoOknXknYknZfK7#iikn0iMBhcriMBg6Cgb2ijeijeibribrgb2i.yh8tkjnf7ZklKklLkjqkn1jj#iwTiKQhL0giGgbHjgNgbHg.Gg.HiFjg.HhL0kn2kn3kn4kn5kn6iuckn7gBbkn8j5TfLtfAFfkskn9kjyko.fDoko#imNkoakobkobkockodkoekofkogkohkoikojkokifakjLkolkomf9RkonkookopkoqkhxiIGkorkoskotkoukovkowkoxkoykozkoAkoBkoCkoDkoEkoFkoGkoHkoIkoJke9koKkoLjZ#kj7kcpkfbkoMkoNkoOkoPkoQkoRkoSkoTkmykoUkoVkoWkoXkoYkoZko0jtijE3iGNko1iMiko2jwkko3jtljtlko4.vLko5ko6fsxko7fORfwAko8ko9j6Wkktkp.kp#g#lhg6kkGkpakpbjMbgWrjVQe5UeaSjRpjXkjZHj64j64j64j64eaSffMffMeaRgWreaRkmRekskfMkmQc36cZfjVQdbRkkCcZhkpcgSviqWgSvdbRdbRkfNkfPkpdc34kkykmUkmUg#lkikkpekpfkpgf18kinkfSkphkkMefFcPYefFfVQkfTkfTj60kpikpjkpkkplkpmkpnkpokppkpqkpreNqkdcg#Oj7akpsflCeNpeNqeNoe2#e6DkaBkm4f.Yfdafdafdae18fdafdafdakm9km9eDUfdaeSyfk3eSyfk3fk3kddfS7j7cj7ckaLftggktefzgV5grmgcLg77gR9gR9g77h6eh6ehTrhWsiZqh8sfHRhWsgN9hWuh5viceiceiceg2yieXiceiceg2yicficfgfIg6zg6zgfIgIUiNKg.HhL2hgdhL0hL0g6AgfHgQBgfHgfHh8vh8wh8wh8wh8wfYFieVicbh5xh0kgo#gvEj5gj5ggrKggZgo.go.go.go.go.go.go.j5ggvEk.agrMgnJgrMgzlhz1h0khz1h0lh0lh3eh0lh0lh0lh0lh0kh0kifxh6fh6fipvifxh3eh3eh0kh6eifxkjxkptkpukpvkpwkpxkpykpzkpAjwMkpBkpCkpDkpEkpFkpGkpHkpIkpJkbdk.pkpKknqkpLkpMkpNkpOknrkpPkpQkiMkpRkpSkpTkpUkpVknGkpWkpXkpYk.qkpZkp0kp1.0rkp2kp3kp4kp5h#thdihg3gqOgqOhJAhJAgnufozfw4fVufYDiwSi#kirKirKiKQirKfsTfw1fAHg.5ieWieWijYh.ziuchcrfYDfVufVu", +"kp6#Vtkp7kp8kp9kq.kq#jRxkqakqbkqckqdkqe.7OkqfhIIhgehcqi.yijeijegfAgjmgjmibrgf.hIKkqgkqhkqikqjkg7kqkf49hL0iNKiVlgb1gb1gb1g.HiKPiKPgmWiTDiFgg6Akqlkqmkqnkqo#kSkqpkqq.R2fLtfEfkn9kbWkqrf44kqskqtkquk#ukqvkqwkqxkqyf1HkqzkqAkqBkqCkqDihHipbkqEkqFkqGkqHkqIkopiaSkhxh68kqJkqKkqLkqMkqNkqOkqPkqQkqRkqSkqTkqUkqVkqWkqXkqYkqZkq0kq1kq2kq3kq4dxyj6tkj7kcrkq5kq6koNkq7kq8kq9kr.kr#koTkoTkoUkrakrbkrckrdkrekrfjtik#XjZoiMkkrgjnujwkjwkjtkin3#5nin3krhfwckrikrikrjjUSkrkj6Wkktkrlkdskrmj40krnjD6d28jMbkrokiikiig#kg#kkc8j9Dg#keaSeaSeaSg#kkkFkkFkkFkrpg#kkmQkmQeaSg#kcZicZikkFjVQkrokfNkfNkfNgksgksj2WkfQkrocZgkroj9Bf.pf5qkcZf5qf18j9ZkrqeWRkrrkrscHkf8skrtcLCkkIkrukkLefFkfSgcPgcPkrvkmXkrwhQ7krxkrykrzkrAfbEkrBkdcj66kf4karkpsiv2j7dkpseINflCkaBkaBeNoe18eNoeNoeNofdae2#eNoeNoeNokm9fdafdaeDUkaqeSyflDfk3fk3g3ykaMfIbiw1gvffxkgvhgCOfteg0rh2XgR9g77h2XguxfHRhWuhWugcwijXhWufLJhWsfLKfEifYBh5viceiceiceg2yh.wh.wg6AgfIgfIgfIgfIg6Bg6Bhgdg6Bg6Bg6BiuaiwRgfHh8wgQBh8wh8wgQBi#pi#ph8wh8wieVieVicbi#6h0lk.aihoj5ggvEijWgvEgo.gkwj5gj5ggkwgvEj5ggvEggZgvEgo#grMgrMgrMgGWhXahXah0kh0lh0kh0kh0lh0kh3eh0lh2wh3eh3eh6fh6fi#6h3eih1ifvgOkh2XkrCkrDkrEkrFkrGkrHkrIkrJkrKkrLkrMkrNkrOkrPkrQkrRkrSkrTkrUknJkrVkgwkbdkrWkrXkrYkrZknCkr0kiVkr1kr2kr3kr4kr5kr6kr7kr8kr9klnks.ks#jU7ksaksbkscksdkseksfksgkshhofgvcfDZhkEf8#ksifArfAFjvliMBijYg2yg2yg2yg2yicefEig2ygYsg2yg2yg2yiucijYfsTfsTfsSfsSfsS", +"ksjkskkslksmksnksokspksqksrksskstksuksv.NOkswksxksyiJMiJMgfAijegjmgfAgjmhq0hq0hq0gjlfsFkszfoQkjqkewksAiFkg.Hg.Hi15i15gxqgxqiNKhL2i.yiFgiwTiubksBksCksDksEksFksGksHfEffw3k#dj1eicdf72ksIksJksKksLksMkcbksNksLf1HksOksPksQksRksSh8HjBvkqEksTf9RksUkqIksVksWksXe3OksYksZks0ks1ks2ks3ks4ks5ks6ks7ks8ks9kt.kt#ktaktbktc#Cjktdkteha8ktfktgkthcJ9ktij1CkhSkq6kfaktjktkktlktmktnktoktoktokraktpktqktrktsko0kttktuktvktwiBfahwcBAalCalCkkoj1LktxktyktzicSktAktBjZzj6WkktktCj2VktDkkwkrng8rdPzg8rffMkfOfcBfcBkkFfcBkfNkkBc36kmQkmQkpdkdrkkFkkFkfPkrpkfPjVQfcBkrpkkHc36kmSj2WfcBkiikrojVQkrokfPktEktFktEgksktGjKGktHktIktJktKktLktMktNktOktPe1AktQktRktSktTkmUf8skmTfYVkruefFkdrggxkpjktUktVktWasNktXkryktYktZkdcj4uj7tflCj4YeSykarkt0kt1kt2kaBcd1e2#e18eNoeSvkt3fdaeNqeNoeINeINeINeNoh8Re18f.Yfdaf.Ykt4j7cj7cg#nfIbj4FftggktgyYgnKgdgggngnIi#5gZ3g0rg0rgR9hWshWsfLJfYFgg#hWuixdhWugg#gYsicefEiiceg2yh.wgfIg6Ag6Ag6Ag6Ag6Ag6Bg6AgfHgb5gb5g6Agb5gb5gfHgfHh8wi#ph5wh5wi#pgQBgfGgfGi#pi#pieVieVicbh5xh0lk.aihoihoijWijWihogo#ihoj5gj5ggvEj5gj5ggkwgo.ggZgo.gkwgnJfo8hXah0kh0lifxifxifxh0kh0kh0kh0kh0kh0kh0kh3eh6fh6fixdifxih1icWgN7gjNkt5izdkt6kt7kt8kt9ku.ku#kuakubkuckudkuekufkugkuhkuikujkukkulknzkumkunk.pkunkuokupkuqkrVkurkuskutknHkuukuvkuwkuxkuykuzkuAkpQkuBkuCkuDkuEkuFkuGkuHkuIkuJkuKhkCgvcfDZhkEgm2ksignufLtk#eiCwijYieWh5vg.5fAHfEjfsUfw0fEifw0fsUfHPfAHfYtg7VfHTh2vhQhh2t", +"kuLkuMkuNkuOkuPkuQkuRkuSkuT#RRkuUkuVkuWkuXkuYkuZ#.wku0iJMhBWhzAiCuibribrhq0hq0ibribri.zkhkfH.ku1ku2ku3f1KhL0hL2iQKhqZhjKgjliTDhIKhq1ipaiuch.zku4ku5#fIaFLku6ku7fksfADk#dj07i#mku8ku9kv.kv#ksLkvaksNkvbkvckvdkvekvfkvgkvhkvih8HjBvjgTksThtakqHksVkvjiWPkvkkvlkvmkvnkvokvpkvqkvrkvskvtkvukvvkvwkvxkvykvzkvAkvB#oWkvC.VdkvDkvEkvFkvGkoKdxycJ9cJ9j1CkvHkvIkvJkvKkvLkvMkvNkvOkvPkvQkvRkvSkvTkvUkvVi8SkvWkkkkcGkvXkvYcKakvZkv0kv1kvXkv2kv3kv4.3Mkv5kv6kv7kv8jPUkv9kw.kieihFc32c34kkFkmQeaSkfNg0qjdufcBg8rcZikiikmSc8WggxkkGcZjk.#kdrc37kfPkrpkiikrpkkHhhPc8WcUxkmSj2Wkd.g#kg#kkw#kwakwbj2WktFkwckwdkwekwfkwgkwhizhkwikwjkwkkwlkwmkwnkwokwpkwqkwrkwskwtkcZf5qdHlkwukkIggxgcPkpjggWkwvkwwkwxdpW.1Afj0kwykwzkinkfSkaBflCflCfdaeNqj7dkt0fIJcd1flCeNoeNqflCeNqfdakdpeNofdafVSkpse6De2#kkZf8ukwAkwAkwBkwCkt4fBzfBziufj4Fgzjfp.gvhgrjgCOfo9fkYgvdgnIh2Xg77g77hWshWsfLKfYFhWthWuhWuiFyieVh8vgYsgYsieXicfh.wgb5gb6gQBgfHh8vh8vh8vh8vgfHgfHgfHgb5gb5gfHgfHgfHgQBh5wi#piCviCvizJiKOieVi#pi#ph5vh5wgfGh5xh3gioSihoioViwvijWihoj5gioSihoihoihoijWijWj5ggo.ggZgvEgdgftegnJgGWh0kifxifxh3ei#6h3eh0lh3eh0lh3ei#6h3ei#6i#6ipvh5xifxh9ihZ2i#5gOkkwDkwEkwFkwGkwHkwIkwJjDNkwKkwLka2kwMkwNkwOkwPkwQkwRkwSkwTkwUkwVk.nekxkgwkwWkwXkwYkwZkbdkw0kw1ka1kw2kw3kw4kw5kuxkw6kw7kw8kw9kx.kx#kxajQNkj.kxbkxckxdkxehkFekqhg3gvcf8#gnugjrgjrkxffEffwZgnnfAHg.5fHPfEdfAIfACfLvfozfACh2vh5sfLwf8#f8#gfPgfPfSnfSn", +"kxgkxhkxikxjkxkkxlkxmkxnkxokxpkxqkxrkxqkxskxt#k3kxujx0i7hjaDe1xiCwgb2hgdgb2gb2hgcijeibrhq0kbUkxvkhbkxwkxxjpRhjKgjlhq1iKQiwTknWhcsiKSizKiucijXi#lkhkfAIggaggafYtkxfj5ThTpfwGkxykxzkxAkxBkxCkxDkxEkxFkxGksOkxHkxIkxJkxKkxLiC8iIFjgTkxMhtaiRlkxNkxOkvjkxOiWTkxPkxQkxRkxSkxTkxUkxVkxWkxXkxYkxZkx0kx1kx2kx3kx4kx5kx6#sFkx7kx4kx8kvFkx9ky.j1AcJ9iAUky#kvIkyakybj38kyckydkyektnkyfkygkyhkyikyjkykkyliJxkymjtljtliqFkynjtjjMUjMUkvZkyokypkyqkyrkyskytkyukyvkywkkukyxjqXj91cZeeaTkmQkkFkyyjZKkiikiikroc8WkkAc8Wc36fcCkwukyzkkGkpicZfkmSgWrkmSgWrkyAeaRhhPjVQkyBkyCjVQkyDkyEi#ikyFhk3kyGjPUkyHkyIkyJgSsgGRkyKkyLkyMkyNkyOkyPkyQkyRdLBkySee0kyTkyUkyVkyWkyXkyYkyZky0ekuky1ky2ky3ky4gzgaAvky5ky6ky7ky8ky9kz.kijkz#cyNcPScPSeNqeNqflCj4YfIJkaBeNqfdaeIOflCflCeINeINeNofdakm9flCkaBkpse2#e18f8uh8Rh8Rkm8kzafEEfEEfBziufftgj7bgyYfxkgSwgcJf5njTUf8mi#5g0rgR9g77hWuhWufYFfYFhWthWuiFyhWugQBh8vgQBgYsg2yieVhWtgg#ieViCLi#pieVieVfYFh5wgb6gb5gfHgb5g6Agb5h8vgb6h8vi#ki#ki#kiCuizJimIh5wizJizJizJh5wicbi#6h3gioSihojFniwvijWihoj5gioSihoihoihoihoihoj5ggvEggZj5ggkwggqgrMgrMgzlh0lh2wifxi#6h6fh3fh3fh3eh3eh6fj2Yj2Yj2Yj2Yh3bi#6h0khXah2XhQKkzbdgWkzckzdhCZkzekzfkzgkzhkzikzjkzkkzlkzmkznkzokzpkzqkzrkzskwUkztkzukzvkzwkzxkzykzzkzAkrVkdSkzBkzCknAkzDkzEjspkzFkzGkzHkzIkuBkzJkzK.STkzLkzMkxckzNkzOhhrh#thdifDYgZlgnukzPksifHAkxffozfwZfwZf1TfYsfwSkxfkzQfLwknTgm2f8#gVog.YgVohGbkzRf5af5akzS", +"kzTkzU#dckzVkzWkzXkzYkzZkz0kz1kz2fLpkz3fAbkz4kz5kz6kn#iNZfo4kz7gfAhgdhgdgb2gb2gb2ibrijeijegb2jpTkexkz8kxxfsMkbUiFgiFgf78kz9kA.k#eiwSiwShcrjvlfwZfozkA#i#nfLvg.Zg.MkzQgJOkAakAbkAckAdkAdkAekAfkAgkAhkAikAjkAkkAlkAmkAniwWiOsjgTksThtahtakAokApkAqkArkAskAtkAukAvkAwkAxkAykAzkAAkABkACkADkAEkAFkAGkAHkAIkAJkAKkALkfvkAMkANkAOkAPkAQky.khQcFMk#Jjj0kARkASkATkAUkAVkydkAWkAXkvSkAYkAZkyjkA0kA1kA2iD6kA3jE4kA4iqFktwin3kA5kA6kyokA7kA8kA9awykB.kB#kBakBbj10jZDkBcjwIkBddy6cZicZigWrg0qkiieaSg#kkmQcZikmPkkIkwudLwkwukrnc34cZikmSgWrgWrkrpkkFkfPjVQkkFj9BgvDkBejSqi7CkBfkBekBgkBhgvxkBikBjkBkkBlkBmkBnkBokBpd3xkBqkBrkBskBtdPSdPSkBukySkBvkBwkBxkBykBzkBAkBBkBCgE8kBDfPFkBEhoZkBFky6kBGkBHdKZeoSkBIg4nefFcHkfIJkaBcPSe6DkaBkaBkaBkaBkaBeNqfdaeDUeNpflCf.0cd1flCeNqe2#km5e6Dkpskare18h8Rh8RkwBkm8kt4fEEfBzfBzfBzkBJkBKggsfp.efzefzhv1f5ofo9gZ3gZ3gKrgR9hWshWugYsh5vfLJhWshWuieVirKijYiucg2yh5wiFyhWuhWuhWuioTiCLiCLgfGgfGh5wh8vgb5gb5gb5gb5gb5h8vgQBgfHiu#ieWi#ki#kiCwizJiCviCvizJizJi#picbi#6ihpk.aijWjFniwvijWijWgkwioSihoihoihoihoihoihoj5gggZgvEggqftego#gzlgzlih2irYifxifxi#6h3fh3fh3eh3eh6fj2Yh6ciu.j2YiWAixdh0khXagR9hvykBLkBMkBNkBOkBPkBQkBRkBSkBTkBUkBVkBWkBXkugkBYkBZkB0kB1kB2kB3kB4kB5krUkB6kB7kB8kB9kC.kC#iztkCakCbkCckCdkCekCfkCgkChkCikCjkCkkClkCmkCn.GS.STkCokCpkCqkCrcPTkCsj05fSEhg3gFWgm2ksigjrfLwfUWfsRf1TfAFfEefYGgjrfHAhWrfsYkCtkCufw6hJwhTnfX7kCvkCwkCxgRs", +"kCykCzkCAkCBkCCkCDkCEkzZkCFakNkCG#Vp#SvkCHkCIkuVkCJkCKhL4hPuijdgb3hgcgfAhL2hgdgb2ibrijeibrhgchgdfYDkewkCLkCMfsFkbUhuIf49klNk#dgC.fAHfAHi#lfsRfozfD5i#ni#nfArkCNkCNkCNkCOfsIkCPkCQkCRkCSkCSkogkCTkCUkCVkCWkCXkCYkCZkC0isgiF4kC1kqFhtaksUkApkC2kAriZ6kC3kC4kC5kC6kC7kC8kC9kD.kD#kDakDbkDckDdkDekDfkDgkDh#FWkcFkDi#5nkDjkDkkDlkDmkDnkDokhQjZ#k#JkDpkDqkDrkATkDskDtkDukDvkDwkDxkDxkDykDykDzkDAkDBiD6kDCiGNjHxjUOahwalCiBfkDDjMTkDEkDFkDGkDHkB.kDIkB#kDJkDKjHYkDLkiedy6g8rkDMg8rg#kkmQkDNj64kDOkDPkrnkrtkDQkDRkDSfYUd28j5fkDTkfPcZfc8WkfPg#kjVQcZij4veVAjNikDUjZCi7CkBfkDVkDWkDXef7kDYkDYkDZkD0kD1kD2kD3a.0a.0kD4kD5kD6kD7ekGkD8kD9kE.kE#kEakEbkEckEdkEekEfkEgkEhkEikEjkEkfn6ktX.APkElkEmkEnkEokEpfVQkEqkErkdecyOcPSkaBkpse6DcPScHhj7seNqeNqflCkpskEskEskEsf.0kpskm5e6Dezbe6DeNqkkZkkZkEtkm7km7kzakt4kzakm8kzafIbkBKgnLgnKgrmgnKgrmggpgKrgcLgcLgcLh2XhWsfLKfYFgg#iFyifxixdieViwSiCwiwSh8viFyhTrifxixdhWuhWthWthWtieVh5wi#pi#pgfHgfHgfHgb5gb5gfHh8wjQXkEuhjJgjngBfkEviohi#jfYFieVfYFgfGicbi#6ihpj5ggrKijWiwvijWj5gj5gihoihoihoihoihoihoihoj5ggo.gkwjP4gKRgKRgGWg4thNFi4Jifvh0kifxi#6h3eifxh0kh3ej2Yh6dh3bipviWAj2Yh0khXagZ3j06kEwkExkEykBOkEzkEAkEBkECkEDkEEkEFkEGkEHkEIkEJkEKkB0kELkEMkENkwUkB5kEOkEPkEQknCkERkESkETkEUkEVkEWkdWkr1kEXkEYkEZkE0kE1kE2kE3kpBkE4kE5kE6kE7#mR#6TkE8kE9hTsgcjg.VkuKkF.ixcgm2fHAfHAfLxkF#gjQipagtDkFahWrgnufHAhQlkFbkCvkFcf4LkFdkFekCwfw6kFfkFgkFh", +"kFikFjkFkkFlkFmkFnkuQkFokFpkFqkFrkFskFt#kZkksfOTkFukFvhIHkFwijdiCuhzAhQki.ygb2hgchgcgfAiccgYtgb2ibrfAFkFxkFyhWmfozf1RjvlfAIfw2fw2fLufLvfozkxffHBfHEkFzhWmkCNfsYfHEg.Zf42ksJkCPkCSkogkFAkFBkFCkFDkFEkFFkFGkFHkFIkFJiIFiF4kC1kxMkqFkFKksVksVkAqbUpkFLkFMkFNkFOkFPkFQkFRkFSkFTkFUkFVkFWkFXkFYkFZkF0kF1kF2kF3#lWjnykF4kF5kF6kF7kF8kF9kG.khQkmtj1CkG#kGakGbktjkAVkGckGdkGekGfkGgkGhkyjkGikGjkGk.Tf#eKkGljUOjUOkkkkv1kGmcKciPkkGnkGokGpfbFkGqj6VkGrkGrkDUjU5jwIj2VkpikmPkGskGtkGskDPkGukGvkGwc34kpbkGxkc4h#ZkGyj61dYhkGzkwzj7Lc37c37cZfkGAkGBj0tkGCkGDjflkGEkGFkGGjPUkGHkGIkGJef7eyScUAcZmkD0kGKkGLkGMkGNkD4kGOkGPkGQkGRc4ekGSkGTkGUkGVkGWkGXkGYkGZkG0kG1kG2kG3kEjkG4kG5krxapgkG6dGZkEmkG7kwvhNEkijgcPkG8cPTkaBe6DkaBfIJfIJkt2kG9jqXkH.kH#kpscd1cd1kpskpsf.0kpskpse6De17kpse2#km9itVkHakHbfPEkkZkwBkwBkwBkm8kHcgnNgdcgj5gdggdggo.gnJhz1hXagcLfo8gGWhXag0rgR9hTrh2Xg0rhXah0kioTh6dipugg#iFyg0rh2Xh0kifxixdhWuhWuhWtiCLieVi#pi#ph8wh8wgfHgb5gb5gfHh8wkn0kHdkHegbZfXUge0ijfiKOieVh5wh5wh5wicbi#6ihpgo.gvijXpjXpijWj5gj5gihoihoihoihoihoj5ggvEihoj5gk.ajCQitTkn.g4tg4tkHfkHgkHhirXih1h3eh0kh0kih1ih1h9iikyh3bipvh3bj2Yh0ki#4i#5hZ2kHikHjkHkkHlkHmkHnkHokHpkHqkHrkHskHtkHukHvkHwkHxkHyknDkHzkHAkwUkHBkukkB4c8MkHCkHDkulkHEj75kHFkuckHGkHHkHIkHJkHKkHLkHMkHNkHOkHPkHQkHRkHSkHTkHUkHVkHWkHXkHYkHZkH0kH1kF.g.NixchQlknTkqgkH2gp0kH3fvYjmLknTfSnfSnhGbhrWkFgkH4kH5kH6kH7fw6kH8kFfkH9kI.", +"kI#kIa#fOkIbkIckIdkzZkxokIekIfkIg#KBkIh#RR#kZfotkIikIjkIkgb3icceMmkIlfAUhBWgb2g6BhgchPue5siCthq0hgciwRkFzkAafAFfwZfw4fwZfYtfozfLvfArfHEkCNkImkImfoNfwJfHEknTkCNhWmfK1kInkIokofj8UkxGkIpkIqkIrkIskItkIukIvkIwkIxiF3iF4kl6kxMkqFkFKksVksVkApkIykIzkIAkIBkICkIDkIEkIFkIGkIHkIIkIJkIKkILkIMkINkIOkIP#F2kIQkIRkISkITiGMkIUkIVkIWkIXkIYkDokhQcJ9kcrkIZkI0kI1jWRkDtkI2kI3kI4kI5kI6krbkGikI7j6BkI8kI9.6kkA4jhDalCiD7kJ.kJ#kJakJbkJckJdeRekJekJfkywkJgjSokyxkJhjwIiVpefFkmOkDPeaTkGskJikJjdy6kGskJkkJlkJmdLtkJmkJmf8pihFkJnkwzkJokJpkz#kkRkJqkidkJrkktkJsgn8kJtgSriQEkJukJvkJwkGJkDZcZmcZmkBpkJxkJykJzkJAdzjkJBkJCkJDkJEdg7dDFdg8kJFkJGkJHkJIkJJkJKkJLkJMkJNkJOkJPkJQkJRju8kpnkJSkJTdCTkJUkJVkJWkJXkJYkJZkJ0cPTe2#cyOfIJkpscd1kJ1kJ2kJ3kJ4kJ5km5cd1f.0kEsiv1km5flCe6De6DflCflCeSvitVe17kHbkJ6km7h8RfxUfxUfxUfBzgj7grnikhgnKgdggo.go.gnJh0kh0lfo8gcLftehv1hvOgnKhvOhvOgrmftefo8gcLggpgGWg0rftegcLhXahXahXaifxifxhWuhWthWtiCLh5wi#ph8wh8wh8wgfHgfHgfHi#kkJ7kJ8kJ9kK.fOtkK#kKaiTRiCLieVieVieVicbi#6ihpj5ggrKgrKg#PjXpijWj5gijWijWihoihoihogvEggZihoihoioSioSitTitTirYkKbkKckKdkKejdtih1ih1h0lh0lih1hZ2h3ch6cj2Yipvh5xixdh0khZ2icWhZ2kKfkKgkKhkKikKjkKkkKlkKmkKnkKokKpkKqkKrkKskKtkKukKvkpTkKwkB2kKxkKykKzkB3kKAkKBkKCkr0kKDkB7kKEkKFkKGkKHkKIkKJkKKkKLkKMkKNkKOkKPkKQkKRkKS#plkKTkKUkKVkKWkzshTskuJdLukH1kF.hzdgc#gnukKXkKYiFigtDkKZkK0g.6kK1kCtf4IhTnkK2kK3kK4kK5kK6kK7kK8kK8kK9kI.", +"kL.kL#kIdkLakLbkLckLdkLekLfkLgkLhkLi.5T#H#kLjkLkkLlkLm.RYkLnfVhkLohJyjaCi.yhL2hgchgchBWkLpgfAhq0gb2gb2kLqkLrfAIi#lfVufsSfYrfLvfLwfHEfLxkImkLskImkImfHEkzQknTkCNhWmgu0kLtfoQksNkLukLvkLwkLxkLykLzkLAkLBkLCkLDh8LkLEkl6kC1kxMiuWksVksVkLFiDqkLGkLHkLIkLJkLKkLLkLMkLNkLOkLPkLQkLRkLSkLSkLTkLUkLVkLWkLXkLY#FWkLZau7kfv#UykL0kL1koJkL2giekL3cxlkL4kL5kL6kL7kvLkL8kL9kM.kM#kMakMbkGikI7kMckMdkMekMfkMg.EQjHxkMhkMijy7kMjkMkkMlkMmkMnfYekMokMpkMqkMrkMsjflc8XjtQcHkkwukGtkGwkGtkGvkGvkGvkMtkMukMvjTSd28kJmdbQkpbkmXkMwkMxkMwkMyfWkkMzktCkMAkMBkMCkMDiWjkMEkMEkMFkMGkMHkMId3dkMJkGKcZmkMKkMLkMMkMNkMOkMPkMQkMRkMSkMTkMUkMVkMWkMXkMYkMZkM0kM1kM2kM3#6OkM4kM5h5OkM6kM7kM8kM9kN.kN##V4kNadGZkNbkNckNdkNekNfkNgkNhkNicyNkNjkpskaBkaBe6Dkt2kNkkNlkpskpskpskpsflCe6De17e6De6DeINkm9itVkNmitVkJ6kJ6kEtkm7kwBkwBfBziufgnNfWmgdciQLgkvgkvgdgftegGWfo8gkvgj5kNnkNnggrh5Nh5Nh5NhvOhv1gdggdgfteggqggpggpgcLgGWgGWgGWhXah0kifxixdfLJiCLfYFh5wh8wh8wh8wgfHgfHh8wimIkNokNpa.pkNqkNrkNskjiiKOieVieVieVieVicbi#6ihpgkwgrKirtg#Pg#PgrKggZgrKgvEihogvEgvEgvigo.gvEgrKgrKj5gieUitTiYdkNtkNukNv.JakNwicWih1h0kifxh0lirYh9ih6dj2Yi#6h6fi#6h2wi#5iIah6eg6FkNxkNykNzkNAkNBkNCkNDkNEkNFkNGkNHkNIkNJkNKkNLkEKkNMkNNkNOkNPkB4kNQkKzkNRkNSkNTkNUkNVj7Wiztj7WkNWkNXkNYkNZkN0kN1kN2kN3kN4kN5kKzkN6kN7#mGkN8kN9kO.kO#kNQgZAkfUefDkOakshkF.fAJhJAkObj50jYPkOck.6kOdfHygVokOekCvkOfgm7kOgkOhkOikOjkFdkK7kOkf4JfY.", +"kCAkOlkOmkuQkOnkuQkLakOokOpkOqkOrkOskFrkOtkOukOve0TkOwkOxkOykOzkOAhgciCti.ygb3hgchgdgb2gb2gb2hq0ibrhgdiCxkOBijYfAGfVufVufwZfw3kzQfHEhTqfsYkImkImkOCgJOfHEfHBgNCkbQkODkOEklLkOFkLvkOGkLwkOHkItkOIkOJkOKkOLhUKjMwiigkC1kqEkOMkxNkLFkqIg40kONkOOkOPkOQkORkOSkFQkOTkOUkOVkOWkOXkOYkOZkO0kO1kO2kO3kO4kO5kO6#FWkO7jUFjUFarekO8kIWkj5kO9kP.j86cs1kP#kPakPbkPckPdkPekPfkPgkPhkPikPjkmzkGikPkkPlkPmayVkPnkPojtCkA4jnMkPpkPqjwBkPrkPskPtf1skPukPvkPwjSokPxkPyj5ej6ZkPzdy6dy6krnkrnkPAkPAkMtf5pkMud28kDPfYUkPBf8pkJnkPCkPDkPEkPFkPGizfkMBiTAkPHkPIkPJkPKkMFkPLkPMkPNcC0kPOkPPkPQkPRkPSkPTkPUkMMe1DkPVkPWkPXdvdkPYkPZkP0dzGkP1kP2kP3kP4kP5kP6kP7kP8kP9dUtkQ.kQ#kQa#ZzfttkQbkQckN.kJUkQdkQedGYkQfkQgkQhkNdkQikQjkQkkQlj9VfBwcyNkaBkaBkaBkt2kQmkJ2kt2km5flCflCe6DflCe2#e2#km9km9itVkQnkNmkt3kQokQpkQqh8RkwBkzaiuffZrgrngnLggrgdggkvgkvggskQrggskQrggskNnkNnh5Nggrggrggrggrh#whvOgnKgdgggqggqgnJggpgcLfo8gcLgGWgGWhXah2wh2wiFyhWuiCLieVi#pgfHgfHh8wh8wi#piCukQskQtkQukQvkQwkQxkQygfGieVieVfYFieViCLi#6ihpj5gg#Pg#Pg#Pg#Pgvigvigvig#PgrKgrKggZgvigrKggZgvigvigo.go#kQzkQAkQBkQCkQDkQEkQFih0irXifxifxifxh3eifxiFyh2Xh2wh2wh0kh2XgR9gOkicW#a0kQGkQHkQIkQJkQKkQLkQMjppkQNkQOkQPkQQkQRkQSkQTkKGkHIkB1kQUkQVkB4kQWkQXkB4kQYkQZkQ0kQ1kQ2kQ3k.pkQ4kQ5kQ6kQ7kQ8kKKkQ9kR.kR#kRakRbkRckRdkRekRfkRgkPMkRhkRikRjkRkkuJg7WkH1gcahzdhkCkFbkRlkRmkRnkRokFyhTqgcof1jkOfkK7f1okRpkRqkRrkRskK7kOffUZfHUkRt"}; diff -Nru calligra-2.9.7/krita/data/templates/comics/a4_waffle_grid.desktop calligra-2.9.11/krita/data/templates/comics/a4_waffle_grid.desktop --- calligra-2.9.7/krita/data/templates/comics/a4_waffle_grid.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/comics/a4_waffle_grid.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -27,6 +27,7 @@ Name[ru]=Страница с ячейками Name[sk]=vaflovo-železná mriežka Name[sv]=våffelmönster +Name[tr]=gofret ızgara Name[uk]=сітка з комірками Name[wa]=grile di fier a wåfes Name[x-test]=xxwaffle-iron gridxx @@ -34,11 +35,11 @@ Comment=300 dpi, A4 waffle-iron grid comic page with ink and color layers Comment[bs]=300 dpi, A4 mreža sječenog željeza stranica stripa s slojevima za tintu i bojemreža sječenog željeza Comment[ca]=300 ppp, pàgina de còmic amb graella de ferro amb capes de tinta i color -Comment[ca@valencia]=300 dpi, pàgina de còmic amb graella de ferro amb capes de tinta i color +Comment[ca@valencia]=300 ppp, pàgina de còmic amb graella de ferro amb capes de tinta i color Comment[da]=300 dpi, A4 tegneserieside i vaffeljernsgitter med blæk og farvelag Comment[de]=Comicseite mit Waffeleisengitter-Muster, Tinten- und Farbebenen. Format A4, Auflösung 300 dpi. Comment[el]=300 dpi, σελίδα κόμικ A4 με waffle-iron κάνναβο και στρώματα μελάνης και χρώματος -Comment[en_GB]=300 dpi, A4 waffle-iron grid comic page with ink and colour layers +Comment[en_GB]=300 dpi, A4 waffle-iron grid comic page with ink and color layers Comment[es]=página de cómic con rejilla de hierro para gofres de tamaño A4, a 300 ppp, con tinta y capas de colores Comment[et]=300 DPI A4 vahvlimasina ruudustikuga koomiksilehekülg tindi- ja värvikihiga Comment[eu]=Gofreetarako burdinazko sareta duen 300 dpi-ko A4 komiki-orria, tinta- eta kolore-geruzaduna @@ -56,6 +57,7 @@ Comment[ru]=300 dpi, страница комикса в формате A4 с ячейками и слоями контуров и цветов Comment[sk]=300 dpi, A4 vaflovo železná mriežka komiksovej strany s atramentom a farebnými vrstvami Comment[sv]=300 punkter/tum, A4 våffelmönstrad seriesida med bläck- och färglager +Comment[tr]=Mürekkep ve renk katmanlarıyla 300 dpi, A4 gofret ızgara çizgi roman sayfası Comment[uk]=300 т/д, сторінка коміксу у форматі A4 з комірками та шарами контурів та кольорів Comment[wa]=Pådje A4 di binde d' imådjes avou on discôpaedje come ene grile di fier a wåfes avou des coûtches d' intche eyet d' coleurs. Comment[x-test]=xx300 dpi, A4 waffle-iron grid comic page with ink and color layersxx diff -Nru calligra-2.9.7/krita/data/templates/comics/BD-EuroTemplate.desktop calligra-2.9.11/krita/data/templates/comics/BD-EuroTemplate.desktop --- calligra-2.9.7/krita/data/templates/comics/BD-EuroTemplate.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/comics/BD-EuroTemplate.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -14,7 +14,7 @@ Name[et]=Euroopa BD mall Name[eu]=Europako BD-txantiloia Name[fi]=Eurooppalainen BD-pohja -Name[fr]=Modèle européen +Name[fr]=Modèle européen de bandes dessinées Name[gl]=Formato europeo (2×4 viñetas) Name[hu]=Európai BD sablon Name[it]=Modello MD europeo @@ -64,6 +64,7 @@ Comment[sk]=šablóna pre európske BD komixy Comment[sl]=predloga za stripe v evropskem slogu BD Comment[sv]=seriemall med europeisk BD-stil +Comment[tr]=Avrupai BD-tarzı çizgi roman için şablon Comment[uk]=шаблон для європейських коміксів у стилі BD Comment[wa]=Modele po les bindes d' imådje al môde uropeyinne Comment[x-test]=xxtemplate for European BD-style comicsxx diff -Nru calligra-2.9.7/krita/data/templates/comics/CMakeLists.txt calligra-2.9.11/krita/data/templates/comics/CMakeLists.txt --- calligra-2.9.7/krita/data/templates/comics/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/comics/CMakeLists.txt 2016-02-02 19:53:14.000000000 +0000 @@ -4,6 +4,7 @@ BD-EuroTemplate.kra Comics-USTemplate.kra Manga-JpTemplate.kra + storyboard.kra DESTINATION ${DATA_INSTALL_DIR}/krita/templates/comics/.source) install( FILES @@ -12,4 +13,5 @@ BD-EuroTemplate.desktop Comics-USTemplate.desktop Manga-JpTemplate.desktop + storyboard.desktop DESTINATION ${DATA_INSTALL_DIR}/krita/templates/comics) diff -Nru calligra-2.9.7/krita/data/templates/comics/Comics-USTemplate.desktop calligra-2.9.11/krita/data/templates/comics/Comics-USTemplate.desktop --- calligra-2.9.7/krita/data/templates/comics/Comics-USTemplate.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/comics/Comics-USTemplate.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -15,7 +15,7 @@ Name[et]=USA stiilis koomiksi mall Name[eu]=AEBko estiloko komiki-txantiloia Name[fi]=Yhdysvaltalaistyylinen sarjakuvapohja -Name[fr]=Modèle de bande dessinée-US +Name[fr]=Modèle US de bande dessinée Name[gl]=Formato estadounidense (2×3 viñetas) Name[hu]=US-stílusú képregénysablon Name[it]=Modello per fumetti in stile americano @@ -33,6 +33,7 @@ Name[sk]=šablóna pre americké komixy Name[sl]=Predloga za stripe v ameriškem slogu Name[sv]=Seriemall med amerikansk stil +Name[tr]=Amerikan-tarzı çizgi roman şablonu Name[uk]=Шаблон коміксів у американському стилі Name[wa]=Modele comics a l' amerikinnes Name[x-test]=xxUS-style comics templatexx @@ -67,6 +68,7 @@ Comment[sk]=šablóna pre americké komixy Comment[sl]=predloga za stripe v ameriškem slogu Comment[sv]=seriemall med amerikansk stil +Comment[tr]=Amerikan-tarzı çizgi romanlar için şablon Comment[uk]=шаблон для коміксів у американському стилі Comment[wa]=Modele di bindes d' imådje al môde des comics amerikins Comment[x-test]=xxtemplate for US-style comicsxx diff -Nru calligra-2.9.7/krita/data/templates/comics/.directory calligra-2.9.11/krita/data/templates/comics/.directory --- calligra-2.9.7/krita/data/templates/comics/.directory 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/comics/.directory 2016-02-02 19:53:14.000000000 +0000 @@ -12,7 +12,7 @@ Name[et]=Koomiksimallid Name[eu]=Komiki-txantiloiak Name[fi]=Sarjakuvapohjat -Name[fr]=Modèle de bande dessinée +Name[fr]=Modèles de bandes dessinées Name[gl]=Modelos de banda deseñaña Name[hu]=Képregénysablonok Name[it]=Modelli di fumetti diff -Nru calligra-2.9.7/krita/data/templates/comics/storyboard.desktop calligra-2.9.11/krita/data/templates/comics/storyboard.desktop --- calligra-2.9.7/krita/data/templates/comics/storyboard.desktop 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/comics/storyboard.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -0,0 +1,35 @@ +[Desktop Entry] +Type=Link +URL=.source/storyboard.kra +Icon=template_comics_empty +Name=Storyboard +Name[ca]=Guió il·lustrat +Name[ca@valencia]=Guió il·lustrat +Name[en_GB]=Storyboard +Name[es]=Guion gráfico +Name[et]=Piltstsenaarium +Name[it]=Storyboard +Name[nl]=Storyboard +Name[pl]=Scenorys +Name[pt]=Quadro +Name[pt_BR]=Quadro de histórias +Name[sk]=Storyboard +Name[sv]=Bildmanus +Name[uk]=Сценарій +Name[x-test]=xxStoryboardxx +Comment=template for creating storyboards +Comment[ca]=plantilla per a crear guions il·lustrats +Comment[ca@valencia]=plantilla per a crear guions il·lustrats +Comment[en_GB]=template for creating storyboards +Comment[es]=plantilla para crear guiones gráficos +Comment[et]=Piltstsenaariumi loomise mall +Comment[it]=modello per creare storyboard +Comment[nl]=sjabloon voor het maken van storyboards +Comment[pl]=szablon do tworzenia scenorysów +Comment[pt]=modelo de criação de quadros de histórias +Comment[pt_BR]=Modelo de criação de quadros de história +Comment[sk]=šablóna na vytváranie storyboardov +Comment[sv]=mall för att skapa bildmanus +Comment[uk]=шаблон для створення сценаріїв +Comment[x-test]=xxtemplate for creating storyboardsxx +X-Krita-Version=28 Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/data/templates/comics/storyboard.kra and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/data/templates/comics/storyboard.kra differ diff -Nru calligra-2.9.7/krita/data/templates/design/Designcinema16_10_2484x1200_96dpiRGB_8bit_.desktop calligra-2.9.11/krita/data/templates/design/Designcinema16_10_2484x1200_96dpiRGB_8bit_.desktop --- calligra-2.9.7/krita/data/templates/design/Designcinema16_10_2484x1200_96dpiRGB_8bit_.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/design/Designcinema16_10_2484x1200_96dpiRGB_8bit_.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -3,7 +3,7 @@ Name=Design cinema 16:10 [ 2484x1200 , 96dpi RGB , 8bit ] Name[bs]=Design cinema 16:10 [ 2484x1200 , 96dpi RGB , 8bit ] Name[ca]=Disseny de cine 16:10 [ 2484x1200 / 96ppp RGB / 8bit ] -Name[ca@valencia]=Disseny de cine 16:10 [ 2484x1200 / 96dpi RGB / 8bit ] +Name[ca@valencia]=Disseny de cine 16:10 [ 2484x1200 / 96ppp RGB / 8bit ] Name[cs]=Návrh kino 16:10 [ 2484x1200 , 96dpi RGB , 8bit ] Name[da]=Design-cinema 16:10 [ 2484x1200 , 96dpi RGB , 8bit ] Name[de]=Design-Kino 16:10 [ 2484x1200 , 96dpi RGB , 8bit ] diff -Nru calligra-2.9.7/krita/data/templates/design/Designcinema2.39_1_2484x1040_96dpiRGB_8bit_.desktop calligra-2.9.11/krita/data/templates/design/Designcinema2.39_1_2484x1040_96dpiRGB_8bit_.desktop --- calligra-2.9.7/krita/data/templates/design/Designcinema2.39_1_2484x1040_96dpiRGB_8bit_.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/design/Designcinema2.39_1_2484x1040_96dpiRGB_8bit_.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -3,7 +3,7 @@ Name=Design cinema 2.39:1 [ 2484x1040 , 96dpi RGB , 8bit ] Name[bs]=Design cinema 2.39:1 [ 2484x1040 , 96dpi RGB , 8bit ] Name[ca]=Disseny de cine 2.39:1 [ 2484x1040 / 96ppp RGB / 8bit ] -Name[ca@valencia]=Disseny de cine 2.39:1 [ 2484x1040 / 96dpi RGB / 8bit ] +Name[ca@valencia]=Disseny de cine 2.39:1 [ 2484x1040 / 96ppp RGB / 8bit ] Name[cs]=Návrh kino 2.39:1 [ 2484x1040 , 96dpi RGB , 8bit ] Name[da]=Design-cinema 2.39:1 [ 2484x1040 , 96dpi RGB , 8bit ] Name[de]=Design-Kino 2.39:1 [ 2484x1040 , 96dpi RGB , 8bit ] diff -Nru calligra-2.9.7/krita/data/templates/design/DesignpresentationA3Landscape_4960x3508_300dpiRGB_8bit_.desktop calligra-2.9.11/krita/data/templates/design/DesignpresentationA3Landscape_4960x3508_300dpiRGB_8bit_.desktop --- calligra-2.9.7/krita/data/templates/design/DesignpresentationA3Landscape_4960x3508_300dpiRGB_8bit_.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/design/DesignpresentationA3Landscape_4960x3508_300dpiRGB_8bit_.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -3,7 +3,7 @@ Name=Design presentation A3 Landscape [ 4960x3508 , 300dpi RGB , 8bit ] Name[bs]=Design prezentacija A3 položeno [ 4960x3508 , 300dpi RGB , 8bit ] Name[ca]=Disseny de presentació A3 apaïsada [ 4960x3508 / 300ppp RGB / 8bit ] -Name[ca@valencia]=Disseny de presentació A3 apaïsada [ 4960x3508 / 300dpi RGB / 8bit ] +Name[ca@valencia]=Disseny de presentació A3 apaïsada [ 4960x3508 / 300ppp RGB / 8bit ] Name[cs]=Návrh prezentace A3 vodorovně [ 4960x3508 , 300dpi RGB , 8bit ] Name[da]=Design-præsentation A3 liggende [ 4960x3508 , 300dpi RGB , 8bit ] Name[de]=Design-Präsentation A3 Querformat [ 4960x3508 , 300dpi RGB , 8bit ] diff -Nru calligra-2.9.7/krita/data/templates/design/DesignpresentationA4portrait_2480x3508_300dpiRGB_8bit_.desktop calligra-2.9.11/krita/data/templates/design/DesignpresentationA4portrait_2480x3508_300dpiRGB_8bit_.desktop --- calligra-2.9.7/krita/data/templates/design/DesignpresentationA4portrait_2480x3508_300dpiRGB_8bit_.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/design/DesignpresentationA4portrait_2480x3508_300dpiRGB_8bit_.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -3,7 +3,7 @@ Name=Design presentation A4 portrait [ 2480x3508 , 300dpi RGB , 8bit ] Name[bs]=Design prezentacija A4 uspravno [ 2480x3508 , 300dpi RGB , 8bit ] Name[ca]=Disseny de presentació A4 vertical [ 2480x3508 / 300ppp RGB / 8bit ] -Name[ca@valencia]=Disseny de presentació A4 vertical [ 2480x3508 / 300dpi RGB / 8bit ] +Name[ca@valencia]=Disseny de presentació A4 vertical [ 2480x3508 / 300ppp RGB / 8bit ] Name[cs]=Návrh prezentace A4 svisle [ x3508 , 300dpi RGB , 8bit ] Name[da]=Design-præsentation A4 stående [ x3508 , 300dpi RGB , 8bit ] Name[de]=Design-Präsentation A4 Hochformat [ 2480x3508 , 300dpi RGB , 8bit ] diff -Nru calligra-2.9.7/krita/data/templates/design/DesignpresentationA4portrait_2480x3508,300dpiRGB_8bit_.desktop calligra-2.9.11/krita/data/templates/design/DesignpresentationA4portrait_2480x3508,300dpiRGB_8bit_.desktop --- calligra-2.9.7/krita/data/templates/design/DesignpresentationA4portrait_2480x3508,300dpiRGB_8bit_.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/design/DesignpresentationA4portrait_2480x3508,300dpiRGB_8bit_.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -3,7 +3,7 @@ Name=Design presentation A4 portrait [ 2480x3508 , 300dpi RGB , 8bit ] Name[bs]=Design prezentacija A4 uspravno [ 2480x3508 , 300dpi RGB , 8bit ] Name[ca]=Disseny de presentació A4 vertical [ 2480x3508 / 300ppp RGB / 8bit ] -Name[ca@valencia]=Disseny de presentació A4 vertical [ 2480x3508 / 300dpi RGB / 8bit ] +Name[ca@valencia]=Disseny de presentació A4 vertical [ 2480x3508 / 300ppp RGB / 8bit ] Name[cs]=Návrh prezentace A4 svisle [ x3508 , 300dpi RGB , 8bit ] Name[da]=Design-præsentation A4 stående [ x3508 , 300dpi RGB , 8bit ] Name[de]=Design-Präsentation A4 Hochformat [ 2480x3508 , 300dpi RGB , 8bit ] diff -Nru calligra-2.9.7/krita/data/templates/design/Designscreen4_3_2250x1680_96dpiRGB_8bit_.desktop calligra-2.9.11/krita/data/templates/design/Designscreen4_3_2250x1680_96dpiRGB_8bit_.desktop --- calligra-2.9.7/krita/data/templates/design/Designscreen4_3_2250x1680_96dpiRGB_8bit_.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/design/Designscreen4_3_2250x1680_96dpiRGB_8bit_.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -3,7 +3,7 @@ Name=Design screen 4:3 [ 2250x1680 , 96dpi RGB , 8bit ] Name[bs]=Design ekran 4:3 [ 2250x1680 , 96dpi RGB , 8bit ] Name[ca]=Disseny de pantalla 4:3 [ 2250x1680 / 96ppp RGB / 8bit ] -Name[ca@valencia]=Disseny de pantalla 4:3 [ 2250x1680 / 96dpi RGB / 8bit ] +Name[ca@valencia]=Disseny de pantalla 4:3 [ 2250x1680 / 96ppp RGB / 8bit ] Name[cs]=Návrh obrazovka 4:3 [ 2250x1680 , 96dpi RGB , 8bit ] Name[da]=Design-skærm 4:3 [ 2250x1680 , 96dpi RGB , 8bit ] Name[de]=Design-Bildschirm 4:3 [ 2250x1680 , 96dpi RGB , 8bit ] diff -Nru calligra-2.9.7/krita/data/templates/design/web_design.desktop calligra-2.9.11/krita/data/templates/design/web_design.desktop --- calligra-2.9.7/krita/data/templates/design/web_design.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/design/web_design.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -3,6 +3,7 @@ Name=Web Design [ 2160x1440 , 72ppi RGB , 8bit ] Name[bs]=Web dizajn [ 2160x1440 , 72ppi RGB , 8bit ] Name[ca]=Disseny Web [ 2160x1440 / 72ppi RGB / 8bit ] +Name[ca@valencia]=Disseny Web [ 2160x1440 / 72ppi RGB / 8bit ] Name[cs]=Návrh webu [ 2160x1440 , 72ppi RGB , 8bit ] Name[da]=Webdesign [ 2160x1440 , 72ppi RGB , 8bit ] Name[de]=Web-Design [ 2160x1440 , 72ppi RGB , 8bit ] @@ -10,6 +11,7 @@ Name[es]=Diseño de web 4:3 [ 2160x1440 , 72ppi RGB , 8bit ] Name[et]=Veebidisain [ 2160x1440, 72ppi RGB, 8-bitine ] Name[fr]=Style écran [ 2160x1440, 72ppi RGB , 8bit ] +Name[gl]=Deseño web (2160×1440, 72 ppi RGB, 8 bits) Name[it]=Progettazione web [ 2160x1440 , 72ppi RGB , 8bit ] Name[ja]=ウェブデザイン [ 2160x1440、72ppi RGB、8 ビット ] Name[nb]=Web Design [ 2160x1440 , 72ppi RGB , 8bit ] diff -Nru calligra-2.9.7/krita/data/templates/film/1K_super35_fullAp_1024x778.desktop calligra-2.9.11/krita/data/templates/film/1K_super35_fullAp_1024x778.desktop --- calligra-2.9.7/krita/data/templates/film/1K_super35_fullAp_1024x778.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/film/1K_super35_fullAp_1024x778.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -4,7 +4,6 @@ Name[bs]=1K_super35_fullAp_1024x778 Name[ca]=1K_super35_fullAp_1024x778 Name[ca@valencia]=1K_super35_fullAp_1024x778 -Name[cs]=1K_super35_fullAp_1024x778 Name[da]=1K_super35_fullAp_1024x778 Name[de]=1K Super 35 1024x778 Name[el]=1K_super35_fullAp_1024x778 diff -Nru calligra-2.9.7/krita/data/templates/film/2K_super35_fullAp_2048x1556.desktop calligra-2.9.11/krita/data/templates/film/2K_super35_fullAp_2048x1556.desktop --- calligra-2.9.7/krita/data/templates/film/2K_super35_fullAp_2048x1556.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/film/2K_super35_fullAp_2048x1556.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -4,7 +4,6 @@ Name[bs]=2K_super35_fullAp_2048x1556 Name[ca]=2K_super35_fullAp_2048x1556 Name[ca@valencia]=2K_super35_fullAp_2048x1556 -Name[cs]=2K_super35_fullAp_2048x1556 Name[da]=2K_super35_fullAp_2048x1556 Name[de]=2K Super 35 2048x1556 Name[el]=2K_super35_fullAp_2048x1556 diff -Nru calligra-2.9.7/krita/data/templates/film/4K_super35_fullAp_4096x3112.desktop calligra-2.9.11/krita/data/templates/film/4K_super35_fullAp_4096x3112.desktop --- calligra-2.9.7/krita/data/templates/film/4K_super35_fullAp_4096x3112.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/film/4K_super35_fullAp_4096x3112.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -4,7 +4,6 @@ Name[bs]=4K_super35_fullAp_4096x3112 Name[ca]=4K_super35_fullAp_4096x3112 Name[ca@valencia]=4K_super35_fullAp_4096x3112 -Name[cs]=4K_super35_fullAp_4096x3112 Name[da]=4K_super35_fullAp_4096x3112 Name[de]=4K Super 35 4096x3112 Name[el]=4K_super35_fullAp_4096x3112 diff -Nru calligra-2.9.7/krita/data/templates/film/.directory calligra-2.9.11/krita/data/templates/film/.directory --- calligra-2.9.7/krita/data/templates/film/.directory 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/film/.directory 2016-02-02 19:53:14.000000000 +0000 @@ -3,7 +3,6 @@ Name[bs]=Filmski predlošci Name[ca]=Plantilles de pel·lícula Name[ca@valencia]=Plantilles de pel·lícula -Name[cs]=Šablony filmu Name[da]=Filmskabeloner Name[de]=Film-Vorlagen Name[el]=Πρότυπα φίλμ diff -Nru calligra-2.9.7/krita/data/templates/film/HD_720p_1280x720.desktop calligra-2.9.11/krita/data/templates/film/HD_720p_1280x720.desktop --- calligra-2.9.7/krita/data/templates/film/HD_720p_1280x720.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/film/HD_720p_1280x720.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -4,7 +4,6 @@ Name[bs]=HD_720p_1280x720 Name[ca]=HD_720p_1280x720 Name[ca@valencia]=HD_720p_1280x720 -Name[cs]=HD_720p_1280x720 Name[da]=HD_720p_1280x720 Name[de]=HD 720p 1280x720px Name[el]=HD_720p_1280x720 diff -Nru calligra-2.9.7/krita/data/templates/film/HD_full_1920x1080.desktop calligra-2.9.11/krita/data/templates/film/HD_full_1920x1080.desktop --- calligra-2.9.7/krita/data/templates/film/HD_full_1920x1080.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/film/HD_full_1920x1080.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -4,7 +4,6 @@ Name[bs]=HD_full_1920x1080 Name[ca]=HD_full_1920x1080 Name[ca@valencia]=HD_full_1920x1080 -Name[cs]=HD_full_1920x1080 Name[da]=HD_full_1920x1080 Name[de]=HD Voll 1920x1080 Name[el]=HD_full_1920x1080 @@ -29,6 +28,7 @@ Name[sk]=HD_full_1920x1080 Name[sl]=HD_full_1920x1080 Name[sv]=HD_full_1920x1080 +Name[tr]=HD_full_1920x1080 Name[uk]=HD full 1920⨯1080 Name[x-test]=xxHD_full_1920x1080xx Type=Link diff -Nru calligra-2.9.7/krita/data/templates/film/HD_half_960x540.desktop calligra-2.9.11/krita/data/templates/film/HD_half_960x540.desktop --- calligra-2.9.7/krita/data/templates/film/HD_half_960x540.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/film/HD_half_960x540.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -4,7 +4,6 @@ Name[bs]=HD_half_960x540 Name[ca]=HD_half_960x540 Name[ca@valencia]=HD_half_960x540 -Name[cs]=HD_half_960x540 Name[da]=HD_half_960x540 Name[de]=HD Halb 1920x1080 Name[el]=HD_half_960x540 @@ -29,6 +28,7 @@ Name[sk]=HD_half_960x540 Name[sl]=HD_half_960x540 Name[sv]=HD_halv_960x540 +Name[tr]=HD_half_960x540 Name[uk]=HD half 960⨯540 Name[x-test]=xxHD_half_960x540xx Type=Link diff -Nru calligra-2.9.7/krita/data/templates/texture/Texture1024x10248bitsrgb.desktop calligra-2.9.11/krita/data/templates/texture/Texture1024x10248bitsrgb.desktop --- calligra-2.9.7/krita/data/templates/texture/Texture1024x10248bitsrgb.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/texture/Texture1024x10248bitsrgb.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -3,6 +3,7 @@ Name=Texture 1024x1024 8bit srgb Name[bs]=Tekstura 1024x1024 8bit srgb Name[ca]=Textura 1024x1024 8bit SRGB +Name[ca@valencia]=Textura 1024x1024 8bit SRGB Name[cs]=Textura 1024x1024 8bit srgb Name[da]=Tekstur 1024x1024 8bit srgb Name[de]=Textur 1024x1024 8bit srgb @@ -10,6 +11,7 @@ Name[es]=Textura 1024x1024 8bits srgb Name[et]=Tekstuur 1024x1024 8bit srgb Name[fr]=Texture 1024x1024 8bit srgb +Name[gl]=Textura de 1024×1024 e 8 bits SRGB Name[it]=Trama 1024x1024 8bit srgb Name[ja]=テクスチャ 1024x1024 8 ビット sRGB Name[nb]=Tekstur 1024x1024 8bit srgb diff -Nru calligra-2.9.7/krita/data/templates/texture/Texture2048x20488bitsrgb.desktop calligra-2.9.11/krita/data/templates/texture/Texture2048x20488bitsrgb.desktop --- calligra-2.9.7/krita/data/templates/texture/Texture2048x20488bitsrgb.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/texture/Texture2048x20488bitsrgb.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -3,6 +3,7 @@ Name=Texture 2048x2048 8bit srgb Name[bs]=Tekstura 2048x2048 8bit srgb Name[ca]=Textura 2048x2048 8bit SRGB +Name[ca@valencia]=Textura 2048x2048 8bit SRGB Name[cs]=Textura 2048x2048 8bit srgb Name[da]=Tekstur 2048x2048 8bit srgb Name[de]=Textur 2048x2048 8bit srgb @@ -10,6 +11,7 @@ Name[es]=Textura 2048x2048 8bits srgb Name[et]=Tekstuur 2048x2048 8bit srgb Name[fr]=Texture 2048x2048 8bit srgb +Name[gl]=Textura de 2048×2048 e 8 bits SRGB Name[it]=Trama 2048x2048 8bit srgb Name[ja]=テクスチャ 2048x2048 8 ビット sRGB Name[nb]=Tekstur 2048x2048 8bit srgb diff -Nru calligra-2.9.7/krita/data/templates/texture/Texture256x2568bitsrgb.desktop calligra-2.9.11/krita/data/templates/texture/Texture256x2568bitsrgb.desktop --- calligra-2.9.7/krita/data/templates/texture/Texture256x2568bitsrgb.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/texture/Texture256x2568bitsrgb.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -3,6 +3,7 @@ Name=Texture 256x256 8bit srgb Name[bs]=Tekstura 256x256 8bit srgb Name[ca]=Textura 256x256 8bit SRGB +Name[ca@valencia]=Textura 256x256 8bit SRGB Name[cs]=Textura 256x256 8bit srgb Name[da]=Tekstur 256x256 8bit srgb Name[de]=Textur 256x256 8bit srgb @@ -10,6 +11,7 @@ Name[es]=Textura 256x256 8bits srgb Name[et]=Tekstuur 256x256 8bit srgb Name[fr]=Texture 256x256 8bit srgb +Name[gl]=Textura de 256×256 e 8 bits SRGB Name[it]=Trama 256x256 8bit srgb Name[ja]=テクスチャ 256x256 8 ビット sRGB Name[nb]=Tekstur 256x256 8bit srgb diff -Nru calligra-2.9.7/krita/data/templates/texture/Texture4096x40968bitsrgb.desktop calligra-2.9.11/krita/data/templates/texture/Texture4096x40968bitsrgb.desktop --- calligra-2.9.7/krita/data/templates/texture/Texture4096x40968bitsrgb.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/texture/Texture4096x40968bitsrgb.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -3,6 +3,7 @@ Name=Texture 4096x4096 8bit srgb Name[bs]=Tekstura 4096x4096 8bit srgb Name[ca]=Textura 4096x4096 8bit SRGB +Name[ca@valencia]=Textura 4096x4096 8bit SRGB Name[cs]=Textura 4096x4096 8bit srgb Name[da]=Tekstur 4096x4096 8bit srgb Name[de]=Textur 4096x4096 8bit srgb @@ -10,6 +11,7 @@ Name[es]=Textura 4096x4096 8bits srgb Name[et]=Tekstuur 4096x4096 8bit srgb Name[fr]=Texture 4096x4096 8bit srgb +Name[gl]=Textura de 4096×4096 e 8 bits SRGB Name[it]=Trama 4096x4096 8bit srgb Name[ja]=テクスチャ 4096x4096 8 ビット sRGB Name[nb]=Tekstur 4096x4096 8bit srgb diff -Nru calligra-2.9.7/krita/data/templates/texture/Texture512x5128bitsrgb.desktop calligra-2.9.11/krita/data/templates/texture/Texture512x5128bitsrgb.desktop --- calligra-2.9.7/krita/data/templates/texture/Texture512x5128bitsrgb.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/data/templates/texture/Texture512x5128bitsrgb.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -3,6 +3,7 @@ Name=Texture 512x512 8bit srgb Name[bs]=Tekstura 512x512 8bit srgb Name[ca]=Textura 512x512 8bit SRGB +Name[ca@valencia]=Textura 512x512 8bit SRGB Name[cs]=Textura 512x512 8bit srgb Name[da]=Tekstur 512x512 8bit srgb Name[de]=Textur 512x512 8bit srgb @@ -10,6 +11,7 @@ Name[es]=Textura 512x512 8bits srgb Name[et]=Tekstuur 512x512 8bit srgb Name[fr]=Texture 512x512 8bit srgb +Name[gl]=Textura de 512×512 e 8 bits SRGB Name[it]=Trama 512x512 8bit srgb Name[ja]=テクスチャ 512x512 8 ビット sRGB Name[nb]=Tekstur 512x512 8bit srgb diff -Nru calligra-2.9.7/krita/gemini/kritagemini.desktop calligra-2.9.11/krita/gemini/kritagemini.desktop --- calligra-2.9.7/krita/gemini/kritagemini.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/gemini/kritagemini.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -47,6 +47,7 @@ Name[et]=Krita Gemini Name[fi]=Krita Gemini Name[fr]=Krita Gemini +Name[gl]=Krita Gemini Name[ia]=Krita Gemini Name[it]=Krita Gemini Name[ja]=Krita Gemini @@ -63,6 +64,6 @@ Name[uk]=Krita Gemini Name[x-test]=xxKrita Geminixx Exec=kritagemini -Icon=calligrakrita +Icon=calligrakrita2 MimeType=application/x-krita; Categories=Qt;KDE;Graphics; diff -Nru calligra-2.9.7/krita/image/brushengine/kis_paintop_preset.cpp calligra-2.9.11/krita/image/brushengine/kis_paintop_preset.cpp --- calligra-2.9.7/krita/image/brushengine/kis_paintop_preset.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/brushengine/kis_paintop_preset.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -148,10 +148,17 @@ QByteArray ba; if (filename().startsWith("bundle://")) { - qDebug() << "bundle"; QString bn = filename().mid(9); - QString fn = bn.mid(bn.indexOf(":") + 1); - bn = bn.left(bn.indexOf(":")); + + int bundlePos = bn.indexOf(".bundle:"); + if(bundlePos == -1) { + qWarning() << "Error parsing bundle path" << bn; + return false; + } + + int colonPos = bundlePos + 7; + QString fn = bn.right(bn.size() - colonPos - 1); + bn = bn.left(colonPos); QScopedPointer resourceStore(KoStore::createStore(bn, KoStore::Read, "application/x-krita-resourcebundle", KoStore::Zip)); if (!resourceStore || resourceStore->bad()) { diff -Nru calligra-2.9.7/krita/image/brushengine/kis_paintop_settings.cpp calligra-2.9.11/krita/image/brushengine/kis_paintop_settings.cpp --- calligra-2.9.7/krita/image/brushengine/kis_paintop_settings.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/brushengine/kis_paintop_settings.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -93,10 +93,11 @@ return d->preset; } -bool KisPaintOpSettings::mousePressEvent(const KisPaintInformation &pos, Qt::KeyboardModifiers modifiers) +bool KisPaintOpSettings::mousePressEvent(const KisPaintInformation &pos, Qt::KeyboardModifiers modifiers, KisNodeWSP currentNode) { Q_UNUSED(pos); Q_UNUSED(modifiers); + Q_UNUSED(currentNode); setRandomOffset(); return true; // ignore the event by default } diff -Nru calligra-2.9.7/krita/image/brushengine/kis_paintop_settings.h calligra-2.9.11/krita/image/brushengine/kis_paintop_settings.h --- calligra-2.9.7/krita/image/brushengine/kis_paintop_settings.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/brushengine/kis_paintop_settings.h 2016-02-02 19:53:14.000000000 +0000 @@ -65,7 +65,7 @@ * If the tool is supposed to ignore the event, the paint op should return false * and if the tool is supposed to use the event, return true. */ - virtual bool mousePressEvent(const KisPaintInformation &pos, Qt::KeyboardModifiers modifiers); + virtual bool mousePressEvent(const KisPaintInformation &pos, Qt::KeyboardModifiers modifiers, KisNodeWSP currentNode); /** * This function is called to set random offsets to the brush whenever the mouse is clicked. It is diff -Nru calligra-2.9.7/krita/image/CMakeLists.txt calligra-2.9.11/krita/image/CMakeLists.txt --- calligra-2.9.7/krita/image/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/image/CMakeLists.txt 2016-02-02 19:53:14.000000000 +0000 @@ -279,6 +279,7 @@ kis_psd_layer_style.cpp + layerstyles/kis_multiple_projection.cpp layerstyles/kis_layer_style_filter.cpp layerstyles/kis_layer_style_filter_environment.cpp layerstyles/kis_layer_style_filter_projection_plane.cpp diff -Nru calligra-2.9.7/krita/image/kis_async_merger.cpp calligra-2.9.11/krita/image/kis_async_merger.cpp --- calligra-2.9.7/krita/image/kis_async_merger.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_async_merger.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -245,18 +245,24 @@ if(item.m_position & KisMergeWalker::N_FILTHY) { DEBUG_NODE_ACTION("Updating", "N_FILTHY", currentLeaf, applyRect); currentLeaf->accept(originalVisitor); - currentLeaf->projectionPlane()->recalculate(applyRect, walker.startNode()); + if (currentLeaf->visible()) { + currentLeaf->projectionPlane()->recalculate(applyRect, walker.startNode()); + } } else if(item.m_position & KisMergeWalker::N_ABOVE_FILTHY) { DEBUG_NODE_ACTION("Updating", "N_ABOVE_FILTHY", currentLeaf, applyRect); if(currentLeaf->dependsOnLowerNodes()) { currentLeaf->accept(originalVisitor); - currentLeaf->projectionPlane()->recalculate(applyRect, currentLeaf->node()); + if (currentLeaf->visible()) { + currentLeaf->projectionPlane()->recalculate(applyRect, currentLeaf->node()); + } } } else if(item.m_position & KisMergeWalker::N_FILTHY_PROJECTION) { DEBUG_NODE_ACTION("Updating", "N_FILTHY_PROJECTION", currentLeaf, applyRect); - currentLeaf->projectionPlane()->recalculate(applyRect, walker.startNode()); + if (currentLeaf->visible()) { + currentLeaf->projectionPlane()->recalculate(applyRect, walker.startNode()); + } } else /*if(item.m_position & KisMergeWalker::N_BELOW_FILTHY)*/ { DEBUG_NODE_ACTION("Updating", "N_BELOW_FILTHY", currentLeaf, applyRect); diff -Nru calligra-2.9.7/krita/image/kis_busy_progress_indicator.cpp calligra-2.9.11/krita/image/kis_busy_progress_indicator.cpp --- calligra-2.9.7/krita/image/kis_busy_progress_indicator.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_busy_progress_indicator.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -26,7 +26,7 @@ struct KisBusyProgressIndicator::Private { - Private() : numEmptyTicks(0) {} + Private() : numEmptyTicks(0), isStarted(false) {} QTimer timer; int numEmptyTicks; @@ -34,13 +34,19 @@ QAtomicInt timerStarted; KoProgressProxy *progressProxy; + bool isStarted; + void startProgressReport() { + isStarted = true; progressProxy->setRange(0, 0); } void stopProgressReport() { + if (!isStarted) return; + progressProxy->setRange(0, 100); progressProxy->setValue(100); + isStarted = false; } }; @@ -58,6 +64,11 @@ { m_d->stopProgressReport(); } + +void KisBusyProgressIndicator::endUpdatesBeforeDestroying() +{ + m_d->stopProgressReport(); +} void KisBusyProgressIndicator::timerFinished() { diff -Nru calligra-2.9.7/krita/image/kis_busy_progress_indicator.h calligra-2.9.11/krita/image/kis_busy_progress_indicator.h --- calligra-2.9.7/krita/image/kis_busy_progress_indicator.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_busy_progress_indicator.h 2016-02-02 19:53:14.000000000 +0000 @@ -32,6 +32,8 @@ KisBusyProgressIndicator(KoProgressProxy *progressProxy); ~KisBusyProgressIndicator(); + void endUpdatesBeforeDestroying(); + public Q_SLOTS: void update(); diff -Nru calligra-2.9.7/krita/image/kis_cage_transform_worker.cpp calligra-2.9.11/krita/image/kis_cage_transform_worker.cpp --- calligra-2.9.7/krita/image/kis_cage_transform_worker.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_cage_transform_worker.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -332,7 +332,7 @@ QImage KisCageTransformWorker::runOnQImage(QPointF *newOffset) { - if (m_d->isGridEmpty()) QImage(); + if (m_d->isGridEmpty()) return QImage(); KIS_ASSERT_RECOVER(m_d->origCage.size() >= 3 && m_d->origCage.size() == m_d->transfCage.size()) { diff -Nru calligra-2.9.7/krita/image/kis_clone_layer.cpp calligra-2.9.11/krita/image/kis_clone_layer.cpp --- calligra-2.9.7/krita/image/kis_clone_layer.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_clone_layer.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -41,6 +41,7 @@ struct KisCloneLayer::Private { public: + KisPaintDeviceSP fallback; KisLayerSP copyFrom; KisCloneInfo copyFromInfo; CopyLayerType type; @@ -52,6 +53,7 @@ : KisLayer(image, name, opacity) , m_d(new Private()) { + m_d->fallback = new KisPaintDevice(image->colorSpace()); m_d->copyFrom = from; m_d->type = COPY_PROJECTION; m_d->x = 0; @@ -67,6 +69,7 @@ : KisLayer(rhs) , m_d(new Private()) { + m_d->fallback = new KisPaintDevice(rhs.m_d->fallback->colorSpace()); m_d->copyFrom = rhs.copyFrom(); m_d->type = rhs.copyType(); m_d->x = rhs.x(); @@ -108,8 +111,7 @@ KisPaintDeviceSP KisCloneLayer::original() const { - Q_ASSERT(m_d->copyFrom); - + if (!m_d->copyFrom || !m_d->copyFrom->projection()) return m_d->fallback; KisPaintDeviceSP retval; switch (m_d->type) { case COPY_PROJECTION: diff -Nru calligra-2.9.7/krita/image/kis_composite_progress_proxy.cpp calligra-2.9.11/krita/image/kis_composite_progress_proxy.cpp --- calligra-2.9.7/krita/image/kis_composite_progress_proxy.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_composite_progress_proxy.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -18,17 +18,24 @@ #include "kis_composite_progress_proxy.h" +#include "kis_debug.h" + void KisCompositeProgressProxy::addProxy(KoProgressProxy *proxy) { m_proxies.append(proxy); + if (!m_uniqueProxies.contains(proxy)) { + m_uniqueProxies.append(proxy); + } } void KisCompositeProgressProxy::removeProxy(KoProgressProxy *proxy) { - m_proxies.removeAll(proxy); + m_proxies.removeOne(proxy); + if (!m_proxies.contains(proxy)) { + m_uniqueProxies.removeOne(proxy); + } } - int KisCompositeProgressProxy::maximum() const { if(m_proxies.isEmpty()) return 0; @@ -38,21 +45,21 @@ void KisCompositeProgressProxy::setValue(int value) { - foreach(KoProgressProxy *proxy, m_proxies) { + foreach(KoProgressProxy *proxy, m_uniqueProxies) { proxy->setValue(value); } } void KisCompositeProgressProxy::setRange(int minimum, int maximum) { - foreach(KoProgressProxy *proxy, m_proxies) { + foreach(KoProgressProxy *proxy, m_uniqueProxies) { proxy->setRange(minimum, maximum); } } void KisCompositeProgressProxy::setFormat(const QString &format) { - foreach(KoProgressProxy *proxy, m_proxies) { + foreach(KoProgressProxy *proxy, m_uniqueProxies) { proxy->setFormat(format); } } diff -Nru calligra-2.9.7/krita/image/kis_composite_progress_proxy.h calligra-2.9.11/krita/image/kis_composite_progress_proxy.h --- calligra-2.9.7/krita/image/kis_composite_progress_proxy.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_composite_progress_proxy.h 2016-02-02 19:53:14.000000000 +0000 @@ -37,6 +37,7 @@ private: QList m_proxies; + QList m_uniqueProxies; }; #endif /* __KIS_COMPOSITE_PROGRESS_PROXY_H */ diff -Nru calligra-2.9.7/krita/image/kis_filter_weights_applicator.h calligra-2.9.11/krita/image/kis_filter_weights_applicator.h --- calligra-2.9.7/krita/image/kis_filter_weights_applicator.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_filter_weights_applicator.h 2016-02-02 19:53:14.000000000 +0000 @@ -210,7 +210,8 @@ leftSrcBorder = getLeftSrcNeedBorder(dstStart, line, buffer); rightSrcBorder = getRightSrcNeedBorder(dstEnd - 1, line, buffer); - } else { + } + else { dstStart = findAntialiasedDstStart(srcLine.end(), filterSupport, line); dstEnd = findAntialiasedDstEnd(srcLine.start(), filterSupport, line); @@ -218,10 +219,10 @@ rightSrcBorder = getRightSrcNeedBorder(dstStart, line, buffer); } - //Q_ASSERT(dstStart < dstEnd); - //Q_ASSERT(leftSrcBorder < rightSrcBorder); - //Q_ASSERT(leftSrcBorder <= srcLine.start()); - //Q_ASSERT(srcLine.end() <= rightSrcBorder); + if (dstStart >= dstEnd) return LinePos(dstStart, 0); + if (leftSrcBorder >= rightSrcBorder) return LinePos(dstStart, 0); + if (leftSrcBorder > srcLine.start()) return LinePos(dstStart, 0); + if (srcLine.end() > rightSrcBorder) return LinePos(dstStart, 9); int pixelSize = m_src->pixelSize(); KoMixColorsOp *mixOp = m_src->colorSpace()->mixColorsOp(); @@ -278,7 +279,7 @@ delete[] colors; delete[] srcLineBuf; - return LinePos(dstStart, dstEnd - dstStart); + return LinePos(dstStart, qMax(0, dstEnd - dstStart)); } private: diff -Nru calligra-2.9.7/krita/image/kis_filter_weights_buffer.h calligra-2.9.11/krita/image/kis_filter_weights_buffer.h --- calligra-2.9.7/krita/image/kis_filter_weights_buffer.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_filter_weights_buffer.h 2016-02-02 19:53:14.000000000 +0000 @@ -169,6 +169,10 @@ supportSrc.from256Frac(filterStrategy->intSupport() / realScale); supportDst.from256Frac(filterStrategy->intSupport()); m_weightsPositionScale = KisFixedPoint(realScale); + // Avoid a division by zero error: https://bugs.kde.org/show_bug.cgi?id=356156 + if (m_weightsPositionScale == 0) { + m_weightsPositionScale = 1; + } } else { supportSrc.from256Frac(filterStrategy->intSupport()); supportDst.from256Frac(filterStrategy->intSupport()); diff -Nru calligra-2.9.7/krita/image/kis_fixed_point_maths.h calligra-2.9.11/krita/image/kis_fixed_point_maths.h --- calligra-2.9.7/krita/image/kis_fixed_point_maths.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_fixed_point_maths.h 2016-02-02 19:53:14.000000000 +0000 @@ -106,6 +106,7 @@ } KisFixedPoint& operator/=(const KisFixedPoint& x) { + Q_ASSERT(x.d > 0); d <<= 8; d /= x.d; return *this; diff -Nru calligra-2.9.7/krita/image/kis_group_layer.cc calligra-2.9.11/krita/image/kis_group_layer.cc --- calligra-2.9.7/krita/image/kis_group_layer.cc 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_group_layer.cc 2016-02-02 19:53:14.000000000 +0000 @@ -283,7 +283,7 @@ { KisDocumentSectionModel::PropertyList l = KisLayer::sectionModelProperties(); // XXX: get right icons - l << KisDocumentSectionModel::Property(i18n("Pass Through"), koIcon("passthrough-enabled"), koIcon("passthrough-disabled"), passThroughMode()); + l << KisDocumentSectionModel::Property(i18n("Pass Through"), themedIcon("passthrough-enabled"), themedIcon("passthrough-disabled"), passThroughMode()); return l; } diff -Nru calligra-2.9.7/krita/image/kis_image.cc calligra-2.9.11/krita/image/kis_image.cc --- calligra-2.9.7/krita/image/kis_image.cc 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_image.cc 2016-02-02 19:53:14.000000000 +0000 @@ -172,6 +172,17 @@ m_d->scheduler = 0; m_d->wrapAroundModePermitted = false; + m_d->compositeProgressProxy = new KisCompositeProgressProxy(); + + { + KisImageConfig cfg; + + m_d->scheduler = new KisUpdateScheduler(this); + if (cfg.enableProgressReporting()) { + m_d->scheduler->setProgressProxy(m_d->compositeProgressProxy); + } + } + m_d->signalRouter = new KisImageSignalRouter(this); if (!undoStore) { @@ -195,13 +206,6 @@ m_d->recorder = new KisActionRecorder(this); - m_d->compositeProgressProxy = new KisCompositeProgressProxy(); - - if (m_d->startProjection) { - m_d->scheduler = new KisUpdateScheduler(this); - m_d->scheduler->setProgressProxy(m_d->compositeProgressProxy); - } - connect(this, SIGNAL(sigImageModified()), KisMemoryStatisticsServer::instance(), SLOT(notifyImageChanged())); } @@ -362,6 +366,11 @@ return m_d->lockCount != 0; } +bool KisImage::isIdle() +{ + return !locked() && m_d->scheduler->isIdle(); +} + void KisImage::barrierLock() { if (!locked()) { @@ -560,7 +569,7 @@ applicator.end(); } -void KisImage::scaleNode(KisNodeSP node, qreal sx, qreal sy, KisFilterStrategy *filterStrategy) +void KisImage::scaleNode(KisNodeSP node, qreal scaleX, qreal scaleY, KisFilterStrategy *filterStrategy) { KUndo2MagicString actionName(kundo2_i18n("Scale Layer")); KisImageSignalVector emitSignals; @@ -571,7 +580,7 @@ emitSignals, actionName); KisProcessingVisitorSP visitor = - new KisTransformProcessingVisitor(sx, sy, + new KisTransformProcessingVisitor(scaleX, scaleY, 0, 0, QPointF(), 0, @@ -1356,70 +1365,25 @@ -QImage KisImage::convertToQImage(const QRect& scaledRect, const QSize& scaledImageSize, const KoColorProfile *profile) +QImage KisImage::convertToQImage(const QSize& scaledImageSize, const KoColorProfile *profile) { - - if (scaledRect.isEmpty() || scaledImageSize.isEmpty()) { + if (scaledImageSize.isEmpty()) { return QImage(); } - try { - qint32 imageWidth = width(); - qint32 imageHeight = height(); - quint32 pixelSize = colorSpace()->pixelSize(); + KisPaintDeviceSP dev = new KisPaintDevice(colorSpace()); + KisPainter gc; + gc.copyAreaOptimized(QPoint(0, 0),projection(), dev, bounds()); + gc.end(); + double scaleX = qreal(scaledImageSize.width()) / width(); + double scaleY = qreal(scaledImageSize.height()) / height(); - double xScale = static_cast(imageWidth) / scaledImageSize.width(); - double yScale = static_cast(imageHeight) / scaledImageSize.height(); + QPointer updater = new KoDummyUpdater(); - QRect srcRect; + KisTransformWorker worker(dev, scaleX, scaleY, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, updater, KisFilterStrategyRegistry::instance()->value("Bicubic")); + worker.run(); - srcRect.setLeft(static_cast(scaledRect.left() * xScale)); - srcRect.setRight(static_cast(ceil((scaledRect.right() + 1) * xScale)) - 1); - srcRect.setTop(static_cast(scaledRect.top() * yScale)); - srcRect.setBottom(static_cast(ceil((scaledRect.bottom() + 1) * yScale)) - 1); - - KisPaintDeviceSP mergedImage = projection(); - quint8 *scaledImageData = new quint8[scaledRect.width() * scaledRect.height() * pixelSize]; - - quint8 *imageRow = new quint8[srcRect.width() * pixelSize]; - const qint32 imageRowX = srcRect.x(); - - for (qint32 y = 0; y < scaledRect.height(); ++y) { - - qint32 dstY = scaledRect.y() + y; - qint32 dstX = scaledRect.x(); - qint32 srcY = (dstY * imageHeight) / scaledImageSize.height(); - - mergedImage->readBytes(imageRow, imageRowX, srcY, srcRect.width(), 1); - - quint8 *dstPixel = scaledImageData + (y * scaledRect.width() * pixelSize); - quint32 columnsRemaining = scaledRect.width(); - - while (columnsRemaining > 0) { - - qint32 srcX = (dstX * imageWidth) / scaledImageSize.width(); - - memcpy(dstPixel, imageRow + ((srcX - imageRowX) * pixelSize), pixelSize); - - ++dstX; - dstPixel += pixelSize; - --columnsRemaining; - } - } - delete [] imageRow; - - QImage image = colorSpace()->convertToQImage(scaledImageData, scaledRect.width(), scaledRect.height(), const_cast(profile), - KoColorConversionTransformation::InternalRenderingIntent, - KoColorConversionTransformation::InternalConversionFlags); - - delete [] scaledImageData; - - return image; - } - catch (std::bad_alloc) { - warnKrita << "KisImage::convertToQImage ran out of memory"; - return QImage(); - } + return dev->convertToQImage(profile); } void KisImage::notifyLayersChanged() diff -Nru calligra-2.9.7/krita/image/kis_image_config.cpp calligra-2.9.11/krita/image/kis_image_config.cpp --- calligra-2.9.7/krita/image/kis_image_config.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_image_config.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -28,6 +28,9 @@ #include #include +#ifdef Q_OS_MAC +#include +#endif KisImageConfig::KisImageConfig() : m_config(KGlobal::config()->group("")) @@ -44,6 +47,17 @@ m_config.sync(); } +bool KisImageConfig::enableProgressReporting(bool requestDefault) const +{ + return !requestDefault ? + m_config.readEntry("enableProgressReporting", true) : true; +} + +void KisImageConfig::setEnableProgressReporting(bool value) +{ + m_config.writeEntry("enableProgressReporting", value); +} + bool KisImageConfig::enablePerfLog(bool requestDefault) const { return !requestDefault ? @@ -214,7 +228,7 @@ #include #elif defined Q_OS_WIN #include -#elif defined Q_OS_MAC64 +#elif defined Q_OS_MAC #include #include #endif @@ -256,16 +270,21 @@ # if defined ENV32BIT totalMemory = qMin(totalMemory, 2000); # endif -#elif defined Q_OS_MAC64 +#elif defined Q_OS_MAC int mib[2] = { CTL_HW, HW_MEMSIZE }; u_int namelen = sizeof(mib) / sizeof(mib[0]); uint64_t size; size_t len = sizeof(size); - if (sysctl(mib, namelen, &size, &len, NULL, 0) > 0) { - totalMemory = size; + errno = 0; + if (sysctl(mib, namelen, &size, &len, NULL, 0) >= 0) { + totalMemory = size >> 20; + kDebug() << "sysctl(\"hw.memsize\") returned size=" << size << " =>" << totalMemory << "MiB"; error = 0; } + else { + kDebug() << "sysctl(\"hw.memsize\") raised error" << strerror(errno); + } #endif if(error) { diff -Nru calligra-2.9.7/krita/image/kis_image_config.h calligra-2.9.11/krita/image/kis_image_config.h --- calligra-2.9.7/krita/image/kis_image_config.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_image_config.h 2016-02-02 19:53:14.000000000 +0000 @@ -29,6 +29,9 @@ KisImageConfig(); ~KisImageConfig(); + bool enableProgressReporting(bool requestDefault = false) const; + void setEnableProgressReporting(bool value); + bool enablePerfLog(bool requestDefault = false) const; void setEnablePerfLog(bool value); diff -Nru calligra-2.9.7/krita/image/kis_image.h calligra-2.9.11/krita/image/kis_image.h --- calligra-2.9.7/krita/image/kis_image.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_image.h 2016-02-02 19:53:14.000000000 +0000 @@ -115,7 +115,7 @@ /** * XXX: docs! */ - QImage convertToQImage(const QRect& scaledRect, const QSize& scaledImageSize, const KoColorProfile *profile); + QImage convertToQImage(const QSize& scaledImageSize, const KoColorProfile *profile); /** * Calls KisUpdateScheduler::lock @@ -178,8 +178,11 @@ */ void cropNode(KisNodeSP node, const QRect& newRect); + /// XXX: ApiDox void scaleImage(const QSize &size, qreal xres, qreal yres, KisFilterStrategy *filterStrategy); - void scaleNode(KisNodeSP node, qreal sx, qreal sy, KisFilterStrategy *filterStrategy); + + /// XXX: ApiDox + void scaleNode(KisNodeSP node, qreal scaleX, qreal scaleY, KisFilterStrategy *filterStrategy); /** * Execute a rotate transform on all layers in this image. @@ -665,6 +668,8 @@ public Q_SLOTS: KisCompositeProgressProxy* compositeProgressProxy(); + bool isIdle(); + void barrierLock(); bool tryBarrierLock(); void waitForDone(); diff -Nru calligra-2.9.7/krita/image/kis_layer.cc calligra-2.9.11/krita/image/kis_layer.cc --- calligra-2.9.7/krita/image/kis_layer.cc 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_layer.cc 2016-02-02 19:53:14.000000000 +0000 @@ -143,6 +143,7 @@ if (this != &rhs) { m_d->image = rhs.m_d->image; m_d->metaDataStore = new KisMetaData::Store(*rhs.m_d->metaDataStore); + m_d->channelFlags = rhs.m_d->channelFlags; setName(rhs.name()); m_d->projectionPlane = toQShared(new KisLayerProjectionPlane(this)); diff -Nru calligra-2.9.7/krita/image/kis_merge_walker.cc calligra-2.9.11/krita/image/kis_merge_walker.cc --- calligra-2.9.7/krita/image/kis_merge_walker.cc 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_merge_walker.cc 2016-02-02 19:53:14.000000000 +0000 @@ -53,6 +53,22 @@ void KisMergeWalker::startTripWithMask(KisProjectionLeafSP filthyMask) { + if (!filthyMask->parent()) { + /** + * Under very rare circumstances it may happen that the update + * queue will contain a job pointing to a node that has + * already been deleted from the image (direclty or by undo + * command). If it happens to a layer then the walker will + * handle it as usual by building a trivial graph pointing to + * nowhere, but when it happens to a mask... not. Because the + * mask is always expected to have a parent layer to process. + * + * So just handle it here separately. + */ + + return; + } + adjustMasksChangeRect(filthyMask); KisProjectionLeafSP parentLayer = filthyMask->parent(); diff -Nru calligra-2.9.7/krita/image/kis_node.cpp calligra-2.9.11/krita/image/kis_node.cpp --- calligra-2.9.7/krita/image/kis_node.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_node.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -197,6 +197,7 @@ KisNode::~KisNode() { if (m_d->busyProgressIndicator) { + m_d->busyProgressIndicator->endUpdatesBeforeDestroying(); m_d->busyProgressIndicator->deleteLater(); } diff -Nru calligra-2.9.7/krita/image/kis_queues_progress_updater.cpp calligra-2.9.11/krita/image/kis_queues_progress_updater.cpp --- calligra-2.9.7/krita/image/kis_queues_progress_updater.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_queues_progress_updater.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -19,7 +19,6 @@ #include "kis_queues_progress_updater.h" #include -#include #include #include @@ -28,9 +27,9 @@ { Private() : queueSizeMetric(0) - , trackingStarted(false) - , timerFiredOnce(false) + , initialQueueSizeMetric(0) , progressProxy(0) + , tickingRequested(false) { } @@ -39,15 +38,13 @@ int queueSizeMetric; int initialQueueSizeMetric; - QString jobName; - bool trackingStarted; - bool timerFiredOnce; - KoProgressProxy *progressProxy; - static const int TIMER_INTERVAL = 250; + bool tickingRequested; + + static const int TIMER_INTERVAL = 500; }; @@ -58,7 +55,10 @@ m_d->timer.setInterval(Private::TIMER_INTERVAL); m_d->timer.setSingleShot(false); - connect(&m_d->timer, SIGNAL(timeout()), SLOT(updateProxy())); + + connect(this, SIGNAL(sigStartTicking()), SLOT(startTicking()), Qt::QueuedConnection); + connect(this, SIGNAL(sigStopTicking()), SLOT(stopTicking()), Qt::QueuedConnection); + connect(&m_d->timer, SIGNAL(timeout()), SLOT(timerTicked())); } KisQueuesProgressUpdater::~KisQueuesProgressUpdater() @@ -69,56 +69,53 @@ void KisQueuesProgressUpdater::updateProgress(int queueSizeMetric, const QString &jobName) { QMutexLocker locker(&m_d->mutex); + m_d->queueSizeMetric = queueSizeMetric; - if (jobName != m_d->jobName || - m_d->queueSizeMetric > m_d->initialQueueSizeMetric) { + if (queueSizeMetric && + (jobName != m_d->jobName || + m_d->queueSizeMetric > m_d->initialQueueSizeMetric)) { m_d->jobName = jobName; m_d->initialQueueSizeMetric = m_d->queueSizeMetric; } - if(m_d->queueSizeMetric && !m_d->timer.isActive()) { - m_d->trackingStarted = true; - m_d->timerFiredOnce = false; - m_d->timer.start(); - } - else if(!m_d->queueSizeMetric && !m_d->timerFiredOnce) { - m_d->trackingStarted = false; - m_d->timer.stop(); - m_d->initialQueueSizeMetric = 0; + if (m_d->queueSizeMetric && !m_d->tickingRequested) { + + m_d->tickingRequested = true; + emit sigStartTicking(); + + } else if (!m_d->queueSizeMetric && m_d->tickingRequested) { + + m_d->initialQueueSizeMetric = 0; + m_d->jobName.clear(); + m_d->tickingRequested = false; + emit sigStopTicking(); } } void KisQueuesProgressUpdater::hide() { - { - /** - * It's not so important to ensure the state of this variable - * turns over while the lock is unheld. This is only a - * feedback so the next call will hide it. - */ + updateProgress(0, ""); +} - QMutexLocker locker(&m_d->mutex); - if(!m_d->trackingStarted) return; - } +void KisQueuesProgressUpdater::startTicking() +{ + m_d->timer.start(); + timerTicked(); +} - updateProgress(0, ""); +void KisQueuesProgressUpdater::stopTicking() +{ + m_d->timer.stop(); + timerTicked(); } -void KisQueuesProgressUpdater::updateProxy() +void KisQueuesProgressUpdater::timerTicked() { QMutexLocker locker(&m_d->mutex); - if(!m_d->trackingStarted) return; - m_d->timerFiredOnce = true; - m_d->progressProxy->setRange(0, m_d->initialQueueSizeMetric); m_d->progressProxy->setValue(m_d->initialQueueSizeMetric - m_d->queueSizeMetric); m_d->progressProxy->setFormat(m_d->jobName); - - if(!m_d->queueSizeMetric) { - m_d->timer.stop(); - m_d->initialQueueSizeMetric = 0; - } } diff -Nru calligra-2.9.7/krita/image/kis_queues_progress_updater.h calligra-2.9.11/krita/image/kis_queues_progress_updater.h --- calligra-2.9.7/krita/image/kis_queues_progress_updater.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_queues_progress_updater.h 2016-02-02 19:53:14.000000000 +0000 @@ -37,7 +37,13 @@ void hide(); private Q_SLOTS: - void updateProxy(); + void startTicking(); + void stopTicking(); + void timerTicked(); + +Q_SIGNALS: + void sigStartTicking(); + void sigStopTicking(); private: struct Private; diff -Nru calligra-2.9.7/krita/image/kis_selection_mask.cpp calligra-2.9.11/krita/image/kis_selection_mask.cpp --- calligra-2.9.7/krita/image/kis_selection_mask.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_selection_mask.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -38,7 +38,10 @@ struct KisSelectionMask::Private { public: - Private(KisSelectionMask *_q) : q(_q) {} + Private(KisSelectionMask *_q) + : q(_q) + , updatesCompressor(0) + {} KisImageWSP image; KisThreadSafeSignalCompressor *updatesCompressor; @@ -48,26 +51,29 @@ }; KisSelectionMask::KisSelectionMask(KisImageWSP image) - : KisMask("selection") - , m_d(new Private(this)) + : KisMask("selection") + , m_d(new Private(this)) { setActive(false); m_d->image = image; m_d->updatesCompressor = - new KisThreadSafeSignalCompressor(300, KisSignalCompressor::POSTPONE/*, this*/); + new KisThreadSafeSignalCompressor(300, KisSignalCompressor::POSTPONE); connect(m_d->updatesCompressor, SIGNAL(timeout()), SLOT(slotSelectionChangedCompressed())); this->moveToThread(image->thread()); } KisSelectionMask::KisSelectionMask(const KisSelectionMask& rhs) - : KisMask(rhs) - , m_d(new Private(this)) + : KisMask(rhs) + , m_d(new Private(this)) { setActive(false); m_d->image = rhs.image(); + connect(m_d->updatesCompressor, SIGNAL(timeout()), SLOT(slotSelectionChangedCompressed())); + this->setObjectName("KisSelectionMask"); + this->moveToThread(m_d->image->thread()); } KisSelectionMask::~KisSelectionMask() diff -Nru calligra-2.9.7/krita/image/kis_strokes_queue.cpp calligra-2.9.11/krita/image/kis_strokes_queue.cpp --- calligra-2.9.7/krita/image/kis_strokes_queue.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_strokes_queue.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -158,7 +158,7 @@ if(m_d->strokesQueue.isEmpty()) return 0; // just a rough approximation - return m_d->strokesQueue.head()->numJobs() * m_d->strokesQueue.size(); + return qMax(1, m_d->strokesQueue.head()->numJobs()) * m_d->strokesQueue.size(); } KUndo2MagicString KisStrokesQueue::currentStrokeName() const diff -Nru calligra-2.9.7/krita/image/kis_transaction_data.cpp calligra-2.9.11/krita/image/kis_transaction_data.cpp --- calligra-2.9.7/krita/image/kis_transaction_data.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_transaction_data.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -33,7 +33,7 @@ #endif -class Q_DECL_HIDDEN KisTransactionData::Private +class KisTransactionData::Private { public: KisPaintDeviceSP device; diff -Nru calligra-2.9.7/krita/image/kis_update_scheduler.cpp calligra-2.9.11/krita/image/kis_update_scheduler.cpp --- calligra-2.9.7/krita/image/kis_update_scheduler.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_update_scheduler.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -105,12 +105,11 @@ SLOT(spareThreadAppeared()), Qt::DirectConnection); } -void KisUpdateScheduler::setProgressProxy(KoProgressProxy */*progressProxy*/) +void KisUpdateScheduler::setProgressProxy(KoProgressProxy *progressProxy) { delete m_d->progressUpdater; - // FIXME: Disable progress reporting for now since it seems to cause - // speed regressions. 08.07.14, DK. - //m_d->progressUpdater = new KisQueuesProgressUpdater(progressProxy); + m_d->progressUpdater = progressProxy ? + new KisQueuesProgressUpdater(progressProxy) : 0; } void KisUpdateScheduler::progressUpdate() @@ -242,6 +241,19 @@ processQueues(); } +bool KisUpdateScheduler::isIdle() +{ + bool result = false; + + if (tryBarrierLock()) { + result = true; + m_d->processingBlocked = false; + processQueues(); + } + + return result; +} + void KisUpdateScheduler::waitForDone() { do { diff -Nru calligra-2.9.7/krita/image/kis_update_scheduler.h calligra-2.9.11/krita/image/kis_update_scheduler.h --- calligra-2.9.7/krita/image/kis_update_scheduler.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/kis_update_scheduler.h 2016-02-02 19:53:14.000000000 +0000 @@ -102,6 +102,12 @@ bool tryBarrierLock(); /** + * Tells if there are no strokes or updates are running at the + * moment. Internally calls to tryBarrierLock(), so it is not O(1). + */ + bool isIdle(); + + /** * Blocks all the updates from execution. It doesn't affect * strokes execution in any way. This type of lock is supposed * to be held by the strokes themselves when they need a short diff -Nru calligra-2.9.7/krita/image/krita_utils.cpp calligra-2.9.11/krita/image/krita_utils.cpp --- calligra-2.9.7/krita/image/krita_utils.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/krita_utils.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -30,6 +30,7 @@ #include "kis_image_config.h" #include "kis_debug.h" +#include "kis_node.h" namespace KritaUtils @@ -341,4 +342,18 @@ return flags; } + KisNodeSP nearestNodeAfterRemoval(KisNodeSP node) + { + KisNodeSP newNode = node->nextSibling(); + + if (!newNode) { + newNode = node->prevSibling(); + } + + if (!newNode) { + newNode = node->parent(); + } + + return newNode; + } } diff -Nru calligra-2.9.7/krita/image/krita_utils.h calligra-2.9.11/krita/image/krita_utils.h --- calligra-2.9.7/krita/image/krita_utils.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/krita_utils.h 2016-02-02 19:53:14.000000000 +0000 @@ -26,8 +26,10 @@ class QPointF; class QPainterPath; class QBitArray; + #include #include "kritaimage_export.h" +#include "kis_types.h" namespace KritaUtils { @@ -62,6 +64,8 @@ quint8 KRITAIMAGE_EXPORT mergeOpacity(quint8 opacity, quint8 parentOpacity); QBitArray KRITAIMAGE_EXPORT mergeChannelFlags(const QBitArray &flags, const QBitArray &parentFlags); + + KisNodeSP KRITAIMAGE_EXPORT nearestNodeAfterRemoval(KisNodeSP node); } #endif /* __KRITA_UTILS_H */ diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_layer_style_filter_environment.cpp calligra-2.9.11/krita/image/layerstyles/kis_layer_style_filter_environment.cpp --- calligra-2.9.7/krita/image/layerstyles/kis_layer_style_filter_environment.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_layer_style_filter_environment.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -29,13 +29,53 @@ #include "krita_utils.h" +#include +#include "kis_random_accessor_ng.h" +#include "kis_iterator_ng.h" +#include "kis_pixel_selection.h" + struct KisLayerStyleFilterEnvironment::Private { KisLayer *sourceLayer; + KisPixelSelectionSP cachedRandomSelection; + + static KisPixelSelectionSP generateRandomSelection(const QRect &rc); }; +KisPixelSelectionSP +KisLayerStyleFilterEnvironment::Private:: +generateRandomSelection(const QRect &rc) +{ + KisPixelSelectionSP selection = new KisPixelSelection(); + KisSequentialIterator dstIt(selection, rc); + + boost::mt11213b uniformSource; + + if (uniformSource.max() >= 0x00FFFFFF) { + do { + int randValue = uniformSource(); + *dstIt.rawData() = (quint8) randValue; + if (!dstIt.nextPixel()) break; + + randValue >>= 8; + *dstIt.rawData() = (quint8) randValue; + if (!dstIt.nextPixel()) break; + + randValue >>= 8; + *dstIt.rawData() = (quint8) randValue; + } while(dstIt.nextPixel()); + + } else { + do { + *dstIt.rawData() = (quint8) uniformSource(); + } while(dstIt.nextPixel()); + } + + return selection; +} + KisLayerStyleFilterEnvironment::KisLayerStyleFilterEnvironment(KisLayer *sourceLayer) : m_d(new Private) { @@ -85,3 +125,21 @@ gc->setChannelFlags(KritaUtils::mergeChannelFlags(channelFlags, m_d->sourceLayer->channelFlags())); } + +KisPixelSelectionSP KisLayerStyleFilterEnvironment::cachedRandomSelection(const QRect &requestedRect) const +{ + KisPixelSelectionSP selection = m_d->cachedRandomSelection; + + QRect existingRect; + + if (selection) { + existingRect = selection->selectedExactRect(); + } + + if (!existingRect.contains(requestedRect)) { + m_d->cachedRandomSelection = + Private::generateRandomSelection(requestedRect | existingRect); + } + + return m_d->cachedRandomSelection; +} diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_layer_style_filter_environment.h calligra-2.9.11/krita/image/layerstyles/kis_layer_style_filter_environment.h --- calligra-2.9.7/krita/image/layerstyles/kis_layer_style_filter_environment.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_layer_style_filter_environment.h 2016-02-02 19:53:14.000000000 +0000 @@ -23,6 +23,7 @@ #include #include +#include "kis_types.h" class KisPainter; class KisLayer; @@ -45,6 +46,8 @@ quint8 opacity, const QBitArray &channelFlags) const; + KisPixelSelectionSP cachedRandomSelection(const QRect &requestedRect) const; + private: struct Private; const QScopedPointer m_d; diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_layer_style_filter.h calligra-2.9.11/krita/image/layerstyles/kis_layer_style_filter.h --- calligra-2.9.7/krita/image/layerstyles/kis_layer_style_filter.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_layer_style_filter.h 2016-02-02 19:53:14.000000000 +0000 @@ -27,7 +27,7 @@ class KisPSDLayerStyle; class KisLayerStyleFilterEnvironment; - +class KisMultipleProjection; class KRITAIMAGE_EXPORT KisLayerStyleFilter : public KisShared { @@ -41,7 +41,7 @@ QString id() const; virtual void processDirectly(KisPaintDeviceSP src, - KisPaintDeviceSP dst, + KisMultipleProjection *dst, const QRect &applyRect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const = 0; diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_layer_style_filter_projection_plane.cpp calligra-2.9.11/krita/image/layerstyles/kis_layer_style_filter_projection_plane.cpp --- calligra-2.9.7/krita/image/layerstyles/kis_layer_style_filter_projection_plane.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_layer_style_filter_projection_plane.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -27,6 +27,7 @@ #include "kis_painter.h" +#include "kis_multiple_projection.h" struct KisLayerStyleFilterProjectionPlane::Private @@ -36,6 +37,8 @@ QScopedPointer filter; KisPSDLayerStyleSP style; QScopedPointer environment; + + KisMultipleProjection projection; }; KisLayerStyleFilterProjectionPlane:: @@ -59,25 +62,25 @@ QRect KisLayerStyleFilterProjectionPlane::recalculate(const QRect& rect, KisNodeSP filthyNode) { - Q_UNUSED(rect); Q_UNUSED(filthyNode); - /// do nothing - return QRect(); -} - -void KisLayerStyleFilterProjectionPlane::apply(KisPainter *painter, const QRect &rect) -{ if (!m_d->sourceLayer || !m_d->filter) { - qWarning() << "KisLayerStyleFilterProjectionPlane::apply(): [BUG] is not initialized"; - return; + qWarning() << "KisLayerStyleFilterProjectionPlane::recalculate(): [BUG] is not initialized"; + return QRect(); } + m_d->projection.clear(rect); m_d->filter->processDirectly(m_d->sourceLayer->projection(), - painter->device(), + &m_d->projection, rect, m_d->style, m_d->environment.data()); + return rect; +} + +void KisLayerStyleFilterProjectionPlane::apply(KisPainter *painter, const QRect &rect) +{ + m_d->projection.apply(painter->device(), rect); } diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_layer_style_projection_plane.cpp calligra-2.9.11/krita/image/layerstyles/kis_layer_style_projection_plane.cpp --- calligra-2.9.7/krita/image/layerstyles/kis_layer_style_projection_plane.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_layer_style_projection_plane.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -147,7 +147,17 @@ QRect KisLayerStyleProjectionPlane::recalculate(const QRect& rect, KisNodeSP filthyNode) { KisAbstractProjectionPlaneSP sourcePlane = m_d->sourceProjectionPlane.toStrongRef(); - return sourcePlane->recalculate(rect, filthyNode); + QRect result = sourcePlane->recalculate(rect, filthyNode); + + foreach (const KisAbstractProjectionPlaneSP plane, m_d->stylesBefore) { + plane->recalculate(rect, filthyNode); + } + + foreach (const KisAbstractProjectionPlaneSP plane, m_d->stylesAfter) { + plane->recalculate(rect, filthyNode); + } + + return result; } void KisLayerStyleProjectionPlane::apply(KisPainter *painter, const QRect &rect) diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_ls_bevel_emboss_filter.cpp calligra-2.9.11/krita/image/layerstyles/kis_ls_bevel_emboss_filter.cpp --- calligra-2.9.7/krita/image/layerstyles/kis_ls_bevel_emboss_filter.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_ls_bevel_emboss_filter.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -49,7 +49,7 @@ #include "gimp_bump_map.h" #include "kis_transaction.h" - +#include "kis_multiple_projection.h" KisLsBevelEmbossFilter::KisLsBevelEmbossFilter() @@ -257,7 +257,7 @@ }; void KisLsBevelEmbossFilter::applyBevelEmboss(KisPaintDeviceSP srcDevice, - KisPaintDeviceSP dstDevice, + KisMultipleProjection *dst, const QRect &applyRect, const psd_layer_effects_bevel_emboss *config, KisLayerStyleFilterEnvironment *env) const @@ -416,6 +416,8 @@ //selection->convertToQImage(0, QRect(0,0,300,300)).save("4_shadows_sel.png"); { + KisPaintDeviceSP dstDevice = dst->getProjection("00_bevel_shadow", config->shadowBlendMode(), srcDevice); + const KoColor fillColor(config->shadowColor(), dstDevice->colorSpace()); const QRect &fillRect = d.shadowHighlightsFinalRect; KisPaintDeviceSP fillDevice = new KisPaintDevice(dstDevice->colorSpace()); @@ -423,7 +425,7 @@ KisPainter gc(dstDevice); gc.setSelection(baseSelection); - gc.setCompositeOp(config->shadowBlendMode()); + gc.setCompositeOp(COMPOSITE_OVER); env->setupFinalPainter(&gc, config->shadowOpacity(), QBitArray()); gc.bitBlt(fillRect.topLeft(), fillDevice, fillRect); gc.end(); @@ -437,13 +439,15 @@ //selection->convertToQImage(0, QRect(0,0,300,300)).save("5_highlights_sel.png"); { + KisPaintDeviceSP dstDevice = dst->getProjection("01_bevel_highlight", config->highlightBlendMode(), srcDevice); + const KoColor fillColor(config->highlightColor(), dstDevice->colorSpace()); const QRect &fillRect = d.shadowHighlightsFinalRect; KisPaintDeviceSP fillDevice = new KisPaintDevice(dstDevice->colorSpace()); fillDevice->setDefaultPixel(fillColor.data()); KisPainter gc(dstDevice); gc.setSelection(baseSelection); - gc.setCompositeOp(config->highlightBlendMode()); + gc.setCompositeOp(COMPOSITE_OVER); env->setupFinalPainter(&gc, config->highlightOpacity(), QBitArray()); gc.bitBlt(fillRect.topLeft(), fillDevice, fillRect); gc.end(); @@ -451,7 +455,7 @@ } void KisLsBevelEmbossFilter::processDirectly(KisPaintDeviceSP src, - KisPaintDeviceSP dst, + KisMultipleProjection *dst, const QRect &applyRect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const @@ -460,7 +464,7 @@ KIS_ASSERT_RECOVER_RETURN(style); const psd_layer_effects_bevel_emboss *config = style->bevelAndEmboss(); - if (!config->effectEnabled()) return; + if (!KisLsUtils::checkEffectEnabled(config, dst)) return; applyBevelEmboss(src, dst, applyRect, config, env); } diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_ls_bevel_emboss_filter.h calligra-2.9.11/krita/image/layerstyles/kis_ls_bevel_emboss_filter.h --- calligra-2.9.7/krita/image/layerstyles/kis_ls_bevel_emboss_filter.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_ls_bevel_emboss_filter.h 2016-02-02 19:53:14.000000000 +0000 @@ -34,7 +34,7 @@ KisLsBevelEmbossFilter(); void processDirectly(KisPaintDeviceSP src, - KisPaintDeviceSP dst, + KisMultipleProjection *dst, const QRect &applyRect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const; @@ -44,7 +44,7 @@ private: void applyBevelEmboss(KisPaintDeviceSP srcDevice, - KisPaintDeviceSP dstDevice, + KisMultipleProjection *dst, const QRect &applyRect, const psd_layer_effects_bevel_emboss *config, KisLayerStyleFilterEnvironment *env) const; diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_ls_drop_shadow_filter.cpp calligra-2.9.11/krita/image/layerstyles/kis_ls_drop_shadow_filter.cpp --- calligra-2.9.7/krita/image/layerstyles/kis_ls_drop_shadow_filter.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_ls_drop_shadow_filter.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -38,6 +38,7 @@ #include "kis_psd_layer_style.h" +#include "kis_multiple_projection.h" #include "kis_ls_utils.h" @@ -107,7 +108,7 @@ }; void applyDropShadow(KisPaintDeviceSP srcDevice, - KisPaintDeviceSP dstDevice, + KisMultipleProjection *dst, const QRect &applyRect, const psd_layer_effects_context *context, const psd_layer_effects_shadow_base *shadow, @@ -188,7 +189,8 @@ KisLsUtils::applyNoise(selection, d.srcRect, shadow->noise(), - context); + context, + env); } //selection->convertToQImage(0, QRect(0,0,300,300)).save("4_selection_noise.png"); @@ -214,9 +216,10 @@ } //selection->convertToQImage(0, QRect(0,0,300,300)).save("5_selection_knockout.png"); - KisLsUtils::applyFinalSelection(baseSelection, + KisLsUtils::applyFinalSelection(KisMultipleProjection::defaultProjectionId(), + baseSelection, srcDevice, - dstDevice, + dst, d.srcRect, d.dstRect, context, @@ -243,17 +246,17 @@ } void KisLsDropShadowFilter::processDirectly(KisPaintDeviceSP src, - KisPaintDeviceSP dst, + KisMultipleProjection *dst, const QRect &applyRect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const { KIS_ASSERT_RECOVER_RETURN(style); - const psd_layer_effects_shadow_base *shadowStruct = getShadowStruct(style); - if (!shadowStruct->effectEnabled()) return; + const psd_layer_effects_shadow_base *config = getShadowStruct(style); + if (!KisLsUtils::checkEffectEnabled(config, dst)) return; - applyDropShadow(src, dst, applyRect, style->context(), shadowStruct, env); + applyDropShadow(src, dst, applyRect, style->context(), config, env); } QRect KisLsDropShadowFilter::neededRect(const QRect &rect, KisPSDLayerStyleSP style) const diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_ls_drop_shadow_filter.h calligra-2.9.11/krita/image/layerstyles/kis_ls_drop_shadow_filter.h --- calligra-2.9.7/krita/image/layerstyles/kis_ls_drop_shadow_filter.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_ls_drop_shadow_filter.h 2016-02-02 19:53:14.000000000 +0000 @@ -41,7 +41,7 @@ KisLsDropShadowFilter(Mode mode = DropShadow); void processDirectly(KisPaintDeviceSP src, - KisPaintDeviceSP dst, + KisMultipleProjection *dst, const QRect &applyRect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const; diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_ls_overlay_filter.cpp calligra-2.9.11/krita/image/layerstyles/kis_ls_overlay_filter.cpp --- calligra-2.9.7/krita/image/layerstyles/kis_ls_overlay_filter.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_ls_overlay_filter.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -42,6 +42,7 @@ #include "kis_layer_style_filter_environment.h" #include "kis_ls_utils.h" +#include "kis_multiple_projection.h" @@ -54,40 +55,41 @@ void KisLsOverlayFilter::applyOverlay(KisPaintDeviceSP srcDevice, - KisPaintDeviceSP dstDevice, + KisMultipleProjection *dst, const QRect &applyRect, const psd_layer_effects_overlay_base *config, KisLayerStyleFilterEnvironment *env) const { if (applyRect.isEmpty()) return; - KisPaintDeviceSP tempDevice = new KisPaintDevice(dstDevice->colorSpace()); + KisPaintDeviceSP tempDevice = new KisPaintDevice(srcDevice->colorSpace()); { // Create overlay device - KisPaintDeviceSP fillDevice = new KisPaintDevice(dstDevice->colorSpace()); + KisPaintDeviceSP fillDevice = new KisPaintDevice(srcDevice->colorSpace()); KisLsUtils::fillOverlayDevice(fillDevice, applyRect, config, env); KisPainter gc(tempDevice); gc.setCompositeOp(COMPOSITE_OVER); gc.bitBlt(applyRect.topLeft(), srcDevice, applyRect); - QBitArray channelFlags = dstDevice->colorSpace()->channelFlags(true, false); + QBitArray channelFlags = srcDevice->colorSpace()->channelFlags(true, false); gc.setChannelFlags(channelFlags); gc.bitBlt(applyRect.topLeft(), fillDevice, applyRect); gc.end(); } { - // Paint over destivation - - KisPainter gc(dstDevice); + // Paint over destination const QString compositeOp = config->blendMode(); const quint8 opacityU8 = 255.0 / 100.0 * config->opacity(); + KisPaintDeviceSP dstDevice = dst->getProjection(KisMultipleProjection::defaultProjectionId(), compositeOp, srcDevice); - gc.setCompositeOp(compositeOp); + KisPainter gc(dstDevice); + + gc.setCompositeOp(COMPOSITE_OVER); env->setupFinalPainter(&gc, opacityU8, QBitArray()); gc.bitBlt(applyRect.topLeft(), tempDevice, applyRect); @@ -112,7 +114,7 @@ } void KisLsOverlayFilter::processDirectly(KisPaintDeviceSP src, - KisPaintDeviceSP dst, + KisMultipleProjection *dst, const QRect &applyRect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const @@ -121,7 +123,7 @@ KIS_ASSERT_RECOVER_RETURN(style); const psd_layer_effects_overlay_base *config = getOverlayStruct(style); - if (!config->effectEnabled()) return; + if (!KisLsUtils::checkEffectEnabled(config, dst)) return; applyOverlay(src, dst, applyRect, config, env); } diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_ls_overlay_filter.h calligra-2.9.11/krita/image/layerstyles/kis_ls_overlay_filter.h --- calligra-2.9.7/krita/image/layerstyles/kis_ls_overlay_filter.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_ls_overlay_filter.h 2016-02-02 19:53:14.000000000 +0000 @@ -41,7 +41,7 @@ KisLsOverlayFilter(Mode mode); void processDirectly(KisPaintDeviceSP src, - KisPaintDeviceSP dst, + KisMultipleProjection *dst, const QRect &applyRect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const; @@ -53,7 +53,7 @@ const psd_layer_effects_overlay_base* getOverlayStruct(KisPSDLayerStyleSP style) const; void applyOverlay(KisPaintDeviceSP srcDevice, - KisPaintDeviceSP dstDevice, + KisMultipleProjection *dst, const QRect &applyRect, const psd_layer_effects_overlay_base *config, KisLayerStyleFilterEnvironment *env) const; diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_ls_satin_filter.cpp calligra-2.9.11/krita/image/layerstyles/kis_ls_satin_filter.cpp --- calligra-2.9.7/krita/image/layerstyles/kis_ls_satin_filter.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_ls_satin_filter.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -37,6 +37,7 @@ #include "kis_psd_layer_style.h" +#include "kis_multiple_projection.h" #include "kis_ls_utils.h" @@ -121,7 +122,7 @@ } void applySatin(KisPaintDeviceSP srcDevice, - KisPaintDeviceSP dstDevice, + KisMultipleProjection *dst, const QRect &applyRect, const psd_layer_effects_context *context, const psd_layer_effects_satin *config, @@ -181,9 +182,10 @@ } //selection->convertToQImage(0, QRect(0,0,300,300)).save("5_selection_knocked_out.png"); - KisLsUtils::applyFinalSelection(baseSelection, + KisLsUtils::applyFinalSelection(KisMultipleProjection::defaultProjectionId(), + baseSelection, srcDevice, - dstDevice, + dst, d.srcRect, d.dstRect, context, @@ -194,7 +196,7 @@ } void KisLsSatinFilter::processDirectly(KisPaintDeviceSP src, - KisPaintDeviceSP dst, + KisMultipleProjection *dst, const QRect &applyRect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const @@ -202,7 +204,7 @@ KIS_ASSERT_RECOVER_RETURN(style); const psd_layer_effects_satin *config = style->satin(); - if (!config->effectEnabled()) return; + if (!KisLsUtils::checkEffectEnabled(config, dst)) return; applySatin(src, dst, applyRect, style->context(), config, env); } diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_ls_satin_filter.h calligra-2.9.11/krita/image/layerstyles/kis_ls_satin_filter.h --- calligra-2.9.7/krita/image/layerstyles/kis_ls_satin_filter.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_ls_satin_filter.h 2016-02-02 19:53:14.000000000 +0000 @@ -33,7 +33,7 @@ KisLsSatinFilter(); void processDirectly(KisPaintDeviceSP src, - KisPaintDeviceSP dst, + KisMultipleProjection *dst, const QRect &applyRect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const; diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_ls_stroke_filter.cpp calligra-2.9.11/krita/image/layerstyles/kis_ls_stroke_filter.cpp --- calligra-2.9.7/krita/image/layerstyles/kis_ls_stroke_filter.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_ls_stroke_filter.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -42,7 +42,7 @@ #include "kis_layer_style_filter_environment.h" #include "kis_ls_utils.h" - +#include "kis_multiple_projection.h" KisLsStrokeFilter::KisLsStrokeFilter() @@ -63,7 +63,7 @@ } void KisLsStrokeFilter::applyStroke(KisPaintDeviceSP srcDevice, - KisPaintDeviceSP dstDevice, + KisMultipleProjection *dst, const QRect &applyRect, const psd_layer_effects_stroke *config, KisLayerStyleFilterEnvironment *env) const @@ -105,15 +105,17 @@ //selection->convertToQImage(0, QRect(0,0,300,300)).save("1_selection_stroke.png"); - KisPaintDeviceSP fillDevice = new KisPaintDevice(dstDevice->colorSpace()); + KisPaintDeviceSP fillDevice = new KisPaintDevice(srcDevice->colorSpace()); KisLsUtils::fillOverlayDevice(fillDevice, applyRect, config, env); - KisPainter gc(dstDevice); const QString compositeOp = config->blendMode(); const quint8 opacityU8 = 255.0 / 100.0 * config->opacity(); + KisPaintDeviceSP dstDevice = dst->getProjection(KisMultipleProjection::defaultProjectionId(), compositeOp, srcDevice); + dstDevice->clear(applyRect); - gc.setCompositeOp(compositeOp); + KisPainter gc(dstDevice); + gc.setCompositeOp(COMPOSITE_OVER); env->setupFinalPainter(&gc, opacityU8, QBitArray()); gc.setSelection(baseSelection); @@ -121,7 +123,7 @@ } void KisLsStrokeFilter::processDirectly(KisPaintDeviceSP src, - KisPaintDeviceSP dst, + KisMultipleProjection *dst, const QRect &applyRect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const @@ -130,7 +132,7 @@ KIS_ASSERT_RECOVER_RETURN(style); const psd_layer_effects_stroke *config = style->stroke(); - if (!config->effectEnabled()) return; + if (!KisLsUtils::checkEffectEnabled(config, dst)) return; applyStroke(src, dst, applyRect, config, env); } diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_ls_stroke_filter.h calligra-2.9.11/krita/image/layerstyles/kis_ls_stroke_filter.h --- calligra-2.9.7/krita/image/layerstyles/kis_ls_stroke_filter.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_ls_stroke_filter.h 2016-02-02 19:53:14.000000000 +0000 @@ -34,7 +34,7 @@ KisLsStrokeFilter(); void processDirectly(KisPaintDeviceSP src, - KisPaintDeviceSP dst, + KisMultipleProjection *dst, const QRect &applyRect, KisPSDLayerStyleSP style, KisLayerStyleFilterEnvironment *env) const; @@ -44,7 +44,7 @@ private: void applyStroke(KisPaintDeviceSP srcDevice, - KisPaintDeviceSP dstDevice, + KisMultipleProjection *dst, const QRect &applyRect, const psd_layer_effects_stroke *config, KisLayerStyleFilterEnvironment *env) const; diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_ls_utils.cpp calligra-2.9.11/krita/image/layerstyles/kis_ls_utils.cpp --- calligra-2.9.7/krita/image/layerstyles/kis_ls_utils.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_ls_utils.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -38,6 +38,7 @@ #include "kis_gradient_painter.h" #include "kis_layer_style_filter_environment.h" #include "kis_selection_filters.h" +#include "kis_multiple_projection.h" namespace KisLsUtils @@ -118,34 +119,6 @@ } namespace Private { - KisPixelSelectionSP generateRandomSelection(const QRect &rc) - { - KisPixelSelectionSP selection = new KisPixelSelection(); - KisSequentialIterator dstIt(selection, rc); - - if (RAND_MAX >= 0x00FFFFFF) { - do { - int randValue = qrand(); - *dstIt.rawData() = (quint8) randValue; - if (!dstIt.nextPixel()) break; - - randValue >>= 8; - *dstIt.rawData() = (quint8) randValue; - if (!dstIt.nextPixel()) break; - - randValue >>= 8; - *dstIt.rawData() = (quint8) randValue; - } while(dstIt.nextPixel()); - - } else { - do { - *dstIt.rawData() = (quint8) rand(); - } while(dstIt.nextPixel()); - } - - return selection; - } - void getGradientTable(const KoAbstractGradient *gradient, QVector *table, const KoColorSpace *colorSpace) @@ -171,8 +144,10 @@ struct JitterGradientIndex { - JitterGradientIndex(const QRect &applyRect, int jitter) - : randomSelection(generateRandomSelection(applyRect)), + JitterGradientIndex(const QRect &applyRect, + int jitter, + const KisLayerStyleFilterEnvironment *env) + : randomSelection(env->cachedRandomSelection(applyRect)), noiseIt(randomSelection, applyRect), m_jitterCoeff(jitter * 255 / 100) { @@ -250,13 +225,14 @@ const QRect &applyRect, const QVector &table, bool edgeHidden, - int jitter) + int jitter, + const KisLayerStyleFilterEnvironment *env) { if (!jitter) { LinearGradientIndex fetcher; applyGradientImpl(device, selection, applyRect, table, edgeHidden, fetcher); } else { - JitterGradientIndex fetcher(applyRect, jitter); + JitterGradientIndex fetcher(applyRect, jitter, env); applyGradientImpl(device, selection, applyRect, table, edgeHidden, fetcher); } } @@ -267,13 +243,14 @@ void applyNoise(KisPixelSelectionSP selection, const QRect &applyRect, int noise, - const psd_layer_effects_context *context) + const psd_layer_effects_context *context, + const KisLayerStyleFilterEnvironment *env) { Q_UNUSED(context); const QRect overlayRect = kisGrowRect(applyRect, noiseNeedBorder); - KisPixelSelectionSP randomSelection = Private::generateRandomSelection(overlayRect); + KisPixelSelectionSP randomSelection = env->cachedRandomSelection(overlayRect); KisPixelSelectionSP randomOverlay = new KisPixelSelection(); KisSequentialConstIterator noiseIt(randomSelection, overlayRect); @@ -558,9 +535,10 @@ } } - void applyFinalSelection(KisSelectionSP baseSelection, + void applyFinalSelection(const QString &projectionId, + KisSelectionSP baseSelection, KisPaintDeviceSP srcDevice, - KisPaintDeviceSP dstDevice, + KisMultipleProjection *dst, const QRect &srcRect, const QRect &dstRect, const psd_layer_effects_context *context, @@ -569,23 +547,14 @@ { const KoColor effectColor(config->color(), srcDevice->colorSpace()); - KisPaintDeviceSP tempDevice; - if (srcDevice == dstDevice) { - if (context->keep_original) { - tempDevice = new KisPaintDevice(*srcDevice); - } - srcDevice->clear(srcRect); - } else { - tempDevice = srcDevice; - } - const QRect effectRect(dstRect); const QString compositeOp = config->blendMode(); const quint8 opacityU8 = 255.0 / 100.0 * config->opacity(); + KisPaintDeviceSP dstDevice = dst->getProjection(projectionId, compositeOp, srcDevice); if (config->fillType() == psd_fill_solid_color) { KisFillPainter gc(dstDevice); - gc.setCompositeOp(compositeOp); + gc.setCompositeOp(COMPOSITE_OVER); env->setupFinalPainter(&gc, opacityU8, QBitArray()); gc.setSelection(baseSelection); gc.fillSelection(effectRect, effectColor); @@ -605,21 +574,38 @@ Private::applyGradient(overlayDevice, baseSelection->pixelSelection(), effectRect, table, - true, config->jitter()); + true, config->jitter(), env); KisPainter gc(dstDevice); - gc.setCompositeOp(compositeOp); + gc.setCompositeOp(COMPOSITE_OVER); env->setupFinalPainter(&gc, opacityU8, QBitArray()); gc.bitBlt(effectRect.topLeft(), overlayDevice, effectRect); gc.end(); } //dstDevice->convertToQImage(0, QRect(0,0,300,300)).save("6_device_shadow.png"); + } - if (context->keep_original) { - KisPainter gc(dstDevice); - // FIXME: opacity? - gc.bitBlt(dstRect.topLeft(), tempDevice, dstRect); + void applyFinalSelection(const QString &projectionId, + KisSelectionSP baseSelection, + KisPaintDeviceSP srcDevice, + KisPaintDeviceSP dstDevice, + const QRect &srcRect, + const QRect &dstRect, + const psd_layer_effects_context *context, + const psd_layer_effects_shadow_base *config, + const KisLayerStyleFilterEnvironment *env) + { + } + + bool checkEffectEnabled(const psd_layer_effects_shadow_base *config, KisMultipleProjection *dst) + { + bool result = config->effectEnabled(); + + if (!result) { + dst->freeAllProjections(); } + + return result; } } diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_ls_utils.h calligra-2.9.11/krita/image/layerstyles/kis_ls_utils.h --- calligra-2.9.7/krita/image/layerstyles/kis_ls_utils.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_ls_utils.h 2016-02-02 19:53:14.000000000 +0000 @@ -27,6 +27,7 @@ struct psd_layer_effects_overlay_base; class KisLayerStyleFilterEnvironment; class KoPattern; +class KisMultipleProjection; namespace KisLsUtils @@ -57,7 +58,8 @@ void applyNoise(KisPixelSelectionSP selection, const QRect &applyRect, int noise, - const psd_layer_effects_context *context); + const psd_layer_effects_context *context, + const KisLayerStyleFilterEnvironment *env); void knockOutSelection(KisPixelSelectionSP selection, KisPixelSelectionSP knockOutSelection, @@ -80,15 +82,17 @@ const psd_layer_effects_overlay_base *config, KisLayerStyleFilterEnvironment *env); - void applyFinalSelection(KisSelectionSP baseSelection, + void applyFinalSelection(const QString &projectionId, + KisSelectionSP baseSelection, KisPaintDeviceSP srcDevice, - KisPaintDeviceSP dstDevice, + KisMultipleProjection *dst, const QRect &srcRect, const QRect &dstRect, const psd_layer_effects_context *context, const psd_layer_effects_shadow_base *config, const KisLayerStyleFilterEnvironment *env); + bool checkEffectEnabled(const psd_layer_effects_shadow_base *config, KisMultipleProjection *dst); } #endif /* __KIS_LS_UTILS_H */ diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_multiple_projection.cpp calligra-2.9.11/krita/image/layerstyles/kis_multiple_projection.cpp --- calligra-2.9.7/krita/image/layerstyles/kis_multiple_projection.cpp 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_multiple_projection.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2015 Dmitry Kazakov + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "kis_multiple_projection.h" + +#include +#include + + +#include + +#include "kis_painter.h" +#include "kis_paint_device.h" + + +struct ProjectionStruct { + KisPaintDeviceSP device; + QString compositeOpId; +}; + +typedef QMap PlanesMap; + +struct KisMultipleProjection::Private +{ + QReadWriteLock lock; + PlanesMap planes; +}; + + +KisMultipleProjection::KisMultipleProjection() + : m_d(new Private) +{ +} + +KisMultipleProjection::~KisMultipleProjection() +{ +} + +QString KisMultipleProjection::defaultProjectionId() +{ + return "00_default"; +} + +KisPaintDeviceSP KisMultipleProjection::getProjection(const QString &id, const QString &compositeOpId, KisPaintDeviceSP prototype) +{ + QReadLocker readLocker(&m_d->lock); + + PlanesMap::const_iterator constIt = m_d->planes.constFind(id); + + if (constIt == m_d->planes.constEnd() || + constIt->compositeOpId != compositeOpId || + !(*constIt->device->colorSpace() == *prototype->colorSpace())) { + + readLocker.unlock(); + + { + QWriteLocker writeLocker(&m_d->lock); + + PlanesMap::iterator writeIt = m_d->planes.find(id); + if (writeIt == m_d->planes.end()) { + ProjectionStruct plane; + plane.device = new KisPaintDevice(prototype->colorSpace()); + plane.device->prepareClone(prototype); + plane.compositeOpId = compositeOpId; + writeIt = m_d->planes.insert(id, plane); + } else if (writeIt->compositeOpId != compositeOpId || + !(*writeIt->device->colorSpace() == *prototype->colorSpace())) { + + writeIt->device->prepareClone(prototype); + writeIt->compositeOpId = compositeOpId; + } + + return writeIt->device; + } + } + + return constIt->device; +} + +void KisMultipleProjection::freeProjection(const QString &id) +{ + QWriteLocker writeLocker(&m_d->lock); + m_d->planes.remove(id); +} + +void KisMultipleProjection::freeAllProjections() +{ + QWriteLocker writeLocker(&m_d->lock); + m_d->planes.clear(); +} + +void KisMultipleProjection::clear(const QRect &rc) +{ + QReadLocker readLocker(&m_d->lock); + + PlanesMap::const_iterator it = m_d->planes.constBegin(); + PlanesMap::const_iterator end = m_d->planes.constEnd(); + + for (; it != end; ++it) { + const_cast(it->device.data())->clear(rc); + } +} + +void KisMultipleProjection::apply(KisPaintDeviceSP dstDevice, const QRect &rect) +{ + QReadLocker readLocker(&m_d->lock); + + PlanesMap::const_iterator it = m_d->planes.constBegin(); + PlanesMap::const_iterator end = m_d->planes.constEnd(); + + for (; it != end; ++it) { + KisPainter gc(dstDevice); + gc.setCompositeOp(it->compositeOpId); + gc.bitBlt(rect.topLeft(), it->device, rect); + } +} diff -Nru calligra-2.9.7/krita/image/layerstyles/kis_multiple_projection.h calligra-2.9.11/krita/image/layerstyles/kis_multiple_projection.h --- calligra-2.9.7/krita/image/layerstyles/kis_multiple_projection.h 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/krita/image/layerstyles/kis_multiple_projection.h 2016-02-02 19:53:14.000000000 +0000 @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2015 Dmitry Kazakov + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __KIS_MULTIPLE_PROJECTION_H +#define __KIS_MULTIPLE_PROJECTION_H + +#include +#include "kis_types.h" +#include "kritaimage_export.h" + + +class KRITAIMAGE_EXPORT KisMultipleProjection +{ +public: + KisMultipleProjection(); + ~KisMultipleProjection(); + + static QString defaultProjectionId(); + + KisPaintDeviceSP getProjection(const QString &id, const QString &compositeOpId, KisPaintDeviceSP prototype); + void freeProjection(const QString &id); + void freeAllProjections(); + + void clear(const QRect &rc); + + void apply(KisPaintDeviceSP dstDevice, const QRect &rect); + +private: + struct Private; + const QScopedPointer m_d; +}; + +#endif /* __KIS_MULTIPLE_PROJECTION_H */ diff -Nru calligra-2.9.7/krita/image/tests/CMakeLists.txt calligra-2.9.11/krita/image/tests/CMakeLists.txt --- calligra-2.9.7/krita/image/tests/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/image/tests/CMakeLists.txt 2016-02-02 19:53:14.000000000 +0000 @@ -624,6 +624,13 @@ ########### next target ############### +set(kis_layer_style_filter_environment_test_SRCS kis_layer_style_filter_environment_test.cpp ) +kde4_add_unit_test(KisLayerStyleFilterEnvironmentTest TESTNAME kritaimage-layer_style_filter_environment_test ${kis_layer_style_filter_environment_test_SRCS}) +target_link_libraries(KisLayerStyleFilterEnvironmentTest ${KDE4_KDEUI_LIBS} kritaimage ${QT_QTTEST_LIBRARY}) + + +########### next target ############### + set(kis_projection_leaf_test_SRCS kis_projection_leaf_test.cpp ) kde4_add_unit_test(KisProjectionLeafTest TESTNAME kritaimage-projection_leaf_test ${kis_projection_leaf_test_SRCS}) target_link_libraries(KisProjectionLeafTest ${KDE4_KDEUI_LIBS} kritaimage ${QT_QTTEST_LIBRARY}) diff -Nru calligra-2.9.7/krita/image/tests/kis_layer_style_filter_environment_test.cpp calligra-2.9.11/krita/image/tests/kis_layer_style_filter_environment_test.cpp --- calligra-2.9.7/krita/image/tests/kis_layer_style_filter_environment_test.cpp 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/krita/image/tests/kis_layer_style_filter_environment_test.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2015 Dmitry Kazakov + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "kis_layer_style_filter_environment_test.h" + +#include + +#include "layerstyles/kis_layer_style_filter_environment.h" +#include "kis_pixel_selection.h" +#include "testutil.h" + + +void KisLayerStyleFilterEnvironmentTest::testRandomSelectionCaching() +{ + TestUtil::MaskParent p; + KisLayerStyleFilterEnvironment env(p.layer.data()); + + const QRect r1 = QRect(0,0,100,100); + const QRect r2 = QRect(0,0,101,101); + + KisPixelSelectionSP selection1 = env.cachedRandomSelection(r1); + + QCOMPARE(selection1->selectedExactRect(), r1); + + KisPixelSelectionSP selection2 = env.cachedRandomSelection(r1); + + QVERIFY(selection1 == selection2); + + KisPixelSelectionSP selection3 = env.cachedRandomSelection(r2); + + QVERIFY(selection1 != selection3); + QCOMPARE(selection3->selectedExactRect(), r2); +} + +void KisLayerStyleFilterEnvironmentTest::benchmarkRandomSelectionGeneration() +{ + TestUtil::MaskParent p; + KisLayerStyleFilterEnvironment env(p.layer.data()); + + QBENCHMARK_ONCE { + const QRect r1 = QRect(0,0,10000,10000); + KisPixelSelectionSP selection1 = env.cachedRandomSelection(r1); + } +} + +QTEST_KDEMAIN(KisLayerStyleFilterEnvironmentTest, GUI) diff -Nru calligra-2.9.7/krita/image/tests/kis_layer_style_filter_environment_test.h calligra-2.9.11/krita/image/tests/kis_layer_style_filter_environment_test.h --- calligra-2.9.7/krita/image/tests/kis_layer_style_filter_environment_test.h 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/krita/image/tests/kis_layer_style_filter_environment_test.h 2016-02-02 19:53:14.000000000 +0000 @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2015 Dmitry Kazakov + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __KIS_LAYER_STYLE_FILTER_ENVIRONMENT_TEST_H +#define __KIS_LAYER_STYLE_FILTER_ENVIRONMENT_TEST_H + +#include + +class KisLayerStyleFilterEnvironmentTest : public QObject +{ + Q_OBJECT +private slots: + void testRandomSelectionCaching(); + void benchmarkRandomSelectionGeneration(); +}; + +#endif /* __KIS_LAYER_STYLE_FILTER_ENVIRONMENT_TEST_H */ diff -Nru calligra-2.9.7/krita/image/tests/kis_layer_styles_test.cpp calligra-2.9.11/krita/image/tests/kis_layer_styles_test.cpp --- calligra-2.9.7/krita/image/tests/kis_layer_styles_test.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/tests/kis_layer_styles_test.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -30,6 +30,7 @@ #include "layerstyles/kis_layer_style_filter_environment.h" #include "layerstyles/kis_ls_drop_shadow_filter.h" #include "kis_psd_layer_style.h" +#include "layerstyles/kis_multiple_projection.h" struct TestConfig { @@ -84,6 +85,8 @@ const QString &testName, bool useSeparateDevices) { + Q_UNUSED(useSeparateDevices); + const KoColorSpace * cs = KoColorSpaceRegistry::instance()->rgb8(); QRect srcRect(50, 50, 100, 100); @@ -92,26 +95,25 @@ KisPaintDeviceSP dev = new KisPaintDevice(cs); dev->fill(srcRect, KoColor(Qt::red, cs)); - KisPaintDeviceSP dst = dev; - - if (useSeparateDevices) { - dst = new KisPaintDevice(cs); - } + KisMultipleProjection projection; KisLsDropShadowFilter lsFilter; KisPSDLayerStyleSP style(new KisPSDLayerStyle()); config.writeProperties(style); - KisTransaction t(dst); + TestUtil::MaskParent parent; KisLayerStyleFilterEnvironment env(parent.layer.data()); foreach (const QRect &rc, applyRects) { - lsFilter.processDirectly(dev, dst, rc, style, &env); + lsFilter.processDirectly(dev, &projection, rc, style, &env); } - t.end(); + + KisPaintDeviceSP dst = new KisPaintDevice(cs); + + projection.apply(dst, dstRect); QImage resultImage = dst->convertToQImage(0, dstRect); diff -Nru calligra-2.9.7/krita/image/tests/kis_paint_device_test.cpp calligra-2.9.11/krita/image/tests/kis_paint_device_test.cpp --- calligra-2.9.7/krita/image/tests/kis_paint_device_test.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/image/tests/kis_paint_device_test.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -1375,5 +1375,89 @@ pool.waitForDone(); } +#include +#include +#include +#include +#include +#include +#include + +#include "KoCompositeOpRegistry.h" + + +using namespace boost::accumulators; + +accumulator_set > accum; + + +void KisPaintDeviceTest::testCompositionAssociativity() +{ + const KoColorSpace *cs = KoColorSpaceRegistry::instance()->rgb8(); + + qsrand(500); + + boost::mt11213b _rnd0(qrand()); + boost::mt11213b _rnd1(qrand()); + boost::mt11213b _rnd2(qrand()); + boost::mt11213b _rnd3(qrand()); + + boost::uniform_smallint rnd0(0, 255); + boost::uniform_smallint rnd1(0, 255); + boost::uniform_smallint rnd2(0, 255); + boost::uniform_smallint rnd3(0, 255); + + QList allCompositeOps = cs->compositeOps(); + + foreach(const KoCompositeOp *op, allCompositeOps) { + + accumulator_set > accum; + + const int numIterations = 10000; + + for (int j = 0; j < numIterations; j++) { + KoColor c1(QColor(rnd0(_rnd0), rnd1(_rnd1), rnd2(_rnd2), rnd3(_rnd3)), cs); + KoColor c2(QColor(rnd0(_rnd0), rnd1(_rnd1), rnd2(_rnd2), rnd3(_rnd3)), cs); + KoColor c3(QColor(rnd0(_rnd0), rnd1(_rnd1), rnd2(_rnd2), rnd3(_rnd3)), cs); + //KoColor c4(QColor(rnd0(_rnd0), rnd1(_rnd1), rnd2(_rnd2), rnd3(_rnd3)), cs); + //KoColor c5(QColor(rnd0(_rnd0), rnd1(_rnd1), rnd2(_rnd2), rnd3(_rnd3)), cs); + + KoColor r1(QColor(Qt::transparent), cs); + KoColor r2(QColor(Qt::transparent), cs); + KoColor r3(QColor(Qt::transparent), cs); + + op->composite(r1.data(), 0, c1.data(), 0, 0,0, 1,1, 255); + op->composite(r1.data(), 0, c2.data(), 0, 0,0, 1,1, 255); + op->composite(r1.data(), 0, c3.data(), 0, 0,0, 1,1, 255); + //op->composite(r1.data(), 0, c4.data(), 0, 0,0, 1,1, 255); + //op->composite(r1.data(), 0, c5.data(), 0, 0,0, 1,1, 255); + + op->composite(r3.data(), 0, c2.data(), 0, 0,0, 1,1, 255); + op->composite(r3.data(), 0, c3.data(), 0, 0,0, 1,1, 255); + //op->composite(r3.data(), 0, c4.data(), 0, 0,0, 1,1, 255); + //op->composite(r3.data(), 0, c5.data(), 0, 0,0, 1,1, 255); + + op->composite(r2.data(), 0, c1.data(), 0, 0,0, 1,1, 255); + op->composite(r2.data(), 0, r3.data(), 0, 0,0, 1,1, 255); + + const quint8 *p1 = r1.data(); + const quint8 *p2 = r2.data(); + + if (memcmp(p1, p2, 4) != 0) { + for (int i = 0; i < 4; i++) { + accum(qAbs(p1[i] - p2[i])); + } + } + + } + + qDebug("Errors for op %25s err rate %7.2f var %7.2f max %7.2f", + op->id().toAscii().data(), + (qreal(count(accum)) / (4 * numIterations)), + variance(accum), + count(accum) > 0 ? (max)(accum) : 0); + } +} + QTEST_KDEMAIN(KisPaintDeviceTest, GUI) #include "kis_paint_device_test.moc" diff -Nru calligra-2.9.7/krita/image/tests/kis_paint_device_test.h calligra-2.9.11/krita/image/tests/kis_paint_device_test.h --- calligra-2.9.7/krita/image/tests/kis_paint_device_test.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/tests/kis_paint_device_test.h 2016-02-02 19:53:14.000000000 +0000 @@ -62,6 +62,7 @@ void testMoveWrapAround(); void testCacheState(); + void testCompositionAssociativity(); }; #endif diff -Nru calligra-2.9.7/krita/image/tiles3/kis_tile_data_store.cc calligra-2.9.11/krita/image/tiles3/kis_tile_data_store.cc --- calligra-2.9.7/krita/image/tiles3/kis_tile_data_store.cc 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/image/tiles3/kis_tile_data_store.cc 2016-02-02 19:53:14.000000000 +0000 @@ -82,10 +82,9 @@ m_swapper.terminateSwapper(); if(numTiles() > 0) { - qCritical() << "CRITICAL: According to statistics of the KisTileDataStore" - << "some tiles have leaked from the Krita control!"; - qCritical() << "CRITICAL: Tiles in memory:" << numTilesInMemory() - << "Total tiles:" << numTiles(); + qWarning() << "Warning: some tiles have leaked:"; + qWarning() << "\tTiles in memory:" << numTilesInMemory() << "\n" + << "\tTotal tiles:" << numTiles(); } } diff -Nru calligra-2.9.7/krita/integration/kimgio/CMakeLists.txt calligra-2.9.11/krita/integration/kimgio/CMakeLists.txt --- calligra-2.9.7/krita/integration/kimgio/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/integration/kimgio/CMakeLists.txt 2016-02-02 19:53:14.000000000 +0000 @@ -2,11 +2,11 @@ set(kimg_kra_LIB_SRCS kra.cpp) kde4_add_plugin(kimg_kra ${kimg_kra_LIB_SRCS}) -target_link_libraries(kimg_kra kritaui) +target_link_libraries(kimg_kra ${KDE4_KIO_LIBS} ${KDE4_KDECORE_LIBS} ${QT_QTGUI_LIBRARY}) set(kimg_ora_LIB_SRCS ora.cpp) kde4_add_plugin(kimg_ora ${kimg_ora_LIB_SRCS}) -target_link_libraries(kimg_ora kritaui) +target_link_libraries(kimg_ora ${KDE4_KIO_LIBS} ${KDE4_KDECORE_LIBS} ${QT_QTGUI_LIBRARY}) install(TARGETS kimg_ora DESTINATION ${PLUGIN_INSTALL_DIR}/plugins/imageformats/ ) install(TARGETS kimg_kra DESTINATION ${PLUGIN_INSTALL_DIR}/plugins/imageformats/ ) diff -Nru calligra-2.9.7/krita/integration/kimgio/kra.cpp calligra-2.9.11/krita/integration/kimgio/kra.cpp --- calligra-2.9.7/krita/integration/kimgio/kra.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/integration/kimgio/kra.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -19,11 +19,6 @@ #include #include -#include -#include -#include -#include - KraHandler::KraHandler() { } diff -Nru calligra-2.9.7/krita/integration/kimgio/ora.cpp calligra-2.9.11/krita/integration/kimgio/ora.cpp --- calligra-2.9.7/krita/integration/kimgio/ora.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/integration/kimgio/ora.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -17,14 +17,6 @@ #include -#include -#include -#include -#include -#include -#include "ora_load_context.h" -#include - #include OraHandler::OraHandler() diff -Nru calligra-2.9.7/krita/krita.action calligra-2.9.11/krita/krita.action --- calligra-2.9.7/krita/krita.action 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/krita.action 2016-02-02 19:53:14.000000000 +0000 @@ -7,6 +7,8 @@ + + @@ -36,7 +38,7 @@ - + @@ -265,7 +267,7 @@ - + @@ -285,7 +287,7 @@ - + diff -Nru calligra-2.9.7/krita/krita.appdata.xml calligra-2.9.11/krita/krita.appdata.xml --- calligra-2.9.7/krita/krita.appdata.xml 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/krita.appdata.xml 2016-02-02 19:53:14.000000000 +0000 @@ -5,6 +5,7 @@ Digital Painting, Creative Freedom Digitalno crtanje, kreativna sloboda Dibuix digital, Llibertat creativa + Dibuix digital, Llibertat creativa Digital tegning, kunstnerisk frihed Digitales Malen, kreative Freiheit Digital Painting, Creative Freedom @@ -12,6 +13,7 @@ Digitaalne joonistamine, loominguline vabadus Digitaalimaalaus, luova vapaus Peinture numérique, liberté créatrice + Debuxo dixital, liberdade creativa Pictura digital, Libertate creative Pittura digitale, libertà creativa Digital Painting, Creative Freedom @@ -27,12 +29,14 @@

    Krita is the full-featured digital art studio.

    Krita je potpuni digitalni umjetnički studio.

    Krita és l'estudi d'art digital ple de funcionalitats.

    +

    Krita és l'estudi d'art digital ple de funcionalitats.

    Krita ist ein digitales Designstudio mit umfangreichen Funktionen.

    Krita is the full-featured digital art studio.

    Krita es un estudio de arte digital completo

    Krita on rohkete võimalustega digitaalkunstistuudio.

    Krita on täyspiirteinen digitaiteen ateljee.

    Krita est le studio d'art numérique complet.

    +

    Krita é un estudio completo de arte dixital.

    Krita es le studio de arte digital complete.

    Krita è uno studio d'arte digitale completo.

    Krita は、フル機能を備えたデジタルなアートスタジオです。

    @@ -48,11 +52,13 @@

    It is perfect for sketching and painting, and presents an end–to–end solution for creating digital painting files from scratch by masters.

    On je savršen za skiciranje i slikanje i predstavlja finalno rješenje za kreiranje digitalnih slika od nule s majstorima

    És perfecte per fer esbossos i pintar, i presenta una solució final per crear fitxers de dibuix digital des de zero per a mestres.

    +

    És perfecte per fer esbossos i pintar, i presenta una solució final per crear fitxers de dibuix digital des de zero per a mestres.

    It is perfect for sketching and painting, and presents an end–to–end solution for creating digital painting files from scratch by masters.

    Es perfecto para diseñar y pintar, y ofrece una solución completa para crear desde cero archivos de pintura digital apta para profesionales.

    See on suurepärane töövahend visandite ja joonistuste valmistamiseks ning annab andekatele kunstnikele võimaluse luua digitaalpilt algusest lõpuni just oma käe järgi.

    Se on täydellinen luonnosteluun ja maalaukseen ja tarjoaa kokonaisratkaisun digitaalisten kuvatiedostojen luomiseen alusta alkaen.

    Il est parfait pour crayonner et peindre, et constitue une solution de bout en bout pour créer des fichier de peinture numérique depuis la feuille blanche jusqu'au épreuves finales.

    +

    Resulta perfecto para debuxar e pintar, e presenta unha solución completa que permite aos mestres crear ficheiros de debuxo dixital desde cero.

    Illo es perfecte pro schizzar e pinger, e presenta un solution ab fin al fin pro crear files de pictura digital ab grattamentos per maestros.

    Perfetto per fare schizzi e dipingere, prevede una soluzione completa che consente agli artisti di creare file di dipinti digitali partendo da zero.

    Het is perfect voor schetsen en schilderen en zet een end–to–end oplossing voor het maken van digitale bestanden voor schilderingen vanuit het niets door meesters.

    @@ -70,11 +76,13 @@

    Krita je odličan izbor za kreiranje konceptualne umjetnosti, stripove, teksture za obradu i mat slike. Krita podržava mnoge prostore boja kao RGB i CMIK na 8 i 16 bitnim cjelobrojnim kanalimaa, kao i 16 i 32 bita floating point kanalima.

    El Krita és una gran elecció per crear art conceptual, còmics, textures per renderitzar i pintures «matte». El Krita permet molts espais de color com el RGB i el CMYK a 8 i 16 bits de canals sencers, així com 16 i 32 bits de canals de coma flotant.

    +

    El Krita és una gran elecció per crear art conceptual, còmics, textures per renderitzar i pintures «matte». El Krita permet molts espais de color com el RGB i el CMYK a 8 i 16 bits de canals sencers, així com 16 i 32 bits de canals de coma flotant.

    Krita is a great choice for creating concept art, comics, textures for rendering and matte paintings. Krita supports many colourspaces like RGB and CMYK at 8 and 16 bits integer channels, as well as 16 and 32 bits floating point channels.

    Krita es una gran elección para crear arte conceptual, cómics, texturas para renderizar y pinturas mate. Krita soporta muchos espacios de colores como por ejemplo RGB y CMYK tanto en canales de enteros de 8 y 16 bits así como en canales de coma flotante de 16 y 32 bits.

    Krita on üks paremaid valikuid kontseptuaalkunsti, koomiksite, tekstuuride ja digitaalmaalide loomiseks. Krita toetab paljusid värviruume, näiteks RGB ja CMYK 8 ja 16 täisarvulise bitiga kanali kohta, samuti 16 ja 32 ujukomabitiga kanali kohta.

    Krita on hyvä valinta konseptikuvituksen, sarjakuvien, pintakuvioiden ja maalausten luomiseen. Krita tukee useita väriavaruuksia kuten RGB:tä ja CMYK:ta 8 ja 16 bitin kokonaisluku- samoin kuin 16 ja 32 bitin liukulukukanavin.

    Krita est un très bon choix pour créer des concepts arts, des bandes-dessinées, des textures de rendu et des peintures. Krita prend en charge plusieurs espaces de couleurs comme RVB et CMJN avec les canaux de 8 et 16 bits entiers ainsi que les canaux de 16 et 32 bits flottants.

    +

    Krita é unha gran opción para crear arte conceptual, texturas para renderización e pinturas mate. Krita permite usar moitos espazos de cores como RGB e CMYK con canles de 8 e 16 bits, así como canles de coma flotante de 16 e 32 bits.

    Krita es un grande selection pro crear arte de concepto, comics, texturas pro rendering e picturas opac. Krita supporta multe spatios de colores como RGB e CMYK con canales de integer a 8 e 16 bits, como anque canales floating point a 16 e 32 bits.

    Krita rappresenta una scelta ottimale per la creazione di arte concettuale, fumetti e texture per il rendering e il matte painting. Krita supporta molti spazi colori come RGB e CMYK a 8 e 16 bit per canali interi e 16 e 32 bit per canali a virgola mobile.

    コンセプトアート、コミック、3DCG 用テクスチャ、マットペイントを制作する方にとって、Krita は最適な選択です。Krita は、8/16 ビット整数/チャンネル、および 16/32 ビット浮動小数点/チャンネルの RGB や CMYK をはじめ、さまざまな色空間をサポートしています。

    @@ -90,11 +98,13 @@

    Have fun painting with the advanced brush engines, amazing filters and many handy features that make Krita enormously productive.

    Zabavite se kreirajući napredne pogone četki, filtere i mnoge praktične osobine koje čine Krita vrlo produktivnim.

    Gaudiu pintant amb els motors de pinzells avançats, els filtres impressionants i moltes funcionalitats útils que fan el Krita molt productiu.

    +

    Gaudiu pintant amb els motors de pinzells avançats, els filtres impressionants i moltes funcionalitats útils que fan el Krita molt productiu.

    Have fun painting with the advanced brush engines, amazing filters and many handy features that make Krita enormously productive.

    Diviértase pintando con los avanzados motores de pinceles, los espectaculares filtros y muchas funcionalidades prácticas que hacen que Krita sea enormemente productivo.

    Joonistamise muudavad tunduvalt lõbusamaks võimsad pintslimootorid, imetabased filtrid ja veel paljud käepärased võimalused, mis muudavad Krita kasutaja tohutult tootlikuks.

    Pidä hauskaa maalatessasi edistyneillä sivellinmoottoreilla, hämmästyttävillä suotimilla ja monilla muilla kätevillä ominaisuuksilla, jotka tekevät Kritasta tavattoman tehokkaan.

    Amusez-vous à peindre avec les outils de brosse avancés, les filtres incroyables et les nombreuses fonctionnalités pratiques qui rendent Krita extrêmement productif.

    +

    Goza debuxando con motores de pincel avanzados, filtros fantásticos e moitas outras funcionalidades útiles que fan de Krita un programa extremadamente produtivo.

    Amusa te a pinger con le motores de pincel avantiate, filtros stupende e multe characteristicas amical que face Krita enormemente productive.

    Divertiti a dipingere con gli avanzati sistemi di pennelli, i sorprendenti filtri e molte altre utili caratteristiche che fanno di Krita un software enormemente produttivo.

    Krita のソフトウェアとしての生産性を高めている先進的なブラシエンジンや素晴らしいフィルタのほか、便利な機能の数々をお楽しみください。

    diff -Nru calligra-2.9.7/krita/krita.desktop calligra-2.9.11/krita/krita.desktop --- calligra-2.9.7/krita/krita.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/krita.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -130,7 +130,7 @@ Comment[uk]=Цифрове малювання Comment[x-test]=xxDigital Paintingxx Type=Application -Icon=calligrakrita +Icon=calligrakrita2 Categories=Qt;KDE;Graphics; X-KDE-ServiceTypes=Calligra/Application X-Calligra-DefaultMimeTypes=application/x-krita diff -Nru calligra-2.9.7/krita/krita.rc calligra-2.9.11/krita/krita.rc --- calligra-2.9.7/krita/krita.rc 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/krita.rc 2016-02-02 19:53:14.000000000 +0000 @@ -2,7 +2,7 @@ diff -Nru calligra-2.9.7/krita/libcolor/CMakeLists.txt calligra-2.9.11/krita/libcolor/CMakeLists.txt --- calligra-2.9.7/krita/libcolor/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/libcolor/CMakeLists.txt 2016-02-02 19:53:14.000000000 +0000 @@ -3,7 +3,11 @@ set(kritacolor_LIB_SRCS kis_color_manager_linux.cpp) set(kritacolor_EXTRA_LIBRARIES kritacolord) else () - set(kritacolor_LIB_SRCS kis_color_manager_dummy.cpp) + if (WINDOWS) + set(kritacolor_LIB_SRCS kis_color_manager_windows.cpp) + else() + set(kritacolor_LIB_SRCS kis_color_manager_dummy.cpp) + endif() endif () kde4_add_library(kritacolor SHARED ${kritacolor_LIB_SRCS} ) diff -Nru calligra-2.9.7/krita/libcolor/kis_color_manager_dummy.cpp calligra-2.9.11/krita/libcolor/kis_color_manager_dummy.cpp --- calligra-2.9.7/krita/libcolor/kis_color_manager_dummy.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/libcolor/kis_color_manager_dummy.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -20,7 +20,7 @@ #include -class Q_DECL_HIDDEN KisColorManager::Private { +class KisColorManager::Private { public: // we are too dumb for that :) }; diff -Nru calligra-2.9.7/krita/libcolor/kis_color_manager_linux.cpp calligra-2.9.11/krita/libcolor/kis_color_manager_linux.cpp --- calligra-2.9.7/krita/libcolor/kis_color_manager_linux.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/libcolor/kis_color_manager_linux.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -23,7 +23,7 @@ #include -class Q_DECL_HIDDEN KisColorManager::Private { +class KisColorManager::Private { public: Private(QObject *parent) : colord(new KisColord(parent)) diff -Nru calligra-2.9.7/krita/libcolor/kis_color_manager_windows.cpp calligra-2.9.11/krita/libcolor/kis_color_manager_windows.cpp --- calligra-2.9.7/krita/libcolor/kis_color_manager_windows.cpp 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/krita/libcolor/kis_color_manager_windows.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -0,0 +1,203 @@ +/* + * Copyright (c) 2015 Boudewijn Rempt + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "kis_color_manager.h" + +#include +#include + +#include +#include +#include + +#include "lcms2.h" + +#include +#include + +class KisColorManager::Private { +public: + // we are too dumb for that :) + + + bool GetMonitorProfile(char *path, int buf_len, const void *hwnd) + { + std::list profile_descriptions; + std::map profile_paths; + + // path to the monitor's profile + char monitor_profile_path[512] = { '\0' }; + DWORD path_size = 512; + BOOL get_icm_result = GetICMProfile(GetDC((HWND)hwnd), &path_size, monitor_profile_path); + Q_ASSERT(get_icm_result); + + // directory where Windows stores its profiles + char profile_directory[512] = { '\0' }; + DWORD dir_name_size = 512; + BOOL get_color_dir_result = GetColorDirectory(NULL, profile_directory, &dir_name_size); + Q_ASSERT(get_color_dir_result); + + // Get the profile file names from Windows + ENUMTYPE enum_type; + enum_type.dwSize = sizeof(ENUMTYPE); + enum_type.dwVersion = ENUM_TYPE_VERSION; + enum_type.dwFields = ET_DEVICECLASS; // alternately could use ET_CLASS + enum_type.dwDeviceClass = CLASS_MONITOR; + + BYTE *buf = NULL; + DWORD buf_size = 0; + DWORD num_profiles = 0; + + BOOL other_enum_result = EnumColorProfiles(NULL, &enum_type, + buf, &buf_size, &num_profiles); + + if (buf_size > 0 && num_profiles > 0) + { + buf = (BYTE *)malloc(buf_size); + + other_enum_result = EnumColorProfiles(NULL, &enum_type, + buf, &buf_size, &num_profiles); + + if (other_enum_result) + { + // build a list of the profile descriptions + // and a map to return the paths + char *prof_name = (char *)buf; + + for(int i=0; i < num_profiles; i++) + { + std::string prof = prof_name; + std::string prof_path = std::string(profile_directory) + "\\" + prof_name; + + cmsHPROFILE hProfile = cmsOpenProfileFromFile(prof_path.c_str(), "r"); + + // Note: Windows will give us profiles that aren't ICC (.cdmp for example). + // Don't worry, LittleCMS will just return NULL for those. + if (hProfile) + { + char profile_description[256]; + + cmsUInt32Number got_desc = cmsGetProfileInfoASCII(hProfile, + cmsInfoDescription, + "en", "US", + profile_description, + 256); + + if (got_desc) + { + profile_descriptions.push_back(profile_description); + + profile_paths[ profile_description ] = prof_path; + } + + cmsCloseProfile(hProfile); + } + + prof_name += strlen(prof_name) + 1; + } + } + + free(buf); + } + + + if (profile_descriptions.size() > 0) + { + // set a vector and selected index for building the profile menu + profile_descriptions.sort(); + profile_descriptions.unique(); + + std::vector profile_vec; + int selected = 0; + + for(std::list::const_iterator i = profile_descriptions.begin(); i != profile_descriptions.end(); i++) + { + profile_vec.push_back( *i ); + + if ( profile_paths[ *i ] == monitor_profile_path) + { + selected = profile_vec.size() - 1; + } + } + + // run the dialog + g_profile_vec = &profile_vec; + g_selected_item = selected; + + int status = DialogBox(hDllInstance, (LPSTR)"PROFILEDIALOG", + (HWND)hwnd, (DLGPROC)DialogProc); + + + if (status == -1) + { + // dialog didn't open, my bad + return true; + } + else if (g_item_clicked == DLOG_Cancel) + { + return false; + } + else + { + strncpy(path, profile_paths[ profile_vec[ g_selected_item ] ].c_str(), buf_len); + + return true; + } + } + else + return true; + } + +}; + + + + +KisColorManager::KisColorManager() + : QObject() + , d(new Private()) +{ +} + +KisColorManager::~KisColorManager() +{ +} + +QString KisColorManager::deviceName(const QString &id) +{ + return QString(); +} + +QStringList KisColorManager::devices(DeviceType type) const +{ + QDesktopWidget *desktop = qApp->desktop(); + +} + +QByteArray KisColorManager::displayProfile(const QString &device, int profile) const +{ + return QByteArray(); +} + +KisColorManager *KisColorManager::instance() +{ + K_GLOBAL_STATIC(KisColorManager, s_instance); + return s_instance; +} + +#include "kis_color_manager.moc" diff -Nru calligra-2.9.7/krita/main.cc calligra-2.9.11/krita/main.cc --- calligra-2.9.7/krita/main.cc 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/main.cc 2016-02-02 19:53:14.000000000 +0000 @@ -37,6 +37,7 @@ #include "data/splash/splash_screen.xpm" #include "data/splash/splash_holidays.xpm" +#include "data/splash/splash_summer_holidays.xpm" #include "ui/kis_aboutdata.h" #include "ui/kis_factory2.h" #include "ui/KisDocument.h" @@ -172,7 +173,18 @@ splash = new KisSplashScreen(aboutData->version(), QPixmap(splash_holidays_xpm)); } else { - splash = new KisSplashScreen(aboutData->version(), QPixmap(splash_screen_xpm)); +#if QT_VERSION >= 0x040700 + qsrand(QDateTime::currentMSecsSinceEpoch()); + int i = qrand() % 3; + if (i < 1) { + splash = new KisSplashScreen(aboutData->version(), QPixmap(splash_summer_holidays_xpm)); + } + else { +#endif + splash = new KisSplashScreen(aboutData->version(), QPixmap(splash_screen_xpm)); +#if QT_VERSION >= 0x040700 + } +#endif } app.setSplashScreen(splash); Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi1024-app-calligrakrita2.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi1024-app-calligrakrita2.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi1024-app-calligrakrita.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi1024-app-calligrakrita.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi128-app-calligrakrita2.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi128-app-calligrakrita2.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi128-app-calligrakrita.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi128-app-calligrakrita.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi16-app-calligrakrita2.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi16-app-calligrakrita2.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi16-app-calligrakrita.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi16-app-calligrakrita.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi22-app-calligrakrita2.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi22-app-calligrakrita2.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi22-app-calligrakrita.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi22-app-calligrakrita.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi256-app-calligrakrita2.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi256-app-calligrakrita2.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi256-app-calligrakrita.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi256-app-calligrakrita.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi32-app-calligrakrita2.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi32-app-calligrakrita2.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi32-app-calligrakrita.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi32-app-calligrakrita.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi48-app-calligrakrita2.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi48-app-calligrakrita2.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi48-app-calligrakrita.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi48-app-calligrakrita.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi512-app-calligrakrita2.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi512-app-calligrakrita2.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi512-app-calligrakrita.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi512-app-calligrakrita.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi64-app-calligrakrita2.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi64-app-calligrakrita2.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hi64-app-calligrakrita.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hi64-app-calligrakrita.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hisc-app-calligrakrita2.svgz and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hisc-app-calligrakrita2.svgz differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/app/hisc-app-calligrakrita.svgz and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/app/hisc-app-calligrakrita.svgz differ diff -Nru calligra-2.9.7/krita/pics/Breeze-dark/dark_preferences-desktop-color.svg calligra-2.9.11/krita/pics/Breeze-dark/dark_preferences-desktop-color.svg --- calligra-2.9.7/krita/pics/Breeze-dark/dark_preferences-desktop-color.svg 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/pics/Breeze-dark/dark_preferences-desktop-color.svg 2016-02-02 19:53:14.000000000 +0000 @@ -12,12 +12,13 @@ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="32" height="32" - id="svg5453" + viewBox="0 0 32 32.000001" + id="svg4165" version="1.1" - inkscape:version="0.91+devel r" - sodipodi:docname="preferences-desktop-color.svg"> + inkscape:version="0.91 r13725" + sodipodi:docname="dark_preferences-desktop-color.svg"> + id="defs4167"> + gradientTransform="translate(-384.57128,504.56477)" /> @@ -42,359 +43,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + gradientTransform="translate(-392.57143,512.56422)" /> @@ -417,142 +65,25 @@ - - - - - - - - - - - - + x1="409.57144" + y1="543.79797" + x2="409.57144" + y2="503.798" + gradientTransform="matrix(0.20000006,0,0,0.20000014,-65.71433,-1141.1219)" /> + id="linearGradient4271"> + id="stop4273" /> + id="stop4275" /> - - - - - - - - - - - - - - - - - + showgrid="false" + units="px" + inkscape:window-width="1878" + inkscape:window-height="1051" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + id="metadata4170"> image/svg+xml - + - - - - - - - - - - - - - - - - + transform="translate(0,-1020.3622)"> + - - - - - - - + style="opacity:1;fill:url(#linearGradient4149);fill-opacity:1;stroke:none" + d="m 16,1022.3622 c -7.7559963,0 -14,6.244 -14,14 0,7.756 6.2440037,14 14,14 7.755996,0 14,-6.244 14,-14 0,-7.756 -6.244004,-14 -14,-14 z m -0.302734,3.5039 a 10.5,10.5 0 0 1 1.78125,0.1016 10.5,10.5 0 0 1 8.917968,11.8652 l -0.0039,0.031 a 10.5,10.5 0 0 1 -11.886725,8.8906 10.5,10.5 0 0 1 -8.9003902,-11.8789 10.5,10.5 0 0 1 10.0917972,-9.0098 z" + id="rect4130" /> diff -Nru calligra-2.9.7/krita/pics/Breeze-light/light_preferences-desktop-color.svg calligra-2.9.11/krita/pics/Breeze-light/light_preferences-desktop-color.svg --- calligra-2.9.7/krita/pics/Breeze-light/light_preferences-desktop-color.svg 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/pics/Breeze-light/light_preferences-desktop-color.svg 2016-02-02 19:53:14.000000000 +0000 @@ -12,12 +12,13 @@ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="32" height="32" - id="svg5453" + viewBox="0 0 32 32.000001" + id="svg4165" version="1.1" - inkscape:version="0.91+devel r" - sodipodi:docname="preferences-desktop-color.svg"> + inkscape:version="0.91 r13725" + sodipodi:docname="dark_preferences-desktop-color.svg"> + id="defs4167"> + gradientTransform="translate(-384.57128,504.56477)" /> @@ -42,359 +43,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + gradientTransform="translate(-392.57143,512.56422)" /> @@ -417,142 +65,25 @@ - - - - - - - - - - - - + x1="409.57144" + y1="543.79797" + x2="409.57144" + y2="503.798" + gradientTransform="matrix(0.20000006,0,0,0.20000014,-65.71433,-1141.1219)" /> + id="linearGradient4271"> + id="stop4273" /> + id="stop4275" /> - - - - - - - - - - - - - - - - - + showgrid="false" + units="px" + inkscape:window-width="1878" + inkscape:window-height="1051" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + id="metadata4170"> image/svg+xml - + - - - - - - - - - - - - - - - - + transform="translate(0,-1020.3622)"> + - - - - - - - + style="opacity:1;fill:url(#linearGradient4149);fill-opacity:1;stroke:none" + d="m 16,1022.3622 c -7.7559963,0 -14,6.244 -14,14 0,7.756 6.2440037,14 14,14 7.755996,0 14,-6.244 14,-14 0,-7.756 -6.244004,-14 -14,-14 z m -0.302734,3.5039 a 10.5,10.5 0 0 1 1.78125,0.1016 10.5,10.5 0 0 1 8.917968,11.8652 l -0.0039,0.031 a 10.5,10.5 0 0 1 -11.886725,8.8906 10.5,10.5 0 0 1 -8.9003902,-11.8789 10.5,10.5 0 0 1 10.0917972,-9.0098 z" + id="rect4130" /> diff -Nru calligra-2.9.7/krita/pics/CMakeLists.txt calligra-2.9.11/krita/pics/CMakeLists.txt --- calligra-2.9.7/krita/pics/CMakeLists.txt 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/pics/CMakeLists.txt 2016-02-02 19:53:14.000000000 +0000 @@ -31,8 +31,6 @@ tool_screenshot.png transparency-locked.png transparency-unlocked.png -passthrough-enabled.png -passthrough-disabled.png layer-style-enabled.png layer-style-disabled.png unlinked.png @@ -57,6 +55,8 @@ dark_transparency-disabled.png dark_novisible.svg dark_visible.svg +dark_passthrough-enabled.png +dark_passthrough-disabled.png light_transparency-enabled.png light_transparency-disabled.png @@ -68,6 +68,8 @@ light_trim-to-image.png light_novisible.svg light_visible.svg +light_passthrough-enabled.png +light_passthrough-disabled.png layerbox/dark_addlayer.png layerbox/dark_addtofolder.png Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/dark_passthrough-disabled.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/dark_passthrough-disabled.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/dark_passthrough-enabled.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/dark_passthrough-enabled.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/light_passthrough-disabled.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/light_passthrough-disabled.png differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/light_passthrough-enabled.png and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/light_passthrough-enabled.png differ diff -Nru calligra-2.9.7/krita/pics/misc-dark/dark_paintop_settings_01.svg calligra-2.9.11/krita/pics/misc-dark/dark_paintop_settings_01.svg --- calligra-2.9.7/krita/pics/misc-dark/dark_paintop_settings_01.svg 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/pics/misc-dark/dark_paintop_settings_01.svg 2016-02-02 19:53:14.000000000 +0000 @@ -15,77 +15,12 @@ id="svg2" version="1.1" inkscape:version="0.91 r13725" - sodipodi:docname="light_paintop_settings_01.svg" + sodipodi:docname="dark_paintop_settings_01.svg" inkscape:export-filename="C:\dribbble\krita icons\Collaborate\1_flat\other\paintop_settings_01.png" inkscape:export-xdpi="45" inkscape:export-ydpi="45"> - - - - - - - - - - - - - - - + id="defs4" /> @@ -142,200 +77,8 @@ - - - - - - - - - - - - - - - - - - - + id="defs4" /> @@ -151,100 +78,8 @@ - - - - - - - - - - - - - - - - - - + id="defs4" /> @@ -142,200 +77,8 @@ - - - - - - - - - - - - - - - - - - - + id="defs4" /> @@ -151,105 +78,8 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff -Nru calligra-2.9.7/krita/pics/svg/dark_passthrough-enabled.svg calligra-2.9.11/krita/pics/svg/dark_passthrough-enabled.svg --- calligra-2.9.7/krita/pics/svg/dark_passthrough-enabled.svg 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/krita/pics/svg/dark_passthrough-enabled.svg 2016-02-02 19:53:14.000000000 +0000 @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/svg/light_passthrough-disabled.svgz and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/svg/light_passthrough-disabled.svgz differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/svg/light_passthrough-enabled.svgz and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/svg/light_passthrough-enabled.svgz differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/svg/passthrough-disabled.svgz and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/svg/passthrough-disabled.svgz differ Binary files /tmp/tmpaK_Yxc/nIEsk_pSNM/calligra-2.9.7/krita/pics/svg/passthrough-enabled.svgz and /tmp/tmpaK_Yxc/Bj3iQ2e3RU/calligra-2.9.11/krita/pics/svg/passthrough-enabled.svgz differ diff -Nru calligra-2.9.7/krita/plugins/extensions/clonesarray/kritaclonesarray.desktop calligra-2.9.11/krita/plugins/extensions/clonesarray/kritaclonesarray.desktop --- calligra-2.9.7/krita/plugins/extensions/clonesarray/kritaclonesarray.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/clonesarray/kritaclonesarray.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -10,6 +10,7 @@ Name[es]=Complemento de array de clones Name[et]=Masskloonimise plugin Name[fr]=Module externe de tableau de clones +Name[gl]=Complemento de clonar vectores Name[hu]=Klóntömbök bővítmény Name[it]=Estensione Elenco di cloni Name[ja]=クローン配列プラグイン @@ -21,6 +22,7 @@ Name[pt_BR]=Plugin de lista de clones Name[sk]=Plugin poľa klonov Name[sv]=Insticksprogram för klonfält +Name[tr]=Klonlar Dizisi Eklentisi Name[uk]=Додаток масивів клонів Name[x-test]=xxClones Array Pluginxx X-KDE-ServiceTypes=Krita/ViewPlugin diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/advancedcolorselector/kis_color_selector_triangle.cpp calligra-2.9.11/krita/plugins/extensions/dockers/advancedcolorselector/kis_color_selector_triangle.cpp --- calligra-2.9.7/krita/plugins/extensions/dockers/advancedcolorselector/kis_color_selector_triangle.cpp 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/advancedcolorselector/kis_color_selector_triangle.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -70,6 +70,10 @@ QPoint pixelCacheOffset; + if (m_cachedSize != QSize(width, height) && m_realPixelCache) { + m_realPixelCache = 0; + } + Acs::PixelCacheRenderer::render(this, m_parent->converter(), QRect(0, 0, width, height), diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/advancedcolorselector/kis_color_selector_triangle.h calligra-2.9.11/krita/plugins/extensions/dockers/advancedcolorselector/kis_color_selector_triangle.h --- calligra-2.9.7/krita/plugins/extensions/dockers/advancedcolorselector/kis_color_selector_triangle.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/advancedcolorselector/kis_color_selector_triangle.h 2016-02-02 19:53:14.000000000 +0000 @@ -20,7 +20,7 @@ #include "kis_color_selector_component.h" #include "kis_paint_device.h" - +#include #include namespace Acs { @@ -53,7 +53,7 @@ private: QImage m_renderedPixelCache; KisPaintDeviceSP m_realPixelCache; - + QSize m_cachedSize; QPointF m_lastClickPos; }; diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/channeldocker/krita_channeldocker.desktop calligra-2.9.11/krita/plugins/extensions/dockers/channeldocker/krita_channeldocker.desktop --- calligra-2.9.7/krita/plugins/extensions/dockers/channeldocker/krita_channeldocker.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/channeldocker/krita_channeldocker.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=Kanálový docker Name[sl]=Sidrišče za kanale Name[sv]=Kanaldockningsfönster +Name[tr]=Kanal Araç Panosu Name[uk]=Панель швартування каналів Name[x-test]=xxChannel Dockerxx Name[zh_TW]=頻道嵌入器 diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/colorslider/krita_colorslider.desktop calligra-2.9.11/krita/plugins/extensions/dockers/colorslider/krita_colorslider.desktop --- calligra-2.9.7/krita/plugins/extensions/dockers/colorslider/krita_colorslider.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/colorslider/krita_colorslider.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -2,11 +2,13 @@ Name=ColorSlider Name[bs]=ColorSlider Name[ca]=ControlLliscantColor +Name[ca@valencia]=ControlLliscantColor Name[da]=ColorSlider Name[de]=Farbschieber Name[en_GB]=ColourSlider Name[es]=Selector de color Name[et]=Värviliugur +Name[gl]=Selector de cores Name[it]=Cursore del colore Name[ja]=カラースライダー Name[nb]=ColorSlider @@ -16,6 +18,7 @@ Name[pt_BR]=Seletor de Cores Name[sk]=Posuvník farieb Name[sv]=Färgskjutreglage +Name[tr]=RenkKaydırıcı Name[uk]=ПовзунокКольору Name[x-test]=xxColorSliderxx X-KDE-ServiceTypes=Krita/Dock diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/compositiondocker/compositiondocker_dock.cpp calligra-2.9.11/krita/plugins/extensions/dockers/compositiondocker/compositiondocker_dock.cpp --- calligra-2.9.7/krita/plugins/extensions/dockers/compositiondocker/compositiondocker_dock.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/compositiondocker/compositiondocker_dock.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -67,7 +67,7 @@ setWidget(widget); connect( compositionView, SIGNAL(doubleClicked(QModelIndex)), - this, SLOT(activated ( const QModelIndex & ) ) ); + this, SLOT(activated ( const QModelIndex & ) ) ); compositionView->setContextMenuPolicy(Qt::CustomContextMenu); connect( compositionView, SIGNAL(customContextMenuRequested(QPoint)), @@ -130,7 +130,7 @@ void CompositionDockerDock::deleteClicked() { QModelIndex index = compositionView->currentIndex(); - if(index.isValid()) { + if (m_canvas && m_canvas->viewManager() && m_canvas->viewManager()->image() && index.isValid()) { KisLayerComposition* composition = m_model->compositionFromIndex(index); m_canvas->viewManager()->image()->removeComposition(composition); updateModel(); @@ -140,6 +140,8 @@ void CompositionDockerDock::saveClicked() { KisImageWSP image = m_canvas->viewManager()->image(); + if (!image) return; + // format as 001, 002 ... QString name = saveNameEdit->text(); if (name.isEmpty()) { @@ -168,83 +170,87 @@ void CompositionDockerDock::updateModel() { - m_model->setCompositions(m_canvas->viewManager()->image()->compositions()); + if (m_canvas && m_canvas->viewManager() && m_canvas->viewManager()->image()) { + m_model->setCompositions(m_canvas->viewManager()->image()->compositions()); + } } void CompositionDockerDock::exportClicked() { - QString path; + if (m_canvas && m_canvas->viewManager() && m_canvas->viewManager()->image()) { - KoFileDialog dialog(0, KoFileDialog::OpenDirectory, "krita/compositiondockerdock"); - dialog.setCaption(i18n("Select a Directory")); - dialog.setDefaultDir(QDesktopServices::storageLocation(QDesktopServices::HomeLocation)); - path = dialog.url(); + QString path; + KoFileDialog dialog(0, KoFileDialog::OpenDirectory, "krita/compositiondockerdock"); + dialog.setCaption(i18n("Select a Directory")); + dialog.setDefaultDir(QDesktopServices::storageLocation(QDesktopServices::HomeLocation)); + path = dialog.url(); - if (path.isNull()) return; - if (!path.endsWith('/')) { - path.append('/'); - } + if (path.isNull()) return; - KisImageWSP image = m_canvas->viewManager()->image(); - QString filename = m_canvas->viewManager()->document()->localFilePath(); - if (!filename.isEmpty()) { - QFileInfo info(filename); - path += info.baseName() + '_'; - } + if (!path.endsWith('/')) { + path.append('/'); + } - foreach(KisLayerComposition* composition, m_canvas->viewManager()->image()->compositions()) { - if (!composition->isExportEnabled()) { - continue; + KisImageWSP image = m_canvas->viewManager()->image(); + QString filename = m_canvas->viewManager()->document()->localFilePath(); + if (!filename.isEmpty()) { + QFileInfo info(filename); + path += info.baseName() + '_'; } - composition->apply(); - image->refreshGraph(); - image->lock(); + foreach(KisLayerComposition* composition, m_canvas->viewManager()->image()->compositions()) { + if (!composition->isExportEnabled()) { + continue; + } + + composition->apply(); + image->refreshGraph(); + image->lock(); #if 0 - image->rootLayer()->projection()->convertToQImage(0, 0, 0, image->width(), image->height()).save(path + composition->name() + ".png"); + image->rootLayer()->projection()->convertToQImage(0, 0, 0, image->width(), image->height()).save(path + composition->name() + ".png"); #else - QRect r = image->bounds(); + QRect r = image->bounds(); - KisDocument *d = KisPart::instance()->createDocument(); + KisDocument *d = KisPart::instance()->createDocument(); - d->prepareForImport(); + d->prepareForImport(); - KisImageWSP dst = new KisImage(d->createUndoStore(), r.width(), r.height(), image->colorSpace(), composition->name()); - dst->setResolution(image->xRes(), image->yRes()); - d->setCurrentImage(dst); - KisPaintLayer* paintLayer = new KisPaintLayer(dst, "projection", OPACITY_OPAQUE_U8); - KisPainter gc(paintLayer->paintDevice()); - gc.bitBlt(QPoint(0, 0), image->rootLayer()->projection(), r); - dst->addNode(paintLayer, dst->rootLayer(), KisLayerSP(0)); + KisImageWSP dst = new KisImage(d->createUndoStore(), r.width(), r.height(), image->colorSpace(), composition->name()); + dst->setResolution(image->xRes(), image->yRes()); + d->setCurrentImage(dst); + KisPaintLayer* paintLayer = new KisPaintLayer(dst, "projection", OPACITY_OPAQUE_U8); + KisPainter gc(paintLayer->paintDevice()); + gc.bitBlt(QPoint(0, 0), image->rootLayer()->projection(), r); + dst->addNode(paintLayer, dst->rootLayer(), KisLayerSP(0)); - dst->refreshGraph(); + dst->refreshGraph(); - d->setOutputMimeType("image/png"); - d->setSaveInBatchMode(true); + d->setOutputMimeType("image/png"); + d->setSaveInBatchMode(true); - d->exportDocument(KUrl(path + composition->name() + ".png")); + d->exportDocument(KUrl(path + composition->name() + ".png")); - delete d; + delete d; #endif - image->unlock(); + image->unlock(); + } } } - bool CompositionDockerDock::eventFilter(QObject* obj, QEvent* event) { - if (event->type() == QEvent::KeyPress ) { - QKeyEvent *keyEvent = static_cast(event); - if (keyEvent->key() == Qt::Key_Up || keyEvent->key() == Qt::Key_Down) { - // new index will be set after the method is called - QTimer::singleShot(0, this, SLOT(activateCurrentIndex())); - } - return false; - } else { - return QObject::eventFilter(obj, event); - } + if (event->type() == QEvent::KeyPress ) { + QKeyEvent *keyEvent = static_cast(event); + if (keyEvent->key() == Qt::Key_Up || keyEvent->key() == Qt::Key_Down) { + // new index will be set after the method is called + QTimer::singleShot(0, this, SLOT(activateCurrentIndex())); + } + return false; + } else { + return QObject::eventFilter(obj, event); + } } void CompositionDockerDock::activateCurrentIndex() @@ -266,7 +272,7 @@ void CompositionDockerDock::updateComposition() { QModelIndex index = compositionView->currentIndex(); - if (index.isValid()) { + if (m_canvas && m_canvas->viewManager() && m_canvas->viewManager()->image() && index.isValid()) { KisLayerComposition* composition = m_model->compositionFromIndex(index); composition->store(); m_canvas->image()->setModified(); @@ -277,7 +283,7 @@ { kDebug() << "rename"; QModelIndex index = compositionView->currentIndex(); - if (index.isValid()) { + if (m_canvas && m_canvas->viewManager() && m_canvas->viewManager()->image() && index.isValid()) { KisLayerComposition* composition = m_model->compositionFromIndex(index); bool ok; QString name = QInputDialog::getText(this, i18n("Rename Composition"), diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/compositiondocker/krita_compositiondocker.desktop calligra-2.9.11/krita/plugins/extensions/dockers/compositiondocker/krita_compositiondocker.desktop --- calligra-2.9.7/krita/plugins/extensions/dockers/compositiondocker/krita_compositiondocker.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/compositiondocker/krita_compositiondocker.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -24,6 +24,7 @@ Name[sk]=Kompozičný docker Name[sl]=Sidrišče za kompozicijo Name[sv]=Kompositionsdockningsfönster +Name[tr]=Bileşen Araç Panosu Name[uk]=Панель композиції Name[x-test]=xxComposition Dockerxx X-KDE-ServiceTypes=Krita/Dock diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/defaultdockers/kis_layer_box.cpp calligra-2.9.11/krita/plugins/extensions/dockers/defaultdockers/kis_layer_box.cpp --- calligra-2.9.7/krita/plugins/extensions/dockers/defaultdockers/kis_layer_box.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/defaultdockers/kis_layer_box.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -212,6 +212,24 @@ connect(action, SIGNAL(triggered()), this, SLOT(slotRightClicked())); m_actions.append(action); + action = new ButtonAction(m_wdgLayerBox->bnRaise, this); + action->setText(i18n("Move Layer or Mask Up")); + action->setActivationFlags(KisAction::ACTIVE_NODE); + action->setActivationConditions(KisAction::ACTIVE_NODE_EDITABLE); + action->setObjectName("move_layer_up"); + action->setShortcut(KShortcut(Qt::ControlModifier + Qt::Key_PageUp)); + connect(action, SIGNAL(triggered()), this, SLOT(slotLowerClicked())); + m_actions.append(action); + + action = new ButtonAction(m_wdgLayerBox->bnLower, this); + action->setText(i18n("Move Layer or Mask down")); + action->setActivationFlags(KisAction::ACTIVE_NODE); + action->setActivationConditions(KisAction::ACTIVE_NODE_EDITABLE); + action->setObjectName("move_layer_down"); + action->setShortcut(KShortcut(Qt::ControlModifier + Qt::Key_PageDown)); + connect(action, SIGNAL(triggered()), this, SLOT(slotRaiseClicked())); + m_actions.append(action); + m_propertiesAction = new ButtonAction(m_wdgLayerBox->bnProperties, themedIcon("properties"), i18n("&Properties..."),this); m_propertiesAction->setActivationFlags(KisAction::ACTIVE_NODE); m_propertiesAction->setActivationConditions(KisAction::ACTIVE_NODE_EDITABLE); @@ -220,8 +238,8 @@ m_actions.append(m_propertiesAction); // NOTE: this is _not_ a mistake. The layerbox shows the layers in the reverse order - connect(m_wdgLayerBox->bnRaise, SIGNAL(clicked()), SLOT(slotLowerClicked())); - connect(m_wdgLayerBox->bnLower, SIGNAL(clicked()), SLOT(slotRaiseClicked())); + connect(m_wdgLayerBox->bnRaise, SIGNAL(triggered()), SLOT(slotLowerClicked())); + connect(m_wdgLayerBox->bnLower, SIGNAL(triggered()), SLOT(slotRaiseClicked())); // END NOTE if (cfg.sliderLabels()) { diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/defaultdockers/kritadefaultdockers.desktop calligra-2.9.11/krita/plugins/extensions/dockers/defaultdockers/kritadefaultdockers.desktop --- calligra-2.9.7/krita/plugins/extensions/dockers/defaultdockers/kritadefaultdockers.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/defaultdockers/kritadefaultdockers.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -30,6 +30,7 @@ Name[sk]=Štandardné dockery Name[sl]=Privzeta sidrišča Name[sv]=Standarddockningsfönster +Name[tr]=Öntanımlı Araçlar Name[uk]=Типові панелі швартування Name[wa]=Prémetowès bårs di wårdaedje Name[x-test]=xxDefault Dockersxx diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/historydocker/kritahistorydocker.desktop calligra-2.9.11/krita/plugins/extensions/dockers/historydocker/kritahistorydocker.desktop --- calligra-2.9.7/krita/plugins/extensions/dockers/historydocker/kritahistorydocker.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/historydocker/kritahistorydocker.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -27,6 +27,7 @@ Name[ru]=Модуль панели истории для Krita Name[sk]=Plugin dockeru undo histórie Krita Name[sv]=Krita insticksprogram för ångringshistorik +Name[tr]=Krita Geçmişi Geri Al Araç eklentisi Name[uk]=Додаток панелі журналу скасування для Krita Name[x-test]=xxKrita Undo History Docker pluginxx Name[zh_TW]=Krita 復原動作歷史紀錄嵌入外掛程式 diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/imagedocker/kritaimagedocker.desktop calligra-2.9.11/krita/plugins/extensions/dockers/imagedocker/kritaimagedocker.desktop --- calligra-2.9.7/krita/plugins/extensions/dockers/imagedocker/kritaimagedocker.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/imagedocker/kritaimagedocker.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -28,6 +28,7 @@ Name[sk]=Panel obrázku Name[sl]=Sidrišče za slike Name[sv]=Bilddockningsfönster +Name[tr]=Resim Araç Panosu Name[uk]=Панель швартування зображень Name[x-test]=xxImage Dockerxx Name[zh_TW]=影像嵌入器 diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/lut/krita_lutdocker.desktop calligra-2.9.11/krita/plugins/extensions/dockers/lut/krita_lutdocker.desktop --- calligra-2.9.7/krita/plugins/extensions/dockers/lut/krita_lutdocker.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/lut/krita_lutdocker.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -50,6 +50,7 @@ Comment[pt_BR]=Acoplador para seleção de LUT's Comment[sk]=Docker pre výber luts Comment[sv]=Dockningsfönster för valda uppslagningstabeller +Comment[tr]=LUT Araç panosu (arama tablosu) Comment[uk]=Бічна панель для вибору таблиць пошуку Comment[x-test]=xxDocker for selecting lutsxx X-KDE-ServiceTypes=Krita/Dock diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/overview/krita_overviewdocker.desktop calligra-2.9.11/krita/plugins/extensions/dockers/overview/krita_overviewdocker.desktop --- calligra-2.9.7/krita/plugins/extensions/dockers/overview/krita_overviewdocker.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/overview/krita_overviewdocker.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -12,6 +12,7 @@ Name[et]=Ülevaatedokk Name[fi]=Yleiskuvatelakka Name[fr]=Panneau de vue d'ensemble +Name[gl]=Doca de vista xeral Name[hu]=Áttekintő dokkoló Name[it]=Area di aggancio dell'anteprima Name[ja]=オーバービューのドッキングパネル @@ -24,6 +25,7 @@ Name[pt_BR]=Área de resumo Name[sk]=Panel prehľadu Name[sv]=Dockningsfönster med översikt +Name[tr]=Önizleme Araç Panosu Name[uk]=Панель ескіза Name[x-test]=xxOverview Dockerxx Comment=Docker for showing an image overview @@ -38,6 +40,7 @@ Comment[et]=Pildi ülevaadet näitav dokk Comment[fi]=Telakka kuvan yleiskuvan näyttämiseen Comment[fr]=Panneau pour afficher une vue d'ensemble d'une image +Comment[gl]=Doca para mostrar unha vista xeral da imaxe. Comment[it]=Area di aggancio per mostrare l'anteprima di un'immagine Comment[ja]=画像の概観図を表示するドッキングパネル Comment[kk]=Кескіннің жалпы шолуын көрсететін докері @@ -48,6 +51,7 @@ Comment[pt_BR]=Área de apresentação do resumo da imagem Comment[sk]=Panel na zobrazenie prehľadu obrázku Comment[sv]=Dockningsfönster för att visa en översiktsbild +Comment[tr]=Bir resim genel görünümü göstermek için araç panosu Comment[uk]=Панель для показу ескіза зображення Comment[x-test]=xxDocker for showing an image overviewxx X-KDE-ServiceTypes=Krita/Dock diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/palettedocker/krita_palettedocker.desktop calligra-2.9.11/krita/plugins/extensions/dockers/palettedocker/krita_palettedocker.desktop --- calligra-2.9.7/krita/plugins/extensions/dockers/palettedocker/krita_palettedocker.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/palettedocker/krita_palettedocker.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -12,6 +12,7 @@ Name[et]=Paletidokk Name[fi]=Palettitelakka Name[fr]=Panneau de palette +Name[gl]=Doca de paleta Name[hu]=Paletta dokkoló Name[it]=Area di aggancio della tavolozza Name[ja]=パレットのドッキングパネル @@ -24,6 +25,7 @@ Name[pt_BR]=Área da paleta Name[sk]=Paletový docker Name[sv]=Dockningsfönster för palett +Name[tr]=Palet Araç Panosu Name[uk]=Панель палітри Name[x-test]=xxPalette Dockerxx X-KDE-ServiceTypes=Krita/Dock diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/palettedocker/palettedocker_dock.cpp calligra-2.9.11/krita/plugins/extensions/dockers/palettedocker/palettedocker_dock.cpp --- calligra-2.9.7/krita/plugins/extensions/dockers/palettedocker/palettedocker_dock.cpp 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/palettedocker/palettedocker_dock.cpp 2016-02-02 19:53:14.000000000 +0000 @@ -118,6 +118,7 @@ , m_wdgPaletteDock(new Ui_WdgPaletteDock()) , m_currentColorSet(0) , m_resourceProvider(0) + , m_canvas(0) { QWidget* mainWidget = new QWidget(this); setWidget(mainWidget); @@ -204,6 +205,7 @@ KisCanvas2 *cv = dynamic_cast(canvas); m_model->setDisplayRenderer(cv->displayColorConverter()->displayRendererInterface()); } + m_canvas = static_cast(canvas); } @@ -211,6 +213,7 @@ { setEnabled(false); m_model->setDisplayRenderer(0); + m_canvas = 0; } void PaletteDockerDock::unsetResourceServer() @@ -258,23 +261,24 @@ void PaletteDockerDock::addColor() { -// if (m_currentColorSet && m_resourceProvider) { -// const KoColorDisplayRendererInterface *displayRenderer = -// m_canvas->displayColorConverter()->displayRendererInterface(); - -// KoColor currentFgColor = m_canvas->resourceManager()->foregroundColor(); -// QColor color; - -// int result = KColorDialog::getColor(color, displayRenderer->toQColor(currentFgColor)); - -// if (result == KColorDialog::Accepted) { -// KoColorSetEntry newEntry; -// newEntry.color = displayRenderer->approximateFromRenderedQColor(color); -// m_currentColorSet->add(newEntry); -// m_currentColorSet->save(); -// setColorSet(m_currentColorSet); // update model -// } -// } + if (m_currentColorSet && m_resourceProvider) { + + const KoColorDisplayRendererInterface *displayRenderer = + m_canvas->displayColorConverter()->displayRendererInterface(); + + KoColor currentFgColor = m_canvas->resourceManager()->foregroundColor(); + QColor color; + + int result = KColorDialog::getColor(color, displayRenderer->toQColor(currentFgColor)); + + if (result == KColorDialog::Accepted) { + KoColorSetEntry newEntry; + newEntry.color = displayRenderer->approximateFromRenderedQColor(color); + m_currentColorSet->add(newEntry); + m_currentColorSet->save(); + setColorSet(m_currentColorSet); // update model + } + } } void PaletteDockerDock::removeColor() diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/palettedocker/palettedocker_dock.h calligra-2.9.11/krita/plugins/extensions/dockers/palettedocker/palettedocker_dock.h --- calligra-2.9.7/krita/plugins/extensions/dockers/palettedocker/palettedocker_dock.h 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/palettedocker/palettedocker_dock.h 2016-02-02 19:53:14.000000000 +0000 @@ -31,11 +31,13 @@ class KisViewManager; class KisCanvasResourceProvider; +class KisCanvas2; class KisWorkspaceResource; class ColorSetChooser; class PaletteModel; class Ui_WdgPaletteDock; + class PaletteDockerDock : public QDockWidget, public KisMainwindowObserver, public KoResourceServerObserver { Q_OBJECT public: @@ -72,9 +74,10 @@ Ui_WdgPaletteDock* m_wdgPaletteDock; PaletteModel *m_model; QSharedPointer m_serverAdapter; - KoColorSet* m_currentColorSet; - ColorSetChooser* m_colorSetChooser; - KisCanvasResourceProvider* m_resourceProvider; + KoColorSet *m_currentColorSet; + ColorSetChooser *m_colorSetChooser; + KisCanvasResourceProvider *m_resourceProvider; + KisCanvas2 *m_canvas; }; diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/patterndocker/krita_patterndocker.desktop calligra-2.9.11/krita/plugins/extensions/dockers/patterndocker/krita_patterndocker.desktop --- calligra-2.9.7/krita/plugins/extensions/dockers/patterndocker/krita_patterndocker.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/patterndocker/krita_patterndocker.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -26,6 +26,7 @@ Name[sk]=Paletový docker Name[sl]=Sidrišče za vzorce Name[sv]=Dockningsfönster för mönster +Name[tr]=Desen Araçları Name[uk]=Панель візерунків Name[x-test]=xxPattern Dockerxx X-KDE-ServiceTypes=Krita/Dock diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/presetdocker/krita_presetdocker.desktop calligra-2.9.11/krita/plugins/extensions/dockers/presetdocker/krita_presetdocker.desktop --- calligra-2.9.7/krita/plugins/extensions/dockers/presetdocker/krita_presetdocker.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/presetdocker/krita_presetdocker.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -2,7 +2,7 @@ Name=Preset Docker Name[bs]=Podesiti Doker Name[ca]=Acoblador de valors predeterminats -Name[ca@valencia]=Acoblador d'ambients +Name[ca@valencia]=Acoblador de valors predeterminats Name[cs]=Dok předvoleb Name[da]=Forudindstilling-dokker Name[de]=Voreinstellungen-Docker @@ -30,13 +30,14 @@ Name[sk]=Panel nastavení Name[sl]=Prednastavljeno sidrišče Name[sv]=Förinställt dockningsfönster +Name[tr]=Önayar Araç Panosu Name[uk]=Панель вибору налаштувань Name[x-test]=xxPreset Dockerxx Name[zh_TW]=預設定嵌入器 Comment=Docker for selecting presets Comment[bs]=Doker za selektovanje podešavanja Comment[ca]=Acoblador per seleccionar valors predeterminats -Comment[ca@valencia]=Acoblador per seleccionar ambients +Comment[ca@valencia]=Acoblador per seleccionar valors predeterminats Comment[da]=Dokker til at vælge forudindstillinger Comment[de]=Docker für die Auswahl von Voreinstellungen Comment[el]=Εργαλείο προσάρτησης για επιλογή προρυθμίσεων @@ -58,6 +59,7 @@ Comment[ru]=Панель для выбора предустановок Comment[sk]=Docker pre výber predvolieb Comment[sv]=Dockningsfönster för valda förinställningar +Comment[tr]=Ön ayarlar seçilmesi için araç panosu Comment[uk]=Панель для вибору налаштувань документів Comment[x-test]=xxDocker for selecting presetsxx Comment[zh_TW]=選取預設定的嵌入器 diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/presethistory/krita_presethistory.desktop calligra-2.9.11/krita/plugins/extensions/dockers/presethistory/krita_presethistory.desktop --- calligra-2.9.7/krita/plugins/extensions/dockers/presethistory/krita_presethistory.desktop 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/presethistory/krita_presethistory.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -1,10 +1,12 @@ [Desktop Entry] Name=Preset History Docker Name[ca]=Acoblador d'historial de valors predeterminats +Name[ca@valencia]=Acoblador d'historial de valors predeterminats Name[en_GB]=Preset History Docker Name[es]=Panel del historial de preajustes Name[et]=Valmisseadistustega ajaloo dokk Name[fi]=Esiasetushistoriatelakka +Name[gl]=Doca do historial de predefinidos Name[it]=Area di aggancio cronologia delle preimpostazioni Name[nb]=Historie for forhåndsinnstillinger Name[nl]=Verankering voor voorinstelling van geschiedenis @@ -13,16 +15,19 @@ Name[pt_BR]=Área do histórico de predefinições Name[sk]=Panel histórie predvolieb Name[sv]=Förinställt dockningsfönster för historik +Name[tr]=Önayar Geçmişi Araç Panosu Name[uk]=Панель журналу наборів налаштувань Name[x-test]=xxPreset History Dockerxx Comment=Show the last used presets Comment[ca]=Mostra els valors predeterminats usats darrerament +Comment[ca@valencia]=Mostra els valors predeterminats usats darrerament Comment[cs]=Zobrazit naposledy použité p5edvolby Comment[de]=Zuletzt verwendete Voreinstellungen anzeigen Comment[en_GB]=Show the last used presets Comment[es]=Mostrar los últimos preajustes usados Comment[et]=Viimati kasutatud valmisseadistuste näitamine Comment[fi]=Näytä viimeksi käytetyt esiasetukset +Comment[gl]=Mostra os últimos predefinidos usados. Comment[it]=Mostra le ultime preimpostazioni utilizzate Comment[nb]=Vis sist brukte forhåndsinnstillinger Comment[nl]=De laatst gebruikte voorinstellingen tonen @@ -31,6 +36,7 @@ Comment[pt_BR]=Mostrar as últimas predefinições usadas Comment[sk]=Zobraziť posledne uložené predvoľby Comment[sv]=Visa senaste använda förinställningarna +Comment[tr]=Son kullanılan ön ayarı göster Comment[uk]=Показує останні використані набори налаштувань Comment[x-test]=xxShow the last used presetsxx X-KDE-ServiceTypes=Krita/Dock diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/smallcolorselector/kis_small_color_widget.cc calligra-2.9.11/krita/plugins/extensions/dockers/smallcolorselector/kis_small_color_widget.cc --- calligra-2.9.7/krita/plugins/extensions/dockers/smallcolorselector/kis_small_color_widget.cc 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/smallcolorselector/kis_small_color_widget.cc 2016-02-02 19:53:14.000000000 +0000 @@ -153,7 +153,7 @@ p.setPen(QPen(Qt::white, 1.0)); p.setBrush(color()); p.translate(d->saturation * d->rectangleWidth / 255.0 + width() - d->rectangleWidth, - d->value * d->rectangleHeight / 255.0); + d->rectangleHeight-(d->value * d->rectangleHeight / 255.0)); p.drawEllipse(QRectF(-d->squareHandleSize * 0.5, -d->squareHandleSize * 0.5, d->squareHandleSize, d->squareHandleSize)); p.end(); } @@ -196,7 +196,7 @@ { QImage image(d->rectangleWidth, d->rectangleHeight, QImage::Format_RGB32); for (int y = 0; y < d->rectangleHeight; ++y) { - int v = (y * 255) / d->rectangleHeight; + int v = 255-((y * 255) / d->rectangleHeight); uint* data = reinterpret_cast(image.scanLine(y)); for (int x = 0; x < d->rectangleWidth; ++x, ++data) { int s = (x * 255) / d->rectangleWidth; @@ -251,7 +251,7 @@ d->updateTimer.start(); } else if ((_x > width() - d->rectangleWidth && d->handle == NoHandle) || d->handle == ValueSaturationHandle) { d->handle = ValueSaturationHandle; - setHSV(d->hue, (_x - width() + d->rectangleWidth) * 255 / d->rectangleWidth, (_y * 255) / d->rectangleHeight); + setHSV(d->hue, (_x - width() + d->rectangleWidth) * 255 / d->rectangleWidth, 255-((_y * 255) / d->rectangleHeight)); d->updateTimer.start(); } } diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/specificcolorselector/kis_specific_color_selector_widget.cc calligra-2.9.11/krita/plugins/extensions/dockers/specificcolorselector/kis_specific_color_selector_widget.cc --- calligra-2.9.7/krita/plugins/extensions/dockers/specificcolorselector/kis_specific_color_selector_widget.cc 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/specificcolorselector/kis_specific_color_selector_widget.cc 2016-02-02 19:53:14.000000000 +0000 @@ -96,8 +96,12 @@ void KisSpecificColorSelectorWidget::setColorSpace(const KoColorSpace* cs) { Q_ASSERT(cs); - dbgPlugins << cs->id() << " " << cs->profile()->name(); + + if (cs == m_colorSpace) { + return; + } + m_colorSpace = KoColorSpaceRegistry::instance()->colorSpace(cs->colorModelId().id(), cs->colorDepthId().id(), cs->profile()); Q_ASSERT(m_colorSpace); Q_ASSERT(*m_colorSpace == *cs); diff -Nru calligra-2.9.7/krita/plugins/extensions/dockers/tasksetdocker/krita_tasksetdocker.desktop calligra-2.9.11/krita/plugins/extensions/dockers/tasksetdocker/krita_tasksetdocker.desktop --- calligra-2.9.7/krita/plugins/extensions/dockers/tasksetdocker/krita_tasksetdocker.desktop 2015-08-29 14:38:25.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/dockers/tasksetdocker/krita_tasksetdocker.desktop 2016-02-02 19:53:14.000000000 +0000 @@ -2,7 +2,7 @@ Name=Taskset Docker Name[bs]=Doker za Skup zadataka Name[ca]=Acoblador de conjunts de tasques -Name[ca@valencia]=Acoblador Taskset +Name[ca@valencia]=Acoblador de conjunts de tasques Name[da]=Taskset-dokker Name[de]=Aufgabenstellung-Docker Name[el]=Εργαλείο προσάρτησης συνόλου εργασιών @@ -25,6 +25,7 @@ Name[ru]=Панель для задач Name[sk]=Docker sady úloh Name[sv]=Dockningsfönster för aktivitetsuppsättning +Name[tr]=Görev Ayar Araç Panosu Name[uk]=Панель набору завдань Name[x-test]=xxTaskset Dockerxx Name[zh_TW]=Taskset 嵌入器 diff -Nru calligra-2.9.7/krita/plugins/extensions/gmic/3rdparty/gmic/CImg.h calligra-2.9.11/krita/plugins/extensions/gmic/3rdparty/gmic/CImg.h --- calligra-2.9.7/krita/plugins/extensions/gmic/3rdparty/gmic/CImg.h 2015-08-29 14:39:29.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/gmic/3rdparty/gmic/CImg.h 2016-02-02 19:53:14.000000000 +0000 @@ -5,7 +5,7 @@ # # Description : The C++ Template Image Processing Toolkit. # This file is the main component of the CImg Library project. - # ( http://cimg.sourceforge.net ) + # ( http://cimg.eu ) # # Project manager : David Tschumperle. # ( http://tschumperle.users.greyc.fr/ ) @@ -54,7 +54,7 @@ // Set version number of the library. #ifndef cimg_version -#define cimg_version 161 +#define cimg_version 169 /*----------------------------------------------------------- # @@ -75,6 +75,7 @@ #include #include #include +#include #include #include #include @@ -123,15 +124,28 @@ #pragma warning(disable:4996) #define _CRT_SECURE_NO_DEPRECATE 1 #define _CRT_NONSTDC_NO_DEPRECATE 1 -#define cimg_snprintf cimg::c99_snprintf -#define cimg_vsnprintf cimg::c99_vsnprintf #endif -#ifndef cimg_snprintf +// Define correct string functions for each compiler and OS. +#if cimg_OS==2 && defined(_MSC_VER) +#define cimg_sscanf std::sscanf +#define cimg_sprintf std::sprintf +#define cimg_snprintf cimg::_snprintf +#define cimg_vsnprintf cimg::_vsnprintf +#else #include +#if defined(__MACOSX__) || defined(__APPLE__) +#define cimg_sscanf cimg::_sscanf +#define cimg_sprintf cimg::_sprintf +#define cimg_snprintf cimg::_snprintf +#define cimg_vsnprintf cimg::_vsnprintf +#else +#define cimg_sscanf std::sscanf +#define cimg_sprintf std::sprintf #define cimg_snprintf snprintf #define cimg_vsnprintf vsnprintf #endif +#endif // Include OS-specific headers. #if cimg_OS==1 @@ -139,10 +153,15 @@ #include #include #include +#include +#include #elif cimg_OS==2 #ifndef NOMINMAX #define NOMINMAX #endif +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif #include #ifndef _WIN32_IE #define _WIN32_IE 0x0400 @@ -152,15 +171,28 @@ #include #endif -// Look for C++11 features +// Look for C++11 features. #if !defined(cimg_use_cpp11) && __cplusplus>201100 -#define cimg_use_cpp11 +#define cimg_use_cpp11 1 #endif -#ifdef cimg_use_cpp11 +#if defined(cimg_use_cpp11) && cimg_use_cpp11!=0 #include #include #endif +// Configure the 'abort' signal handler (does nothing by default). +// A typical signal handler can be defined in your own source like this: +// Without OpenMP support: #define cimg_test_abort() if (is_abort) throw CImgAbortException("") +// +// or +// +// With OpenMP support: #define cimg_test_abort() if (!omp_get_thread_num() && is_abort) throw CImgAbortException("") +// +// where 'is_abort' is a boolean variable. +#ifndef cimg_test_abort +#define cimg_test_abort() +#endif + // Configure filename separator. // // Filename separator is set by default to '/', except for Windows where it is '\'. @@ -184,7 +216,11 @@ // // Define 'cimg_use_vt100' to allow output of color messages on VT100-compatible terminals. #ifndef cimg_verbosity +#if cimg_OS==2 #define cimg_verbosity 2 +#else +#define cimg_verbosity 1 +#endif #elif !(cimg_verbosity==0 || cimg_verbosity==1 || cimg_verbosity==2 || cimg_verbosity==3 || cimg_verbosity==4) #error CImg Library: Configuration variable 'cimg_verbosity' is badly defined. #error (should be { 0=quiet | 1=console | 2=dialog | 3=console+warnings | 4=dialog+warnings }). @@ -199,11 +235,7 @@ #if cimg_OS==0 #define cimg_display 0 #elif cimg_OS==1 -#if defined(__MACOSX__) || defined(__APPLE__) -#define cimg_display 1 -#else #define cimg_display 1 -#endif #elif cimg_OS==2 #define cimg_display 2 #endif @@ -217,7 +249,6 @@ #include #include #include -#include #include #ifdef cimg_use_xshm #include @@ -227,6 +258,7 @@ #ifdef cimg_use_xrandr #include #endif +#include #endif #ifndef cimg_appname #define cimg_appname "CImg" @@ -470,26 +502,6 @@ #define cimg_usage(usage) cimg_library_suffixed::cimg::option((char*)0,argc,argv,(char*)0,usage,false) #define cimg_help(str) cimg_library_suffixed::cimg::option((char*)0,argc,argv,str,(char*)0) #define cimg_option(name,defaut,usage) cimg_library_suffixed::cimg::option(name,argc,argv,defaut,usage) -#define cimg_argument(pos) \ - cimg_library_suffixed::cimg::argument(pos,argc,argv) -#define cimg_argument1(pos,s0) \ - cimg_library_suffixed::cimg::argument(pos,argc,argv,1,s0) -#define cimg_argument2(pos,s0,s1) \ - cimg_library_suffixed::cimg::argument(pos,argc,argv,2,s0,s1) -#define cimg_argument3(pos,s0,s1,s2) \ - cimg_library_suffixed::cimg::argument(pos,argc,argv,3,s0,s1,s2) -#define cimg_argument4(pos,s0,s1,s2,s3) \ - cimg_library_suffixed::cimg::argument(pos,argc,argv,4,s0,s1,s2,s3) -#define cimg_argument5(pos,s0,s1,s2,s3,s4) \ - cimg_library_suffixed::cimg::argument(pos,argc,argv,5,s0,s1,s2,s3,s4) -#define cimg_argument6(pos,s0,s1,s2,s3,s4,s5) \ - cimg_library_suffixed::cimg::argument(pos,argc,argv,6,s0,s1,s2,s3,s4,s5) -#define cimg_argument7(pos,s0,s1,s2,s3,s4,s5,s6) \ - cimg_library_suffixed::cimg::argument(pos,argc,argv,7,s0,s1,s2,s3,s4,s5,s6) -#define cimg_argument8(pos,s0,s1,s2,s3,s4,s5,s6,s7) \ - cimg_library_suffixed::cimg::argument(pos,argc,argv,8,s0,s1,s2,s3,s4,s5,s6,s7) -#define cimg_argument9(pos,s0,s1,s2,s3,s4,s5,s6,s7,s8) \ - cimg_library_suffixed::cimg::argument(pos,argc,argv,9,s0,s1,s2,s3,s4,s5,s6,s7,s8) // Macros to define and manipulate local neighborhoods. #define CImg_2x2(I,T) T I[4]; \ @@ -714,7 +726,7 @@ #define cimg_forYZC(img,y,z,c) cimg_forC(img,c) cimg_forYZ(img,y,z) #define cimg_forXYZC(img,x,y,z,c) cimg_forC(img,c) cimg_forXYZ(img,x,y,z) -#define cimg_rof1(bound,i) for (int i = (int)(bound)-1; i>=0; --i) +#define cimg_rof1(bound,i) for (int i = (int)(bound) - 1; i>=0; --i) #define cimg_rofX(img,x) cimg_rof1((img)._width,x) #define cimg_rofY(img,y) cimg_rof1((img)._height,y) #define cimg_rofZ(img,z) cimg_rof1((img)._depth,z) @@ -732,7 +744,7 @@ #define cimg_rofXYZC(img,x,y,z,c) cimg_rofC(img,c) cimg_rofXYZ(img,x,y,z) #define cimg_for_in1(bound,i0,i1,i) \ - for (int i = (int)(i0)<0?0:(int)(i0), _max##i = (int)(i1)<(int)(bound)?(int)(i1):(int)(bound)-1; i<=_max##i; ++i) + for (int i = (int)(i0)<0?0:(int)(i0), _max##i = (int)(i1)<(int)(bound)?(int)(i1):(int)(bound) - 1; i<=_max##i; ++i) #define cimg_for_inX(img,x0,x1,x) cimg_for_in1((img)._width,x0,x1,x) #define cimg_for_inY(img,y0,y1,y) cimg_for_in1((img)._height,y0,y1,y) #define cimg_for_inZ(img,z0,z1,z) cimg_for_in1((img)._depth,z0,z1,z) @@ -749,33 +761,33 @@ #define cimg_for_inYZC(img,y0,z0,c0,y1,z1,c1,y,z,c) cimg_for_inC(img,c0,c1,c) cimg_for_inYZ(img,y0,z0,y1,z1,y,z) #define cimg_for_inXYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \ cimg_for_inC(img,c0,c1,c) cimg_for_inXYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) -#define cimg_for_insideX(img,x,n) cimg_for_inX(img,n,(img)._width-1-(n),x) -#define cimg_for_insideY(img,y,n) cimg_for_inY(img,n,(img)._height-1-(n),y) -#define cimg_for_insideZ(img,z,n) cimg_for_inZ(img,n,(img)._depth-1-(n),z) -#define cimg_for_insideC(img,c,n) cimg_for_inC(img,n,(img)._spectrum-1-(n),c) -#define cimg_for_insideXY(img,x,y,n) cimg_for_inXY(img,n,n,(img)._width-1-(n),(img)._height-1-(n),x,y) +#define cimg_for_insideX(img,x,n) cimg_for_inX(img,n,(img)._width - 1 - (n),x) +#define cimg_for_insideY(img,y,n) cimg_for_inY(img,n,(img)._height - 1 - (n),y) +#define cimg_for_insideZ(img,z,n) cimg_for_inZ(img,n,(img)._depth - 1 - (n),z) +#define cimg_for_insideC(img,c,n) cimg_for_inC(img,n,(img)._spectrum - 1 - (n),c) +#define cimg_for_insideXY(img,x,y,n) cimg_for_inXY(img,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),x,y) #define cimg_for_insideXYZ(img,x,y,z,n) \ - cimg_for_inXYZ(img,n,n,n,(img)._width-1-(n),(img)._height-1-(n),(img)._depth-1-(n),x,y,z) + cimg_for_inXYZ(img,n,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),(img)._depth - 1 - (n),x,y,z) #define cimg_for_insideXYZC(img,x,y,z,c,n) \ - cimg_for_inXYZ(img,n,n,n,(img)._width-1-(n),(img)._height-1-(n),(img)._depth-1-(n),x,y,z) + cimg_for_inXYZ(img,n,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),(img)._depth - 1 - (n),x,y,z) #define cimg_for_out1(boundi,i0,i1,i) \ - for (int i = (int)(i0)>0?0:(int)(i1)+1; i<(int)(boundi); ++i, i = i==(int)(i0)?(int)(i1)+1:i) + for (int i = (int)(i0)>0?0:(int)(i1) + 1; i<(int)(boundi); ++i, i = i==(int)(i0)?(int)(i1) + 1:i) #define cimg_for_out2(boundi,boundj,i0,j0,i1,j1,i,j) \ for (int j = 0; j<(int)(boundj); ++j) \ - for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j?0:(int)(i0)>0?0:(int)(i1)+1; i<(int)(boundi); \ - ++i, i = _n1j?i:(i==(int)(i0)?(int)(i1)+1:i)) + for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j?0:(int)(i0)>0?0:(int)(i1) + 1; i<(int)(boundi); \ + ++i, i = _n1j?i:(i==(int)(i0)?(int)(i1) + 1:i)) #define cimg_for_out3(boundi,boundj,boundk,i0,j0,k0,i1,j1,k1,i,j,k) \ for (int k = 0; k<(int)(boundk); ++k) \ for (int _n1k = (int)(k<(int)(k0) || k>(int)(k1)), j = 0; j<(int)(boundj); ++j) \ - for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j || _n1k?0:(int)(i0)>0?0:(int)(i1)+1; i<(int)(boundi); \ - ++i, i = _n1j || _n1k?i:(i==(int)(i0)?(int)(i1)+1:i)) + for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j || _n1k?0:(int)(i0)>0?0:(int)(i1) + 1; i<(int)(boundi); \ + ++i, i = _n1j || _n1k?i:(i==(int)(i0)?(int)(i1) + 1:i)) #define cimg_for_out4(boundi,boundj,boundk,boundl,i0,j0,k0,l0,i1,j1,k1,l1,i,j,k,l) \ for (int l = 0; l<(int)(boundl); ++l) \ for (int _n1l = (int)(l<(int)(l0) || l>(int)(l1)), k = 0; k<(int)(boundk); ++k) \ for (int _n1k = (int)(k<(int)(k0) || k>(int)(k1)), j = 0; j<(int)(boundj); ++j) \ - for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j || _n1k || _n1l?0:(int)(i0)>0?0:(int)(i1)+1; \ - i<(int)(boundi); ++i, i = _n1j || _n1k || _n1l?i:(i==(int)(i0)?(int)(i1)+1:i)) + for (int _n1j = (int)(j<(int)(j0) || j>(int)(j1)), i = _n1j || _n1k || _n1l?0:(int)(i0)>0?0:(int)(i1) + 1; \ + i<(int)(boundi); ++i, i = _n1j || _n1k || _n1l?i:(i==(int)(i0)?(int)(i1) + 1:i)) #define cimg_for_outX(img,x0,x1,x) cimg_for_out1((img)._width,x0,x1,x) #define cimg_for_outY(img,y0,y1,y) cimg_for_out1((img)._height,y0,y1,y) #define cimg_for_outZ(img,z0,z1,z) cimg_for_out1((img)._depth,z0,z1,z) @@ -796,25 +808,26 @@ cimg_for_out3((img)._height,(img)._depth,(img)._spectrum,y0,z0,c0,y1,z1,c1,y,z,c) #define cimg_for_outXYZC(img,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) \ cimg_for_out4((img)._width,(img)._height,(img)._depth,(img)._spectrum,x0,y0,z0,c0,x1,y1,z1,c1,x,y,z,c) -#define cimg_for_borderX(img,x,n) cimg_for_outX(img,n,(img)._width-1-(n),x) -#define cimg_for_borderY(img,y,n) cimg_for_outY(img,n,(img)._height-1-(n),y) -#define cimg_for_borderZ(img,z,n) cimg_for_outZ(img,n,(img)._depth-1-(n),z) -#define cimg_for_borderC(img,c,n) cimg_for_outC(img,n,(img)._spectrum-1-(n),c) -#define cimg_for_borderXY(img,x,y,n) cimg_for_outXY(img,n,n,(img)._width-1-(n),(img)._height-1-(n),x,y) +#define cimg_for_borderX(img,x,n) cimg_for_outX(img,n,(img)._width - 1 - (n),x) +#define cimg_for_borderY(img,y,n) cimg_for_outY(img,n,(img)._height - 1 - (n),y) +#define cimg_for_borderZ(img,z,n) cimg_for_outZ(img,n,(img)._depth - 1 - (n),z) +#define cimg_for_borderC(img,c,n) cimg_for_outC(img,n,(img)._spectrum - 1 - (n),c) +#define cimg_for_borderXY(img,x,y,n) cimg_for_outXY(img,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),x,y) #define cimg_for_borderXYZ(img,x,y,z,n) \ - cimg_for_outXYZ(img,n,n,n,(img)._width-1-(n),(img)._height-1-(n),(img)._depth-1-(n),x,y,z) + cimg_for_outXYZ(img,n,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n),(img)._depth - 1 - (n),x,y,z) #define cimg_for_borderXYZC(img,x,y,z,c,n) \ - cimg_for_outXYZC(img,n,n,n,n,(img)._width-1-(n),(img)._height-1-(n),(img)._depth-1-(n),(img)._spectrum-1-(n),x,y,z,c) + cimg_for_outXYZC(img,n,n,n,n,(img)._width - 1 - (n),(img)._height - 1 - (n), \ + (img)._depth - 1 - (n),(img)._spectrum - 1 - (n),x,y,z,c) #define cimg_for_spiralXY(img,x,y) \ for (int x = 0, y = 0, _n1##x = 1, _n1##y = (img).width()*(img).height(); _n1##y; \ - --_n1##y, _n1##x+=(_n1##x>>2)-((!(_n1##x&3)?--y:((_n1##x&3)==1?(img)._width-1-++x:\ - ((_n1##x&3)==2?(img)._height-1-++y:--x))))?0:1) + --_n1##y, _n1##x+=(_n1##x>>2) - ((!(_n1##x&3)?--y:((_n1##x&3)==1?(img)._width - 1 - ++x:\ + ((_n1##x&3)==2?(img)._height - 1 - ++y:--x))))?0:1) #define cimg_for_lineXY(x,y,x0,y0,x1,y1) \ for (int x = (int)(x0), y = (int)(y0), _sx = 1, _sy = 1, _steep = 0, \ - _dx=(x1)>(x0)?(int)(x1)-(int)(x0):(_sx=-1,(int)(x0)-(int)(x1)), \ - _dy=(y1)>(y0)?(int)(y1)-(int)(y0):(_sy=-1,(int)(y0)-(int)(y1)), \ + _dx=(x1)>(x0)?(int)(x1) - (int)(x0):(_sx=-1,(int)(x0) - (int)(x1)), \ + _dy=(y1)>(y0)?(int)(y1) - (int)(y0):(_sy=-1,(int)(y0) - (int)(y1)), \ _counter = _dx, \ _err = _dx>_dy?(_dy>>1):((_steep=1),(_counter=_dy),(_dx>>1)); \ _counter>=0; \ @@ -823,7 +836,7 @@ (y+=(_err-=_dy)<0?_err+=_dx,_sy:0,_sx)) #define cimg_for2(bound,i) \ - for (int i = 0, _n1##i = 1>=(bound)?(int)(bound)-1:1; \ + for (int i = 0, _n1##i = 1>=(bound)?(int)(bound) - 1:1; \ _n1##i<(int)(bound) || i==--_n1##i; \ ++i, ++_n1##i) #define cimg_for2X(img,x) cimg_for2((img)._width,x) @@ -843,7 +856,7 @@ #define cimg_for_in2(bound,i0,i1,i) \ for (int i = (int)(i0)<0?0:(int)(i0), \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1; \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1; \ i<=(int)(i1) && (_n1##i<(int)(bound) || i==--_n1##i); \ ++i, ++_n1##i) #define cimg_for_in2X(img,x0,x1,x) cimg_for_in2((img)._width,x0,x1,x) @@ -864,7 +877,7 @@ #define cimg_for3(bound,i) \ for (int i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1; \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1; \ _n1##i<(int)(bound) || i==--_n1##i; \ _p1##i = i++, ++_n1##i) #define cimg_for3X(img,x) cimg_for3((img)._width,x) @@ -884,8 +897,8 @@ #define cimg_for_in3(bound,i0,i1,i) \ for (int i = (int)(i0)<0?0:(int)(i0), \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1; \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1; \ i<=(int)(i1) && (_n1##i<(int)(bound) || i==--_n1##i); \ _p1##i = i++, ++_n1##i) #define cimg_for_in3X(img,x0,x1,x) cimg_for_in3((img)._width,x0,x1,x) @@ -905,8 +918,8 @@ cimg_for_in3C(img,c0,c1,c) cimg_for_in3XYZ(img,x0,y0,z0,x1,y1,z1,x,y,z) #define cimg_for4(bound,i) \ - for (int i = 0, _p1##i = 0, _n1##i = 1>=(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(bound)?(int)(bound)-1:2; \ + for (int i = 0, _p1##i = 0, _n1##i = 1>=(bound)?(int)(bound) - 1:1, \ + _n2##i = 2>=(bound)?(int)(bound) - 1:2; \ _n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i); \ _p1##i = i++, ++_n1##i, ++_n2##i) #define cimg_for4X(img,x) cimg_for4((img)._width,x) @@ -926,9 +939,9 @@ #define cimg_for_in4(bound,i0,i1,i) \ for (int i = (int)(i0)<0?0:(int)(i0), \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2; \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \ + _n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2; \ i<=(int)(i1) && (_n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i)); \ _p1##i = i++, ++_n1##i, ++_n2##i) #define cimg_for_in4X(img,x0,x1,x) cimg_for_in4((img)._width,x0,x1,x) @@ -949,8 +962,8 @@ #define cimg_for5(bound,i) \ for (int i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(bound)?(int)(bound)-1:2; \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1, \ + _n2##i = 2>=(bound)?(int)(bound) - 1:2; \ _n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i); \ _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i) #define cimg_for5X(img,x) cimg_for5((img)._width,x) @@ -970,10 +983,10 @@ #define cimg_for_in5(bound,i0,i1,i) \ for (int i = (int)(i0)<0?0:(int)(i0), \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2; \ + _p2##i = i - 2<0?0:i - 2, \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \ + _n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2; \ i<=(int)(i1) && (_n2##i<(int)(bound) || _n1##i==--_n2##i || i==(_n2##i = --_n1##i)); \ _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i) #define cimg_for_in5X(img,x0,x1,x) cimg_for_in5((img)._width,x0,x1,x) @@ -994,9 +1007,9 @@ #define cimg_for6(bound,i) \ for (int i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(bound)?(int)(bound)-1:3; \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1, \ + _n2##i = 2>=(bound)?(int)(bound) - 1:2, \ + _n3##i = 3>=(bound)?(int)(bound) - 1:3; \ _n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i); \ _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i) #define cimg_for6X(img,x) cimg_for6((img)._width,x) @@ -1016,11 +1029,11 @@ #define cimg_for_in6(bound,i0,i1,i) \ for (int i = (int)(i0)<0?0:(int)(i0), \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3; \ + _p2##i = i - 2<0?0:i - 2, \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \ + _n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2, \ + _n3##i = i + 3>=(int)(bound)?(int)(bound) - 1:i + 3; \ i<=(int)(i1) && \ (_n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i)); \ _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i) @@ -1042,9 +1055,9 @@ #define cimg_for7(bound,i) \ for (int i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(bound)?(int)(bound)-1:3; \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1, \ + _n2##i = 2>=(bound)?(int)(bound) - 1:2, \ + _n3##i = 3>=(bound)?(int)(bound) - 1:3; \ _n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i); \ _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i) #define cimg_for7X(img,x) cimg_for7((img)._width,x) @@ -1064,12 +1077,12 @@ #define cimg_for_in7(bound,i0,i1,i) \ for (int i = (int)(i0)<0?0:(int)(i0), \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3; \ + _p3##i = i - 3<0?0:i - 3, \ + _p2##i = i - 2<0?0:i - 2, \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \ + _n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2, \ + _n3##i = i + 3>=(int)(bound)?(int)(bound) - 1:i + 3; \ i<=(int)(i1) && \ (_n3##i<(int)(bound) || _n2##i==--_n3##i || _n1##i==--_n2##i || i==(_n3##i = _n2##i = --_n1##i)); \ _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i) @@ -1091,10 +1104,10 @@ #define cimg_for8(bound,i) \ for (int i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(bound)?(int)(bound)-1:4; \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1, \ + _n2##i = 2>=(bound)?(int)(bound) - 1:2, \ + _n3##i = 3>=(bound)?(int)(bound) - 1:3, \ + _n4##i = 4>=(bound)?(int)(bound) - 1:4; \ _n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ i==(_n4##i = _n3##i = _n2##i = --_n1##i); \ _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i) @@ -1115,13 +1128,13 @@ #define cimg_for_in8(bound,i0,i1,i) \ for (int i = (int)(i0)<0?0:(int)(i0), \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4; \ + _p3##i = i - 3<0?0:i - 3, \ + _p2##i = i - 2<0?0:i - 2, \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \ + _n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2, \ + _n3##i = i + 3>=(int)(bound)?(int)(bound) - 1:i + 3, \ + _n4##i = i + 4>=(int)(bound)?(int)(bound) - 1:i + 4; \ i<=(int)(i1) && (_n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ i==(_n4##i = _n3##i = _n2##i = --_n1##i)); \ _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i) @@ -1143,10 +1156,10 @@ #define cimg_for9(bound,i) \ for (int i = 0, _p4##i = 0, _p3##i = 0, _p2##i = 0, _p1##i = 0, \ - _n1##i = 1>=(int)(bound)?(int)(bound)-1:1, \ - _n2##i = 2>=(int)(bound)?(int)(bound)-1:2, \ - _n3##i = 3>=(int)(bound)?(int)(bound)-1:3, \ - _n4##i = 4>=(int)(bound)?(int)(bound)-1:4; \ + _n1##i = 1>=(int)(bound)?(int)(bound) - 1:1, \ + _n2##i = 2>=(int)(bound)?(int)(bound) - 1:2, \ + _n3##i = 3>=(int)(bound)?(int)(bound) - 1:3, \ + _n4##i = 4>=(int)(bound)?(int)(bound) - 1:4; \ _n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ i==(_n4##i = _n3##i = _n2##i = --_n1##i); \ _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i) @@ -1167,14 +1180,14 @@ #define cimg_for_in9(bound,i0,i1,i) \ for (int i = (int)(i0)<0?0:(int)(i0), \ - _p4##i = i-4<0?0:i-4, \ - _p3##i = i-3<0?0:i-3, \ - _p2##i = i-2<0?0:i-2, \ - _p1##i = i-1<0?0:i-1, \ - _n1##i = i+1>=(int)(bound)?(int)(bound)-1:i+1, \ - _n2##i = i+2>=(int)(bound)?(int)(bound)-1:i+2, \ - _n3##i = i+3>=(int)(bound)?(int)(bound)-1:i+3, \ - _n4##i = i+4>=(int)(bound)?(int)(bound)-1:i+4; \ + _p4##i = i - 4<0?0:i - 4, \ + _p3##i = i - 3<0?0:i - 3, \ + _p2##i = i - 2<0?0:i - 2, \ + _p1##i = i - 1<0?0:i - 1, \ + _n1##i = i + 1>=(int)(bound)?(int)(bound) - 1:i + 1, \ + _n2##i = i + 2>=(int)(bound)?(int)(bound) - 1:i + 2, \ + _n3##i = i + 3>=(int)(bound)?(int)(bound) - 1:i + 3, \ + _n4##i = i + 4>=(int)(bound)?(int)(bound) - 1:i + 4; \ i<=(int)(i1) && (_n4##i<(int)(bound) || _n3##i==--_n4##i || _n2##i==--_n3##i || _n1##i==--_n2##i || \ i==(_n4##i = _n3##i = _n2##i = --_n1##i)); \ _p4##i = _p3##i, _p3##i = _p2##i, _p2##i = _p1##i, _p1##i = i++, ++_n1##i, ++_n2##i, ++_n3##i, ++_n4##i) @@ -1199,7 +1212,7 @@ _n1##x = (int)( \ (I[0] = (T)(img)(0,y,z,c)), \ (I[2] = (T)(img)(0,_n1##y,z,c)), \ - 1>=(img)._width?(img).width()-1:1); \ + 1>=(img)._width?(img).width() - 1:1); \ (_n1##x<(img).width() && ( \ (I[1] = (T)(img)(_n1##x,y,z,c)), \ (I[3] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ @@ -1213,7 +1226,7 @@ _n1##x = (int)( \ (I[0] = (T)(img)(x,y,z,c)), \ (I[2] = (T)(img)(x,_n1##y,z,c)), \ - x+1>=(int)(img)._width?(img).width()-1:x+1); \ + x + 1>=(int)(img)._width?(img).width() - 1:x + 1); \ x<=(int)(x1) && ((_n1##x<(img).width() && ( \ (I[1] = (T)(img)(_n1##x,y,z,c)), \ (I[3] = (T)(img)(_n1##x,_n1##y,z,c)),1)) || \ @@ -1228,8 +1241,8 @@ _n1##x = (int)( \ (I[0] = I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \ (I[3] = I[4] = (T)(img)(0,y,z,c)), \ - (I[6] = I[7] = (T)(img)(0,_n1##y,z,c)), \ - 1>=(img)._width?(img).width()-1:1); \ + (I[6] = I[7] = (T)(img)(0,_n1##y,z,c)), \ + 1>=(img)._width?(img).width() - 1:1); \ (_n1##x<(img).width() && ( \ (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ (I[5] = (T)(img)(_n1##x,y,z,c)), \ @@ -1242,7 +1255,7 @@ #define cimg_for_in3x3(img,x0,y0,x1,y1,x,y,z,c,I,T) \ cimg_for_in3((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p1##x = x-1<0?0:x-1, \ + _p1##x = x - 1<0?0:x - 1, \ _n1##x = (int)( \ (I[0] = (T)(img)(_p1##x,_p1##y,z,c)), \ (I[3] = (T)(img)(_p1##x,y,z,c)), \ @@ -1250,7 +1263,7 @@ (I[1] = (T)(img)(x,_p1##y,z,c)), \ (I[4] = (T)(img)(x,y,z,c)), \ (I[7] = (T)(img)(x,_n1##y,z,c)), \ - x+1>=(int)(img)._width?(img).width()-1:x+1); \ + x + 1>=(int)(img)._width?(img).width() - 1:x + 1); \ x<=(int)(x1) && ((_n1##x<(img).width() && ( \ (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ (I[5] = (T)(img)(_n1##x,y,z,c)), \ @@ -1264,7 +1277,7 @@ #define cimg_for4x4(img,x,y,z,c,I,T) \ cimg_for4((img)._height,y) for (int x = 0, \ _p1##x = 0, \ - _n1##x = 1>=(img)._width?(img).width()-1:1, \ + _n1##x = 1>=(img)._width?(img).width() - 1:1, \ _n2##x = (int)( \ (I[0] = I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \ (I[4] = I[5] = (T)(img)(0,y,z,c)), \ @@ -1274,7 +1287,7 @@ (I[6] = (T)(img)(_n1##x,y,z,c)), \ (I[10] = (T)(img)(_n1##x,_n1##y,z,c)), \ (I[14] = (T)(img)(_n1##x,_n2##y,z,c)), \ - 2>=(img)._width?(img).width()-1:2); \ + 2>=(img)._width?(img).width() - 1:2); \ (_n2##x<(img).width() && ( \ (I[3] = (T)(img)(_n2##x,_p1##y,z,c)), \ (I[7] = (T)(img)(_n2##x,y,z,c)), \ @@ -1289,8 +1302,8 @@ #define cimg_for_in4x4(img,x0,y0,x1,y1,x,y,z,c,I,T) \ cimg_for_in4((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(int)(img)._width?(img).width()-1:x+1, \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = x + 1>=(int)(img)._width?(img).width() - 1:x + 1, \ _n2##x = (int)( \ (I[0] = (T)(img)(_p1##x,_p1##y,z,c)), \ (I[4] = (T)(img)(_p1##x,y,z,c)), \ @@ -1304,7 +1317,7 @@ (I[6] = (T)(img)(_n1##x,y,z,c)), \ (I[10] = (T)(img)(_n1##x,_n1##y,z,c)), \ (I[14] = (T)(img)(_n1##x,_n2##y,z,c)), \ - x+2>=(int)(img)._width?(img).width()-1:x+2); \ + x + 2>=(int)(img)._width?(img).width() - 1:x + 2); \ x<=(int)(x1) && ((_n2##x<(img).width() && ( \ (I[3] = (T)(img)(_n2##x,_p1##y,z,c)), \ (I[7] = (T)(img)(_n2##x,y,z,c)), \ @@ -1320,7 +1333,7 @@ #define cimg_for5x5(img,x,y,z,c,I,T) \ cimg_for5((img)._height,y) for (int x = 0, \ _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=(img)._width?(img).width()-1:1, \ + _n1##x = 1>=(img)._width?(img).width() - 1:1, \ _n2##x = (int)( \ (I[0] = I[1] = I[2] = (T)(img)(_p2##x,_p2##y,z,c)), \ (I[5] = I[6] = I[7] = (T)(img)(0,_p1##y,z,c)), \ @@ -1332,7 +1345,7 @@ (I[13] = (T)(img)(_n1##x,y,z,c)), \ (I[18] = (T)(img)(_n1##x,_n1##y,z,c)), \ (I[23] = (T)(img)(_n1##x,_n2##y,z,c)), \ - 2>=(img)._width?(img).width()-1:2); \ + 2>=(img)._width?(img).width() - 1:2); \ (_n2##x<(img).width() && ( \ (I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \ (I[9] = (T)(img)(_n2##x,_p1##y,z,c)), \ @@ -1349,9 +1362,9 @@ #define cimg_for_in5x5(img,x0,y0,x1,y1,x,y,z,c,I,T) \ cimg_for_in5((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(int)(img)._width?(img).width()-1:x+1, \ + _p2##x = x - 2<0?0:x - 2, \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = x + 1>=(int)(img)._width?(img).width() - 1:x + 1, \ _n2##x = (int)( \ (I[0] = (T)(img)(_p2##x,_p2##y,z,c)), \ (I[5] = (T)(img)(_p2##x,_p1##y,z,c)), \ @@ -1373,7 +1386,7 @@ (I[13] = (T)(img)(_n1##x,y,z,c)), \ (I[18] = (T)(img)(_n1##x,_n1##y,z,c)), \ (I[23] = (T)(img)(_n1##x,_n2##y,z,c)), \ - x+2>=(int)(img)._width?(img).width()-1:x+2); \ + x + 2>=(int)(img)._width?(img).width() - 1:x + 2); \ x<=(int)(x1) && ((_n2##x<(img).width() && ( \ (I[4] = (T)(img)(_n2##x,_p2##y,z,c)), \ (I[9] = (T)(img)(_n2##x,_p1##y,z,c)), \ @@ -1391,8 +1404,8 @@ #define cimg_for6x6(img,x,y,z,c,I,T) \ cimg_for6((img)._height,y) for (int x = 0, \ _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=(img)._width?(img).width()-1:1, \ - _n2##x = 2>=(img)._width?(img).width()-1:2, \ + _n1##x = 1>=(img)._width?(img).width() - 1:1, \ + _n2##x = 2>=(img)._width?(img).width() - 1:2, \ _n3##x = (int)( \ (I[0] = I[1] = I[2] = (T)(img)(_p2##x,_p2##y,z,c)), \ (I[6] = I[7] = I[8] = (T)(img)(0,_p1##y,z,c)), \ @@ -1412,7 +1425,7 @@ (I[22] = (T)(img)(_n2##x,_n1##y,z,c)), \ (I[28] = (T)(img)(_n2##x,_n2##y,z,c)), \ (I[34] = (T)(img)(_n2##x,_n3##y,z,c)), \ - 3>=(img)._width?(img).width()-1:3); \ + 3>=(img)._width?(img).width() - 1:3); \ (_n3##x<(img).width() && ( \ (I[5] = (T)(img)(_n3##x,_p2##y,z,c)), \ (I[11] = (T)(img)(_n3##x,_p1##y,z,c)), \ @@ -1431,10 +1444,10 @@ #define cimg_for_in6x6(img,x0,y0,x1,y1,x,y,z,c,I,T) \ cimg_for_in6((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)x0, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(int)(img)._width?(img).width()-1:x+1, \ - _n2##x = x+2>=(int)(img)._width?(img).width()-1:x+2, \ + _p2##x = x - 2<0?0:x - 2, \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = x + 1>=(int)(img)._width?(img).width() - 1:x + 1, \ + _n2##x = x + 2>=(int)(img)._width?(img).width() - 1:x + 2, \ _n3##x = (int)( \ (I[0] = (T)(img)(_p2##x,_p2##y,z,c)), \ (I[6] = (T)(img)(_p2##x,_p1##y,z,c)), \ @@ -1466,7 +1479,7 @@ (I[22] = (T)(img)(_n2##x,_n1##y,z,c)), \ (I[28] = (T)(img)(_n2##x,_n2##y,z,c)), \ (I[34] = (T)(img)(_n2##x,_n3##y,z,c)), \ - x+3>=(int)(img)._width?(img).width()-1:x+3); \ + x + 3>=(int)(img)._width?(img).width() - 1:x + 3); \ x<=(int)(x1) && ((_n3##x<(img).width() && ( \ (I[5] = (T)(img)(_n3##x,_p2##y,z,c)), \ (I[11] = (T)(img)(_n3##x,_p1##y,z,c)), \ @@ -1486,8 +1499,8 @@ #define cimg_for7x7(img,x,y,z,c,I,T) \ cimg_for7((img)._height,y) for (int x = 0, \ _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=(img)._width?(img).width()-1:1, \ - _n2##x = 2>=(img)._width?(img).width()-1:2, \ + _n1##x = 1>=(img)._width?(img).width() - 1:1, \ + _n2##x = 2>=(img)._width?(img).width() - 1:2, \ _n3##x = (int)( \ (I[0] = I[1] = I[2] = I[3] = (T)(img)(_p3##x,_p3##y,z,c)), \ (I[7] = I[8] = I[9] = I[10] = (T)(img)(0,_p2##y,z,c)), \ @@ -1510,7 +1523,7 @@ (I[33] = (T)(img)(_n2##x,_n1##y,z,c)), \ (I[40] = (T)(img)(_n2##x,_n2##y,z,c)), \ (I[47] = (T)(img)(_n2##x,_n3##y,z,c)), \ - 3>=(img)._width?(img).width()-1:3); \ + 3>=(img)._width?(img).width() - 1:3); \ (_n3##x<(img).width() && ( \ (I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \ (I[13] = (T)(img)(_n3##x,_p2##y,z,c)), \ @@ -1531,11 +1544,11 @@ #define cimg_for_in7x7(img,x0,y0,x1,y1,x,y,z,c,I,T) \ cimg_for_in7((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(int)(img)._width?(img).width()-1:x+1, \ - _n2##x = x+2>=(int)(img)._width?(img).width()-1:x+2, \ + _p3##x = x - 3<0?0:x - 3, \ + _p2##x = x - 2<0?0:x - 2, \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = x + 1>=(int)(img)._width?(img).width() - 1:x + 1, \ + _n2##x = x + 2>=(int)(img)._width?(img).width() - 1:x + 2, \ _n3##x = (int)( \ (I[0] = (T)(img)(_p3##x,_p3##y,z,c)), \ (I[7] = (T)(img)(_p3##x,_p2##y,z,c)), \ @@ -1579,7 +1592,7 @@ (I[33] = (T)(img)(_n2##x,_n1##y,z,c)), \ (I[40] = (T)(img)(_n2##x,_n2##y,z,c)), \ (I[47] = (T)(img)(_n2##x,_n3##y,z,c)), \ - x+3>=(int)(img)._width?(img).width()-1:x+3); \ + x + 3>=(int)(img)._width?(img).width() - 1:x + 3); \ x<=(int)(x1) && ((_n3##x<(img).width() && ( \ (I[6] = (T)(img)(_n3##x,_p3##y,z,c)), \ (I[13] = (T)(img)(_n3##x,_p2##y,z,c)), \ @@ -1601,9 +1614,9 @@ #define cimg_for8x8(img,x,y,z,c,I,T) \ cimg_for8((img)._height,y) for (int x = 0, \ _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ + _n1##x = 1>=((img)._width)?(img).width() - 1:1, \ + _n2##x = 2>=((img)._width)?(img).width() - 1:2, \ + _n3##x = 3>=((img)._width)?(img).width() - 1:3, \ _n4##x = (int)( \ (I[0] = I[1] = I[2] = I[3] = (T)(img)(_p3##x,_p3##y,z,c)), \ (I[8] = I[9] = I[10] = I[11] = (T)(img)(0,_p2##y,z,c)), \ @@ -1637,7 +1650,7 @@ (I[46] = (T)(img)(_n3##x,_n2##y,z,c)), \ (I[54] = (T)(img)(_n3##x,_n3##y,z,c)), \ (I[62] = (T)(img)(_n3##x,_n4##y,z,c)), \ - 4>=((img)._width)?(img).width()-1:4); \ + 4>=((img)._width)?(img).width() - 1:4); \ (_n4##x<(img).width() && ( \ (I[7] = (T)(img)(_n4##x,_p3##y,z,c)), \ (I[15] = (T)(img)(_n4##x,_p2##y,z,c)), \ @@ -1660,12 +1673,12 @@ #define cimg_for_in8x8(img,x0,y0,x1,y1,x,y,z,c,I,T) \ cimg_for_in8((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ + _p3##x = x - 3<0?0:x - 3, \ + _p2##x = x - 2<0?0:x - 2, \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = x + 1>=(img).width()?(img).width() - 1:x + 1, \ + _n2##x = x + 2>=(img).width()?(img).width() - 1:x + 2, \ + _n3##x = x + 3>=(img).width()?(img).width() - 1:x + 3, \ _n4##x = (int)( \ (I[0] = (T)(img)(_p3##x,_p3##y,z,c)), \ (I[8] = (T)(img)(_p3##x,_p2##y,z,c)), \ @@ -1723,7 +1736,7 @@ (I[46] = (T)(img)(_n3##x,_n2##y,z,c)), \ (I[54] = (T)(img)(_n3##x,_n3##y,z,c)), \ (I[62] = (T)(img)(_n3##x,_n4##y,z,c)), \ - x+4>=(img).width()?(img).width()-1:x+4); \ + x + 4>=(img).width()?(img).width() - 1:x + 4); \ x<=(int)(x1) && ((_n4##x<(img).width() && ( \ (I[7] = (T)(img)(_n4##x,_p3##y,z,c)), \ (I[15] = (T)(img)(_n4##x,_p2##y,z,c)), \ @@ -1747,9 +1760,9 @@ #define cimg_for9x9(img,x,y,z,c,I,T) \ cimg_for9((img)._height,y) for (int x = 0, \ _p4##x = 0, _p3##x = 0, _p2##x = 0, _p1##x = 0, \ - _n1##x = 1>=((img)._width)?(img).width()-1:1, \ - _n2##x = 2>=((img)._width)?(img).width()-1:2, \ - _n3##x = 3>=((img)._width)?(img).width()-1:3, \ + _n1##x = 1>=((img)._width)?(img).width() - 1:1, \ + _n2##x = 2>=((img)._width)?(img).width() - 1:2, \ + _n3##x = 3>=((img)._width)?(img).width() - 1:3, \ _n4##x = (int)( \ (I[0] = I[1] = I[2] = I[3] = I[4] = (T)(img)(_p4##x,_p4##y,z,c)), \ (I[9] = I[10] = I[11] = I[12] = I[13] = (T)(img)(0,_p3##y,z,c)), \ @@ -1787,7 +1800,7 @@ (I[61] = (T)(img)(_n3##x,_n2##y,z,c)), \ (I[70] = (T)(img)(_n3##x,_n3##y,z,c)), \ (I[79] = (T)(img)(_n3##x,_n4##y,z,c)), \ - 4>=((img)._width)?(img).width()-1:4); \ + 4>=((img)._width)?(img).width() - 1:4); \ (_n4##x<(img).width() && ( \ (I[8] = (T)(img)(_n4##x,_p4##y,z,c)), \ (I[17] = (T)(img)(_n4##x,_p3##y,z,c)), \ @@ -1814,13 +1827,13 @@ #define cimg_for_in9x9(img,x0,y0,x1,y1,x,y,z,c,I,T) \ cimg_for_in9((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p4##x = x-4<0?0:x-4, \ - _p3##x = x-3<0?0:x-3, \ - _p2##x = x-2<0?0:x-2, \ - _p1##x = x-1<0?0:x-1, \ - _n1##x = x+1>=(img).width()?(img).width()-1:x+1, \ - _n2##x = x+2>=(img).width()?(img).width()-1:x+2, \ - _n3##x = x+3>=(img).width()?(img).width()-1:x+3, \ + _p4##x = x - 4<0?0:x - 4, \ + _p3##x = x - 3<0?0:x - 3, \ + _p2##x = x - 2<0?0:x - 2, \ + _p1##x = x - 1<0?0:x - 1, \ + _n1##x = x + 1>=(img).width()?(img).width() - 1:x + 1, \ + _n2##x = x + 2>=(img).width()?(img).width() - 1:x + 2, \ + _n3##x = x + 3>=(img).width()?(img).width() - 1:x + 3, \ _n4##x = (int)( \ (I[0] = (T)(img)(_p4##x,_p4##y,z,c)), \ (I[9] = (T)(img)(_p4##x,_p3##y,z,c)), \ @@ -1894,7 +1907,7 @@ (I[61] = (T)(img)(_n3##x,_n2##y,z,c)), \ (I[70] = (T)(img)(_n3##x,_n3##y,z,c)), \ (I[79] = (T)(img)(_n3##x,_n4##y,z,c)), \ - x+4>=(img).width()?(img).width()-1:x+4); \ + x + 4>=(img).width()?(img).width() - 1:x + 4); \ x<=(int)(x1) && ((_n4##x<(img).width() && ( \ (I[8] = (T)(img)(_n4##x,_p4##y,z,c)), \ (I[17] = (T)(img)(_n4##x,_p3##y,z,c)), \ @@ -1926,7 +1939,7 @@ (I[2] = (T)(img)(0,_n1##y,z,c)), \ (I[4] = (T)(img)(0,y,_n1##z,c)), \ (I[6] = (T)(img)(0,_n1##y,_n1##z,c)), \ - 1>=(img)._width?(img).width()-1:1); \ + 1>=(img)._width?(img).width() - 1:1); \ (_n1##x<(img).width() && ( \ (I[1] = (T)(img)(_n1##x,y,z,c)), \ (I[3] = (T)(img)(_n1##x,_n1##y,z,c)), \ @@ -1943,7 +1956,7 @@ (I[2] = (T)(img)(x,_n1##y,z,c)), \ (I[4] = (T)(img)(x,y,_n1##z,c)), \ (I[6] = (T)(img)(x,_n1##y,_n1##z,c)), \ - x+1>=(int)(img)._width?(img).width()-1:x+1); \ + x + 1>=(int)(img)._width?(img).width() - 1:x + 1); \ x<=(int)(x1) && ((_n1##x<(img).width() && ( \ (I[1] = (T)(img)(_n1##x,y,z,c)), \ (I[3] = (T)(img)(_n1##x,_n1##y,z,c)), \ @@ -1966,7 +1979,7 @@ (I[18] = I[19] = (T)(img)(0,_p1##y,_n1##z,c)), \ (I[21] = I[22] = (T)(img)(0,y,_n1##z,c)), \ (I[24] = I[25] = (T)(img)(0,_n1##y,_n1##z,c)), \ - 1>=(img)._width?(img).width()-1:1); \ + 1>=(img)._width?(img).width() - 1:1); \ (_n1##x<(img).width() && ( \ (I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ (I[5] = (T)(img)(_n1##x,y,_p1##z,c)), \ @@ -1985,7 +1998,7 @@ #define cimg_for_in3x3x3(img,x0,y0,z0,x1,y1,z1,x,y,z,c,I,T) \ cimg_for_in3((img)._depth,z0,z1,z) cimg_for_in3((img)._height,y0,y1,y) for (int x = (int)(x0)<0?0:(int)(x0), \ - _p1##x = x-1<0?0:x-1, \ + _p1##x = x - 1<0?0:x - 1, \ _n1##x = (int)( \ (I[0] = (T)(img)(_p1##x,_p1##y,_p1##z,c)), \ (I[3] = (T)(img)(_p1##x,y,_p1##z,c)), \ @@ -2005,7 +2018,7 @@ (I[19] = (T)(img)(x,_p1##y,_n1##z,c)), \ (I[22] = (T)(img)(x,y,_n1##z,c)), \ (I[25] = (T)(img)(x,_n1##y,_n1##z,c)), \ - x+1>=(int)(img)._width?(img).width()-1:x+1); \ + x + 1>=(int)(img)._width?(img).width() - 1:x + 1); \ x<=(int)(x1) && ((_n1##x<(img).width() && ( \ (I[2] = (T)(img)(_n1##x,_p1##y,_p1##z,c)), \ (I[5] = (T)(img)(_n1##x,y,_p1##z,c)), \ @@ -2024,7 +2037,7 @@ #define cimglist_for(list,l) for (int l = 0; l<(int)(list)._width; ++l) #define cimglist_for_in(list,l0,l1,l) \ - for (int l = (int)(l0)<0?0:(int)(l0), _max##l = (unsigned int)l1<(list)._width?(int)(l1):(int)(list)._width-1; \ + for (int l = (int)(l0)<0?0:(int)(l0), _max##l = (unsigned int)l1<(list)._width?(int)(l1):(int)(list)._width - 1; \ l<=_max##l; ++l) #define cimglist_apply(list,fn) cimglist_for(list,__##fn) (list)[__##fn].fn @@ -2067,26 +2080,26 @@ // Declare cimg:: namespace. // This is an uncomplete namespace definition here. It only contains some - // necessary stuffs to ensure a correct declaration order of the classes and functions + // necessary stuff to ensure a correct declaration order of the classes and functions // defined afterwards. namespace cimg { // Define ascii sequences for colored terminal output. #ifdef cimg_use_vt100 - const char t_normal[] = { 0x1b, '[', '0', ';', '0', ';', '0', 'm', 0 }; - const char t_black[] = { 0x1b, '[', '0', ';', '3', '0', ';', '5', '9', 'm', 0 }; - const char t_red[] = { 0x1b, '[', '0', ';', '3', '1', ';', '5', '9', 'm', 0 }; - const char t_green[] = { 0x1b, '[', '0', ';', '3', '2', ';', '5', '9', 'm', 0 }; - const char t_yellow[] = { 0x1b, '[', '0', ';', '3', '3', ';', '5', '9', 'm', 0 }; - const char t_blue[] = { 0x1b, '[', '0', ';', '3', '4', ';', '5', '9', 'm', 0 }; - const char t_magenta[] = { 0x1b, '[', '0', ';', '3', '5', ';', '5', '9', 'm', 0 }; - const char t_cyan[] = { 0x1b, '[', '0', ';', '3', '6', ';', '5', '9', 'm', 0 }; - const char t_white[] = { 0x1b, '[', '0', ';', '3', '7', ';', '5', '9', 'm', 0 }; - const char t_bold[] = { 0x1b, '[', '1', 'm', 0 }; - const char t_underscore[] = { 0x1b, '[', '4', 'm', 0 }; + static const char t_normal[] = { 0x1b, '[', '0', ';', '0', ';', '0', 'm', 0 }; + static const char t_black[] = { 0x1b, '[', '0', ';', '3', '0', ';', '5', '9', 'm', 0 }; + static const char t_red[] = { 0x1b, '[', '0', ';', '3', '1', ';', '5', '9', 'm', 0 }; + static const char t_green[] = { 0x1b, '[', '0', ';', '3', '2', ';', '5', '9', 'm', 0 }; + static const char t_yellow[] = { 0x1b, '[', '0', ';', '3', '3', ';', '5', '9', 'm', 0 }; + static const char t_blue[] = { 0x1b, '[', '0', ';', '3', '4', ';', '5', '9', 'm', 0 }; + static const char t_magenta[] = { 0x1b, '[', '0', ';', '3', '5', ';', '5', '9', 'm', 0 }; + static const char t_cyan[] = { 0x1b, '[', '0', ';', '3', '6', ';', '5', '9', 'm', 0 }; + static const char t_white[] = { 0x1b, '[', '0', ';', '3', '7', ';', '5', '9', 'm', 0 }; + static const char t_bold[] = { 0x1b, '[', '1', 'm', 0 }; + static const char t_underscore[] = { 0x1b, '[', '4', 'm', 0 }; #else - const char t_normal[] = { 0 }; - const char *const t_black = cimg::t_normal, + static const char t_normal[] = { 0 }; + static const char *const t_black = cimg::t_normal, *const t_red = cimg::t_normal, *const t_green = cimg::t_normal, *const t_yellow = cimg::t_normal, @@ -2107,35 +2120,73 @@ // [internal] Lock/unlock a mutex for managing concurrent threads. // 'lock_mode' can be { 0=unlock | 1=lock | 2=trylock }. - // 'n' can be in [0,31] but mutex range [0,16] is reserved by CImg. + // 'n' can be in [0,31] but mutex range [0,15] is reserved by CImg. inline int mutex(const unsigned int n, const int lock_mode=1); inline unsigned int& _exception_mode(const unsigned int value, const bool is_set) { static unsigned int mode = cimg_verbosity; - cimg::mutex(0); - if (is_set) mode = value; - cimg::mutex(0,0); + if (is_set) { cimg::mutex(0); mode = value<4?value:4; cimg::mutex(0,0); } return mode; } // Mandatory because Microsoft's _snprintf() and _vsnprintf() do not add the '\0' character // at the end of the string. #if cimg_OS==2 && defined(_MSC_VER) - inline int c99_vsnprintf(char* str, size_t size, const char* format, va_list ap) { - int count = -1; + inline int _snprintf(char *const s, const size_t size, const char *const format, ...) { + va_list ap; + va_start(ap,format); + const int result = _vsnprintf(s,size,format,ap); + va_end(ap); + return result; + } + + inline int _vsnprintf(char *const s, const size_t size, const char *const format, va_list ap) { + int result = -1; cimg::mutex(6); - if (size) count = _vsnprintf_s(str,size,_TRUNCATE,format,ap); - if (count==-1) count = _vscprintf(format,ap); + if (size) result = _vsnprintf_s(s,size,_TRUNCATE,format,ap); + if (result==-1) result = _vscprintf(format,ap); cimg::mutex(6,0); - return count; + return result; } - inline int c99_snprintf(char* str, size_t size, const char* format, ...) { - int count; - va_list ap; - va_start(ap, format); - count = c99_vsnprintf(str,size,format,ap); - va_end(ap); - return count; + + // Mutex-protected version of sscanf, sprintf and snprintf. + // Used only MacOSX, as it seems those functions are not re-entrant on MacOSX. +#elif defined(__MACOSX__) || defined(__APPLE__) + inline int _sscanf(const char *const s, const char *const format, ...) { + cimg::mutex(6); + va_list args; + va_start(args,format); + const int result = std::vsscanf(s,format,args); + va_end(args); + cimg::mutex(6,0); + return result; + } + + inline int _sprintf(char *const s, const char *const format, ...) { + cimg::mutex(6); + va_list args; + va_start(args,format); + const int result = std::vsprintf(s,format,args); + va_end(args); + cimg::mutex(6,0); + return result; + } + + inline int _snprintf(char *const s, const size_t n, const char *const format, ...) { + cimg::mutex(6); + va_list args; + va_start(args,format); + const int result = std::vsnprintf(s,n,format,args); + va_end(args); + cimg::mutex(6,0); + return result; + } + + inline int _vsnprintf(char *const s, const size_t size, const char* format, va_list ap) { + cimg::mutex(6); + const int result = std::vsnprintf(s,size,format,ap); + cimg::mutex(6,0); + return result; } #endif @@ -2161,13 +2212,41 @@ return _exception_mode(0,false); } + //! Set current \CImg openmp mode. + /** + The way openmp-based methods are handled by \CImg can be changed dynamically, using this function. + \param mode Desired openmp mode. Possible values are: + - \c 0: Never parallelize (quiet mode). + - \c 1: Always parallelize. + - \c 2: Adaptive parallelization mode (default behavior). + **/ + inline unsigned int& _openmp_mode(const unsigned int value, const bool is_set) { + static unsigned int mode = 2; + if (is_set) { cimg::mutex(0); mode = value<2?value:2; cimg::mutex(0,0); } + return mode; + } + + inline unsigned int& openmp_mode(const unsigned int mode) { + return _openmp_mode(mode,true); + } + + //! Return current \CImg openmp mode. + inline unsigned int& openmp_mode() { + return _openmp_mode(0,false); + } + +#define cimg_openmp_if(cond) if (cimg::openmp_mode()==1 || (cimg::openmp_mode()>1 && (cond))) + + // Display a simple dialog box, and wait for the user's response. inline int dialog(const char *const title, const char *const msg, const char *const button1_label="OK", const char *const button2_label=0, const char *const button3_label=0, const char *const button4_label=0, const char *const button5_label=0, const char *const button6_label=0, const bool centering=false); + // Evaluate math expression. inline double eval(const char *const expression, const double x=0, const double y=0, const double z=0, const double c=0); + } /*--------------------------------------- @@ -2179,9 +2258,12 @@ /** \par Overview - CImgException is the base class of all exceptions thrown by \CImg. + CImgException is the base class of all exceptions thrown by \CImg (except \b CImgAbortException). CImgException is never thrown itself. Derived classes that specify the type of errord are thrown instead. - These derived classes can be: + These classes can be: + + - \b CImgAbortException: Thrown when a computationally-intensive function is aborted by an external signal. + This is the only \c non-derived exception class. - \b CImgArgumentException: Thrown when one argument of a called \CImg function is invalid. This is probably one of the most thrown exception by \CImg. @@ -2239,28 +2321,65 @@ **/ struct CImgException : public std::exception { #define _cimg_exception_err(etype,disp_flag) \ - std::va_list ap; va_start(ap,format); cimg_vsnprintf(_message,16384,format,ap); va_end(ap); \ - if (cimg::exception_mode()) { \ - std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,etype,cimg::t_normal,_message); \ - if (cimg_display && disp_flag && !(cimg::exception_mode()%2)) try { cimg::dialog(etype,_message,"Abort"); } \ - catch (CImgException&) {} \ - if (cimg::exception_mode()>=3) cimg_library_suffixed::cimg::info(); \ - } + std::va_list ap, ap2; \ + va_start(ap,format); va_start(ap2,format); \ + int size = cimg_vsnprintf(0,0,format,ap2); \ + if (size++>=0) { \ + delete[] _message; \ + _message = new char[size]; \ + cimg_vsnprintf(_message,size,format,ap); \ + if (cimg::exception_mode()) { \ + std::fprintf(cimg::output(),"\n%s[CImg] *** %s ***%s %s\n",cimg::t_red,etype,cimg::t_normal,_message); \ + if (cimg_display && disp_flag && !(cimg::exception_mode()%2)) try { cimg::dialog(etype,_message,"Abort"); } \ + catch (CImgException&) {} \ + if (cimg::exception_mode()>=3) cimg_library_suffixed::cimg::info(); \ + } \ + } \ + va_end(ap); va_end(ap2); \ char *_message; - CImgException() { _message = new char[16384]; *_message = 0; } - CImgException(const char *const format, ...) { - _message = new char[16384]; *_message = 0;_cimg_exception_err("CImgException",true); + CImgException() { _message = new char[1]; *_message = 0; } + CImgException(const char *const format, ...):_message(0) { _cimg_exception_err("CImgException",true); } + CImgException(const CImgException& e) { + const int size = std::strlen(e._message); + _message = new char[size + 1]; + std::strncpy(_message,e._message,size); + _message[size] = 0; } ~CImgException() throw() { delete[] _message; } + CImgException& operator=(const CImgException& e) { + const int size = std::strlen(e._message); + _message = new char[size + 1]; + std::strncpy(_message,e._message,size); + _message[size] = 0; + return *this; + } //! Return a C-string containing the error message associated to the thrown exception. const char *what() const throw() { return _message; } }; - // The CImgInstanceException class is used to throw an exception related - // to an invalid instance encountered in a library function call. - struct CImgInstanceException : public CImgException { - CImgInstanceException(const char *const format, ...) { _cimg_exception_err("CImgInstanceException",true); } + // The CImgAbortException class is used to throw an exception when + // a computationally-intensive function has been aborted by an external signal. + struct CImgAbortException : public std::exception { + char *_message; + CImgAbortException() { _message = new char[1]; *_message = 0; } + CImgAbortException(const char *const format, ...):_message(0) { _cimg_exception_err("CImgAbortException",true); } + CImgAbortException(const CImgAbortException& e) { + const int size = std::strlen(e._message); + _message = new char[size + 1]; + std::strncpy(_message,e._message,size); + _message[size] = 0; + } + ~CImgAbortException() throw() { delete[] _message; } + CImgAbortException& operator=(const CImgAbortException& e) { + const int size = std::strlen(e._message); + _message = new char[size + 1]; + std::strncpy(_message,e._message,size); + _message[size] = 0; + return *this; + } + //! Return a C-string containing the error message associated to the thrown exception. + const char *what() const throw() { return _message; } }; // The CImgArgumentException class is used to throw an exception related @@ -2269,18 +2388,24 @@ CImgArgumentException(const char *const format, ...) { _cimg_exception_err("CImgArgumentException",true); } }; - // The CImgIOException class is used to throw an exception related - // to input/output file problems encountered in a library function call. - struct CImgIOException : public CImgException { - CImgIOException(const char *const format, ...) { _cimg_exception_err("CImgIOException",true); } - }; - // The CImgDisplayException class is used to throw an exception related // to display problems encountered in a library function call. struct CImgDisplayException : public CImgException { CImgDisplayException(const char *const format, ...) { _cimg_exception_err("CImgDisplayException",false); } }; + // The CImgInstanceException class is used to throw an exception related + // to an invalid instance encountered in a library function call. + struct CImgInstanceException : public CImgException { + CImgInstanceException(const char *const format, ...) { _cimg_exception_err("CImgInstanceException",true); } + }; + + // The CImgIOException class is used to throw an exception related + // to input/output file problems encountered in a library function call. + struct CImgIOException : public CImgException { + CImgIOException(const char *const format, ...) { _cimg_exception_err("CImgIOException",true); } + }; + // The CImgWarningException class is used to throw an exception for warnings // encountered in a library function call. struct CImgWarningException : public CImgException { @@ -2317,7 +2442,7 @@ static bool is_inf(const T) { return false; } static bool is_nan(const T) { return false; } static T min() { return ~max(); } - static T max() { return (T)(1UL<<(8*sizeof(T)-1)); } + static T max() { return (T)(1UL<<(8*sizeof(T) - 1)); } static T inf() { return max(); } static T cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(T)val; } static const char* format() { return "%s"; } @@ -2493,10 +2618,22 @@ return !(val==val); #endif } - static double min() { return -1.7E308; } - static double max() { return 1.7E308; } - static double inf() { return max()*max(); } - static double nan() { const double val_nan = -std::sqrt(-1.0); return val_nan; } + static double min() { return -DBL_MAX; } + static double max() { return DBL_MAX; } + static double inf() { +#ifdef INFINITY + return (double)INFINITY; +#else + return max()*max(); +#endif + } + static double nan() { +#ifdef NAN + return (double)NAN; +#else + const double val_nan = -std::sqrt(-1.0); return val_nan; +#endif + } static double cut(const double val) { return valmax()?max():val; } static const char* format() { return "%.16g"; } static double format(const double val) { return val; } @@ -2519,8 +2656,8 @@ return !(val==val); #endif } - static float min() { return -3.4E38f; } - static float max() { return 3.4E38f; } + static float min() { return -FLT_MAX; } + static float max() { return FLT_MAX; } static float inf() { return (float)cimg::type::inf(); } static float nan() { return (float)cimg::type::nan(); } static float cut(const double val) { return val<(double)min()?min():val>(double)max()?max():(float)val; } @@ -2528,6 +2665,32 @@ static double format(const float val) { return (double)val; } }; + template<> struct type { + static const char* string() { static const char *const s = "long double"; return s; } + static bool is_float() { return true; } + static bool is_inf(const long double val) { +#ifdef isinf + return (bool)isinf(val); +#else + return !is_nan(val) && (val::min() || val>cimg::type::max()); +#endif + } + static bool is_nan(const long double val) { +#ifdef isnan + return (bool)isnan(val); +#else + return !(val==val); +#endif + } + static long double min() { return -LDBL_MAX; } + static long double max() { return LDBL_MAX; } + static long double inf() { return max()*max(); } + static long double nan() { const long double val_nan = -std::sqrt(-1.0L); return val_nan; } + static long double cut(const long double val) { return valmax()?max():val; } + static const char* format() { return "%.16g"; } + static double format(const long double val) { return (double)val; } + }; + template struct superset { typedef T type; }; template<> struct superset { typedef unsigned char type; }; template<> struct superset { typedef char type; }; @@ -2628,7 +2791,7 @@ // Define variables used internally by CImg. #if cimg_display==1 struct X11_info { - volatile unsigned int nb_wins; + unsigned int nb_wins; pthread_t *events_thread; pthread_cond_t wait_event; pthread_mutex_t wait_event_mutex; @@ -2646,6 +2809,9 @@ #endif X11_info():nb_wins(0),events_thread(0),display(0), nb_bits(0),is_blue_first(false),is_shm_enabled(false),byte_order(false) { +#ifdef __FreeBSD__ + XInitThreads(); +#endif wins = new CImgDisplay*[1024]; pthread_mutex_init(&wait_event_mutex,0); pthread_cond_init(&wait_event,0); @@ -3008,7 +3174,7 @@ const double PI = 3.14159265358979323846; //!< Value of the mathematical constant PI // Define a 12x13 font (small size). - const char *const data_font12x13 = + static const char *const data_font12x13 = " .wjwlwmyuw>wjwkwbwjwkwRxuwmwjwkwmyuwJwjwlx`w Fw mwlwlwuwnwuynwuwmyTwlwkwuwmwuwnwlwkwuwmwuw_wuxl" "wlwkwuwnwuynwuwTwlwlwtwnwtwnw my Qw +wlw b{ \\w Wx`xTw_w[wbxawSwkw nynwky])]2_4^U^ 6^T\\5])]1_2]T\\8^U^ K])]2`4^V^3] " " U]*\\2a4`V\\8^U^5a F]*\\1\\X\\4^U^=]*\\" @@ -3309,7 +3475,7 @@ " F]']2] +]']2^ D]']3_ E]']1] \"]']2^ 8] H"; // Define a 90x103 font (huge size). - const char *const _data_font90x103[] = { // Defined as an array to avoid MS compiler limit about constant string (65Kb). + static const char *const _data_font90x103[] = { // Defined as an array to avoid MS compiler limit about constant string (65Kb). // Start of first string. " " " " @@ -3849,7 +4015,7 @@ " D" }; // Define a 40x38 'danger' color logo (used by cimg::dialog()). - const unsigned char logo40x38[4576] = { + static const unsigned char logo40x38[4576] = { 177,200,200,200,3,123,123,0,36,200,200,200,1,123,123,0,2,255,255,0,1,189,189,189,1,0,0,0,34,200,200,200, 1,123,123,0,4,255,255,0,1,189,189,189,1,0,0,0,1,123,123,123,32,200,200,200,1,123,123,0,5,255,255,0,1,0,0, 0,2,123,123,123,30,200,200,200,1,123,123,0,6,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,29,200,200,200, @@ -3928,7 +4094,6 @@ inline void warn(const char *const format, ...) { if (cimg::exception_mode()>=1) { char *const message = new char[16384]; - *message = 0; std::va_list ap; va_start(ap,format); cimg_vsnprintf(message,16384,format,ap); @@ -3957,11 +4122,11 @@ return -1; #else #if cimg_OS==1 - const unsigned int l = std::strlen(command); + const unsigned int l = (unsigned int)std::strlen(command); if (l) { - char *const ncommand = new char[l+16]; + char *const ncommand = new char[l + 16]; std::strncpy(ncommand,command,l); - std::strcpy(ncommand+l," 2> /dev/null"); // Make command silent. + std::strcpy(ncommand + l," 2> /dev/null"); // Make command silent. const int out_val = std::system(ncommand); delete[] ncommand; return out_val; @@ -4059,17 +4224,17 @@ inline void invert_endianness(T* const buffer, const unsigned long size) { if (size) switch (sizeof(T)) { case 1 : break; - case 2 : { for (unsigned short *ptr = (unsigned short*)buffer+size; ptr>(unsigned short*)buffer; ) { + case 2 : { for (unsigned short *ptr = (unsigned short*)buffer + size; ptr>(unsigned short*)buffer; ) { const unsigned short val = *(--ptr); *ptr = (unsigned short)((val>>8)|((val<<8))); } } break; - case 4 : { for (unsigned int *ptr = (unsigned int*)buffer+size; ptr>(unsigned int*)buffer; ) { + case 4 : { for (unsigned int *ptr = (unsigned int*)buffer + size; ptr>(unsigned int*)buffer; ) { const unsigned int val = *(--ptr); *ptr = (val>>24)|((val>>8)&0xff00)|((val<<8)&0xff0000)|(val<<24); } } break; - default : { for (T* ptr = buffer+size; ptr>buffer; ) { + default : { for (T* ptr = buffer + size; ptr>buffer; ) { unsigned char *pb = (unsigned char*)(--ptr), *pe = pb + sizeof(T); for (int i = 0; i<(int)sizeof(T)/2; ++i) swap(*(pb++),*(--pe)); } @@ -4119,7 +4284,7 @@ return (unsigned long)(st_time.tv_usec/1000 + st_time.tv_sec*1000); #elif cimg_OS==2 SYSTEMTIME st_time; - GetSystemTime(&st_time); + GetLocalTime(&st_time); return (unsigned long)(st_time.wMilliseconds + 1000*(st_time.wSecond + 60*(st_time.wMinute + 60*st_time.wHour))); #else return 0; @@ -4165,7 +4330,7 @@ inline unsigned int _wait(const unsigned int milliseconds, unsigned long& timer) { if (!timer) timer = cimg::time(); const unsigned long current_time = cimg::time(); - if (current_time>=timer+milliseconds) { timer = current_time; return 0; } + if (current_time>=timer + milliseconds) { timer = current_time; return 0; } const unsigned long time_diff = timer + milliseconds - current_time; timer = current_time + time_diff; cimg::sleep(time_diff); @@ -4208,9 +4373,9 @@ inline void srand() { const unsigned int t = (unsigned int)cimg::time(); #if cimg_OS==1 - cimg::_rand(t+(unsigned int)getpid(),true); + cimg::_rand(t + (unsigned int)getpid(),true); #elif cimg_OS==2 - cimg::_rand(t+(unsigned int)_getpid(),true); + cimg::_rand(t + (unsigned int)_getpid(),true); #else cimg::_rand(t,true); #endif @@ -4220,8 +4385,9 @@ _rand(seed,true); } - inline double rand() { - return cimg::_rand()/16777215.; + inline double rand(const double val_min, const double val_max) { + const double val = cimg::_rand()/16777215.; + return val_min + (val_max - val_min)*val; } #else @@ -4230,9 +4396,9 @@ inline void srand() { const unsigned int t = (unsigned int)cimg::time(); #if cimg_OS==1 - std::srand(t+(unsigned int)getpid()); + std::srand(t + (unsigned int)getpid()); #elif cimg_OS==2 - std::srand(t+(unsigned int)_getpid()); + std::srand(t + (unsigned int)_getpid()); #else std::srand(t); #endif @@ -4242,19 +4408,20 @@ std::srand(seed); } - //! Return a random variable between [0,1] with respect to an uniform distribution. + //! Return a random variable uniformely distributed between [val_min,val_max]. /** **/ - inline double rand() { - return (double)std::rand()/RAND_MAX; + inline double rand(const double val_min, const double val_max) { + const double val = (double)std::rand()/RAND_MAX; + return val_min + (val_max - val_min)*val; } #endif - //! Return a random variable between [-1,1] with respect to an uniform distribution. + //! Return a random variable uniformely distributed between [0,val_max]. /** - **/ - inline double crand() { - return 1-2*cimg::rand(); + **/ + inline double rand(const double val_max=1) { + return cimg::rand(0,val_max); } //! Return a random variable following a gaussian distribution and a standard deviation of 1. @@ -4263,8 +4430,8 @@ inline double grand() { double x1, w; do { - const double x2 = 2*cimg::rand() - 1.0; - x1 = 2*cimg::rand()-1.0; + const double x2 = cimg::rand(-1,1); + x1 = cimg::rand(-1,1); w = x1*x1 + x2*x2; } while (w<=0 || w>=1.0); return x1*std::sqrt((-2*std::log(w))/w); @@ -4279,13 +4446,13 @@ unsigned int k = 0; const double y = std::exp(-z); for (double s = 1.0; s>=y; ++k) s*=cimg::rand(); - return k-1; + return k - 1; } //! Bitwise-rotate value on the left. template inline T rol(const T& a, const unsigned int n=1) { - return n?(T)((a<>((sizeof(T)<<3)-n))):a; + return n?(T)((a<>((sizeof(T)<<3) - n))):a; } inline float rol(const float a, const unsigned int n=1) { @@ -4296,10 +4463,14 @@ return (double)rol((long)a,n); } + inline double rol(const long double a, const unsigned int n=1) { + return (double)rol((long)a,n); + } + //! Bitwise-rotate value on the right. template inline T ror(const T& a, const unsigned int n=1) { - return n?(T)((a>>n)|(a<<((sizeof(T)<<3)-n))):a; + return n?(T)((a>>n)|(a<<((sizeof(T)<<3) - n))):a; } inline float ror(const float a, const unsigned int n=1) { @@ -4310,6 +4481,10 @@ return (double)ror((long)a,n); } + inline double ror(const long double a, const unsigned int n=1) { + return (double)ror((long)a,n); + } + //! Return absolute value of a value. template inline T abs(const T& a) { @@ -4348,7 +4523,7 @@ //! Return 1 + log_10(x) of a value \c x. inline int xln(const int x) { - return x>0?(int)(1+std::log10((double)x)):1; + return x>0?(int)(1 + std::log10((double)x)):1; } //! Return the minimum between two values. @@ -4430,17 +4605,17 @@ #if defined(CHAR_MAX) && CHAR_MAX==255 return x%m; #else - return x>=0?x%m:(x%m?m+x%m:0); + return x>=0?x%m:(x%m?m + x%m:0); #endif } inline int mod(const short x, const short m) { - return x>=0?x%m:(x%m?m+x%m:0); + return x>=0?x%m:(x%m?m + x%m:0); } inline int mod(const int x, const int m) { - return x>=0?x%m:(x%m?m+x%m:0); + return x>=0?x%m:(x%m?m + x%m:0); } inline int mod(const long x, const long m) { - return x>=0?x%m:(x%m?m+x%m:0); + return x>=0?x%m:(x%m?m + x%m:0); } inline int mod(const unsigned char x, const unsigned char m) { return x%m; @@ -4488,20 +4663,21 @@ inline double _pythagore(double a, double b) { const double absa = cimg::abs(a), absb = cimg::abs(b); - if (absa>absb) { const double tmp = absb/absa; return absa*std::sqrt(1.0+tmp*tmp); } - else { const double tmp = absa/absb; return absb==0?0:absb*std::sqrt(1.0+tmp*tmp); } + if (absa>absb) { const double tmp = absb/absa; return absa*std::sqrt(1.0 + tmp*tmp); } + else { const double tmp = absa/absb; return absb==0?0:absb*std::sqrt(1.0 + tmp*tmp); } } - inline bool _is_self_expr(const char *expression) { - if (!expression || *expression=='>' || *expression=='<') return false; - for (const char *s = expression; *s; ++s) - if ((*s=='i' || *s=='j') && (s[1]=='(' || s[1]=='[')) return true; - return false; + //! Return sqrt(x^2 + y^2). + inline double hypot(const double x, const double y) { + double nx = cimg::abs(x), ny = cimg::abs(y), t; + if (nx0) { t/=nx; return nx*std::sqrt(1+t*t); } + return 0; } //! Convert ascii character to lower case. inline char uncase(const char x) { - return (char)((x<'A'||x>'Z')?x:x-'A'+'a'); + return (char)((x<'A'||x>'Z')?x:x - 'A' + 'a'); } //! Convert C-string to lower case. @@ -4518,7 +4694,7 @@ **/ inline double atof(const char *const str) { double x = 0, y = 1; - return str && std::sscanf(str,"%lf/%lf",&x,&y)>0?x/y:0; + return str && cimg_sscanf(str,"%lf/%lf",&x,&y)>0?x/y:0; } //! Compare the first \p l characters of two C-strings, ignoring the case. @@ -4533,7 +4709,7 @@ if (!l) return 0; if (!str1) return str2?-1:0; const char *nstr1 = str1, *nstr2 = str2; - int k, diff = 0; for (k = 0; kp && str[q]==delimiter; ) { --q; if (!is_iterative) break; } + for (q = l - 1; q>p && str[q]==delimiter; ) { --q; if (!is_iterative) break; } } const int n = q - p + 1; - if (n!=l) { std::memmove(str,str+p,(unsigned int)n); str[n] = 0; return true; } + if (n!=l) { std::memmove(str,str + p,(unsigned int)n); str[n] = 0; return true; } return false; } @@ -4597,24 +4818,25 @@ #define cimg_strunescape(ci,co) case ci : *nd = co; ++ns; break; unsigned int val = 0; for (char *ns = str, *nd = str; *ns || (bool)(*nd=0); ++nd) if (*ns=='\\') switch (*(++ns)) { + cimg_strunescape('a','\a'); + cimg_strunescape('b','\b'); + cimg_strunescape('e',0x1B); + cimg_strunescape('f','\f'); cimg_strunescape('n','\n'); + cimg_strunescape('r','\r'); cimg_strunescape('t','\t'); cimg_strunescape('v','\v'); - cimg_strunescape('b','\b'); - cimg_strunescape('r','\r'); - cimg_strunescape('f','\f'); - cimg_strunescape('a','\a'); cimg_strunescape('\\','\\'); - cimg_strunescape('\?','\?'); cimg_strunescape('\'','\''); cimg_strunescape('\"','\"'); + cimg_strunescape('\?','\?'); case 0 : *nd = 0; break; case '0' : case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' : - std::sscanf(ns,"%o",&val); while (*ns>='0' && *ns<='7') ++ns; + cimg_sscanf(ns,"%o",&val); while (*ns>='0' && *ns<='7') ++ns; *nd = (char)val; break; case 'x' : - std::sscanf(++ns,"%x",&val); - while ((*ns>='0' && *ns<='7') || (*ns>='a' && *ns<='f') || (*ns>='A' && *ns<='F')) ++ns; + cimg_sscanf(++ns,"%x",&val); + while ((*ns>='0' && *ns<='9') || (*ns>='a' && *ns<='f') || (*ns>='A' && *ns<='F')) ++ns; *nd = (char)val; break; default : *nd = *(ns++); } else *nd = *(ns++); @@ -4626,20 +4848,20 @@ // Return string that identifies the running OS. inline const char *stros() { #if defined(linux) || defined(__linux) || defined(__linux__) - const char *const str = "Linux"; + static const char *const str = "Linux"; #elif defined(sun) || defined(__sun) - const char *const str = "Sun OS"; + static const char *const str = "Sun OS"; #elif defined(BSD) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined (__DragonFly__) - const char *const str = "BSD"; + static const char *const str = "BSD"; #elif defined(sgi) || defined(__sgi) - const char *const str = "Irix"; + static const char *const str = "Irix"; #elif defined(__MACOSX__) || defined(__APPLE__) - const char *const str = "Mac OS"; + static const char *const str = "Mac OS"; #elif defined(unix) || defined(__unix) || defined(__unix__) - const char *const str = "Generic Unix"; + static const char *const str = "Generic Unix"; #elif defined(_MSC_VER) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || \ defined(WIN64) || defined(_WIN64) || defined(__WIN64__) - const char *const str = "Windows"; + static const char *const str = "Windows"; #else const char *const _str1 = std::getenv("OSTYPE"), @@ -4650,20 +4872,21 @@ } //! Return the basename of a filename. - inline const char* basename(const char *const s) { + inline const char* basename(const char *const s, const char separator=cimg_file_separator) { const char *p = 0, *np = s; - while (np>=s && (p=np)) np = std::strchr(np,cimg_file_separator) + 1; + while (np>=s && (p=np)) np = std::strchr(np,separator) + 1; return p; } // Return a random filename. inline const char* filenamerand() { cimg::mutex(6); - static char randomid[9] = { 0 }; + static char randomid[9]; cimg::srand(); for (unsigned int k = 0; k<8; ++k) { - const int v = (int)std::rand()%3; - randomid[k] = (char)(v==0?('0'+(std::rand()%10)):(v==1?('a'+(std::rand()%26)):('A'+(std::rand()%26)))); + const int v = (int)cimg::rand(65535)%3; + randomid[k] = (char)(v==0?('0' + ((int)cimg::rand(65535)%10)): + (v==1?('a' + ((int)cimg::rand(65535)%26)):('A' + ((int)cimg::rand(65535)%26)))); } cimg::mutex(6,0); return randomid; @@ -4724,7 +4947,7 @@ return errn; } - //! Check if a path is a directory + //! Check if a path is a directory. /** \param path Specified path to test. **/ @@ -4732,52 +4955,125 @@ if (!path || !*path) return false; #if cimg_OS==1 struct stat st_buf; - if (!stat(path,&st_buf) && S_ISDIR(st_buf.st_mode)) return true; + return (!stat(path,&st_buf) && S_ISDIR(st_buf.st_mode)); #elif cimg_OS==2 - return GetFileAttributesA(path)&16; + const unsigned int res = (unsigned int)GetFileAttributesA(path); + return res==INVALID_FILE_ATTRIBUTES?false:(res&16); #endif - return false; } - //! Get/set path to store temporary files. + //! Check if a path is a file. + /** + \param path Specified path to test. + **/ + inline bool is_file(const char *const path) { + if (!path || !*path) return false; + std::FILE *const file = std::fopen(path,"rb"); + if (!file) return false; + std::fclose(file); + return !is_directory(path); + } + + //! Get last write time of a given file or directory. + /** + \param path Specified path to get attributes from. + \param attr Type of requested time attribute. + Can be { 0=year | 1=month | 2=day | 3=day of week | 4=hour | 5=minute | 6=second } + \return -1 if requested attribute could not be read. + **/ + inline int fdate(const char *const path, const unsigned int attr) { + int res = -1; + if (!path || !*path || attr>6) return -1; + cimg::mutex(6); +#if cimg_OS==2 + HANDLE file = CreateFileA(path,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); + if (file!=INVALID_HANDLE_VALUE) { + FILETIME _ft; + SYSTEMTIME ft; + if (GetFileTime(file,0,0,&_ft) && FileTimeToSystemTime(&_ft,&ft)) + res = (int)(attr==0?ft.wYear:attr==1?ft.wMonth:attr==2?ft.wDay:attr==3?ft.wDayOfWeek: + attr==4?ft.wHour:attr==5?ft.wMinute:ft.wSecond); + CloseHandle(file); + } +#else + struct stat st_buf; + if (!stat(path,&st_buf)) { + const time_t _ft = st_buf.st_mtime; + const struct tm& ft = *std::localtime(&_ft); + res = (int)(attr==0?ft.tm_year + 1900:attr==1?ft.tm_mon + 1:attr==2?ft.tm_mday:attr==3?ft.tm_wday: + attr==4?ft.tm_hour:attr==5?ft.tm_min:ft.tm_sec); + } +#endif + cimg::mutex(6,0); + return res; + } + + //! Get current local time. + /** + \param attr Type of requested time attribute. + Can be { 0=year | 1=month | 2=day | 3=day of week | 4=hour | 5=minute | 6=second } + **/ + inline int date(const unsigned int attr) { + int res; + cimg::mutex(6); +#if cimg_OS==2 + SYSTEMTIME st; + GetLocalTime(&st); + res = (int)(attr==0?st.wYear:attr==1?st.wMonth:attr==2?st.wDay:attr==3?st.wDayOfWeek: + attr==4?st.wHour:attr==5?st.wMinute:st.wSecond); +#else + time_t _st; + std::time(&_st); + struct tm *st = std::localtime(&_st); + res = (int)(attr==0?st->tm_year + 1900:attr==1?st->tm_mon + 1:attr==2?st->tm_mday:attr==3?st->tm_wday: + attr==4?st->tm_hour:attr==5?st->tm_min:st->tm_sec); +#endif + cimg::mutex(6,0); + return res; + } + + // Get/set path to store temporary files. inline const char* temporary_path(const char *const user_path=0, const bool reinit_path=false); - //! Get/set path to the Program Files/ directory (Windows only). + // Get/set path to the Program Files/ directory (Windows only). #if cimg_OS==2 inline const char* programfiles_path(const char *const user_path=0, const bool reinit_path=false); #endif - //! Get/set path to the ImageMagick's \c convert binary. + // Get/set path to the ImageMagick's \c convert binary. inline const char* imagemagick_path(const char *const user_path=0, const bool reinit_path=false); - //! Get/set path to the GraphicsMagick's \c gm binary. + // Get/set path to the GraphicsMagick's \c gm binary. inline const char* graphicsmagick_path(const char *const user_path=0, const bool reinit_path=false); - //! Get/set path to the XMedcon's \c medcon binary. + // Get/set path to the XMedcon's \c medcon binary. inline const char* medcon_path(const char *const user_path=0, const bool reinit_path=false); - //! Get/set path to the FFMPEG's \c ffmpeg binary. + // Get/set path to the FFMPEG's \c ffmpeg binary. inline const char *ffmpeg_path(const char *const user_path=0, const bool reinit_path=false); - //! Get/set path to the \c gzip binary. + // Get/set path to the \c gzip binary. inline const char *gzip_path(const char *const user_path=0, const bool reinit_path=false); - //! Get/set path to the \c gunzip binary. + // Get/set path to the \c gunzip binary. inline const char *gunzip_path(const char *const user_path=0, const bool reinit_path=false); - //! Get/set path to the \c dcraw binary. + // Get/set path to the \c dcraw binary. inline const char *dcraw_path(const char *const user_path=0, const bool reinit_path=false); - //! Get/set path to the \c wget binary. + // Get/set path to the \c wget binary. inline const char *wget_path(const char *const user_path=0, const bool reinit_path=false); - //! Get/set path to the \c curl binary. + // Get/set path to the \c curl binary. inline const char *curl_path(const char *const user_path=0, const bool reinit_path=false); //! Split filename into two C-strings \c body and \c extension. + /** + filename and body must not overlap! + **/ inline const char *split_filename(const char *const filename, char *const body=0) { if (!filename) { if (body) *body = 0; return 0; } - const char *p = 0; for (const char *np = filename; np>=filename && (p=np); np = std::strchr(np,'.')+1) {} + const char *p = 0; for (const char *np = filename; np>=filename && (p=np); np = std::strchr(np,'.') + 1) {} if (p==filename) { if (body) std::strcpy(body,filename); return filename + std::strlen(filename); @@ -4792,70 +5088,14 @@ const unsigned int digits, char *const str) { if (!filename) { if (str) *str = 0; return 0; } char *const format = new char[1024], *const body = new char[1024]; - *format = 0; *body = 0; const char *const ext = cimg::split_filename(filename,body); if (*ext) cimg_snprintf(format,1024,"%%s_%%.%ud.%%s",digits); else cimg_snprintf(format,1024,"%%s_%%.%ud",digits); - std::sprintf(str,format,body,number,ext); + cimg_sprintf(str,format,body,number,ext); delete[] format; delete[] body; return str; } - //! Try to guess format from an image file. - /** - \param file Input file (can be \c 0 if \c filename is set). - \param filename Filename, as a C-string (can be \c 0 if \c file is set). - \return C-string containing the guessed file format, or \c 0 if nothing has been guessed. - **/ - inline const char *file_type(std::FILE *const file, const char *const filename) { - if (!file && !filename) - throw CImgArgumentException("cimg::file_type(): Specified filename is (null)."); - static const char - *const _pnm = "pnm", - *const _pfm = "pfm", - *const _bmp = "bmp", - *const _gif = "gif", - *const _jpg = "jpg", - *const _off = "off", - *const _pan = "pan", - *const _png = "png", - *const _tif = "tif", - *const _inr = "inr", - *const _dcm = "dcm"; - std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - const char *f_type = 0, *head; - char *const header = new char[2048]; - *header = 0; - const unsigned char *const uheader = (unsigned char*)header; - int err; char cerr; - const unsigned int siz = (unsigned int)std::fread(header,2048,1,nfile); // Read first 2048 bytes. - if (!file) cimg::fclose(nfile); - - if (!std::strncmp(header,"OFF\n",4)) f_type = _off; // OFF. - else if (!std::strncmp(header,"#INRIMAGE",9)) f_type = _inr; // INRIMAGE. - else if (!std::strncmp(header,"PANDORE",7)) f_type = _pan; // PANDORE. - else if (!std::strncmp(header+128,"DICM",4)) f_type = _dcm; // DICOM. - else if (uheader[0]==0xFF && uheader[1]==0xD8 && uheader[2]==0xFF) f_type = _jpg; // JPEG. - else if (header[0]=='B' && header[1]=='M') f_type = _bmp; // BMP. - else if (header[0]=='G' && header[1]=='I' && header[2]=='F' && header[3]=='8' && header[5]=='a' && // GIF. - (header[4]=='7' || header[4]=='9')) f_type = _gif; - else if (uheader[0]==0x89 && uheader[1]==0x50 && uheader[2]==0x4E && uheader[3]==0x47 && // PNG. - uheader[4]==0x0D && uheader[5]==0x0A && uheader[6]==0x1A && uheader[7]==0x0A) f_type = _png; - else if ((uheader[0]==0x49 && uheader[1]==0x49) || (uheader[0]==0x4D && uheader[1]==0x4D)) f_type = _tif; // TIFF. - else { // PNM or PFM. - char *const item = new char[1024]; - *item = 0; - head = header; - while (head0); @@ -4902,7 +5142,7 @@ unsigned long to_write = nmemb, al_write = 0, l_to_write = 0, l_al_write = 0; do { l_to_write = (to_write*sizeof(T))0); @@ -4919,13 +5159,18 @@ **/ inline void fempty(std::FILE *const file, const char *const filename) { if (!file && !filename) - throw CImgArgumentException("cimg::file_type(): Specified filename is (null)."); + throw CImgArgumentException("cimg::fempty(): Specified filename is (null)."); std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); if (!file) cimg::fclose(nfile); } - //! Load file from network as a local temporary file. - inline char *load_network(const char *const url, char *const filename_local); + // Try to guess format from an image file. + inline const char *ftype(std::FILE *const file, const char *const filename); + + // Load file from network as a local temporary file. + inline char *load_network(const char *const url, char *const filename_local, + const unsigned int timeout=0, const bool try_fallback=false, + const char *const referer=0); //! Return options specified on the command line. inline const char* option(const char *const name, const int argc, const char *const *const argv, @@ -4978,7 +5223,6 @@ const char *const s = cimg::option(name,argc,argv,(char*)0); const int res = s?std::atoi(s):defaut; char *const tmp = new char[256]; - *tmp = 0; cimg_snprintf(tmp,256,"%d",res); cimg::option(name,0,0,tmp,usage); delete[] tmp; @@ -4989,8 +5233,8 @@ const char defaut, const char *const usage=0) { const char *const s = cimg::option(name,argc,argv,(char*)0); const char res = s?*s:defaut; - char tmp[8] = { 0 }; - *tmp = res; + char tmp[8]; + *tmp = res; tmp[1] = 0; cimg::option(name,0,0,tmp,usage); return res; } @@ -5000,7 +5244,6 @@ const char *const s = cimg::option(name,argc,argv,(char*)0); const float res = s?(float)cimg::atof(s):defaut; char *const tmp = new char[256]; - *tmp = 0; cimg_snprintf(tmp,256,"%g",res); cimg::option(name,0,0,tmp,usage); delete[] tmp; @@ -5012,39 +5255,17 @@ const char *const s = cimg::option(name,argc,argv,(char*)0); const double res = s?cimg::atof(s):defaut; char *const tmp = new char[256]; - *tmp = 0; cimg_snprintf(tmp,256,"%g",res); cimg::option(name,0,0,tmp,usage); delete[] tmp; return res; } - inline const char* argument(const unsigned int nb, const int argc, const char *const *const argv, - const unsigned int nb_singles=0, ...) { - for (int k = 1, pos = 0; k Path of ImageMagick: %s%-13s%s\n", cimg::t_bold, @@ -5331,6 +5553,7 @@ _cimg_create_ext_operators(long) _cimg_create_ext_operators(float) _cimg_create_ext_operators(double) + _cimg_create_ext_operators(long double) template inline CImg<_cimg_Tfloat> operator+(const char *const expression, const CImg& img) { @@ -5339,7 +5562,7 @@ template inline CImg<_cimg_Tfloat> operator-(const char *const expression, const CImg& img) { - return CImg<_cimg_Tfloat>(img._width,img._height,img._depth,img._spectrum,expression,true)-=img; + return CImg<_cimg_Tfloat>(img,false).fill(expression,true)-=img; } template @@ -5369,12 +5592,12 @@ template inline bool operator==(const char *const expression, const CImg& img) { - return img == expression; + return img==expression; } template inline bool operator!=(const char *const expression, const CImg& img) { - return img != expression; + return img!=expression; } template @@ -5487,7 +5710,7 @@ # Define the CImgDisplay structure # ----------------------------------*/ - //! Allow to create windows, display images on them and manage user events (keyboard, mouse and windows events). + //! Allow the creation of windows, display images on them and manage user events (keyboard, mouse and windows events). /** CImgDisplay methods rely on a low-level graphic library to perform: it can be either \b X-Window (X11, for Unix-based systems) or \b GDI32 (for Windows-based systems). @@ -5510,9 +5733,9 @@ float _fps_fps, _min, _max; bool _is_fullscreen; char *_title; - volatile unsigned int _window_width, _window_height, _button, _keys[128], _released_keys[128]; - volatile int _window_x, _window_y, _mouse_x, _mouse_y, _wheel; - volatile bool _is_closed, _is_resized, _is_moved, _is_event, + unsigned int _window_width, _window_height, _button, *_keys, *_released_keys; + int _window_x, _window_y, _mouse_x, _mouse_y, _wheel; + bool _is_closed, _is_resized, _is_moved, _is_event, _is_keyESC, _is_keyF1, _is_keyF2, _is_keyF3, _is_keyF4, _is_keyF5, _is_keyF6, _is_keyF7, _is_keyF8, _is_keyF9, _is_keyF10, _is_keyF11, _is_keyF12, _is_keyPAUSE, _is_key1, _is_key2, _is_key3, _is_key4, _is_key5, _is_key6, _is_key7, _is_key8, _is_key9, _is_key0, @@ -5574,6 +5797,8 @@ **/ ~CImgDisplay() { assign(); + delete[] _keys; + delete[] _released_keys; } //! Construct an empty display. @@ -5593,6 +5818,7 @@ _is_fullscreen(false), _title(0), _window_width(0),_window_height(0),_button(0), + _keys(new unsigned int[128]),_released_keys(new unsigned int[128]), _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { assign(); @@ -5616,6 +5842,7 @@ _is_fullscreen(false), _title(0), _window_width(0),_window_height(0),_button(0), + _keys(new unsigned int[128]),_released_keys(new unsigned int[128]), _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { assign(width,height,title,normalization,is_fullscreen,is_closed); @@ -5639,6 +5866,7 @@ _is_fullscreen(false), _title(0), _window_width(0),_window_height(0),_button(0), + _keys(new unsigned int[128]),_released_keys(new unsigned int[128]), _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { assign(img,title,normalization,is_fullscreen,is_closed); @@ -5662,6 +5890,7 @@ _is_fullscreen(false), _title(0), _window_width(0),_window_height(0),_button(0), + _keys(new unsigned int[128]),_released_keys(new unsigned int[128]), _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { assign(list,title,normalization,is_fullscreen,is_closed); @@ -5678,6 +5907,7 @@ _is_fullscreen(false), _title(0), _window_width(0),_window_height(0),_button(0), + _keys(new unsigned int[128]),_released_keys(new unsigned int[128]), _window_x(0),_window_y(0),_mouse_x(-1),_mouse_y(-1),_wheel(0), _is_closed(true),_is_resized(false),_is_moved(false),_is_event(false) { assign(disp); @@ -5754,6 +5984,12 @@ return _empty.assign(); } + //! Return a reference to an empty display \const. + static const CImgDisplay& const_empty() { + static const CImgDisplay _empty; + return _empty; + } + #define cimg_fitscreen(dx,dy,dz) CImgDisplay::_fitscreen(dx,dy,dz,128,-85,false), \ CImgDisplay::_fitscreen(dx,dy,dz,128,-85,true) static unsigned int _fitscreen(const unsigned int dx, const unsigned int dy, const unsigned int dz, @@ -5959,7 +6195,7 @@ } \endcode **/ - volatile bool& is_key(const char *const keycode) { + bool& is_key(const char *const keycode) { static bool f = false; f = false; #define _cimg_iskey_test2(k) if (!cimg::strcasecmp(keycode,#k)) return _is_key##k; @@ -6013,7 +6249,7 @@ if (keycodes_sequence && length) { const unsigned int *const ps_end = keycodes_sequence + length - 1, - *const pk_end = (unsigned int*)_keys + 1 + sizeof(_keys)/sizeof(unsigned int) - length, + *const pk_end = (unsigned int*)_keys + 1 + 128 - length, k = *ps_end; for (unsigned int *pk = (unsigned int*)_keys; pk=1) { _fps_fps = _fps_frames/delta; @@ -6380,10 +6616,15 @@ **/ template CImgDisplay& display(const CImgList& list, const char axis='x', const float align=0) { + if (list._width==1) { + const CImg& img = list[0]; + if (img._depth==1 && (img._spectrum==1 || img._spectrum>=3) && _normalization!=1) return display(img); + } CImgList::ucharT> visu(list._width); cimglist_for(list,l) { const CImg& img = list._data[l]; - img.__get_select(*this,_normalization,(img._width-1)/2,(img._height-1)/2,(img._depth-1)/2).move_to(visu[l]); + img.__get_select(*this,_normalization,(img._width - 1)/2,(img._height - 1)/2, + (img._depth - 1)/2).move_to(visu[l]); } visu.get_append(axis,align).display(*this); return *this; @@ -6485,7 +6726,7 @@ template static void _render_resize(const T *ptrs, const unsigned int ws, const unsigned int hs, t *ptrd, const unsigned int wd, const unsigned int hd) { - unsigned int *const offx = new unsigned int[wd], *const offy = new unsigned int[hd+1], *poffx, *poffy; + unsigned int *const offx = new unsigned int[wd], *const offy = new unsigned int[hd + 1], *poffx, *poffy; float s, curr, old; s = (float)ws/wd; poffx = offx; curr = 0; for (unsigned int x = 0; x tmp; - const CImg& nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width-1)/2, - (img._height-1)/2, - (img._depth-1)/2)); + const CImg& nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width - 1)/2, + (img._height - 1)/2, + (img._depth - 1)/2)); _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); if (_normalization==2) _min = (float)nimg.min_max(_max); return render(nimg).paint(); @@ -7551,9 +7792,9 @@ const bool fullscreen_flag=false, const bool closed_flag=false) { if (!list) return assign(); CImg tmp; - const CImg img = list>'x', &nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width-1)/2, - (img._height-1)/2, - (img._depth-1)/2)); + const CImg img = list>'x', &nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width - 1)/2, + (img._height - 1)/2, + (img._depth - 1)/2)); _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); if (_normalization==2) _min = (float)nimg.min_max(_max); return render(nimg).paint(); @@ -7577,25 +7818,28 @@ tmpdimy = (nheight>0)?nheight:(-nheight*height()/100), dimx = tmpdimx?tmpdimx:1, dimy = tmpdimy?tmpdimy:1; - cimg_lock_display(); - if (_window_width!=dimx || _window_height!=dimy) { - XWindowAttributes attr; - for (unsigned int i = 0; i<10; ++i) { - XResizeWindow(dpy,_window,dimx,dimy); - XGetWindowAttributes(dpy,_window,&attr); - if (attr.width==(int)dimx && attr.height==(int)dimy) break; - cimg::wait(5); + if (_width!=dimx || _height!=dimy || _window_width!=dimx || _window_height!=dimy) { + show(); + cimg_lock_display(); + if (_window_width!=dimx || _window_height!=dimy) { + XWindowAttributes attr; + for (unsigned int i = 0; i<10; ++i) { + XResizeWindow(dpy,_window,dimx,dimy); + XGetWindowAttributes(dpy,_window,&attr); + if (attr.width==(int)dimx && attr.height==(int)dimy) break; + cimg::wait(5); + } } + if (_width!=dimx || _height!=dimy) switch (cimg::X11_attr().nb_bits) { + case 8 : { unsigned char pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } break; + case 16 : { unsigned short pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } break; + default : { unsigned int pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } + } + _window_width = _width = dimx; _window_height = _height = dimy; + cimg_unlock_display(); } - if (_width!=dimx || _height!=dimy) switch (cimg::X11_attr().nb_bits) { - case 8 : { unsigned char pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } break; - case 16 : { unsigned short pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } break; - default : { unsigned int pixel_type = 0; _resize(pixel_type,dimx,dimy,force_redraw); } - } - _window_width = _width = dimx; _window_height = _height = dimy; _is_resized = false; - cimg_unlock_display(); - if (_is_fullscreen) move((screen_width()-_width)/2,(screen_height()-_height)/2); + if (_is_fullscreen) move((screen_width() - _width)/2,(screen_height() - _height)/2); if (force_redraw) return paint(); return *this; } @@ -7639,13 +7883,15 @@ CImgDisplay& move(const int posx, const int posy) { if (is_empty()) return *this; - show(); - Display *const dpy = cimg::X11_attr().display; - cimg_lock_display(); - XMoveWindow(dpy,_window,posx,posy); - _window_x = posx; _window_y = posy; + if (_window_x!=posx || _window_y!=posy) { + show(); + Display *const dpy = cimg::X11_attr().display; + cimg_lock_display(); + XMoveWindow(dpy,_window,posx,posy); + _window_x = posx; _window_y = posy; + cimg_unlock_display(); + } _is_moved = false; - cimg_unlock_display(); return paint(); } @@ -7662,7 +7908,7 @@ if (is_empty()) return *this; Display *const dpy = cimg::X11_attr().display; cimg_lock_display(); - const char pix_data[8] = { 0 }; + static const char pix_data[8] = { 0 }; XColor col; col.red = col.green = col.blue = 0; Pixmap pix = XCreateBitmapFromData(dpy,_window,pix_data,8,8); @@ -7687,14 +7933,14 @@ CImgDisplay& set_title(const char *const format, ...) { if (is_empty()) return *this; - char *const tmp = new char[1024]; *tmp = 0; + char *const tmp = new char[1024]; va_list ap; va_start(ap, format); cimg_vsnprintf(tmp,1024,format,ap); va_end(ap); if (!std::strcmp(_title,tmp)) { delete[] tmp; return *this; } delete[] _title; - const unsigned int s = std::strlen(tmp) + 1; + const unsigned int s = (unsigned int)std::strlen(tmp) + 1; _title = new char[s]; std::memcpy(_title,tmp,s*sizeof(char)); Display *const dpy = cimg::X11_attr().display; @@ -7730,7 +7976,8 @@ "render(): Empty specified image.", cimgdisplay_instance); if (is_empty()) return *this; - if (img._depth!=1) return render(img.get_projections2d((img._width-1)/2,(img._height-1)/2,(img._depth-1)/2)); + if (img._depth!=1) return render(img.get_projections2d((img._width - 1)/2,(img._height - 1)/2, + (img._depth - 1)/2)); if (cimg::X11_attr().nb_bits==8 && (img._width!=_width || img._height!=_height)) return render(img.get_resize(_width,_height,1,-100,1)); if (cimg::X11_attr().nb_bits==8 && !flag8 && img._spectrum==3) { @@ -7921,21 +8168,21 @@ unsigned char *ptrd = (unsigned char*)ndata; switch (img._spectrum) { case 1 : for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char R = (unsigned char)((*(data1++)-_min)*mm); + const unsigned char R = (unsigned char)((*(data1++) - _min)*mm); *(ptrd++) = R; } break; case 2 : for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { const unsigned char - R = (unsigned char)((*(data1++)-_min)*mm), - G = (unsigned char)((*(data2++)-_min)*mm); + R = (unsigned char)((*(data1++) - _min)*mm), + G = (unsigned char)((*(data2++) - _min)*mm); (*ptrd++) = (R&0xf0) | (G>>4); } break; default : for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { const unsigned char - R = (unsigned char)((*(data1++)-_min)*mm), - G = (unsigned char)((*(data2++)-_min)*mm), - B = (unsigned char)((*(data3++)-_min)*mm); + R = (unsigned char)((*(data1++) - _min)*mm), + G = (unsigned char)((*(data2++) - _min)*mm), + B = (unsigned char)((*(data3++) - _min)*mm); *(ptrd++) = (R&0xe0) | ((G>>5)<<2) | (B>>6); } } @@ -7953,11 +8200,11 @@ case 1 : if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm), G = val>>2; + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm), G = val>>2; *(ptrd++) = (val&M) | (G>>3); *(ptrd++) = (G<<5) | (val>>3); } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm), G = val>>2; + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm), G = val>>2; *(ptrd++) = (G<<5) | (val>>3); *(ptrd++) = (val&M) | (G>>3); } @@ -7965,25 +8212,25 @@ case 2 : if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char G = (unsigned char)((*(data2++)-_min)*mm)>>2; - *(ptrd++) = ((unsigned char)((*(data1++)-_min)*mm)&M) | (G>>3); + const unsigned char G = (unsigned char)((*(data2++) - _min)*mm)>>2; + *(ptrd++) = ((unsigned char)((*(data1++) - _min)*mm)&M) | (G>>3); *(ptrd++) = (G<<5); } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char G = (unsigned char)((*(data2++)-_min)*mm)>>2; + const unsigned char G = (unsigned char)((*(data2++) - _min)*mm)>>2; *(ptrd++) = (G<<5); - *(ptrd++) = ((unsigned char)((*(data1++)-_min)*mm)&M) | (G>>3); + *(ptrd++) = ((unsigned char)((*(data1++) - _min)*mm)&M) | (G>>3); } break; default : if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char G = (unsigned char)((*(data2++)-_min)*mm)>>2; - *(ptrd++) = ((unsigned char)((*(data1++)-_min)*mm)&M) | (G>>3); - *(ptrd++) = (G<<5) | ((unsigned char)((*(data3++)-_min)*mm)>>3); + const unsigned char G = (unsigned char)((*(data2++) - _min)*mm)>>2; + *(ptrd++) = ((unsigned char)((*(data1++) - _min)*mm)&M) | (G>>3); + *(ptrd++) = (G<<5) | ((unsigned char)((*(data3++) - _min)*mm)>>3); } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char G = (unsigned char)((*(data2++)-_min)*mm)>>2; - *(ptrd++) = (G<<5) | ((unsigned char)((*(data3++)-_min)*mm)>>3); - *(ptrd++) = ((unsigned char)((*(data1++)-_min)*mm)&M) | (G>>3); + const unsigned char G = (unsigned char)((*(data2++) - _min)*mm)>>2; + *(ptrd++) = (G<<5) | ((unsigned char)((*(data3++) - _min)*mm)>>3); + *(ptrd++) = ((unsigned char)((*(data1++) - _min)*mm)&M) | (G>>3); } } if (ndata!=_data) { @@ -8000,12 +8247,12 @@ case 1 : if (cimg::X11_attr().byte_order==cimg::endianness()) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm); *(ptrd++) = (val<<16) | (val<<8) | val; } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm); *(ptrd++) = (val<<24) | (val<<16) | (val<<8); } break; @@ -8013,27 +8260,27 @@ if (cimg::X11_attr().byte_order==cimg::endianness()) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) *(ptrd++) = - ((unsigned char)((*(data1++)-_min)*mm)<<16) | - ((unsigned char)((*(data2++)-_min)*mm)<<8); + ((unsigned char)((*(data1++) - _min)*mm)<<16) | + ((unsigned char)((*(data2++) - _min)*mm)<<8); else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) *(ptrd++) = - ((unsigned char)((*(data2++)-_min)*mm)<<16) | - ((unsigned char)((*(data1++)-_min)*mm)<<8); + ((unsigned char)((*(data2++) - _min)*mm)<<16) | + ((unsigned char)((*(data1++) - _min)*mm)<<8); break; default : if (cimg::X11_attr().byte_order==cimg::endianness()) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) *(ptrd++) = - ((unsigned char)((*(data1++)-_min)*mm)<<16) | - ((unsigned char)((*(data2++)-_min)*mm)<<8) | - (unsigned char)((*(data3++)-_min)*mm); + ((unsigned char)((*(data1++) - _min)*mm)<<16) | + ((unsigned char)((*(data2++) - _min)*mm)<<8) | + (unsigned char)((*(data3++) - _min)*mm); else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) *(ptrd++) = - ((unsigned char)((*(data3++)-_min)*mm)<<24) | - ((unsigned char)((*(data2++)-_min)*mm)<<16) | - ((unsigned char)((*(data1++)-_min)*mm)<<8); + ((unsigned char)((*(data3++) - _min)*mm)<<24) | + ((unsigned char)((*(data2++) - _min)*mm)<<16) | + ((unsigned char)((*(data1++) - _min)*mm)<<8); } } else { unsigned char *ptrd = (unsigned char*)ndata; @@ -8041,13 +8288,13 @@ case 1 : if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm); (*ptrd++) = 0; (*ptrd++) = val; (*ptrd++) = val; (*ptrd++) = val; } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm); (*ptrd++) = val; (*ptrd++) = val; (*ptrd++) = val; @@ -8058,8 +8305,8 @@ if (cimg::X11_attr().byte_order) cimg::swap(data1,data2); for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { (*ptrd++) = 0; - (*ptrd++) = (unsigned char)((*(data2++)-_min)*mm); - (*ptrd++) = (unsigned char)((*(data1++)-_min)*mm); + (*ptrd++) = (unsigned char)((*(data2++) - _min)*mm); + (*ptrd++) = (unsigned char)((*(data1++) - _min)*mm); (*ptrd++) = 0; } break; @@ -8067,13 +8314,13 @@ if (cimg::X11_attr().byte_order) for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { (*ptrd++) = 0; - (*ptrd++) = (unsigned char)((*(data1++)-_min)*mm); - (*ptrd++) = (unsigned char)((*(data2++)-_min)*mm); - (*ptrd++) = (unsigned char)((*(data3++)-_min)*mm); + (*ptrd++) = (unsigned char)((*(data1++) - _min)*mm); + (*ptrd++) = (unsigned char)((*(data2++) - _min)*mm); + (*ptrd++) = (unsigned char)((*(data3++) - _min)*mm); } else for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - (*ptrd++) = (unsigned char)((*(data3++)-_min)*mm); - (*ptrd++) = (unsigned char)((*(data2++)-_min)*mm); - (*ptrd++) = (unsigned char)((*(data1++)-_min)*mm); + (*ptrd++) = (unsigned char)((*(data3++) - _min)*mm); + (*ptrd++) = (unsigned char)((*(data2++) - _min)*mm); + (*ptrd++) = (unsigned char)((*(data1++) - _min)*mm); (*ptrd++) = 0; } } @@ -8215,7 +8462,12 @@ } break; case WM_PAINT : disp->paint(); - if (disp->_is_cursor_visible) while (ShowCursor(TRUE)<0); else while (ShowCursor(FALSE)>=0); + cimg::mutex(15); + if (disp->_is_cursor_visible) while (ShowCursor(TRUE)<0); else while (ShowCursor(FALSE)>=0); + cimg::mutex(15,0); + break; + case WM_ERASEBKGND : + // return 0; break; case WM_KEYDOWN : disp->set_key((unsigned int)wParam); @@ -8242,12 +8494,16 @@ disp->_mouse_x = disp->_mouse_y = -1; disp->_is_event = true; SetEvent(cimg::Win32_attr().wait_event); + cimg::mutex(15); if (disp->_is_cursor_visible) while (ShowCursor(TRUE)<0); else while (ShowCursor(FALSE)>=0); + cimg::mutex(15,0); } break; case WM_MOUSELEAVE : { disp->_mouse_x = disp->_mouse_y = -1; disp->_is_mouse_tracked = false; + cimg::mutex(15); while (ShowCursor(TRUE)<0); + cimg::mutex(15,0); } break; case WM_LBUTTONDOWN : disp->set_button(1); @@ -8299,7 +8555,7 @@ disp->_data = new unsigned int[(unsigned long)disp->_width*disp->_height]; if (!disp->_is_fullscreen) { // Normal window RECT rect; - rect.left = rect.top = 0; rect.right = (LONG)disp->_width-1; rect.bottom = (LONG)disp->_height-1; + rect.left = rect.top = 0; rect.right = (LONG)disp->_width - 1; rect.bottom = (LONG)disp->_height - 1; AdjustWindowRect(&rect,WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,false); const int border1 = (int)((rect.right - rect.left + 1 - disp->_width)/2), @@ -8318,8 +8574,9 @@ sx = (unsigned int)screen_width(), sy = (unsigned int)screen_height(); disp->_window = CreateWindowA("MDICLIENT",title?title:" ", - WS_POPUP | (disp->_is_closed?0:WS_VISIBLE), (sx-disp->_width)/2, - (sy-disp->_height)/2, + WS_POPUP | (disp->_is_closed?0:WS_VISIBLE), + (sx - disp->_width)/2, + (sy - disp->_height)/2, disp->_width,disp->_height,0,0,0,&(disp->_ccs)); disp->_window_x = disp->_window_y = 0; } @@ -8468,9 +8725,9 @@ const bool fullscreen_flag=false, const bool closed_flag=false) { if (!img) return assign(); CImg tmp; - const CImg& nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width-1)/2, - (img._height-1)/2, - (img._depth-1)/2)); + const CImg& nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width - 1)/2, + (img._height - 1)/2, + (img._depth - 1)/2)); _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); if (_normalization==2) _min = (float)nimg.min_max(_max); return display(nimg); @@ -8482,9 +8739,9 @@ const bool fullscreen_flag=false, const bool closed_flag=false) { if (!list) return assign(); CImg tmp; - const CImg img = list>'x', &nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width-1)/2, - (img._height-1)/2, - (img._depth-1)/2)); + const CImg img = list>'x', &nimg = (img._depth==1)?img:(tmp=img.get_projections2d((img._width - 1)/2, + (img._height - 1)/2, + (img._depth - 1)/2)); _assign(nimg._width,nimg._height,title,normalization_type,fullscreen_flag,closed_flag); if (_normalization==2) _min = (float)nimg.min_max(_max); return display(nimg); @@ -8505,26 +8762,29 @@ tmpdimy = (nheight>0)?nheight:(-nheight*_height/100), dimx = tmpdimx?tmpdimx:1, dimy = tmpdimy?tmpdimy:1; - if (_window_width!=dimx || _window_height!=dimy) { - RECT rect; rect.left = rect.top = 0; rect.right = (LONG)dimx - 1; rect.bottom = (LONG)dimy - 1; - AdjustWindowRect(&rect,WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,false); - const int cwidth = rect.right - rect.left + 1, cheight = rect.bottom - rect.top + 1; - SetWindowPos(_window,0,0,0,cwidth,cheight,SWP_NOMOVE | SWP_NOZORDER | SWP_NOCOPYBITS); - } - if (_width!=dimx || _height!=dimy) { - unsigned int *const ndata = new unsigned int[dimx*dimy]; - if (force_redraw) _render_resize(_data,_width,_height,ndata,dimx,dimy); - else std::memset(ndata,0x80,sizeof(unsigned int)*dimx*dimy); - delete[] _data; - _data = ndata; - _bmi.bmiHeader.biWidth = (LONG)dimx; - _bmi.bmiHeader.biHeight = -(int)dimy; - _width = dimx; - _height = dimy; + if (_width!=dimx || _height!=dimy || _window_width!=dimx || _window_height!=dimy) { + if (_window_width!=dimx || _window_height!=dimy) { + RECT rect; rect.left = rect.top = 0; rect.right = (LONG)dimx - 1; rect.bottom = (LONG)dimy - 1; + AdjustWindowRect(&rect,WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,false); + const int cwidth = rect.right - rect.left + 1, cheight = rect.bottom - rect.top + 1; + SetWindowPos(_window,0,0,0,cwidth,cheight,SWP_NOMOVE | SWP_NOZORDER | SWP_NOCOPYBITS); + } + if (_width!=dimx || _height!=dimy) { + unsigned int *const ndata = new unsigned int[dimx*dimy]; + if (force_redraw) _render_resize(_data,_width,_height,ndata,dimx,dimy); + else std::memset(ndata,0x80,sizeof(unsigned int)*dimx*dimy); + delete[] _data; + _data = ndata; + _bmi.bmiHeader.biWidth = (LONG)dimx; + _bmi.bmiHeader.biHeight = -(int)dimy; + _width = dimx; + _height = dimy; + } + _window_width = dimx; _window_height = dimy; + show(); } - _window_width = dimx; _window_height = dimy; _is_resized = false; - if (_is_fullscreen) move((screen_width()-width())/2,(screen_height()-height())/2); + if (_is_fullscreen) move((screen_width() - width())/2,(screen_height() - height())/2); if (force_redraw) return paint(); return *this; } @@ -8565,18 +8825,22 @@ CImgDisplay& move(const int posx, const int posy) { if (is_empty()) return *this; - if (!_is_fullscreen) { - RECT rect; rect.left = rect.top = 0; rect.right = (LONG)_window_width-1; rect.bottom = (LONG)_window_height-1; - AdjustWindowRect(&rect,WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,false); - const int - border1 = (int)((rect.right-rect.left+1-_width)/2), - border2 = (int)(rect.bottom-rect.top+1-_height-border1); - SetWindowPos(_window,0,posx-border1,posy-border2,0,0,SWP_NOSIZE | SWP_NOZORDER); - } else SetWindowPos(_window,0,posx,posy,0,0,SWP_NOSIZE | SWP_NOZORDER); - _window_x = posx; - _window_y = posy; + if (_window_x!=posx || _window_y!=posy) { + if (!_is_fullscreen) { + RECT rect; + rect.left = rect.top = 0; rect.right = (LONG)_window_width - 1; rect.bottom = (LONG)_window_height - 1; + AdjustWindowRect(&rect,WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,false); + const int + border1 = (int)((rect.right - rect.left + 1 -_width)/2), + border2 = (int)(rect.bottom - rect.top + 1 - _height - border1); + SetWindowPos(_window,0,posx - border1,posy - border2,0,0,SWP_NOSIZE | SWP_NOZORDER); + } else SetWindowPos(_window,0,posx,posy,0,0,SWP_NOSIZE | SWP_NOZORDER); + _window_x = posx; + _window_y = posy; + show(); + } _is_moved = false; - return show(); + return *this; } CImgDisplay& show_mouse() { @@ -8592,7 +8856,7 @@ } CImgDisplay& set_mouse(const int posx, const int posy) { - if (_is_closed || posx<0 || posy<0) return *this; + if (is_empty() || _is_closed || posx<0 || posy<0) return *this; _update_window_pos(); const int res = (int)SetCursorPos(_window_x + posx,_window_y + posy); if (res) { _mouse_x = posx; _mouse_y = posy; } @@ -8601,7 +8865,7 @@ CImgDisplay& set_title(const char *const format, ...) { if (is_empty()) return *this; - char *const tmp = new char[1024]; *tmp = 0; + char *const tmp = new char[1024]; va_list ap; va_start(ap, format); cimg_vsnprintf(tmp,1024,format,ap); @@ -8642,7 +8906,8 @@ cimgdisplay_instance); if (is_empty()) return *this; - if (img._depth!=1) return render(img.get_projections2d((img._width-1)/2,(img._height-1)/2,(img._depth-1)/2)); + if (img._depth!=1) return render(img.get_projections2d((img._width - 1)/2,(img._height - 1)/2, + (img._depth - 1)/2)); const T *data1 = img._data, @@ -8691,24 +8956,24 @@ switch (img._spectrum) { case 1 : { for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { - const unsigned char val = (unsigned char)((*(data1++)-_min)*mm); + const unsigned char val = (unsigned char)((*(data1++) - _min)*mm); *(ptrd++) = (unsigned int)((val<<16) | (val<<8) | val); } } break; case 2 : { for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { const unsigned char - R = (unsigned char)((*(data1++)-_min)*mm), - G = (unsigned char)((*(data2++)-_min)*mm); + R = (unsigned char)((*(data1++) - _min)*mm), + G = (unsigned char)((*(data2++) - _min)*mm); *(ptrd++) = (unsigned int)((R<<16) | (G<<8)); } } break; default : { for (unsigned long xy = (unsigned long)img._width*img._height; xy>0; --xy) { const unsigned char - R = (unsigned char)((*(data1++)-_min)*mm), - G = (unsigned char)((*(data2++)-_min)*mm), - B = (unsigned char)((*(data3++)-_min)*mm); + R = (unsigned char)((*(data1++) - _min)*mm), + G = (unsigned char)((*(data2++) - _min)*mm), + B = (unsigned char)((*(data3++) - _min)*mm); *(ptrd++) = (unsigned int)((R<<16) | (G<<8) | B); } } @@ -8831,10 +9096,8 @@ - Construct images from C-style arrays: - CImg img(data_buffer,256,256); constructs a 256x256 greyscale image from a \c int* buffer \c data_buffer (of size 256x256=65536). - - CImg img(data_buffer,256,256,1,3,false); constructs a 256x256 color image + - CImg img(data_buffer,256,256,1,3); constructs a 256x256 color image from a \c unsigned \c char* buffer \c data_buffer (where R,G,B channels follow each others). - - CImg img(data_buffer,256,256,1,3,true); constructs a 256x256 color image - from a \c unsigned \c char* buffer \c data_buffer (where R,G,B channels are multiplexed). The complete list of constructors can be found here. @@ -8843,7 +9106,7 @@ The \c CImg class contains a lot of functions that operates on images. Some of the most useful are: - - operator()(): allows to access or write pixel values. + - operator()(): Read or write pixel values. - display(): displays the image in a new window. **/ template @@ -8917,6 +9180,11 @@ typedef typename cimg::last::type longT; typedef typename cimg::last::type floatT; typedef typename cimg::last::type doubleT; +#if cimg_OS==2 + typedef typename cimg::last::type uptrT; // Unsigned integer type that can store a pointer. +#else + typedef typename cimg::last::type uptrT; +#endif //@} //--------------------------- @@ -9105,7 +9373,7 @@ *(ptrd++) = (T)a0; \ if (_siz--) { \ *(ptrd++) = (T)a1; \ - for (; _siz; --_siz) *(ptrd++) = (T)va_arg(ap,t); \ + for ( ; _siz; --_siz) *(ptrd++) = (T)va_arg(ap,t); \ } \ va_end(ap); \ } \ @@ -9114,7 +9382,7 @@ _CImg_stdarg(*this,value0,value1,(unsigned long)size_x*size_y*size_z*size_c,int); } -#ifdef cimg_use_cpp11 +#if defined(cimg_use_cpp11) && cimg_use_cpp11!=0 //! Construct image with specified size and initialize pixel values from an initializer list of integers. /** Construct a new image instance of size \c size_x x \c size_y x \c size_z x \c size_c, @@ -9363,7 +9631,8 @@ cimg::strbuffersize(sizeof(T)*size_x*size_y*size_z*size_c), size_x,size_y,size_z,size_c); } - std::memcpy(_data,values,siz*sizeof(T)); } + std::memcpy(_data,values,siz*sizeof(T)); + } } else { _width = _height = _depth = _spectrum = 0; _is_shared = false; _data = 0; } } @@ -9569,7 +9838,7 @@ // Constructor and assignment operator for rvalue references (c++11). // This avoids an additional image copy for methods returning new images. Can save RAM for big images ! -#ifdef cimg_use_cpp11 +#if defined(cimg_use_cpp11) && cimg_use_cpp11!=0 CImg(CImg&& img):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) { swap(img); } @@ -9685,7 +9954,7 @@ if (!values || !siz) return assign(); const unsigned long curr_siz = size(); if (values==_data && siz==curr_siz) return assign(size_x,size_y,size_z,size_c); - if (_is_shared || values+siz<_data || values>=_data+size()) { + if (_is_shared || values + siz<_data || values>=_data + size()) { assign(size_x,size_y,size_z,size_c); if (_is_shared) std::memmove(_data,values,siz*sizeof(T)); else std::memcpy(_data,values,siz*sizeof(T)); @@ -9726,7 +9995,7 @@ if (!is_shared) { if (_is_shared) assign(); assign(values,size_x,size_y,size_z,size_c); } else { if (!_is_shared) { - if (values+siz<_data || values>=_data+size()) assign(); + if (values + siz<_data || values>=_data + size()) assign(); else cimg::warn(_cimg_instance "assign(): Shared image instance has overlapping memory.", cimg_instance); @@ -9771,12 +10040,12 @@ CImg& assign(const CImg& img, const char *const dimensions) { if (!dimensions || !*dimensions) return assign(img._width,img._height,img._depth,img._spectrum); unsigned int siz[4] = { 0,1,1,1 }, k = 0; + CImg item(256); for (const char *s = dimensions; *s && k<4; ++k) { - CImg item(256); *item = 0; - if (std::sscanf(s,"%255[^0-9%xyzvwhdcXYZVWHDC]",item._data)>0) s+=std::strlen(item); + if (cimg_sscanf(s,"%255[^0-9%xyzvwhdcXYZVWHDC]",item._data)>0) s+=std::strlen(item); if (*s) { unsigned int val = 0; char sep = 0; - if (std::sscanf(s,"%u%c",&val,&sep)>0) { + if (cimg_sscanf(s,"%u%c",&val,&sep)>0) { if (sep=='%') siz[k] = val*(k==0?_width:k==1?_height:k==2?_depth:_spectrum)/100; else siz[k] = val; while (*s>='0' && *s<='9') ++s; if (sep=='%') ++s; @@ -9894,10 +10163,7 @@ \endcode **/ CImg& swap(CImg& img) { - cimg::swap(_width,img._width); - cimg::swap(_height,img._height); - cimg::swap(_depth,img._depth); - cimg::swap(_spectrum,img._spectrum); + cimg::swap(_width,img._width,_height,img._height,_depth,img._depth,_spectrum,img._spectrum); cimg::swap(_data,img._data); cimg::swap(_is_shared,img._is_shared); return img; @@ -9917,6 +10183,12 @@ return _empty.assign(); } + //! Return a reference to an empty image \const. + static const CImg& const_empty() { + static const CImg _empty; + return _empty; + } + //@} //------------------------------------------ // @@ -9935,7 +10207,7 @@ \param c C-coordinate of the pixel value. \note - Range of pixel coordinates start from (0,0,0,0) to - (width()-1,height()-1,depth()-1,spectrum()-1). + (width() - 1,height() - 1,depth() - 1,spectrum() - 1). - Due to the particular arrangement of the pixel buffers defined in %CImg, you can omit one coordinate if the corresponding dimension is equal to \c 1. For instance, pixels of a 2d image (depth() equal to \c 1) can be accessed by img(x,y,c) instead of @@ -9963,9 +10235,9 @@ const unsigned long off = (unsigned long)offset(x,y,z,c); if (!_data || off>=size()) { cimg::warn(_cimg_instance - "operator(): Invalid pixel request, at coordinates (%u,%u,%u,%u) [offset=%u].", + "operator(): Invalid pixel request, at coordinates (%d,%d,%d,%d) [offset=%u].", cimg_instance, - x,y,z,c,off); + (int)x,(int)y,(int)z,(int)c,off); return *_data; } else return _data[off]; @@ -10131,7 +10403,7 @@ const unsigned int omode = cimg::exception_mode(); cimg::exception_mode(0); try { - fill(expression,true); + _fill(expression,true,true,0,0,"operator=",0); } catch (CImgException&) { cimg::exception_mode(omode); load(expression); @@ -10194,7 +10466,7 @@ CImg& operator+=(const t value) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=524288) +#pragma omp parallel for cimg_openmp_if (size()>=524288) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)(*ptrd + value); return *this; @@ -10209,37 +10481,7 @@ instead of assigning them. **/ CImg& operator+=(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator+="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd + mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd + mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)(*ptrd + lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd + mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - cimg::exception_mode(omode); - *this+=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode(omode); - return *this; + return *this+=(+*this)._fill(expression,true,true,0,0,"operator+=",this); } //! In-place addition operator. @@ -10285,7 +10527,7 @@ CImg& operator++() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=524288) +#pragma omp parallel for cimg_openmp_if (size()>=524288) #endif cimg_rof(*this,ptrd,T) ++*ptrd; return *this; @@ -10354,7 +10596,7 @@ CImg& operator-=(const t value) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=524288) +#pragma omp parallel for cimg_openmp_if (size()>=524288) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)(*ptrd - value); return *this; @@ -10365,37 +10607,7 @@ Similar to operator+=(const char*), except that it performs a substraction instead of an addition. **/ CImg& operator-=(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator-="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd - mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd - mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)(*ptrd - lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd - mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - cimg::exception_mode(omode); - *this-=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode(omode); - return *this; + return *this-=(+*this)._fill(expression,true,true,0,0,"operator-=",this); } //! In-place substraction operator. @@ -10423,9 +10635,9 @@ CImg& operator--() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=524288) +#pragma omp parallel for cimg_openmp_if (size()>=524288) #endif - cimg_rof(*this,ptrd,T) *ptrd = *ptrd-(T)1; + cimg_rof(*this,ptrd,T) *ptrd = *ptrd - (T)1; return *this; } @@ -10494,7 +10706,7 @@ CImg& operator*=(const t value) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=262144) +#pragma omp parallel for cimg_openmp_if (size()>=262144) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)(*ptrd * value); return *this; @@ -10505,37 +10717,7 @@ Similar to operator+=(const char*), except that it performs a multiplication instead of an addition. **/ CImg& operator*=(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator*="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd * mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd * mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)(*ptrd * lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd * mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - cimg::exception_mode(omode); - mul(CImg(_width,_height,_depth,_spectrum,expression,true)); - } - cimg::exception_mode(omode); - return *this; + return mul((+*this)._fill(expression,true,true,0,0,"operator*=",this)); } //! In-place multiplication operator. @@ -10594,7 +10776,7 @@ img._width,img._height,img._depth,img._spectrum,img._data); CImg<_cimg_Tt> res(img._width,_height); #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>1024 && img.size()>1024) collapse(2) +#pragma omp parallel for collapse(2) cimg_openmp_if (size()>1024 && img.size()>1024) cimg_forXY(res,i,j) { _cimg_Ttdouble value = 0; cimg_forX(*this,k) value+=(*this)(k,j)*img(i,k); res(i,j) = (_cimg_Tt)value; } @@ -10615,7 +10797,7 @@ CImg& operator/=(const t value) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)(*ptrd / value); return *this; @@ -10626,37 +10808,7 @@ Similar to operator+=(const char*), except that it performs a division instead of an addition. **/ CImg& operator/=(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator/="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd / mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd / mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)(*ptrd / lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)(*ptrd / mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - cimg::exception_mode(omode); - div(CImg(_width,_height,_depth,_spectrum,expression,true)); - } - cimg::exception_mode(omode); - return *this; + return div((+*this)._fill(expression,true,true,0,0,"operator/=",this)); } //! In-place division operator. @@ -10712,7 +10864,7 @@ CImg& operator%=(const t value) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=16384) +#pragma omp parallel for cimg_openmp_if (size()>=16384) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)cimg::mod(*ptrd,(T)value); return *this; @@ -10723,37 +10875,7 @@ Similar to operator+=(const char*), except that it performs a modulo operation instead of an addition. **/ CImg& operator%=(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator%="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::mod(*ptrd,(T)mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::mod(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)cimg::mod(*ptrd,(T)lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::mod(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - cimg::exception_mode(omode); - *this%=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode(omode); - return *this; + return *this%=(+*this)._fill(expression,true,true,0,0,"operator%=",this); } //! In-place modulo operator. @@ -10811,7 +10933,7 @@ CImg& operator&=(const t value) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)((unsigned long)*ptrd & (unsigned long)value); return *this; @@ -10822,39 +10944,7 @@ Similar to operator+=(const char*), except that it performs a bitwise AND operation instead of an addition. **/ CImg& operator&=(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator&="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') - cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd & (unsigned long)mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - cimg::exception_mode(omode); - *this&=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode(omode); - return *this; + return *this&=(+*this)._fill(expression,true,true,0,0,"operator&=",this); } //! In-place bitwise AND operator. @@ -10912,7 +11002,7 @@ CImg& operator|=(const t value) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)((unsigned long)*ptrd | (unsigned long)value); return *this; @@ -10923,39 +11013,7 @@ Similar to operator+=(const char*), except that it performs a bitwise OR operation instead of an addition. **/ CImg& operator|=(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator|="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') - cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd | (unsigned long)mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - cimg::exception_mode(omode); - *this|=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode(omode); - return *this; + return *this|=(+*this)._fill(expression,true,true,0,0,"operator|=",this); } //! In-place bitwise OR operator. @@ -11015,7 +11073,7 @@ CImg& operator^=(const t value) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)value); return *this; @@ -11028,39 +11086,7 @@ - It does \e not compute the \e power of pixel values. For this purpose, use pow(const char*) instead. **/ CImg& operator^=(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator^="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') - cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((unsigned long)*ptrd ^ (unsigned long)mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - cimg::exception_mode(omode); - *this^=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode(omode); - return *this; + return *this^=(+*this)._fill(expression,true,true,0,0,"operator^=",this); } //! In-place bitwise XOR operator. @@ -11120,7 +11146,7 @@ CImg& operator<<=(const t value) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=65536) +#pragma omp parallel for cimg_openmp_if (size()>=65536) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)(((long)*ptrd) << (int)value); return *this; @@ -11131,37 +11157,7 @@ Similar to operator+=(const char*), except that it performs a bitwise left shift instead of an addition. **/ CImg& operator<<=(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator<<="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)((long)*ptrd << (int)mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((long)*ptrd << (int)mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)((long)*ptrd << (int)lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((long)*ptrd << (int)mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - cimg::exception_mode(omode); - *this<<=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode(omode); - return *this; + return *this<<=(+*this)._fill(expression,true,true,0,0,"operator<<=",this); } //! In-place bitwise left shift operator. @@ -11220,7 +11216,7 @@ CImg& operator>>=(const t value) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=65536) +#pragma omp parallel for cimg_openmp_if (size()>=65536) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)(((long)*ptrd) >> (int)value); return *this; @@ -11231,37 +11227,7 @@ Similar to operator+=(const char*), except that it performs a bitwise right shift instead of an addition. **/ CImg& operator>>=(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator<<="); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)((long)*ptrd >> (int)mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((long)*ptrd >> (int)mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)((long)*ptrd >> (int)lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)((long)*ptrd >> (int)mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - cimg::exception_mode(omode); - *this>>=CImg(_width,_height,_depth,_spectrum,expression,true); - } - cimg::exception_mode(omode); - return *this; + return *this>>=(+*this)._fill(expression,true,true,0,0,"operator>>=",this); } //! In-place bitwise right shift operator. @@ -11343,25 +11309,7 @@ \param expression Value string describing the way pixel values are compared. **/ bool operator==(const char *const expression) const { - if (is_empty()) return !*expression; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - bool is_equal = true; - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"operator<<="); - const T *ptrs = *expression=='<'?end()-1:_data; - if (*expression=='<') - cimg_rofXYZC(*this,x,y,z,c) { if (!is_equal) break; is_equal = ((double)*(ptrs--)==mp(x,y,z,c)); } - else if (*expression=='>') - cimg_forXYZC(*this,x,y,z,c) { if (!is_equal) break; is_equal = ((double)*(ptrs++)==mp(x,y,z,c)); } - else cimg_forXYZC(*this,x,y,z,c) { if (!is_equal) break; is_equal = ((double)*(ptrs++)==mp(x,y,z,c)); } - } catch (CImgException&) { - cimg::exception_mode(omode); - is_equal = (*this==CImg(_width,_height,_depth,_spectrum,expression,true)); - } - cimg::exception_mode(omode); - return is_equal; + return *this==(+*this)._fill(expression,true,true,0,0,"operator==",this); } //! Test if two images have the same size and values. @@ -11608,7 +11556,7 @@ \note - The data() of an empty image is equal to \c 0 (null pointer). - The allocated pixel buffer for the image instance starts from \c data() - and goes to data()+\ref size()-1 (included). + and goes to data()+\ref size() - 1 (included). - To get the pointer to one particular location of the pixel buffer, use data(unsigned int,unsigned int,unsigned int,unsigned int) instead. **/ @@ -11738,8 +11686,8 @@ //! Return a reference to the last pixel value. /** \note - - Writing \c img.end() is equivalent to img[img.size()-1], or - img(img.width()-1,img.height()-1,img.depth()-1,img.spectrum()-1). + - Writing \c img.end() is equivalent to img[img.size() - 1], or + img(img.width() - 1,img.height() - 1,img.depth() - 1,img.spectrum() - 1). - It has been mainly defined for compatibility with STL naming conventions. **/ T& back() { @@ -11782,7 +11730,7 @@ - Similar to at(int,const T), except that an out-of-bounds access returns the value of the nearest pixel in the image instance, regarding the specified offset, i.e. - If \c offset<0, then \c img[0] is returned. - - If \c offset>=img.size(), then \c img[img.size()-1] is returned. + - If \c offset>=img.size(), then \c img[img.size() - 1] is returned. - Due to the additional boundary checking operation, this method is slower than operator()(). Use it when you are \e not sure about the validity of the specified pixel offset. - If you know your image instance is \e not empty, you may rather use the slightly faster method \c _at(int). @@ -11797,7 +11745,7 @@ T& _at(const int offset) { const unsigned int siz = (unsigned int)size(); - return (*this)[offset<0?0:(unsigned int)offset>=siz?siz-1:offset]; + return (*this)[offset<0?0:(unsigned int)offset>=siz?siz - 1:offset]; } //! Access to a pixel value at a specified offset, using Neumann boundary conditions \const. @@ -11811,7 +11759,7 @@ const T& _at(const int offset) const { const unsigned int siz = (unsigned int)size(); - return (*this)[offset<0?0:(unsigned int)offset>=siz?siz-1:offset]; + return (*this)[offset<0?0:(unsigned int)offset>=siz?siz - 1:offset]; } //! Access to a pixel value, using Dirichlet boundary conditions for the X-coordinate. @@ -11867,7 +11815,7 @@ } T& _atX(const int x, const int y=0, const int z=0, const int c=0) { - return (*this)(x<0?0:(x>=width()?width()-1:x),y,z,c); + return (*this)(x<0?0:(x>=width()?width() - 1:x),y,z,c); } //! Access to a pixel value, using Neumann boundary conditions for the X-coordinate \const. @@ -11880,7 +11828,7 @@ } const T& _atX(const int x, const int y=0, const int z=0, const int c=0) const { - return (*this)(x<0?0:(x>=width()?width()-1:x),y,z,c); + return (*this)(x<0?0:(x>=width()?width() - 1:x),y,z,c); } //! Access to a pixel value, using Dirichlet boundary conditions for the X and Y-coordinates. @@ -11912,7 +11860,7 @@ } T& _atXY(const int x, const int y, const int z=0, const int c=0) { - return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y),z,c); + return (*this)(x<0?0:(x>=width()?width() - 1:x), y<0?0:(y>=height()?height() - 1:y),z,c); } //! Access to a pixel value, using Neumann boundary conditions for the X and Y-coordinates \const. @@ -11925,7 +11873,7 @@ } const T& _atXY(const int x, const int y, const int z=0, const int c=0) const { - return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y),z,c); + return (*this)(x<0?0:(x>=width()?width() - 1:x), y<0?0:(y>=height()?height() - 1:y),z,c); } //! Access to a pixel value, using Dirichlet boundary conditions for the X,Y and Z-coordinates. @@ -11959,8 +11907,8 @@ } T& _atXYZ(const int x, const int y, const int z, const int c=0) { - return (*this)(x<0?0:(x>=width()?width()-1:x),y<0?0:(y>=height()?height()-1:y), - z<0?0:(z>=depth()?depth()-1:z),c); + return (*this)(x<0?0:x>=width()?width() - 1:x,y<0?0:y>=height()?height() - 1:y, + z<0?0:z>=depth()?depth() - 1:z,c); } //! Access to a pixel value, using Neumann boundary conditions for the X,Y and Z-coordinates \const. @@ -11973,8 +11921,8 @@ } const T& _atXYZ(const int x, const int y, const int z, const int c=0) const { - return (*this)(x<0?0:(x>=width()?width()-1:x),y<0?0:(y>=height()?height()-1:y), - z<0?0:(z>=depth()?depth()-1:z),c); + return (*this)(x<0?0:(x>=width()?width() - 1:x),y<0?0:(y>=height()?height() - 1:y), + z<0?0:(z>=depth()?depth() - 1:z),c); } //! Access to a pixel value, using Dirichlet boundary conditions. @@ -12009,8 +11957,8 @@ } T& _atXYZC(const int x, const int y, const int z, const int c) { - return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y), - z<0?0:(z>=depth()?depth()-1:z), c<0?0:(c>=spectrum()?spectrum()-1:c)); + return (*this)(x<0?0:(x>=width()?width() - 1:x), y<0?0:(y>=height()?height() - 1:y), + z<0?0:(z>=depth()?depth() - 1:z), c<0?0:(c>=spectrum()?spectrum() - 1:c)); } //! Access to a pixel value, using Neumann boundary conditions \const. @@ -12023,8 +11971,8 @@ } const T& _atXYZC(const int x, const int y, const int z, const int c) const { - return (*this)(x<0?0:(x>=width()?width()-1:x), y<0?0:(y>=height()?height()-1:y), - z<0?0:(z>=depth()?depth()-1:z), c<0?0:(c>=spectrum()?spectrum()-1:c)); + return (*this)(x<0?0:(x>=width()?width() - 1:x), y<0?0:(y>=height()?height() - 1:y), + z<0?0:(z>=depth()?depth() - 1:z), c<0?0:(c>=spectrum()?spectrum() - 1:c)); } //! Return pixel value, using linear interpolation and Dirichlet boundary conditions for the X-coordinate. @@ -12050,7 +11998,7 @@ dx = fx - x; const Tfloat Ic = (Tfloat)atX(x,y,z,c,out_value), In = (Tfloat)atXY(nx,y,z,c,out_value); - return Ic + dx*(In-Ic); + return Ic + dx*(In - Ic); } //! Return pixel value, using linear interpolation and Neumann boundary conditions for the X-coordinate. @@ -12081,16 +12029,16 @@ Tfloat _linear_atX(const float fx, const int y=0, const int z=0, const int c=0) const { const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx); + nfx = fx<0?0:(fx>_width - 1?_width - 1:fx); const unsigned int x = (unsigned int)nfx; const float dx = nfx - x; const unsigned int - nx = dx>0?x+1:x; + nx = dx>0?x + 1:x; const Tfloat Ic = (Tfloat)(*this)(x,y,z,c), In = (Tfloat)(*this)(nx,y,z,c); - return Ic + dx*(In-Ic); + return Ic + dx*(In - Ic); } //! Return pixel value, using linear interpolation and Dirichlet boundary conditions for the X and Y-coordinates. @@ -12108,7 +12056,7 @@ const Tfloat Icc = (Tfloat)atXY(x,y,z,c,out_value), Inc = (Tfloat)atXY(nx,y,z,c,out_value), Icn = (Tfloat)atXY(x,ny,z,c,out_value), Inn = (Tfloat)atXY(nx,ny,z,c,out_value); - return Icc + dx*(Inc-Icc + dy*(Icc+Inn-Icn-Inc)) + dy*(Icn-Icc); + return Icc + dx*(Inc - Icc + dy*(Icc + Inn - Icn - Inc)) + dy*(Icn - Icc); } //! Return pixel value, using linear interpolation and Neumann boundary conditions for the X and Y-coordinates. @@ -12130,8 +12078,8 @@ Tfloat _linear_atXY(const float fx, const float fy, const int z=0, const int c=0) const { const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx), - nfy = fy<0?0:(fy>_height-1?_height-1:fy); + nfx = fx<0?0:(fx>_width - 1?_width - 1:fx), + nfy = fy<0?0:(fy>_height - 1?_height - 1:fy); const unsigned int x = (unsigned int)nfx, y = (unsigned int)nfy; @@ -12139,12 +12087,12 @@ dx = nfx - x, dy = nfy - y; const unsigned int - nx = dx>0?x+1:x, - ny = dy>0?y+1:y; + nx = dx>0?x + 1:x, + ny = dy>0?y + 1:y; const Tfloat Icc = (Tfloat)(*this)(x,y,z,c), Inc = (Tfloat)(*this)(nx,y,z,c), Icn = (Tfloat)(*this)(x,ny,z,c), Inn = (Tfloat)(*this)(nx,ny,z,c); - return Icc + dx*(Inc-Icc + dy*(Icc+Inn-Icn-Inc)) + dy*(Icn-Icc); + return Icc + dx*(Inc - Icc + dy*(Icc + Inn - Icn - Inc)) + dy*(Icn - Icc); } //! Return pixel value, using linear interpolation and Dirichlet boundary conditions for the X,Y and Z-coordinates. @@ -12167,13 +12115,13 @@ Iccn = (Tfloat)atXYZ(x,y,nz,c,out_value), Incn = (Tfloat)atXYZ(nx,y,nz,c,out_value), Icnn = (Tfloat)atXYZ(x,ny,nz,c,out_value), Innn = (Tfloat)atXYZ(nx,ny,nz,c,out_value); return Iccc + - dx*(Incc-Iccc + - dy*(Iccc+Innc-Icnc-Incc + - dz*(Iccn+Innn+Icnc+Incc-Icnn-Incn-Iccc-Innc)) + - dz*(Iccc+Incn-Iccn-Incc)) + - dy*(Icnc-Iccc + - dz*(Iccc+Icnn-Iccn-Icnc)) + - dz*(Iccn-Iccc); + dx*(Incc - Iccc + + dy*(Iccc + Innc - Icnc - Incc + + dz*(Iccn + Innn + Icnc + Incc - Icnn - Incn - Iccc - Innc)) + + dz*(Iccc + Incn - Iccn - Incc)) + + dy*(Icnc - Iccc + + dz*(Iccc + Icnn - Iccn - Icnc)) + + dz*(Iccn - Iccc); } //! Return pixel value, using linear interpolation and Neumann boundary conditions for the X,Y and Z-coordinates. @@ -12195,9 +12143,9 @@ Tfloat _linear_atXYZ(const float fx, const float fy=0, const float fz=0, const int c=0) const { const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx), - nfy = fy<0?0:(fy>_height-1?_height-1:fy), - nfz = fz<0?0:(fz>_depth-1?_depth-1:fz); + nfx = fx<0?0:(fx>_width - 1?_width - 1:fx), + nfy = fy<0?0:(fy>_height - 1?_height - 1:fy), + nfz = fz<0?0:(fz>_depth - 1?_depth - 1:fz); const unsigned int x = (unsigned int)nfx, y = (unsigned int)nfy, @@ -12207,22 +12155,22 @@ dy = nfy - y, dz = nfz - z; const unsigned int - nx = dx>0?x+1:x, - ny = dy>0?y+1:y, - nz = dz>0?z+1:z; + nx = dx>0?x + 1:x, + ny = dy>0?y + 1:y, + nz = dz>0?z + 1:z; const Tfloat Iccc = (Tfloat)(*this)(x,y,z,c), Incc = (Tfloat)(*this)(nx,y,z,c), Icnc = (Tfloat)(*this)(x,ny,z,c), Innc = (Tfloat)(*this)(nx,ny,z,c), Iccn = (Tfloat)(*this)(x,y,nz,c), Incn = (Tfloat)(*this)(nx,y,nz,c), Icnn = (Tfloat)(*this)(x,ny,nz,c), Innn = (Tfloat)(*this)(nx,ny,nz,c); return Iccc + - dx*(Incc-Iccc + - dy*(Iccc+Innc-Icnc-Incc + - dz*(Iccn+Innn+Icnc+Incc-Icnn-Incn-Iccc-Innc)) + - dz*(Iccc+Incn-Iccn-Incc)) + - dy*(Icnc-Iccc + - dz*(Iccc+Icnn-Iccn-Icnc)) + - dz*(Iccn-Iccc); + dx*(Incc - Iccc + + dy*(Iccc + Innc - Icnc - Incc + + dz*(Iccn + Innn + Icnc + Incc - Icnn - Incn - Iccc - Innc)) + + dz*(Iccc + Incn - Iccn - Incc)) + + dy*(Icnc - Iccc + + dz*(Iccc + Icnn - Iccn - Icnc)) + + dz*(Iccn - Iccc); } //! Return pixel value, using linear interpolation and Dirichlet boundary conditions for all X,Y,Z,C-coordinates. @@ -12251,22 +12199,22 @@ Iccnn = (Tfloat)atXYZC(x,y,nz,nc,out_value), Incnn = (Tfloat)atXYZC(nx,y,nz,nc,out_value), Icnnn = (Tfloat)atXYZC(x,ny,nz,nc,out_value), Innnn = (Tfloat)atXYZC(nx,ny,nz,nc,out_value); return Icccc + - dx*(Inccc-Icccc + - dy*(Icccc+Inncc-Icncc-Inccc + - dz*(Iccnc+Innnc+Icncc+Inccc-Icnnc-Incnc-Icccc-Inncc + - dc*(Iccnn+Innnn+Icncn+Inccn+Icnnc+Incnc+Icccc+Inncc- - Icnnn-Incnn-Icccn-Inncn-Iccnc-Innnc-Icncc-Inccc)) + - dc*(Icccn+Inncn+Icncc+Inccc-Icncn-Inccn-Icccc-Inncc)) + - dz*(Icccc+Incnc-Iccnc-Inccc + - dc*(Icccn+Incnn+Iccnc+Inccc-Iccnn-Inccn-Icccc-Incnc)) + - dc*(Icccc+Inccn-Inccc-Icccn)) + - dy*(Icncc-Icccc + - dz*(Icccc+Icnnc-Iccnc-Icncc + - dc*(Icccn+Icnnn+Iccnc+Icncc-Iccnn-Icncn-Icccc-Icnnc)) + - dc*(Icccc+Icncn-Icncc-Icccn)) + - dz*(Iccnc-Icccc + - dc*(Icccc+Iccnn-Iccnc-Icccn)) + - dc*(Icccn-Icccc); + dx*(Inccc - Icccc + + dy*(Icccc + Inncc - Icncc - Inccc + + dz*(Iccnc + Innnc + Icncc + Inccc - Icnnc - Incnc - Icccc - Inncc + + dc*(Iccnn + Innnn + Icncn + Inccn + Icnnc + Incnc + Icccc + Inncc - + Icnnn - Incnn - Icccn - Inncn - Iccnc - Innnc - Icncc - Inccc)) + + dc*(Icccn + Inncn + Icncc + Inccc - Icncn - Inccn - Icccc - Inncc)) + + dz*(Icccc + Incnc - Iccnc - Inccc + + dc*(Icccn + Incnn + Iccnc + Inccc - Iccnn - Inccn - Icccc - Incnc)) + + dc*(Icccc + Inccn - Inccc - Icccn)) + + dy*(Icncc - Icccc + + dz*(Icccc + Icnnc - Iccnc - Icncc + + dc*(Icccn + Icnnn + Iccnc + Icncc - Iccnn - Icncn - Icccc - Icnnc)) + + dc*(Icccc + Icncn - Icncc - Icccn)) + + dz*(Iccnc - Icccc + + dc*(Icccc + Iccnn - Iccnc - Icccn)) + + dc*(Icccn -Icccc); } //! Return pixel value, using linear interpolation and Neumann boundary conditions for all X,Y,Z and C-coordinates. @@ -12288,10 +12236,10 @@ Tfloat _linear_atXYZC(const float fx, const float fy=0, const float fz=0, const float fc=0) const { const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx), - nfy = fy<0?0:(fy>_height-1?_height-1:fy), - nfz = fz<0?0:(fz>_depth-1?_depth-1:fz), - nfc = fc<0?0:(fc>_spectrum-1?_spectrum-1:fc); + nfx = fx<0?0:(fx>_width - 1?_width - 1:fx), + nfy = fy<0?0:(fy>_height - 1?_height - 1:fy), + nfz = fz<0?0:(fz>_depth - 1?_depth - 1:fz), + nfc = fc<0?0:(fc>_spectrum - 1?_spectrum - 1:fc); const unsigned int x = (unsigned int)nfx, y = (unsigned int)nfy, @@ -12303,10 +12251,10 @@ dz = nfz - z, dc = nfc - c; const unsigned int - nx = dx>0?x+1:x, - ny = dy>0?y+1:y, - nz = dz>0?z+1:z, - nc = dc>0?c+1:c; + nx = dx>0?x + 1:x, + ny = dy>0?y + 1:y, + nz = dz>0?z + 1:z, + nc = dc>0?c + 1:c; const Tfloat Icccc = (Tfloat)(*this)(x,y,z,c), Inccc = (Tfloat)(*this)(nx,y,z,c), Icncc = (Tfloat)(*this)(x,ny,z,c), Inncc = (Tfloat)(*this)(nx,ny,z,c), @@ -12317,22 +12265,22 @@ Iccnn = (Tfloat)(*this)(x,y,nz,nc), Incnn = (Tfloat)(*this)(nx,y,nz,nc), Icnnn = (Tfloat)(*this)(x,ny,nz,nc), Innnn = (Tfloat)(*this)(nx,ny,nz,nc); return Icccc + - dx*(Inccc-Icccc + - dy*(Icccc+Inncc-Icncc-Inccc + - dz*(Iccnc+Innnc+Icncc+Inccc-Icnnc-Incnc-Icccc-Inncc + - dc*(Iccnn+Innnn+Icncn+Inccn+Icnnc+Incnc+Icccc+Inncc- - Icnnn-Incnn-Icccn-Inncn-Iccnc-Innnc-Icncc-Inccc)) + - dc*(Icccn+Inncn+Icncc+Inccc-Icncn-Inccn-Icccc-Inncc)) + - dz*(Icccc+Incnc-Iccnc-Inccc + - dc*(Icccn+Incnn+Iccnc+Inccc-Iccnn-Inccn-Icccc-Incnc)) + - dc*(Icccc+Inccn-Inccc-Icccn)) + - dy*(Icncc-Icccc + - dz*(Icccc+Icnnc-Iccnc-Icncc + - dc*(Icccn+Icnnn+Iccnc+Icncc-Iccnn-Icncn-Icccc-Icnnc)) + - dc*(Icccc+Icncn-Icncc-Icccn)) + - dz*(Iccnc-Icccc + - dc*(Icccc+Iccnn-Iccnc-Icccn)) + - dc*(Icccn-Icccc); + dx*(Inccc - Icccc + + dy*(Icccc + Inncc - Icncc - Inccc + + dz*(Iccnc + Innnc + Icncc + Inccc - Icnnc - Incnc - Icccc - Inncc + + dc*(Iccnn + Innnn + Icncn + Inccn + Icnnc + Incnc + Icccc + Inncc - + Icnnn - Incnn - Icccn - Inncn - Iccnc - Innnc - Icncc - Inccc)) + + dc*(Icccn + Inncn + Icncc + Inccc - Icncn - Inccn - Icccc - Inncc)) + + dz*(Icccc + Incnc - Iccnc - Inccc + + dc*(Icccn + Incnn + Iccnc + Inccc - Iccnn - Inccn - Icccc - Incnc)) + + dc*(Icccc + Inccn - Inccc - Icccn)) + + dy*(Icncc - Icccc + + dz*(Icccc + Icnnc - Iccnc - Icncc + + dc*(Icccn + Icnnn + Iccnc + Icncc - Iccnn - Icncn - Icccc - Icnnc)) + + dc*(Icccc + Icncn - Icncc - Icccn)) + + dz*(Iccnc - Icccc + + dc*(Icccc + Iccnn - Iccnc - Icccn)) + + dc*(Icccn - Icccc); } //! Return pixel value, using cubic interpolation and Dirichlet boundary conditions for the X-coordinate. @@ -12360,7 +12308,7 @@ const Tfloat Ip = (Tfloat)atX(px,y,z,c,out_value), Ic = (Tfloat)atX(x,y,z,c,out_value), In = (Tfloat)atX(nx,y,z,c,out_value), Ia = (Tfloat)atX(ax,y,z,c,out_value); - return Ic + 0.5f*(dx*(-Ip+In) + dx*dx*(2*Ip-5*Ic+4*In-Ia) + dx*dx*dx*(-Ip+3*Ic-3*In+Ia)); + return Ic + 0.5f*(dx*(-Ip + In) + dx*dx*(2*Ip - 5*Ic + 4*In - Ia) + dx*dx*dx*(-Ip + 3*Ic - 3*In + Ia)); } //! Return damped pixel value, using cubic interpolation and Dirichlet boundary conditions for the X-coordinate. @@ -12401,17 +12349,17 @@ Tfloat _cubic_atX(const float fx, const int y=0, const int z=0, const int c=0) const { const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx); + nfx = fx<0?0:(fx>_width - 1?_width - 1:fx); const int x = (int)nfx; const float dx = nfx - x; const int - px = x-1<0?0:x-1, nx = dx>0?x+1:x, ax = x+2>=width()?width()-1:x+2; + px = x - 1<0?0:x - 1, nx = dx>0?x + 1:x, ax = x + 2>=width()?width() - 1:x + 2; const Tfloat Ip = (Tfloat)(*this)(px,y,z,c), Ic = (Tfloat)(*this)(x,y,z,c), In = (Tfloat)(*this)(nx,y,z,c), Ia = (Tfloat)(*this)(ax,y,z,c); - return Ic + 0.5f*(dx*(-Ip+In) + dx*dx*(2*Ip-5*Ic+4*In-Ia) + dx*dx*dx*(-Ip+3*Ic-3*In+Ia)); + return Ic + 0.5f*(dx*(-Ip + In) + dx*dx*(2*Ip - 5*Ic + 4*In - Ia) + dx*dx*dx*(-Ip + 3*Ic - 3*In + Ia)); } //! Return damped pixel value, using cubic interpolation and Neumann boundary conditions for the X-coordinate. @@ -12444,17 +12392,17 @@ const Tfloat Ipp = (Tfloat)atXY(px,py,z,c,out_value), Icp = (Tfloat)atXY(x,py,z,c,out_value), Inp = (Tfloat)atXY(nx,py,z,c,out_value), Iap = (Tfloat)atXY(ax,py,z,c,out_value), - Ip = Icp + 0.5f*(dx*(-Ipp+Inp) + dx*dx*(2*Ipp-5*Icp+4*Inp-Iap) + dx*dx*dx*(-Ipp+3*Icp-3*Inp+Iap)), + Ip = Icp + 0.5f*(dx*(-Ipp + Inp) + dx*dx*(2*Ipp - 5*Icp + 4*Inp - Iap) + dx*dx*dx*(-Ipp + 3*Icp - 3*Inp + Iap)), Ipc = (Tfloat)atXY(px,y,z,c,out_value), Icc = (Tfloat)atXY(x, y,z,c,out_value), Inc = (Tfloat)atXY(nx,y,z,c,out_value), Iac = (Tfloat)atXY(ax,y,z,c,out_value), - Ic = Icc + 0.5f*(dx*(-Ipc+Inc) + dx*dx*(2*Ipc-5*Icc+4*Inc-Iac) + dx*dx*dx*(-Ipc+3*Icc-3*Inc+Iac)), + Ic = Icc + 0.5f*(dx*(-Ipc + Inc) + dx*dx*(2*Ipc - 5*Icc + 4*Inc - Iac) + dx*dx*dx*(-Ipc + 3*Icc - 3*Inc + Iac)), Ipn = (Tfloat)atXY(px,ny,z,c,out_value), Icn = (Tfloat)atXY(x,ny,z,c,out_value), Inn = (Tfloat)atXY(nx,ny,z,c,out_value), Ian = (Tfloat)atXY(ax,ny,z,c,out_value), - In = Icn + 0.5f*(dx*(-Ipn+Inn) + dx*dx*(2*Ipn-5*Icn+4*Inn-Ian) + dx*dx*dx*(-Ipn+3*Icn-3*Inn+Ian)), + In = Icn + 0.5f*(dx*(-Ipn + Inn) + dx*dx*(2*Ipn - 5*Icn + 4*Inn - Ian) + dx*dx*dx*(-Ipn + 3*Icn - 3*Inn + Ian)), Ipa = (Tfloat)atXY(px,ay,z,c,out_value), Ica = (Tfloat)atXY(x,ay,z,c,out_value), Ina = (Tfloat)atXY(nx,ay,z,c,out_value), Iaa = (Tfloat)atXY(ax,ay,z,c,out_value), - Ia = Ica + 0.5f*(dx*(-Ipa+Ina) + dx*dx*(2*Ipa-5*Ica+4*Ina-Iaa) + dx*dx*dx*(-Ipa+3*Ica-3*Ina+Iaa)); - return Ic + 0.5f*(dy*(-Ip+In) + dy*dy*(2*Ip-5*Ic+4*In-Ia) + dy*dy*dy*(-Ip+3*Ic-3*In+Ia)); + Ia = Ica + 0.5f*(dx*(-Ipa + Ina) + dx*dx*(2*Ipa - 5*Ica + 4*Ina - Iaa) + dx*dx*dx*(-Ipa + 3*Ica - 3*Ina + Iaa)); + return Ic + 0.5f*(dy*(-Ip + In) + dy*dy*(2*Ip - 5*Ic + 4*In - Ia) + dy*dy*dy*(-Ip + 3*Ic - 3*In + Ia)); } //! Return damped pixel value, using cubic interpolation and Dirichlet boundary conditions for the X,Y-coordinates. @@ -12486,27 +12434,27 @@ Tfloat _cubic_atXY(const float fx, const float fy, const int z=0, const int c=0) const { const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx), - nfy = fy<0?0:(fy>_height-1?_height-1:fy); + nfx = fx<0?0:(fx>_width - 1?_width - 1:fx), + nfy = fy<0?0:(fy>_height - 1?_height - 1:fy); const int x = (int)nfx, y = (int)nfy; const float dx = nfx - x, dy = nfy - y; const int - px = x-1<0?0:x-1, nx = dx>0?x+1:x, ax = x+2>=width()?width()-1:x+2, - py = y-1<0?0:y-1, ny = dy>0?y+1:y, ay = y+2>=height()?height()-1:y+2; + px = x - 1<0?0:x - 1, nx = dx>0?x + 1:x, ax = x + 2>=width()?width() - 1:x + 2, + py = y - 1<0?0:y - 1, ny = dy>0?y + 1:y, ay = y + 2>=height()?height() - 1:y + 2; const Tfloat Ipp = (Tfloat)(*this)(px,py,z,c), Icp = (Tfloat)(*this)(x,py,z,c), Inp = (Tfloat)(*this)(nx,py,z,c), Iap = (Tfloat)(*this)(ax,py,z,c), - Ip = Icp + 0.5f*(dx*(-Ipp+Inp) + dx*dx*(2*Ipp-5*Icp+4*Inp-Iap) + dx*dx*dx*(-Ipp+3*Icp-3*Inp+Iap)), + Ip = Icp + 0.5f*(dx*(-Ipp + Inp) + dx*dx*(2*Ipp - 5*Icp + 4*Inp - Iap) + dx*dx*dx*(-Ipp + 3*Icp - 3*Inp + Iap)), Ipc = (Tfloat)(*this)(px,y,z,c), Icc = (Tfloat)(*this)(x, y,z,c), Inc = (Tfloat)(*this)(nx,y,z,c), Iac = (Tfloat)(*this)(ax,y,z,c), - Ic = Icc + 0.5f*(dx*(-Ipc+Inc) + dx*dx*(2*Ipc-5*Icc+4*Inc-Iac) + dx*dx*dx*(-Ipc+3*Icc-3*Inc+Iac)), + Ic = Icc + 0.5f*(dx*(-Ipc + Inc) + dx*dx*(2*Ipc - 5*Icc + 4*Inc - Iac) + dx*dx*dx*(-Ipc + 3*Icc - 3*Inc + Iac)), Ipn = (Tfloat)(*this)(px,ny,z,c), Icn = (Tfloat)(*this)(x,ny,z,c), Inn = (Tfloat)(*this)(nx,ny,z,c), Ian = (Tfloat)(*this)(ax,ny,z,c), - In = Icn + 0.5f*(dx*(-Ipn+Inn) + dx*dx*(2*Ipn-5*Icn+4*Inn-Ian) + dx*dx*dx*(-Ipn+3*Icn-3*Inn+Ian)), + In = Icn + 0.5f*(dx*(-Ipn + Inn) + dx*dx*(2*Ipn - 5*Icn + 4*Inn - Ian) + dx*dx*dx*(-Ipn + 3*Icn - 3*Inn + Ian)), Ipa = (Tfloat)(*this)(px,ay,z,c), Ica = (Tfloat)(*this)(x,ay,z,c), Ina = (Tfloat)(*this)(nx,ay,z,c), Iaa = (Tfloat)(*this)(ax,ay,z,c), - Ia = Ica + 0.5f*(dx*(-Ipa+Ina) + dx*dx*(2*Ipa-5*Ica+4*Ina-Iaa) + dx*dx*dx*(-Ipa+3*Ica-3*Ina+Iaa)); - return Ic + 0.5f*(dy*(-Ip+In) + dy*dy*(2*Ip-5*Ic+4*In-Ia) + dy*dy*dy*(-Ip+3*Ic-3*In+Ia)); + Ia = Ica + 0.5f*(dx*(-Ipa + Ina) + dx*dx*(2*Ipa - 5*Ica + 4*Ina - Iaa) + dx*dx*dx*(-Ipa + 3*Ica - 3*Ina + Iaa)); + return Ic + 0.5f*(dy*(-Ip + In) + dy*dy*(2*Ip - 5*Ic + 4*In - Ia) + dy*dy*dy*(-Ip + 3*Ic - 3*In + Ia)); } //! Return damped pixel value, using cubic interpolation and Neumann boundary conditions for the X,Y-coordinates. @@ -12540,57 +12488,77 @@ const Tfloat Ippp = (Tfloat)atXYZ(px,py,pz,c,out_value), Icpp = (Tfloat)atXYZ(x,py,pz,c,out_value), Inpp = (Tfloat)atXYZ(nx,py,pz,c,out_value), Iapp = (Tfloat)atXYZ(ax,py,pz,c,out_value), - Ipp = Icpp + 0.5f*(dx*(-Ippp+Inpp) + dx*dx*(2*Ippp-5*Icpp+4*Inpp-Iapp) + dx*dx*dx*(-Ippp+3*Icpp-3*Inpp+Iapp)), + Ipp = Icpp + 0.5f*(dx*(-Ippp + Inpp) + dx*dx*(2*Ippp - 5*Icpp + 4*Inpp - Iapp) + + dx*dx*dx*(-Ippp + 3*Icpp - 3*Inpp + Iapp)), Ipcp = (Tfloat)atXYZ(px,y,pz,c,out_value), Iccp = (Tfloat)atXYZ(x, y,pz,c,out_value), Incp = (Tfloat)atXYZ(nx,y,pz,c,out_value), Iacp = (Tfloat)atXYZ(ax,y,pz,c,out_value), - Icp = Iccp + 0.5f*(dx*(-Ipcp+Incp) + dx*dx*(2*Ipcp-5*Iccp+4*Incp-Iacp) + dx*dx*dx*(-Ipcp+3*Iccp-3*Incp+Iacp)), + Icp = Iccp + 0.5f*(dx*(-Ipcp + Incp) + dx*dx*(2*Ipcp - 5*Iccp + 4*Incp - Iacp) + + dx*dx*dx*(-Ipcp + 3*Iccp - 3*Incp + Iacp)), Ipnp = (Tfloat)atXYZ(px,ny,pz,c,out_value), Icnp = (Tfloat)atXYZ(x,ny,pz,c,out_value), Innp = (Tfloat)atXYZ(nx,ny,pz,c,out_value), Ianp = (Tfloat)atXYZ(ax,ny,pz,c,out_value), - Inp = Icnp + 0.5f*(dx*(-Ipnp+Innp) + dx*dx*(2*Ipnp-5*Icnp+4*Innp-Ianp) + dx*dx*dx*(-Ipnp+3*Icnp-3*Innp+Ianp)), + Inp = Icnp + 0.5f*(dx*(-Ipnp + Innp) + dx*dx*(2*Ipnp - 5*Icnp + 4*Innp - Ianp) + + dx*dx*dx*(-Ipnp + 3*Icnp - 3*Innp + Ianp)), Ipap = (Tfloat)atXYZ(px,ay,pz,c,out_value), Icap = (Tfloat)atXYZ(x,ay,pz,c,out_value), Inap = (Tfloat)atXYZ(nx,ay,pz,c,out_value), Iaap = (Tfloat)atXYZ(ax,ay,pz,c,out_value), - Iap = Icap + 0.5f*(dx*(-Ipap+Inap) + dx*dx*(2*Ipap-5*Icap+4*Inap-Iaap) + dx*dx*dx*(-Ipap+3*Icap-3*Inap+Iaap)), - Ip = Icp + 0.5f*(dy*(-Ipp+Inp) + dy*dy*(2*Ipp-5*Icp+4*Inp-Iap) + dy*dy*dy*(-Ipp+3*Icp-3*Inp+Iap)), + Iap = Icap + 0.5f*(dx*(-Ipap + Inap) + dx*dx*(2*Ipap - 5*Icap + 4*Inap - Iaap) + + dx*dx*dx*(-Ipap + 3*Icap - 3*Inap + Iaap)), + Ip = Icp + 0.5f*(dy*(-Ipp + Inp) + dy*dy*(2*Ipp - 5*Icp + 4*Inp - Iap) + + dy*dy*dy*(-Ipp + 3*Icp - 3*Inp + Iap)), Ippc = (Tfloat)atXYZ(px,py,z,c,out_value), Icpc = (Tfloat)atXYZ(x,py,z,c,out_value), Inpc = (Tfloat)atXYZ(nx,py,z,c,out_value), Iapc = (Tfloat)atXYZ(ax,py,z,c,out_value), - Ipc = Icpc + 0.5f*(dx*(-Ippc+Inpc) + dx*dx*(2*Ippc-5*Icpc+4*Inpc-Iapc) + dx*dx*dx*(-Ippc+3*Icpc-3*Inpc+Iapc)), + Ipc = Icpc + 0.5f*(dx*(-Ippc + Inpc) + dx*dx*(2*Ippc - 5*Icpc + 4*Inpc - Iapc) + + dx*dx*dx*(-Ippc + 3*Icpc - 3*Inpc + Iapc)), Ipcc = (Tfloat)atXYZ(px,y,z,c,out_value), Iccc = (Tfloat)atXYZ(x, y,z,c,out_value), Incc = (Tfloat)atXYZ(nx,y,z,c,out_value), Iacc = (Tfloat)atXYZ(ax,y,z,c,out_value), - Icc = Iccc + 0.5f*(dx*(-Ipcc+Incc) + dx*dx*(2*Ipcc-5*Iccc+4*Incc-Iacc) + dx*dx*dx*(-Ipcc+3*Iccc-3*Incc+Iacc)), + Icc = Iccc + 0.5f*(dx*(-Ipcc + Incc) + dx*dx*(2*Ipcc - 5*Iccc + 4*Incc - Iacc) + + dx*dx*dx*(-Ipcc + 3*Iccc - 3*Incc + Iacc)), Ipnc = (Tfloat)atXYZ(px,ny,z,c,out_value), Icnc = (Tfloat)atXYZ(x,ny,z,c,out_value), Innc = (Tfloat)atXYZ(nx,ny,z,c,out_value), Ianc = (Tfloat)atXYZ(ax,ny,z,c,out_value), - Inc = Icnc + 0.5f*(dx*(-Ipnc+Innc) + dx*dx*(2*Ipnc-5*Icnc+4*Innc-Ianc) + dx*dx*dx*(-Ipnc+3*Icnc-3*Innc+Ianc)), + Inc = Icnc + 0.5f*(dx*(-Ipnc + Innc) + dx*dx*(2*Ipnc - 5*Icnc + 4*Innc - Ianc) + + dx*dx*dx*(-Ipnc + 3*Icnc - 3*Innc + Ianc)), Ipac = (Tfloat)atXYZ(px,ay,z,c,out_value), Icac = (Tfloat)atXYZ(x,ay,z,c,out_value), Inac = (Tfloat)atXYZ(nx,ay,z,c,out_value), Iaac = (Tfloat)atXYZ(ax,ay,z,c,out_value), - Iac = Icac + 0.5f*(dx*(-Ipac+Inac) + dx*dx*(2*Ipac-5*Icac+4*Inac-Iaac) + dx*dx*dx*(-Ipac+3*Icac-3*Inac+Iaac)), - Ic = Icc + 0.5f*(dy*(-Ipc+Inc) + dy*dy*(2*Ipc-5*Icc+4*Inc-Iac) + dy*dy*dy*(-Ipc+3*Icc-3*Inc+Iac)), + Iac = Icac + 0.5f*(dx*(-Ipac + Inac) + dx*dx*(2*Ipac - 5*Icac + 4*Inac - Iaac) + + dx*dx*dx*(-Ipac + 3*Icac - 3*Inac + Iaac)), + Ic = Icc + 0.5f*(dy*(-Ipc + Inc) + dy*dy*(2*Ipc - 5*Icc + 4*Inc - Iac) + + dy*dy*dy*(-Ipc + 3*Icc - 3*Inc + Iac)), Ippn = (Tfloat)atXYZ(px,py,nz,c,out_value), Icpn = (Tfloat)atXYZ(x,py,nz,c,out_value), Inpn = (Tfloat)atXYZ(nx,py,nz,c,out_value), Iapn = (Tfloat)atXYZ(ax,py,nz,c,out_value), - Ipn = Icpn + 0.5f*(dx*(-Ippn+Inpn) + dx*dx*(2*Ippn-5*Icpn+4*Inpn-Iapn) + dx*dx*dx*(-Ippn+3*Icpn-3*Inpn+Iapn)), + Ipn = Icpn + 0.5f*(dx*(-Ippn + Inpn) + dx*dx*(2*Ippn - 5*Icpn + 4*Inpn - Iapn) + + dx*dx*dx*(-Ippn + 3*Icpn - 3*Inpn + Iapn)), Ipcn = (Tfloat)atXYZ(px,y,nz,c,out_value), Iccn = (Tfloat)atXYZ(x, y,nz,c,out_value), Incn = (Tfloat)atXYZ(nx,y,nz,c,out_value), Iacn = (Tfloat)atXYZ(ax,y,nz,c,out_value), - Icn = Iccn + 0.5f*(dx*(-Ipcn+Incn) + dx*dx*(2*Ipcn-5*Iccn+4*Incn-Iacn) + dx*dx*dx*(-Ipcn+3*Iccn-3*Incn+Iacn)), + Icn = Iccn + 0.5f*(dx*(-Ipcn + Incn) + dx*dx*(2*Ipcn - 5*Iccn + 4*Incn - Iacn) + + dx*dx*dx*(-Ipcn + 3*Iccn - 3*Incn + Iacn)), Ipnn = (Tfloat)atXYZ(px,ny,nz,c,out_value), Icnn = (Tfloat)atXYZ(x,ny,nz,c,out_value), Innn = (Tfloat)atXYZ(nx,ny,nz,c,out_value), Iann = (Tfloat)atXYZ(ax,ny,nz,c,out_value), - Inn = Icnn + 0.5f*(dx*(-Ipnn+Innn) + dx*dx*(2*Ipnn-5*Icnn+4*Innn-Iann) + dx*dx*dx*(-Ipnn+3*Icnn-3*Innn+Iann)), + Inn = Icnn + 0.5f*(dx*(-Ipnn + Innn) + dx*dx*(2*Ipnn - 5*Icnn + 4*Innn - Iann) + + dx*dx*dx*(-Ipnn + 3*Icnn - 3*Innn + Iann)), Ipan = (Tfloat)atXYZ(px,ay,nz,c,out_value), Ican = (Tfloat)atXYZ(x,ay,nz,c,out_value), Inan = (Tfloat)atXYZ(nx,ay,nz,c,out_value), Iaan = (Tfloat)atXYZ(ax,ay,nz,c,out_value), - Ian = Ican + 0.5f*(dx*(-Ipan+Inan) + dx*dx*(2*Ipan-5*Ican+4*Inan-Iaan) + dx*dx*dx*(-Ipan+3*Ican-3*Inan+Iaan)), - In = Icn + 0.5f*(dy*(-Ipn+Inn) + dy*dy*(2*Ipn-5*Icn+4*Inn-Ian) + dy*dy*dy*(-Ipn+3*Icn-3*Inn+Ian)), + Ian = Ican + 0.5f*(dx*(-Ipan + Inan) + dx*dx*(2*Ipan - 5*Ican + 4*Inan - Iaan) + + dx*dx*dx*(-Ipan + 3*Ican - 3*Inan + Iaan)), + In = Icn + 0.5f*(dy*(-Ipn + Inn) + dy*dy*(2*Ipn - 5*Icn + 4*Inn - Ian) + + dy*dy*dy*(-Ipn + 3*Icn - 3*Inn + Ian)), Ippa = (Tfloat)atXYZ(px,py,az,c,out_value), Icpa = (Tfloat)atXYZ(x,py,az,c,out_value), Inpa = (Tfloat)atXYZ(nx,py,az,c,out_value), Iapa = (Tfloat)atXYZ(ax,py,az,c,out_value), - Ipa = Icpa + 0.5f*(dx*(-Ippa+Inpa) + dx*dx*(2*Ippa-5*Icpa+4*Inpa-Iapa) + dx*dx*dx*(-Ippa+3*Icpa-3*Inpa+Iapa)), + Ipa = Icpa + 0.5f*(dx*(-Ippa + Inpa) + dx*dx*(2*Ippa - 5*Icpa + 4*Inpa - Iapa) + + dx*dx*dx*(-Ippa + 3*Icpa - 3*Inpa + Iapa)), Ipca = (Tfloat)atXYZ(px,y,az,c,out_value), Icca = (Tfloat)atXYZ(x, y,az,c,out_value), Inca = (Tfloat)atXYZ(nx,y,az,c,out_value), Iaca = (Tfloat)atXYZ(ax,y,az,c,out_value), - Ica = Icca + 0.5f*(dx*(-Ipca+Inca) + dx*dx*(2*Ipca-5*Icca+4*Inca-Iaca) + dx*dx*dx*(-Ipca+3*Icca-3*Inca+Iaca)), + Ica = Icca + 0.5f*(dx*(-Ipca + Inca) + dx*dx*(2*Ipca - 5*Icca + 4*Inca - Iaca) + + dx*dx*dx*(-Ipca + 3*Icca - 3*Inca + Iaca)), Ipna = (Tfloat)atXYZ(px,ny,az,c,out_value), Icna = (Tfloat)atXYZ(x,ny,az,c,out_value), Inna = (Tfloat)atXYZ(nx,ny,az,c,out_value), Iana = (Tfloat)atXYZ(ax,ny,az,c,out_value), - Ina = Icna + 0.5f*(dx*(-Ipna+Inna) + dx*dx*(2*Ipna-5*Icna+4*Inna-Iana) + dx*dx*dx*(-Ipna+3*Icna-3*Inna+Iana)), + Ina = Icna + 0.5f*(dx*(-Ipna + Inna) + dx*dx*(2*Ipna - 5*Icna + 4*Inna - Iana) + + dx*dx*dx*(-Ipna + 3*Icna - 3*Inna + Iana)), Ipaa = (Tfloat)atXYZ(px,ay,az,c,out_value), Icaa = (Tfloat)atXYZ(x,ay,az,c,out_value), Inaa = (Tfloat)atXYZ(nx,ay,az,c,out_value), Iaaa = (Tfloat)atXYZ(ax,ay,az,c,out_value), - Iaa = Icaa + 0.5f*(dx*(-Ipaa+Inaa) + dx*dx*(2*Ipaa-5*Icaa+4*Inaa-Iaaa) + dx*dx*dx*(-Ipaa+3*Icaa-3*Inaa+Iaaa)), - Ia = Ica + 0.5f*(dy*(-Ipa+Ina) + dy*dy*(2*Ipa-5*Ica+4*Ina-Iaa) + dy*dy*dy*(-Ipa+3*Ica-3*Ina+Iaa)); - return Ic + 0.5f*(dz*(-Ip+In) + dz*dz*(2*Ip-5*Ic+4*In-Ia) + dz*dz*dz*(-Ip+3*Ic-3*In+Ia)); + Iaa = Icaa + 0.5f*(dx*(-Ipaa + Inaa) + dx*dx*(2*Ipaa - 5*Icaa + 4*Inaa - Iaaa) + + dx*dx*dx*(-Ipaa + 3*Icaa - 3*Inaa + Iaaa)), + Ia = Ica + 0.5f*(dy*(-Ipa + Ina) + dy*dy*(2*Ipa - 5*Ica + 4*Ina - Iaa) + + dy*dy*dy*(-Ipa + 3*Ica - 3*Ina + Iaa)); + return Ic + 0.5f*(dz*(-Ip + In) + dz*dz*(2*Ip - 5*Ic + 4*In - Ia) + dz*dz*dz*(-Ip + 3*Ic - 3*In + Ia)); } //! Return damped pixel value, using cubic interpolation and Dirichlet boundary conditions for the XYZ-coordinates. @@ -12622,69 +12590,89 @@ Tfloat _cubic_atXYZ(const float fx, const float fy, const float fz, const int c=0) const { const float - nfx = fx<0?0:(fx>_width-1?_width-1:fx), - nfy = fy<0?0:(fy>_height-1?_height-1:fy), - nfz = fz<0?0:(fz>_depth-1?_depth-1:fz); + nfx = fx<0?0:(fx>_width - 1?_width - 1:fx), + nfy = fy<0?0:(fy>_height - 1?_height - 1:fy), + nfz = fz<0?0:(fz>_depth - 1?_depth - 1:fz); const int x = (int)nfx, y = (int)nfy, z = (int)nfz; const float dx = nfx - x, dy = nfy - y, dz = nfz - z; const int - px = x-1<0?0:x-1, nx = dx>0?x+1:x, ax = x+2>=width()?width()-1:x+2, - py = y-1<0?0:y-1, ny = dy>0?y+1:y, ay = y+2>=height()?height()-1:y+2, - pz = z-1<0?0:z-1, nz = dz>0?z+1:z, az = z+2>=depth()?depth()-1:z+2; + px = x - 1<0?0:x - 1, nx = dx>0?x + 1:x, ax = x + 2>=width()?width() - 1:x + 2, + py = y - 1<0?0:y - 1, ny = dy>0?y + 1:y, ay = y + 2>=height()?height() - 1:y + 2, + pz = z - 1<0?0:z - 1, nz = dz>0?z + 1:z, az = z + 2>=depth()?depth() - 1:z + 2; const Tfloat Ippp = (Tfloat)(*this)(px,py,pz,c), Icpp = (Tfloat)(*this)(x,py,pz,c), Inpp = (Tfloat)(*this)(nx,py,pz,c), Iapp = (Tfloat)(*this)(ax,py,pz,c), - Ipp = Icpp + 0.5f*(dx*(-Ippp+Inpp) + dx*dx*(2*Ippp-5*Icpp+4*Inpp-Iapp) + dx*dx*dx*(-Ippp+3*Icpp-3*Inpp+Iapp)), + Ipp = Icpp + 0.5f*(dx*(-Ippp + Inpp) + dx*dx*(2*Ippp - 5*Icpp + 4*Inpp - Iapp) + + dx*dx*dx*(-Ippp + 3*Icpp - 3*Inpp + Iapp)), Ipcp = (Tfloat)(*this)(px,y,pz,c), Iccp = (Tfloat)(*this)(x, y,pz,c), Incp = (Tfloat)(*this)(nx,y,pz,c), Iacp = (Tfloat)(*this)(ax,y,pz,c), - Icp = Iccp + 0.5f*(dx*(-Ipcp+Incp) + dx*dx*(2*Ipcp-5*Iccp+4*Incp-Iacp) + dx*dx*dx*(-Ipcp+3*Iccp-3*Incp+Iacp)), + Icp = Iccp + 0.5f*(dx*(-Ipcp + Incp) + dx*dx*(2*Ipcp - 5*Iccp + 4*Incp - Iacp) + + dx*dx*dx*(-Ipcp + 3*Iccp - 3*Incp + Iacp)), Ipnp = (Tfloat)(*this)(px,ny,pz,c), Icnp = (Tfloat)(*this)(x,ny,pz,c), Innp = (Tfloat)(*this)(nx,ny,pz,c), Ianp = (Tfloat)(*this)(ax,ny,pz,c), - Inp = Icnp + 0.5f*(dx*(-Ipnp+Innp) + dx*dx*(2*Ipnp-5*Icnp+4*Innp-Ianp) + dx*dx*dx*(-Ipnp+3*Icnp-3*Innp+Ianp)), + Inp = Icnp + 0.5f*(dx*(-Ipnp + Innp) + dx*dx*(2*Ipnp - 5*Icnp + 4*Innp - Ianp) + + dx*dx*dx*(-Ipnp + 3*Icnp - 3*Innp + Ianp)), Ipap = (Tfloat)(*this)(px,ay,pz,c), Icap = (Tfloat)(*this)(x,ay,pz,c), Inap = (Tfloat)(*this)(nx,ay,pz,c), Iaap = (Tfloat)(*this)(ax,ay,pz,c), - Iap = Icap + 0.5f*(dx*(-Ipap+Inap) + dx*dx*(2*Ipap-5*Icap+4*Inap-Iaap) + dx*dx*dx*(-Ipap+3*Icap-3*Inap+Iaap)), - Ip = Icp + 0.5f*(dy*(-Ipp+Inp) + dy*dy*(2*Ipp-5*Icp+4*Inp-Iap) + dy*dy*dy*(-Ipp+3*Icp-3*Inp+Iap)), + Iap = Icap + 0.5f*(dx*(-Ipap + Inap) + dx*dx*(2*Ipap - 5*Icap + 4*Inap - Iaap) + + dx*dx*dx*(-Ipap + 3*Icap - 3*Inap + Iaap)), + Ip = Icp + 0.5f*(dy*(-Ipp + Inp) + dy*dy*(2*Ipp - 5*Icp + 4*Inp - Iap) + + dy*dy*dy*(-Ipp + 3*Icp - 3*Inp + Iap)), Ippc = (Tfloat)(*this)(px,py,z,c), Icpc = (Tfloat)(*this)(x,py,z,c), Inpc = (Tfloat)(*this)(nx,py,z,c), Iapc = (Tfloat)(*this)(ax,py,z,c), - Ipc = Icpc + 0.5f*(dx*(-Ippc+Inpc) + dx*dx*(2*Ippc-5*Icpc+4*Inpc-Iapc) + dx*dx*dx*(-Ippc+3*Icpc-3*Inpc+Iapc)), + Ipc = Icpc + 0.5f*(dx*(-Ippc + Inpc) + dx*dx*(2*Ippc - 5*Icpc + 4*Inpc - Iapc) + + dx*dx*dx*(-Ippc + 3*Icpc - 3*Inpc + Iapc)), Ipcc = (Tfloat)(*this)(px,y,z,c), Iccc = (Tfloat)(*this)(x, y,z,c), Incc = (Tfloat)(*this)(nx,y,z,c), Iacc = (Tfloat)(*this)(ax,y,z,c), - Icc = Iccc + 0.5f*(dx*(-Ipcc+Incc) + dx*dx*(2*Ipcc-5*Iccc+4*Incc-Iacc) + dx*dx*dx*(-Ipcc+3*Iccc-3*Incc+Iacc)), + Icc = Iccc + 0.5f*(dx*(-Ipcc + Incc) + dx*dx*(2*Ipcc - 5*Iccc + 4*Incc - Iacc) + + dx*dx*dx*(-Ipcc + 3*Iccc - 3*Incc + Iacc)), Ipnc = (Tfloat)(*this)(px,ny,z,c), Icnc = (Tfloat)(*this)(x,ny,z,c), Innc = (Tfloat)(*this)(nx,ny,z,c), Ianc = (Tfloat)(*this)(ax,ny,z,c), - Inc = Icnc + 0.5f*(dx*(-Ipnc+Innc) + dx*dx*(2*Ipnc-5*Icnc+4*Innc-Ianc) + dx*dx*dx*(-Ipnc+3*Icnc-3*Innc+Ianc)), + Inc = Icnc + 0.5f*(dx*(-Ipnc + Innc) + dx*dx*(2*Ipnc - 5*Icnc + 4*Innc - Ianc) + + dx*dx*dx*(-Ipnc + 3*Icnc - 3*Innc + Ianc)), Ipac = (Tfloat)(*this)(px,ay,z,c), Icac = (Tfloat)(*this)(x,ay,z,c), Inac = (Tfloat)(*this)(nx,ay,z,c), Iaac = (Tfloat)(*this)(ax,ay,z,c), - Iac = Icac + 0.5f*(dx*(-Ipac+Inac) + dx*dx*(2*Ipac-5*Icac+4*Inac-Iaac) + dx*dx*dx*(-Ipac+3*Icac-3*Inac+Iaac)), - Ic = Icc + 0.5f*(dy*(-Ipc+Inc) + dy*dy*(2*Ipc-5*Icc+4*Inc-Iac) + dy*dy*dy*(-Ipc+3*Icc-3*Inc+Iac)), + Iac = Icac + 0.5f*(dx*(-Ipac + Inac) + dx*dx*(2*Ipac - 5*Icac + 4*Inac - Iaac) + + dx*dx*dx*(-Ipac + 3*Icac - 3*Inac + Iaac)), + Ic = Icc + 0.5f*(dy*(-Ipc + Inc) + dy*dy*(2*Ipc - 5*Icc + 4*Inc - Iac) + + dy*dy*dy*(-Ipc + 3*Icc - 3*Inc + Iac)), Ippn = (Tfloat)(*this)(px,py,nz,c), Icpn = (Tfloat)(*this)(x,py,nz,c), Inpn = (Tfloat)(*this)(nx,py,nz,c), Iapn = (Tfloat)(*this)(ax,py,nz,c), - Ipn = Icpn + 0.5f*(dx*(-Ippn+Inpn) + dx*dx*(2*Ippn-5*Icpn+4*Inpn-Iapn) + dx*dx*dx*(-Ippn+3*Icpn-3*Inpn+Iapn)), + Ipn = Icpn + 0.5f*(dx*(-Ippn + Inpn) + dx*dx*(2*Ippn - 5*Icpn + 4*Inpn - Iapn) + + dx*dx*dx*(-Ippn + 3*Icpn - 3*Inpn + Iapn)), Ipcn = (Tfloat)(*this)(px,y,nz,c), Iccn = (Tfloat)(*this)(x, y,nz,c), Incn = (Tfloat)(*this)(nx,y,nz,c), Iacn = (Tfloat)(*this)(ax,y,nz,c), - Icn = Iccn + 0.5f*(dx*(-Ipcn+Incn) + dx*dx*(2*Ipcn-5*Iccn+4*Incn-Iacn) + dx*dx*dx*(-Ipcn+3*Iccn-3*Incn+Iacn)), + Icn = Iccn + 0.5f*(dx*(-Ipcn + Incn) + dx*dx*(2*Ipcn - 5*Iccn + 4*Incn - Iacn) + + dx*dx*dx*(-Ipcn + 3*Iccn - 3*Incn + Iacn)), Ipnn = (Tfloat)(*this)(px,ny,nz,c), Icnn = (Tfloat)(*this)(x,ny,nz,c), Innn = (Tfloat)(*this)(nx,ny,nz,c), Iann = (Tfloat)(*this)(ax,ny,nz,c), - Inn = Icnn + 0.5f*(dx*(-Ipnn+Innn) + dx*dx*(2*Ipnn-5*Icnn+4*Innn-Iann) + dx*dx*dx*(-Ipnn+3*Icnn-3*Innn+Iann)), + Inn = Icnn + 0.5f*(dx*(-Ipnn + Innn) + dx*dx*(2*Ipnn - 5*Icnn + 4*Innn - Iann) + + dx*dx*dx*(-Ipnn + 3*Icnn - 3*Innn + Iann)), Ipan = (Tfloat)(*this)(px,ay,nz,c), Ican = (Tfloat)(*this)(x,ay,nz,c), Inan = (Tfloat)(*this)(nx,ay,nz,c), Iaan = (Tfloat)(*this)(ax,ay,nz,c), - Ian = Ican + 0.5f*(dx*(-Ipan+Inan) + dx*dx*(2*Ipan-5*Ican+4*Inan-Iaan) + dx*dx*dx*(-Ipan+3*Ican-3*Inan+Iaan)), - In = Icn + 0.5f*(dy*(-Ipn+Inn) + dy*dy*(2*Ipn-5*Icn+4*Inn-Ian) + dy*dy*dy*(-Ipn+3*Icn-3*Inn+Ian)), + Ian = Ican + 0.5f*(dx*(-Ipan + Inan) + dx*dx*(2*Ipan - 5*Ican + 4*Inan - Iaan) + + dx*dx*dx*(-Ipan + 3*Ican - 3*Inan + Iaan)), + In = Icn + 0.5f*(dy*(-Ipn + Inn) + dy*dy*(2*Ipn - 5*Icn + 4*Inn - Ian) + + dy*dy*dy*(-Ipn + 3*Icn - 3*Inn + Ian)), Ippa = (Tfloat)(*this)(px,py,az,c), Icpa = (Tfloat)(*this)(x,py,az,c), Inpa = (Tfloat)(*this)(nx,py,az,c), Iapa = (Tfloat)(*this)(ax,py,az,c), - Ipa = Icpa + 0.5f*(dx*(-Ippa+Inpa) + dx*dx*(2*Ippa-5*Icpa+4*Inpa-Iapa) + dx*dx*dx*(-Ippa+3*Icpa-3*Inpa+Iapa)), + Ipa = Icpa + 0.5f*(dx*(-Ippa + Inpa) + dx*dx*(2*Ippa - 5*Icpa + 4*Inpa - Iapa) + + dx*dx*dx*(-Ippa + 3*Icpa - 3*Inpa + Iapa)), Ipca = (Tfloat)(*this)(px,y,az,c), Icca = (Tfloat)(*this)(x, y,az,c), Inca = (Tfloat)(*this)(nx,y,az,c), Iaca = (Tfloat)(*this)(ax,y,az,c), - Ica = Icca + 0.5f*(dx*(-Ipca+Inca) + dx*dx*(2*Ipca-5*Icca+4*Inca-Iaca) + dx*dx*dx*(-Ipca+3*Icca-3*Inca+Iaca)), + Ica = Icca + 0.5f*(dx*(-Ipca + Inca) + dx*dx*(2*Ipca - 5*Icca + 4*Inca - Iaca) + + dx*dx*dx*(-Ipca + 3*Icca - 3*Inca + Iaca)), Ipna = (Tfloat)(*this)(px,ny,az,c), Icna = (Tfloat)(*this)(x,ny,az,c), Inna = (Tfloat)(*this)(nx,ny,az,c), Iana = (Tfloat)(*this)(ax,ny,az,c), - Ina = Icna + 0.5f*(dx*(-Ipna+Inna) + dx*dx*(2*Ipna-5*Icna+4*Inna-Iana) + dx*dx*dx*(-Ipna+3*Icna-3*Inna+Iana)), + Ina = Icna + 0.5f*(dx*(-Ipna + Inna) + dx*dx*(2*Ipna - 5*Icna + 4*Inna - Iana) + + dx*dx*dx*(-Ipna + 3*Icna - 3*Inna + Iana)), Ipaa = (Tfloat)(*this)(px,ay,az,c), Icaa = (Tfloat)(*this)(x,ay,az,c), Inaa = (Tfloat)(*this)(nx,ay,az,c), Iaaa = (Tfloat)(*this)(ax,ay,az,c), - Iaa = Icaa + 0.5f*(dx*(-Ipaa+Inaa) + dx*dx*(2*Ipaa-5*Icaa+4*Inaa-Iaaa) + dx*dx*dx*(-Ipaa+3*Icaa-3*Inaa+Iaaa)), - Ia = Ica + 0.5f*(dy*(-Ipa+Ina) + dy*dy*(2*Ipa-5*Ica+4*Ina-Iaa) + dy*dy*dy*(-Ipa+3*Ica-3*Ina+Iaa)); - return Ic + 0.5f*(dz*(-Ip+In) + dz*dz*(2*Ip-5*Ic+4*In-Ia) + dz*dz*dz*(-Ip+3*Ic-3*In+Ia)); + Iaa = Icaa + 0.5f*(dx*(-Ipaa + Inaa) + dx*dx*(2*Ipaa - 5*Icaa + 4*Inaa - Iaaa) + + dx*dx*dx*(-Ipaa + 3*Icaa - 3*Inaa + Iaaa)), + Ia = Ica + 0.5f*(dy*(-Ipa + Ina) + dy*dy*(2*Ipa - 5*Ica + 4*Ina - Iaa) + + dy*dy*dy*(-Ipa + 3*Ica - 3*Ina + Iaa)); + return Ic + 0.5f*(dz*(-Ip + In) + dz*dz*(2*Ip - 5*Ic + 4*In - Ia) + dz*dz*dz*(-Ip + 3*Ic - 3*In + Ia)); } //! Return damped pixel value, using cubic interpolation and Neumann boundary conditions for the XYZ-coordinates. @@ -12704,20 +12692,44 @@ return valmax_value?max_value:val; } - //! Set pixel value, using linear interpolation for the X and Y-coordinates. + //! Set pixel value, using linear interpolation for the X-coordinates. /** - Set pixel value at specified coordinates (\c fx,\c fy,\c z,\c c) in the image instance, in a way that - the value is spread amongst several neighbors if the pixel coordinates are indeed float-valued. + Set pixel value at specified coordinates (\c fx,\c y,\c z,\c c) in the image instance, in a way that + the value is spread amongst several neighbors if the pixel coordinates are float-valued. \param value Pixel value to set. \param fx X-coordinate of the pixel value (float-valued). - \param fy Y-coordinate of the pixel value (float-valued). + \param y Y-coordinate of the pixel value. \param z Z-coordinate of the pixel value. \param c C-coordinate of the pixel value. \param is_added Tells if the pixel value is added to (\c true), or simply replace (\c false) the current image pixel(s). \return A reference to the current image instance. \note - - If specified coordinates are outside image bounds, no operations are performed. + - Calling this method with out-of-bounds coordinates does nothing. + **/ + CImg& set_linear_atX(const T& value, const float fx, const int y=0, const int z=0, const int c=0, + const bool is_added=false) { + const int + x = (int)fx - (fx>=0?0:1), nx = x + 1; + const float + dx = fx - x; + if (y>=0 && y=0 && z=0 && c=0 && x=0 && nx& set_linear_atXY(const T& value, const float fx, const float fy=0, const int z=0, const int c=0, const bool is_added=false) { @@ -12730,21 +12742,21 @@ if (z>=0 && z=0 && c=0 && y=0 && x=0 && nx=0 && ny=0 && x=0 && nx=0 && z=0 && y=0 && x=0 && nx=0 && ny=0 && x=0 && nx=0 && nz=0 && y=0 && x=0 && nx=0 && ny=0 && x=0 && nx"". @@ -12829,17 +12843,20 @@ - Otherwise, if the maximum number of string characters is exceeded, the value string is cut off and terminated by character \c '\0'. In that case, the returned image size is max_size + 1. **/ - CImg value_string(const char separator=',', const unsigned int max_size=0) const { + CImg value_string(const char separator=',', const unsigned int max_size=0, + const char *const format=0) const { if (is_empty()) return CImg::string(""); CImgList items; CImg s_item(256); *s_item = 0; const T *ptrs = _data; unsigned int string_size = 0; + const char *const _format = format?format:cimg::type::format(); + for (unsigned long off = 0, siz = (unsigned int)size(); off::format(),cimg::type::format(*(ptrs++))); + const unsigned int printed_size = 1U + cimg_snprintf(s_item,s_item._width,_format, + cimg::type::format(*(ptrs++))); CImg item(s_item._data,printed_size); - item[printed_size-1] = separator; + item[printed_size - 1] = separator; item.move_to(items); if (max_size) string_size+=printed_size; } @@ -12887,9 +12904,9 @@ return false; } - //! Test if image instance contains a 'nan' value. + //! Test if image instance contains a NaN value. /** - Return \c true, if image instance contains a 'nan' value, and \c false otherwise. + Return \c true, if image instance contains a NaN value, and \c false otherwise. **/ bool is_nan() const { if (cimg::type::is_float()) cimg_for(*this,p,T) if (cimg::type::is_nan((float)*p)) return true; @@ -13158,10 +13175,10 @@ \note - Return \c true only if all these conditions are verified: - The image instance is \e not empty. - - 0<=x<=\ref width()-1. - - 0<=y<=\ref height()-1. - - 0<=z<=\ref depth()-1. - - 0<=c<=\ref spectrum()-1. + - 0<=x<=\ref width() - 1. + - 0<=y<=\ref height() - 1. + - 0<=z<=\ref depth() - 1. + - 0<=c<=\ref spectrum() - 1. **/ bool containsXYZC(const int x, const int y=0, const int z=0, const int c=0) const { return !is_empty() && x>=0 && x=0 && y=0 && z=0 && c=_data+siz) return false; + if (is_empty() || ppixel<_data || ppixel>=_data + siz) return false; unsigned long off = (unsigned long)(ppixel - _data); const unsigned long nc = off/whd; off%=whd; @@ -13211,7 +13228,7 @@ bool contains(const T& pixel, t& x, t& y, t& z) const { const unsigned long wh = (unsigned long)_width*_height, whd = wh*_depth, siz = whd*_spectrum; const T *const ppixel = &pixel; - if (is_empty() || ppixel<_data || ppixel>=_data+siz) return false; + if (is_empty() || ppixel<_data || ppixel>=_data + siz) return false; unsigned long off = ((unsigned long)(ppixel - _data))%whd; const unsigned long nz = off/wh; off%=wh; @@ -13228,7 +13245,7 @@ bool contains(const T& pixel, t& x, t& y) const { const unsigned long wh = (unsigned long)_width*_height, siz = wh*_depth*_spectrum; const T *const ppixel = &pixel; - if (is_empty() || ppixel<_data || ppixel>=_data+siz) return false; + if (is_empty() || ppixel<_data || ppixel>=_data + siz) return false; unsigned long off = ((unsigned int)(ppixel - _data))%wh; const unsigned long ny = off/_width, nx = off%_width; x = (t)nx; y = (t)ny; @@ -13242,7 +13259,7 @@ template bool contains(const T& pixel, t& x) const { const T *const ppixel = &pixel; - if (is_empty() || ppixel<_data || ppixel>=_data+size()) return false; + if (is_empty() || ppixel<_data || ppixel>=_data + size()) return false; x = (t)(((unsigned long)(ppixel - _data))%_width); return true; } @@ -13306,7 +13323,7 @@ // Check consistency for the particular case of an empty 3d object. if (is_empty()) { if (primitives || colors || opacities) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "3d object (%u,%u) defines no vertices but %u primitives, " "%u colors and %lu opacities", _width,primitives._width,primitives._width, @@ -13318,19 +13335,19 @@ // Check consistency of vertices. if (_height!=3 || _depth>1 || _spectrum>1) { // Check vertices dimensions. - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "3d object (%u,%u) has invalid vertex dimensions (%u,%u,%u,%u)", _width,primitives._width,_width,_height,_depth,_spectrum); return false; } - if (colors._width>primitives._width+1) { - if (error_message) std::sprintf(error_message, + if (colors._width>primitives._width + 1) { + if (error_message) cimg_sprintf(error_message, "3d object (%u,%u) defines %u colors", _width,primitives._width,colors._width); return false; } if (opacities.size()>primitives._width) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "3d object (%u,%u) defines %lu opacities", _width,primitives._width,(unsigned long)opacities.size()); return false; @@ -13345,7 +13362,7 @@ case 1 : { // Point. const unsigned int i0 = (unsigned int)primitive(0); if (i0>=_width) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "3d object (%u,%u) refers to invalid vertex indice %u in " "point primitive [%u]", _width,primitives._width,i0,l); @@ -13357,7 +13374,7 @@ i0 = (unsigned int)primitive(0), i1 = (unsigned int)primitive(1); if (i0>=_width || i1>=_width) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "3d object (%u,%u) refers to invalid vertex indices (%u,%u) in " "sphere primitive [%u]", _width,primitives._width,i0,i1,l); @@ -13370,7 +13387,7 @@ i0 = (unsigned int)primitive(0), i1 = (unsigned int)primitive(1); if (i0>=_width || i1>=_width) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "3d object (%u,%u) refers to invalid vertex indices (%u,%u) in " "segment primitive [%u]", _width,primitives._width,i0,i1,l); @@ -13384,7 +13401,7 @@ i1 = (unsigned int)primitive(1), i2 = (unsigned int)primitive(2); if (i0>=_width || i1>=_width || i2>=_width) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "3d object (%u,%u) refers to invalid vertex indices (%u,%u,%u) in " "triangle primitive [%u]", _width,primitives._width,i0,i1,i2,l); @@ -13399,7 +13416,7 @@ i2 = (unsigned int)primitive(2), i3 = (unsigned int)primitive(3); if (i0>=_width || i1>=_width || i2>=_width || i3>=_width) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "3d object (%u,%u) refers to invalid vertex indices (%u,%u,%u,%u) in " "quadrangle primitive [%u]", _width,primitives._width,i0,i1,i2,i3,l); @@ -13407,7 +13424,7 @@ } } break; default : - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "3d object (%u,%u) defines an invalid primitive [%u] of size %u", _width,primitives._width,l,(unsigned int)psiz); return false; @@ -13418,7 +13435,7 @@ cimglist_for(colors,c) { const CImg& color = colors[c]; if (!color) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "3d object (%u,%u) defines no color for primitive [%u]", _width,primitives._width,c); return false; @@ -13429,7 +13446,7 @@ if (colors._width>primitives._width) { const CImg &light = colors.back(); if (!light || light._depth>1) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "3d object (%u,%u) defines an invalid light texture (%u,%u,%u,%u)", _width,primitives._width,light._width, light._height,light._depth,light._spectrum); @@ -13455,7 +13472,7 @@ // Check instance dimension and header. if (_width!=1 || _height<8 || _depth!=1 || _spectrum!=1) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d has invalid dimensions (%u,%u,%u,%u)", _width,_height,_depth,_spectrum); return false; @@ -13463,7 +13480,7 @@ const T *ptrs = _data, *const ptre = end(); if (!_is_CImg3d(*(ptrs++),'C') || !_is_CImg3d(*(ptrs++),'I') || !_is_CImg3d(*(ptrs++),'m') || !_is_CImg3d(*(ptrs++),'g') || !_is_CImg3d(*(ptrs++),'3') || !_is_CImg3d(*(ptrs++),'d')) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d header not found"); return false; } @@ -13475,7 +13492,7 @@ if (!full_check) { const unsigned long minimal_size = 8UL + 3*nb_points + 6*nb_primitives; if (_data + minimal_size>ptre) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) has only %lu values, while at least %lu values were expected", nb_points,nb_primitives,size(),minimal_size); return false; @@ -13485,31 +13502,31 @@ // Check consistency of vertex data. if (!nb_points) { if (nb_primitives) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) defines no vertices but %u primitives", nb_points,nb_primitives,nb_primitives); return false; } if (ptrs!=ptre) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) is an empty object but contains %u value%s " "more than expected", - nb_points,nb_primitives,(unsigned int)(ptre-ptrs),(ptre-ptrs)>1?"s":""); + nb_points,nb_primitives,(unsigned int)(ptre - ptrs),(ptre - ptrs)>1?"s":""); return false; } return true; } - if (ptrs+3*nb_points>ptre) { - if (error_message) std::sprintf(error_message, + if (ptrs + 3*nb_points>ptre) { + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) defines only %u vertices data", - nb_points,nb_primitives,(unsigned int)(ptre-ptrs)/3); + nb_points,nb_primitives,(unsigned int)(ptre - ptrs)/3); return false; } ptrs+=3*nb_points; // Check consistency of primitive data. if (ptrs==ptre) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) defines %u vertices but no primitive", nb_points,nb_primitives,nb_points); return false; @@ -13523,7 +13540,7 @@ case 1 : { // Point. const unsigned int i0 = cimg::float2uint((float)*(ptrs++)); if (i0>=nb_points) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) refers to invalid vertex indice %u in point primitive [%u]", nb_points,nb_primitives,i0,p); return false; @@ -13535,7 +13552,7 @@ i1 = cimg::float2uint((float)*(ptrs++)); ptrs+=3; if (i0>=nb_points || i1>=nb_points) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u) in " "sphere primitive [%u]", nb_points,nb_primitives,i0,i1,p); @@ -13548,7 +13565,7 @@ i1 = cimg::float2uint((float)*(ptrs++)); if (nb_inds==6) ptrs+=4; if (i0>=nb_points || i1>=nb_points) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u) in " "segment primitive [%u]", nb_points,nb_primitives,i0,i1,p); @@ -13562,7 +13579,7 @@ i2 = cimg::float2uint((float)*(ptrs++)); if (nb_inds==9) ptrs+=6; if (i0>=nb_points || i1>=nb_points || i2>=nb_points) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u,%u) in " "triangle primitive [%u]", nb_points,nb_primitives,i0,i1,i2,p); @@ -13577,7 +13594,7 @@ i3 = cimg::float2uint((float)*(ptrs++)); if (nb_inds==12) ptrs+=8; if (i0>=nb_points || i1>=nb_points || i2>=nb_points || i3>=nb_points) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) refers to invalid vertex indices (%u,%u,%u,%u) in " "quadrangle primitive [%u]", nb_points,nb_primitives,i0,i1,i2,i3,p); @@ -13585,23 +13602,23 @@ } } break; default : - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) defines an invalid primitive [%u] of size %u", nb_points,nb_primitives,p,nb_inds); return false; } if (ptrs>ptre) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) has incomplete primitive data for primitive [%u], " "%u values missing", - nb_points,nb_primitives,p,(unsigned int)(ptrs-ptre)); + nb_points,nb_primitives,p,(unsigned int)(ptrs - ptre)); return false; } } // Check consistency of color data. if (ptrs==ptre) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) defines no color/texture data", nb_points,nb_primitives); return false; @@ -13609,10 +13626,13 @@ for (unsigned int c = 0; c=c) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) refers to invalid shared sprite/texture indice %u " "for primitive [%u]", nb_points,nb_primitives,w,c); @@ -13621,27 +13641,30 @@ } else ptrs+=w*h*s; } if (ptrs>ptre) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) has incomplete color/texture data for primitive [%u], " "%u values missing", - nb_points,nb_primitives,c,(unsigned int)(ptrs-ptre)); + nb_points,nb_primitives,c,(unsigned int)(ptrs - ptre)); return false; } } // Check consistency of opacity data. if (ptrs==ptre) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) defines no opacity data", nb_points,nb_primitives); return false; } for (unsigned int o = 0; o=o) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) refers to invalid shared opacity indice %u " "for primitive [%u]", nb_points,nb_primitives,w,o); @@ -13650,7 +13673,7 @@ } else ptrs+=w*h*s; } if (ptrs>ptre) { - if (error_message) std::sprintf(error_message, + if (error_message) cimg_sprintf(error_message, "CImg3d (%u,%u) has incomplete opacity data for primitive [%u]", nb_points,nb_primitives,o); return false; @@ -13659,16 +13682,16 @@ // Check end of data. if (ptrs1?"s":""); + nb_points,nb_primitives,(unsigned int)(ptre - ptrs),(ptre - ptrs)>1?"s":""); return false; } return true; } static bool _is_CImg3d(const T val, const char c) { - return val>=(T)c && val<(T)(c+1); + return val>=(T)c && val<(T)(c + 1); } //@} @@ -13678,950 +13701,5172 @@ //@{ //------------------------------------- - // Define the math formula parser/compiler and evaluator. + // Define the math formula parser/compiler and expression evaluator. struct _cimg_math_parser { - CImgList code; - CImg opcode; - const CImg* p_code; - CImgList labelM; - CImg level, labelMpos, label1pos; CImg mem; - CImg expr; - const CImg& reference; - CImg reference_stats; - double median_value; - bool is_median_value; - unsigned int mempos, result; + CImg memtype; + CImgList _code, &code; + CImg opcode; + const CImg *p_code_begin, *p_code_end, *p_code; + + CImg expr, pexpr; + const CImg& imgin; + const CImgList& listin; + CImg &imgout; + CImgList& listout; + + CImg _img_stats, &img_stats; + CImgList _list_stats, &list_stats, _list_median, &list_median; + CImg mem_img_stats; + + CImg level, variable_pos, reserved_label; + CImgList variable_def, function_def, function_body; + char *user_function; + + unsigned int mempos, mem_img_median, debug_indent, init_size, result_dim; + double *result; const char *const calling_function; typedef double (*mp_func)(_cimg_math_parser&); +#define _cimg_mp_is_constant(arg) (memtype[arg]==1) // Is constant? +#define _cimg_mp_is_scalar(arg) (memtype[arg]<2) // Is scalar? +#define _cimg_mp_is_temp(arg) (!memtype[arg]) // Is temporary scalar? +#define _cimg_mp_is_variable(arg) (memtype[arg]==-1) // Is scalar variable? +#define _cimg_mp_is_vector(arg) (memtype[arg]>1) // Is vector? +#define _cimg_mp_vector_size(arg) (_cimg_mp_is_scalar(arg)?0U:(unsigned int)memtype[arg] - 1) // Vector size +#define _cimg_mp_calling_function calling_function_s()._data +#define _cimg_mp_check_type(arg,n_arg,s_op,mode,N) check_type(arg,n_arg,s_op,mode,N,ss,se,saved_char) +#define _cimg_mp_check_constant(arg,n_arg,s_op,is_strict) check_constant(arg,n_arg,s_op,is_strict,ss,se,saved_char) +#define _cimg_mp_check_matrix_square(arg,n_arg,s_op) check_matrix_square(arg,n_arg,s_op,ss,se,saved_char) +#define _cimg_mp_check_vector0(dim,s_op) check_vector0(dim,s_op,ss,se,saved_char) +#define _cimg_mp_defunc(mp) (*(mp_func)(*(mp).opcode))(mp) #define _cimg_mp_return(x) { *se = saved_char; return x; } -#define _cimg_mp_opcode0(op) _cimg_mp_return(opcode0(op)); -#define _cimg_mp_opcode1(op,i1) _cimg_mp_return(opcode1(op,i1)); -#define _cimg_mp_opcode2(op,i1,i2) { const unsigned int _i1 = i1, _i2 = i2; _cimg_mp_return(opcode2(op,_i1,_i2)); } -#define _cimg_mp_opcode3(op,i1,i2,i3) \ - { const unsigned int _i1 = i1, _i2 = i2, _i3 = i3; _cimg_mp_return(opcode3(op,_i1,_i2,_i3)); } -#define _cimg_mp_opcode6(op,i1,i2,i3,i4,i5,i6) \ - { const unsigned int _i1 = i1, _i2 = i2, _i3 = i3, _i4 = i4, _i5 = i5, _i6 = i6; \ - _cimg_mp_return(opcode6(op,_i1,_i2,_i3,_i4,_i5,_i6)); } - -#if defined(_WIN64) - // On Win64 and gcc 4.7, sizeof(long)!=sizeof(pointer), so a workaround is needed.. -#define _cimg_mp_enfunc(op) (long)((char*)(op)-(char*)mp_u) -#define _cimg_mp_defunc(mp) (*(mp_func)((char*)mp_u+(mp).opcode[0]))(mp) -#else -#define _cimg_mp_enfunc(op) (long)(op) -#define _cimg_mp_defunc(mp) (*(mp_func)((mp).opcode[0]))(mp) -#endif +#define _cimg_mp_constant(val) _cimg_mp_return(constant(val)) +#define _cimg_mp_scalar0(op) _cimg_mp_return(scalar0(op)) +#define _cimg_mp_scalar1(op,i1) _cimg_mp_return(scalar1(op,i1)) +#define _cimg_mp_scalar2(op,i1,i2) _cimg_mp_return(scalar2(op,i1,i2)) +#define _cimg_mp_scalar3(op,i1,i2,i3) _cimg_mp_return(scalar3(op,i1,i2,i3)) +#define _cimg_mp_scalar6(op,i1,i2,i3,i4,i5,i6) _cimg_mp_return(scalar6(op,i1,i2,i3,i4,i5,i6)) +#define _cimg_mp_scalar7(op,i1,i2,i3,i4,i5,i6,i7) _cimg_mp_return(scalar7(op,i1,i2,i3,i4,i5,i6,i7)) +#define _cimg_mp_vector1_v(op,i1) _cimg_mp_return(vector1_v(op,i1)) +#define _cimg_mp_vector2_sv(op,i1,i2) _cimg_mp_return(vector2_sv(op,i1,i2)) +#define _cimg_mp_vector2_vs(op,i1,i2) _cimg_mp_return(vector2_vs(op,i1,i2)) +#define _cimg_mp_vector2_vv(op,i1,i2) _cimg_mp_return(vector2_vv(op,i1,i2)) +#define _cimg_mp_vector3_vss(op,i1,i2,i3) _cimg_mp_return(vector3_vss(op,i1,i2,i3)) // Constructors. - _cimg_math_parser():reference(CImg::empty()),median_value(0),is_median_value(false),calling_function(0) {} - - _cimg_math_parser(const CImg& img, const char *const expression, const char *const funcname=0): - reference(img),median_value(0),is_median_value(false),calling_function(funcname?funcname:"cimg_math_parser") { - unsigned int l = 0; - if (expression) { - l = (unsigned int)std::strlen(expression); - expr.assign(expression,l+1); - if (*expr._data) { - char *d = expr._data; - for (const char *s = expr._data; *s || (bool)(*d=0); ++s) if (*s!=' ') *(d++) = *s; - l = (unsigned int)(d - expr._data); - } - } - if (!l) throw CImgArgumentException("[_cimg_math_parser] " - "CImg<%s>::%s(): Empty specified expression.", - pixel_type(),calling_function); - - int lv = 0; // Count parentheses/brackets level of expression. - level.assign(l); + _cimg_math_parser(const char *const expression, const char *const funcname=0, + const CImg& img_input=CImg::const_empty(), CImg *const img_output=0, + const CImgList *const list_input=0, CImgList *const list_output=0): + code(_code),imgin(img_input),listin(list_input?*list_input:CImgList::const_empty()), + imgout(img_output?*img_output:CImg::empty()),listout(list_output?*list_output:CImgList::empty()), + img_stats(_img_stats),list_stats(_list_stats),list_median(_list_median),user_function(0), + mem_img_median(~0U),debug_indent(0),init_size(0),result_dim(0), + calling_function(funcname?funcname:"cimg_math_parser") { + if (!expression || !*expression) + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: Empty expression.", + pixel_type(),_cimg_mp_calling_function); + const char *_expression = expression; + while (*_expression && *_expression<=' ') ++_expression; + CImg::string(_expression).move_to(expr); + + // Ease the retrieval of previous non-space characters afterwards. + pexpr.assign(expr._width); + const char *ps; + char c, *pe = pexpr._data; + for (ps = expr._data, c = ' '; *ps; ++ps) { + if (*ps!=' ') c = *ps; + *(pe++) = c; + } + *pe = 0; + + // Count parentheses/brackets level of expression. + level.assign(expr._width - 1); + int lv = 0; unsigned int *pd = level._data; - for (const char *ps = expr._data; *ps && lv>=0; ++ps) + for (ps = expr._data; *ps && lv>=0; ++ps) *(pd++) = (unsigned int)(*ps=='('||*ps=='['?lv++:*ps==')'||*ps==']'?--lv:lv); if (lv!=0) { + cimg::strellipsize(expr,64); throw CImgArgumentException("[_cimg_math_parser] " - "CImg<%s>::%s(): Unbalanced parentheses/brackets in specified expression '%s'.", - pixel_type(),calling_function, + "CImg<%s>::%s: Unbalanced parentheses/brackets, in expression '%s'.", + pixel_type(),_cimg_mp_calling_function, expr._data); } - // Init constant values. - mem.assign(512); - mem[0] = 0; - mem[1] = 1; - mem[2] = 2; - mem[3] = (double)reference._width; - mem[4] = (double)reference._height; - mem[5] = (double)reference._depth; - mem[6] = (double)reference._spectrum; - mem[7] = cimg::PI; - mem[8] = std::exp(1.0); // Then [9] = x, [10] = y, [11] = z, [12] = c - mempos = 13; - labelMpos.assign(8); - label1pos.assign(128,1,1,1,~0U); - label1pos['w'] = 3; - label1pos['h'] = 4; - label1pos['d'] = 5; - label1pos['s'] = 6; - label1pos[0] = 7; // pi - label1pos['e'] = 8; - label1pos['x'] = 9; - label1pos['y'] = 10; - label1pos['z'] = 11; - label1pos['c'] = 12; - result = compile(expr._data,expr._data+l); // Compile formula into a serie of opcodes. - } - - // Insert code instructions. - unsigned int opcode0(const mp_func op) { - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(_cimg_mp_enfunc(op),pos).move_to(code); - return pos; - } - - unsigned int opcode1(const mp_func op, const unsigned int arg1) { - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(_cimg_mp_enfunc(op),pos,arg1).move_to(code); - return pos; - } - - unsigned int opcode2(const mp_func op, const unsigned int arg1, const unsigned int arg2) { - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(_cimg_mp_enfunc(op),pos,arg1,arg2).move_to(code); - return pos; - } - - unsigned int opcode3(const mp_func op, - const unsigned int arg1, const unsigned int arg2, const unsigned int arg3) { - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(_cimg_mp_enfunc(op),pos,arg1,arg2,arg3).move_to(code); - return pos; - } - unsigned int opcode6(const mp_func op, - const unsigned int arg1, const unsigned int arg2, const unsigned int arg3, - const unsigned int arg4, const unsigned int arg5, const unsigned int arg6) { - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(_cimg_mp_enfunc(op),pos,arg1,arg2,arg3,arg4,arg5,arg6).move_to(code); - return pos; + // Init constant values. + mem.assign(96); + memtype.assign(96); + double *p_mem = mem._data; + for (unsigned int i = 0; i<=10; ++i) *(p_mem++) = (double)i; // mem[0-10] + for (unsigned int i = 1; i<=5; ++i) *(p_mem++) = -(double)i; // mem[11-15] + *(p_mem++) = 0.5; // mem[16] + *(p_mem++) = 0; // mem[17] = thread_id + *(p_mem++) = (double)imgin._width; // mem[18] + *(p_mem++) = (double)imgin._height; // mem[19] + *(p_mem++) = (double)imgin._depth; // mem[20] + *(p_mem++) = (double)imgin._spectrum; // mem[21] + *(p_mem++) = (double)imgin._is_shared; // mem[22] + *(p_mem++) = (double)imgin._width*imgin._height; // mem[23] + *(p_mem++) = (double)imgin._width*imgin._height*imgin._depth; // mem[24] + *(p_mem++) = (double)imgin._width*imgin._height*imgin._depth*imgin._spectrum; // mem[25] + *(p_mem++) = cimg::PI; // mem[26] + *(p_mem++) = std::exp(1.0); // mem[27] + + // Then, [28] = x, [29] = y, [30] = z and [31] = c. +#define _cimg_mp_x 28 +#define _cimg_mp_y 29 +#define _cimg_mp_z 30 +#define _cimg_mp_c 31 + + // Set value property : + // { -1 = variable | 0 = regular value | 1 = compile time constant | N>1 = constant ptr to vector[N-1] }. + std::memset(memtype._data,0,sizeof(int)*memtype._width); + int *p_memtype = memtype._data; for (unsigned int i = 0; i<28; ++i) *(p_memtype++) = 1; + memtype[17] = 0; + + mempos = _cimg_mp_c + 1; + variable_pos.assign(8); + reserved_label.assign(128,1,1,1,~0U); + reserved_label['t'] = 17; + reserved_label['w'] = 18; + reserved_label['h'] = 19; + reserved_label['d'] = 20; + reserved_label['s'] = 21; + reserved_label['r'] = 22; + reserved_label[0] = 23; // wh + reserved_label[1] = 24; // whd + reserved_label[2] = 25; // whds + reserved_label[3] = 26; // pi + reserved_label['e'] = 27; + reserved_label[29] = 0; // interpolation + reserved_label[30] = 0; // boundary + reserved_label['x'] = _cimg_mp_x; + reserved_label['y'] = _cimg_mp_y; + reserved_label['z'] = _cimg_mp_z; + reserved_label['c'] = _cimg_mp_c; + // reserved_label[4-28] store also two-char variables: + // [4] = im, [5] = iM, [6] = ia, [7] = iv, [8] = is, [9] = ip, [10] = ic, + // [11] = xm, [12] = ym, [13] = zm, [14] = cm, [15] = xM, [16] = yM, [17] = zM, [18]=cM, [19]=i0...[28]=i9, + + // Compile expression into a serie of opcodes. + const unsigned int ind_result = compile(expr._data,expr._data + expr._width - 1,0,0); + p_code_end = code.end(); + + // Free resources used for parsing and prepare for evaluation. + if (_cimg_mp_is_vector(ind_result)) result_dim = _cimg_mp_vector_size(ind_result); + mem.resize(mempos,1,1,1,-1); + result = mem._data + ind_result; + memtype.assign(); + level.assign(); + variable_pos.assign(); + reserved_label.assign(); + expr.assign(); + pexpr.assign(); + opcode._width = opcode._depth = opcode._spectrum = 1; + opcode._is_shared = true; + + // Execute init() function if any specified. + p_code_begin = code._data + init_size; + if (init_size) { + mem[_cimg_mp_x] = mem[_cimg_mp_y] = mem[_cimg_mp_z] = mem[_cimg_mp_c] = 0; + for (p_code = code._data; p_code &op = *p_code; + opcode._data = op._data; opcode._height = op._height; + const uptrT target = opcode[1]; + mem[target] = _cimg_mp_defunc(*this); + } + } + } + + _cimg_math_parser(): + code(_code),p_code_begin(0),p_code_end(0), + imgin(CImg::const_empty()),listin(CImgList::const_empty()), + imgout(CImg::empty()),listout(CImgList::empty()), + img_stats(_img_stats),list_stats(_list_stats),list_median(_list_median),debug_indent(0), + result_dim(0),calling_function(0) { + mem.assign(1 + _cimg_mp_c,1,1,1,0); // Allow to skip 'is_empty?' test in operator()() + result = mem._data; + } + + _cimg_math_parser(const _cimg_math_parser& mp): + mem(mp.mem),code(mp.code),p_code_begin(mp.p_code_begin),p_code_end(mp.p_code_end), + imgin(mp.imgin),listin(mp.listin),imgout(mp.imgout),listout(mp.listout),img_stats(mp.img_stats), + list_stats(mp.list_stats),list_median(mp.list_median),debug_indent(0), + result_dim(mp.result_dim), result(mem._data + (mp.result - mp.mem._data)),calling_function(0) { +#ifdef cimg_use_openmp + mem[17] = omp_get_thread_num(); +#endif + opcode._width = opcode._depth = opcode._spectrum = 1; + opcode._is_shared = true; + } + + // Return 'true' is the specified mathematical expression requires the input image to be copied. + // Set 'is_parallelizable' to 'false' if expression should be evaluated with a single thread. + static bool needs_input_copy(const char *expression, bool &is_parallelizable) { + if (!expression || *expression=='>' || *expression=='<') return is_parallelizable = false; + for (const char *s = expression; *s; ++s) + if ((*s=='i' || *s=='j' || *s=='I' || *s=='J') && (s[1]=='(' || s[1]=='[')) { + if (s[2]=='#') is_parallelizable = false; + else { + const char opening = s[1], ending = opening=='('?')':']'; + const char *ns; + int level = 0; + for (ns = s + 2; *ns; ++ns) { // Find ending ')' or ']'. + if (*ns==ending && !level) break; + if (*ns==opening) ++level; else if (*ns==ending) --level; + } + if (*ns && (ns[1]!='=' || ns[2]=='=')) return true; + } + } else if (((*s=='R' || *s=='G' || *s=='B' || *s=='A' || *s=='I' || *s=='J') && s[1]!='#') || + (*s=='i' && s[1]>='0' && s[1]<='7' && s[2]!='#')) return true; + return false; } // Compilation procedure. - unsigned int compile(char *const ss, char *const se) { - if (!ss || se<=ss || !*ss) { + unsigned int compile(char *ss, char *se, const unsigned int depth, unsigned int *p_ref) { + if (depth>256) { + cimg::strellipsize(expr,64); throw CImgArgumentException("[_cimg_math_parser] " - "CImg<%s>::%s(): Missing item in specified expression '%s'.", - pixel_type(),calling_function, + "CImg<%s>::%s: Call stack overflow (infinite recursion?), " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + + const char *const ss0 = ss; + char c1, c2, c3, c4; + + if (ssss && (c1=*(se - 1))>0 && (c1<=' ' || c1==';')) --se; + } + if (se>ss && *(se - 1)==';') --se; + if (se<=ss || !*ss) { + cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: Missing item, in expression '%s'.", + pixel_type(),_cimg_mp_calling_function, expr._data); } + const unsigned int depth1 = depth + 1; + unsigned int pos, p1, p2, p3, arg1, arg2, arg3, arg4, arg5, arg6; char - *const se1 = se-1, *const se2 = se-2, *const se3 = se-3, *const se4 = se-4, - *const ss1 = ss+1, *const ss2 = ss+2, *const ss3 = ss+3, *const ss4 = ss+4, - *const ss5 = ss+5, *const ss6 = ss+6, *const ss7 = ss+7; + *const se1 = se - 1, *const se2 = se - 2, *const se3 = se - 3, + *const ss1 = ss + 1, *const ss2 = ss + 2, *const ss3 = ss + 3, *const ss4 = ss + 4, + *const ss5 = ss + 5, *const ss6 = ss + 6, *const ss7 = ss + 7, *const ss8 = ss + 8, + *s, *ps, *ns, *s0, *s1, *s2, *s3, sep = 0, end = 0; + double val, val1, val2; + const char *s_op; + mp_func op; + + // 'p_ref' is a 'unsigned int[7]' used to return a reference to an image or vector value + // linked to the returned memory slot (reference that cannot be determined at compile time). + // p_ref[0] can be { 0 = scalar (unlinked) | 1 = vector value | 2 = image value (offset) | + // 3 = image value (coordinates) | 4 = image value as a vector (offsets) | + // 5 = image value as a vector (coordinates) }. + // Depending on p_ref[0], the remaining p_ref[k] have the following meaning: + // When p_ref[0]==0, p_ref is actually unlinked. + // When p_ref[0]==1, p_ref = [ 1, vector_ind, offset ]. + // When p_ref[0]==2, p_ref = [ 2, image_ind (or ~0U), is_relative, offset ]. + // When p_ref[0]==3, p_ref = [ 3, image_ind (or ~0U), is_relative, x, y, z, c ]. + // When p_ref[0]==4, p_ref = [ 4, image_ind (or ~0U), is_relative, offset ]. + // When p_ref[0]==5, p_ref = [ 5, image_ind (or ~0U), is_relative, x, y, z ]. + if (p_ref) { *p_ref = 0; p_ref[1] = p_ref[2] = p_ref[3] = p_ref[4] = p_ref[5] = p_ref[6] = ~0U; } + const char saved_char = *se; *se = 0; - const unsigned int clevel = level[ss-expr._data], clevel1 = clevel+1; - if (*se1==';') return compile(ss,se1); + const unsigned int clevel = level[ss - expr._data], clevel1 = clevel + 1; + bool is_sth, is_relative; + CImg ref; + CImgList _opcode; + CImg variable_name; - // Look for a single value, variable or variable assignment. - char end = 0, sep = 0; double val = 0; - const int nb = std::sscanf(ss,"%lf%c%c",&val,&sep,&end); - if (nb==1) { - if (val==0 || val==1 || val==2) _cimg_mp_return((unsigned int)val); - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - mem[pos] = val; - _cimg_mp_return(pos); - } - if (nb==2 && sep=='%') { - if (val==0 || val==100 || val==200) _cimg_mp_return((unsigned int)(val/100)); - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - mem[pos] = val/100; - _cimg_mp_return(pos); - } - if (ss1==se) switch (*ss) { - case 'w' : case 'h' : case 'd' : case 's' : - case 'x' : case 'y' : case 'z' : case 'c' : case 'e' : _cimg_mp_return(label1pos[*ss]); - case 'u' : if (label1pos['u']!=~0U) _cimg_mp_return(label1pos['u']); _cimg_mp_opcode2(mp_u,0,1); - case 'g' : if (label1pos['g']!=~0U) _cimg_mp_return(label1pos['g']); _cimg_mp_opcode0(mp_g); - case 'i' : if (label1pos['i']!=~0U) _cimg_mp_return(label1pos['i']); _cimg_mp_opcode0(mp_i); - case '?' : _cimg_mp_opcode2(mp_u,0,1); - } - if (ss1==se1) { - if (*ss=='p' && *ss1=='i') _cimg_mp_return(label1pos[0]); // pi - if (*ss=='i') { // im - if (*ss1=='m') { - if (!reference_stats) reference.get_stats().move_to(reference_stats); - if (label1pos[1]!=~0U) _cimg_mp_return(label1pos[1]); _cimg_mp_opcode0(mp_im); - } - if (*ss1=='M') { // iM - if (!reference_stats) reference.get_stats().move_to(reference_stats); - if (label1pos[2]!=~0U) _cimg_mp_return(label1pos[2]); _cimg_mp_opcode0(mp_iM); - } - if (*ss1=='a') { // ia - if (!reference_stats) reference.get_stats().move_to(reference_stats); - if (label1pos[3]!=~0U) _cimg_mp_return(label1pos[3]); _cimg_mp_opcode0(mp_ia); - } - if (*ss1=='v') { // iv - if (!reference_stats) reference.get_stats().move_to(reference_stats); - if (label1pos[4]!=~0U) _cimg_mp_return(label1pos[4]); _cimg_mp_opcode0(mp_iv); - } - if (*ss1=='c') { // ic - if (!is_median_value && reference) { median_value = reference.median(); is_median_value = true; } - if (label1pos[5]!=~0U) _cimg_mp_return(label1pos[5]); _cimg_mp_opcode0(mp_ic); - } - } - if (*ss1=='m') { - if (*ss=='x') { // xm - if (!reference_stats) reference.get_stats().move_to(reference_stats); - if (label1pos[6]!=~0U) _cimg_mp_return(label1pos[6]); _cimg_mp_opcode0(mp_xm); - } - if (*ss=='y') { // ym - if (!reference_stats) reference.get_stats().move_to(reference_stats); - if (label1pos[7]!=~0U) _cimg_mp_return(label1pos[7]); _cimg_mp_opcode0(mp_ym); - } - if (*ss=='z') { // zm - if (!reference_stats) reference.get_stats().move_to(reference_stats); - if (label1pos[8]!=~0U) _cimg_mp_return(label1pos[8]); _cimg_mp_opcode0(mp_zm); - } - if (*ss=='c') { // cm - if (!reference_stats) reference.get_stats().move_to(reference_stats); - if (label1pos[9]!=~0U) _cimg_mp_return(label1pos[9]); _cimg_mp_opcode0(mp_cm); - } - } - if (*ss1=='M') { - if (*ss=='x') { // xM - if (!reference_stats) reference.get_stats().move_to(reference_stats); - if (label1pos[10]!=~0U) _cimg_mp_return(label1pos[10]); _cimg_mp_opcode0(mp_xM); - } - if (*ss=='y') { // yM - if (!reference_stats) reference.get_stats().move_to(reference_stats); - if (label1pos[11]!=~0U) _cimg_mp_return(label1pos[11]); _cimg_mp_opcode0(mp_yM); - } - if (*ss=='z') { // zM - if (!reference_stats) reference.get_stats().move_to(reference_stats); - if (label1pos[12]!=~0U) _cimg_mp_return(label1pos[12]); _cimg_mp_opcode0(mp_zM); - } - if (*ss=='c') { // cM - if (!reference_stats) reference.get_stats().move_to(reference_stats); - if (label1pos[13]!=~0U) _cimg_mp_return(label1pos[13]); _cimg_mp_opcode0(mp_cM); - } - } - } - - // Look for variable declarations. - for (char *s = se2; s>ss; --s) - if (*s==';' && level[s-expr._data]==clevel) { compile(ss,s); _cimg_mp_return(compile(s+1,se)); } - for (char *s = ss1, *ps = ss, *ns = ss2; s variable_name(ss,(unsigned int)(s-ss+1)); - variable_name.back() = 0; - bool is_valid_name = true; - if (*ss>='0' && *ss<='9') is_valid_name = false; - else for (const char *ns = ss+1; ns'z') && (*ns<'A' || *ns>'Z') && (*ns<'0' || *ns>'9') && *ns!='_') { - is_valid_name = false; break; - } - if (!is_valid_name) { - *se = saved_char; - throw CImgArgumentException("[_cimg_math_parser] " - "CImg<%s>::%s(): Invalid variable name '%s' in specified expression " - "'%s%s%s'.", - pixel_type(),calling_function, - variable_name._data, - (ss-8)>expr._data?"...":"", - (ss-8)>expr._data?ss-8:expr._data, - se<&expr.back()?"...":""); + // Look for a single value or a pre-defined variable. + int nb = cimg_sscanf(ss,"%lf%c%c",&val,&(sep=0),&(end=0)); + +#if cimg_OS==2 + // Check for +/-NaN and +/-inf as Microsoft's sscanf() version is not able + // to read those particular values. + if (!nb && (*ss=='+' || *ss=='-' || *ss=='i' || *ss=='I' || *ss=='n' || *ss=='N')) { + is_sth = true; + s = ss; + if (*s=='+') ++s; else if (*s=='-') { ++s; is_sth = false; } + if (!cimg::strcasecmp(s,"inf")) { val = cimg::type::inf(); nb = 1; } + else if (!cimg::strcasecmp(s,"nan")) { val = cimg::type::nan(); nb = 1; } + if (nb==1 && !is_sth) val = -val; + } +#endif + if (nb==1) _cimg_mp_constant(val); + if (nb==2 && sep=='%') _cimg_mp_constant(val/100); + + if (ss1==se) switch (*ss) { // One-char variable + case 't' : case 'w' : case 'h' : case 'd' : case 's' : case 'r' : + case 'x' : case 'y' : case 'z' : case 'c' : case 'e' : + _cimg_mp_return(reserved_label[*ss]); + case 'u' : + if (reserved_label['u']!=~0U) _cimg_mp_return(reserved_label['u']); + _cimg_mp_scalar2(mp_u,0,1); + case 'g' : + if (reserved_label['g']!=~0U) _cimg_mp_return(reserved_label['g']); + _cimg_mp_scalar0(mp_g); + case 'i' : + if (reserved_label['i']!=~0U) _cimg_mp_return(reserved_label['i']); + _cimg_mp_scalar0(mp_i); + case 'I' : + if (reserved_label['I']!=~0U) _cimg_mp_return(reserved_label['I']); + _cimg_mp_check_vector0(imgin._spectrum,"variable 'I'"); + pos = vector(imgin._spectrum); + CImg::vector((uptrT)mp_Joff,pos,0,0).move_to(code); + _cimg_mp_return(pos); + case 'R' : + if (reserved_label['R']!=~0U) _cimg_mp_return(reserved_label['R']); + _cimg_mp_scalar6(mp_ixyzc,_cimg_mp_x,_cimg_mp_y,_cimg_mp_z,0,0,0); + case 'G' : + if (reserved_label['G']!=~0U) _cimg_mp_return(reserved_label['G']); + _cimg_mp_scalar6(mp_ixyzc,_cimg_mp_x,_cimg_mp_y,_cimg_mp_z,1,0,0); + case 'B' : + if (reserved_label['B']!=~0U) _cimg_mp_return(reserved_label['B']); + _cimg_mp_scalar6(mp_ixyzc,_cimg_mp_x,_cimg_mp_y,_cimg_mp_z,2,0,0); + case 'A' : + if (reserved_label['A']!=~0U) _cimg_mp_return(reserved_label['A']); + _cimg_mp_scalar6(mp_ixyzc,_cimg_mp_x,_cimg_mp_y,_cimg_mp_z,3,0,0); + } + else if (ss2==se) { // Two-chars variable + arg1 = arg2 = ~0U; + if (*ss=='w' && *ss1=='h') _cimg_mp_return(reserved_label[0]); // wh + if (*ss=='p' && *ss1=='i') _cimg_mp_return(reserved_label[3]); // pi + if (*ss=='i') { + if (*ss1>='0' && *ss1<='9') { // i0...i9 + pos = 19 + *ss1 - '0'; + if (reserved_label[pos]!=~0U) _cimg_mp_return(reserved_label[pos]); + _cimg_mp_scalar6(mp_ixyzc,_cimg_mp_x,_cimg_mp_y,_cimg_mp_z,pos - 19,0,0); + } + switch (*ss1) { + case 'm' : arg1 = 4; arg2 = 0; break; // im + case 'M' : arg1 = 5; arg2 = 1; break; // iM + case 'a' : arg1 = 6; arg2 = 2; break; // ia + case 'v' : arg1 = 7; arg2 = 3; break; // iv + case 's' : arg1 = 8; arg2 = 12; break; // is + case 'p' : arg1 = 9; arg2 = 13; break; // is + case 'c' : // ic + if (reserved_label[10]!=~0U) _cimg_mp_return(reserved_label[10]); + if (mem_img_median==~0U) mem_img_median = imgin?constant(imgin.median()):0; + _cimg_mp_return(mem_img_median); + break; + } + } + else if (*ss1=='m') switch (*ss) { + case 'x' : arg1 = 11; arg2 = 4; break; // xm + case 'y' : arg1 = 12; arg2 = 5; break; // ym + case 'z' : arg1 = 13; arg2 = 6; break; // zm + case 'c' : arg1 = 14; arg2 = 7; break; // cm + } + else if (*ss1=='M') switch (*ss) { + case 'x' : arg1 = 15; arg2 = 8; break; // xM + case 'y' : arg1 = 16; arg2 = 9; break; // yM + case 'z' : arg1 = 17; arg2 = 10; break; // zM + case 'c' : arg1 = 18; arg2 = 11; break; // cM + } + if (arg1!=~0U) { + if (reserved_label[arg1]!=~0U) _cimg_mp_return(reserved_label[arg1]); + if (!img_stats) { + img_stats.assign(1,14,1,1,0).fill(imgin.get_stats(),false); + mem_img_stats.assign(1,14,1,1,~0U); + } + if (mem_img_stats[arg2]==~0U) mem_img_stats[arg2] = constant(img_stats[arg2]); + _cimg_mp_return(mem_img_stats[arg2]); + } + } else if (ss3==se) { // Three-chars variable + if (*ss=='w' && *ss1=='h' && *ss2=='d') _cimg_mp_return(reserved_label[1]); // whd + } else if (ss4==se) { // Four-chars variable + if (*ss=='w' && *ss1=='h' && *ss2=='d' && *ss3=='s') _cimg_mp_return(reserved_label[2]); // whds + } + + for (s = se2; s>ss; --s) // Separator ';' + if (*s==';' && level[s - expr._data]==clevel) { + compile(ss,s,depth,0); + _cimg_mp_return(compile(s + 1,se,depth,p_ref)); + } + + // Declare / assign variable, vector value or image value. + for (s = ss1, ps = ss, ns = ss2; s2 && (*ss=='i' || *ss=='j' || *ss=='I' || *ss=='J') && (*ss1=='(' || *ss1=='[') && + reserved_label[*ss]==~0U) { + is_relative = *ss=='j' || *ss=='J'; + + if (*ss1=='[' && *ve1==']') { // i/j/I/J[_#ind,offset] = value + if (*ss2=='#') { // Index specified + s0 = ss3; while (s0='i'?1:3,p2); + + if (p_ref) { + *p_ref = _cimg_mp_is_vector(arg2)?4:2; + p_ref[1] = p1; + p_ref[2] = (unsigned int)is_relative; + p_ref[3] = arg1; + if (_cimg_mp_is_vector(arg2)) + set_variable_vector(arg2); // Prevent from being used in further optimization + else if (_cimg_mp_is_temp(arg2)) memtype[arg2] = -1; + } + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg2); + if (*ss>='i') + CImg::vector((uptrT)(is_relative?mp_list_set_joff:mp_list_set_ioff), + arg2,p1,arg1).move_to(code); + else if (_cimg_mp_is_scalar(arg2)) + CImg::vector((uptrT)(is_relative?mp_list_set_Joff_s:mp_list_set_Ioff_s), + arg2,p1,arg1).move_to(code); + else + CImg::vector((uptrT)(is_relative?mp_list_set_Joff_v:mp_list_set_Ioff_v), + arg2,p1,arg1).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg2); + if (*ss>='i') + CImg::vector((uptrT)(is_relative?mp_set_joff:mp_set_ioff), + arg2,arg1).move_to(code); + if (_cimg_mp_is_scalar(arg2)) + CImg::vector((uptrT)(is_relative?mp_set_Joff_s:mp_set_Ioff_s), + arg2,arg1).move_to(code); + else + CImg::vector((uptrT)(is_relative?mp_set_Joff_v:mp_set_Ioff_v), + arg2,arg1).move_to(code); + } + _cimg_mp_return(arg2); + } + + if (*ss1=='(' && *ve1==')') { // i/j/I/J(_#ind,_x,_y,_z,_c) = value + if (*ss2=='#') { // Index specified + s0 = ss3; while (s01) { + arg2 = arg1 + 1; + if (p2>2) { + arg3 = arg2 + 1; + if (p2>3) arg4 = arg3 + 1; + } + } + } else if (s1='i'?1:3,p2); + + if (p_ref) { + *p_ref = _cimg_mp_is_vector(arg5)?5:3; + p_ref[1] = p1; + p_ref[2] = (unsigned int)is_relative; + p_ref[3] = arg1; + p_ref[4] = arg2; + p_ref[5] = arg3; + p_ref[6] = arg4; + if (_cimg_mp_is_vector(arg5)) + set_variable_vector(arg5); // Prevent from being used in further optimization + else if (_cimg_mp_is_temp(arg5)) memtype[arg5] = -1; + } + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg5); + if (*ss>='i') + CImg::vector((uptrT)(is_relative?mp_list_set_jxyzc:mp_list_set_ixyzc), + arg5,p1,arg1,arg2,arg3,arg4).move_to(code); + else if (_cimg_mp_is_scalar(arg5)) + CImg::vector((uptrT)(is_relative?mp_list_set_Jxyz_s:mp_list_set_Ixyz_s), + arg5,p1,arg1,arg2,arg3).move_to(code); + else + CImg::vector((uptrT)(is_relative?mp_list_set_Jxyz_v:mp_list_set_Ixyz_v), + arg5,p1,arg1,arg2,arg3).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg5); + if (*ss>='i') + CImg::vector((uptrT)(is_relative?mp_set_jxyzc:mp_set_ixyzc), + arg5,arg1,arg2,arg3,arg4).move_to(code); + else if (_cimg_mp_is_scalar(arg5)) + CImg::vector((uptrT)(is_relative?mp_set_Jxyz_s:mp_set_Ixyz_s), + arg5,arg1,arg2,arg3).move_to(code); + else + CImg::vector((uptrT)(is_relative?mp_set_Jxyz_v:mp_set_Ixyz_v), + arg5,arg1,arg2,arg3).move_to(code); + } + _cimg_mp_return(arg5); + } + } + + // Assign vector value (direct). + if (l_variable_name>3 && *ve1==']') { + s0 = ve1; while (s0>ss && *s0!='[') --s0; + if (s0>ss) { + variable_name[s0 - ss] = 0; // Remove brackets in variable name + arg1 = ~0U; // Vector slot + arg2 = compile(++s0,ve1,depth1,0); // Index + arg3 = compile(s + 1,se,depth1,0); // Value to assign + _cimg_mp_check_type(arg3,2,s_op,1,0); + + if (variable_name[1]) { // Multi-char variable + cimglist_for(variable_def,i) if (!std::strcmp(variable_name,variable_def[i])) { + arg1 = variable_pos[i]; break; + } + } else arg1 = reserved_label[*variable_name]; // Single-char variable + if (arg1==~0U) compile(ss,s0 - 1,depth1,0); // Variable does not exist -> error + else { // Variable already exists + if (_cimg_mp_is_scalar(arg1)) compile(ss,s,depth1,0); // Variable is not a vector -> error + if (_cimg_mp_is_constant(arg2)) { // Constant index -> return corresponding variable slot directly + nb = (int)mem[arg2]; + if (nb>=0 && nb<(int)_cimg_mp_vector_size(arg1)) { + arg1+=nb + 1; + CImg::vector((uptrT)mp_copy,arg1,arg3).move_to(code); + _cimg_mp_return(arg1); + } + compile(ss,s,depth1,0); // Out-of-bounds reference -> error + } + + // Case of non-constant index -> return assigned value + linked reference + if (p_ref) { + *p_ref = 1; + p_ref[1] = arg1; + p_ref[2] = arg2; + if (_cimg_mp_is_temp(arg3)) memtype[arg3] = -1; // Prevent from being used in further optimization + } + CImg::vector((uptrT)mp_vector_set_off,arg3,arg1,(uptrT)_cimg_mp_vector_size(arg1),arg2,arg3). + move_to(code); + _cimg_mp_return(arg3); + } + } + } + + // Assign user-defined function. + if (*ve1==')' && *ss!='(' && (s0 = std::strchr(variable_name,'('))!=0) { + is_sth = true; // is_valid_function_name? + if (*variable_name>='0' && *variable_name<='9') is_sth = false; + else for (ns = variable_name._data; ns(variable_name._data,s0 - variable_name._data + 1).move_to(function_def,0); + ++s; while (*s && *s<=' ') ++s; + CImg(s,se - s + 1).move_to(function_body,0); + + p1 = 1; // Indice of current parsed argument + for (s = s0 + 1; s<=s1; ++p1, s = ns + 1) { // Parse function arguments + if (p1>24) { + *se = saved_char; cimg::strellipsize(variable_name,64); cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: %s: Too much specified arguments (>24) when defining " + "function '%s()', in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + variable_name._data, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + while (*s && *s<=' ') ++s; + if (*s==')' && p1==1) break; // Function has no arguments + + s2 = s; // Start of the argument name + is_sth = true; // is_valid_argument_name? + if (*s>='0' && *s<='9') is_sth = false; + else for (ns = s; ns' '; ++ns) + if (!is_varchar(*ns)) { is_sth = false; break; } + s3 = ns; // End of the argument name + while (*ns && *ns<=' ') ++ns; + if (!is_sth || s2==s3 || (*ns!=',' && ns!=s1)) { + *se = saved_char; cimg::strellipsize(variable_name,64); cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: %s: %s name specified for argument %u when defining " + "function '%s()', in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + is_sth?"Empty":"Invalid",p1, + variable_name._data, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + if (ns==s1 || *ns==',') { // New argument found + *s3 = 0; + p2 = s3 - s2; // Argument length + p3 = function_body[0]._width - p2 + 1; // Related to copy length + for (ps = std::strstr(function_body[0],s2); ps; ps = std::strstr(ps,s2)) { // Replace by arg number + if (!((ps>function_body[0]._data && is_varchar(*(ps - 1))) || + (ps + p21) { + std::memmove(ps,ps + p2 - 1,function_body[0]._data + p3 - ps); + function_body[0]._width-=p2 - 1; + } + } else ++ps; + } + } + } + // Store number of arguments + function_def[0].resize(function_def[0]._width + 1,1,1,1,0).back() = (char)(p1 - 1); + _cimg_mp_return(0); + } + } + + // Check if the variable name could be valid. If not, this is probably an lvalue assignment. + is_sth = true; // is_valid_variable_name? + if (*variable_name>='0' && *variable_name<='9') is_sth = false; + else for (ns = variable_name._data; *ns; ++ns) + if (!is_varchar(*ns)) { is_sth = false; break; } + + // Assign variable (direct). + if (is_sth) { + if (variable_name[1] && !variable_name[2]) { // Two-chars variable + c1 = variable_name[0]; + c2 = variable_name[1]; + if (c1=='w' && c2=='h') variable_name.fill((char)0,(char)0); // wh + else if (c1=='p' && c2=='i') variable_name.fill(3,0); // pi + else if (c1=='i') { + if (c2>='0' && c2<='9') variable_name.fill(19 + c2 - '0',0); // i0...i9 + else if (c2=='m') variable_name.fill(4,0); // im + else if (c2=='M') variable_name.fill(5,0); // iM + else if (c2=='a') variable_name.fill(6,0); // ia + else if (c2=='v') variable_name.fill(7,0); // iv + else if (c2=='s') variable_name.fill(8,0); // is + else if (c2=='p') variable_name.fill(9,0); // ip + else if (c2=='c') variable_name.fill(10,0); // ic + } else if (c2=='m') { + if (c1=='x') variable_name.fill(11,0); // xm + else if (c1=='y') variable_name.fill(12,0); // ym + else if (c1=='z') variable_name.fill(13,0); // zm + else if (c1=='c') variable_name.fill(14,0); // cm + } else if (c2=='M') { + if (c1=='x') variable_name.fill(15,0); // xM + else if (c1=='y') variable_name.fill(16,0); // yM + else if (c1=='z') variable_name.fill(17,0); // zM + else if (c1=='c') variable_name.fill(18,0); // cM + } + } else if (variable_name[1] && variable_name[2] && !variable_name[3]) { // Three-chars variable + c1 = variable_name[0]; + c2 = variable_name[1]; + c3 = variable_name[2]; + if (c1=='w' && c2=='h' && c3=='d') variable_name.fill(1,0); // whd + } else if (variable_name[1] && variable_name[2] && variable_name[3] && + !variable_name[4]) { // Four-chars variable + c1 = variable_name[0]; + c2 = variable_name[1]; + c3 = variable_name[2]; + c4 = variable_name[3]; + if (c1=='w' && c2=='h' && c3=='d' && c4=='s') variable_name.fill(2,0); // whds + } else if (!std::strcmp(variable_name,"interpolation")) variable_name.fill(29,0); + else if (!std::strcmp(variable_name,"boundary")) variable_name.fill(30,0); + + arg1 = ~0U; + arg2 = compile(s + 1,se,depth1,0); + if (!variable_name[1]) // One-char variable, or variable in reserved_labels + arg1 = reserved_label[*variable_name]; + else // Multi-char variable name : check for existing variable with same name + cimglist_for(variable_def,i) + if (!std::strcmp(variable_name,variable_def[i])) { arg1 = variable_pos[i]; break; } + + if (arg1==~0U || arg1<=_cimg_mp_c) { // Create new variable + if (_cimg_mp_is_vector(arg2)) { // Vector variable + arg1 = vector_copy(arg2); + set_variable_vector(arg1); + } else { // Scalar variable + arg1 = scalar1(mp_copy,arg2); + memtype[arg1] = -1; + } + + if (!variable_name[1]) reserved_label[*variable_name] = arg1; + else { + if (variable_def._width>=variable_pos._width) variable_pos.resize(-200,1,1,1,0); + variable_pos[variable_def._width] = arg1; + variable_name.move_to(variable_def); + } + + } else { // Variable already exists -> assign a new value + _cimg_mp_check_type(arg2,2,s_op,_cimg_mp_is_vector(arg1)?3:1,0); + if (_cimg_mp_is_vector(arg1)) { // Vector + if (_cimg_mp_is_vector(arg2)) // From vector + CImg::vector((uptrT)mp_vector_copy,arg1,arg2,(uptrT)_cimg_mp_vector_size(arg1)). + move_to(code); + else // From scalar + CImg::vector((uptrT)mp_vector_init,arg1,(uptrT)_cimg_mp_vector_size(arg1),arg2). + move_to(code); + } else // Scalar + CImg::vector((uptrT)mp_copy,arg1,arg2).move_to(code); + } + _cimg_mp_return(arg1); + } + + // Assign lvalue (variable name was not valid). + is_sth = (bool)std::strchr(variable_name,'?'); // Contains_ternary_operator? + if (is_sth) break; // Do nothing and make ternary operator prioritary over assignment + + if (l_variable_name>2 && (std::strchr(variable_name,'(') || std::strchr(variable_name,'['))) { + ref.assign(7); + arg1 = compile(ss,s,depth1,ref); // Lvalue slot + arg2 = compile(s + 1,se,depth1,0); // Value to assign + + if (*ref==1) { // Vector value (scalar): V[k] = scalar + _cimg_mp_check_type(arg2,2,s_op,1,0); + arg3 = ref[1]; // Vector slot + arg4 = ref[2]; // Index + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((uptrT)mp_vector_set_off,arg2,arg3,(uptrT)_cimg_mp_vector_size(arg3),arg4,arg2). + move_to(code); + _cimg_mp_return(arg2); + } + + if (*ref==2) { // Image value (scalar): i/j[_#ind,off] = scalar + _cimg_mp_check_type(arg2,2,s_op,1,0); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg2); + CImg::vector((uptrT)(is_relative?mp_list_set_joff:mp_list_set_ioff), + arg2,p1,arg3).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg2); + CImg::vector((uptrT)(is_relative?mp_set_joff:mp_set_ioff), + arg2,arg3).move_to(code); + } + _cimg_mp_return(arg2); + } + + if (*ref==3) { // Image value (scalar): i/j(_#ind,_x,_y,_z,_c) = scalar + _cimg_mp_check_type(arg2,2,s_op,1,0); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + arg6 = ref[6]; // C + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg2); + CImg::vector((uptrT)(is_relative?mp_list_set_jxyzc:mp_list_set_ixyzc), + arg2,p1,arg3,arg4,arg5,arg6).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg2); + CImg::vector((uptrT)(is_relative?mp_set_jxyzc:mp_set_ixyzc), + arg2,arg3,arg4,arg5,arg6).move_to(code); + } + _cimg_mp_return(arg2); + } + + if (*ref==4) { // Image value (vector): I/J[_#ind,off] = value + _cimg_mp_check_type(arg2,2,s_op,3,_cimg_mp_vector_size(arg1)); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg2); + if (_cimg_mp_is_scalar(arg2)) + CImg::vector((uptrT)(is_relative?mp_list_set_Joff_s:mp_list_set_Ioff_s), + arg2,p1,arg3).move_to(code); + else + CImg::vector((uptrT)(is_relative?mp_list_set_Joff_v:mp_list_set_Ioff_v), + arg2,p1,arg3).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg2); + if (_cimg_mp_is_scalar(arg2)) + CImg::vector((uptrT)(is_relative?mp_set_Joff_s:mp_set_Ioff_s), + arg2,arg3).move_to(code); + else + CImg::vector((uptrT)(is_relative?mp_set_Joff_v:mp_set_Ioff_v), + arg2,arg3).move_to(code); + } + _cimg_mp_return(arg2); + } + + if (*ref==5) { // Image value (vector): I/J(_#ind,_x,_y,_z,_c) = value + _cimg_mp_check_type(arg2,2,s_op,3,_cimg_mp_vector_size(arg1)); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg2); + if (_cimg_mp_is_scalar(arg2)) + CImg::vector((uptrT)(is_relative?mp_list_set_Jxyz_s:mp_list_set_Ixyz_s), + arg2,p1,arg3,arg4,arg5).move_to(code); + else + CImg::vector((uptrT)(is_relative?mp_list_set_Jxyz_v:mp_list_set_Ixyz_v), + arg2,p1,arg3,arg4,arg5).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg2); + if (_cimg_mp_is_scalar(arg2)) + CImg::vector((uptrT)(is_relative?mp_set_Jxyz_s:mp_set_Ixyz_s), + arg2,arg3,arg4,arg5).move_to(code); + else + CImg::vector((uptrT)(is_relative?mp_set_Jxyz_v:mp_set_Ixyz_v), + arg2,arg3,arg4,arg5).move_to(code); + } + _cimg_mp_return(arg2); + } + + if (_cimg_mp_is_vector(arg1)) { // Vector variable: V = value + _cimg_mp_check_type(arg2,2,s_op,1,0); + if (_cimg_mp_is_vector(arg2)) // From vector + CImg::vector((uptrT)mp_vector_copy,arg1,arg2,(uptrT)_cimg_mp_vector_size(arg1)). + move_to(code); + else // From scalar + CImg::vector((uptrT)mp_vector_init,arg1,(uptrT)_cimg_mp_vector_size(arg1),arg2). + move_to(code); + _cimg_mp_return(arg1); + } + + if (_cimg_mp_is_variable(arg1)) { // Scalar variable: s = scalar + _cimg_mp_check_type(arg2,2,s_op,1,0); + CImg::vector((uptrT)mp_copy,arg1,arg2).move_to(code); + _cimg_mp_return(arg1); + + } + } + + // No assignment expressions match -> error + *se = saved_char; cimg::strellipsize(variable_name,64); cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: %s: Invalid left-hand operand '%s', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + variable_name._data, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + + // Apply unary/binary/ternary operators. The operator precedences should be roughly the same as in C++. + for (s = se2, ps = se3, ns = ps - 1; s>ss1; --s, --ps, --ns) // Here, ns = ps - 1 + if (*s=='=' && (*ps=='*' || *ps=='/' || *ps=='^') && *ns==*ps && + level[s - expr._data]==clevel) { // Self-operators for complex numbers only (**=,//=,^^=) + s_op = *ps=='*'?"Operator '**='":*ps=='/'?"Operator '//='":"Operator '^^='"; + + ref.assign(7); + arg1 = compile(ss,ns,depth1,ref); // Vector slot + arg2 = compile(s + 1,se,depth1,0); // Right operand + if (*ps!='*') { + _cimg_mp_check_type(arg1,2,s_op,2,2); + _cimg_mp_check_type(arg2,2,s_op,2,2); + } + if (_cimg_mp_is_vector(arg2)) { // Complex **= complex or Matrix **= matrix + if (*ps=='*') { + if (_cimg_mp_vector_size(arg1)==2 && _cimg_mp_vector_size(arg2)==2) + CImg::vector((uptrT)mp_complex_mul,arg1,arg1,arg2).move_to(code); + else { + _cimg_mp_check_matrix_square(arg2,2,s_op); + p3 = _cimg_mp_vector_size(arg1); + p2 = (unsigned int)std::sqrt((float)_cimg_mp_vector_size(arg2)); + p1 = p3/p2; + if (p1*p2!=p3) { + *se = saved_char; cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: %s: Sizes of left-hand and right-hand operands " + "('%s' and '%s') do not match, in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s_type(arg1)._data,s_type(arg2)._data, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + CImg::vector((uptrT)mp_matrix_mul,arg1,arg1,arg2,p1,p2,p2).move_to(code); + } + } else if (*ps=='/') + CImg::vector((uptrT)mp_complex_div_vv,arg1,arg1,arg2).move_to(code); + else + CImg::vector((uptrT)mp_complex_pow_vv,arg1,arg1,arg2).move_to(code); + } else { // Complex **= scalar + if (*ps=='*') + CImg::vector((uptrT)mp_self_map_vector_s,arg1,2,(uptrT)mp_self_mul,arg2).move_to(code); + else if (*ps=='/') + CImg::vector((uptrT)mp_self_map_vector_s,arg1,2,(uptrT)mp_self_div,arg2).move_to(code); + else + CImg::vector((uptrT)mp_complex_pow_vs,arg1,arg1,arg2).move_to(code); } - const unsigned int pos = compile(s+1,se); - // Check for particular case of a reserved variable. - if (variable_name[0] && variable_name[1] && !variable_name[2]) { - const char c1 = variable_name[0], c2 = variable_name[1]; - if (c1=='p' && c2=='i') variable_name.fill((char)0,(char)0); // pi - else if (c1=='i') { - if (c2=='m') variable_name.fill(1,0); // im - else if (c2=='M') variable_name.fill(2,0); // iM - else if (c2=='a') variable_name.fill(3,0); // ia - else if (c2=='v') variable_name.fill(4,0); // iv - else if (c2=='c') variable_name.fill(5,0); // ic - } else if (c2=='m') { - if (c1=='x') variable_name.fill(6,0); // xm - else if (c1=='y') variable_name.fill(7,0); // ym - else if (c1=='z') variable_name.fill(8,0); // zm - else if (c1=='c') variable_name.fill(9,0); // cm - } else if (c2=='M') { - if (c1=='x') variable_name.fill(10,0); // xM - else if (c1=='y') variable_name.fill(11,0); // yM - else if (c1=='z') variable_name.fill(12,0); // zM - else if (c1=='c') variable_name.fill(13,0); // cM - } - } - if (variable_name[1]) { // Multi-char variable. - int label_pos = -1; - cimglist_for(labelM,i) // Check for existing variable with same name. - if (!std::strcmp(variable_name,labelM[i])) { label_pos = i; break; } - if (label_pos<0) { // If new variable. - if (labelM._width>=labelMpos._width) labelMpos.resize(-200,1,1,1,0); - label_pos = labelM.width(); - variable_name.move_to(labelM); + // Write computed value back in image if necessary. + if (*ref==4) { // Image value (vector): I/J[_#ind,off] **= value + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg1); + CImg::vector((uptrT)(is_relative?mp_list_set_Joff_v:mp_list_set_Ioff_v), + arg1,p1,arg3).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg1); + CImg::vector((uptrT)(is_relative?mp_set_Joff_v:mp_set_Ioff_v), + arg1,arg3).move_to(code); + } + + } else if (*ref==5) { // Image value (vector): I/J(_#ind,_x,_y,_z,_c) **= value + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg1); + CImg::vector((uptrT)(is_relative?mp_list_set_Jxyz_v:mp_list_set_Ixyz_v), + arg1,p1,arg3,arg4,arg5).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg1); + CImg::vector((uptrT)(is_relative?mp_set_Jxyz_v:mp_set_Ixyz_v), + arg1,arg3,arg4,arg5).move_to(code); } - labelMpos[label_pos] = pos; - } else label1pos[*variable_name] = pos; // Single-char variable. + } + + _cimg_mp_return(arg1); + } + + for (s = se2, ps = se3, ns = ps - 1; s>ss1; --s, --ps, --ns) // Here, ns = ps - 1 + if (*s=='=' && (*ps=='+' || *ps=='-' || *ps=='*' || *ps=='/' || *ps=='%' || + *ps=='&' || *ps=='^' || *ps=='|' || + (*ps=='>' && *ns=='>') || (*ps=='<' && *ns=='<')) && + level[s - expr._data]==clevel) { // Self-operators (+=,-=,*=,/=,%=,>>=,<<=,&=,^=,|=) + switch (*ps) { + case '+' : op = mp_self_add; s_op = "Operator '+='"; break; + case '-' : op = mp_self_sub; s_op = "Operator '-='"; break; + case '*' : op = mp_self_mul; s_op = "Operator '*='"; break; + case '/' : op = mp_self_div; s_op = "Operator '/='"; break; + case '%' : op = mp_self_modulo; s_op = "Operator '%='"; break; + case '<' : op = mp_self_bitwise_left_shift; s_op = "Operator '<<='"; break; + case '>' : op = mp_self_bitwise_right_shift; s_op = "Operator '>=='"; break; + case '&' : op = mp_self_bitwise_and; s_op = "Operator '&='"; break; + case '|' : op = mp_self_bitwise_or; s_op = "Operator '|='"; break; + default : op = mp_self_pow; s_op = "Operator '^='"; break; + } + s1 = *ps=='>' || *ps=='<'?ns:ps; + + ref.assign(7); + arg1 = compile(ss,s1,depth1,ref); // Variable slot + arg2 = compile(s + 1,se,depth1,0); // Value to apply + + if (*ref>0 && !_cimg_mp_is_temp(arg1)) { // Apply operator on a copy if necessary. + if (_cimg_mp_is_vector(arg1)) arg1 = vector_copy(arg1); + else arg1 = scalar1(mp_copy,arg1); + } + + if (*ref==1) { // Vector value (scalar): V[k] += scalar + _cimg_mp_check_type(arg2,2,s_op,1,0); + arg3 = ref[1]; // Vector slot + arg4 = ref[2]; // Index + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((uptrT)op,arg1,arg2).move_to(code); + CImg::vector((uptrT)mp_vector_set_off,arg1,arg3,(uptrT)_cimg_mp_vector_size(arg3),arg4,arg1). + move_to(code); + _cimg_mp_return(arg1); + } + + if (*ref==2) { // Image value (scalar): i/j[_#ind,off] += scalar + _cimg_mp_check_type(arg2,2,s_op,1,0); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((uptrT)op,arg1,arg2).move_to(code); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg1); + CImg::vector((uptrT)(is_relative?mp_list_set_joff:mp_list_set_ioff), + arg1,p1,arg3).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg1); + CImg::vector((uptrT)(is_relative?mp_set_joff:mp_set_ioff), + arg1,arg3).move_to(code); + } + _cimg_mp_return(arg1); + } + + if (*ref==3) { // Image value (scalar): i/j(_#ind,_x,_y,_z,_c) += scalar + _cimg_mp_check_type(arg2,2,s_op,1,0); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + arg6 = ref[6]; // C + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((uptrT)op,arg1,arg2).move_to(code); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg1); + CImg::vector((uptrT)(is_relative?mp_list_set_jxyzc:mp_list_set_ixyzc), + arg1,p1,arg3,arg4,arg5,arg6).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg1); + CImg::vector((uptrT)(is_relative?mp_set_jxyzc:mp_set_ixyzc), + arg1,arg3,arg4,arg5,arg6).move_to(code); + } + _cimg_mp_return(arg1); + } + + if (*ref==4) { // Image value (vector): I/J[_#ind,off] += value + _cimg_mp_check_type(arg2,2,s_op,3,_cimg_mp_vector_size(arg1)); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (_cimg_mp_is_scalar(arg2)) + CImg::vector((uptrT)mp_self_map_vector_s,arg1,(uptrT)_cimg_mp_vector_size(arg1),(uptrT)op,arg2). + move_to(code); + else + CImg::vector((uptrT)mp_self_map_vector_v,arg1,(uptrT)_cimg_mp_vector_size(arg1),(uptrT)op,arg2). + move_to(code); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg1); + CImg::vector((uptrT)(is_relative?mp_list_set_Joff_v:mp_list_set_Ioff_v), + arg1,p1,arg3).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg1); + CImg::vector((uptrT)(is_relative?mp_set_Joff_v:mp_set_Ioff_v), + arg1,arg3).move_to(code); + } + _cimg_mp_return(arg1); + } + + if (*ref==5) { // Image value (vector): I/J(_#ind,_x,_y,_z,_c) = value + _cimg_mp_check_type(arg2,2,s_op,3,_cimg_mp_vector_size(arg1)); + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + if (_cimg_mp_is_scalar(arg2)) + CImg::vector((uptrT)mp_self_map_vector_s,arg1,(uptrT)_cimg_mp_vector_size(arg1),(uptrT)op,arg2). + move_to(code); + else + CImg::vector((uptrT)mp_self_map_vector_v,arg1,(uptrT)_cimg_mp_vector_size(arg1),(uptrT)op,arg2). + move_to(code); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(arg1); + CImg::vector((uptrT)(is_relative?mp_list_set_Jxyz_v:mp_list_set_Ixyz_v), + arg1,p1,arg3,arg4,arg5).move_to(code); + } else { + if (!imgout) _cimg_mp_return(arg1); + CImg::vector((uptrT)(is_relative?mp_set_Jxyz_v:mp_set_Ixyz_v), + arg1,arg3,arg4,arg5).move_to(code); + } + _cimg_mp_return(arg1); + } + + if (_cimg_mp_is_vector(arg1)) { // Vector variable: V += value + _cimg_mp_check_type(arg2,2,s_op,3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg2)) // Vector += vector + CImg::vector((uptrT)mp_self_map_vector_v,arg1,(uptrT)_cimg_mp_vector_size(arg1),(uptrT)op,arg2). + move_to(code); + else // Vector += scalar + CImg::vector((uptrT)mp_self_map_vector_s,arg1,(uptrT)_cimg_mp_vector_size(arg1),(uptrT)op,arg2). + move_to(code); + _cimg_mp_return(arg1); + } + + if (_cimg_mp_is_variable(arg1)) { // Scalar variable: s += scalar + _cimg_mp_check_type(arg2,2,s_op,1,0); + CImg::vector((uptrT)op,arg1,arg2).move_to(code); + _cimg_mp_return(arg1); + } + + variable_name.assign(ss,(unsigned int)(s - ss)).back() = 0; + *se = saved_char; cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: %s: Invalid left-hand operand '%s', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + variable_name._data, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + + for (s = ss1; s::vector((uptrT)mp_if,pos,arg1,arg2,arg3, + p3 - p2,code._width - p3,arg4).move_to(code,p2); + _cimg_mp_return(pos); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='|' && *ns=='|' && level[s - expr._data]==clevel) { // Logical or + s_op = "Operator '||'"; + arg1 = compile(ss,s,depth1,0); + p2 = code._width; + arg2 = compile(s + 2,se,depth1,0); + _cimg_mp_check_type(arg1,1,s_op,1,0); + _cimg_mp_check_type(arg2,2,s_op,1,0); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant(mem[arg1] || mem[arg2]); + pos = scalar(); + CImg::vector((uptrT)mp_logical_or,pos,arg1,arg2,code._width - p2). + move_to(code,p2); _cimg_mp_return(pos); } - // Look for unary/binary operators. The operator precedences is defined as in C++. - for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='|' && *ns=='|' && level[s-expr._data]==clevel) { - const unsigned int mem_A = compile(ss,s), bp1 = code._width, mem_B = compile(s+2,se); - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(_cimg_mp_enfunc(mp_logical_or),pos,mem_A,mem_B,code._width-bp1).move_to(code,bp1); + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='&' && *ns=='&' && level[s - expr._data]==clevel) { // Logical and + s_op = "Operator '&&'"; + arg1 = compile(ss,s,depth1,0); + p2 = code._width; + arg2 = compile(s + 2,se,depth1,0); + _cimg_mp_check_type(arg1,1,s_op,1,0); + _cimg_mp_check_type(arg2,2,s_op,1,0); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant(mem[arg1] && mem[arg2]); + pos = scalar(); + CImg::vector((uptrT)mp_logical_and,pos,arg1,arg2,code._width - p2). + move_to(code,p2); _cimg_mp_return(pos); } - for (char *s = se3, *ns = se2; s>ss; --s, --ns) if (*s=='&' && *ns=='&' && level[s-expr._data]==clevel) { - const unsigned int mem_A = compile(ss,s), bp1 = code._width, mem_B = compile(s+2,se); - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(_cimg_mp_enfunc(mp_logical_and),pos,mem_A,mem_B,code._width-bp1).move_to(code,bp1); + + for (s = se2; s>ss; --s) + if (*s=='|' && level[s - expr._data]==clevel) { // Bitwise or + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 1,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '|'",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_bitwise_or,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_bitwise_or,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_bitwise_or,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant((unsigned long)mem[arg1] | (unsigned long)mem[arg2]); + _cimg_mp_scalar2(mp_bitwise_or,arg1,arg2); + } + + for (s = se2; s>ss; --s) + if (*s=='&' && level[s - expr._data]==clevel) { // Bitwise and + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 1,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '&'",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_bitwise_and,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_bitwise_and,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_bitwise_and,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant((unsigned long)mem[arg1] & (unsigned long)mem[arg2]); + _cimg_mp_scalar2(mp_bitwise_and,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='!' && *ns=='=' && level[s - expr._data]==clevel) { // Not equal to + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 2,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '!='",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_neq,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_neq,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_neq,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]!=mem[arg2]); + _cimg_mp_scalar2(mp_neq,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='=' && *ns=='=' && level[s - expr._data]==clevel) { // Equal to + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 2,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '=='",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_eq,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_eq,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_eq,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]==mem[arg2]); + _cimg_mp_scalar2(mp_eq,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='<' && *ns=='=' && level[s - expr._data]==clevel) { // Less or equal than + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 2,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '<='",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_lte,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_lte,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_lte,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]<=mem[arg2]); + _cimg_mp_scalar2(mp_lte,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='>' && *ns=='=' && level[s - expr._data]==clevel) { // Greater or equal than + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 2,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '>='",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_gte,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_gte,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_gte,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]>=mem[arg2]); + _cimg_mp_scalar2(mp_gte,arg1,arg2); + } + + for (s = se2, ns = se1, ps = se3; s>ss; --s, --ns, --ps) + if (*s=='<' && *ns!='<' && *ps!='<' && level[s - expr._data]==clevel) { // Less than + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 1,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '<'",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_lt,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_lt,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_lt,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]ss; --s, --ns, --ps) + if (*s=='>' && *ns!='>' && *ps!='>' && level[s - expr._data]==clevel) { // Greather than + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 1,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '>'",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_gt,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_gt,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_gt,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]>mem[arg2]); + _cimg_mp_scalar2(mp_gt,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='<' && *ns=='<' && level[s - expr._data]==clevel) { // Left bit shift + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 2,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '<<'",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) + _cimg_mp_vector2_vv(mp_bitwise_left_shift,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) + _cimg_mp_vector2_vs(mp_bitwise_left_shift,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) + _cimg_mp_vector2_sv(mp_bitwise_left_shift,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant((long)mem[arg1]<<(unsigned int)mem[arg2]); + _cimg_mp_scalar2(mp_bitwise_left_shift,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='>' && *ns=='>' && level[s - expr._data]==clevel) { // Right bit shift + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 2,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '>>'",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) + _cimg_mp_vector2_vv(mp_bitwise_right_shift,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) + _cimg_mp_vector2_vs(mp_bitwise_right_shift,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) + _cimg_mp_vector2_sv(mp_bitwise_right_shift,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant((long)mem[arg1]>>(unsigned int)mem[arg2]); + _cimg_mp_scalar2(mp_bitwise_right_shift,arg1,arg2); + } + + for (ns = se1, s = se2, ps = pexpr._data + (se3 - expr._data); s>ss; --ns, --s, --ps) + if (*s=='+' && (*ns!='+' || ns!=se1) && *ps!='-' && *ps!='+' && *ps!='*' && *ps!='/' && *ps!='%' && + *ps!='&' && *ps!='|' && *ps!='^' && *ps!='!' && *ps!='~' && *ps!='#' && + (*ps!='e' || !(ps - pexpr._data>ss - expr._data && (*(ps - 1)=='.' || (*(ps - 1)>='0' && + *(ps - 1)<='9')))) && + level[s - expr._data]==clevel) { // Addition + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 1,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '+'",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_add,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_add,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_add,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1] + mem[arg2]); + if (arg2==1) _cimg_mp_scalar1(mp_increment,arg1); + if (arg1==1) _cimg_mp_scalar1(mp_increment,arg2); + _cimg_mp_scalar2(mp_add,arg1,arg2); + } + + for (ns = se1, s = se2, ps = pexpr._data + (se3 - expr._data); s>ss; --ns, --s, --ps) + if (*s=='-' && (*ns!='-' || ns!=se1) && *ps!='-' && *ps!='+' && *ps!='*' && *ps!='/' && *ps!='%' && + *ps!='&' && *ps!='|' && *ps!='^' && *ps!='!' && *ps!='~' && *ps!='#' && + (*ps!='e' || !(ps - pexpr._data>ss - expr._data && (*(ps - 1)=='.' || (*(ps - 1)>='0' && + *(ps - 1)<='9')))) && + level[s - expr._data]==clevel) { // Subtraction + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 1,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '-'",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_sub,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_sub,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_sub,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1] - mem[arg2]); + if (arg2==1) _cimg_mp_scalar1(mp_decrement,arg1); + _cimg_mp_scalar2(mp_sub,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='*' && *ns=='*' && level[s - expr._data]==clevel) { // Complex/matrix multiplication + s_op = "Operator '**'"; + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 2,se,depth1,0); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) { + if (_cimg_mp_vector_size(arg1)==2 && _cimg_mp_vector_size(arg2)==2) { // Complex multiplication + pos = vector(2); + CImg::vector((uptrT)mp_complex_mul,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } else { // Matrix multiplication + p1 = _cimg_mp_vector_size(arg1); + p2 = _cimg_mp_vector_size(arg2); + arg4 = p1/p2; + if (arg4*p2!=p1) { + *se = saved_char; cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: %s: Sizes of left-hand and right-hand operands " + "('%s' and '%s') do not match, in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s_type(arg1)._data,s_type(arg2)._data, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + pos = vector(arg4); + CImg::vector((uptrT)mp_matrix_mul,pos,arg1,arg2,arg4,p2,1).move_to(code); + _cimg_mp_return(pos); + } + } + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_mul,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_mul,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]*mem[arg2]); + _cimg_mp_scalar2(mp_mul,arg1,arg2); + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='/' && *ns=='/' && level[s - expr._data]==clevel) { // Complex division + s_op = "Operator '//'"; + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 2,se,depth1,0); + _cimg_mp_check_type(arg1,1,s_op,3,2); + _cimg_mp_check_type(arg2,2,s_op,3,2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) { + pos = vector(2); + CImg::vector((uptrT)mp_complex_div_vv,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_div,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) { + pos = vector(2); + CImg::vector((uptrT)mp_complex_div_sv,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]/mem[arg2]); + _cimg_mp_scalar2(mp_div,arg1,arg2); + } + + for (s = se2; s>ss; --s) if (*s=='*' && level[s - expr._data]==clevel) { // Multiplication + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 1,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '*'",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_mul,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_mul,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_mul,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]*mem[arg2]); + _cimg_mp_scalar2(mp_mul,arg1,arg2); + } + + + for (s = se2; s>ss; --s) if (*s=='/' && level[s - expr._data]==clevel) { // Division + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 1,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '/'",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_div,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_div,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_div,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) _cimg_mp_constant(mem[arg1]/mem[arg2]); + _cimg_mp_scalar2(mp_div,arg1,arg2); + } + + for (s = se2, ns = se1; s>ss; --s, --ns) if (*s=='%' && *ns!='^' && level[s - expr._data]==clevel) { // Modulo + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 1,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '%'",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_modulo,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_modulo,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_modulo,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant(cimg::mod(mem[arg1],mem[arg2])); + _cimg_mp_scalar2(mp_modulo,arg1,arg2); + } + + if (se1>ss) { + if (*ss=='+' && (*ss1!='+' || (ss2='0' && *ss2<='9'))) // Unary plus + _cimg_mp_return(compile(ss1,se,depth1,0)); + + if (*ss=='-' && (*ss1!='-' || (ss2='0' && *ss2<='9'))) { // Unary minus + arg1 = compile(ss1,se,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_minus,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(-mem[arg1]); + _cimg_mp_scalar1(mp_minus,arg1); + } + + if (*ss=='!') { // Logical not + arg1 = compile(ss1,se,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_logical_not,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(!mem[arg1]); + _cimg_mp_scalar1(mp_logical_not,arg1); + } + + if (*ss=='~') { // Bitwise not + arg1 = compile(ss1,se,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_bitwise_not,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(~(unsigned long)mem[arg1]); + _cimg_mp_scalar1(mp_bitwise_not,arg1); + } + } + + for (s = se3, ns = se2; s>ss; --s, --ns) + if (*s=='^' && *ns=='^' && level[s - expr._data]==clevel) { // Complex power + s_op = "Operator '^^'"; + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 2,se,depth1,0); + _cimg_mp_check_type(arg1,1,s_op,3,2); + _cimg_mp_check_type(arg2,2,s_op,3,2); + pos = (_cimg_mp_is_vector(arg1) || _cimg_mp_is_vector(arg2))?vector(2):0; + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) { + CImg::vector((uptrT)mp_complex_pow_vv,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) { + CImg::vector((uptrT)mp_complex_pow_vs,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) { + CImg::vector((uptrT)mp_complex_pow_sv,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant(std::pow(mem[arg1],mem[arg2])); + switch (arg2) { + case 0 : _cimg_mp_return(1); + case 1 : _cimg_mp_return(arg1); + case 2 : _cimg_mp_scalar1(mp_sqr,arg1); + case 3 : _cimg_mp_scalar1(mp_pow3,arg1); + case 4 : _cimg_mp_scalar1(mp_pow4,arg1); + default : _cimg_mp_scalar2(mp_pow,arg1,arg2); + } + } + + for (s = se2; s>ss; --s) + if (*s=='^' && level[s - expr._data]==clevel) { // Power + arg1 = compile(ss,s,depth1,0); + arg2 = compile(s + 1,se,depth1,0); + _cimg_mp_check_type(arg2,2,"operator '^'",3,_cimg_mp_vector_size(arg1)); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_vv(mp_pow,arg1,arg2); + if (_cimg_mp_is_vector(arg1) && _cimg_mp_is_scalar(arg2)) _cimg_mp_vector2_vs(mp_pow,arg1,arg2); + if (_cimg_mp_is_scalar(arg1) && _cimg_mp_is_vector(arg2)) _cimg_mp_vector2_sv(mp_pow,arg1,arg2); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2)) + _cimg_mp_constant(std::pow(mem[arg1],mem[arg2])); + switch (arg2) { + case 0 : _cimg_mp_return(1); + case 1 : _cimg_mp_return(arg1); + case 2 : _cimg_mp_scalar1(mp_sqr,arg1); + case 3 : _cimg_mp_scalar1(mp_pow3,arg1); + case 4 : _cimg_mp_scalar1(mp_pow4,arg1); + default : _cimg_mp_scalar2(mp_pow,arg1,arg2); + } + } + + is_sth = ss1ss && (*se1=='+' || *se1=='-') && *se2==*se1)) { // Pre/post-decrement and increment + if ((is_sth && *ss=='+') || (!is_sth && *se1=='+')) { op = mp_self_increment; s_op = "Operator '++'"; } + else { op = mp_self_decrement; s_op = "Operator '--'"; } + + ref.assign(7); + arg1 = is_sth?compile(ss2,se,depth1,ref):compile(ss,se2,depth1,ref); // Variable slot + + if (*ref>0 && !_cimg_mp_is_temp(arg1)) { // Apply operator on a copy if necessary. + if (_cimg_mp_is_vector(arg1)) arg1 = vector_copy(arg1); + else arg1 = scalar1(mp_copy,arg1); + } + + if (is_sth) pos = arg1; // Determine return indice, depending on pre/post action + else { + if (_cimg_mp_is_vector(arg1)) pos = vector_copy(arg1); + else pos = scalar1(mp_copy,arg1); + } + + if (*ref==1) { // Vector value (scalar): V[k]++ + arg3 = ref[1]; // Vector slot + arg4 = ref[2]; // Index + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((uptrT)op,arg1,1).move_to(code); + CImg::vector((uptrT)mp_vector_set_off,arg1,arg3,(uptrT)_cimg_mp_vector_size(arg3),arg4,arg1). + move_to(code); _cimg_mp_return(pos); } - for (char *s = se2; s>ss; --s) - if (*s=='|' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_bitwise_or,compile(ss,s),compile(s+1,se)); - for (char *s = se2; s>ss; --s) - if (*s=='&' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_bitwise_and,compile(ss,s),compile(s+1,se)); - for (char *s = se3, *ns = se2; s>ss; --s, --ns) - if (*s=='!' && *ns=='=' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_noteq,compile(ss,s),compile(s+2,se)); - for (char *s = se3, *ns = se2; s>ss; --s, --ns) - if (*s=='=' && *ns=='=' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_eqeq,compile(ss,s),compile(s+2,se)); - for (char *s = se3, *ns = se2; s>ss; --s, --ns) - if (*s=='<' && *ns=='=' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_infeq,compile(ss,s),compile(s+2,se)); - for (char *s = se3, *ns = se2; s>ss; --s, --ns) - if (*s=='>' && *ns=='=' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_supeq,compile(ss,s),compile(s+2,se)); - for (char *s = se2, *ns = se1, *ps = se3; s>ss; --s, --ns, --ps) - if (*s=='<' && *ns!='<' && *ps!='<' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_inf,compile(ss,s),compile(s+1,se)); - for (char *s = se2, *ns = se1, *ps = se3; s>ss; --s, --ns, --ps) - if (*s=='>' && *ns!='>' && *ps!='>' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_sup,compile(ss,s),compile(s+1,se)); - for (char *s = se3, *ns = se2; s>ss; --s, --ns) - if (*s=='<' && *ns=='<' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_lsl,compile(ss,s),compile(s+2,se)); - for (char *s = se3, *ns = se2; s>ss; --s, --ns) - if (*s=='>' && *ns=='>' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_lsr,compile(ss,s),compile(s+2,se)); - for (char *s = se2, *ps = se3; s>ss; --s, --ps) - if (*s=='+' && *ps!='-' && *ps!='+' && *ps!='*' && *ps!='/' && *ps!='%' && - *ps!='&' && *ps!='|' && *ps!='^' && *ps!='!' && *ps!='~' && - (*ps!='e' || !(ps>ss && (*(ps-1)=='.' || (*(ps-1)>='0' && *(ps-1)<='9')))) && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_add,compile(ss,s),compile(s+1,se)); - for (char *s = se2, *ps = se3; s>ss; --s, --ps) - if (*s=='-' && *ps!='-' && *ps!='+' && *ps!='*' && *ps!='/' && *ps!='%' && - *ps!='&' && *ps!='|' && *ps!='^' && *ps!='!' && *ps!='~' && - (*ps!='e' || !(ps>ss && (*(ps-1)=='.' || (*(ps-1)>='0' && *(ps-1)<='9')))) && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_sub,compile(ss,s),compile(s+1,se)); - for (char *s = se2; s>ss; --s) if (*s=='*' && level[s-expr._data]==clevel) { - const unsigned int mem_A = compile(ss,s), bp1 = code._width, mem_B = compile(s+1,se); - if (mempos>=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(_cimg_mp_enfunc(mp_mul),pos,mem_A,mem_B,code._width-bp1).move_to(code,bp1); + + if (*ref==2) { // Image value (scalar): i/j[_#ind,off]++ + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((uptrT)op,arg1).move_to(code); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(pos); + CImg::vector((uptrT)(is_relative?mp_list_set_joff:mp_list_set_ioff), + arg1,p1,arg3).move_to(code); + } else { + if (!imgout) _cimg_mp_return(pos); + CImg::vector((uptrT)(is_relative?mp_set_joff:mp_set_ioff), + arg1,arg3).move_to(code); + } _cimg_mp_return(pos); } - for (char *s = se2; s>ss; --s) - if (*s=='/' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_div,compile(ss,s),compile(s+1,se)); - for (char *s = se2, *ns = se1; s>ss; --s, --ns) - if (*s=='%' && *ns!='^' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_modulo,compile(ss,s),compile(s+1,se)); - if (ssss; --s) - if (*s=='^' && level[s-expr._data]==clevel) - _cimg_mp_opcode2(mp_pow,compile(ss,s),compile(s+1,se)); - - // Look for a function call or a parenthesis. - if (*se1==']') { - const bool is_relative = *ss=='j'; - if ((*ss=='i' || is_relative) && *ss1=='[') { - if (*ss2==']') _cimg_mp_opcode0(mp_i); - _cimg_mp_opcode1(is_relative?mp_joff:mp_ioff,compile(ss2,se1)); + + if (*ref==3) { // Image value (scalar): i/j(_#ind,_x,_y,_z,_c)++ + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + arg6 = ref[6]; // C + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((uptrT)op,arg1).move_to(code); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(pos); + CImg::vector((uptrT)(is_relative?mp_list_set_jxyzc:mp_list_set_ixyzc), + arg1,p1,arg3,arg4,arg5,arg6).move_to(code); + } else { + if (!imgout) _cimg_mp_return(pos); + CImg::vector((uptrT)(is_relative?mp_set_jxyzc:mp_set_ixyzc), + arg1,arg3,arg4,arg5,arg6).move_to(code); + } + _cimg_mp_return(pos); + } + + if (*ref==4) { // Image value (vector): I/J[_#ind,off]++ + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // Offset + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((uptrT)mp_self_map_vector_s,arg1,(uptrT)_cimg_mp_vector_size(arg1), + (uptrT)(op==mp_self_increment?mp_self_add:mp_self_sub),1). + move_to(code); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(pos); + CImg::vector((uptrT)(is_relative?mp_list_set_Joff_v:mp_list_set_Ioff_v), + arg1,p1,arg3).move_to(code); + } else { + if (!imgout) _cimg_mp_return(pos); + CImg::vector((uptrT)(is_relative?mp_set_Joff_v:mp_set_Ioff_v), + arg1,arg3).move_to(code); + } + _cimg_mp_return(pos); + } + + if (*ref==5) { // Image value (vector): I/J(_#ind,_x,_y,_z,_c)++ + p1 = ref[1]; // Index + is_relative = (bool)ref[2]; + arg3 = ref[3]; // X + arg4 = ref[4]; // Y + arg5 = ref[5]; // Z + if (p_ref) std::memcpy(p_ref,ref,ref._width*sizeof(unsigned int)); + CImg::vector((uptrT)mp_self_map_vector_s,arg1,(uptrT)_cimg_mp_vector_size(arg1), + (uptrT)(op==mp_self_increment?mp_self_add:mp_self_sub),1). + move_to(code); + if (p1!=~0U) { + if (!listout) _cimg_mp_return(pos); + CImg::vector((uptrT)(is_relative?mp_list_set_Jxyz_v:mp_list_set_Ixyz_v), + arg1,p1,arg3,arg4,arg5).move_to(code); + } else { + if (!imgout) _cimg_mp_return(pos); + CImg::vector((uptrT)(is_relative?mp_set_Jxyz_v:mp_set_Ixyz_v), + arg1,arg3,arg4,arg5).move_to(code); + } + _cimg_mp_return(pos); + } + + if (_cimg_mp_is_vector(arg1)) { // Vector variable: V++ + CImg::vector((uptrT)mp_self_map_vector_s,arg1,(uptrT)_cimg_mp_vector_size(arg1), + (uptrT)(op==mp_self_increment?mp_self_add:mp_self_sub),1). + move_to(code); + _cimg_mp_return(pos); + } + + if (_cimg_mp_is_variable(arg1)) { // Scalar variable: s++ + CImg::vector((uptrT)op,arg1).move_to(code); + _cimg_mp_return(pos); + } + + if (is_sth) variable_name.assign(ss2,(unsigned int)(se - ss1)); + else variable_name.assign(ss,(unsigned int)(se1 - ss)); + variable_name.back() = 0; + *se = saved_char; cimg::strellipsize(variable_name,64); cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: %s: Invalid operand '%s', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + variable_name._data, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + + // Array-like access to vectors and image values 'i/j[_#ind,offset,_boundary]' and 'vector[offset]'. + if (*se1==']' && *ss!='[') { + s_op = "Operator '[]'"; + is_relative = *ss=='j' || *ss=='J'; + + if ((*ss=='I' || *ss=='J') && *ss1=='[' && reserved_label[*ss]==~0U) { // Image value as a vector + if (*ss2=='#') { // Index specified + s0 = ss3; while (s0::vector((uptrT)(is_relative?mp_list_Joff:mp_list_Ioff), + pos,p1,arg1,arg2==~0U?reserved_label[30]:arg2).move_to(code); + } else { + CImg::vector((uptrT)(is_relative?mp_Joff:mp_Ioff), + pos,arg1,arg2==~0U?reserved_label[30]:arg2).move_to(code); + } + _cimg_mp_return(pos); + } + + if ((*ss=='i' || *ss=='j') && *ss1=='[' && reserved_label[*ss]==~0U) { // Image value as a scalar + if (*ss2=='#') { // Index specified + s0 = ss3; while (s0ss && *s0!='[') --s0; + if (s0>ss) { // Vector value + arg1 = compile(ss,s0,depth1,0); + s1 = s0 + 1; while (s1 sub-vector extraction + arg2 = compile(++s0,s1,depth1,0); + arg3 = compile(++s1,se1,depth1,0); + _cimg_mp_check_constant(arg2,1,s_op,false); + _cimg_mp_check_constant(arg3,2,s_op,false); + p1 = (unsigned int)mem[arg2]; + p2 = (unsigned int)mem[arg3]; + p3 = _cimg_mp_vector_size(arg1); + if (p1>=p3 || p2>=p3) { + variable_name.assign(ss,(unsigned int)(s0 - ss)).back() = 0; + *se = saved_char; cimg::strellipsize(variable_name,64); cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: %s: Out-of-bounds request for sub-vector '%s[%d,%d]' " + "(vector '%s' has dimension %u), " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + variable_name._data,(int)mem[arg2],(int)mem[arg3], + variable_name._data,p3, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + if (p1>p2) cimg::swap(p1,p2); + (p2-=p1)++; + pos = vector(p2); + CImg::vector((uptrT)mp_vector_crop,pos,arg1,p1,p2).move_to(code); + _cimg_mp_return(pos); + } + + // One argument -> vector value reference + if (_cimg_mp_is_scalar(arg1)) { + variable_name.assign(ss,(unsigned int)(s0 - ss)).back() = 0; + *se = saved_char; cimg::strellipsize(variable_name,64); cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: %s: Array brackets used on non-vector variable '%s', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + variable_name._data, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + + arg2 = compile(++s0,se1,depth1,0); + if (_cimg_mp_is_constant(arg2)) { // Constant index + nb = (int)mem[arg2]; + if (nb>=0 && nb<(int)_cimg_mp_vector_size(arg1)) _cimg_mp_return(arg1 + 1 + nb); + variable_name.assign(ss,(unsigned int)(s0 - ss)).back() = 0; + *se = saved_char; cimg::strellipsize(variable_name,64); cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: Out-of-bounds reference '%s[%d]' " + "(vector '%s' has dimension %u), " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function, + variable_name._data,nb, + variable_name._data,_cimg_mp_vector_size(arg1), + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + if (p_ref) { *p_ref = 1; p_ref[1] = arg1; p_ref[2] = arg2; } + _cimg_mp_scalar3(mp_vector_off,arg1,(uptrT)_cimg_mp_vector_size(arg1),arg2); } } + + // Look for a function call, an access to image value, or a parenthesis. if (*se1==')') { - if (*ss=='(') _cimg_mp_return(compile(ss1,se1)); - if (!std::strncmp(ss,"sin(",4)) _cimg_mp_opcode1(mp_sin,compile(ss4,se1)); - if (!std::strncmp(ss,"cos(",4)) _cimg_mp_opcode1(mp_cos,compile(ss4,se1)); - if (!std::strncmp(ss,"tan(",4)) _cimg_mp_opcode1(mp_tan,compile(ss4,se1)); - if (!std::strncmp(ss,"asin(",5)) _cimg_mp_opcode1(mp_asin,compile(ss5,se1)); - if (!std::strncmp(ss,"acos(",5)) _cimg_mp_opcode1(mp_acos,compile(ss5,se1)); - if (!std::strncmp(ss,"atan(",5)) _cimg_mp_opcode1(mp_atan,compile(ss5,se1)); - if (!std::strncmp(ss,"sinh(",5)) _cimg_mp_opcode1(mp_sinh,compile(ss5,se1)); - if (!std::strncmp(ss,"cosh(",5)) _cimg_mp_opcode1(mp_cosh,compile(ss5,se1)); - if (!std::strncmp(ss,"tanh(",5)) _cimg_mp_opcode1(mp_tanh,compile(ss5,se1)); - if (!std::strncmp(ss,"log10(",6)) _cimg_mp_opcode1(mp_log10,compile(ss6,se1)); - if (!std::strncmp(ss,"log2(",5)) _cimg_mp_opcode1(mp_log2,compile(ss5,se1)); - if (!std::strncmp(ss,"log(",4)) _cimg_mp_opcode1(mp_log,compile(ss4,se1)); - if (!std::strncmp(ss,"exp(",4)) _cimg_mp_opcode1(mp_exp,compile(ss4,se1)); - if (!std::strncmp(ss,"sqrt(",5)) _cimg_mp_opcode1(mp_sqrt,compile(ss5,se1)); - if (!std::strncmp(ss,"sign(",5)) _cimg_mp_opcode1(mp_sign,compile(ss5,se1)); - if (!std::strncmp(ss,"abs(",4)) _cimg_mp_opcode1(mp_abs,compile(ss4,se1)); - if (!std::strncmp(ss,"atan2(",6)) { - char *s1 = ss6; while (s1=mem._width) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(_cimg_mp_enfunc(mp_if),pos,mem_cond,mem_A,mem_B,bp2-bp1,code._width-bp2). - move_to(code,bp1); + if (*ss=='(') _cimg_mp_return(compile(ss1,se1,depth1,p_ref)); // Simple parentheses + is_relative = *ss=='j' || *ss=='J'; + + // I/J(_#ind,_x,_y,_z,_c,_interpolation,_boundary) + if ((*ss=='I' || *ss=='J') && *ss1=='(' && reserved_label[*ss]==~0U) { // Image value as scalar + if (*ss2=='#') { // Index specified + s0 = ss3; while (s01) { + arg2 = arg1 + 1; + if (p2>2) arg3 = arg2 + 1; + } + if (s1::vector((uptrT)(is_relative?mp_list_Jxyz:mp_list_Ixyz), + pos,p1,arg1,arg2,arg3, + arg4==~0U?reserved_label[29]:arg4, + arg5==~0U?reserved_label[30]:arg5).move_to(code); + else + CImg::vector((uptrT)(is_relative?mp_Jxyz:mp_Ixyz), + pos,arg1,arg2,arg3, + arg4==~0U?reserved_label[29]:arg4, + arg5==~0U?reserved_label[30]:arg5).move_to(code); _cimg_mp_return(pos); } - if (!std::strncmp(ss,"round(",6)) { - unsigned int value = 0, round = 1, direction = 0; - char *s1 = ss6; while (s11) { + arg2 = arg1 + 1; + if (p2>2) { + arg3 = arg2 + 1; + if (p2>3) arg4 = arg3 + 1; + } + } + if (s1 opcode; - if (mempos>=mem.size()) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(_cimg_mp_enfunc(*ss=='k'?mp_kth:ss[1]=='i'?mp_min:ss[1]=='a'?mp_max:mp_med),pos). - move_to(opcode); - for (char *s = ss4; s::vector(compile(s,ns)).move_to(opcode); - s = ns; + if (p_ref && arg5==~0U && arg6==~0U) { + *p_ref = 3; p_ref[1] = p1; p_ref[2] = (unsigned int)is_relative; + p_ref[3] = arg1; p_ref[4] = arg2; p_ref[5] = arg3; p_ref[6] = arg4; + } + + if (p1!=~0U) { + if (!listin) _cimg_mp_return(0); + pos = scalar7(is_relative?mp_list_jxyzc:mp_list_ixyzc, + p1,arg1,arg2,arg3,arg4, + arg5==~0U?reserved_label[29]:arg5, + arg6==~0U?reserved_label[30]:arg6); + } else { + if (!imgin) _cimg_mp_return(0); + pos = scalar6(is_relative?mp_jxyzc:mp_ixyzc, + arg1,arg2,arg3,arg4, + arg5==~0U?reserved_label[29]:arg5, + arg6==~0U?reserved_label[30]:arg6); } - (opcode>'y').move_to(code); + memtype[pos] = -1; // Create it as a variable to prevent from being used in further optimization _cimg_mp_return(pos); } - if (!std::strncmp(ss,"arg(",4)) { - CImgList opcode; - if (mempos>=mem.size()) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - CImg::vector(_cimg_mp_enfunc(mp_arg),pos).move_to(opcode); - for (char *s = ss4; s::vector(compile(s,ns)).move_to(opcode); - s = ns; + + // Mathematical functions. + switch (*ss) { + case 'a' : + if (!std::strncmp(ss,"abs(",4)) { // Absolute value + arg1 = compile(ss4,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_abs,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(cimg::abs(mem[arg1])); + _cimg_mp_scalar1(mp_abs,arg1); + } + + if (!std::strncmp(ss,"acos(",5)) { // Arccos + arg1 = compile(ss5,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_acos,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::acos(mem[arg1])); + _cimg_mp_scalar1(mp_acos,arg1); + } + + if (!std::strncmp(ss,"asin(",5)) { // Arcsin + arg1 = compile(ss5,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_asin,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::asin(mem[arg1])); + _cimg_mp_scalar1(mp_asin,arg1); + } + + if (!std::strncmp(ss,"atan(",5)) { // Arctan + arg1 = compile(ss5,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_atan,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::atan(mem[arg1])); + _cimg_mp_scalar1(mp_atan,arg1); + } + + if (!std::strncmp(ss,"atan2(",6)) { // Arctan2 + s1 = ss6; while (s1'y').move_to(code); - _cimg_mp_return(pos); + break; + + case 'c' : + if (!std::strncmp(ss,"cabs(",5)) { // Complex absolute value + arg1 = compile(ss5,se1,depth1,0); + _cimg_mp_check_type(arg1,0,"Function 'cabs()'",2,2); + _cimg_mp_scalar2(mp_hypot,arg1 + 1,arg1 + 2); + } + + if (!std::strncmp(ss,"carg(",5)) { // Complex argument + arg1 = compile(ss5,se1,depth1,0); + _cimg_mp_check_type(arg1,0,"Function 'carg()'",2,2); + _cimg_mp_scalar2(mp_atan2,arg1 + 2,arg1 + 1); + } + + if (!std::strncmp(ss,"cbrt(",5)) { // Cubic root + arg1 = compile(ss5,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_cbrt,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::pow(mem[arg1],1.0/3)); + _cimg_mp_scalar1(mp_cbrt,arg1); + } + + if (!std::strncmp(ss,"cconj(",6)) { // Complex conjugate + arg1 = compile(ss6,se1,depth1,0); + _cimg_mp_check_type(arg1,0,"Function 'cconj()'",2,2); + pos = vector(2); + CImg::vector((uptrT)mp_complex_conj,pos,arg1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"cexp(",5)) { // Complex exponential + arg1 = compile(ss5,se1,depth1,0); + _cimg_mp_check_type(arg1,0,"Function 'cexp()'",2,2); + pos = vector(2); + CImg::vector((uptrT)mp_complex_exp,pos,arg1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"clog(",5)) { // Complex logarithm + arg1 = compile(ss5,se1,depth1,0); + _cimg_mp_check_type(arg1,0,"Function 'clog()'",2,2); + pos = vector(2); + CImg::vector((uptrT)mp_complex_log,pos,arg1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"cos(",4)) { // Cosine + arg1 = compile(ss4,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_cos,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::cos(mem[arg1])); + _cimg_mp_scalar1(mp_cos,arg1); + } + + if (!std::strncmp(ss,"cosh(",5)) { // Hyperbolic cosine + arg1 = compile(ss5,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_cosh,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::cosh(mem[arg1])); + _cimg_mp_scalar1(mp_cosh,arg1); + } + + if (!std::strncmp(ss,"cross(",6)) { // Cross product + s_op = "Function 'cross()"; + s1 = ss6; while (s1::vector((uptrT)mp_cross,pos,arg1,arg2).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"cut(",4)) { // Cut + s1 = ss4; while (s1val2?val2:val); + } + _cimg_mp_scalar3(mp_cut,arg1,arg2,arg3); + } + break; + + case 'd' : + if (!std::strncmp(ss,"date(",5)) { // Date and file date + s1 = ss5; while (s1::vector((uptrT)mp_debug,arg1,code._width - p1), + CImg::string(ss6).unroll('y'))>'y').move_to(code,p1); + *se1 = ')'; + _cimg_mp_return(arg1); + } + + if (!std::strncmp(ss,"dot(",4)) { // Dot product + s_op = "Function 'dot()'"; + s1 = ss4; while (s1::vector((uptrT)mp_dowhile,arg1,arg2,code._width - p1).move_to(code,p1); + _cimg_mp_return(arg1); + } + break; + + case 'e' : + if (!std::strncmp(ss,"exp(",4)) { // Exponential + arg1 = compile(ss4,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_exp,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::exp(mem[arg1])); + _cimg_mp_scalar1(mp_exp,arg1); + } + break; + + case 'f' : + if (*ss1=='o' && *ss2=='r' && (*ss3=='(' || (*ss3 && *ss3<=' ' && *ss4=='('))) { // For loop + if (*ss3<=' ') cimg::swap(*ss3,*ss4); // Allow space before opening brace + s1 = ss4; while (s1::vector((uptrT)mp_whiledo,pos,arg1,p2 - p1,code._width - p2,arg2).move_to(code,p1); + _cimg_mp_return(pos); + } + break; + + case 'g' : + if (!std::strncmp(ss,"gauss(",6)) { // Gaussian function + s1 = ss6; while (s10) { val/=val1; _cimg_mp_constant(val1*std::sqrt(1+val*val)); } + _cimg_mp_constant(0); + } + _cimg_mp_scalar2(mp_hypot,arg1,arg2); + } + break; + + case 'i' : + if (*ss1=='f' && (*ss2=='(' || (*ss2 && *ss2<=' ' && *ss3=='('))) { // If..then[..else.] + s_op = "Function 'if()'"; + if (*ss2<=' ') cimg::swap(*ss2,*ss3); // Allow space before opening brace + s1 = ss3; while (s1=se1?0:compile(s2 + 1,se1,depth1,0); + _cimg_mp_check_type(arg1,1,s_op,1,0); + _cimg_mp_check_type(arg3,3,s_op,3,_cimg_mp_vector_size(arg2)); + if (_cimg_mp_is_constant(arg1) && _cimg_mp_is_constant(arg2) && _cimg_mp_is_constant(arg3)) + _cimg_mp_constant(mem[arg1]?mem[arg2]:mem[arg3]); + arg4 = _cimg_mp_is_vector(arg2)?_cimg_mp_vector_size(arg2):0; // Output vector size (or 0 if scalar) + if (arg4) pos = vector(arg4); else pos = scalar(); + CImg::vector((uptrT)mp_if,pos,arg1,arg2,arg3, + p3 - p2,code._width - p3,arg4).move_to(code,p2); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"init(",5)) { // Init + if (ss0!=expr._data || code.width()) { // (only allowed as the first instruction) + *se = saved_char; cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: Function 'init()': Init invokation not done at the " + "beginning of expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + arg1 = compile(ss5,se1,depth1,p_ref); + init_size = code.width(); + _cimg_mp_return(arg1); + } + + if (!std::strncmp(ss,"int(",4)) { // Integer cast + arg1 = compile(ss4,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_int,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant((long)mem[arg1]); + _cimg_mp_scalar1(mp_int,arg1); + } + + if (*ss1=='s') { // Family of 'is_?()' functions + + if (!std::strncmp(ss,"isbool(",7)) { // Is boolean? + if (ss7==se1) _cimg_mp_return(0); + arg1 = compile(ss7,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_isbool,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_return(mem[arg1]==0.0 || mem[arg1]==1.0); + _cimg_mp_scalar1(mp_isbool,arg1); + } + + if (!std::strncmp(ss,"isdir(",6)) { // Is directory? + *se1 = 0; + is_sth = cimg::is_directory(ss6); + *se1 = ')'; + _cimg_mp_return(is_sth?1U:0U); + } + + if (!std::strncmp(ss,"isfile(",7)) { // Is file? + *se1 = 0; + is_sth = cimg::is_file(ss7); + *se1 = ')'; + _cimg_mp_return(is_sth?1U:0U); + } + + if (!std::strncmp(ss,"isin(",5)) { // Is in sequence/vector? + pos = scalar(); + CImg::vector((uptrT)mp_isin,pos).move_to(_opcode); + for (s = ss5; s::sequence((uptrT)_cimg_mp_vector_size(arg1),arg1 + 1, + arg1 + (uptrT)_cimg_mp_vector_size(arg1)). + move_to(_opcode); + else CImg::vector(arg1).move_to(_opcode); + s = ns; + } + (_opcode>'y').move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"isinf(",6)) { // Is infinite? + if (ss6==se1) _cimg_mp_return(0); + arg1 = compile(ss6,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_isinf,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_return((unsigned int)cimg::type::is_inf(mem[arg1])); + _cimg_mp_scalar1(mp_isinf,arg1); + } + + if (!std::strncmp(ss,"isint(",6)) { // Is integer? + if (ss6==se1) _cimg_mp_return(0); + arg1 = compile(ss6,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_isint,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_return((unsigned int)cimg::mod(mem[arg1],1.0)==0); + _cimg_mp_scalar1(mp_isint,arg1); + } + + if (!std::strncmp(ss,"isnan(",6)) { // Is NaN? + if (ss6==se1) _cimg_mp_return(0); + arg1 = compile(ss6,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_isnan,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_return((unsigned int)cimg::type::is_nan(mem[arg1])); + _cimg_mp_scalar1(mp_isnan,arg1); + } + + if (!std::strncmp(ss,"isval(",6)) { // Is value? + val = 0; + if (cimg_sscanf(ss6,"%lf%c%c",&val,&sep,&end)==2 && sep==')') _cimg_mp_return(1); + _cimg_mp_return(0); + } + + } + break; + + case 'l' : + if (!std::strncmp(ss,"log(",4)) { // Natural logarithm + arg1 = compile(ss4,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_log,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::log(mem[arg1])); + _cimg_mp_scalar1(mp_log,arg1); + } + + if (!std::strncmp(ss,"log2(",5)) { // Base-2 logarithm + arg1 = compile(ss5,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_log2,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(cimg::log2(mem[arg1])); + _cimg_mp_scalar1(mp_log2,arg1); + } + + if (!std::strncmp(ss,"log10(",6)) { // Base-10 logarithm + arg1 = compile(ss6,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_log10,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::log10(mem[arg1])); + _cimg_mp_scalar1(mp_log10,arg1); + } + break; + + case 'm' : + if (!std::strncmp(ss,"mdet(",5)) { // Matrix determinant + arg1 = compile(ss5,se1,depth1,0); + _cimg_mp_check_matrix_square(arg1,1,"Function 'mdet()'"); + p1 = (unsigned int)std::sqrt((float)_cimg_mp_vector_size(arg1)); + _cimg_mp_scalar2(mp_matrix_det,arg1,p1); + } + + if (!std::strncmp(ss,"mdiag(",5)) { // Diagonal matrix + arg1 = compile(ss6,se1,depth1,0); + _cimg_mp_check_type(arg1,1,"Function 'mdiag()'",2,0); + p1 = _cimg_mp_vector_size(arg1); + pos = vector(p1*p1); + CImg::vector((uptrT)mp_matrix_diag,pos,arg1,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"meig(",5)) { // Matrix eigenvalues/eigenvector + arg1 = compile(ss5,se1,depth1,0); + _cimg_mp_check_matrix_square(arg1,1,"Function 'meig()'"); + p1 = (unsigned int)std::sqrt((float)_cimg_mp_vector_size(arg1)); + pos = vector((p1 + 1)*p1); + CImg::vector((uptrT)mp_matrix_eig,pos,arg1,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"meye(",5)) { // Matrix eigenvalues/eigenvector + arg1 = compile(ss5,se1,depth1,0); + _cimg_mp_check_constant(arg1,1,"Function 'meye()'",true); + p1 = (unsigned int)mem[arg1]; + pos = vector(p1*p1); + CImg::vector((uptrT)mp_matrix_eye,pos,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"minv(",5)) { // Matrix inversion + arg1 = compile(ss5,se1,depth1,0); + _cimg_mp_check_matrix_square(arg1,1,"Function 'minv()'"); + p1 = (unsigned int)std::sqrt((float)_cimg_mp_vector_size(arg1)); + pos = vector(p1*p1); + CImg::vector((uptrT)mp_matrix_inv,pos,arg1,p1).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"mmul(",5)) { // Matrix multiplication + s_op = "Function 'mmul()'"; + s1 = ss5; while (s1::%s: %s: Sizes of first and second arguments ('%s' and '%s') " + "do not match for third argument 'nb_colsB=%u', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s_type(arg1)._data,s_type(arg2)._data,p3, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + pos = vector(arg4*p3); + CImg::vector((uptrT)mp_matrix_mul,pos,arg1,arg2,arg4,arg5,p3).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"mrot(",5)) { // Rotation matrix + s_op = "Function 'mrot()'"; + s1 = ss5; while (s1::vector((uptrT)mp_matrix_rot,pos,arg1,arg2,arg3,arg4).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"msolve(",7)) { // Solve linear system + s_op = "Function 'msolve()'"; + s1 = ss7; while (s1::%s: %s: Sizes of first and second arguments ('%s' and '%s') " + "do not match for third argument 'nb_colsB=%u', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s_type(arg1)._data,s_type(arg2)._data,p3, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + pos = vector(arg5*p3); + CImg::vector((uptrT)mp_matrix_solve,pos,arg1,arg2,arg4,arg5,p3).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"mtrace(",7)) { // Matrix trace + arg1 = compile(ss7,se1,depth1,0); + _cimg_mp_check_matrix_square(arg1,1,"Function 'mtrace()'"); + p1 = (unsigned int)std::sqrt((float)_cimg_mp_vector_size(arg1)); + _cimg_mp_scalar2(mp_matrix_trace,arg1,p1); + } + + if (!std::strncmp(ss,"mtrans(",7)) { // Matrix transpose + s_op = "Function 'mtrans()'"; + s1 = ss7; while (s1::%s: %s: Size of first argument ('%s') does not match" + "for second specified argument 'nb_cols=%u', " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s_type(arg1)._data,p2, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + pos = vector(p3*p2); + CImg::vector((uptrT)mp_matrix_trans,pos,arg1,p2,p3).move_to(code); + _cimg_mp_return(pos); + } + break; + + case 'n' : + if (!std::strncmp(ss,"narg(",5)) { // Number of arguments + if (*ss5==')') _cimg_mp_return(0); + arg1 = 0; + for (s = ss5; s::vector((uptrT)mp_norm0,pos).move_to(_opcode); break; + case 1 : CImg::vector((uptrT)mp_norm1,pos).move_to(_opcode); break; + case 2 : CImg::vector((uptrT)mp_norm2,pos).move_to(_opcode); break; + case ~0U : CImg::vector((uptrT)mp_norminf,pos).move_to(_opcode); break; + default : + CImg::vector((uptrT)mp_normp,pos,(uptrT)(arg1==~0U?-1:(int)arg1)). + move_to(_opcode); + } + for (s = std::strchr(ss5,'(') + 1; s::sequence((uptrT)_cimg_mp_vector_size(arg2),arg2 + 1, + arg2 + (uptrT)_cimg_mp_vector_size(arg2)). + move_to(_opcode); + else CImg::vector(arg2).move_to(_opcode); + s = ns; + } + (_opcode>'y').move_to(code); + _cimg_mp_return(pos); + } + break; + + case 'p' : + if (!std::strncmp(ss,"print(",6)) { // Print expression + pos = compile(ss6,se1,depth1,p_ref); + *se1 = 0; + if (_cimg_mp_is_vector(pos)) // Vector + ((CImg::vector((uptrT)mp_vector_print,pos,(uptrT)_cimg_mp_vector_size(pos)), + CImg::string(ss6).unroll('y'))>'y').move_to(code); + else // Scalar + ((CImg::vector((uptrT)mp_print,pos), + CImg::string(ss6).unroll('y'))>'y').move_to(code); + *se1 = ')'; + _cimg_mp_return(pos); + } + break; + + case 'r' : + if (!std::strncmp(ss,"rol(",4) || !std::strncmp(ss,"ror(",4)) { // Bitwise rotation + s1 = ss4; while (s1::vector((uptrT)mp_vector_sort,pos,arg1,p1,arg2).move_to(code); + _cimg_mp_return(pos); + } + + if (!std::strncmp(ss,"sqr(",4)) { // Square + arg1 = compile(ss4,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_sqr,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(cimg::sqr(mem[arg1])); + _cimg_mp_scalar1(mp_sqr,arg1); + } + + if (!std::strncmp(ss,"sqrt(",5)) { // Square root + arg1 = compile(ss5,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_sqrt,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::sqrt(mem[arg1])); + _cimg_mp_scalar1(mp_sqrt,arg1); + } + + if (!std::strncmp(ss,"swap(",5)) { // Swap values + s_op = "Function 'swap()'"; + s1 = ss5; while (s1::%s: %s: Invalid non-variable arguments specified, " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + _cimg_mp_scalar2(mp_swap,arg1,arg2); + } + break; + + case 't' : + if (!std::strncmp(ss,"tan(",4)) { // Tangent + arg1 = compile(ss4,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_tan,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::tan(mem[arg1])); + _cimg_mp_scalar1(mp_tan,arg1); + } + + if (!std::strncmp(ss,"tanh(",5)) { // Hyperbolic tangent + arg1 = compile(ss5,se1,depth1,0); + if (_cimg_mp_is_vector(arg1)) _cimg_mp_vector1_v(mp_tanh,arg1); + if (_cimg_mp_is_constant(arg1)) _cimg_mp_constant(std::tanh(mem[arg1])); + _cimg_mp_scalar1(mp_tanh,arg1); + } + break; + + case 'u' : + if (*ss1=='(') { // Random value with uniform distribution + if (*ss2==')') _cimg_mp_scalar2(mp_u,0,1); + s1 = ss2; while (s10) || + !std::strncmp(ss,"vector(",7)) { // Vector + arg2 = 0; // Number of specified values. + s = std::strchr(ss6,'(') + 1; + if (*s!=')' || arg1==~0U) for (; s::sequence(arg4,arg3 + 1,arg3 + arg4).move_to(_opcode); + arg2+=arg4; + } else { CImg::vector(arg3).move_to(_opcode); ++arg2; } + s = ns; + } + if (arg1==~0U) arg1 = arg2; + _cimg_mp_check_vector0(arg1,"Function 'vector()'"); + pos = vector(arg1); + _opcode.insert(CImg::vector((uptrT)mp_vector_init,pos,arg1),0); + (_opcode>'y').move_to(code); + _cimg_mp_return(pos); + } + break; + + case 'w' : + if (!std::strncmp(ss,"whiledo",7) && (*ss7=='(' || (*ss7 && *ss7<=' ' && *ss8=='('))) { // While...do + if (*ss7<=' ') cimg::swap(*ss7,*ss8); // Allow space before opening brace + s1 = ss8; while (s1::vector((uptrT)mp_whiledo,pos,arg1,p2 - p1,code._width - p2,arg2).move_to(code,p1); + _cimg_mp_return(pos); + } + break; } - if (!std::strncmp(ss,"narg(",5)) { - if (*ss5==')') _cimg_mp_return(0); - unsigned int nb_args = 0; - for (char *s = ss5; s=mem.size()) mem.resize(-200,1,1,1,0); - const unsigned int pos = mempos++; - mem[pos] = nb_args; + + if (!std::strncmp(ss,"min(",4) || !std::strncmp(ss,"max(",4) || + !std::strncmp(ss,"med(",4) || !std::strncmp(ss,"kth(",4) || + !std::strncmp(ss,"arg(",4) || + !std::strncmp(ss,"argmin(",7) || !std::strncmp(ss,"argmax(",7)) { // Multi-argument functions + pos = scalar(); + is_sth = *ss=='a' && ss[3]!='('; + CImg::vector((uptrT)(*ss=='a'?(ss[3]=='('?mp_arg:ss[4]=='i'?mp_argmin:mp_argmax): + *ss=='k'?mp_kth:ss[1]=='i'?mp_min: + ss[1]=='a'?mp_max:mp_med),pos). + move_to(_opcode); + for (s = is_sth?ss7:ss4; s::sequence((uptrT)_cimg_mp_vector_size(arg2),arg2 + 1, + arg2 + (uptrT)_cimg_mp_vector_size(arg2)). + move_to(_opcode); + else CImg::vector(arg2).move_to(_opcode); + s = ns; + } + (_opcode>'y').move_to(code); _cimg_mp_return(pos); } - if (!std::strncmp(ss,"isval(",6)) { - char sep = 0, end = 0; double val = 0; - if (std::sscanf(ss6,"%lf%c%c",&val,&sep,&end)==2 && sep==')') _cimg_mp_return(1); - _cimg_mp_return(0); - } - if (!std::strncmp(ss,"isnan(",6)) _cimg_mp_opcode1(mp_isnan,compile(ss6,se1)); - if (!std::strncmp(ss,"isinf(",6)) _cimg_mp_opcode1(mp_isinf,compile(ss6,se1)); - if (!std::strncmp(ss,"isint(",6)) _cimg_mp_opcode1(mp_isint,compile(ss6,se1)); - if (!std::strncmp(ss,"isbool(",7)) _cimg_mp_opcode1(mp_isbool,compile(ss7,se1)); - if (!std::strncmp(ss,"rol(",4) || !std::strncmp(ss,"ror(",4)) { - unsigned int value = 0, nb = 1; - char *s1 = ss4; while (s1 Look for a user-defined function. + s0 = strchr(ss,'('); + if (s0) { + variable_name.assign(ss,s0 - ss + 1).back() = 0; + cimglist_for(function_def,l) if (!std::strcmp(function_def[l],variable_name)) { + p2 = (unsigned int)function_def[l].back(); // Number of required arguments + CImg _expr = function_body[l]; // Expression to be substituted + p1 = 1; // Indice of current parsed argument + for (s = s0 + 1; s<=se1; ++p1, s = ns + 1) { // Parse function arguments + while (*s && *s<=' ') ++s; + if (*s==')' && p1==1) break; // Function has no arguments + if (p1>p2) { ++p1; break; } + ns = s; while (ns::%s: function '%s()': Number of specified arguments does not " + "match function declaration (%u argument%s required), " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,variable_name._data, + p2,p2!=1?"s":"", + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } + + // Recompute 'pexpr' and 'level' for evaluating substituted expression. + CImg _pexpr(_expr._width); + ns = _pexpr._data; + for (ps = _expr._data, c1 = ' '; *ps; ++ps) { + if (*ps!=' ') c1 = *ps; + *(ns++) = c1; + } + *ns = 0; + + CImg _level(_expr._width - 1); + unsigned int *pd = _level._data; + nb = 0; + for (ps = _expr._data; *ps && nb>=0; ++ps) + *(pd++) = (unsigned int)(*ps=='('||*ps=='['?nb++:*ps==')'||*ps==']'?--nb:nb); + + expr.swap(_expr); pexpr.swap(_pexpr); level.swap(_level); + s0 = user_function; + user_function = function_def[l]; + pos = compile(expr._data,expr._data + expr._width - 1,depth1,p_ref); + user_function = s0; + expr.swap(_expr); pexpr.swap(_pexpr); level.swap(_level); + _cimg_mp_return(pos); + } + } + } // if (se1==')') + + // Vector specification using initializer '[ ... ]'. + if (*ss=='[' && *se1==']') { + arg1 = 0; // Number of specified values. + if (*ss1!=']') for (s = ss1; s::sequence(arg3,arg2 + 1,arg2 + arg3).move_to(_opcode); + arg1+=arg3; + } else { CImg::vector(arg2).move_to(_opcode); ++arg1; } + s = ns; } - _cimg_mp_opcode2(*ss2=='l'?mp_rol:mp_ror,value,nb); - } + _cimg_mp_check_vector0(arg1,"operator '[]'"); + pos = vector(arg1); + _opcode.insert(CImg::vector((uptrT)mp_vector_init,pos,arg1),0); + (_opcode>'y').move_to(code); + _cimg_mp_return(pos); + } - if (!std::strncmp(ss,"sinc(",5)) _cimg_mp_opcode1(mp_sinc,compile(ss5,se1)); - if (!std::strncmp(ss,"int(",4)) _cimg_mp_opcode1(mp_int,compile(ss4,se1)); + // Variables related to the input list of images. + if (*ss1=='#' && ss2::vector(listin[p1].median()).move_to(list_median[p1]); + _cimg_mp_constant(*list_median[p1]); + } + _cimg_mp_scalar1(mp_list_median,arg1); + } + if (*ss1>='0' && *ss1<='9') { // i0#ind...i9#ind + if (!listin) _cimg_mp_return(0); + _cimg_mp_scalar7(mp_list_ixyzc,arg1,_cimg_mp_x,_cimg_mp_y,_cimg_mp_z,*ss1 - '0', + reserved_label[29],reserved_label[30]); + } + switch (*ss1) { + case 'm' : arg2 = 0; break; // im#ind + case 'M' : arg2 = 1; break; // iM#ind + case 'a' : arg2 = 2; break; // ia#ind + case 'v' : arg2 = 3; break; // iv#ind + case 's' : arg2 = 12; break; // is#ind + case 'p' : arg2 = 13; break; // ip#ind + } + } else if (*ss1=='m') switch (*ss) { + case 'x' : arg2 = 4; break; // xm#ind + case 'y' : arg2 = 5; break; // ym#ind + case 'z' : arg2 = 6; break; // zm#ind + case 'c' : arg2 = 7; break; // cm#ind + } else if (*ss1=='M') switch (*ss) { + case 'x' : arg2 = 8; break; // xM#ind + case 'y' : arg2 = 9; break; // yM#ind + case 'z' : arg2 = 10; break; // zM#ind + case 'c' : arg2 = 11; break; // cM#ind + } + if (arg2!=~0U) { + if (!listin) _cimg_mp_return(0); + if (_cimg_mp_is_constant(arg1)) { + if (!list_stats) list_stats.assign(listin._width); + if (!list_stats[p1]) list_stats[p1].assign(1,14,1,1,0).fill(listin[p1].get_stats(),false); + _cimg_mp_constant(list_stats(p1,arg2)); + } + _cimg_mp_scalar2(mp_list_stats,arg1,arg2); + } + } + + if (*ss=='w' && *ss1=='h' && *ss2=='d' && *ss3=='#' && ss4 variable_name(ss,(unsigned int)(se-ss+1)); - variable_name.back() = 0; - if (variable_name[1]) { // Multi-char variable. - cimglist_for(labelM,i) if (!std::strcmp(variable_name,labelM[i])) _cimg_mp_return(labelMpos[i]); - } else if (label1pos[*variable_name]!=~0U) _cimg_mp_return(label1pos[*variable_name]); // Single-char variable. - *se = saved_char; + variable_name.assign(ss,(unsigned int)(se + 1 - ss)).back() = 0; + if (variable_name[1]) { // Multi-char variable + cimglist_for(variable_def,i) if (!std::strcmp(variable_name,variable_def[i])) + _cimg_mp_return(variable_pos[i]); + } else if (reserved_label[*variable_name]!=~0U) // Single-char variable + _cimg_mp_return(reserved_label[*variable_name]); + + // Reached an unknown item -> error. + is_sth = true; // is_valid_variable_name + if (*variable_name>='0' && *variable_name<='9') is_sth = false; + else for (ns = variable_name._data + 1; *ns; ++ns) + if (!is_varchar(*ns)) { is_sth = false; break; } + + *se = saved_char; cimg::strellipsize(variable_name,64); cimg::strellipsize(expr,64); + if (is_sth) + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s: Undefined variable '%s' in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function, + variable_name._data, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + s0 = std::strchr(ss,'('); + if (s0 && *se1==')') s_op = "function call"; else s_op = "item"; throw CImgArgumentException("[_cimg_math_parser] " - "CImg<%s>::%s(): Invalid item '%s' in specified expression '%s%s%s'.\n", - pixel_type(),calling_function, - variable_name._data, - (ss-8)>expr._data?"...":"", - (ss-8)>expr._data?ss-8:expr._data, + "CImg<%s>::%s: Unrecognized %s '%s' in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function, + s_op,variable_name._data, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, se<&expr.back()?"...":""); } - // Evaluation functions, known by the parser. - // Defining these functions 'static' ensures that sizeof(mp_func)==sizeof(ulong), so we can store pointers to them - // directly in the opcode vectors. - static double mp_u(_cimg_math_parser& mp) { - return mp.mem[mp.opcode(2)] + cimg::rand()*(mp.mem[mp.opcode(3)]-mp.mem[mp.opcode(2)]); + // Evaluation procedure. + double operator()(const double x, const double y, const double z, const double c) { + mem[_cimg_mp_x] = x; mem[_cimg_mp_y] = y; mem[_cimg_mp_z] = z; mem[_cimg_mp_c] = c; + for (p_code = p_code_begin; p_code &op = *p_code; + opcode._data = op._data; opcode._height = op._height; + const uptrT target = opcode[1]; + mem[target] = _cimg_mp_defunc(*this); + } + return *result; } - static double mp_g(_cimg_math_parser& mp) { - cimg::unused(mp); - return cimg::grand(); + + // Evaluation procedure (return output values in vector 'output'). + template + void operator()(const double x, const double y, const double z, const double c, t *const output) { + mem[_cimg_mp_x] = x; mem[_cimg_mp_y] = y; mem[_cimg_mp_z] = z; mem[_cimg_mp_c] = c; + for (p_code = p_code_begin; p_code &op = *p_code; + opcode._data = op._data; opcode._height = op._height; + const uptrT target = opcode[1]; + mem[target] = _cimg_mp_defunc(*this); + } + if (result_dim) { + const double *ptrs = result + 1; + t *ptrd = output; + for (unsigned int k = 0; k s_type(const unsigned int arg) const { + CImg res; + if (_cimg_mp_is_vector(arg)) { // Vector + CImg::string("vectorXXXXXXXXXXXXXXXX").move_to(res); + std::sprintf(res._data + 6,"%u",_cimg_mp_vector_size(arg)); + } else CImg::string("scalar").move_to(res); + return res; } - static double mp_logical_and(_cimg_math_parser& mp) { - const bool is_A = (bool)mp.mem[mp.opcode(2)]; - const CImg *const pE = ++mp.p_code + mp.opcode(4); - if (!is_A) { mp.p_code = pE - 1; return 0; } - const unsigned int mem_B = (unsigned int)mp.opcode(3); - for ( ; mp.p_code &op = *mp.p_code; - mp.opcode._data = op._data; mp.opcode._height = op._height; - const unsigned int target = (unsigned int)mp.opcode[1]; - mp.mem[target] = _cimg_mp_defunc(mp); + + // Insert constant value in memory. + unsigned int constant(const double val) { + if (val==(double)(int)val) { + if (val>=0 && val<=9) return (unsigned int)val; + if (val<0 && val>=-5) return (unsigned int)(10 - val); } - --mp.p_code; - return (double)(bool)mp.mem[mem_B]; + if (val==0.5) return 16; + if (mempos>=mem._width) { mem.resize(-200,1,1,1,0); memtype.resize(-200,1,1,1,0); } + const unsigned int pos = mempos++; + mem[pos] = val; + memtype[pos] = 1; // Set constant property + return pos; } - static double mp_logical_or(_cimg_math_parser& mp) { - const bool is_A = (bool)mp.mem[mp.opcode(2)]; - const CImg *const pE = ++mp.p_code + mp.opcode(4); - if (is_A) { mp.p_code = pE - 1; return 1; } - const unsigned int mem_B = (unsigned int)mp.opcode(3); - for ( ; mp.p_code &op = *mp.p_code; - mp.opcode._data = op._data; mp.opcode._height = op._height; - const unsigned int target = (unsigned int)mp.opcode[1]; - mp.mem[target] = _cimg_mp_defunc(mp); + + // Insert code instructions for processing scalars. + unsigned int scalar() { // Insert new scalar in memory. + if (mempos>=mem._width) { mem.resize(-200,1,1,1,0); memtype.resize(mem._width,1,1,1,0); } + return mempos++; + } + + unsigned int scalar0(const mp_func op) { + const unsigned int pos = scalar(); + CImg::vector((uptrT)op,pos).move_to(code); + return pos; + } + + unsigned int scalar1(const mp_func op, const unsigned int arg1) { + const unsigned int pos = + arg1>_cimg_mp_c && _cimg_mp_is_temp(arg1)?arg1:scalar(); + CImg::vector((uptrT)op,pos,arg1).move_to(code); + return pos; + } + + unsigned int scalar2(const mp_func op, const unsigned int arg1, const unsigned int arg2) { + const unsigned int pos = + arg1>_cimg_mp_c && _cimg_mp_is_temp(arg1)?arg1: + arg2>_cimg_mp_c && _cimg_mp_is_temp(arg2)?arg2:scalar(); + CImg::vector((uptrT)op,pos,arg1,arg2).move_to(code); + return pos; + } + + unsigned int scalar3(const mp_func op, + const unsigned int arg1, const unsigned int arg2, const unsigned int arg3) { + const unsigned int pos = + arg1>_cimg_mp_c && _cimg_mp_is_temp(arg1)?arg1: + arg2>_cimg_mp_c && _cimg_mp_is_temp(arg2)?arg2: + arg3>_cimg_mp_c && _cimg_mp_is_temp(arg3)?arg3:scalar(); + CImg::vector((uptrT)op,pos,arg1,arg2,arg3).move_to(code); + return pos; + } + + unsigned int scalar6(const mp_func op, + const unsigned int arg1, const unsigned int arg2, const unsigned int arg3, + const unsigned int arg4, const unsigned int arg5, const unsigned int arg6) { + const unsigned int pos = + arg1>_cimg_mp_c && _cimg_mp_is_temp(arg1)?arg1: + arg2>_cimg_mp_c && _cimg_mp_is_temp(arg2)?arg2: + arg3>_cimg_mp_c && _cimg_mp_is_temp(arg3)?arg3: + arg4>_cimg_mp_c && _cimg_mp_is_temp(arg4)?arg4: + arg5>_cimg_mp_c && _cimg_mp_is_temp(arg5)?arg5: + arg6>_cimg_mp_c && _cimg_mp_is_temp(arg6)?arg6:scalar(); + CImg::vector((uptrT)op,pos,arg1,arg2,arg3,arg4,arg5,arg6).move_to(code); + return pos; + } + + unsigned int scalar7(const mp_func op, + const unsigned int arg1, const unsigned int arg2, const unsigned int arg3, + const unsigned int arg4, const unsigned int arg5, const unsigned int arg6, + const unsigned int arg7) { + const unsigned int pos = + arg1>_cimg_mp_c && _cimg_mp_is_temp(arg1)?arg1: + arg2>_cimg_mp_c && _cimg_mp_is_temp(arg2)?arg2: + arg3>_cimg_mp_c && _cimg_mp_is_temp(arg3)?arg3: + arg4>_cimg_mp_c && _cimg_mp_is_temp(arg4)?arg4: + arg5>_cimg_mp_c && _cimg_mp_is_temp(arg5)?arg5: + arg6>_cimg_mp_c && _cimg_mp_is_temp(arg6)?arg6: + arg7>_cimg_mp_c && _cimg_mp_is_temp(arg7)?arg7:scalar(); + CImg::vector((uptrT)op,pos,arg1,arg2,arg3,arg4,arg5,arg6,arg7).move_to(code); + return pos; + } + + // Return a string that defines the calling function + the user-defined function scope. + CImg calling_function_s() const { + CImg res; + const unsigned int + l1 = calling_function?std::strlen(calling_function):0, + l2 = user_function?std::strlen(user_function):0; + if (l2) { + res.assign(l1 + l2 + 48); + cimg_snprintf(res,res._width,"%s(): When substituting function '%s()'",calling_function,user_function); + } else { + res.assign(l1 + l2 + 4); + cimg_snprintf(res,res._width,"%s()",calling_function); } - --mp.p_code; - return (double)(bool)mp.mem[mem_B]; + return res; } - static double mp_infeq(_cimg_math_parser& mp) { - return (double)(mp.mem[mp.opcode(2)]<=mp.mem[mp.opcode(3)]); + + // Return true if specified argument can be a part of an allowed variable name. + bool is_varchar(const char c) { + return (c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9') || c=='_'; + } + + // Insert code instructions for processing vectors. + bool is_tmp_vector(const unsigned int arg) const { + unsigned int siz = _cimg_mp_vector_size(arg); + if (siz>8) return false; + const int *ptr = memtype.data(arg + 1); + bool is_tmp = true; + while (siz-->0) if (*(ptr++)) { is_tmp = false; break; } + return is_tmp; + } + + void set_variable_vector(const unsigned int arg) { + unsigned int siz = _cimg_mp_vector_size(arg); + int *ptr = memtype.data(arg + 1); + while (siz-->0) *(ptr++) = -1; + } + + unsigned int vector(const unsigned int siz) { // Insert new vector of specified size in memory. + if (mempos + siz>=mem._width) { + mem.resize(2*mem._width + siz,1,1,1,0); + memtype.resize(mem._width,1,1,1,0); + } + const unsigned int pos = mempos++; + mem[pos] = cimg::type::nan(); + memtype[pos] = siz + 1; + mempos+=siz; + return pos; } - static double mp_supeq(_cimg_math_parser& mp) { - return (double)(mp.mem[mp.opcode(2)]>=mp.mem[mp.opcode(3)]); + + unsigned int vector_copy(const unsigned int arg) { // Insert new copy of specified vector in memory. + const unsigned int + siz = _cimg_mp_vector_size(arg), + pos = vector(siz); + CImg::vector((uptrT)mp_vector_copy,pos,arg,siz).move_to(code); + return pos; } - static double mp_noteq(_cimg_math_parser& mp) { - return (double)(mp.mem[mp.opcode(2)]!=mp.mem[mp.opcode(3)]); + + unsigned int vector1_v(const mp_func op, const unsigned int arg1) { + const unsigned int + siz = _cimg_mp_vector_size(arg1), + pos = is_tmp_vector(arg1)?arg1:vector(siz); + CImg::vector((uptrT)mp_vector_map_v,pos,siz,(uptrT)op,arg1).move_to(code); + return pos; } - static double mp_eqeq(_cimg_math_parser& mp) { - return (double)(mp.mem[mp.opcode(2)]==mp.mem[mp.opcode(3)]); + + unsigned int vector2_vv(const mp_func op, const unsigned int arg1, const unsigned int arg2) { + const unsigned int + siz = _cimg_mp_vector_size(arg1), + pos = is_tmp_vector(arg1)?arg1:is_tmp_vector(arg2)?arg2:vector(siz); + CImg::vector((uptrT)mp_vector_map_vv,pos,siz,(uptrT)op,arg1,arg2).move_to(code); + return pos; } - static double mp_inf(_cimg_math_parser& mp) { - return (double)(mp.mem[mp.opcode(2)]::vector((uptrT)mp_vector_map_vs,pos,siz,(uptrT)op,arg1,arg2).move_to(code); + return pos; } - static double mp_sup(_cimg_math_parser& mp) { - return (double)(mp.mem[mp.opcode(2)]>mp.mem[mp.opcode(3)]); + + unsigned int vector2_sv(const mp_func op, const unsigned int arg1, const unsigned int arg2) { + const unsigned int + siz = _cimg_mp_vector_size(arg2), + pos = is_tmp_vector(arg2)?arg2:vector(siz); + CImg::vector((uptrT)mp_vector_map_sv,pos,siz,(uptrT)op,arg1,arg2).move_to(code); + return pos; } - static double mp_add(_cimg_math_parser& mp) { - return mp.mem[mp.opcode(2)] + mp.mem[mp.opcode(3)]; + + unsigned int vector3_vss(const mp_func op, const unsigned int arg1, const unsigned int arg2, + const unsigned int arg3) { + const unsigned int + siz = _cimg_mp_vector_size(arg1), + pos = is_tmp_vector(arg1)?arg1:vector(siz); + CImg::vector((uptrT)mp_vector_map_vss,pos,siz,(uptrT)op,arg1,arg2,arg3).move_to(code); + return pos; } - static double mp_sub(_cimg_math_parser& mp) { - return mp.mem[mp.opcode(2)] - mp.mem[mp.opcode(3)]; + + // Check if a memory slot is a positive integer constant scalar value. + void check_constant(const unsigned int arg, const unsigned int n_arg, const char *const s_op, + const bool is_strictly_positive, + const char *const ss, char *const se, const char saved_char) { + _cimg_mp_check_type(arg,n_arg,s_op,1,0); + if (!_cimg_mp_is_constant(arg) || mem[arg]<(is_strictly_positive?1:0) || (double)(int)mem[arg]!=mem[arg]) { + const char *s_arg = !n_arg?"":n_arg==1?"First ":n_arg==2?"Second ":n_arg==3?"Third ":"One "; + *se = saved_char; cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s(): %s: %s%s (of type '%s') is not a %spositive integer constant, " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s_arg,*s_arg?"argument":"Argument",s_type(arg)._data, + is_strictly_positive?"strictly ":"", + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } } - static double mp_mul(_cimg_math_parser& mp) { - const double A = mp.mem[mp.opcode(2)]; - const CImg *const pE = ++mp.p_code + mp.opcode(4); - if (!A) { mp.p_code = pE - 1; return 0; } - const unsigned int mem_B = (unsigned int)mp.opcode(3); - for ( ; mp.p_code &op = *mp.p_code; - mp.opcode._data = op._data; mp.opcode._height = op._height; - const unsigned int target = (unsigned int)mp.opcode[1]; - mp.mem[target] = _cimg_mp_defunc(mp); + + // Check a matrix is square. + void check_matrix_square(const unsigned int arg, const unsigned int n_arg, const char *const s_op, + const char *const ss, char *const se, const char saved_char) { + _cimg_mp_check_type(arg,n_arg,s_op,2,0); + const unsigned int + siz = _cimg_mp_vector_size(arg), + n = (unsigned int)std::sqrt((float)siz); + if (n*n!=siz) { + const char *s_arg; + if (*s_op!='F') s_arg = !n_arg?"":n_arg==1?"Left-hand ":"Right-hand "; + else s_arg = !n_arg?"":n_arg==1?"First ":n_arg==2?"Second ":n_arg==3?"Third ":"One "; + *se = saved_char; cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s(): %s: %s%s (of type '%s') " + "cannot be considered as a square matrix, in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s_arg,*s_op=='F'?(*s_arg?"argument":"Argument"):(*s_arg?"operand":"Operand"), + s_type(arg)._data, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); } - --mp.p_code; - return A*(double)mp.mem[mem_B]; } - static double mp_div(_cimg_math_parser& mp) { - return mp.mem[mp.opcode(2)] / mp.mem[mp.opcode(3)]; + + // Check type compatibility for one argument. + // Bits of 'mode' tells what types are allowed: + // { 1 = scalar | 2 = vectorN }. + // If 'N' is not zero, it also restricts the vectors to be of size N only. + void check_type(const unsigned int arg, const unsigned int n_arg, const char *const s_op, + const unsigned int mode, const unsigned int N, + const char *const ss, char *const se, const char saved_char) { + const bool + is_scalar = _cimg_mp_is_scalar(arg), + is_vector = _cimg_mp_is_vector(arg) && (!N || _cimg_mp_vector_size(arg)==N); + bool cond = false; + if (mode&1) cond|=is_scalar; + if (mode&2) cond|=is_vector; + if (!cond) { + const char *s_arg; + if (*s_op!='F') s_arg = !n_arg?"":n_arg==1?"Left-hand ":"Right-hand "; + else s_arg = !n_arg?"":n_arg==1?"First ":n_arg==2?"Second ":n_arg==3?"Third ":"One "; + CImg sb_type(32); + if (mode==1) cimg_snprintf(sb_type,sb_type._width,"'scalar'"); + else if (mode==2) { + if (N) cimg_snprintf(sb_type,sb_type._width,"'vector%u'",N); + else cimg_snprintf(sb_type,sb_type._width,"'vector'"); + } else { + if (N) cimg_snprintf(sb_type,sb_type._width,"'scalar' or 'vector%u'",N); + else cimg_snprintf(sb_type,sb_type._width,"'scalar' or 'vector'"); + } + *se = saved_char; cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s(): %s: %s%s has invalid type '%s' (should be %s), " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + s_arg,*s_op=='F'?(*s_arg?"argument":"Argument"):(*s_arg?"operand":"Operand"), + s_type(arg)._data,sb_type._data, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } } - static double mp_minus(_cimg_math_parser& mp) { - return -mp.mem[mp.opcode(2)]; + + // Check a vector is not 0-dimensional, or with unknown dimension at compile time. + void check_vector0(const unsigned int dim, const char *const s_op, + const char *const ss, char *const se, const char saved_char) { + if (!dim) { + *se = saved_char; cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s(): %s: Invalid construction of a 0-dimensional vector, " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } else if (dim==~0U) { + *se = saved_char; cimg::strellipsize(expr,64); + throw CImgArgumentException("[_cimg_math_parser] " + "CImg<%s>::%s(): %s: Invalid construction of a vector with dynamic size, " + "in expression '%s%s%s'.", + pixel_type(),_cimg_mp_calling_function,s_op, + (ss - 4)>expr._data?"...":"", + (ss - 4)>expr._data?ss - 4:expr._data, + se<&expr.back()?"...":""); + } } - static double mp_not(_cimg_math_parser& mp) { - return !mp.mem[mp.opcode(2)]; + + // Evaluation functions, known by the parser. + // Defining these functions 'static' ensures that sizeof(mp_func)==sizeof(uptrT), + // so we can store pointers to them directly in the opcode vectors. +#ifdef _mp_arg +#undef _mp_arg +#endif +#define _mp_arg(x) mp.mem[mp.opcode[x]] + + static double mp_abs(_cimg_math_parser& mp) { + return cimg::abs(_mp_arg(2)); } - static double mp_logical_not(_cimg_math_parser& mp) { - return !mp.mem[mp.opcode(2)]; + + static double mp_add(_cimg_math_parser& mp) { + return _mp_arg(2) + _mp_arg(3); } - static double mp_bitwise_not(_cimg_math_parser& mp) { - return ~(unsigned long)mp.mem[mp.opcode(2)]; + + static double mp_acos(_cimg_math_parser& mp) { + return std::acos(_mp_arg(2)); } - static double mp_modulo(_cimg_math_parser& mp) { - return cimg::mod(mp.mem[mp.opcode(2)],mp.mem[mp.opcode(3)]); + + static double mp_arg(_cimg_math_parser& mp) { + const int _ind = (int)_mp_arg(2); + const unsigned int nb_args = mp.opcode._height - 2, ind = _ind<0?_ind + nb_args:(unsigned int)_ind; + if (ind>=nb_args) return 0; + return _mp_arg(ind + 2); + } + + static double mp_argmin(_cimg_math_parser& mp) { + double val = _mp_arg(2); + unsigned int argval = 0; + for (unsigned int i = 3; ival) { val = _val; argval = i - 2; } + } + return (double)argval; + } + + static double mp_asin(_cimg_math_parser& mp) { + return std::asin(_mp_arg(2)); } + + static double mp_atan(_cimg_math_parser& mp) { + return std::atan(_mp_arg(2)); + } + + static double mp_atan2(_cimg_math_parser& mp) { + return std::atan2(_mp_arg(2),_mp_arg(3)); + } + static double mp_bitwise_and(_cimg_math_parser& mp) { - return ((unsigned long)mp.mem[mp.opcode(2)] & (unsigned long)mp.mem[mp.opcode(3)]); + return (double)((unsigned long)_mp_arg(2) & (unsigned long)_mp_arg(3)); } - static double mp_bitwise_or(_cimg_math_parser& mp) { - return ((unsigned long)mp.mem[mp.opcode(2)] | (unsigned long)mp.mem[mp.opcode(3)]); + + static double mp_bitwise_left_shift(_cimg_math_parser& mp) { + return (double)((long)_mp_arg(2)<<(unsigned int)_mp_arg(3)); } - static double mp_pow(_cimg_math_parser& mp) { - const double v = mp.mem[mp.opcode(2)], p = mp.mem[mp.opcode(3)]; - if (p==0) return 1; - if (p==0.5) return std::sqrt(v); - if (p==1) return v; - if (p==2) return v*v; - if (p==3) return v*v*v; - if (p==4) return v*v*v*v; - return std::pow(v,p); + + static double mp_bitwise_not(_cimg_math_parser& mp) { + return (double)~(unsigned long)_mp_arg(2); } - static double mp_sin(_cimg_math_parser& mp) { - return std::sin(mp.mem[mp.opcode(2)]); + + static double mp_bitwise_or(_cimg_math_parser& mp) { + return (double)((unsigned long)_mp_arg(2) | (unsigned long)_mp_arg(3)); } - static double mp_cos(_cimg_math_parser& mp) { - return std::cos(mp.mem[mp.opcode(2)]); + + static double mp_bitwise_right_shift(_cimg_math_parser& mp) { + return (double)((long)_mp_arg(2)>>(unsigned int)_mp_arg(3)); } - static double mp_tan(_cimg_math_parser& mp) { - return std::tan(mp.mem[mp.opcode(2)]); + + static double mp_cbrt(_cimg_math_parser& mp) { + return std::pow(_mp_arg(2),1.0/3); } - static double mp_asin(_cimg_math_parser& mp) { - return std::asin(mp.mem[mp.opcode(2)]); + + static double mp_complex_conj(_cimg_math_parser& mp) { + const double *ptrs = &_mp_arg(2) + 1; + double *ptrd = &_mp_arg(1) + 1; + *(ptrd++) = *(ptrs++); + *ptrd = -*(ptrs); + return cimg::type::nan(); } - static double mp_acos(_cimg_math_parser& mp) { - return std::acos(mp.mem[mp.opcode(2)]); + + static double mp_complex_div_sv(_cimg_math_parser& mp) { + const double + *ptr2 = &_mp_arg(3) + 1, + r1 = _mp_arg(2), + r2 = *(ptr2++), i2 = *ptr2; + double *ptrd = &_mp_arg(1) + 1; + const double denom = r2*r2 + i2*i2; + *(ptrd++) = r1*r2/denom; + *ptrd = -r1*i2/denom; + return cimg::type::nan(); } - static double mp_atan(_cimg_math_parser& mp) { - return std::atan(mp.mem[mp.opcode(2)]); + + static double mp_complex_div_vv(_cimg_math_parser& mp) { + const double + *ptr1 = &_mp_arg(2) + 1, *ptr2 = &_mp_arg(3) + 1, + r1 = *(ptr1++), i1 = *ptr1, + r2 = *(ptr2++), i2 = *ptr2; + double *ptrd = &_mp_arg(1) + 1; + const double denom = r2*r2 + i2*i2; + *(ptrd++) = (r1*r2 + i1*i2)/denom; + *ptrd = (r2*i1 - r1*i2)/denom; + return cimg::type::nan(); + } + + static double mp_complex_exp(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double *ptrs = &_mp_arg(2) + 1, r = *(ptrs++), i = *(ptrs), er = std::exp(r); + *(ptrd++) = er*std::cos(i); + *(ptrd++) = er*std::sin(i); + return cimg::type::nan(); + } + + static double mp_complex_log(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double *ptrs = &_mp_arg(2) + 1, r = *(ptrs++), i = *(ptrs); + *(ptrd++) = std::log(std::sqrt(r*r + i*i)); + *(ptrd++) = std::atan2(i,r); + return cimg::type::nan(); } - static double mp_sinh(_cimg_math_parser& mp) { - return std::sinh(mp.mem[mp.opcode(2)]); + + static double mp_complex_mul(_cimg_math_parser& mp) { + const double + *ptr1 = &_mp_arg(2) + 1, *ptr2 = &_mp_arg(3) + 1, + r1 = *(ptr1++), i1 = *ptr1, + r2 = *(ptr2++), i2 = *ptr2; + double *ptrd = &_mp_arg(1) + 1; + *(ptrd++) = r1*r2 - i1*i2; + *(ptrd++) = r1*i2 + r2*i1; + return cimg::type::nan(); + } + + static void _mp_complex_pow(const double r1, const double i1, + const double r2, const double i2, + double *ptrd) { + double ro, io; + if (cimg::abs(i2)<1e-15) { // Exponent is real + if (cimg::abs(r1)<1e-15 && cimg::abs(i1)<1e-15) { + if (cimg::abs(r2)<1e-15) { ro = 1; io = 0; } + else ro = io = 0; + } else { + const double + mod1_2 = r1*r1 + i1*i1, + phi1 = std::atan2(i1,r1), + modo = std::pow(mod1_2,0.5*r2), + phio = r2*phi1; + ro = modo*std::cos(phio); + io = modo*std::sin(phio); + } + } else { // Exponent is complex + if (cimg::abs(r1)<1e-15 && cimg::abs(i1)<1e-15) ro = io = 0; + const double + mod1_2 = r1*r1 + i1*i1, + phi1 = std::atan2(i1,r1), + modo = std::pow(mod1_2,0.5*r2)*std::exp(-i2*phi1), + phio = r2*phi1 + 0.5*i2*std::log(mod1_2); + ro = modo*std::cos(phio); + io = modo*std::sin(phio); + } + *(ptrd++) = ro; + *ptrd = io; + } + + static double mp_complex_pow_sv(_cimg_math_parser& mp) { + const double val1 = _mp_arg(2), *ptr2 = &_mp_arg(3) + 1; + double *ptrd = &_mp_arg(1) + 1; + _mp_complex_pow(val1,0,ptr2[0],ptr2[1],ptrd); + return cimg::type::nan(); + } + + static double mp_complex_pow_vs(_cimg_math_parser& mp) { + const double *ptr1 = &_mp_arg(2) + 1, val2 = _mp_arg(3); + double *ptrd = &_mp_arg(1) + 1; + _mp_complex_pow(ptr1[0],ptr1[1],val2,0,ptrd); + return cimg::type::nan(); + } + + static double mp_complex_pow_vv(_cimg_math_parser& mp) { + const double *ptr1 = &_mp_arg(2) + 1, *ptr2 = &_mp_arg(3) + 1; + double *ptrd = &_mp_arg(1) + 1; + _mp_complex_pow(ptr1[0],ptr1[1],ptr2[0],ptr2[1],ptrd); + return cimg::type::nan(); + } + + static double mp_cos(_cimg_math_parser& mp) { + return std::cos(_mp_arg(2)); } + static double mp_cosh(_cimg_math_parser& mp) { - return std::cosh(mp.mem[mp.opcode(2)]); + return std::cosh(_mp_arg(2)); } - static double mp_tanh(_cimg_math_parser& mp) { - return std::tanh(mp.mem[mp.opcode(2)]); + + static double mp_cross(_cimg_math_parser& mp) { + CImg + vout(&_mp_arg(1) + 1,1,3,1,1,true), + v1(&_mp_arg(2) + 1,1,3,1,1,true), + v2(&_mp_arg(3) + 1,1,3,1,1,true); + (vout = v1).cross(v2); + return cimg::type::nan(); + } + + static double mp_cut(_cimg_math_parser& mp) { + double val = _mp_arg(2), cmin = _mp_arg(3), cmax = _mp_arg(4); + return valcmax?cmax:val; + } + + static double mp_debug(_cimg_math_parser& mp) { +#ifdef cimg_use_openmp + const unsigned int n_thread = omp_get_thread_num(); +#else + const unsigned int n_thread = 0; +#endif + CImg expr(mp.opcode._height - 3); + const uptrT *ptrs = mp.opcode._data + 3; + cimg_for(expr,ptrd,char) *ptrd = (char)*(ptrs++); + cimg::strellipsize(expr); + const uptrT g_target = mp.opcode[1]; + std::fprintf(cimg::output(), + "\n[_cimg_math_parser] %p[thread #%u]:%*c" + "Start debugging expression '%s', code length %u -> mem[%u] (memsize: %u)", + (void*)&mp,n_thread,mp.debug_indent,' ', + expr._data,(unsigned int)mp.opcode[2],(unsigned int)g_target,mp.mem._width); + std::fflush(cimg::output()); + const CImg *const p_end = (++mp.p_code) + mp.opcode[2]; + CImg _op; + mp.debug_indent+=3; + for ( ; mp.p_code &op = *mp.p_code; + mp.opcode._data = op._data; mp.opcode._height = op._height; + + _op.assign(1,op._height - 1); + const uptrT *ptrs = op._data + 1; + for (uptrT *ptrd = _op._data, *const ptrde = _op._data + _op._height; ptrd mem[%u] = %g", + (void*)&mp,n_thread,mp.debug_indent,' ', + (void*)mp.opcode._data,(void*)*mp.opcode,_op.value_string().data(), + (unsigned int)target,mp.mem[target]); + std::fflush(cimg::output()); + } + mp.debug_indent-=3; + std::fprintf(cimg::output(), + "\n[_cimg_math_parser] %p[thread #%u]:%*c" + "End debugging expression '%s' -> mem[%u] = %g (memsize: %u)", + (void*)&mp,n_thread,mp.debug_indent,' ', + expr._data,(unsigned int)g_target,mp.mem[g_target],mp.mem._width); + std::fflush(cimg::output()); + --mp.p_code; + return mp.mem[g_target]; } - static double mp_log10(_cimg_math_parser& mp) { - return std::log10(mp.mem[mp.opcode(2)]); + + static double mp_decrement(_cimg_math_parser& mp) { + return _mp_arg(2) - 1; } - static double mp_log2(_cimg_math_parser& mp) { - return cimg::log2(mp.mem[mp.opcode(2)]); + + static double mp_dot(_cimg_math_parser& mp) { + const unsigned int siz = (unsigned int)mp.opcode[4]; + return CImg(&_mp_arg(2) + 1,1,siz,1,1,true). + dot(CImg(&_mp_arg(3) + 1,1,siz,1,1,true)); } - static double mp_log(_cimg_math_parser& mp) { - return std::log(mp.mem[mp.opcode(2)]); + + static double mp_dowhile(_cimg_math_parser& mp) { + const uptrT + mem_proc = mp.opcode[1], + mem_cond = mp.opcode[2]; + const CImg + *const p_proc = ++mp.p_code, + *const p_end = p_proc + mp.opcode[3]; + do { + for (mp.p_code = p_proc; mp.p_code &op = *mp.p_code; + mp.opcode._data = op._data; mp.opcode._height = op._height; + const uptrT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + } while (mp.mem[mem_cond]); + --mp.p_code; + return mp.mem[mem_proc]; } + + static double mp_div(_cimg_math_parser& mp) { + return _mp_arg(2)/_mp_arg(3); + } + + static double mp_eq(_cimg_math_parser& mp) { + return (double)(_mp_arg(2)==_mp_arg(3)); + } + static double mp_exp(_cimg_math_parser& mp) { - return std::exp(mp.mem[mp.opcode(2)]); + return std::exp(_mp_arg(2)); } - static double mp_sqrt(_cimg_math_parser& mp) { - return std::sqrt(mp.mem[mp.opcode(2)]); + + static double mp_g(_cimg_math_parser& mp) { + cimg::unused(mp); + return cimg::grand(); } - static double mp_sign(_cimg_math_parser& mp) { - return cimg::sign(mp.mem[mp.opcode(2)]); + + static double mp_gauss(_cimg_math_parser& mp) { + const double x = _mp_arg(2), s = _mp_arg(3); + return std::exp(-x*x/(2*s*s))/std::sqrt(2*s*s*cimg::PI); } - static double mp_abs(_cimg_math_parser& mp) { - return cimg::abs(mp.mem[mp.opcode(2)]); + + static double mp_gt(_cimg_math_parser& mp) { + return (double)(_mp_arg(2)>_mp_arg(3)); } - static double mp_atan2(_cimg_math_parser& mp) { - return std::atan2(mp.mem[mp.opcode(2)],mp.mem[mp.opcode(3)]); + + static double mp_gte(_cimg_math_parser& mp) { + return (double)(_mp_arg(2)>=_mp_arg(3)); + } + + static double mp_hypot(_cimg_math_parser& mp) { + return cimg::hypot(_mp_arg(2),_mp_arg(3)); + } + + static double mp_i(_cimg_math_parser& mp) { + return (double)mp.imgin.atXYZC((int)mp.mem[_cimg_mp_x],(int)mp.mem[_cimg_mp_y], + (int)mp.mem[_cimg_mp_z],(int)mp.mem[_cimg_mp_c],0); } + static double mp_if(_cimg_math_parser& mp) { - const bool is_cond = (bool)mp.mem[mp.opcode(2)]; - const unsigned int mem_A = (unsigned int)mp.opcode(3), mem_B = (unsigned int)mp.opcode(4); - const CImg - *const pB = ++mp.p_code + mp.opcode(5), - *const pE = pB + mp.opcode(6); - if (is_cond) { // Evaluate on-the-fly only the correct argument. - for ( ; mp.p_code &op = *mp.p_code; + const bool is_cond = (bool)_mp_arg(2); + const uptrT + mem_left = mp.opcode[3], + mem_right = mp.opcode[4]; + const CImg + *const p_right = ++mp.p_code + mp.opcode[5], + *const p_end = p_right + mp.opcode[6]; + const unsigned int vtarget = mp.opcode[1], vsiz = mp.opcode[7]; + if (is_cond) { + for ( ; mp.p_code &op = *mp.p_code; mp.opcode._data = op._data; mp.opcode._height = op._height; - const unsigned int target = (unsigned int)mp.opcode[1]; + const uptrT target = mp.opcode[1]; mp.mem[target] = _cimg_mp_defunc(mp); } - mp.p_code = pE - 1; - return mp.mem[mem_A]; + mp.p_code = p_end - 1; + if (vsiz) std::memcpy(&mp.mem[vtarget] + 1,&mp.mem[mem_left] + 1,sizeof(double)*vsiz); + return mp.mem[mem_left]; } - for (mp.p_code = pB; mp.p_code &op = *mp.p_code; + for (mp.p_code = p_right; mp.p_code &op = *mp.p_code; mp.opcode._data = op._data; mp.opcode._height = op._height; - const unsigned int target = (unsigned int)mp.opcode[1]; + const uptrT target = mp.opcode[1]; mp.mem[target] = _cimg_mp_defunc(mp); } --mp.p_code; - return mp.mem[mem_B]; + if (vsiz) std::memcpy(&mp.mem[vtarget] + 1,&mp.mem[mem_right] + 1,sizeof(double)*vsiz); + return mp.mem[mem_right]; } - static double mp_round(_cimg_math_parser& mp) { - return cimg::round(mp.mem[mp.opcode(2)],mp.mem[mp.opcode(3)],(int)mp.mem[mp.opcode(4)]); + + static double mp_increment(_cimg_math_parser& mp) { + return _mp_arg(2) + 1; + } + + static double mp_int(_cimg_math_parser& mp) { + return (double)(long)_mp_arg(2); } + + static double mp_ioff(_cimg_math_parser& mp) { + const unsigned int + boundary_conditions = (unsigned int)_mp_arg(3); + const CImg &img = mp.imgin; + const long + off = (long)_mp_arg(2), + whds = (long)img.size(); + if (off<0 || off>=whds) + switch (boundary_conditions) { + case 2 : // Periodic boundary + if (img) return (double)img[cimg::mod(off,whds)]; + return 0; + case 1 : // Neumann boundary + if (img) return (double)(off<0?*img:img.back()); + return 0; + default : // Dirichet boundary + return 0; + } + return (double)img[off]; + } + + static double mp_isbool(_cimg_math_parser& mp) { + const double val = _mp_arg(2); + return (double)(val==0.0 || val==1.0); + } + + static double mp_isin(_cimg_math_parser& mp) { + const double val = _mp_arg(2); + for (unsigned int i = 3; i::is_inf(_mp_arg(2)); + } + + static double mp_isint(_cimg_math_parser& mp) { + return (double)(cimg::mod(_mp_arg(2),1.0)==0); + } + + static double mp_isnan(_cimg_math_parser& mp) { + return (double)cimg::type::is_nan(_mp_arg(2)); + } + static double mp_ixyzc(_cimg_math_parser& mp) { - const int i = (int)mp.mem[mp.opcode(6)], b = (int)mp.mem[mp.opcode(7)]; - if (i==0) { // Nearest neighbor interpolation. - if (b==2) return (double)mp.reference.atXYZC(cimg::mod((int)mp.mem[mp.opcode(2)],mp.reference.width()), - cimg::mod((int)mp.mem[mp.opcode(3)],mp.reference.height()), - cimg::mod((int)mp.mem[mp.opcode(4)],mp.reference.depth()), - cimg::mod((int)mp.mem[mp.opcode(5)],mp.reference.spectrum())); - if (b==1) return (double)mp.reference.atXYZC((int)mp.mem[mp.opcode(2)], - (int)mp.mem[mp.opcode(3)], - (int)mp.mem[mp.opcode(4)], - (int)mp.mem[mp.opcode(5)]); - return (double)mp.reference.atXYZC((int)mp.mem[mp.opcode(2)], - (int)mp.mem[mp.opcode(3)], - (int)mp.mem[mp.opcode(4)], - (int)mp.mem[mp.opcode(5)],0); - } else { // Linear interpolation. - if (b==2) return (double)mp.reference.linear_atXYZC(cimg::mod((float)mp.mem[mp.opcode(2)], - (float)mp.reference.width()), - cimg::mod((float)mp.mem[mp.opcode(3)], - (float)mp.reference.height()), - cimg::mod((float)mp.mem[mp.opcode(4)], - (float)mp.reference.depth()), - cimg::mod((float)mp.mem[mp.opcode(5)], - (float)mp.reference.spectrum())); - if (b==1) return (double)mp.reference.linear_atXYZC((float)mp.mem[mp.opcode(2)], - (float)mp.mem[mp.opcode(3)], - (float)mp.mem[mp.opcode(4)], - (float)mp.mem[mp.opcode(5)]); - return (double)mp.reference.linear_atXYZC((float)mp.mem[mp.opcode(2)], - (float)mp.mem[mp.opcode(3)], - (float)mp.mem[mp.opcode(4)], - (float)mp.mem[mp.opcode(5)],0); + const unsigned int + interpolation = (unsigned int)_mp_arg(6), + boundary_conditions = (unsigned int)_mp_arg(7); + const CImg &img = mp.imgin; + const double + x = _mp_arg(2), y = _mp_arg(3), + z = _mp_arg(4), c = _mp_arg(5); + if (interpolation==0) { // Nearest neighbor interpolation + if (boundary_conditions==2) + return (double)img.atXYZC(cimg::mod((int)x,img.width()), + cimg::mod((int)y,img.height()), + cimg::mod((int)z,img.depth()), + cimg::mod((int)c,img.spectrum())); + if (boundary_conditions==1) + return (double)img.atXYZC((int)x,(int)y,(int)z,(int)c); + return (double)img.atXYZC((int)x,(int)y,(int)z,(int)c,0); + } else { // Linear interpolation + if (boundary_conditions==2) + return (double)img.linear_atXYZC(cimg::mod((float)x,(float)img.width()), + cimg::mod((float)y,(float)img.height()), + cimg::mod((float)z,(float)img.depth()), + cimg::mod((float)c,(float)img.spectrum())); + if (boundary_conditions==1) + return (double)img.linear_atXYZC((float)x,(float)y,(float)z,(float)c); + return (double)img.linear_atXYZC((float)x,(float)y,(float)z,(float)c,0); } } + + static double mp_joff(_cimg_math_parser& mp) { + const unsigned int + boundary_conditions = (unsigned int)_mp_arg(3); + const int + ox = (int)mp.mem[_cimg_mp_x], oy = (int)mp.mem[_cimg_mp_y], + oz = (int)mp.mem[_cimg_mp_z], oc = (int)mp.mem[_cimg_mp_c]; + const CImg &img = mp.imgin; + const long + off = img.offset(ox,oy,oz,oc) + (long)_mp_arg(2), + whds = (long)img.size(); + if (off<0 || off>=whds) + switch (boundary_conditions) { + case 2 : // Periodic boundary + if (img) return (double)img[cimg::mod(off,whds)]; + return 0; + case 1 : // Neumann boundary + if (img) return (double)(off<0?*img:img.back()); + return 0; + default : // Dirichet boundary + return 0; + } + return (double)img[off]; + } + static double mp_jxyzc(_cimg_math_parser& mp) { - const double x = mp.mem[9], y = mp.mem[10], z = mp.mem[11], c = mp.mem[12]; - const int i = (int)mp.mem[mp.opcode(6)], b = (int)mp.mem[mp.opcode(7)]; - if (i==0) { // Nearest neighbor interpolation. - if (b==2) return (double)mp.reference.atXYZC(cimg::mod((int)(x+mp.mem[mp.opcode(2)]), - mp.reference.width()), - cimg::mod((int)(y+mp.mem[mp.opcode(3)]), - mp.reference.height()), - cimg::mod((int)(z+mp.mem[mp.opcode(4)]), - mp.reference.depth()), - cimg::mod((int)(c+mp.mem[mp.opcode(5)]), - mp.reference.spectrum())); - if (b==1) return (double)mp.reference.atXYZC((int)(x+mp.mem[mp.opcode(2)]), - (int)(y+mp.mem[mp.opcode(3)]), - (int)(z+mp.mem[mp.opcode(4)]), - (int)(c+mp.mem[mp.opcode(5)])); - return (double)mp.reference.atXYZC((int)(x+mp.mem[mp.opcode(2)]), - (int)(y+mp.mem[mp.opcode(3)]), - (int)(z+mp.mem[mp.opcode(4)]), - (int)(c+mp.mem[mp.opcode(5)]),0); - } else { // Linear interpolation. - if (b==2) return (double)mp.reference.linear_atXYZC(cimg::mod((float)(x+mp.mem[mp.opcode(2)]), - (float)mp.reference.width()), - cimg::mod((float)(y+mp.mem[mp.opcode(3)]), - (float)mp.reference.height()), - cimg::mod((float)(z+mp.mem[mp.opcode(4)]), - (float)mp.reference.depth()), - cimg::mod((float)(c+mp.mem[mp.opcode(5)]), - (float)mp.reference.spectrum())); - if (b==1) return (double)mp.reference.linear_atXYZC((float)(x+mp.mem[mp.opcode(2)]), - (float)(y+mp.mem[mp.opcode(3)]), - (float)(z+mp.mem[mp.opcode(4)]), - (float)(c+mp.mem[mp.opcode(5)])); - return (double)mp.reference.linear_atXYZC((float)(x+mp.mem[mp.opcode(2)]), - (float)(y+mp.mem[mp.opcode(3)]), - (float)(z+mp.mem[mp.opcode(4)]), - (float)(c+mp.mem[mp.opcode(5)]),0); + const unsigned int + interpolation = (unsigned int)_mp_arg(6), + boundary_conditions = (unsigned int)_mp_arg(7); + const CImg &img = mp.imgin; + const double + ox = mp.mem[_cimg_mp_x], oy = mp.mem[_cimg_mp_y], + oz = mp.mem[_cimg_mp_z], oc = mp.mem[_cimg_mp_c], + x = ox + _mp_arg(2), y = oy + _mp_arg(3), + z = oz + _mp_arg(4), c = oc + _mp_arg(5); + if (interpolation==0) { // Nearest neighbor interpolation + if (boundary_conditions==2) + return (double)img.atXYZC(cimg::mod((int)x,img.width()), + cimg::mod((int)y,img.height()), + cimg::mod((int)z,img.depth()), + cimg::mod((int)c,img.spectrum())); + if (boundary_conditions==1) + return (double)img.atXYZC((int)x,(int)y,(int)z,(int)c); + return (double)img.atXYZC((int)x,(int)y,(int)z,(int)c,0); + } else { // Linear interpolation + if (boundary_conditions==2) + return (double)img.linear_atXYZC(cimg::mod((float)x,(float)img.width()), + cimg::mod((float)y,(float)img.height()), + cimg::mod((float)z,(float)img.depth()), + cimg::mod((float)c,(float)img.spectrum())); + if (boundary_conditions==1) + return (double)img.linear_atXYZC((float)x,(float)y,(float)z,(float)c); + return (double)img.linear_atXYZC((float)x,(float)y,(float)z,(float)c,0); } } - static double mp_min(_cimg_math_parser& mp) { - double val = mp.mem[mp.opcode(2)]; - for (unsigned int i = 3; i vals(mp.opcode._height - 3); + double *p = vals.data(); + for (unsigned int i = 3; i &img = mp.listin[ind]; + const long + off = (long)_mp_arg(3), + whds = (long)img.size(); + if (off<0 || off>=whds) + switch (boundary_conditions) { + case 2 : // Periodic boundary + if (img) return (double)img[cimg::mod(off,whds)]; + return 0; + case 1 : // Neumann boundary + if (img) return (double)(off<0?*img:img.back()); + return 0; + default : // Dirichet boundary + return 0; + } + return (double)img[off]; + } + + static double mp_list_is_shared(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + return (double)mp.listin[ind]._is_shared; + } + + static double mp_list_ixyzc(_cimg_math_parser& mp) { + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()), + interpolation = (unsigned int)_mp_arg(7), + boundary_conditions = (unsigned int)_mp_arg(8); + const CImg &img = mp.listin[ind]; + const double + x = _mp_arg(3), y = _mp_arg(4), + z = _mp_arg(5), c = _mp_arg(6); + if (interpolation==0) { // Nearest neighbor interpolation + if (boundary_conditions==2) + return (double)img.atXYZC(cimg::mod((int)x,img.width()), + cimg::mod((int)y,img.height()), + cimg::mod((int)z,img.depth()), + cimg::mod((int)c,img.spectrum())); + if (boundary_conditions==1) + return (double)img.atXYZC((int)x,(int)y,(int)z,(int)c); + return (double)img.atXYZC((int)x,(int)y,(int)z,(int)c,0); + } else { // Linear interpolation + if (boundary_conditions==2) + return (double)img.linear_atXYZC(cimg::mod((float)x,(float)img.width()), + cimg::mod((float)y,(float)img.height()), + cimg::mod((float)z,(float)img.depth()), + cimg::mod((float)c,(float)img.spectrum())); + if (boundary_conditions==1) + return (double)img.linear_atXYZC((float)x,(float)y,(float)z,(float)c); + return (double)img.linear_atXYZC((float)x,(float)y,(float)z,(float)c,0); + } + } + + static double mp_list_joff(_cimg_math_parser& mp) { + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()), + boundary_conditions = (unsigned int)_mp_arg(4); + const int + ox = (int)mp.mem[_cimg_mp_x], oy = (int)mp.mem[_cimg_mp_y], + oz = (int)mp.mem[_cimg_mp_z], oc = (int)mp.mem[_cimg_mp_c]; + const CImg &img = mp.listin[ind]; + const long + off = img.offset(ox,oy,oz,oc) + (long)_mp_arg(3), + whds = (long)img.size(); + if (off<0 || off>=whds) + switch (boundary_conditions) { + case 2 : // Periodic boundary + if (img) return (double)img(ind,cimg::mod(off,whds)); + return 0; + case 1 : // Neumann boundary + if (img) return (double)(off<0?*img:img.back()); + return 0; + default : // Dirichet boundary + return 0; + } + return (double)img[off]; + } + + static double mp_list_jxyzc(_cimg_math_parser& mp) { + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()), + interpolation = (unsigned int)_mp_arg(7), + boundary_conditions = (unsigned int)_mp_arg(8); + const CImg &img = mp.listin[ind]; + const double + ox = mp.mem[_cimg_mp_x], oy = mp.mem[_cimg_mp_y], + oz = mp.mem[_cimg_mp_z], oc = mp.mem[_cimg_mp_c], + x = ox + _mp_arg(3), y = oy + _mp_arg(4), + z = oz + _mp_arg(5), c = oc + _mp_arg(6); + if (interpolation==0) { // Nearest neighbor interpolation + if (boundary_conditions==2) + return (double)img.atXYZC(cimg::mod((int)x,img.width()), + cimg::mod((int)y,img.height()), + cimg::mod((int)z,img.depth()), + cimg::mod((int)c,img.spectrum())); + if (boundary_conditions==1) + return (double)img.atXYZC((int)x,(int)y,(int)z,(int)c); + return (double)img.atXYZC((int)x,(int)y,(int)z,(int)c,0); + } else { // Linear interpolation + if (boundary_conditions==2) + return (double)img.linear_atXYZC(cimg::mod((float)x,(float)img.width()), + cimg::mod((float)y,(float)img.height()), + cimg::mod((float)z,(float)img.depth()), + cimg::mod((float)c,(float)img.spectrum())); + if (boundary_conditions==1) + return (double)img.linear_atXYZC((float)x,(float)y,(float)z,(float)c); + return (double)img.linear_atXYZC((float)x,(float)y,(float)z,(float)c,0); + } + } + + static double mp_list_median(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + if (!mp.list_median) mp.list_median.assign(mp.listin._width); + if (!mp.list_median[ind]) CImg::vector(mp.listin[ind].median()).move_to(mp.list_median[ind]); + return *mp.list_median[ind]; + } + + static double mp_list_set_ioff(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + CImg &img = mp.listout[ind]; + const long + off = (long)_mp_arg(3), + whds = (long)img.size(); + const double val = _mp_arg(1); + if (off>=0 && off &img = mp.listout[ind]; + const int + x = (int)_mp_arg(3), y = (int)_mp_arg(4), + z = (int)_mp_arg(5), c = (int)_mp_arg(6); + const double val = _mp_arg(1); + if (x>=0 && x=0 && y=0 && z=0 && c &img = mp.listout[ind]; + const int + ox = (int)mp.mem[_cimg_mp_x], oy = (int)mp.mem[_cimg_mp_y], + oz = (int)mp.mem[_cimg_mp_z], oc = (int)mp.mem[_cimg_mp_c]; + const long + off = img.offset(ox,oy,oz,oc) + (long)_mp_arg(3), + whds = (long)img.size(); + const double val = _mp_arg(1); + if (off>=0 && off &img = mp.listout[ind]; + const double + ox = mp.mem[_cimg_mp_x], oy = mp.mem[_cimg_mp_y], + oz = mp.mem[_cimg_mp_z], oc = mp.mem[_cimg_mp_c]; + const int + x = (int)(ox + _mp_arg(3)), y = (int)(oy + _mp_arg(4)), + z = (int)(oz + _mp_arg(5)), c = (int)(oc + _mp_arg(6)); + const double val = _mp_arg(1); + if (x>=0 && x=0 && y=0 && z=0 && c &img = mp.listout[ind]; + const long + off = (long)_mp_arg(3), + whd = img.width()*img.height()*img.depth(); + const T val = (T)_mp_arg(1); + if (off>=0 && off &img = mp.listout[ind]; + const long + off = (long)_mp_arg(3), + whd = img.width()*img.height()*img.depth(); + const double *ptrs = &_mp_arg(1) + 1; + if (off>=0 && off::nan(); + } + + static double mp_list_set_Ixyz_s(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + CImg &img = mp.listout[ind]; + const int x = (int)_mp_arg(3), y = (int)_mp_arg(4), z = (int)_mp_arg(5); + const T val = (T)_mp_arg(1); + if (x>=0 && x=0 && y=0 && z &img = mp.listout[ind]; + const int x = (int)_mp_arg(3), y = (int)_mp_arg(4), z = (int)_mp_arg(5); + const double *ptrs = &_mp_arg(1) + 1; + if (x>=0 && x=0 && y=0 && z::nan(); + } + + static double mp_list_set_Joff_s(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + CImg &img = mp.listout[ind]; + const int + ox = (int)mp.mem[_cimg_mp_x], oy = (int)mp.mem[_cimg_mp_y], + oz = (int)mp.mem[_cimg_mp_z], oc = (int)mp.mem[_cimg_mp_c]; + const long + off = img.offset(ox,oy,oz,oc) + (long)_mp_arg(3), + whd = img.width()*img.height()*img.depth(); + const T val = (T)_mp_arg(1); + if (off>=0 && off &img = mp.listout[ind]; + const int + ox = (int)mp.mem[_cimg_mp_x], oy = (int)mp.mem[_cimg_mp_y], + oz = (int)mp.mem[_cimg_mp_z], oc = (int)mp.mem[_cimg_mp_c]; + const long + off = img.offset(ox,oy,oz,oc) + (long)_mp_arg(3), + whd = img.width()*img.height()*img.depth(); + const double *ptrs = &_mp_arg(1) + 1; + if (off>=0 && off::nan(); + } + + static double mp_list_set_Jxyz_s(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + CImg &img = mp.listout[ind]; + const double ox = mp.mem[_cimg_mp_x], oy = mp.mem[_cimg_mp_y], oz = mp.mem[_cimg_mp_z]; + const int x = (int)(ox + _mp_arg(3)), y = (int)(oy + _mp_arg(4)), z = (int)(oz + _mp_arg(5)); + const T val = (T)_mp_arg(1); + if (x>=0 && x=0 && y=0 && z &img = mp.listout[ind]; + const double ox = mp.mem[_cimg_mp_x], oy = mp.mem[_cimg_mp_y], oz = mp.mem[_cimg_mp_z]; + const int x = (int)(ox + _mp_arg(3)), y = (int)(oy + _mp_arg(4)), z = (int)(oz + _mp_arg(5)); + const double *ptrs = &_mp_arg(1) + 1; + if (x>=0 && x=0 && y=0 && z::nan(); + } + + static double mp_list_spectrum(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + return (double)mp.listin[ind]._spectrum; + } + + static double mp_list_stats(_cimg_math_parser& mp) { + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()), + k = (unsigned int)_mp_arg(3); + if (!mp.list_stats) mp.list_stats.assign(mp.listin._width); + if (!mp.list_stats[ind]) mp.list_stats[ind].assign(1,14,1,1,0).fill(mp.listin[ind].get_stats(),false); + return mp.list_stats(ind,k); + } + + static double mp_list_wh(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + return (double)mp.listin[ind]._width*mp.listin[ind]._height; + } + + static double mp_list_whd(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + return (double)mp.listin[ind]._width*mp.listin[ind]._height*mp.listin[ind]._depth; + } + + static double mp_list_whds(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + return (double)mp.listin[ind]._width*mp.listin[ind]._height*mp.listin[ind]._depth*mp.listin[ind]._spectrum; + } + + static double mp_list_width(_cimg_math_parser& mp) { + const unsigned int ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()); + return (double)mp.listin[ind]._width; + } + + static double mp_list_Ioff(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()), + boundary_conditions = (unsigned int)_mp_arg(4); + const CImg &img = mp.listin[ind]; + const long + off = (long)_mp_arg(3), + whd = img.width()*img.height()*img.depth(); + const T *ptrs; + if (off<0 || off>=whd) + switch (boundary_conditions) { + case 2 : // Periodic boundary + if (!img) { + ptrs = &img[cimg::mod(off,whd)]; + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + case 1 : // Neumann boundary + if (img) { + ptrs = off<0?img._data:&img.back(); + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + default : // Dirichet boundary + std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + } + ptrs = &img[off]; + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return cimg::type::nan(); + } + + static double mp_list_Ixyz(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()), + interpolation = (unsigned int)_mp_arg(6), + boundary_conditions = (unsigned int)_mp_arg(7); + const CImg &img = mp.listin[ind]; + const double x = _mp_arg(3), y = _mp_arg(4), z = _mp_arg(5); + if (interpolation==0) { // Nearest neighbor interpolation + if (boundary_conditions==2) + cimg_forC(img,c) + *(ptrd++) = (double)img.atXYZ(cimg::mod((int)x,img.width()), + cimg::mod((int)y,img.height()), + cimg::mod((int)z,img.depth()), + c); + else if (boundary_conditions==1) + cimg_forC(img,c) + *(ptrd++) = (double)img.atXYZ((int)x,(int)y,(int)z,c); + else + cimg_forC(img,c) + *(ptrd++) = (double)img.atXYZ((int)x,(int)y,(int)z,c,0); + } else { // Linear interpolation + if (boundary_conditions==2) + cimg_forC(img,c) + *(ptrd++) = (double)img.linear_atXYZ(cimg::mod((float)x,(float)img.width()), + cimg::mod((float)y,(float)img.height()), + cimg::mod((float)z,(float)img.depth()),c); + else if (boundary_conditions==1) + cimg_forC(img,c) + *(ptrd++) = (double)img.linear_atXYZ((float)x,(float)y,(float)z,c); + else + cimg_forC(img,c) + *(ptrd++) = (double)img.linear_atXYZ((float)x,(float)y,(float)z,c,0); + } + return cimg::type::nan(); + } + + static double mp_list_Joff(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()), + boundary_conditions = (unsigned int)_mp_arg(4); + const int + ox = (int)mp.mem[_cimg_mp_x], oy = (int)mp.mem[_cimg_mp_y], oz = (int)mp.mem[_cimg_mp_z]; + const CImg &img = mp.listin[ind]; + const long + off = img.offset(ox,oy,oz) + (long)_mp_arg(3), + whd = img.width()*img.height()*img.depth(); + const T *ptrs; + if (off<0 || off>=whd) + switch (boundary_conditions) { + case 2 : // Periodic boundary + if (!img) { + ptrs = &img[cimg::mod(off,whd)]; + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + case 1 : // Neumann boundary + if (img) { + ptrs = off<0?img._data:&img.back(); + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + default : // Dirichet boundary + std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + } + ptrs = &img[off]; + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return cimg::type::nan(); + } + + static double mp_list_Jxyz(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + ind = (unsigned int)cimg::mod((int)_mp_arg(2),mp.listin.width()), + interpolation = (unsigned int)_mp_arg(6), + boundary_conditions = (unsigned int)_mp_arg(7); + const CImg &img = mp.listin[ind]; + const double + ox = mp.mem[_cimg_mp_x], oy = mp.mem[_cimg_mp_y], oz = mp.mem[_cimg_mp_z], + x = ox + _mp_arg(3), y = oy + _mp_arg(4), z = oz + _mp_arg(5); + if (interpolation==0) { // Nearest neighbor interpolation + if (boundary_conditions==2) + cimg_forC(img,c) + *(ptrd++) = (double)img.atXYZ(cimg::mod((int)x,img.width()), + cimg::mod((int)y,img.height()), + cimg::mod((int)z,img.depth()), + c); + else if (boundary_conditions==1) + cimg_forC(img,c) + *(ptrd++) = (double)img.atXYZ((int)x,(int)y,(int)z,c); + else + cimg_forC(img,c) + *(ptrd++) = (double)img.atXYZ((int)x,(int)y,(int)z,c,0); + } else { // Linear interpolation + if (boundary_conditions==2) + cimg_forC(img,c) + *(ptrd++) = (double)img.linear_atXYZ(cimg::mod((float)x,(float)img.width()), + cimg::mod((float)y,(float)img.height()), + cimg::mod((float)z,(float)img.depth()),c); + else if (boundary_conditions==1) + cimg_forC(img,c) + *(ptrd++) = (double)img.linear_atXYZ((float)x,(float)y,(float)z,c); + else + cimg_forC(img,c) + *(ptrd++) = (double)img.linear_atXYZ((float)x,(float)y,(float)z,c,0); + } + return cimg::type::nan(); + } + + static double mp_log(_cimg_math_parser& mp) { + return std::log(_mp_arg(2)); + } + + static double mp_log10(_cimg_math_parser& mp) { + return std::log10(_mp_arg(2)); + } + + static double mp_log2(_cimg_math_parser& mp) { + return cimg::log2(_mp_arg(2)); + } + + static double mp_logical_and(_cimg_math_parser& mp) { + const bool val_left = (bool)_mp_arg(2); + const CImg *const p_end = ++mp.p_code + mp.opcode[4]; + if (!val_left) { mp.p_code = p_end - 1; return 0; } + const uptrT mem_right = mp.opcode[3]; + for ( ; mp.p_code &op = *mp.p_code; + mp.opcode._data = op._data; mp.opcode._height = op._height; + const uptrT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + --mp.p_code; + return (double)(bool)mp.mem[mem_right]; + } + + static double mp_logical_not(_cimg_math_parser& mp) { + return (double)!_mp_arg(2); + } + + static double mp_logical_or(_cimg_math_parser& mp) { + const bool val_left = (bool)_mp_arg(2); + const CImg *const p_end = ++mp.p_code + mp.opcode[4]; + if (val_left) { mp.p_code = p_end - 1; return 1; } + const uptrT mem_right = mp.opcode[3]; + for ( ; mp.p_code &op = *mp.p_code; + mp.opcode._data = op._data; mp.opcode._height = op._height; + const uptrT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + --mp.p_code; + return (double)(bool)mp.mem[mem_right]; + } + + + static double mp_lt(_cimg_math_parser& mp) { + return (double)(_mp_arg(2)<_mp_arg(3)); + } + + static double mp_lte(_cimg_math_parser& mp) { + return (double)(_mp_arg(2)<=_mp_arg(3)); + } + + static double mp_matrix_det(_cimg_math_parser& mp) { + const double *ptrs = &_mp_arg(2) + 1; + const unsigned int k = (unsigned int)mp.opcode(3); + return CImg(ptrs,k,k,1,1,true).det(); + } + + static double mp_matrix_diag(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double *ptrs = &_mp_arg(2) + 1; + const unsigned int k = (unsigned int)mp.opcode(3); + CImg(ptrd,k,k,1,1,true) = CImg(ptrs,1,k,1,1,true).get_diagonal(); + return cimg::type::nan(); + } + + static double mp_matrix_eig(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double *ptr1 = &_mp_arg(2) + 1; + const unsigned int k = (unsigned int)mp.opcode(3); + CImg val, vec; + CImg(ptr1,k,k,1,1,true).symmetric_eigen(val,vec); + CImg(ptrd,k,1,1,1,true) = val.unroll('x'); + CImg(ptrd + k,k,k,1,1,true) = vec.get_transpose(); + return cimg::type::nan(); + } + + static double mp_matrix_eye(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int k = (unsigned int)mp.opcode(2); + CImg(ptrd,k,k,1,1,true).identity_matrix(); + return cimg::type::nan(); + } + + static double mp_matrix_inv(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double *ptr1 = &_mp_arg(2) + 1; + const unsigned int k = (unsigned int)mp.opcode(3); + CImg(ptrd,k,k,1,1,true) = CImg(ptr1,k,k,1,1,true).get_invert(); + return cimg::type::nan(); + } + + static double mp_matrix_mul(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double + *ptr1 = &_mp_arg(2) + 1, + *ptr2 = &_mp_arg(3) + 1; + const unsigned int + k = (unsigned int)mp.opcode(4), + l = (unsigned int)mp.opcode(5), + m = (unsigned int)mp.opcode(6); + CImg(ptrd,m,k,1,1,true) = CImg(ptr1,l,k,1,1,true)*CImg(ptr2,m,l,1,1,true); + return cimg::type::nan(); + } + + static double mp_matrix_rot(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const float x = (float)_mp_arg(2), y = (float)_mp_arg(3), z = (float)_mp_arg(4), theta = (float)_mp_arg(5); + CImg(ptrd,3,3,1,1,true) = CImg::rotation_matrix(x,y,z,theta); + return cimg::type::nan(); + } + + static double mp_matrix_solve(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double + *ptr1 = &_mp_arg(2) + 1, + *ptr2 = &_mp_arg(3) + 1; + const unsigned int + k = (unsigned int)mp.opcode(4), + l = (unsigned int)mp.opcode(5), + m = (unsigned int)mp.opcode(6); + CImg(ptrd,m,l,1,1,true) = CImg(ptr2,m,k,1,1,true).get_solve(CImg(ptr1,l,k,1,1,true)); + return cimg::type::nan(); + } + + static double mp_matrix_trace(_cimg_math_parser& mp) { + const double *ptrs = &_mp_arg(2) + 1; + const unsigned int k = (unsigned int)mp.opcode(3); + return CImg(ptrs,k,k,1,1,true).trace(); + } + + static double mp_matrix_trans(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const double *ptr1 = &_mp_arg(2) + 1; + const unsigned int + k = (unsigned int)mp.opcode(3), + l = (unsigned int)mp.opcode(4); + CImg(ptrd,l,k,1,1,true) = CImg(ptr1,k,l,1,1,true).get_transpose(); + return cimg::type::nan(); + } + static double mp_max(_cimg_math_parser& mp) { - double val = mp.mem[mp.opcode(2)]; - for (unsigned int i = 3; i values(mp.opcode._height-2); - double *p = values.data(); - for (unsigned int i = 2; i vals(mp.opcode._height - 2); + double *p = vals.data(); + for (unsigned int i = 2; i values(mp.opcode._height-3); - double *p = values.data(); - for (unsigned int i = 3; i::is_nan(val); + + static double mp_mul(_cimg_math_parser& mp) { + return _mp_arg(2)*_mp_arg(3); } - static double mp_isinf(_cimg_math_parser& mp) { - const double val = mp.mem[mp.opcode(2)]; - return cimg::type::is_inf(val); + + static double mp_neq(_cimg_math_parser& mp) { + return (double)(_mp_arg(2)!=_mp_arg(3)); } - static double mp_isint(_cimg_math_parser& mp) { - const double val = mp.mem[mp.opcode(2)]; - return (double)(cimg::mod(val,1.0)==0); + + static double mp_norm0(_cimg_math_parser& mp) { + double res = 0; + for (unsigned int i = 2; ires) res = val; + } + return res; + } + + static double mp_normp(_cimg_math_parser& mp) { + const double p = (double)mp.opcode[2]; + double res = 0; + for (unsigned int i = 3; i0?res:0.0; } + + static double mp_pow(_cimg_math_parser& mp) { + const double v = _mp_arg(2), p = _mp_arg(3); + return std::pow(v,p); + } + + static double mp_pow3(_cimg_math_parser& mp) { + const double val = _mp_arg(2); + return val*val*val; + } + + static double mp_pow4(_cimg_math_parser& mp) { + const double val = _mp_arg(2); + return val*val*val*val; + } + + static double mp_print(_cimg_math_parser& mp) { + CImg expr(mp.opcode._height - 2); + const uptrT *ptrs = mp.opcode._data + 2; + cimg_for(expr,ptrd,char) *ptrd = (char)*(ptrs++); + cimg::strellipsize(expr); + const double val = _mp_arg(1); + std::fprintf(cimg::output(),"\n[_cimg_math_parser] %s = %g",expr._data,val); + std::fflush(cimg::output()); + return val; + } + + static double mp_copy(_cimg_math_parser& mp) { + return _mp_arg(2); + } + static double mp_rol(_cimg_math_parser& mp) { - return cimg::rol(mp.mem[mp.opcode(2)],(unsigned int)mp.mem[mp.opcode(3)]); + return cimg::rol(_mp_arg(2),(unsigned int)_mp_arg(3)); } + static double mp_ror(_cimg_math_parser& mp) { - return cimg::ror(mp.mem[mp.opcode(2)],(unsigned int)mp.mem[mp.opcode(3)]); + return cimg::ror(_mp_arg(2),(unsigned int)_mp_arg(3)); } - static double mp_lsl(_cimg_math_parser& mp) { - return (long)mp.mem[mp.opcode(2)]<<(unsigned int)mp.mem[mp.opcode(3)]; + + static double mp_round(_cimg_math_parser& mp) { + return cimg::round(_mp_arg(2),_mp_arg(3),(int)_mp_arg(4)); } - static double mp_lsr(_cimg_math_parser& mp) { - return (long)mp.mem[mp.opcode(2)]>>(unsigned int)mp.mem[mp.opcode(3)]; + + static double mp_self_add(_cimg_math_parser& mp) { + return _mp_arg(1)+=_mp_arg(2); } - static double mp_sinc(_cimg_math_parser& mp) { - return cimg::sinc(mp.mem[mp.opcode(2)]); + + static double mp_self_bitwise_and(_cimg_math_parser& mp) { + double &val = _mp_arg(1); + return val = (double)((unsigned long)val & (unsigned long)_mp_arg(2)); + } + + static double mp_self_bitwise_left_shift(_cimg_math_parser& mp) { + double &val = _mp_arg(1); + return val = (double)((long)val<<(unsigned int)_mp_arg(2)); + } + + static double mp_self_bitwise_or(_cimg_math_parser& mp) { + double &val = _mp_arg(1); + return val = (double)((unsigned long)val | (unsigned long)_mp_arg(2)); + } + + static double mp_self_bitwise_right_shift(_cimg_math_parser& mp) { + double &val = _mp_arg(1); + return val = (double)((long)val>>(unsigned int)_mp_arg(2)); + } + + static double mp_self_decrement(_cimg_math_parser& mp) { + return --_mp_arg(1); + } + + static double mp_self_increment(_cimg_math_parser& mp) { + return ++_mp_arg(1); } - static double mp_im(_cimg_math_parser& mp) { - return mp.reference_stats?mp.reference_stats[0]:0; + + static double mp_self_map_vector_s(_cimg_math_parser& mp) { // Vector += scalar + unsigned int + ptrd = (unsigned int)mp.opcode[1] + 1, + siz = (unsigned int)mp.opcode[2]; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(1,3); + l_opcode[2] = mp.opcode[4]; // Scalar argument. + l_opcode.swap(mp.opcode); + uptrT &target = mp.opcode[1]; + while (siz-->0) { target = ptrd++; (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); + } + + static double mp_self_map_vector_v(_cimg_math_parser& mp) { // Vector += vector + unsigned int + ptrd = (unsigned int)mp.opcode[1] + 1, + siz = (unsigned int)mp.opcode[2], + ptrs = (unsigned int)mp.opcode[4] + 1; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(1,4); + l_opcode.swap(mp.opcode); + uptrT &target = mp.opcode[1], &argument = mp.opcode[2]; + while (siz-->0) { target = ptrd++; argument = ptrs++; (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); } - static double mp_iM(_cimg_math_parser& mp) { - return mp.reference_stats?mp.reference_stats[1]:0; + + static double mp_self_mul(_cimg_math_parser& mp) { + return _mp_arg(1)*=_mp_arg(2); + } + + static double mp_self_div(_cimg_math_parser& mp) { + return _mp_arg(1)/=_mp_arg(2); } - static double mp_ia(_cimg_math_parser& mp) { - return mp.reference_stats?mp.reference_stats[2]:0; + + static double mp_self_modulo(_cimg_math_parser& mp) { + double &val = _mp_arg(1); + return val = cimg::mod(val,_mp_arg(2)); } - static double mp_iv(_cimg_math_parser& mp) { - return mp.reference_stats?mp.reference_stats[3]:0; + + static double mp_self_pow(_cimg_math_parser& mp) { + double &val = _mp_arg(1); + return val = std::pow(val,_mp_arg(2)); } - static double mp_ic(_cimg_math_parser& mp) { - return mp.is_median_value?mp.median_value:0; + + static double mp_self_sub(_cimg_math_parser& mp) { + return _mp_arg(1)-=_mp_arg(2); } - static double mp_xm(_cimg_math_parser& mp) { - return mp.reference_stats?mp.reference_stats[4]:0; + + static double mp_set_ioff(_cimg_math_parser& mp) { + CImg &img = mp.imgout; + const long + off = (long)_mp_arg(2), + whds = (long)img.size(); + const double val = _mp_arg(1); + if (off>=0 && off &img = mp.imgout; + const int + x = (int)_mp_arg(2), y = (int)_mp_arg(3), + z = (int)_mp_arg(4), c = (int)_mp_arg(5); + const double val = _mp_arg(1); + if (x>=0 && x=0 && y=0 && z=0 && c &img = mp.imgout; + const int + ox = (int)mp.mem[_cimg_mp_x], oy = (int)mp.mem[_cimg_mp_y], + oz = (int)mp.mem[_cimg_mp_z], oc = (int)mp.mem[_cimg_mp_c]; + const long + off = img.offset(ox,oy,oz,oc) + (long)_mp_arg(2), + whds = (long)img.size(); + const double val = _mp_arg(1); + if (off>=0 && off &img = mp.imgout; + const double + ox = mp.mem[_cimg_mp_x], oy = mp.mem[_cimg_mp_y], + oz = mp.mem[_cimg_mp_z], oc = mp.mem[_cimg_mp_c]; + const int + x = (int)(ox + _mp_arg(2)), y = (int)(oy + _mp_arg(3)), + z = (int)(oz + _mp_arg(4)), c = (int)(oc + _mp_arg(5)); + const double val = _mp_arg(1); + if (x>=0 && x=0 && y=0 && z=0 && c &img = mp.imgout; + const long + off = (long)_mp_arg(2), + whd = img.width()*img.height()*img.depth(); + const T val = (T)_mp_arg(1); + if (off>=0 && off &img = mp.imgout; + const long + off = (long)_mp_arg(2), + whd = img.width()*img.height()*img.depth(); + const double *ptrs = &_mp_arg(1) + 1; + if (off>=0 && off::nan(); + } + + static double mp_set_Ixyz_s(_cimg_math_parser& mp) { + CImg &img = mp.imgout; + const int x = (int)_mp_arg(2), y = (int)_mp_arg(3), z = (int)_mp_arg(4); + const T val = (T)_mp_arg(1); + if (x>=0 && x=0 && y=0 && z &img = mp.imgout; + const int x = (int)_mp_arg(2), y = (int)_mp_arg(3), z = (int)_mp_arg(4); + const double *ptrs = &_mp_arg(1) + 1; + if (x>=0 && x=0 && y=0 && z::nan(); } - static double mp_yM(_cimg_math_parser& mp) { - return mp.reference_stats?mp.reference_stats[9]:0; + + static double mp_set_Joff_s(_cimg_math_parser& mp) { + CImg &img = mp.imgout; + const int + ox = (int)mp.mem[_cimg_mp_x], oy = (int)mp.mem[_cimg_mp_y], + oz = (int)mp.mem[_cimg_mp_z], oc = (int)mp.mem[_cimg_mp_c]; + const long + off = img.offset(ox,oy,oz,oc) + (long)_mp_arg(2), + whd = img.width()*img.height()*img.depth(); + const T val = (T)_mp_arg(1); + if (off>=0 && off &img = mp.imgout; + const int + ox = (int)mp.mem[_cimg_mp_x], oy = (int)mp.mem[_cimg_mp_y], + oz = (int)mp.mem[_cimg_mp_z], oc = (int)mp.mem[_cimg_mp_c]; + const long + off = img.offset(ox,oy,oz,oc) + (long)_mp_arg(2), + whd = img.width()*img.height()*img.depth(); + const double *ptrs = &_mp_arg(1) + 1; + if (off>=0 && off::nan(); + } + + static double mp_set_Jxyz_s(_cimg_math_parser& mp) { + CImg &img = mp.imgout; + const double ox = mp.mem[_cimg_mp_x], oy = mp.mem[_cimg_mp_y], oz = mp.mem[_cimg_mp_z]; + const int x = (int)(ox + _mp_arg(2)), y = (int)(oy + _mp_arg(3)), z = (int)(oz + _mp_arg(4)); + const T val = (T)_mp_arg(1); + if (x>=0 && x=0 && y=0 && z &img = mp.imgout; + const double ox = mp.mem[_cimg_mp_x], oy = mp.mem[_cimg_mp_y], oz = mp.mem[_cimg_mp_z]; + const int x = (int)(ox + _mp_arg(2)), y = (int)(oy + _mp_arg(3)), z = (int)(oz + _mp_arg(4)); + const double *ptrs = &_mp_arg(1) + 1; + if (x>=0 && x=0 && y=0 && z::nan(); } - static double mp_cM(_cimg_math_parser& mp) { - return mp.reference_stats?mp.reference_stats[11]:0; + + static double mp_sign(_cimg_math_parser& mp) { + return cimg::sign(_mp_arg(2)); } - static double mp_arg(_cimg_math_parser& mp) { - const int _ind = (int)mp.mem[mp.opcode(2)]; - const unsigned int nb_args = mp.opcode._height-2, ind = _ind<0?_ind+nb_args:(unsigned int)_ind; - if (ind>=nb_args) return 0; - return mp.mem[mp.opcode(ind+2)]; + + static double mp_sin(_cimg_math_parser& mp) { + return std::sin(_mp_arg(2)); } - static double mp_int(_cimg_math_parser& mp) { - return (double)(long)mp.mem[mp.opcode(2)]; + + static double mp_sinc(_cimg_math_parser& mp) { + return cimg::sinc(_mp_arg(2)); } - static double mp_ioff(_cimg_math_parser& mp) { - const unsigned long off = (unsigned long)mp.mem[mp.opcode(2)]; - if (off>=mp.reference.size()) return 0; - return (double)mp.reference[off]; + + static double mp_sinh(_cimg_math_parser& mp) { + return std::sinh(_mp_arg(2)); } - static double mp_joff(_cimg_math_parser& mp) { - const int x = (int)mp.mem[9], y = (int)mp.mem[10], z = (int)mp.mem[11], c = (int)mp.mem[12]; - const unsigned long off = mp.reference.offset(x,y,z,c) + (unsigned long)(mp.mem[mp.opcode(2)]); - if (off>=mp.reference.size()) return 0; - return (double)mp.reference[off]; + + static double mp_sqr(_cimg_math_parser& mp) { + return cimg::sqr(_mp_arg(2)); } - // Evaluation procedure, with image data. - double operator()(const double x, const double y, const double z, const double c) { - if (!mem) return 0; - mem[9] = x; mem[10] = y; mem[11] = z; mem[12] = c; - opcode._is_shared = true; opcode._width = opcode._depth = opcode._spectrum = 1; - - for (p_code = code._data; p_code &op = *p_code; - // Allows to avoid parameter passing to evaluation functions. - opcode._data = op._data; opcode._height = op._height; - const unsigned int target = (unsigned int)opcode[1]; - mem[target] = _cimg_mp_defunc(*this); + static double mp_sqrt(_cimg_math_parser& mp) { + return std::sqrt(_mp_arg(2)); + } + + static double mp_sub(_cimg_math_parser& mp) { + return _mp_arg(2) - _mp_arg(3); + } + + static double mp_swap(_cimg_math_parser& mp) { + cimg::swap(mp.mem[mp.opcode[2]],mp.mem[mp.opcode[3]]); + return mp.mem[mp.opcode[2]]; + } + + static double mp_tan(_cimg_math_parser& mp) { + return std::tan(_mp_arg(2)); + } + + static double mp_tanh(_cimg_math_parser& mp) { + return std::tanh(_mp_arg(2)); + } + + static double mp_u(_cimg_math_parser& mp) { + return cimg::rand(_mp_arg(2),_mp_arg(3)); + } + + static double mp_vector_copy(_cimg_math_parser& mp) { + std::memcpy(&_mp_arg(1) + 1,&_mp_arg(2) + 1,sizeof(double)*mp.opcode[3]); + return cimg::type::nan(); + } + + static double mp_vector_crop(_cimg_math_parser& mp) { + double *const ptrd = &_mp_arg(1) + 1; + const double *const ptrs = &_mp_arg(2) + 1; + const unsigned int p1 = mp.opcode[3], p2 = mp.opcode[4]; + std::memcpy(ptrd,ptrs + p1,p2*sizeof(double)); + return cimg::type::nan(); + } + + static double mp_vector_init(_cimg_math_parser& mp) { + unsigned int + ptrs = 3U, + ptrd = (unsigned int)mp.opcode[1] + 1, + siz = (unsigned int)mp.opcode[2]; + switch (mp.opcode._height) { + case 3 : std::memset(mp.mem._data + ptrd,0,siz*sizeof(double)); break; // 0 values given + case 4 : { const double val = _mp_arg(ptrs); while (siz-->0) mp.mem[ptrd++] = val; } break; + default : while (siz-->0) { mp.mem[ptrd++] = _mp_arg(ptrs++); if (ptrs>=mp.opcode._height) ptrs = 3U; } + } + return cimg::type::nan(); + } + + static double mp_vector_map_sv(_cimg_math_parser& mp) { // Operator(scalar,vector) + unsigned int + siz = (unsigned int)mp.opcode[2], + ptrs = (unsigned int)mp.opcode[5] + 1; + double *ptrd = &_mp_arg(1) + 1; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(4); + l_opcode[2] = mp.opcode[4]; // Scalar argument1 + l_opcode.swap(mp.opcode); + uptrT &argument2 = mp.opcode[3]; + while (siz-->0) { argument2 = ptrs++; *(ptrd++) = (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); + } + + static double mp_vector_map_v(_cimg_math_parser& mp) { // Operator(vector) + unsigned int + siz = (unsigned int)mp.opcode[2], + ptrs = (unsigned int)mp.opcode[4] + 1; + double *ptrd = &_mp_arg(1) + 1; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(1,3); + l_opcode.swap(mp.opcode); + uptrT &argument = mp.opcode[2]; + while (siz-->0) { argument = ptrs++; *(ptrd++) = (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); + } + + static double mp_vector_map_vs(_cimg_math_parser& mp) { // Operator(vector,scalar) + unsigned int + siz = (unsigned int)mp.opcode[2], + ptrs = (unsigned int)mp.opcode[4] + 1; + double *ptrd = &_mp_arg(1) + 1; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(1,4); + l_opcode[3] = mp.opcode[5]; // Scalar argument2 + l_opcode.swap(mp.opcode); + uptrT &argument1 = mp.opcode[2]; + while (siz-->0) { argument1 = ptrs++; *(ptrd++) = (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); + } + + static double mp_vector_map_vss(_cimg_math_parser& mp) { // Operator(vector,scalar,scalar) + unsigned int + siz = (unsigned int)mp.opcode[2], + ptrs = (unsigned int)mp.opcode[4] + 1; + double *ptrd = &_mp_arg(1) + 1; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(1,5); + l_opcode[3] = mp.opcode[5]; // Scalar argument2 + l_opcode[4] = mp.opcode[6]; // Scalar argument3 + l_opcode.swap(mp.opcode); + uptrT &argument1 = mp.opcode[2]; + while (siz-->0) { argument1 = ptrs++; *(ptrd++) = (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); + } + + static double mp_vector_map_vv(_cimg_math_parser& mp) { // Operator(vector,vector) + unsigned int + siz = (unsigned int)mp.opcode[2], + ptrs1 = (unsigned int)mp.opcode[4] + 1, + ptrs2 = (unsigned int)mp.opcode[5] + 1; + double *ptrd = &_mp_arg(1) + 1; + mp_func op = (mp_func)mp.opcode[3]; + CImg l_opcode(1,4); + l_opcode.swap(mp.opcode); + uptrT &argument1 = mp.opcode[2], &argument2 = mp.opcode[3]; + while (siz-->0) { argument1 = ptrs1++; argument2 = ptrs2++; *(ptrd++) = (*op)(mp); } + l_opcode.swap(mp.opcode); + return cimg::type::nan(); + } + + static double mp_vector_off(_cimg_math_parser& mp) { + const unsigned int + ptr = mp.opcode[2] + 1, + siz = (int)mp.opcode[3]; + const int off = (int)_mp_arg(4); + return off>=0 && off<(int)siz?mp.mem[ptr + off]:cimg::type::nan(); + } + + static double mp_vector_set_off(_cimg_math_parser& mp) { + const unsigned int + ptr = mp.opcode[2] + 1, + siz = mp.opcode[3]; + const int off = (int)_mp_arg(4); + if (off>=0 && off<(int)siz) mp.mem[ptr + off] = _mp_arg(5); + return _mp_arg(5); + } + + static double mp_vector_sort(_cimg_math_parser& mp) { + double *const ptrd = &_mp_arg(1) + 1; + const double *const ptrs = &_mp_arg(2) + 1; + const unsigned int siz = mp.opcode[3]; + const bool is_increasing = (bool)_mp_arg(4); + CImg(ptrd,1,siz,1,1,true) = CImg(ptrs,1,siz,1,1,true).get_sort(is_increasing); + return cimg::type::nan(); + } + + static double mp_vector_print(_cimg_math_parser& mp) { + CImg expr(mp.opcode._height - 3); + const uptrT *ptrs = mp.opcode._data + 3; + cimg_for(expr,ptrd,char) *ptrd = (char)*(ptrs++); + cimg::strellipsize(expr); + unsigned int + ptr = mp.opcode[1] + 1, + siz = mp.opcode[2]; + std::fprintf(cimg::output(),"\n[_cimg_math_parser] %s = [",expr._data); + while (siz-->0) std::fprintf(cimg::output(),"%g%s",mp.mem[ptr++],siz?",":""); + std::fputc(']',cimg::output()); + std::fflush(cimg::output()); + return cimg::type::nan(); + } + + static double mp_whiledo(_cimg_math_parser& mp) { // Used also by 'for()' + const uptrT + mem_proc = mp.opcode[1], + mem_cond = mp.opcode[2]; + const CImg + *const p_cond = ++mp.p_code, + *const p_proc = p_cond + mp.opcode[3], + *const p_end = p_proc + mp.opcode[4]; + const unsigned int vsiz = mp.opcode[5]; + bool is_first_iter = true, is_cond = false; + do { + for (mp.p_code = p_cond; mp.p_code &op = *mp.p_code; + mp.opcode._data = op._data; mp.opcode._height = op._height; + const uptrT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + is_cond = (bool)mp.mem[mem_cond]; + if (is_cond) { // Evaluate loop iteration + for ( ; mp.p_code &op = *mp.p_code; + mp.opcode._data = op._data; mp.opcode._height = op._height; + const uptrT target = mp.opcode[1]; + mp.mem[target] = _cimg_mp_defunc(mp); + } + is_first_iter = false; + } + } while (is_cond); + mp.p_code = p_end - 1; + if (vsiz && is_first_iter) std::memset(&mp.mem[mem_proc] + 1,0,vsiz*sizeof(double)); + return is_first_iter?0:mp.mem[mem_proc]; + } + + static double mp_Ioff(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + boundary_conditions = (unsigned int)_mp_arg(3); + const CImg &img = mp.imgin; + const long + off = (long)_mp_arg(2), + whd = img.width()*img.height()*img.depth(); + const T *ptrs; + if (off<0 || off>=whd) + switch (boundary_conditions) { + case 2 : // Periodic boundary + if (!img) { + ptrs = &img[cimg::mod(off,whd)]; + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + case 1 : // Neumann boundary + if (img) { + ptrs = off<0?img._data:&img.back(); + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + default : // Dirichet boundary + std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + } + ptrs = &img[off]; + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return cimg::type::nan(); + } + + static double mp_Ixyz(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + interpolation = (unsigned int)_mp_arg(5), + boundary_conditions = (unsigned int)_mp_arg(6); + const CImg &img = mp.imgin; + const double x = _mp_arg(2), y = _mp_arg(3), z = _mp_arg(4); + if (interpolation==0) { // Nearest neighbor interpolation + if (boundary_conditions==2) + cimg_forC(img,c) + *(ptrd++) = (double)img.atXYZ(cimg::mod((int)x,img.width()), + cimg::mod((int)y,img.height()), + cimg::mod((int)z,img.depth()), + c); + else if (boundary_conditions==1) + cimg_forC(img,c) + *(ptrd++) = (double)img.atXYZ((int)x,(int)y,(int)z,c); + else + cimg_forC(img,c) + *(ptrd++) = (double)img.atXYZ((int)x,(int)y,(int)z,c,0); + } else { // Linear interpolation + if (boundary_conditions==2) + cimg_forC(img,c) + *(ptrd++) = (double)img.linear_atXYZ(cimg::mod((float)x,(float)img.width()), + cimg::mod((float)y,(float)img.height()), + cimg::mod((float)z,(float)img.depth()),c); + else if (boundary_conditions==1) + cimg_forC(img,c) + *(ptrd++) = (double)img.linear_atXYZ((float)x,(float)y,(float)z,c); + else + cimg_forC(img,c) + *(ptrd++) = (double)img.linear_atXYZ((float)x,(float)y,(float)z,c,0); } - return mem[result]; + return cimg::type::nan(); } - }; + + static double mp_Joff(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + boundary_conditions = (unsigned int)_mp_arg(3); + const CImg &img = mp.imgin; + const int ox = (int)mp.mem[_cimg_mp_x], oy = (int)mp.mem[_cimg_mp_y], oz = (int)mp.mem[_cimg_mp_z]; + const long + off = img.offset(ox,oy,oz) + (long)_mp_arg(2), + whd = img.width()*img.height()*img.depth(); + const T *ptrs; + if (off<0 || off>=whd) + switch (boundary_conditions) { + case 2 : // Periodic boundary + if (!img) { + ptrs = &img[cimg::mod(off,whd)]; + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + case 1 : // Neumann boundary + if (img) { + ptrs = off<0?img._data:&img.back(); + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + } else std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + default : // Dirichet boundary + std::memset(ptrd,0,img._spectrum*sizeof(double)); + return cimg::type::nan(); + } + ptrs = &img[off]; + cimg_forC(img,c) { *(ptrd++) = *ptrs; ptrs+=whd; } + return cimg::type::nan(); + } + + static double mp_Jxyz(_cimg_math_parser& mp) { + double *ptrd = &_mp_arg(1) + 1; + const unsigned int + interpolation = (unsigned int)_mp_arg(5), + boundary_conditions = (unsigned int)_mp_arg(6); + const CImg &img = mp.imgin; + const double + ox = mp.mem[_cimg_mp_x], oy = mp.mem[_cimg_mp_y], oz = mp.mem[_cimg_mp_z], + x = ox + _mp_arg(2), y = oy + _mp_arg(3), z = oz + _mp_arg(4); + if (interpolation==0) { // Nearest neighbor interpolation + if (boundary_conditions==2) + cimg_forC(img,c) + *(ptrd++) = (double)img.atXYZ(cimg::mod((int)x,img.width()), + cimg::mod((int)y,img.height()), + cimg::mod((int)z,img.depth()), + c); + else if (boundary_conditions==1) + cimg_forC(img,c) + *(ptrd++) = (double)img.atXYZ((int)x,(int)y,(int)z,c); + else + cimg_forC(img,c) + *(ptrd++) = (double)img.atXYZ((int)x,(int)y,(int)z,c,0); + } else { // Linear interpolation + if (boundary_conditions==2) + cimg_forC(img,c) + *(ptrd++) = (double)img.linear_atXYZ(cimg::mod((float)x,(float)img.width()), + cimg::mod((float)y,(float)img.height()), + cimg::mod((float)z,(float)img.depth()),c); + else if (boundary_conditions==1) + cimg_forC(img,c) + *(ptrd++) = (double)img.linear_atXYZ((float)x,(float)y,(float)z,c); + else + cimg_forC(img,c) + *(ptrd++) = (double)img.linear_atXYZ((float)x,(float)y,(float)z,c,0); + } + return cimg::type::nan(); + } + +#undef _mp_arg + + }; // struct _cimg_math_parser {} //! Compute the square value of each pixel value. /** @@ -14639,7 +18884,7 @@ CImg& sqr() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=524288) +#pragma omp parallel for cimg_openmp_if (size()>=524288) #endif cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(val*val); }; return *this; @@ -14666,7 +18911,7 @@ CImg& sqrt() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=8192) +#pragma omp parallel for cimg_openmp_if (size()>=8192) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::sqrt((double)*ptrd); return *this; @@ -14687,7 +18932,7 @@ CImg& exp() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=4096) +#pragma omp parallel for cimg_openmp_if (size()>=4096) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::exp((double)*ptrd); return *this; @@ -14709,7 +18954,7 @@ CImg& log() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=262144) +#pragma omp parallel for cimg_openmp_if (size()>=262144) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::log((double)*ptrd); return *this; @@ -14731,7 +18976,7 @@ CImg& log2() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=4096) +#pragma omp parallel for cimg_openmp_if (size()>=4096) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)cimg::log2((double)*ptrd); return *this; @@ -14753,7 +18998,7 @@ CImg& log10() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=4096) +#pragma omp parallel for cimg_openmp_if (size()>=4096) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::log10((double)*ptrd); return *this; @@ -14774,7 +19019,7 @@ CImg& abs() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=524288) +#pragma omp parallel for cimg_openmp_if (size()>=524288) #endif cimg_rof(*this,ptrd,T) *ptrd = cimg::abs(*ptrd); return *this; @@ -14800,7 +19045,7 @@ CImg& sign() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) *ptrd = cimg::sign(*ptrd); return *this; @@ -14822,7 +19067,7 @@ CImg& cos() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=8192) +#pragma omp parallel for cimg_openmp_if (size()>=8192) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::cos((double)*ptrd); return *this; @@ -14844,7 +19089,7 @@ CImg& sin() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=8192) +#pragma omp parallel for cimg_openmp_if (size()>=8192) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::sin((double)*ptrd); return *this; @@ -14867,7 +19112,7 @@ CImg& sinc() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=2048) +#pragma omp parallel for cimg_openmp_if (size()>=2048) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)cimg::sinc((double)*ptrd); return *this; @@ -14889,7 +19134,7 @@ CImg& tan() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=2048) +#pragma omp parallel for cimg_openmp_if (size()>=2048) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::tan((double)*ptrd); return *this; @@ -14911,7 +19156,7 @@ CImg& cosh() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=2048) +#pragma omp parallel for cimg_openmp_if (size()>=2048) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::cosh((double)*ptrd); return *this; @@ -14933,7 +19178,7 @@ CImg& sinh() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=2048) +#pragma omp parallel for cimg_openmp_if (size()>=2048) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::sinh((double)*ptrd); return *this; @@ -14955,7 +19200,7 @@ CImg& tanh() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=2048) +#pragma omp parallel for cimg_openmp_if (size()>=2048) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::tanh((double)*ptrd); return *this; @@ -14977,7 +19222,7 @@ CImg& acos() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=8192) +#pragma omp parallel for cimg_openmp_if (size()>=8192) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::acos((double)*ptrd); return *this; @@ -14999,7 +19244,7 @@ CImg& asin() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=8192) +#pragma omp parallel for cimg_openmp_if (size()>=8192) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::asin((double)*ptrd); return *this; @@ -15021,7 +19266,7 @@ CImg& atan() { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=8192) +#pragma omp parallel for cimg_openmp_if (size()>=8192) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::atan((double)*ptrd); return *this; @@ -15150,35 +19395,35 @@ if (is_empty()) return *this; if (p==-4) { #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val*val*val)); } return *this; } if (p==-3) { #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val*val)); } return *this; } if (p==-2) { #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1.0/(val*val)); } return *this; } if (p==-1) { #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1.0/val); } return *this; } if (p==-0.5) { #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=8192) +#pragma omp parallel for cimg_openmp_if (size()>=8192) #endif cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = (T)(1/std::sqrt((double)val)); } return *this; @@ -15189,20 +19434,20 @@ if (p==2) return sqr(); if (p==3) { #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=262144) +#pragma omp parallel for cimg_openmp_if (size()>=262144) #endif cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = val*val*val; } return *this; } if (p==4) { #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=131072) +#pragma omp parallel for cimg_openmp_if (size()>=131072) #endif cimg_rof(*this,ptrd,T) { const T val = *ptrd; *ptrd = val*val*val*val; } return *this; } #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=1024) +#pragma omp parallel for cimg_openmp_if (size()>=1024) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)std::pow((double)*ptrd,p); return *this; @@ -15218,44 +19463,7 @@ Similar to operator+=(const char*), except it performs a pointwise exponentiation instead of an addition. **/ CImg& pow(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"pow"); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)std::pow((double)*ptrd,mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)std::pow((double)*ptrd,mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)std::pow((double)*ptrd,lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)std::pow((double)*ptrd,mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - CImg values(_width,_height,_depth,_spectrum); - try { - values.fill(expression,true); - } catch (CImgException&) { - cimg::exception_mode(omode); - values.load(expression); - } - pow(values); - } - cimg::exception_mode(omode); - return *this; + return pow((+*this)._fill(expression,true,true,0,0,"pow",this)); } //! Raise each pixel value to a power, specified from an expression \newinstance. @@ -15294,7 +19502,7 @@ CImg& rol(const unsigned int n=1) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)cimg::rol(*ptrd,n); return *this; @@ -15310,45 +19518,7 @@ Similar to operator<<=(const char*), except that it performs a left rotation instead of a left shift. **/ CImg& rol(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"rol"); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') - cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::rol(*ptrd,(unsigned int)mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - CImg values(_width,_height,_depth,_spectrum); - try { - values.fill(expression,true); - } catch (CImgException&) { - cimg::exception_mode(omode); - values.load(expression); - } - rol(values); - } - cimg::exception_mode(omode); - return *this; + return rol((+*this)._fill(expression,true,true,0,0,"rol",this)); } //! Compute the bitwise left rotation of each pixel value \newinstance. @@ -15387,7 +19557,7 @@ CImg& ror(const unsigned int n=1) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) *ptrd = (T)cimg::ror(*ptrd,n); return *this; @@ -15403,45 +19573,7 @@ Similar to operator>>=(const char*), except that it performs a right rotation instead of a right shift. **/ CImg& ror(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"ror"); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') - cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::ror(*ptrd,(unsigned int)mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - CImg values(_width,_height,_depth,_spectrum); - try { - values.fill(expression,true); - } catch (CImgException&) { - cimg::exception_mode(omode); - values.load(expression); - } - ror(values); - } - cimg::exception_mode(omode); - return *this; + return ror((+*this)._fill(expression,true,true,0,0,"ror",this)); } //! Compute the bitwise right rotation of each pixel value \newinstance. @@ -15482,7 +19614,7 @@ CImg& min(const T& val) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=65536) +#pragma omp parallel for cimg_openmp_if (size()>=65536) #endif cimg_rof(*this,ptrd,T) *ptrd = cimg::min(*ptrd,val); return *this; @@ -15526,43 +19658,7 @@ \f$\mathrm{min}(I_{(x,y,z,c)},\mathrm{expr}_{(x,y,z,c)})\f$. **/ CImg& min(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"min"); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::min(*ptrd,(T)mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::min(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)cimg::min(*ptrd,(T)lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::min(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - CImg values(_width,_height,_depth,_spectrum); - try { - values.fill(expression,true); - } catch (CImgException&) { - cimg::exception_mode(omode); - values.load(expression); - } - min(values); - } - cimg::exception_mode(omode); - return *this; + return min((+*this)._fill(expression,true,true,0,0,"min",this)); } //! Pointwise min operator between an image and an expression \newinstance. @@ -15579,7 +19675,7 @@ CImg& max(const T& val) { if (is_empty()) return *this; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=65536) +#pragma omp parallel for cimg_openmp_if (size()>=65536) #endif cimg_rof(*this,ptrd,T) *ptrd = cimg::max(*ptrd,val); return *this; @@ -15623,43 +19719,7 @@ \f$\mathrm{max}(I_{(x,y,z,c)},\mathrm{expr}_{(x,y,z,c)})\f$. **/ CImg& max(const char *const expression) { - if (is_empty()) return *this; - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"max"); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::max(*ptrd,(T)mp(x,y,z,c)); --ptrd; } - else if (*expression=='>') cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::max(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } - else { -#ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) -#pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) { *ptrd = (T)cimg::max(*ptrd,(T)lmp(x,y,z,c)); ++ptrd; } - } - } - else -#endif - cimg_forXYZC(*this,x,y,z,c) { *ptrd = (T)cimg::max(*ptrd,(T)mp(x,y,z,c)); ++ptrd; } - } - } catch (CImgException&) { - CImg values(_width,_height,_depth,_spectrum); - try { - values.fill(expression,true); - } catch (CImgException&) { - cimg::exception_mode(omode); - values.load(expression); - } - max(values); - } - cimg::exception_mode(omode); - return *this; + return max((+*this)._fill(expression,true,true,0,0,"max",this)); } //! Pointwise max operator between an image and an expression \newinstance. @@ -15808,25 +19868,25 @@ cimg_instance); CImg arr(*this); unsigned int l = 0, ir = size() - 1; - for (;;) { - if (ir<=l+1) { - if (ir==l+1 && arr[ir]>1; - cimg::swap(arr[mid],arr[l+1]); + cimg::swap(arr[mid],arr[l + 1]); if (arr[l]>arr[ir]) cimg::swap(arr[l],arr[ir]); - if (arr[l+1]>arr[ir]) cimg::swap(arr[l+1],arr[ir]); - if (arr[l]>arr[l+1]) cimg::swap(arr[l],arr[l+1]); + if (arr[l + 1]>arr[ir]) cimg::swap(arr[l + 1],arr[ir]); + if (arr[l]>arr[l + 1]) cimg::swap(arr[l],arr[l + 1]); unsigned int i = l + 1, j = ir; - const T pivot = arr[l+1]; - for (;;) { + const T pivot = arr[l + 1]; + for ( ; ; ) { do ++i; while (arr[i]pivot); if (j=k) ir = j - 1; if (j<=k) l = i; @@ -15844,17 +19904,23 @@ cimg_instance); const unsigned int s = size(); const T res = kth_smallest(s>>1); - return (s%2)?res:((res+kth_smallest((s>>1)-1))/2); + return (s%2)?res:((res + kth_smallest((s>>1) - 1))/2); + } + + //! Return the product of all the pixel values. + /** + **/ + double product() const { + if (is_empty()) return 0; + double res = 1; + cimg_for(*this,ptrs,T) res*=(double)*ptrs; + return res; } //! Return the sum of all the pixel values. /** **/ double sum() const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "sum(): Empty instance.", - cimg_instance); double res = 0; cimg_for(*this,ptrs,T) res+=(double)*ptrs; return res; @@ -15864,10 +19930,6 @@ /** **/ double mean() const { - if (is_empty()) - throw CImgInstanceException(_cimg_instance - "mean(): Empty instance.", - cimg_instance); double res = 0; cimg_for(*this,ptrs,T) res+=(double)*ptrs; return res/size(); @@ -15880,7 +19942,7 @@ \f$1/N \sum\limits_{k=1}^{N} (x_k - \bar x)^2 = 1/N \left( \sum\limits_{k=1}^N x_k^2 - \left( \sum\limits_{k=1}^N x_k \right)^2 / N \right)\f$ with \f$ \bar x = 1/N \sum\limits_{k=1}^N x_k \f$. - - \c 1: Best unbiased estimator, computed as \f$\frac{1}{N-1} \sum\limits_{k=1}^{N} (x_k - \bar x)^2 \f$. + - \c 1: Best unbiased estimator, computed as \f$\frac{1}{N - 1} \sum\limits_{k=1}^{N} (x_k - \bar x)^2 \f$. - \c 2: Least median of squares. - \c 3: Least trimmed of squares. **/ @@ -15968,7 +20030,7 @@ if (_depth==1) { const double cste = 1.0/std::sqrt(20.0); // Depends on how the Laplacian is computed. #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height>=262144 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height>=262144 && _spectrum>=2) #endif cimg_forC(*this,c) { CImg_3x3(I,T); @@ -15980,7 +20042,7 @@ } else { const double cste = 1.0/std::sqrt(42.0); // Depends on how the Laplacian is computed. #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height*_depth>=262144 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height*_depth>=262144 && _spectrum>=2) #endif cimg_forC(*this,c) { CImg_3x3x3(I,T); @@ -16060,11 +20122,81 @@ \param y Value of the pre-defined variable \c y. \param z Value of the pre-defined variable \c z. \param c Value of the pre-defined variable \c c. + \param list_inputs A list of input images attached to the specified math formula. + \param list_outputs A pointer to a list of output images attached to the specified math formula. **/ double eval(const char *const expression, - const double x=0, const double y=0, const double z=0, const double c=0) const { + const double x=0, const double y=0, const double z=0, const double c=0, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) { + return _eval(this,expression,x,y,z,c,list_inputs,list_outputs); + } + + //! Evaluate math formula \const. + double eval(const char *const expression, + const double x=0, const double y=0, const double z=0, const double c=0, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) const { + return _eval(0,expression,x,y,z,c,list_inputs,list_outputs); + } + + double _eval(CImg *const img_output, const char *const expression, + const double x, const double y, const double z, const double c, + const CImgList *const list_inputs, CImgList *const list_outputs) const { if (!expression) return 0; - return _cimg_math_parser(*this,expression,"eval")(x,y,z,c); + if (!expression[1]) switch (*expression) { // Single-char optimization. + case 'w' : return (double)_width; + case 'h' : return (double)_height; + case 'd' : return (double)_depth; + case 's' : return (double)_spectrum; + case 'r' : return (double)_is_shared; + } + _cimg_math_parser mp(expression + (*expression=='>' || *expression=='<' || *expression=='*'?1:0),"eval", + *this,img_output,list_inputs,list_outputs); + return mp(x,y,z,c); + } + + //! Evaluate math formula. + /** + \param[out] output Contains values of output vector returned by the evaluated expression + (or is empty if the returned type is scalar). + \param expression Math formula, as a C-string. + \param x Value of the pre-defined variable \c x. + \param y Value of the pre-defined variable \c y. + \param z Value of the pre-defined variable \c z. + \param c Value of the pre-defined variable \c c. + \param list_inputs A list of input images attached to the specified math formula. + \param list_outputs A pointer to a list of output images attached to the specified math formula. + **/ + template + void eval(CImg &output, const char *const expression, + const double x=0, const double y=0, const double z=0, const double c=0, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) { + _eval(output,this,expression,x,y,z,c,list_inputs,list_outputs); + } + + //! Evaluate math formula \const. + template + void eval(CImg& output, const char *const expression, + const double x=0, const double y=0, const double z=0, const double c=0, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) const { + _eval(output,0,expression,x,y,z,c,list_inputs,list_outputs); + } + + template + void _eval(CImg& output, CImg *const img_output, const char *const expression, + const double x, const double y, const double z, const double c, + const CImgList *const list_inputs, CImgList *const list_outputs) const { + if (!expression) { output.assign(1); *output = 0; } + if (!expression[1]) switch (*expression) { // Single-char optimization. + case 'w' : output.assign(1); *output = (t)_width; + case 'h' : output.assign(1); *output = (t)_height; + case 'd' : output.assign(1); *output = (t)_depth; + case 's' : output.assign(1); *output = (t)_spectrum; + case 'r' : output.assign(1); *output = (t)_is_shared; + } + _cimg_math_parser mp(expression + (*expression=='>' || *expression=='<' || *expression=='*'?1:0),"eval", + *this,img_output,list_inputs,list_outputs); + output.assign(1,cimg::max(1U,mp.result_dim)); + mp(x,y,z,c,output._data); } //! Evaluate math formula on a set of variables. @@ -16073,10 +20205,24 @@ \param xyzc Set of values (x,y,z,c) used for the evaluation. **/ template - CImg eval(const char *const expression, const CImg& xyzc) const { + CImg eval(const char *const expression, const CImg& xyzc, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) { + return _eval(this,expression,xyzc,list_inputs,list_outputs); + } + + //! Evaluate math formula on a set of variables \const. + template + CImg eval(const char *const expression, const CImg& xyzc, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) const { + return _eval(0,expression,xyzc,list_inputs,list_outputs); + } + + template + CImg _eval(CImg *const output, const char *const expression, const CImg& xyzc, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) const { CImg res(1,xyzc.size()/4); if (!expression) return res.fill(0); - _cimg_math_parser mp(*this,expression,"eval"); + _cimg_math_parser mp(expression,"eval",*this,output,list_inputs,list_outputs); #ifdef cimg_use_openmp #pragma omp parallel if (res._height>=512 && std::strlen(expression)>=6) { @@ -16084,7 +20230,9 @@ #pragma omp for for (unsigned int i = 0; i[min; max; mean; variance; xmin; ymin; zmin; cmin; xmax; ymax; zmax; cmax]. + \return Statistics vector as + [min; max; mean; variance; xmin; ymin; zmin; cmin; xmax; ymax; zmax; cmax; sum; product]. **/ CImg get_stats(const unsigned int variance_method=1) const { if (is_empty()) return CImg(); const unsigned long siz = size(); const T *const odata = _data; const T *pm = odata, *pM = odata; - double S = 0, S2 = 0; + double S = 0, S2 = 0, P = _data?1:0; T m = *pm, M = m; cimg_for(*this,ptrs,T) { const T val = *ptrs; @@ -16117,6 +20266,7 @@ if (val>M) { M = val; pM = ptrs; } S+=_val; S2+=_val*_val; + P*=_val; } const double mean_value = S/siz, @@ -16129,9 +20279,10 @@ xM = 0, yM = 0, zM = 0, cM = 0; contains(*pm,xm,ym,zm,cm); contains(*pM,xM,yM,zM,cM); - return CImg(1,12).fill((double)m,(double)M,mean_value,variance_value, + return CImg(1,14).fill((double)m,(double)M,mean_value,variance_value, (double)xm,(double)ym,(double)zm,(double)cm, - (double)xM,(double)yM,(double)zM,(double)cM); + (double)xM,(double)yM,(double)zM,(double)cM, + S,P); } //! Compute statistics vector from the pixel values \inplace. @@ -16281,8 +20432,10 @@ CImg get_tensor_at(const unsigned int x, const unsigned int y=0, const unsigned int z=0) const { const T *ptrs = data(x,y,z,0); const unsigned long whd = (unsigned long)_width*_height*_depth; - if (_spectrum==6) return tensor(*ptrs,*(ptrs+whd),*(ptrs+2*whd),*(ptrs+3*whd),*(ptrs+4*whd),*(ptrs+5*whd)); - if (_spectrum==3) return tensor(*ptrs,*(ptrs+whd),*(ptrs+2*whd)); + if (_spectrum==6) + return tensor(*ptrs,*(ptrs + whd),*(ptrs + 2*whd),*(ptrs + 3*whd),*(ptrs + 4*whd),*(ptrs + 5*whd)); + if (_spectrum==3) + return tensor(*ptrs,*(ptrs + whd),*(ptrs + 2*whd)); return tensor(*ptrs); } @@ -16540,7 +20693,7 @@ Tfloat *const lapA = new Tfloat[N*N], *const WORK = new Tfloat[LWORK]; - cimg_forXY(*this,k,l) lapA[k*N+l] = (Tfloat)((*this)(k,l)); + cimg_forXY(*this,k,l) lapA[k*N + l] = (Tfloat)((*this)(k,l)); cimg::getrf(N,lapA,IPIV,INFO); if (INFO) cimg::warn(_cimg_instance @@ -16555,7 +20708,7 @@ cimg_instance, INFO); } - if (!INFO) cimg_forXY(*this,k,l) (*this)(k,l) = (T)(lapA[k*N+l]); else fill(0); + if (!INFO) cimg_forXY(*this,k,l) (*this)(k,l) = (T)(lapA[k*N + l]); else fill(0); delete[] IPIV; delete[] lapA; delete[] WORK; #else const double dete = _width>3?-1.0:det(); @@ -16648,7 +20801,7 @@ *const lapA = new Ttfloat[N*N], *const lapB = new Ttfloat[N], *const WORK = new Ttfloat[LWORK]; - cimg_forXY(A,k,l) lapA[k*N+l] = (Ttfloat)(A(k,l)); + cimg_forXY(A,k,l) lapA[k*N + l] = (Ttfloat)(A(k,l)); cimg_forY(*this,i) lapB[i] = (Ttfloat)((*this)(i)); cimg::getrf(N,lapA,IPIV,INFO); if (INFO) @@ -16685,8 +20838,8 @@ cimg::sgels(TRANS, M, N, NRHS, lapA, LDA, lapB, LDB, &WORK_QUERY, LWORK, INFO); LWORK = (int) WORK_QUERY; Ttfloat *const WORK = new Ttfloat[LWORK]; - cimg_forXY(A,k,l) lapA[k*M+l] = (Ttfloat)(A(k,l)); - cimg_forXY(*this,k,l) lapB[k*M+l] = (Ttfloat)((*this)(k,l)); + cimg_forXY(A,k,l) lapA[k*M + l] = (Ttfloat)(A(k,l)); + cimg_forXY(*this,k,l) lapB[k*M + l] = (Ttfloat)((*this)(k,l)); cimg::sgels(TRANS, M, N, NRHS, lapA, LDA, lapB, LDB, WORK, LWORK, INFO); if (INFO != 0) cimg::warn(_cimg_instance @@ -16694,8 +20847,8 @@ cimg_instance, INFO); assign(NRHS, N); - if (!INFO != 0) - cimg_forXY(*this,k,l) (*this)(k,l) = (T)lapB[k*M+l]; + if (!INFO) + cimg_forXY(*this,k,l) (*this)(k,l) = (T)lapB[k*M + l]; else assign(A.get_pseudoinvert()*(*this)); delete[] lapA; delete[] lapB; delete[] WORK; @@ -16722,7 +20875,7 @@ const int ip = (int)indx[i]; Ttfloat sum = (*this)(ip); (*this)(ip) = (*this)(i); - if (ii>=0) for (int j = ii; j<=i-1; ++j) sum-=A(j,i)*(*this)(j); + if (ii>=0) for (int j = ii; j<=i - 1; ++j) sum-=A(j,i)*(*this)(j); else if (sum!=0) ii = i; (*this)(i) = (T)sum; } @@ -16754,12 +20907,12 @@ const Ttfloat epsilon = 1e-4f; CImg B = A.get_column(1), V(*this,false); for (int i = 1; i<(int)siz; ++i) { - const Ttfloat m = A(0,i)/(B[i-1]?B[i-1]:epsilon); - B[i] -= m*A(2,i-1); - V[i] -= m*V[i-1]; + const Ttfloat m = A(0,i)/(B[i - 1]?B[i - 1]:epsilon); + B[i] -= m*A(2,i - 1); + V[i] -= m*V[i - 1]; } - (*this)[siz-1] = (T)(V[siz-1]/(B[siz-1]?B[siz-1]:epsilon)); - for (int i = (int)siz - 2; i>=0; --i) (*this)[i] = (T)((V[i] - A(2,i)*(*this)[i+1])/(B[i]?B[i]:epsilon)); + (*this)[siz - 1] = (T)(V[siz - 1]/(B[siz - 1]?B[siz - 1]:epsilon)); + for (int i = (int)siz - 2; i>=0; --i) (*this)[i] = (T)((V[i] - A(2,i)*(*this)[i + 1])/(B[i]?B[i]:epsilon)); return *this; } @@ -16772,7 +20925,7 @@ //! Compute eigenvalues and eigenvectors of the instance image, viewed as a matrix. /** \param[out] val Vector of the estimated eigenvalues, in decreasing order. - \param[out] vec Matrix of the estimated eigenvalues, sorted by columns. + \param[out] vec Matrix of the estimated eigenvectors, sorted by columns. **/ template const CImg& eigen(CImg& val, CImg &vec) const { @@ -16828,7 +20981,7 @@ //! Compute eigenvalues and eigenvectors of the instance image, viewed as a symmetric matrix. /** \param[out] val Vector of the estimated eigenvalues, in decreasing order. - \param[out] vec Matrix of the estimated eigenvalues, sorted by columns. + \param[out] vec Matrix of the estimated eigenvectors, sorted by columns. **/ template const CImg& symmetric_eigen(CImg& val, CImg& vec) const { @@ -16841,7 +20994,7 @@ *const lapA = new Tfloat[N*N], *const lapW = new Tfloat[N], *const WORK = new Tfloat[LWORK]; - cimg_forXY(*this,k,l) lapA[k*N+l] = (Tfloat)((*this)(k,l)); + cimg_forXY(*this,k,l) lapA[k*N + l] = (Tfloat)((*this)(k,l)); cimg::syev(JOB,UPLO,N,lapA,lapW,WORK,LWORK,INFO); if (INFO) cimg::warn(_cimg_instance @@ -16852,8 +21005,8 @@ val.assign(1,N); vec.assign(N,N); if (!INFO) { - cimg_forY(val,i) val(i) = (T)lapW[N-1-i]; - cimg_forXY(vec,k,l) vec(k,l) = (T)(lapA[(N-1-k)*N+l]); + cimg_forY(val,i) val(i) = (T)lapW[N - 1 -i]; + cimg_forXY(vec,k,l) vec(k,l) = (T)(lapA[(N - 1 - k)*N + l]); } else { val.fill(0); vec.fill(0); } delete[] lapA; delete[] lapW; delete[] WORK; #else @@ -16921,7 +21074,7 @@ permutations.assign(_width,_height,_depth,_spectrum); if (is_empty()) return *this; cimg_foroff(permutations,off) permutations[off] = (t)off; - return _quicksort(0,size()-1,permutations,is_increasing,true); + return _quicksort(0,size() - 1,permutations,is_increasing,true); } //! Sort pixel values and get sorting permutations \newinstance. @@ -16945,29 +21098,29 @@ CImg perm; switch (cimg::uncase(axis)) { case 0 : - _quicksort(0,size()-1,perm,is_increasing,false); + _quicksort(0,size() - 1,perm,is_increasing,false); break; case 'x' : { perm.assign(_width); - get_crop(0,0,0,0,_width-1,0,0,0).sort(perm,is_increasing); + get_crop(0,0,0,0,_width - 1,0,0,0).sort(perm,is_increasing); CImg img(*this,false); cimg_forXYZC(*this,x,y,z,c) (*this)(x,y,z,c) = img(perm[x],y,z,c); } break; case 'y' : { perm.assign(_height); - get_crop(0,0,0,0,0,_height-1,0,0).sort(perm,is_increasing); + get_crop(0,0,0,0,0,_height - 1,0,0).sort(perm,is_increasing); CImg img(*this,false); cimg_forXYZC(*this,x,y,z,c) (*this)(x,y,z,c) = img(x,perm[y],z,c); } break; case 'z' : { perm.assign(_depth); - get_crop(0,0,0,0,0,0,_depth-1,0).sort(perm,is_increasing); + get_crop(0,0,0,0,0,0,_depth - 1,0).sort(perm,is_increasing); CImg img(*this,false); cimg_forXYZC(*this,x,y,z,c) (*this)(x,y,z,c) = img(x,y,perm[z],c); } break; case 'c' : { perm.assign(_spectrum); - get_crop(0,0,0,0,0,0,0,_spectrum-1).sort(perm,is_increasing); + get_crop(0,0,0,0,0,0,0,_spectrum - 1).sort(perm,is_increasing); CImg img(*this,false); cimg_forXYZC(*this,x,y,z,c) (*this)(x,y,z,c) = img(x,y,z,perm[c]); } break; @@ -17081,49 +21234,49 @@ int l = 0, nm = 0; cimg_forX(U,i) { - l = i+1; rv1[i] = scale*g; g = s = scale = 0; + l = i + 1; rv1[i] = scale*g; g = s = scale = 0; if (i=0?-1:1)*std::sqrt(s)); h=f*g-s; U(i,i) = f-g; for (int j = l; j=0?-1:1)*std::sqrt(s)); h = f*g-s; U(l,i) = f-g; for (int k = l; k=0; --i) { + for (int i = width() - 1; i>=0; --i) { if (i=0; --i) { - l = i+1; g = S[i]; + for (int i = cimg::min(width(),height()) - 1; i>=0; --i) { + l = i + 1; g = S[i]; for (int j = l; j=0; --k) { + for (int k = width() - 1; k>=0; --k) { for (unsigned int its = 0; its=1; --l) { - nm = l-1; - if ((cimg::abs(rv1[l])+anorm)==anorm) { flag = false; break; } - if ((cimg::abs(S[nm])+anorm)==anorm) break; + nm = l - 1; + if ((cimg::abs(rv1[l]) + anorm)==anorm) { flag = false; break; } + if ((cimg::abs(S[nm]) + anorm)==anorm) break; } if (flag) { c = 0; s = 1; for (int i = l; i<=k; ++i) { f = s*rv1[i]; rv1[i] = c*rv1[i]; - if ((cimg::abs(f)+anorm)==anorm) break; + if ((cimg::abs(f) + anorm)==anorm) break; g = S[i]; h = (t)cimg::_pythagore(f,g); S[i] = h; h = 1/h; c = g*h; s = -f*h; cimg_forY(U,j) { const t y = U(nm,j), z = U(i,j); U(nm,j) = y*c + z*s; U(i,j) = z*c - y*s; } } @@ -17166,24 +21319,24 @@ const t z = S[k]; if (l==k) { if (z<0) { S[k] = -z; cimg_forX(U,j) V(k,j) = -V(k,j); } break; } - nm = k-1; + nm = k - 1; t x = S[l], y = S[nm]; g = rv1[nm]; h = rv1[k]; - f = ((y-z)*(y+z)+(g-h)*(g+h))/cimg::max((t)1e-25,2*h*y); + f = ((y - z)*(y + z)+(g - h)*(g + h))/cimg::max((t)1e-25,2*h*y); g = (t)cimg::_pythagore(f,1.0); - f = ((x-z)*(x+z)+h*((y/(f + (f>=0?g:-g)))-h))/cimg::max((t)1e-25,x); + f = ((x - z)*(x + z)+h*((y/(f + (f>=0?g:-g))) - h))/cimg::max((t)1e-25,x); c = s = 1; for (int j = l; j<=nm; ++j) { - const int i = j+1; + const int i = j + 1; g = rv1[i]; h = s*g; g = c*g; t y = S[i]; t z = (t)cimg::_pythagore(f,h); rv1[j] = z; c = f/cimg::max((t)1e-25,z); s = h/cimg::max((t)1e-25,z); - f = x*c+g*s; g = g*c-x*s; h = y*s; y*=c; + f = x*c + g*s; g = g*c - x*s; h = y*s; y*=c; cimg_forX(U,jj) { const t x = V(j,jj), z = V(i,jj); V(j,jj) = x*c + z*s; V(i,jj) = z*c - x*s; } z = (t)cimg::_pythagore(f,h); S[j] = z; if (z) { z = 1/cimg::max((t)1e-25,z); c = f*z; s = h*z; } - f = c*g+s*y; x = c*y-s*g; + f = c*g + s*y; x = c*y - s*g; cimg_forY(U,jj) { const t y = U(j,jj); z = U(i,jj); U(j,jj) = y*c + z*s; U(i,jj) = z*c - y*s; } } rv1[l] = 0; rv1[k]=f; S[k]=x; @@ -17259,7 +21412,7 @@ if ((*this)(j,j)==0) (*this)(j,j) = (T)1e-20; if (jdist(Q(left))) || + ((right=2*(pos + 1),(left=right - 1))dist(Q(left))) || (rightdist(Q(right)));) { if (right string(const char *const str, const bool is_last_zero=true, const bool is_shared=false) { if (!str) return CImg(); - return CImg(str,(unsigned int)std::strlen(str)+(is_last_zero?1:0),1,1,1,is_shared); + return CImg(str,(unsigned int)std::strlen(str) + (is_last_zero?1:0),1,1,1,is_shared); } //! Return a \c 1x1 image containing specified value. @@ -17727,9 +21880,9 @@ else { X = Y = Z = 0; W = 1; } } const float xx = X*X, xy = X*Y, xz = X*Z, xw = X*W, yy = Y*Y, yz = Y*Z, yw = Y*W, zz = Z*Z, zw = Z*W; - return CImg::matrix((T)(1-2*(yy+zz)), (T)(2*(xy+zw)), (T)(2*(xz-yw)), - (T)(2*(xy-zw)), (T)(1-2*(xx+zz)), (T)(2*(yz+xw)), - (T)(2*(xz+yw)), (T)(2*(yz-xw)), (T)(1-2*(xx+yy))); + return CImg::matrix((T)(1 - 2*(yy + zz)), (T)(2*(xy + zw)), (T)(2*(xz - yw)), + (T)(2*(xy - zw)), (T)(1 - 2*(xx + zz)), (T)(2*(yz + xw)), + (T)(2*(xz + yw)), (T)(2*(yz - xw)), (T)(1 - 2*(xx + yy))); } //@} @@ -17762,9 +21915,9 @@ **/ CImg& fill(const T& val0, const T& val1) { if (is_empty()) return *this; - T *ptrd, *ptre = end()-1; + T *ptrd, *ptre = end() - 1; for (ptrd = _data; ptrd& fill(const T& val0, const T& val1, const T& val2) { if (is_empty()) return *this; - T *ptrd, *ptre = end()-2; + T *ptrd, *ptre = end() - 2; for (ptrd = _data; ptrd& fill(const T& val0, const T& val1, const T& val2, const T& val3) { if (is_empty()) return *this; - T *ptrd, *ptre = end()-3; + T *ptrd, *ptre = end() - 3; for (ptrd = _data; ptrd& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4) { if (is_empty()) return *this; - T *ptrd, *ptre = end()-4; + T *ptrd, *ptre = end() - 4; for (ptrd = _data; ptrd& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5) { if (is_empty()) return *this; - T *ptrd, *ptre = end()-5; + T *ptrd, *ptre = end() - 5; for (ptrd = _data; ptrd& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, const T& val6) { if (is_empty()) return *this; - T *ptrd, *ptre = end()-6; + T *ptrd, *ptre = end() - 6; for (ptrd = _data; ptrd& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, const T& val6, const T& val7) { if (is_empty()) return *this; - T *ptrd, *ptre = end()-7; + T *ptrd, *ptre = end() - 7; for (ptrd = _data; ptrd& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, const T& val6, const T& val7, const T& val8) { if (is_empty()) return *this; - T *ptrd, *ptre = end()-8; + T *ptrd, *ptre = end() - 8; for (ptrd = _data; ptrd& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, const T& val6, const T& val7, const T& val8, const T& val9) { if (is_empty()) return *this; - T *ptrd, *ptre = end()-9; + T *ptrd, *ptre = end() - 9; for (ptrd = _data; ptrd& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, const T& val6, const T& val7, const T& val8, const T& val9, const T& val10) { if (is_empty()) return *this; - T *ptrd, *ptre = end()-10; + T *ptrd, *ptre = end() - 10; for (ptrd = _data; ptrd& fill(const T& val0, const T& val1, const T& val2, const T& val3, const T& val4, const T& val5, const T& val6, const T& val7, const T& val8, const T& val9, const T& val10, const T& val11) { if (is_empty()) return *this; - T *ptrd, *ptre = end()-11; + T *ptrd, *ptre = end() - 11; for (ptrd = _data; ptrd& fill(const char *const expression, const bool repeat_values, const bool allow_formula=true) { + CImg& fill(const char *const expression, const bool repeat_values, const bool allow_formula=true, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) { + return _fill(expression,repeat_values,allow_formula,list_inputs,list_outputs,"fill",0); + } + + CImg& _fill(const char *const expression, const bool repeat_values, const bool allow_formula, + const CImgList *const list_inputs, CImgList *const list_outputs, + const char *const calling_function, const CImg *provide_base) { if (is_empty() || !expression || !*expression) return *this; const unsigned int omode = cimg::exception_mode(); cimg::exception_mode(0); CImg is_error; - if (allow_formula) try { // Try to fill values according to a formula. - const CImg _base = cimg::_is_self_expr(expression)?+*this:CImg(), &base = _base?_base:*this; - _cimg_math_parser mp(base,expression+(*expression=='>' || *expression=='<'?1:0),"fill"); - T *ptrd = *expression=='<'?end()-1:_data; - if (*expression=='<') cimg_rofXYZC(*this,x,y,z,c) *(ptrd--) = (T)mp(x,y,z,c); - else if (*expression=='>') cimg_forXYZC(*this,x,y,z,c) *(ptrd++) = (T)mp(x,y,z,c); - else { + if (allow_formula) try { // Try to fill values according to a formula + bool is_parallelizable = true; + const CImg + _base = _cimg_math_parser::needs_input_copy(expression,is_parallelizable)? + (provide_base?*provide_base:+*this):CImg(), + &base = provide_base?*provide_base:_base?_base:*this; + _cimg_math_parser mp(expression + (*expression=='>' || *expression=='<' || *expression=='*'?1:0), + calling_function,base,this,list_inputs,list_outputs); + bool do_in_parallel = false; +#ifdef cimg_use_openmp + cimg_openmp_if(*expression=='*' || + (is_parallelizable && _width>=320 && _height*_depth*_spectrum>=2 && + std::strlen(expression)>=6)) + do_in_parallel = true; +#endif + if (mp.result_dim) { // Vector-valued expression + const unsigned int N = cimg::min(mp.result_dim,_spectrum); + const unsigned long whd = _width*_height*_depth; + T *ptrd = *expression=='<'?_data + _width*_height*_depth - 1:_data; + if (*expression=='<') { + CImg res(1,mp.result_dim); + cimg_rofXYZ(*this,x,y,z) { + mp(x,y,z,0,res._data); + const double *ptrs = res._data; + T *_ptrd = ptrd--; for (unsigned int n = N; n>0; --n) { *_ptrd = (T)(*ptrs++); _ptrd+=whd; } + } + } else if (*expression=='>' || !do_in_parallel) { + CImg res(1,mp.result_dim); + cimg_forXYZ(*this,x,y,z) { + mp(x,y,z,0,res._data); + const double *ptrs = res._data; + T *_ptrd = ptrd++; for (unsigned int n = N; n>0; --n) { *_ptrd = (T)(*ptrs++); _ptrd+=whd; } + } + } else { #ifdef cimg_use_openmp - if (_width>=512 && _height*_depth*_spectrum>=2 && std::strlen(expression)>=6) #pragma omp parallel - { - _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; -#pragma omp for collapse(3) - cimg_forYZC(*this,y,z,c) { - T *ptrd = data(0,y,z,c); - cimg_forX(*this,x) *ptrd++ = (T)lmp(x,y,z,c); + { + _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; +#pragma omp for collapse(2) + cimg_forYZ(*this,y,z) { + CImg res(1,lmp.result_dim); + T *ptrd = data(0,y,z,0); + cimg_forX(*this,x) { + lmp(x,y,z,0,res._data); + const double *ptrs = res._data; + T *_ptrd = ptrd++; for (unsigned int n = N; n>0; --n) { *_ptrd = (T)(*ptrs++); _ptrd+=whd; } + } + } } +#endif } - else + + } else { // Scalar-valued expression + T *ptrd = *expression=='<'?end() - 1:_data; + if (*expression=='<') + cimg_rofXYZC(*this,x,y,z,c) *(ptrd--) = (T)mp(x,y,z,c); + else if (*expression=='>' || !do_in_parallel) + cimg_forXYZC(*this,x,y,z,c) *(ptrd++) = (T)mp(x,y,z,c); + else { +#ifdef cimg_use_openmp +#pragma omp parallel + { + _cimg_math_parser _mp = omp_get_thread_num()?mp:_cimg_math_parser(), &lmp = omp_get_thread_num()?_mp:mp; +#pragma omp for collapse(3) + cimg_forYZC(*this,y,z,c) { + T *ptrd = data(0,y,z,c); + cimg_forX(*this,x) *ptrd++ = (T)lmp(x,y,z,c); + } + } #endif - cimg_forXYZC(*this,x,y,z,c) *(ptrd++) = (T)mp(x,y,z,c); - } - } catch (CImgException& e) { CImg::string(e._message).move_to(is_error); } + } + } + } catch (CImgException& e) { CImg::string(e._message).move_to(is_error); } // If failed, try to recognize a list of values. if (!allow_formula || is_error) { @@ -18232,11 +22444,10 @@ unsigned long nb = 0; const unsigned long siz = size(); T *ptrd = _data; - *item = 0; for (double val = 0; *nexpression && nb0 && std::sscanf(item,"%lf",&val)==1 && (sep==',' || sep==';' || err==1)) { + const int err = cimg_sscanf(nexpression,"%16383[ \n\t0-9.eEinfa+-]%c",item,&sep); + if (err>0 && cimg_sscanf(item,"%lf",&val)==1 && (sep==',' || sep==';' || err==1)) { nexpression+=std::strlen(item) + (err>1?1:0); *(ptrd++) = (T)val; } else break; @@ -18246,8 +22457,8 @@ if (nb get_fill(const char *const values, const bool repeat_values, const bool allow_formula=true) const { - return (+*this).fill(values,repeat_values,allow_formula); + CImg get_fill(const char *const expression, const bool repeat_values, const bool allow_formula=true, + const CImgList *const list_inputs=0, CImgList *const list_outputs=0) const { + return (+*this).fill(expression,repeat_values,allow_formula,list_inputs,list_outputs); } //! Fill sequentially pixel values according to the values found in another image. @@ -18395,10 +22607,10 @@ if ((*this)(i)!=(T)values[j]) { if (j) --i; res.draw_image(k,get_columns(i0,i)); - k+=i-i0+1; i0 = i+1; j = 0; - } else { ++j; if (j>=vsiz) { j = 0; i0 = i+1; } } + k+=i - i0 + 1; i0 = i + 1; j = 0; + } else { ++j; if (j>=vsiz) { j = 0; i0 = i + 1; } } } - if (i0=vsiz) { j = 0; i0 = i+1; } } + k+=i - i0 + 1; i0 = i + 1; j = 0; + } else { ++j; if (j>=vsiz) { j = 0; i0 = i + 1; } } } - if (i0=vsiz) { j = 0; i0 = i+1; } } + k+=i - i0 + 1; i0 = i + 1; j = 0; + } else { ++j; if (j>=vsiz) { j = 0; i0 = i + 1; } } } - if (i0=vsiz) { j = 0; i0 = i+1; } } + k+=i - i0 + 1; i0 = i + 1; j = 0; + } else { ++j; if (j>=vsiz) { j = 0; i0 = i + 1; } } } - if (i0=vsiz) { j = 0; i0 = (int)i + 1; }} } const unsigned long siz = size(); - if ((unsigned long)i0& rand(const T& val_min, const T& val_max) { const float delta = (float)val_max - (float)val_min + (cimg::type::is_float()?0:1); @@ -18537,7 +22749,7 @@ CImg& round(const double y=1, const int rounding_type=0) { if (y>0) #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=8192) +#pragma omp parallel for cimg_openmp_if (size()>=8192) #endif cimg_rof(*this,ptrd,T) *ptrd = cimg::round(*ptrd,y,rounding_type); return *this; @@ -18567,59 +22779,56 @@ \image html ref_noise.jpg **/ CImg& noise(const double sigma, const unsigned int noise_type=0) { - if (!is_empty()) { - const Tfloat vmin = (Tfloat)cimg::type::min(), vmax = (Tfloat)cimg::type::max(); - Tfloat nsigma = (Tfloat)sigma, m = 0, M = 0; - if (nsigma==0 && noise_type!=3) return *this; - if (nsigma<0 || noise_type==2) m = (Tfloat)min_max(M); - if (nsigma<0) nsigma = (Tfloat)(-nsigma*(M-m)/100.0); - switch (noise_type) { - case 0 : { // Gaussian noise - cimg_rof(*this,ptrd,T) { - Tfloat val = (Tfloat)(*ptrd + nsigma*cimg::grand()); - if (val>vmax) val = vmax; - if (valvmax) val = vmax; - if (val::is_float()?1:cimg::type::max()); } - cimg_rof(*this,ptrd,T) if (cimg::rand()*100vmax) val = vmax; - if (val::min(), vmax = (Tfloat)cimg::type::max(); + Tfloat nsigma = (Tfloat)sigma, m = 0, M = 0; + if (nsigma==0 && noise_type!=3) return *this; + if (nsigma<0 || noise_type==2) m = (Tfloat)min_max(M); + if (nsigma<0) nsigma = (Tfloat)(-nsigma*(M-m)/100.0); + switch (noise_type) { + case 0 : { // Gaussian noise + cimg_rof(*this,ptrd,T) { + Tfloat val = (Tfloat)(*ptrd + nsigma*cimg::grand()); + if (val>vmax) val = vmax; + if (valvmax) val = vmax; + if (val::is_float()?1:cimg::type::max()); } + cimg_rof(*this,ptrd,T) if (cimg::rand(100)vmax) val = vmax; + if (val=65536) +#pragma omp parallel for cimg_openmp_if (size()>=65536) #endif - cimg_rof(*this,ptrd,T) *ptrd = (T)((*ptrd-fm)/(fM-fm)*(b-a)+a); + cimg_rof(*this,ptrd,T) *ptrd = (T)((*ptrd - fm)/(fM - fm)*(b - a) + a); return *this; } @@ -18693,9 +22902,9 @@ return CImg(*this,false).normalize(); } - //! Compute L2-norm of each multi-valued pixel of the image instance. + //! Compute Lp-norm of each multi-valued pixel of the image instance. /** - \param norm_type Type of computed vector norm (can be \p 0=Linf, \p 1=L1 or \p 2=L2). + \param norm_type Type of computed vector norm (can be \p -1=Linf, or \p>=0). \par Example \code const CImg img("reference.jpg"), res = img.get_norm(); @@ -18704,18 +22913,18 @@ \image html ref_norm.jpg **/ CImg& norm(const int norm_type=2) { - if (_spectrum==1) return abs(); + if (_spectrum==1 && norm_type) return abs(); return get_norm(norm_type).move_to(*this); } //! Compute L2-norm of each multi-valued pixel of the image instance \newinstance. CImg get_norm(const int norm_type=2) const { if (is_empty()) return *this; - if (_spectrum==1) return get_abs(); + if (_spectrum==1 && norm_type) return get_abs(); const unsigned long whd = (unsigned long)_width*_height*_depth; CImg res(_width,_height,_depth); switch (norm_type) { - case -1 : { // Linf norm + case -1 : { // Linf-norm. #ifdef cimg_use_openmp #pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) #endif @@ -18731,7 +22940,23 @@ } } } break; - case 1 : { // L1 norm + case 0 : { // L0-norm. +#ifdef cimg_use_openmp +#pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) +#endif + cimg_forYZ(*this,y,z) { + const unsigned long off = (unsigned long)offset(0,y,z); + const T *ptrs = _data + off; + Tfloat *ptrd = res._data + off; + cimg_forX(*this,x) { + unsigned int n = 0; + const T *_ptrs = ptrs++; + cimg_forC(*this,c) { n+=*_ptrs==0?0:1; _ptrs+=whd; } + *(ptrd++) = (Tfloat)n; + } + } + } break; + case 1 : { // L1-norm. #ifdef cimg_use_openmp #pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) #endif @@ -18747,7 +22972,7 @@ } } } break; - default : { // L2 norm + case 2 : { // L2-norm. #ifdef cimg_use_openmp #pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) #endif @@ -18762,6 +22987,22 @@ *(ptrd++) = (Tfloat)std::sqrt((Tfloat)n); } } + } break; + default : { // Linf-norm. +#ifdef cimg_use_openmp +#pragma omp parallel for collapse(2) if (_width>=512 && _height*_depth>=16) +#endif + cimg_forYZ(*this,y,z) { + const unsigned long off = (unsigned long)offset(0,y,z); + const T *ptrs = _data + off; + Tfloat *ptrd = res._data + off; + cimg_forX(*this,x) { + Tfloat n = 0; + const T *_ptrs = ptrs++; + cimg_forC(*this,c) { n+=std::pow(cimg::abs((Tfloat)*_ptrs),(Tfloat)norm_type); _ptrs+=whd; } + *(ptrd++) = (Tfloat)std::pow((Tfloat)n,1/(Tfloat)norm_type); + } + } } } return res; @@ -18782,7 +23023,7 @@ if (is_empty()) return *this; const T a = min_value=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) *ptrd = (*ptrdb)?b:*ptrd); return *this; @@ -18815,18 +23056,18 @@ if (range>0) { if (keep_range) #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) { const unsigned int val = (unsigned int)((*ptrd-m)*nb_levels/range); - *ptrd = (T)(m + cimg::min(val,nb_levels-1)*range/nb_levels); + *ptrd = (T)(m + cimg::min(val,nb_levels - 1)*range/nb_levels); } else #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) { const unsigned int val = (unsigned int)((*ptrd-m)*nb_levels/range); - *ptrd = (T)cimg::min(val,nb_levels-1); + *ptrd = (T)cimg::min(val,nb_levels - 1); } } return *this; @@ -18854,25 +23095,29 @@ if (strict_threshold) { if (soft_threshold) #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif - cimg_rof(*this,ptrd,T) { const T v = *ptrd; *ptrd = v>value?(T)(v-value):v<-(float)value?(T)(v+value):(T)0; } + cimg_rof(*this,ptrd,T) { + const T v = *ptrd; + *ptrd = v>value?(T)(v-value):v<-(float)value?(T)(v + value):(T)0; + } else #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=65536) +#pragma omp parallel for cimg_openmp_if (size()>=65536) #endif cimg_rof(*this,ptrd,T) *ptrd = *ptrd>value?(T)1:(T)0; } else { if (soft_threshold) #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=32768) +#pragma omp parallel for cimg_openmp_if (size()>=32768) #endif cimg_rof(*this,ptrd,T) { - const T v = *ptrd; *ptrd = v>=value?(T)(v-value):v<=-(float)value?(T)(v+value):(T)0; + const T v = *ptrd; + *ptrd = v>=value?(T)(v-value):v<=-(float)value?(T)(v + value):(T)0; } else #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=65536) +#pragma omp parallel for cimg_openmp_if (size()>=65536) #endif cimg_rof(*this,ptrd,T) *ptrd = *ptrd>=value?(T)1:(T)0; } @@ -18920,7 +23165,7 @@ CImg res(nb_levels,1,1,1,0); cimg_rof(*this,ptrs,T) { const T val = *ptrs; - if (val>=vmin && val<=vmax) ++res[val==vmax?nb_levels-1:(unsigned int)((val-vmin)*nb_levels/(vmax-vmin))]; + if (val>=vmin && val<=vmax) ++res[val==vmax?nb_levels - 1:(unsigned int)((val - vmin)*nb_levels/(vmax - vmin))]; } return res; } @@ -18956,10 +23201,10 @@ cimg_forX(hist,pos) { cumul+=hist[pos]; hist[pos] = cumul; } if (!cumul) cumul = 1; #ifdef cimg_use_openmp -#pragma omp parallel for if (size()>=1048576) +#pragma omp parallel for cimg_openmp_if (size()>=1048576) #endif cimg_rof(*this,ptrd,T) { - const int pos = (int)((*ptrd-vmin)*(nb_levels-1.)/(vmax-vmin)); + const int pos = (int)((*ptrd-vmin)*(nb_levels - 1.)/(vmax-vmin)); if (pos>=0 && pos<(int)nb_levels) *ptrd = (T)(vmin + (vmax-vmin)*hist[pos]/cumul); } return *this; @@ -19024,14 +23269,14 @@ const float ndithering = (dithering<0?0:dithering>1?1:dithering)/16; Tfloat valm = 0, valM = (Tfloat)max_min(valm); if (valm==valM && valm>=0 && valM<=255) { valm = 0; valM = 255; } - CImg cache = get_crop(-1,0,0,0,_width,1,0,_spectrum-1); + CImg cache = get_crop(-1,0,0,0,_width,1,0,_spectrum - 1); Tfloat *cache_current = cache.data(1,0,0,0), *cache_next = cache.data(1,1,0,0); const unsigned long cwhd = (unsigned long)cache._width*cache._height*cache._depth; switch (_spectrum) { case 1 : { // Optimized for scalars. cimg_forYZ(*this,y,z) { - if (y=(long)pwhd?pwhd-1:ind]; + *ptrd = colormap[ind<0?0:ind>=(long)pwhd?pwhd - 1:ind]; } break; default : // Dirichlet boundaries. cimg_for(res,ptrd,t) { @@ -19358,7 +23603,7 @@ const t *const ptrp0 = colormap._data, *ptrp1 = ptrp0 + pwhd, *ptrp2 = ptrp1 + pwhd; t *ptrd0 = res._data, *ptrd1 = ptrd0 + whd, *ptrd2 = ptrd1 + whd; for (const T *ptrs = _data, *ptrs_end = ptrs + whd; ptrs=(long)pwhd?(long)pwhd-1:_ind; + const long _ind = (long)*(ptrs++), ind = _ind<0?0:_ind>=(long)pwhd?(long)pwhd - 1:_ind; *(ptrd0++) = ptrp0[ind]; *(ptrd1++) = ptrp1[ind]; *(ptrd2++) = ptrp2[ind]; } } break; @@ -19387,7 +23632,7 @@ case 1 : { // Neumann boundaries. t *ptrd = res._data; for (const T *ptrs = _data, *ptrs_end = ptrs + whd; ptrs=(long)pwhd?(long)pwhd-1:_ind; + const long _ind = (long)*(ptrs++), ind = _ind<0?0:_ind>=(long)pwhd?(long)pwhd - 1:_ind; const t *ptrp = colormap._data + ind; t *_ptrd = ptrd++; cimg_forC(res,c) { *_ptrd = *ptrp; _ptrd+=whd; ptrp+=pwhd; } } @@ -19546,7 +23791,7 @@ CImg& _system_strescape() { #define cimg_system_strescape(c,s) case c : if (p!=ptrs) CImg(ptrs,(unsigned int)(p-ptrs),1,1,1,false).\ move_to(list); \ - CImg(s,(unsigned int)std::strlen(s),1,1,1,false).move_to(list); ptrs = p+1; break + CImg(s,(unsigned int)std::strlen(s),1,1,1,false).move_to(list); ptrs = p + 1; break CImgList list; const T *ptrs = _data; cimg_for(*this,p,T) switch ((int)*p) { @@ -19730,7 +23975,7 @@ const Tfloat sval = (Tfloat)*ptr, nsval = (sval<0?0:sval>255?255:sval)/255, - val = (Tfloat)(nsval<=0.04045f?nsval/12.92f:std::pow((nsval+0.055f)/(1.055f),2.4f)); + val = (Tfloat)(nsval<=0.04045f?nsval/12.92f:std::pow((nsval + 0.055f)/(1.055f),2.4f)); *ptr = (T)(val*255); } return *this; @@ -19808,7 +24053,7 @@ T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { Tfloat - H = cimg::mod((Tfloat)*p1,360.0f), + H = cimg::mod((Tfloat)*p1,(Tfloat)360), S = (Tfloat)*p2, V = (Tfloat)*p3, R = 0, G = 0, B = 0; @@ -19871,7 +24116,7 @@ H = (i-f/(M-m)); if (H>=6) H-=6; H*=60; - S = (2*L<=1)?((M-m)/(M+m)):((M-m)/(2-M-m)); + S = (2*L<=1)?((M - m)/(M + m)):((M - m)/(2 - M - m)); } *(p1++) = (T)H; *(p2++) = (T)S; @@ -19895,21 +24140,21 @@ T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { const Tfloat - H = cimg::mod((Tfloat)*p1,360.0f), + H = cimg::mod((Tfloat)*p1,(Tfloat)360), S = (Tfloat)*p2, L = (Tfloat)*p3, - q = 2*L<1?L*(1+S):(L+S-L*S), - p = 2*L-q, + q = 2*L<1?L*(1 + S):(L + S - L*S), + p = 2*L - q, h = H/360, tr = h + 1.0f/3, tg = h, tb = h - 1.0f/3, - ntr = tr<0?tr+1:(tr>1?tr-1:tr), - ntg = tg<0?tg+1:(tg>1?tg-1:tg), - ntb = tb<0?tb+1:(tb>1?tb-1:tb), - R = 255*(6*ntr<1?p+(q-p)*6*ntr:(2*ntr<1?q:(3*ntr<2?p+(q-p)*6*(2.0f/3-ntr):p))), - G = 255*(6*ntg<1?p+(q-p)*6*ntg:(2*ntg<1?q:(3*ntg<2?p+(q-p)*6*(2.0f/3-ntg):p))), - B = 255*(6*ntb<1?p+(q-p)*6*ntb:(2*ntb<1?q:(3*ntb<2?p+(q-p)*6*(2.0f/3-ntb):p))); + ntr = tr<0?tr + 1:(tr>1?tr - 1:tr), + ntg = tg<0?tg + 1:(tg>1?tg - 1:tg), + ntb = tb<0?tb + 1:(tb>1?tb - 1:tb), + R = 255*(6*ntr<1?p + (q - p)*6*ntr:(2*ntr<1?q:(3*ntr<2?p + (q - p)*6*(2.0f/3 - ntr):p))), + G = 255*(6*ntg<1?p + (q - p)*6*ntg:(2*ntg<1?q:(3*ntg<2?p + (q - p)*6*(2.0f/3 - ntg):p))), + B = 255*(6*ntb<1?p + (q - p)*6*ntb:(2*ntb<1?q:(3*ntb<2?p + (q - p)*6*(2.0f/3 - ntb):p))); *(p1++) = (T)(R<0?0:(R>255?255:R)); *(p2++) = (T)(G<0?0:(G>255?255:G)); *(p3++) = (T)(B<0?0:(B>255?255:B)); @@ -19939,10 +24184,11 @@ nG = (G<0?0:(G>255?255:G))/255, nB = (B<0?0:(B>255?255:B))/255, m = cimg::min(nR,nG,nB), - theta = (Tfloat)(std::acos(0.5f*((nR-nG)+(nR-nB))/std::sqrt(std::pow(nR-nG,2)+(nR-nB)*(nG-nB)))*180/cimg::PI), + theta = (Tfloat)(std::acos(0.5f*((nR - nG) + (nR - nB))/ + std::sqrt(std::pow(nR - nG,2) + (nR - nB)*(nG - nB)))*180/cimg::PI), sum = nR + nG + nB; Tfloat H = 0, S = 0, I = 0; - if (theta>0) H = (nB<=nG)?theta:360-theta; + if (theta>0) H = (nB<=nG)?theta:360 - theta; if (sum>0) S = 1 - 3/sum*m; I = sum/3; *(p1++) = (T)H; @@ -19967,25 +24213,25 @@ T *p1 = data(0,0,0,0), *p2 = data(0,0,0,1), *p3 = data(0,0,0,2); for (unsigned long N = (unsigned long)_width*_height*_depth; N; --N) { Tfloat - H = cimg::mod((Tfloat)*p1,360.0f), + H = cimg::mod((Tfloat)*p1,(Tfloat)360), S = (Tfloat)*p2, I = (Tfloat)*p3, a = I*(1-S), R = 0, G = 0, B = 0; if (H<120) { B = a; - R = (Tfloat)(I*(1+S*std::cos(H*cimg::PI/180)/std::cos((60-H)*cimg::PI/180))); - G = 3*I-(R+B); + R = (Tfloat)(I*(1 + S*std::cos(H*cimg::PI/180)/std::cos((60 - H)*cimg::PI/180))); + G = 3*I - (R + B); } else if (H<240) { H-=120; R = a; - G = (Tfloat)(I*(1+S*std::cos(H*cimg::PI/180)/std::cos((60-H)*cimg::PI/180))); - B = 3*I-(R+G); + G = (Tfloat)(I*(1 + S*std::cos(H*cimg::PI/180)/std::cos((60 - H)*cimg::PI/180))); + B = 3*I - (R + G); } else { H-=240; G = a; - B = (Tfloat)(I*(1+S*std::cos(H*cimg::PI/180)/std::cos((60-H)*cimg::PI/180))); - R = 3*I-(G+B); + B = (Tfloat)(I*(1 + S*std::cos(H*cimg::PI/180)/std::cos((60 - H)*cimg::PI/180))); + R = 3*I - (G + B); } R*=255; G*=255; B*=255; *(p1++) = (T)(R<0?0:(R>255?255:R)); @@ -20287,7 +24533,7 @@ //! Convert pixel values from XYZ_709 to Lab color spaces. CImg& XYZtoLab() { -#define _cimg_Labf(x) ((x)>=0.008856f?(std::pow(x,(Tfloat)1/3)):(7.787f*(x)+16.0f/116)) +#define _cimg_Labf(x) ((x)>=0.008856f?(std::pow(x,(Tfloat)1/3)):(7.787f*(x) + 16.0f/116)) if (_spectrum!=3) throw CImgInstanceException(_cimg_instance @@ -20370,7 +24616,7 @@ X = (Tfloat)*p1, Y = (Tfloat)*p2, Z = (Tfloat)*p3, - sum = (X+Y+Z), + sum = X + Y + Z, nsum = sum>0?sum:1; *(p1++) = (T)(X/nsum); *(p2++) = (T)(Y/nsum); @@ -20400,7 +24646,7 @@ ny = py>0?py:1; *(p1++) = (T)(px*Y/ny); *(p2++) = (T)Y; - *(p3++) = (T)((1-px-py)*Y/ny); + *(p3++) = (T)((1 - px - py)*Y/ny); } return *this; } @@ -20568,7 +24814,7 @@ cc = (int)(centering_c*((int)sc - spectrum())); switch (boundary_conditions) { - case 2 : { // Periodic borders. + case 2 : { // Periodic boundary. res.assign(sx,sy,sz,sc); const int x0 = ((int)xc%width()) - width(), @@ -20584,43 +24830,45 @@ for (int x = x0; x<(int)sx; x+=width()) res.draw_image(x,y,z,c,*this); } break; - case 1 : { // Neumann borders. + case 1 : { // Neumann boundary. res.assign(sx,sy,sz,sc).draw_image(xc,yc,zc,cc,*this); CImg sprite; if (xc>0) { // X-backward - res.get_crop(xc,yc,zc,cc,xc,yc+height()-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); - for (int x = xc-1; x>=0; --x) res.draw_image(x,yc,zc,cc,sprite); + res.get_crop(xc,yc,zc,cc,xc,yc + height() - 1,zc + depth() - 1,cc + spectrum() - 1).move_to(sprite); + for (int x = xc - 1; x>=0; --x) res.draw_image(x,yc,zc,cc,sprite); } - if (xc+width()<(int)sx) { // X-forward - res.get_crop(xc+width()-1,yc,zc,cc,xc+width()-1,yc+height()-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); - for (int x = xc+width(); x<(int)sx; ++x) res.draw_image(x,yc,zc,cc,sprite); + if (xc + width()<(int)sx) { // X-forward + res.get_crop(xc + width() - 1,yc,zc,cc,xc + width() - 1,yc + height() - 1, + zc + depth() - 1,cc + spectrum() - 1).move_to(sprite); + for (int x = xc + width(); x<(int)sx; ++x) res.draw_image(x,yc,zc,cc,sprite); } if (yc>0) { // Y-backward - res.get_crop(0,yc,zc,cc,sx-1,yc,zc+depth()-1,cc+spectrum()-1).move_to(sprite); - for (int y = yc-1; y>=0; --y) res.draw_image(0,y,zc,cc,sprite); + res.get_crop(0,yc,zc,cc,sx - 1,yc,zc + depth() - 1,cc + spectrum() - 1).move_to(sprite); + for (int y = yc - 1; y>=0; --y) res.draw_image(0,y,zc,cc,sprite); } - if (yc+height()<(int)sy) { // Y-forward - res.get_crop(0,yc+height()-1,zc,cc,sx-1,yc+height()-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); - for (int y = yc+height(); y<(int)sy; ++y) res.draw_image(0,y,zc,cc,sprite); + if (yc + height()<(int)sy) { // Y-forward + res.get_crop(0,yc + height() - 1,zc,cc,sx - 1,yc + height() - 1, + zc + depth() - 1,cc + spectrum() - 1).move_to(sprite); + for (int y = yc + height(); y<(int)sy; ++y) res.draw_image(0,y,zc,cc,sprite); } if (zc>0) { // Z-backward - res.get_crop(0,0,zc,cc,sx-1,sy-1,zc,cc+spectrum()-1).move_to(sprite); - for (int z = zc-1; z>=0; --z) res.draw_image(0,0,z,cc,sprite); + res.get_crop(0,0,zc,cc,sx - 1,sy - 1,zc,cc + spectrum() - 1).move_to(sprite); + for (int z = zc - 1; z>=0; --z) res.draw_image(0,0,z,cc,sprite); } - if (zc+depth()<(int)sz) { // Z-forward - res.get_crop(0,0,zc+depth()-1,cc,sx-1,sy-1,zc+depth()-1,cc+spectrum()-1).move_to(sprite); - for (int z = zc+depth(); z<(int)sz; ++z) res.draw_image(0,0,z,cc,sprite); + if (zc + depth()<(int)sz) { // Z-forward + res.get_crop(0,0,zc +depth() - 1,cc,sx - 1,sy - 1,zc + depth() - 1,cc + spectrum() - 1).move_to(sprite); + for (int z = zc + depth(); z<(int)sz; ++z) res.draw_image(0,0,z,cc,sprite); } if (cc>0) { // C-backward - res.get_crop(0,0,0,cc,sx-1,sy-1,sz-1,cc).move_to(sprite); - for (int c = cc-1; c>=0; --c) res.draw_image(0,0,0,c,sprite); + res.get_crop(0,0,0,cc,sx - 1,sy - 1,sz - 1,cc).move_to(sprite); + for (int c = cc - 1; c>=0; --c) res.draw_image(0,0,0,c,sprite); } - if (cc+spectrum()<(int)sc) { // C-forward - res.get_crop(0,0,0,cc+spectrum()-1,sx-1,sy-1,sz-1,cc+spectrum()-1).move_to(sprite); - for (int c = cc+spectrum(); c<(int)sc; ++c) res.draw_image(0,0,0,c,sprite); + if (cc + spectrum()<(int)sc) { // C-forward + res.get_crop(0,0,0,cc + spectrum() - 1,sx - 1,sy - 1,sz - 1,cc + spectrum() - 1).move_to(sprite); + for (int c = cc + spectrum(); c<(int)sc; ++c) res.draw_image(0,0,0,c,sprite); } } break; - default : // Dirichlet borders. + default : // Dirichlet boundary. res.assign(sx,sy,sz,sc,0).draw_image(xc,yc,zc,cc,*this); } break; @@ -20630,7 +24878,7 @@ // case 1 : { res.assign(sx,sy,sz,sc); - CImg off_x(sx), off_y(sy+1), off_z(sz+1), off_c(sc+1); + CImg off_x(sx), off_y(sy + 1), off_z(sz + 1), off_c(sc + 1); const unsigned long wh = (unsigned long)_width*_height, whd = (unsigned long)_width*_height*_depth, @@ -20691,17 +24939,17 @@ cimg_forX(res,x) { *(ptrd++) = *ptrx; ptrx+=*(poff_x++); } ++y; unsigned long dy = *(poff_y++); - for (;!dy && ysx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); else { - const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width-1.0f)/(sx-1):0):(float)_width/sx; + const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width - 1.0f)/(sx - 1):0):(float)_width/sx; resx.assign(sx,_height,_depth,_spectrum); float curr = 0, old = 0; unsigned int *poff = off._data; @@ -20812,14 +25060,14 @@ #pragma omp parallel for collapse(3) if (resx.size()>=65536) #endif cimg_forYZC(resx,y,z,c) { - const T *ptrs = data(0,y,z,c), *const ptrsmax = ptrs + (_width-1); + const T *ptrs = data(0,y,z,c), *const ptrsmax = ptrs + _width - 1; T *ptrd = resx.data(0,y,z,c); const unsigned int *poff = off._data; const float *pfoff = foff._data; cimg_forX(resx,x) { const float alpha = *(pfoff++); - const T val1 = *ptrs, val2 = ptrssy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); else { - const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height-1.0f)/(sy-1):0):(float)_height/sy; + const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height - 1.0f)/(sy - 1):0): + (float)_height/sy; resy.assign(sx,sy,_depth,_spectrum); float curr = 0, old = 0; unsigned int *poff = off._data; @@ -20847,14 +25096,14 @@ #pragma omp parallel for collapse(3) if (resy.size()>=65536) #endif cimg_forXZC(resy,x,z,c) { - const T *ptrs = resx.data(x,0,z,c), *const ptrsmax = ptrs + (_height-1)*sx; + const T *ptrs = resx.data(x,0,z,c), *const ptrsmax = ptrs + (_height - 1)*sx; T *ptrd = resy.data(x,0,z,c); const unsigned int *poff = off._data; const float *pfoff = foff._data; cimg_forY(resy,y) { const float alpha = *(pfoff++); - const T val1 = *ptrs, val2 = ptrssz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); else { - const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth-1.0f)/(sz-1):0):(float)_depth/sz; + const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth - 1.0f)/(sz - 1):0):(float)_depth/sz; const unsigned int sxy = sx*sy; resz.assign(sx,sy,sz,_spectrum); float curr = 0, old = 0; @@ -20885,14 +25134,14 @@ #pragma omp parallel for collapse(3) if (resz.size()>=65536) #endif cimg_forXYC(resz,x,y,c) { - const T *ptrs = resy.data(x,y,0,c), *const ptrsmax = ptrs + (_depth-1)*sxy; + const T *ptrs = resy.data(x,y,0,c), *const ptrsmax = ptrs + (_depth - 1)*sxy; T *ptrd = resz.data(x,y,0,c); const unsigned int *poff = off._data; const float *pfoff = foff._data; cimg_forZ(resz,z) { const float alpha = *(pfoff++); - const T val1 = *ptrs, val2 = ptrssc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); else { - const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum-1.0f)/(sc-1):0): + const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum - 1.0f)/(sc - 1):0): (float)_spectrum/sc; const unsigned int sxyz = sx*sy*sz; resc.assign(sx,sy,sz,sc); @@ -20924,14 +25173,14 @@ #pragma omp parallel for collapse(3) if (resc.size()>=65536) #endif cimg_forXYZ(resc,x,y,z) { - const T *ptrs = resz.data(x,y,z,0), *const ptrsmax = ptrs + (_spectrum-1)*sxyz; + const T *ptrs = resz.data(x,y,z,0), *const ptrsmax = ptrs + (_spectrum - 1)*sxyz; T *ptrd = resc.data(x,y,z,0); const unsigned int *poff = off._data; const float *pfoff = foff._data; cimg_forC(resc,c) { const float alpha = *(pfoff++); - const T val1 = *ptrs, val2 = ptrssx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); else { - const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width-1.0f)/(sx-1):0):(float)_width/sx; + const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width - 1.0f)/(sx - 1):0):(float)_width/sx; resx.assign(sx,_height,_depth,_spectrum); float curr = 0, old = 0; unsigned int *poff = off._data; @@ -21037,7 +25286,7 @@ #pragma omp parallel for collapse(3) if (resx.size()>=65536) #endif cimg_forYZC(resx,y,z,c) { - const T *const ptrs0 = data(0,y,z,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_width-2); + const T *const ptrs0 = data(0,y,z,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_width - 2); T *ptrd = resx.data(0,y,z,c); const unsigned int *poff = off._data; const float *pfoff = foff._data; @@ -21045,11 +25294,11 @@ const float t = *(pfoff++); const Tfloat val1 = (Tfloat)*ptrs, - val0 = ptrs>ptrs0?(Tfloat)*(ptrs-1):val1, - val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+1):val1, - val3 = ptrsptrs0?(Tfloat)*(ptrs - 1):val1, + val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs + 1):val1, + val3 = ptrsvmax?vmax:val); ptrs+=*(poff++); } @@ -21063,7 +25312,8 @@ else { if (_height>sy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); else { - const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height-1.0f)/(sy-1):0):(float)_height/sy; + const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height - 1.0f)/(sy - 1):0): + (float)_height/sy; resy.assign(sx,sy,_depth,_spectrum); float curr = 0, old = 0; unsigned int *poff = off._data; @@ -21072,13 +25322,13 @@ *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fy; - *(poff++) = sx*((unsigned int)curr-(unsigned int)old); + *(poff++) = sx*((unsigned int)curr - (unsigned int)old); } #ifdef cimg_use_openmp #pragma omp parallel for collapse(3) if (resy.size()>=65536) #endif cimg_forXZC(resy,x,z,c) { - const T *const ptrs0 = resx.data(x,0,z,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_height-2)*sx; + const T *const ptrs0 = resx.data(x,0,z,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_height - 2)*sx; T *ptrd = resy.data(x,0,z,c); const unsigned int *poff = off._data; const float *pfoff = foff._data; @@ -21086,11 +25336,11 @@ const float t = *(pfoff++); const Tfloat val1 = (Tfloat)*ptrs, - val0 = ptrs>ptrs0?(Tfloat)*(ptrs-sx):val1, - val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sx):val1, - val3 = ptrsptrs0?(Tfloat)*(ptrs - sx):val1, + val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs + sx):val1, + val3 = ptrsvmax?vmax:val); ptrd+=sx; ptrs+=*(poff++); @@ -21106,7 +25356,7 @@ else { if (_depth>sz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); else { - const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth-1.0f)/(sz-1):0):(float)_depth/sz; + const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth - 1.0f)/(sz - 1):0):(float)_depth/sz; const unsigned int sxy = sx*sy; resz.assign(sx,sy,sz,_spectrum); float curr = 0, old = 0; @@ -21122,7 +25372,7 @@ #pragma omp parallel for collapse(3) if (resz.size()>=65536) #endif cimg_forXYC(resz,x,y,c) { - const T *const ptrs0 = resy.data(x,y,0,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_depth-2)*sxy; + const T *const ptrs0 = resy.data(x,y,0,c), *ptrs = ptrs0, *const ptrsmax = ptrs + (_depth - 2)*sxy; T *ptrd = resz.data(x,y,0,c); const unsigned int *poff = off._data; const float *pfoff = foff._data; @@ -21130,11 +25380,11 @@ const float t = *(pfoff++); const Tfloat val1 = (Tfloat)*ptrs, - val0 = ptrs>ptrs0?(Tfloat)*(ptrs-sxy):val1, - val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxy):val1, - val3 = ptrsptrs0?(Tfloat)*(ptrs - sxy):val1, + val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs + sxy):val1, + val3 = ptrsvmax?vmax:val); ptrd+=sxy; ptrs+=*(poff++); @@ -21150,7 +25400,7 @@ else { if (_spectrum>sc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); else { - const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum-1.0f)/(sc-1):0): + const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum - 1.0f)/(sc - 1):0): (float)_spectrum/sc; const unsigned int sxyz = sx*sy*sz; resc.assign(sx,sy,sz,sc); @@ -21167,7 +25417,7 @@ #pragma omp parallel for collapse(3) if (resc.size()>=65536) #endif cimg_forXYZ(resc,x,y,z) { - const T *const ptrs0 = resz.data(x,y,z,0), *ptrs = ptrs0, *const ptrsmax = ptrs + (_spectrum-2)*sxyz; + const T *const ptrs0 = resz.data(x,y,z,0), *ptrs = ptrs0, *const ptrsmax = ptrs + (_spectrum - 2)*sxyz; T *ptrd = resc.data(x,y,z,0); const unsigned int *poff = off._data; const float *pfoff = foff._data; @@ -21175,11 +25425,11 @@ const float t = *(pfoff++); const Tfloat val1 = (Tfloat)*ptrs, - val0 = ptrs>ptrs0?(Tfloat)*(ptrs-sxyz):val1, - val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxyz):val1, - val3 = ptrsptrs0?(Tfloat)*(ptrs - sxyz):val1, + val2 = ptrs<=ptrsmax?(Tfloat)*(ptrs + sxyz):val1, + val3 = ptrsvmax?vmax:val); ptrd+=sxyz; ptrs+=*(poff++); @@ -21206,7 +25456,7 @@ else { if (_width>sx) get_resize(sx,_height,_depth,_spectrum,2).move_to(resx); else { - const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width-1.0f)/(sx-1):0):(float)_width/sx; + const float fx = (!boundary_conditions && sx>_width)?(sx>1?(_width - 1.0f)/(sx - 1):0):(float)_width/sx; resx.assign(sx,_height,_depth,_spectrum); float curr = 0, old = 0; unsigned int *poff = off._data; @@ -21222,24 +25472,24 @@ #endif cimg_forYZC(resx,y,z,c) { const T *const ptrs0 = data(0,y,z,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + 1, - *const ptrsmax = ptrs0 + (_width-2); + *const ptrsmax = ptrs0 + (_width - 2); T *ptrd = resx.data(0,y,z,c); const unsigned int *poff = off._data; const float *pfoff = foff._data; cimg_forX(resx,x) { const float t = *(pfoff++), - w0 = _cimg_lanczos(t+2), - w1 = _cimg_lanczos(t+1), + w0 = _cimg_lanczos(t + 2), + w1 = _cimg_lanczos(t + 1), w2 = _cimg_lanczos(t), - w3 = _cimg_lanczos(t-1), - w4 = _cimg_lanczos(t-2); + w3 = _cimg_lanczos(t - 1), + w4 = _cimg_lanczos(t - 2); const Tfloat val2 = (Tfloat)*ptrs, - val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-1):val2, - val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2):val1, - val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+1):val2, - val4 = ptrs=ptrsmin?(Tfloat)*(ptrs - 1):val2, + val0 = ptrs>ptrsmin?(Tfloat)*(ptrs - 2):val1, + val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs + 1):val2, + val4 = ptrsvmax?vmax:val); ptrs+=*(poff++); @@ -21254,7 +25504,8 @@ else { if (_height>sy) resx.get_resize(sx,sy,_depth,_spectrum,2).move_to(resy); else { - const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height-1.0f)/(sy-1):0):(float)_height/sy; + const float fy = (!boundary_conditions && sy>_height)?(sy>1?(_height - 1.0f)/(sy - 1):0): + (float)_height/sy; resy.assign(sx,sy,_depth,_spectrum); float curr = 0, old = 0; unsigned int *poff = off._data; @@ -21263,31 +25514,31 @@ *(pfoff++) = curr - (unsigned int)curr; old = curr; curr+=fy; - *(poff++) = sx*((unsigned int)curr-(unsigned int)old); + *(poff++) = sx*((unsigned int)curr - (unsigned int)old); } #ifdef cimg_use_openmp #pragma omp parallel for collapse(3) if (resy.size()>=65536) #endif cimg_forXZC(resy,x,z,c) { const T *const ptrs0 = resx.data(x,0,z,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sx, - *const ptrsmax = ptrs0 + (_height-2)*sx; + *const ptrsmax = ptrs0 + (_height - 2)*sx; T *ptrd = resy.data(x,0,z,c); const unsigned int *poff = off._data; const float *pfoff = foff._data; cimg_forY(resy,y) { const float t = *(pfoff++), - w0 = _cimg_lanczos(t+2), - w1 = _cimg_lanczos(t+1), + w0 = _cimg_lanczos(t + 2), + w1 = _cimg_lanczos(t + 1), w2 = _cimg_lanczos(t), - w3 = _cimg_lanczos(t-1), - w4 = _cimg_lanczos(t-2); + w3 = _cimg_lanczos(t - 1), + w4 = _cimg_lanczos(t - 2); const Tfloat val2 = (Tfloat)*ptrs, - val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-sx):val2, - val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2*sx):val1, - val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sx):val2, - val4 = ptrs=ptrsmin?(Tfloat)*(ptrs - sx):val2, + val0 = ptrs>ptrsmin?(Tfloat)*(ptrs - 2*sx):val1, + val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs + sx):val2, + val4 = ptrsvmax?vmax:val); ptrd+=sx; @@ -21304,7 +25555,7 @@ else { if (_depth>sz) resy.get_resize(sx,sy,sz,_spectrum,2).move_to(resz); else { - const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth-1.0f)/(sz-1):0):(float)_depth/sz; + const float fz = (!boundary_conditions && sz>_depth)?(sz>1?(_depth - 1.0f)/(sz - 1):0):(float)_depth/sz; const unsigned int sxy = sx*sy; resz.assign(sx,sy,sz,_spectrum); float curr = 0, old = 0; @@ -21321,24 +25572,24 @@ #endif cimg_forXYC(resz,x,y,c) { const T *const ptrs0 = resy.data(x,y,0,c), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sxy, - *const ptrsmax = ptrs0 + (_depth-2)*sxy; + *const ptrsmax = ptrs0 + (_depth - 2)*sxy; T *ptrd = resz.data(x,y,0,c); const unsigned int *poff = off._data; const float *pfoff = foff._data; cimg_forZ(resz,z) { const float t = *(pfoff++), - w0 = _cimg_lanczos(t+2), - w1 = _cimg_lanczos(t+1), + w0 = _cimg_lanczos(t + 2), + w1 = _cimg_lanczos(t + 1), w2 = _cimg_lanczos(t), - w3 = _cimg_lanczos(t-1), - w4 = _cimg_lanczos(t-2); + w3 = _cimg_lanczos(t - 1), + w4 = _cimg_lanczos(t - 2); const Tfloat val2 = (Tfloat)*ptrs, - val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-sxy):val2, - val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2*sxy):val1, - val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxy):val2, - val4 = ptrs=ptrsmin?(Tfloat)*(ptrs - sxy):val2, + val0 = ptrs>ptrsmin?(Tfloat)*(ptrs - 2*sxy):val1, + val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs + sxy):val2, + val4 = ptrsvmax?vmax:val); ptrd+=sxy; @@ -21355,7 +25606,7 @@ else { if (_spectrum>sc) resz.get_resize(sx,sy,sz,sc,2).move_to(resc); else { - const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum-1.0f)/(sc-1):0): + const float fc = (!boundary_conditions && sc>_spectrum)?(sc>1?(_spectrum - 1.0f)/(sc - 1):0): (float)_spectrum/sc; const unsigned int sxyz = sx*sy*sz; resc.assign(sx,sy,sz,sc); @@ -21373,24 +25624,24 @@ #endif cimg_forXYZ(resc,x,y,z) { const T *const ptrs0 = resz.data(x,y,z,0), *ptrs = ptrs0, *const ptrsmin = ptrs0 + sxyz, - *const ptrsmax = ptrs + (_spectrum-2)*sxyz; + *const ptrsmax = ptrs + (_spectrum - 2)*sxyz; T *ptrd = resc.data(x,y,z,0); const unsigned int *poff = off._data; const float *pfoff = foff._data; cimg_forC(resc,c) { const float t = *(pfoff++), - w0 = _cimg_lanczos(t+2), - w1 = _cimg_lanczos(t+1), + w0 = _cimg_lanczos(t + 2), + w1 = _cimg_lanczos(t + 1), w2 = _cimg_lanczos(t), - w3 = _cimg_lanczos(t-1), - w4 = _cimg_lanczos(t-2); + w3 = _cimg_lanczos(t - 1), + w4 = _cimg_lanczos(t - 2); const Tfloat val2 = (Tfloat)*ptrs, - val1 = ptrs>=ptrsmin?(Tfloat)*(ptrs-sxyz):val2, - val0 = ptrs>ptrsmin?(Tfloat)*(ptrs-2*sxyz):val1, - val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs+sxyz):val2, - val4 = ptrs=ptrsmin?(Tfloat)*(ptrs - sxyz):val2, + val0 = ptrs>ptrsmin?(Tfloat)*(ptrs - 2*sxyz):val1, + val3 = ptrs<=ptrsmax?(Tfloat)*(ptrs + sxyz):val2, + val4 = ptrsvmax?vmax:val); ptrd+=sxyz; @@ -21482,11 +25733,10 @@ //! Resize image to half-size along XY axes, using an optimized filter \newinstance. CImg get_resize_halfXY() const { if (is_empty()) return *this; - const Tfloat mask[9] = { 0.07842776544f, 0.1231940459f, 0.07842776544f, - 0.1231940459f, 0.1935127547f, 0.1231940459f, - 0.07842776544f, 0.1231940459f, 0.07842776544f }; - T I[9] = { 0 }; - CImg res(_width/2,_height/2,_depth,_spectrum); + static const Tfloat mask[9] = { 0.07842776544f, 0.1231940459f, 0.07842776544f, + 0.1231940459f, 0.1935127547f, 0.1231940459f, + 0.07842776544f, 0.1231940459f, 0.07842776544f }; + CImg I(9), res(_width/2,_height/2,_depth,_spectrum); T *ptrd = res._data; cimg_forZC(*this,z,c) cimg_for3x3(*this,x,y,z,c,I,T) if (x%2 && y%2) *(ptrd++) = (T) @@ -21509,7 +25759,7 @@ CImg get_resize_doubleXY() const { #define _cimg_gs2x_for3(bound,i) \ for (int i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1; \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1; \ _n1##i<(int)(bound) || i==--_n1##i; \ _p1##i = i++, ++_n1##i, ptrd1+=(res)._width, ptrd2+=(res)._width) @@ -21520,7 +25770,7 @@ (I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \ (I[3] = I[4] = (T)(img)(0,y,z,c)), \ (I[7] = (T)(img)(0,_n1##y,z,c)), \ - 1>=(img)._width?(img).width()-1:1); \ + 1>=(img)._width?(img).width() - 1:1); \ (_n1##x<(img).width() && ( \ (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ (I[5] = (T)(img)(_n1##x,y,z,c)), \ @@ -21563,7 +25813,7 @@ CImg get_resize_tripleXY() const { #define _cimg_gs3x_for3(bound,i) \ for (int i = 0, _p1##i = 0, \ - _n1##i = 1>=(bound)?(int)(bound)-1:1; \ + _n1##i = 1>=(bound)?(int)(bound) - 1:1; \ _n1##i<(int)(bound) || i==--_n1##i; \ _p1##i = i++, ++_n1##i, ptrd1+=2*(res)._width, ptrd2+=2*(res)._width, ptrd3+=2*(res)._width) @@ -21574,7 +25824,7 @@ (I[0] = I[1] = (T)(img)(_p1##x,_p1##y,z,c)), \ (I[3] = I[4] = (T)(img)(0,y,z,c)), \ (I[6] = I[7] = (T)(img)(0,_n1##y,z,c)), \ - 1>=(img)._width?(img).width()-1:1); \ + 1>=(img)._width?(img).width() - 1:1); \ (_n1##x<(img).width() && ( \ (I[2] = (T)(img)(_n1##x,_p1##y,z,c)), \ (I[5] = (T)(img)(_n1##x,y,z,c)), \ @@ -21623,7 +25873,7 @@ T *pf, *pb, *buf = 0; switch (cimg::uncase(axis)) { case 'x' : { - pf = _data; pb = data(_width-1); + pf = _data; pb = data(_width - 1); const unsigned int width2 = _width/2; for (unsigned int yzv = 0; yzv<_height*_depth*_spectrum; ++yzv) { for (unsigned int x = 0; x=width()) return fill(0); if (delta_x<0) cimg_forYZC(*this,y,z,c) { - std::memmove(data(0,y,z,c),data(-delta_x,y,z,c),(_width+delta_x)*sizeof(T)); - std::memset(data(_width+delta_x,y,z,c),0,-delta_x*sizeof(T)); + std::memmove(data(0,y,z,c),data(-delta_x,y,z,c),(_width + delta_x)*sizeof(T)); + std::memset(data(_width + delta_x,y,z,c),0,-delta_x*sizeof(T)); } else cimg_forYZC(*this,y,z,c) { std::memmove(data(delta_x,y,z,c),data(0,y,z,c),(_width-delta_x)*sizeof(T)); std::memset(data(0,y,z,c),0,delta_x*sizeof(T)); @@ -21735,22 +25985,22 @@ break; case 1 : if (delta_x<0) { - const int ndelta_x = (-delta_x>=width())?width()-1:-delta_x; + const int ndelta_x = (-delta_x>=width())?width() - 1:-delta_x; if (!ndelta_x) return *this; cimg_forYZC(*this,y,z,c) { std::memmove(data(0,y,z,c),data(ndelta_x,y,z,c),(_width-ndelta_x)*sizeof(T)); - T *ptrd = data(_width-1,y,z,c); + T *ptrd = data(_width - 1,y,z,c); const T val = *ptrd; - for (int l = 0; l=width())?width()-1:delta_x; + const int ndelta_x = (delta_x>=width())?width() - 1:delta_x; if (!ndelta_x) return *this; cimg_forYZC(*this,y,z,c) { std::memmove(data(ndelta_x,y,z,c),data(0,y,z,c),(_width-ndelta_x)*sizeof(T)); T *ptrd = data(0,y,z,c); const T val = *ptrd; - for (int l = 0; l=height()) return fill(0); if (delta_y<0) cimg_forZC(*this,z,c) { - std::memmove(data(0,0,z,c),data(0,-delta_y,z,c),_width*(_height+delta_y)*sizeof(T)); - std::memset(data(0,_height+delta_y,z,c),0,-delta_y*_width*sizeof(T)); + std::memmove(data(0,0,z,c),data(0,-delta_y,z,c),_width*(_height + delta_y)*sizeof(T)); + std::memset(data(0,_height + delta_y,z,c),0,-delta_y*_width*sizeof(T)); } else cimg_forZC(*this,z,c) { std::memmove(data(0,delta_y,z,c),data(0,0,z,c),_width*(_height-delta_y)*sizeof(T)); std::memset(data(0,0,z,c),0,delta_y*_width*sizeof(T)); @@ -21785,20 +26035,20 @@ break; case 1 : if (delta_y<0) { - const int ndelta_y = (-delta_y>=height())?height()-1:-delta_y; + const int ndelta_y = (-delta_y>=height())?height() - 1:-delta_y; if (!ndelta_y) return *this; cimg_forZC(*this,z,c) { std::memmove(data(0,0,z,c),data(0,ndelta_y,z,c),_width*(_height-ndelta_y)*sizeof(T)); - T *ptrd = data(0,_height-ndelta_y,z,c), *ptrs = data(0,_height-1,z,c); - for (int l = 0; l=height())?height()-1:delta_y; + const int ndelta_y = (delta_y>=height())?height() - 1:delta_y; if (!ndelta_y) return *this; cimg_forZC(*this,z,c) { std::memmove(data(0,ndelta_y,z,c),data(0,0,z,c),_width*(_height-ndelta_y)*sizeof(T)); T *ptrd = data(0,1,z,c), *ptrs = data(0,0,z,c); - for (int l = 0; l=depth()) return fill(0); if (delta_z<0) cimg_forC(*this,c) { - std::memmove(data(0,0,0,c),data(0,0,-delta_z,c),_width*_height*(_depth+delta_z)*sizeof(T)); - std::memset(data(0,0,_depth+delta_z,c),0,_width*_height*(-delta_z)*sizeof(T)); + std::memmove(data(0,0,0,c),data(0,0,-delta_z,c),_width*_height*(_depth + delta_z)*sizeof(T)); + std::memset(data(0,0,_depth + delta_z,c),0,_width*_height*(-delta_z)*sizeof(T)); } else cimg_forC(*this,c) { std::memmove(data(0,0,delta_z,c),data(0,0,0,c),_width*_height*(_depth-delta_z)*sizeof(T)); std::memset(data(0,0,0,c),0,delta_z*_width*_height*sizeof(T)); @@ -21833,22 +26083,22 @@ break; case 1 : if (delta_z<0) { - const int ndelta_z = (-delta_z>=depth())?depth()-1:-delta_z; + const int ndelta_z = (-delta_z>=depth())?depth() - 1:-delta_z; if (!ndelta_z) return *this; cimg_forC(*this,c) { std::memmove(data(0,0,0,c),data(0,0,ndelta_z,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); - T *ptrd = data(0,0,_depth-ndelta_z,c), *ptrs = data(0,0,_depth-1,c); - for (int l = 0; l=depth())?depth()-1:delta_z; + const int ndelta_z = (delta_z>=depth())?depth() - 1:delta_z; if (!ndelta_z) return *this; cimg_forC(*this,c) { std::memmove(data(0,0,ndelta_z,c),data(0,0,0,c),_width*_height*(_depth-ndelta_z)*sizeof(T)); T *ptrd = data(0,0,1,c), *ptrs = data(0,0,0,c); - for (int l = 0; l=spectrum()) return fill(0); if (delta_c<0) { - std::memmove(_data,data(0,0,0,-delta_c),_width*_height*_depth*(_spectrum+delta_c)*sizeof(T)); - std::memset(data(0,0,0,_spectrum+delta_c),0,_width*_height*_depth*(-delta_c)*sizeof(T)); + std::memmove(_data,data(0,0,0,-delta_c),_width*_height*_depth*(_spectrum + delta_c)*sizeof(T)); + std::memset(data(0,0,0,_spectrum + delta_c),0,_width*_height*_depth*(-delta_c)*sizeof(T)); } else { std::memmove(data(0,0,0,delta_c),_data,_width*_height*_depth*(_spectrum-delta_c)*sizeof(T)); std::memset(_data,0,delta_c*_width*_height*_depth*sizeof(T)); @@ -21885,19 +26135,19 @@ break; case 1 : if (delta_c<0) { - const int ndelta_c = (-delta_c>=spectrum())?spectrum()-1:-delta_c; + const int ndelta_c = (-delta_c>=spectrum())?spectrum() - 1:-delta_c; if (!ndelta_c) return *this; std::memmove(_data,data(0,0,0,ndelta_c),_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); - T *ptrd = data(0,0,0,_spectrum-ndelta_c), *ptrs = data(0,0,0,_spectrum-1); - for (int l = 0; l=spectrum())?spectrum()-1:delta_c; + const int ndelta_c = (delta_c>=spectrum())?spectrum() - 1:delta_c; if (!ndelta_c) return *this; std::memmove(data(0,0,0,ndelta_c),_data,_width*_height*_depth*(_spectrum-ndelta_c)*sizeof(T)); T *ptrd = data(0,0,0,1); - for (int l = 0; l{ 0=nearest | 1=linear | 2=cubic }. \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann | 2=periodic }. **/ template - CImg& warp(const CImg& warp, const bool is_relative=false, + CImg& warp(const CImg& warp, const unsigned int mode=0, const unsigned int interpolation=1, const unsigned int boundary_conditions=0) { - return get_warp(warp,is_relative,interpolation,boundary_conditions).move_to(*this); + return get_warp(warp,mode,interpolation,boundary_conditions).move_to(*this); } //! Warp image content by a warping field \newinstance template - CImg get_warp(const CImg& warp, const bool is_relative=false, + CImg get_warp(const CImg& warp, const unsigned int mode=0, const unsigned int interpolation=1, const unsigned int boundary_conditions=0) const { if (is_empty() || !warp) return *this; - if (is_relative && !is_sameXYZ(warp)) + if (mode && !is_sameXYZ(warp)) throw CImgArgumentException(_cimg_instance "warp(): Instance and specified relative warping field (%u,%u,%u,%u,%p) " "have different XYZ dimensions.", @@ -22450,7 +26701,43 @@ CImg res(warp._width,warp._height,warp._depth,_spectrum); if (warp._spectrum==1) { // 1d warping. - if (is_relative) { // Relative warp. + if (mode>=3) { // Forward-relative warp. + res.fill(0); + if (interpolation>=1) // Linear interpolation. +#ifdef cimg_use_openmp +#pragma omp parallel for collapse(3) if (res.size()>=4096) +#endif + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) res.set_linear_atX(*(ptrs++),x + (float)*(ptrs0++),y,z,c); + } + else // Nearest-neighbor interpolation. + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) { + const int X = x + (int)*(ptrs0++); + if (X>=0 && X=1) // Linear interpolation. +#ifdef cimg_use_openmp +#pragma omp parallel for collapse(3) if (res.size()>=4096) +#endif + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) res.set_linear_atX(*(ptrs++),(float)*(ptrs0++),y,z,c); + } + else // Nearest-neighbor interpolation. + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) { + const int X = (int)*(ptrs0++); + if (X>=0 && X=3) { // Forward-relative warp. + res.fill(0); + if (interpolation>=1) // Linear interpolation. +#ifdef cimg_use_openmp +#pragma omp parallel for collapse(3) if (res.size()>=4096) +#endif + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) res.set_linear_atXY(*(ptrs++),x + (float)*(ptrs0++),y + (float)*(ptrs1++),z,c); + } + else // Nearest-neighbor interpolation. + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) { + const int X = x + (int)*(ptrs0++), Y = y + (int)*(ptrs1++); + if (X>=0 && X=0 && Y=1) // Linear interpolation. +#ifdef cimg_use_openmp +#pragma omp parallel for collapse(3) if (res.size()>=4096) +#endif + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) res.set_linear_atXY(*(ptrs++),(float)*(ptrs0++),(float)*(ptrs1++),z,c); + } + else // Nearest-neighbor interpolation. + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1); const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) { + const int X = (int)*(ptrs0++), Y = (int)*(ptrs1++); + if (X>=0 && X=0 && Y=3) { // Forward-relative warp. + res.fill(0); + if (interpolation>=1) // Linear interpolation. +#ifdef cimg_use_openmp +#pragma omp parallel for collapse(3) if (res.size()>=4096) +#endif + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) res.set_linear_atXYZ(*(ptrs++),x + (float)*(ptrs0++),y + (float)*(ptrs1++), + z + (float)*(ptrs2++),c); + } + else // Nearest-neighbor interpolation. + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) { + const int X = x + (int)*(ptrs0++), Y = y + (int)*(ptrs1++), Z = z + (int)*(ptrs2++); + if (X>=0 && X=0 && Y=0 && Z=1) // Linear interpolation. +#ifdef cimg_use_openmp +#pragma omp parallel for collapse(3) if (res.size()>=4096) +#endif + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) res.set_linear_atXYZ(*(ptrs++),(float)*(ptrs0++),(float)*(ptrs1++),(float)*(ptrs2++),c); + } + else // Nearest-neighbor interpolation. + cimg_forYZC(res,y,z,c) { + const t *ptrs0 = warp.data(0,y,z,0), *ptrs1 = warp.data(0,y,z,1), *ptrs2 = warp.data(0,y,z,2); + const T *ptrs = data(0,y,z,c); + cimg_forX(res,x) { + const int X = (int)*(ptrs0++), Y = (int)*(ptrs1++), Z = (int)*(ptrs2++); + if (X>=0 && X=0 && Y=0 && Z=_height)?_height - 1:y0, _z0 = (z0>=_depth)?_depth - 1:z0; const CImg - img_xy = get_crop(0,0,_z0,0,_width-1,_height-1,_z0,_spectrum-1), - img_zy = get_crop(_x0,0,0,0,_x0,_height-1,_depth-1,_spectrum-1).permute_axes("xzyc"). + img_xy = get_crop(0,0,_z0,0,_width - 1,_height - 1,_z0,_spectrum - 1), + img_zy = get_crop(_x0,0,0,0,_x0,_height - 1,_depth - 1,_spectrum - 1).permute_axes("xzyc"). resize(_depth,_height,1,-100,-1), - img_xz = get_crop(0,_y0,0,0,_width-1,_y0,_depth-1,_spectrum-1).resize(_width,_depth,1,-100,-1); + img_xz = get_crop(0,_y0,0,0,_width - 1,_y0,_depth - 1,_spectrum - 1).resize(_width,_depth,1,-100,-1); return CImg(_width + _depth,_height + _depth,1,_spectrum,cimg::min(img_xy.min(),img_zy.min(),img_xz.min())). draw_image(0,0,img_xy).draw_image(img_xy._width,0,img_zy). draw_image(0,img_xy._height,img_xz); @@ -22970,7 +27334,7 @@ nc0 = c0 res(1U + nx1 - nx0,1U + ny1 - ny0,1U + nz1 - nz0,1U + nc1 - nc0); if (nx0<0 || nx1>=width() || ny0<0 || ny1>=height() || nz0<0 || nz1>=depth() || nc0<0 || nc1>=spectrum()) { - if (boundary_conditions) cimg_forXYZC(res,x,y,z,c) res(x,y,z,c) = _atXYZC(nx0+x,ny0+y,nz0+z,nc0+c); + if (boundary_conditions) cimg_forXYZC(res,x,y,z,c) res(x,y,z,c) = _atXYZC(nx0 + x,ny0 + y,nz0 + z,nc0 + c); else res.fill(0).draw_image(-nx0,-ny0,-nz0,-nc0,*this); } else res.draw_image(-nx0,-ny0,-nz0,-nc0,*this); return res; @@ -22980,14 +27344,14 @@ CImg& crop(const int x0, const int y0, const int z0, const int x1, const int y1, const int z1, const bool boundary_conditions=false) { - return crop(x0,y0,z0,0,x1,y1,z1,_spectrum-1,boundary_conditions); + return crop(x0,y0,z0,0,x1,y1,z1,_spectrum - 1,boundary_conditions); } //! Crop image region \newinstance. CImg get_crop(const int x0, const int y0, const int z0, const int x1, const int y1, const int z1, const bool boundary_conditions=false) const { - return get_crop(x0,y0,z0,0,x1,y1,z1,_spectrum-1,boundary_conditions); + return get_crop(x0,y0,z0,0,x1,y1,z1,_spectrum - 1,boundary_conditions); } //! Crop image region \overloading. @@ -23006,12 +27370,12 @@ //! Crop image region \overloading. CImg& crop(const int x0, const int x1, const bool boundary_conditions=false) { - return crop(x0,0,0,0,x1,_height-1,_depth-1,_spectrum-1,boundary_conditions); + return crop(x0,0,0,0,x1,_height - 1,_depth - 1,_spectrum - 1,boundary_conditions); } //! Crop image region \newinstance. CImg get_crop(const int x0, const int x1, const bool boundary_conditions=false) const { - return get_crop(x0,0,0,0,x1,_height-1,_depth-1,_spectrum-1,boundary_conditions); + return get_crop(x0,0,0,0,x1,_height - 1,_depth - 1,_spectrum - 1,boundary_conditions); } //! Autocrop image region, regarding the specified background value. @@ -23028,15 +27392,15 @@ } break; case 'y' : { const int y0 = coords[0], y1 = coords[1]; - if (y0>=0 && y1>=0) crop(0,y0,_width-1,y1); + if (y0>=0 && y1>=0) crop(0,y0,_width - 1,y1); } break; case 'z' : { const int z0 = coords[0], z1 = coords[1]; - if (z0>=0 && z1>=0) crop(0,0,z0,_width-1,_height-1,z1); + if (z0>=0 && z1>=0) crop(0,0,z0,_width - 1,_height - 1,z1); } break; default : { const int c0 = coords[0], c1 = coords[1]; - if (c0>=0 && c1>=0) crop(0,0,0,c0,_width-1,_height-1,_depth-1,c1); + if (c0>=0 && c1>=0) crop(0,0,0,c0,_width - 1,_height - 1,_depth - 1,c1); } } } @@ -23060,7 +27424,7 @@ const unsigned int w = _width, h = _height, d = _depth, s = _spectrum; autocrop(col1,axes); if (_width==w && _height==h && _depth==d && _spectrum==s) { - const CImg col2 = get_vector_at(w-1,h-1,d-1); + const CImg col2 = get_vector_at(w - 1,h - 1,d - 1); autocrop(col2,axes); } return *this; @@ -23084,7 +27448,7 @@ const int ny0 = coords[0], ny1 = coords[1]; if (ny0>=0 && ny1>=0) { y0 = cimg::min(y0,ny0); y1 = cimg::max(y1,ny1); } } - if (y0==height() && y1==-1) return assign(); else crop(0,y0,_width-1,y1); + if (y0==height() && y1==-1) return assign(); else crop(0,y0,_width - 1,y1); } break; default : { int z0 = depth(), z1 = -1; @@ -23093,7 +27457,7 @@ const int nz0 = coords[0], nz1 = coords[1]; if (nz0>=0 && nz1>=0) { z0 = cimg::min(z0,nz0); z1 = cimg::max(z1,nz1); } } - if (z0==depth() && z1==-1) return assign(); else crop(0,0,z0,_width-1,_height-1,z1); + if (z0==depth() && z1==-1) return assign(); else crop(0,0,z0,_width - 1,_height - 1,z1); } } } @@ -23123,7 +27487,7 @@ cimg_forX(*this,x) cimg_forYZC(*this,y,z,c) if ((*this)(x,y,z,c)!=value) { x0 = x; x = width(); y = height(); z = depth(); c = spectrum(); } if (x0>=0) { - for (int x = width()-1; x>=0; --x) cimg_forYZC(*this,y,z,c) + for (int x = width() - 1; x>=0; --x) cimg_forYZC(*this,y,z,c) if ((*this)(x,y,z,c)!=value) { x1 = x; x = 0; y = height(); z = depth(); c = spectrum(); } } res = CImg::vector(x0,x1); @@ -23133,7 +27497,7 @@ cimg_forY(*this,y) cimg_forXZC(*this,x,z,c) if ((*this)(x,y,z,c)!=value) { y0 = y; x = width(); y = height(); z = depth(); c = spectrum(); } if (y0>=0) { - for (int y = height()-1; y>=0; --y) cimg_forXZC(*this,x,z,c) + for (int y = height() - 1; y>=0; --y) cimg_forXZC(*this,x,z,c) if ((*this)(x,y,z,c)!=value) { y1 = y; x = width(); y = 0; z = depth(); c = spectrum(); } } res = CImg::vector(y0,y1); @@ -23143,7 +27507,7 @@ cimg_forZ(*this,z) cimg_forXYC(*this,x,y,c) if ((*this)(x,y,z,c)!=value) { z0 = z; x = width(); y = height(); z = depth(); c = spectrum(); } if (z0>=0) { - for (int z = depth()-1; z>=0; --z) cimg_forXYC(*this,x,y,c) + for (int z = depth() - 1; z>=0; --z) cimg_forXYC(*this,x,y,c) if ((*this)(x,y,z,c)!=value) { z1 = z; x = width(); y = height(); z = 0; c = spectrum(); } } res = CImg::vector(z0,z1); @@ -23153,7 +27517,7 @@ cimg_forC(*this,c) cimg_forXYZ(*this,x,y,z) if ((*this)(x,y,z,c)!=value) { c0 = c; x = width(); y = height(); z = depth(); c = spectrum(); } if (c0>=0) { - for (int c = spectrum()-1; c>=0; --c) cimg_forXYZ(*this,x,y,z) + for (int c = spectrum() - 1; c>=0; --c) cimg_forXYZ(*this,x,y,z) if ((*this)(x,y,z,c)!=value) { c1 = c; x = width(); y = height(); z = depth(); c = 0; } } res = CImg::vector(c0,c1); @@ -23186,7 +27550,7 @@ //! Return specified range of image columns \inplace. CImg get_columns(const int x0, const int x1) const { - return get_crop(x0,0,0,0,x1,height()-1,depth()-1,spectrum()-1); + return get_crop(x0,0,0,0,x1,height() - 1,depth() - 1,spectrum() - 1); } //! Return specified image row. @@ -23208,7 +27572,7 @@ \param y1 Ending image row. **/ CImg get_rows(const int y0, const int y1) const { - return get_crop(0,y0,0,0,width()-1,y1,depth()-1,spectrum()-1); + return get_crop(0,y0,0,0,width() - 1,y1,depth() - 1,spectrum() - 1); } //! Return specified range of image rows \inplace. @@ -23235,7 +27599,7 @@ \param z1 Ending image slice. **/ CImg get_slices(const int z0, const int z1) const { - return get_crop(0,0,z0,0,width()-1,height()-1,z1,spectrum()-1); + return get_crop(0,0,z0,0,width() - 1,height() - 1,z1,spectrum() - 1); } //! Return specified range of image slices \inplace. @@ -23262,7 +27626,7 @@ \param c1 Ending image channel. **/ CImg get_channels(const int c0, const int c1) const { - return get_crop(0,0,0,c0,width()-1,height()-1,depth()-1,c1); + return get_crop(0,0,0,c0,width() - 1,height() - 1,depth() - 1,c1); } //! Return specified range of image channels \inplace. @@ -23283,21 +27647,21 @@ if (is_oriented_only) { typename CImg::_functor4d_streamline2d_oriented func(*this); return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,true, - 0,0,0,_width-1.0f,_height-1.0f,0.0f); + 0,0,0,_width - 1.0f,_height - 1.0f,0.0f); } else { typename CImg::_functor4d_streamline2d_directed func(*this); return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,false, - 0,0,0,_width-1.0f,_height-1.0f,0.0f); + 0,0,0,_width - 1.0f,_height - 1.0f,0.0f); } } if (is_oriented_only) { typename CImg::_functor4d_streamline3d_oriented func(*this); return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,true, - 0,0,0,_width-1.0f,_height-1.0f,_depth-1.0f); + 0,0,0,_width - 1.0f,_height - 1.0f,_depth - 1.0f); } typename CImg::_functor4d_streamline3d_directed func(*this); return streamline(func,x,y,z,L,dl,interpolation_type,is_backward_tracking,false, - 0,0,0,_width-1.0f,_height-1.0f,_depth-1.0f); + 0,0,0,_width - 1.0f,_height - 1.0f,_depth - 1.0f); } //! Return stream line of a 3d vector field. @@ -23335,7 +27699,7 @@ const bool is_bounded = (x0!=x1 || y0!=y1 || z0!=z1); if (L<=0 || (is_bounded && (xx1 || yy1 || zz1))) return CImg(); - const unsigned int size_L = (unsigned int)cimg::round(L/dl+1); + const unsigned int size_L = (unsigned int)cimg::round(L/dl + 1); CImg coordinates(size_L,3); const float dl2 = dl/2; float @@ -23352,9 +27716,9 @@ cimg_forX(coordinates,l) { *(ptr_x++) = X; *(ptr_y++) = Y; *(ptr_z++) = Z; const int - xi = (int)(X>0?X+0.5f:X-0.5f), - yi = (int)(Y>0?Y+0.5f:Y-0.5f), - zi = (int)(Z>0?Z+0.5f:Z-0.5f); + xi = (int)(X>0?X + 0.5f:X - 0.5f), + yi = (int)(Y>0?Y + 0.5f:Y - 0.5f), + zi = (int)(Z>0?Z + 0.5f:Z - 0.5f); float u = (float)(dl*func((float)xi,(float)yi,(float)zi,0)), v = (float)(dl*func((float)xi,(float)yi,(float)zi,1)), @@ -23385,9 +27749,9 @@ w0 = (float)(dl2*func(X,Y,Z,2)); if (is_oriented_only && u0*pu + v0*pv + w0*pw<0) { u0 = -u0; v0 = -v0; w0 = -w0; } float - u = (float)(dl*func(X+u0,Y+v0,Z+w0,0)), - v = (float)(dl*func(X+u0,Y+v0,Z+w0,1)), - w = (float)(dl*func(X+u0,Y+v0,Z+w0,2)); + u = (float)(dl*func(X + u0,Y + v0,Z + w0,0)), + v = (float)(dl*func(X + u0,Y + v0,Z + w0,1)), + w = (float)(dl*func(X + u0,Y + v0,Z + w0,2)); if (is_oriented_only && u*pu + v*pv + w*pw<0) { u = -u; v = -v; w = -w; } if (is_backward_tracking) { X-=(pu=u); Y-=(pv=v); Z-=(pw=w); } else { X+=(pu=u); Y+=(pv=v); Z+=(pw=w); } if (is_bounded && (Xx1 || Yy1 || Zz1)) break; @@ -23402,19 +27766,19 @@ w0 = (float)(dl2*func(X,Y,Z,2)); if (is_oriented_only && u0*pu + v0*pv + w0*pw<0) { u0 = -u0; v0 = -v0; w0 = -w0; } float - u1 = (float)(dl2*func(X+u0,Y+v0,Z+w0,0)), - v1 = (float)(dl2*func(X+u0,Y+v0,Z+w0,1)), - w1 = (float)(dl2*func(X+u0,Y+v0,Z+w0,2)); + u1 = (float)(dl2*func(X + u0,Y + v0,Z + w0,0)), + v1 = (float)(dl2*func(X + u0,Y + v0,Z + w0,1)), + w1 = (float)(dl2*func(X + u0,Y + v0,Z + w0,2)); if (is_oriented_only && u1*pu + v1*pv + w1*pw<0) { u1 = -u1; v1 = -v1; w1 = -w1; } float - u2 = (float)(dl2*func(X+u1,Y+v1,Z+w1,0)), - v2 = (float)(dl2*func(X+u1,Y+v1,Z+w1,1)), - w2 = (float)(dl2*func(X+u1,Y+v1,Z+w1,2)); + u2 = (float)(dl2*func(X + u1,Y + v1,Z + w1,0)), + v2 = (float)(dl2*func(X + u1,Y + v1,Z + w1,1)), + w2 = (float)(dl2*func(X + u1,Y + v1,Z + w1,2)); if (is_oriented_only && u2*pu + v2*pv + w2*pw<0) { u2 = -u2; v2 = -v2; w2 = -w2; } float - u3 = (float)(dl2*func(X+u2,Y+v2,Z+w2,0)), - v3 = (float)(dl2*func(X+u2,Y+v2,Z+w2,1)), - w3 = (float)(dl2*func(X+u2,Y+v2,Z+w2,2)); + u3 = (float)(dl2*func(X + u2,Y + v2,Z + w2,0)), + v3 = (float)(dl2*func(X + u2,Y + v2,Z + w2,1)), + w3 = (float)(dl2*func(X + u2,Y + v2,Z + w2,2)); if (is_oriented_only && u2*pu + v2*pv + w2*pw<0) { u3 = -u3; v3 = -v3; w3 = -w3; } const float u = (u0 + u3)/3 + (u1 + u2)/1.5f, @@ -23463,7 +27827,8 @@ _functor4d_streamline2d_oriented(const CImg& pref):ref(pref),pI(0) { pI = new CImg(2,2,1,2); } ~_functor4d_streamline2d_oriented() { delete pI; } float operator()(const float x, const float y, const float z, const unsigned int c) const { -#define _cimg_vecalign2d(i,j) if (I(i,j,0)*I(0,0,0)+I(i,j,1)*I(0,0,1)<0) { I(i,j,0) = -I(i,j,0); I(i,j,1) = -I(i,j,1); } +#define _cimg_vecalign2d(i,j) \ + if (I(i,j,0)*I(0,0,0) + I(i,j,1)*I(0,0,1)<0) { I(i,j,0) = -I(i,j,0); I(i,j,1) = -I(i,j,1); } int xi = (int)x - (x>=0?0:1), nxi = xi + 1, yi = (int)y - (y>=0?0:1), nyi = yi + 1, @@ -23474,9 +27839,9 @@ if (c==0) { CImg& I = *pI; if (xi<0) xi = 0; if (nxi<0) nxi = 0; - if (xi>=ref.width()) xi = ref.width()-1; if (nxi>=ref.width()) nxi = ref.width()-1; + if (xi>=ref.width()) xi = ref.width() - 1; if (nxi>=ref.width()) nxi = ref.width() - 1; if (yi<0) yi = 0; if (nyi<0) nyi = 0; - if (yi>=ref.height()) yi = ref.height()-1; if (nyi>=ref.height()) nyi = ref.height()-1; + if (yi>=ref.height()) yi = ref.height() - 1; if (nyi>=ref.height()) nyi = ref.height() - 1; I(0,0,0) = (float)ref(xi,yi,zi,0); I(0,0,1) = (float)ref(xi,yi,zi,1); I(1,0,0) = (float)ref(nxi,yi,zi,0); I(1,0,1) = (float)ref(nxi,yi,zi,1); I(1,1,0) = (float)ref(nxi,nyi,zi,0); I(1,1,1) = (float)ref(nxi,nyi,zi,1); @@ -23493,7 +27858,7 @@ _functor4d_streamline3d_oriented(const CImg& pref):ref(pref),pI(0) { pI = new CImg(2,2,2,3); } ~_functor4d_streamline3d_oriented() { delete pI; } float operator()(const float x, const float y, const float z, const unsigned int c) const { -#define _cimg_vecalign3d(i,j,k) if (I(i,j,k,0)*I(0,0,0,0)+I(i,j,k,1)*I(0,0,0,1)+I(i,j,k,2)*I(0,0,0,2)<0) { \ +#define _cimg_vecalign3d(i,j,k) if (I(i,j,k,0)*I(0,0,0,0) + I(i,j,k,1)*I(0,0,0,1) + I(i,j,k,2)*I(0,0,0,2)<0) { \ I(i,j,k,0) = -I(i,j,k,0); I(i,j,k,1) = -I(i,j,k,1); I(i,j,k,2) = -I(i,j,k,2); } int xi = (int)x - (x>=0?0:1), nxi = xi + 1, @@ -23506,11 +27871,11 @@ if (c==0) { CImg& I = *pI; if (xi<0) xi = 0; if (nxi<0) nxi = 0; - if (xi>=ref.width()) xi = ref.width()-1; if (nxi>=ref.width()) nxi = ref.width()-1; + if (xi>=ref.width()) xi = ref.width() - 1; if (nxi>=ref.width()) nxi = ref.width() - 1; if (yi<0) yi = 0; if (nyi<0) nyi = 0; - if (yi>=ref.height()) yi = ref.height()-1; if (nyi>=ref.height()) nyi = ref.height()-1; + if (yi>=ref.height()) yi = ref.height() - 1; if (nyi>=ref.height()) nyi = ref.height() - 1; if (zi<0) zi = 0; if (nzi<0) nzi = 0; - if (zi>=ref.depth()) zi = ref.depth()-1; if (nzi>=ref.depth()) nzi = ref.depth()-1; + if (zi>=ref.depth()) zi = ref.depth() - 1; if (nzi>=ref.depth()) nzi = ref.depth() - 1; I(0,0,0,0) = (float)ref(xi,yi,zi,0); I(0,0,0,1) = (float)ref(xi,yi,zi,1); I(0,0,0,2) = (float)ref(xi,yi,zi,2); I(1,0,0,0) = (float)ref(nxi,yi,zi,0); I(1,0,0,1) = (float)ref(nxi,yi,zi,1); I(1,0,0,2) = (float)ref(nxi,yi,zi,2); @@ -23534,7 +27899,7 @@ _cimg_math_parser *mp; ~_functor4d_streamline_expr() { delete mp; } _functor4d_streamline_expr(const char *const expr):mp(0) { - mp = new _cimg_math_parser(CImg::empty(),expr,"streamline"); + mp = new _cimg_math_parser(expr,"streamline",CImg::const_empty(),0); } float operator()(const float x, const float y, const float z, const unsigned int c) const { return (float)(*mp)(x,y,z,c); @@ -23560,7 +27925,7 @@ cimg_instance, x0,x1,y0,z0,c0); - return CImg(_data+beg,x1-x0+1,1,1,1,true); + return CImg(_data + beg,x1 - x0 + 1,1,1,1,true); } //! Return a shared-memory image referencing a range of pixels of the image instance \const. @@ -23575,7 +27940,7 @@ cimg_instance, x0,x1,y0,z0,c0); - return CImg(_data+beg,x1-x0+1,1,1,1,true); + return CImg(_data + beg,x1 - x0 + 1,1,1,1,true); } //! Return a shared-memory image referencing a range of rows of the image instance. @@ -23595,9 +27960,9 @@ "get_shared_rows(): Invalid request of a shared-memory subset " "(0->%u,%u->%u,%u,%u).", cimg_instance, - _width-1,y0,y1,z0,c0); + _width - 1,y0,y1,z0,c0); - return CImg(_data+beg,_width,y1-y0+1,1,1,true); + return CImg(_data + beg,_width,y1 - y0 + 1,1,1,true); } //! Return a shared-memory image referencing a range of rows of the image instance \const. @@ -23611,9 +27976,9 @@ "get_shared_rows(): Invalid request of a shared-memory subset " "(0->%u,%u->%u,%u,%u).", cimg_instance, - _width-1,y0,y1,z0,c0); + _width - 1,y0,y1,z0,c0); - return CImg(_data+beg,_width,y1-y0+1,1,1,true); + return CImg(_data + beg,_width,y1 - y0 + 1,1,1,true); } //! Return a shared-memory image referencing one row of the image instance. @@ -23646,9 +28011,9 @@ "get_shared_slices(): Invalid request of a shared-memory subset " "(0->%u,0->%u,%u->%u,%u).", cimg_instance, - _width-1,_height-1,z0,z1,c0); + _width - 1,_height - 1,z0,z1,c0); - return CImg(_data+beg,_width,_height,z1-z0+1,1,true); + return CImg(_data + beg,_width,_height,z1 - z0 + 1,1,true); } //! Return a shared memory image referencing a range of slices of the image instance \const. @@ -23661,9 +28026,9 @@ "get_shared_slices(): Invalid request of a shared-memory subset " "(0->%u,0->%u,%u->%u,%u).", cimg_instance, - _width-1,_height-1,z0,z1,c0); + _width - 1,_height - 1,z0,z1,c0); - return CImg(_data+beg,_width,_height,z1-z0+1,1,true); + return CImg(_data + beg,_width,_height,z1 - z0 + 1,1,true); } //! Return a shared-memory image referencing one slice of the image instance. @@ -23694,9 +28059,9 @@ "get_shared_channels(): Invalid request of a shared-memory subset " "(0->%u,0->%u,0->%u,%u->%u).", cimg_instance, - _width-1,_height-1,_depth-1,c0,c1); + _width - 1,_height - 1,_depth - 1,c0,c1); - return CImg(_data+beg,_width,_height,_depth,c1-c0+1,true); + return CImg(_data + beg,_width,_height,_depth,c1 - c0 + 1,true); } //! Return a shared-memory image referencing a range of channels of the image instance \const. @@ -23709,9 +28074,9 @@ "get_shared_channels(): Invalid request of a shared-memory subset " "(0->%u,0->%u,0->%u,%u->%u).", cimg_instance, - _width-1,_height-1,_depth-1,c0,c1); + _width - 1,_height - 1,_depth - 1,c0,c1); - return CImg(_data+beg,_width,_height,_depth,c1-c0+1,true); + return CImg(_data + beg,_width,_height,_depth,c1 - c0 + 1,true); } //! Return a shared-memory image referencing one channel of the image instance. @@ -23756,50 +28121,50 @@ switch (_axis) { case 'x': { if (_width>dp) { - res.assign(_width/dp+(_width%dp?1:0),1,1); + res.assign(_width/dp + (_width%dp?1:0),1,1); const unsigned int pe = _width - dp; #ifdef cimg_use_openmp -#pragma omp parallel for if (res._width>=128 && _height*_depth*_spectrum>=128) +#pragma omp parallel for cimg_openmp_if (res._width>=128 && _height*_depth*_spectrum>=128) #endif for (unsigned int p = 0; pdp) { - res.assign(_height/dp+(_height%dp?1:0),1,1); + res.assign(_height/dp + (_height%dp?1:0),1,1); const unsigned int pe = _height - dp; #ifdef cimg_use_openmp -#pragma omp parallel for if (res._width>=128 && _width*_depth*_spectrum>=128) +#pragma omp parallel for cimg_openmp_if (res._width>=128 && _width*_depth*_spectrum>=128) #endif for (unsigned int p = 0; pdp) { - res.assign(_depth/dp+(_depth%dp?1:0),1,1); + res.assign(_depth/dp + (_depth%dp?1:0),1,1); const unsigned int pe = _depth - dp; #ifdef cimg_use_openmp -#pragma omp parallel for if (res._width>=128 && _width*_height*_spectrum>=128) +#pragma omp parallel for cimg_openmp_if (res._width>=128 && _width*_height*_spectrum>=128) #endif for (unsigned int p = 0; pdp) { - res.assign(_spectrum/dp+(_spectrum%dp?1:0),1,1); + res.assign(_spectrum/dp + (_spectrum%dp?1:0),1,1); const unsigned int pe = _spectrum - dp; #ifdef cimg_use_openmp -#pragma omp parallel for if (res._width>=128 && _width*_height*_depth>=128) +#pragma omp parallel for cimg_openmp_if (res._width>=128 && _width*_height*_depth>=128) #endif for (unsigned int p = 0; p(_data+i0,1,i-i0).move_to(res); i0 = (long)i; current = (*this)[i]; } - CImg(_data+i0,1,size()-i0).move_to(res); + if ((*this)[i]!=current) { CImg(_data + i0,1,i - i0).move_to(res); i0 = (long)i; current = (*this)[i]; } + CImg(_data + i0,1,size() - i0).move_to(res); } } } @@ -23903,36 +28268,36 @@ unsigned int i0 = 0, i = 0; do { while (i<_width && (*this)(i)==value) ++i; - if (i>i0) { if (keep_values) get_columns(i0,i-1).move_to(res); i0 = i; } + if (i>i0) { if (keep_values) get_columns(i0,i - 1).move_to(res); i0 = i; } while (i<_width && (*this)(i)!=value) ++i; - if (i>i0) { get_columns(i0,i-1).move_to(res); i0 = i; } + if (i>i0) { get_columns(i0,i - 1).move_to(res); i0 = i; } } while (i<_width); } break; case 'y' : { unsigned int i0 = 0, i = 0; do { while (i<_height && (*this)(0,i)==value) ++i; - if (i>i0) { if (keep_values) get_rows(i0,i-1).move_to(res); i0 = i; } + if (i>i0) { if (keep_values) get_rows(i0,i - 1).move_to(res); i0 = i; } while (i<_height && (*this)(0,i)!=value) ++i; - if (i>i0) { get_rows(i0,i-1).move_to(res); i0 = i; } + if (i>i0) { get_rows(i0,i - 1).move_to(res); i0 = i; } } while (i<_height); } break; case 'z' : { unsigned int i0 = 0, i = 0; do { while (i<_depth && (*this)(0,0,i)==value) ++i; - if (i>i0) { if (keep_values) get_slices(i0,i-1).move_to(res); i0 = i; } + if (i>i0) { if (keep_values) get_slices(i0,i - 1).move_to(res); i0 = i; } while (i<_depth && (*this)(0,0,i)!=value) ++i; - if (i>i0) { get_slices(i0,i-1).move_to(res); i0 = i; } + if (i>i0) { get_slices(i0,i - 1).move_to(res); i0 = i; } } while (i<_depth); } break; case 'c' : { unsigned int i0 = 0, i = 0; do { while (i<_spectrum && (*this)(0,0,0,i)==value) ++i; - if (i>i0) { if (keep_values) get_channels(i0,i-1).move_to(res); i0 = i; } + if (i>i0) { if (keep_values) get_channels(i0,i - 1).move_to(res); i0 = i; } while (i<_spectrum && (*this)(0,0,0,i)!=value) ++i; - if (i>i0) { get_channels(i0,i-1).move_to(res); i0 = i; } + if (i>i0) { get_channels(i0,i - 1).move_to(res); i0 = i; } } while (i<_spectrum); } break; default : { @@ -23940,9 +28305,9 @@ unsigned long i0 = 0, i = 0; do { while (ii0) { if (keep_values) CImg(_data+i0,1,i-i0).move_to(res); i0 = i; } + if (i>i0) { if (keep_values) CImg(_data + i0,1,i - i0).move_to(res); i0 = i; } while (ii0) { CImg(_data+i0,1,i-i0).move_to(res); i0 = i; } + if (i>i0) { CImg(_data + i0,1,i - i0).move_to(res); i0 = i; } } while (i=vsiz) j = 0; } i-=j; if (i>i1) { - if (i1>i0) get_columns(i0,i1-1).move_to(res); - if (keep_values) get_columns(i1,i-1).move_to(res); + if (i1>i0) get_columns(i0,i1 - 1).move_to(res); + if (keep_values) get_columns(i1,i - 1).move_to(res); i0 = i; } else ++i; } else ++i; } while (i<_width); - if (i0<_width) get_columns(i0,width()-1).move_to(res); + if (i0<_width) get_columns(i0,width() - 1).move_to(res); } break; case 'y' : { unsigned int i0 = 0, i1 = 0, i = 0; @@ -23973,13 +28338,13 @@ while (i<_height && (*this)(0,i)==values[j]) { ++i; if (++j>=vsiz) j = 0; } i-=j; if (i>i1) { - if (i1>i0) get_rows(i0,i1-1).move_to(res); - if (keep_values) get_rows(i1,i-1).move_to(res); + if (i1>i0) get_rows(i0,i1 - 1).move_to(res); + if (keep_values) get_rows(i1,i - 1).move_to(res); i0 = i; } else ++i; } else ++i; } while (i<_height); - if (i0<_height) get_rows(i0,height()-1).move_to(res); + if (i0<_height) get_rows(i0,height() - 1).move_to(res); } break; case 'z' : { unsigned int i0 = 0, i1 = 0, i = 0; @@ -23989,13 +28354,13 @@ while (i<_depth && (*this)(0,0,i)==values[j]) { ++i; if (++j>=vsiz) j = 0; } i-=j; if (i>i1) { - if (i1>i0) get_slices(i0,i1-1).move_to(res); - if (keep_values) get_slices(i1,i-1).move_to(res); + if (i1>i0) get_slices(i0,i1 - 1).move_to(res); + if (keep_values) get_slices(i1,i - 1).move_to(res); i0 = i; } else ++i; } else ++i; } while (i<_depth); - if (i0<_depth) get_slices(i0,depth()-1).move_to(res); + if (i0<_depth) get_slices(i0,depth() - 1).move_to(res); } break; case 'c' : { unsigned int i0 = 0, i1 = 0, i = 0; @@ -24005,13 +28370,13 @@ while (i<_spectrum && (*this)(0,0,0,i)==values[j]) { ++i; if (++j>=vsiz) j = 0; } i-=j; if (i>i1) { - if (i1>i0) get_channels(i0,i1-1).move_to(res); - if (keep_values) get_channels(i1,i-1).move_to(res); + if (i1>i0) get_channels(i0,i1 - 1).move_to(res); + if (keep_values) get_channels(i1,i - 1).move_to(res); i0 = i; } else ++i; } else ++i; } while (i<_spectrum); - if (i0<_spectrum) get_channels(i0,spectrum()-1).move_to(res); + if (i0<_spectrum) get_channels(i0,spectrum() - 1).move_to(res); } break; default : { unsigned long i0 = 0, i1 = 0, i = 0; @@ -24022,13 +28387,13 @@ while (i=vsiz) j = 0; } i-=j; if (i>i1) { - if (i1>i0) CImg(_data+i0,1,i1-i0).move_to(res); - if (keep_values) CImg(_data+i1,1,i-i1).move_to(res); + if (i1>i0) CImg(_data + i0,1,i1 - i0).move_to(res); + if (keep_values) CImg(_data + i1,1,i - i1).move_to(res); i0 = i; } else ++i; } else ++i; } while (i(_data+i0,1,siz-i0).move_to(res); + if (i0(_data + i0,1,siz - i0).move_to(res); } break; } } @@ -24084,7 +28449,7 @@ \param is_normalized = enable local normalization. \note - The correlation of the image instance \p *this by the mask \p mask is defined to be: - res(x,y,z) = sum_{i,j,k} (*this)(x+i,y+j,z+k)*mask(i,j,k). + res(x,y,z) = sum_{i,j,k} (*this)(x + i,y + j,z + k)*mask(i,j,k). **/ template CImg& correlate(const CImg& mask, const unsigned int boundary_conditions=1, const bool is_normalized=false) { @@ -24103,10 +28468,12 @@ ((mask._depth==1 && mask._width<=5) || (mask._depth==mask._width && mask._width<=3))) { // A special optimization is done for 2x2, 3x3, 4x4, 5x5, 2x2x2 and 3x3x3 mask (with boundary_conditions=1) Ttfloat *ptrd = res._data; + CImg I; switch (mask._depth) { case 3 : { - T I[27] = { 0 }; + I.assign(27); cimg_forC(res,c) { + cimg_test_abort(); const CImg _img = get_shared_channel(c%_spectrum); const CImg _mask = mask.get_shared_channel(c%mask._spectrum); if (is_normalized) { @@ -24144,8 +28511,9 @@ } } break; case 2 : { - T I[8] = { 0 }; + I.assign(8); cimg_forC(res,c) { + cimg_test_abort(); const CImg _img = get_shared_channel(c%_spectrum); const CImg _mask = mask.get_shared_channel(c%mask._spectrum); if (is_normalized) { @@ -24171,8 +28539,9 @@ case 1 : switch (mask._width) { case 6 : { - T I[36] = { 0 }; + I.assign(36); cimg_forC(res,c) { + cimg_test_abort(); const CImg _img = get_shared_channel(c%_spectrum); const CImg _mask = mask.get_shared_channel(c%mask._spectrum); if (is_normalized) { @@ -24210,8 +28579,9 @@ } } break; case 5 : { - T I[25] = { 0 }; + I.assign(25); cimg_forC(res,c) { + cimg_test_abort(); const CImg _img = get_shared_channel(c%_spectrum); const CImg _mask = mask.get_shared_channel(c%mask._spectrum); if (is_normalized) { @@ -24241,8 +28611,9 @@ } } break; case 4 : { - T I[16] = { 0 }; + I.assign(16); cimg_forC(res,c) { + cimg_test_abort(); const CImg _img = get_shared_channel(c%_spectrum); const CImg _mask = mask.get_shared_channel(c%mask._spectrum); if (is_normalized) { @@ -24266,8 +28637,9 @@ } } break; case 3 : { - T I[9] = { 0 }; + I.assign(9); cimg_forC(res,c) { + cimg_test_abort(); const CImg _img = get_shared_channel(c%_spectrum); const CImg _mask = mask.get_shared_channel(c%mask._spectrum); if (is_normalized) { @@ -24287,8 +28659,9 @@ } } break; case 2 : { - T I[4] = { 0 }; + I.assign(4); cimg_forC(res,c) { + cimg_test_abort(); const CImg _img = get_shared_channel(c%_spectrum); const CImg _mask = mask.get_shared_channel(c%mask._spectrum); if (is_normalized) { @@ -24307,6 +28680,7 @@ case 1 : if (is_normalized) res.fill(1); else cimg_forC(res,c) { + cimg_test_abort(); const CImg _img = get_shared_channel(c%_spectrum); const CImg _mask = mask.get_shared_channel(c%mask._spectrum); res.get_shared_channel(c).assign(_img)*=_mask[0]; @@ -24314,15 +28688,16 @@ break; } } - } else { // Generic version for other masks and borders conditions. + } else { // Generic version for other masks and boundary conditions. const int mx2 = mask.width()/2, my2 = mask.height()/2, mz2 = mask.depth()/2, mx1 = mx2 - 1 + (mask.width()%2), my1 = my2 - 1 + (mask.height()%2), mz1 = mz2 - 1 + (mask.depth()%2), mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; #ifdef cimg_use_openmp -#pragma omp parallel for if (res._spectrum>=2) +#pragma omp parallel for cimg_openmp_if (res._spectrum>=2) #endif cimg_forC(res,c) { + cimg_test_abort(); const CImg _img = get_shared_channel(c%_spectrum); const CImg _mask = mask.get_shared_channel(c%mask._spectrum); if (is_normalized) { // Normalized correlation. @@ -24337,8 +28712,8 @@ for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const Ttfloat _val = (Ttfloat)_img(x+xm,y+ym,z+zm); - val+=_val*_mask(mx1+xm,my1+ym,mz1+zm); + const Ttfloat _val = (Ttfloat)_img(x + xm,y + ym,z + zm); + val+=_val*_mask(mx1 + xm,my1 + ym,mz1 + zm); N+=_val*_val; } N*=M; @@ -24349,13 +28724,14 @@ #pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) #endif cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { Ttfloat val = 0, N = 0; for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const Ttfloat _val = (Ttfloat)_img._atXYZ(x+xm,y+ym,z+zm); - val+=_val*_mask(mx1+xm,my1+ym,mz1+zm); + const Ttfloat _val = (Ttfloat)_img._atXYZ(x + xm,y + ym,z + zm); + val+=_val*_mask(mx1 + xm,my1 + ym,mz1 + zm); N+=_val*_val; } N*=M; @@ -24366,13 +28742,14 @@ #pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) #endif cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { Ttfloat val = 0, N = 0; for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const Ttfloat _val = (Ttfloat)_img.atXYZ(x+xm,y+ym,z+zm,0,0); - val+=_val*_mask(mx1+xm,my1+ym,mz1+zm); + const Ttfloat _val = (Ttfloat)_img.atXYZ(x + xm,y + ym,z + zm,0,0); + val+=_val*_mask(mx1 + xm,my1 + ym,mz1 + zm); N+=_val*_val; } N*=M; @@ -24389,7 +28766,7 @@ for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) - val+=_img(x+xm,y+ym,z+zm)*_mask(mx1+xm,my1+ym,mz1+zm); + val+=_img(x + xm,y + ym,z + zm)*_mask(mx1 + xm,my1 + ym,mz1 + zm); res(x,y,z,c) = (Ttfloat)val; } if (boundary_conditions) @@ -24397,12 +28774,13 @@ #pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) #endif cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { Ttfloat val = 0; for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) - val+=_img._atXYZ(x+xm,y+ym,z+zm)*_mask(mx1+xm,my1+ym,mz1+zm); + val+=_img._atXYZ(x + xm,y + ym,z + zm)*_mask(mx1 + xm,my1 + ym,mz1 + zm); res(x,y,z,c) = (Ttfloat)val; } else @@ -24410,12 +28788,13 @@ #pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) #endif cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { Ttfloat val = 0; for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) - val+=_img.atXYZ(x+xm,y+ym,z+zm,0,0)*_mask(mx1+xm,my1+ym,mz1+zm); + val+=_img.atXYZ(x + xm,y + ym,z + zm,0,0)*_mask(mx1 + xm,my1 + ym,mz1 + zm); res(x,y,z,c) = (Ttfloat)val; } } @@ -24550,9 +28929,10 @@ mx1 = mx2 - 1 + (mask.width()%2), my1 = my2 - 1 + (mask.height()%2), mz1 = mz2 - 1 + (mask.depth()%2), mxe = width() - mx2, mye = height() - my2, mze = depth() - mz2; #ifdef cimg_use_openmp -#pragma omp parallel for if (_spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_spectrum>=2) #endif cimg_forC(*this,c) { + cimg_test_abort(); const CImg _img = get_shared_channel(c%_spectrum); const CImg _mask = mask.get_shared_channel(c%mask._spectrum); if (is_normalized) { // Normalized erosion. @@ -24566,8 +28946,8 @@ for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const t mval = _mask(mx1+xm,my1+ym,mz1+zm); - const Tt cval = (Tt)(_img(x+xm,y+ym,z+zm) + mval); + const t mval = _mask(mx1 + xm,my1 + ym,mz1 + zm); + const Tt cval = (Tt)(_img(x + xm,y + ym,z + zm) + mval); if (mval && cval=256 && _height*_depth>=128) #endif cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { Tt min_val = cimg::type::max(); for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const t mval = _mask(mx1+xm,my1+ym,mz1+zm); - const Tt cval = (Tt)(_img._atXYZ(x+xm,y+ym,z+zm) + mval); + const t mval = _mask(mx1 + xm,my1 + ym,mz1 + zm); + const Tt cval = (Tt)(_img._atXYZ(x + xm,y + ym,z + zm) + mval); if (mval && cval=256 && _height*_depth>=128) #endif cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { Tt min_val = cimg::type::max(); for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const t mval = _mask(mx1+xm,my1+ym,mz1+zm); - const Tt cval = (Tt)(_img.atXYZ(x+xm,y+ym,z+zm,0,0) + mval); + const t mval = _mask(mx1 + xm,my1 + ym,mz1 + zm); + const Tt cval = (Tt)(_img.atXYZ(x + xm,y + ym,z + zm,0,0) + mval); if (mval && cval=256 && _height*_depth>=128) #endif cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { Tt min_val = cimg::type::max(); for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const T cval = (Tt)_img._atXYZ(x+xm,y+ym,z+zm); - if (_mask(mx1+xm,my1+ym,mz1+zm) && cval=256 && _height*_depth>=128) #endif cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { Tt min_val = cimg::type::max(); for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const T cval = (Tt)_img.atXYZ(x+xm,y+ym,z+zm,0,0); - if (_mask(mx1+xm,my1+ym,mz1+zm) && cval=2) +#pragma omp parallel for cimg_openmp_if (_spectrum>=2) #endif cimg_forC(*this,c) { + cimg_test_abort(); const CImg _img = get_shared_channel(c%_spectrum); const CImg _mask = mask.get_shared_channel(c%mask._spectrum); if (is_normalized) { // Normalized dilation. @@ -24855,8 +29236,8 @@ for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const t mval = _mask(mx1+xm,my1+ym,mz1+zm); - const Tt cval = (Tt)(_img(x+xm,y+ym,z+zm) - mval); + const t mval = _mask(mx1 + xm,my1 + ym,mz1 + zm); + const Tt cval = (Tt)(_img(x + xm,y + ym,z + zm) - mval); if (mval && cval>max_val) max_val = cval; } res(x,y,z,c) = max_val; @@ -24866,13 +29247,13 @@ #pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) #endif cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { Tt max_val = cimg::type::min(); for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const t mval = _mask(mx1+xm,my1+ym,mz1+zm); - const Tt cval = (Tt)(_img._atXYZ(x+xm,y+ym,z+zm) - mval); + const t mval = _mask(mx1 + xm,my1 + ym,mz1 + zm); + const Tt cval = (Tt)(_img._atXYZ(x + xm,y + ym,z + zm) - mval); if (mval && cval>max_val) max_val = cval; } res(x,y,z,c) = max_val; @@ -24882,13 +29263,13 @@ #pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) #endif cimg_forYZ(*this,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { Tt max_val = cimg::type::min(); for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const t mval = _mask(mx1+xm,my1+ym,mz1+zm); - const Tt cval = (Tt)(_img.atXYZ(x+xm,y+ym,z+zm,0,0) - mval); + const t mval = _mask(mx1 + xm,my1 + ym,mz1 + zm); + const Tt cval = (Tt)(_img.atXYZ(x + xm,y + ym,z + zm,0,0) - mval); if (mval && cval>max_val) max_val = cval; } res(x,y,z,c) = max_val; @@ -24904,8 +29285,8 @@ for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const Tt cval = (Tt)_img(x+xm,y+ym,z+zm); - if (_mask(mx1+xm,my1+ym,mz1+zm) && cval>max_val) max_val = cval; + const Tt cval = (Tt)_img(x + xm,y + ym,z + zm); + if (_mask(mx1 + xm,my1 + ym,mz1 + zm) && cval>max_val) max_val = cval; } res(x,y,z,c) = max_val; } @@ -24914,13 +29295,13 @@ #pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) #endif cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { Tt max_val = cimg::type::min(); for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const T cval = (Tt)_img._atXYZ(x+xm,y+ym,z+zm); - if (_mask(mx1+xm,my1+ym,mz1+zm) && cval>max_val) max_val = cval; + const T cval = (Tt)_img._atXYZ(x + xm,y + ym,z + zm); + if (_mask(mx1 + xm,my1 + ym,mz1 + zm) && cval>max_val) max_val = cval; } res(x,y,z,c) = max_val; } @@ -24929,13 +29310,13 @@ #pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=128) #endif cimg_forYZ(res,y,z) - for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { + for (int x = 0; x=mye || z=mze)?++x:((x=mxe)?++x:(x=mxe))) { Tt max_val = cimg::type::min(); for (int zm = -mz1; zm<=mz2; ++zm) for (int ym = -my1; ym<=my2; ++ym) for (int xm = -mx1; xm<=mx2; ++xm) { - const T cval = (Tt)_img.atXYZ(x+xm,y+ym,z+zm,0,0); - if (_mask(mx1+xm,my1+ym,mz1+zm) && cval>max_val) max_val = cval; + const T cval = (Tt)_img.atXYZ(x + xm,y + ym,z + zm,0,0); + if (_mask(mx1 + xm,my1 + ym,mz1 + zm) && cval>max_val) max_val = cval; } res(x,y,z,c) = max_val; } @@ -25132,12 +29513,18 @@ // Find seed points and insert them in priority queue. const T *ptrs = _data; cimg_forXYZ(*this,x,y,z) if (*(ptrs++)) { - if (x-1>=0 && !(*this)(x-1,y,z)) Q._priority_queue_insert(is_queued,sizeQ,priority(x-1,y,z),x-1,y,z); - if (x+1=0 && !(*this)(x,y-1,z)) Q._priority_queue_insert(is_queued,sizeQ,priority(x,y-1,z),x,y-1,z); - if (y+1=0 && !(*this)(x,y,z-1)) Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z-1),x,y,z-1); - if (z+1=0 && !(*this)(x - 1,y,z)) + Q._priority_queue_insert(is_queued,sizeQ,priority(x - 1,y,z),x - 1,y,z); + if (x + 1=0 && !(*this)(x,y - 1,z)) + Q._priority_queue_insert(is_queued,sizeQ,priority(x,y - 1,z),x,y - 1,z); + if (y + 1=0 && !(*this)(x,y,z - 1)) + Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z - 1),x,y,z - 1); + if (z + 1=0) { - if ((*this)(x-1,y,z)) { - if (!label) label = (unsigned int)(*this)(x-1,y,z); - else if (label!=(*this)(x-1,y,z)) is_same_label = false; - } else Q._priority_queue_insert(is_queued,sizeQ,priority(x-1,y,z),x-1,y,z); - } - if (x+1=0) { - if ((*this)(x,y-1,z)) { - if (!label) label = (unsigned int)(*this)(x,y-1,z); - else if (label!=(*this)(x,y-1,z)) is_same_label = false; - } else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y-1,z),x,y-1,z); - } - if (y+1=0) { - if ((*this)(x,y,z-1)) { - if (!label) label = (unsigned int)(*this)(x,y,z-1); - else if (label!=(*this)(x,y,z-1)) is_same_label = false; - } else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z-1),x,y,z-1); - } - if (z+1=0) { + if ((*this)(x - 1,y,z)) { + if (!label) label = (*this)(x - 1,y,z); + else if (label!=(*this)(x - 1,y,z)) is_same_label = false; + } else Q._priority_queue_insert(is_queued,sizeQ,priority(x - 1,y,z),x - 1,y,z); + } + if (x + 1=0) { + if ((*this)(x,y - 1,z)) { + if (!label) label = (*this)(x,y - 1,z); + else if (label!=(*this)(x,y - 1,z)) is_same_label = false; + } else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y - 1,z),x,y - 1,z); + } + if (y + 1=0) { + if ((*this)(x,y,z - 1)) { + if (!label) label = (*this)(x,y,z - 1); + else if (label!=(*this)(x,y,z - 1)) is_same_label = false; + } else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z - 1),x,y,z - 1); + } + if (z + 1=0 && (*this)(x-1,y,z)) || (x+1=0 && (*this)(x,y-1,z)) || (y+1=0 && (*this)(x,y,z-1)) || (z+1>depth() && (*this)(x,y,z+1)))) + ((x - 1>=0 && (*this)(x - 1,y,z)) || (x + 1=0 && (*this)(x,y - 1,z)) || (y + 1=0 && (*this)(x,y,z - 1)) || (z + 1>depth() && (*this)(x,y,z + 1)))) Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z),x,y,z); // Start line filling process. @@ -25207,35 +29594,35 @@ Q._priority_queue_remove(sizeQ); t pmax = cimg::type::min(); int xmax = 0, ymax = 0, zmax = 0; - if (x-1>=0) { - if ((*this)(x-1,y,z)) { - if (priority(x-1,y,z)>pmax) { pmax = priority(x-1,y,z); xmax = x-1; ymax = y; zmax = z; } - } else Q._priority_queue_insert(is_queued,sizeQ,priority(x-1,y,z),x-1,y,z); - } - if (x+1pmax) { pmax = priority(x+1,y,z); xmax = x+1; ymax = y; zmax = z; } - } else Q._priority_queue_insert(is_queued,sizeQ,priority(x+1,y,z),x+1,y,z); - } - if (y-1>=0) { - if ((*this)(x,y-1,z)) { - if (priority(x,y-1,z)>pmax) { pmax = priority(x,y-1,z); xmax = x; ymax = y-1; zmax = z; } - } else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y-1,z),x,y-1,z); - } - if (y+1pmax) { pmax = priority(x,y+1,z); xmax = x; ymax = y+1; zmax = z; } - } else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y+1,z),x,y+1,z); - } - if (z-1>=0) { - if ((*this)(x,y,z-1)) { - if (priority(x,y,z-1)>pmax) { pmax = priority(x,y,z-1); xmax = x; ymax = y; zmax = z-1; } - } else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z-1),x,y,z-1); - } - if (z+1pmax) { pmax = priority(x,y,z+1); xmax = x; ymax = y; zmax = z+1; } - } else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z+1),x,y,z+1); + if (x - 1>=0) { + if ((*this)(x - 1,y,z)) { + if (priority(x - 1,y,z)>pmax) { pmax = priority(x - 1,y,z); xmax = x - 1; ymax = y; zmax = z; } + } else Q._priority_queue_insert(is_queued,sizeQ,priority(x - 1,y,z),x - 1,y,z); + } + if (x + 1pmax) { pmax = priority(x + 1,y,z); xmax = x + 1; ymax = y; zmax = z; } + } else Q._priority_queue_insert(is_queued,sizeQ,priority(x + 1,y,z),x + 1,y,z); + } + if (y - 1>=0) { + if ((*this)(x,y - 1,z)) { + if (priority(x,y - 1,z)>pmax) { pmax = priority(x,y - 1,z); xmax = x; ymax = y - 1; zmax = z; } + } else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y - 1,z),x,y - 1,z); + } + if (y + 1pmax) { pmax = priority(x,y + 1,z); xmax = x; ymax = y + 1; zmax = z; } + } else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y + 1,z),x,y + 1,z); + } + if (z - 1>=0) { + if ((*this)(x,y,z - 1)) { + if (priority(x,y,z - 1)>pmax) { pmax = priority(x,y,z - 1); xmax = x; ymax = y; zmax = z - 1; } + } else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z - 1),x,y,z - 1); + } + if (z + 1pmax) { pmax = priority(x,y,z + 1); xmax = x; ymax = y; zmax = z + 1; } + } else Q._priority_queue_insert(is_queued,sizeQ,priority(x,y,z + 1),x,y,z + 1); } (*this)(x,y,z) = (*this)(xmax,ymax,zmax); } @@ -25256,8 +29643,8 @@ if (is_queued(x,y,z)) return false; is_queued(x,y,z) = true; if (++siz>=_width) { if (!is_empty()) resize(_width*2,4,1,1,0); else assign(64,4); } - (*this)(siz-1,0) = (T)value; (*this)(siz-1,1) = (T)x; (*this)(siz-1,2) = (T)y; (*this)(siz-1,3) = (T)z; - for (unsigned int pos = siz - 1, par = 0; pos && value>(*this)(par=(pos+1)/2-1,0); pos = par) { + (*this)(siz - 1,0) = (T)value; (*this)(siz - 1,1) = (T)x; (*this)(siz - 1,2) = (T)y; (*this)(siz - 1,3) = (T)z; + for (unsigned int pos = siz - 1, par = 0; pos && value>(*this)(par=(pos + 1)/2 - 1,0); pos = par) { cimg::swap((*this)(pos,0),(*this)(par,0)); cimg::swap((*this)(pos,1),(*this)(par,1)); cimg::swap((*this)(pos,2),(*this)(par,2)); cimg::swap((*this)(pos,3),(*this)(par,3)); } @@ -25269,7 +29656,8 @@ (*this)(0,2) = (*this)(siz,2); (*this)(0,3) = (*this)(siz,3); const float value = (*this)(0,0); for (unsigned int pos = 0, left = 0, right = 0; - ((right=2*(pos+1),(left=right-1))(*this)(right,0)) { cimg::swap((*this)(pos,0),(*this)(left,0)); cimg::swap((*this)(pos,1),(*this)(left,1)); @@ -25296,7 +29684,8 @@ \param axis Axis along which the filter is computed. Can be { 'x' | 'y' | 'z' | 'c' }. \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }. **/ - CImg& deriche(const float sigma, const int order=0, const char axis='x', const bool boundary_conditions=true) { + CImg& deriche(const float sigma, const unsigned int order=0, const char axis='x', + const bool boundary_conditions=true) { #define _cimg_deriche_apply \ CImg Y(N); \ Tfloat *ptrY = Y._data, yb = 0, yp = 0; \ @@ -25310,7 +29699,7 @@ T xn = (T)0, xa = (T)0; \ Tfloat yn = 0, ya = 0; \ if (boundary_conditions) { xn = xa = *(ptrX-off); yn = ya = (Tfloat)coefn*xn; } \ - for (int n = N-1; n>=0; --n) { \ + for (int n = N - 1; n>=0; --n) { \ const T xc = *(ptrX-=off); \ const Tfloat yc = (Tfloat)(a2*xn + a3*xa - b1*yn - b2*ya); \ xa = xn; xn = xc; ya = yn; yn = yc; \ @@ -25329,14 +29718,14 @@ float a0 = 0, a1 = 0, a2 = 0, a3 = 0, coefp = 0, coefn = 0; switch (order) { case 0 : { - const float k = (1-ema)*(1-ema)/(1+2*alpha*ema-ema2); + const float k = (1-ema)*(1-ema)/(1 + 2*alpha*ema-ema2); a0 = k; - a1 = k*(alpha-1)*ema; - a2 = k*(alpha+1)*ema; + a1 = k*(alpha - 1)*ema; + a2 = k*(alpha + 1)*ema; a3 = -k*ema2; } break; case 1 : { - const float k = -(1-ema)*(1-ema)*(1-ema)/(2*(ema+1)*ema); + const float k = -(1-ema)*(1-ema)*(1-ema)/(2*(ema + 1)*ema); a0 = a3 = 0; a1 = k*ema; a2 = -a1; @@ -25344,11 +29733,11 @@ case 2 : { const float ea = (float)std::exp(-alpha), - k = -(ema2-1)/(2*alpha*ema), - kn = (-2*(-1+3*ea-3*ea*ea+ea*ea*ea)/(3*ea+1+3*ea*ea+ea*ea*ea)); + k = -(ema2 - 1)/(2*alpha*ema), + kn = (-2*(-1 + 3*ea - 3*ea*ea + ea*ea*ea)/(3*ea + 1 + 3*ea*ea + ea*ea*ea)); a0 = kn; - a1 = -kn*(1+k*alpha)*ema; - a2 = kn*(1-k*alpha)*ema; + a1 = -kn*(1 + k*alpha)*ema; + a2 = kn*(1 - k*alpha)*ema; a3 = -kn*ema2; } break; default : @@ -25358,8 +29747,8 @@ cimg_instance, order); } - coefp = (a0+a1)/(1+b1+b2); - coefn = (a2+a3)/(1+b1+b2); + coefp = (a0 + a1)/(1 + b1 + b2); + coefn = (a2 + a3)/(1 + b1 + b2); switch (naxis) { case 'x' : { const int N = width(); @@ -25398,24 +29787,24 @@ } //! Apply recursive Deriche filter \newinstance. - CImg get_deriche(const float sigma, const int order=0, const char axis='x', + CImg get_deriche(const float sigma, const unsigned int order=0, const char axis='x', const bool boundary_conditions=true) const { return CImg(*this,false).deriche(sigma,order,axis,boundary_conditions); } // [internal] Apply a recursive filter (used by CImg::vanvliet()). - /** + /* \param ptr the pointer of the data - \param filter the coefficient of the filter in the following order [n,n-1,n-2,n-3]. + \param filter the coefficient of the filter in the following order [n,n - 1,n - 2,n - 3]. \param N size of the data \param off the offset between two data point \param order the order of the filter 0 (smoothing), 1st derivtive, 2nd derivative, 3rd derivative \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }. \note Boundary condition using B. Triggs method (IEEE trans on Sig Proc 2005). - **/ + */ static void _cimg_recursive_apply(T *data, const double filter[], const int N, const unsigned long off, - const int order, const bool boundary_conditions) { - double val[4] = { 0 }; // res[n,n-1,n-2,n-3,..] or res[n,n+1,n+2,n+3,..] + const unsigned int order, const bool boundary_conditions) { + double val[4] = { 0 }; // res[n,n - 1,n - 2,n - 3,..] or res[n,n + 1,n + 2,n + 3,..] const double sumsq = filter[0], sum = sumsq * sumsq, a1 = filter[1], a2 = filter[2], a3 = filter[3], @@ -25432,39 +29821,39 @@ M[8] = scaleM * a3 * (a1 + a3 * a2); switch (order) { case 0 : { - const double iplus = (boundary_conditions?data[(N-1)*off]:0); - for (int pass = 0; pass < 2; ++pass) { + const double iplus = (boundary_conditions?data[(N - 1)*off]:0); + for (int pass = 0; pass<2; ++pass) { if (!pass) { - for (int k = 1; k < 4; ++k) val[k] = (boundary_conditions?*data/sumsq:0); + for (int k = 1; k<4; ++k) val[k] = (boundary_conditions?*data/sumsq:0); } else { /* apply Triggs border condition */ const double - uplus = iplus / (1.0 - a1 - a2 - a3), vplus = uplus / (1.0 - a1 - a2 - a3), + uplus = iplus/(1.0 - a1 - a2 - a3), vplus = uplus/(1.0 - a1 - a2 - a3), unp = val[1] - uplus, unp1 = val[2] - uplus, unp2 = val[3] - uplus; val[0] = (M[0] * unp + M[1] * unp1 + M[2] * unp2 + vplus) * sum; val[1] = (M[3] * unp + M[4] * unp1 + M[5] * unp2 + vplus) * sum; val[2] = (M[6] * unp + M[7] * unp1 + M[8] * unp2 + vplus) * sum; *data = (T)val[0]; data -= off; - for (int k = 3; k > 0; --k) val[k] = val[k-1]; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; } - for (int n = pass; n < N; ++n) { + for (int n = pass; n 0; --k) val[k] = val[k-1]; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; } if (!pass) data -= off; } } break; case 1 : { double x[3]; // [front,center,back] - for (int pass = 0; pass < 2; ++pass) { + for (int pass = 0; pass<2; ++pass) { if (!pass) { - for (int k = 0; k < 3; ++k) x[k] = (boundary_conditions?*data:0); - for (int k = 0; k < 4; ++k) val[k] = 0; + for (int k = 0; k<3; ++k) x[k] = (boundary_conditions?*data:0); + for (int k = 0; k<4; ++k) val[k] = 0; } else { /* apply Triggs border condition */ const double @@ -25474,30 +29863,30 @@ val[2] = (M[6] * unp + M[7] * unp1 + M[8] * unp2) * sum; *data = (T)val[0]; data -= off; - for (int k = 3; k > 0; --k) val[k] = val[k-1]; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; } - for (int n = pass; n < N - 1; ++n) { + for (int n = pass; n 0; --k) x[k] = x[k-1]; + for (int k = 2; k>0; --k) x[k] = x[k - 1]; } else { data-=off;} - for (int k = 3; k > 0; --k) val[k] = val[k-1]; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; } *data = (T)0; } } break; case 2: { double x[3]; // [front,center,back] - for (int pass = 0; pass < 2; ++pass) { + for (int pass = 0; pass<2; ++pass) { if (!pass) { - for (int k = 0; k < 3; ++k) x[k] = (boundary_conditions?*data:0); - for (int k = 0; k < 4; ++k) val[k] = 0; + for (int k = 0; k<3; ++k) x[k] = (boundary_conditions?*data:0); + for (int k = 0; k<4; ++k) val[k] = 0; } else { /* apply Triggs border condition */ const double @@ -25507,16 +29896,16 @@ val[2] = (M[6] * unp + M[7] * unp1 + M[8] * unp2) * sum; *data = (T)val[0]; data -= off; - for (int k = 3; k > 0; --k) val[k] = val[k-1]; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; } - for (int n = pass; n < N - 1; ++n) { - if (!pass) { x[0] = *(data+off); val[0] = (x[1] - x[2]); } - else { x[0] = *(data-off); val[0] = (x[2] - x[1]) * sum; } - for (int k = 1; k < 4; ++k) val[0] += val[k]*filter[k]; + for (int n = pass; n 0; --k) x[k] = x[k-1]; - for (int k = 3; k > 0; --k) val[k] = val[k-1]; + for (int k = 2; k>0; --k) x[k] = x[k - 1]; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; } *data = (T)0; } @@ -25525,8 +29914,8 @@ double x[3]; // [front,center,back] for (int pass = 0; pass<2; ++pass) { if (!pass) { - for (int k = 0; k < 3; ++k) x[k] = (boundary_conditions?*data:0); - for (int k = 0; k < 4; ++k) val[k] = 0; + for (int k = 0; k<3; ++k) x[k] = (boundary_conditions?*data:0); + for (int k = 0; k<4; ++k) val[k] = 0; } else { /* apply Triggs border condition */ const double @@ -25536,16 +29925,16 @@ val[2] = (M[6] * unp + M[7] * unp1 + M[8] * unp2) * sum; *data = (T)val[0]; data -= off; - for (int k = 3; k > 0; --k) val[k] = val[k-1]; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; } - for (int n = pass; n < N - 1; ++n) { - if (!pass) { x[0] = *(data+off); val[0] = (x[0] - 2*x[1] + x[2]); } - else { x[0] = *(data-off); val[0] = 0.5f * (x[2] - x[0]) * sum; } - for (int k = 1; k < 4; ++k) val[0] += val[k] * filter[k]; + for (int n = pass; n 0; --k) x[k] = x[k-1]; - for (int k = 3; k > 0; --k) val[k] = val[k-1]; + for (int k = 2; k>0; --k) x[k] = x[k - 1]; + for (int k = 3; k>0; --k) val[k] = val[k - 1]; } *data = (T)0; } @@ -25571,16 +29960,17 @@ recursive filtering. IEEE Trans. Signal Processing, vol. 54, pp. 2365-2367, 2006. **/ - CImg& vanvliet(const float sigma, const int order, const char axis='x', const bool boundary_conditions=true) { + CImg& vanvliet(const float sigma, const unsigned int order, const char axis='x', + const bool boundary_conditions=true) { if (is_empty()) return *this; const char naxis = cimg::uncase(axis); const float nsigma = sigma>=0?sigma:-sigma*(naxis=='x'?_width:naxis=='y'?_height:naxis=='z'?_depth:_spectrum)/100; - if (is_empty() || (nsigma<0.1f && !order)) return *this; + if (is_empty() || (nsigma<0.5f && !order)) return *this; const double - nnsigma = nsigma<0.1f?0.1f:nsigma, - m0 = 1.16680, m1 = 1.10783, m2 = 1.40586, - m1sq = m1 * m1, m2sq = m2 * m2, - q = (nnsigma<3.556?-0.2568+0.5784*nnsigma+0.0561*nnsigma*nnsigma:2.5091+0.9804*(nnsigma-3.556)), + nnsigma = nsigma<0.5f?0.5f:nsigma, + m0 = 1.16680, m1 = 1.10783, m2 = 1.40586, + m1sq = m1 * m1, m2sq = m2 * m2, + q = (nnsigma<3.556?-0.2568 + 0.5784*nnsigma + 0.0561*nnsigma*nnsigma:2.5091 + 0.9804*(nnsigma - 3.556)), qsq = q * q, scale = (m0 + q) * (m1sq + m2sq + 2 * m1 * q + qsq), b1 = -q * (2 * m0 * m1 + m1sq + m2sq + (2 * m0 + 4 * m1) * q + 3 * qsq) / scale, @@ -25625,7 +30015,7 @@ } //! Blur image using Van Vliet recursive Gaussian filter. \newinstance. - CImg get_vanvliet(const float sigma, const int order, const char axis='x', + CImg get_vanvliet(const float sigma, const unsigned int order, const char axis='x', const bool boundary_conditions=true) const { return CImg(*this,false).vanvliet(sigma,order,axis,boundary_conditions); } @@ -25644,16 +30034,15 @@ **/ CImg& blur(const float sigma_x, const float sigma_y, const float sigma_z, const bool boundary_conditions=true, const bool is_gaussian=false) { - if (!is_empty()) { - if (is_gaussian) { - if (_width>1) vanvliet(sigma_x,0,'x',boundary_conditions); - if (_height>1) vanvliet(sigma_y,0,'y',boundary_conditions); - if (_depth>1) vanvliet(sigma_z,0,'z',boundary_conditions); - } else { - if (_width>1) deriche(sigma_x,0,'x',boundary_conditions); - if (_height>1) deriche(sigma_y,0,'y',boundary_conditions); - if (_depth>1) deriche(sigma_z,0,'z',boundary_conditions); - } + if (is_empty()) return *this; + if (is_gaussian) { + if (_width>1) vanvliet(sigma_x,0,'x',boundary_conditions); + if (_height>1) vanvliet(sigma_y,0,'y',boundary_conditions); + if (_depth>1) vanvliet(sigma_z,0,'z',boundary_conditions); + } else { + if (_width>1) deriche(sigma_x,0,'x',boundary_conditions); + if (_height>1) deriche(sigma_y,0,'y',boundary_conditions); + if (_depth>1) deriche(sigma_z,0,'z',boundary_conditions); } return *this; } @@ -25714,6 +30103,7 @@ Tfloat *ptrd = velocity._data, veloc_max = 0; if (is_3d) // 3d version cimg_forC(*this,c) { + cimg_test_abort(); CImg_3x3x3(I,Tfloat); cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { const Tfloat @@ -25731,6 +30121,7 @@ } else // 2d version cimg_forZC(*this,z,c) { + cimg_test_abort(); CImg_3x3(I,Tfloat); cimg_for3x3(*this,x,y,z,c,I,Tfloat) { const Tfloat @@ -25770,7 +30161,7 @@ u = (float)(a*vx + b*vy + c*vz), v = (float)(b*vx + d*vy + e*vz), w = (float)(c*vx + e*vy + f*vz), - n = (float)std::sqrt(1e-5+u*u+v*v+w*w), + n = (float)std::sqrt(1e-5 + u*u + v*v + w*w), dln = dl/n; *(pd0++) = (Tfloat)(u*dln); *(pd1++) = (Tfloat)(v*dln); @@ -25778,6 +30169,7 @@ *(pd3++) = (Tfloat)n; } + cimg_test_abort(); #ifdef cimg_use_openmp #pragma omp parallel for collapse(2) if (_width>=256 && _height*_depth>=2) firstprivate(val) #endif @@ -25797,9 +30189,9 @@ case 0 : { // Nearest neighbor for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1 && Z>=0 && Z<=dz1; l+=dl) { const int - cx = (int)(X+0.5f), - cy = (int)(Y+0.5f), - cz = (int)(Z+0.5f); + cx = (int)(X + 0.5f), + cy = (int)(Y + 0.5f), + cz = (int)(Z + 0.5f); const float u = (float)W(cx,cy,cz,0), v = (float)W(cx,cy,cz,1), @@ -25834,9 +30226,9 @@ u0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,0)), v0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,1)), w0 = (float)(0.5f*W._linear_atXYZ(X,Y,Z,2)), - u = (float)(W._linear_atXYZ(X+u0,Y+v0,Z+w0,0)), - v = (float)(W._linear_atXYZ(X+u0,Y+v0,Z+w0,1)), - w = (float)(W._linear_atXYZ(X+u0,Y+v0,Z+w0,2)); + u = (float)(W._linear_atXYZ(X + u0,Y + v0,Z + w0,0)), + v = (float)(W._linear_atXYZ(X + u0,Y + v0,Z + w0,1)), + w = (float)(W._linear_atXYZ(X + u0,Y + v0,Z + w0,2)); if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)_linear_atXYZ(X,Y,Z,c); ++S; } else { const float coef = (float)std::exp(-l*l/fsigma2); @@ -25864,15 +30256,16 @@ const float u = (float)(a*vx + b*vy), v = (float)(b*vx + c*vy), - n = (float)std::sqrt(1e-5+u*u+v*v), + n = (float)std::sqrt(1e-5 + u*u + v*v), dln = dl/n; *(pd0++) = (Tfloat)(u*dln); *(pd1++) = (Tfloat)(v*dln); *(pd2++) = (Tfloat)n; } + cimg_test_abort(); #ifdef cimg_use_openmp -#pragma omp parallel for if (_width>=256 && _height>=2) firstprivate(val) +#pragma omp parallel for cimg_openmp_if (_width>=256 && _height>=2) firstprivate(val) #endif cimg_forXY(*this,x,y) { val.fill(0); @@ -25889,8 +30282,8 @@ case 0 : { // Nearest-neighbor for (float l = 0; l=0 && X<=dx1 && Y>=0 && Y<=dy1; l+=dl) { const int - cx = (int)(X+0.5f), - cy = (int)(Y+0.5f); + cx = (int)(X + 0.5f), + cy = (int)(Y + 0.5f); const float u = (float)W(cx,cy,0,0), v = (float)W(cx,cy,0,1); @@ -25922,8 +30315,8 @@ const float u0 = (float)(0.5f*W._linear_atXY(X,Y,0,0)), v0 = (float)(0.5f*W._linear_atXY(X,Y,0,1)), - u = (float)(W._linear_atXY(X+u0,Y+v0,0,0)), - v = (float)(W._linear_atXY(X+u0,Y+v0,0,1)); + u = (float)(W._linear_atXY(X + u0,Y + v0,0,0)), + v = (float)(W._linear_atXY(X + u0,Y + v0,0,1)); if (is_fast_approx) { cimg_forC(*this,c) val[c]+=(Tfloat)_linear_atXY(X,Y,0,c); ++S; } else { const float coef = (float)std::exp(-l*l/fsigma2); @@ -26043,9 +30436,9 @@ padding_z = (int)(2*derived_sigma_z) + 1, padding_r = (int)(2*derived_sigma_r) + 1; const unsigned int - bx = (unsigned int)((_width -1)/_sampling_x + 1 + 2*padding_x), - by = (unsigned int)((_height-1)/_sampling_y + 1 + 2*padding_y), - bz = (unsigned int)((_depth -1)/_sampling_z + 1 + 2*padding_z), + bx = (unsigned int)((_width - 1)/_sampling_x + 1 + 2*padding_x), + by = (unsigned int)((_height - 1)/_sampling_y + 1 + 2*padding_y), + bz = (unsigned int)((_depth - 1)/_sampling_z + 1 + 2*padding_z), br = (unsigned int)(edge_delta/_sampling_r + 1 + 2*padding_r); if (bx>0 || by>0 || bz>0 || br>0) { const bool is_3d = (_depth>1); @@ -26144,6 +30537,180 @@ return CImg(*this,false).blur_bilateral(guide,sigma_s,sigma_r,sampling_s,sampling_r); } + // [internal] Apply a box filter (used by CImg::boxfilter() and CImg::blur_box()). + /* + \param ptr the pointer of the data + \param N size of the data + \param sigma sigma of the box filter + \param off the offset between two data point + \param order the order of the filter 0 (smoothing), 1st derivtive and 2nd derivative. + \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }. + */ + static void _cimg_blur_box_apply(T *ptr, const float sigma, const int N, const unsigned long off, + const int order, const bool boundary_conditions) { + // Smooth. + if (sigma>1) { + const int w2 = (int)(sigma - 1)/2; + const unsigned int winsize = 2*w2 + 1U; + const double frac = (sigma - winsize)/2.0; + CImg win(winsize); + Tfloat sum = 0; // window sum + for (int x = -w2; x<=w2; ++x) { + win[x + w2] = __cimg_blur_box_apply(ptr,N,off,boundary_conditions,x); + sum+=win[x + w2]; + } + int ifirst = 0, ilast = 2*w2; + Tfloat + prev = __cimg_blur_box_apply(ptr,N,off,boundary_conditions,-w2 - 1), + next = __cimg_blur_box_apply(ptr,N,off,boundary_conditions,w2 + 1); + for (int x = 0; x < N - 1; ++x) { + const double sum2 = sum + frac * (prev + next); + ptr[x*off] = (T)(sum2/sigma); + prev = win[ifirst]; + sum-=prev; + ifirst = (int)((ifirst + 1)%winsize); + ilast = (int)((ilast + 1)%winsize); + win[ilast] = next; + sum+=next; + next = __cimg_blur_box_apply(ptr,N,off,boundary_conditions,x + w2 + 2); + } + const double sum2 = sum + frac * (prev + next); + ptr[(N - 1)*off] = (T)(sum2/sigma); + } + + // Derive. + switch (order) { + case 0 : + break; + case 1 : { + Tfloat + p = __cimg_blur_box_apply(ptr,N,off,boundary_conditions,-1), + c = __cimg_blur_box_apply(ptr,N,off,boundary_conditions,0), + n = __cimg_blur_box_apply(ptr,N,off,boundary_conditions,1); + for (int x = 0; x=N) return boundary_conditions?ptr[(N - 1)*off]:T(); + return ptr[x*off]; + } + + // Apply box filter of order 0,1,2. + /** + \param sigma sigma of the box filter + \param order the order of the filter 0,1 or 2. + \param axis Axis along which the filter is computed. Can be { 'x' | 'y' | 'z' | 'c' }. + \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }. + **/ + CImg& boxfilter(const float sigma, const int order, const char axis='x', + const bool boundary_conditions=true) { + if (is_empty() || !sigma || (sigma<=1 && !order)) return *this; + const char naxis = cimg::uncase(axis); + const float nsigma = sigma>=0?sigma:-sigma*(naxis=='x'?_width:naxis=='y'?_height:naxis=='z'?_depth:_spectrum)/100; + switch (naxis) { + case 'x' : { +#ifdef cimg_use_openmp +#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) +#endif + cimg_forYZC(*this,y,z,c) + _cimg_blur_box_apply(data(0,y,z,c),nsigma,_width,1U,order,boundary_conditions); + } break; + case 'y' : { +#ifdef cimg_use_openmp +#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) +#endif + cimg_forXZC(*this,x,z,c) + _cimg_blur_box_apply(data(x,0,z,c),nsigma,_height,(unsigned long)_width,order,boundary_conditions); + } break; + case 'z' : { +#ifdef cimg_use_openmp +#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) +#endif + cimg_forXYC(*this,x,y,c) + _cimg_blur_box_apply(data(x,y,0,c),nsigma,_depth,(unsigned long)(_width*_height),order,boundary_conditions); + } break; + default : { +#ifdef cimg_use_openmp +#pragma omp parallel for collapse(3) if (_width>=256 && _height*_depth*_spectrum>=16) +#endif + cimg_forXYZ(*this,x,y,z) + _cimg_blur_box_apply(data(x,y,z,0),nsigma,_spectrum,(unsigned long)(_width*_height*_depth), + order,boundary_conditions); + } + } + return *this; + } + + // Apply box filter of order 0,1 or 2 \newinstance. + CImg get_boxfilter(const float sigma, const int order, const char axis='x', + const bool boundary_conditions=true) const { + return CImg(*this,false).boxfilter(sigma,order,axis,boundary_conditions); + } + + //! Blur image with a box filter. + /** + \param sigma_x Size of the box window, along the X-axis. + \param sigma_y Size of the box window, along the Y-axis. + \param sigma_z Size of the box window, along the Z-axis. + \param boundary_conditions Boundary conditions. Can be { false=dirichlet | true=neumann }. + \note + - This is a recursive algorithm, not depending on the values of the box kernel size. + \see blur(). + **/ + CImg& blur_box(const float sigma_x, const float sigma_y, const float sigma_z, + const bool boundary_conditions=true) { + if (is_empty()) return *this; + if (_width>1) boxfilter(sigma_x,0,'x',boundary_conditions); + if (_height>1) boxfilter(sigma_y,0,'y',boundary_conditions); + if (_depth>1) boxfilter(sigma_z,0,'z',boundary_conditions); + return *this; + } + + //! Blur image with a box filter \newinstance. + CImg get_blur_box(const float sigma_x, const float sigma_y, const float sigma_z, + const bool boundary_conditions=true) const { + return CImg(*this,false).blur_box(sigma_x,sigma_y,sigma_z,boundary_conditions); + } + + //! Blur image with a box filter. + /** + \param sigma Size of the box window. + \param boundary_conditions Boundary conditions. Can be { 0=dirichlet | 1=neumann }.a + \see deriche(), vanvliet(). + **/ + CImg& blur_box(const float sigma, const bool boundary_conditions=true) { + const float nsigma = sigma>=0?sigma:-sigma*cimg::max(_width,_height,_depth)/100; + return blur_box(nsigma,nsigma,nsigma,boundary_conditions); + } + + //! Blur image with a box filter \newinstance. + CImg get_blur_box(const float sigma, const bool boundary_conditions=true) const { + return CImg(*this,false).blur_box(sigma,boundary_conditions); + } + //! Blur image, with the image guided filter. /** \param guide Image used to guide the smoothing process. @@ -26376,7 +30943,7 @@ const int psize2 = (int)patch_size/2, psize1 = (int)patch_size - psize2 - 1; if (is_fast_approx) #ifdef cimg_use_openmp -#pragma omp parallel for if (res._width>=32 && res._height>=4) firstprivate(P,Q) +#pragma omp parallel for cimg_openmp_if (res._width>=32 && res._height>=4) firstprivate(P,Q) #endif cimg_forXY(res,x,y) { // 2d fast approximation. P = img.get_crop(x - psize1,y - psize1,x + psize2,y + psize2,true); @@ -26395,7 +30962,7 @@ else cimg_forC(res,c) res(x,y,c) = (Tfloat)((*this)(x,y,c)); } else #ifdef cimg_use_openmp -#pragma omp parallel for if (res._width>=32 && res._height>=4) firstprivate(P,Q) +#pragma omp parallel for cimg_openmp_if (res._width>=32 && res._height>=4) firstprivate(P,Q) #endif cimg_forXY(res,x,y) { // 2d exact algorithm. P = img.get_crop(x - psize1,y - psize1,x + psize2,y + psize2,true); @@ -26444,16 +31011,16 @@ #endif cimg_forXYZC(*this,x,y,z,c) { // With threshold. const int - x0 = x - hl, y0 = y - hl, z0 = z-hl, x1 = x + hr, y1 = y + hr, z1 = z+hr, + x0 = x - hl, y0 = y - hl, z0 = z - hl, x1 = x + hr, y1 = y + hr, z1 = z + hr, nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, nz0 = z0<0?0:z0, - nx1 = x1>=width()?width()-1:x1, ny1 = y1>=height()?height()-1:y1, nz1 = z1>=depth()?depth()-1:z1; + nx1 = x1>=width()?width() - 1:x1, ny1 = y1>=height()?height() - 1:y1, nz1 = z1>=depth()?depth() - 1:z1; const float val0 = (float)(*this)(x,y,z,c); CImg values(n*n*n); unsigned int nb_values = 0; T *ptrd = values.data(); cimg_for_inXYZ(*this,nx0,ny0,nz0,nx1,ny1,nz1,p,q,r) if (cimg::abs((float)(*this)(p,q,r,c)-val0)<=threshold) { *(ptrd++) = (*this)(p,q,r,c); ++nb_values; } - res(x,y,z,c) = values.get_shared_points(0,nb_values-1).median(); + res(x,y,z,c) = values.get_shared_points(0,nb_values - 1).median(); } else #ifdef cimg_use_openmp @@ -26461,9 +31028,9 @@ #endif cimg_forXYZC(*this,x,y,z,c) { // Without threshold. const int - x0 = x - hl, y0 = y - hl, z0 = z-hl, x1 = x + hr, y1 = y + hr, z1 = z+hr, + x0 = x - hl, y0 = y - hl, z0 = z - hl, x1 = x + hr, y1 = y + hr, z1 = z + hr, nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, nz0 = z0<0?0:z0, - nx1 = x1>=width()?width()-1:x1, ny1 = y1>=height()?height()-1:y1, nz1 = z1>=depth()?depth()-1:z1; + nx1 = x1>=width()?width() - 1:x1, ny1 = y1>=height()?height() - 1:y1, nz1 = z1>=depth()?depth() - 1:z1; res(x,y,z,c) = get_crop(nx0,ny0,nz0,c,nx1,ny1,nz1,c).median(); } } else { @@ -26477,19 +31044,19 @@ const int x0 = x - hl, y0 = y - hl, x1 = x + hr, y1 = y + hr, nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, - nx1 = x1>=width()?width()-1:x1, ny1 = y1>=height()?height()-1:y1; + nx1 = x1>=width()?width() - 1:x1, ny1 = y1>=height()?height() - 1:y1; const float val0 = (float)(*this)(x,y,c); CImg values(n*n); unsigned int nb_values = 0; T *ptrd = values.data(); cimg_for_inXY(*this,nx0,ny0,nx1,ny1,p,q) if (cimg::abs((float)(*this)(p,q,c)-val0)<=threshold) { *(ptrd++) = (*this)(p,q,c); ++nb_values; } - res(x,y,c) = values.get_shared_points(0,nb_values-1).median(); + res(x,y,c) = values.get_shared_points(0,nb_values - 1).median(); } else switch (n) { // Without threshold. case 3 : { #ifdef cimg_use_openmp -#pragma omp parallel for if (_spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_spectrum>=2) #endif cimg_forC(*this,c) { T I[9] = { 0 }; @@ -26509,7 +31076,7 @@ } break; case 5 : { #ifdef cimg_use_openmp -#pragma omp parallel for if (_spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_spectrum>=2) #endif cimg_forC(*this,c) { T I[25] = { 0 }; @@ -26561,57 +31128,58 @@ const int x0 = x - hl, y0 = y - hl, x1 = x + hr, y1 = y + hr, nx0 = x0<0?0:x0, ny0 = y0<0?0:y0, - nx1 = x1>=width()?width()-1:x1, ny1 = y1>=height()?height()-1:y1; + nx1 = x1>=width()?width() - 1:x1, ny1 = y1>=height()?height() - 1:y1; res(x,y,c) = get_crop(nx0,ny0,0,c,nx1,ny1,0,c).median(); } } } } else { // 1d + CImg I; if (threshold>0) #ifdef cimg_use_openmp -#pragma omp parallel for if (_width>=16 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width>=16 && _spectrum>=2) #endif cimg_forXC(*this,x,c) { // With threshold. const int x0 = x - hl, x1 = x + hr, - nx0 = x0<0?0:x0, nx1 = x1>=width()?width()-1:x1; + nx0 = x0<0?0:x0, nx1 = x1>=width()?width() - 1:x1; const float val0 = (float)(*this)(x,c); CImg values(n); unsigned int nb_values = 0; T *ptrd = values.data(); cimg_for_inX(*this,nx0,nx1,p) if (cimg::abs((float)(*this)(p,c)-val0)<=threshold) { *(ptrd++) = (*this)(p,c); ++nb_values; } - res(x,c) = values.get_shared_points(0,nb_values-1).median(); + res(x,c) = values.get_shared_points(0,nb_values - 1).median(); } else switch (n) { // Without threshold. case 2 : { #ifdef cimg_use_openmp -#pragma omp parallel for if (_spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_spectrum>=2) #endif cimg_forC(*this,c) { - T I[4] = { 0 }; - cimg_for2x2(*this,x,y,0,c,I,T) res(x,c) = (T)(0.5f*(I[0]+I[1])); + I.assign(4); + cimg_for2x2(*this,x,y,0,c,I,T) res(x,c) = (T)(0.5f*(I[0] + I[1])); } } break; case 3 : { #ifdef cimg_use_openmp -#pragma omp parallel for if (_spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_spectrum>=2) #endif cimg_forC(*this,c) { - T I[9] = { 0 }; + I.assign(9); cimg_for3x3(*this,x,y,0,c,I,T) res(x,c) = I[3]=16 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width>=16 && _spectrum>=2) #endif cimg_forXC(*this,x,c) { const int x0 = x - hl, x1 = x + hr, - nx0 = x0<0?0:x0, nx1 = x1>=width()?width()-1:x1; + nx0 = x0<0?0:x0, nx1 = x1>=width()?width() - 1:x1; res(x,c) = get_crop(nx0,0,0,c,nx1,0,0,c).median(); } } @@ -26655,11 +31223,11 @@ *(ptrG0++) = vec(0,0); *(ptrG1++) = vec(0,1); *(ptrG2++) = vec(0,2); - *(ptrG3++) = 1 - (Tfloat)std::pow(1+val[0]+val[1]+val[2],-(Tfloat)nedge); + *(ptrG3++) = 1 - (Tfloat)std::pow(1 + val[0] + val[1] + val[2],-(Tfloat)nedge); } } #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height*_depth>=512 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height*_depth>=512 && _spectrum>=2) #endif cimg_forC(*this,c) { Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; @@ -26706,7 +31274,7 @@ CImg G = (alpha>0?get_blur(alpha).get_structure_tensors():get_structure_tensors()); if (sigma>0) G.blur(sigma); #ifdef cimg_use_openmp -#pragma omp parallel for if (_width>=32 && _height>=16) +#pragma omp parallel for cimg_openmp_if (_width>=32 && _height>=16) #endif cimg_forY(G,y) { CImg val, vec; @@ -26721,7 +31289,7 @@ } } #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height>=512 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height>=512 && _spectrum>=2) #endif cimg_forC(*this,c) { Tfloat *ptrd = velocity.data(0,0,0,c), veloc_max = 0; @@ -26803,7 +31371,7 @@ switch (scheme) { // 3d. case -1 : { // Backward finite differences. #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height*_depth>=1048576 && _spectrum>=2) #endif cimg_forC(*this,c) { const unsigned long off = c*_width*_height*_depth; @@ -26818,7 +31386,7 @@ } break; case 1 : { // Forward finite differences. #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height*_depth>=1048576 && _spectrum>=2) #endif cimg_forC(*this,c) { const unsigned long off = c*_width*_height*_depth; @@ -26843,7 +31411,7 @@ } break; default : { // Central finite differences. #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height*_depth>=1048576 && _spectrum>=2) #endif cimg_forC(*this,c) { const unsigned long off = c*_width*_height*_depth; @@ -26908,7 +31476,7 @@ const unsigned long off = c*_width*_height*_depth + z*_width*_height; Tfloat *ptrd0 = grad[0]._data + off, *ptrd1 = grad[1]._data + off; CImg_3x3(I,Tfloat); - const Tfloat a = (Tfloat)(0.25f*(2-std::sqrt(2.0f))), b = (Tfloat)(0.5f*(std::sqrt(2.0f)-1)); + const Tfloat a = (Tfloat)(0.25f*(2-std::sqrt(2.0f))), b = (Tfloat)(0.5f*(std::sqrt(2.0f) - 1)); cimg_for3x3(*this,x,y,z,c,I,Tfloat) { *(ptrd0++) = -a*Ipp - b*Ipc - a*Ipn + a*Inp + b*Inc + a*Inn; *(ptrd1++) = -a*Ipp - b*Icp - a*Inp + a*Ipn + b*Icn + a*Inn; @@ -26971,7 +31539,7 @@ if (!cimg::strcasecmp(naxes,def_axes3d)) { // 3d #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height*_depth>=1048576 && _spectrum>=2) #endif cimg_forC(*this,c) { const unsigned long off = c*_width*_height*_depth; @@ -27032,7 +31600,7 @@ else if (axis1=='x' && axis2=='z') { // Ixz valid_axis = true; #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height*_depth>=1048576 && _spectrum>=2) #endif cimg_forC(*this,c) { Tfloat *ptrd = res[l2].data(0,0,0,c); @@ -27054,7 +31622,7 @@ else if (axis1=='y' && axis2=='z') { // Iyz valid_axis = true; #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height*_depth>=1048576 && _spectrum>=2) #endif cimg_forC(*this,c) { Tfloat *ptrd = res[l2].data(0,0,0,c); @@ -27065,7 +31633,7 @@ else if (axis1=='z' && axis2=='z') { // Izz valid_axis = true; #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height*_depth>=1048576 && _spectrum>=2) #endif cimg_forC(*this,c) { Tfloat *ptrd = res[l2].data(0,0,0,c); @@ -27093,7 +31661,7 @@ CImg res(_width,_height,_depth,_spectrum); if (_depth>1) { // 3d #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height*_depth>=1048576 && _spectrum>=2) #endif cimg_forC(*this,c) { Tfloat *ptrd = res.data(0,0,0,c); @@ -27102,7 +31670,7 @@ } } else if (_height>1) { // 2d #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height>=1048576 && _depth*_spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height>=1048576 && _depth*_spectrum>=2) #endif cimg_forC(*this,c) { Tfloat *ptrd = res.data(0,0,0,c); @@ -27111,7 +31679,7 @@ } } else { // 1d #ifdef cimg_use_openmp -#pragma omp parallel for if (_width>=1048576 && _height*_depth*_spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width>=1048576 && _height*_depth*_spectrum>=2) #endif cimg_forC(*this,c) { Tfloat *ptrd = res.data(0,0,0,c); @@ -27124,22 +31692,21 @@ //! Compute the structure tensor field of an image. /** - \param scheme Numerical scheme. Can be { 0=central | 1=fwd/bwd1 | 2=fwd/bwd2 } + \param is_fwbw_scheme scheme. Can be { false=centered | true=forward-backward } **/ - CImg& structure_tensors(const unsigned int scheme=2) { - return get_structure_tensors(scheme).move_to(*this); + CImg& structure_tensors(const bool is_fwbw_scheme=false) { + return get_structure_tensors(is_fwbw_scheme).move_to(*this); } //! Compute the structure tensor field of an image \newinstance. - CImg get_structure_tensors(const unsigned int scheme=2) const { + CImg get_structure_tensors(const bool is_fwbw_scheme=false) const { if (is_empty()) return *this; CImg res; if (_depth>1) { // 3d res.assign(_width,_height,_depth,6,0); - switch (scheme) { - case 0 : { // classical central finite differences + if (!is_fwbw_scheme) { // Classical central finite differences #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height*_depth>=1048576 && _spectrum>=2) #endif cimg_forC(*this,c) { Tfloat @@ -27159,33 +31726,9 @@ *(ptrd5++)+=iz*iz; } } - } break; - case 1 : { // Forward/backward finite differences (version 1). -#ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) -#endif - cimg_forC(*this,c) { - Tfloat - *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2), - *ptrd3 = res.data(0,0,0,3), *ptrd4 = res.data(0,0,0,4), *ptrd5 = res.data(0,0,0,5); - CImg_3x3x3(I,Tfloat); - cimg_for3x3x3(*this,x,y,z,c,I,Tfloat) { - const Tfloat - ixf = Incc - Iccc, ixb = Iccc - Ipcc, - iyf = Icnc - Iccc, iyb = Iccc - Icpc, - izf = Iccn - Iccc, izb = Iccc - Iccp; - *(ptrd0++)+=(ixf*ixf + 2*ixf*ixb + ixb*ixb)/4; - *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; - *(ptrd2++)+=(ixf*izf + ixf*izb + ixb*izf + ixb*izb)/4; - *(ptrd3++)+=(iyf*iyf + 2*iyf*iyb + iyb*iyb)/4; - *(ptrd4++)+=(iyf*izf + iyf*izb + iyb*izf + iyb*izb)/4; - *(ptrd5++)+=(izf*izf + 2*izf*izb + izb*izb)/4; - } - } - } break; - default : { // Forward/backward finite differences (version 2). + } else { // Forward/backward finite differences. #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height*_depth>=1048576 && _spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height*_depth>=1048576 && _spectrum>=2) #endif cimg_forC(*this,c) { Tfloat @@ -27205,14 +31748,12 @@ *(ptrd5++)+=(izf*izf + izb*izb)/2; } } - } break; } } else { // 2d res.assign(_width,_height,_depth,3,0); - switch (scheme) { - case 0 : { // classical central finite differences + if (!is_fwbw_scheme) { // Classical central finite differences #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height>=1048576 && _depth*_spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height>=1048576 && _depth*_spectrum>=2) #endif cimg_forC(*this,c) { Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); @@ -27226,27 +31767,9 @@ *(ptrd2++)+=iy*iy; } } - } break; - case 1 : { // Forward/backward finite differences (version 1). -#ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height>=1048576 && _depth*_spectrum>=2) -#endif - cimg_forC(*this,c) { - Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); - CImg_3x3(I,Tfloat); - cimg_for3x3(*this,x,y,0,c,I,Tfloat) { - const Tfloat - ixf = Inc - Icc, ixb = Icc - Ipc, - iyf = Icn - Icc, iyb = Icc - Icp; - *(ptrd0++)+=(ixf*ixf + 2*ixf*ixb + ixb*ixb)/4; - *(ptrd1++)+=(ixf*iyf + ixf*iyb + ixb*iyf + ixb*iyb)/4; - *(ptrd2++)+=(iyf*iyf + 2*iyf*iyb + iyb*iyb)/4; - } - } - } break; - default : { // Forward/backward finite differences (version 2). + } else { // Forward/backward finite differences (version 2). #ifdef cimg_use_openmp -#pragma omp parallel for if (_width*_height>=1048576 && _depth*_spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_width*_height>=1048576 && _depth*_spectrum>=2) #endif cimg_forC(*this,c) { Tfloat *ptrd0 = res.data(0,0,0,0), *ptrd1 = res.data(0,0,0,1), *ptrd2 = res.data(0,0,0,2); @@ -27260,7 +31783,6 @@ *(ptrd2++)+=(iyf*iyf + iyb*iyb)/2; } } - } break; } } return res; @@ -27280,7 +31802,7 @@ const float nsharpness = cimg::max(sharpness,1e-5f), power1 = (is_sqrt?0.5f:1)*nsharpness, - power2 = power1/(1e-7f+1-anisotropy); + power2 = power1/(1e-7f + 1 - anisotropy); blur(alpha).normalize(0,(T)255); if (_depth>1) { // 3d @@ -27301,8 +31823,8 @@ ux = vec(0,0), uy = vec(0,1), uz = vec(0,2), vx = vec(1,0), vy = vec(1,1), vz = vec(1,2), wx = vec(2,0), wy = vec(2,1), wz = vec(2,2), - n1 = (float)std::pow(1+l1+l2+l3,-power1), - n2 = (float)std::pow(1+l1+l2+l3,-power2); + n1 = (float)std::pow(1 + l1 + l2 + l3,-power1), + n2 = (float)std::pow(1 + l1 + l2 + l3,-power2); *(ptrd0++) = n1*(ux*ux + vx*vx) + n2*wx*wx; *(ptrd1++) = n1*(ux*uy + vx*vy) + n2*wx*wy; *(ptrd2++) = n1*(ux*uz + vx*vz) + n2*wx*wz; @@ -27326,8 +31848,8 @@ l1 = _l1>0?_l1:0, l2 = _l2>0?_l2:0, ux = vec(1,0), uy = vec(1,1), vx = vec(0,0), vy = vec(0,1), - n1 = (float)std::pow(1+l1+l2,-power1), - n2 = (float)std::pow(1+l1+l2,-power2); + n1 = (float)std::pow(1 + l1 + l2,-power1), + n2 = (float)std::pow(1 + l1 + l2,-power2); *(ptrd0++) = n1*ux*ux + n2*vx*vx; *(ptrd1++) = n1*ux*uy + n2*vx*vy; *(ptrd2++) = n1*uy*uy + n2*vy*vy; @@ -27350,19 +31872,25 @@ \param precision Precision required for algorithm convergence. \param nb_scales Number of scales used to estimate the displacement field. \param iteration_max Maximum number of iterations allowed for one scale. - \param is_backward If false, match I2(X+U(X)) = I1(X), else match I2(X) = I1(X-U(X)). + \param is_backward If false, match I2(X + U(X)) = I1(X), else match I2(X) = I1(X - U(X)). + \param guide Image used as the initial correspondence estimate for the algorithm. + 'guide' may have a last channel with boolean values (0=false | other=true) that + tells for each pixel if its correspondence vector is constrained to its initial value (constraint mask). **/ CImg& displacement(const CImg& source, const float smoothness=0.1f, const float precision=5.0f, const unsigned int nb_scales=0, const unsigned int iteration_max=10000, - const bool is_backward=false) { - return get_displacement(source,smoothness,precision,nb_scales,iteration_max,is_backward).move_to(*this); + const bool is_backward=false, + const CImg& guide=CImg::const_empty()) { + return get_displacement(source,smoothness,precision,nb_scales,iteration_max,is_backward,guide). + move_to(*this); } //! Estimate displacement field between two images \newinstance. - CImg get_displacement(const CImg& source, + CImg get_displacement(const CImg& source, const float smoothness=0.1f, const float precision=5.0f, const unsigned int nb_scales=0, const unsigned int iteration_max=10000, - const bool is_backward=false) const { + const bool is_backward=false, + const CImg& guide=CImg::const_empty()) const { if (is_empty() || !source) return +*this; if (!is_sameXYZC(source)) throw CImgArgumentException(_cimg_instance @@ -27376,14 +31904,29 @@ "(should be >=0)", cimg_instance, precision); - const unsigned int _nb_scales = nb_scales>0?nb_scales: - (unsigned int)(2*std::log((double)(cimg::max(_width,_height)))); + + const bool is_3d = source._depth>1; + const unsigned int constraint = is_3d?3:2; + + if (guide && + (guide._width!=_width || guide._height!=_height || guide._depth!=_depth || guide._spectrum0?nb_scales: + (unsigned int)cimg::round(std::log(mins/8.0)/std::log(1.5),1,1); + const float _precision = (float)std::pow(10.0,-(double)precision); float sm, sM = source.max_min(sm), tm, tM = max_min(tm); const float sdelta = sm==sM?1:(sM - sm), tdelta = tm==tM?1:(tM - tm); - const bool is_3d = source._depth>1; - CImg U; + CImg U, V; + floatT bound = 0; for (int scale = (int)_nb_scales - 1; scale>=0; --scale) { const float factor = (float)std::pow(1.5,(double)scale); const unsigned int @@ -27394,13 +31937,21 @@ const CImg I1 = (source.get_resize(sw,sh,sd,-100,2)-=sm)/=sdelta, I2 = (get_resize(I1,2)-=tm)/=tdelta; + if (guide._spectrum>constraint) guide.get_resize(I2._width,I2._height,I2._depth,-100,1).move_to(V); if (U) (U*=1.5f).resize(I2._width,I2._height,I2._depth,-100,3); - else U.assign(I2._width,I2._height,I2._depth,is_3d?3:2,0); + else { + if (guide) + guide.get_shared_channels(0,is_3d?2:1).get_resize(I2._width,I2._height,I2._depth,-100,2).move_to(U); + else U.assign(I2._width,I2._height,I2._depth,is_3d?3:2,0); + } + float dt = 2, energy = cimg::type::max(); const CImgList dI = is_backward?I1.get_gradient():I2.get_gradient(); for (unsigned int iteration = 0; iteration=0) // Isotropic regularization. #ifdef cimg_use_openmp @@ -27408,8 +31959,8 @@ #endif cimg_forYZ(U,y,z) { const int - _p1y = y?y-1:0, _n1y = yx) U(x,y,z,0) = (float)x; + if (U(x,y,z,1)>y) U(x,y,z,1) = (float)y; + if (U(x,y,z,2)>z) U(x,y,z,2) = (float)z; + bound = (float)x - _width; if (U(x,y,z,0)<=bound) U(x,y,z,0) = bound; + bound = (float)y - _height; if (U(x,y,z,1)<=bound) U(x,y,z,1) = bound; + bound = (float)z - _depth; if (U(x,y,z,2)<=bound) U(x,y,z,2) = bound; + } else { + if (U(x,y,z,0)<-x) U(x,y,z,0) = -(float)x; + if (U(x,y,z,1)<-y) U(x,y,z,1) = -(float)y; + if (U(x,y,z,2)<-z) U(x,y,z,2) = -(float)z; + bound = (float)_width - x; if (U(x,y,z,0)>=bound) U(x,y,z,0) = bound; + bound = (float)_height - y; if (U(x,y,z,1)>=bound) U(x,y,z,1) = bound; + bound = (float)_depth - z; if (U(x,y,z,2)>=bound) U(x,y,z,2) = bound; + } _energy+=delta_I*delta_I + smoothness*_energy_regul; } + if (V) cimg_forXYZ(V,x,y,z) if (V(x,y,z,3)) { // Apply constraints. + U(x,y,z,0) = V(x,y,z,0)/factor; + U(x,y,z,1) = V(x,y,z,1)/factor; + U(x,y,z,2) = V(x,y,z,2)/factor; + } } else { // Anisotropic regularization. const float nsmoothness = -smoothness; #ifdef cimg_use_openmp @@ -27439,8 +32010,8 @@ #endif cimg_forYZ(U,y,z) { const int - _p1y = y?y-1:0, _n1y = yx) U(x,y,z,0) = (float)x; + if (U(x,y,z,1)>y) U(x,y,z,1) = (float)y; + if (U(x,y,z,2)>z) U(x,y,z,2) = (float)z; + bound = (float)x - _width; if (U(x,y,z,0)<=bound) U(x,y,z,0) = bound; + bound = (float)y - _height; if (U(x,y,z,1)<=bound) U(x,y,z,1) = bound; + bound = (float)z - _depth; if (U(x,y,z,2)<=bound) U(x,y,z,2) = bound; + } else { + if (U(x,y,z,0)<-x) U(x,y,z,0) = -(float)x; + if (U(x,y,z,1)<-y) U(x,y,z,1) = -(float)y; + if (U(x,y,z,2)<-z) U(x,y,z,2) = -(float)z; + bound = (float)_width - x; if (U(x,y,z,0)>=bound) U(x,y,z,0) = bound; + bound = (float)_height - y; if (U(x,y,z,1)>=bound) U(x,y,z,1) = bound; + bound = (float)_depth - z; if (U(x,y,z,2)>=bound) U(x,y,z,2) = bound; + } _energy+=delta_I*delta_I + nsmoothness*_energy_regul; } + if (V) cimg_forXYZ(V,x,y,z) if (V(x,y,z,3)) { // Apply constraints. + U(x,y,z,0) = V(x,y,z,0)/factor; + U(x,y,z,1) = V(x,y,z,1)/factor; + U(x,y,z,2) = V(x,y,z,2)/factor; + } } } } else { // 2d version. if (smoothness>=0) // Isotropic regularization. #ifdef cimg_use_openmp -#pragma omp parallel for if (_height>=8 && _width>=16) reduction(+:_energy) +#pragma omp parallel for cimg_openmp_if (_height>=8 && _width>=16) reduction(+:_energy) #endif cimg_forY(U,y) { - const int _p1y = y?y-1:0, _n1y = yx) U(x,y,0) = (float)x; + if (U(x,y,1)>y) U(x,y,1) = (float)y; + bound = (float)x - _width; if (U(x,y,0)<=bound) U(x,y,0) = bound; + bound = (float)y - _height; if (U(x,y,1)<=bound) U(x,y,1) = bound; + } else { + if (U(x,y,0)<-x) U(x,y,0) = -(float)x; + if (U(x,y,1)<-y) U(x,y,1) = -(float)y; + bound = (float)_width - x; if (U(x,y,0)>=bound) U(x,y,0) = bound; + bound = (float)_height - y; if (U(x,y,1)>=bound) U(x,y,1) = bound; + } _energy+=delta_I*delta_I + smoothness*_energy_regul; } + if (V) cimg_forX(V,x) if (V(x,y,2)) { // Apply constraints. + U(x,y,0) = V(x,y,0)/factor; + U(x,y,1) = V(x,y,1)/factor; + } } else { // Anisotropic regularization. const float nsmoothness = -smoothness; #ifdef cimg_use_openmp -#pragma omp parallel for if (_height>=8 && _width>=16) reduction(+:_energy) +#pragma omp parallel for cimg_openmp_if (_height>=8 && _width>=16) reduction(+:_energy) #endif cimg_forY(U,y) { - const int _p1y = y?y-1:0, _n1y = yx) U(x,y,0) = (float)x; + if (U(x,y,1)>y) U(x,y,1) = (float)y; + bound = (float)x - _width; if (U(x,y,0)<=bound) U(x,y,0) = bound; + bound = (float)y - _height; if (U(x,y,1)<=bound) U(x,y,1) = bound; + } else { + if (U(x,y,0)<-x) U(x,y,0) = -(float)x; + if (U(x,y,1)<-y) U(x,y,1) = -(float)y; + bound = (float)_width - x; if (U(x,y,0)>=bound) U(x,y,0) = bound; + bound = (float)_height - y; if (U(x,y,1)>=bound) U(x,y,1) = bound; + } + _energy+=delta_I*delta_I + nsmoothness*_energy_regul; + } + if (V) cimg_forX(V,x) if (V(x,y,2)) { // Apply constraints. + U(x,y,0) = V(x,y,0)/factor; + U(x,y,1) = V(x,y,1)/factor; + } + } + } + } + const float d_energy = (_energy - energy)/(sw*sh*sd); + if (d_energy<=0 && -d_energy<_precision) break; + if (d_energy>0) dt*=0.5f; + energy = _energy; + } + } + return U; + } + + //! Compute correspondence map between two images, using the patch-match algorithm. + /** + \param patch_image The image containing the reference patches to match with the instance image. + \param patch_width Width of the patch used for matching. + \param patch_height Height of the patch used for matching. + \param patch_depth Depth of the patch used for matching. + \param nb_iterations Number of patch-match iterations. + \param nb_randoms Number of randomization attempts (per pixel). + \param guide Image used as the initial correspondence estimate for the algorithm. + 'guide' may have a last channel with boolean values (0=false | other=true) that + tells for each pixel if its correspondence vector is constrained to its initial value (constraint mask). + \param[out] matching_score Returned as the image of matching scores. + \note + The patch-match algorithm is described in this paper: + Connelly Barnes, Eli Shechtman, Adam Finkelstein, Dan B Goldman(2009), + PatchMatch: A Randomized Correspondence Algorithm for Structural Image Editing + **/ + template + CImg& patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth, + const unsigned int nb_iterations, + const unsigned int nb_randoms, + const CImg &guide, + CImg &matching_score) { + return get_patchmatch(patch_image,patch_width,patch_height,patch_depth, + nb_iterations,nb_randoms,guide,matching_score).move_to(*this); + } + + //! Compute correspondence map between two images, using the patch-match algorithm \newinstance. + template + CImg get_patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth, + const unsigned int nb_iterations, + const unsigned int nb_randoms, + const CImg &guide, + CImg &matching_score) const { + return _get_patchmatch(patch_image,patch_width,patch_height,patch_depth, + nb_iterations,nb_randoms, + guide,true,matching_score); + } + + //! Compute correspondence map between two images, using the patch-match algorithm \overloading. + template + CImg& patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth, + const unsigned int nb_iterations, + const unsigned int nb_randoms, + const CImg &guide) { + return get_patchmatch(patch_image,patch_width,patch_height,patch_depth, + nb_iterations,nb_randoms,guide).move_to(*this); + } + + //! Compute correspondence map between two images, using the patch-match algorithm \overloading. + template + CImg get_patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth, + const unsigned int nb_iterations, + const unsigned int nb_randoms, + const CImg &guide) const { + return _get_patchmatch(patch_image,patch_width,patch_height,patch_depth, + nb_iterations,nb_randoms, + guide,false,CImg::empty()); + } + + //! Compute correspondence map between two images, using the patch-match algorithm \overloading. + CImg& patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth=1, + const unsigned int nb_iterations=5, + const unsigned int nb_randoms=5) { + return get_patchmatch(patch_image,patch_width,patch_height,patch_depth, + nb_iterations,nb_randoms).move_to(*this); + } + + //! Compute correspondence map between two images, using the patch-match algorithm \overloading. + CImg get_patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth=1, + const unsigned int nb_iterations=5, + const unsigned int nb_randoms=5) const { + return _get_patchmatch(patch_image,patch_width,patch_height,patch_depth, + nb_iterations,nb_randoms, + CImg::const_empty(), + false,CImg::empty()); + } + + template + CImg _get_patchmatch(const CImg& patch_image, + const unsigned int patch_width, + const unsigned int patch_height, + const unsigned int patch_depth, + const unsigned int nb_iterations, + const unsigned int nb_randoms, + const CImg &guide, + const bool is_matching_score, + CImg &matching_score) const { + if (is_empty()) return CImg::const_empty(); + if (patch_image._spectrum!=_spectrum) + throw CImgArgumentException(_cimg_instance + "patchmatch(): Instance image and specified patch image (%u,%u,%u,%u,%p) " + "have different spectrums.", + cimg_instance, + patch_image._width,patch_image._height,patch_image._depth,patch_image._spectrum, + patch_image._data); + if (patch_width>_width || patch_height>_height || patch_depth>_depth) + throw CImgArgumentException(_cimg_instance + "patchmatch(): Specified patch size %ux%ux%u is bigger than the dimensions " + "of the instance image.", + cimg_instance,patch_width,patch_height,patch_depth); + if (patch_width>patch_image._width || patch_height>patch_image._height || patch_depth>patch_image._depth) + throw CImgArgumentException(_cimg_instance + "patchmatch(): Specified patch size %ux%ux%u is bigger than the dimensions " + "of the patch image image (%u,%u,%u,%u,%p).", + cimg_instance,patch_width,patch_height,patch_depth, + patch_image._width,patch_image._height,patch_image._depth,patch_image._spectrum, + patch_image._data); + const unsigned int + _constraint = patch_image._depth>1?3:2, + constraint = guide._spectrum>_constraint?_constraint:0; + + if (guide && + (guide._width!=_width || guide._height!=_height || guide._depth!=_depth || guide._spectrum<_constraint)) + throw CImgArgumentException(_cimg_instance + "patchmatch(): Specified guide (%u,%u,%u,%u,%p) has invalid dimensions " + "considering instance and patch image image (%u,%u,%u,%u,%p).", + cimg_instance, + guide._width,guide._height,guide._depth,guide._spectrum,guide._data, + patch_image._width,patch_image._height,patch_image._depth,patch_image._spectrum, + patch_image._data); + + CImg map(_width,_height,_depth,patch_image._depth>1?3:2); + CImg score(_width,_height,_depth); + const int + psizew = (int)patch_width, psizew1 = psizew/2, psizew2 = psizew - psizew1 - 1, + psizeh = (int)patch_height, psizeh1 = psizeh/2, psizeh2 = psizeh - psizeh1 - 1, + psized = (int)patch_depth, psized1 = psized/2, psized2 = psized - psized1 - 1; + + if (_depth>1 || patch_image._depth>1) { // 3d version. + + // Initialize correspondence map. + if (guide) cimg_forXYZ(*this,x,y,z) { // User-defined initialization. + const int + cx1 = x<=psizew1?x:(x::inf()); + } else cimg_forXYZ(*this,x,y,z) { // Random initialization. + const int + cx1 = x<=psizew1?x:(x::inf()); + } + + // Start iteration loop. + for (unsigned int iter = 0; iter64 && iter0) { // Compare with left neighbor. + const int u = map(x - 1,y,z,0), v = map(x - 1,y,z,1), w = map(x - 1,y,z,2); + if (u>=cx1 - 1 && u=cy1 && v=cz1 && w0) { // Compare with up neighbor. + const int u = map(x,y - 1,z,0), v = map(x,y - 1,z,1), w = map(x,y - 1,z,2); + if (u>=cx1 && u=cy1 - 1 && v=cz1 && w0) { // Compare with backward neighbor. + const int u = map(x,y,z - 1,0), v = map(x,y,z - 1,1), w = map(x,y,z - 1,2); + if (u>=cx1 && u=cy1 && v=cz1 - 1 && w=cx1 + 1 && u=cy1 && v=cz1 && w=cx1 && u=cy1 + 1 && v=cz1 && w=cx1 && u=cy1 && v=cz1 + 1 && w::inf()); + } else cimg_forXY(*this,x,y) { // Random initialization. + const int + cx1 = x<=psizew1?x:(x::inf()); + } + + // Start iteration loop. + for (unsigned int iter = 0; iter64 && iter0) { // Compare with left neighbor. + const int u = map(x - 1,y,0), v = map(x - 1,y,1); + if (u>=cx1 - 1 && u=cy1 && v0) { // Compare with up neighbor. + const int u = map(x,y - 1,0), v = map(x,y - 1,1); + if (u>=cx1 && u=cy1 - 1 && v=cx1 + 1 && u=cy1 && v=cx1 && u=cy1 + 1 && v0) dt*=0.5f; - energy = _energy; } } - return U; + if (is_matching_score) score.move_to(matching_score); + return map; + } + + // Compute SSD between two patches in different images. + static float _patchmatch(const CImg& img1, const CImg& img2, + const unsigned int psizew, const unsigned int psizeh, + const int x1, const int y1, + const int x2, const int y2, + const float max_ssd) { // 2d version. + const T *p1 = img1.data(x1,y1), *p2 = img2.data(x2,y2); + const unsigned long + offx1 = (unsigned long)img1._width - psizew, + offx2 = (unsigned long)img2._width - psizew, + offy1 = (unsigned long)img1._width*img1._height - psizeh*img1._width, + offy2 = (unsigned long)img2._width*img2._height - psizeh*img2._width; + float ssd = 0; + cimg_forC(img1,c) { + for (unsigned int j = 0; jmax_ssd) return max_ssd; + p1+=offx1; p2+=offx2; + } + p1+=offy1; p2+=offy2; + } + return ssd; + } + + static float _patchmatch(const CImg& img1, const CImg& img2, + const unsigned int psizew, const unsigned int psizeh, const unsigned int psized, + const int x1, const int y1, const int z1, + const int x2, const int y2, const int z2, + const float max_ssd) { // 3d version. + const T *p1 = img1.data(x1,y1,z1), *p2 = img2.data(x2,y2,z2); + const unsigned long + offx1 = (unsigned long)img1._width - psizew, + offx2 = (unsigned long)img2._width - psizew, + offy1 = (unsigned long)img1._width*img1._height - psizeh*img1._width - psizew, + offy2 = (unsigned long)img2._width*img2._height - psizeh*img2._width - psizew, + offz1 = (unsigned long)img1._width*img1._height*img1._depth - psized*img1._width*img1._height - + psizeh*img1._width - psizew, + offz2 = (unsigned long)img2._width*img2._height*img2._depth - psized*img2._width*img2._height - + psizeh*img2._width - psizew; + float ssd = 0; + cimg_forC(img1,c) { + for (unsigned int k = 0; kmax_ssd) return max_ssd; + p1+=offx1; p2+=offx2; + } + p1+=offy1; p2+=offy2; + } + p1+=offz1; p2+=offz2; + } + return ssd; } //! Compute Euclidean distance function to a specified value. @@ -27566,8 +32662,11 @@ **/ CImg& distance(const T& value, const unsigned int metric=2) { if (is_empty()) return *this; + if (cimg::type::string()!=cimg::type::string()) // For datatype < int. + return CImg(*this,false).distance((Tint)value,metric). + cut((Tint)cimg::type::min(),(Tint)cimg::type::max()).move_to(*this); bool is_value = false; - cimg_for(*this,ptr,T) *ptr = *ptr==value?is_value=true,0:(T)999999999; + cimg_for(*this,ptr,T) *ptr = *ptr==value?is_value=true,0:(T)cimg::max(0,99999999); // Trick to avoid VC++ warning if (!is_value) return fill(cimg::type::max()); switch (metric) { case 0 : return _distance_core(_distance_sep_cdt,_distance_dist_cdt); // Chebyshev. @@ -27584,29 +32683,29 @@ } static long _distance_sep_edt(const long i, const long u, const long *const g) { - return (u*u-i*i+g[u]-g[i])/(2*(u-i)); + return (u*u - i*i + g[u] - g[i])/(2*(u - i)); } static long _distance_dist_edt(const long x, const long i, const long *const g) { - return (x-i)*(x-i) + g[i]; + return (x - i)*(x - i) + g[i]; } static long _distance_sep_mdt(const long i, const long u, const long *const g) { - return (u-i<=g[u]-g[i]?999999999:(g[u]-g[i]+u+i)/2); + return (u - i<=g[u] - g[i]?999999999:(g[u] - g[i] + u + i)/2); } static long _distance_dist_mdt(const long x, const long i, const long *const g) { - return (x=0; --u) { dt[u] = f(u,s[q],g); if (u==t[q]) --q; } // Backward scan. + for (int u = (int)len - 1; u>=0; --u) { dt[u] = f(u,s[q],g); if (u==t[q]) --q; } // Backward scan. } CImg& _distance_core(long (*const sep)(const long, const long, const long *const), long (*const f)(const long, const long, const long *const)) { - // Check for g++ 4.9.X, as OpenMP seems to crash for this particular function. + // Check for g++ 4.9.X, as OpenMP seems to crash for this particular function. I have no clues why. #define cimg_is_gcc49x (__GNUC__==4 && __GNUC_MINOR__==9) const unsigned long wh = (unsigned long)_width*_height; #if defined(cimg_use_openmp) && !cimg_is_gcc49x -#pragma omp parallel for if (_spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_spectrum>=2) #endif cimg_forC(*this,c) { CImg g(_width), dt(_width), s(_width), t(_width); @@ -27686,7 +32785,7 @@ if (!is_value) return fill(cimg::type::max()); const unsigned long wh = (unsigned long)_width*_height; #ifdef cimg_use_openmp -#pragma omp parallel for if (_spectrum>=2) +#pragma omp parallel for cimg_openmp_if (_spectrum>=2) #endif cimg_forC(*this,c) { CImg img = get_shared_channel(c); @@ -27736,7 +32835,7 @@ return get_distance_dijkstra(value,metric,is_high_connectivity,return_path).move_to(*this); } - //! Compute distance map to a specified value, according to a custom metric (use dijkstra algorithm). \newinstance. + //! Compute distance map to a specified value, according to a custom metric (use dijkstra algorithm) \newinstance. template CImg::type> get_distance_dijkstra(const T& value, const CImg& metric, const bool is_high_connectivity, @@ -27778,113 +32877,121 @@ // Update neighbors. td npot = 0; - if (x-1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x-1,y,z)+P),x-1,y,z)) { - res(x-1,y,z) = npot; if (path) path(x-1,y,z) = (to)2; + if (x - 1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x - 1,y,z) + P),x - 1,y,z)) { + res(x - 1,y,z) = npot; if (path) path(x - 1,y,z) = (to)2; } - if (x+1=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y-1,z)+P),x,y-1,z)) { - res(x,y-1,z) = npot; if (path) path(x,y-1,z) = (to)8; + if (y - 1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y - 1,z) + P),x,y - 1,z)) { + res(x,y - 1,z) = npot; if (path) path(x,y - 1,z) = (to)8; } - if (y+1=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y,z-1)+P),x,y,z-1)) { - res(x,y,z-1) = npot; if (path) path(x,y,z-1) = (to)32; + if (z - 1>=0 && Q._priority_queue_insert(is_queued,sizeQ,-(npot=met(x,y,z - 1) + P),x,y,z - 1)) { + res(x,y,z - 1) = npot; if (path) path(x,y,z - 1) = (to)32; } - if (z+1=0 && y-1>=0 && - Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y-1,z)+P)),x-1,y-1,z)) { - res(x-1,y-1,z) = npot; if (path) path(x-1,y-1,z) = (to)10; - } - if (x+1=0 && - Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x+1,y-1,z)+P)),x+1,y-1,z)) { - res(x+1,y-1,z) = npot; if (path) path(x+1,y-1,z) = (to)9; - } - if (x-1>=0 && y+1=0) { // Diagonal neighbors on slice z-1. - if (x-1>=0 && - Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y,z-1)+P)),x-1,y,z-1)) { - res(x-1,y,z-1) = npot; if (path) path(x-1,y,z-1) = (to)34; - } - if (x+1=0 && - Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y-1,z-1)+P)),x,y-1,z-1)) { - res(x,y-1,z-1) = npot; if (path) path(x,y-1,z-1) = (to)40; - } - if (y+1=0 && y-1>=0 && - Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x-1,y-1,z-1)+P)),x-1,y-1,z-1)) { - res(x-1,y-1,z-1) = npot; if (path) path(x-1,y-1,z-1) = (to)42; - } - if (x+1=0 && - Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x+1,y-1,z-1)+P)),x+1,y-1,z-1)) { - res(x+1,y-1,z-1) = npot; if (path) path(x+1,y-1,z-1) = (to)41; - } - if (x-1>=0 && y+1=0 && - Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x-1,y,z+1)+P)),x-1,y,z+1)) { - res(x-1,y,z+1) = npot; if (path) path(x-1,y,z+1) = (to)18; - } - if (x+1=0 && - Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y-1,z+1)+P)),x,y-1,z+1)) { - res(x,y-1,z+1) = npot; if (path) path(x,y-1,z+1) = (to)24; - } - if (y+1=0 && y-1>=0 && - Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x-1,y-1,z+1)+P)),x-1,y-1,z+1)) { - res(x-1,y-1,z+1) = npot; if (path) path(x-1,y-1,z+1) = (to)26; - } - if (x+1=0 && - Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x+1,y-1,z+1)+P)),x+1,y-1,z+1)) { - res(x+1,y-1,z+1) = npot; if (path) path(x+1,y-1,z+1) = (to)25; - } - if (x-1>=0 && y+1=0 && y - 1>=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x - 1,y - 1,z) + P)),x - 1,y - 1,z)) { + res(x - 1,y - 1,z) = npot; if (path) path(x - 1,y - 1,z) = (to)10; + } + if (x + 1=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x + 1,y - 1,z) + P)),x + 1,y - 1,z)) { + res(x + 1,y - 1,z) = npot; if (path) path(x + 1,y - 1,z) = (to)9; + } + if (x - 1>=0 && y + 1=0) { // Diagonal neighbors on slice z - 1. + if (x - 1>=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x - 1,y,z - 1) + P)),x - 1,y,z - 1)) { + res(x - 1,y,z - 1) = npot; if (path) path(x - 1,y,z - 1) = (to)34; + } + if (x + 1=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y - 1,z - 1) + P)),x,y - 1,z - 1)) { + res(x,y - 1,z - 1) = npot; if (path) path(x,y - 1,z - 1) = (to)40; + } + if (y + 1=0 && y - 1>=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x - 1,y - 1,z - 1) + P)), + x - 1,y - 1,z - 1)) { + res(x - 1,y - 1,z - 1) = npot; if (path) path(x - 1,y - 1,z - 1) = (to)42; + } + if (x + 1=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x + 1,y - 1,z - 1) + P)), + x + 1,y - 1,z - 1)) { + res(x + 1,y - 1,z - 1) = npot; if (path) path(x + 1,y - 1,z - 1) = (to)41; + } + if (x - 1>=0 && y + 1=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x - 1,y,z + 1) + P)),x - 1,y,z + 1)) { + res(x - 1,y,z + 1) = npot; if (path) path(x - 1,y,z + 1) = (to)18; + } + if (x + 1=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt2*met(x,y - 1,z + 1) + P)),x,y - 1,z + 1)) { + res(x,y - 1,z + 1) = npot; if (path) path(x,y - 1,z + 1) = (to)24; + } + if (y + 1=0 && y - 1>=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x - 1,y - 1,z + 1) + P)), + x - 1,y - 1,z + 1)) { + res(x - 1,y - 1,z + 1) = npot; if (path) path(x - 1,y - 1,z + 1) = (to)26; + } + if (x + 1=0 && + Q._priority_queue_insert(is_queued,sizeQ,-(npot=(td)(sqrt3*met(x + 1,y - 1,z + 1) + P)), + x + 1,y - 1,z + 1)) { + res(x + 1,y - 1,z + 1) = npot; if (path) path(x + 1,y - 1,z + 1) = (to)25; + } + if (x - 1>=0 && y + 1 state(_width,_height,_depth); // -1=far away, 0=narrow, 1=frozen. #ifdef cimg_use_openmp -#pragma omp parallel for if (_spectrum>=2) firstprivate(Q,state) +#pragma omp parallel for cimg_openmp_if (_spectrum>=2) firstprivate(Q,state) #endif cimg_forC(*this,c) { const CImg img = get_shared_channel(c); @@ -27948,29 +33055,29 @@ // Initialize seeds neighbors. ptr2 = state._data; cimg_forXYZ(img,x,y,z) if (*(ptr2++)==1) { - if (x-1>=0 && state(x-1,y,z)==-1) { - const Tfloat dist = res(x-1,y,z) = __distance_eikonal(res,met(x-1,y,z),x-1,y,z); - Q._eik_priority_queue_insert(state,sizeQ,-dist,x-1,y,z); - } - if (x+1=0 && state(x,y-1,z)==-1) { - const Tfloat dist = res(x,y-1,z) = __distance_eikonal(res,met(x,y-1,z),x,y-1,z); - Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y-1,z); - } - if (y+1=0 && state(x,y,z-1)==-1) { - const Tfloat dist = res(x,y,z-1) = __distance_eikonal(res,met(x,y,z-1),x,y,z-1); - Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y,z-1); - } - if (z+1=0 && state(x - 1,y,z)==-1) { + const Tfloat dist = res(x - 1,y,z) = __distance_eikonal(res,met(x - 1,y,z),x - 1,y,z); + Q._eik_priority_queue_insert(state,sizeQ,-dist,x - 1,y,z); + } + if (x + 1=0 && state(x,y - 1,z)==-1) { + const Tfloat dist = res(x,y - 1,z) = __distance_eikonal(res,met(x,y - 1,z),x,y - 1,z); + Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y - 1,z); + } + if (y + 1=0 && state(x,y,z - 1)==-1) { + const Tfloat dist = res(x,y,z - 1) = __distance_eikonal(res,met(x,y,z - 1),x,y,z - 1); + Q._eik_priority_queue_insert(state,sizeQ,-dist,x,y,z - 1); + } + if (z + 1=0) { - if (x-1>=0 && state(x-1,y,z)!=1) { - const Tfloat dist = __distance_eikonal(res,met(x-1,y,z),x-1,y,z); - if (dist=0 && state(x,y-1,z)!=1) { - const Tfloat dist = __distance_eikonal(res,met(x,y-1,z),x,y-1,z); - if (dist=0 && state(x,y,z-1)!=1) { - const Tfloat dist = __distance_eikonal(res,met(x,y,z-1),x,y,z-1); - if (dist=0 && state(x - 1,y,z)!=1) { + const Tfloat dist = __distance_eikonal(res,met(x - 1,y,z),x - 1,y,z); + if (dist=0 && state(x,y - 1,z)!=1) { + const Tfloat dist = __distance_eikonal(res,met(x,y - 1,z),x,y - 1,z); + if (dist=0 && state(x,y,z - 1)!=1) { + const Tfloat dist = __distance_eikonal(res,met(x,y,z - 1),x,y,z - 1); + if (dist& res, const Tfloat P, const int x=0, const int y=0, const int z=0) const { const T M = cimg::type::max(); - T T1 = cimg::min(x-1>=0?res(x-1,y,z):M,x+1=0?res(x - 1,y,z):M,x + 11) { // 3d. T - T2 = cimg::min(y-1>=0?res(x,y-1,z):M,y+1=0?res(x,y,z-1):M,z+1=0?res(x,y - 1,z):M,y + 1=0?res(x,y,z - 1):M,z + 1T2) cimg::swap(T1,T2); if (T2>T3) cimg::swap(T2,T3); if (T1>T2) cimg::swap(T1,T2); if (P<=0) return (Tfloat)T1; - if (T31) { // 2d. - T T2 = cimg::min(y-1>=0?res(x,y-1,z):M,y+1=0?res(x,y - 1,z):M,y + 1T2) cimg::swap(T1,T2); if (P<=0) return (Tfloat)T1; - if (T20) return; state(x,y,z) = 0; if (++siz>=_width) { if (!is_empty()) resize(_width*2,4,1,1,0); else assign(64,4); } - (*this)(siz-1,0) = (T)value; (*this)(siz-1,1) = (T)x; (*this)(siz-1,2) = (T)y; (*this)(siz-1,3) = (T)z; - for (unsigned int pos = siz - 1, par = 0; pos && value>(*this)(par=(pos+1)/2-1,0); pos = par) { + (*this)(siz - 1,0) = (T)value; (*this)(siz - 1,1) = (T)x; (*this)(siz - 1,2) = (T)y; (*this)(siz - 1,3) = (T)z; + for (unsigned int pos = siz - 1, par = 0; pos && value>(*this)(par=(pos + 1)/2 - 1,0); pos = par) { cimg::swap((*this)(pos,0),(*this)(par,0)); cimg::swap((*this)(pos,1),(*this)(par,1)); cimg::swap((*this)(pos,2),(*this)(par,2)); cimg::swap((*this)(pos,3),(*this)(par,3)); } @@ -28229,18 +33351,18 @@ case 'x' : { unsigned int w = _width; for (unsigned int s = 1; w && s1) { unsigned int w = _width, d = _depth; for (unsigned int s = 1; w && d && s1) { unsigned int d = _depth; for (unsigned int s = 1; d && s1) for (unsigned int s = 1, w = _width/2, h = _height/2, d = _depth/2; w && h && d && s1) for (unsigned int s = 1, w = _width/2, d = _depth/2; w && d && s1) { if (_depth>1) for (unsigned int s = 1, h = _height/2, d = _depth/2; h && d && s1) for (unsigned int s = 1, d = _depth/2; d && s>1); - if (((N-1)&N) && N!=1) + if (((N - 1)&N) && N!=1) throw CImgInstanceException("CImgList<%s>::FFT(): Specified real and imaginary parts (%u,%u,%u,%u) " "have non 2^N dimension along the X-axis.", pixel_type(), @@ -28510,7 +33632,7 @@ if (j>i) cimg_forYZC(real,y,z,c) { cimg::swap(real(i,y,z,c),real(j,y,z,c)); cimg::swap(imag(i,y,z,c),imag(j,y,z,c)); if (j>1); - if (((N-1)&N) && N!=1) + if (((N - 1)&N) && N!=1) throw CImgInstanceException("CImgList<%s>::FFT(): Specified real and imaginary parts (%u,%u,%u,%u) " "have non 2^N dimension along the Y-axis.", pixel_type(), @@ -28585,7 +33707,7 @@ } break; case 'z' : { // Fourier along Z, using built-in functions. const unsigned int N = real._depth, N2 = (N>>1); - if (((N-1)&N) && N!=1) + if (((N - 1)&N) && N!=1) throw CImgInstanceException("CImgList<%s>::FFT(): Specified real and imaginary parts (%u,%u,%u,%u) " "have non 2^N dimension along the Z-axis.", pixel_type(), @@ -28681,7 +33803,7 @@ cimg_forC(real,c) { T *ptrr = real.data(0,0,0,c), *ptri = imag.data(0,0,0,c); double *ptrd = (double*)data_in; - for (unsigned int x = 0; x const CImg& texturize_object3d(CImgList& primitives, CImgList& colors, - const CImg& texture, const CImg& coords=CImg::empty()) const { + const CImg& texture, const CImg& coords=CImg::const_empty()) const { if (is_empty()) return *this; if (_height!=3) throw CImgInstanceException(_cimg_instance @@ -28900,8 +34022,8 @@ case 1 : { // Point. const unsigned int i0 = (unsigned int)p[0]; const int x0 = _coords(i0,0), y0 = _coords(i0,1); - texture.get_vector_at(x0<=0?0:x0>=texture.width()?texture.width()-1:x0, - y0<=0?0:y0>=texture.height()?texture.height()-1:y0).move_to(colors[l]); + texture.get_vector_at(x0<=0?0:x0>=texture.width()?texture.width() - 1:x0, + y0<=0?0:y0>=texture.height()?texture.height() - 1:y0).move_to(colors[l]); } break; case 2 : case 6 : { // Line. const unsigned int i0 = (unsigned int)p[0], i1 = (unsigned int)p[1]; @@ -28945,7 +34067,7 @@ (template type \e tf should be at least \e unsigned \e int). \param[out] colors The returned list of the 3d object colors. \param elevation The input elevation map. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). \par Example \code const CImg img("reference.jpg"); @@ -28979,7 +34101,7 @@ CImg::vector((tc)r,(tc)g,(tc)b).move_to(colors); } const typename CImg::_functor2d_int func(elevation); - return elevation3d(primitives,func,0,0,_width-1.0f,_height-1.0f,_width,_height); + return elevation3d(primitives,func,0,0,_width - 1.0f,_height - 1.0f,_width,_height); } //! Generate the 3d projection planes of the image instance. @@ -29003,26 +34125,26 @@ _z0 = (z0>=_depth)?_depth - 1:z0; CImg img_xy, img_xz, img_yz; if (normalize_colors) { - ((get_crop(0,0,_z0,0,_width-1,_height-1,_z0,_spectrum-1)-=m)*=delta).move_to(img_xy); - ((get_crop(0,_y0,0,0,_width-1,_y0,_depth-1,_spectrum-1)-=m)*=delta).resize(_width,_depth,1,-100,-1). + ((get_crop(0,0,_z0,0,_width - 1,_height - 1,_z0,_spectrum - 1)-=m)*=delta).move_to(img_xy); + ((get_crop(0,_y0,0,0,_width - 1,_y0,_depth - 1,_spectrum - 1)-=m)*=delta).resize(_width,_depth,1,-100,-1). move_to(img_xz); - ((get_crop(_x0,0,0,0,_x0,_height-1,_depth-1,_spectrum-1)-=m)*=delta).resize(_height,_depth,1,-100,-1). + ((get_crop(_x0,0,0,0,_x0,_height - 1,_depth - 1,_spectrum - 1)-=m)*=delta).resize(_height,_depth,1,-100,-1). move_to(img_yz); } else { - get_crop(0,0,_z0,0,_width-1,_height-1,_z0,_spectrum-1).move_to(img_xy); - get_crop(0,_y0,0,0,_width-1,_y0,_depth-1,_spectrum-1).resize(_width,_depth,1,-100,-1).move_to(img_xz); - get_crop(_x0,0,0,0,_x0,_height-1,_depth-1,_spectrum-1).resize(_height,_depth,1,-100,-1).move_to(img_yz); + get_crop(0,0,_z0,0,_width - 1,_height - 1,_z0,_spectrum - 1).move_to(img_xy); + get_crop(0,_y0,0,0,_width - 1,_y0,_depth - 1,_spectrum - 1).resize(_width,_depth,1,-100,-1).move_to(img_xz); + get_crop(_x0,0,0,0,_x0,_height - 1,_depth - 1,_spectrum - 1).resize(_height,_depth,1,-100,-1).move_to(img_yz); } CImg points(12,3,1,1, - 0,_width-1,_width-1,0, 0,_width-1,_width-1,0, _x0,_x0,_x0,_x0, - 0,0,_height-1,_height-1, _y0,_y0,_y0,_y0, 0,_height-1,_height-1,0, - _z0,_z0,_z0,_z0, 0,0,_depth-1,_depth-1, 0,0,_depth-1,_depth-1); + 0,_width - 1,_width - 1,0, 0,_width - 1,_width - 1,0, _x0,_x0,_x0,_x0, + 0,0,_height - 1,_height - 1, _y0,_y0,_y0,_y0, 0,_height - 1,_height - 1,0, + _z0,_z0,_z0,_z0, 0,0,_depth - 1,_depth - 1, 0,0,_depth - 1,_depth - 1); primitives.assign(); - CImg::vector(0,1,2,3,0,0,img_xy._width-1,0,img_xy._width-1,img_xy._height-1,0,img_xy._height-1). + CImg::vector(0,1,2,3,0,0,img_xy._width - 1,0,img_xy._width - 1,img_xy._height - 1,0,img_xy._height - 1). move_to(primitives); - CImg::vector(4,5,6,7,0,0,img_xz._width-1,0,img_xz._width-1,img_xz._height-1,0,img_xz._height-1). + CImg::vector(4,5,6,7,0,0,img_xz._width - 1,0,img_xz._width - 1,img_xz._height - 1,0,img_xz._height - 1). move_to(primitives); - CImg::vector(8,9,10,11,0,0,img_yz._width-1,0,img_yz._width-1,img_yz._height-1,0,img_yz._height-1). + CImg::vector(8,9,10,11,0,0,img_yz._width - 1,0,img_yz._width - 1,img_yz._height - 1,0,img_yz._height - 1). move_to(primitives); colors.assign(); img_xy.move_to(colors); @@ -29038,7 +34160,7 @@ \param isovalue The returned list of the 3d object colors. \param size_x The number of subdivisions along the X-axis. \param size_y The number of subdisivions along the Y-axis. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). \par Example \code const CImg img("reference.jpg"); @@ -29064,10 +34186,10 @@ CImg vertices; if ((size_x==-100 && size_y==-100) || (size_x==width() && size_y==height())) { const _functor2d_int func(*this); - vertices = isoline3d(primitives,func,isovalue,0,0,width()-1.0f,height()-1.0f,width(),height()); + vertices = isoline3d(primitives,func,isovalue,0,0,width() - 1.0f,height() - 1.0f,width(),height()); } else { const _functor2d_float func(*this); - vertices = isoline3d(primitives,func,isovalue,0,0,width()-1.0f,height()-1.0f,size_x,size_y); + vertices = isoline3d(primitives,func,isovalue,0,0,width() - 1.0f,height() - 1.0f,size_x,size_y); } return vertices; } @@ -29080,7 +34202,7 @@ \param size_x Number of subdivisions along the X-axis. \param size_y Number of subdisivions along the Y-axis. \param size_z Number of subdisivions along the Z-axis. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). \par Example \code const CImg img = CImg("reference.jpg").resize(-100,-100,20); @@ -29102,11 +34224,11 @@ CImg vertices; if ((size_x==-100 && size_y==-100 && size_z==-100) || (size_x==width() && size_y==height() && size_z==depth())) { const _functor3d_int func(*this); - vertices = isosurface3d(primitives,func,isovalue,0,0,0,width()-1.0f,height()-1.0f,depth()-1.0f, + vertices = isosurface3d(primitives,func,isovalue,0,0,0,width() - 1.0f,height() - 1.0f,depth() - 1.0f, width(),height(),depth()); } else { const _functor3d_float func(*this); - vertices = isosurface3d(primitives,func,isovalue,0,0,0,width()-1.0f,height()-1.0f,depth()-1.0f, + vertices = isosurface3d(primitives,func,isovalue,0,0,0,width() - 1.0f,height() - 1.0f,depth() - 1.0f, size_x,size_y,size_z); } return vertices; @@ -29156,7 +34278,7 @@ const unsigned int yw = y*nsize_x; for (unsigned int x = 0; x::empty(),expr,0); } + _functor2d_expr(const char *const expr):mp(0) { + mp = new _cimg_math_parser(expr,0,CImg::const_empty(),0); + } ~_functor2d_expr() { delete mp; } float operator()(const float x, const float y) const { return (float)(*mp)(x,y,0,0); @@ -29799,7 +34923,9 @@ struct _functor3d_expr { _cimg_math_parser *mp; ~_functor3d_expr() { delete mp; } - _functor3d_expr(const char *const expr):mp(0) { mp = new _cimg_math_parser(CImg::empty(),expr,0); } + _functor3d_expr(const char *const expr):mp(0) { + mp = new _cimg_math_parser(expr,0,CImg::const_empty(),0); + } float operator()(const float x, const float y, const float z) const { return (float)(*mp)(x,y,z,0); } @@ -29820,7 +34946,7 @@ \param size_x The width of the box (dimension along the X-axis). \param size_y The height of the box (dimension along the Y-axis). \param size_z The depth of the box (dimension along the Z-axis). - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). \par Example \code CImgList faces3d; @@ -29846,7 +34972,7 @@ \param radius The radius of the cone basis. \param size_z The cone's height. \param subdivisions The number of basis angular subdivisions. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). \par Example \code CImgList faces3d; @@ -29869,7 +34995,7 @@ } const unsigned int nbr = vertices._width - 2; for (unsigned int p = 0; p::vector(1,next,curr).move_to(primitives); CImg::vector(0,curr,next).move_to(primitives); } @@ -29883,7 +35009,7 @@ \param radius The radius of the cylinder basis. \param size_z The cylinder's height. \param subdivisions The number of basis angular subdivisions. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). \par Example \code CImgList faces3d; @@ -29907,10 +35033,10 @@ } const unsigned int nbr = (vertices._width - 2)/2; for (unsigned int p = 0; p::vector(0,next,curr).move_to(primitives); - CImg::vector(1,curr+1,next+1).move_to(primitives); - CImg::vector(curr,next,next+1,curr+1).move_to(primitives); + CImg::vector(1,curr + 1,next + 1).move_to(primitives); + CImg::vector(curr,next,next + 1,curr + 1).move_to(primitives); } return vertices>'x'; } @@ -29923,7 +35049,7 @@ \param radius2 The small radius. \param subdivisions1 The number of angular subdivisions for the large radius. \param subdivisions2 The number of angular subdivisions for the small radius. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). \par Example \code CImgList faces3d; @@ -29954,10 +35080,10 @@ } } for (unsigned int vv = 0; vv::vector(svv+nu,svv+uu,snv+uu,snv+nu).move_to(primitives); + const unsigned int nu = (uu + 1)%subdivisions2, svv = subdivisions2*vv, snv = subdivisions2*nv; + CImg::vector(svv + nu,svv + uu,snv + uu,snv + nu).move_to(primitives); } } return vertices>'x'; @@ -29971,7 +35097,7 @@ \param size_y The height of the plane (dimensions along the Y-axis). \param subdivisions_x The number of planar subdivisions along the X-axis. \param subdivisions_y The number of planar subdivisions along the Y-axis. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). \par Example \code CImgList faces3d; @@ -29992,7 +35118,7 @@ for (unsigned int y = 0; y::vector(fx*x,fy*y,0).move_to(vertices); for (unsigned int y = 0; y::vector(off1,off4,off3,off2).move_to(primitives); } return vertices>'x'; @@ -30004,7 +35130,7 @@ (template type \e tf should be at least \e unsigned \e int). \param radius The radius of the sphere (dimension along the X-axis). \param subdivisions The number of recursive subdivisions from an initial icosahedron. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). \par Example \code CImgList faces3d; @@ -30019,7 +35145,7 @@ // Create initial icosahedron primitives.assign(); - const double tmp = (1+std::sqrt(5.0f))/2, a = 1.0/std::sqrt(1+tmp*tmp), b = tmp*a; + const double tmp = (1 + std::sqrt(5.0f))/2, a = 1.0/std::sqrt(1 + tmp*tmp), b = tmp*a; CImgList vertices(12,1,3,1,1, b,a,0.0, -b,a,0.0, -b,-a,0.0, b,-a,0.0, a,0.0,b, a,0.0,-b, -a,0.0,-b, -a,0.0,b, 0.0,b,a, 0.0,-b,a, 0.0,-b,-a, 0.0,b,-a); primitives.assign(20,1,3,1,1, 4,8,7, 4,7,9, 5,6,11, 5,10,6, 0,4,3, 0,3,5, 2,7,1, 2,1,6, @@ -30040,9 +35166,12 @@ x0 = vertices(p0,0), y0 = vertices(p0,1), z0 = vertices(p0,2), x1 = vertices(p1,0), y1 = vertices(p1,1), z1 = vertices(p1,2), x2 = vertices(p2,0), y2 = vertices(p2,1), z2 = vertices(p2,2), - tnx0 = (x0+x1)/2, tny0 = (y0+y1)/2, tnz0 = (z0+z1)/2, nn0 = (float)std::sqrt(tnx0*tnx0+tny0*tny0+tnz0*tnz0), - tnx1 = (x0+x2)/2, tny1 = (y0+y2)/2, tnz1 = (z0+z2)/2, nn1 = (float)std::sqrt(tnx1*tnx1+tny1*tny1+tnz1*tnz1), - tnx2 = (x1+x2)/2, tny2 = (y1+y2)/2, tnz2 = (z1+z2)/2, nn2 = (float)std::sqrt(tnx2*tnx2+tny2*tny2+tnz2*tnz2), + tnx0 = (x0 + x1)/2, tny0 = (y0 + y1)/2, tnz0 = (z0 + z1)/2, + nn0 = (float)std::sqrt(tnx0*tnx0 + tny0*tny0 + tnz0*tnz0), + tnx1 = (x0 + x2)/2, tny1 = (y0 + y2)/2, tnz1 = (z0 + z2)/2, + nn1 = (float)std::sqrt(tnx1*tnx1 + tny1*tny1 + tnz1*tnz1), + tnx2 = (x1 + x2)/2, tny2 = (y1 + y2)/2, tnz2 = (z1 + z2)/2, + nn2 = (float)std::sqrt(tnx2*tnx2 + tny2*tny2 + tnz2*tnz2), nx0 = tnx0/nn0, ny0 = tny0/nn0, nz0 = tnz0/nn0, nx1 = tnx1/nn1, ny1 = tny1/nn1, nz1 = tnz1/nn1, nx2 = tnx2/nn2, ny2 = tny2/nn2, nz2 = tnz2/nn2; @@ -30072,7 +35201,7 @@ (template type \e tf should be at least \e unsigned \e int). \param tensor The tensor which gives the shape and size of the ellipsoid. \param subdivisions The number of recursive subdivisions from an initial stretched icosahedron. - \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N-1). + \return The N vertices (xi,yi,zi) of the 3d object as a Nx3 CImg image (0<=i<=N - 1). \par Example \code CImgList faces3d; @@ -30144,7 +35273,6 @@ const to& opacities, const bool full_check=true) const { CImg error_message(1024); - *error_message = 0; if (!is_object3d(primitives,colors,opacities,full_check,error_message)) throw CImgInstanceException(_cimg_instance "object3dtoCImg3d(): Invalid specified 3d object (%u,%u) (%s).", @@ -30248,12 +35376,12 @@ cimglist_for(primitives,p) siz+=primitives[p].size() + 1; for (int c = cimg::min(primitives.width(),colors.width()) - 1; c>=0; --c) { if (colors[c].is_shared()) siz+=4; - else { const unsigned int csiz = colors[c].size(); siz+=(csiz!=3)?4+csiz:3; } + else { const unsigned int csiz = colors[c].size(); siz+=(csiz!=3)?4 + csiz:3; } } if (colors._width=0; --c) { - const unsigned int csiz = colors[c].size(); siz+=(csiz!=3)?4+csiz:3; + const unsigned int csiz = colors[c].size(); siz+=(csiz!=3)?4 + csiz:3; } if (colors._width& opacities, const bool full_check=true) const { CImg error_message(1024); - *error_message = 0; if (!is_CImg3d(full_check,error_message)) throw CImgInstanceException(_cimg_instance "CImg3dtoobject3d(): image instance is not a CImg3d (%s).", @@ -30383,7 +35510,7 @@ const float brightness, const float nopacity, const float copacity, const unsigned long whd) { static const T maxval = (T)cimg::min(cimg::type::max(),cimg::type::max()); - const int nx0 = x0>0?x0:0, nx1 = x10?x0:0, nx1 = x1=0) { const tc *col = color; const unsigned long off = whd - dx - 1; @@ -30396,7 +35523,7 @@ ptrd+=off; } else cimg_forC(*this,c) { const T val = (T)*(col++); - std::memset(ptrd,(int)val,dx+1); + std::memset(ptrd,(int)val,dx + 1); ptrd+=whd; } } else if (brightness<1) { // Brightness<1 @@ -30406,17 +35533,17 @@ ptrd+=off; } else cimg_forC(*this,c) { const T val = (T)(*(col++)*brightness); - std::memset(ptrd,(int)val,dx+1); + std::memset(ptrd,(int)val,dx + 1); ptrd+=whd; } } else { // Brightness>1 if (sizeof(T)!=1) cimg_forC(*this,c) { - const T val = (T)((2-brightness)**(col++) + (brightness-1)*maxval); + const T val = (T)((2-brightness)**(col++) + (brightness - 1)*maxval); for (int x = dx; x>=0; --x) *(ptrd++) = val; ptrd+=off; } else cimg_forC(*this,c) { - const T val = (T)((2-brightness)**(col++) + (brightness-1)*maxval); - std::memset(ptrd,(int)val,dx+1); + const T val = (T)((2-brightness)**(col++) + (brightness - 1)*maxval); + std::memset(ptrd,(int)val,dx + 1); ptrd+=whd; } } @@ -30435,7 +35562,7 @@ } } else { // Brightness>1 cimg_forC(*this,c) { - const T val = (T)((2-brightness)**(col++) + (brightness-1)*maxval); + const T val = (T)((2-brightness)**(col++) + (brightness - 1)*maxval); for (int x = dx; x>=0; --x) { *ptrd = (T)(val*nopacity + *ptrd*copacity); ++ptrd; } ptrd+=off; } @@ -31184,7 +36311,7 @@ zright-=d*(zright - zleft)/D; txright-=d*(txright - txleft)/D; tyright-=d*(tyright - tyleft)/D; - xright = width()-1; + xright = width() - 1; } if (ydown<0 || yup>=height()) return *this; if (yup<0) { @@ -31201,7 +36328,7 @@ zdown-=d*(zdown - zup)/D; txdown-=d*(txdown - txup)/D; tydown-=d*(tydown - tyup)/D; - ydown = height()-1; + ydown = height() - 1; } T *ptrd0 = data(nx0,ny0); tz *ptrz = zbuffer.data(nx0,ny0); @@ -31352,7 +36479,7 @@ const int xl = x1 + (int)(l*cl), yl = y1 + (int)(l*sl), xr = x1 + (int)(l*cr), yr = y1 + (int)(l*sr), - xc = x1 + (int)((l+1)*(cl+cr))/2, yc = y1 + (int)((l+1)*(sl+sr))/2; + xc = x1 + (int)((l + 1)*(cl + cr))/2, yc = y1 + (int)((l + 1)*(sl + sr))/2; draw_line(x0,y0,xc,yc,color,opacity,pattern).draw_triangle(x1,y1,xl,yl,xr,yr,color,opacity); } else draw_point(x0,y0,color,opacity); return *this; @@ -31410,7 +36537,7 @@ bx = 3*(x1 - x0) - 2*u0 - u1, ay = v0 + v1 + 2*(y0 - y1), by = 3*(y1 - y0) - 2*v0 - v1, - _precision = 1/(std::sqrt(cimg::sqr((float)x0-x1)+cimg::sqr((float)y0-y1))*(precision>0?precision:1)); + _precision = 1/(std::sqrt(cimg::sqr((float)x0 - x1) + cimg::sqr((float)y0 - y1))*(precision>0?precision:1)); int ox = x0, oy = y0; for (float t = 0; t<1; t+=_precision) { const float t2 = t*t, t3 = t2*t; @@ -31449,7 +36576,7 @@ by = 3*(y1 - y0) - 2*v0 - v1, az = w0 + w1 + 2*(z0 - z1), bz = 3*(z1 - z0) - 2*w0 - w1, - _precision = 1/(std::sqrt(cimg::sqr(x0-x1)+cimg::sqr(y0-y1))*(precision>0?precision:1)); + _precision = 1/(std::sqrt(cimg::sqr(x0 - x1) + cimg::sqr(y0 - y1))*(precision>0?precision:1)); int ox = x0, oy = y0, oz = z0; for (float t = 0; t<1; t+=_precision) { const float t2 = t*t, t3 = t2*t; @@ -31501,15 +36628,15 @@ if (is_overlapped(texture)) return draw_spline(x0,y0,u0,v0,x1,y1,u1,v1,+texture,tx0,ty0,tx1,ty1,precision,opacity,pattern,init_hatch); if (x0==x1 && y0==y1) - return draw_point(x0,y0,texture.get_vector_at(x0<=0?0:x0>=texture.width()?texture.width()-1:x0, - y0<=0?0:y0>=texture.height()?texture.height()-1:y0),opacity); + return draw_point(x0,y0,texture.get_vector_at(x0<=0?0:x0>=texture.width()?texture.width() - 1:x0, + y0<=0?0:y0>=texture.height()?texture.height() - 1:y0),opacity); bool ninit_hatch = init_hatch; const float ax = u0 + u1 + 2*(x0 - x1), bx = 3*(x1 - x0) - 2*u0 - u1, ay = v0 + v1 + 2*(y0 - y1), by = 3*(y1 - y0) - 2*v0 - v1, - _precision = 1/(std::sqrt(cimg::sqr(x0-x1)+cimg::sqr(y0-y1))*(precision>0?precision:1)); + _precision = 1/(std::sqrt(cimg::sqr(x0 - x1) + cimg::sqr(y0 - y1))*(precision>0?precision:1)); int ox = x0, oy = y0, otx = tx0, oty = ty0; for (float t1 = 0; t1<1; t1+=_precision) { const float t2 = t1*t1, t3 = t2*t1; @@ -31603,8 +36730,8 @@ tangents.assign(points._width,points._height); cimg_forX(points,p) { const unsigned int - p0 = is_closed_set?(p+points._width-1)%points._width:(p?p-1:0), - p1 = is_closed_set?(p+1)%points._width:(p+1=0?x0:(x0-y0*(x2-x0)/(y2-y0)), \ - xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0-y0*(x1-x0)/(y1-y0))):(x1-y1*(x2-x1)/(y2-y1)), \ + xr = y0>=0?x0:(x0 - y0*(x2 - x0)/(y2 - y0)), \ + xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0 - y0*(x1 - x0)/(y1 - y0))):(x1 - y1*(x2 - x1)/(y2 - y1)), \ _sxn=1, \ _sxr=1, \ _sxl=1, \ - _dxn = x2>x1?x2-x1:(_sxn=-1,x1-x2), \ - _dxr = x2>x0?x2-x0:(_sxr=-1,x0-x2), \ - _dxl = x1>x0?x1-x0:(_sxl=-1,x0-x1), \ + _dxn = x2>x1?x2-x1:(_sxn=-1,x1 - x2), \ + _dxr = x2>x0?x2-x0:(_sxr=-1,x0 - x2), \ + _dxl = x1>x0?x1-x0:(_sxl=-1,x0 - x1), \ _dyn = y2-y1, \ _dyr = y2-y0, \ _dyl = y1-y0, \ _counter = (_dxn-=_dyn?_dyn*(_dxn/_dyn):0, \ _dxr-=_dyr?_dyr*(_dxr/_dyr):0, \ _dxl-=_dyl?_dyl*(_dxl/_dyl):0, \ - cimg::min((int)(img)._height-y-1,y2-y)), \ + cimg::min((int)(img)._height - y - 1,y2 - y)), \ _errn = _dyn/2, \ _errr = _dyr/2, \ _errl = _dyl/2, \ @@ -31696,19 +36823,19 @@ #define _cimg_for_triangle2(img,xl,cl,xr,cr,y,x0,y0,c0,x1,y1,c1,x2,y2,c2) \ for (int y = y0<0?0:y0, \ - xr = y0>=0?x0:(x0-y0*(x2-x0)/(y2-y0)), \ - cr = y0>=0?c0:(c0-y0*(c2-c0)/(y2-y0)), \ - xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0-y0*(x1-x0)/(y1-y0))):(x1-y1*(x2-x1)/(y2-y1)), \ - cl = y1>=0?(y0>=0?(y0==y1?c1:c0):(c0-y0*(c1-c0)/(y1-y0))):(c1-y1*(c2-c1)/(y2-y1)), \ + xr = y0>=0?x0:(x0 - y0*(x2 - x0)/(y2 - y0)), \ + cr = y0>=0?c0:(c0 - y0*(c2 - c0)/(y2 - y0)), \ + xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0 - y0*(x1 - x0)/(y1 - y0))):(x1 - y1*(x2 - x1)/(y2 - y1)), \ + cl = y1>=0?(y0>=0?(y0==y1?c1:c0):(c0 - y0*(c1 - c0)/(y1 - y0))):(c1 - y1*(c2 - c1)/(y2 - y1)), \ _sxn=1, _scn=1, \ _sxr=1, _scr=1, \ _sxl=1, _scl=1, \ - _dxn = x2>x1?x2-x1:(_sxn=-1,x1-x2), \ - _dxr = x2>x0?x2-x0:(_sxr=-1,x0-x2), \ - _dxl = x1>x0?x1-x0:(_sxl=-1,x0-x1), \ - _dcn = c2>c1?c2-c1:(_scn=-1,c1-c2), \ - _dcr = c2>c0?c2-c0:(_scr=-1,c0-c2), \ - _dcl = c1>c0?c1-c0:(_scl=-1,c0-c1), \ + _dxn = x2>x1?x2-x1:(_sxn=-1,x1 - x2), \ + _dxr = x2>x0?x2-x0:(_sxr=-1,x0 - x2), \ + _dxl = x1>x0?x1-x0:(_sxl=-1,x0 - x1), \ + _dcn = c2>c1?c2-c1:(_scn=-1,c1 - c2), \ + _dcr = c2>c0?c2-c0:(_scr=-1,c0 - c2), \ + _dcl = c1>c0?c1-c0:(_scl=-1,c0 - c1), \ _dyn = y2-y1, \ _dyr = y2-y0, \ _dyl = y1-y0, \ @@ -31718,14 +36845,14 @@ _dcn-=_dyn?_dyn*(_dcn/_dyn):0, \ _dcr-=_dyr?_dyr*(_dcr/_dyr):0, \ _dcl-=_dyl?_dyl*(_dcl/_dyl):0, \ - cimg::min((int)(img)._height-y-1,y2-y)), \ + cimg::min((int)(img)._height - y - 1,y2 - y)), \ _errn = _dyn/2, _errcn = _errn, \ _errr = _dyr/2, _errcr = _errr, \ _errl = _dyl/2, _errcl = _errl, \ - _rxn = _dyn?(x2-x1)/_dyn:0, \ - _rcn = _dyn?(c2-c1)/_dyn:0, \ - _rxr = _dyr?(x2-x0)/_dyr:0, \ - _rcr = _dyr?(c2-c0)/_dyr:0, \ + _rxn = _dyn?(x2 - x1)/_dyn:0, \ + _rcn = _dyn?(c2 - c1)/_dyn:0, \ + _rxr = _dyr?(x2 - x0)/_dyr:0, \ + _rcr = _dyr?(c2 - c0)/_dyr:0, \ _rxl = (y0!=y1 && y1>0)?(_dyl?(x1-x0)/_dyl:0): \ (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), \ _rcl = (y0!=y1 && y1>0)?(_dyl?(c1-c0)/_dyl:0): \ @@ -31740,24 +36867,24 @@ #define _cimg_for_triangle3(img,xl,txl,tyl,xr,txr,tyr,y,x0,y0,tx0,ty0,x1,y1,tx1,ty1,x2,y2,tx2,ty2) \ for (int y = y0<0?0:y0, \ - xr = y0>=0?x0:(x0-y0*(x2-x0)/(y2-y0)), \ - txr = y0>=0?tx0:(tx0-y0*(tx2-tx0)/(y2-y0)), \ - tyr = y0>=0?ty0:(ty0-y0*(ty2-ty0)/(y2-y0)), \ - xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0-y0*(x1-x0)/(y1-y0))):(x1-y1*(x2-x1)/(y2-y1)), \ - txl = y1>=0?(y0>=0?(y0==y1?tx1:tx0):(tx0-y0*(tx1-tx0)/(y1-y0))):(tx1-y1*(tx2-tx1)/(y2-y1)), \ - tyl = y1>=0?(y0>=0?(y0==y1?ty1:ty0):(ty0-y0*(ty1-ty0)/(y1-y0))):(ty1-y1*(ty2-ty1)/(y2-y1)), \ + xr = y0>=0?x0:(x0 - y0*(x2 - x0)/(y2 - y0)), \ + txr = y0>=0?tx0:(tx0 - y0*(tx2 - tx0)/(y2 - y0)), \ + tyr = y0>=0?ty0:(ty0 - y0*(ty2 - ty0)/(y2 - y0)), \ + xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0 - y0*(x1 - x0)/(y1 - y0))):(x1 - y1*(x2 - x1)/(y2 - y1)), \ + txl = y1>=0?(y0>=0?(y0==y1?tx1:tx0):(tx0 - y0*(tx1 - tx0)/(y1 - y0))):(tx1 - y1*(tx2 - tx1)/(y2 - y1)), \ + tyl = y1>=0?(y0>=0?(y0==y1?ty1:ty0):(ty0 - y0*(ty1 - ty0)/(y1 - y0))):(ty1 - y1*(ty2 - ty1)/(y2 - y1)), \ _sxn=1, _stxn=1, _styn=1, \ _sxr=1, _stxr=1, _styr=1, \ _sxl=1, _stxl=1, _styl=1, \ - _dxn = x2>x1?x2-x1:(_sxn=-1,x1-x2), \ - _dxr = x2>x0?x2-x0:(_sxr=-1,x0-x2), \ - _dxl = x1>x0?x1-x0:(_sxl=-1,x0-x1), \ - _dtxn = tx2>tx1?tx2-tx1:(_stxn=-1,tx1-tx2), \ - _dtxr = tx2>tx0?tx2-tx0:(_stxr=-1,tx0-tx2), \ - _dtxl = tx1>tx0?tx1-tx0:(_stxl=-1,tx0-tx1), \ - _dtyn = ty2>ty1?ty2-ty1:(_styn=-1,ty1-ty2), \ - _dtyr = ty2>ty0?ty2-ty0:(_styr=-1,ty0-ty2), \ - _dtyl = ty1>ty0?ty1-ty0:(_styl=-1,ty0-ty1), \ + _dxn = x2>x1?x2 - x1:(_sxn=-1,x1 - x2), \ + _dxr = x2>x0?x2 - x0:(_sxr=-1,x0 - x2), \ + _dxl = x1>x0?x1 - x0:(_sxl=-1,x0 - x1), \ + _dtxn = tx2>tx1?tx2 - tx1:(_stxn=-1,tx1 - tx2), \ + _dtxr = tx2>tx0?tx2 - tx0:(_stxr=-1,tx0 - tx2), \ + _dtxl = tx1>tx0?tx1 - tx0:(_stxl=-1,tx0 - tx1), \ + _dtyn = ty2>ty1?ty2 - ty1:(_styn=-1,ty1 - ty2), \ + _dtyr = ty2>ty0?ty2 - ty0:(_styr=-1,ty0 - ty2), \ + _dtyl = ty1>ty0?ty1 - ty0:(_styl=-1,ty0 - ty1), \ _dyn = y2-y1, \ _dyr = y2-y0, \ _dyl = y1-y0, \ @@ -31770,21 +36897,21 @@ _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, \ _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, \ _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, \ - cimg::min((int)(img)._height-y-1,y2-y)), \ + cimg::min((int)(img)._height - y - 1,y2 - y)), \ _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, \ _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, \ _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, \ - _rxn = _dyn?(x2-x1)/_dyn:0, \ - _rtxn = _dyn?(tx2-tx1)/_dyn:0, \ - _rtyn = _dyn?(ty2-ty1)/_dyn:0, \ - _rxr = _dyr?(x2-x0)/_dyr:0, \ - _rtxr = _dyr?(tx2-tx0)/_dyr:0, \ - _rtyr = _dyr?(ty2-ty0)/_dyr:0, \ - _rxl = (y0!=y1 && y1>0)?(_dyl?(x1-x0)/_dyl:0): \ + _rxn = _dyn?(x2 - x1)/_dyn:0, \ + _rtxn = _dyn?(tx2 - tx1)/_dyn:0, \ + _rtyn = _dyn?(ty2 - ty1)/_dyn:0, \ + _rxr = _dyr?(x2 - x0)/_dyr:0, \ + _rtxr = _dyr?(tx2 - tx0)/_dyr:0, \ + _rtyr = _dyr?(ty2 - ty0)/_dyr:0, \ + _rxl = (y0!=y1 && y1>0)?(_dyl?(x1 - x0)/_dyl:0): \ (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), \ - _rtxl = (y0!=y1 && y1>0)?(_dyl?(tx1-tx0)/_dyl:0): \ + _rtxl = (y0!=y1 && y1>0)?(_dyl?(tx1 - tx0)/_dyl:0): \ (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), \ - _rtyl = (y0!=y1 && y1>0)?(_dyl?(ty1-ty0)/_dyl:0): \ + _rtyl = (y0!=y1 && y1>0)?(_dyl?(ty1 - ty0)/_dyl:0): \ (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); \ _counter>=0; --_counter, ++y, \ xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), \ @@ -31795,36 +36922,36 @@ _rxl+((_errl-=_dxl)<0?(_errl+=_dyl,_sxl):0)): \ (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, txl=tx1, \ _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, tyl=ty1,\ - _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1-xl)) + _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1 - xl)) #define _cimg_for_triangle4(img,xl,cl,txl,tyl,xr,cr,txr,tyr,y,x0,y0,c0,tx0,ty0,x1,y1,c1,tx1,ty1,x2,y2,c2,tx2,ty2) \ for (int y = y0<0?0:y0, \ - xr = y0>=0?x0:(x0-y0*(x2-x0)/(y2-y0)), \ - cr = y0>=0?c0:(c0-y0*(c2-c0)/(y2-y0)), \ - txr = y0>=0?tx0:(tx0-y0*(tx2-tx0)/(y2-y0)), \ - tyr = y0>=0?ty0:(ty0-y0*(ty2-ty0)/(y2-y0)), \ - xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0-y0*(x1-x0)/(y1-y0))):(x1-y1*(x2-x1)/(y2-y1)), \ - cl = y1>=0?(y0>=0?(y0==y1?c1:c0):(c0-y0*(c1-c0)/(y1-y0))):(c1-y1*(c2-c1)/(y2-y1)), \ - txl = y1>=0?(y0>=0?(y0==y1?tx1:tx0):(tx0-y0*(tx1-tx0)/(y1-y0))):(tx1-y1*(tx2-tx1)/(y2-y1)), \ - tyl = y1>=0?(y0>=0?(y0==y1?ty1:ty0):(ty0-y0*(ty1-ty0)/(y1-y0))):(ty1-y1*(ty2-ty1)/(y2-y1)), \ + xr = y0>=0?x0:(x0 - y0*(x2 - x0)/(y2 - y0)), \ + cr = y0>=0?c0:(c0 - y0*(c2 - c0)/(y2 - y0)), \ + txr = y0>=0?tx0:(tx0 - y0*(tx2 - tx0)/(y2 - y0)), \ + tyr = y0>=0?ty0:(ty0 - y0*(ty2 - ty0)/(y2 - y0)), \ + xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0 - y0*(x1 - x0)/(y1 - y0))):(x1 - y1*(x2 - x1)/(y2 - y1)), \ + cl = y1>=0?(y0>=0?(y0==y1?c1:c0):(c0 - y0*(c1 - c0)/(y1 - y0))):(c1 - y1*(c2 - c1)/(y2 - y1)), \ + txl = y1>=0?(y0>=0?(y0==y1?tx1:tx0):(tx0 - y0*(tx1 - tx0)/(y1 - y0))):(tx1 - y1*(tx2 - tx1)/(y2 - y1)), \ + tyl = y1>=0?(y0>=0?(y0==y1?ty1:ty0):(ty0 - y0*(ty1 - ty0)/(y1 - y0))):(ty1 - y1*(ty2 - ty1)/(y2 - y1)), \ _sxn=1, _scn=1, _stxn=1, _styn=1, \ _sxr=1, _scr=1, _stxr=1, _styr=1, \ _sxl=1, _scl=1, _stxl=1, _styl=1, \ - _dxn = x2>x1?x2-x1:(_sxn=-1,x1-x2), \ - _dxr = x2>x0?x2-x0:(_sxr=-1,x0-x2), \ - _dxl = x1>x0?x1-x0:(_sxl=-1,x0-x1), \ - _dcn = c2>c1?c2-c1:(_scn=-1,c1-c2), \ - _dcr = c2>c0?c2-c0:(_scr=-1,c0-c2), \ - _dcl = c1>c0?c1-c0:(_scl=-1,c0-c1), \ - _dtxn = tx2>tx1?tx2-tx1:(_stxn=-1,tx1-tx2), \ - _dtxr = tx2>tx0?tx2-tx0:(_stxr=-1,tx0-tx2), \ - _dtxl = tx1>tx0?tx1-tx0:(_stxl=-1,tx0-tx1), \ - _dtyn = ty2>ty1?ty2-ty1:(_styn=-1,ty1-ty2), \ - _dtyr = ty2>ty0?ty2-ty0:(_styr=-1,ty0-ty2), \ - _dtyl = ty1>ty0?ty1-ty0:(_styl=-1,ty0-ty1), \ - _dyn = y2-y1, \ - _dyr = y2-y0, \ - _dyl = y1-y0, \ + _dxn = x2>x1?x2 - x1:(_sxn=-1,x1 - x2), \ + _dxr = x2>x0?x2 - x0:(_sxr=-1,x0 - x2), \ + _dxl = x1>x0?x1 - x0:(_sxl=-1,x0 - x1), \ + _dcn = c2>c1?c2 - c1:(_scn=-1,c1 - c2), \ + _dcr = c2>c0?c2 - c0:(_scr=-1,c0 - c2), \ + _dcl = c1>c0?c1 - c0:(_scl=-1,c0 - c1), \ + _dtxn = tx2>tx1?tx2 - tx1:(_stxn=-1,tx1 - tx2), \ + _dtxr = tx2>tx0?tx2 - tx0:(_stxr=-1,tx0 - tx2), \ + _dtxl = tx1>tx0?tx1 - tx0:(_stxl=-1,tx0 - tx1), \ + _dtyn = ty2>ty1?ty2 - ty1:(_styn=-1,ty1 - ty2), \ + _dtyr = ty2>ty0?ty2 - ty0:(_styr=-1,ty0 - ty2), \ + _dtyl = ty1>ty0?ty1 - ty0:(_styl=-1,ty0 - ty1), \ + _dyn = y2 - y1, \ + _dyr = y2 - y0, \ + _dyl = y1 - y0, \ _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, \ _dxr-=_dyr?_dyr*(_dxr/_dyr):0, \ _dxl-=_dyl?_dyl*(_dxl/_dyl):0, \ @@ -31837,25 +36964,25 @@ _dtyn-=_dyn?_dyn*(_dtyn/_dyn):0, \ _dtyr-=_dyr?_dyr*(_dtyr/_dyr):0, \ _dtyl-=_dyl?_dyl*(_dtyl/_dyl):0, \ - cimg::min((int)(img)._height-y-1,y2-y)), \ + cimg::min((int)(img)._height - y - 1,y2 - y)), \ _errn = _dyn/2, _errcn = _errn, _errtxn = _errn, _errtyn = _errn, \ _errr = _dyr/2, _errcr = _errr, _errtxr = _errr, _errtyr = _errr, \ _errl = _dyl/2, _errcl = _errl, _errtxl = _errl, _errtyl = _errl, \ - _rxn = _dyn?(x2-x1)/_dyn:0, \ - _rcn = _dyn?(c2-c1)/_dyn:0, \ - _rtxn = _dyn?(tx2-tx1)/_dyn:0, \ - _rtyn = _dyn?(ty2-ty1)/_dyn:0, \ - _rxr = _dyr?(x2-x0)/_dyr:0, \ - _rcr = _dyr?(c2-c0)/_dyr:0, \ - _rtxr = _dyr?(tx2-tx0)/_dyr:0, \ - _rtyr = _dyr?(ty2-ty0)/_dyr:0, \ - _rxl = (y0!=y1 && y1>0)?(_dyl?(x1-x0)/_dyl:0): \ + _rxn = _dyn?(x2 - x1)/_dyn:0, \ + _rcn = _dyn?(c2 - c1)/_dyn:0, \ + _rtxn = _dyn?(tx2 - tx1)/_dyn:0, \ + _rtyn = _dyn?(ty2 - ty1)/_dyn:0, \ + _rxr = _dyr?(x2 - x0)/_dyr:0, \ + _rcr = _dyr?(c2 - c0)/_dyr:0, \ + _rtxr = _dyr?(tx2 - tx0)/_dyr:0, \ + _rtyr = _dyr?(ty2 - ty0)/_dyr:0, \ + _rxl = (y0!=y1 && y1>0)?(_dyl?(x1 - x0)/_dyl:0): \ (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), \ - _rcl = (y0!=y1 && y1>0)?(_dyl?(c1-c0)/_dyl:0): \ + _rcl = (y0!=y1 && y1>0)?(_dyl?(c1 - c0)/_dyl:0): \ (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcn ), \ - _rtxl = (y0!=y1 && y1>0)?(_dyl?(tx1-tx0)/_dyl:0): \ + _rtxl = (y0!=y1 && y1>0)?(_dyl?(tx1 - tx0)/_dyl:0): \ (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), \ - _rtyl = (y0!=y1 && y1>0)?(_dyl?(ty1-ty0)/_dyl:0): \ + _rtyl = (y0!=y1 && y1>0)?(_dyl?(ty1 - ty0)/_dyl:0): \ (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ); \ _counter>=0; --_counter, ++y, \ xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), \ @@ -31869,39 +36996,39 @@ (_errcl=_errcn, _dcl=_dcn, _dyl=_dyn, _scl=_scn, _rcl=_rcn, cl=c1, \ _errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxl=_rtxn, txl=tx1, \ _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, tyl=ty1, \ - _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1-xl)) + _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1 - xl)) #define _cimg_for_triangle5(img,xl,txl,tyl,lxl,lyl,xr,txr,tyr,lxr,lyr,y,x0,y0,\ tx0,ty0,lx0,ly0,x1,y1,tx1,ty1,lx1,ly1,x2,y2,tx2,ty2,lx2,ly2) \ for (int y = y0<0?0:y0, \ - xr = y0>=0?x0:(x0-y0*(x2-x0)/(y2-y0)), \ - txr = y0>=0?tx0:(tx0-y0*(tx2-tx0)/(y2-y0)), \ - tyr = y0>=0?ty0:(ty0-y0*(ty2-ty0)/(y2-y0)), \ - lxr = y0>=0?lx0:(lx0-y0*(lx2-lx0)/(y2-y0)), \ - lyr = y0>=0?ly0:(ly0-y0*(ly2-ly0)/(y2-y0)), \ - xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0-y0*(x1-x0)/(y1-y0))):(x1-y1*(x2-x1)/(y2-y1)), \ - txl = y1>=0?(y0>=0?(y0==y1?tx1:tx0):(tx0-y0*(tx1-tx0)/(y1-y0))):(tx1-y1*(tx2-tx1)/(y2-y1)), \ - tyl = y1>=0?(y0>=0?(y0==y1?ty1:ty0):(ty0-y0*(ty1-ty0)/(y1-y0))):(ty1-y1*(ty2-ty1)/(y2-y1)), \ - lxl = y1>=0?(y0>=0?(y0==y1?lx1:lx0):(lx0-y0*(lx1-lx0)/(y1-y0))):(lx1-y1*(lx2-lx1)/(y2-y1)), \ - lyl = y1>=0?(y0>=0?(y0==y1?ly1:ly0):(ly0-y0*(ly1-ly0)/(y1-y0))):(ly1-y1*(ly2-ly1)/(y2-y1)), \ + xr = y0>=0?x0:(x0 - y0*(x2 - x0)/(y2 - y0)), \ + txr = y0>=0?tx0:(tx0 - y0*(tx2 - tx0)/(y2 - y0)), \ + tyr = y0>=0?ty0:(ty0 - y0*(ty2 - ty0)/(y2 - y0)), \ + lxr = y0>=0?lx0:(lx0 - y0*(lx2 - lx0)/(y2 - y0)), \ + lyr = y0>=0?ly0:(ly0 - y0*(ly2 - ly0)/(y2 - y0)), \ + xl = y1>=0?(y0>=0?(y0==y1?x1:x0):(x0 - y0*(x1 - x0)/(y1 - y0))):(x1 - y1*(x2 - x1)/(y2 - y1)), \ + txl = y1>=0?(y0>=0?(y0==y1?tx1:tx0):(tx0 - y0*(tx1 - tx0)/(y1 - y0))):(tx1 - y1*(tx2 - tx1)/(y2 - y1)), \ + tyl = y1>=0?(y0>=0?(y0==y1?ty1:ty0):(ty0 - y0*(ty1 - ty0)/(y1 - y0))):(ty1 - y1*(ty2 - ty1)/(y2 - y1)), \ + lxl = y1>=0?(y0>=0?(y0==y1?lx1:lx0):(lx0 - y0*(lx1 - lx0)/(y1 - y0))):(lx1 - y1*(lx2 - lx1)/(y2 - y1)), \ + lyl = y1>=0?(y0>=0?(y0==y1?ly1:ly0):(ly0 - y0*(ly1 - ly0)/(y1 - y0))):(ly1 - y1*(ly2 - ly1)/(y2 - y1)), \ _sxn=1, _stxn=1, _styn=1, _slxn=1, _slyn=1, \ _sxr=1, _stxr=1, _styr=1, _slxr=1, _slyr=1, \ _sxl=1, _stxl=1, _styl=1, _slxl=1, _slyl=1, \ - _dxn = x2>x1?x2-x1:(_sxn=-1,x1-x2), _dyn = y2-y1, \ - _dxr = x2>x0?x2-x0:(_sxr=-1,x0-x2), _dyr = y2-y0, \ - _dxl = x1>x0?x1-x0:(_sxl=-1,x0-x1), _dyl = y1-y0, \ - _dtxn = tx2>tx1?tx2-tx1:(_stxn=-1,tx1-tx2), \ - _dtxr = tx2>tx0?tx2-tx0:(_stxr=-1,tx0-tx2), \ - _dtxl = tx1>tx0?tx1-tx0:(_stxl=-1,tx0-tx1), \ - _dtyn = ty2>ty1?ty2-ty1:(_styn=-1,ty1-ty2), \ - _dtyr = ty2>ty0?ty2-ty0:(_styr=-1,ty0-ty2), \ - _dtyl = ty1>ty0?ty1-ty0:(_styl=-1,ty0-ty1), \ - _dlxn = lx2>lx1?lx2-lx1:(_slxn=-1,lx1-lx2), \ - _dlxr = lx2>lx0?lx2-lx0:(_slxr=-1,lx0-lx2), \ - _dlxl = lx1>lx0?lx1-lx0:(_slxl=-1,lx0-lx1), \ - _dlyn = ly2>ly1?ly2-ly1:(_slyn=-1,ly1-ly2), \ - _dlyr = ly2>ly0?ly2-ly0:(_slyr=-1,ly0-ly2), \ - _dlyl = ly1>ly0?ly1-ly0:(_slyl=-1,ly0-ly1), \ + _dxn = x2>x1?x2 - x1:(_sxn=-1,x1 - x2), _dyn = y2 - y1, \ + _dxr = x2>x0?x2 - x0:(_sxr=-1,x0 - x2), _dyr = y2 - y0, \ + _dxl = x1>x0?x1 - x0:(_sxl=-1,x0 - x1), _dyl = y1 - y0, \ + _dtxn = tx2>tx1?tx2 - tx1:(_stxn=-1,tx1 - tx2), \ + _dtxr = tx2>tx0?tx2 - tx0:(_stxr=-1,tx0 - tx2), \ + _dtxl = tx1>tx0?tx1 - tx0:(_stxl=-1,tx0 - tx1), \ + _dtyn = ty2>ty1?ty2 - ty1:(_styn=-1,ty1 - ty2), \ + _dtyr = ty2>ty0?ty2 - ty0:(_styr=-1,ty0 - ty2), \ + _dtyl = ty1>ty0?ty1 - ty0:(_styl=-1,ty0 - ty1), \ + _dlxn = lx2>lx1?lx2 - lx1:(_slxn=-1,lx1 - lx2), \ + _dlxr = lx2>lx0?lx2 - lx0:(_slxr=-1,lx0 - lx2), \ + _dlxl = lx1>lx0?lx1 - lx0:(_slxl=-1,lx0 - lx1), \ + _dlyn = ly2>ly1?ly2 - ly1:(_slyn=-1,ly1 - ly2), \ + _dlyr = ly2>ly0?ly2 - ly0:(_slyr=-1,ly0 - ly2), \ + _dlyl = ly1>ly0?ly1 - ly0:(_slyl=-1,ly0 - ly1), \ _counter =(_dxn-=_dyn?_dyn*(_dxn/_dyn):0, \ _dxr-=_dyr?_dyr*(_dxr/_dyr):0, \ _dxl-=_dyl?_dyl*(_dxl/_dyl):0, \ @@ -31917,29 +37044,29 @@ _dlyn-=_dyn?_dyn*(_dlyn/_dyn):0, \ _dlyr-=_dyr?_dyr*(_dlyr/_dyr):0, \ _dlyl-=_dyl?_dyl*(_dlyl/_dyl):0, \ - cimg::min((int)(img)._height-y-1,y2-y)), \ + cimg::min((int)(img)._height - y - 1,y2 - y)), \ _errn = _dyn/2, _errtxn = _errn, _errtyn = _errn, _errlxn = _errn, _errlyn = _errn, \ _errr = _dyr/2, _errtxr = _errr, _errtyr = _errr, _errlxr = _errr, _errlyr = _errr, \ _errl = _dyl/2, _errtxl = _errl, _errtyl = _errl, _errlxl = _errl, _errlyl = _errl, \ - _rxn = _dyn?(x2-x1)/_dyn:0, \ - _rtxn = _dyn?(tx2-tx1)/_dyn:0, \ - _rtyn = _dyn?(ty2-ty1)/_dyn:0, \ - _rlxn = _dyn?(lx2-lx1)/_dyn:0, \ - _rlyn = _dyn?(ly2-ly1)/_dyn:0, \ - _rxr = _dyr?(x2-x0)/_dyr:0, \ - _rtxr = _dyr?(tx2-tx0)/_dyr:0, \ - _rtyr = _dyr?(ty2-ty0)/_dyr:0, \ - _rlxr = _dyr?(lx2-lx0)/_dyr:0, \ - _rlyr = _dyr?(ly2-ly0)/_dyr:0, \ - _rxl = (y0!=y1 && y1>0)?(_dyl?(x1-x0)/_dyl:0): \ + _rxn = _dyn?(x2 - x1)/_dyn:0, \ + _rtxn = _dyn?(tx2 - tx1)/_dyn:0, \ + _rtyn = _dyn?(ty2 - ty1)/_dyn:0, \ + _rlxn = _dyn?(lx2 - lx1)/_dyn:0, \ + _rlyn = _dyn?(ly2 - ly1)/_dyn:0, \ + _rxr = _dyr?(x2 - x0)/_dyr:0, \ + _rtxr = _dyr?(tx2 - tx0)/_dyr:0, \ + _rtyr = _dyr?(ty2 - ty0)/_dyr:0, \ + _rlxr = _dyr?(lx2 - lx0)/_dyr:0, \ + _rlyr = _dyr?(ly2 - ly0)/_dyr:0, \ + _rxl = (y0!=y1 && y1>0)?(_dyl?(x1 - x0)/_dyl:0): \ (_errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxn), \ - _rtxl = (y0!=y1 && y1>0)?(_dyl?(tx1-tx0)/_dyl:0): \ + _rtxl = (y0!=y1 && y1>0)?(_dyl?(tx1 - tx0)/_dyl:0): \ (_errtxl=_errtxn, _dtxl=_dtxn, _dyl=_dyn, _stxl=_stxn, _rtxn ), \ - _rtyl = (y0!=y1 && y1>0)?(_dyl?(ty1-ty0)/_dyl:0): \ + _rtyl = (y0!=y1 && y1>0)?(_dyl?(ty1 - ty0)/_dyl:0): \ (_errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyn ), \ - _rlxl = (y0!=y1 && y1>0)?(_dyl?(lx1-lx0)/_dyl:0): \ + _rlxl = (y0!=y1 && y1>0)?(_dyl?(lx1 - lx0)/_dyl:0): \ (_errlxl=_errlxn, _dlxl=_dlxn, _dyl=_dyn, _slxl=_slxn, _rlxn ), \ - _rlyl = (y0!=y1 && y1>0)?(_dyl?(ly1-ly0)/_dyl:0): \ + _rlyl = (y0!=y1 && y1>0)?(_dyl?(ly1 - ly0)/_dyl:0): \ (_errlyl=_errlyn, _dlyl=_dlyn, _dyl=_dyn, _slyl=_slyn, _rlyn ); \ _counter>=0; --_counter, ++y, \ xr+=_rxr+((_errr-=_dxr)<0?_errr+=_dyr,_sxr:0), \ @@ -31956,7 +37083,7 @@ _errtyl=_errtyn, _dtyl=_dtyn, _dyl=_dyn, _styl=_styn, _rtyl=_rtyn, tyl=ty1, \ _errlxl=_errlxn, _dlxl=_dlxn, _dyl=_dyn, _slxl=_slxn, _rlxl=_rlxn, lxl=lx1, \ _errlyl=_errlyn, _dlyl=_dlyn, _dyl=_dyn, _slyl=_slyn, _rlyl=_rlyn, lyl=ly1, \ - _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1-xl)) + _errl=_errn, _dxl=_dxn, _dyl=_dyn, _sxl=_sxn, _rxl=_rxn, x1 - xl)) // [internal] Draw a filled triangle. template @@ -32097,9 +37224,9 @@ const tzfloat pentez = (zright - zleft)/dx; if (xleft<0 && dx) zleft-=xleft*(zright - zleft)/dx; if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width() - 1; + if (xright>=width() - 1) xright = width() - 1; T* ptrd = data(xleft,y,0,0); - tz *ptrz = zbuffer.data(xleft,y); + tz *ptrz = xleft<=xright?zbuffer.data(xleft,y):0; if (opacity>=1) { if (nbrightness==1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { if (zleft>=(tzfloat)*ptrz) { @@ -32119,7 +37246,7 @@ if (zleft>=(tzfloat)*ptrz) { *ptrz = (tz)zleft; const tc *col = color; - cimg_forC(*this,c) { *ptrd = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); ptrd+=whd; } + cimg_forC(*this,c) { *ptrd = (T)((2 - nbrightness)**(col++) + (nbrightness - 1)*maxval); ptrd+=whd; } ptrd-=offx; } zleft+=pentez; @@ -32145,7 +37272,7 @@ *ptrz = (tz)zleft; const tc *col = color; cimg_forC(*this,c) { - const T val = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); + const T val = (T)((2 - nbrightness)**(col++) + (nbrightness - 1)*maxval); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; } @@ -32206,16 +37333,16 @@ dc = cright>cleft?cright - cleft:cleft - cright, rc = dx?(cright - cleft)/dx:0, sc = cright>cleft?1:-1, - ndc = dc-(dx?dx*(dc/dx):0); + ndc = dc - (dx?dx*(dc/dx):0); int errc = dx>>1; if (xleft<0 && dx) cleft-=xleft*(cright - cleft)/dx; if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width() - 1; + if (xright>=width() - 1) xright = width() - 1; T* ptrd = data(xleft,y); if (opacity>=1) for (int x = xleft; x<=xright; ++x) { const tc *col = color; cimg_forC(*this,c) { - *ptrd = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); + *ptrd = (T)(cleft<256?cleft**(col++)/256:((512 - cleft)**(col++)+(cleft - 256)*maxval)/256); ptrd+=whd; } ptrd-=offx; @@ -32223,7 +37350,7 @@ } else for (int x = xleft; x<=xright; ++x) { const tc *col = color; cimg_forC(*this,c) { - const T val = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); + const T val = (T)(cleft<256?cleft**(col++)/256:((512 - cleft)**(col++)+(cleft - 256)*maxval)/256); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; } @@ -32283,9 +37410,9 @@ const int dx = xright - xleft, dc = cright>cleft?cright - cleft:cleft - cright, - rc = dx?(cright-cleft)/dx:0, + rc = dx?(cright - cleft)/dx:0, sc = cright>cleft?1:-1, - ndc = dc-(dx?dx*(dc/dx):0); + ndc = dc - (dx?dx*(dc/dx):0); const tzfloat pentez = (zright - zleft)/dx; int errc = dx>>1; if (xleft<0 && dx) { @@ -32293,15 +37420,15 @@ zleft-=xleft*(zright - zleft)/dx; } if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; + if (xright>=width() - 1) xright = width() - 1; T *ptrd = data(xleft,y); - tz *ptrz = zbuffer.data(xleft,y); + tz *ptrz = xleft<=xright?zbuffer.data(xleft,y):0; if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { if (zleft>=(tzfloat)*ptrz) { *ptrz = (tz)zleft; const tc *col = color; cimg_forC(*this,c) { - *ptrd = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); + *ptrd = (T)(cleft<256?cleft**(col++)/256:((512 - cleft)**(col++)+(cleft - 256)*maxval)/256); ptrd+=whd; } ptrd-=offx; @@ -32313,7 +37440,7 @@ *ptrz = (tz)zleft; const tc *col = color; cimg_forC(*this,c) { - const T val = (T)(cleft<256?cleft**(col++)/256:((512-cleft)**(col++)+(cleft-256)*maxval)/256); + const T val = (T)(cleft<256?cleft**(col++)/256:((512 - cleft)**(col++)+(cleft - 256)*maxval)/256); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; } @@ -32427,7 +37554,7 @@ tyleft-=xleft*(tyright - tyleft)/dx; } if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; + if (xright>=width() - 1) xright = width() - 1; T* ptrd = data(xleft,y,0,0); if (opacity>=1) { if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { @@ -32451,7 +37578,7 @@ } else for (int x = xleft; x<=xright; ++x) { const tc *col = &texture._atXY(txleft,tyleft); cimg_forC(*this,c) { - *ptrd = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); + *ptrd = (T)((2 - nbrightness)**(col++) + (nbrightness - 1)*maxval); ptrd+=whd; col+=twh; } ptrd-=offx; @@ -32480,7 +37607,7 @@ } else for (int x = xleft; x<=xright; ++x) { const tc *col = &texture._atXY(txleft,tyleft); cimg_forC(*this,c) { - const T val = (T)((2-nbrightness)**(col++) + (nbrightness-1)*maxval); + const T val = (T)((2 - nbrightness)**(col++) + (nbrightness - 1)*maxval); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; col+=twh; } @@ -32567,7 +37694,7 @@ tyleft-=xleft*(tyright - tyleft)/dx; } if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; + if (xright>=width() - 1) xright = width() - 1; T* ptrd = data(xleft,y,0,0); if (opacity>=1) { if (nbrightness==1) for (int x = xleft; x<=xright; ++x) { @@ -32590,7 +37717,7 @@ const float invz = 1/zleft; const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); cimg_forC(*this,c) { - *ptrd = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); + *ptrd = (T)((2 - nbrightness)**col + (nbrightness - 1)*maxval); ptrd+=whd; col+=twh; } ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; @@ -32616,7 +37743,7 @@ const float invz = 1/zleft; const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); cimg_forC(*this,c) { - const T val = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); + const T val = (T)((2 - nbrightness)**col + (nbrightness - 1)*maxval); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; col+=twh; } @@ -32708,7 +37835,7 @@ tyleft-=xleft*(tyright - tyleft)/dx; } if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; + if (xright>=width() - 1) xright = width() - 1; T *ptrd = data(xleft,y,0,0); tz *ptrz = zbuffer.data(xleft,y); if (opacity>=1) { @@ -32742,7 +37869,7 @@ const tzfloat invz = 1/zleft; const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); cimg_forC(*this,c) { - *ptrd = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); + *ptrd = (T)((2 - nbrightness)**col + (nbrightness - 1)*maxval); ptrd+=whd; col+=twh; } ptrd-=offx; @@ -32780,7 +37907,7 @@ const tzfloat invz = 1/zleft; const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); cimg_forC(*this,c) { - const T val = (T)((2-nbrightness)**col + (nbrightness-1)*maxval); + const T val = (T)((2 - nbrightness)**col + (nbrightness - 1)*maxval); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; col+=twh; } @@ -32839,7 +37966,7 @@ const unsigned long whd = (unsigned long)_width*_height*_depth, lwh = (unsigned long)light._width*light._height, - offx = _spectrum*whd-1; + offx = _spectrum*whd - 1; if (ny0>ny1) cimg::swap(nx0,nx1,ny0,ny1,nlx0,nlx1,nly0,nly1); if (ny0>ny2) cimg::swap(nx0,nx2,ny0,ny2,nlx0,nlx2,nly0,nly2); if (ny1>ny2) cimg::swap(nx1,nx2,ny1,ny2,nlx1,nlx2,nly1,nly2); @@ -32867,14 +37994,14 @@ lyleft-=xleft*(lyright - lyleft)/dx; } if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; + if (xright>=width() - 1) xright = width() - 1; T* ptrd = data(xleft,y,0,0); if (opacity>=1) for (int x = xleft; x<=xright; ++x) { const tc *col = color; const tl *lig = &light._atXY(lxleft,lyleft); cimg_forC(*this,c) { const tl l = *lig; - *ptrd = (T)(l<1?l**(col++):((2-l)**(col++)+(l-1)*maxval)); + *ptrd = (T)(l<1?l**(col++):((2 - l)**(col++) + (l - 1)*maxval)); ptrd+=whd; lig+=lwh; } ptrd-=offx; @@ -32885,7 +38012,7 @@ const tl *lig = &light._atXY(lxleft,lyleft); cimg_forC(*this,c) { const tl l = *lig; - const T val = (T)(l<1?l**(col++):((2-l)**(col++)+(l-1)*maxval)); + const T val = (T)(l<1?l**(col++):((2 - l)**(col++) + (l - 1)*maxval)); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; lig+=lwh; } @@ -32973,9 +38100,9 @@ lyleft-=xleft*(lyright - lyleft)/dx; } if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; + if (xright>=width() - 1) xright = width() - 1; T *ptrd = data(xleft,y,0,0); - tz *ptrz = zbuffer.data(xleft,y); + tz *ptrz = xleft<=xright?zbuffer.data(xleft,y):0; if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { if (zleft>=(tzfloat)*ptrz) { *ptrz = (tz)zleft; @@ -32984,7 +38111,7 @@ cimg_forC(*this,c) { const tl l = *lig; const tc cval = *(col++); - *ptrd = (T)(l<1?l*cval:(2-l)*cval+(l-1)*maxval); + *ptrd = (T)(l<1?l*cval:(2 - l)*cval + (l - 1)*maxval); ptrd+=whd; lig+=lwh; } ptrd-=offx; @@ -33000,7 +38127,7 @@ cimg_forC(*this,c) { const tl l = *lig; const tc cval = *(col++); - const T val = (T)(l<1?l*cval:(2-l)*cval+(l-1)*maxval); + const T val = (T)(l<1?l*cval:(2 - l)*cval + (l - 1)*maxval); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; lig+=lwh; } @@ -33100,12 +38227,12 @@ tyleft-=xleft*(tyright - tyleft)/dx; } if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; + if (xright>=width() - 1) xright = width() - 1; T* ptrd = data(xleft,y,0,0); if (opacity>=1) for (int x = xleft; x<=xright; ++x) { const tc *col = &texture._atXY(txleft,tyleft); cimg_forC(*this,c) { - *ptrd = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); + *ptrd = (T)(cleft<256?cleft**col/256:((512 - cleft)**col + (cleft - 256)*maxval)/256); ptrd+=whd; col+=twh; } ptrd-=offx; @@ -33115,7 +38242,7 @@ } else for (int x = xleft; x<=xright; ++x) { const tc *col = &texture._atXY(txleft,tyleft); cimg_forC(*this,c) { - const T val = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); + const T val = (T)(cleft<256?cleft**col/256:((512 - cleft)**col + (cleft - 256)*maxval)/256); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; col+=twh; } @@ -33214,13 +38341,13 @@ tyleft-=xleft*(tyright - tyleft)/dx; } if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; + if (xright>=width() - 1) xright = width() - 1; T* ptrd = data(xleft,y,0,0); if (opacity>=1) for (int x = xleft; x<=xright; ++x) { const float invz = 1/zleft; const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); cimg_forC(*this,c) { - *ptrd = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); + *ptrd = (T)(cleft<256?cleft**col/256:((512 - cleft)**col + (cleft - 256)*maxval)/256); ptrd+=whd; col+=twh; } ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; @@ -33229,7 +38356,7 @@ const float invz = 1/zleft; const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); cimg_forC(*this,c) { - const T val = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); + const T val = (T)(cleft<256?cleft**col/256:((512 - cleft)**col + (cleft - 256)*maxval)/256); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; col+=twh; } @@ -33331,7 +38458,7 @@ tyleft-=xleft*(tyright - tyleft)/dx; } if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; + if (xright>=width() - 1) xright = width() - 1; T* ptrd = data(xleft,y); tz *ptrz = zbuffer.data(xleft,y); if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrd, ++ptrz) { @@ -33340,7 +38467,7 @@ const tzfloat invz = 1/zleft; const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); cimg_forC(*this,c) { - *ptrd = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); + *ptrd = (T)(cleft<256?cleft**col/256:((512 - cleft)**col + (cleft - 256)*maxval)/256); ptrd+=whd; col+=twh; } ptrd-=offx; @@ -33353,7 +38480,7 @@ const tzfloat invz = 1/zleft; const tc *col = &texture._atXY((int)(txleft*invz),(int)(tyleft*invz)); cimg_forC(*this,c) { - const T val = (T)(cleft<256?cleft**col/256:((512-cleft)**col+(cleft-256)*maxval)/256); + const T val = (T)(cleft<256?cleft**col/256:((512 - cleft)**col + (cleft - 256)*maxval)/256); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; col+=twh; } @@ -33467,14 +38594,14 @@ tyleft-=xleft*(tyright - tyleft)/dx; } if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; + if (xright>=width() - 1) xright = width() - 1; T* ptrd = data(xleft,y,0,0); if (opacity>=1) for (int x = xleft; x<=xright; ++x) { const tc *col = &texture._atXY(txleft,tyleft); const tl *lig = &light._atXY(lxleft,lyleft); cimg_forC(*this,c) { const tl l = *lig; - *ptrd = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); + *ptrd = (T)(l<1?l**col:(2 - l)**col + (l - 1)*maxval); ptrd+=whd; col+=twh; lig+=lwh; } ptrd-=offx; @@ -33487,7 +38614,7 @@ const tl *lig = &light._atXY(lxleft,lyleft); cimg_forC(*this,c) { const tl l = *lig; - const T val = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); + const T val = (T)(l<1?l**col:(2 - l)**col + (l - 1)*maxval); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; col+=twh; lig+=lwh; } @@ -33603,7 +38730,7 @@ tyleft-=xleft*(tyright - tyleft)/dx; } if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; + if (xright>=width() - 1) xright = width() - 1; T* ptrd = data(xleft,y,0,0); if (opacity>=1) for (int x = xleft; x<=xright; ++x) { const float invz = 1/zleft; @@ -33611,7 +38738,7 @@ const tl *lig = &light._atXY(lxleft,lyleft); cimg_forC(*this,c) { const tl l = *lig; - *ptrd = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); + *ptrd = (T)(l<1?l**col:(2 - l)**col + (l - 1)*maxval); ptrd+=whd; col+=twh; lig+=lwh; } ptrd-=offx; zleft+=pentez; txleft+=pentetx; tyleft+=pentety; @@ -33623,7 +38750,7 @@ const tl *lig = &light._atXY(lxleft,lyleft); cimg_forC(*this,c) { const tl l = *lig; - const T val = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); + const T val = (T)(l<1?l**col:(2 - l)**col + (l - 1)*maxval); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; col+=twh; lig+=lwh; } @@ -33743,7 +38870,7 @@ tyleft-=xleft*(tyright - tyleft)/dx; } if (xleft<0) xleft = 0; - if (xright>=width()-1) xright = width()-1; + if (xright>=width() - 1) xright = width() - 1; T* ptrd = data(xleft,y); tz *ptrz = zbuffer.data(xleft,y); if (opacity>=1) for (int x = xleft; x<=xright; ++x, ++ptrz, ++ptrd) { @@ -33754,7 +38881,7 @@ const tl *lig = &light._atXY(lxleft,lyleft); cimg_forC(*this,c) { const tl l = *lig; - *ptrd = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); + *ptrd = (T)(l<1?l**col:(2 - l)**col + (l - 1)*maxval); ptrd+=whd; col+=twh; lig+=lwh; } ptrd-=offx; @@ -33770,7 +38897,7 @@ const tl *lig = &light._atXY(lxleft,lyleft); cimg_forC(*this,c) { const tl l = *lig; - const T val = (T)(l<1?l**col:(2-l)**col+(l-1)*maxval); + const T val = (T)(l<1?l**col:(2 - l)**col + (l - 1)*maxval); *ptrd = (T)(nopacity*val + *ptrd*copacity); ptrd+=whd; col+=twh; lig+=lwh; } @@ -33892,7 +39019,7 @@ CImg& draw_rectangle(const int x0, const int y0, const int x1, const int y1, const tc *const color, const float opacity=1) { - return draw_rectangle(x0,y0,0,x1,y1,_depth-1,color,opacity); + return draw_rectangle(x0,y0,0,x1,y1,_depth - 1,color,opacity); } //! Draw a outlined 2d rectangle \overloading. @@ -33908,12 +39035,12 @@ const int nx0 = bx?x0:x1, nx1 = bx?x1:x0, ny0 = by?y0:y1, ny1 = by?y1:y0; - if (ny1==ny0+1) return draw_line(nx0,ny0,nx1,ny0,color,opacity,pattern,true). + if (ny1==ny0 + 1) return draw_line(nx0,ny0,nx1,ny0,color,opacity,pattern,true). draw_line(nx1,ny1,nx0,ny1,color,opacity,pattern,false); return draw_line(nx0,ny0,nx1,ny0,color,opacity,pattern,true). - draw_line(nx1,ny0+1,nx1,ny1-1,color,opacity,pattern,false). + draw_line(nx1,ny0 + 1,nx1,ny1 - 1,color,opacity,pattern,false). draw_line(nx1,ny1,nx0,ny1,color,opacity,pattern,false). - draw_line(nx0,ny1-1,nx0,ny0+1,color,opacity,pattern,false); + draw_line(nx0,ny1 - 1,nx0,ny0 + 1,color,opacity,pattern,false); } //! Draw a filled 2d polygon. @@ -33950,13 +39077,13 @@ (int)npoints(2,0),(int)npoints(2,1),color,opacity); // Shift the coordinates so that the first and last vertices are not located on the same scanline. - if (npoints(0,1)==npoints(nb_points-1,1)) { + if (npoints(0,1)==npoints(nb_points - 1,1)) { const intT y0 = npoints(0,1); unsigned int off = 1; while ((int)npoints(off,1)==y0 && off=width() || ymax<0 || ymin>=height()) return *this; if (ymin==ymax) return cimg_draw_scanline(xmin,xmax,ymin,color,opacity,1); const unsigned int - nxmin = xmin<0?0:(unsigned int)xmin, nxmax = xmax>=width()?_width-1:(unsigned int)xmax, - nymin = ymin<0?0:(unsigned int)ymin, nymax = ymax>=height()?_height-1:(unsigned int)ymax, + nxmin = xmin<0?0:(unsigned int)xmin, nxmax = xmax>=width()?_width - 1:(unsigned int)xmax, + nymin = ymin<0?0:(unsigned int)ymin, nymax = ymax>=height()?_height - 1:(unsigned int)ymax, dx = 1 + nxmax - nxmin, dy = 1 + nymax - nymin; npoints_x-=nxmin; npoints_y-=nymin; @@ -33983,38 +39110,38 @@ // Draw polygon segments. int - xmax = 0, xmin = (int)npoints.get_shared_points(0,nb_points-1,0).min_max(xmax), - ymax = 0, ymin = (int)npoints.get_shared_points(0,nb_points-1,1).min_max(ymax); + xmax = 0, xmin = (int)npoints.get_shared_points(0,nb_points - 1,0).min_max(xmax), + ymax = 0, ymin = (int)npoints.get_shared_points(0,nb_points - 1,1).min_max(ymax); if (xmax<0 || xmin>=width() || ymax<0 || ymin>=height()) return *this; if (ymin==ymax) return cimg_draw_scanline(xmin,xmax,ymin,color,1,1); const unsigned int nymin = ymin<0?0:(unsigned int)ymin, - nymax = ymax>=height()?_height-1:(unsigned int)ymax, + nymax = ymax>=height()?_height - 1:(unsigned int)ymax, dy = 1 + nymax - nymin; - CImg X(1+2*nb_points,dy,1,1,0), tmp; + CImg X(1 + 2*nb_points,dy,1,1,0), tmp; cx = (int)npoints(0,0), cy = (int)npoints(0,1); unsigned int cp = 0; for (unsigned int p = 0; pay && cy>ny))?1:0; for (int x = cx, y = y0, _sx = 1, _sy = 1, - _dx = nx>cx?nx-cx:((_sx=-1),cx-nx), - _dy = y1>y0?y1-y0:((_sy=-1),y0-y1), + _dx = nx>cx?nx - cx:((_sx=-1),cx - nx), + _dy = y1>y0?y1 - y0:((_sy=-1),y0 - y1), _counter = ((_dx-=_dy?_dy*(_dx/_dy):0),_dy), _err = _dx>>1, - _rx = _dy?(nx-cx)/_dy:0; + _rx = _dy?(nx - cx)/_dy:0; _counter>=countermin; --_counter, y+=_sy, x+=_rx + ((_err-=_dx)<0?_err+=_dy,_sx:0)) if (y>=0 && y<(int)dy) X(++X(0,y),y) = x; cp = np; cx = nx; cy = ny; } else { - const int pp = (int)(cp?cp-1:nb_points-1), py = (int)npoints(pp,1); + const int pp = (int)(cp?cp - 1:nb_points - 1), py = (int)npoints(pp,1); if (y0>=0 && y0<(int)dy) { - cimg_draw_scanline(cxpy && ay>cy) || (cy0?nr1:1e-6),2), l2 = (float)std::pow(rmax/(nr2>0?nr2:1e-6),2), a = l1*u*u + l2*v*v, - b = u*v*(l1-l2), + b = u*v*(l1 - l2), c = l1*v*v + l2*u*u; const int yb = (int)std::sqrt(a*rmax*rmax/(a*c - b*b)), tymin = y0 - yb - 1, tymax = y0 + yb + 1, ymin = tymin<0?0:tymin, - ymax = tymax>=height()?height()-1:tymax; + ymax = tymax>=height()?height() - 1:tymax; int oxmin = 0, oxmax = 0; bool first_line = true; for (int y = ymin; y<=ymax; ++y) { @@ -34203,15 +39330,15 @@ if (!pattern) cimg_draw_scanline(xmin,xmax,y,color,opacity,1); else { if (first_line) { - if (y0-yb>=0) cimg_draw_scanline(xmin,xmax,y,color,opacity,1); + if (y0 - yb>=0) cimg_draw_scanline(xmin,xmax,y,color,opacity,1); else draw_point(xmin,y,color,opacity).draw_point(xmax,y,color,opacity); first_line = false; } else { - if (xmin=width() || y0+radius<0 || y0-radius>=height()) return *this; - if (y0>=0 && y0=width() || y0 + radius<0 || y0 - radius>=height()) return *this; + if (y0>=0 && y0=0) { - const int x1 = x0-x, x2 = x0+x, y1 = y0-y, y2 = y0+y; + const int x1 = x0 - x, x2 = x0 + x, y1 = y0 - y, y2 = y0 + y; if (y1>=0 && y1=0 && y2=0 && y1=0 && y2=width() || y0+radius<0 || y0-radius>=height()) return *this; + if (radius<0 || x0 - radius>=width() || y0 + radius<0 || y0 - radius>=height()) return *this; if (!radius) return draw_point(x0,y0,color,opacity); - draw_point(x0-radius,y0,color,opacity).draw_point(x0+radius,y0,color,opacity). - draw_point(x0,y0-radius,color,opacity).draw_point(x0,y0+radius,color,opacity); + draw_point(x0 - radius,y0,color,opacity).draw_point(x0 + radius,y0,color,opacity). + draw_point(x0,y0 - radius,color,opacity).draw_point(x0,y0 + radius,color,opacity); if (radius==1) return *this; - for (int f = 1-radius, ddFx = 0, ddFy = -(radius<<1), x = 0, y = radius; x=0) { f+=(ddFy+=2); --y; } ++x; ++(f+=(ddFx+=2)); - if (x!=y+1) { - const int x1 = x0-y, x2 = x0+y, y1 = y0-x, y2 = y0+x, x3 = x0-x, x4 = x0+x, y3 = y0-y, y4 = y0+y; + if (x!=y + 1) { + const int x1 = x0 - y, x2 = x0 + y, y1 = y0 - x, y2 = y0 + x, + x3 = x0 - x, x4 = x0 + x, y3 = y0 - y, y4 = y0 + y; draw_point(x1,y1,color,opacity).draw_point(x1,y2,color,opacity). draw_point(x2,y1,color,opacity).draw_point(x2,y2,color,opacity); if (x!=y) @@ -34443,7 +39571,7 @@ const float mask_max_value=1) { if (is_empty() || !sprite || !mask) return *this; if (is_overlapped(sprite)) return draw_image(x0,y0,z0,c0,+sprite,mask,opacity,mask_max_value); - if (is_overlapped(mask)) return draw_image(x0,y0,z0,c0,sprite,+mask,opacity,mask_max_value); + if (is_overlapped(mask)) return draw_image(x0,y0,z0,c0,sprite,+mask,opacity,mask_max_value); if (mask._width!=sprite._width || mask._height!=sprite._height || mask._depth!=sprite._depth) throw CImgArgumentException(_cimg_instance "draw_image(): Sprite (%u,%u,%u,%u,%p) and mask (%u,%u,%u,%u,%p) have " @@ -34459,7 +39587,7 @@ lZ = sprite.depth() - (z0 + sprite.depth()>depth()?z0 + sprite.depth() - depth():0) + (bz?z0:0), lC = sprite.spectrum() - (c0 + sprite.spectrum()>spectrum()?c0 + sprite.spectrum() - spectrum():0) + (bc?c0:0); const int - coff = -(bx?x0:0)-(by?y0*mask.width():0)-(bz?z0*mask.width()*mask.height():0)- + coff = -(bx?x0:0) - (by?y0*mask.width():0) - (bz?z0*mask.width()*mask.height():0) - (bc?c0*mask.width()*mask.height()*mask.depth():0), ssize = mask.width()*mask.height()*mask.depth()*mask.spectrum(); const ti *ptrs = sprite._data + coff; @@ -34540,7 +39668,7 @@ const tc1 *const foreground_color, const tc2 *const background_color, const float opacity, const CImgList& font, ...) { if (!font) return *this; - CImg tmp(2048); *tmp = 0; + CImg tmp(2048); std::va_list ap; va_start(ap,font); cimg_vsnprintf(tmp,tmp._width,text,ap); va_end(ap); return _draw_text(x0,y0,tmp,foreground_color,background_color,opacity,font,false); @@ -34556,7 +39684,7 @@ const tc *const foreground_color, const int, const float opacity, const CImgList& font, ...) { if (!font) return *this; - CImg tmp(2048); *tmp = 0; + CImg tmp(2048); std::va_list ap; va_start(ap,font); cimg_vsnprintf(tmp,tmp._width,text,ap); va_end(ap); return _draw_text(x0,y0,tmp,foreground_color,(tc*)0,opacity,font,false); @@ -34572,7 +39700,7 @@ const int, const tc *const background_color, const float opacity, const CImgList& font, ...) { if (!font) return *this; - CImg tmp(2048); *tmp = 0; + CImg tmp(2048); std::va_list ap; va_start(ap,font); cimg_vsnprintf(tmp,tmp._width,text,ap); va_end(ap); return _draw_text(x0,y0,tmp,(tc*)0,background_color,opacity,font,false); @@ -34596,7 +39724,7 @@ const tc1 *const foreground_color, const tc2 *const background_color, const float opacity=1, const unsigned int font_height=13, ...) { if (!font_height) return *this; - CImg tmp(2048); *tmp = 0; + CImg tmp(2048); std::va_list ap; va_start(ap,font_height); cimg_vsnprintf(tmp,tmp._width,text,ap); va_end(ap); const CImgList& font = CImgList::font(font_height,true); @@ -34612,7 +39740,7 @@ const float opacity=1, const unsigned int font_height=13, ...) { if (!font_height) return *this; cimg::unused(background_color); - CImg tmp(2048); *tmp = 0; + CImg tmp(2048); std::va_list ap; va_start(ap,font_height); cimg_vsnprintf(tmp,tmp._width,text,ap); va_end(ap); return draw_text(x0,y0,"%s",foreground_color,(const tc*)0,opacity,font_height,tmp._data); @@ -34625,7 +39753,7 @@ const int, const tc *const background_color, const float opacity=1, const unsigned int font_height=13, ...) { if (!font_height) return *this; - CImg tmp(2048); *tmp = 0; + CImg tmp(2048); std::va_list ap; va_start(ap,font_height); cimg_vsnprintf(tmp,tmp._width,text,ap); va_end(ap); return draw_text(x0,y0,"%s",(tc*)0,background_color,opacity,font_height,tmp._data); @@ -34661,7 +39789,7 @@ if (x>w) w=x; y+=font[0]._height; } - assign(x0+w,y0+y,1,is_native_font?1:font[0]._spectrum,0); + assign(x0 + w,y0 + y,1,is_native_font?1:font[0]._spectrum,0); } int x = x0, y = y0; @@ -34678,11 +39806,12 @@ if (foreground_color) for (unsigned int c = 0; c txt(32); CImg label; if (siz<=0) { // Degenerated case. - draw_line(0,y,_width-1,y,color,opacity,pattern); + draw_line(0,y,_width - 1,y,color,opacity,pattern); if (!siz) { - cimg_snprintf(txt,sizeof(txt),"%g",(double)*values_x); + cimg_snprintf(txt,txt._width,"%g",(double)*values_x); label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); const int _xt = (width() - label.width())/2, - xt = _xt<3?3:_xt+label.width()>=width()-2?width()-3-label.width():_xt; - draw_point(width()/2,y-1,color,opacity).draw_point(width()/2,y+1,color,opacity); - if (allow_zero || txt[0]!='0' || txt[1]!=0) + xt = _xt<3?3:_xt + label.width()>=width() - 2?width() - 3 - label.width():_xt; + draw_point(width()/2,y - 1,color,opacity).draw_point(width()/2,y + 1,color,opacity); + if (allow_zero || *txt!='0' || txt[1]!=0) draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); } } else { // Regular case. - if (values_x[0]=width()-2?width()-3-label.width():_xt; - draw_point(xi,y-1,color,opacity).draw_point(xi,y+1,color,opacity); - if (allow_zero || txt[0]!='0' || txt[1]!=0) + xt = _xt<3?3:_xt + label.width()>=width() - 2?width() - 3 - label.width():_xt; + draw_point(xi,y - 1,color,opacity).draw_point(xi,y + 1,color,opacity); + if (allow_zero || *txt!='0' || txt[1]!=0) draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); } } @@ -34835,37 +39964,37 @@ const unsigned int pattern=~0U, const unsigned int font_height=13, const bool allow_zero=true) { if (is_empty()) return *this; - int siz = (int)values_y.size()-1; - char txt[32] = { 0 }; + int siz = (int)values_y.size() - 1; + CImg txt(32); CImg label; if (siz<=0) { // Degenerated case. - draw_line(x,0,x,_height-1,color,opacity,pattern); + draw_line(x,0,x,_height - 1,color,opacity,pattern); if (!siz) { - cimg_snprintf(txt,sizeof(txt),"%g",(double)*values_y); + cimg_snprintf(txt,txt._width,"%g",(double)*values_y); label.assign().draw_text(0,0,txt,color,(tc*)0,opacity,font_height); const int _yt = (height() - label.height())/2, - yt = _yt<0?0:_yt+label.height()>=height()?height()-1-label.height():_yt, + yt = _yt<0?0:_yt + label.height()>=height()?height() - 1-label.height():_yt, _xt = x - 2 - label.width(), - xt = _xt>=0?_xt:x+3; - draw_point(x-1,height()/2,color,opacity).draw_point(x+1,height()/2,color,opacity); - if (allow_zero || txt[0]!='0' || txt[1]!=0) + xt = _xt>=0?_xt:x + 3; + draw_point(x - 1,height()/2,color,opacity).draw_point(x + 1,height()/2,color,opacity); + if (allow_zero || *txt!='0' || txt[1]!=0) draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); } } else { // Regular case. - if (values_y[0]=height()?height()-1-label.height():_yt, + yt = _yt<0?0:_yt + label.height()>=height()?height() - 1-label.height():_yt, _xt = x - 2 - label.width(), - xt = _xt>=0?_xt:x+3; - draw_point(x-1,yi,color,opacity).draw_point(x+1,yi,color,opacity); - if (allow_zero || txt[0]!='0' || txt[1]!=0) + xt = _xt>=0?_xt:x + 3; + draw_point(x - 1,yi,color,opacity).draw_point(x + 1,yi,color,opacity); + if (allow_zero || *txt!='0' || txt[1]!=0) draw_text(xt,yt,txt,color,(tc*)0,opacity,font_height); } } @@ -34890,22 +40019,22 @@ const unsigned int font_height=13, const bool allow_zero=true) { if (is_empty()) return *this; const CImg nvalues_x(values_x._data,values_x.size(),1,1,1,true); - const int sizx = (int)values_x.size()-1, wm1 = width()-1; + const int sizx = (int)values_x.size() - 1, wm1 = width() - 1; if (sizx>=0) { float ox = (float)*nvalues_x; for (unsigned int x = sizx?1U:0U; x<_width; ++x) { const float nx = (float)nvalues_x._linear_atX((float)x*sizx/wm1); - if (nx*ox<=0) { draw_axis(nx==0?x:x-1,values_y,color,opacity,pattern_y,font_height,allow_zero); break; } + if (nx*ox<=0) { draw_axis(nx==0?x:x - 1,values_y,color,opacity,pattern_y,font_height,allow_zero); break; } ox = nx; } } const CImg nvalues_y(values_y._data,values_y.size(),1,1,1,true); - const int sizy = (int)values_y.size()-1, hm1 = height()-1; + const int sizy = (int)values_y.size() - 1, hm1 = height() - 1; if (sizy>0) { float oy = (float)nvalues_y[0]; for (unsigned int y = sizy?1U:0U; y<_height; ++y) { const float ny = (float)nvalues_y._linear_atX((float)y*sizy/hm1); - if (ny*oy<=0) { draw_axis(values_x,ny==0?y:y-1,color,opacity,pattern_x,font_height,allow_zero); break; } + if (ny*oy<=0) { draw_axis(values_x,ny==0?y:y - 1,color,opacity,pattern_x,font_height,allow_zero); break; } oy = ny; } } @@ -34924,8 +40053,8 @@ const bool allow_zero = (x0*x1>0) || (y0*y1>0); const float dx = cimg::abs(x1-x0), dy = cimg::abs(y1-y0), - px = dx<=0?1:precisionx==0?(float)std::pow(10.0,(int)std::log10(dx)-2.0):precisionx, - py = dy<=0?1:precisiony==0?(float)std::pow(10.0,(int)std::log10(dy)-2.0):precisiony; + px = dx<=0?1:precisionx==0?(float)std::pow(10.0,(int)std::log10(dx) - 2.0):precisionx, + py = dy<=0?1:precisiony==0?(float)std::pow(10.0,(int)std::log10(dy) - 2.0):precisiony; if (x0!=x1 && y0!=y1) draw_axes(CImg::sequence(subdivisionx>0?subdivisionx:1-width()/subdivisionx,x0,x1).round(px), CImg::sequence(subdivisiony>0?subdivisiony:1-height()/subdivisiony,y0,y1).round(py), @@ -34955,11 +40084,11 @@ if (is_empty()) return *this; if (values_x) cimg_foroff(values_x,x) { const int xi = (int)values_x[x]; - if (xi>=0 && xi=0 && xi=0 && yi=0 && yi0?delta_x:_width*-delta_x/100; const unsigned int nx = (unsigned int)(_width/dx); - seqx = CImg::sequence(1+nx,0,(unsigned int)(dx*nx)); - if (offsetx) cimg_foroff(seqx,x) seqx(x) = (unsigned int)cimg::mod(seqx(x)+offsetx,(float)_width); + seqx = CImg::sequence(1 + nx,0,(unsigned int)(dx*nx)); + if (offsetx) cimg_foroff(seqx,x) seqx(x) = (unsigned int)cimg::mod(seqx(x) + offsetx,(float)_width); if (invertx) cimg_foroff(seqx,x) seqx(x) = _width - 1 - seqx(x); } if (delta_y!=0) { const float dy = delta_y>0?delta_y:_height*-delta_y/100; const unsigned int ny = (unsigned int)(_height/dy); - seqy = CImg::sequence(1+ny,0,(unsigned int)(dy*ny)); - if (offsety) cimg_foroff(seqy,y) seqy(y) = (unsigned int)cimg::mod(seqy(y)+offsety,(float)_height); + seqy = CImg::sequence(1 + ny,0,(unsigned int)(dy*ny)); + if (offsety) cimg_foroff(seqy,y) seqy(y) = (unsigned int)cimg::mod(seqy(y) + offsety,(float)_height); if (inverty) cimg_foroff(seqy,y) seqy(y) = _height - 1 - seqy(y); } return draw_grid(seqx,seqy,color,opacity,pattern_x,pattern_y); @@ -35048,50 +40177,52 @@ double m = ymin, M = ymax; if (ymin==ymax) m = (double)data.max_min(M); if (m==M) { --m; ++M; } - const float ca = (float)(M-m)/(_height-1); + const float ca = (float)(M-m)/(_height - 1); bool init_hatch = true; // Draw graph edges switch (plot_type%4) { case 1 : { // Segments - int oX = 0, oY = (int)((data[0]-m)/ca); - const float fx = (float)_width1/siz1; + int oX = 0, oY = (int)((data[0] - m)/ca); if (siz==1) { - const int Y = (int)((*data-m)/ca); - draw_line(0,Y,width()-1,Y,color,opacity,pattern); - } else for (unsigned long off = 1; off ndata(data._data,siz,1,1,1,true); - int oY = (int)((data[0]-m)/ca); + int oY = (int)((data[0] - m)/ca); cimg_forX(*this,x) { const int Y = (int)((ndata._cubic_atX((float)x*siz1/width1)-m)/ca); - if (x>0) draw_line(x,oY,x+1,Y,color,opacity,pattern,init_hatch); + if (x>0) draw_line(x,oY,x + 1,Y,color,opacity,pattern,init_hatch); init_hatch = false; oY = Y; } } break; case 3 : { // Bars const int Y0 = (int)(-m/ca); - const float fx = (float)_width/(siz-1); + const float fx = (float)_width/siz1; int oX = 0; cimg_foroff(data,off) { const int - X = (int)((off+1)*fx), - Y = (int)((data[off]-m)/ca); + X = (int)((off + 1)*fx) - 1, + Y = (int)((data[off] - m)/ca); draw_rectangle(oX,Y0,X,Y,color,opacity). draw_line(oX,Y,oX,Y0,color2.data(),opacity). draw_line(oX,Y0,X,Y0,Y<=Y0?color2.data():color1.data(),opacity). draw_line(X,Y,X,Y0,color1.data(),opacity). draw_line(oX,Y,X,Y,Y<=Y0?color1.data():color2.data(),opacity); - oX = X+1; + oX = X + 1; } } break; default : break; // No edges @@ -35114,7 +40245,7 @@ const int X = (int)(off*fx + wb2), Y = (int)((data[off]-m)/ca); - draw_line(X-3,Y,X+3,Y,color,opacity).draw_line(X,Y-3,X,Y+3,color,opacity); + draw_line(X - 3,Y,X + 3,Y,color,opacity).draw_line(X,Y - 3,X,Y + 3,color,opacity); } } break; case 3 : { // Diagonal Cross @@ -35122,7 +40253,7 @@ const int X = (int)(off*fx + wb2), Y = (int)((data[off]-m)/ca); - draw_line(X-3,Y-3,X+3,Y+3,color,opacity).draw_line(X-3,Y+3,X+3,Y-3,color,opacity); + draw_line(X - 3,Y - 3,X + 3,Y + 3,color,opacity).draw_line(X - 3,Y + 3,X + 3,Y - 3,color,opacity); } } break; case 4 : { // Filled Circle @@ -35146,7 +40277,7 @@ const int X = (int)(off*fx + wb2), Y = (int)((data[off]-m)/ca); - draw_rectangle(X-3,Y-3,X+3,Y+3,color,opacity,~0U); + draw_rectangle(X - 3,Y - 3,X + 3,Y + 3,color,opacity,~0U); } } break; case 7 : { // Diamond @@ -35154,10 +40285,10 @@ const int X = (int)(off*fx + wb2), Y = (int)((data[off]-m)/ca); - draw_line(X,Y-4,X+4,Y,color,opacity). - draw_line(X+4,Y,X,Y+4,color,opacity). - draw_line(X,Y+4,X-4,Y,color,opacity). - draw_line(X-4,Y,X,Y-4,color,opacity); + draw_line(X,Y - 4,X + 4,Y,color,opacity). + draw_line(X + 4,Y,X,Y + 4,color,opacity). + draw_line(X,Y + 4,X - 4,Y,color,opacity). + draw_line(X - 4,Y,X,Y - 4,color,opacity); } } break; default : break; // No points @@ -35217,7 +40348,7 @@ if (x>=0 && x=0 && y=0 && z1); const CImg reference_color = get_vector_at(x,y,z); CImg remaining(3,512,1,1,0); @@ -35226,7 +40357,7 @@ remaining(2,0) = (unsigned int)z; unsigned int posr0 = 0, posr1 = 1; region(x,y,z) = (t)1; - const t noregion = ((t)1==(t)2)?(t)0:(t)(-1); + const t noregion = ((t)1==(t)2)?(t)0:(t)-1; if (is_3d) do { // 3d version of the filling algorithm const unsigned int *pcurr = remaining.data(0,posr0++), xc = *(pcurr++), yc = *(pcurr++), zc = *(pcurr++); if (posr0>=512) { remaining.shift(0,-(int)posr0); posr1-=posr0; posr0 = 0; } @@ -35234,10 +40365,10 @@ unsigned int nxc = xc; do { // X-backward _cimg_draw_fill_set(nxc,yc,zc); - _cimg_draw_fill_test_neighbor(nxc,yc-1,zc,yc!=0); - _cimg_draw_fill_test_neighbor(nxc,yc+1,zc,ycposr0); @@ -35303,13 +40434,13 @@ unsigned int nxc = xc; do { // X-backward _cimg_draw_fill_set(nxc,yc,0); - _cimg_draw_fill_test_neighbor(nxc,yc-1,0,yc!=0); - _cimg_draw_fill_test_neighbor(nxc,yc+1,0,ycM?M:val); } @@ -35412,21 +40544,24 @@ for (int x0=0; x0M?M:val); } for (int y0 = 0; y0M?M:val); } for (int y = -delta2; yM?M:val); } } @@ -35473,12 +40608,12 @@ const float nopacity = cimg::abs(opacity), copacity = 1 - cimg::max(opacity,0), ln2 = (float)std::log(2.0); const int - _x0 = x0<0?0:x0>=width()?width()-1:x0, - _y0 = y0<0?0:y0>=height()?height()-1:y0, - _x1 = x1<0?1:x1>=width()?width()-1:x1, - _y1 = y1<0?1:y1>=height()?height()-1:y1; + _x0 = x0<0?0:x0>=width()?width() - 1:x0, + _y0 = y0<0?0:y0>=height()?height() - 1:y0, + _x1 = x1<0?1:x1>=width()?width() - 1:x1, + _y1 = y1<0?1:y1>=height()?height() - 1:y1; #ifdef cimg_use_openmp -#pragma omp parallel for collapse(2) if ((1+_x1-_x0)*(1+_y1-_y0)>=2048) +#pragma omp parallel for collapse(2) if ((1 + _x1 - _x0)*(1 + _y1 - _y0)>=2048) #endif for (int q = _y0; q<=_y1; ++q) for (int p = _x0; p<=_x1; ++p) { @@ -35502,7 +40637,7 @@ } } else if (is_normalized_iteration) { const float - normz = (float)cimg::abs(zr*zr+zi*zi), + normz = (float)cimg::abs(zr*zr + zi*zi), niteration = (float)(iteration + 1 - std::log(std::log(normz))/ln2); if (palette) { if (opacity>=1) cimg_forC(*this,c) (*this)(p,q,0,c) = (T)palette._linear_atX(niteration,c); @@ -35533,7 +40668,7 @@ const bool is_normalized_iteration=false, const bool is_julia_set=false, const double param_r=0, const double param_i=0) { - return draw_mandelbrot(0,0,_width-1,_height-1,colormap,opacity, + return draw_mandelbrot(0,0,_width - 1,_height - 1,colormap,opacity, z0r,z0i,z1r,z1i,iteration_max,is_normalized_iteration,is_julia_set,param_r,param_i); } @@ -35809,7 +40944,7 @@ const bool is_double_sided=false, const float focale=700, const float lightx=0, const float lighty=0, const float lightz=-5e8, const float specular_lightness=0.2f, const float specular_shininess=0.1f) { - return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::empty(), + return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::const_empty(), render_type,is_double_sided,focale,lightx,lighty,lightz, specular_lightness,specular_shininess,CImg::empty()); } @@ -35824,7 +40959,7 @@ const float lightx, const float lighty, const float lightz, const float specular_lightness, const float specular_shininess, CImg& zbuffer) { - return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::empty(), + return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::const_empty(), render_type,is_double_sided,focale,lightx,lighty,lightz, specular_lightness,specular_shininess,zbuffer); } @@ -35839,7 +40974,7 @@ const bool is_double_sided=false, const float focale=700, const float lightx=0, const float lighty=0, const float lightz=-5e8, const float specular_lightness=0.2f, const float specular_shininess=0.1f) { - return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::empty(), + return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::const_empty(), render_type,is_double_sided,focale,lightx,lighty,lightz, specular_lightness,specular_shininess,CImg::empty()); } @@ -35854,7 +40989,7 @@ const float lightx, const float lighty, const float lightz, const float specular_lightness, const float specular_shininess, CImg& zbuffer) { - return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::empty(), + return draw_object3d(x0,y0,z0,vertices,primitives,colors,CImg::const_empty(), render_type,is_double_sided,focale,lightx,lighty,lightz, specular_lightness,specular_shininess,zbuffer); } @@ -35874,6 +41009,16 @@ return n_primitive>=opacities._width?1.0f:(float)opacities[n_primitive]; } + template + static float ___draw_object3d(const CImgList& opacities, const unsigned int n_primitive) { + return n_primitive + static float ___draw_object3d(const CImg& opacities, const unsigned int n_primitive) { + return n_primitive CImg& _draw_object3d(void *const pboard, CImg& zbuffer, const float X, const float Y, const float Z, @@ -35887,18 +41032,18 @@ const float specular_lightness, const float specular_shininess, const float sprite_scale) { typedef typename cimg::superset2::type tpfloat; + typedef typename to::value_type _to; if (is_empty() || !vertices || !primitives) return *this; CImg error_message(1024); - *error_message = 0; if (!vertices.is_object3d(primitives,colors,opacities,false,error_message)) throw CImgArgumentException(_cimg_instance "draw_object3d(): Invalid specified 3d object (%u,%u) (%s).", cimg_instance,vertices._width,primitives._width,error_message.data()); - if (render_type==5) cimg::mutex(10); // Static variable used in this case, breaks thread-safety. - #ifndef cimg_use_board if (pboard) return *this; #endif + if (render_type==5) cimg::mutex(10); // Static variable used in this case, breaks thread-safety. + const float nspec = 1 - (specular_lightness<0.0f?0.0f:(specular_lightness>1.0f?1.0f:specular_lightness)), nspec2 = 1 + (specular_shininess<0.0f?0.0f:specular_shininess), @@ -35918,7 +41063,7 @@ if (is_same_texture) for (unsigned int r = 0, j = 0; j<8; ++j) for (unsigned int i = 0; i<8; ++i) - if (ref_values[r++]!=img(i*img._width/9,j*img._height/9,0,(i+j)%img._spectrum)) { + if (ref_values[r++]!=img(i*img._width/9,j*img._height/9,0,(i + j)%img._spectrum)) { is_same_texture = false; break; } if (!is_same_texture || default_light_texture._spectrum<_spectrum) { @@ -35926,7 +41071,7 @@ lptr = colors.back().data(); for (unsigned int r = 0, j = 0; j<8; ++j) for (unsigned int i = 0; i<8; ++i) - ref_values[r++] = img(i*img._width/9,j*img._height/9,0,(i+j)%img._spectrum); + ref_values[r++] = img(i*img._width/9,j*img._height/9,0,(i + j)%img._spectrum); } light_texture.assign(default_light_texture,true); } else { @@ -35962,7 +41107,7 @@ const float absfocale = focale?cimg::abs(focale):0; if (absfocale) { #ifdef cimg_use_openmp -#pragma omp parallel for if (projections.size()>4096) +#pragma omp parallel for cimg_openmp_if (projections.size()>4096) #endif cimg_forX(projections,l) { // Perspective projection const tpfloat @@ -35976,7 +41121,7 @@ } else { #ifdef cimg_use_openmp -#pragma omp parallel for if (projections.size()>4096) +#pragma omp parallel for cimg_openmp_if (projections.size()>4096) #endif cimg_forX(projections,l) { // Parallel projection const tpfloat @@ -35989,19 +41134,25 @@ } } const float _focale = absfocale?absfocale:(1e5f-parallzmin); + float zmax = 0; + if (zbuffer) zmax = vertices.get_shared_row(2).max(); // Compute visible primitives. CImg visibles(primitives._width,1,1,1,~0U); CImg zrange(primitives._width); const tpfloat zmin = absfocale?(tpfloat)(1.5f - absfocale):cimg::type::min(); + bool is_forward = zbuffer?true:false; #ifdef cimg_use_openmp -#pragma omp parallel for if (primitives.size()>4096) +#pragma omp parallel for cimg_openmp_if (primitives.size()>4096) #endif cimglist_for(primitives,l) { const CImg& primitive = primitives[l]; switch (primitive.size()) { case 1 : { // Point + CImg<_to> _opacity; + __draw_object3d(opacities,l,_opacity); + if (l<=colors.width() && (colors[l].size()!=_spectrum || _opacity)) is_forward = false; const unsigned int i0 = (unsigned int)primitive(0); const tpfloat z0 = Z + vertices(i0,2); if (z0>zmin) { @@ -36032,6 +41183,7 @@ visibles(l) = (unsigned int)l; zrange(l) = _zc; } + is_forward = false; } break; case 2 : // Segment case 6 : { @@ -36106,6 +41258,7 @@ } } break; default : + if (render_type==5) cimg::mutex(10,0); throw CImgArgumentException(_cimg_instance "draw_object3d(): Invalid primitive[%u] with size %u " "(should have size 1,2,3,4,5,6,9 or 12).", @@ -36114,18 +41267,27 @@ } } + // Force transparent primitives to be drawn last when zbuffer is activated + // (and if object contains no spheres or sprites). + if (is_forward) + cimglist_for(primitives,l) + if (___draw_object3d(opacities,l)!=1) zrange(l) = 2*zmax - zrange(l); + // Sort only visibles primitives. unsigned int *p_visibles = visibles._data; - float *p_zrange = zrange._data; - const float *ptrz = p_zrange; + tpfloat *p_zrange = zrange._data; + const tpfloat *ptrz = p_zrange; cimg_for(visibles,ptr,unsigned int) { if (*ptr!=~0U) { *(p_visibles++) = *ptr; *(p_zrange++) = *ptrz; } ++ptrz; } const unsigned int nb_visibles = (unsigned int)(p_zrange - zrange._data); - if (!nb_visibles) return *this; + if (!nb_visibles) { + if (render_type==5) cimg::mutex(10,0); + return *this; + } CImg permutations; - CImg(zrange._data,nb_visibles,1,1,1,true).sort(permutations,false); + CImg(zrange._data,nb_visibles,1,1,1,true).sort(permutations,is_forward); // Compute light properties CImg lightprops; @@ -36133,7 +41295,7 @@ case 3 : { // Flat Shading lightprops.assign(nb_visibles); #ifdef cimg_use_openmp -#pragma omp parallel for if (nb_visibles>4096) +#pragma omp parallel for cimg_openmp_if (nb_visibles>4096) #endif cimg_forX(lightprops,l) { const CImg& primitive = primitives(visibles(permutations(l))); @@ -36165,9 +41327,9 @@ case 4 : // Gouraud Shading case 5 : { // Phong-Shading - CImg vertices_normals(vertices._width,3,1,1,0); + CImg vertices_normals(vertices._width,6,1,1,0); #ifdef cimg_use_openmp -#pragma omp parallel for if (nb_visibles>4096) +#pragma omp parallel for cimg_openmp_if (nb_visibles>4096) #endif for (unsigned int l = 0; l& primitive = primitives[visibles(l)]; @@ -36194,23 +41356,33 @@ nx = nnx/norm, ny = nny/norm, nz = nnz/norm; - vertices_normals(i0,0)+=nx; vertices_normals(i0,1)+=ny; vertices_normals(i0,2)+=nz; - vertices_normals(i1,0)+=nx; vertices_normals(i1,1)+=ny; vertices_normals(i1,2)+=nz; - vertices_normals(i2,0)+=nx; vertices_normals(i2,1)+=ny; vertices_normals(i2,2)+=nz; - if (rectangle_flag) { vertices_normals(i3,0)+=nx; vertices_normals(i3,1)+=ny; vertices_normals(i3,2)+=nz; } + unsigned int ix = 0, iy = 1, iz = 2; + if (is_double_sided && nz>0) { ix = 3; iy = 4; iz = 5; } + vertices_normals(i0,ix)+=nx; vertices_normals(i0,iy)+=ny; vertices_normals(i0,iz)+=nz; + vertices_normals(i1,ix)+=nx; vertices_normals(i1,iy)+=ny; vertices_normals(i1,iz)+=nz; + vertices_normals(i2,ix)+=nx; vertices_normals(i2,iy)+=ny; vertices_normals(i2,iz)+=nz; + if (rectangle_flag) { + vertices_normals(i3,ix)+=nx; vertices_normals(i3,iy)+=ny; vertices_normals(i3,iz)+=nz; + } } } - if (is_double_sided) cimg_forX(vertices_normals,p) if (vertices_normals(p,2)>0) { - vertices_normals(p,0) = -vertices_normals(p,0); - vertices_normals(p,1) = -vertices_normals(p,1); - vertices_normals(p,2) = -vertices_normals(p,2); - } + if (is_double_sided) cimg_forX(vertices_normals,p) { + const float + nx0 = vertices_normals(p,0), ny0 = vertices_normals(p,1), nz0 = vertices_normals(p,2), + nx1 = vertices_normals(p,3), ny1 = vertices_normals(p,4), nz1 = vertices_normals(p,5), + n0 = nx0*nx0 + ny0*ny0 + nz0*nz0, n1 = nx1*nx1 + ny1*ny1 + nz1*nz1; + if (n1>n0) { + vertices_normals(p,0) = -nx1; + vertices_normals(p,1) = -ny1; + vertices_normals(p,2) = -nz1; + } + } if (render_type==4) { lightprops.assign(vertices._width); #ifdef cimg_use_openmp -#pragma omp parallel for if (nb_visibles>4096) +#pragma omp parallel for cimg_openmp_if (nb_visibles>4096) #endif cimg_forX(lightprops,l) { const tpfloat @@ -36231,7 +41403,7 @@ lh2 = light_texture._height/2 - 1; lightprops.assign(vertices._width,2); #ifdef cimg_use_openmp -#pragma omp parallel for if (nb_visibles>4096) +#pragma omp parallel for cimg_openmp_if (nb_visibles>4096) #endif cimg_forX(lightprops,l) { const tpfloat @@ -36250,7 +41422,6 @@ // Draw visible primitives const CImg default_color(1,_spectrum,1,1,(tc)200); - typedef typename to::value_type _to; CImg<_to> _opacity; for (unsigned int l = 0; l=0 || nx0-(int)sw/2=0 || ny0-(int)sh/2=0 || nx0 - (int)sw/2=0 || ny0 - (int)sh/2 _sprite = (sw!=color._width || sh!=color._height)? color.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg(), @@ -36302,7 +41473,7 @@ if (pboard) { board.setPenColorRGBi(128,128,128); board.setFillColor(LibBoard::Color::None); - board.drawRectangle((float)nx0,height()-(float)ny0,sw,sh); + board.drawRectangle((float)nx0,height() - (float)ny0,sw,sh); } #endif } @@ -36316,7 +41487,7 @@ sw = _sw?_sw:1, sh = _sh?_sh:1; const int nx0 = x0 - (int)sw/2, ny0 = y0 - (int)sh/2; if (sw<=3*_width/2 && sh<=3*_height/2 && - (nx0+(int)sw/2>=0 || nx0-(int)sw/2=0 || ny0-(int)sh/2=0 || nx0 - (int)sw/2=0 || ny0 - (int)sh/2 _sprite = (sw!=color._width || sh!=color._height)? color.get_resize(sw,sh,1,-100,render_type<=3?1:3):CImg(), @@ -36330,7 +41501,7 @@ if (pboard) { board.setPenColorRGBi(128,128,128); board.setFillColor(LibBoard::Color::None); - board.drawRectangle((float)nx0,height()-(float)ny0,sw,sh); + board.drawRectangle((float)nx0,height() - (float)ny0,sw,sh); } #endif } @@ -36352,7 +41523,7 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.drawLine((float)x0,height()-(float)y0,x1,height()-(float)y1); + board.drawLine((float)x0,height() - (float)y0,x1,height() - (float)y1); } #endif } else { @@ -36360,8 +41531,8 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.drawCircle((float)x0,height()-(float)y0,0); - board.drawCircle((float)x1,height()-(float)y1,0); + board.drawCircle((float)x0,height() - (float)y0,0); + board.drawCircle((float)x1,height() - (float)y1,0); } #endif } @@ -36387,7 +41558,7 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.fillCircle(xc,height()-yc,0); + board.fillCircle(xc,height() - yc,0); } #endif break; @@ -36397,7 +41568,7 @@ if (pboard) { board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); board.setFillColor(LibBoard::Color::None); - board.drawCircle(xc,height()-yc,radius); + board.drawCircle(xc,height() - yc,radius); } #endif break; @@ -36407,10 +41578,10 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - if (!is_wireframe) board.fillCircle(xc,height()-yc,radius); + if (!is_wireframe) board.fillCircle(xc,height() - yc,radius); else { board.setFillColor(LibBoard::Color::None); - board.drawCircle(xc,height()-yc,radius); + board.drawCircle(xc,height() - yc,radius); } } #endif @@ -36418,10 +41589,12 @@ } } break; case 6 : { // Textured line - if (!__color) + if (!__color) { + if (render_type==5) cimg::mutex(10,0); throw CImgArgumentException(_cimg_instance "draw_object3d(): Undefined texture for line primitive [%u].", cimg_instance,n_primitive); + } const unsigned int n0 = (unsigned int)primitive[0], n1 = (unsigned int)primitive[1]; @@ -36439,19 +41612,19 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.drawLine((float)x0,height()-(float)y0,(float)x1,height()-(float)y1); + board.drawLine((float)x0,height() - (float)y0,(float)x1,height() - (float)y1); } #endif } else { - draw_point(x0,y0,color.get_vector_at(tx0<=0?0:tx0>=color.width()?color.width()-1:tx0, - ty0<=0?0:ty0>=color.height()?color.height()-1:ty0)._data,opacity). - draw_point(x1,y1,color.get_vector_at(tx1<=0?0:tx1>=color.width()?color.width()-1:tx1, - ty1<=0?0:ty1>=color.height()?color.height()-1:ty1)._data,opacity); + draw_point(x0,y0,color.get_vector_at(tx0<=0?0:tx0>=color.width()?color.width() - 1:tx0, + ty0<=0?0:ty0>=color.height()?color.height() - 1:ty0)._data,opacity). + draw_point(x1,y1,color.get_vector_at(tx1<=0?0:tx1>=color.width()?color.width() - 1:tx1, + ty1<=0?0:ty1>=color.height()?color.height() - 1:ty1)._data,opacity); #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.drawCircle((float)x0,height()-(float)y0,0); - board.drawCircle((float)x1,height()-(float)y1,0); + board.drawCircle((float)x0,height() - (float)y0,0); + board.drawCircle((float)x1,height() - (float)y1,0); } #endif } @@ -36475,9 +41648,9 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.drawCircle((float)x0,height()-(float)y0,0); - board.drawCircle((float)x1,height()-(float)y1,0); - board.drawCircle((float)x2,height()-(float)y2,0); + board.drawCircle((float)x0,height() - (float)y0,0); + board.drawCircle((float)x1,height() - (float)y1,0); + board.drawCircle((float)x2,height() - (float)y2,0); } #endif break; @@ -36491,9 +41664,9 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.drawLine((float)x0,height()-(float)y0,(float)x1,height()-(float)y1); - board.drawLine((float)x0,height()-(float)y0,(float)x2,height()-(float)y2); - board.drawLine((float)x1,height()-(float)y1,(float)x2,height()-(float)y2); + board.drawLine((float)x0,height() - (float)y0,(float)x1,height() - (float)y1); + board.drawLine((float)x0,height() - (float)y0,(float)x2,height() - (float)y2); + board.drawLine((float)x1,height() - (float)y1,(float)x2,height() - (float)y2); } #endif break; @@ -36503,9 +41676,9 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0, - (float)x1,height()-(float)y1, - (float)x2,height()-(float)y2); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); } #endif break; @@ -36519,9 +41692,9 @@ (unsigned char)(color[1]*lp), (unsigned char)(color[2]*lp), (unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0, - (float)x1,height()-(float)y1, - (float)x2,height()-(float)y2); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); } #endif break; @@ -36536,9 +41709,9 @@ (unsigned char)(color[1]), (unsigned char)(color[2]), (unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,lightprops(n0), - (float)x1,height()-(float)y1,lightprops(n1), - (float)x2,height()-(float)y2,lightprops(n2)); + board.fillGouraudTriangle((float)x0,height() - (float)y0,lightprops(n0), + (float)x1,height() - (float)y1,lightprops(n1), + (float)x2,height() - (float)y2,lightprops(n2)); } #endif break; @@ -36553,19 +41726,19 @@ #ifdef cimg_use_board if (pboard) { const float - l0 = light_texture((int)(light_texture.width()/2*(1+lightprops(n0,0))), - (int)(light_texture.height()/2*(1+lightprops(n0,1)))), - l1 = light_texture((int)(light_texture.width()/2*(1+lightprops(n1,0))), - (int)(light_texture.height()/2*(1+lightprops(n1,1)))), - l2 = light_texture((int)(light_texture.width()/2*(1+lightprops(n2,0))), - (int)(light_texture.height()/2*(1+lightprops(n2,1)))); + l0 = light_texture((int)(light_texture.width()/2*(1 + lightprops(n0,0))), + (int)(light_texture.height()/2*(1 + lightprops(n0,1)))), + l1 = light_texture((int)(light_texture.width()/2*(1 + lightprops(n1,0))), + (int)(light_texture.height()/2*(1 + lightprops(n1,1)))), + l2 = light_texture((int)(light_texture.width()/2*(1 + lightprops(n2,0))), + (int)(light_texture.height()/2*(1 + lightprops(n2,1)))); board.setPenColorRGBi((unsigned char)(color[0]), (unsigned char)(color[1]), (unsigned char)(color[2]), (unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,l0, - (float)x1,height()-(float)y1,l1, - (float)x2,height()-(float)y2,l2); + board.fillGouraudTriangle((float)x0,height() - (float)y0,l0, + (float)x1,height() - (float)y1,l1, + (float)x2,height() - (float)y2,l2); } #endif } break; @@ -36595,10 +41768,10 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.drawCircle((float)x0,height()-(float)y0,0); - board.drawCircle((float)x1,height()-(float)y1,0); - board.drawCircle((float)x2,height()-(float)y2,0); - board.drawCircle((float)x3,height()-(float)y3,0); + board.drawCircle((float)x0,height() - (float)y0,0); + board.drawCircle((float)x1,height() - (float)y1,0); + board.drawCircle((float)x2,height() - (float)y2,0); + board.drawCircle((float)x3,height() - (float)y3,0); } #endif break; @@ -36612,10 +41785,10 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.drawLine((float)x0,height()-(float)y0,(float)x1,height()-(float)y1); - board.drawLine((float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - board.drawLine((float)x2,height()-(float)y2,(float)x3,height()-(float)y3); - board.drawLine((float)x3,height()-(float)y3,(float)x0,height()-(float)y0); + board.drawLine((float)x0,height() - (float)y0,(float)x1,height() - (float)y1); + board.drawLine((float)x1,height() - (float)y1,(float)x2,height() - (float)y2); + board.drawLine((float)x2,height() - (float)y2,(float)x3,height() - (float)y3); + board.drawLine((float)x3,height() - (float)y3,(float)x0,height() - (float)y0); } #endif break; @@ -36628,12 +41801,12 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(color[0],color[1],color[2],(unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0, - (float)x1,height()-(float)y1, - (float)x2,height()-(float)y2); - board.fillTriangle((float)x0,height()-(float)y0, - (float)x2,height()-(float)y2, - (float)x3,height()-(float)y3); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x2,height() - (float)y2, + (float)x3,height() - (float)y3); } #endif break; @@ -36650,12 +41823,12 @@ board.setPenColorRGBi((unsigned char)(color[0]*lp), (unsigned char)(color[1]*lp), (unsigned char)(color[2]*lp),(unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0, - (float)x1,height()-(float)y1, - (float)x2,height()-(float)y2); - board.fillTriangle((float)x0,height()-(float)y0, - (float)x2,height()-(float)y2, - (float)x3,height()-(float)y3); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x2,height() - (float)y2, + (float)x3,height() - (float)y3); } #endif break; @@ -36675,12 +41848,12 @@ (unsigned char)(color[1]), (unsigned char)(color[2]), (unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,lightprop0, - (float)x1,height()-(float)y1,lightprop1, - (float)x2,height()-(float)y2,lightprop2); - board.fillGouraudTriangle((float)x0,height()-(float)y0,lightprop0, - (float)x2,height()-(float)y2,lightprop2, - (float)x3,height()-(float)y3,lightprop3); + board.fillGouraudTriangle((float)x0,height() - (float)y0,lightprop0, + (float)x1,height() - (float)y1,lightprop1, + (float)x2,height() - (float)y2,lightprop2); + board.fillGouraudTriangle((float)x0,height() - (float)y0,lightprop0, + (float)x2,height() - (float)y2,lightprop2, + (float)x3,height() - (float)y3,lightprop3); } #endif } break; @@ -36699,30 +41872,32 @@ #ifdef cimg_use_board if (pboard) { const float - l0 = light_texture((int)(light_texture.width()/2*(1+lx0)), (int)(light_texture.height()/2*(1+ly0))), - l1 = light_texture((int)(light_texture.width()/2*(1+lx1)), (int)(light_texture.height()/2*(1+ly1))), - l2 = light_texture((int)(light_texture.width()/2*(1+lx2)), (int)(light_texture.height()/2*(1+ly2))), - l3 = light_texture((int)(light_texture.width()/2*(1+lx3)), (int)(light_texture.height()/2*(1+ly3))); + l0 = light_texture((int)(light_texture.width()/2*(1 + lx0)), (int)(light_texture.height()/2*(1 + ly0))), + l1 = light_texture((int)(light_texture.width()/2*(1 + lx1)), (int)(light_texture.height()/2*(1 + ly1))), + l2 = light_texture((int)(light_texture.width()/2*(1 + lx2)), (int)(light_texture.height()/2*(1 + ly2))), + l3 = light_texture((int)(light_texture.width()/2*(1 + lx3)), (int)(light_texture.height()/2*(1 + ly3))); board.setPenColorRGBi((unsigned char)(color[0]), (unsigned char)(color[1]), (unsigned char)(color[2]), (unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,l0, - (float)x1,height()-(float)y1,l1, - (float)x2,height()-(float)y2,l2); - board.fillGouraudTriangle((float)x0,height()-(float)y0,l0, - (float)x2,height()-(float)y2,l2, - (float)x3,height()-(float)y3,l3); + board.fillGouraudTriangle((float)x0,height() - (float)y0,l0, + (float)x1,height() - (float)y1,l1, + (float)x2,height() - (float)y2,l2); + board.fillGouraudTriangle((float)x0,height() - (float)y0,l0, + (float)x2,height() - (float)y2,l2, + (float)x3,height() - (float)y3,l3); } #endif } break; } } break; case 9 : { // Textured triangle - if (!__color) + if (!__color) { + if (render_type==5) cimg::mutex(10,0); throw CImgArgumentException(_cimg_instance "draw_object3d(): Undefined texture for triangle primitive [%u].", cimg_instance,n_primitive); + } const unsigned int n0 = (unsigned int)primitive[0], n1 = (unsigned int)primitive[1], @@ -36740,18 +41915,18 @@ z2 = vertices(n2,2) + Z + _focale; switch (render_type) { case 0 : - draw_point(x0,y0,color.get_vector_at(tx0<=0?0:tx0>=color.width()?color.width()-1:tx0, - ty0<=0?0:ty0>=color.height()?color.height()-1:ty0)._data,opacity). - draw_point(x1,y1,color.get_vector_at(tx1<=0?0:tx1>=color.width()?color.width()-1:tx1, - ty1<=0?0:ty1>=color.height()?color.height()-1:ty1)._data,opacity). - draw_point(x2,y2,color.get_vector_at(tx2<=0?0:tx2>=color.width()?color.width()-1:tx2, - ty2<=0?0:ty2>=color.height()?color.height()-1:ty2)._data,opacity); + draw_point(x0,y0,color.get_vector_at(tx0<=0?0:tx0>=color.width()?color.width() - 1:tx0, + ty0<=0?0:ty0>=color.height()?color.height() - 1:ty0)._data,opacity). + draw_point(x1,y1,color.get_vector_at(tx1<=0?0:tx1>=color.width()?color.width() - 1:tx1, + ty1<=0?0:ty1>=color.height()?color.height() - 1:ty1)._data,opacity). + draw_point(x2,y2,color.get_vector_at(tx2<=0?0:tx2>=color.width()?color.width() - 1:tx2, + ty2<=0?0:ty2>=color.height()?color.height() - 1:ty2)._data,opacity); #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.drawCircle((float)x0,height()-(float)y0,0); - board.drawCircle((float)x1,height()-(float)y1,0); - board.drawCircle((float)x2,height()-(float)y2,0); + board.drawCircle((float)x0,height() - (float)y0,0); + board.drawCircle((float)x1,height() - (float)y1,0); + board.drawCircle((float)x2,height() - (float)y2,0); } #endif break; @@ -36767,9 +41942,9 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.drawLine((float)x0,height()-(float)y0,(float)x1,height()-(float)y1); - board.drawLine((float)x0,height()-(float)y0,(float)x2,height()-(float)y2); - board.drawLine((float)x1,height()-(float)y1,(float)x2,height()-(float)y2); + board.drawLine((float)x0,height() - (float)y0,(float)x1,height() - (float)y1); + board.drawLine((float)x0,height() - (float)y0,(float)x2,height() - (float)y2); + board.drawLine((float)x1,height() - (float)y1,(float)x2,height() - (float)y2); } #endif break; @@ -36779,9 +41954,9 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0, - (float)x1,height()-(float)y1, - (float)x2,height()-(float)y2); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); } #endif break; @@ -36796,9 +41971,9 @@ (unsigned char)(128*lp), (unsigned char)(128*lp), (unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0, - (float)x1,height()-(float)y1, - (float)x2,height()-(float)y2); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); } #endif break; @@ -36812,9 +41987,9 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,lightprops(n0), - (float)x1,height()-(float)y1,lightprops(n1), - (float)x2,height()-(float)y2,lightprops(n2)); + board.fillGouraudTriangle((float)x0,height() - (float)y0,lightprops(n0), + (float)x1,height() - (float)y1,lightprops(n1), + (float)x2,height() - (float)y2,lightprops(n2)); } #endif break; @@ -36834,26 +42009,28 @@ #ifdef cimg_use_board if (pboard) { const float - l0 = light_texture((int)(light_texture.width()/2*(1+lightprops(n0,0))), - (int)(light_texture.height()/2*(1+lightprops(n0,1)))), - l1 = light_texture((int)(light_texture.width()/2*(1+lightprops(n1,0))), - (int)(light_texture.height()/2*(1+lightprops(n1,1)))), - l2 = light_texture((int)(light_texture.width()/2*(1+lightprops(n2,0))), - (int)(light_texture.height()/2*(1+lightprops(n2,1)))); + l0 = light_texture((int)(light_texture.width()/2*(1 + lightprops(n0,0))), + (int)(light_texture.height()/2*(1 + lightprops(n0,1)))), + l1 = light_texture((int)(light_texture.width()/2*(1 + lightprops(n1,0))), + (int)(light_texture.height()/2*(1 + lightprops(n1,1)))), + l2 = light_texture((int)(light_texture.width()/2*(1 + lightprops(n2,0))), + (int)(light_texture.height()/2*(1 + lightprops(n2,1)))); board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,l0, - (float)x1,height()-(float)y1,l1, - (float)x2,height()-(float)y2,l2); + board.fillGouraudTriangle((float)x0,height() - (float)y0,l0, + (float)x1,height() - (float)y1,l1, + (float)x2,height() - (float)y2,l2); } #endif break; } } break; case 12 : { // Textured quadrangle - if (!__color) + if (!__color) { + if (render_type==5) cimg::mutex(10,0); throw CImgArgumentException(_cimg_instance "draw_object3d(): Undefined texture for quadrangle primitive [%u].", cimg_instance,n_primitive); + } const unsigned int n0 = (unsigned int)primitive[0], n1 = (unsigned int)primitive[1], @@ -36876,21 +42053,21 @@ switch (render_type) { case 0 : - draw_point(x0,y0,color.get_vector_at(tx0<=0?0:tx0>=color.width()?color.width()-1:tx0, - ty0<=0?0:ty0>=color.height()?color.height()-1:ty0)._data,opacity). - draw_point(x1,y1,color.get_vector_at(tx1<=0?0:tx1>=color.width()?color.width()-1:tx1, - ty1<=0?0:ty1>=color.height()?color.height()-1:ty1)._data,opacity). - draw_point(x2,y2,color.get_vector_at(tx2<=0?0:tx2>=color.width()?color.width()-1:tx2, - ty2<=0?0:ty2>=color.height()?color.height()-1:ty2)._data,opacity). - draw_point(x3,y3,color.get_vector_at(tx3<=0?0:tx3>=color.width()?color.width()-1:tx3, - ty3<=0?0:ty3>=color.height()?color.height()-1:ty3)._data,opacity); + draw_point(x0,y0,color.get_vector_at(tx0<=0?0:tx0>=color.width()?color.width() - 1:tx0, + ty0<=0?0:ty0>=color.height()?color.height() - 1:ty0)._data,opacity). + draw_point(x1,y1,color.get_vector_at(tx1<=0?0:tx1>=color.width()?color.width() - 1:tx1, + ty1<=0?0:ty1>=color.height()?color.height() - 1:ty1)._data,opacity). + draw_point(x2,y2,color.get_vector_at(tx2<=0?0:tx2>=color.width()?color.width() - 1:tx2, + ty2<=0?0:ty2>=color.height()?color.height() - 1:ty2)._data,opacity). + draw_point(x3,y3,color.get_vector_at(tx3<=0?0:tx3>=color.width()?color.width() - 1:tx3, + ty3<=0?0:ty3>=color.height()?color.height() - 1:ty3)._data,opacity); #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.drawCircle((float)x0,height()-(float)y0,0); - board.drawCircle((float)x1,height()-(float)y1,0); - board.drawCircle((float)x2,height()-(float)y2,0); - board.drawCircle((float)x3,height()-(float)y3,0); + board.drawCircle((float)x0,height() - (float)y0,0); + board.drawCircle((float)x1,height() - (float)y1,0); + board.drawCircle((float)x2,height() - (float)y2,0); + board.drawCircle((float)x3,height() - (float)y3,0); } #endif break; @@ -36908,10 +42085,10 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.drawLine((float)x0,height()-(float)y0,(float)x1,height()-(float)y1); - board.drawLine((float)x1,height()-(float)y1,(float)x2,height()-(float)y2); - board.drawLine((float)x2,height()-(float)y2,(float)x3,height()-(float)y3); - board.drawLine((float)x3,height()-(float)y3,(float)x0,height()-(float)y0); + board.drawLine((float)x0,height() - (float)y0,(float)x1,height() - (float)y1); + board.drawLine((float)x1,height() - (float)y1,(float)x2,height() - (float)y2); + board.drawLine((float)x2,height() - (float)y2,(float)x3,height() - (float)y3); + board.drawLine((float)x3,height() - (float)y3,(float)x0,height() - (float)y0); } #endif break; @@ -36925,12 +42102,12 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0, - (float)x1,height()-(float)y1, - (float)x2,height()-(float)y2); - board.fillTriangle((float)x0,height()-(float)y0, - (float)x2,height()-(float)y2, - (float)x3,height()-(float)y3); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x2,height() - (float)y2, + (float)x3,height() - (float)y3); } #endif break; @@ -36948,12 +42125,12 @@ (unsigned char)(128*lp), (unsigned char)(128*lp), (unsigned char)(opacity*255)); - board.fillTriangle((float)x0,height()-(float)y0, - (float)x1,height()-(float)y1, - (float)x2,height()-(float)y2); - board.fillTriangle((float)x0,height()-(float)y0, - (float)x2,height()-(float)y2, - (float)x3,height()-(float)y3); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x1,height() - (float)y1, + (float)x2,height() - (float)y2); + board.fillTriangle((float)x0,height() - (float)y0, + (float)x2,height() - (float)y2, + (float)x3,height() - (float)y3); } #endif break; @@ -36974,12 +42151,12 @@ #ifdef cimg_use_board if (pboard) { board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,lightprop0, - (float)x1,height()-(float)y1,lightprop1, - (float)x2,height()-(float)y2,lightprop2); - board.fillGouraudTriangle((float)x0,height()-(float)y0,lightprop0, - (float)x2,height()-(float)y2,lightprop2, - (float)x3,height()-(float)y3,lightprop3); + board.fillGouraudTriangle((float)x0,height() - (float)y0,lightprop0, + (float)x1,height() - (float)y1,lightprop1, + (float)x2,height() - (float)y2,lightprop2); + board.fillGouraudTriangle((float)x0,height() -(float)y0,lightprop0, + (float)x2,height() - (float)y2,lightprop2, + (float)x3,height() - (float)y3,lightprop3); } #endif } break; @@ -37002,17 +42179,17 @@ #ifdef cimg_use_board if (pboard) { const float - l0 = light_texture((int)(light_texture.width()/2*(1+lx0)), (int)(light_texture.height()/2*(1+ly0))), - l1 = light_texture((int)(light_texture.width()/2*(1+lx1)), (int)(light_texture.height()/2*(1+ly1))), - l2 = light_texture((int)(light_texture.width()/2*(1+lx2)), (int)(light_texture.height()/2*(1+ly2))), - l3 = light_texture((int)(light_texture.width()/2*(1+lx3)), (int)(light_texture.height()/2*(1+ly3))); + l0 = light_texture((int)(light_texture.width()/2*(1 + lx0)), (int)(light_texture.height()/2*(1 + ly0))), + l1 = light_texture((int)(light_texture.width()/2*(1 + lx1)), (int)(light_texture.height()/2*(1 + ly1))), + l2 = light_texture((int)(light_texture.width()/2*(1 + lx2)), (int)(light_texture.height()/2*(1 + ly2))), + l3 = light_texture((int)(light_texture.width()/2*(1 + lx3)), (int)(light_texture.height()/2*(1 + ly3))); board.setPenColorRGBi(128,128,128,(unsigned char)(opacity*255)); - board.fillGouraudTriangle((float)x0,height()-(float)y0,l0, - (float)x1,height()-(float)y1,l1, - (float)x2,height()-(float)y2,l2); - board.fillGouraudTriangle((float)x0,height()-(float)y0,l0, - (float)x2,height()-(float)y2,l2, - (float)x3,height()-(float)y3,l3); + board.fillGouraudTriangle((float)x0,height() - (float)y0,l0, + (float)x1,height() - (float)y1,l1, + (float)x2,height() - (float)y2,l2); + board.fillGouraudTriangle((float)x0,height() -(float)y0,l0, + (float)x2,height() - (float)y2,l2, + (float)x3,height() - (float)y3,l3); } #endif } break; @@ -37039,32 +42216,37 @@ \param XYZ Pointer to 3 values X,Y,Z which tells about the projection point coordinates, for volumetric images. **/ CImg& select(CImgDisplay &disp, - const unsigned int feature_type=2, unsigned int *const XYZ=0) { - return get_select(disp,feature_type,XYZ).move_to(*this); + const unsigned int feature_type=2, unsigned int *const XYZ=0, + const bool exit_on_anykey=false) { + return get_select(disp,feature_type,XYZ,exit_on_anykey).move_to(*this); } //! Simple interface to select a shape from an image \overloading. CImg& select(const char *const title, - const unsigned int feature_type=2, unsigned int *const XYZ=0) { - return get_select(title,feature_type,XYZ).move_to(*this); + const unsigned int feature_type=2, unsigned int *const XYZ=0, + const bool exit_on_anykey=false) { + return get_select(title,feature_type,XYZ,exit_on_anykey).move_to(*this); } //! Simple interface to select a shape from an image \newinstance. CImg get_select(CImgDisplay &disp, - const unsigned int feature_type=2, unsigned int *const XYZ=0) const { - return _get_select(disp,0,feature_type,XYZ,0,0,0,true,false); + const unsigned int feature_type=2, unsigned int *const XYZ=0, + const bool exit_on_anykey=false) const { + return _get_select(disp,0,feature_type,XYZ,0,0,0,exit_on_anykey,true,false); } //! Simple interface to select a shape from an image \newinstance. CImg get_select(const char *const title, - const unsigned int feature_type=2, unsigned int *const XYZ=0) const { + const unsigned int feature_type=2, unsigned int *const XYZ=0, + const bool exit_on_anykey=false) const { CImgDisplay disp; - return _get_select(disp,title,feature_type,XYZ,0,0,0,true,false); + return _get_select(disp,title,feature_type,XYZ,0,0,0,exit_on_anykey,true,false); } CImg _get_select(CImgDisplay &disp, const char *const title, const unsigned int feature_type, unsigned int *const XYZ, const int origX, const int origY, const int origZ, + const bool exit_on_anykey, const bool reset_view3d, const bool force_display_z_coord) const { if (is_empty()) return CImg(1,feature_type==0?3:6,1,1,-1); @@ -37073,17 +42255,23 @@ if (!title) disp.set_title("CImg<%s> (%ux%ux%ux%u)",pixel_type(),_width,_height,_depth,_spectrum); } else if (title) disp.set_title("%s",title); + CImg thumb; + if (width()>disp.screen_width() || height()>disp.screen_height()) { + const double ratio = cimg::min((double)disp.screen_width()/width(),(double)disp.screen_height()/height()); + get_resize(cimg::max(1,(int)(ratio*width())),cimg::max(1,(int)(ratio*height())),-100,-100).move_to(thumb); + } + const unsigned int old_normalization = disp.normalization(); bool old_is_resized = disp.is_resized(); disp._normalization = 0; disp.show().set_key(0).set_wheel().show_mouse(); - unsigned char foreground_color[] = { 255,255,255 }, background_color[] = { 0,0,0 }; + static const unsigned char foreground_color[] = { 255,255,255 }, background_color[] = { 0,0,0 }; int area = 0, starting_area = 0, clicked_area = 0, phase = 0, - X0 = (int)((XYZ?XYZ[0]:(_width-1)/2)%_width), - Y0 = (int)((XYZ?XYZ[1]:(_height-1)/2)%_height), - Z0 = (int)((XYZ?XYZ[2]:(_depth-1)/2)%_depth), + X0 = (int)((XYZ?XYZ[0]:(_width - 1)/2)%_width), + Y0 = (int)((XYZ?XYZ[1]:(_height - 1)/2)%_height), + Z0 = (int)((XYZ?XYZ[2]:(_depth - 1)/2)%_depth), X1 =-1, Y1 = -1, Z1 = -1, X3d = -1, Y3d = -1, oX3d = X3d, oY3d = -1, @@ -37109,8 +42297,8 @@ my = disp.mouse_y(); const float - mX = mx<0?-1.0f:(float)mx*(width()+(depth()>1?depth():0))/disp.width(), - mY = my<0?-1.0f:(float)my*(height()+(depth()>1?depth():0))/disp.height(); + mX = mx<0?-1.0f:(float)mx*(width() + (depth()>1?depth():0))/disp.width(), + mY = my<0?-1.0f:(float)my*(height() + (depth()>1?depth():0))/disp.height(); area = 0; if (mX>=0 && mY>=0 && mX=width() && mY>=height()) area = 4; if (disp.button()) { if (!clicked_area) clicked_area = area; } else clicked_area = 0; + CImg filename(32); + switch (key = disp.key()) { #if cimg_OS!=2 case cimg::keyCTRLRIGHT : @@ -37156,35 +42346,33 @@ } break; case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { static unsigned int snap_number = 0; - char filename[32] = { 0 }; std::FILE *file; do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.bmp",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.bmp",snap_number++); if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); } while (file); if (visu0) { (+visu0).draw_text(0,0," Saving snapshot... ",foreground_color,background_color,0.7f,13).display(disp); visu0.save(filename); - (+visu0).draw_text(0,0," Snapshot '%s' saved. ",foreground_color,background_color,0.7f,13,filename). + (+visu0).draw_text(0,0," Snapshot '%s' saved. ",foreground_color,background_color,0.7f,13,filename._data). display(disp); } disp.set_key(key,false); key = 0; } break; case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { static unsigned int snap_number = 0; - char filename[32] = { 0 }; std::FILE *file; do { #ifdef cimg_use_zlib - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimgz",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimgz",snap_number++); #else - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimg",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimg",snap_number++); #endif if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); } while (file); (+visu0).draw_text(0,0," Saving instance... ",foreground_color,background_color,0.7f,13).display(disp); save(filename); - (+visu0).draw_text(0,0," Instance '%s' saved. ",foreground_color,background_color,0.7f,13,filename). + (+visu0).draw_text(0,0," Instance '%s' saved. ",foreground_color,background_color,0.7f,13,filename._data). display(disp); disp.set_key(key,false); key = 0; } break; @@ -37217,7 +42405,7 @@ X0 = (int)X; Y0 = (int)Y; Z0 = (int)Z; } } - if (disp.button()&4) { // Reset positions. + if (disp.button()&4) { X = (float)X0; Y = (float)Y0; Z = (float)Z0; phase = area = clicked_area = starting_area = 0; visu0.assign(); } @@ -37258,8 +42446,8 @@ case 4 : // When mouse is over the 3d view. if (is_view3d && points3d) { - X3d = mx - width()*disp.width()/(width()+(depth()>1?depth():0)); - Y3d = my - height()*disp.height()/(height()+(depth()>1?depth():0)); + X3d = mx - width()*disp.width()/(width() + (depth()>1?depth():0)); + Y3d = my - height()*disp.height()/(height() + (depth()>1?depth():0)); if (oX3d<0) { oX3d = X3d; oY3d = Y3d; } // Left + right buttons: reset. if ((disp.button()&3)==3) { pose3d.assign(); view3d.assign(); oX3d = oY3d = X3d = Y3d = -1; } @@ -37267,22 +42455,22 @@ const float R = 0.45f*cimg::min(view3d._width,view3d._height), R2 = R*R, - u0 = (float)(oX3d-view3d.width()/2), - v0 = (float)(oY3d-view3d.height()/2), - u1 = (float)(X3d-view3d.width()/2), - v1 = (float)(Y3d-view3d.height()/2), - n0 = (float)std::sqrt(u0*u0+v0*v0), - n1 = (float)std::sqrt(u1*u1+v1*v1), + u0 = (float)(oX3d - view3d.width()/2), + v0 = (float)(oY3d - view3d.height()/2), + u1 = (float)(X3d - view3d.width()/2), + v1 = (float)(Y3d - view3d.height()/2), + n0 = (float)std::sqrt(u0*u0 + v0*v0), + n1 = (float)std::sqrt(u1*u1 + v1*v1), nu0 = n0>R?(u0*R/n0):u0, nv0 = n0>R?(v0*R/n0):v0, - nw0 = (float)std::sqrt(cimg::max(0,R2-nu0*nu0-nv0*nv0)), + nw0 = (float)std::sqrt(cimg::max(0,R2 - nu0*nu0 - nv0*nv0)), nu1 = n1>R?(u1*R/n1):u1, nv1 = n1>R?(v1*R/n1):v1, - nw1 = (float)std::sqrt(cimg::max(0,R2-nu1*nu1-nv1*nv1)), + nw1 = (float)std::sqrt(cimg::max(0,R2 - nu1*nu1 - nv1*nv1)), u = nv0*nw1 - nw0*nv1, v = nw0*nu1 - nu0*nw1, w = nv0*nu1 - nu0*nv1, - n = (float)std::sqrt(u*u+v*v+w*w), + n = (float)std::sqrt(u*u + v*v + w*w), alpha = (float)std::asin(n/R2); pose3d.draw_image(CImg::rotation_matrix(u,v,w,alpha)*pose3d.get_crop(0,0,2,2)); view3d.assign(); @@ -37320,24 +42508,27 @@ if (mx!=omx || my!=omy || !visu0 || (_depth>1 && !view3d)) { if (!visu0) { // Create image of projected planes. - __get_select(disp,old_normalization,phase?X1:X0,phase?Y1:Y0,phase?Z1:Z0).move_to(visu0).resize(disp); + if (thumb) thumb.__get_select(disp,old_normalization,phase?X1:X0,phase?Y1:Y0,phase?Z1:Z0).move_to(visu0); + else __get_select(disp,old_normalization,phase?X1:X0,phase?Y1:Y0,phase?Z1:Z0).move_to(visu0); + visu0.resize(disp); view3d.assign(); points3d.assign(); } if (is_view3d && _depth>1 && !view3d) { // Create 3d view for volumetric images. const unsigned int - _x3d = (unsigned int)cimg::round((float)_width*visu0._width/(_width+_depth),1,1), - _y3d = (unsigned int)cimg::round((float)_height*visu0._height/(_height+_depth),1,1), - x3d = _x3d>=visu0._width?visu0._width-1:_x3d, - y3d = _y3d>=visu0._height?visu0._height-1:_y3d; - CImg(1,2,1,1,64,128).resize(visu0._width-x3d,visu0._height-y3d,1,visu0._spectrum,3).move_to(view3d); + _x3d = (unsigned int)cimg::round((float)_width*visu0._width/(_width + _depth),1,1), + _y3d = (unsigned int)cimg::round((float)_height*visu0._height/(_height + _depth),1,1), + x3d = _x3d>=visu0._width?visu0._width - 1:_x3d, + y3d = _y3d>=visu0._height?visu0._height - 1:_y3d; + CImg(1,2,1,1,64,128).resize(visu0._width - x3d,visu0._height - y3d,1,visu0._spectrum,3). + move_to(view3d); if (!points3d) { get_projections3d(primitives3d,colors3d,phase?X1:X0,phase?Y1:Y0,phase?Z1:Z0,true).move_to(points3d); points3d.append(CImg(8,3,1,1, - 0,_width-1,_width-1,0,0,_width-1,_width-1,0, - 0,0,_height-1,_height-1,0,0,_height-1,_height-1, - 0,0,0,0,_depth-1,_depth-1,_depth-1,_depth-1),'x'); + 0,_width - 1,_width - 1,0,0,_width - 1,_width - 1,0, + 0,0,_height - 1,_height - 1,0,0,_height - 1,_height - 1, + 0,0,0,0,_depth - 1,_depth - 1,_depth - 1,_depth - 1),'x'); CImg::vector(12,13).move_to(primitives3d); CImg::vector(13,14).move_to(primitives3d); CImg::vector(14,15).move_to(primitives3d); CImg::vector(15,12).move_to(primitives3d); CImg::vector(16,17).move_to(primitives3d); CImg::vector(17,18).move_to(primitives3d); @@ -37380,7 +42571,7 @@ sel_colors3d.assign(sel_primitives3d._width,CImg::vector(255,255,255)); sel_opacities3d.assign(sel_primitives3d._width,1,1,1,0.8f); } - points3d.shift_object3d(-0.5f*(_width-1),-0.5f*(_height-1),-0.5f*(_depth-1)).resize_object3d(); + points3d.shift_object3d(-0.5f*(_width - 1),-0.5f*(_height - 1),-0.5f*(_depth - 1)).resize_object3d(); points3d*=0.75f*cimg::min(view3d._width,view3d._height); } @@ -37413,28 +42604,30 @@ h = disp.height(), H = height() + d, _xp = (int)(_X*(float)w/W), xp = _xp + ((int)(_xp*(float)W/w)!=_X?1:0), _yp = (int)(_Y*(float)h/H), yp = _yp + ((int)(_yp*(float)H/h)!=_Y?1:0), - _xn = (int)((_X+1.0f)*w/W-1), xn = _xn + ((int)((_xn+1.0f)*W/w)!=_X+1?1:0), - _yn = (int)((_Y+1.0f)*h/H-1), yn = _yn + ((int)((_yn+1.0f)*H/h)!=_Y+1?1:0), - _zxp = (int)((_Z+width())*(float)w/W), zxp = _zxp + ((int)(_zxp*(float)W/w)!=_Z+width()?1:0), - _zyp = (int)((_Z+height())*(float)h/H), zyp = _zyp + ((int)(_zyp*(float)H/h)!=_Z+height()?1:0), - _zxn = (int)((_Z+width()+1.0f)*w/W-1), zxn = _zxn + ((int)((_zxn+1.0f)*W/w)!=_Z+width()+1?1:0), - _zyn = (int)((_Z+height()+1.0f)*h/H-1), zyn = _zyn + ((int)((_zyn+1.0f)*H/h)!=_Z+height()+1?1:0), - _xM = (int)(width()*(float)w/W-1), xM = _xM + ((int)((_xM+1.0f)*W/w)!=width()?1:0), - _yM = (int)(height()*(float)h/H-1), yM = _yM + ((int)((_yM+1.0f)*H/h)!=height()?1:0), + _xn = (int)((_X + 1.0f)*w/W - 1), xn = _xn + ((int)((_xn + 1.0f)*W/w)!=_X + 1?1:0), + _yn = (int)((_Y + 1.0f)*h/H - 1), yn = _yn + ((int)((_yn + 1.0f)*H/h)!=_Y + 1?1:0), + _zxp = (int)((_Z + width())*(float)w/W), zxp = _zxp + ((int)(_zxp*(float)W/w)!=_Z + width()?1:0), + _zyp = (int)((_Z + height())*(float)h/H), zyp = _zyp + ((int)(_zyp*(float)H/h)!=_Z + height()?1:0), + _zxn = (int)((_Z + width() + 1.0f)*w/W - 1), + zxn = _zxn + ((int)((_zxn + 1.0f)*W/w)!=_Z + width() + 1?1:0), + _zyn = (int)((_Z + height() + 1.0f)*h/H - 1), + zyn = _zyn + ((int)((_zyn + 1.0f)*H/h)!=_Z + height() + 1?1:0), + _xM = (int)(width()*(float)w/W - 1), xM = _xM + ((int)((_xM + 1.0f)*W/w)!=width()?1:0), + _yM = (int)(height()*(float)h/H - 1), yM = _yM + ((int)((_yM + 1.0f)*H/h)!=height()?1:0), xc = (xp + xn)/2, yc = (yp + yn)/2, zxc = (zxp + zxn)/2, zyc = (zyp + zyn)/2, xf = (int)(X*w/W), yf = (int)(Y*h/H), - zxf = (int)((Z+width())*w/W), - zyf = (int)((Z+height())*h/H); + zxf = (int)((Z + width())*w/W), + zyf = (int)((Z + height())*h/H); if (is_axes) { // Draw axes. - visu.draw_line(0,yf,visu.width()-1,yf,foreground_color,0.7f,0xFF00FF00). - draw_line(0,yf,visu.width()-1,yf,background_color,0.7f,0x00FF00FF). - draw_line(xf,0,xf,visu.height()-1,foreground_color,0.7f,0xFF00FF00). - draw_line(xf,0,xf,visu.height()-1,background_color,0.7f,0x00FF00FF); + visu.draw_line(0,yf,visu.width() - 1,yf,foreground_color,0.7f,0xFF00FF00). + draw_line(0,yf,visu.width() - 1,yf,background_color,0.7f,0x00FF00FF). + draw_line(xf,0,xf,visu.height() - 1,foreground_color,0.7f,0xFF00FF00). + draw_line(xf,0,xf,visu.height() - 1,background_color,0.7f,0x00FF00FF); if (_depth>1) visu.draw_line(zxf,0,zxf,yM,foreground_color,0.7f,0xFF00FF00). draw_line(zxf,0,zxf,yM,background_color,0.7f,0x00FF00FF). @@ -37443,14 +42636,14 @@ } // Draw box cursor. - if (xn-xp>=4 && yn-yp>=4) visu.draw_rectangle(xp,yp,xn,yn,foreground_color,0.2f). + if (xn - xp>=4 && yn - yp>=4) visu.draw_rectangle(xp,yp,xn,yn,foreground_color,0.2f). draw_rectangle(xp,yp,xn,yn,foreground_color,1,0xAAAAAAAA). draw_rectangle(xp,yp,xn,yn,background_color,1,0x55555555); if (_depth>1) { - if (yn-yp>=4 && zxn-zxp>=4) visu.draw_rectangle(zxp,yp,zxn,yn,background_color,0.2f). + if (yn - yp>=4 && zxn - zxp>=4) visu.draw_rectangle(zxp,yp,zxn,yn,background_color,0.2f). draw_rectangle(zxp,yp,zxn,yn,foreground_color,1,0xAAAAAAAA). draw_rectangle(zxp,yp,zxn,yn,background_color,1,0x55555555); - if (xn-xp>=4 && zyn-zyp>=4) visu.draw_rectangle(xp,zyp,xn,zyn,background_color,0.2f). + if (xn - xp>=4 && zyn - zyp>=4) visu.draw_rectangle(xp,zyp,xn,zyn,background_color,0.2f). draw_rectangle(xp,zyp,xn,zyn,foreground_color,1,0xAAAAAAAA). draw_rectangle(xp,zyp,xn,zyn,background_color,1,0x55555555); } @@ -37460,12 +42653,14 @@ const int _xp0 = (int)(X0*(float)w/W), xp0 = _xp0 + ((int)(_xp0*(float)W/w)!=X0?1:0), _yp0 = (int)(Y0*(float)h/H), yp0 = _yp0 + ((int)(_yp0*(float)H/h)!=Y0?1:0), - _xn0 = (int)((X0+1.0f)*w/W-1), xn0 = _xn0 + ((int)((_xn0+1.0f)*W/w)!=X0+1?1:0), - _yn0 = (int)((Y0+1.0f)*h/H-1), yn0 = _yn0 + ((int)((_yn0+1.0f)*H/h)!=Y0+1?1:0), - _zxp0 = (int)((Z0+width())*(float)w/W), zxp0 = _zxp0 + ((int)(_zxp0*(float)W/w)!=Z0+width()?1:0), - _zyp0 = (int)((Z0+height())*(float)h/H), zyp0 = _zyp0 + ((int)(_zyp0*(float)H/h)!=Z0+height()?1:0), - _zxn0 = (int)((Z0+width()+1.0f)*w/W-1), zxn0 = _zxn0 + ((int)((_zxn0+1.0f)*W/w)!=Z0+width()+1?1:0), - _zyn0 = (int)((Z0+height()+1.0f)*h/H-1), zyn0 = _zyn0 + ((int)((_zyn0+1.0f)*H/h)!=Z0+height()+1?1:0), + _xn0 = (int)((X0 + 1.0f)*w/W - 1), xn0 = _xn0 + ((int)((_xn0 + 1.0f)*W/w)!=X0 + 1?1:0), + _yn0 = (int)((Y0 + 1.0f)*h/H - 1), yn0 = _yn0 + ((int)((_yn0 + 1.0f)*H/h)!=Y0 + 1?1:0), + _zxp0 = (int)((Z0 + width())*(float)w/W), zxp0 = _zxp0 + ((int)(_zxp0*(float)W/w)!=Z0 + width()?1:0), + _zyp0 = (int)((Z0 + height())*(float)h/H), zyp0 = _zyp0 + ((int)(_zyp0*(float)H/h)!=Z0 + height()?1:0), + _zxn0 = (int)((Z0 + width() + 1.0f)*w/W - 1), + zxn0 = _zxn0 + ((int)((_zxn0 + 1.0f)*W/w)!=Z0 + width() + 1?1:0), + _zyn0 = (int)((Z0 + height() + 1.0f)*h/H - 1), + zyn0 = _zyn0 + ((int)((_zyn0 + 1.0f)*H/h)!=Z0 + height() + 1?1:0), xc0 = (xp0 + xn0)/2, yc0 = (yp0 + yn0)/2, zxc0 = (zxp0 + zxn0)/2, @@ -37501,18 +42696,22 @@ } } break; case 3 : { - visu.draw_ellipse(xc0,yc0,(float)cimg::abs(xc-xc0),(float)cimg::abs(yc-yc0),0,background_color,0.2f). - draw_ellipse(xc0,yc0,(float)cimg::abs(xc-xc0),(float)cimg::abs(yc-yc0),0,foreground_color,0.9f,~0U). + visu.draw_ellipse(xc0,yc0, + (float)cimg::abs(xc - xc0), + (float)cimg::abs(yc - yc0),0,background_color,0.2f). + draw_ellipse(xc0,yc0, + (float)cimg::abs(xc - xc0), + (float)cimg::abs(yc - yc0),0,foreground_color,0.9f,~0U). draw_point(xc0,yc0,foreground_color,0.9f); if (d) { - visu.draw_ellipse(zxc0,yc0,(float)cimg::abs(zxc-zxc0),(float)cimg::abs(yc-yc0),0, + visu.draw_ellipse(zxc0,yc0,(float)cimg::abs(zxc - zxc0),(float)cimg::abs(yc - yc0),0, background_color,0.2f). - draw_ellipse(zxc0,yc0,(float)cimg::abs(zxc-zxc0),(float)cimg::abs(yc-yc0),0, + draw_ellipse(zxc0,yc0,(float)cimg::abs(zxc - zxc0),(float)cimg::abs(yc - yc0),0, foreground_color,0.9f,~0U). draw_point(zxc0,yc0,foreground_color,0.9f). - draw_ellipse(xc0,zyc0,(float)cimg::abs(xc-xc0),(float)cimg::abs(zyc-zyc0),0, + draw_ellipse(xc0,zyc0,(float)cimg::abs(xc - xc0),(float)cimg::abs(zyc - zyc0),0, background_color,0.2f). - draw_ellipse(xc0,zyc0,(float)cimg::abs(xc-xc0),(float)cimg::abs(zyc-zyc0),0, + draw_ellipse(xc0,zyc0,(float)cimg::abs(xc - xc0),(float)cimg::abs(zyc - zyc0),0, foreground_color,0.9f,~0U). draw_point(xc0,zyc0,foreground_color,0.9f); } @@ -37521,12 +42720,12 @@ } // Draw text info. - if (my>=0 && my<13) text_down = true; else if (my>=visu.height()-13) text_down = false; + if (my>=0 && my<13) text_down = true; else if (my>=visu.height() - 13) text_down = false; if (!feature_type || !phase) { if (X>=0 && Y>=0 && Z>=0 && X1 || force_display_z_coord) - cimg_snprintf(text,text._width," Point (%d,%d,%d) = [ ",origX+(int)X,origY+(int)Y,origZ+(int)Z); - else cimg_snprintf(text,text._width," Point (%d,%d) = [ ",origX+(int)X,origY+(int)Y); + cimg_snprintf(text,text._width," Point (%d,%d,%d) = [ ",origX + (int)X,origY + (int)Y,origZ + (int)Z); + else cimg_snprintf(text,text._width," Point (%d,%d) = [ ",origX + (int)X,origY + (int)Y); char *ctext = text._data + std::strlen(text), *const ltext = text._data + 512; for (unsigned int c = 0; c<_spectrum && ctext::format(), @@ -37539,39 +42738,45 @@ } else switch (feature_type) { case 1 : { const double dX = (double)(X0 - X1), dY = (double)(Y0 - Y1), dZ = (double)(Z0 - Z1), - norm = std::sqrt(dX*dX+dY*dY+dZ*dZ); + norm = std::sqrt(dX*dX + dY*dY + dZ*dZ); if (_depth>1 || force_display_z_coord) cimg_snprintf(text,text._width," Vect (%d,%d,%d)-(%d,%d,%d), Norm = %g ", - origX+X0,origY+Y0,origZ+Z0,origX+X1,origY+Y1,origZ+Z1,norm); + origX + X0,origY + Y0,origZ + Z0,origX + X1,origY + Y1,origZ + Z1,norm); else cimg_snprintf(text,text._width," Vect (%d,%d)-(%d,%d), Norm = %g ", - origX+X0,origY+Y0,origX+X1,origY+Y1,norm); + origX + X0,origY + Y0,origX + X1,origY + Y1,norm); } break; case 2 : if (_depth>1 || force_display_z_coord) cimg_snprintf(text,text._width," Box (%d,%d,%d)-(%d,%d,%d), Size = (%d,%d,%d) ", - origX+(X01 || force_display_z_coord) cimg_snprintf(text,text._width," Ellipse (%d,%d,%d)-(%d,%d,%d), Radii = (%d,%d,%d) ", - origX+X0,origY+Y0,origZ+Z0,origX+X1,origY+Y1,origZ+Z1, - 1+cimg::abs(X0-X1),1+cimg::abs(Y0-Y1),1+cimg::abs(Z0-Z1)); + origX + X0,origY + Y0,origZ + Z0,origX + X1,origY + Y1,origZ + Z1, + 1 + cimg::abs(X0 - X1),1 + cimg::abs(Y0 - Y1),1 + cimg::abs(Z0 - Z1)); else cimg_snprintf(text,text._width," Ellipse (%d,%d)-(%d,%d), Radii = (%d,%d) ", - origX+X0,origY+Y0,origX+X1,origY+Y1,1+cimg::abs(X0-X1),1+cimg::abs(Y0-Y1)); + origX + X0,origY + Y0,origX + X1,origY + Y1, + 1 + cimg::abs(X0 - X1),1 + cimg::abs(Y0 - Y1)); } if (phase || (mx>=0 && my>=0)) - visu.draw_text(0,text_down?visu.height()-13:0,text,foreground_color,background_color,0.7f,13); + visu.draw_text(0,text_down?visu.height() - 13:0,text,foreground_color,background_color,0.7f,13); } disp.display(visu).wait(); } else if (!shape_selected) disp.wait(); if (disp.is_resized()) { disp.resize(false)._is_resized = false; old_is_resized = true; visu0.assign(); } omx = mx; omy = my; + if (!exit_on_anykey && key && key!=cimg::keyESC && + (key!=cimg::keyW || (!disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT()))) { + key = 0; + } } // Return result. @@ -37587,11 +42792,11 @@ switch (feature_type) { case 1 : case 2 : res[0] = X0; res[1] = Y0; res[2] = Z0; res[3] = X1; res[4] = Y1; res[5] = Z1; break; case 3 : - res[3] = cimg::abs(X1-X0); res[4] = cimg::abs(Y1-Y0); res[5] = cimg::abs(Z1-Z0); // keep no break here! + res[3] = cimg::abs(X1 - X0); res[4] = cimg::abs(Y1 - Y0); res[5] = cimg::abs(Z1 - Z0); // keep no break here! default : res[0] = X0; res[1] = Y0; res[2] = Z0; } } - disp.set_button(); + if (!exit_on_anykey || !(disp.button()&4)) disp.set_button(); if (!visible_cursor) disp.show_mouse(); disp._normalization = old_normalization; disp._is_resized = old_is_resized; @@ -37603,31 +42808,33 @@ CImg __get_select(const CImgDisplay& disp, const int normalization, const int x, const int y, const int z) const { if (is_empty()) return CImg(1,1,1,1,0); - const CImg crop = get_shared_channels(0,cimg::min(2,spectrum()-1)); + const CImg crop = get_shared_channels(0,cimg::min(2,spectrum() - 1)); CImg img2d; if (_depth>1) crop.get_projections2d(x,y,z).move_to(img2d); else CImg(crop,false).move_to(img2d); - if (cimg::type::is_float()) { // Check for inf and nan values. + // Check for inf and NaN values. + if (cimg::type::is_float() && normalization) { bool is_inf = false, is_nan = false; cimg_for(img2d,ptr,Tuchar) if (cimg::type::is_inf(*ptr)) { is_inf = true; break; } else if (cimg::type::is_nan(*ptr)) { is_nan = true; break; } if (is_inf || is_nan) { - T m0 = cimg::type::max(), M0 = cimg::type::min(); + Tint m0 = (Tint)cimg::type::max(), M0 = (Tint)cimg::type::min(); if (!normalization) { m0 = 0; M0 = 255; } - else if (normalization==2) { m0 = (T)disp._min; M0 = (T)disp._max; } + else if (normalization==2) { m0 = (Tint)disp._min; M0 = (Tint)disp._max; } else cimg_for(img2d,ptr,Tuchar) if (!cimg::type::is_inf(*ptr) && !cimg::type::is_nan(*ptr)) { - if (*ptrM0) M0 = *ptr; + if (*ptr<(Tuchar)m0) m0 = *ptr; + if (*ptr>(Tuchar)M0) M0 = *ptr; } const T - val_minf = (normalization==1 || normalization==3)?m0-(M0-m0)*20-1:m0, - val_pinf = (normalization==1 || normalization==3)?M0+(M0-m0)*20+1:M0; + val_minf = (T)(normalization==1 || normalization==3?m0 - (M0 - m0)*20 - 1:m0), + val_pinf = (T)(normalization==1 || normalization==3?M0 + (M0 - m0)*20 + 1:M0); if (is_nan) cimg_for(img2d,ptr,Tuchar) - if (cimg::type::is_nan(*ptr)) *ptr = val_minf; // Replace nan values. + if (cimg::type::is_nan(*ptr)) *ptr = val_minf; // Replace NaN values. if (is_inf) cimg_for(img2d,ptr,Tuchar) if (cimg::type::is_inf(*ptr)) *ptr = (float)*ptr<0?val_minf:val_pinf; // Replace +-inf values. @@ -37638,13 +42845,13 @@ case 1 : img2d.normalize(0,255); break; case 2 : { const float m = disp._min, M = disp._max; - (img2d-=m)*=255.0f/(M-m>0?M-m:1); + (img2d-=m)*=255.0f/(M - m>0?M - m:1); } break; case 3 : if (cimg::type::is_float()) img2d.normalize(0,255); else { const float m = (float)cimg::type::min(), M = (float)cimg::type::max(); - (img2d-=m)*=255.0f/(M-m>0?M-m:1); + (img2d-=m)*=255.0f/(M - m>0?M - m:1); } break; } @@ -37656,7 +42863,8 @@ CImg get_select_graph(CImgDisplay &disp, const unsigned int plot_type=1, const unsigned int vertex_type=1, const char *const labelx=0, const double xmin=0, const double xmax=0, - const char *const labely=0, const double ymin=0, const double ymax=0) const { + const char *const labely=0, const double ymin=0, const double ymax=0, + const bool exit_on_anykey=false) const { if (is_empty()) throw CImgInstanceException(_cimg_instance "select_graph(): Empty instance.", @@ -37672,8 +42880,8 @@ if (nymin==nymax) { --nymin; ++nymax; } if (nxmin==nxmax && nxmin==0) { nxmin = 0; nxmax = siz - 1.0; } - const unsigned char black[] = { 0, 0, 0 }, white[] = { 255, 255, 255 }, gray[] = { 220, 220, 220 }; - const unsigned char gray2[] = { 110, 110, 110 }, ngray[] = { 35, 35, 35 }; + static const unsigned char black[] = { 0, 0, 0 }, white[] = { 255, 255, 255 }, gray[] = { 220, 220, 220 }; + static const unsigned char gray2[] = { 110, 110, 110 }, ngray[] = { 35, 35, 35 }; static unsigned int odimv = 0; static CImg colormap; if (odimv!=_spectrum) { @@ -37691,7 +42899,7 @@ int x0 = -1, x1 = -1, y0 = -1, y1 = -1, omouse_x = -2, omouse_y = -2; const unsigned int one = plot_type==3?0U:1U; unsigned int okey = 0, obutton = 0; - CImg message(1024); *message = 0; + CImg message(1024); CImg_3x3(I,unsigned char); for (bool selected = false; !selected && !disp.is_closed() && !okey && !disp.wheel(); ) { @@ -37714,20 +42922,20 @@ axes.assign(gdimx,gdimy,1,1,0); const float - dx = (float)cimg::abs(nxmax-nxmin), dy = (float)cimg::abs(nymax-nymin), - px = (float)std::pow(10.0,(int)std::log10(dx?dx:1)-2.0), - py = (float)std::pow(10.0,(int)std::log10(dy?dy:1)-2.0); + dx = (float)cimg::abs(nxmax - nxmin), dy = (float)cimg::abs(nymax - nymin), + px = (float)std::pow(10.0,(int)std::log10(dx?dx:1) - 2.0), + py = (float)std::pow(10.0,(int)std::log10(dy?dy:1) - 2.0); const CImg seqx = dx<=0?CImg::vector(nxmin): - CImg::sequence(1 + gdimx/60,nxmin,one?nxmax:nxmin+(nxmax-nxmin)*(siz+1)/siz).round(px), + CImg::sequence(1 + gdimx/60,nxmin,one?nxmax:nxmin + (nxmax - nxmin)*(siz + 1)/siz).round(px), seqy = CImg::sequence(1 + gdimy/60,nymax,nymin).round(py); const bool allow_zero = (nxmin*nxmax>0) || (nymin*nymax>0); axes.draw_axes(seqx,seqy,white,1,~0U,~0U,13,allow_zero); - if (nymin>0) axes.draw_axis(seqx,gdimy-1,gray,1,~0U,13,allow_zero); + if (nymin>0) axes.draw_axis(seqx,gdimy - 1,gray,1,~0U,13,allow_zero); if (nymax<0) axes.draw_axis(seqx,0,gray,1,~0U,13,allow_zero); if (nxmin>0) axes.draw_axis(0,seqy,gray,1,~0U,13,allow_zero); - if (nxmax<0) axes.draw_axis(gdimx-1,seqy,gray,1,~0U,13,allow_zero); + if (nxmax<0) axes.draw_axis(gdimx - 1,seqy,gray,1,~0U,13,allow_zero); cimg_for3x3(axes,x,y,0,0,I,unsigned char) if (Icc) { @@ -37735,16 +42943,16 @@ else cimg_forC(graph,c) graph(x,y,c) = (unsigned char)(2*graph(x,y,c)/3); } else if (Ipc || Inc || Icp || Icn || Ipp || Inn || Ipn || Inp) - cimg_forC(graph,c) graph(x,y,c) = (unsigned char)((graph(x,y,c)+511)/3); + cimg_forC(graph,c) graph(x,y,c) = (unsigned char)((graph(x,y,c) + 511)/3); visu0.draw_image(16,16,graph); - visu0.draw_line(15,15,16+gdimx,15,gray2).draw_line(16+gdimx,15,16+gdimx,16+gdimy,gray2). - draw_line(16+gdimx,16+gdimy,15,16+gdimy,white).draw_line(15,16+gdimy,15,15,white); + visu0.draw_line(15,15,16 + gdimx,15,gray2).draw_line(16 + gdimx,15,16 + gdimx,16 + gdimy,gray2). + draw_line(16 + gdimx,16 + gdimy,15,16 + gdimy,white).draw_line(15,16 + gdimy,15,15,white); } else graph.assign(); text.assign().draw_text(0,0,labelx?labelx:"X-axis",white,ngray,1,13).resize(-100,-100,1,3); - visu0.draw_image((visu0.width()-text.width())/2,visu0.height()-14,~text); + visu0.draw_image((visu0.width() - text.width())/2,visu0.height() - 14,~text); text.assign().draw_text(0,0,labely?labely:"Y-axis",white,ngray,1,13).rotate(-90).resize(-100,-100,1,3); - visu0.draw_image(1,(visu0.height()-text.height())/2,~text); + visu0.draw_image(1,(visu0.height() - text.height())/2,~text); visu.assign(); } @@ -37757,29 +42965,30 @@ nx1 = x0<=x1?x1:x0, ny0 = y0<=y1?y0:y1, ny1 = y0<=y1?y1:y0, - sx0 = (int)(16 + nx0*(visu.width()-32)/cimg::max(1U,siz-one)), - sx1 = (int)(15 + (nx1+1)*(visu.width()-32)/cimg::max(1U,siz-one)), + sx0 = (int)(16 + nx0*(visu.width() - 32)/cimg::max(1U,siz - one)), + sx1 = (int)(15 + (nx1 + 1)*(visu.width() - 32)/cimg::max(1U,siz - one)), sy0 = 16 + ny0, sy1 = 16 + ny1; if (y0>=0 && y1>=0) visu.draw_rectangle(sx0,sy0,sx1,sy1,gray,0.5f).draw_rectangle(sx0,sy0,sx1,sy1,black,0.5f,0xCCCCCCCCU); - else visu.draw_rectangle(sx0,0,sx1,visu.height()-17,gray,0.5f). - draw_line(sx0,16,sx0,visu.height()-17,black,0.5f,0xCCCCCCCCU). - draw_line(sx1,16,sx1,visu.height()-17,black,0.5f,0xCCCCCCCCU); - } - if (mouse_x>=16 && mouse_y>=16 && mouse_x=16 && mouse_y>=16 && mouse_x=7) cimg_snprintf(message,message._width,"Value[%u:%g] = ( %g %g %g ... %g %g %g )",x,cx, (double)(*this)(x,0,0,0),(double)(*this)(x,0,0,1),(double)(*this)(x,0,0,2), - (double)(*this)(x,0,0,_spectrum-4),(double)(*this)(x,0,0,_spectrum-3), - (double)(*this)(x,0,0,_spectrum-1)); + (double)(*this)(x,0,0,_spectrum - 4),(double)(*this)(x,0,0,_spectrum - 3), + (double)(*this)(x,0,0,_spectrum - 1)); else { cimg_snprintf(message,message._width,"Value[%u:%g] = ( ",x,cx); - cimg_forC(*this,c) std::sprintf(message._data + std::strlen(message),"%g ",(double)(*this)(x,0,0,c)); - std::sprintf(message._data + std::strlen(message),")"); + cimg_forC(*this,c) cimg_sprintf(message._data + std::strlen(message),"%g ",(double)(*this)(x,0,0,c)); + cimg_sprintf(message._data + std::strlen(message),")"); } if (x0>=0 && x1>=0) { const unsigned int @@ -37788,24 +42997,25 @@ ny0 = (unsigned int)(y0<=y1?y0:y1), ny1 = (unsigned int)(y0<=y1?y1:y0); const double - cx0 = nxmin + nx0*(nxmax-nxmin)/cimg::max(1U,siz-1), - cx1 = nxmin + (nx1+one)*(nxmax-nxmin)/cimg::max(1U,siz-1), - cy0 = nymax - ny0*(nymax-nymin)/(visu._height-32), - cy1 = nymax - ny1*(nymax-nymin)/(visu._height-32); + cx0 = nxmin + nx0*(nxmax - nxmin)/cimg::max(1U,siz - 1), + cx1 = nxmin + (nx1 + one)*(nxmax - nxmin)/cimg::max(1U,siz - 1), + cy0 = nymax - ny0*(nymax - nymin)/(visu._height - 32), + cy1 = nymax - ny1*(nymax - nymin)/(visu._height - 32); if (y0>=0 && y1>=0) - std::sprintf(message._data + std::strlen(message)," - Range ( %u:%g, %g ) - ( %u:%g, %g )", - x0,cx0,cy0,x1+one,cx1,cy1); + cimg_sprintf(message._data + std::strlen(message)," - Range ( %u:%g, %g ) - ( %u:%g, %g )", + x0,cx0,cy0,x1 + one,cx1,cy1); else - std::sprintf(message._data + std::strlen(message)," - Range [ %u:%g - %u:%g ]", - x0,cx0,x1+one,cx1); + cimg_sprintf(message._data + std::strlen(message)," - Range [ %u:%g - %u:%g ]", + x0,cx0,x1 + one,cx1); } text.assign().draw_text(0,0,message,white,ngray,1,13).resize(-100,-100,1,3); - visu.draw_image((visu.width()-text.width())/2,1,~text); + visu.draw_image((visu.width() - text.width())/2,1,~text); } visu.display(disp); } // Test keys. + CImg filename(32); switch (okey = key) { #if cimg_OS!=2 case cimg::keyCTRLRIGHT : case cimg::keySHIFTRIGHT : @@ -37837,15 +43047,14 @@ static unsigned int snap_number = 0; if (visu || visu0) { CImg &screen = visu?visu:visu0; - char filename[32] = { 0 }; std::FILE *file; do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.bmp",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.bmp",snap_number++); if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); } while (file); (+screen).draw_text(0,0," Saving snapshot... ",black,gray,1,13).display(disp); screen.save(filename); - (+screen).draw_text(0,0," Snapshot '%s' saved. ",black,gray,1,13,filename).display(disp); + (+screen).draw_text(0,0," Snapshot '%s' saved. ",black,gray,1,13,filename._data).display(disp); } disp.set_key(key,false); okey = 0; } break; @@ -37853,19 +43062,18 @@ static unsigned int snap_number = 0; if (visu || visu0) { CImg &screen = visu?visu:visu0; - char filename[32] = { 0 }; std::FILE *file; do { #ifdef cimg_use_zlib - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimgz",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimgz",snap_number++); #else - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimg",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimg",snap_number++); #endif if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); } while (file); (+screen).draw_text(0,0," Saving instance... ",black,gray,1,13).display(disp); save(filename); - (+screen).draw_text(0,0," Instance '%s' saved. ",black,gray,1,13,filename).display(disp); + (+screen).draw_text(0,0," Instance '%s' saved. ",black,gray,1,13,filename._data).display(disp); } disp.set_key(key,false); okey = 0; } break; @@ -37876,10 +43084,10 @@ visu.assign(); if (disp.mouse_x()>=0 && disp.mouse_y()>=0) { const int - mx = (mouse_x -16)*(int)(siz-one)/(disp.width()-32), - cx = mx<0?0:(mx>=(int)(siz-one)?(int)(siz-1-one):mx), + mx = (mouse_x - 16)*(int)(siz - one)/(disp.width() - 32), + cx = mx<0?0:(mx>=(int)(siz - one)?(int)(siz - 1 - one):mx), my = mouse_y - 16, - cy = my<=0?0:(my>=(disp.height()-32)?(disp.height()-32):my); + cy = my<=0?0:(my>=(disp.height() - 32)?(disp.height() - 32):my); if (button&1) { if (!obutton) { x0 = cx; y0 = -1; } else { x1 = cx; y1 = -1; } } @@ -37892,13 +43100,18 @@ } if (disp.is_resized()) { disp.resize(false); visu0.assign(); } if (visu && visu0) disp.wait(); + if (!exit_on_anykey && okey && okey!=cimg::keyESC && + (okey!=cimg::keyW || (!disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT()))) { + disp.set_key(key,false); + okey = 0; + } } disp._normalization = old_normalization; if (x1>=0 && x1(4,1,1,1,x0,y0,x1>=0?x1+(int)one:-1,y1); + return CImg(4,1,1,1,x0,y0,x1>=0?x1 + (int)one:-1,y1); } //! Load image from a file. @@ -37914,7 +43127,7 @@ cimg_instance); if (!cimg::strncasecmp(filename,"http://",7) || !cimg::strncasecmp(filename,"https://",8)) { - CImg filename_local(256); *filename_local = 0; + CImg filename_local(256); load(cimg::load_network(filename,filename_local)); std::remove(filename_local); return *this; @@ -38041,16 +43254,17 @@ } try { - const char *const f_type = cimg::file_type(file,filename); + const char *const f_type = cimg::ftype(file,filename); std::fclose(file); if (!cimg::strcasecmp(f_type,"pnm")) load_pnm(filename); else if (!cimg::strcasecmp(f_type,"pfm")) load_pfm(filename); else if (!cimg::strcasecmp(f_type,"bmp")) load_bmp(filename); + else if (!cimg::strcasecmp(f_type,"inr")) load_inr(filename); else if (!cimg::strcasecmp(f_type,"jpg")) load_jpeg(filename); else if (!cimg::strcasecmp(f_type,"pan")) load_pandore(filename); else if (!cimg::strcasecmp(f_type,"png")) load_png(filename); else if (!cimg::strcasecmp(f_type,"tif")) load_tiff(filename); - else if (!cimg::strcasecmp(f_type,"inr")) load_inr(filename); + else if (!cimg::strcasecmp(f_type,"gif")) load_gif_external(filename); else if (!cimg::strcasecmp(f_type,"dcm")) load_medcon_external(filename); else throw CImgIOException("CImg<%s>::load()", pixel_type()); @@ -38108,7 +43322,7 @@ CImg line(256); *line = 0; int err = std::fscanf(nfile,"%255[^\n]",line._data); unsigned int dx = 0, dy = 1, dz = 1, dc = 1; - std::sscanf(line,"%u%*c%u%*c%u%*c%u",&dx,&dy,&dz,&dc); + cimg_sscanf(line,"%u%*c%u%*c%u%*c%u",&dx,&dy,&dz,&dc); err = std::fscanf(nfile,"%*[^0-9.eEinfa+-]"); if (!dx || !dy || !dz || !dc) { if (!file) cimg::fclose(nfile); @@ -38131,7 +43345,7 @@ cimg::warn(_cimg_instance "load_ascii(): Only %lu/%lu values read from file '%s'.", cimg_instance, - off-1,siz,filename?filename:"(FILE*)"); + off - 1,siz,filename?filename:"(FILE*)"); if (!file) cimg::fclose(nfile); return *this; @@ -38176,7 +43390,7 @@ if (err>0) (*this)(cdx++,dy) = (T)val; if (cdx>=_width) resize(3*_width/2,_height,1,1,0); char c = 0; - if (!std::sscanf(delimiter,"%255[^\n]%c",tmp._data,&c) || c=='\n') { + if (!cimg_sscanf(delimiter,"%255[^\n]%c",tmp._data,&c) || c=='\n') { dx = cimg::max(cdx,dx); if (++dy>=_height) resize(_width,3*_height/2,1,1,0); cdx = 0; @@ -38225,8 +43439,8 @@ cimg_instance); std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - unsigned char header[64] = { 0 }; - cimg::fread(header,54,nfile); + CImg header(54); + cimg::fread(header._data,54,nfile); if (*header!='B' || header[1]!='M') { if (!file) cimg::fclose(nfile); throw CImgIOException(_cimg_instance @@ -38251,12 +43465,12 @@ file_size = (int)std::ftell(nfile); std::fseek(nfile,54,SEEK_SET); } - if (header_size>40) std::fseek(nfile, header_size - 40, SEEK_CUR); + if (header_size>40) std::fseek(nfile,header_size - 40,SEEK_CUR); const int - cimg_iobuffer = 12*1024*1024, - dx_bytes = (bpp==1)?(dx/8+(dx%8?1:0)):((bpp==4)?(dx/2+(dx%2?1:0)):(dx*bpp/8)), - align_bytes = (4-dx_bytes%4)%4, + cimg_iobuffer = 24*1024*1024, + dx_bytes = (bpp==1)?(dx/8 + (dx%8?1:0)):((bpp==4)?(dx/2 + (dx%2?1:0)):(dx*bpp/8)), + align_bytes = (4 - dx_bytes%4)%4, buf_size = cimg::min(cimg::abs(dy)*(dx_bytes + align_bytes),file_size - offset); CImg colormap; @@ -38286,7 +43500,7 @@ assign(dx,cimg::abs(dy),1,3); switch (bpp) { case 1 : { // Monochrome - for (int y = height()-1; y>=0; --y) { + for (int y = height() - 1; y>=0; --y) { if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,SEEK_CUR); @@ -38304,7 +43518,7 @@ } } break; case 4 : { // 16 colors - for (int y = height()-1; y>=0; --y) { + for (int y = height() - 1; y>=0; --y) { if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,SEEK_CUR); @@ -38323,7 +43537,7 @@ } } break; case 8 : { // 256 colors - for (int y = height()-1; y>=0; --y) { + for (int y = height() - 1; y>=0; --y) { if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,SEEK_CUR); @@ -38338,7 +43552,7 @@ } } break; case 16 : { // 16 bits colors - for (int y = height()-1; y>=0; --y) { + for (int y = height() - 1; y>=0; --y) { if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,SEEK_CUR); @@ -38354,7 +43568,7 @@ } } break; case 24 : { // 24 bits colors - for (int y = height()-1; y>=0; --y) { + for (int y = height() - 1; y>=0; --y) { if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,SEEK_CUR); @@ -38368,7 +43582,7 @@ } } break; case 32 : { // 32 bits colors - for (int y = height()-1; y>=0; --y) { + for (int y = height() - 1; y>=0; --y) { if (buf_size>=cimg_iobuffer) { cimg::fread(ptrs=buffer._data,dx_bytes,nfile); std::fseek(nfile,align_bytes,SEEK_CUR); @@ -38811,9 +44025,9 @@ unsigned int ppm_type, W, H, D = 1, colormax = 255; CImg item(16384,1,1,1,0); int err, rval, gval, bval; - const long cimg_iobuffer = 12*1024*1024; + const long cimg_iobuffer = 24*1024*1024; while ((err=std::fscanf(nfile,"%16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); - if (std::sscanf(item," P%u",&ppm_type)!=1) { + if (cimg_sscanf(item," P%u",&ppm_type)!=1) { if (!file) cimg::fclose(nfile); throw CImgIOException(_cimg_instance "load_pnm(): PNM header not found in file '%s'.", @@ -38821,7 +44035,7 @@ filename?filename:"(FILE*)"); } while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); - if ((err=std::sscanf(item," %u %u %u %u",&W,&H,&D,&colormax))<2) { + if ((err=cimg_sscanf(item," %u %u %u %u",&W,&H,&D,&colormax))<2) { if (!file) cimg::fclose(nfile); throw CImgIOException(_cimg_instance "load_pnm(): WIDTH and HEIGHT fields undefined in file '%s'.", @@ -38831,7 +44045,7 @@ if (ppm_type!=1 && ppm_type!=4) { if (err==2 || (err==3 && (ppm_type==5 || ppm_type==7 || ppm_type==8 || ppm_type==9))) { while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); - if (std::sscanf(item,"%u",&colormax)!=1) + if (cimg_sscanf(item,"%u",&colormax)!=1) cimg::warn(_cimg_instance "load_pnm(): COLORMAX field is undefined in file '%s'.", cimg_instance, @@ -39015,7 +44229,7 @@ int W = 0, H = 0, err = 0; double scale = 0; while ((err=std::fscanf(nfile,"%16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); - if (std::sscanf(item," P%c",&pfm_type)!=1) { + if (cimg_sscanf(item," P%c",&pfm_type)!=1) { if (!file) cimg::fclose(nfile); throw CImgIOException(_cimg_instance "load_pfm(): PFM header not found in file '%s'.", @@ -39023,7 +44237,7 @@ filename?filename:"(FILE*)"); } while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); - if ((err=std::sscanf(item," %d %d",&W,&H))<2) { + if ((err=cimg_sscanf(item," %d %d",&W,&H))<2) { if (!file) cimg::fclose(nfile); throw CImgIOException(_cimg_instance "load_pfm(): WIDTH and HEIGHT fields are undefined in file '%s'.", @@ -39032,7 +44246,7 @@ } if (err==2) { while ((err=std::fscanf(nfile," %16383[^\n]",item.data()))!=EOF && (*item=='#' || !err)) std::fgetc(nfile); - if (std::sscanf(item,"%lf",&scale)!=1) + if (cimg_sscanf(item,"%lf",&scale)!=1) cimg::warn(_cimg_instance "load_pfm(): SCALE field is undefined in file '%s'.", cimg_instance, @@ -39102,7 +44316,7 @@ cimg_instance); if (!dimw || !dimh) return assign(); - const long cimg_iobuffer = 12*1024*1024; + const long cimg_iobuffer = 24*1024*1024; std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); CImg raw; assign(dimw,dimh,1,3); @@ -39158,7 +44372,7 @@ cimg_instance); if (!dimw || !dimh) return assign(); - const long cimg_iobuffer = 12*1024*1024; + const long cimg_iobuffer = 24*1024*1024; std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); CImg raw; assign(dimw,dimh,1,4); @@ -39195,7 +44409,7 @@ - When libtiff is enabled, 2D and 3D (multipage) several channel per pixel are supported for char,uchar,short,ushort,float and \c double pixel types. - - If \c cimg_use_tif is not defined at compilation time the + - If \c cimg_use_tif is not defined at compile time the function uses CImg& load_other(const char*). **/ CImg& load_tiff(const char *const filename, @@ -39233,18 +44447,18 @@ filename,nb_images,nfirst_frame,nlast_frame,nstep_frame); if (nfirst_frame>=nb_images) return assign(); - if (nlast_frame>=nb_images) nlast_frame = nb_images-1; + if (nlast_frame>=nb_images) nlast_frame = nb_images - 1; TIFFSetDirectory(tif,0); CImg frame; for (unsigned int l = nfirst_frame; l<=nlast_frame; l+=nstep_frame) { frame._load_tiff(tif,l,voxel_size,description); if (l==nfirst_frame) - assign(frame._width,frame._height,1+(nlast_frame-nfirst_frame)/nstep_frame,frame._spectrum); + assign(frame._width,frame._height,1 + (nlast_frame - nfirst_frame)/nstep_frame,frame._spectrum); if (frame._width>_width || frame._height>_height || frame._spectrum>_spectrum) resize(cimg::max(frame._width,_width), cimg::max(frame._height,_height),-100, cimg::max(frame._spectrum,_spectrum),0); - draw_image(0,0,(l-nfirst_frame)/nstep_frame,frame); + draw_image(0,0,(l - nfirst_frame)/nstep_frame,frame); } TIFFClose(tif); } else throw CImgIOException(_cimg_instance @@ -39281,10 +44495,10 @@ TIFFFileName(tif)); } const t *ptr = buf; - for (unsigned int rr = row; rrny?ny-row:rowsperstrip); + uint32 nrow = (row + rowsperstrip>ny?ny - row:rowsperstrip); tstrip_t strip = TIFFComputeStrip(tif, row, 0); if ((TIFFReadEncodedStrip(tif,strip,buf,-1))<0) { _TIFFfree(buf); TIFFClose(tif); @@ -39333,7 +44547,7 @@ const t *ptr = buf; for (unsigned int rr = 0; rrny?ny-row:rowsperstrip); + uint32 nrow = (row + rowsperstrip>ny?ny - row:rowsperstrip); tstrip_t strip = TIFFComputeStrip(tif, row, vv); if ((TIFFReadEncodedStrip(tif,strip,buf,-1))<0) { _TIFFfree(buf); TIFFClose(tif); @@ -39359,7 +44573,7 @@ const t *ptr = buf; for (unsigned int rr = 0;rr::string(s_description).move_to(*description); } - const unsigned int spectrum = is_spp?samplesperpixel:photo==3?3:1; + const unsigned int spectrum = !is_spp || photo>=3?(photo>1?3:1):samplesperpixel; assign(nx,ny,1,spectrum); - if (photo>=3 && sampleformat==1 && bitspersample==8 && (samplesperpixel==3 || samplesperpixel==4)) { + if ((photo>=3 && sampleformat==1 && + (bitspersample==4 || bitspersample==8) && + (samplesperpixel==1 || samplesperpixel==3 || samplesperpixel==4)) || + (bitspersample==1 && samplesperpixel==1)) { // Special case for unsigned color images. uint32 *const raster = (uint32*)_TIFFmalloc(nx*ny*sizeof(uint32)); if (!raster) { @@ -39416,24 +44633,25 @@ } TIFFReadRGBAImage(tif,nx,ny,raster,0); switch (spectrum) { - case 1 : { - cimg_forXY(*this,x,y) (*this)(x,y) = (T)(float)((raster[nx*(ny-1-y)+x] + 128)/257); - } break; - case 3 : { + case 1 : + cimg_forXY(*this,x,y) + (*this)(x,y,0) = (T)(float)TIFFGetR(raster[nx*(ny - 1 -y) + x]); + break; + case 3 : cimg_forXY(*this,x,y) { - (*this)(x,y,0) = (T)(float)TIFFGetR(raster[nx*(ny-1-y)+x]); - (*this)(x,y,1) = (T)(float)TIFFGetG(raster[nx*(ny-1-y)+x]); - (*this)(x,y,2) = (T)(float)TIFFGetB(raster[nx*(ny-1-y)+x]); + (*this)(x,y,0) = (T)(float)TIFFGetR(raster[nx*(ny - 1 -y) + x]); + (*this)(x,y,1) = (T)(float)TIFFGetG(raster[nx*(ny - 1 -y) + x]); + (*this)(x,y,2) = (T)(float)TIFFGetB(raster[nx*(ny - 1 -y) + x]); } - } break; - case 4 : { + break; + case 4 : cimg_forXY(*this,x,y) { - (*this)(x,y,0) = (T)(float)TIFFGetR(raster[nx*(ny-1-y)+x]); - (*this)(x,y,1) = (T)(float)TIFFGetG(raster[nx*(ny-1-y)+x]); - (*this)(x,y,2) = (T)(float)TIFFGetB(raster[nx*(ny-1-y)+x]); - (*this)(x,y,3) = (T)(float)TIFFGetA(raster[nx*(ny-1-y)+x]); + (*this)(x,y,0) = (T)(float)TIFFGetR(raster[nx*(ny - 1 - y) + x]); + (*this)(x,y,1) = (T)(float)TIFFGetG(raster[nx*(ny - 1 - y) + x]); + (*this)(x,y,2) = (T)(float)TIFFGetB(raster[nx*(ny - 1 - y) + x]); + (*this)(x,y,3) = (T)(float)TIFFGetA(raster[nx*(ny - 1 - y) + x]); } - } break; + break; } _TIFFfree(raster); } else { // Other cases. @@ -39586,15 +44804,15 @@ std::FILE *nfile_header = 0, *nfile = 0; if (!file) { - CImg body(1024); *body = 0; + CImg body(1024); const char *const ext = cimg::split_filename(filename,body); if (!cimg::strcasecmp(ext,"hdr")) { // File is an Analyze header file. nfile_header = cimg::fopen(filename,"rb"); - std::sprintf(body._data + std::strlen(body),".img"); + cimg_sprintf(body._data + std::strlen(body),".img"); nfile = cimg::fopen(body,"rb"); } else if (!cimg::strcasecmp(ext,"img")) { // File is an Analyze data file. nfile = cimg::fopen(filename,"rb"); - std::sprintf(body._data + std::strlen(body),".hdr"); + cimg_sprintf(body._data + std::strlen(body),".hdr"); nfile_header = cimg::fopen(body,"rb"); } else nfile_header = nfile = cimg::fopen(filename,"rb"); // File is a Niftii file. } else nfile_header = nfile = file; // File is a Niftii file. @@ -39610,22 +44828,22 @@ cimg::fread(&header_size,1,nfile_header); if (!header_size) throw CImgIOException(_cimg_instance - "load_analyze(): Invalid zero-sized header in file '%s'.", + "load_analyze(): Invalid zero-size header in file '%s'.", cimg_instance, filename?filename:"(FILE*)"); if (header_size>=4096) { endian = true; cimg::invert_endianness(header_size); } unsigned char *const header = new unsigned char[header_size]; - cimg::fread(header+4,header_size-4,nfile_header); + cimg::fread(header + 4,header_size - 4,nfile_header); if (!file && nfile_header!=nfile) cimg::fclose(nfile_header); if (endian) { - cimg::invert_endianness((short*)(header+40),5); - cimg::invert_endianness((short*)(header+70),1); - cimg::invert_endianness((short*)(header+72),1); - cimg::invert_endianness((float*)(header+76),4); - cimg::invert_endianness((float*)(header+112),1); + cimg::invert_endianness((short*)(header + 40),5); + cimg::invert_endianness((short*)(header + 70),1); + cimg::invert_endianness((short*)(header + 72),1); + cimg::invert_endianness((float*)(header + 76),4); + cimg::invert_endianness((float*)(header + 112),1); } - unsigned short *dim = (unsigned short*)(header+40), dimx = 1, dimy = 1, dimz = 1, dimv = 1; + unsigned short *dim = (unsigned short*)(header + 40), dimx = 1, dimy = 1, dimz = 1, dimv = 1; if (!dim[0]) cimg::warn(_cimg_instance "load_analyze(): File '%s' defines an image with zero dimensions.", @@ -39642,10 +44860,10 @@ if (dim[0]>=2) dimy = dim[2]; if (dim[0]>=3) dimz = dim[3]; if (dim[0]>=4) dimv = dim[4]; - float scalefactor = *(float*)(header+112); if (scalefactor==0) scalefactor=1; - const unsigned short datatype = *(unsigned short*)(header+70); + float scalefactor = *(float*)(header + 112); if (scalefactor==0) scalefactor=1; + const unsigned short datatype = *(unsigned short*)(header + 70); if (voxel_size) { - const float *vsize = (float*)(header+76); + const float *vsize = (float*)(header + 76); voxel_size[0] = vsize[1]; voxel_size[1] = vsize[2]; voxel_size[2] = vsize[3]; } delete[] header; @@ -39819,8 +45037,8 @@ } static void _load_inr_header(std::FILE *file, int out[8], float *const voxel_size) { - CImg item(1024); *item = 0; - char tmp1[64] = { 0 }, tmp2[64] = { 0 }; + CImg item(1024), tmp1(64), tmp2(64); + *item = *tmp1 = *tmp2 = 0; out[0] = std::fscanf(file,"%63s",item._data); out[0] = out[1] = out[2] = out[3] = out[5] = 1; out[4] = out[6] = out[7] = -1; if(cimg::strncasecmp(item,"#INRIMAGE-4#{",13)!=0) @@ -39828,29 +45046,29 @@ pixel_type()); while (std::fscanf(file," %63[^\n]%*c",item._data)!=EOF && std::strncmp(item,"##}",3)) { - std::sscanf(item," XDIM%*[^0-9]%d",out); - std::sscanf(item," YDIM%*[^0-9]%d",out+1); - std::sscanf(item," ZDIM%*[^0-9]%d",out+2); - std::sscanf(item," VDIM%*[^0-9]%d",out+3); - std::sscanf(item," PIXSIZE%*[^0-9]%d",out+6); + cimg_sscanf(item," XDIM%*[^0-9]%d",out); + cimg_sscanf(item," YDIM%*[^0-9]%d",out + 1); + cimg_sscanf(item," ZDIM%*[^0-9]%d",out + 2); + cimg_sscanf(item," VDIM%*[^0-9]%d",out + 3); + cimg_sscanf(item," PIXSIZE%*[^0-9]%d",out + 6); if (voxel_size) { - std::sscanf(item," VX%*[^0-9.+-]%f",voxel_size); - std::sscanf(item," VY%*[^0-9.+-]%f",voxel_size+1); - std::sscanf(item," VZ%*[^0-9.+-]%f",voxel_size+2); + cimg_sscanf(item," VX%*[^0-9.+-]%f",voxel_size); + cimg_sscanf(item," VY%*[^0-9.+-]%f",voxel_size + 1); + cimg_sscanf(item," VZ%*[^0-9.+-]%f",voxel_size + 2); } - if (std::sscanf(item," CPU%*[ =]%s",tmp1)) out[7]=cimg::strncasecmp(tmp1,"sun",3)?0:1; - switch (std::sscanf(item," TYPE%*[ =]%s %s",tmp1,tmp2)) { + if (cimg_sscanf(item," CPU%*[ =]%s",tmp1._data)) out[7] = cimg::strncasecmp(tmp1,"sun",3)?0:1; + switch (cimg_sscanf(item," TYPE%*[ =]%s %s",tmp1._data,tmp2._data)) { case 0 : break; - case 2 : out[5] = cimg::strncasecmp(tmp1,"unsigned",8)?1:0; std::strncpy(tmp1,tmp2,sizeof(tmp1)-1); + case 2 : out[5] = cimg::strncasecmp(tmp1,"unsigned",8)?1:0; std::strncpy(tmp1,tmp2,tmp1._width - 1); case 1 : - if (!cimg::strncasecmp(tmp1,"int",3) || !cimg::strncasecmp(tmp1,"fixed",5)) out[4] = 0; + if (!cimg::strncasecmp(tmp1,"int",3) || !cimg::strncasecmp(tmp1,"fixed",5)) out[4] = 0; if (!cimg::strncasecmp(tmp1,"float",5) || !cimg::strncasecmp(tmp1,"double",6)) out[4] = 1; - if (!cimg::strncasecmp(tmp1,"packed",6)) out[4] = 2; + if (!cimg::strncasecmp(tmp1,"packed",6)) out[4] = 2; if (out[4]>=0) break; default : throw CImgIOException("CImg<%s>::load_inr(): Invalid pixel type '%s' defined in header.", pixel_type(), - tmp2); + tmp2._data); } } if(out[0]<0 || out[1]<0 || out[2]<0 || out[3]<0) @@ -40004,8 +45222,8 @@ cimg_instance); std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); - char header[32] = { 0 }; - cimg::fread(header,12,nfile); + CImg header(32); + cimg::fread(header._data,12,nfile); if (cimg::strncasecmp("PANDORE",header,7)) { if (!file) cimg::fclose(nfile); throw CImgIOException(_cimg_instance @@ -40014,10 +45232,11 @@ filename?filename:"(FILE*)"); } unsigned int imageid, dims[8] = { 0 }; + int ptbuf[4] = { 0 }; cimg::fread(&imageid,1,nfile); - const bool endian = (imageid>255); + const bool endian = imageid>255; if (endian) cimg::invert_endianness(imageid); - cimg::fread(header,20,nfile); + cimg::fread(header._data,20,nfile); switch (imageid) { case 2 : _cimg_load_pandore_case(2,dims[1],1,1,1,unsigned char,unsigned char,unsigned char,1); break; @@ -40149,19 +45368,16 @@ break; case 33 : _cimg_load_pandore_case(4,dims[3],dims[2],dims[1],dims[0],double,float,float,4); break; case 34 : { // Points 1d - int ptbuf[4] = { 0 }; cimg::fread(ptbuf,1,nfile); if (endian) cimg::invert_endianness(ptbuf,1); assign(1); (*this)(0) = (T)ptbuf[0]; } break; case 35 : { // Points 2d - int ptbuf[4] = { 0 }; cimg::fread(ptbuf,2,nfile); if (endian) cimg::invert_endianness(ptbuf,2); assign(2); (*this)(0) = (T)ptbuf[1]; (*this)(1) = (T)ptbuf[0]; } break; case 36 : { // Points 3d - int ptbuf[4] = { 0 }; cimg::fread(ptbuf,3,nfile); if (endian) cimg::invert_endianness(ptbuf,3); assign(3); (*this)(0) = (T)ptbuf[2]; (*this)(1) = (T)ptbuf[1]; (*this)(2) = (T)ptbuf[0]; @@ -40379,7 +45595,7 @@ filename?filename:"(FILE*)"); } do { err = std::fscanf(nfile,"%255[^\n] ",line._data); } while (!err || (err==1 && *line=='#')); - if ((err = std::sscanf(line,"%u%u%*[^\n] ",&nb_points,&nb_primitives))!=2) { + if ((err = cimg_sscanf(line,"%u%u%*[^\n] ",&nb_points,&nb_primitives))!=2) { if (!file) cimg::fclose(nfile); throw CImgIOException(_cimg_instance "load_off(): Invalid number of vertices or primitives specified in file '%s'.", @@ -40392,12 +45608,12 @@ float X = 0, Y = 0, Z = 0; cimg_forX(*this,l) { do { err = std::fscanf(nfile,"%255[^\n] ",line._data); } while (!err || (err==1 && *line=='#')); - if ((err = std::sscanf(line,"%f%f%f%*[^\n] ",&X,&Y,&Z))!=3) { + if ((err = cimg_sscanf(line,"%f%f%f%*[^\n] ",&X,&Y,&Z))!=3) { if (!file) cimg::fclose(nfile); throw CImgIOException(_cimg_instance "load_off(): Failed to read vertex %u/%u in file '%s'.", cimg_instance, - l+1,nb_points,filename?filename:"(FILE*)"); + l + 1,nb_points,filename?filename:"(FILE*)"); } (*this)(l,0) = (T)X; (*this)(l,1) = (T)Y; (*this)(l,2) = (T)Z; } @@ -40423,7 +45639,7 @@ err = std::fscanf(nfile,"%*[^\n] "); } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); CImg::vector(i0).move_to(primitives); CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); } @@ -40437,7 +45653,7 @@ err = std::fscanf(nfile,"%*[^\n] "); } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); CImg::vector(i0,i1).move_to(primitives); CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); } @@ -40451,7 +45667,7 @@ err = std::fscanf(nfile,"%*[^\n] "); } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); CImg::vector(i0,i2,i1).move_to(primitives); CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); } @@ -40465,7 +45681,7 @@ err = std::fscanf(nfile,"%*[^\n] "); } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); CImg::vector(i0,i3,i2,i1).move_to(primitives); CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255)).move_to(colors); } @@ -40479,7 +45695,7 @@ err = std::fscanf(nfile,"%*[^\n] "); } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); CImg::vector(i0,i3,i2,i1).move_to(primitives); CImg::vector(i0,i4,i3).move_to(primitives); colors.insert(2,CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); @@ -40495,7 +45711,7 @@ err = std::fscanf(nfile,"%*[^\n] "); } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); CImg::vector(i0,i3,i2,i1).move_to(primitives); CImg::vector(i0,i5,i4,i3).move_to(primitives); colors.insert(2,CImg::vector((tc)(c0*255),(tc)(c1*255),(tc)(c2*255))); @@ -40511,7 +45727,7 @@ err = std::fscanf(nfile,"%*[^\n] "); } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); CImg::vector(i0,i4,i3,i1).move_to(primitives); CImg::vector(i0,i6,i5,i4).move_to(primitives); CImg::vector(i3,i2,i1).move_to(primitives); @@ -40528,7 +45744,7 @@ err = std::fscanf(nfile,"%*[^\n] "); } else { - err = std::sscanf(line,"%f%f%f",&c0,&c1,&c2); + err = cimg_sscanf(line,"%f%f%f",&c0,&c1,&c2); CImg::vector(i0,i3,i2,i1).move_to(primitives); CImg::vector(i0,i5,i4,i3).move_to(primitives); CImg::vector(i0,i7,i6,i5).move_to(primitives); @@ -40620,7 +45836,7 @@ "load_graphicsmagick_external(): Specified filename is (null).", cimg_instance); std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - CImg command(1024), filename_tmp(256); *command = *filename_tmp = 0; + CImg command(1024), filename_tmp(256); std::FILE *file = 0; const CImg s_filename = CImg::string(filename)._system_strescape(); #if cimg_OS==1 @@ -40679,7 +45895,7 @@ "load_gzip_external(): Specified filename is (null).", cimg_instance); std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - CImg command(1024), filename_tmp(256), body(256); *command = *filename_tmp = *body = 0; + CImg command(1024), filename_tmp(256), body(256); const char *const ext = cimg::split_filename(filename,body), *const ext2 = cimg::split_filename(body,0); @@ -40732,7 +45948,7 @@ "load_imagemagick_external(): Specified filename is (null).", cimg_instance); std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - CImg command(1024), filename_tmp(256); *command = *filename_tmp = 0; + CImg command(1024), filename_tmp(256); std::FILE *file = 0; const CImg s_filename = CImg::string(filename)._system_strescape(); #if cimg_OS==1 @@ -40795,7 +46011,7 @@ "load_medcon_external(): Specified filename is (null).", cimg_instance); std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - CImg command(1024), filename_tmp(256), body(256); *command = *filename_tmp = *body = 0; + CImg command(1024), filename_tmp(256), body(256); cimg::fclose(cimg::fopen(filename,"r")); std::FILE *file = 0; do { @@ -40845,7 +46061,7 @@ "load_dcraw_external(): Specified filename is (null).", cimg_instance); std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - CImg command(1024), filename_tmp(256); *command = *filename_tmp = 0; + CImg command(1024), filename_tmp(256); std::FILE *file = 0; const CImg s_filename = CImg::string(filename)._system_strescape(); #if cimg_OS==1 @@ -40903,23 +46119,27 @@ const bool release_camera=true, const unsigned int capture_width=0, const unsigned int capture_height=0) { #ifdef cimg_use_opencv - if (camera_index>255) + if (camera_index>99) throw CImgArgumentException(_cimg_instance "load_camera(): Invalid request for camera #%u " - "(no more than 256 cameras can be managed).", + "(no more than 100 cameras can be managed simultaneously).", cimg_instance, camera_index); - static CvCapture *capture[256] = { 0 }; + static CvCapture *capture[100] = { 0 }; + static unsigned int capture_w[100], capture_h[100]; if (release_camera) { cimg::mutex(9); if (capture[camera_index]) cvReleaseCapture(&(capture[camera_index])); capture[camera_index] = 0; + capture_w[camera_index] = capture_h[camera_index] = 0; cimg::mutex(9,0); return *this; } if (!capture[camera_index]) { cimg::mutex(9); capture[camera_index] = cvCreateCameraCapture(camera_index); + capture_w[camera_index] = 0; + capture_h[camera_index] = 0; cimg::mutex(9,0); if (!capture[camera_index]) { throw CImgIOException(_cimg_instance @@ -40929,8 +46149,14 @@ } } cimg::mutex(9); - if (capture_width) cvSetCaptureProperty(capture[camera_index],CV_CAP_PROP_FRAME_WIDTH,capture_width); - if (capture_height) cvSetCaptureProperty(capture[camera_index],CV_CAP_PROP_FRAME_HEIGHT,capture_height); + if (capture_width!=capture_w[camera_index]) { + cvSetCaptureProperty(capture[camera_index],CV_CAP_PROP_FRAME_WIDTH,capture_width); + capture_w[camera_index] = capture_width; + } + if (capture_height!=capture_h[camera_index]) { + cvSetCaptureProperty(capture[camera_index],CV_CAP_PROP_FRAME_HEIGHT,capture_height); + capture_h[camera_index] = capture_height; + } const IplImage *img = 0; for (unsigned int i = 0; i",pixel_type()); + CImg _title(64); + if (!title) cimg_snprintf(_title,_title._width,"CImg<%s>",pixel_type()); std::fprintf(cimg::output(),"%s%s%s%s: %sthis%s = %p, %ssize%s = (%u,%u,%u,%u) [%lu %s], %sdata%s = (%s*)%p", - cimg::t_magenta,cimg::t_bold,title?title:_title,cimg::t_normal, + cimg::t_magenta,cimg::t_bold,title?title:_title._data,cimg::t_normal, cimg::t_bold,cimg::t_normal,(void*)this, cimg::t_bold,cimg::t_normal,_width,_height,_depth,_spectrum, mdisp==0?msiz:(mdisp==1?(msiz>>10):(msiz>>20)), mdisp==0?"b":(mdisp==1?"Kio":"Mio"), cimg::t_bold,cimg::t_normal,pixel_type(),(void*)begin()); - if (_data) std::fprintf(cimg::output(),"..%p (%s) = [ ",(void*)((char*)end()-1),_is_shared?"shared":"non-shared"); + if (_data) + std::fprintf(cimg::output(),"..%p (%s) = [ ",(void*)((char*)end() - 1),_is_shared?"shared":"non-shared"); else std::fprintf(cimg::output()," (%s) = [ ",_is_shared?"shared":"non-shared"); if (!is_empty()) cimg_foroff(*this,off) { std::fprintf(cimg::output(),cimg::type::format(),cimg::type::format(_data[off])); if (off!=siz1) std::fprintf(cimg::output(),"%s",off%_width==width1?" ; ":" "); - if (off==7 && siz>16) { off = siz1-8; std::fprintf(cimg::output(),"... "); } + if (off==7 && siz>16) { off = siz1 - 8; std::fprintf(cimg::output(),"... "); } } if (!is_empty() && display_stats) std::fprintf(cimg::output(), @@ -41081,8 +46308,9 @@ \param disp Display window. \param display_info Tells if image information are displayed on the standard output. **/ - const CImg& display(CImgDisplay &disp, const bool display_info, unsigned int *const XYZ=0) const { - return _display(disp,0,display_info,XYZ,false); + const CImg& display(CImgDisplay &disp, const bool display_info, unsigned int *const XYZ=0, + const bool exit_on_anykey=false) const { + return _display(disp,0,display_info,XYZ,exit_on_anykey,false); } //! Display image into an interactive window. @@ -41090,16 +46318,18 @@ \param title Window title \param display_info Tells if image information are displayed on the standard output. **/ - const CImg& display(const char *const title=0, const bool display_info=true, unsigned int *const XYZ=0) const { + const CImg& display(const char *const title=0, const bool display_info=true, unsigned int *const XYZ=0, + const bool exit_on_anykey=false) const { CImgDisplay disp; - return _display(disp,title,display_info,XYZ,false); + return _display(disp,title,display_info,XYZ,exit_on_anykey,false); } - const CImg& _display(CImgDisplay &disp, const char *const title, - const bool display_info, unsigned int *const XYZ, + const CImg& _display(CImgDisplay &disp, const char *const title, const bool display_info, + unsigned int *const XYZ, const bool exit_on_anykey, const bool exit_on_simpleclick) const { unsigned int oldw = 0, oldh = 0, _XYZ[3] = { 0 }, key = 0; - int x0 = 0, y0 = 0, z0 = 0, x1 = width()-1, y1 = height()-1, z1 = depth()-1; + int x0 = 0, y0 = 0, z0 = 0, x1 = width() - 1, y1 = height() - 1, z1 = depth() - 1, + old_mouse_x = -1, old_mouse_y = -1; if (!disp) { disp.assign(cimg_fitscreen(_width,_height,_depth),title?title:0,1); @@ -41120,11 +46350,11 @@ _XYZ[1] = (unsigned int)(y0 + y1)/2; _XYZ[2] = (unsigned int)(z0 + z1)/2; } - x0 = 0; y0 = 0; z0 = 0; x1 = width()-1; y1 = height()-1; z1 = depth()-1; + x0 = 0; y0 = 0; z0 = 0; x1 = width() - 1; y1 = height() - 1; z1 = depth() - 1; oldw = disp._width; oldh = disp._height; reset_view = false; } - if (!x0 && !y0 && !z0 && x1==width()-1 && y1==height()-1 && z1==depth()-1) { + if (!x0 && !y0 && !z0 && x1==width() - 1 && y1==height() - 1 && z1==depth() - 1) { if (is_empty()) zoom.assign(1,1,1,1,0); else zoom.assign(); } else zoom = get_crop(x0,y0,z0,x1,y1,z1); @@ -41153,18 +46383,25 @@ if (_depth>1 && visu._depth==1) disp.set_title("%s | z=%u",disp._title,z0); if (!is_first_select) { - _XYZ[0] = (unsigned int)(x1-x0)/2; - _XYZ[1] = (unsigned int)(y1-y0)/2; - _XYZ[2] = (unsigned int)(z1-z0)/2; + _XYZ[0] = (unsigned int)(x1 - x0)/2; + _XYZ[1] = (unsigned int)(y1 - y0)/2; + _XYZ[2] = (unsigned int)(z1 - z0)/2; } - const CImg selection = visu._get_select(disp,0,2,_XYZ,x0,y0,z0,is_first_select,_depth>1); + + disp._mouse_x = old_mouse_x; disp._mouse_y = old_mouse_y; + const CImg selection = visu._get_select(disp,0,2,_XYZ,x0,y0,z0,true,is_first_select,_depth>1); + old_mouse_x = disp._mouse_x; old_mouse_y = disp._mouse_y; is_first_select = false; if (disp.wheel()) { if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { + go_down = !(go_up = disp.wheel()>0); + } else if (disp.is_keySHIFTLEFT() || disp.is_keySHIFTRIGHT()) { + go_left = !(go_right = disp.wheel()>0); + } + else if (disp.is_keyALT() || disp.is_keyALTGR() || _depth==1) { go_out = !(go_in = disp.wheel()>0); go_in_center = false; - } else if (disp.is_keySHIFTLEFT() || disp.is_keySHIFTRIGHT()) { go_left = !(go_right = disp.wheel()>0); } - else if (disp.is_keyALT() || disp.is_keyALTGR() || _depth==1) { go_down = !(go_up = disp.wheel()>0); } + } disp.set_wheel(); } @@ -41190,8 +46427,8 @@ case cimg::keyP : if (visu._depth>1 && (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT())) { // Special mode: play stack of frames const unsigned int - w1 = visu._width*disp.width()/(visu._width+(visu._depth>1?visu._depth:0)), - h1 = visu._height*disp.height()/(visu._height+(visu._depth>1?visu._depth:0)); + w1 = visu._width*disp.width()/(visu._width + (visu._depth>1?visu._depth:0)), + h1 = visu._height*disp.height()/(visu._height + (visu._depth>1?visu._depth:0)); float frame_timing = 5; bool is_stopped = false; disp.set_key(key,false).set_wheel().resize(cimg_fitscreen(w1,h1,1),false); key = 0; @@ -41213,7 +46450,7 @@ case cimg::keySPACE : is_stopped = !is_stopped; disp.set_key(key,false); key = 0; break; case cimg::keyARROWLEFT : case cimg::keyARROWUP : is_stopped = true; timer = 0; key = 0; break; case cimg::keyARROWRIGHT : case cimg::keyARROWDOWN : is_stopped = true; - (_XYZ[2]+=visu._depth-2)%=visu._depth; timer = 0; key = 0; break; + (_XYZ[2]+=visu._depth - 2)%=visu._depth; timer = 0; key = 0; break; case cimg::keyD : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { disp.set_fullscreen(false). resize(CImgDisplay::_fitscreen(3*disp.width()/2,3*disp.height()/2,1,128,-100,false), @@ -41264,21 +46501,21 @@ mY = my*(height() + (depth()>1?depth():0))/disp.height(); int X = (int)_XYZ[0], Y = (int)_XYZ[1], Z = (int)_XYZ[2]; if (mX=height()) { - X = x0 + mX*(1+x1-x0)/width(); Z = z0 + (mY-height())*(1+z1-z0)/depth(); Y = (int)_XYZ[1]; + X = x0 + mX*(1 + x1 - x0)/width(); Z = z0 + (mY - height())*(1 + z1 - z0)/depth(); Y = (int)_XYZ[1]; } if (mX>=width() && mY4) { x0 = X - 3*(X-x0)/4; x1 = X + 3*(x1-X)/4; } - if (y1-y0>4) { y0 = Y - 3*(Y-y0)/4; y1 = Y + 3*(y1-Y)/4; } - if (z1-z0>4) { z0 = Z - 3*(Z-z0)/4; z1 = Z + 3*(z1-Z)/4; } + if (x1 - x0>4) { x0 = X - 3*(X - x0)/4; x1 = X + 3*(x1 - X)/4; } + if (y1 - y0>4) { y0 = Y - 3*(Y - y0)/4; y1 = Y + 3*(y1 - Y)/4; } + if (z1 - z0>4) { z0 = Z - 3*(Z - z0)/4; z1 = Z + 3*(z1 - Z)/4; } } if (go_out) { const int - delta_x = (x1-x0)/8, delta_y = (y1-y0)/8, delta_z = (z1-z0)/8, + delta_x = (x1 - x0)/8, delta_y = (y1 - y0)/8, delta_z = (z1 - z0)/8, ndelta_x = delta_x?delta_x:(_width>1?1:0), ndelta_y = delta_y?delta_y:(_height>1?1:0), ndelta_z = delta_z?delta_z:(_depth>1?1:0); @@ -41287,41 +46524,45 @@ if (x0<0) { x1-=x0; x0 = 0; if (x1>=width()) x1 = width() - 1; } if (y0<0) { y1-=y0; y0 = 0; if (y1>=height()) y1 = height() - 1; } if (z0<0) { z1-=z0; z0 = 0; if (z1>=depth()) z1 = depth() - 1; } - if (x1>=width()) { x0-=(x1-width()+1); x1 = width()-1; if (x0<0) x0 = 0; } - if (y1>=height()) { y0-=(y1-height()+1); y1 = height()-1; if (y0<0) y0 = 0; } - if (z1>=depth()) { z0-=(z1-depth()+1); z1 = depth()-1; if (z0<0) z0 = 0; } + if (x1>=width()) { x0-=(x1 - width() + 1); x1 = width() - 1; if (x0<0) x0 = 0; } + if (y1>=height()) { y0-=(y1 - height() + 1); y1 = height() - 1; if (y0<0) y0 = 0; } + if (z1>=depth()) { z0-=(z1 - depth() + 1); z1 = depth() - 1; if (z0<0) z0 = 0; } } if (go_left) { - const int delta = (x1-x0)/4, ndelta = delta?delta:(_width>1?1:0); - if (x0-ndelta>=0) { x0-=ndelta; x1-=ndelta; } + const int delta = (x1 - x0)/4, ndelta = delta?delta:(_width>1?1:0); + if (x0 - ndelta>=0) { x0-=ndelta; x1-=ndelta; } else { x1-=x0; x0 = 0; } } if (go_right) { - const int delta = (x1-x0)/4, ndelta = delta?delta:(_width>1?1:0); + const int delta = (x1 - x0)/4, ndelta = delta?delta:(_width>1?1:0); if (x1+ndelta1?1:0); - if (y0-ndelta>=0) { y0-=ndelta; y1-=ndelta; } + const int delta = (y1 - y0)/4, ndelta = delta?delta:(_height>1?1:0); + if (y0 - ndelta>=0) { y0-=ndelta; y1-=ndelta; } else { y1-=y0; y0 = 0; } } if (go_down) { - const int delta = (y1-y0)/4, ndelta = delta?delta:(_height>1?1:0); + const int delta = (y1 - y0)/4, ndelta = delta?delta:(_height>1?1:0); if (y1+ndelta1?1:0); - if (z0-ndelta>=0) { z0-=ndelta; z1-=ndelta; } + const int delta = (z1 - z0)/4, ndelta = delta?delta:(_depth>1?1:0); + if (z0 - ndelta>=0) { z0-=ndelta; z1-=ndelta; } else { z1-=z0; z0 = 0; } } if (go_dec) { - const int delta = (z1-z0)/4, ndelta = delta?delta:(_depth>1?1:0); + const int delta = (z1 - z0)/4, ndelta = delta?delta:(_depth>1?1:0); if (z1+ndelta(),centering, render_static,render_motion,is_double_sided,focale, light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); + display_axes,pose_matrix,exit_on_anykey); } //! Display object 3d in an interactive window \simplification. @@ -41415,11 +46659,12 @@ const bool is_double_sided=true, const float focale=700, const float light_x=0, const float light_y=0, const float light_z=-5e8f, const float specular_lightness=0.2f, const float specular_shininess=0.1f, - const bool display_axes=true, float *const pose_matrix=0) const { + const bool display_axes=true, float *const pose_matrix=0, + const bool exit_on_anykey=false) const { return display_object3d(title,vertices,primitives,colors,CImgList(),centering, render_static,render_motion,is_double_sided,focale, light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); + display_axes,pose_matrix,exit_on_anykey); } //! Display object 3d in an interactive window \simplification. @@ -41432,11 +46677,12 @@ const bool is_double_sided=true, const float focale=700, const float light_x=0, const float light_y=0, const float light_z=-5e8f, const float specular_lightness=0.2f, const float specular_shininess=0.1f, - const bool display_axes=true, float *const pose_matrix=0) const { + const bool display_axes=true, float *const pose_matrix=0, + const bool exit_on_anykey=false) const { return display_object3d(disp,vertices,primitives,CImgList(),centering, render_static,render_motion,is_double_sided,focale, light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); + display_axes,pose_matrix,exit_on_anykey); } @@ -41450,11 +46696,12 @@ const bool is_double_sided=true, const float focale=700, const float light_x=0, const float light_y=0, const float light_z=-5e8f, const float specular_lightness=0.2f, const float specular_shininess=0.1f, - const bool display_axes=true, float *const pose_matrix=0) const { + const bool display_axes=true, float *const pose_matrix=0, + const bool exit_on_anykey=false) const { return display_object3d(title,vertices,primitives,CImgList(),centering, render_static,render_motion,is_double_sided,focale, light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); + display_axes,pose_matrix,exit_on_anykey); } //! Display object 3d in an interactive window \simplification. @@ -41466,11 +46713,12 @@ const bool is_double_sided=true, const float focale=700, const float light_x=0, const float light_y=0, const float light_z=-5e8f, const float specular_lightness=0.2f, const float specular_shininess=0.1f, - const bool display_axes=true, float *const pose_matrix=0) const { + const bool display_axes=true, float *const pose_matrix=0, + const bool exit_on_anykey=false) const { return display_object3d(disp,vertices,CImgList(),centering, render_static,render_motion,is_double_sided,focale, light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); + display_axes,pose_matrix,exit_on_anykey); } //! Display object 3d in an interactive window \simplification. @@ -41482,11 +46730,12 @@ const bool is_double_sided=true, const float focale=700, const float light_x=0, const float light_y=0, const float light_z=-5e8f, const float specular_lightness=0.2f, const float specular_shininess=0.1f, - const bool display_axes=true, float *const pose_matrix=0) const { + const bool display_axes=true, float *const pose_matrix=0, + const bool exit_on_anykey=false) const { return display_object3d(title,vertices,CImgList(),centering, render_static,render_motion,is_double_sided,focale, light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); + display_axes,pose_matrix,exit_on_anykey); } template @@ -41500,7 +46749,8 @@ const bool is_double_sided, const float focale, const float light_x, const float light_y, const float light_z, const float specular_lightness, const float specular_shininess, - const bool display_axes, float *const pose_matrix) const { + const bool display_axes, float *const pose_matrix, + const bool exit_on_anykey) const { typedef typename cimg::superset::type tpfloat; // Check input arguments @@ -41509,17 +46759,16 @@ _display_object3d(disp,title,vertices,primitives,colors,opacities,centering, render_static,render_motion,is_double_sided,focale, light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); + display_axes,pose_matrix,exit_on_anykey); else return CImg(1,2,1,1,64,128).resize(cimg_fitscreen(CImgDisplay::screen_width()/2, CImgDisplay::screen_height()/2,1), 1,(colors && colors[0].size()==1)?1:3,3). _display_object3d(disp,title,vertices,primitives,colors,opacities,centering, render_static,render_motion,is_double_sided,focale, light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); + display_axes,pose_matrix,exit_on_anykey); } else { if (disp) disp.resize(*this,false); } CImg error_message(1024); - *error_message = 0; if (!vertices.is_object3d(primitives,colors,opacities,true,error_message)) throw CImgArgumentException(_cimg_instance "display_object3d(): Invalid specified 3d object (%u,%u) (%s).", @@ -41530,7 +46779,7 @@ return _display_object3d(disp,title,vertices,nprimitives,colors,opacities,centering, render_static,render_motion,is_double_sided,focale, light_x,light_y,light_z,specular_lightness,specular_shininess, - display_axes,pose_matrix); + display_axes,pose_matrix,exit_on_anykey); } if (!disp) { disp.assign(cimg_fitscreen(_width,_height,_depth),title?title:0,3); @@ -41559,7 +46808,7 @@ xm = 0, xM = vertices?vertices.get_shared_row(0).max_min(xm):0, ym = 0, yM = vertices?vertices.get_shared_row(1).max_min(ym):0, zm = 0, zM = vertices?vertices.get_shared_row(2).max_min(zm):0; - const float delta = cimg::max(xM-xm,yM-ym,zM-zm); + const float delta = cimg::max(xM - xm,yM - ym,zM - zm); rotated_bbox_vertices = bbox_vertices.assign(8,3,1,1, xm,xM,xM,xm,xm,xM,xM,xm, @@ -41631,11 +46880,11 @@ } // Draw objects -#ifdef cimg_use_openmp - const bool render_with_zbuffer = true; -#else + //#ifdef cimg_use_openmp + // const bool render_with_zbuffer = true; + //#else const bool render_with_zbuffer = !clicked && nrender_static>0; -#endif + //#endif visu = visu0; if ((clicked && nrender_motion<0) || (!clicked && nrender_static<0)) visu.draw_object3d(Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, @@ -41646,7 +46895,7 @@ Xoff + visu._width/2.0f,Yoff + visu._height/2.0f,Zoff, rotated_vertices,reverse_primitives?reverse_primitives:primitives, colors,opacities,clicked?nrender_motion:nrender_static,_is_double_sided==1,focale, - width()/2.0f+light_x,height()/2.0f+light_y,light_z+Zoff, + width()/2.0f + light_x,height()/2.0f + light_y,light_z + Zoff, specular_lightness,specular_shininess,sprite_scale); // Draw axes if (ndisplay_axes) { @@ -41670,14 +46919,14 @@ axes_opacities(2,0) = (rotated_axes_vertices(3,2)>0)?0.5f:1.0f; visu.draw_object3d(Xaxes,Yaxes,0,rotated_axes_vertices,axes_primitives, axes_colors,axes_opacities,1,false,focale). - draw_text((int)(Xaxes+rotated_axes_vertices(4,0)), - (int)(Yaxes+rotated_axes_vertices(4,1)), + draw_text((int)(Xaxes + rotated_axes_vertices(4,0)), + (int)(Yaxes + rotated_axes_vertices(4,1)), "X",axes_colors[0]._data,0,axes_opacities(0,0),13). - draw_text((int)(Xaxes+rotated_axes_vertices(5,0)), - (int)(Yaxes+rotated_axes_vertices(5,1)), + draw_text((int)(Xaxes + rotated_axes_vertices(5,0)), + (int)(Yaxes + rotated_axes_vertices(5,1)), "Y",axes_colors[1]._data,0,axes_opacities(1,0),13). - draw_text((int)(Xaxes+rotated_axes_vertices(6,0)), - (int)(Yaxes+rotated_axes_vertices(6,1)), + draw_text((int)(Xaxes + rotated_axes_vertices(6,0)), + (int)(Yaxes + rotated_axes_vertices(6,1)), "Z",axes_colors[2]._data,0,axes_opacities(2,0),13); } visu.display(disp); @@ -41694,29 +46943,29 @@ const float R = 0.45f*cimg::min(disp.width(),disp.height()), R2 = R*R, - u0 = (float)(x0-disp.width()/2), - v0 = (float)(y0-disp.height()/2), - u1 = (float)(x1-disp.width()/2), - v1 = (float)(y1-disp.height()/2), - n0 = (float)std::sqrt(u0*u0+v0*v0), - n1 = (float)std::sqrt(u1*u1+v1*v1), + u0 = (float)(x0 - disp.width()/2), + v0 = (float)(y0 - disp.height()/2), + u1 = (float)(x1 - disp.width()/2), + v1 = (float)(y1 - disp.height()/2), + n0 = (float)std::sqrt(u0*u0 + v0*v0), + n1 = (float)std::sqrt(u1*u1 + v1*v1), nu0 = n0>R?(u0*R/n0):u0, nv0 = n0>R?(v0*R/n0):v0, - nw0 = (float)std::sqrt(cimg::max(0,R2-nu0*nu0-nv0*nv0)), + nw0 = (float)std::sqrt(cimg::max(0,R2 - nu0*nu0 - nv0*nv0)), nu1 = n1>R?(u1*R/n1):u1, nv1 = n1>R?(v1*R/n1):v1, - nw1 = (float)std::sqrt(cimg::max(0,R2-nu1*nu1-nv1*nv1)), - u = nv0*nw1-nw0*nv1, - v = nw0*nu1-nu0*nw1, - w = nv0*nu1-nu0*nv1, - n = (float)std::sqrt(u*u+v*v+w*w), + nw1 = (float)std::sqrt(cimg::max(0,R2 - nu1*nu1 - nv1*nv1)), + u = nv0*nw1 - nw0*nv1, + v = nw0*nu1 - nu0*nw1, + w = nv0*nu1 - nu0*nv1, + n = (float)std::sqrt(u*u + v*v + w*w), alpha = (float)std::asin(n/R2); (CImg::rotation_matrix(u,v,w,alpha)*pose).move_to(pose); x0 = x1; y0 = y1; } if (disp.button()&2) { - if (focale>0) Zoff-=(y0-y1)*focale/400; - else { const float s = std::exp((y0-y1)/400.0f); pose*=s; sprite_scale*=s; } + if (focale>0) Zoff-=(y0 - y1)*focale/400; + else { const float s = std::exp((y0 - y1)/400.0f); pose*=s; sprite_scale*=s; } x0 = x1; y0 = y1; } if (disp.wheel()) { @@ -41724,13 +46973,14 @@ else { const float s = std::exp(disp.wheel()/20.0f); pose*=s; sprite_scale*=s; } disp.set_wheel(); } - if (disp.button()&4) { Xoff+=(x1-x0); Yoff+=(y1-y0); x0 = x1; y0 = y1; } + if (disp.button()&4) { Xoff+=(x1 - x0); Yoff+=(y1 - y0); x0 = x1; y0 = y1; } if ((disp.button()&1) && (disp.button()&2)) { init_pose = true; disp.set_button(); x0 = x1; y0 = y1; pose = CImg(4,3,1,1, 1,0,0,0, 0,1,0,0, 0,0,1,0); } } else if (clicked) { x0 = x1; y0 = y1; clicked = false; redraw = true; } + CImg filename(32); switch (key = disp.key()) { #if cimg_OS!=2 case cimg::keyCTRLRIGHT : @@ -41809,43 +47059,40 @@ } break; case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save snapshot static unsigned int snap_number = 0; - char filename[32] = { 0 }; std::FILE *file; do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.bmp",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.bmp",snap_number++); if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); } while (file); (+visu).draw_text(0,0," Saving snapshot... ", foreground_color._data,background_color._data,0.7f,13).display(disp); visu.save(filename); (+visu).draw_text(0,0," Snapshot '%s' saved. ", - foreground_color._data,background_color._data,0.7f,13,filename).display(disp); + foreground_color._data,background_color._data,0.7f,13,filename._data).display(disp); disp.set_key(key,false); key = 0; } break; case cimg::keyG : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save object as a .off file static unsigned int snap_number = 0; - char filename[32] = { 0 }; std::FILE *file; do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.off",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.off",snap_number++); if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); } while (file); (+visu).draw_text(0,0," Saving object... ", foreground_color._data,background_color._data,0.7f,13).display(disp); vertices.save_off(reverse_primitives?reverse_primitives:primitives,colors,filename); (+visu).draw_text(0,0," Object '%s' saved. ", - foreground_color._data,background_color._data,0.7f,13,filename).display(disp); + foreground_color._data,background_color._data,0.7f,13,filename._data).display(disp); disp.set_key(key,false); key = 0; } break; case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save object as a .cimg file static unsigned int snap_number = 0; - char filename[32] = { 0 }; std::FILE *file; do { #ifdef cimg_use_zlib - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimgz",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimgz",snap_number++); #else - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimg",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimg",snap_number++); #endif if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); } while (file); @@ -41854,16 +47101,15 @@ vertices.get_object3dtoCImg3d(reverse_primitives?reverse_primitives:primitives,colors,opacities). save(filename); (+visu).draw_text(0,0," Object '%s' saved. ", - foreground_color._data,background_color._data,0.7f,13,filename).display(disp); + foreground_color._data,background_color._data,0.7f,13,filename._data).display(disp); disp.set_key(key,false); key = 0; } break; #ifdef cimg_use_board case cimg::keyP : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save object as a .EPS file static unsigned int snap_number = 0; - char filename[32] = { 0 }; std::FILE *file; do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.eps",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.eps",snap_number++); if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); } while (file); (+visu).draw_text(0,0," Saving EPS snapshot... ", @@ -41874,20 +47120,19 @@ rotated_vertices,reverse_primitives?reverse_primitives:primitives, colors,opacities,clicked?nrender_motion:nrender_static, _is_double_sided==1,focale, - visu.width()/2.0f+light_x,visu.height()/2.0f+light_y,light_z+Zoff, + visu.width()/2.0f + light_x,visu.height()/2.0f + light_y,light_z + Zoff, specular_lightness,specular_shininess, sprite_scale); board.saveEPS(filename); (+visu).draw_text(0,0," Object '%s' saved. ", - foreground_color._data,background_color._data,0.7f,13,filename).display(disp); + foreground_color._data,background_color._data,0.7f,13,filename._data).display(disp); disp.set_key(key,false); key = 0; } break; case cimg::keyV : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { // Save object as a .SVG file static unsigned int snap_number = 0; - char filename[32] = { 0 }; std::FILE *file; do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.svg",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.svg",snap_number++); if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); } while (file); (+visu).draw_text(0,0," Saving SVG snapshot... ", @@ -41898,12 +47143,12 @@ rotated_vertices,reverse_primitives?reverse_primitives:primitives, colors,opacities,clicked?nrender_motion:nrender_static, _is_double_sided==1,focale, - visu.width()/2.0f+light_x,visu.height()/2.0f+light_y,light_z+Zoff, + visu.width()/2.0f + light_x,visu.height()/2.0f + light_y,light_z + Zoff, specular_lightness,specular_shininess, sprite_scale); board.saveSVG(filename); (+visu).draw_text(0,0," Object '%s' saved. ", - foreground_color._data,background_color._data,0.7f,13,filename).display(disp); + foreground_color._data,background_color._data,0.7f,13,filename._data).display(disp); disp.set_key(key,false); key = 0; } break; #endif @@ -41913,6 +47158,10 @@ if (zbuffer) zbuffer.assign(disp.width(),disp.height()); redraw = true; } + if (!exit_on_anykey && key && key!=cimg::keyESC && + (key!=cimg::keyW || (!disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT()))) { + key = 0; + } } if (pose_matrix) { std::memcpy(pose_matrix,pose._data,12*sizeof(float)); @@ -41937,30 +47186,33 @@ const CImg& display_graph(CImgDisplay &disp, const unsigned int plot_type=1, const unsigned int vertex_type=1, const char *const labelx=0, const double xmin=0, const double xmax=0, - const char *const labely=0, const double ymin=0, const double ymax=0) const { - return _display_graph(disp,0,plot_type,vertex_type,labelx,xmin,xmax,labely,ymin,ymax); + const char *const labely=0, const double ymin=0, const double ymax=0, + const bool exit_on_anykey=false) const { + return _display_graph(disp,0,plot_type,vertex_type,labelx,xmin,xmax,labely,ymin,ymax,exit_on_anykey); } //! Display 1d graph in an interactive window \overloading. const CImg& display_graph(const char *const title=0, const unsigned int plot_type=1, const unsigned int vertex_type=1, const char *const labelx=0, const double xmin=0, const double xmax=0, - const char *const labely=0, const double ymin=0, const double ymax=0) const { + const char *const labely=0, const double ymin=0, const double ymax=0, + const bool exit_on_anykey=false) const { CImgDisplay disp; - return _display_graph(disp,title,plot_type,vertex_type,labelx,xmin,xmax,labely,ymin,ymax); + return _display_graph(disp,title,plot_type,vertex_type,labelx,xmin,xmax,labely,ymin,ymax,exit_on_anykey); } const CImg& _display_graph(CImgDisplay &disp, const char *const title=0, - const unsigned int plot_type=1, const unsigned int vertex_type=1, - const char *const labelx=0, const double xmin=0, const double xmax=0, - const char *const labely=0, const double ymin=0, const double ymax=0) const { + const unsigned int plot_type=1, const unsigned int vertex_type=1, + const char *const labelx=0, const double xmin=0, const double xmax=0, + const char *const labely=0, const double ymin=0, const double ymax=0, + const bool exit_on_anykey=false) const { if (is_empty()) throw CImgInstanceException(_cimg_instance "display_graph(): Empty instance.", cimg_instance); if (!disp) disp.assign(cimg_fitscreen(CImgDisplay::screen_width()/2,CImgDisplay::screen_height()/2,1),0,0). set_title(title?"%s":"CImg<%s>",title?title:pixel_type()); - const unsigned long siz = (unsigned long)_width*_height*_depth, siz1 = cimg::max(1U,siz-1); + const unsigned long siz = (unsigned long)_width*_height*_depth, siz1 = cimg::max(1U,siz - 1); const unsigned int old_normalization = disp.normalization(); disp.show().flush()._normalization = 0; @@ -41969,25 +47221,25 @@ int x0 = 0, x1 = width()*height()*depth() - 1, key = 0; for (bool reset_view = true; !key && !disp.is_closed(); ) { - if (reset_view) { x0 = 0; x1 = width()*height()*depth()-1; y0 = ymin; y1 = ymax; reset_view = false; } - CImg zoom(x1-x0+1,1,1,spectrum()); - cimg_forC(*this,c) zoom.get_shared_channel(c) = CImg(data(x0,0,0,c),x1-x0+1,1,1,1,true); + if (reset_view) { x0 = 0; x1 = width()*height()*depth() - 1; y0 = ymin; y1 = ymax; reset_view = false; } + CImg zoom(x1 - x0 + 1,1,1,spectrum()); + cimg_forC(*this,c) zoom.get_shared_channel(c) = CImg(data(x0,0,0,c),x1 - x0 + 1,1,1,1,true); if (y0==y1) { y0 = zoom.min_max(y1); const double dy = y1 - y0; y0-=dy/20; y1+=dy/20; } if (y0==y1) { --y0; ++y1; } const CImg selection = zoom.get_select_graph(disp,plot_type,vertex_type, labelx, - nxmin + x0*(nxmax-nxmin)/siz1, - nxmin + x1*(nxmax-nxmin)/siz1, - labely,y0,y1); + nxmin + x0*(nxmax - nxmin)/siz1, + nxmin + x1*(nxmax - nxmin)/siz1, + labely,y0,y1,true); const int mouse_x = disp.mouse_x(), mouse_y = disp.mouse_y(); if (selection[0]>=0) { if (selection[2]<0) reset_view = true; else { x1 = x0 + selection[2]; x0+=selection[0]; if (selection[1]>=0 && selection[3]>=0) { - y0 = y1 - selection[3]*(y1-y0)/(disp.height()-32); - y1-=selection[1]*(y1-y0)/(disp.height()-32); + y0 = y1 - selection[3]*(y1 - y0)/(disp.height() - 32); + y1-=selection[1]*(y1 - y0)/(disp.height() - 32); } } } else { @@ -42008,41 +47260,41 @@ case cimg::keyPAD3 : go_right = true; go_down = true; key = 0; disp.set_key(); break; } if (disp.wheel()) { - if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) go_out = !(go_in = disp.wheel()>0); + if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) go_up = !(go_down = disp.wheel()<0); else if (disp.is_keySHIFTLEFT() || disp.is_keySHIFTRIGHT()) go_left = !(go_right = disp.wheel()>0); - else go_up = !(go_down = disp.wheel()<0); + else go_out = !(go_in = disp.wheel()>0); key = 0; } if (go_in) { const int xsiz = x1 - x0, - mx = (mouse_x-16)*xsiz/(disp.width()-32), + mx = (mouse_x - 16)*xsiz/(disp.width() - 32), cx = x0 + (mx<0?0:(mx>=xsiz?xsiz:mx)); - if (x1-x0>4) { - x0 = cx - 7*(cx-x0)/8; x1 = cx + 7*(x1-cx)/8; + if (x1 - x0>4) { + x0 = cx - 7*(cx - x0)/8; x1 = cx + 7*(x1 - cx)/8; if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { const double ysiz = y1 - y0, - my = (mouse_y-16)*ysiz/(disp.height()-32), + my = (mouse_y - 16)*ysiz/(disp.height() - 32), cy = y1 - (my<0?0:(my>=ysiz?ysiz:my)); - y0 = cy - 7*(cy-y0)/8; y1 = cy + 7*(y1-cy)/8; + y0 = cy - 7*(cy - y0)/8; y1 = cy + 7*(y1 - cy)/8; } else y0 = y1 = 0; } } if (go_out) { if (x0>0 || x1<(int)siz1) { - const int delta_x = (x1-x0)/8, ndelta_x = delta_x?delta_x:(siz>1?1:0); - const double ndelta_y = (y1-y0)/8; + const int delta_x = (x1 - x0)/8, ndelta_x = delta_x?delta_x:(siz>1?1:0); + const double ndelta_y = (y1 - y0)/8; x0-=ndelta_x; x1+=ndelta_x; y0-=ndelta_y; y1+=ndelta_y; if (x0<0) { x1-=x0; x0 = 0; if (x1>=(int)siz) x1 = (int)siz1; } - if (x1>=(int)siz) { x0-=(x1-siz1); x1 = (int)siz1; if (x0<0) x0 = 0; } + if (x1>=(int)siz) { x0-=(x1 - siz1); x1 = (int)siz1; if (x0<0) x0 = 0; } } } if (go_left) { - const int delta = (x1-x0)/5, ndelta = delta?delta:1; - if (x0-ndelta>=0) { x0-=ndelta; x1-=ndelta; } + const int delta = (x1 - x0)/5, ndelta = delta?delta:1; + if (x0 - ndelta>=0) { x0-=ndelta; x1-=ndelta; } else { x1-=x0; x0 = 0; } go_left = false; } @@ -42053,16 +47305,21 @@ go_right = false; } if (go_up) { - const double delta = (y1-y0)/10, ndelta = delta?delta:1; + const double delta = (y1 - y0)/10, ndelta = delta?delta:1; y0+=ndelta; y1+=ndelta; go_up = false; } if (go_down) { - const double delta = (y1-y0)/10, ndelta = delta?delta:1; + const double delta = (y1 - y0)/10, ndelta = delta?delta:1; y0-=ndelta; y1-=ndelta; go_down = false; } } + if (!exit_on_anykey && key && key!=(int)cimg::keyESC && + (key!=(int)cimg::keyW || (!disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT()))) { + disp.set_key(key,false); + key = 0; + } } disp._normalization = old_normalization; return *this; @@ -42086,7 +47343,7 @@ // Do not test for empty instances, since .cimg format is able to manage empty instances. const bool is_stdout = *filename=='-' && (!filename[1] || filename[1]=='.'); const char *const ext = cimg::split_filename(filename); - CImg nfilename(1024); *nfilename = 0; + CImg nfilename(1024); const char *const fn = is_stdout?filename:(number>=0)?cimg::number_filename(filename,number,digits,nfilename): filename; @@ -42236,17 +47493,17 @@ cimg_instance); std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); CImg varname(1024); *varname = 0; - if (filename) std::sscanf(cimg::basename(filename),"%1023[a-zA-Z0-9_]",varname._data); + if (filename) cimg_sscanf(cimg::basename(filename),"%1023[a-zA-Z0-9_]",varname._data); if (!*varname) cimg_snprintf(varname,varname._width,"unnamed"); std::fprintf(nfile, "/* Define image '%s' of size %ux%ux%ux%u and type '%s' */\n" "%s data_%s[] = { %s\n ", varname._data,_width,_height,_depth,_spectrum,pixel_type(),pixel_type(),varname._data, is_empty()?"};":""); - if (!is_empty()) for (unsigned long off = 0, siz = size()-1; off<=siz; ++off) { + if (!is_empty()) for (unsigned long off = 0, siz = size() - 1; off<=siz; ++off) { std::fprintf(nfile,cimg::type::format(),cimg::type::format((*this)[off])); if (off==siz) std::fprintf(nfile," };\n"); - else if (!((off+1)%16)) std::fprintf(nfile,",\n "); + else if (!((off + 1)%16)) std::fprintf(nfile,",\n "); else std::fprintf(nfile,", "); } if (!file) cimg::fclose(nfile); @@ -42286,7 +47543,7 @@ std::FILE *const nfile = file?file:cimg::fopen(filename,"w"); const T* ptrs = _data; cimg_forYZC(*this,y,z,c) { - cimg_forX(*this,x) std::fprintf(nfile,"%.16g%s",(double)*(ptrs++),(x==width()-1)?"":","); + cimg_forX(*this,x) std::fprintf(nfile,"%.16g%s",(double)*(ptrs++),(x==width() - 1)?"":","); std::fputc('\n',nfile); } if (!file) cimg::fclose(nfile); @@ -42324,7 +47581,8 @@ filename?filename:"(FILE*)"); std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - unsigned char header[54] = { 0 }, align_buf[4] = { 0 }; + CImg header(54,1,1,1,0); + unsigned char align_buf[4] = { 0 }; const unsigned int align = (4 - (3*_width)%4)%4, buf_size = (3*_width + align)*height(), @@ -42354,12 +47612,12 @@ header[0x25] = (buf_size>>24)&0xFF; header[0x27] = 0x1; header[0x2B] = 0x1; - cimg::fwrite(header,54,nfile); + cimg::fwrite(header._data,54,nfile); const T - *ptr_r = data(0,_height-1,0,0), - *ptr_g = (_spectrum>=2)?data(0,_height-1,0,1):0, - *ptr_b = (_spectrum>=3)?data(0,_height-1,0,2):0; + *ptr_r = data(0,_height - 1,0,0), + *ptr_g = (_spectrum>=2)?data(0,_height - 1,0,1):0, + *ptr_b = (_spectrum>=3)?data(0,_height - 1,0,2):0; switch (_spectrum) { case 1 : { @@ -42434,7 +47692,7 @@ unsigned int dimbuf = 0; J_COLOR_SPACE colortype = JCS_RGB; - switch(_spectrum) { + switch (_spectrum) { case 1 : dimbuf = 1; colortype = JCS_GRAYSCALE; break; case 2 : dimbuf = 3; colortype = JCS_RGB; break; case 3 : dimbuf = 3; colortype = JCS_RGB; break; @@ -42466,13 +47724,13 @@ switch (_spectrum) { case 1 : { // Greyscale images const T *ptr_g = data(0, cinfo.next_scanline); - for(unsigned int b = 0; b < cinfo.image_width; b++) + for (unsigned int b = 0; b>3; const int numChan = spectrum()>4?4:spectrum(); - const int pixel_bit_depth_flag = numChan * (bit_depth-1); + const int pixel_bit_depth_flag = numChan * (bit_depth - 1); // Allocate Memory for Image Save and Fill pixel data png_bytep *const imgData = new png_byte*[_height]; @@ -43235,11 +48493,12 @@ - When libtiff is enabled, 2D and 3D (multipage) several channel per pixel are supported for char,uchar,short,ushort,float and \c double pixel types. - - If \c cimg_use_tif is not defined at compilation time the + - If \c cimg_use_tif is not defined at compile time the function uses CImg&save_other(const char*). **/ const CImg& save_tiff(const char *const filename, const unsigned int compression_type=0, - const float *const voxel_size=0, const char *const description=0) const { + const float *const voxel_size=0, const char *const description=0, + const bool is_bigtiff=true) const { if (!filename) throw CImgArgumentException(_cimg_instance "save_tiff(): Specified filename is (null).", @@ -43247,7 +48506,7 @@ if (is_empty()) { cimg::fempty(0,filename); return *this; } #ifdef cimg_use_tiff - TIFF *tif = TIFFOpen(filename,"w"); + TIFF *tif = TIFFOpen(filename,is_bigtiff?"w8":"w4"); if (tif) { cimg_forZ(*this,z) get_slice(z)._save_tiff(tif,z,compression_type,voxel_size,description); TIFFClose(tif); @@ -43257,7 +48516,7 @@ filename); return *this; #else - cimg::unused(compression_type,voxel_size,description); + cimg::unused(compression_type,voxel_size,description,is_bigtiff); return save_other(filename); #endif } @@ -43308,7 +48567,7 @@ t *const buf = (t*)_TIFFmalloc(TIFFStripSize(tif)); if (buf) { for (unsigned int row = 0; row<_height; row+=rowsperstrip) { - uint32 nrow = (row + rowsperstrip>_height?_height-row:rowsperstrip); + uint32 nrow = (row + rowsperstrip>_height?_height - row:rowsperstrip); tstrip_t strip = TIFFComputeStrip(tif,row,0); tsize_t i = 0; for (unsigned int rr = 0; rr hname(1024), iname(1024); *hname = *iname = 0; + CImg header(348,1,1,1,0), hname(1024), iname(1024); const char *const ext = cimg::split_filename(filename); - short datatype=-1; - std::memset(header,0,348); + short datatype = -1; if (!*ext) { cimg_snprintf(hname,hname._width,"%s.hdr",filename); cimg_snprintf(iname,iname._width,"%s.img",filename); } if (!cimg::strncasecmp(ext,"hdr",3)) { std::strcpy(hname,filename); - std::strncpy(iname,filename,iname._width-1); - std::sprintf(iname._data + std::strlen(iname)-3,"img"); + std::strncpy(iname,filename,iname._width - 1); + cimg_sprintf(iname._data + std::strlen(iname) - 3,"img"); } if (!cimg::strncasecmp(ext,"img",3)) { std::strcpy(hname,filename); - std::strncpy(iname,filename,iname._width-1); - std::sprintf(hname._data + std::strlen(iname)-3,"hdr"); + std::strncpy(iname,filename,iname._width - 1); + cimg_sprintf(hname._data + std::strlen(iname) - 3,"hdr"); } if (!cimg::strncasecmp(ext,"nii",3)) { - std::strncpy(hname,filename,hname._width-1); *iname = 0; + std::strncpy(hname,filename,hname._width - 1); *iname = 0; } - int *const iheader = (int*)header; + int *const iheader = (int*)header._data; *iheader = 348; - std::strcpy(header + 4,"CImg"); - std::strcpy(header + 14," "); - ((short*)(header + 36))[0] = 4096; - ((char*)(header + 38))[0] = 114; - ((short*)(header + 40))[0] = 4; - ((short*)(header + 40))[1] = (short)_width; - ((short*)(header + 40))[2] = (short)_height; - ((short*)(header + 40))[3] = (short)_depth; - ((short*)(header + 40))[4] = (short)_spectrum; + std::strcpy(header._data + 4,"CImg"); + std::strcpy(header._data + 14," "); + ((short*)&(header[36]))[0] = 4096; + ((char*)&(header[38]))[0] = 114; + ((short*)&(header[40]))[0] = 4; + ((short*)&(header[40]))[1] = (short)_width; + ((short*)&(header[40]))[2] = (short)_height; + ((short*)&(header[40]))[3] = (short)_depth; + ((short*)&(header[40]))[4] = (short)_spectrum; if (!cimg::strcasecmp(pixel_type(),"bool")) datatype = 2; if (!cimg::strcasecmp(pixel_type(),"unsigned char")) datatype = 2; if (!cimg::strcasecmp(pixel_type(),"char")) datatype = 2; @@ -43453,17 +48710,17 @@ cimg_instance, pixel_type(),filename); - ((short*)(header+70))[0] = datatype; - ((short*)(header+72))[0] = sizeof(T); - ((float*)(header+112))[0] = 1; - ((float*)(header+76))[0] = 0; + ((short*)&(header[70]))[0] = datatype; + ((short*)&(header[72]))[0] = sizeof(T); + ((float*)&(header[112]))[0] = 1; + ((float*)&(header[76]))[0] = 0; if (voxel_size) { - ((float*)(header+76))[1] = voxel_size[0]; - ((float*)(header+76))[2] = voxel_size[1]; - ((float*)(header+76))[3] = voxel_size[2]; - } else ((float*)(header+76))[1] = ((float*)(header+76))[2] = ((float*)(header+76))[3] = 1; + ((float*)&(header[76]))[1] = voxel_size[0]; + ((float*)&(header[76]))[2] = voxel_size[1]; + ((float*)&(header[76]))[3] = voxel_size[2]; + } else ((float*)&(header[76]))[1] = ((float*)&(header[76]))[2] = ((float*)&(header[76]))[3] = 1; file = cimg::fopen(hname,"wb"); - cimg::fwrite(header,348,file); + cimg::fwrite(header._data,348,file); if (*iname) { cimg::fclose(file); file = cimg::fopen(iname,"wb"); } cimg::fwrite(_data,size(),file); cimg::fclose(file); @@ -43561,7 +48818,7 @@ cimg_instance); if (is_empty()) { cimg::fempty(file,filename); return *this; } - int inrpixsize=-1; + int inrpixsize = -1; const char *inrtype = "unsigned fixed\nPIXSIZE=8 bits\nSCALE=2**0"; if (!cimg::strcasecmp(pixel_type(),"unsigned char")) { inrtype = "unsigned fixed\nPIXSIZE=8 bits\nSCALE=2**0"; inrpixsize = 1; @@ -43594,14 +48851,15 @@ pixel_type(),filename?filename:"(FILE*)"); std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - char header[257] = { 0 }; - int err = cimg_snprintf(header,sizeof(header),"#INRIMAGE-4#{\nXDIM=%u\nYDIM=%u\nZDIM=%u\nVDIM=%u\n", + CImg header(257); + int err = cimg_snprintf(header,header._width,"#INRIMAGE-4#{\nXDIM=%u\nYDIM=%u\nZDIM=%u\nVDIM=%u\n", _width,_height,_depth,_spectrum); - if (voxel_size) err+=std::sprintf(header + err,"VX=%g\nVY=%g\nVZ=%g\n",voxel_size[0],voxel_size[1],voxel_size[2]); - err+=std::sprintf(header + err,"TYPE=%s\nCPU=%s\n",inrtype,cimg::endianness()?"sun":"decm"); - std::memset(header + err,'\n',252 - err); - std::memcpy(header + 252,"##}\n",4); - cimg::fwrite(header,256,nfile); + if (voxel_size) err+=cimg_sprintf(header._data + err,"VX=%g\nVY=%g\nVZ=%g\n", + voxel_size[0],voxel_size[1],voxel_size[2]); + err+=cimg_sprintf(header._data + err,"TYPE=%s\nCPU=%s\n",inrtype,cimg::endianness()?"sun":"decm"); + std::memset(header._data + err,'\n',252 - err); + std::memcpy(header._data + 252,"##}\n",4); + cimg::fwrite(header._data,256,nfile); cimg_forXYZ(*this,x,y,z) cimg_forC(*this,c) cimg::fwrite(&((*this)(x,y,z,c)),1,nfile); if (!file) cimg::fclose(nfile); return *this; @@ -43700,28 +48958,28 @@ unsigned int _save_pandore_header_length(unsigned int id, unsigned int *dims, const unsigned int colorspace) const { unsigned int nbdims = 0; if (id==2 || id==3 || id==4) { - dims[0] = 1; dims[1] = _width; nbdims = 2; + dims[0] = 1; dims[1] = _width; nbdims = 2; } if (id==5 || id==6 || id==7) { - dims[0] = 1; dims[1] = _height; dims[2] = _width; nbdims=3; + dims[0] = 1; dims[1] = _height; dims[2] = _width; nbdims=3; } if (id==8 || id==9 || id==10) { - dims[0] = _spectrum; dims[1] = _depth; dims[2] = _height; dims[3] = _width; nbdims = 4; + dims[0] = _spectrum; dims[1] = _depth; dims[2] = _height; dims[3] = _width; nbdims = 4; } if (id==16 || id==17 || id==18) { - dims[0] = 3; dims[1] = _height; dims[2] = _width; dims[3] = colorspace; nbdims = 4; + dims[0] = 3; dims[1] = _height; dims[2] = _width; dims[3] = colorspace; nbdims = 4; } if (id==19 || id==20 || id==21) { - dims[0] = 3; dims[1] = _depth; dims[2] = _height; dims[3] = _width; dims[4] = colorspace; nbdims = 5; + dims[0] = 3; dims[1] = _depth; dims[2] = _height; dims[3] = _width; dims[4] = colorspace; nbdims = 5; } if (id==22 || id==23 || id==25) { - dims[0] = _spectrum; dims[1] = _width; nbdims = 2; + dims[0] = _spectrum; dims[1] = _width; nbdims = 2; } if (id==26 || id==27 || id==29) { - dims[0] = _spectrum; dims[1] = _height; dims[2] = _width; nbdims=3; + dims[0] = _spectrum; dims[1] = _height; dims[2] = _width; nbdims=3; } if (id==30 || id==31 || id==33) { - dims[0] = _spectrum; dims[1] = _depth; dims[2] = _height; dims[3] = _width; nbdims = 4; + dims[0] = _spectrum; dims[1] = _depth; dims[2] = _height; dims[3] = _width; nbdims = 4; } return nbdims; } @@ -43740,14 +48998,14 @@ #define _cimg_save_pandore_case(sy,sz,sv,stype,id) \ if (!saved && (sy?(sy==_height):true) && (sz?(sz==_depth):true) && \ (sv?(sv==_spectrum):true) && !std::strcmp(stype,pixel_type())) { \ - unsigned int *iheader = (unsigned int*)(header+12); \ + unsigned int *iheader = (unsigned int*)(header + 12); \ nbdims = _save_pandore_header_length((*iheader=id),dims,colorspace); \ cimg::fwrite(header,36,nfile); \ if (sizeof(unsigned long)==4) { CImg ndims(5); \ for (int d = 0; d<5; ++d) ndims[d] = (unsigned long)dims[d]; cimg::fwrite(ndims._data,nbdims,nfile); } \ - else if (sizeof(unsigned int)==4) { CImg ndims(5); \ + else if (sizeof(unsigned int)==4) { CImg ndims(5); \ for (int d = 0; d<5; ++d) ndims[d] = (unsigned int)dims[d]; cimg::fwrite(ndims._data,nbdims,nfile); } \ - else if (sizeof(unsigned short)==4) { CImg ndims(5); \ + else if (sizeof(unsigned short)==4) { CImg ndims(5); \ for (int d = 0; d<5; ++d) ndims[d] = (unsigned short)dims[d]; cimg::fwrite(ndims._data,nbdims,nfile); } \ else throw CImgIOException(_cimg_instance \ "save_pandore(): Unsupported datatype for file '%s'.",\ @@ -43781,8 +49039,9 @@ if (is_empty()) { cimg::fempty(file,filename); return *this; } std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); - unsigned char header[36] = { 'P','A','N','D','O','R','E','0','4',0,0,0, - 0,0,0,0,'C','I','m','g',0,0,0,0,0,'N','o',' ','d','a','t','e',0,0,0,0 }; + static const unsigned char header[36] = { 'P','A','N','D','O','R','E','0','4',0,0,0, + 0,0,0,0,'C','I','m','g',0,0,0,0,0, + 'N','o',' ','d','a','t','e',0,0,0,0 }; unsigned int nbdims, dims[5] = { 0 }; bool saved = false; _cimg_save_pandore_case(1,1,1,"unsigned char",2); @@ -43981,7 +49240,6 @@ CImgList opacities; CImg error_message(1024); - *error_message = 0; if (!is_object3d(primitives,colors,opacities,true,error_message)) throw CImgInstanceException(_cimg_instance "save_off(): Invalid specified 3d object, for file '%s' (%s).", @@ -44104,7 +49362,7 @@ cimg_instance); if (is_empty()) { cimg::fempty(0,filename); return *this; } - CImg command(1024), filename_tmp(256), body(256); *command = *filename_tmp = *body = 0; + CImg command(1024), filename_tmp(256), body(256); const char *ext = cimg::split_filename(filename,body), *ext2 = cimg::split_filename(body,0); @@ -44163,7 +49421,7 @@ #define _cimg_sge_ext1 "pgm" #define _cimg_sge_ext2 "ppm" #endif - CImg command(1024), filename_tmp(256); *command = *filename_tmp = 0; + CImg command(1024), filename_tmp(256); std::FILE *file; do { cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.%s", @@ -44215,7 +49473,7 @@ #define _cimg_sie_ext1 "pgm" #define _cimg_sie_ext2 "ppm" #endif - CImg command(1024), filename_tmp(256); *command = *filename_tmp = 0; + CImg command(1024), filename_tmp(256); std::FILE *file; do { cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s.%s",cimg::temporary_path(), @@ -44258,7 +49516,7 @@ cimg_instance); if (is_empty()) { cimg::fempty(0,filename); return *this; } - CImg command(1024), filename_tmp(256), body(256); *command = *filename_tmp = *body = 0; + CImg command(1024), filename_tmp(256), body(256); std::FILE *file; do { cimg_snprintf(filename_tmp,filename_tmp._width,"%s.hdr",cimg::filenamerand()); @@ -44335,6 +49593,15 @@ return *this; } + //! Serialize a CImg instance into a raw CImg buffer. + /** + \param is_compressed tells if zlib compression must be used for serialization + (this requires 'cimg_use_zlib' been enabled). + **/ + CImg get_serialize(const bool is_compressed=false) const { + return CImgList(*this,true).get_serialize(is_compressed); + } + // [internal] Return a 40x38 color logo of a 'danger' item. static CImg _logo40x38() { CImg res(40,38,1,3); @@ -45049,8 +50316,8 @@ list.insert(_width,npos); bool is_one_shared_element = false; cimglist_for(*this,l) is_one_shared_element|=_data[l]._is_shared; - if (is_one_shared_element) cimglist_for(*this,l) list[npos+l].assign(_data[l]); - else cimglist_for(*this,l) _data[l].move_to(list[npos+l]); + if (is_one_shared_element) cimglist_for(*this,l) list[npos + l].assign(_data[l]); + else cimglist_for(*this,l) _data[l].move_to(list[npos + l]); assign(); return list; } @@ -45061,8 +50328,7 @@ \note Can be used to exchange the content of two lists in a fast way. **/ CImgList& swap(CImgList& list) { - cimg::swap(_width,list._width); - cimg::swap(_allocated_width,list._allocated_width); + cimg::swap(_width,list._width,_allocated_width,list._allocated_width); cimg::swap(_data,list._data); return list; } @@ -45079,6 +50345,12 @@ return _empty.assign(); } + //! Return a reference to an empty list \const. + static const CImgList& const_empty() { + static const CImgList _empty; + return _empty; + } + //@} //------------------------------------------ // @@ -45381,7 +50653,7 @@ "at(): Empty instance.", cimglist_instance); - return _data[pos<0?0:pos>=(int)_width?(int)_width-1:pos]; + return _data[pos<0?0:pos>=(int)_width?(int)_width - 1:pos]; } //! Access to pixel value with Dirichlet boundary conditions. @@ -45432,11 +50704,11 @@ } T& _atNXYZC(const int pos, const int x, const int y, const int z, const int c) { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZC(x,y,z,c); + return _data[pos<0?0:(pos>=(int)_width?(int)_width - 1:pos)].atXYZC(x,y,z,c); } T _atNXYZC(const int pos, const int x, const int y, const int z, const int c) const { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZC(x,y,z,c); + return _data[pos<0?0:(pos>=(int)_width?(int)_width - 1:pos)].atXYZC(x,y,z,c); } //! Access pixel value with Dirichlet boundary conditions for the 3 first coordinates (\c pos, \c x,\c y,\c z). @@ -45487,11 +50759,11 @@ } T& _atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZ(x,y,z,c); + return _data[pos<0?0:(pos>=(int)_width?(int)_width - 1:pos)].atXYZ(x,y,z,c); } T _atNXYZ(const int pos, const int x, const int y, const int z, const int c=0) const { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXYZ(x,y,z,c); + return _data[pos<0?0:(pos>=(int)_width?(int)_width - 1:pos)].atXYZ(x,y,z,c); } //! Access to pixel value with Dirichlet boundary conditions for the 3 first coordinates (\c pos, \c x,\c y). @@ -45542,11 +50814,11 @@ } T& _atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXY(x,y,z,c); + return _data[pos<0?0:(pos>=(int)_width?(int)_width - 1:pos)].atXY(x,y,z,c); } T _atNXY(const int pos, const int x, const int y, const int z=0, const int c=0) const { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atXY(x,y,z,c); + return _data[pos<0?0:(pos>=(int)_width?(int)_width - 1:pos)].atXY(x,y,z,c); } //! Access to pixel value with Dirichlet boundary conditions for the 2 first coordinates (\c pos,\c x). @@ -45597,11 +50869,11 @@ } T& _atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atX(x,y,z,c); + return _data[pos<0?0:(pos>=(int)_width?(int)_width - 1:pos)].atX(x,y,z,c); } T _atNX(const int pos, const int x, const int y=0, const int z=0, const int c=0) const { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)].atX(x,y,z,c); + return _data[pos<0?0:(pos>=(int)_width?(int)_width - 1:pos)].atX(x,y,z,c); } //! Access to pixel value with Dirichlet boundary conditions for the first coordinate (\c pos). @@ -45650,11 +50922,11 @@ } T& _atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)](x,y,z,c); + return _data[pos<0?0:(pos>=(int)_width?(int)_width - 1:pos)](x,y,z,c); } T _atN(const int pos, const int x=0, const int y=0, const int z=0, const int c=0) const { - return _data[pos<0?0:(pos>=(int)_width?(int)_width-1:pos)](x,y,z,c); + return _data[pos<0?0:(pos>=(int)_width?(int)_width - 1:pos)](x,y,z,c); } //! Return a C-string containing the values of all images in the instance list. @@ -45666,12 +50938,12 @@ CImg value_string(const char separator=',', const unsigned int max_size=0) const { if (is_empty()) return CImg(1,1,1,1,0); CImgList items; - for (unsigned int l = 0; l<_width-1; ++l) { + for (unsigned int l = 0; l<_width - 1; ++l) { CImg item = _data[l].value_string(separator,0); item.back() = separator; item.move_to(items); } - _data[_width-1].value_string(separator,0).move_to(items); + _data[_width - 1].value_string(separator,0).move_to(items); CImg res; (items>'x').move_to(res); if (max_size) { res.crop(0,max_size); res(max_size) = 0; } return res; @@ -45920,7 +51192,7 @@ bool contains(const CImg& img, t& n) const { if (is_empty()) return false; const CImg *const ptr = &img; - cimglist_for(*this,i) if (_data+i==ptr) { n = (t)i; return true; } + cimglist_for(*this,i) if (_data + i==ptr) { n = (t)i; return true; } return false; } @@ -46134,12 +51406,12 @@ } else { if (new_data) { // Insert with re-allocation. if (npos) std::memcpy(new_data,_data,sizeof(CImg)*npos); - if (npos!=_width-1) std::memcpy(new_data+npos+1,_data+npos,sizeof(CImg)*(_width-1-npos)); - std::memset(_data,0,sizeof(CImg)*(_width-1)); + if (npos!=_width - 1) std::memcpy(new_data + npos + 1,_data + npos,sizeof(CImg)*(_width - 1 - npos)); + std::memset(_data,0,sizeof(CImg)*(_width - 1)); delete[] _data; _data = new_data; - } else if (npos!=_width-1) - std::memmove(_data+npos+1,_data+npos,sizeof(CImg)*(_width-1-npos)); // Insert without re-allocation. + } else if (npos!=_width - 1) // Insert without re-allocation. + std::memmove(_data + npos + 1,_data + npos,sizeof(CImg)*(_width - 1 - npos)); _data[npos]._width = _data[npos]._height = _data[npos]._depth = _data[npos]._spectrum = 0; _data[npos]._data = 0; _data[npos] = img; @@ -46172,7 +51444,7 @@ else { if (new_data) { // Insert with re-allocation. if (npos) std::memcpy(new_data,_data,sizeof(CImg)*npos); - if (npos!=_width-1) std::memcpy(new_data+npos+1,_data+npos,sizeof(CImg)*(_width-1-npos)); + if (npos!=_width - 1) std::memcpy(new_data + npos + 1,_data + npos,sizeof(CImg)*(_width - 1 - npos)); if (is_shared && img) { new_data[npos]._width = img._width; new_data[npos]._height = img._height; @@ -46185,11 +51457,11 @@ new_data[npos]._data = 0; new_data[npos] = img; } - std::memset(_data,0,sizeof(CImg)*(_width-1)); + std::memset(_data,0,sizeof(CImg)*(_width - 1)); delete[] _data; _data = new_data; } else { // Insert without re-allocation. - if (npos!=_width-1) std::memmove(_data+npos+1,_data+npos,sizeof(CImg)*(_width-1-npos)); + if (npos!=_width - 1) std::memmove(_data + npos + 1,_data + npos,sizeof(CImg)*(_width - 1 - npos)); if (is_shared && img) { _data[npos]._width = img._width; _data[npos]._height = img._height; @@ -46244,7 +51516,7 @@ if (!n) return *this; const unsigned int npos = pos==~0U?_width:pos; insert(img,npos,is_shared); - for (unsigned int i = 1; i CImgList& insert(const CImgList& list, const unsigned int pos=~0U, const bool is_shared=false) { const unsigned int npos = pos==~0U?_width:pos; - if ((void*)this!=(void*)&list) cimglist_for(list,l) insert(list[l],npos+l,is_shared); + if ((void*)this!=(void*)&list) cimglist_for(list,l) insert(list[l],npos + l,is_shared); else insert(CImgList(list),npos,is_shared); return *this; } @@ -46307,7 +51579,7 @@ const unsigned int npos1 = pos1=_width) throw CImgArgumentException(_cimglist_instance "remove(): Invalid remove request at positions %u->%u.", @@ -46324,15 +51596,15 @@ const unsigned int nb = 1 + npos2 - npos1; if (!(_width-=nb)) return assign(); if (_width>(_allocated_width>>2) || _allocated_width<=16) { // Removing items without reallocation. - if (npos1!=_width) std::memmove(_data+npos1,_data+npos2+1,sizeof(CImg)*(_width - npos1)); + if (npos1!=_width) std::memmove(_data + npos1,_data + npos2 + 1,sizeof(CImg)*(_width - npos1)); std::memset(_data + _width,0,sizeof(CImg)*nb); } else { // Removing items with reallocation. _allocated_width>>=2; while (_allocated_width>16 && _width<(_allocated_width>>1)) _allocated_width>>=1; CImg *const new_data = new CImg[_allocated_width]; if (npos1) std::memcpy(new_data,_data,sizeof(CImg)*npos1); - if (npos1!=_width) std::memcpy(new_data+npos1,_data+npos2+1,sizeof(CImg)*(_width - npos1)); - if (_width!=_allocated_width) std::memset(new_data+_width,0,sizeof(CImg)*(_allocated_width - _width)); + if (npos1!=_width) std::memcpy(new_data + npos1,_data + npos2 + 1,sizeof(CImg)*(_width - npos1)); + if (_width!=_allocated_width) std::memset(new_data + _width,0,sizeof(CImg)*(_allocated_width - _width)); std::memset(_data,0,sizeof(CImg)*(_width + nb)); delete[] _data; _data = new_data; @@ -46363,7 +51635,7 @@ /** **/ CImgList& remove() { - return remove(_width-1); + return remove(_width - 1); } //! Remove last image \newinstance. @@ -46373,7 +51645,7 @@ //! Reverse list order. CImgList& reverse() { - for (unsigned int l = 0; l<_width/2; ++l) (*this)[l].swap((*this)[_width-1-l]); + for (unsigned int l = 0; l<_width/2; ++l) (*this)[l].swap((*this)[_width - 1 - l]); return *this; } @@ -46398,8 +51670,8 @@ "images(): Specified sub-list indices (%u->%u) are out of bounds.", cimglist_instance, pos0,pos1); - CImgList res(pos1-pos0+1); - cimglist_for(res,l) res[l].assign(_data[pos0+l]); + CImgList res(pos1 - pos0 + 1); + cimglist_for(res,l) res[l].assign(_data[pos0 + l]); return res; } @@ -46414,8 +51686,8 @@ "get_shared_images(): Specified sub-list indices (%u->%u) are out of bounds.", cimglist_instance, pos0,pos1); - CImgList res(pos1-pos0+1); - cimglist_for(res,l) res[l].assign(_data[pos0+l],_data[pos0+l]?true:false); + CImgList res(pos1 - pos0 + 1); + cimglist_for(res,l) res[l].assign(_data[pos0 + l],_data[pos0 + l]?true:false); return res; } @@ -46426,8 +51698,8 @@ "get_shared_images(): Specified sub-list indices (%u->%u) are out of bounds.", cimglist_instance, pos0,pos1); - CImgList res(pos1-pos0+1); - cimglist_for(res,l) res[l].assign(_data[pos0+l],_data[pos0+l]?true:false); + CImgList res(pos1 - pos0 + 1); + cimglist_for(res,l) res[l].assign(_data[pos0 + l],_data[pos0 + l]?true:false); return res; } @@ -46456,9 +51728,9 @@ if (res) cimglist_for(*this,l) { const CImg& img = (*this)[l]; if (img) res.draw_image(pos, - (int)(align*(dy-img._height)), - (int)(align*(dz-img._depth)), - (int)(align*(dc-img._spectrum)), + (int)(align*(dy - img._height)), + (int)(align*(dz - img._depth)), + (int)(align*(dc - img._spectrum)), img); pos+=img._width; } @@ -46476,10 +51748,10 @@ res.assign(dx,dy,dz,dc,0); if (res) cimglist_for(*this,l) { const CImg& img = (*this)[l]; - if (img) res.draw_image((int)(align*(dx-img._width)), + if (img) res.draw_image((int)(align*(dx - img._width)), pos, - (int)(align*(dz-img._depth)), - (int)(align*(dc-img._spectrum)), + (int)(align*(dz - img._depth)), + (int)(align*(dc - img._spectrum)), img); pos+=img._height; } @@ -46497,10 +51769,10 @@ res.assign(dx,dy,dz,dc,0); if (res) cimglist_for(*this,l) { const CImg& img = (*this)[l]; - if (img) res.draw_image((int)(align*(dx-img._width)), - (int)(align*(dy-img._height)), + if (img) res.draw_image((int)(align*(dx - img._width)), + (int)(align*(dy - img._height)), pos, - (int)(align*(dc-img._spectrum)), + (int)(align*(dc - img._spectrum)), img); pos+=img._depth; } @@ -46518,9 +51790,9 @@ res.assign(dx,dy,dz,dc,0); if (res) cimglist_for(*this,l) { const CImg& img = (*this)[l]; - if (img) res.draw_image((int)(align*(dx-img._width)), - (int)(align*(dy-img._height)), - (int)(align*(dz-img._depth)), + if (img) res.draw_image((int)(align*(dx - img._width)), + (int)(align*(dy - img._height)), + (int)(align*(dz - img._depth)), pos, img); pos+=img._spectrum; @@ -46586,7 +51858,7 @@ /** **/ CImgList& pop_back() { - return remove(_width-1); + return remove(_width - 1); } //! Remove first image. @@ -46601,7 +51873,7 @@ \param iter Iterator pointing to the image to remove. **/ CImgList& erase(const iterator iter) { - return remove(iter-_data); + return remove(iter - _data); } //@} @@ -46620,8 +51892,9 @@ \return A one-column vector containing the selected image indexes. **/ CImg get_select(CImgDisplay &disp, const bool feature_type=true, - const char axis='x', const float align=0) const { - return _get_select(disp,0,feature_type,axis,align,0,false,false,false); + const char axis='x', const float align=0, + const bool exit_on_anykey=false) const { + return _get_select(disp,0,feature_type,axis,align,exit_on_anykey,0,false,false,false); } //! Display a simple interactive interface to select images or sublists. @@ -46633,13 +51906,14 @@ \return A one-column vector containing the selected image indexes. **/ CImg get_select(const char *const title, const bool feature_type=true, - const char axis='x', const float align=0) const { + const char axis='x', const float align=0, + const bool exit_on_anykey=false) const { CImgDisplay disp; - return _get_select(disp,title,feature_type,axis,align,0,false,false,false); + return _get_select(disp,title,feature_type,axis,align,exit_on_anykey,0,false,false,false); } CImg _get_select(CImgDisplay &disp, const char *const title, const bool feature_type, - const char axis, const float align, + const char axis, const float align, const bool exit_on_anykey, const unsigned int orig, const bool resize_disp, const bool exit_on_rightbutton, const bool exit_on_wheel) const { if (is_empty()) @@ -46678,7 +51952,7 @@ bool old_is_resized = disp.is_resized(); disp._normalization = 0; disp.show().set_key(0); - const unsigned char foreground_color[] = { 255,255,255 }, background_color[] = { 0,0,0 }; + static const unsigned char foreground_color[] = { 255,255,255 }, background_color[] = { 0,0,0 }; // Enter event loop. CImg visu0, visu; @@ -46687,6 +51961,7 @@ int oindice0 = -1, oindice1 = -1, indice0 = -1, indice1 = -1; bool is_clicked = false, is_selected = false, text_down = false, update_display = true; unsigned int key = 0; + while (!is_selected && !disp.is_closed() && !key) { // Create background image. @@ -46702,11 +51977,12 @@ onexone(1,1,1,1,0), &src = _data[ind]?_data[ind]:onexone; CImg res; - src.__get_select(disp,old_normalization,(src._width-1)/2,(src._height-1)/2,(src._depth-1)/2).move_to(res); + src.__get_select(disp,old_normalization,(src._width - 1)/2,(src._height - 1)/2,(src._depth - 1)/2). + move_to(res); const unsigned int h = CImgDisplay::_fitscreen(res._width,res._height,1,128,-85,true); res.resize(x - x0,cimg::max(32U,h*disp._height/max_height),1,res._spectrum==1?3:-100); positions(ind,0) = positions(ind,2) = (int)x0; - positions(ind,1) = positions(ind,3) = (int)(align*(visu0.height()-res.height())); + positions(ind,1) = positions(ind,3) = (int)(align*(visu0.height() - res.height())); positions(ind,2)+=res._width; positions(ind,3)+=res._height - 1; visu0.draw_image(positions(ind,0),positions(ind,1),res); @@ -46714,11 +51990,10 @@ const unsigned int y0 = y; ind = indices[y]; while (y - &src = _data[ind], - _img2d = src._depth>1?src.get_projections2d((src._width-1)/2,(src._height-1)/2,(src._depth-1)/2): - CImg(), - &img2d = _img2d?_img2d:src; + const CImg &src = _data[ind]; + const CImg + img2d = src._depth>1?src.get_projections2d((src._width - 1)/2,(src._height - 1)/2,(src._depth - 1)/2): + cimg::type::string()==cimg::type::string()?src.get_shared():src; CImg res = old_normalization==1 || (old_normalization==3 && cimg::type::string()!=cimg::type::string())? CImg(img2d.get_normalize(0,255)): @@ -46726,7 +52001,7 @@ if (res._spectrum>3) res.channels(0,2); const unsigned int w = CImgDisplay::_fitscreen(res._width,res._height,1,128,-85,false); res.resize(cimg::max(32U,w*disp._width/max_width),y - y0,1,res._spectrum==1?3:-100); - positions(ind,0) = positions(ind,2) = (int)(align*(visu0.width()-res.width())); + positions(ind,0) = positions(ind,2) = (int)(align*(visu0.width() - res.width())); positions(ind,1) = positions(ind,3) = (int)y0; positions(ind,2)+=res._width - 1; positions(ind,3)+=res._height; @@ -46748,7 +52023,7 @@ visu.draw_rectangle(positions(ind,0),positions(ind,1),positions(ind,2),positions(ind,3), foreground_color,0.9f,0xAAAAAAAA); } - const int yt = (int)text_down?visu.height()-13:0; + const int yt = (int)text_down?visu.height() - 13:0; if (is_clicked) visu.draw_text(0,yt," Images #%u - #%u, Size = %u", foreground_color,background_color,0.7f,13, orig + indm,orig + indM,indM - indm + 1); @@ -46790,6 +52065,7 @@ if (disp.button()&2 && exit_on_rightbutton) { is_selected = true; indice1 = indice0 = -1; } if (disp.wheel() && exit_on_wheel) is_selected = true; + CImg filename(32); switch (key = disp.key()) { #if cimg_OS!=2 case cimg::keyCTRLRIGHT : @@ -46819,10 +52095,9 @@ } break; case cimg::keyS : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { static unsigned int snap_number = 0; - char filename[32] = { 0 }; std::FILE *file; do { - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.bmp",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.bmp",snap_number++); if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); } while (file); if (visu0) { @@ -46830,20 +52105,19 @@ foreground_color,background_color,0.7f,13).display(disp); visu0.save(filename); (+visu0).draw_text(0,0," Snapshot '%s' saved. ", - foreground_color,background_color,0.7f,13,filename).display(disp); + foreground_color,background_color,0.7f,13,filename._data).display(disp); } disp.set_key(key,false).wait(); key = 0; } break; case cimg::keyO : if (disp.is_keyCTRLLEFT() || disp.is_keyCTRLRIGHT()) { static unsigned int snap_number = 0; - char filename[32] = { 0 }; std::FILE *file; do { #ifdef cimg_use_zlib - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimgz",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimgz",snap_number++); #else - cimg_snprintf(filename,sizeof(filename),cimg_appname "_%.4u.cimg",snap_number++); + cimg_snprintf(filename,filename._width,cimg_appname "_%.4u.cimg",snap_number++); #endif if ((file=std::fopen(filename,"r"))!=0) cimg::fclose(file); } while (file); @@ -46851,13 +52125,17 @@ foreground_color,background_color,0.7f,13).display(disp); save(filename); (+visu0).draw_text(0,0," Instance '%s' saved. ", - foreground_color,background_color,0.7f,13,filename).display(disp); + foreground_color,background_color,0.7f,13,filename._data).display(disp); disp.set_key(key,false).wait(); key = 0; } break; } if (disp.is_resized()) { disp.resize(false); visu0.assign(); } if (ym>=0 && ym<13) { if (!text_down) { visu.assign(); text_down = true; }} - else if (ym>=visu.height()-13) { if(text_down) { visu.assign(); text_down = false; }} + else if (ym>=visu.height() - 13) { if(text_down) { visu.assign(); text_down = false; }} + if (!exit_on_anykey && key && key!=cimg::keyESC && + (key!=cimg::keyW || (!disp.is_keyCTRLLEFT() && !disp.is_keyCTRLRIGHT()))) { + key = 0; + } } CImg res(1,2,1,1,-1); if (is_selected) { @@ -46882,12 +52160,13 @@ cimglist_instance); if (!cimg::strncasecmp(filename,"http://",7) || !cimg::strncasecmp(filename,"https://",8)) { - CImg filename_local(256); *filename_local = 0; + CImg filename_local(256); load(cimg::load_network(filename,filename_local)); std::remove(filename_local); return *this; } + const bool is_stdin = *filename=='-' && (!filename[1] || filename[1]=='.'); const char *const ext = cimg::split_filename(filename); const unsigned int omode = cimg::exception_mode(); cimg::exception_mode(0); @@ -46954,24 +52233,38 @@ else throw CImgIOException("CImgList<%s>::load()", pixel_type()); } catch (CImgIOException&) { + std::FILE *file = 0; + if (!is_stdin) try { + file = cimg::fopen(filename,"rb"); + } catch (CImgIOException&) { + cimg::exception_mode(omode); + throw CImgIOException(_cimglist_instance + "load(): Failed to open file '%s'.", + cimglist_instance, + filename); + } + try { - cimg::fclose(cimg::fopen(filename,"rb")); - } catch (CImgIOException&) { - cimg::exception_mode(omode); - throw CImgIOException(_cimglist_instance - "load(): Failed to open file '%s'.", - cimglist_instance, - filename); - } - assign(1); - try { - _data->load(filename); + if (!is_stdin) { + const char *const f_type = cimg::ftype(file,filename); + std::fclose(file); + if (!cimg::strcasecmp(f_type,"gif")) load_gif_external(filename); + else if (!cimg::strcasecmp(f_type,"tif")) load_tiff(filename); + else throw CImgIOException("CImgList<%s>::load()", + pixel_type()); + } else throw CImgIOException("CImgList<%s>::load()", + pixel_type()); } catch (CImgIOException&) { - cimg::exception_mode(omode); + assign(1); + try { + _data->load(filename); + } catch (CImgIOException&) { + cimg::exception_mode(omode); throw CImgIOException(_cimglist_instance "load(): Failed to recognize format of file '%s'.", cimglist_instance, filename); + } } } cimg::exception_mode(omode); @@ -47018,8 +52311,8 @@ unsigned long destlen = (unsigned long)raw.size()*sizeof(Tss); \ uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); \ delete[] cbuf; \ - const Tss *ptrs = raw._data; \ - for (unsigned long off = raw.size(); off; --off) *(ptrd++) = (T)*(ptrs++); \ + if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw.size()); \ + raw.move_to(img); \ } #else #define _cimgz_load_cimg_case(Tss) \ @@ -47032,26 +52325,28 @@ #define _cimg_load_cimg_case(Ts,Tss) \ if (!loaded && !cimg::strcasecmp(Ts,str_pixeltype)) { \ for (unsigned int l = 0; l=0) tmp[j++] = (char)i; tmp[j] = 0; \ + j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0 && j<255) tmp[j++] = (char)i; tmp[j] = 0; \ W = H = D = C = 0; csiz = 0; \ - if ((err = (unsigned int)std::sscanf(tmp,"%u %u %u %u #%u",&W,&H,&D,&C,&csiz))<4) \ + if ((err = cimg_sscanf(tmp,"%u %u %u %u #%lu",&W,&H,&D,&C,&csiz))<4) \ throw CImgIOException(_cimglist_instance \ - "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", \ + "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'.", \ cimglist_instance, \ W,H,D,C,l,filename?filename:("(FILE*)")); \ if (W*H*D*C>0) { \ CImg raw; \ CImg &img = _data[l]; \ - img.assign(W,H,D,C); \ - T *ptrd = img._data; \ if (err==5) _cimgz_load_cimg_case(Tss) \ - else for (long to_read = (long)img.size(); to_read>0; ) { \ - raw.assign(cimg::min(to_read,cimg_iobuffer)); \ - cimg::fread(raw._data,raw._width,nfile); \ - if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); \ - to_read-=raw._width; \ - const Tss *ptrs = raw._data; \ - for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); \ + else { \ + img.assign(W,H,D,C); \ + T *ptrd = img._data; \ + for (unsigned long to_read = img.size(); to_read; ) { \ + raw.assign(cimg::min(to_read,cimg_iobuffer)); \ + cimg::fread(raw._data,raw._width,nfile); \ + if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw.size()); \ + const Tss *ptrs = raw._data; \ + for (unsigned long off = (unsigned long)raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); \ + to_read-=raw._width; \ + } \ } \ } \ } \ @@ -47063,18 +52358,19 @@ "load_cimg(): Specified filename is (null).", cimglist_instance); - const int cimg_iobuffer = 12*1024*1024; + const unsigned long cimg_iobuffer = 24*1024*1024; std::FILE *const nfile = file?file:cimg::fopen(filename,"rb"); bool loaded = false, endian = cimg::endianness(); CImg tmp(256), str_pixeltype(256), str_endian(256); *tmp = *str_pixeltype = *str_endian = 0; - unsigned int j, err, N = 0, W, H, D, C, csiz; - int i; + unsigned int j, N = 0, W, H, D, C; + unsigned long csiz; + int i, err; do { - j = 0; while ((i=std::fgetc(nfile))!='\n' && i!=EOF && j<256) tmp[j++] = (char)i; tmp[j] = 0; - } while (*tmp=='#' && i!=EOF); - err = (unsigned int)std::sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]", - &N,str_pixeltype._data,str_endian._data); + j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0 && j<255) tmp[j++] = (char)i; tmp[j] = 0; + } while (*tmp=='#' && i>=0); + err = cimg_sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]", + &N,str_pixeltype._data,str_endian._data); if (err<2) { if (!file) cimg::fclose(nfile); throw CImgIOException(_cimglist_instance @@ -47100,6 +52396,7 @@ _cimg_load_cimg_case("long",long); _cimg_load_cimg_case("float",float); _cimg_load_cimg_case("double",double); + if (!loaded) { if (!file) cimg::fclose(nfile); throw CImgIOException(_cimglist_instance @@ -47175,7 +52472,7 @@ for (unsigned int l = 0; l<=nn1; ++l) { \ j = 0; while ((i=std::fgetc(nfile))!='\n' && i>=0) tmp[j++] = (char)i; tmp[j] = 0; \ W = H = D = C = 0; \ - if (std::sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) \ + if (cimg_sscanf(tmp,"%u %u %u %u",&W,&H,&D,&C)!=4) \ throw CImgIOException(_cimglist_instance \ "load_cimg(): Invalid specified size (%u,%u,%u,%u) of image %u in file '%s'", \ cimglist_instance, \ @@ -47184,10 +52481,10 @@ if (l=W || ny0>=H || nz0>=D || nc0>=C) std::fseek(nfile,W*H*D*C*sizeof(Tss),SEEK_CUR); \ else { \ const unsigned int \ - _nx1 = nx1==~0U?W-1:nx1, \ - _ny1 = ny1==~0U?H-1:ny1, \ - _nz1 = nz1==~0U?D-1:nz1, \ - _nc1 = nc1==~0U?C-1:nc1; \ + _nx1 = nx1==~0U?W - 1:nx1, \ + _ny1 = ny1==~0U?H - 1:ny1, \ + _nz1 = nz1==~0U?D - 1:nz1, \ + _nc1 = nc1==~0U?C - 1:nc1; \ if (_nx1>=W || _ny1>=H || _nz1>=D || _nc1>=C) \ throw CImgArgumentException(_cimglist_instance \ "load_cimg(): Invalid specified coordinates " \ @@ -47214,16 +52511,16 @@ if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw._width); \ const Tss *ptrs = raw._data; \ for (unsigned int off = raw._width; off; --off) *(ptrd++) = (T)*(ptrs++); \ - const unsigned int skipxe = (W-1-_nx1)*sizeof(Tss); \ + const unsigned int skipxe = (W - 1 - _nx1)*sizeof(Tss); \ if (skipxe) std::fseek(nfile,skipxe,SEEK_CUR); \ } \ - const unsigned int skipye = (H-1-_ny1)*W*sizeof(Tss); \ + const unsigned int skipye = (H - 1 - _ny1)*W*sizeof(Tss); \ if (skipye) std::fseek(nfile,skipye,SEEK_CUR); \ } \ - const unsigned int skipze = (D-1-_nz1)*W*H*sizeof(Tss); \ + const unsigned int skipze = (D - 1 - _nz1)*W*H*sizeof(Tss); \ if (skipze) std::fseek(nfile,skipze,SEEK_CUR); \ } \ - const unsigned int skipve = (C-1-_nc1)*W*H*D*sizeof(Tss); \ + const unsigned int skipve = (C - 1 - _nc1)*W*H*D*sizeof(Tss); \ if (skipve) std::fseek(nfile,skipve,SEEK_CUR); \ } \ } \ @@ -47246,11 +52543,11 @@ bool loaded = false, endian = cimg::endianness(); CImg tmp(256), str_pixeltype(256), str_endian(256); *tmp = *str_pixeltype = *str_endian = 0; - unsigned int j, err, N, W, H, D, C; - int i; + unsigned int j, N, W, H, D, C; + int i, err; j = 0; while((i=std::fgetc(nfile))!='\n' && i!=EOF && j<256) tmp[j++] = (char)i; tmp[j] = 0; - err = (unsigned int)std::sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]", - &N,str_pixeltype._data,str_endian._data); + err = cimg_sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]", + &N,str_pixeltype._data,str_endian._data); if (err<2) { if (!file) cimg::fclose(nfile); throw CImgIOException(_cimglist_instance @@ -47260,14 +52557,14 @@ } if (!cimg::strncasecmp("little",str_endian,6)) endian = false; else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; - nn1 = n1==~0U?N-1:n1; + nn1 = n1==~0U?N - 1:n1; if (nn1>=N) throw CImgArgumentException(_cimglist_instance "load_cimg(): Invalid specified coordinates [%u](%u,%u,%u,%u) -> [%u](%u,%u,%u,%u) " "because file '%s' contains only %u images.", cimglist_instance, n0,x0,y0,z0,c0,n1,x1,y1,z1,c1,filename?filename:"(FILE*)",N); - assign(1+nn1-n0); + assign(1 + nn1 - n0); _cimg_load_cimg_case2("bool",bool); _cimg_load_cimg_case2("unsigned_char",unsigned char); _cimg_load_cimg_case2("uchar",unsigned char); @@ -47308,19 +52605,19 @@ *body = *filenamepar = *filenamerec = 0; const char *const ext = cimg::split_filename(filename,body); if (!std::strcmp(ext,"par")) { - std::strncpy(filenamepar,filename,filenamepar._width-1); + std::strncpy(filenamepar,filename,filenamepar._width - 1); cimg_snprintf(filenamerec,filenamerec._width,"%s.rec",body._data); } if (!std::strcmp(ext,"PAR")) { - std::strncpy(filenamepar,filename,filenamepar._width-1); + std::strncpy(filenamepar,filename,filenamepar._width - 1); cimg_snprintf(filenamerec,filenamerec._width,"%s.REC",body._data); } if (!std::strcmp(ext,"rec")) { - std::strncpy(filenamerec,filename,filenamerec._width-1); + std::strncpy(filenamerec,filename,filenamerec._width - 1); cimg_snprintf(filenamepar,filenamepar._width,"%s.par",body._data); } if (!std::strcmp(ext,"REC")) { - std::strncpy(filenamerec,filename,filenamerec._width-1); + std::strncpy(filenamerec,filename,filenamerec._width - 1); cimg_snprintf(filenamepar,filenamepar._width,"%s.PAR",body._data); } std::FILE *file = cimg::fopen(filenamepar,"r"); @@ -47330,7 +52627,7 @@ CImgList st_global; CImg line(256); *line = 0; int err; - do { err=std::fscanf(file,"%255[^\n]%*c",line._data); } while (err!=EOF && (*line=='#' || *line=='.')); + do { err = std::fscanf(file,"%255[^\n]%*c",line._data); } while (err!=EOF && (*line=='#' || *line=='.')); do { unsigned int sn,size_x,size_y,pixsize; float rs,ri,ss; @@ -47345,7 +52642,7 @@ if (size_y>vec[1]) vec[1] = size_y; vec[2] = sn; } - st_slices[st_slices._width-1][7] = (float)i; + st_slices[st_slices._width - 1][7] = (float)i; } } while (err==7); @@ -47518,12 +52815,12 @@ } else { cimg_forXY(UV,x,y) { const int x2 = x*2, y2 = y*2; - tmp(x2,y2,1) = tmp(x2+1,y2,1) = tmp(x2,y2+1,1) = tmp(x2+1,y2+1,1) = UV(x,y,0); - tmp(x2,y2,2) = tmp(x2+1,y2,2) = tmp(x2,y2+1,2) = tmp(x2+1,y2+1,2) = UV(x,y,1); + tmp(x2,y2,1) = tmp(x2 + 1,y2,1) = tmp(x2,y2 + 1,1) = tmp(x2 + 1,y2 + 1,1) = UV(x,y,0); + tmp(x2,y2,2) = tmp(x2 + 1,y2,2) = tmp(x2,y2 + 1,2) = tmp(x2 + 1,y2 + 1,2) = UV(x,y,1); } if (yuv2rgb) tmp.YCbCrtoRGB(); insert(tmp); - if (nstep_frame>1) std::fseek(nfile,(nstep_frame-1)*(size_x*size_y + size_x*size_y/2),SEEK_CUR); + if (nstep_frame>1) std::fseek(nfile,(nstep_frame - 1)*(size_x*size_y + size_x*size_y/2),SEEK_CUR); } } } @@ -47531,7 +52828,7 @@ cimg::warn(_cimglist_instance "load_yuv(): Frame %d not reached since only %u frames were found in file '%s'.", cimglist_instance, - nlast_frame,frame-1,filename?filename:"(FILE*)"); + nlast_frame,frame - 1,filename?filename:"(FILE*)"); if (!file) cimg::fclose(nfile); return *this; @@ -47543,7 +52840,7 @@ \param first_frame Index of the first frame to read. \param last_frame Index of the last frame to read. \param step_frame Step value for frame reading. - \note If step_frame==0, the current video stream is open or released without any frames read. + \note If step_frame==0, the current video stream is forced to be released (without any frames read). **/ CImgList& load_video(const char *const filename, const unsigned int first_frame=0, const unsigned int last_frame=~0U, @@ -47586,7 +52883,7 @@ } else if (filename) cimg::warn(_cimglist_instance - "load_video() : File '%s', opened video stream associated with filename not found.", + "load_video() : File '%s', no opened video stream associated with filename found.", cimglist_instance,filename); else cimg::warn(_cimglist_instance @@ -47643,7 +52940,7 @@ } // Read and convert frames. - const unsigned int _last_frame = cimg::min(nb_frames?nb_frames-1:~0U,last_frame); + const unsigned int _last_frame = cimg::min(nb_frames?nb_frames - 1:~0U,last_frame); const IplImage *src = 0; while (pos<=_last_frame) { cimg::mutex(9); @@ -47705,7 +53002,7 @@ "load_ffmpeg_external(): Specified filename is (null).", cimglist_instance); std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - CImg command(1024), filename_tmp(256), filename_tmp2(256); *command = *filename_tmp = *filename_tmp2 = 0; + CImg command(1024), filename_tmp(256), filename_tmp2(256); std::FILE *file = 0; do { cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s", @@ -47773,7 +53070,7 @@ } CImgList& _load_gif_external(const char *const filename, const bool use_graphicsmagick=false) { - CImg command(1024), filename_tmp(256), filename_tmp2(256); *command = *filename_tmp = *filename_tmp2 = 0; + CImg command(1024), filename_tmp(256), filename_tmp2(256); std::FILE *file = 0; do { cimg_snprintf(filename_tmp,filename_tmp._width,"%s%c%s", @@ -47842,7 +53139,7 @@ "load_gzip_external(): Specified filename is (null).", cimglist_instance); std::fclose(cimg::fopen(filename,"rb")); // Check if file exists. - CImg command(1024), filename_tmp(256), body(256); *command = *filename_tmp = *body = 0; + CImg command(1024), filename_tmp(256), body(256); const char *ext = cimg::split_filename(filename,body), *ext2 = cimg::split_filename(body,0); @@ -47942,8 +53239,8 @@ nfirst_frame,nlast_frame,nstep_frame,filename,nb_images); if (nfirst_frame>=nb_images) return assign(); - if (nlast_frame>=nb_images) nlast_frame = nb_images-1; - assign(1+(nlast_frame-nfirst_frame)/nstep_frame); + if (nlast_frame>=nb_images) nlast_frame = nb_images - 1; + assign(1 + (nlast_frame - nfirst_frame)/nstep_frame); TIFFSetDirectory(tif,0); #if cimg_verbosity>=3 TIFFSetWarningHandler(0); @@ -47985,16 +53282,16 @@ cimglist_for(*this,l) msiz+=_data[l].size(); msiz*=sizeof(T); const unsigned int mdisp = msiz<8*1024?0U:msiz<8*1024*1024?1U:2U; - char _title[64] = { 0 }; - if (!title) cimg_snprintf(_title,sizeof(_title),"CImgList<%s>",pixel_type()); + CImg _title(64); + if (!title) cimg_snprintf(_title,_title._width,"CImgList<%s>",pixel_type()); std::fprintf(cimg::output(),"%s%s%s%s: %sthis%s = %p, %ssize%s = %u/%u [%u %s], %sdata%s = (CImg<%s>*)%p", - cimg::t_magenta,cimg::t_bold,title?title:_title,cimg::t_normal, + cimg::t_magenta,cimg::t_bold,title?title:_title._data,cimg::t_normal, cimg::t_bold,cimg::t_normal,(void*)this, cimg::t_bold,cimg::t_normal,_width,_allocated_width, mdisp==0?msiz:(mdisp==1?(msiz>>10):(msiz>>20)), mdisp==0?"b":(mdisp==1?"Kio":"Mio"), cimg::t_bold,cimg::t_normal,pixel_type(),(void*)begin()); - if (_data) std::fprintf(cimg::output(),"..%p.\n",(void*)((char*)end()-1)); + if (_data) std::fprintf(cimg::output(),"..%p.\n",(void*)((char*)end() - 1)); else std::fprintf(cimg::output(),".\n"); char tmp[16] = { 0 }; @@ -48036,9 +53333,9 @@ **/ const CImgList& display(CImgDisplay &disp, const bool display_info, const char axis='x', const float align=0, - unsigned int *const XYZ=0) const { + unsigned int *const XYZ=0, const bool exit_on_anykey=false) const { bool is_exit = false; - return _display(disp,0,display_info,axis,align,XYZ,0,true,is_exit); + return _display(disp,0,display_info,axis,align,XYZ,exit_on_anykey,0,true,is_exit); } //! Display the current CImgList instance in a new display window. @@ -48050,15 +53347,16 @@ **/ const CImgList& display(const char *const title=0, const bool display_info=true, const char axis='x', const float align=0, - unsigned int *const XYZ=0) const { + unsigned int *const XYZ=0, const bool exit_on_anykey=false) const { CImgDisplay disp; bool is_exit = false; - return _display(disp,title,display_info,axis,align,XYZ,0,true,is_exit); + return _display(disp,title,display_info,axis,align,XYZ,exit_on_anykey,0,true,is_exit); } const CImgList& _display(CImgDisplay &disp, const char *const title, const bool display_info, const char axis, const float align, unsigned int *const XYZ, - const unsigned int orig, const bool is_first_call, bool &is_exit) const { + const bool exit_on_anykey, const unsigned int orig, const bool is_first_call, + bool &is_exit) const { if (is_empty()) throw CImgInstanceException(_cimglist_instance "display(): Empty instance.", @@ -48099,13 +53397,13 @@ disp.resize(cimg_fitscreen(_data[0]._width,_data[0]._height,_data[0]._depth),false). set_title("%s (%ux%ux%ux%u)", dtitle.data(),_data[0]._width,_data[0]._height,_data[0]._depth,_data[0]._spectrum); - _data[0]._display(disp,0,false,XYZ,!is_first_call); + _data[0]._display(disp,0,false,XYZ,exit_on_anykey,!is_first_call); if (disp.key()) is_exit = true; disp.resize(cimg_fitscreen(dw,dh,1),false).set_title("%s",dtitle.data()); } else { bool disp_resize = !is_first_call; while (!disp.is_closed() && !is_exit) { - const CImg s = _get_select(disp,0,true,axis,align,orig,disp_resize,!is_first_call,true); + const CImg s = _get_select(disp,0,true,axis,align,exit_on_anykey,orig,disp_resize,!is_first_call,true); disp_resize = true; if (s[0]<0) { // No selections done. if (disp.button()&2) { disp.flush(); break; } @@ -48119,11 +53417,13 @@ delta = cimg::max(1U,(unsigned int)cimg::round(0.3*_width)), ind0 = (unsigned int)cimg::max(0,s[0] - (int)delta), ind1 = (unsigned int)cimg::min(width() - 1,s[0] + (int)delta); - if ((ind0!=0 || ind1!=_width-1) && ind1 - ind0>=3) - get_shared_images(ind0,ind1)._display(disp,0,false,axis,align,XYZ,orig + ind0,false,is_exit); - } - } else if (s[0]!=0 || s[1]!=width()-1) - get_shared_images(s[0],s[1])._display(disp,0,false,axis,align,XYZ,orig+s[0],false,is_exit); + if ((ind0!=0 || ind1!=_width - 1) && ind1 - ind0>=3) + get_shared_images(ind0,ind1)._display(disp,0,false,axis,align,XYZ,exit_on_anykey, + orig + ind0,false,is_exit); + } + } else if (s[0]!=0 || s[1]!=width() - 1) + get_shared_images(s[0],s[1])._display(disp,0,false,axis,align,XYZ,exit_on_anykey, + orig + s[0],false,is_exit); } } return *this; @@ -48143,7 +53443,7 @@ // Do not test for empty instances, since .cimg format is able to manage empty instances. const bool is_stdout = *filename=='-' && (!filename[1] || filename[1]=='.'); const char *const ext = cimg::split_filename(filename); - CImg nfilename(1024); *nfilename = 0; + CImg nfilename(1024); const char *const fn = is_stdout?filename:number>=0?cimg::number_filename(filename,number,digits,nfilename): filename; @@ -48257,9 +53557,9 @@ \param fps Number of desired frames per second. \param nb_loops Number of loops (\c 0 for infinite looping). **/ - const CImgList& save_gif_external(const char *const filename, const unsigned int fps=25, + const CImgList& save_gif_external(const char *const filename, const float fps=25, const unsigned int nb_loops=0) { - CImg command(1024), filename_tmp(256), filename_tmp2(256); *command = *filename_tmp = *filename_tmp2 = 0; + CImg command(1024), filename_tmp(256), filename_tmp2(256); CImgList filenames; std::FILE *file = 0; @@ -48276,22 +53576,22 @@ if ((file=std::fopen(filename_tmp2,"rb"))!=0) cimg::fclose(file); } while (file); cimglist_for(*this,l) { - cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s_%.6u." _cimg_save_gif_ext,filename_tmp._data,l+1); + cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s_%.6u." _cimg_save_gif_ext,filename_tmp._data,l + 1); CImg::string(filename_tmp2).move_to(filenames); if (_data[l]._depth>1 || _data[l]._spectrum!=3) _data[l].get_resize(-100,-100,1,3).save(filename_tmp2); else _data[l].save(filename_tmp2); } #if cimg_OS!=2 - cimg_snprintf(command,command._width,"%s -delay 1x%u -loop %u", - cimg::imagemagick_path(),fps,nb_loops); + cimg_snprintf(command,command._width,"%s -delay %u -loop %u", + cimg::imagemagick_path(),(unsigned int)cimg::max(0.0f,cimg::round(100/fps)),nb_loops); CImg::string(command).move_to(filenames,0); cimg_snprintf(command,command._width,"\"%s\" >/dev/null 2>&1", CImg::string(filename)._system_strescape().data()); CImg::string(command).move_to(filenames); #else - cimg_snprintf(command,command._width,"\"%s -delay 1x%u -loop %u", - cimg::imagemagick_path(),fps,nb_loops); + cimg_snprintf(command,command._width,"\"%s -delay %u -loop %u", + cimg::imagemagick_path(),(unsigned int)cimg::max(0.0f,cimg::round(100/fps)),nb_loops); CImg::string(command).move_to(filenames,0); cimg_snprintf(command,command._width,"\"%s\"\" >NUL 2>&1", CImg::string(filename)._system_strescape().data()); @@ -48309,7 +53609,7 @@ cimglist_instance, filename); else cimg::fclose(file); - cimglist_for_in(*this,1,filenames._width-1,l) std::remove(filenames[l]); + cimglist_for_in(*this,1,filenames._width - 1,l) std::remove(filenames[l]); return *this; } @@ -48371,7 +53671,7 @@ #endif std::FILE *const nfile = file?file:cimg::fopen(filename,"wb"); const char *const ptype = pixel_type(), *const etype = cimg::endianness()?"big":"little"; - if (std::strstr(ptype,"unsigned")==ptype) std::fprintf(nfile,"%u unsigned_%s %s_endian\n",_width,ptype+9,etype); + if (std::strstr(ptype,"unsigned")==ptype) std::fprintf(nfile,"%u unsigned_%s %s_endian\n",_width,ptype + 9,etype); else std::fprintf(nfile,"%u %s %s_endian\n",_width,ptype,etype); cimglist_for(*this,l) { const CImg& img = _data[l]; @@ -48436,7 +53736,7 @@ for (unsigned int l = 0; l=W?W-1:x1, \ - ny1 = y1>=H?H-1:y1, \ - nz1 = z1>=D?D-1:z1, \ - nc1 = c1>=C?C-1:c1; \ - CImg raw(1+nx1-x0); \ + nx1 = x1>=W?W - 1:x1, \ + ny1 = y1>=H?H - 1:y1, \ + nz1 = z1>=D?D - 1:z1, \ + nc1 = c1>=C?C - 1:c1; \ + CImg raw(1 + nx1 - x0); \ const unsigned int skipvb = c0*W*H*D*sizeof(Tss); \ if (skipvb) std::fseek(nfile,skipvb,SEEK_CUR); \ for (unsigned int v = 1 + nc1 - c0; v; --v) { \ @@ -48502,10 +53802,10 @@ bool saved = false, endian = cimg::endianness(); CImg tmp(256), str_pixeltype(256), str_endian(256); *tmp = *str_pixeltype = *str_endian = 0; - unsigned int j, err, N, W, H, D, C; - int i; + unsigned int j, N, W, H, D, C; + int i, err; j = 0; while((i=std::fgetc(nfile))!='\n' && i!=EOF && j<256) tmp[j++] = (char)i; tmp[j] = 0; - err = std::sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]",&N,str_pixeltype._data,str_endian._data); + err = cimg_sscanf(tmp,"%u%*c%255[A-Za-z_]%*c%255[sA-Za-z_ ]",&N,str_pixeltype._data,str_endian._data); if (err<2) { if (!file) cimg::fclose(nfile); throw CImgIOException(_cimglist_instance @@ -48515,7 +53815,7 @@ } if (!cimg::strncasecmp("little",str_endian,6)) endian = false; else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; - const unsigned int lmax = cimg::min(N,n0+_width); + const unsigned int lmax = cimg::min(N,n0 + _width); _cimg_save_cimg_case("bool",bool); _cimg_save_cimg_case("unsigned_char",unsigned char); _cimg_save_cimg_case("uchar",unsigned char); @@ -48626,7 +53926,8 @@ \param compression_type Compression mode used to write data. **/ const CImgList& save_tiff(const char *const filename, const unsigned int compression_type=0, - const float *const voxel_size=0, const char *const description=0) const { + const float *const voxel_size=0, const char *const description=0, + const bool is_bigtiff=true) const { if (!filename) throw CImgArgumentException(_cimglist_instance "save_tiff(): Specified filename is (null).", @@ -48634,14 +53935,14 @@ if (is_empty()) { cimg::fempty(0,filename); return *this; } #ifndef cimg_use_tiff - if (_width==1) _data[0].save_tiff(filename,compression_type,voxel_size,description); + if (_width==1) _data[0].save_tiff(filename,compression_type,voxel_size,description,is_bigtiff); else cimglist_for(*this,l) { - CImg nfilename(1024); *nfilename = 0; + CImg nfilename(1024); cimg::number_filename(filename,l,6,nfilename); - _data[l].save_tiff(nfilename,compression_type,voxel_size,description); + _data[l].save_tiff(nfilename,compression_type,voxel_size,description,is_bigtiff); } #else - TIFF *tif = TIFFOpen(filename,"w"); + TIFF *tif = TIFFOpen(filename,is_bigtiff?"w8":"w4"); if (tif) { for (unsigned int dir = 0, l = 0; l<_width; ++l) { const CImg& img = (*this)[l]; @@ -48660,7 +53961,6 @@ return *this; } - //! Save list as a gzipped file, using external tool 'gzip'. /** \param filename Filename to write data to. @@ -48671,7 +53971,7 @@ "save_gzip_external(): Specified filename is (null).", cimglist_instance); - CImg command(1024), filename_tmp(256), body(256); *command = *filename_tmp = *body = 0; + CImg command(1024), filename_tmp(256), body(256); const char *ext = cimg::split_filename(filename,body), *ext2 = cimg::split_filename(body,0); @@ -48707,10 +54007,10 @@ else cimg::fclose(file); std::remove(filename_tmp); } else { - CImg nfilename(1024); *nfilename = 0; + CImg nfilename(1024); cimglist_for(*this,l) { cimg::number_filename(body,l,6,nfilename); - if (*ext) std::sprintf(nfilename._data + std::strlen(nfilename),".%s",ext); + if (*ext) cimg_sprintf(nfilename._data + std::strlen(nfilename),".%s",ext); _data[l].save_gzip_external(nfilename); } } @@ -48771,7 +54071,7 @@ "save_video(): Frame [0] is an empty image.", cimglist_instance); -#define _cimg_docase(x) ((x)>='a'&&(x)<='z'?(x)+'A'-'a':(x)) +#define _cimg_docase(x) ((x)>='a'&&(x)<='z'?(x) + 'A' - 'a':(x)) const char *const _codec = codec?codec:"mp4v", codec0 = _cimg_docase(_codec[0]), @@ -48814,7 +54114,8 @@ } } else { CImg _src(src,false); - _src.channels(0,cimg::min(_src._spectrum-1,2U)).resize(W,H); + _src.channels(0,cimg::min(_src._spectrum - 1,2U)).resize(W,H); + _src.resize(W,H,1,3,_src._spectrum==1?1:0); const unsigned char *ptr_r = _src.data(0,0,0,0), *ptr_g = _src.data(0,0,0,1), *ptr_b = _src.data(0,0,0,2); char *ptrd = ipl->imageData; cimg_forXY(_src,x,y) { @@ -48860,7 +54161,7 @@ *const ext = cimg::split_filename(filename), *const _codec = codec?codec:!cimg::strcasecmp(ext,"flv")?"flv":"mpeg2video"; - CImg command(1024), filename_tmp(256), filename_tmp2(256); *command = *filename_tmp = *filename_tmp2 = 0; + CImg command(1024), filename_tmp(256), filename_tmp2(256); CImgList filenames; std::FILE *file = 0; cimglist_for(*this,l) if (!_data[l].is_sameXYZ(_data[0])) @@ -48875,7 +54176,7 @@ if ((file=std::fopen(filename_tmp2,"rb"))!=0) cimg::fclose(file); } while (file); cimglist_for(*this,l) { - cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s_%.6u.ppm",filename_tmp._data,l+1); + cimg_snprintf(filename_tmp2,filename_tmp2._width,"%s_%.6u.ppm",filename_tmp._data,l + 1); CImg::string(filename_tmp2).move_to(filenames); if (_data[l]._depth>1 || _data[l]._spectrum!=3) _data[l].get_resize(-100,-100,1,3).save_pnm(filename_tmp2); else _data[l].save_pnm(filename_tmp2); @@ -48905,6 +54206,162 @@ return *this; } + //! Serialize a CImgList instance into a raw CImg buffer. + /** + \param is_compressed tells if zlib compression must be used for serialization + (this requires 'cimg_use_zlib' been enabled). + **/ + CImg get_serialize(const bool is_compressed=false) const { +#ifndef cimg_use_zlib + if (is_compressed) + cimg::warn(_cimglist_instance + "get_serialize(): Unable to compress data unless zlib is enabled, " + "storing them uncompressed.", + cimglist_instance); +#endif + CImgList stream; + CImg tmpstr(128); + const char *const ptype = pixel_type(), *const etype = cimg::endianness()?"big":"little"; + if (std::strstr(ptype,"unsigned")==ptype) + cimg_snprintf(tmpstr,tmpstr._width,"%u unsigned_%s %s_endian\n",_width,ptype + 9,etype); + else + cimg_snprintf(tmpstr,tmpstr._width,"%u %s %s_endian\n",_width,ptype,etype); + CImg::string(tmpstr,false).move_to(stream); + cimglist_for(*this,l) { + const CImg& img = _data[l]; + cimg_snprintf(tmpstr,tmpstr._width,"%u %u %u %u",img._width,img._height,img._depth,img._spectrum); + CImg::string(tmpstr,false).move_to(stream); + if (img._data) { + CImg tmp; + if (cimg::endianness()) { tmp = img; cimg::invert_endianness(tmp._data,tmp.size()); } + const CImg& ref = cimg::endianness()?tmp:img; + bool failed_to_compress = true; + if (is_compressed) { +#ifdef cimg_use_zlib + const unsigned long siz = sizeof(T)*ref.size(); + unsigned long csiz = compressBound(siz); + Bytef *const cbuf = new Bytef[csiz]; + if (compress(cbuf,&csiz,(Bytef*)ref._data,siz)) + cimg::warn(_cimglist_instance + "get_serialize(): Failed to save compressed data, saving them uncompressed.", + cimglist_instance); + else { + cimg_snprintf(tmpstr,tmpstr._width," #%lu\n",csiz); + CImg::string(tmpstr,false).move_to(stream); + CImg(cbuf,csiz).move_to(stream); + delete[] cbuf; + failed_to_compress = false; + } +#endif + } + if (failed_to_compress) { // Write in a non-compressed way. + CImg::string("\n",false).move_to(stream); + stream.insert(1); + stream.back().assign((unsigned char*)ref._data,ref.size()*sizeof(T),1,1,1,true); + } + } else CImg::string("\n",false).move_to(stream); + } + cimglist_apply(stream,unroll)('y'); + return stream>'y'; + } + + //! Unserialize a CImg serialized buffer into a CImgList list. + template + static CImgList get_unserialize(const CImg& buffer) { +#ifdef cimg_use_zlib +#define _cimgz_unserialize_case(Tss) { \ + Bytef *cbuf = (Bytef*)stream; \ + if (sizeof(t)!=1 || cimg::type::string()==cimg::type::string()) { \ + cbuf = new Bytef[csiz]; Bytef *_cbuf = cbuf; \ + for (unsigned long i = 0; i raw(W,H,D,C); \ + unsigned long destlen = (unsigned long)raw.size()*sizeof(Tss); \ + uncompress((Bytef*)raw._data,&destlen,cbuf,csiz); \ + if (!is_bytef) delete[] cbuf; \ + if (endian!=cimg::endianness()) cimg::invert_endianness(raw._data,raw.size()); \ + raw.move_to(img); \ + } +#else +#define _cimgz_unserialize_case(Tss) \ + throw CImgArgumentException("CImgList<%s>::get_unserialize(): Unable to unserialize compressed data " \ + "unless zlib is enabled.", \ + pixel_type()); +#endif + +#define _cimg_unserialize_case(Ts,Tss) \ + if (!loaded && !cimg::strcasecmp(Ts,str_pixeltype)) { \ + for (unsigned int l = 0; l::unserialize(): Invalid specified size (%u,%u,%u,%u) for " \ + "image #%u in serialized buffer.", \ + pixel_type(),W,H,D,C,l); \ + if (W*H*D*C>0) { \ + CImg &img = res._data[l]; \ + if (err==5) _cimgz_unserialize_case(Tss) \ + else { \ + if (sizeof(t)!=1) { \ + CImg raw(W*sizeof(Tss),H,D,C); \ + cimg_for(raw,p,unsigned char) *p = (unsigned char)*(stream++); \ + img.assign((Tss*)raw._data,W,H,D,C); \ + } else img.assign((Tss*)stream,W,H,D,C); \ + if (endian!=cimg::endianness()) cimg::invert_endianness(img._data,img.size()); \ + } \ + } \ + } \ + loaded = true; \ + } + + if (buffer.is_empty()) + throw CImgArgumentException("CImgList<%s>::get_unserialize(): Specified serialized buffer is (null).", + pixel_type()); + CImgList res; + const t *stream = buffer._data, *const estream = buffer._data + buffer.size(); + bool loaded = false, endian = cimg::endianness(), is_bytef = false; + CImg tmp(256), str_pixeltype(256), str_endian(256); + *tmp = *str_pixeltype = *str_endian = 0; + unsigned int j, N = 0, W, H, D, C; + unsigned long csiz; + int i, err; + cimg::unused(is_bytef); + do { + j = 0; while ((i=(int)*stream)!='\n' && stream::get_unserialize(): CImg header not found in serialized buffer.", + pixel_type()); + if (!cimg::strncasecmp("little",str_endian,6)) endian = false; + else if (!cimg::strncasecmp("big",str_endian,3)) endian = true; + res.assign(N); + _cimg_unserialize_case("bool",bool); + _cimg_unserialize_case("unsigned_char",unsigned char); + _cimg_unserialize_case("uchar",unsigned char); + _cimg_unserialize_case("char",char); + _cimg_unserialize_case("unsigned_short",unsigned short); + _cimg_unserialize_case("ushort",unsigned short); + _cimg_unserialize_case("short",short); + _cimg_unserialize_case("unsigned_int",unsigned int); + _cimg_unserialize_case("uint",unsigned int); + _cimg_unserialize_case("int",int); + _cimg_unserialize_case("unsigned_long",unsigned long); + _cimg_unserialize_case("ulong",unsigned long); + _cimg_unserialize_case("long",long); + _cimg_unserialize_case("float",float); + _cimg_unserialize_case("double",double); + if (!loaded) + throw CImgArgumentException("CImgList<%s>::get_unserialize(): Unsupported pixel type '%s' defined " + "in serialized buffer.", + pixel_type(),str_pixeltype._data); + return res; + } + //@} //---------------------------------- // @@ -48929,10 +54386,10 @@ int xmin = letter.width(), xmax = 0; cimg_forXY(letter,x,y) if (letter(x,y)) { if (xxmax) xmax = x; } if (xmin>xmax) CImg(letter._width,letter._height,1,letter._spectrum,0).move_to(res); - else letter.get_crop(xmin,0,xmax,letter._height-1).move_to(res); + else letter.get_crop(xmin,0,xmax,letter._height - 1).move_to(res); } res[' '].resize(res['f']._width,-100,-100,-100,0); - if (' '+256& font(const unsigned int font_height, const bool is_variable_width=true) { - if (!font_height) return CImgList::empty(); + if (!font_height) return CImgList::const_empty(); cimg::mutex(11); // Decompress nearest base font data if needed. - const char *data_fonts[] = { cimg::data_font12x13, cimg::data_font20x23, cimg::data_font47x53, 0 }; - const unsigned int data_widths[] = { 12,20,47,90 }, data_heights[] = { 13,23,53,103 }, - data_Ms[] = { 86,79,57,47 }; + static const char *data_fonts[] = { cimg::data_font12x13, cimg::data_font20x23, cimg::data_font47x53, 0 }; + static const unsigned int data_widths[] = { 12,20,47,90 }, data_heights[] = { 13,23,53,103 }, + data_Ms[] = { 86,79,57,47 }; const unsigned int data_ind = font_height<=13U?0U:font_height<=23U?1U:font_height<=53U?2U:3U; static CImg base_fonts[4]; CImg &base_font = base_fonts[data_ind]; @@ -48965,7 +54422,7 @@ ((CImg(cimg::_data_font90x103[0], (unsigned int)std::strlen(cimg::_data_font90x103[0]),1,1,1,true), CImg(cimg::_data_font90x103[1], - (unsigned int)std::strlen(cimg::_data_font90x103[1])+1,1,1,1,true))>'x'). + (unsigned int)std::strlen(cimg::_data_font90x103[1]) + 1,1,1,1,true))>'x'). move_to(data90x103); data_font = data90x103.data(); } @@ -48973,8 +54430,8 @@ // Uncompress font data (decode RLE). for (const char *ptrs = data_font; *ptrs; ++ptrs) { const int c = (int)(*ptrs - M - 32), v = c>=0?255:0, n = c>=0?c:-c; - if (ptrd+n<=ptrde) { std::memset(ptrd,v,n); ptrd+=n; } - else { std::memset(ptrd,v,ptrde-ptrd); break; } + if (ptrd + n<=ptrde) { std::memset(ptrd,v,n); ptrd+=n; } + else { std::memset(ptrd,v,ptrde - ptrd); break; } } } @@ -48987,9 +54444,9 @@ ind = (unsigned int)i; break; // Found empty slot or cached font. } if (ind==~0U) { // No empty slots nor existing font in cache. - std::memmove(fonts,fonts+1,15*sizeof(CImgList)); - std::memmove(is_variable_widths,is_variable_widths+1,15*sizeof(bool)); - std::memset(fonts+(ind=15),0,sizeof(CImgList)); // Free a slot in cache for new font. + std::memmove(fonts,fonts + 1,15*sizeof(CImgList)); + std::memmove(is_variable_widths,is_variable_widths + 1,15*sizeof(bool)); + std::memset(fonts + (ind=15),0,sizeof(CImgList)); // Free a slot in cache for new font. } CImgList &font = fonts[ind]; @@ -49005,7 +54462,7 @@ if (is_variable_width) font.crop_font(); cimglist_for(font,l) font[l].resize(font[l]._width + padding_x,-100,1,1,0,0,0.5); font.insert(256,0); - cimglist_for_in(font,0,255,l) font[l].assign(font[l+256]._width,font[l+256]._height,1,3,1); + cimglist_for_in(font,0,255,l) font[l].assign(font[l + 256]._width,font[l + 256]._height,1,3,1); } cimg::mutex(11,0); return font; @@ -49080,758 +54537,948 @@ }; // struct CImgList { ... /* - #--------------------------------------------- - # - # Completion of previously declared functions - # - #---------------------------------------------- + #--------------------------------------------- + # + # Completion of previously declared functions + # + #---------------------------------------------- */ namespace cimg { - //! Get/set path to store temporary files. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path where temporary files can be saved. - **/ - inline const char* temporary_path(const char *const user_path, const bool reinit_path) { -#define _cimg_test_temporary_path(p) \ - if (!path_found) { \ - cimg_snprintf(s_path,1024,"%s",p); \ - cimg_snprintf(tmp,tmp._width,"%s%c%s",s_path.data(),cimg_file_separator,filename_tmp._data); \ - if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } \ - } - static CImg s_path; - cimg::mutex(7); - if (reinit_path) s_path.assign(); - if (user_path) { - if (!s_path) s_path.assign(1024); - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path.assign(1024); - std::memset(s_path,0,1024); - bool path_found = false; - CImg tmp(1024), filename_tmp(256); *tmp = *filename_tmp = 0; - std::FILE *file = 0; - cimg_snprintf(filename_tmp,filename_tmp._width,"%s.tmp",cimg::filenamerand()); - char *tmpPath = std::getenv("TMP"); - if (!tmpPath) { tmpPath = std::getenv("TEMP"); winformat_string(tmpPath); } - if (tmpPath) _cimg_test_temporary_path(tmpPath); + //! Get/set path to store temporary files. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path where temporary files can be saved. + **/ + inline const char* temporary_path(const char *const user_path, const bool reinit_path) { +#define _cimg_test_temporary_path(p) \ + if (!path_found) { \ + cimg_snprintf(s_path,s_path.width(),"%s",p); \ + cimg_snprintf(tmp,tmp._width,"%s%c%s",s_path.data(),cimg_file_separator,filename_tmp._data); \ + if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } \ + } + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + CImg tmp(1024), filename_tmp(256); + std::FILE *file = 0; + cimg_snprintf(filename_tmp,filename_tmp._width,"%s.tmp",cimg::filenamerand()); + char *tmpPath = std::getenv("TMP"); + if (!tmpPath) { tmpPath = std::getenv("TEMP"); winformat_string(tmpPath); } + if (tmpPath) _cimg_test_temporary_path(tmpPath); #if cimg_OS==2 - _cimg_test_temporary_path("C:\\WINNT\\Temp"); - _cimg_test_temporary_path("C:\\WINDOWS\\Temp"); - _cimg_test_temporary_path("C:\\Temp"); - _cimg_test_temporary_path("C:"); - _cimg_test_temporary_path("D:\\WINNT\\Temp"); - _cimg_test_temporary_path("D:\\WINDOWS\\Temp"); - _cimg_test_temporary_path("D:\\Temp"); - _cimg_test_temporary_path("D:"); -#else - _cimg_test_temporary_path("/tmp"); - _cimg_test_temporary_path("/var/tmp"); -#endif - if (!path_found) { - *s_path = 0; - std::strncpy(tmp,filename_tmp,tmp._width-1); - if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } - } - if (!path_found) { - cimg::mutex(7,0); - throw CImgIOException("cimg::temporary_path(): Failed to locate path for writing temporary files.\n"); - } + _cimg_test_temporary_path("C:\\WINNT\\Temp"); + _cimg_test_temporary_path("C:\\WINDOWS\\Temp"); + _cimg_test_temporary_path("C:\\Temp"); + _cimg_test_temporary_path("C:"); + _cimg_test_temporary_path("D:\\WINNT\\Temp"); + _cimg_test_temporary_path("D:\\WINDOWS\\Temp"); + _cimg_test_temporary_path("D:\\Temp"); + _cimg_test_temporary_path("D:"); +#else + _cimg_test_temporary_path("/tmp"); + _cimg_test_temporary_path("/var/tmp"); +#endif + if (!path_found) { + *s_path = 0; + std::strncpy(tmp,filename_tmp,tmp._width - 1); + if ((file=std::fopen(tmp,"wb"))!=0) { cimg::fclose(file); std::remove(tmp); path_found = true; } + } + if (!path_found) { + cimg::mutex(7,0); + throw CImgIOException("cimg::temporary_path(): Failed to locate path for writing temporary files.\n"); } - cimg::mutex(7,0); - return s_path; } + cimg::mutex(7,0); + return s_path; + } - //! Get/set path to the Program Files/ directory (Windows only). - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the program files. - **/ + //! Get/set path to the Program Files/ directory (Windows only). + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the program files. + **/ #if cimg_OS==2 - inline const char* programfiles_path(const char *const user_path, const bool reinit_path) { - static CImg s_path; - cimg::mutex(7); - if (reinit_path) s_path.assign(); - if (user_path) { - if (!s_path) s_path.assign(1024); - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path.assign(MAX_PATH); - std::memset(s_path,0,MAX_PATH); - // Note: in the following line, 0x26 = CSIDL_PROGRAM_FILES (not defined on every compiler). + inline const char* programfiles_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(MAX_PATH); + *s_path = 0; + // Note: in the following line, 0x26 = CSIDL_PROGRAM_FILES (not defined on every compiler). #if !defined(__INTEL_COMPILER) - if (!SHGetSpecialFolderPathA(0,s_path,0x0026,false)) { - const char *const pfPath = std::getenv("PROGRAMFILES"); - if (pfPath) std::strncpy(s_path,pfPath,MAX_PATH-1); - else std::strcpy(s_path,"C:\\PROGRA~1"); - } + if (!SHGetSpecialFolderPathA(0,s_path,0x0026,false)) { + const char *const pfPath = std::getenv("PROGRAMFILES"); + if (pfPath) std::strncpy(s_path,pfPath,MAX_PATH - 1); + else std::strcpy(s_path,"C:\\PROGRA~1"); + } #else - std::strcpy(s_path,"C:\\PROGRA~1"); + std::strcpy(s_path,"C:\\PROGRA~1"); #endif - } - cimg::mutex(7,0); - return s_path; } + cimg::mutex(7,0); + return s_path; + } #endif - //! Get/set path to the ImageMagick's \c convert binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c convert binary. - **/ - inline const char* imagemagick_path(const char *const user_path, const bool reinit_path) { - static CImg s_path; - cimg::mutex(7); - if (reinit_path) s_path.assign(); - if (user_path) { - if (!s_path) s_path.assign(1024); - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path.assign(1024); - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; -#if cimg_OS==2 - const char *const pf_path = programfiles_path(); - if (!path_found) { - std::strcpy(s_path,".\\convert.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%.2d-\\convert.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%d-Q\\convert.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%d\\convert.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\convert.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\convert.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%d\\VISUA~1\\BIN\\convert.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%.2d-\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%d-Q\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%d\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%d\\VISUA~1\\BIN\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%.2d-\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%d-Q\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%d\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%d\\VISUA~1\\BIN\\convert.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"convert.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./convert"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"convert"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the GraphicsMagick's \c gm binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c gm binary. - **/ - inline const char* graphicsmagick_path(const char *const user_path, const bool reinit_path) { - static CImg s_path; - cimg::mutex(7); - if (reinit_path) s_path.assign(); - if (user_path) { - if (!s_path) s_path.assign(1024); - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path.assign(1024); - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; + //! Get/set path to the ImageMagick's \c convert binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c convert binary. + **/ + inline const char* imagemagick_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; #if cimg_OS==2 - const char *const pf_path = programfiles_path(); - if (!path_found) { - std::strcpy(s_path,".\\gm.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%.2d-\\gm.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%d-Q\\gm.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%d\\gm.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",pf_path,k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%.2d-\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%d-Q\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%d\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%.2d-\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%d-Q\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%d\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=10 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 9; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - for (int k = 32; k>=0 && !path_found; --k) { - cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",k); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"gm.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./gm"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"gm"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the XMedcon's \c medcon binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c medcon binary. - **/ - inline const char* medcon_path(const char *const user_path, const bool reinit_path) { - static CImg s_path; - cimg::mutex(7); - if (reinit_path) s_path.assign(); - if (user_path) { - if (!s_path) s_path.assign(1024); - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path.assign(1024); - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; + const char *const pf_path = programfiles_path(); + if (!path_found) { + std::strcpy(s_path,".\\convert.exe"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%.2d-\\convert.exe",pf_path,k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%d-Q\\convert.exe",pf_path,k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%d\\convert.exe",pf_path,k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\convert.exe",pf_path,k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\convert.exe",pf_path,k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\IMAGEM~1.%d\\VISUA~1\\BIN\\convert.exe",pf_path,k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%.2d-\\convert.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%d-Q\\convert.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%d\\convert.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\convert.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\convert.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\IMAGEM~1.%d\\VISUA~1\\BIN\\convert.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%.2d-\\convert.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%d-Q\\convert.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%d\\convert.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%.2d-\\VISUA~1\\BIN\\convert.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%d-Q\\VISUA~1\\BIN\\convert.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\IMAGEM~1.%d\\VISUA~1\\BIN\\convert.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"convert.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./convert"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"convert"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the GraphicsMagick's \c gm binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c gm binary. + **/ + inline const char* graphicsmagick_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; #if cimg_OS==2 - const char *const pf_path = programfiles_path(); - if (!path_found) { - std::strcpy(s_path,".\\medcon.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) { - cimg_snprintf(s_path,s_path._width,"%s\\XMedCon\\bin\\medcon.bat",pf_path); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) { - cimg_snprintf(s_path,s_path._width,"%s\\XMedCon\\bin\\medcon.exe",pf_path); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) { - std::strcpy(s_path,"C:\\XMedCon\\bin\\medcon.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"medcon.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./medcon"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"medcon"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the FFMPEG's \c ffmpeg binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c ffmpeg binary. - **/ - inline const char *ffmpeg_path(const char *const user_path, const bool reinit_path) { - static CImg s_path; - cimg::mutex(7); - if (reinit_path) s_path.assign(); - if (user_path) { - if (!s_path) s_path.assign(1024); - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path.assign(1024); - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; + const char *const pf_path = programfiles_path(); + if (!path_found) { + std::strcpy(s_path,".\\gm.exe"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%.2d-\\gm.exe",pf_path,k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%d-Q\\gm.exe",pf_path,k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%d\\gm.exe",pf_path,k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",pf_path,k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",pf_path,k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"%s\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",pf_path,k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%.2d-\\gm.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%d-Q\\gm.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%d\\gm.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"C:\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%.2d-\\gm.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%d-Q\\gm.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%d\\gm.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=10 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%.2d-\\VISUA~1\\BIN\\gm.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 9; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%d-Q\\VISUA~1\\BIN\\gm.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + for (int k = 32; k>=0 && !path_found; --k) { + cimg_snprintf(s_path,s_path._width,"D:\\GRAPHI~1.%d\\VISUA~1\\BIN\\gm.exe",k); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"gm.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./gm"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"gm"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the XMedcon's \c medcon binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c medcon binary. + **/ + inline const char* medcon_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; #if cimg_OS==2 - if (!path_found) { - std::strcpy(s_path,".\\ffmpeg.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"ffmpeg.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./ffmpeg"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"ffmpeg"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the \c gzip binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c gzip binary. - **/ - inline const char *gzip_path(const char *const user_path, const bool reinit_path) { - static CImg s_path; - cimg::mutex(7); - if (reinit_path) s_path.assign(); - if (user_path) { - if (!s_path) s_path.assign(1024); - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path.assign(1024); - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; + const char *const pf_path = programfiles_path(); + if (!path_found) { + std::strcpy(s_path,".\\medcon.exe"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) { + cimg_snprintf(s_path,s_path._width,"%s\\XMedCon\\bin\\medcon.bat",pf_path); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) { + cimg_snprintf(s_path,s_path._width,"%s\\XMedCon\\bin\\medcon.exe",pf_path); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) { + std::strcpy(s_path,"C:\\XMedCon\\bin\\medcon.exe"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"medcon.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./medcon"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"medcon"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the FFMPEG's \c ffmpeg binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c ffmpeg binary. + **/ + inline const char *ffmpeg_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; #if cimg_OS==2 - if (!path_found) { - std::strcpy(s_path,".\\gzip.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"gzip.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./gzip"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"gzip"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the \c gunzip binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c gunzip binary. - **/ - inline const char *gunzip_path(const char *const user_path, const bool reinit_path) { - static CImg s_path; - cimg::mutex(7); - if (reinit_path) s_path.assign(); - if (user_path) { - if (!s_path) s_path.assign(1024); - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path.assign(1024); - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; + if (!path_found) { + std::strcpy(s_path,".\\ffmpeg.exe"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"ffmpeg.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./ffmpeg"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"ffmpeg"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the \c gzip binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c gzip binary. + **/ + inline const char *gzip_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; #if cimg_OS==2 - if (!path_found) { - std::strcpy(s_path,".\\gunzip.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"gunzip.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./gunzip"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"gunzip"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the \c dcraw binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c dcraw binary. - **/ - inline const char *dcraw_path(const char *const user_path, const bool reinit_path) { - static CImg s_path; - cimg::mutex(7); - if (reinit_path) s_path.assign(); - if (user_path) { - if (!s_path) s_path.assign(1024); - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path.assign(1024); - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; + if (!path_found) { + std::strcpy(s_path,".\\gzip.exe"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"gzip.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./gzip"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"gzip"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the \c gunzip binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c gunzip binary. + **/ + inline const char *gunzip_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; #if cimg_OS==2 - if (!path_found) { - std::strcpy(s_path,".\\dcraw.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"dcraw.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./dcraw"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"dcraw"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the \c wget binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c wget binary. - **/ - inline const char *wget_path(const char *const user_path, const bool reinit_path) { - static CImg s_path; - cimg::mutex(7); - if (reinit_path) s_path.assign(); - if (user_path) { - if (!s_path) s_path.assign(1024); - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path.assign(1024); - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; + if (!path_found) { + std::strcpy(s_path,".\\gunzip.exe"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"gunzip.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./gunzip"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"gunzip"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the \c dcraw binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c dcraw binary. + **/ + inline const char *dcraw_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; #if cimg_OS==2 - if (!path_found) { - std::strcpy(s_path,".\\wget.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"wget.exe"); -#else - if (!path_found) { - std::strcpy(s_path,"./wget"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"wget"); -#endif - winformat_string(s_path); - } - cimg::mutex(7,0); - return s_path; - } - - //! Get/set path to the \c curl binary. - /** - \param user_path Specified path, or \c 0 to get the path currently used. - \param reinit_path Force path to be recalculated (may take some time). - \return Path containing the \c curl binary. - **/ - inline const char *curl_path(const char *const user_path, const bool reinit_path) { - static CImg s_path; - cimg::mutex(7); - if (reinit_path) s_path.assign(); - if (user_path) { - if (!s_path) s_path.assign(1024); - std::memset(s_path,0,1024); - std::strncpy(s_path,user_path,1023); - } else if (!s_path) { - s_path.assign(1024); - std::memset(s_path,0,1024); - bool path_found = false; - std::FILE *file = 0; + if (!path_found) { + std::strcpy(s_path,".\\dcraw.exe"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"dcraw.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./dcraw"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"dcraw"); +#endif + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the \c wget binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c wget binary. + **/ + inline const char *wget_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; #if cimg_OS==2 - if (!path_found) { - std::strcpy(s_path,".\\curl.exe"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"curl.exe"); + if (!path_found) { + std::strcpy(s_path,".\\wget.exe"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"wget.exe"); #else - if (!path_found) { - std::strcpy(s_path,"./curl"); - if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } - } - if (!path_found) std::strcpy(s_path,"curl"); + if (!path_found) { + std::strcpy(s_path,"./wget"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"wget"); #endif - winformat_string(s_path); + winformat_string(s_path); + } + cimg::mutex(7,0); + return s_path; + } + + //! Get/set path to the \c curl binary. + /** + \param user_path Specified path, or \c 0 to get the path currently used. + \param reinit_path Force path to be recalculated (may take some time). + \return Path containing the \c curl binary. + **/ + inline const char *curl_path(const char *const user_path, const bool reinit_path) { + static CImg s_path; + cimg::mutex(7); + if (reinit_path) s_path.assign(); + if (user_path) { + if (!s_path) s_path.assign(1024); + std::strncpy(s_path,user_path,1023); + } else if (!s_path) { + s_path.assign(1024); + bool path_found = false; + std::FILE *file = 0; +#if cimg_OS==2 + if (!path_found) { + std::strcpy(s_path,".\\curl.exe"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } + } + if (!path_found) std::strcpy(s_path,"curl.exe"); +#else + if (!path_found) { + std::strcpy(s_path,"./curl"); + if ((file=std::fopen(s_path,"r"))!=0) { cimg::fclose(file); path_found = true; } } - cimg::mutex(7,0); - return s_path; + if (!path_found) std::strcpy(s_path,"curl"); +#endif + winformat_string(s_path); } + cimg::mutex(7,0); + return s_path; + } - //! Load file from network as a local temporary file. - /** - \param filename Filename, as a C-string. - \param[out] filename_local C-string containing the path to a local copy of \c filename. - \return Value of \c filename_local. - \note Use the \c libcurl library, or the external binaries \c wget or \c curl to perform the download. - **/ - inline char *load_network(const char *const url, char *const filename_local) { - if (!url) - throw CImgArgumentException("cimg::load_network(): Specified URL is (null)."); - if (!filename_local) - throw CImgArgumentException("cimg::load_network(): Specified destination string is (null)."); + // [internal] Sorting function, used by cimg::files(). + inline int _sort_files(const void* a, const void* b) { + const CImg &sa = *(CImg*)a, &sb = *(CImg*)b; + return std::strcmp(sa._data,sb._data); + } - const char *const __ext = cimg::split_filename(url), *const _ext = (*__ext && __ext>url)?__ext-1:__ext; - CImg ext = CImg::string(_ext); - std::FILE *file = 0; - *filename_local = 0; - if (ext._width>16 || !cimg::strncasecmp(ext,"cgi",3)) *ext = 0; - else cimg::strwindows_reserved(ext); - do { - cimg_snprintf(filename_local,256,"%s%c%s%s", - cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext._data); - if ((file=std::fopen(filename_local,"rb"))!=0) cimg::fclose(file); - } while (file); + //! Return list of files/directories in specified directory. + /** + \param path Path to the directory. Set to 0 for current directory. + \param is_pattern Tell if specified path has a matching pattern in it. + \param mode Output type, can be primary { 0=files only | 1=folders only | 2=files + folders }. + \param include_path Tell if \c path must be included in resulting filenames. + \return A list of filenames. + **/ + inline CImgList files(const char *const path, const bool is_pattern=false, + const unsigned int mode=2, const bool include_path=false) { + if (!path || !*path) return files("*",true,mode,include_path); + CImgList res; + + // If path is a valid folder name, ignore argument 'is_pattern'. + const bool _is_pattern = is_pattern && !cimg::is_directory(path); + bool is_root = false, is_current = false; + cimg::unused(is_root,is_current); -#ifdef cimg_use_curl - const unsigned int omode = cimg::exception_mode(); - cimg::exception_mode(0); - try { - CURL *curl = 0; - CURLcode res; - curl = curl_easy_init(); - if (curl) { - file = cimg::fopen(filename_local,"wb"); - curl_easy_setopt(curl,CURLOPT_URL,url); - curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,0); - curl_easy_setopt(curl,CURLOPT_WRITEDATA,file); - curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,0L); - curl_easy_setopt(curl,CURLOPT_SSL_VERIFYHOST,0L); - curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1L); - if (std::strchr(url,'?')) curl_easy_setopt(curl,CURLOPT_HTTPGET,1L); - res = curl_easy_perform(curl); - curl_easy_cleanup(curl); - std::fseek(file,0,SEEK_END); // Check if file size is 0. - const long siz = std::ftell(file); - cimg::fclose(file); - if (siz>0 && res==CURLE_OK) { - cimg::exception_mode(omode); - return filename_local; - } else std::remove(filename_local); - } - } catch (...) { } + // Clean format of input path. + CImg pattern, _path = CImg::string(path); +#if cimg_OS==2 + for (char *ps = _path; *ps; ++ps) if (*ps=='\\') *ps='/'; +#endif + char *pd = _path; + for (char *ps = pd; *ps; ++ps) { if (*ps!='/' || *ps!=*(ps+1)) *(pd++) = *ps; } + *pd = 0; + unsigned int lp = (unsigned int)std::strlen(_path); + if (!_is_pattern && lp && _path[lp - 1]=='/') { + _path[lp - 1] = 0; --lp; +#if cimg_OS!=2 + is_root = !*_path; +#endif + } - cimg::exception_mode(omode); + // Separate folder path and matching pattern. + if (_is_pattern) { + const unsigned int bpos = (unsigned int)(cimg::basename(_path,'/') - _path.data()); + CImg::string(_path).move_to(pattern); + if (bpos) { + _path[bpos - 1] = 0; // End 'path' at last slash. +#if cimg_OS!=2 + is_root = !*_path; +#endif + } else { // No path to folder specified, assuming current folder. + is_current = true; *_path = 0; + } + lp = (unsigned int)std::strlen(_path); + } + + // Windows version. +#if cimg_OS==2 + if (!_is_pattern) { + pattern.assign(lp + 3); + std::memcpy(pattern,_path,lp); + pattern[lp] = '/'; pattern[lp + 1] = '*'; pattern[lp + 2] = 0; + } + WIN32_FIND_DATAA file_data; + const HANDLE dir = FindFirstFileA(pattern.data(),&file_data); + if (dir==INVALID_HANDLE_VALUE) return CImgList::const_empty(); + do { + const char *const filename = file_data.cFileName; + if (*filename!='.' || (filename[1] && (filename[1]!='.' || filename[2]))) { + const unsigned int lf = (unsigned int)std::strlen(filename); + const bool is_directory = (file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)!=0; + if ((!mode && !is_directory) || (mode==1 && is_directory) || mode>=2) { + if (include_path) { + CImg full_filename((lp?lp+1:0) + lf + 1); + if (lp) { std::memcpy(full_filename,_path,lp); full_filename[lp] = '/'; } + std::memcpy(full_filename._data + (lp?lp + 1:0),filename,lf + 1); + full_filename.move_to(res); + } else CImg(filename,lf + 1).move_to(res); + } + } + } while (FindNextFileA(dir,&file_data)); + FindClose(dir); + + // Unix version (posix). +#else + DIR *const dir = opendir(is_root?"/":is_current?".":_path.data()); + if (!dir) return CImgList::const_empty(); + struct dirent *ent; + while ((ent=readdir(dir))!=0) { + const char *const filename = ent->d_name; + if (*filename!='.' || (filename[1] && (filename[1]!='.' || filename[2]))) { + const unsigned int lf = (unsigned int)std::strlen(filename); + CImg full_filename(lp + lf + 2); + + if (!is_current) { + full_filename.assign(lp + lf + 2); + if (lp) std::memcpy(full_filename,_path,lp); + full_filename[lp] = '/'; + std::memcpy(full_filename._data + lp + 1,filename,lf + 1); + } else full_filename.assign(filename,lf + 1); + + struct stat st; + if (stat(full_filename,&st)==-1) continue; + const bool is_directory = (st.st_mode & S_IFDIR)!=0; + if ((!mode && !is_directory) || (mode==1 && is_directory) || mode==2) { + if (include_path) { + if (!_is_pattern || (_is_pattern && !fnmatch(pattern,full_filename,0))) + full_filename.move_to(res); + } else { + if (!_is_pattern || (_is_pattern && !fnmatch(pattern,full_filename,0))) + CImg(filename,lf + 1).move_to(res); + } + } + } + } + closedir(dir); #endif - CImg command(std::strlen(url) + 64); - *command = 0; + // Sort resulting list by lexicographic order. + if (res._width>=2) std::qsort(res._data,res._width,sizeof(CImg),_sort_files); - // Try with 'curl' first. - cimg_snprintf(command,command._width,"%s -f --silent --compressed -o \"%s\" \"%s\"", - cimg::curl_path(),filename_local,url); - cimg::system(command); + return res; + } - if (!(file = std::fopen(filename_local,"rb"))) { + //! Try to guess format from an image file. + /** + \param file Input file (can be \c 0 if \c filename is set). + \param filename Filename, as a C-string (can be \c 0 if \c file is set). + \return C-string containing the guessed file format, or \c 0 if nothing has been guessed. + **/ + inline const char *ftype(std::FILE *const file, const char *const filename) { + if (!file && !filename) + throw CImgArgumentException("cimg::ftype(): Specified filename is (null)."); + static const char + *const _pnm = "pnm", + *const _pfm = "pfm", + *const _bmp = "bmp", + *const _gif = "gif", + *const _jpg = "jpg", + *const _off = "off", + *const _pan = "pan", + *const _png = "png", + *const _tif = "tif", + *const _inr = "inr", + *const _dcm = "dcm"; + const char *f_type = 0; + CImg header; + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + try { + header._load_raw(file,filename,512,1,1,1,false,false,0); + const unsigned char *const uheader = (unsigned char*)header._data; + if (!std::strncmp(header,"OFF\n",4)) f_type = _off; // OFF. + else if (!std::strncmp(header,"#INRIMAGE",9)) f_type = _inr; // INRIMAGE. + else if (!std::strncmp(header,"PANDORE",7)) f_type = _pan; // PANDORE. + else if (!std::strncmp(header.data() + 128,"DICM",4)) f_type = _dcm; // DICOM. + else if (uheader[0]==0xFF && uheader[1]==0xD8 && uheader[2]==0xFF) f_type = _jpg; // JPEG. + else if (header[0]=='B' && header[1]=='M') f_type = _bmp; // BMP. + else if (header[0]=='G' && header[1]=='I' && header[2]=='F' && header[3]=='8' && header[5]=='a' && // GIF. + (header[4]=='7' || header[4]=='9')) f_type = _gif; + else if (uheader[0]==0x89 && uheader[1]==0x50 && uheader[2]==0x4E && uheader[3]==0x47 && // PNG. + uheader[4]==0x0D && uheader[5]==0x0A && uheader[6]==0x1A && uheader[7]==0x0A) f_type = _png; + else if ((uheader[0]==0x49 && uheader[1]==0x49) || (uheader[0]==0x4D && uheader[1]==0x4D)) f_type = _tif; // TIFF. + else { // PNM or PFM. + CImgList _header = header.get_split(CImg::vector('\n'),0,false); + cimglist_for(_header,l) { + if (_header(l,0)=='#') continue; + if (_header[l]._height==2 && _header(l,0)=='P') { + const char c = _header(l,1); + if (c=='f' || c=='F') { f_type = _pfm; break; } + if (c>='1' && c<='9') { f_type = _pnm; break; } + } + f_type = 0; break; + } + } + } catch (CImgIOException&) { } + cimg::exception_mode(omode); + return f_type; + } - // Try with 'wget' otherwise. - cimg_snprintf(command,command._width,"%s -q -r -l 0 --no-cache -O \"%s\" \"%s\"", - cimg::wget_path(),filename_local,url); - cimg::system(command); + //! Load file from network as a local temporary file. + /** + \param filename Filename, as a C-string. + \param[out] filename_local C-string containing the path to a local copy of \c filename. + \param timeout Maximum time (in seconds) authorized for downloading the file from the URL. + \param try_fallback When using libcurl, tells using system calls as fallbacks in case of libcurl failure. + \return Value of \c filename_local. + \note Use the \c libcurl library, or the external binaries \c wget or \c curl to perform the download. + **/ + inline char *load_network(const char *const url, char *const filename_local, + const unsigned int timeout, const bool try_fallback, + const char *const referer) { + if (!url) + throw CImgArgumentException("cimg::load_network(): Specified URL is (null)."); + if (!filename_local) + throw CImgArgumentException("cimg::load_network(): Specified destination string is (null)."); + + const char *const __ext = cimg::split_filename(url), *const _ext = (*__ext && __ext>url)?__ext - 1:__ext; + CImg ext = CImg::string(_ext); + std::FILE *file = 0; + *filename_local = 0; + if (ext._width>16 || !cimg::strncasecmp(ext,"cgi",3)) *ext = 0; + else cimg::strwindows_reserved(ext); + do { + cimg_snprintf(filename_local,256,"%s%c%s%s", + cimg::temporary_path(),cimg_file_separator,cimg::filenamerand(),ext._data); + if ((file=std::fopen(filename_local,"rb"))!=0) cimg::fclose(file); + } while (file); - if (!(file = std::fopen(filename_local,"rb"))) - throw CImgIOException("cimg::load_network(): Failed to load file '%s' with external commands " - "'wget' or 'curl'.",url); +#ifdef cimg_use_curl + const unsigned int omode = cimg::exception_mode(); + cimg::exception_mode(0); + try { + CURL *curl = 0; + CURLcode res; + curl = curl_easy_init(); + if (curl) { + file = cimg::fopen(filename_local,"wb"); + curl_easy_setopt(curl,CURLOPT_URL,url); + curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,0); + curl_easy_setopt(curl,CURLOPT_WRITEDATA,file); + curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,0L); + curl_easy_setopt(curl,CURLOPT_SSL_VERIFYHOST,0L); + curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1L); + if (timeout) curl_easy_setopt(curl,CURLOPT_TIMEOUT,(long)timeout); + if (std::strchr(url,'?')) curl_easy_setopt(curl,CURLOPT_HTTPGET,1L); + if (referer) curl_easy_setopt(curl,CURLOPT_REFERER,referer); + res = curl_easy_perform(curl); + curl_easy_cleanup(curl); + std::fseek(file,0,SEEK_END); // Check if file size is 0. + const long siz = std::ftell(file); cimg::fclose(file); + if (siz>0 && res==CURLE_OK) { + cimg::exception_mode(omode); + return filename_local; + } else std::remove(filename_local); + } + } catch (...) { } + cimg::exception_mode(omode); + if (!try_fallback) throw CImgIOException("cimg::load_network(): Failed to load file '%s' with libcurl.",url); +#endif + + CImg command((unsigned int)std::strlen(url) + 64); + cimg::unused(try_fallback); + + // Try with 'curl' first. + if (timeout) { + if (referer) + cimg_snprintf(command,command._width,"%s -e %s -m %u -f --silent --compressed -o \"%s\" \"%s\"", + cimg::curl_path(),referer,timeout,filename_local,url); + else + cimg_snprintf(command,command._width,"%s -m %u -f --silent --compressed -o \"%s\" \"%s\"", + cimg::curl_path(),timeout,filename_local,url); + } else { + if (referer) + cimg_snprintf(command,command._width,"%s -e %s -f --silent --compressed -o \"%s\" \"%s\"", + cimg::curl_path(),referer,filename_local,url); + else + cimg_snprintf(command,command._width,"%s -f --silent --compressed -o \"%s\" \"%s\"", + cimg::curl_path(),filename_local,url); + } + cimg::system(command); - // Try gunzip it. - cimg_snprintf(command,command._width,"%s.gz",filename_local); - std::rename(filename_local,command); - cimg_snprintf(command,command._width,"%s --quiet \"%s.gz\"", - gunzip_path(),filename_local); - cimg::system(command); - file = std::fopen(filename_local,"rb"); - if (!file) { - cimg_snprintf(command,command._width,"%s.gz",filename_local); - std::rename(command,filename_local); - file = std::fopen(filename_local,"rb"); - } + if (!(file = std::fopen(filename_local,"rb"))) { + + // Try with 'wget' otherwise. + if (timeout) { + if (referer) + cimg_snprintf(command,command._width,"%s --referer=%s -T %u -q -r -l 0 --no-cache -O \"%s\" \"%s\"", + cimg::wget_path(),referer,timeout,filename_local,url); + else + cimg_snprintf(command,command._width,"%s -T %u -q -r -l 0 --no-cache -O \"%s\" \"%s\"", + cimg::wget_path(),timeout,filename_local,url); + } else { + if (referer) + cimg_snprintf(command,command._width,"%s --referer=%s -q -r -l 0 --no-cache -O \"%s\" \"%s\"", + cimg::wget_path(),referer,filename_local,url); + else + cimg_snprintf(command,command._width,"%s -q -r -l 0 --no-cache -O \"%s\" \"%s\"", + cimg::wget_path(),filename_local,url); } - std::fseek(file,0,SEEK_END); // Check if file size is 0. - if (std::ftell(file)<=0) - throw CImgIOException("cimg::load_network(): Failed to load URL '%s' with external commands " + cimg::system(command); + + if (!(file = std::fopen(filename_local,"rb"))) + throw CImgIOException("cimg::load_network(): Failed to load file '%s' with external commands " "'wget' or 'curl'.",url); cimg::fclose(file); - return filename_local; + + // Try gunzip it. + cimg_snprintf(command,command._width,"%s.gz",filename_local); + std::rename(filename_local,command); + cimg_snprintf(command,command._width,"%s --quiet \"%s.gz\"", + gunzip_path(),filename_local); + cimg::system(command); + file = std::fopen(filename_local,"rb"); + if (!file) { + cimg_snprintf(command,command._width,"%s.gz",filename_local); + std::rename(command,filename_local); + file = std::fopen(filename_local,"rb"); + } } + std::fseek(file,0,SEEK_END); // Check if file size is 0. + if (std::ftell(file)<=0) + throw CImgIOException("cimg::load_network(): Failed to load URL '%s' with external commands " + "'wget' or 'curl'.",url); + cimg::fclose(file); + return filename_local; + } - // Implement a tic/toc mechanism to display elapsed time of algorithms. - inline unsigned long tictoc(const bool is_tic) { - cimg::mutex(2); - static CImg times(64); - static unsigned int pos = 0; - const unsigned long t1 = cimg::time(); - if (is_tic) { // Tic. - times[pos++] = t1; - if (pos>=times._width) - throw CImgArgumentException("cimg::tic(): Too much calls to 'cimg::tic()' without calls to 'cimg::toc()'."); - cimg::mutex(2,0); - return t1; - } - // Toc. - if (!pos) - throw CImgArgumentException("cimg::toc(): No previous call to 'cimg::tic()' has been made."); - const unsigned long - t0 = times[--pos], - dt = t1>=t0?(t1-t0):cimg::type::max(); - const unsigned int - edays = (unsigned int)(dt/86400000.0), - ehours = (unsigned int)((dt - edays*86400000.0)/3600000.0), - emin = (unsigned int)((dt - edays*86400000.0 - ehours*3600000.0)/60000.0), - esec = (unsigned int)((dt - edays*86400000.0 - ehours*3600000.0 - emin*60000.0)/1000.0), - ems = (unsigned int)(dt - edays*86400000.0 - ehours*3600000.0 - emin*60000.0 - esec*1000.0); - if (!edays && !ehours && !emin && !esec) - std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u ms%s\n", - cimg::t_red,1+2*pos,"",ems,cimg::t_normal); + // Implement a tic/toc mechanism to display elapsed time of algorithms. + inline unsigned long tictoc(const bool is_tic) { + cimg::mutex(2); + static CImg times(64); + static unsigned int pos = 0; + const unsigned long t1 = cimg::time(); + if (is_tic) { // Tic. + times[pos++] = t1; + if (pos>=times._width) + throw CImgArgumentException("cimg::tic(): Too much calls to 'cimg::tic()' without calls to 'cimg::toc()'."); + cimg::mutex(2,0); + return t1; + } + // Toc. + if (!pos) + throw CImgArgumentException("cimg::toc(): No previous call to 'cimg::tic()' has been made."); + const unsigned long + t0 = times[--pos], + dt = t1>=t0?(t1 - t0):cimg::type::max(); + const unsigned int + edays = (unsigned int)(dt/86400000.0), + ehours = (unsigned int)((dt - edays*86400000.0)/3600000.0), + emin = (unsigned int)((dt - edays*86400000.0 - ehours*3600000.0)/60000.0), + esec = (unsigned int)((dt - edays*86400000.0 - ehours*3600000.0 - emin*60000.0)/1000.0), + ems = (unsigned int)(dt - edays*86400000.0 - ehours*3600000.0 - emin*60000.0 - esec*1000.0); + if (!edays && !ehours && !emin && !esec) + std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u ms%s\n", + cimg::t_red,1 + 2*pos,"",ems,cimg::t_normal); + else { + if (!edays && !ehours && !emin) + std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u sec %u ms%s\n", + cimg::t_red,1 + 2*pos,"",esec,ems,cimg::t_normal); else { - if (!edays && !ehours && !emin) - std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u sec %u ms%s\n", - cimg::t_red,1+2*pos,"",esec,ems,cimg::t_normal); - else { - if (!edays && !ehours) - std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u min %u sec %u ms%s\n", - cimg::t_red,1+2*pos,"",emin,esec,ems,cimg::t_normal); + if (!edays && !ehours) + std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u min %u sec %u ms%s\n", + cimg::t_red,1 + 2*pos,"",emin,esec,ems,cimg::t_normal); + else{ + if (!edays) + std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u hours %u min %u sec %u ms%s\n", + cimg::t_red,1 + 2*pos,"",ehours,emin,esec,ems,cimg::t_normal); else{ - if (!edays) - std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u hours %u min %u sec %u ms%s\n", - cimg::t_red,1+2*pos,"",ehours,emin,esec,ems,cimg::t_normal); - else{ - std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u days %u hours %u min %u sec %u ms%s\n", - cimg::t_red,1+2*pos,"",edays,ehours,emin,esec,ems,cimg::t_normal); - } + std::fprintf(cimg::output(),"%s[CImg]%*sElapsed time: %u days %u hours %u min %u sec %u ms%s\n", + cimg::t_red,1 + 2*pos,"",edays,ehours,emin,esec,ems,cimg::t_normal); } } } - cimg::mutex(2,0); - return dt; } + cimg::mutex(2,0); + return dt; + } // Return a temporary string describing the size of a memory buffer. inline const char *strbuffersize(const unsigned long size) { - static CImg res(256); *res = 0; + static CImg res(256); cimg::mutex(5); if (size<1024LU) cimg_snprintf(res,res._width,"%lu byte%s",size,size>1?"s":""); else if (size<1024*1024LU) { const float nsize = size/1024.0f; cimg_snprintf(res,res._width,"%.1f Kio",nsize); } @@ -49859,7 +55506,7 @@ - Up to 6 buttons can be defined in the dialog window. - The function returns when a user clicked one of the button or closed the dialog window. - If a button text is set to 0, the corresponding button (and the followings) will not appear in the dialog box. - At least one button must be specified. + At least one button must be specified. **/ template inline int dialog(const char *const title, const char *const msg, @@ -49872,7 +55519,7 @@ logo._data,is_centered); throw CImgIOException("cimg::dialog(): No display available."); #else - const unsigned char + static const unsigned char black[] = { 0,0,0 }, white[] = { 255,255,255 }, gray[] = { 200,200,200 }, gray2[] = { 150,150,150 }; // Create buttons and canvas graphics @@ -49897,30 +55544,34 @@ if (bh>48) bh = 48; CImg button(bw,bh,1,3); - button.draw_rectangle(0,0,bw-1,bh-1,gray); - button.draw_line(0,0,bw-1,0,white).draw_line(0,bh-1,0,0,white); - button.draw_line(bw-1,0,bw-1,bh-1,black).draw_line(bw-1,bh-1,0,bh-1,black); - button.draw_line(1,bh-2,bw-2,bh-2,gray2).draw_line(bw-2,bh-2,bw-2,1,gray2); + button.draw_rectangle(0,0,bw - 1,bh - 1,gray); + button.draw_line(0,0,bw - 1,0,white).draw_line(0,bh - 1,0,0,white); + button.draw_line(bw - 1,0,bw - 1,bh - 1,black).draw_line(bw - 1,bh - 1,0,bh - 1,black); + button.draw_line(1,bh - 2,bw - 2,bh - 2,gray2).draw_line(bw - 2,bh - 2,bw - 2,1,gray2); CImg sbutton(bw,bh,1,3); - sbutton.draw_rectangle(0,0,bw-1,bh-1,gray); - sbutton.draw_line(0,0,bw-1,0,black).draw_line(bw-1,0,bw-1,bh-1,black); - sbutton.draw_line(bw-1,bh-1,0,bh-1,black).draw_line(0,bh-1,0,0,black); - sbutton.draw_line(1,1,bw-2,1,white).draw_line(1,bh-2,1,1,white); - sbutton.draw_line(bw-2,1,bw-2,bh-2,black).draw_line(bw-2,bh-2,1,bh-2,black); - sbutton.draw_line(2,bh-3,bw-3,bh-3,gray2).draw_line(bw-3,bh-3,bw-3,2,gray2); - sbutton.draw_line(4,4,bw-5,4,black,1,0xAAAAAAAA,true).draw_line(bw-5,4,bw-5,bh-5,black,1,0xAAAAAAAA,false); - sbutton.draw_line(bw-5,bh-5,4,bh-5,black,1,0xAAAAAAAA,false).draw_line(4,bh-5,4,4,black,1,0xAAAAAAAA,false); + sbutton.draw_rectangle(0,0,bw - 1,bh - 1,gray); + sbutton.draw_line(0,0,bw - 1,0,black).draw_line(bw - 1,0,bw - 1,bh - 1,black); + sbutton.draw_line(bw - 1,bh - 1,0,bh - 1,black).draw_line(0,bh - 1,0,0,black); + sbutton.draw_line(1,1,bw - 2,1,white).draw_line(1,bh - 2,1,1,white); + sbutton.draw_line(bw - 2,1,bw - 2,bh - 2,black).draw_line(bw - 2,bh - 2,1,bh - 2,black); + sbutton.draw_line(2,bh - 3,bw - 3,bh - 3,gray2).draw_line(bw - 3,bh - 3,bw - 3,2,gray2); + sbutton.draw_line(4,4,bw - 5,4,black,1,0xAAAAAAAA,true).draw_line(bw - 5,4,bw - 5,bh - 5,black,1,0xAAAAAAAA,false); + sbutton.draw_line(bw - 5,bh - 5,4,bh - 5,black,1,0xAAAAAAAA,false).draw_line(4,bh - 5,4,4,black,1,0xAAAAAAAA,false); CImg cbutton(bw,bh,1,3); - cbutton.draw_rectangle(0,0,bw-1,bh-1,black).draw_rectangle(1,1,bw-2,bh-2,gray2).draw_rectangle(2,2,bw-3,bh-3,gray); - cbutton.draw_line(4,4,bw-5,4,black,1,0xAAAAAAAA,true).draw_line(bw-5,4,bw-5,bh-5,black,1,0xAAAAAAAA,false); - cbutton.draw_line(bw-5,bh-5,4,bh-5,black,1,0xAAAAAAAA,false).draw_line(4,bh-5,4,4,black,1,0xAAAAAAAA,false); + cbutton.draw_rectangle(0,0,bw - 1,bh - 1,black).draw_rectangle(1,1,bw - 2,bh - 2,gray2). + draw_rectangle(2,2,bw - 3,bh - 3,gray); + cbutton.draw_line(4,4,bw - 5,4,black,1,0xAAAAAAAA,true).draw_line(bw - 5,4,bw - 5,bh - 5,black,1,0xAAAAAAAA,false); + cbutton.draw_line(bw - 5,bh - 5,4,bh - 5,black,1,0xAAAAAAAA,false).draw_line(4,bh - 5,4,4,black,1,0xAAAAAAAA,false); cimglist_for(buttons,ll) { - CImg(cbutton).draw_image(1+(bw-buttons[ll].width())/2,1+(bh-buttons[ll].height())/2,buttons[ll]). + CImg(cbutton). + draw_image(1 + (bw -buttons[ll].width())/2,1 + (bh - buttons[ll].height())/2,buttons[ll]). move_to(cbuttons); - CImg(sbutton).draw_image((bw-buttons[ll].width())/2,(bh-buttons[ll].height())/2,buttons[ll]). + CImg(sbutton). + draw_image((bw - buttons[ll].width())/2,(bh - buttons[ll].height())/2,buttons[ll]). move_to(sbuttons); - CImg(button).draw_image((bw-buttons[ll].width())/2,(bh-buttons[ll].height())/2,buttons[ll]). + CImg(button). + draw_image((bw - buttons[ll].width())/2,(bh - buttons[ll].height())/2,buttons[ll]). move_to(buttons[ll]); } @@ -49929,36 +55580,36 @@ ((CImg().draw_text(0,0,"%s",gray,0,1,13,msg)*=-1)+=200).resize(-100,-100,1,3).move_to(canvas); const unsigned int - bwall = (buttons._width-1)*(12+bw) + bw, - w = cimg::max(196U,36+logo._width+canvas._width,24+bwall), - h = cimg::max(96U,36+canvas._height+bh,36+logo._height+bh), - lx = 12 + (canvas._data?0:((w-24-logo._width)/2)), - ly = (h-12-bh-logo._height)/2, - tx = lx+logo._width+12, - ty = (h-12-bh-canvas._height)/2, - bx = (w-bwall)/2, - by = h-12-bh; + bwall = (buttons._width - 1)*(12 + bw) + bw, + w = cimg::max(196U,36 + logo._width + canvas._width,24 + bwall), + h = cimg::max(96U,36 + canvas._height + bh,36 + logo._height + bh), + lx = 12 + (canvas._data?0:((w - 24 - logo._width)/2)), + ly = (h - 12 - bh - logo._height)/2, + tx = lx + logo._width + 12, + ty = (h - 12 - bh - canvas._height)/2, + bx = (w - bwall)/2, + by = h - 12 - bh; if (canvas._data) canvas = CImg(w,h,1,3). - draw_rectangle(0,0,w-1,h-1,gray). - draw_line(0,0,w-1,0,white).draw_line(0,h-1,0,0,white). - draw_line(w-1,0,w-1,h-1,black).draw_line(w-1,h-1,0,h-1,black). + draw_rectangle(0,0,w - 1,h - 1,gray). + draw_line(0,0,w - 1,0,white).draw_line(0,h - 1,0,0,white). + draw_line(w - 1,0,w - 1,h - 1,black).draw_line(w - 1,h - 1,0,h - 1,black). draw_image(tx,ty,canvas); else canvas = CImg(w,h,1,3). - draw_rectangle(0,0,w-1,h-1,gray). - draw_line(0,0,w-1,0,white).draw_line(0,h-1,0,0,white). - draw_line(w-1,0,w-1,h-1,black).draw_line(w-1,h-1,0,h-1,black); + draw_rectangle(0,0,w - 1,h - 1,gray). + draw_line(0,0,w - 1,0,white).draw_line(0,h - 1,0,0,white). + draw_line(w - 1,0,w - 1,h - 1,black).draw_line(w - 1,h - 1,0,h - 1,black); if (logo._data) canvas.draw_image(lx,ly,logo); unsigned int xbuttons[6] = { 0 }; - cimglist_for(buttons,lll) { xbuttons[lll] = bx+(bw+12)*lll; canvas.draw_image(xbuttons[lll],by,buttons[lll]); } + cimglist_for(buttons,lll) { xbuttons[lll] = bx + (bw + 12)*lll; canvas.draw_image(xbuttons[lll],by,buttons[lll]); } // Open window and enter events loop CImgDisplay disp(canvas,title?title:" ",0,false,is_centered?true:false); if (is_centered) disp.move((CImgDisplay::screen_width() - disp.width())/2, - (CImgDisplay::screen_height() - disp.height())/2); + (CImgDisplay::screen_height() - disp.height())/2); bool stop_flag = false, refresh = false; int oselected = -1, oclicked = -1, selected = -1, clicked = -1; while (!disp.is_closed() && !stop_flag) { @@ -49979,8 +55630,8 @@ oclicked = clicked; clicked = -1; cimglist_for(buttons,l) - if (disp.mouse_y()>=(int)by && disp.mouse_y()<(int)(by+bh) && - disp.mouse_x()>=(int)xbuttons[l] && disp.mouse_x()<(int)(xbuttons[l]+bw)) { + if (disp.mouse_y()>=(int)by && disp.mouse_y()<(int)(by + bh) && + disp.mouse_x()>=(int)xbuttons[l] && disp.mouse_x()<(int)(xbuttons[l] + bw)) { clicked = selected = l; refresh = true; } @@ -49990,11 +55641,11 @@ if (disp.key()) { oselected = selected; switch (disp.key()) { - case cimg::keyESC : selected=-1; stop_flag = true; break; + case cimg::keyESC : selected = -1; stop_flag = true; break; case cimg::keyENTER : if (selected<0) selected = 0; stop_flag = true; break; case cimg::keyTAB : case cimg::keyARROWRIGHT : - case cimg::keyARROWDOWN : selected = (selected+1)%buttons.width(); break; + case cimg::keyARROWDOWN : selected = (selected + 1)%buttons.width(); break; case cimg::keyARROWLEFT : case cimg::keyARROWUP : selected = (selected + buttons.width() - 1)%buttons.width(); break; } @@ -50028,8 +55679,8 @@ \par Example \code const double - res1 = cimg::eval("cos(x)^2+sin(y)^2",2,2), // will return '1'. - res2 = cimg::eval(0,1,1); // will return '1' too. + res1 = cimg::eval("cos(x)^2 + sin(y)^2",2,2), // will return '1'. + res2 = cimg::eval(0,1,1); // will return '1' too. \endcode **/ inline double eval(const char *const expression, const double x, const double y, const double z, const double c) { @@ -50070,6 +55721,9 @@ #ifdef _cimg_redefine_PI #define PI 3.141592653589793238462643383 #endif +#ifdef _MSC_VER +#pragma warning(pop) +#endif #endif // Local Variables: diff -Nru calligra-2.9.7/krita/plugins/extensions/gmic/3rdparty/gmic/gimp_update169.gmic calligra-2.9.11/krita/plugins/extensions/gmic/3rdparty/gmic/gimp_update169.gmic --- calligra-2.9.7/krita/plugins/extensions/gmic/3rdparty/gmic/gimp_update169.gmic 1970-01-01 00:00:00.000000000 +0000 +++ calligra-2.9.11/krita/plugins/extensions/gmic/3rdparty/gmic/gimp_update169.gmic 2016-02-02 19:53:14.000000000 +0000 @@ -0,0 +1,49226 @@ +#@gmic +# +# File : update169.gmic +# ( G'MIC command file ) +# +# Description : Update file for G'MIC commands and filters (for version 1.6.9). +# ( http://gmic.eu ) +# +# License : CeCILL v2.0 +# ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html ) +# + +cli_noarg : +-version -v + +-e[] "\n[gmic] No commands, options or data provided (type 'gmic -h' to get help)." +-if {{*,u}>0} -e[] "[gmic] Running in demo mode." -v - -demo , -e[] "" +-else -e[] "\n" +-endif -v - +cli_start : +h : +-help $* +help : -skip ${1=""},${2=1} +-if {!$!} -return -endif +-y -a y +--_help $1,$2 -k[0] +-if {narg(${})} -_help[0] ${},0 -endif +-rm +_help : -skip ${1=""} +-v -1 -use_vt100 +-if {!narg("$1")} _is_example=0 -__help ascii -v + -e[] "" -v - -rm -u "" -return -endif +({'"$1"'}) -autocrop. {'-'} +-if {{[100%]}=={']'}" && "i!={'['}} -l. -s -,{'['} -k[0] -endl -endif +command={t} -rm. +ks0="0" ks1="-k[0]" +-if $2 -__help_header_ascii[] -endif +-r 1,{h+1},1,1,0,0,0,1 +-s +,{'"#@gmic "$command" :"'} -s +,{'"#@gmic "$command":"'} -s +,{'"#@gmic "$command"\n"'} +-if {$!==1} +-l[] -m "foo : -"$command +-repeat 16 -uncommand $command -done +-foo -uncommand foo +-onfail ({'${}'}) -s -,{'" (did you mean "'} -if {$!>1} -s[1] -,39 -k[1] misspelling={t} -endif -rm +-endl +-if {narg($misspelling)} misspelling=" (did you mean '"$misspelling"' ?)" -endif +-v + -e[] "\n[gmic] Command '"$command"' has no description"$misspelling". Try 'gmic -h' for global help.\n\n" -v - +-rm -u "" -return +-endif +-rm[0] -a y -s -,10 +stopflag=0 +_is_example=0 +-_document_gmic_header_ascii[] 0 +-repeat $! -l[$>] -if {h>7" && "{${-head\ 6}'=='{'"#@gmic"'}}} +-rows 7,100% -autocrop {'" "'} +-if {i!={':'}} +-s -,{'": "'} -autocrop {'" "'} -autocrop {':'} -autocrop {'" "'} +-if {{0,t}'=='$command} +-_document_gmic_declaration_ascii +-if $_shortcut +-v + -e[] "\n "$_gmic_m$_gmic_b"-"$command":"$_gmic_n$_gmic_m" Equivalent to '"$_gmic_b$_shortcutlink0$_gmic_n"'." -v - +-u $_shortcutlink0 -return +-endif +-else stopflag=1 +-endif +-else +-rows 1,100% +-if {i=={':'}} stopflag=1 +-else +_is_tutorial= +-autocrop {'" "'} +-if {i=={'$'}} +-rows 1,100% -autocrop {'" "'} +-if {i=={'$'}} +-v + -e[] "" -v - +-if {h==1&&i=={'$'}} tuturl=http://gmic.eu/tutorial/_$command.shtml +-else -autocrop {'$'} -autocrop {'" "'} tuturl=http://gmic.eu/tutorial/{0,t}.shtml +-endif +-rm ({'$_gmic_c${_gmic_b}"Tutorial:"$_gmic_n$_gmic_c" "$tuturl'}) -y +_is_tutorial=1 +-else +-if $_is_example -i[0] ({'" "'}) +-else -i[0] ({'"\n "$_gmic_c${_gmic_b}"Example: "$_gmic_n$_gmic_c'}) _is_example=1 -endif +-y[0] -a y +-endif +-endif +-_document_gmic_description_ascii +-endif +-endif +-else stopflag=1 -endif ${ks{$!!=0}} -endl -if $stopflag -break -endif -done +-v + -e[] $_gmic_n"\n" -v - -rm +-u "" +__help : +-m "_help_section : -_help_section_$1 \"$""1\"" +-m "_help_paragraph : -_help_paragraph_$1 \"$""1\"" +-_help_header_$1[] +-_help_usage[] +-s -,{'__help_end\ :'} -k[0] +-document_gmic $1,"img/",0 +-_help_examples[] +-_help_footer_$1[] +_help_usage : +-m "GMIC : -u ${_gmic_g}G\47MIC$_gmic_n" +g=$_gmic_g c=$_gmic_c n=$_gmic_n r=$_gmic_r +-_help_paragraph " "$c${b}"gmic [-command1 [arg1_1,arg1_2,..]] .. [-commandN [argN_1,argN_2,..]]"$n" +\n +\n '"${g}"gmic"$n"' is the open-source interpreter of the "${-GMIC}" language, a script-based programming +\n language dedicated to the design of possibly complex image processing pipelines. +\n It can be used to convert, manipulate, filter and visualize image datasets made of one +\n or several 1d/2d or 3d multi-spectral images. +\n +\n This reference documentation describes the rules and technical aspects of the "${-GMIC}" language. +\n You may be also interested by our detailed tutorial pages, at: "${r}"http://gmic.eu/tutorial/"$n +-_help_section "Overall context" +-_help_paragraph " - At any time, "${-GMIC}" manages one list of numbered (and optionally named) pixel-based +\n images, entirely stored in computer memory. +\n +\n - The first image of the list has indice '"${g}"0"$n"' and is denoted by '"$c"[0]"$n"'. The second image of +\n the list is denoted by '"$c"[1]"$n"', the third by '"$c"[2]"$n"' and so on. +\n +\n - Negative indices are treated in a periodic way: '"$c"[-1]"$n"' refers to the last image of the +\n list, '"$c"[-2]"$n"' to the penultimate one, etc. Thus, if the list has 4 images, '"$c"[1]"$n"' and '"$c"[-3]"$n"' +\n both designate the second image of the list. +\n +\n - A named image may be indicated by '"$c"[name]"$n"', if '"${g}"name"$n"' uses the character set "$g"[a-zA-Z0-9_]"$n" +\n and does not start with a number. Image names can be set or reassigned at any moment +\n during the processing pipeline (see commands '"$c"-name"$n"' and '"$c"-input"$n"' for this purpose). +\n +\n - "${-GMIC}" defines a set of various commands and substitution mechanisms to allow the design +\n of complex pipelines managing this list of images, in a very flexible way: +\n You can insert or remove images in the list, rearrange image indices, process images +\n (individually or grouped), merge image data together, display and output image files, etc. +\n +\n - Such a pipeline can be written itself as a custom "${-GMIC}" command storable in a user +\n command file, and can be re-used afterwards in another pipeline if necessary." +-_help_section "Image definition and terminology" +-_help_paragraph " - In "${-GMIC}", each image is modeled as a 1d, 2d, 3d or 4d array of scalar values, uniformly +\n discretized on a rectangular/parallelepipedic domain. +\n +\n - The four dimensions of this array are respectively denoted by: +\n +\n . '"${g}"width"$n"', the number of image columns (size along the "$g"'x'-axis"$n"). +\n . '"${g}"height"$n"', the number of image rows (size along the "$g"'y'-axis"$n"). +\n . '"${g}"depth"$n"', the number of image slices (size along the "$g"'z'-axis"$n"). +\n The depth is equal to 1 for usual color or grayscale 2d images. +\n . '"${g}"spectrum"$n"', the number of image channels (size along the "$g"'c'-axis"$n"). +\n The spectrum is respectively equal to 3 and 4 for usual RGB and RGBA color images. +\n +\n - There are no limitations on the size of each image dimension. For instance, the number of +\n image slices or channels can be of arbitrary size within the limits of available memory. +\n +\n - The "${g}"width, height"$n" and "${g}"depth"$n" of an image are considered as spatial dimensions, while the +\n "${g}"spectrum"$n" has a multi-spectral meaning. Thus, a 4d image in "${-GMIC}" should be most often +\n regarded as a 3d dataset of multi-spectral voxels. Most of the "${-GMIC}" commands will stick +\n with this idea (e.g. command '"$c"-blur"$n"' blurs images only along the spatial '"${g}"xyz"$n"'-axes). +\n +\n - "${-GMIC}" stores all the image data as buffers of '"${g}"float"$n"' values (32 bits, +\n value range "$g"[-3.4E38,+3.4E38]"$n"). It performs all its image processing operations with +\n floating point numbers. Each image pixel takes then 32bits/channel (except if double- +\n precision buffers have been enabled during the compilation of the software, in which case +\n 64bits/channel is the default). +\n +\n - Considering '"${g}"float"$n"'-valued pixels ensure to keep the numerical precision when executing +\n image processing pipelines. For image input/output operations, you may want to prescribe +\n the image datatype to be different than '"${g}"float"$n"' (like '"${g}"bool"$n"', '"${g}"char"$n"', '"${g}"int"$n"', etc...). +\n This is possible by specifying it as a file option when using I/O commands. +\n (see section '"${c}"Input/output properties"$n"' to learn more about file options)." +-_help_section "Items of a processing pipeline" +-_help_paragraph " - In "${-GMIC}", an image processing pipeline is described as a sequence of items separated by +\n the space character ' '. Such items are interpreted and executed from the left to the +\n right. For instance, the expression: +\n +\n "${c}"filename.jpg -blur 3,0 -sharpen 10 -resize 200%,200% -output output.jpg"$n" +\n +\n defines a valid pipeline composed of nine "${-GMIC}" items. +\n +\n - Each "${-GMIC}" item is a string that is either a command, a list of command arguments, +\n a filename, or a special input string. +\n +\n - Escape characters '"$g"\\"$n"' and double quotes '"$g"\""$n"' can be used to define items containing +\n spaces or other special characters. For instance, the two strings +\n '"${c}"single\\ item"$n"' and '"${c}"\"single item\""$n"' define the same single item, with a space in it." +-_help_section "Input data items" +-_help_paragraph " - If a specified "${-GMIC}" item appears to be an existing filename, the corresponding image +\n data are loaded and inserted at the end of the image list (which is equivalent to the +\n use of '"$c"-input filename"$n"'). +\n +\n - Special filenames '"$c"-"$n"' and '"$c"-.ext"$n"' stand for the standard input/output streams, optionally +\n forced to be in a specific '"${g}"ext"$n"' file format (e.g. '"$c"-.jpg"$n"' or '"$c"-.png"$n"'). +\n +\n - The following special input strings may be used as "${-GMIC}" items to create and insert new +\n images with prescribed values, at the end of the image list: +\n +\n . '"$c"[selection]"$n"' or '"$c"[selection]xN"$n"': Insert 1 or N copies of already existing images. +\n '"${g}"selection"$n"' may represent one or several images +\n (see section '"${c}"Command items and selections"$n"' to learn more about selections). +\n +\n . '"${c}"width[%],_height[%],_depth[%],_spectrum[%],_values"$n"': Insert a new image with +\n specified size and values (adding '"$g"%"$n"' to a dimension means 'percentage of the size +\n along the same axis, taken from the last image '"$g"[-1]"$n"''). Any specified dimension +\n can be also written as '"$c"[image]"$n"', and is then set to the size (along the same axis) +\n of the existing specified image "$g"[image]"$n". '"${g}"values"$n"' can be either a sequence of numbers +\n separated by commas '"$g","$n"', or a mathematical expression, as e.g. in input item +\n '"${c}"256,256,1,3,if(c==0,x,if(c==1,y,0))"$n"' which creates a 256x256 RGB color image with a +\n spatial shading on the red and green channels. +\n (see section '"${c}"Mathematical expressions"$n"' to learn more about mathematical expressions). +\n +\n . '"$c"(v1,v2,..)"$n"': Insert a new image from specified prescribed values. +\n Value separator inside parentheses can be '"$g","$n"' (column separator), '"$g";"$n"' (row separator), +\n '"$g"/"$n"' (slice separator) or '"$g"^"$n"' (channel separator). For instance, expression +\n '"$c"(1,2,3;4,5,6;7,8,9)"$n"' creates a 3x3 matrix (scalar image), with values running from 1 to 9. +\n +\n . '"${c}"0"$n"': Insert a new '"${g}"empty"$n"' image, containing no pixel data. Empty images are used only +\n in rare occasions. +\n +\n - Input item '"${c}"name=value"$n"' declares a new local or global variable '"${g}"name"$n"', or assign a new +\n value to an existing variable. Variable names must use the character set "$g"[a-zA-Z0-9_]"$n" and +\n cannot start with a number. +\n +\n - A variable definition is always local to the current command except when it starts by the +\n underscore character '"${g}"_"$n"'. In that case, it becomes also accessible by any command invoked +\n outside the current command scope (global variable). +\n +\n - If a variable name starts with two underscores '"${g}"__"$n"', the global variable is also shared +\n among different threads and can be read/set by commands running in parallel (see command +\n '"${c}"-parallel"$n"' for this purpose). Otherwise, it remains local to the thread that defined it. +\n +\n - Numerical variables can be updated with the use of these special operators: +\n '"${g}"+="$n"' (addition), '"${g}"-="$n"' (subtraction), '"${g}"*="$n"' (multiplication), '"${g}"/="$n"' (division), '"${g}"%="$n"' (modulo), +\n '"${g}"&="$n"' (bitwise and), '"${g}"|="$n"' (bitwise or), '"${g}"^="$n"' (power), '"${g}"<<="$n"' and '"${g}">>="$n"' (bitwise left +\n and right shifts). As in: '"${c}"foo=1 foo+=3"$n"'. +" +-_help_section "Command items and selections" +-_help_paragraph " - A "${-GMIC}" item starting by a hyphen '"$g"-"$n"' designates a "${g}"command"$n", most of the time. Generally, +\n commands perform image processing operations on one or several available images of the list. +\n +\n - Reccurent commands have two equivalent names ("${g}"regular"$n" and "${g}"short"$n"). For instance, command +\n names '"$c"-resize"$n"' and '"$c"-r"$n"' refer to the same image resizing action. +\n +\n - A "${-GMIC}" command may have mandatory or optional "${g}"arguments"$n". Command arguments must be +\n specified in the next item on the command line. Commas '"$g","$n"' are used to separate multiple +\n arguments of a single command, when required. +\n +\n - The execution of a "${-GMIC}" command may be restricted only to a "${g}"subset"$n" of the image list, by +\n appending '"$c"[selection]"$n"' to the command name. Examples of valid syntaxes for '"${g}"selection"$n"' are: +\n +\n . '"$c"-command[-2]"$n"': Apply command only on the penultimate image "$g"[-2]"$n" of the list. +\n . '"$c"-command[0,1,3]"$n"': Apply command only on images "$g"[0],[1]"$n" and "$g"[3]"$n". +\n . '"$c"-command[3-6]"$n"': Apply command only on images "$g"[3]"$n" to "$g"[6]"$n" (i.e, "$g"[3],[4],[5]"$n" and "$g"[6]"$n"). +\n . '"$c"-command[50%-100%]"$n"': Apply command only on the second half of the image list. +\n . '"$c"-command[0,-4--1]"$n"': Apply command only on the first image and the last four images. +\n . '"$c"-command[0-9:3]"$n"': Apply command only on images "$g"[0]"$n" to "$g"[9]"$n", with a step of 3 +\n (i.e. on images "$g"[0], [3], [6]"$n" and "$g"[9]"$n"). +\n . '"$c"-command[0--1:2]"$n"': Apply command only on images of the list with even indices. +\n . '"$c"-command[0,2-4,50%--1]"$n"': Apply command on images "$g"[0],[2],[3],[4]"$n" and on the second half +\n of the image list. +\n . '"$c"-command[^0,1]"$n"': Apply command on all images except the two first. +\n . '"$c"-command[name1,name2]"$n"': Apply command on named images '"${g}"name1"$n"' and '"${g}"name2"$n"'. +\n +\n - Indices in selections are always sorted in increasing order, and duplicate indices are +\n discarded. For instance, selections '"$c"[3-1,1-3]"$n"' and '"$c"[1,1,1,3,2]"$n"' are both equivalent to +\n '"$c"[1-3]"$n"'. If you want to repeat a single command multiple times on an image, use a +\n '"$c"-repeat..-done"$n"' loop instead. Inverting the order of images for a command is achieved by +\n explicitly inverting the order of the images in the list, with command '"$c"-reverse[selection]"$n"'. +\n +\n - Command selections '"$c"[-1]"$n"','"$c"[-2]"$n"' and '"$c"[-3]"$n"' are so often used that they have their own shortcuts, +\n respectively '"$c"."$n"', '"$c".."$n"' and '"$c"..."$n"'. For instance, command '"$c"-blur.."$n"' is equivalent to '"$c"-blur[-2]"$n"'. +\n These shortcuts work only for command selections, not for command arguments. +\n +\n - "${-GMIC}" commands invoked without '"$c"[selection]"$n"' are applied on all images of the list, i.e. the +\n default selection is '"$c"[0--1]"$n"' (except for command '"$c"-input"$n"' whose default selection is '"$c"[-1]"$n"'). +\n +\n - A "${-GMIC}" command starting with a double hyphen '"$g"--"$n"' (instead of a single hyphen '"$g"-"$n"') does not act +\n 'in-place' but inserts its result as one or several new images at the end of the image list. +\n +\n - There are two different types of commands that can be run by the "${-GMIC}" interpreter: +\n +\n . "${g}"Native commands"$n", are the hard-coded functionalities in the interpreter core. +\n They are thus compiled as binary code and run fast, most of the time. +\n Omitting an argument when invoking a native command is not permitted, except if all +\n following arguments are also omitted. For instance, call to '"$c"-plasma 10,,5"$n"' is invalid +\n but '"$c"-plasma 10"$n"' is correct. +\n . "${g}"Custom commands"$n", are defined as "${-GMIC}" pipelines of native or custom commands. +\n They are interpreted by the "${-GMIC}" interpreter, and thus run a bit slower than native commands. +\n Omitting arguments when invoking a custom command is permitted. For instance, +\n expressions '"$c"-flower ,,,100,,2"$n"' or '"$c"-flower ,"$n"' are correct. +\n +\n - Most of the existing commands in "${-GMIC}" are actually defined as "${g}"custom commands"$n". +\n +\n - A user can easily add its own custom commands to the "${-GMIC}" interpreter (see section +\n "${c}"'Adding custom commands"$n"' for more details). New native commands cannot be added +\n (unless you modify the "${-GMIC}" interpreter source code and recompile it, of course!)." +-_help_section "Input/output properties" +-_help_paragraph " - "${-GMIC}" is able to read/write most of the classical image file formats, including: +\n +\n . 2d grayscale/color files: "$c".png, .jpeg, .gif, .pnm, .tif, .bmp, .."$n" +\n . 3d volumetric files: "$c".dcm, .hdr, .nii, .pan, .inr, .pnk, .."$n" +\n . video files: "$c".mpeg, .avi, .mov, .ogg, .flv, .."$n" +\n . Generic ascii or binary data files: "$c".gmz, .cimg, .cimgz, .dlm, .asc, .pfm, .raw, .txt, .h."$n" +\n . 3d object files: "$c".off."$n" +\n +\n - When dealing with color images, "${-GMIC}" generally reads, writes and displays data using the +\n usual sRGB color space. +\n +\n - "${-GMIC}" is able to manage "${g}"3d objects"$n" that may be read from files or generated by "${-GMIC}" +\n commands. A 3d object is stored as a one-column scalar image containing the object data, +\n in the following order: "$g"{ magic_number; sizes; vertices; primitives; colors; opacities }"$n". +\n These 3d representations can be processed as regular images. +\n (see command '"$c"-split3d"$n"' for accessing each of these 3d object data separately). +\n +\n - Be aware that usual file formats may be sometimes not adapted to store all the available +\n image data, since "${-GMIC}" uses float-valued image buffers. For instance, saving an image +\n that was initially loaded as a 16bits/channel image, as a "$c".jpg"$n" file will result in a +\n loss of information. Use the "${-GMIC}"-specific file extensions "$c".cimgz"$n" or "$c".gmz"$n" to ensure +\n that all data precision are preserved when saving images. +\n +\n - Sometimes, file options may/must be set for file formats: +\n +\n . "${g}"Video files:"$n" Only sub-frames of an image sequence may be loaded, using the input +\n expression '"${c}"filename.ext,[first_frame[,last_frame[,step]]]"$n"'. +\n Set '"${g}"last_frame==-1"$n"' to tell it must be the last frame of the video. +\n Set '"${g}"step"$n"' to 0 to force an opened video file to be opened/closed. +\n Output framerate and codec can be also set by using the output expression +\n '"${c}"filename.avi,_fps,_codec,_keep_open={ 0 | 1 }"$n"'. +\n '"${g}"codec"$n"' is a 4-char string (see "${r}"http://www.fourcc.org/codecs.php"$n") or '"${g}"0"$n"' for the default codec. +\n '"${g}"keep_open"$$n"' tells if the output video file must be kept open for appending new frames afterwards. +\n +\n . "$g".cimg[z] files:"$n" Only crops and sub-images of .cimg files can be loaded, using the input +\n expressions '"${c}"filename.cimg,N0,N1"$n"', '"${c}"filename.cimg,N0,N1,x0,x1"$n"', +\n '"${c}"filename.cimg,N0,N1,x0,y0,x1,y1"$n"', '"${c}"filename.cimg,N0,N1,x0,y0,z0,x1,y1,z1"$n"' or +\n '"${c}"filename.cimg,N0,N1,x0,y0,z0,c0,x1,y1,z1,c1"$n"'. +\n Specifying '"${g}"-1"$n"' for one coordinates stands for the maximum possible value. +\n Output expression '"${c}"filename.cimg[z][,datatype]"$n"' can be used to force the output pixel type. +\n '"${g}"datatype"$n"' can be "$g"{ uchar | char | ushort | short | uint | int | ulong | long | float | double }"$n". +\n +\n . "$g".raw binary files:"$n" Image dimensions and input pixel type may be specified when loading +\n "$g".raw"$n" files with input expresssion '"${c}"filename.raw[,datatype][,width][,height[,depth[,dim]]]]"$n"'. +\n If no dimensions are specified, the resulting image is a one-column vector with +\n maximum possible height. Pixel type can also be specified with the output +\n expression '"${c}"filename.raw[,datatype]"$n"'. +\n '"${g}"datatype"$n"' can be "$g"{ uchar | char | ushort | short | uint | int | ulong | long | float | double }"$n". +\n +\n . "$g".yuv files:"$n" Image dimensions must be specified, and only sub-frames of an image +\n sequence may be loaded, using the input expression +\n '"${c}"filename.yuv,width,height[,first_frame[,last_frame[,step]]]"$n"'. +\n +\n . "$g".tiff files:"$n" Only sub-images of multi-pages tiff files can be loaded, using the input +\n expression '"${c}"filename.tif,[first_frame,[last_frame,[step]]]"$n"'. +\n Output expression '"${c}"filename.tiff,[datatype[,compression[,force_multipage]]"$n"' can be used to +\n specify the output pixel type, as well as the compression method. +\n '"${g}"datatype"$n"' can be "$g"{ uchar | char | ushort | short | uint | int | ulong | long | float | double }"$n". +\n '"${g}"compression"$n"' can be "$g"{ none | lzw | jpeg }"$n" and '"${g}"force_multipage"$n" can be "$g"{ 0=no | 1=yes }"$n". +\n +\n . "$g".gif files:"$n" Animated gif files can be saved, using the input expression +\n '"${c}"filename.gif,fps>0,nb_loops"$n"'. +\n Specify '"${g}"nb_loops=0"$n"' to get an infinite number of animation loops (default). +\n +\n . "$g".jpeg files:"$n" The output quality may be specified (in %), using the output expression +\n '"${c}"filename.jpg,30"$n"' (here, to get a 30% quality output). '"${g}"100%"$n"' is the default. +\n +\n . "$g".mnc files:"$n" The output header can set from another file, using the output expression +\n '"${c}"filename.mnc,header_template.mnc"$n"'. +\n +\n . "$g".pan, .cpp, .hpp, .c and .h files:"$n" The output datatype can be selected with output expression +\n '"${c}"filename[,datatype]"$n"'. +\n '"${g}"datatype"$n"' can be "$g"{ uchar | char | ushort | short | uint | int | ulong | long | float | double }"$n". +\n +\n . "$g".gmic files:"$n" These filenames are assumed to be "${-GMIC}" custom commands files. Loading +\n such a file will add the commands it defines to the interpreter. Debug information can be +\n enabled/disabled by the input expression '"${c}"filename.gmic,add_debug_info={ 0 | 1 }"$n"'. +\n +\n . Inserting '"${c}"ext:"$n"' on the beginning of a filename (e.g. '"${c}"jpg:filename"$n"') forces "${-GMIC}" to +\n read/write the file as it would have been done if it had the specified extension '"${g}".ext"$n"'. +\n +\n - Some input/output formats and options may not be supported, depending on the configuration flags +\n set during the build of the "${-GMIC}" software." +-_help_section "Substitution rules" +-_help_paragraph " - "${-GMIC}" items containing '"$g"$"$n"' or '"$g"{}"$n"' are substituted before being interpreted. +\n Use these substituting expressions to access various data from the interpreter environment. +\n +\n - '"$c"$name"$n"' and '"$c"${name}"$n"' are both substituted by the value of the specified named "${g}"variable"$n" +\n (set previously by the item '"${c}"name=value"$n"'). If this variable has not been already set, +\n the expression is substituted by the highest positive "${g}"indice"$n" of the named image '"${g}"[name]"$n"'. +\n If no image has this name, the expression is substituted by the value of the +\n "${g}"OS environment variable"$n" with same name (it may be thus an empty string). +\n The following reserved variables are predefined by the "${-GMIC}" interpreter: +\n +\n . '"$c"$!"$n"': The current number of images in the list. +\n . '"$c"$>"$n"' and '"$c"$<"$n"': The increasing/decreasing indice of the latest (currently running) +\n '"${c}"repeat..done"$n"' loop. +\n . '"$c"$/"$n"': The current call stack. Stack items are separated by slashes '"$g"/"$n"'. +\n . '"$c"$|"$n"': The current value (expressed in seconds) of a millisecond precision timer. +\n . '"$c"$^"$n"': The current verbosity level. +\n . '"$c"$_cpus"$n"': The number of computation cores available on your machine. +\n . '"$c"$_pid"$n"': The current process identifier, as an integer. +\n . '"$c"$_prerelease"$n"': For pre-releases only, the date of the pre-release as '"${g}"mmddyy"$n"'. +\n For stable releases, this variable is not defined. +\n . '"$c"$_version"$n"': A 3-digits number telling about the current version of the "${-GMIC}" interpreter. +\n (currently '"$g$_version$n"'). +\n . '"$c"$_vt100"$n"': Set to "${g}"1"$n" (default value) if colored text output is allowed on the console. +\n . '"$c"$_path_rc"$n"': The path to the "${-GMIC}" folder used to store resources and configuration files +\n (its value is OS-dependent). +\n . '"$c"$_path_user"$n"': The path to the "${-GMIC}" user file .gmic (its value is OS-dependent). +\n +\n - '"$c"${\"command line\"}"$n"' is substituted by the "${g}"status value"$n" set by the execution of the +\n specified command line (see command '"$c"-status"$n"' to learn more about status). +\n Expression '"$c"${}"$n"' thus stands for the "${g}"current status value"$n". +\n +\n - '"$c"{'string'}"$n"' (single quotes) is substituted by the "${g}"sequence of ascii codes"$n" that compose +\n the specified string, separated by commas '"$g","$n"'. For instance, item '"$c"{'foo'}"$n"' is substituted +\n by '"${c}"102,111,111"$n"'. +\n +\n - '"$c"{`value1,...,valueN`}"$n"' (backquotes) is substituted by the string whose ascii sequence +\n corresponds to the list of values specified between the backquotes. +\n For instance, item '"$c"{`102,111,111`}"$n"' is substituted by '"${c}"foo"$n"'. +\n +\n - '"$c"{string1'=='string2}"$n"' is substituted by "${c}"0"$n" or "${c}"1"$n", whether the two specified strings coincide +\n or not (test is case-sensitive). +\n +\n - '"$c"{string1'!='string2}"$n"' is substituted by "${c}"0"$n" or "${c}"a non-null integer"$n", whether the two strings +\n beside the operator are different or not (test is case-sensitive). For instance, +\n item '"$c"{foo'!='foo}"$n"' is substituted by '"${c}"0"$n"' and '"$c"{foo'!='FOO}"$n"' by '"${c}"32"$n"'. +\n +\n - '"$c"{image,feature}"$n"' is substituted by a specific feature of the image "$c"[image]"$n". +\n '"${g}"image"$n"' can be either an image number or an image name. It can be also eluded. +\n In which case, the last image '"$c"[-1]"$n"' of the list is considered for the requested feature. +\n Specified '"${g}"feature"$n"' can be one of: +\n +\n . '"${c}"b"$n"': The image basename (i.e. filename without the folder path nor extension). +\n . '"${c}"c"$n"': The (x,y,z,c) coordinates of the minimum value, separated by commas ','. +\n . '"${c}"C"$n"': The (x,y,z,c) coordinates of the maximum value, separated by commas ','. +\n . '"${c}"f"$n"': The image folder name. +\n . '"${c}"n"$n"': The image name or filename (if the image has been read from a file). +\n . '"${c}"t"$n"': The text string from the image values regarded as ascii codes. +\n . '"${c}"x"$n"': The image extension (i.e last characters after the last '.' in the image name). +\n . '"${c}"^"$n" : The sequence of all image values, separated by commas ','. +\n . '"${c}"[subset]"$n"': The sequence of image values corresponding to the specified subset, +\n and separated by commas ','. +\n . Any other '"${c}"feature"$n"' is considered as a "${g}"mathematical expression"$n" associated to +\n the image "$c"[image]"$n" and is substituted by the result of its evaluation (float value). +\n For instance, expression '"$c"{0,w+h}"$n"' is substituted by the sum of the width and height +\n of the first image (see section '"${c}"Mathematical expressions"$n"' for more details). +\n If a mathematical expression starts with an underscore '"${g}"_"$n"', the resulting value is +\n truncated to a readable format. For instance, item '"$c"{_pi}"$n"' is substituted by '"${g}"3.14159"$n"' +\n (while '"$c"{pi}"$n"' is '"${g}"3.141592653589793"$n"'). +\n +\n - '"$c"{*}"$n"' is substituted by the "${g}"visibility state"$n" of the instant display window "$c"[0]"$n" +\n (can be "$g"{ 0=closed | 1=visible }"$n"). +\n +\n - '"$c"{*,feature}"$n"' or '"$c"{*indice,feature}"$n"' is substituted by a specific feature of the +\n instant display window "$c"#0"$n" (or "$c"#indice"$n", if specified). Requested '"${g}"feature"$n"' can be: +\n +\n . '"${c}"w"$n"': display width (i.e. width of the display area managed by the window). +\n . '"${c}"h"$n"': display height (i.e. height of the display area managed by the window). +\n . '"${c}"wh"$n"': display width x display height. +\n . '"${c}"d"$n"': window width (i.e. width of the window widget). +\n . '"${c}"e"$n"': window height (i.e. height of the window widget). +\n . '"${c}"de"$n"': window width x window height. +\n . '"${c}"u"$n"': screen width (actually independent on the window size). +\n .' "${c}"v"$n"': screen height (actually independent on the window size). +\n . '"${c}"uv"$n"': screen width x screen height. +\n . '"${c}"n"$n"': current normalization type of the instant display. +\n . '"${c}"t"$n"': window title of the instant display. +\n . '"${c}"x"$n"': X-coordinate of the mouse position (or -1, if outside the display area). +\n . '"${c}"y"$n"': Y-coordinate of the mouse position (or -1, if outside the display area). +\n . '"${c}"b"$n"': state of the mouse buttons { 1=left-but. | 2=right-but. | 4=middle-but. }. +\n . '"${c}"o"$n"': state of the mouse wheel. +\n . '"${c}"k"$n"': decimal code of the pressed key if any, 0 otherwise. +\n . '"${c}"c"$n"': boolean (0 or 1) telling if the instant display has been closed recently. +\n . '"${c}"r"$n"': boolean telling if the instant display has been resized recently. +\n . '"${c}"m"$n"': boolean telling if the instant display has been moved recently. +\n . Any other '"${c}"feature"$n"' stands for a "${g}"keycode name"$n" (in capital letters), and is substituted +\n by a boolean describing the current key state "$g"{ 0=pressed | 1=released }"$n". +\n . You can also prepend a hyphen '"$c"-"$n"' to a '"${g}"feature"$n"' (that supports it) to flush the +\n corresponding event immediately after reading its state (works for keys, mouse +\n and window events). +\n +\n - Item substitution is "${g}"never performed in items between double quotes"$n". One must break the quotes +\n to enable substitution if needed, as in "$c"\"3+8 kg = \"{3+8}\" kg\""$n". Using double quotes +\n is then a convenient way to disable the substitutions mechanism in items, when necessary. +\n +\n - One can also disable the substitution mechanism on items outside double quotes, by +\n escaping the '"$g"{"$n"','"$g"}"$n"' or '"$g"$"$n"' characters, as in '"$c"\\{3+4\\}\\ doesn\47t\\ evaluate"$n"'." +-_help_section "Mathematical expressions" +-_help_paragraph " - "${-GMIC}" has an embedded "${g}"mathematical parser"$n". It is used to evaluate expressions inside +\n braces '"$g"{}"$n"', or formulas in commands that may take one as an argument (e.g. '"$c"-fill"$n"'). +\n +\n - When used as a command argument, a formula is evaluated "${g}"for each pixel"$n" of the selected images. +\n +\n - The mathematical parser understands the following set of functions, operators and variables: +\n +\n _ "${g}"Usual operators:"$n" "$c"||"$n" (logical or), "$c"&&"$n" (logical and), "$c"|"$n" (bitwise or), "$c"&"$n" (bitwise and), +\n "$c"!=, ==, <=, >=, <, >, <<"$n" (left bitwise shift), "$c">>"$n" (right bitwise shift), "$c"-, +, *, /, +\n %"$n" (modulo), "$c"^"$n" (power), "$c"!"$n" (logical not), "$c"~"$n" (bitwise not), +\n "$c"++"$n", "$c"--"$n", "$c"+="$n", "$c"-="$n", "$c"*="$n", "$c"/="$n", "$c"%="$n", "$c"&="$n", "$c"|="$n", "$c"^="$n", "$c">>="$n", "$c"<<="$n" (in-place operators). +\n +\n _ "${g}"Usual functions:"$n" "${c}"sin(), cos(), tan(), asin(), acos(), atan(), atan2(), sinh(), cosh(), tanh(), +\n sinc(), hypoth(), gauss(), abs(), sign(), log(), log2(), log10(), exp(), sqrt(), cbrt(), cut(), +\n narg(), arg(), isval(), isnan(), isinf(), isint(), isbool(), isfile(), isdir(), isin(), +\n rol()"$n" (left bit rotation), "${c}"ror()"$n" (right bit rotation), "${c}"min(), max(), argmin(), argmax(), +\n med(), kth(), round(), int()"$n". +\n +\n . '"${c}"atan2(x,y)"$n"' is the version of '"${c}"atan()"$n"' with two arguments '"${g}"y"$n"' and '"${g}"x"$n"' (as in C/C++). +\n . '"${c}"hypoth(x,y)"$n"' computes the square root of the sum of the squares of x and y. +\n . '"${c}"gauss(x,_sigma)"$n"' returns '"${g}"exp(-x^2/(2*s^2))/sqrt(2*pi*sigma^2)'"$n". +\n . '"${c}"cut(value,min,max)"$n"' returns value if it is in range "${g}"[min,max]"$n", or "${g}"min"$n" or "${g}"max"$n" otherwise. +\n . '"${c}"narg(a_1,...,a_N)"$n"' returns the number of specified arguments (here, "${g}"N"$n"). +\n . '"${c}"arg(i,a_1,..,a_N)"$n"' returns the ith argument "${g}"a_i"$n". +\n . '"${c}"isval()"$n"', '"${c}"isnan()"$n"', '"${c}"isinf()"$n"', '"${c}"isint()"$n"', '"${c}"isbool()"$n"' test the type of +\n the given number or expression, and return "${g}"0 (false)"$n" or "${g}"1 (true)"$n". +\n . '"${c}"isfile()"$n"' (resp. '"${c}"isdir()"$n"') returns "${g}"0 (false)"$n" or "${g}"1 (true)"$n" whether its argument +\n is a valid path to a file (resp. to a directory) or not. +\n . '"${c}"isin(v,a_1,...,a_n)"$n"' returns "${g}"0 (false)"$n" or "${g}"1 (true)"$n" whether the first value '"${g}"v"$n"' appears +\n in the set of other values 'a_i'. +\n . '"${c}"min()"$n"', '"${c}"max()"$n"', '"${c}"argmin()"$n"', '"${c}"argmax()"$n"', '"${c}"med()"$n"' and '"${c}"kth()"$n"' can be called with +\n an arbitrary number of arguments. +\n . '"${c}"round(value,rounding_value,direction)"$n"' returns a rounded value. +\n '"${g}"direction"$n"' can be "${g}"{ -1=to-lowest | 0=to-nearest | 1=to-highest }"$n". +\n . '"${c}"swap(var1,var2)"$n"' swaps the values of the two specified variables. +\n +\n _ "${g}"Variable names"$n" below are pre-defined. They can be overrided. +\n +\n . '"${c}"w"$n"': width of the associated image, if any ("${g}"0"$n" otherwise). +\n . '"${c}"h"$n"': height of the associated image, if any ("${g}"0"$n" otherwise). +\n . '"${c}"d"$n"': depth of the associated image, if any ("${g}"0"$n" otherwise). +\n . '"${c}"s"$n"': spectrum of the associated image, if any ("${g}"0"$n" otherwise). +\n . '"${c}"r"$n"': shared state of the associated image, if any ("${g}"0"$n" otherwise). +\n . '"${c}"wh"$n"': shortcut for width x height. +\n . '"${c}"whd"$n"': shortcut for width x height x depth. +\n . '"${c}"whds"$n"': shortcut for width x height x depth x spectrum (i.e. total number of pixel values). +\n . '"${c}"i"$n"': current processed pixel value (i.e. value located at "$g"(x,y,z,c)"$n") in the +\n associated image, if any ("${g}"0"$n" otherwise). +\n . '"${c}"iN"$n"': Nth channel value of current processed pixel (i.e. value located at "$g"(x,y,z,N)"$n") in +\n the associated image, if any ("${g}"0"$n" otherwise). '"${g}"N"$n"' must be an integer in range "$g"[0,7]"$n". +\n . '"${c}"R"$n"','"${c}"G"$n"','"${c}"B"$n"' and '"${c}"A"$n"' are equivalent to '"${c}"i0"$n"', '"${c}"i1"$n"', '"${c}"i2"$n"' and '"${c}"i3"$n"' respectively. +\n . '"${c}"im"$n"','"${c}"iM"$n"','"${c}"ia"$n"','"${c}"iv"$n"','"${c}"is"$n"','"${c}"ip"$n"','"${c}"ic"$n"': Respectively the minimum, maximum, average values, +\n variance, sum, product and median value of the associated image, if any ("${g}"0"$n" otherwise). +\n . '"${c}"xm"$n"','"${c}"ym"$n"','"${c}"zm"$n"','"${c}"cm"$n"': The pixel coordinates of the minimum value in the associated +\n image, if any ("${g}"0"$n" otherwise). +\n . '"${c}"xM"$n"','"${c}"yM"$n"','"${c}"zM"$n"','"${c}"cM"$n"': The pixel coordinates of the maximum value in the associated +\n image, if any ("${g}"0"$n" otherwise). +\n . You may add '"${c}"#ind"$n"' to any of the variable name above to retrieve the information for any +\n numbered image "${g}"[ind]"$n" of the list (when this makes sense). For instance '"${c}"ia#0"$n"' denotes the +\n average value of the first image). +\n . '"${c}"x"$n"': current processed column of the associated image, if any ("${g}"0"$n" otherwise). +\n . '"${c}"y"$n"': current processed row of the associated image, if any ("${g}"0"$n" otherwise). +\n . '"${c}"z"$n"': current processed slice of the associated image, if any ("${g}"0"$n" otherwise). +\n . '"${c}"c"$n"': current processed channel of the associated image, if any ("${g}"0"$n" otherwise). +\n . '"${c}"t"$n"': thread id when an expression is evaluated with multiple threads ("${g}"0"$n" means 'master thread'). +\n . '"${c}"e"$n"': value of e, i.e. "${g}"2.71828.."$n" +\n . '"${c}"pi"$n"': value of pi, i.e. "${g}"3.1415926.."$n" +\n . '"${c}"u"$n"': a random value between "${g}"[0,1]"$n", following a uniform distribution. +\n . '"${c}"g"$n"': a random value, following a gaussian distribution of variance 1 +\n (roughly in "${g}"[-6,6]"$n"). +\n . '"${c}"interpolation"$n"': value of the default interpolation mode used when reading pixel values with +\n the pixel access operators (i.e. when the interpolation argument is not explicitly specified, +\n see below for more details on pixel access operators). +\n . '"${c}"boundary"$n"': value of the default boundary conditions used when reading pixel values with +\n the pixel access operators (i.e. when the boundary condition argument is not explicitly specified, +\n see below for more details on pixel access operators). +\n +\n _ "${g}"Vector calculus:"$n" Most operators are able to work with vector elements. +\n . '"${c}"[ a0,a1,..,aN ]"$n"' defines a "${g}"(N+1)"$n"-dimensional vector with specified scalar coefficients "${g}"ak"$n". +\n . '"${c}"vectorN(a0,a1,,..,)"$n"' does the same, with the "${g}"ak"$n" being repeated periodically. +\n . In both expressions, the "${g}"ak"$n" can be vectors themselves, to concatenate them into a single vector. +\n . The scalar element "${g}"ak"$n" of a vector "${g}"X"$n" is retrieved by "${c}"X[k]"$n". +\n . The sub-vector "${g}"[ ap..aq ]"$n" of a vector "${g}"X"$n" is retrieved by "${c}"X[p,q]"$n". +\n . Some vector-specific functions can be used on vector values: +\n '"${c}"cross(X,Y)"$n"' (cross product), '"${c}"dot(X,Y)"$n"' (dot product), '"${c}"size(X)"$n"' (vector dimension) +\n and '"${c}"sort(X,_is_increasing)"$n"' (sorting values), +\n . A "${g}"2"$n"-dimensional vector may be seen as a complex number and used in those particular functions/operators: +\n '"${c}"**"$n"' (complex multiplication), '"${c}"//"$n"' (complex division), '"${c}"^^"$n"' (complex exponentiation), +\n '"${c}"**="$n"' (complex self-multiplication), '"${c}"//="$n"' (complex self-division), '"${c}"^^="$n"' (complex self-exponentiation), +\n '"${c}"cabs()"$n"' (complex modulus), '"${c}"carg()"$n"' (complex argument), '"${c}"cconj()"$n"' (complex conjugate), +\n '"${c}"cexp()"$n"' (complex exponential) and '"${c}"clog()"$n"' (complex logarithm). +\n . A "${g}"MN"$n"-dimensional vector may be seen as a MxN matrix and used in those particular functions/operators: +\n '"${c}"**"$n"' (matrix-vector multiplication), '"${c}"mdet(A)"$n"' (determinant), '"${c}"mdiag(V)"$n"' (diagonal matrix from vector), +\n '"${c}"meig(A)"$n"' (eigenvalues/eigenvectors), '"${c}"meye(n)"$n"' (n x n identity matrix), '"${c}"minv(A)"$n"' (matrix inverse), +\n '"${c}"mmul(A,B,nb_colsB)"$n"' (matrix multiplication), '"${c}"mrot(x,y,z,angle)"$n"' (3 x 3 rotation matrix), +\n '"${c}"msolve(A,B,nb_colsB)"$n"' (least-square solver of linear system A.X = B), '"${c}"mtrace(A)"$n"' (matrix trace) and +\n '"${c}"mtrans(A,nb_colsA)"$n"' (matrix transpose). +\n +\n _ "${g}"Special operators"$n" can be used: +\n +\n . '"$c";"$n"': expression separator. The returned value is always the last encountered +\n expression. For instance expression '"${c}"1;2;pi"$n"' is evaluated as '"${c}"pi"$n"'. +\n . '"$c"="$n"': variable assignment. Variables in mathematical parser can only refer to +\n numerical values. Variable names are case-sensitive. Use this operator in +\n conjunction with '"$c";"$n"' to define more complex evaluable expressions, such as +\n '"${c}"t=cos(x);3*t^2+2*t+1"$n"'. +\n These variables remain "${g}"local"$n" to the mathematical parser and cannot be accessed +\n outside the evaluated expression. +\n +\n _ The following "${g}"specific functions"$n" are also defined: +\n +\n . '"${c}"normP(u1,...,un)"$n"' computes the LP-norm of the specified vector +\n (P being an "${g}"unsigned integer"$n" or '"${g}"inf"$n"'). +\n . '"${c}"u(max)"$n"' or '"${c}"u(min,max)"$n"': return a random value between "$g"[0,max]"$n" or "$g"[min,max]"$n", +\n following a uniform distribution. +\n . '"${c}"i(_a,_b,_c,_d,_interpolation_type,_boundary_conditions)"$n"': return the value of the pixel +\n located at position "$g"(a,b,c,d)"$n" in the associated image, if any ("${g}"0"$n" otherwise). +\n '"${g}"interpolation_type"$n"' can be "$g"{ 0=nearest neighbor | other=linear }"$n". +\n '"${g}"boundary_conditions"$n"' can be "$g"{ 0=dirichlet | 1=neumann | 2=periodic }"$n". +\n Omitted coordinates are replaced by their default values which are respectively +\n "${c}"x, y, z, c, interpolation"$n" and "${c}"boundary"$n". +\n For instance command '"${c}"-fill 0.5*(i(x+1)-i(x-1))"$n"' will estimate the X-derivative +\n of an image with a classical finite difference scheme. +\n . '"${c}"j(_dx,_dy,_dz,_dc,_interpolation_type,_boundary_conditions)"$n"' does the same for the pixel +\n located at position "$g"(x+dx,y+dy,z+dz,c+dc)"$n" (pixel access relative to the current coordinates). +\n . '"${c}"i[offset,_boundary_conditions]"$n"' returns the value of the pixel located at specified '"${g}"offset"$n"' +\n in the associated image buffer (or "${g}"0"$n" if offset is out-of-bounds). +\n . '"${c}"j[offset,_boundary_conditions]"$n"' does the same for an offset relative to the current pixel "$g"(x,y,z,c)"$n". +\n . '"${c}"i(#ind,_x,_y,_z,_c,_interpolation,_boundary)"$n"', '"${c}"j(#ind,_dx,_dy,_dz,_dc,_interpolation,_boundary)"$n"', +\n '"${c}"i[#ind,offset,_boundary]"$n"' and '"${c}"i[offset,_boundary]"$n"' are similar expressions used to access +\n pixel values for any numbered image "${g}"[ind]"$n" of the list. +\n . '"${c}"I/J[offset,_boundary_conditions]"$n"' and '"${c}"I/J(#ind,_x,_y,_z,_interpolation,_boundary)"$n"' do the same +\n as '"${c}"i/j[offset,_boundary_conditions]"$n"' and '"${c}"i/j(#ind,_x,_y,_z,_c,_interpolation,_boundary)"$n"' but return +\n a vector instead of a scalar (e.g. a vector "${g}"[ R,G,B ]"$n" for a pixel at "${g}"(a,b,c)"$n" in a color image). +\n . '"${c}"if(condition,expr_then,_expr_else)"$n"': return value of '"${c}"expr_then"$n"' or '"${c}"expr_else"$n"', +\n depending on the value of '"${c}"condition"$n"' "${g}"(0=false, other=true)"$n". '"${c}"expr_else"$n"' can be +\n omitted in which case "${g}"0"$n" is returned if the condition does not hold. Using the ternary operator +\n '"${c}"condition?expr_then[:expr_else]"$n"' gives an equivalent expression. +\n For instance, "${-GMIC}" commands '"${c}"-fill if(x%10==0,255,i)"$n"' and '"${c}"-fill x%10?i:255"$n"' both draw blank +\n vertical lines on every 10th column of an image. +\n . '"${c}"dowhile(expression,_condition)"$n"' repeats the evaluation of '"${c}"expression"$n"' until '"${c}"condition"$n"' +\n vanishes (or until '"${c}"expression"$n"' vanishes if no '"${c}"condition"$n"' is specified). For instance, +\n the expression: '"${c}"if(N<2,N,n=N-1;F0=0;F1=1;dowhile(F2=F0+F1;F0=F1;F1=F2,n=n-1))"$n"' returns +\n the Nth value of the Fibonacci sequence, for "${g}"N>=0"$n" (e.g., "${g}"46368"$n" for "${g}"N=24"$n"). +\n '"${c}"dowhile(expression,condition)"$n"' always evaluates the specified expression at least once, +\n then check for the nullity condition. When done, it returns the last value of '"${c}"expression"$n"'. +\n . '"${c}"for(init,condition,_procedure,body)"$n"' first evaluates the expression '"${c}"init"$n"', then iteratively +\n evaluates '"${c}"body"$n"' (followed by '"${c}"procedure"$n"' if specified) while '"${c}"condition"$n"' is verified +\n (i.e. not zero). It may happen that no iteration is done, in which case the function +\n returns "${g}"0"$n". Otherwise, it returns the last value of '"${c}"body"$n"'. +\n For instance, the expression: '"${c}"if(N<2,N,for(n=N;F0=0;F1=1,n=n-1,F2=F0+F1;F0=F1;F1=F2))"$n"' +\n returns the Nth value of the Fibonacci sequence, for "${g}"N>=0"$n" (e.g., "${g}"46368"$n" for "${g}"N=24"$n"). +\n . '"${c}"whiledo(condition,expression)"$n"' is exactly the same as '"${c}"for(init,condition,expression)"$n"' +\n without the specification of an initializing expression. +\n . '"${c}"date(attr,path)"$n"' returns the date attribute for the given 'path' (file or directory), +\n with '"${g}"attr"$n"' being "$g"{ 0=year | 1=month | 2=day | 3=day of week | 4=hour | 5=minute | 6=second }"$n". +\n . '"${c}"date(_attr)"$n" returns the specified attribute for the current (locale) date. +\n . '"${c}"print(expression)"$n" prints the value of the specified expression on the console +\n (and returns its value). +\n . '"${c}"debug(expression)"$n" prints detailed debug information about the sequence of operations +\n done by the math parser to evaluate the expression (and returns its value). +\n . '"${c}"init(expression)"$n" evaluates the specified expression only once, even when multiple +\n evaluations are required (e.g. in '"${c}"-fill init(foo=0);++foo"$n"'). +\n +\n - "${g}"User-defined functions:"$n" +\n +\n . Custom functions can be defined in a math expression, using the assignment operator '"${c}"="$n"', e.g. +\n '"${c}"foo(x,y) = cos(x + y); result = foo(1,2) + foo(2,3)"$n"'. +\n . Overriding a built-in function has no effect. +\n . Overriding an already defined custom function replaces its old definition. +\n . Custom functions are processed as "${g}"macros"$n" by the mathematical evaluator. You should avoid invoking +\n them with arguments that are results of assignments or self-operations. For instance, +\n '"${c}"foo(x) = x + x; z = 0; result = foo(++x)"$n"' will set '"${c}"result = 4"$n"' rather than expected value '"${c}"2"$n"'. +\n +\n - "${g}"Multi-threaded"$n" and "${g}"in-place"$n" evaluation: +\n +\n . If your image data are large enough and you have several CPUs available, it is likely that +\n the math expression passed to a '"$c"-fill"$n"' or '"$c"-input"$n"' command is evaluated in parallel, using +\n multiple computation threads. +\n +\n . Starting an expression with '"$c"*"$n"' forces the evaluations required for an image to be run in +\n parallel, even if the amount of data to process is small (beware, it may be slower to evaluate!). +\n +\n . If the specified expression starts with '"$c">"$n"' or '"$c"<"$n"', the pixel access operators +\n '"${c}"i(), i[], j()"$n"' and '"${c}"j[]"$n"' return values of the image being currently modified, +\n in forward ('"$c">"$n"') or backward ('"$c"<"$n"') order. The multi-threading evaluation of the expression is +\n also disabled in this case. +\n +\n _ Expressions '"${c}"i(_#ind,x,_y,_z,_c)=value"$n"', '"${c}"j(_#ind,x,_y,_z,_c)=value"$n"', '"${c}"i[_#ind,offset]=value"$n"' and +\n '"${c}"j[_#ind,offset]=value"$n"' set a pixel value at a different location than the running one in the +\n image "${g}"[ind]"$n" (or in the associated image if argument '"${c}"#ind"$n"' is omitted), either with global +\n coordinates/offsets (with '"${c}"i(...)"$n"' and '"${c}"i[...]"$n"'), or relatively to the current position "${g}"(x,y,z,c)"$n" +\n (with '"${c}"j(...)"$n"' and '"${c}"j[...]"$n"'). These expressions always return '"${c}"value"$n"'. +\n +\n - The last image of the list is always associated to the evaluations of '"$c"{expressions}"$n"', +\n e.g. "${-GMIC}" sequence '"${c}"256,128 -f {w}"$n"' will create a 256x128 image filled with value 256." +-_help_section "Image and data viewers" +-_help_paragraph " - "${-GMIC}" has some very handy embedded "${g}"visualization modules"$n", for 1d signals +\n (command '"$c"-plot"$n"'), 1d/2d/3d images (command '"$c"-display"$n"') and 3d objects +\n (command '"$c"-display3d"$n"'). It manages interactive views of the selected image data. +\n +\n - The following keyboard shortcuts are available in the interactive viewers: +\n +\n . "${g}"(mousewheel)"$n": Zoom in/out. +\n . "${g}"CTRL+D"$n": Increase window size. +\n . "${g}"CTRL+C"$n": Decrease window size. +\n . "${g}"CTRL+R"$n": Reset window size. +\n . "${g}"CTRL+W"$n": Close window. +\n . "${g}"CTRL+F"$n": Toggle fullscreen mode. +\n . "${g}"CTRL+S"$n": Save current window snapshot as numbered file 'gmic_xxxx.bmp'. +\n . "${g}"CTRL+O"$n": Save current instance of the viewed data, as numbered file 'gmic_xxxx.cimgz'. +\n +\n - Shortcuts specific to the 1d/2d/3d image viewer (command '"$c"-display"$n"') are: +\n +\n . "${g}"CTRL+A"$n": Switch cursor mode. +\n . "${g}"CTRL+P"$n": Play z-stack of frames as a movie (for volumetric 3d images). +\n . "${g}"CTRL+V"$n": Show/hide 3D view (for volumetric 3d images). +\n . "${g}"CTRL+(mousewheel)"$n": Go up/down. +\n . "${g}"SHIFT+(mousewheel)"$n": Go left/right. +\n . "${g}"Numeric PAD"$n": Zoom in/out (+/-) and move through zoomed image (digits). +\n . "${g}"BACKSPACE"$n": Reset zoom scale. +\n +\n - Shortcuts specific to the 3d object viewer (command '"$c"-display3d"$n"') are: +\n +\n . "$g"(mouse)+(left mouse button)"$n": Rotate 3d object. +\n . "$g"(mouse)+(right mouse button)"$n": Zoom 3d object. +\n . "$g"(mouse)+(middle mouse button)"$n": Shift 3d object. +\n . "${g}"CTRL+F1 .. CTRL+F6"$n": Toggle between different 3d rendering modes. +\n . "${g}"CTRL+Z"$n": Enable/disable z-buffered rendering. +\n . "${g}"CTRL+A"$n": Show/hide 3d axes. +\n . "${g}"CTRL+G"$n": Save 3d object, as numbered file 'gmic_xxxx.off'. +\n . "${g}"CTRL+T"$n": Switch between single/double-sided 3d modes." +-_help_section "Adding custom commands" +-_help_paragraph " - New custom commands can be added by the user, through the use of "${-GMIC}" "${g}"custom commands files"$n". +\n +\n - A command file is a simple ascii text file, where each line starts either by +\n '"${c}"command_name: command_definition"$n"' or '"${c}"command_definition (continuation)"$n"'. +\n +\n - At startup, "${-GMIC}" automatically includes user's command file "$g"$HOME/.gmic"$n" (on Unix) or +\n "$g"%APPDATA%/user.gmic"$n" (on Windows). The CLI tool '"${g}"gmic"$n"' automatically runs the command +\n '"${c}"-cli_start"$n"' if defined. +\n +\n - Custom command names must use character set "$g"[a-zA-Z0-9_]"$n" and cannot start with a number. +\n +\n - Any '"$c" ""# comment"$n"' expression found in a custom commands file is discarded by the "${-GMIC}" +\n parser, wherever it is located in a line. +\n +\n - In a custom command, the following "$g"$-expressions"$n" are recognized and substituted: +\n +\n . '"$c"$""\*"$n"' is substituted by a copy of the specified string of arguments. +\n . '"$c"$\"*\""$n"' is substituted by a copy of the specified string of arguments, each being double-quoted. +\n . '"$c"$""#"$n"' is substituted by the maximum indice of known arguments (either specified by the +\n user or set to a default value in the custom command). +\n . '"$c"$""?"$n"' is substituted by a string telling about the command subset restriction (only +\n useful when custom commands need to output descriptive messages). +\n . '"$c"$i"$n"' and '"$c"${i}"$n"' are both substituted by the "${g}"i^th"$n" specified argument. Negative indices +\n such as '"$c"${-j}"$n"' are allowed and refer to the "${g}"j^th"$n" latest argument. '"$c"$""0"$n"' is substituted +\n by the custom command name. +\n . '"$c"${i=default}"$n"' is substituted by the value of "$c"$i"$n" (if defined) or by its new value set +\n to '"${g}"default"$n"' otherwise ('"${g}"default"$n"' may be a $-expression as well). +\n . '"$c"${subset}"$n"' is substituted by the argument values (separated by commas '"$g","$n"') of a +\n specified argument subset. For instance expression '"$c"$""{2--2}"$n"' is substitued by all +\n specified command arguments except the first and the last one. Expression '"$c"$""{^0}"$n"' is +\n then substituted by all arguments of the invoked command (eq. to '"$c"$""*"$n"' if all specified +\n arguments have indeed a value). +\n . '"$c"$""=var"$n"' is substituted by the set of instructions that will assign each argument "$c"$i"$n" +\n to the named variable '"${c}"var$i"$n"' (for i in "$g"[0..$""#]"$n"). This is particularly useful when a +\n custom command want to manage variable numbers of arguments. Variables names must +\n use character set "$g"[a-zA-Z0-9_]"$n" and cannot start with a number. +\n +\n - These particular "$g"$-expressions"$n" for custom commands are "${g}"always substituted"$n", even in double quoted +\n items or when the dollar sign '"$g"$"$n"' is escaped with a backslash '"$g"\\"$n"'. To avoid substitution, +\n place an empty double quoted string just after the '"$g"$"$n"' (as in '"$c"$\"\"1"$n"'). +\n +\n - Specifying arguments may be skipped when invoking a custom command, by replacing them by +\n commas '"$g","$n"' as in expression '"${c}"-flower ,,3"$n"'. Omitted arguments are set to their default +\n values, which must be thus explicitly defined in the code of the corresponding custom +\n command (using default argument expressions as '"$c"$""{1=default}"$n"'). +\n +\n - If one numbered argument required by a custom command misses a value, an error is +\n thrown by the "${-GMIC}" interpreter." +-_help_section "List of commands" +-_help_paragraph " All available "${-GMIC}" commands are listed below, classified by themes. +\n When several choices of command arguments are possible, they appear separated by '"$g"|"$n"'. +\n An argument specified inside '"$g"[]"$n"' or starting by '"${g}"_"$n"' is optional except when standing for an +\n existing image "$c"[image]"$n", where '"${g}"image'"$n"' can be either an indice number or an image name. +\n In this case, the '"$g"[]"$n"' characters are mandatory when writing the item. +\n A command marked with '"$g"(+)"$n"' is one of the "${g}"native"$n" commands. +\n Note also that all images that serve as illustrations in this reference documentation are normalized +\n in "$g"[0,255]"$n" before being displayed. You may need to do this explicitly (command '"$c"-normalize 0,255"$n"') +\n if you want to save and view images with the same aspect than those illustrated in the example codes." +_help_examples : +g=$_gmic_g c=$_gmic_c n=$_gmic_n +-_help_section "Examples of use" +-_help_paragraph " '"${g}"gmic"$n"' is a generic image processing tool which can be used in a wide variety of situations. +\n The few examples below illustrate possible uses of this tool: +\n +\n - View a list of images: +\n "${c}"gmic file1.bmp file2.jpeg"$n" +\n +\n - Convert an image file: +\n "${c}"gmic input.bmp -o output.jpg"$n" +\n +\n - Create a volumetric image from a movie sequence: +\n "${c}"gmic input.mpg -a z -o output.hdr"$n" +\n +\n - Compute image gradient norm: +\n "${c}"gmic input.bmp -gradient_norm"$n" +\n +\n - Denoise a color image: +\n "${c}"gmic image.jpg -denoise 30,10 -o denoised.jpg"$n" +\n +\n - Compose two images using overlay layer blending: +\n "${c}"gmic image1.jpg image2.jpg -blend overlay -o blended.jpg"$n" +\n +\n - Evaluate a mathematical expression: +\n "${c}"gmic -e \"cos(pi/4)^2+sin(pi/4)^2={cos(pi/4)^2+sin(pi/4)^2}\""$n" +\n +\n - Plot a 2d function: +\n "${c}"gmic 1000,1,1,2 -f \"X=3*(x-500)/500;X^2*sin(3*X^2)+if(c==0,u(0,-1),cos(X*10))\" -plot"$n" +\n +\n - Plot a 3d elevated function in random colors: +\n "${c}"gmic 128,128,1,3,\"u(0,255)\" -plasma 10,3 -blur 4 -sharpen 10000 \\\ +\n -elevation3d. \"'X=(x-64)/6;Y=(y-64)/6;100*exp(-(X^2+Y^2)/30)*abs(cos(X)*sin(Y))'\""$n" +\n +\n - Plot the isosurface of a 3d volume: +\n "${c}"gmic -m3d 5 -md3d 5 -db3d 0 -isosurface3d \"'x^2+y^2+abs(z)^abs(4*cos(x*y*z*3))'\",3"$n" +\n +\n - Render a "${-GMIC}" 3d logo: +\n "${c}"gmic 0 -text G\\\47MIC,0,0,53,1,1,1,1 -expand_xy 10,0 -blur 1 -n 0,100 --plasma 0.4 -+ \\\ +\n -blur 1 -elevation3d -0.1 -md3d 4"$n" +\n +\n - Generate a 3d ring of torii: +\n "${c}"gmic -repeat 20 -torus3d 15,2 -color3d. \"{u(60,255)},{u(60,255)},{u(60,255)}\" \\\ +\n -*3d. 0.5,1 -if \"{$>%2}\" -r3d. 0,1,0,90 -endif -+3d. 70 -+3d \\\ +\n -r3d 0,0,1,18 -done -md3d 3 -m3d 5 -db3d 0"$n" +\n +\n - Create a vase from a 3d isosurface: +\n "${c}"gmic -md3d 4 -isosurface3d \"'x^2+2*abs(y/2)*sin(2*y)^2+z^2-3',0\" -sphere3d 1.5 \\\ +\n --3d. 0,5 -plane3d 15,15 -r3d. 1,0,0,90 -center3d. -+3d. 0,3.2 \\\ +\n -color3d. 180,150,255 -color3d.. 128,255,0 -color3d... 255,128,0 -+3d"$n" +\n +\n - Display filtered webcam stream: +\n "${c}"gmic -apply_camera \\\"--mirror x --mirror y -+ -/ 4\\\""$n" +\n +\n - Launch a set of "${-GMIC}" interactive demos: +\n "${c}"gmic -demo"$n" +\n" +_help_header_ascii : +-__help_header_ascii +_section=0 _space1="" _space2=" " +-_help_section "Usage" +__help_header_ascii : +-if {narg($_prerelease)} strprerelease=" (pre-release ""#"$_prerelease")" -else strprerelease="" -endif +str=" "${_gmic_b}"gmic: GREYC's Magic for Image Computing."$_gmic_n" +\n +\n "$_gmic_r${_gmic_b}"Version "${-strver}$strprerelease$_gmic_n", Copyright (c) 2008-2016, David Tschumperle. +\n "$_gmic_r"(http://gmic.eu)"$_gmic_n +-l[] -_e[] "" -onfail -m "_e : -e[] \"$""*\"" -endl +-v + -_e[] $str -v - +_help_section_ascii : +_section+=1 +{narg({'"$1"'})},1,1,1,{'-'} +-v + +-e[] "\n "$_gmic_m$_gmic_b$_section". $1" +-e[] " "${_space{narg({'$_section'})}}{t}$_gmic_n"\n" +-v - +-rm. +_help_paragraph_ascii : +-v + +-e[] "$*" +-v - +_help_footer_ascii : +-v + +-e[] " "$_gmic_r$_gmic_b"** G\47MIC comes with ABSOLUTELY NO WARRANTY; for details visit: http://gmic.eu **"$_gmic_n +-v - +_help_header_html : +_section=0 +-if {narg($_prerelease)} strprerelease=" (pre-release ""#"$_prerelease")" -else strprerelease="" -endif +_gmic_n="" _gmic_r="" _gmic_g="" +_gmic_m="" _gmic_c="" +-v + +-e[] " +\n +\n
    +\n
    Reference
    +\n
    +\n

    Preamble

    +\n +\n

    Table of contents

    +\n +\n

    Version

    +\n
    gmic: GREYC's Magic for Image Computing.
    +\n
    +\n       Version "${-strver}$strprerelease", Copyright (c) 2008-2016, David Tschumperle
    +\n       (http://gmic.eu)
    +\n
    +" +-v - +-_help_section "Usage" +_help_section_html : +_section+=1 +-v + +-e[] "

    \"\"  $1

    " +-v - +_help_paragraph_html : +-v + +-e[] "
    $*
    " +-v - +_help_footer_html : +-v + +-e[] " +\n
    ** G\47MIC comes with ABSOLUTELY NO WARRANTY; for details visit: http://gmic.eu ** +\n
    +\n
    +\n
    +\n
    \"\"
    +\n
    +\n +\n +" +-v - +_help_header_latex : +strver=${-strver} +-if {narg($_prerelease)} strprerelease=" (pre-release \\#"$_prerelease")" -else strprerelease="" -endif +_gmic_n="§\\aftergroup\\Ccn§" _gmic_b="§\\aftergroup\\Ccb§" _gmic_r="§\\aftergroup\\Ccr§" _gmic_g="§\\aftergroup\\Ccg§" _gmic_c="§\\aftergroup\\Ccb§" _gmic_m="" +-v + -e[] "\\documentclass[a4paper,10.5pt,twoside]{book} +\n\\usepackage{hyperref,fancyhdr,graphicx,amssymb,amsmath,times,makeidx,listings,color} +\n\\graphicspath{{img/}} +\n\\pagestyle{fancyplain} +\n\\lhead[\\fancyplain{}{\\textbf\\thepage}]{\\fancyplain{}{\\rightmark}} +\n\\rhead[\\fancyplain{}{\\leftmark}]{\\fancyplain{}{\\textbf\\thepage}} +\n\\cfoot{} +\n\\setlength{\\textwidth}{6in} +\n\\setlength{\\parindent}{0pc} +\n\\setlength{\\oddsidemargin}{15.5pt} +\n\\setlength{\\evensidemargin}{15.5pt} +\n\\setcounter{tocdepth}{1} +\n\\sloppy{} +\n\\definecolor{ca}{rgb}{0.8,0,0} +\n\\definecolor{cb}{rgb}{0,0.2,0.6} +\n\\definecolor{cc}{rgb}{0,0.5,0} +\n\\definecolor{cd}{rgb}{0.6,0.6,0.6} +\n\\def\\Ccr{\\color{ca}} +\n\\def\\Ccb{\\color{cb}} +\n\\def\\Ccg{\\color{cc}} +\n\\def\\Ccc{\\color{cd}} +\n\\def\\Ccn{\\color{black}} +\n\\def\\comma{\\discretionary{,}{}{,}} +\n\\newcommand{\\Ca}[1]{\\textcolor{ca}{#1}} +\n\\newcommand{\\Cb}[1]{\\textcolor{cb}{#1}} +\n\\newcommand{\\Cc}[1]{\\textcolor{cc}{#1}} +\n\\newcommand{\\Cd}[1]{\\textcolor{cd}{#1}} +\n\\title{\\fbox{\\parbox{\\textwidth}{\\begin{center}\\vspace*{2cm}\\includegraphics[width=12cm]{gmic_banner.jpg}\\\\\\vspace*{1cm}{\\Huge \\textbf{The Handbook}\\\\{\\small Version "$strver$strprerelease"}\\\\\\vspace*{1cm}}\\end{center}}}} +\n\\author{\\Large \\bf David Tschumperl\\'e} +\n\\renewcommand\\indexname{Index of commands} +\n\\makeindex +\n\\lstset{columns=fullflexible,basicstyle=\\normalfont} +\n\\begin{document} +\n\\maketitle +\n\\tableofcontents +\n\\chapter*{Preamble} +\n\\section*{License} +\nThis document is distributed under the \\textbf{GNU Free Documentation License}, version 1.3.\\\\ +\nRead the full license terms at \\url{http://www.gnu.org/licenses/fdl-1.3.txt}.\\\\~\\\\ +\nAn online version of this documentation is available at:\\\\\\url{http://gmic.eu/reference.shtml}. +\n\\section*{Motivations} +\n\\Cc{G\47MIC} is a full-featured open-source framework for image processing, providing several different user interfaces to +\nconvert/manipulate/filter/visualize generic image datasets, from 1d scalar signales to 3d+t sequences of multi-spectral volumetric images. +\nTechnically speaking, what it does is: +\n\\begin{itemize} +\n\\item Define a lightweight but powerful script language (the \\Cc{G\47MIC} language) dedicated to the design of image processing pipelines. +\n\\item Provide several user interfaces embedding the corresponding interpreter: +\n\\begin{itemize} +\n\\item A command-line executable '\\texttt{gmic}', to use the \\Cc{G\47MIC} framework from a shell. +\nIn this setting, \\Cc{G\47MIC} may be seen as a direct (and friendly) competitor of the ImageMagick or GraphicsMagick software suites. +\n\\item A plug-in '\\texttt{gmic\\_gimp}', to bring \\Cc{G\47MIC} capabilities to the GIMP image retouching software. +\n\\item A web-service '\\texttt{\\Cc{G\47MIC} Online}', to allow users applying image processing algorithms directly in a web brower. +\n\\item A Qt-based interface '\\texttt{ZArt}', for real-time manipulation of webcam images. +\n\\item A C++ library '\\texttt{libgmic}', to be linked with third-party applications. +\n\\end{itemize} +\n\\end{itemize} +\n\\Cc{G\47MIC} is focused on the design of possibly complex pipelines for converting, manipulating, filtering and visualizing generic 1d/2d/3d multi-spectral image datasets. This includes of course color images, but also more complex data as image sequences or 3d(+t) volumetric float-valued datasets.\\\\ +\n +\n\\Cc{G\47MIC} is an open framework: the default language can be extended with custom \\Cc{G\47MIC}-written commands, defining thus new available image filters or effects. By the way, \\Cc{G\47MIC} already contains a substantial set of pre-defined image processing algorithms and pipelines (more than 1000).\\\\ +\n +\n\\Cc{G\47MIC} has been designed with portability in mind and runs on different platforms (Windows, Unix, MacOSX). It is distributed under the CeCILL license (GPL-compatible). Since 2008, it is developed in the Image Team of the GREYC laboratory, in Caen/France, by permanent researchers working in the field of image processing on a daily basis. +\n\\section*{Version} +\n +\n \\Ca{\\textbf{gmic:} GREYC's Magic for Image Computing.}\\\\ +\n +\n \\Cb{Version \\textbf{"$strver$strprerelease"}, Copyright (c) 2008-2016, David Tschumperl\\'e}\\\\ +\n \\Cb{(\\url{http://gmic.eu})} +\n\\chapter{Usage} +" +-v - +_help_section_latex : -skip "$1" +-v + +-e[] "~\\\\\\section{$1}" +-v - +_help_paragraph_latex : -skip "$1" +-v + +-e[] "\\small" +-e[] "\\begin{lstlisting}[escapechar=§]" +-e[] "$1" +-e[] "\\end{lstlisting}" +-e[] "\\normalsize" +-v - +_help_footer_latex : +-v + +-e[] " +\n\\printindex +\n~\\\\$\\square$~End of document. +\n\n\\end{document}" +-v - +_help_header_man : +-v + -e[] ".TH G\47MIC 1\n\ +.SH NAME\n\ +gmic \\- Perform generic image processing operations, through the G\47MIC language interpreter.\n\ +\n\ +.SH HELP\n" -v - +_gmic_n="\\fR" _gmic_b="\\fB" _gmic_r="" _gmic_g="" _gmic_c="\\fB" _gmic_m="" +_prerelease= +-__help_header_ascii +_gmic_n="__N" _gmic_b="__B" _gmic_r="__B" _gmic_c="__B" +_section=0 _space1="" _space2=" " +-_help_section "Usage" +_help_section_man : +_section+=1 +{narg({'"$1"'})},1,1,1,{'-'} +-v + +-e[] "\n \\fB"$_section". $1" +-e[] " "${_space{narg({'$_section'})}}{t}"\\fR\n" +-v - +-rm. +_help_paragraph_man : +-l[] ({'"$*"'}) +-replace_str "\\fR","__N" +-replace_str "\\fB","__B" +-replace_str "\\","\\\\\\\\" +-replace_str "__N","\\\\fR" +-replace_str "__B","\\\\fB" +-v + +-e[] {0,t} +-v - +-rm -endl +_help_footer_man : +-_help_footer_ascii $"*" +use_vt100 : +-v - -if {0$_vt100>0} +_gmic_n="\33[0;0;0m" _gmic_r="\33[0;31;59m" _gmic_g="\33[0;32;59m" _gmic_m="\33[0;35;59m" +_gmic_c="\33[0;36;59m" _gmic_b="\33[1m" +-endif -v + +version : +-v - +-m "_e : -echo_stdout[] \"$""*\"" +-if {$^==-1} -_e[] "" -endif +-__help_header_ascii[] +-uncommand _e +-v + +v : +-version +d0 : +-_display0 +display0 : +-_$0 +_display0 : +-v - +w=0 h=0 d=0 s=0 +-repeat $! -l[$>] w+={w} h={max($h,h)} d={max($d,d)} s={max($s,s)} -endl -done +-if {$!==1} -w -1,-1,0,0,-1,-1,{0,n}\ ($wx$hx$dx$s) +-elif {$!==2} -w -1,-1,0,0,-1,-1,{0,n},{n}\ ($wx$hx$dx$s) +-else -w -1,-1,0,0,-1,-1,{0,n},..,{n}\ ($wx$hx$dx$s) +-endif +-v + -d +-v - -w[] 0 -v + +da : +-v - _gmic_s="$?" -v + +-_display_array $* +display_array : +-v - _gmic_s="$?" -v + +-_$0 $* +_display_array : -check ${1=13}>0" && "${2=$1}>0 +-e[0--3] "Display $1x$2 array of pixel values for image"$_gmic_s"." +-v - +dxb={round($1/2,1,1)} dxf={$1-1-$dxb} +dyb={round($2/2,1,1)} dyf={$2-1-$dyb} +-repeat $! -l[$>] +-if {w<128" && "h<128} -r 128,128,100%,100%,0,0,0.5,0.5 -endif +x0=0 y0=0 w={w} h={h} +wmax={0.9*{*,u}} hmax={0.9*{*,v}} +-do +-if {w>=$wmax||h>=$hmax} +n={n} -nm. "Image "'{b}.{x}'" is too large, please select a sub-image." +--select. 2 x0={i[0]} y0={i[1]} w={1+i[3]-i[0]} h={1+i[4]-i[1]} +-rm. -nm. $n +-endif +--z. $x0,$y0,0,{$x0+$w-1},{$y0+$h-1},0 -round. 1 -n. 0,255 +-while {w>=$wmax||h>=$hmax} +x1=-1 y1=-1 c1=0 ox1=-1 oy1=-1 oc1=-1 +x2=-1 y2=-1 c2=0 ox2=-1 oy2=-1 oc2=-1 +x3=-1 y3=-1 c3=0 ox3=-1 oy3=-1 oc3=-1 +c0=0 oxm=-1 oym=-1 +-w. -1,-1,0,0,-1,-1,{-2,b}.{-2,x} +-do +-wait[0-3] +oc0=$c0 +-repeat 4 +-if {$>" && "!{*$>}" && "${x$>}>=0} -w$> 0 x$>=-1 y$>=-1 c$>=0 -endif +-if {*$>,o} c$>={(${c$>}+sign({*$>,o}))%s} -wait[$>] -1 -endif +-if {{*$>,SPACE}" || "{*$>,ENTER}" || "{*$>,ARROWRIGHT}" || "{*$>,ARROWDOWN}} c$>={(${c$>}+1)%s} -wait[$>] -1 -endif +-if {{*$>,BACKSPACE}" || "{*$>,ARROWLEFT}" || "{*$>,ARROWUP}} c$>={(${c$>}-1)%s} -wait[$>] -1 -endif +-done +-if {$oc0!=$c0} c1=$c0 c2=$c0 c3=$c0 -endif +xm={*,x} ym={*,y} +-if {$xm>=0" && "{*,b}&1} x1=$xm y1=$ym -endif +-if {$xm>=0" && "{*,b}&2} x2=$xm y2=$ym -endif +-if {$xm>=0" && "{*,b}&4} x3=$xm y3=$ym -endif +-if {$xm>=0" && "($oxm!=$xm" || "$oym!=$ym)} -w[] -1,-1,-1,-1,-1,-1,{-2,b}.{-2,x}" - ("$xm,$ym")" -endif +-if {$x1!=$ox1" || "$y1!=$oy1" || "$x2!=$ox2" || "$y2!=$oy2" || "$x3!=$ox3" || "$y3!=$oy3} +[-1] +-if {$x1>=0} +xb={$x1-$dxb} yb={$y1-$dyb} xe={$x1+$dxf} ye={$y1+$dyf} +-rectangle. $xb,$yb,$xe,$ye,0.2,0,255,255 +-rectangle. $xb,$yb,$xe,$ye,1,0xFFFFFFFF,0,255,255 +-endif +-if {$x2>=0} +xb={$x2-$dxb} yb={$y2-$dyb} xe={$x2+$dxf} ye={$y2+$dyf} +-rectangle. $xb,$yb,$xe,$ye,0.2,255,32,255 +-rectangle. $xb,$yb,$xe,$ye,1,0xFFFFFFFF,255,32,255 +-endif +-if {$x3>=0} +xb={$x3-$dxb} yb={$y3-$dyb} xe={$x3+$dxf} ye={$y3+$dyf} +-rectangle. $xb,$yb,$xe,$ye,0.2,255,255,0 +-rectangle. $xb,$yb,$xe,$ye,1,0xFFFFFFFF,255,255,0 +-endif +-w. {-2,w},{-2,h} -rm. oxm=$xm oym=$ym +-endif +-if {$x1>=0" && "($ox1!=$x1" || "$oy1!=$y1" || "$oc1!=$c1)} +--z.. {$x1-$dxb},{$y1-$dyb},0,$c1,{$x1+$dxf},{$y1+$dyf},0,$c1 +--z.. {$x1-$dxb},{$y1-$dyb},0,{$x1+$dxf},{$y1+$dyf},0 +-__display_array[-2,-1] $1,$2,0,255,255 +-w1. {w},{h},0,0,-1,-1,{-3,b}" - ("$x1,$y1,c=$c1")" +-rm. ox1=$x1 oy1=$y1 oc1=$c1 +-endif +-if {$x2>=0" && "($ox2!=$x2" || "$oy2!=$y2" || "$oc2!=$c2)} +--z.. {$x2-$dxb},{$y2-$dyb},0,$c2,{$x2+$dxf},{$y2+$dyf},0,$c2 +--z.. {$x2-$dxb},{$y2-$dyb},0,{$x2+$dxf},{$y2+$dyf},0 +-__display_array[-2,-1] $1,$2,255,32,255 +-w2. {w},{h},0,0,-1,-1,{-3,b}" - ("$x2,$y2,c=$c2")" +-rm. ox2=$x2 oy2=$y2 oc2=$c2 +-endif +-if {$x3>=0" && "($ox3!=$x3" || "$oy3!=$y3" || "$oc3!=$c3)} +--z.. {$x3-$dxb},{$y3-$dyb},0,$c3,{$x3+$dxf},{$y3+$dyf},0,$c3 +--z.. {$x3-$dxb},{$y3-$dyb},0,{$x3+$dxf},{$y3+$dyf},0 +-__display_array[-2,-1] $1,$2,255,255,0 +-w3. {w},{h},0,0,-1,-1,{-3,b}" - ("$x3,$y3,c=$c3")" +-rm. ox3=$x3 oy3=$y3 oc3=$c3 +-endif +-while {{*}" && "\ +!{*,ESC}" && "!{*,Q}" && "\ +!{*1,ESC}" && "!{*1,Q}" && "\ +!{*2,ESC}" && "!{*2,Q}" && "\ +!{*3,ESC}" && "!{*3,Q}} +-k[0] -w 0 -w1 0 -w2 0 -w3 0 +-endl -done -v + +__display_array : +-round.. 1 -c.. 0,999 -r. 100%,100%,1,3,{s==1} +--luminance. -r.. {$1*24},{$2*24} -grid.. {100/$1}%,{100/$2}%,0,0,1,0 +xb={24*int($1/2)} yb={24*int($2/2)} xe={$xb+24} ye={$yb+24} +-rectangle.. $xb,$yb,$xe,$ye,1,0xFFFFFFFF,$3,$4,$5 +-repeat $2 yg=$> +-repeat $1 xg=$> +-t.. {-3,i($xg,$yg)},{5+$xg*24},{5+$yg*24},13,0.8,{if(i($xg,$yg)>128,0,255)} +-done +-done +-rm[-3,-1] +dfft : +-_display_fft +display_fft : +-_$0 +_display_fft : +-e[0--3] "Render fourier transform of image$? with centered log-module and argument." +-v - -repeat $! -l[$>] -fftpolar -+.. 1 -log.. -n 0,255 -a x -endl -done -s x,2 -v + +dg : -check "${1=640}>32 && ${2=480}>32" -skip ${3=1},${4=0},${5=0},${6=0},${7=0},${8=0},"${9=x-axis}","${10=y-axis}" +-_display_graph ${1-8},"$9","$10" +display_graph : -check "${1=640}>32 && ${2=480}>32" -skip ${3=1},${4=0},${5=0},${6=0},${7=0},${8=0},"${9=x-axis}","${10=y-axis}" +-_display_graph ${1-8},"$9","$10" +_display_graph : -check "${1=640}>32 && ${2=480}>32" -skip ${3=1},${4=0},${5=0},${6=0},${7=0},${8=0},"${9=x-axis}","${10=y-axis}" +-e[0--3] "Render $1x$2 graph plot from data of image$?." +-v - -repeat $! -l[$>] nm={0,n} +one={$3!=3} siz={w*h*d} +-if {$5==$6} xmin=0 xmax={$siz-$one} -else xmin={min($5,$6)} xmax={max($5,$6)} -endif +-if {$7==$8} ymin={im-(iM-im)/20} ymax={iM+(iM-im)/20} -else ymin={min($7,$8)} ymax={max($7,$8)} -endif +dx={$xmax-$xmin} dy={$ymax-$ymin} +u=${"-_axes[] "$xmin,$xmax",{0.3*$1/14}"} offx={arg(1,$u)} deltax={arg(2,$u)} +u=${"-_axes[] "$ymin,$ymax",{0.3*$2/14}"} offy={arg(1,$u)} deltay={arg(2,$u)} +gw={$1-32} gh={$2-32} gg={($gw-$one)/($siz-$one)} +$gw,$gh,1,3,255 +-grid. {$deltax*$gw/$dx},{$deltay*$gh/$dy},{($offx-$xmin)*$gw/$dx},{$gh-($offy-$ymin)*$gh/$dy},0.25,0xCCCCCCCC,0 +-if {{-2,s}==1} (120,120,200) +-elif {{-2,s}<=3} (220,10,10;10,220,10;10,10,220) +-else +(0,255) -r. 256,1,1,1,3 -map. 2 -z. 2,100% -permute. cxyz -r. 3,{-3,max(3,s)},1,1,0,2 +-sh. 0,2,0,0 -f. 255,0,0,0,255,0,0,0,255 -rm. +-endif +-repeat {-3,s} -sh... $> -graph... [-1],$3,$4,$ymax,$ymin,1,{-2,[0-2]} -rm. -shift. 0,-1 -done +-rm[-3,-1] +-line. 0,0,100%,0,1,110 -line. 100%,0,100%,100%,1,110 +-line. 100%,100%,0,100%,1,255 -line. 0,100%,0,0,1,255 +100%,100%,1,1,255 +-axes. $xmin,$xmax,$ymax,$ymin,14,1,0 +-if {$xmin>0} -axes. 0,0,$ymax,$ymin,14,1,160 -endif +-if {$xmax<0} -axes. {w-1},{w-1},$ymax,$ymin,14,1,160 -endif +-if {$ymin>0} -axes. $xmin,$xmax,{h-1},{h-1},14,1,160 -endif +-if {$ymax<0} -axes. $xmin,$xmax,0,0,14,1,160 -endif +--erode. 3 -!=. 255 -r.. 100%,100%,1,3 -j... [-2],0,0,0,0,1,[-1],1 -rm[-2,-1] +-frame. 16,16,220 +0 -t. "$9",0,0,14,1,-220,-220,-220 -j.. [-1],{({-2,w}-w)/2},{{-2,h}-16},0,0,-1 -rm. +0 -t. "$10",0,0,14,1,-220,-220,-220 -rotate. -90 -j.. [-1],2,{({-2,h}-h)/2},0,0,-1 -rm. +-nm $nm -endl -done -c 0,255 -v + +dh : +-v - _gmic_s="$?" -v + +-_display_histogram $"*" +display_histogram : +-v - _gmic_s="$?" -v + +-_$0 $"*" +_display_histogram : -check "${1=512}>0 && ${2=300}>0 && ${3=256}>0" -skip ${4=0%},${5=100%},${6=1},"${7=i}" +-e[0--3] "Render $1x$2 channel-by-channel histogram of image"$_gmic_s", with $3 clusters, minimum value $4 and maximum value $5." +-v - -repeat $! -l[$>] nm={0,n} +-if ${-is_percent\ $4} m={im+(iM-im)*$4} -else m=$4 -endif +-if ${-is_percent\ $5} M={im+(iM-im)*$5} -else M=$5 -endif +s={s} -s c +-repeat $s -l[{-1-$>}] -s z -histogram $3,$m,$M -a z -endl -done +-a c -f '"$7"' vM={iM} -s z +-repeat $! -l[$>] +$1,$2,1,{s},-255 +-repeat {s} -sh[-2,-1] $> -graph. [-2],3,0,$vM,0,1,0 -rm[-2,-1] -done +-rm.. -+ 255 +-if $6 +100%,100% +-axes. $m,$M,$vM,0,14,1,255 +-if {$m>0} -axes. 0,0,$vM,0,14,1,200 -endif +-if {$M<0} -axes. {w-1},{w-1},$vM,0,14,1,200 -endif +--dilate. 3 -r.. [-3] -j... [-2],0,0,0,0,1,[-1],255 -rm[-2,-1] +-endif +-endl -done +-a z -nm $nm +-endl -done -v + +display_parametric : -check "${1=512}>0 && ${2=$1}>0 && ${4=0}>=0" -skip ${3=3},${5=1},${6=1},"${7=x-axis}","${8=y-axis}" +-v - s0="no " s1="" o0="" o1="colored " +-v + -e[^-1] "Render $1x$2 parametric graph plot from data of image$?, with "${o{$3>1}}"outline opacity "{if($3>1,$3-1,$3)}\ +", vertex radius $4, "${s{$5!=0}}"antialiasing and "${s{$6!=0}}"decoration." -v - +-repeat $! -l[$>] +nm={0,n} N={w*h*d} +-i[0] ({'CImg3d'}) -+[0] 0.5 -i[1] ($N;$N) +-if {s==4} --channels. 3,3 -r. 100%,100%,1,2 -a[-2,-1] c is_grayscale=1 +-else is_grayscale={s<4} -channels. 0,5 +-endif +-sh. 0 xm={im} xM={iM} -rm. +-sh. 1 ym={im} yM={iM} -rm. +-sh. 2 zm={im} zM={iM} -rm. +-permute. cxyz -s. x,2 +-i.. (1,0;1,{$N-1}) -r.. 2,$N,1,1,3 -round.. 1,$N,1,1,1 +-y -a y -c3d -n3d -*3d 1,-1,1 +{if($6,max(1,$1-32),$1)},{if($6,max(1,$2-32),$2)},1,{if($is_grayscale,1,3)},255 +-*3d[0] {0.96*min(w,h)} +-if $6 L={0.1*max($1,$2)} -grid[1] $L,$L,0,0,0.25,0xCCCCCCCC,0 -endif +-if $5 +-r[1] 200%,200%,1,100%,1 -*3d[0] 2 +-if $4 --circles3d[0] {2*$4} -j3d[1] [2],50%,50%,0,1,3,0,0 -rm[2] -endif +-elif $4 +--circles3d[0] $4 -j3d[1] [2],50%,50%,0,1,3,0,0 -rm[2] +-endif +-if $3 -l[0] -s3d -f[1] 'i-y' -rm[3] -i[3] (2,0,1;2,{$N-2},{$N-1}) -r[3] 3,{$N-1},1,1,3 -round[3] +-r[5] 1,{h-1},1,1,0 +-if {$3>1} -r[4] 3,{4,h/3},1,1,-1 -r[4] 3,{4,h-1},1,1,2 -else -rm[4] -i[4] 3,{$N-1} -endif +-y -a y -endl -j3d[1] [0],50%,50%,0,{if($3>1,$3-1,$3)},2,0,0 +-endif +-rm[0] +-if $5 -r. 50%,50%,1,100%,2 -endif +-if $6 +xc={0.5*($xm+$xM)} yc={0.5*($ym+$yM)} dx={0.5*($xM-$xm)/0.96} dy={0.5*($yM-$ym)/0.96} +xm={$xc-$dx} xM={$xc+$dx} ym={$yc-$dy} yM={$yc+$dy} +100%,100%,1,1,255 -axes. $xm,$xM,$yM,$ym,14,1,0 +-if {$xm>0} -axes. 0,0,$yM,$ym,14,1,160 -endif +-if {$xM<0} -axes. {w-1},{w-1},$yM,$ym,14,1,160 -endif +-if {$ym>0} -axes. $xm,$xM,{h-1},{h-1},14,1,160 -endif +-if {$yM<0} -axes. $xm,$xM,0,0,14,1,160 -endif +--erode. 3 -!=. 255 -r.. 100%,100%,1,3 -j... [-2],0,0,0,0,1,[-1],1 -rm[-2,-1] +-frame 1,1,128 -frame 15,15,220 +0 -t. "$7",0,0,14,1,-220,-220,-220 -j.. [-1],{({-2,w}-w)/2},{{-2,h}-16},0,0,-1 -rm. +0 -t. "$8",0,0,14,1,-220,-220,-220 -rotate. -90 -j.. [-1],2,{({-2,h}-h)/2},0,0,-1 -rm. +-endif +-nm. $nm +-endl -done -v + +dp : +-v - _gmic_s="$?" -v + +-_display_polar $* +display_polar : +-v - _gmic_s="$?" -v + +-_$0 $* +_display_polar : -check "${1=500}>32 && ${2=$1}>32" -skip ${3=1},${4=200},${5=$4},${6=$5},${7=0},${8=360},"${9=x-axis}","${10=y-axis}" +-e[0--3] "Render $1x$2 polar graph plot from data of image"$_gmic_s", with outline $4 and fill color ($4,$5,$6)." +-v - -repeat $! -l[$>] nm={0,n} +M={max(abs(iM),abs(im))} +-* {0.48*min($1,$2)/$M} +-y ({$7*pi/180};{-$8*pi/180}) -r. 1,[-2],1,1,3 +--sin. -cos.. -*. [-3] -*[-3,-2] +-a[-2,-1] x N={h} +-nm. coords +-if $3 +({'CImg3d'}) -+. 0.5 ($N,$N) +--z[coords] 0,2 +1,$N,1,1,2 1,$N,1,1,'y' --+. 1 -a[-3--1] x -=. 0,2,100% +3,$N,1,1,0 1,$N,1,1,1 -y[-6--1] -a[-6--1] y +-nm. _plot_polar_outline +-endif +-if {"$4>=0 && $5>=0 && $6>=0"} +({'CImg3d'}) -+. 0.5 ({$N+1},$N) +--z[coords] 0,-1,2,100% -z. 0,2 +1,$N,1,1,3 1,$N 1,$N,1,1,'1+y' --+. 1 -a[-4--1] x -=. 1,3,100% +3,$N,1,1,$4,$5,$6 1,$N,1,1,1 +-y[-6--1] -a[-6--1] y +-nm. _plot_polar_fill +-endif +-rm[coords] +{$1-32},{$2-32},1,3,255 +L={0.1*max($1,$2)} -grid. $L,$L,0,0,0.25,0xCCCCCCCC,0 +-if {"$4>=0 && $5>=0 && $6>=0"} +-j3d. [_plot_polar_fill],50%,50%,0,1,2,1,0 +-rm[_plot_polar_fill] +-endif +-if $3 +-if {$3>=0} +-j3d. [_plot_polar_outline],50%,50%,0,1,1,0,0 +-endif +-if {$3!=0} +-if {abs($3)>1} -circles3d[_plot_polar_outline] {abs($3)} -endif +-j3d. [_plot_polar_outline],50%,50%,0,0.2,2,0,0 +-endif +-rm[_plot_polar_outline] +-endif +nM={$M/0.96} +100%,100%,1,1,255 -axes. {-$nM},$nM,$nM,{-$nM},14,1,0 +--erode. 3 -!=. 255 -r.. 100%,100%,1,3 -j... [-2],0,0,0,0,1,[-1],1 -rm[-2,-1] +-frame. 1,1,128 -frame. 15,15,220 +0 -t. "$9",0,0,13,1,-220,-220,-220 -j.. [-1],{({-2,w}-w)/2},{{-2,h}-16},0,0,-1 -rm. +0 -t. "$10",0,0,13,1,-220,-220,-220 -rotate. -90 -j.. [-1],2,{({-2,h}-h)/2},0,0,-1 -rm. +-nm $nm -endl -done -v + +drgba : +-_display_rgba +display_rgba : +-_$0 +_display_rgba : +-e[0--3] "Render RGBA image$? over a checkerboard background." +-v - -to_a -repeat $! -l[$>] +-i[0] (160,128;128,160) -nm[0] {1,n} -r[0] 16,16 -r[0] [1],[1],1,{s-1},0,2 -blend alpha +-endl -done -v + +dt : +-v - _gmic_s="$?" -v + +-_display_tensors $* +display_tensors : +-v - _gmic_s="$?" -v + +-_$0 $* +_display_tensors : -check "${1=16}>0 && ${2=0.92}>=0" -skip "${3=1}" +-e[0--3] "Render field of 2x2 tensors from image"$_gmic_s", with size factor $1, ellipse factor $2 in "${-arg\ 1+!$3,colored,masked}" mode." +-v - +-if {$3} -repeat $! -l[$>] +--_display_tensors $1,$2,0 +-s[0] c --min[0,2] -*[1] -1 -+[1,-1] -a[0-2] c +-r[0] [-1],[-1] -n[0] 0,255 -* +-endl -done -else -repeat $! -l[$>] +w={w} h={h} +-* {($2*$1/2)^2/max(abs(im),abs(iM))} +-s c -i.. [-2] -a c -s yx -r 2,2,1,1,-1 +(0.5,0;0,0.5) -+[^-1] [-1] -rm. +-invert -y c -r $1,$1 +$1,$1,1,1,'x' --. {w/2} +$1,$1,1,1,'y' --. {h/2} +--sqr. -*.. [-3] -sqr... -i.. [-2] -a[-4--1] c +-*[^-1] [-1] -rm. -compose_channels + -<= 1 +-append_tiles $w,$h +-endl -done -endif +-v + +dw : +-v - _gmic_s="$?" -v + +-_display_warp $* +display_warp : +-v - _gmic_s="$?" -v + +-_$0 $* +_display_warp : -check "${1=15}>0" +-e[0--3] "Render 2d warping field"$_gmic_s", with cell size $1." +-v - -repeat $! -l[$>] +-if {d!=1||s!=2} +-error[0--3] "Command '-display_warp': Invalid image ["{$!-$>-1}"]: Dimensions "{w}","{h}","{d}","{s}" does not represent a 2d field of 2d vectors." +-endif +-i[0] 100%,100%,1,1,1 -grid[0] $1,$1 -nm[0] {1,n} +-warp[0] [1],1,1,0 -rm[1] +-endl -done -* 255 -v + +document_gmic : -skip ${1="ascii"},${2=""},${3=1} +-if {!$!} -return -endif +-v -1 +_name={0,b} +-if {$!>1} -i[1--2] (10) -endif -a y -m {t} -s -,10 +-_document_gmic_header_$1[] $3 +_subsection=0 +_example=0 +_command=0 +_is_example=0 +_path="$2" +ks0="0" ks1="-k[0]" +-repeat $! -l[$>] -if {h>7" && "{${-head\ 6}'=='{'"#@gmic"'}}" && "(i[6]=={'" "'}" || "i[6]=={':'})} +-rows 7,100% -autocrop {'" "'} +_is_example=0 +-if {i!={':'}} +_command+=1 +-s -,{'": "'} -autocrop {'" "'} +-_document_gmic_declaration_$1 +-else +-rows 1,100% +-if {i=={':'}} +_subsection+=1 +-rows 1,100% -autocrop {'" "'} +-_document_gmic_subsection_$1 +-else +-autocrop {'" "'} +-if {i=={'$'}} +-rows 1,100% -autocrop {'" "'} +_is_example=1 +-if {i!={'$'}} _example+=1 -endif +_filename=$_path$_name$_example.jpg +-_document_gmic_example_$1 +-else +-_document_gmic_description_$1 +-endif +-endif +-endif +-endif ${ks{$!!=0}} -endl -done +-rm +-_document_gmic_footer_$1[] $3 +_document_gmic_header_ascii : -skip $1 +_shortcut=0 +_document_gmic_subsection_ascii : +-v + +-e[] "\n\n "$_gmic_r$_gmic_b"**** "{0,t}":"$_gmic_n"\n" +-v - +_document_gmic_declaration_ascii : +-if {{t}'=='"(+)"} qualifier=" "{t} -rm. -else qualifier="" -endif +-if {$!>1" && "{${-head\ 7}'=='{'"eq. to "'}}} +-rows. 7,100% -autocrop. {'.'} -autocrop. {'" "'} -autocrop. 39 +_shortcut$_shortcut={0,t} +_shortcutlink$_shortcut={t} +_shortcutqualifier$_shortcut=$qualifier +_shortcut+=1 +-else +-v + -e[] "\n "$_gmic_m${_gmic_b}"-"{0,t}${qualifier}":"$_gmic_n -v - -rm[0] +-if $! +s=" " +-y x +-repeat {$!-1} ({'" |"'}) -a[$>,-1] x -done +-repeat $! -l[$>] -_document_gmic_split_ascii 80,0 +-repeat {$!-1} ({'\n$s" "'}) -a[$>,-1] x -done +-a x -v + -e[] $_gmic_g$s{0,t}$_gmic_n -v - +-endl -done +-endif +-v + -e[] "" -v - +-endif +_document_gmic_description_ascii : +s=" " bs0="\n" bs1="\\\\\n " +-y x -if {!narg($_is_tutorial)} -_document_gmic_split_ascii 96 -endif +-if {$!==1" && "0$_vt100>0" && "{${-head[0]\ 8}'=='{'"(eq. to "'}}} -i[0] ({'$_gmic_b'}) ({'$_gmic_n\n'}) -a x -endif +-repeat {$!-1} ({'${bs$_is_example}$s" "'}) -a[$>,-1] x -done -a x +-if {0$_vt100>0} +-replace_str "Default values:","\n"$s${_gmic_b}"Default values:"$_gmic_n +-replace_str "Default value:","\n"$s${_gmic_b}"Default value:"$_gmic_n +-endif +-v + -repeat $! -e[] $s{$>,t} -v - -done +_document_gmic_example_ascii : +_document_gmic_footer_ascii : -skip $1 +-if $_shortcut +({'"Commands shortcuts"'}) -_document_gmic_subsection_ascii. -v + -e[] "" -v - -rm. +-v + -repeat $_shortcut +-e[] " "$_gmic_m$_gmic_b"-"${_shortcut$>}" "${_shortcutqualifier$>}":"$_gmic_n" eq. to '"$_gmic_g${_shortcutlink$>}$_gmic_n"'." +-done -v - +-endif +-v + -e[] "\n "$_gmic_c"[ Total number of commands: "$_command" ]"$_gmic_n -v - +_document_gmic_split_ascii : +-do -if {w>$1} +i={$1-1} +-repeat {$1/2} -if {C=i($1-1-$>);C==32||C==38||C==42||C==43||C==44||C==46||C==47||C==58||C==59||C==63||C==92||C==124} i={$1-1-$>} -break +-endif -done +--z. {$i+1},100% -z.. 0,$i +-endif -while {w>$1} +_document_gmic_header_bash : -skip $1 +-v + +-e[] "# +\n# Bash completion rules for 'gmic'. +\n# +\n# This file has been generated automatically. +\n# Do not edit! +\n# +\n# This file should be copied/renamed in '/etc/bash_completion.d/gmic'. +\n# +\n +\n_"$_name"() +\n{ +\n\tlocal cur prev opts coms +\n\tCOMPREPLY=() +\n\tcur=\"${COMP_WORDS[COMP_CWORD]}\" +\n\tprev=\"${COMP_WORDS[COMP_CWORD-1]}\" +" +-v - +_opts= +_coms= +_argcommand=0 +_shortcut=0 +_nbopts=0 +_nbcoms=0 +_document_gmic_subsection_bash : +_document_gmic_description_bash : +_document_gmic_example_bash : +_document_gmic_declaration_bash : +_opts$_nbopts=-{0,t}" "--{0,t} +_nbopts+=1 +_coms$_nbcoms={0,t} +_nbcoms+=1 +-if {{{0,t}'=='"input"}" || "{{0,t}'=='"i"}" || "\ +{{0,t}'=='"output"}" || "{{0,t}'=='"o"}" || "\ +{{0,t}'=='"command"}" || "{{0,t}'=='"m"}} -return -endif +-repeat $! -if {{$<,t}'=='"(+)"} -rm[$<] -endif -done +-if {$!==2" && "{${-head\ 7}'=='{'"eq. to "'}}} +-rows. 7,100% -autocrop. {'.'} -autocrop. {'" "'} -autocrop. 39 -autocrop. {'-'} +_shortcut$_shortcut={0,t} +_shortcutlink$_shortcut=${-str2hex\ {1,t}} +-rm. +_shortcut+=1 +-elif {$!>1} +_command$_argcommand={0,t} +-if {{0,t}'=='"help"} _argument$_argcommand="$coms\" -- \"$cur" +-else +-if {$!==2} ({'>'}) -endif +-discard[^0] {'" "'} -i[2--2] ({'" "'}) -a[^0] y +_argument$_argcommand={1,t} +-endif +_argumentlink${-str2hex\ {0,t}}=${_argument$_argcommand} +_argcommand+=1 +-endif +_document_gmic_footer_bash : -skip $1 +-v + +-e[] "\topts=\"\\" -repeat $_nbopts -e[] "\t "${_opts$>}\\ -done -e[] "\t \"" +-e[] "\n\tcoms=\"\\" -repeat $_nbcoms -e[] "\t "${_coms$>}\\ -done -e[] "\t \"" +-e[] "\n\tcase \"${prev}\" in" +-repeat $_argcommand +-e[] "\t\t\"-"${_command$>}"\" | \"--"${_command$>}"\")" +-e[] "\t\tCOMPREPLY=( $(compgen -W \""${_argument$>}"\") )\n\t\treturn 0\n\t\t;;" +-done +-repeat $_shortcut +-if {narg(${_argumentlink${_shortcutlink$>}})} +-e[] "\t\t\"-"${_shortcut$>}"\" | \"--"${_shortcut$>}"\")" +-e[] "\t\tCOMPREPLY=( $(compgen -W \""${_argumentlink${_shortcutlink$>}}"\") )\n\t\treturn 0\n\t\t;;" +-endif +-done +-e[] "\tesac" +-e[] "\n\tif [[ \"$cur\" == -* ]] ; then +\n\t\tCOMPREPLY=( $(compgen -W \"$opts\" -- \"$cur\") ) +\n\telse +\n\t\t_filedir +\n\tfi +\n +\n} +\n +complete -F _"$_name" -o filenames gmic" +-v - +_document_gmic_header_html : +-if $1 -v + -e[] " +\n +\n +\n +\n +\n +\n +\n" +-v - -endif +-m "don : -_document_gmic_desc_on_html" +-m "doff : -_document_gmic_desc_off_html" +-m "eon : -_document_gmic_ex_on_html" +-m "eoff : -_document_gmic_ex_off_html" +_is_desc=0 +_is_ex=0 +_shortcut=0 +_document_gmic_desc_on_html : +-v - +-if $_is_desc +-u "
    " +-else +-u "

    " +_is_desc=1 +-endif +-v + +_document_gmic_desc_off_html : +-v - +-if $_is_desc +-u "

    " +_is_desc=0 +-else -u "" +-endif +-v + +_document_gmic_ex_on_html : +-v - +-if $_is_ex +-u "" +-else +-u "
    "\ +"" +_is_ex=1 +-endif +-v + +_document_gmic_ex_off_html : +-v - +-if $_is_ex +-u "
    Example of use:
    " +_is_ex=0 +-else +-u "" +-endif +-v + +_document_gmic_subsection_html : +-v + +-e[] ${-eoff}${-doff}"

    \"\"  "\ +""{0,t}"

    " +-v - +_document_gmic_declaration_html : +-if {{t}'=='"(+)"} qualifier=" "{t} -rm. -else qualifier="" -endif +s1="\n" s0=" |
    " +-if {$!>1" && "{${-head\ 7}'=='{'"eq. to "'}}} +-rows. 7,100% -autocrop. {'.'} -autocrop. {'" "'} -autocrop. 39 +_shortcut$_shortcut={0,t} +_shortcutlink$_shortcut={t} +_shortcutqualifier$_shortcut=$qualifier +_shortcut+=1 +-else +_command_name={0,t} +-v + +-e[] ${-eoff}${-doff}"

      -"{0,t}$qualifier":" +-if {$!>1} +-e[] "

    " +-repeat {$!-1} -l[{1+$>}] +-if {h>48} -v - -replace_str ",",", " -v + -endif +-e[] {0,t}${s{$<==0}} +-endl -done +-e[] "

    " +-else -e[] "" +-endif +-v - +-endif +_document_gmic_description_html : +-if {${-head\ 13}'=='{'"Default value"'}} +-s +,{':'} -l[^0] -a y -endl -autocrop {':'} -autocrop {'" "'} +-v + +-if {$!>1} -e[] ${-don}"
    "{0,t}": "{t} +-else -e[] ${-don}"
    "{0,t} +-endif +-v - +-elif {${-head\ 8}'=='{'"(eq. to "'}} +-v + -e[] ${-don}""{t}"" -v - +-else +-if {(i<{'A'}" || "i>{'Z'})" && "i!=40" && "i!=39} -v + -e[] ${-don}" "{t} -v - +-else -v + -e[] ${-don}{t} -v - +-endif +-endif +_document_gmic_example_html : +-if {i=={'$'}} +-if {h==1&&i=={'$'}} tuturl=http://gmic.eu/tutorial/_$_command_name.shtml +-else -autocrop {'$'} -autocrop {'" "'} tuturl=http://gmic.eu/tutorial/{0,t}.shtml +-endif +-v + +-e[] ${-eon}"\"\""\ +"A tutorial page exists for this command." +-v - +-else +-if $_filename -else +-m "foo : "{t} +-l[] -v -99 -reset -foo -v -1 -_document_gmic -o $_filename,85 -rm -endl +-uncommand foo +-endif +-v + +-e[] ${-eon}"
    "\ +"\"\"
    "{t}"
    "{t}"" +-v - +-endif +_document_gmic_footer_html : -skip $1 +-if $_shortcut +_subsection+=1 +({'"Commands shortcuts"'}) -_document_gmic_subsection_html. -rm. +-v + -e[] "

    " +-repeat $_shortcut +-e[] "  -"${_shortcut$>}" "${_shortcutqualifier$>}":" +-e[] "eq. to '"${_shortcutlink$>}"'
    " +-done +-e[] "

    " -v - +-endif +-v + +-e[] ${-eoff}${-doff}"

    [ Total number of commands: "$_command" ]" +-v - +-uncommand don,doff,eon,eoff +_document_gmic_header_images : -skip $1 +-v + +-e[] "\n - Generate example images from set of commands '"$_name"'.\n" +-if image.jpg -else -testimage2d 400 -o. image.jpg -rm. -endif +-v - +_document_gmic_subsection_images : +-v + +-e[] "\n ** Section ""#"$_subsection": "{0,t}".\n" +-v - +_document_gmic_declaration_images : _command_name={0,t} +_document_gmic_description_images : +_document_gmic_example_images : +-if {i=={'$'}} -return -endif +-v + +-e[] " ["$_example"] Command '-"$_command_name"': $ "{t} +-v - +-if $_filename -else +-m "foo"$_example" : "{t} +-l[] -v -1 -reset -v -99 -foo$_example -v -1 -_document_gmic -o $_filename,85 -rm -endl +-uncommand foo$_example +-endif +_document_gmic_footer_images : -skip $1 +-v + +-e[] " - [ All done! ]\n\n" +-v - +_document_gmic_header_latex : +-if $1 -v + +-e[] "\\documentclass[a4paper,10.5pt,twoside]{book} +\n\\usepackage{hyperref,fancyhdr,graphicx,amssymb,amsmath,times,makeidx,color} +\n\\graphicspath{{"$_path"}} +\n\\pagestyle{fancyplain} +\n\\lhead[\\fancyplain{}{\\textbf\\thepage}]{\\fancyplain{}{\\rightmark}} +\n\\rhead[\\fancyplain{}{\\leftmark}]{\\fancyplain{}{\\textbf\\thepage}} +\n\\cfoot{} +\n\\setlength{\\textwidth}{5.875in} +\n\\setlength{\\parindent}{0pc} +\n\\setlength{\\oddsidemargin}{15.5pt} +\n\\setlength{\\evensidemargin}{15.5pt} +\n\\setcounter{tocdepth}{1} +\n\\sloppy{} +\n\\definecolor{ca}{rgb}{0.8,0,0} +\n\\definecolor{cb}{rgb}{0,0.2,0.6} +\n\\definecolor{cc}{rgb}{0,0.5,0} +\n\\definecolor{cd}{rgb}{0.6,0.6,0.6} +\n\\def\\Ccr{\\color{ca}} +\n\\def\\Ccb{\\color{cb}} +\n\\def\\Ccg{\\color{cc}} +\n\\def\\Ccc{\\color{cd}} +\n\\def\\Ccn{\\color{black}} +\n\\def\\comma{\\discretionary{,}{}{,}} +\n\\newcommand{\\Ca}[1]{\\textcolor{ca}{#1}} +\n\\newcommand{\\Cb}[1]{\\textcolor{cb}{#1}} +\n\\newcommand{\\Cc}[1]{\\textcolor{cc}{#1}} +\n\\newcommand{\\Cd}[1]{\\textcolor{cd}{#1}} +\n\\renewcommand\\indexname{Index of commands} +\n\\makeindex +\n\\begin{document} +\n\\tableofcontents" +-v - -endif +-v + -e[] "\n\\chapter{List of commands}" -v - +-m "eon : -_document_gmic_ex_on_latex" +-m "eoff : -_document_gmic_ex_off_latex" +_is_desc=0 +_is_ex=0 +_shortcut=0 +_document_gmic_ex_on_latex : +-v - +-if $_is_ex +-u "\\\\" +-else +-u "\\begin{center}" +_is_ex=1 +-endif +-v + +_document_gmic_ex_off_latex : +-v - +-if $_is_ex +-u "\\end{center}" +_is_ex=0 +-else +-u "" +-endif +-v + +_document_gmic_subsection_latex : +_is_desc=0 +-_document_gmic_replace_latex +-v + -e[] ${-eoff}"\n\\section{"{0,t}"}" -v - +_document_gmic_declaration_latex : +_is_desc=0 +-if {{t}'=='"(+)"} qualifier={t} -rm. -else qualifier="" -endif +e1="\\end{flushleft}" e0="~~~\\\\" +-if {$!>1" && "{${-head\ 7}'=='{'"eq. to "'}}} +-_document_gmic_replace_latex +-rows. 7,100% -autocrop. {'.'} -autocrop. {'" "'} -autocrop. 39 +_shortcut$_shortcut={0,t} +_shortcutlink$_shortcut={t} +_shortcutqualifier$_shortcut=$qualifier +_shortcut+=1 +-else +-_document_gmic_replace_latex[0] +_command_name={0,t} +-v + -e[] ${-eoff}"\n\n\\subsection{\\emph{-"{0,t}"\\index{-"{0,t}"}} "$qualifier"}\\vspace*{-0.7em}" +-if {$!>1} +-e[] "~\\\\\\textbf{\\Cb{Arguments: }}\\begin{flushleft}" +-repeat {$!-1} -l[{1+$>}] +-v - -s y,-60 -if {$!>1} -i[1--2] ({'\\-'}) -endif -y -a y +-_document_gmic_replace_latex -v + +-e[] "{\\small \\Cb{\\hspace*{0.5cm}$\\bullet$~~\\texttt{"{0,t}"}}}"${e{$<==0}} +-endl -done +-endif +-v - +-endif +_document_gmic_description_latex : +s0="" s1="~\\\\" s=${s$_is_desc} +-_document_gmic_replace_latex +-if {${-head\ 13}'=='{'"Default value"'}} +-s +,{':'} -l[^0] -a y -endl -autocrop {':'} -autocrop {'" "'} +-if {$!>1} +-replace_str[1] " and ","} and \\\\texttt{" +-v + -e[] ${-eoff}"\\begin{flushleft}\\Cc{\\textbf{"{0,t}"}:\\\\~\\\\\\hspace*{0.5cm}{\\small $\\bullet$~~\\texttt{"{t}"}}}\\end{flushleft}" -v - +-else -v + -e[] ${-eoff}$s"~\\\\"{0,t} -v - +-endif +-elif {${-head\ 8}'=='{'"(eq. to "'}} +-rows. 8,100% -autocrop. {'.'} -autocrop. {')'} -autocrop. {'" "'} +-v + -e[] ${-eoff}$s"(\\emph{eq. to} {\\small \\texttt{"{t}"}})." -v - +-else +-if {(i<{'A'}" || "i>{'Z'})" && "i!=40" && "i!=39} -v + -e[] ${-eoff}{t} -v - +-else -v + -e[] ${-eoff}$s{t} -v - +-endif +-endif +_is_desc=1 +_document_gmic_example_latex : +-if {i=={'$'}} +-if {h==1&&i=={'$'}} tuturl=http://gmic.eu/tutorial/\\_$_command_name.shtml +-else -autocrop {'$'} -autocrop {'" "'} tuturl=http://gmic.eu/tutorial/{0,t}.shtml +-endif +-l[] ({'$tuturl'}) -replace_str "_","\\_" +-s x,-60 -if {$!>1} -i[1--2] ({'\\\\-'}) -endif -a x +-replace_str. "_","\\_" tuturl={t} -rm -endl +-v + +-e[] ${-eoff} +-if {!$_is_ex} -e[] "~\\\\" -endif +-e[] "~\\textbf{Tutorial page: }\\\\\\url{"$tuturl"}" +-v - +-else +_is_desc=0 +-if $_filename -else +-m "foo : "{t} +-l[] -v -99 -reset -foo -v -1 -_document_gmic -o $_filename,85 -rm -endl +-uncommand foo +-endif +-_document_gmic_replace_latex +-v + +-e[] ${-eon}"\\includegraphics[keepaspectratio=true,height=6cm,width=\\textwidth]{"$_filename"}\\\\" +-e[] "{\\footnotesize \\textbf{Example "$_example"~:} \\texttt{"{t}"}}" +-v - +-endif +_document_gmic_footer_latex : +-if $_shortcut +({'"Commands shortcuts"'}) -_document_gmic_subsection_latex. -rm. +-v + -repeat $_shortcut +-e[] "$\\bullet$~'\\texttt{\\Ca{-"${_shortcut$>}"}}' "${_shortcutqualifier$>}"~is equivalent to~~'\\texttt{\\Ca{"${_shortcutlink$>}"}}'.\\\\" +-done -v - +-endif +-if $1 +-v + +-e[] " +\n\\printindex +\n~\\\\$\\square$~End of document. +\n\n\\end{document}" +-v - +-endif +-uncommand eon,eoff +_document_gmic_replace_latex : +-replace_str "\\","\\\\textbackslash " +-replace_str "_","\\\\_" +-replace_str "%","\\\\%" +-replace_str "#","\\\\%" +-replace_str "^","\\\\textasciicircum " +-replace_str "$","\\\\$" +-replace_str "\{","\\\\\{" +-replace_str "\}","\\\\\}" +-replace_str "&","\\\\&" +-replace_str "|","~$|$~" +-replace_str "<","$\<$" +-replace_str ">","$\>$" +-replace_str "\\\\textbackslash -","\\\\-" +-replace_str ",","{\\\\\\comma}" +_document_gmic_header_man : -skip $1 +_gmic_n="\\fR" _gmic_b="\\fB" _gmic_r="" _gmic_g="" _gmic_c="\\fB" _gmic_m="" +-_document_gmic_header_ascii $"*" +_document_gmic_subsection_man : +-v + +-e[] "\n "$_gmic_b"** "{0,t}":"$_gmic_n +-v - +_document_gmic_declaration_man : +-if {{t}'=='"(+)"} qualifier=" "{t} -rm. -else qualifier="" -endif +-if {$!>1" && "{${-head\ 7}'=='{'"eq. to "'}}} +-rows. 7,100% -autocrop. {'.'} -autocrop. {'" "'} -autocrop. 39 +_shortcut$_shortcut={0,t} +_shortcutlink$_shortcut={t} +_shortcutqualifier$_shortcut=$qualifier +_shortcut+=1 +-else +-v + -e[] "\n "${_gmic_b}"-"{0,t}${qualifier}":"$_gmic_n -v - -rm[0] +-if $! +s=" " +-y x +-repeat {$!-1} ({'" |"'}) -a[$>,-1] x -done +-repeat $! -l[$>] -_document_gmic_split_ascii 80,0 +-repeat {$!-1} ({'\n$s" "'}) -a[$>,-1] x -done +-a x -v + -e[] $s{0,t} -v - +-endl -done +-endif +-v + -e[] "" -v - +-endif +_document_gmic_description_man : +s=" " bs0="\n" bs1="\\\\\n " +-y x -if {!narg($_is_tutorial)} -_document_gmic_split_ascii 96 -endif +-repeat {$!-1} ({'${bs$_is_example}$s" "'}) -a[$>,-1] x -done -a x +-replace_str "Default values:","Default values:" +-replace_str "Default value:","Default value:" +-replace_str "\\","\\\\" +-v + -repeat $! -e[] $s{$>,t} -v - -done +_document_gmic_example_man : +_document_gmic_footer_man : -skip $1 +-_document_gmic_footer_ascii $"*" +_document_gmic : +-repeat $! -l[$>] W$>={w} H$>={h} D$>={d} S$>={s} IS_3D$>=${-_is_3d} -endl -done +-repeat $! -l[$>] +-if ${IS_3D$>} -r3d 1,1,0,-80 -r3d 0,1,0,80 -snapshot3d 400 +-else -if {w>8192} -z 0,8191 -elif {h>8192} -rows 0,8191 -endif -n 0,255 +-endif -endl -done +--append_tiles , -if {w>900} r={round(900*100/w,0.1)} -r[^-1] $r%,$r%,1,100%,2 -endif -rm. +-repeat $! -l[$>] +-if {s==1} -r {w},{h},1,3 -else -r {w},{h},1,3,0 -endif +-if {w<=h&&h<256} -r2dy 256,2 -elif {h<=w&&w<256} -r2dx 256,2 -endif +-if {w<=h&&h>512} -r2dy 512,2 -elif {h<=w&&w>512} -r2dx 512,2 -endif +-if {h<48} -r 100%,48 -endif +-if {w<48} -r 48,100% -endif +-frame 1,1,0 -frame 4,4,255 +-endl -done +N=$! -repeat $N -l[$>] +{w},16,1,3,255 +-if {w>75} +-if {$N>1} -if {w>110} -t. Image\ [$>]:,3,3,15 -else -t. [$>]:,3,3,15 -endif -endif +-if ${IS_3D$>} 0 -t. (3d\ object),0,0,13,1,255 +-else 0 -t. (${W$>}x${H$>}x${D$>}x${S$>}),0,0,13,1,255 +-endif +-negative. -n. 0,255 -+. 164 -c. 0,255 -to_rgb. +-j.. [-1],{{-2,w}-w-5},{{-2,h}-h-1} -rm. +-else -t. [$>]:,3,3,15 -endif +-rv[-2,-1] -a[-2,-1] y +-endl -done +-- 255 -append_tiles , -+ 255 +-if {w<256} -- 255 -r 256,100%,1,3,0,0,0.5,0.5 -+ 255 -endif +-if {h<256} -- 255 -r 100%,256,1,3,0,0,0.5,0.5 -+ 255 -endif +echo_file : -skip "${2='\n'}" +-v - ({"'${2--1}\n'"}) -o. raw:$1,char -rm. -v + +echo_stdout : +-v - ({'"$*"\n'}) -o. -.raw,char -rm. -v + +function1d : -check "${1=1}>=0 && $1<=1" -skip ${2=0},${3=0} +-e[^-1] "Input continuous 1d function, with smoothness $1 and keypoints (${2--1})." +-v - -l[] +smoothness={max(0,min(1,$1))} +(${2--1}) -r 2,{int(w/2)},1,1,-1 +-sort +,y -s x size={0,if(iM>=0,1+int(iM),0)} +-if {!$size} -rm 0 -break -endif +-a x +--f '0.5*(j(0,1,0,0,0,1)-j(0,-1,0,0,0,1))' -s. x -max.. 0.01 -/. [-2] -rm.. -a x +$size,1,1,1,-1 +-repeat {0,h-1} +x0={0,i(0,$>)} y0={0,i(1,$>)} x1={0,i(0,$>+1)} y1={0,i(1,$>+1)} +slope={($y1-$y0)/max(0.01,$x1-$x0)} +yp0={0,i(2,$>)*$smoothness+(1-$smoothness)*$slope} +yp1={0,i(2,$>+1)*$smoothness+(1-$smoothness)*$slope} +i={round($x0,1,1)} j={round($x1,1,0)} +-line[1] $i,0,$j,0,1,$> +-if {$j-$i<=1} +({$y0-$x0*$slope}^{$slope}^0^0) +-else +(1,$x0,{($x0)^2},{($x0)^3};\ +1,$x1,{($x1)^2},{($x1)^3};\ +0,1,{2*$x0},{3*($x0)^2};\ +0,1,{2*$x1},{3*($x1)^2}) +($y0;$y1;$yp0;$yp1) +-solve. [-2] -rm.. -y. c +-endif +-done +-a[2--1] x -map.. [-1] -rm. +100%,1,1,1,1 +(0,{w-1}) -r. {-2,w},1,1,1,3 -round. +--sqr. --*[-2,-1] -a[-4--1] c -*[-2,-1] -s. c -+[-4--1] -rm.. +-endl -v + +gmicky : +-gmicky_deevad -nm. [gmicky] +gmicky_deevad : +-e[^-1] "Insert image of the G\47MIC mascot 'Gmicky', by David Revoy." +-v - +filename=${-path_rc}/gmicky_large_deevad.cimgz +-if $filename $filename +-else http://gmic.eu/img/gmicky_large_deevad.cimgz -o. $filename -+. 0 +-endif +-nm. [gmicky_deevad] +-v + +gmicky_mahvin : +-e[^-1] "Insert image of the G\47MIC mascot 'Gmicky', by Mahvin." +-v - +filename=${-path_rc}/gmicky_large_mahvin.cimgz +-if $filename $filename +-else http://gmic.eu/img/gmicky_large_mahvin.cimgz -o. $filename -+. 0 +-endif +-nm. [gmicky_mahvin] +-v + +gmicky_wilber : +-e[^-1] "Insert image of the G\47MIC mascot 'Gmicky' together with GIMP mascot 'Wilber', by Mahvin." +-v - +filename=${-path_rc}/gmicky_wilber_large.cimgz +-if $filename $filename +-else http://gmic.eu/img/gmicky_wilber_large.cimgz -o. $filename -+. 0 +-endif +-nm. [gmicky_wilber] -v + +ig : +-input_glob $* +input_glob : +-e[^1] "Input all files that match glob pattern '$*'." +-v - +-files 3,"$*" +N=$! +-m "_ig : $""=arg -repeat $""# -i ${arg{1+$>}} -done" +-_ig ${} -uncommand _ig +-if {$N==$!} -error[0--3] "Command '-input_glob': No matching filenames for pattern '$*'." -endif +-v + +input_gpl : +-e[^-1] "Input GIMP palette file '$*'." +-v - -l[] +-i raw:"$*",char -replace 9,32 -s -,10 +colors=0 +-repeat $! -l[$>] +-s -,32 +-if {$!>=3" && "isint({0,t})" && "isint({1,t})" && "isint({2,t})} colors=$colors;{0,t},{1,t},{2,t} -endif +-rm 0 +-onfail -rm 0 -endl -done +-rm ($colors) -rows 1,100% -nm "$1" -permute yzcx +-endl -v + +output_ggr : -skip "${2=}" +-e[^-1] "Output image$? as GIMP gradient file '$1'." +-v - N=$! +-repeat $N --l[$>] -r 1,{w*h*d},1,100%,-1 -to_rgba -/ 255 +-if {narg("$2")} name="$2" +-else -l[] 1 -nm. "$1" ({'{b}'}) -f "if(x==0&&i>="{'a'}"&&i<="{'z'}",i-"{'a'}"+"{'A'}",i)" name={t} -rm -endl +-endif +({'"GIMP Gradient\nName: "$name\n{0,h}\n'}) +-repeat {0,h} +start={_$>/{0,h}} +end={_($>+1)/{0,h}} +mid={_0.5*($start+$end)} +rgba=${-at[0]\ 0,$>} +r={arg(1,$rgba)} g={arg(2,$rgba)} b={arg(3,$rgba)} a={arg(4,$rgba)} +({'$start" "$mid" "$end" "$r" "$g" "$b" "$a" "$r" "$g" "$b" "$a" 0 0\n"'}) +-done +-rm[0] -a x +-if {$N>1} -o raw:${"-filename \"$1\",$>"},char -else -o raw:"$1",char -endif +-rm +-endl -done -v + +on : +-v - _gmic_s="$?" -v + +-_outputn $* +outputn : +-v - _gmic_s="$?" -v + +-_$0 $* +_outputn : +-v - filename=${-filename\ "$1",$>} -v + +-e[0--3] "Output image"$_gmic_s" as file '"$filename"'." +-v - -o $filename -v + +op : +-v - _gmic_s="$?" -v + +-_outputp $* +outputp : +-v - _gmic_s="$?" -v + +-_$0 $* +_outputp : -skip ${1="_"} +-if {$!>1} -e[0--4] "Output image"$_gmic_s" as their initial locations, prefixed by '$1'." +-else -e[0--4] "Output image"$_gmic_s" as its initial location, prefixed by '$1'." +-endif +-v - -repeat $! -o[$>] {$>,f}$1{$>,b}.{$>,x} -done -v + +ow : +-v - _gmic_s="$?" -v + +-_outputw +outputw : +-v - _gmic_s="$?" -v + +-_$0 $* +_outputw : +-if {$!>1} -e[0--4] "Output image"$_gmic_s" as their initial location." +-else -e[0--4] "Output image"$_gmic_s" as its initial location." +-endif +-v - -repeat $! -o[$>] {$>,n} -done -v + +ox : +-v - _gmic_s="$?" -v + +-_outputx $* +outputx : +-v - _gmic_s="$?" -v + +-_$0 $* +_outputx : +-v - +$=arg +is_last_arg=0 is_same_location=0 +-if {isval($-1)} is_last_arg={isint($-1)&&$-1>=0&&$-1<=1} is_same_location=$-1 -endif +N={$#-$is_last_arg} s0= s1=s +-if {!$N} -v + -e[0--3] "Output image"$_gmic_s" at same location, with same base filename but extension '' (skipped, no extension provided)." -return +-endif +-if $is_same_location +-v + +-if $is_last_arg -e[0--4] "Output image"$_gmic_s" at same location, with same base filename but extension"${s{$N>1}}"' ${^-1}'." +-else -e[0--4] "Output image"$_gmic_s" at same location, with same base filename but extension"${s{$N>1}}" '$*'." +-endif +-v - -repeat $! -l[$>] +-repeat $N -o {0,f}{0,b}.${arg{1+$>}} -done +-endl -done +-else +-v + +-if $is_last_arg -e[0--4] "Output image"$_gmic_s" with same base filename but extension"${s{$N>1}}"' ${^-1}'." +-else -e[0--4] "Output image"$_gmic_s" with same base filename but extension"${s{$N>1}}" '$*'." +-endif +-v - -repeat $! -l[$>] +-repeat $N -o {0,b}.${arg{1+$>}} -done +-endl -done +-endif +-v + +rainbow_lut : +-e[^-1] "Input RGB colormap of 256 rainbow colors." +-v - +(2,10,13,13,15,16,15,15,18,23,26,31,33,37,38,39,42,42,44,45,44,44,45,45,44,42,44,45,45,49,50,52,54,55,56,57,\ +56,56,57,57,58,57,58,58,59,58,60,59,58,59,59,59,59,59,60,60,59,59,59,59,60,59,59,59,59,59,59,59,58,58,58,56,\ +56,54,51,48,44,39,33,20,5,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,25,50,66,81,90,102,109,118,129,137,144,152,158,168,178,183,190,199,207,\ +213,220,227,230,236,242,246,250,255,255,253,253,253,252,251,250,250,249,248,248,247,248,246,246,246,245,246,\ +245,245,245,246,246,246,246,246,246,246,246,245,245,245,245,245,244,245,244,245,245,245,245,245,245,245,245,\ +245,244,244,245,245,243,239,235,230,226,220,216,211,204,201,194,190,184,176,171,164,160,152,144,138,130,122,\ +114,107,96,87,78,69,57,50,46,38,31,19,5^3,10,14,15,17,18,19,18,19,23,25,30,31,35,37,39,42,44,45,48,49,50,51,\ +52,53,56,59,63,66,66,68,69,71,73,74,75,76,76,77,78,79,79,80,81,81,82,82,83,84,84,84,84,84,85,85,86,86,86,86,\ +87,88,87,86,86,86,86,88,89,89,90,92,92,94,96,99,102,104,107,111,117,120,126,130,136,142,149,155,161,167,172,\ +176,178,179,179,178,178,178,178,177,177,177,176,176,176,176,175,173,173,174,173,172,171,171,171,171,171,171,\ +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,173,173,173,175,176,178,178,178,181,182,184,\ +186,186,190,192,193,195,198,200,201,204,206,209,211,208,206,202,197,194,190,185,182,178,172,167,162,157,152,\ +144,139,132,127,121,115,108,102,98,92,87,79,75,69,64,62,58,55,52,50,49,47,47,47,47,47,47,47,47,46,46,46,46,\ +45,44,44,42,42,41,41,40,39,38,37,36,34,31,30,29,30,30,31,32,32,32,33,33,34,34,33,34,33,32,31,31,30,29,26,25,\ +23,21,19,15,13,13,16,18,18,18,17,15,13,12,9,2^6,19,25,32,41,49,55,65,71,79,84,90,96,102,106,111,117,121,128,\ +132,134,139,143,146,149,152,155,156,157,159,159,160,161,162,163,164,164,165,166,167,166,165,166,166,167,167,\ +168,168,168,169,169,169,169,170,170,170,170,170,170,170,171,170,170,170,170,170,171,171,172,173,173,173,175,\ +177,179,180,183,185,187,190,193,198,201,206,213,219,225,227,227,223,218,214,204,199,192,184,179,172,168,162,\ +156,151,145,139,133,126,120,113,106,98,90,85,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,84,84,82,82,82,\ +82,82,83,83,81,81,81,80,80,78,78,78,76,74,73,73,71,72,69,68,67,65,62,59,58,56,51,50,49,45,43,40,38,37,35,32,\ +31,32,32,33,33,34,34,35,36,36,37,38,39,42,44,45,46,46,47,48,49,48,48,48,48,48,48,48,48,48,48,47,47,47,47,46,\ +45,45,43,43,42,41,40,39,38,37,38,38,37,37,38,38,38,38,39,40,39,40,39,40,40,39,39,38,38,37,35,34,32,30,28,26,\ +23,20,16,14,12,16,16,18,18,17,16,14,13,9,2) +-nm. [rainbow\ lut] +-v + +roddy : +-e[^-1] "Load image of the G\47MIC Rodilius mascot 'Roddy'." +-v - +filename=${-path_rc}/roddy_large.cimgz +-if $filename $filename +-else http://gmic.eu/img/roddy_large.cimgz -o. $filename -+. 0 +-endif +-nm. [roddy] -v + +shape_heart : -check "${1=512}>=0" +-e[^-1] "Input a $1x$1 heart binary shape." +-v - +ir={round($1)} +-if {!$ir} 0 +-else -l[] +2048,1,1,1,'t=2*pi*x/w;16*sin(t)^3' +2048,1,1,1,'t=2*pi*x/w;13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)' +-a c -display_parametric $ir,$ir,1,0,0,0 +-flood 50%,50%,0,0,0,1,0 -==. 0 +-endl +-endif +-nm "[2d heart shape]" +-v + +shape_circle : -check "${1=512}>=0" +-e[^-1] "Input a $1x$1 circle binary shape." +-v - +ir={round($1)} +-if {!$ir} 0 +-elif {$ir<2} $ir,$ir,1,1,1 +-else +{int($ir/2)+($ir%2)},{int($ir/2)+($ir%2)} -=. 1,100%,100% +-distance. 1 -<=. {(i+0.4)/sqrt(2)} +--mirror. x +-if {$ir>1&&($ir%2)} -r. {w-1},100%,1,1,0,0,1 -endif +-a[-2,-1] x --mirror. y +-if {$ir>1&&($ir%2)} -r. 100%,{h-1},1,1,0,0,0,1 -endif +-a[-2,-1] y +-endif +-nm. "[2d circle shape]" +-v + +shape_cupid : -check "${1=512}>=0" +-e[^-1] "Input a $1x$1 cupid binary shape." -v - +ir={round($1)} +-if {!$ir} 0 +-else -l[] +(480,480,1,1,1) +({'" -WHX /ZL[ 1\\N] 2k 2l 4m 4m 4m 4m "\ +" 4m 4m 4m 3l 3k 2k 1i 0i /g .g -e +c )a (` &^ $\\ !Y NW "\ +" LU IQ "\ +" :R>Z 9ZD^ 8T *^G` :X@Q ?`Ib ;ZCS AcMe ;[FTAQ \"{ ;\\GTBS $} ;\\JVBS $} ;]LWBT %} ;hBV (~P ;gBXNT 0~P ;hC^ 0~P "\ +" GQEhC^ 0~P KZKpK_ 0~P M~TM_ 0~P ~h 0~P !~i 0~P \"~j 0~P \#~k 0~ \#~m 1~ $~n 0} %~o 0| %~q 1| &~r 0{ \47~t 1z (~w 1y *~z 2x +~| 2w +~~"\ +" 2v ,~~P 1t ,~~\\ ~~c LU 2~m?~~b KU 0~k?~~b KV 0~k@~~b KX 2~l@~~` KZ 2~k@~~` K[ 1~j@~~_ LTKU 2U&~i?~~] LSHU 4X\47~i@~~] MTGT "\ +" 5[\47~g@~~\\ MTET 6\\\47~f?~~[ MSCT 7]&~e@~~Z MTCU 8_1VL~dA~~Z MTAU 9a5~pA~~Z NU@T 9c7~pA~~Y MT>U :d:~qB~~Y LS=V ;f<~rC~~Y MT~rC~~Y NT:V ~z/U GU F~~m>~y.T FV G~~m?~y.T DU G~~m@~y.U DU G~~n@~"\ +"w-T BU G~~m@UH~i-T AU F~~m*~^-U AU E~~l*~]-U ?U E~~l*~Z+T >U C~~l,~Y+U >U B~~t5~X+U =V A~~v9~W+U ;U @~~w;~W+U ;U >~~y@~W+U :U <~~zC~W+T 9V ;~~zF~W+U 9V 8~~yH~W,U 7U 5~~xL~X+U"\ +" 7U 3~~~~S,U 6U ?~~~~^,U 5U @~~~~^+U 5V B~~~~QIV+U 4V C~~~~Q MU 3V C~~~~P LT 2V C~~~~ LU 2V C~~~~ MU 1V C~~~} MU 0V B~~~| MT /V A~~~{ NU /V @~~~y NU /W >~~~w NU /V :~~~t U "\ +".V 8~~~r!U -V 4~~~o\"U -V .~~~j$U -W 1~~~r*V -V 3~~~y/V ,V 4~~~|1U ,W 5~~~~3V ,W 6~~~~R6V +V 5~~~~T8U +W 4~~~~U:T *W 4~~~~Z@U +W 3~~~~]DU +W 1~~~~^FT *W 0~~~~^HT *W -~~~~^"\ +"KT *X +~~~~^NU +X \"~~~~\\ +X !~~~~\\ ,X ~~~~[ +W ~~~~\\ ,W N~~~~\\ -W N~~~~] .X N~~~~] /X M~~~~] 0Y L~~~~] 1X J~~~~\\ 2X G~~~~[ 4X @~~~~V 6Y >~~~~U 7X >~~~~X :X "\ +" >~~~~Z ~~~~] @Z >~~~~t)Z >~~~~{0[ =~~~~}4\\ =~~~~~Q9^ ;~~~~~R>a 4~~~~~Fd 4~~~~~n 5~~~~~o*S 1~~~~~q-X 4~~~~~y6Z 5~~~~~~UB] 7~~~~~~[J` 6~~~~~~p /~~~~~hEu /~~"\ +"~~~f=o 0~~~~~f2d /~~~~~e1c /~~~~~e0a ,~~~~~c/^ \#~~~~~\\.\\ !~~~~~[-Y N~~~~~Z*T K~~~~~Z !~~~~~Z ~~~~~X K~~~~~T C~~~~{ B~~~~y @~~~~x >~~~~v =~~~~v ;~~~"\ +"~s 3~~~~l 1~~~~[M\\ 0~~kKX:vGZ .~~hHT4oDZ ,TK`L~xGR\47_?Y !]I~vGQ 5Y ZG~vFP 4Y NWF~vFP 4Y =~wGQ 5Y =~wGQ 5Y =~wGQ 4X >~xFP 4X ?~zGQ 5X @~{G"\ +"Q 5Y D~~GQ 4X F~~QGR 5X G~~RFQ 5X H~~SFQ 4X J~~TFR 5X K~~UEQ 4W L~~VEQ 4X N~~WEQ 4X ~~XER 4W ~~XDQ 4X \"~~YDQ 4X \#~~ZDQ 3W $~~[DR 4X %~"\ +"~[DR 4X &~~\\CQ 4X &~~\\CQ 4X &~~\\CQ 4X \47~~]CR 5X \47~~]BQ 5X \47~~\\AQ 5X \47~~\\AQ 5X (~~]AR 6X (~~]@Q 6X (~~]@Q 7Y )~~]?Q 7X LV 2~~]?R 8X !] 5~~]>Q 8X \#a 7~"\ +"~]>Q 9Y %d 8~~\\=R :X &g 9~~\\=R :X )k :~~\\Y ;~R <~~Z9R ?X :~R <~~Y8R @Y ;~S <~~X6Q @X :~S <~~X6Q AY ;~T ="\ +"~~X5R BX :~T >~~X4R CX 9~U B~~Z2Q CX 9~U F~~]1Q DX 8~V I~~_1Q EX 7~X L~~^/R GY 7~d*~~_/R HY 5~f/~~a.Q HX 4~h2~~a-Q IX 1TJ~_7~~c-R KY $~^;~~e-R LY \"~^=~~f,Q MY ~_@~~h-Q NY K"\ +"~]B~~i-R!Y H~[C~~k.R\"Y B~WE~~l-Q\#Y =~TG~~m-R%Y ;~TH~~n.R\47Z 9~TJ~~p/R(Z 7~TL~~q.Q)Z 5~~~x.R,[ 3~~~x/R-[ 1~~~w/R.Z /~~~w.Q0[ -~~~v.Q2\\ +~~~v/R4[ (~~~u/R6[ &~~~u"\ +".Q8\\ $~~~t.Q9\\ \"~~~s.Q;\\ N~~~s/R>] L~~~r.Q@] I~~~q.QB^ G~~~p.QC] D~~~p.QF\\ @~~~o.QH\\ =~~~n.RK\\ :~~~m.b 8~~~l.` 5~~~k.] 1~~~j.Y +~~~h.W (~~~g.U"\ +" &~~~g.T \#~~~e.S !~~VJ~X.S N~~RF~V.R L~~PD~U.R J~{A~U/Q G~w>~T \#~s;~S !~m6~R N~i3~Q J~a.~P G~Z)~ E~ M} Ds C| Cf 6{ A"\ +"a 2z @] .z ?Y +y 480} -b. 0.2% -endif ->= 40% +-endl +-endif +-nm "[2d cupid shape]" +-v + +shape_diamond : -check "${1=512}>=0" +-e[^-1] "Input a $1x$1 diamond binary shape." +-v - +ir={round($1)} +-if {!$ir} 0 +-elif {$ir<2} $ir,$ir,1,1,1 +-else +{int($ir/2)+($ir%2)},{int($ir/2)+($ir%2)} -=. 1,100%,100% +-distance. 1,1 -<=. {i/2} +--mirror. x +-if {$ir>1&&($ir%2)} -r. {w-1},100%,1,1,0,0,1 -endif +-a[-2,-1] x --mirror. y +-if {$ir>1&&($ir%2)} -r. 100%,{h-1},1,1,0,0,0,1 -endif +-a[-2,-1] y +-endif +-nm. "[2d diamond shape]" +-v + +shape_polygon : -check "${1=512}>=0 && isint(${2=5}) && $2>=3" -skip ${3=0} +-e[^-1] "Input a $1x$1 polygon binary shape, with $2 vertices and angle $3 deg." +-v - +ir={round($1)} +-if {!$ir} 0 +-else -l[] +(0;{2*pi}) -+ {($3-90)*pi/180} -r. 1,{$2+1},1,1,3 -rows. 0,{h-2} +ir2={round($ir/2)} +--sin. -cos.. -a x -* {$ir2-1} -+ $ir2 +$ir,$ir -polygon. $2,{-2,^},1,1 -rm.. +-endl +-endif +-nm "[2d $2-polygon shape]" +-v + +shape_star : -check "${1=512}>=0 && ${2=5}>0 && ${3=0.5}>=0 && $3<=1" +-e[^-1] "Input a $1x$1 star binary shape, with $2 branches and thickness $3." +-v - +ir={round($1)} +-if {!$ir} 0 +-else -l[] +-star3d $2,$3 -col3d 1 -c3d -n3d -*3d $1,$1 +$1,$1 -j3d. [-2],50%,50%,0,1,2 -rm.. +-endl +-endif +-nm "[2d star shape]" +-v + +testimage2d : -check "${1=512}>0 && ${2=$1}>0 && ${3=3}>0" +-e[^-1] "Input 2d synthetic image of size $1x$2x$3." +-v - +Dmax2={0.15*min($1,$2)^2} +$1,$2,1,$3,'X=x-w/2;Y=y-h/2;a=atan2(Y,X);if(X^2+Y^2<=$Dmax2,255*abs(cos(c+200*(x/w-0.5)*(y/h-0.5))),850*(a%(0.1*(c+1))))' +-polygon. 4,20%,20%,60%,20%,70%,70%,35%,45%,0.9,0,255,0 +-torus3d {$1/7},{$1/20} -r3d. 0,1,1,80 -col3d. 128,200,255 +-j3d.. [-1],30%,70%,0,1,5,0,0 -rm. -round. 1 +-nm. "[2d test image]" +-v + +uniform_distribution : -check "isint($1) && $1>0 && isint($2) && $2>0" +-e[^1] "Input set of $1 uniformly distributed $2-d points in [0,1]^$2." +-v - n={round($1^(1/$2),1,1)} +(0,1) -r. $n,1,1,1,3 +-repeat {$2-1} --channels. 100% -r. {$n*w},1,1,1,1 -r.. [-1],1,1,100%,0,2 -a[-2,-1] c -done +-r. $1,1,1,$2,1 -nm. "[uniform $2d distribution]" -v + +up : +-_update +update : +-_$0 +_update : +-e[0--3] "Update commands from the latest definition file on the G\47MIC server." +-v - +out=${-path_rc}cli_update$_version.gmic +-l[] cimgz:http://gmic.eu/cli_update$_version.gmic +-if {h>7" && "{${-head\ 6}'=='{'"#@gmic"'}}} -o raw:$out,char -endif +-rm +-onfail -error[0--3] "Command '-update' : Unreachable update file." +-endl +-m $out +-v + +update_film_emulation_html : +-if {!$!} -error[^-1] "Command '-update_film_emulation': Missing input images !" -endif +-v - +jpeg_quality=70 +thumb_width=180 +thumb_height=90 +categories=bw,instant_consumer,instant_pro,negative_color,negative_new,negative_old,print,colorslide,various +category_names="Black and White","Instant [consumer]","Instant [pro]","Negative [color]","Negative [new]","Negative [old]","Print films","Slide [color]","Various" +-m "_thumb : -frame 3%,3%,255 -to_rgba -drop_shadow 2,2,3 -repeat $! -l[$>] -i[0] 100%,100%,1,3,245 -blend alpha -endl -done" +-m "_title : ({'\"$""*\"'}) -replace. {'_'},32 -f. if((x==0||j(-1)==32)&&i>={'a'}&&i<={'z'},i+{'A'}-{'a'},i) -u {t} -rm." +nb_presets=0 +-repeat {narg($categories)} +category=${-arg\ {1+$>},$categories} +presets=${-_gimp_emulate_film_$category} +nb_presets+={narg($presets)} +-done +-v + -e[] "\n > Update film emulation pages, for "$!" image samples and "$nb_presets" presets." -v - +-v + -e[] "\n * Prepare folder structure." -v - +-x "ln -fs ../copyright.html ." +-x "ln -fs ../favicon.ico ." +-x "ln -fs ../favicon.png ." +-x "ln -fs ../footer.html ." +-x "ln -fs ../header.html ." +-x "ln -fs ../gmicmenu ." +-x "ln -fs ../jquery-1.11.0.min.js ." +-x "ln -fs ../style.css ." +-x "ln -fs ../images ." +-x "mkdir -p img" +-x "cd img && ln -fs ../../img/logo4.jpg ." +-x "cd img && ln -fs ../../img/logos.jpg ." +-x "cd img && ln -fs ../../img/rss.png ." +-x "ln -fs ../highslide ." +-v + -e[] "\n * Generate thumbnails from samples." -v - +-if original -else -x "mkdir original" -endif +nb_samples=$! +-to_rgb -repeat $nb_samples -l[$<] +-nm[0] sample_{1+$<} +basename={0,b} basename$<=$basename +-v + -e[] " - "$basename -v - +--r2dx $thumb_width +--text_outline[0] "Reference",4,{0,h-28},20,2 -frame. 1,1,0 +-o. original/$basename.jpg,$jpeg_quality -rm. +--_thumb[1] -o. original/thumb_$basename.jpg,$jpeg_quality -rm. +--r2dy[0] $thumb_height -_thumb. -o. original/minithumb_$basename.jpg,$jpeg_quality -rm. +-endl -done +ind_preset=0 +-repeat {narg($categories)} +category=${-arg\ {1+$>},$categories} +presets=${-_gimp_emulate_film_$category} +-v + -e[] "\n * Category ""#"{1+$>}": "$category" ***\n" -v - +-if $category -else -x "mkdir "$category -endif +-if $category/clut -else -x "mkdir "$category/clut -endif +-repeat {narg($presets)} +preset=${-arg\ {1+$>},$presets} +filename=${-path_rc}film_$preset.cimgz +-v + -e[] " - "$preset -v - +-i $filename -to_rgb. s={sqrt(w*h*d)} +-if {!isint($s)} +-v + -warn[] "Preset '"$preset"' must be resampled." -v - +-r. 64,64,64,3,3 +-endif +s={sqrt(w*h*d)} --r. $s,$s,1,3,-1 +-if {iM<=255} -*. 257 -endif +-o. $category/clut/$preset.png +-rm. +-repeat $nb_samples -l[{2*$>},{2*$>+1},-1] +basename={0,b} +-if $category/$basename/$preset.jpg -else +-if $category/$basename -else -x "mkdir \""$category/$basename"\"" -endif +--map_clut[^-1] [-1] +-text_outline.. ${-_title\ $preset},4,{-2,h-28},20,2 -frame.. 1,1,0 +-o.. $category/$basename/$preset.jpg,$jpeg_quality +-_thumb. -o. $category/$basename/thumb_$preset.jpg,$jpeg_quality +-rm[-2,-1] +-endif +-endl -done +-rm. +ind_preset+=1 +-done +-done +-rm[1--1:2] +-v + -e[] "\n * Generate html code.\n" -v - +-repeat {narg($categories)} +category=${-arg\ {1+$>},$categories} +-arg {1+$>},$category_names +category_name=${} +presets=${-_gimp_emulate_film_$category} +-repeat $nb_samples +width={$>,64+w} height={$>,64+h} +basename={$>,b} +-v + -e[] " - "$category_name" / "$basename -v - +({'" +\n\n +\n +\n +

    Film Emulation
    \n +
    \n +

    Among all features available in G\47MIC, our Film Emulation filters are able to apply various pre-defined color presets on your images.\n +Most of those 300+ presets have been designed by Patrick David, in order to emulate the look of\n +analog films. They have a dedicated section in the open-source G\47MIC plug-in for GIMP, so you can apply all these easily in GIMP.

    \n\n +

    Below, you can navigate through the different proposed color presets and see how they modify the colors of some sample images.\n +You can also download each color preset separately as its corresponding Hald-CLUT file (in .png format), to use it in\n +other softwares that support this feature.

    \n\n +

    Image credits: Sample images below have been borrowed from Patrick David and\n +Chi King\47s Flickr accounts, distributed under\n +CC-by-SA 2.0.

    \n\n +

    Disclaimer:
    \n +The trademarked names which may appear in the filenames of the Hald CLUT images are there for informational purposes only. They serve only to inform the user which film stock the given Hald CLUT image\n +is designed to approximate. As there is no way to convey this information other than by using the trademarked name, we believe this constitutes fair use. Neither the publisher nor the authors are affiliated\n +with or endorsed by the companies that own the trademarks.

    \n\n +
    \"\"
    \n +
    \n +
    \n +\n +\n +\n +
    Select film category:\n +
      \n"'}) +-repeat {narg($categories)} +_category=${-arg\ {1+$>},$categories} +-arg {1+$>},$category_names +_category_name=${} +-if {$_category'=='$category} +({'" +
    • "$_category_name"
    • \n +"'}) +-else +({'" +
    • "$_category_name"
    • \n +"'}) +-endif +-done +({'" +
    \n +
    Select sample image:

    \n +"'}) +-repeat {$nb_samples} +_basename=${basename$>} +-if {$_basename'=='$basename} +({'" +\"\"\n +"'}) +-else +({'" +\"\"\n +"'}) +-endif +-done +({'" +
    \n +
    \"\"
    \n +"'}) +({'"\n +
    Presets ("{narg($presets)}")
    \n +
    \n +
    \n +\n +\n\n +"'}) +-repeat {narg($presets)} +preset=${-arg\ {1+$>},$presets} +({'$preset'}) -replace_seq. 39,"92,92,39" preset_esc={t} -rm. +title=${-_title\ $preset} +-if {$>%4==0} -if $> ({'"\n"'}) -endif ({'""'}) -endif +({'" +\n\n"'}) +-done +({'" +
    \n +
    \"\"\n +
    Reference Image
    \n +
    Refence Image
    \n +\n +\n +
    \n +
    \n +\"\"\n +\n +
    \n +\"\"\n +
    \n +
    Preset: "$title" [Download CLUT]
    \n +
    "$title"
    \n +
    \"\"
    \n +"'}) +({'"\n +\n +"'}) +-a[$nb_samples--1] x -o. raw:${category}_$basename.shtml,char -rm. +-done +-done +-rm +category=${-arg\ 1,$categories} +-x "ln -fs "${category}_$basename0.shtml" index.shtml" +-v + -e[] "\n > All done, for "$nb_presets" presets.\n" +update_gallery_html : +-e[^-1] "Generate gallery for the G'MIC web site." +-v - +thumb_size=128 +-x "rm -f gallery.shtml img/gallery_*.jpg" +img/chloe.jpg +img/fawn.jpg +img/house.jpg +img/statue.jpg +img/beach.jpg +nb_imgs=$! +-repeat $! --r2dy[$>] $thumb_size width$>={w} -rm. -done +_nb_coms=-1 +-_update_gallery_html " " +-_update_gallery_html " " +-_update_gallery_html " " +-_update_gallery_html " " +-_update_gallery_html " " +-_update_gallery_html "-luminance" +-_update_gallery_html "-solarize" +-_update_gallery_html "-negative" +-_update_gallery_html "-select_color 100,0,0,0 -n 0,255" +-_update_gallery_html "-array_fade 4,4" +-_update_gallery_html "--mirror. x -fade_x 40,60" +-_update_gallery_html "-shift_tiles 20,20" +-_update_gallery_html "-fisheye 40" +-_update_gallery_html "-fisheye 50" +-_update_gallery_html "-shade_stripes ," +-_update_gallery_html "-shade_stripes 40,1" +-_update_gallery_html "-tetris 10" +-_update_gallery_html "-blur 1 -gradient_orientation 2 -+ -n 0,255 -smooth 60,0,1,1,3" +-_update_gallery_html "-flower 30,5" +-_update_gallery_html "-water 30,1.5" +-_update_gallery_html "-wave 4,0.4" +-_update_gallery_html "-wave 15,0.2" +-_update_gallery_html "-deform 10" +-_update_gallery_html "-light_patch 4,0.7,1.7" +-_update_gallery_html "-mosaic 0.5,80,1" +-_update_gallery_html "-sponge 13" +-_update_gallery_html "-hearts 15" +-_update_gallery_html "-color_ellipses 1400,10,0.07" +-_update_gallery_html "-whirls 3" +-_update_gallery_html "-edges 15 -n 0,255" +-_update_gallery_html "-to_rgba -gimp_reflect 50,1,110,160,190,64,0,1.5,0,-3.30,7,1.5 -display_rgba" +-_update_gallery_html "-transform_polar R-r" +-_update_gallery_html "-drawing 200" +-_update_gallery_html "-draw_whirl 100" +-_update_gallery_html "-texturize_paper" +-_update_gallery_html "-stencilbw 30" +-_update_gallery_html "-glow 4" +-_update_gallery_html "-ditheredbw" +-_update_gallery_html "-blur_angular 10" +-_update_gallery_html "-blur_radial 10" +-_update_gallery_html "-repeat 3 --deform[0] 10 -done -+ -n 0,255" +-_update_gallery_html "-flood 50%,50%,0,50,0,0.7,155,100,255" +-_update_gallery_html "--mirror x --mirror y -* -equalize 255 -n 0,255" +-_update_gallery_html "-kaleidoscope 0.5,0.5,50,20" +-_update_gallery_html "-noise 40 -cut 0,255 --meancurvature_flow. 20 -sharpen. 100 -a x" +-_update_gallery_html "-gradient_norm -sqrt -n 0,255" +-_update_gallery_html "-to_rgba -rotate_tiles 15,5,5 -display_rgba" +-_update_gallery_html "-taquin 5" +-_update_gallery_html "img/chloe.jpg -drop_shadow. 3 -rotate. 55 -blend alpha" +-_update_gallery_html "[-1] -deform 10 -morph 4,0.05 -a x" +-_update_gallery_html "-polaroid 20 -drop_shadow 3,3 -rotate 10,1 -display_rgba" +-_update_gallery_html "--plasma 10,10 -n. 0.5,2.5 -n 0,255 -and -equalize 256" +-_update_gallery_html "100%,100% -mandelbrot. -1.17229,-0.3038,-1.15209,-0.2836,1000 -map. 0 -*.. 1.5 -+ -n 0,255" +-_update_gallery_html "--edges 15 -n 0,255 -fade_y 30,70" +-_update_gallery_html "-split_tiles 5,5 -blur 8 -sharpen 1000 -equalize 255 -append_tiles 5,5" +-_update_gallery_html "-imagecube3d -*3d 256 -r3d 1,1,0,60 512,512,1,3 -plasma. 10,10 -n. 0,128 -m3d 5 -db3d 0 -object3d[1] [0],50%,50% -k[1] -n 0,255" +-_update_gallery_html "-warp_perspective 0.3,0.9,0.5" +-_update_gallery_html "-rodilius ," +-_update_gallery_html "-blur 3 -gradient2rgb 1" +-_update_gallery_html "-normalize_local 80,7" +-_update_gallery_html "-normalize_local 80,3" +-_update_gallery_html "-normalize_local 80,7" +-_update_gallery_html "-normalize_local 80,6,2" +-_update_gallery_html "-isophotes 4 -dilate 3 -i[0] (0;255^0;255^100;100) -r[0] [1],[1],1,3,3 -blend alpha" +-_update_gallery_html "-crop 30%,30%,70%,70% -resize 200%,200%,1,100%,5 -frame_fuzzy 30,30" +-_update_gallery_html "-cartoon ," +-_update_gallery_html "-cartoon ," +-_update_gallery_html "-cartoon ," +-_update_gallery_html "-cartoon ," +-_update_gallery_html "-cartoon ," +-_update_gallery_html "-resize2dx 300 -m3d 2 -elevation3d 0.3 -f3d 200 -snapshot3d 400,1.5" +-_update_gallery_html "-resize2dx 300 -m3d 2 -elevation3d 0.3 -f3d 200 -snapshot3d 400,1.5" +-_update_gallery_html "-resize2dx 300 -m3d 2 -elevation3d 0.3 -f3d 200 -snapshot3d 400,1.5" +-_update_gallery_html "-resize2dx 300 -m3d 2 -elevation3d 0.3 -f3d 200 -snapshot3d 400,1.5" +-_update_gallery_html "-resize2dx 300 -m3d 2 -elevation3d 0.3 -f3d 200 -snapshot3d 400,1.5" +-_update_gallery_html "-topographic_map 16,2" +-_update_gallery_html "-topographic_map 16,2" +-_update_gallery_html "-topographic_map 16,2" +-_update_gallery_html "-topographic_map 16,2" +-_update_gallery_html "-topographic_map 16,2" +-_update_gallery_html "--blur 10 -curvature. -norm. -+. 0.01 -/ -equalize 255 -n 0,255" +-_update_gallery_html "--blur 10 -curvature. -norm. -+. 0.01 -/ -equalize 255 -n 0,255" +-_update_gallery_html "--blur 10 -curvature. -norm. -+. 0.01 -/ -equalize 255 -n 0,255" +-_update_gallery_html "--blur 10 -curvature. -norm. -+. 0.01 -/ -equalize 255 -n 0,255" +-_update_gallery_html "--blur 10 -curvature. -norm. -+. 0.01 -/ -equalize 255 -n 0,255" +-_update_gallery_html "-blur 1 -pencilbw 0.3" +-_update_gallery_html "-blur 1 -pencilbw 0.3" +-_update_gallery_html "-blur 1 -pencilbw 0.3" +-_update_gallery_html "-blur 1 -pencilbw 0.3" +-_update_gallery_html "-blur 1 -pencilbw 0.3" +-_update_gallery_html "-old_photo -drop_shadow 3,3 -rotate -5,1 -display_rgba" +-_update_gallery_html "-old_photo -drop_shadow 3,3 -rotate -10,1 -display_rgba" +-_update_gallery_html "-old_photo -drop_shadow 3,3 -rotate -15,1 -display_rgba" +-_update_gallery_html "-old_photo -drop_shadow 3,3 -rotate -20,1 -display_rgba" +-_update_gallery_html "-old_photo -drop_shadow 3,3 -rotate -25,1 -display_rgba" +-_update_gallery_html "-erode 10 --erode 3 -- -equalize 255 -smooth 40,0,1,1,3 -n 0,255 -negative" +-_update_gallery_html "-erode 10 --erode 3 -- -equalize 255 -smooth 60,0,1,1,3 -n 0,255 -negative" +-_update_gallery_html "-erode 10 --erode 3 -- -equalize 255 -smooth 80,0,1,1,3 -n 0,255 -negative" +-_update_gallery_html "-erode 10 --erode 3 -- -equalize 255 -smooth 100,0,1,1,3 -n 0,255 -negative" +-_update_gallery_html "-erode 10 --erode 3 -- -equalize 255 -smooth 120,0,1,1,3 -n 0,255 -negative" +-_update_gallery_html "-light_relief ," +-_update_gallery_html "-light_relief ," +-_update_gallery_html "-light_relief ," +-_update_gallery_html "-light_relief ," +-_update_gallery_html "-light_relief ," +-_update_gallery_html "--warhol 2 -fade_radial 50,70" +-_update_gallery_html "--warhol 3 -fade_radial 50,70" +-_update_gallery_html "--warhol 4 -fade_radial 50,70" +-_update_gallery_html "--warhol 5 -fade_radial 50,70" +-_update_gallery_html "--warhol 6 -fade_radial 50,70" +-_update_gallery_html "--sketchbw , -rv -blend overlay" +-_update_gallery_html "--sketchbw , -rv -blend overlay" +-_update_gallery_html "--mirror x -a x -map_sphere ," +-_update_gallery_html "--mirror x -a x -map_sphere ," +-_update_gallery_html "-gimp_painting 2,1.5,2" +-_update_gallery_html "-f3d 800 -rm 512,512,1,3 -chessboard 64,64,0,0,15,1,${-RGB},${-RGB} --imagecube3d -*3d. 230 -r3d. 1,1,0.5,50 -m3d 3 -object3d.. [-1],50%,50%,0 -rm. -gimp_painting 1,1.5,2 -equalize. 256" +-_update_gallery_html "--histogram 256 -display_graph. {0,w},{0,h},3 -to_rgba. -*. 0.5 -blend alpha" +-_update_gallery_html "100%,100%,1,1,'X=(x-w/2)/30;Y=(y-h/2)/30;5*cos(X*Y)*sqrt(X^2+Y^2)' -elevation3d[0] [1] -k[0] -r3d 1,1,0,60 -snapshot3d 500,2" +-_update_gallery_html "-kuwahara 10 -noise 30 -smooth 100,0,1,3,3 -sharpen 400 -n 0,255 -equalize 256" +-_update_gallery_html "-frame 4,4,0 -array_mirror 1,3" +_nb_coms+=1 +({'"\n\ +\n +
    Image Gallery
    \n +
    \n +All the images below have been processed by the command line version gmic\n +of G\47MIC, from a set of initial 2D color images (displayed on the first row).
    \n +Click on an image to zoom-in. The corresponding G\47MIC command used to generate the image appears as a caption.\n +This gallery is intended to show the flexibility and the genericity of the G\47MIC language.\n +Remember, you can easily define your own image filters and effects by writting\n +your custom G\47MIC command file,\n +and eventually put them directly in GIMP afterwards.\n\n +\n +Copyrights : All pictures have been shot by David Tschumperlé.

    \n"'}) +({'"
    "\n'}) +row=0 +-repeat $_nb_coms +ind={$>%$nb_imgs} +out_img=${"-filename "img/gallery.jpg,$>} +out_thumb=${"-filename "img/gallery_thumb.png,$>} +-if {!$ind} ({'"\n"'}) -endif +com=${_com$>} +-v + -e[] " - Image "{$>+1}/$_nb_coms" : $ "$com -v - +displayed_com$ind=$com +-if {!narg($com)} com="-skip ," -endif +--__update_gallery_html[$ind] $com +iind={$ind%5} +width={$iind,w} height={$iind,h} +-o. $out_img,75 +-r2dy. $thumb_size -if {w>${width$ind}} -r. ${width$ind},100%,100%,100%,2 -endif +-l. -frame 3%,3%,255 -to_rgba -drop_shadow 2,2,3 -endl +-o. $out_thumb -rm. +({'"\n"'}) +-if {$ind==$nb_imgs-1" || "$>==$_nb_coms-1} +({'"\n"\n'}) +-repeat {$ind+1} +({'"\n"'}) +-done +({'"\n"'}) +row+=1 +-endif +-done +({'"
    }"\">
    \ +\ +\"\"\ +
    gmic "{$ind,b}.{$ind,x}" "${displayed_com$ind}"
    \ +
    }"\">
    gmic "{$>,b}.{$>,x}" "${displayed_com$>}"
    \n"'}) +({'"
    \"\"
    \n\ +\n\ +\n"'}) +-rm[0-{$nb_imgs-1}] -a x +-o gallery.raw,uchar -x "mv gallery.raw gallery.shtml" -rm +-v + -e[^-1] "All done !" +_update_gallery_html : +_nb_coms+=1 _com$_nb_coms="$1" +__update_gallery_html : +${1--1} +update_server : -skip ${1=$_version},${2=1} +-v - +-_update_server_move[] "/Arrays~&~tiles/Hearts","/Testing/Samj/Arrays~&~tiles" +-_update_server_move[] "/Artistic/Pastell~art","/Testing/Naggobot" +-_update_server_move[] "/Artistic/Simple~noise~canvas","/Patterns" +-_update_server_move[] "/Artistic/Granular~texture","/Testing/Samj/Artistic" +-_update_server_move[] "/Artistic/Colored~engraving","/Testing/Samj/Artistic" +-_update_server_move[] "/Artistic/Variations~on~a~single~color","/Testing/Samj/Artistic" +-_update_server_move[] "/Black~&~white/Hard~sketch~xy","/Testing/Samj/Black~&~white" +-_update_server_move[] "/Colors/Couleurs~metalliques","/Testing/Samj/Colors" +-_update_server_move[] "/Degradations/Tilt~shift","/Testing/JéJé" +-_update_server_move[] "/Degradations/Deteriorated~areas","/Testing/Samj/Degradations" +-_update_server_move[] "/Layers/Fast~median~stack","/Testing/Iain~fergusson" +-_update_server_move[] "/Patterns/Random~pattern~courtepointe","/Testing/Samj/Patterns" +-_update_server_move[] "/Rendering/Adjacent~rectangles","/Testing/Samj/Rendering" +-_update_server_move[] "/Rendering/Chryzodes","/Testing/Samj/Rendering" +-_update_server_move[] "/Rendering/Lines~of~varying~thickness","/Testing/Samj/Rendering" +-_update_server_move[] "/Rendering/Pintograph","/Testing/Samj/Rendering" +-_update_server_move[] "/Rendering/Hawaiian~earring","/Testing/Samj/Rendering" +-_update_server_move[] "/Rendering/Lines~around~a~point","/Testing/Samj/Rendering" +-_update_server_move[] "/Rendering/Pappus~chain","/Testing/Samj/Rendering" +-_update_server_move[] "/Rendering/Straight~lines","/Testing/Samj/Rendering" +-_update_server_move[] "/Testing/JéJé/Rays","/Patterns" +-_update_server_move[] "/Testing/Iain~fergusson/Halftone~shapes","/Patterns" +-_update_server_move[] "/Testing/Iain~fergusson/Simple~local~contrast","/Details" +-_update_server_move[] "/Testing/Garagecoder/Aurora","/Artistic" +-_update_server_move[] "/Testing/Garagecoder/Despeckle","/Repair" +-_update_server_move[] "/Testing/Garagecoder/Emboss","/Black~&~white" +-_update_server_move[] "/Testing/Garagecoder/HSL~adjustment","/Colors" +-_update_server_move[] "/Testing/Garagecoder/HSV~select","/Colors" +-_update_server_move[] "/Testing/Garagecoder/Stereo~image","/Stereoscopic~3d" +-_update_server_move[] "/Testing/Garagecoder/Undo~anaglyph","/Stereoscopic~3d" +-_update_server_move[] "/Testing/Garagecoder/Sharpen~[gradient]","/Details" +-_update_server_move[] "/Testing/Garagecoder/Sharpen~[tones]","/Details" +-_update_server_move[] "/Testing/Garagecoder/Tone~enhance","/Details" +-_update_server_move[] "/Testing/Garagecoder/Wiremap","/Rendering" +-_update_server_move[] "/Testing/Naggobot/Blockism","/Artistic" +-_update_server_move[] "/Testing/Samj/Chalk~it~up","/Artistic" +-_update_server_move[] "/Testing/Samj/Denim~texture","/Patterns" +-_update_server_move[] "/Testing/Zonderr/Spiral","/Rendering" +-_update_server_move[] "/Finger~paint","/Artistic" +-m "parent : -l[] ({'$""1'}) -s -,{'/'} -if $! -rm. -endif -i[0--1] (47) -a y -u {0,t} -rm -endl" +-m "_max : ({'\"$""1\"'}) ({'\"$""2\"'}) -f[-2,-1] 'if(i>=97&&i<=122,i-32,i)' -r[-2,-1] {max(w,{-2,w})},1,1,1,0 --[-2,-1] -autocrop. 0 "\ +"-u {i>0} -rm." +-m "varname : ({'\"$""1\"'}) -f. if((i>=48&&i<=57)||(i>=65&&i<=90)||(i>=97&&i<=122),i,95) -u {t} -rm." +-m "load_gmic : "\ +"_nb_sources+=1 filename=${\"-basename $""1\"} "\ +"-v + -e[] \" \"$_nb_sources\". \"$filename\" \" -v - "\ +"-l[] "\ +" -i raw:$""1,char -nm {0,b} -v + -e[] \" [retrieved from source '$""1']\" -v - "\ +" -l "\ +" -o raw:/tmp/$filename,char "\ +" -_update_server_upload /tmp/$filename,include/$filename "\ +" -v + -e[] \" [archived]\n\" -v - "\ +" -onfail -v + -e[] \" [could not be archived!]\n\" -v - -endl "\ +"-onfail -l[] "\ +" source=http://gmic.eu/include/$filename "\ +" -i raw:$source,char -v + -e[] \" [retrieved from archive '\"$source\"']\n\" -v - "\ +" -onfail -v + -e[] \" [error, not reachable!]\n\" -v -"\ +" -endl -endl" +-m "calibrate_name : "\ +"-autocrop 32 "\ +"-f 'if(i>=65&&i<=90,i+32,i)' "\ +"-replace {'_'},32 -autocrop 32 "\ +"-replace_str Fft,FFT "\ +"-replace_str rgb,RGB "\ +"-replace_str lab,Lab "\ +"-replace_str hsv,HSV "\ +"-replace_str hsl,HSL "\ +"-replace_str ycbcr,YCbCr "\ +"-replace_str cmyk,CMYK "\ +"-replace_str b&w,B&W "\ +"-replace_str gimp,GIMP "\ +"-replace_str roddy,Roddy "\ +"-replace_str crt,CRT "\ +"-replace_str g\47mic,G\47MIC "\ +"-f 'if(y==0&&i>=97&&i<=122,i-32,i)' " +-if {$1==$_version} +-v + -e[] "> Upload latest version ("${-strver}") of commands on G'MIC server.\n" -v - +-_update_server_upload $HOME/work/src/gmic/src/gmic_stdlib.gmic,gmic_stdlib.$1 +-_update_server_upload $HOME/work/src/gmic/src/gmic_stdlib.gmic +-endif +-v + -e[] "> Load and archive .gmic source files.\n" -v - +_nb_sources=0 +-load_gmic http://gmic.eu/gmic_stdlib.$1 +-if {$1!=$_version} -l -load_gmic http://gmic.eu/backports$1.gmic -onfail -endl -endif +-x "cd $HOME/work/src/gmic-community && git pull 2>&1 >/dev/null" +-load_gmic ${HOME}/work/src/gmic-community/compatibility.gmic +-load_gmic ${HOME}/work/src/gmic-community/garagecoder.gmic +-load_gmic ${HOME}/work/src/gmic-community/garryosgood.gmic +-load_gmic ${HOME}/work/src/gmic-community/gentlemanbeggar.gmic +-load_gmic ${HOME}/work/src/gmic-community/iainfergusson.gmic +-load_gmic ${HOME}/work/src/gmic-community/jayprich.gmic +-load_gmic ${HOME}/work/src/gmic-community/jboulanger.gmic +-load_gmic ${HOME}/work/src/gmic-community/karos.gmic +-load_gmic ${HOME}/work/src/gmic-community/naggobot.gmic +-load_gmic ${HOME}/work/src/gmic-community/photocomix.gmic +-load_gmic ${HOME}/work/src/gmic-community/ronounours.gmic +-load_gmic ${HOME}/work/src/gmic-community/souphead.gmic +-load_gmic ${HOME}/work/src/gmic-community/tomkeil.gmic +-load_gmic ${HOME}/work/src/gmic-community/translation_ja.gmic +-load_gmic ${HOME}/work/src/gmic-community/samj.gmic +-load_gmic ${HOME}/work/src/gmic-community/zonder.gmic +-i[0] (10) -i[2--1] ({"'\n#@gimp ________________\n'"}) -y -a y -discard 13 -replace 9,32 +-s +,{'"#@gimp"'} +-repeat {int(($!-1)/2)} -a[{$>+1},{$>+2}] y -done +-nm[0] !header +-v + -e[] "> Start filter parsing.\n" -v - +progress_factor={100/($!-1)} +merge_request=0 +merge_start=0 +nb_filters=0 +offset=0 +path=/ +-repeat $! +ind={$>-$offset} +-if {{{$ind-1},[-1]}==10" && "{${-head[$ind]\ 6}'=='{'#@gimp'}}" && "({$ind,[6]}==32" || "{$ind,[6]}=={'_'})} -l[$ind] +-if {i[6]=={'_'}} locale=_{`{i[7]}`}{`{i[8]}`} +-else locale= +-endif +is_folder=0 +-s +,10 +-if {{0,[6]}=={'_'}} --rows[0] 9,100% -rows[0] 0,8 +-else --rows[0] 6,100% -rows[0] 0,5 +-endif +-autocrop. 32 -mv. 1 +-if {{1,[0]}!={':'}} +-l[1] +-s +,{':'} +-replace_str[0] "" +-replace_str[0] "" +-replace_str[0] "" +-replace_str[0] "" +-replace[0] {'/'},{'-'} +-replace[0] {','},{';'} +-autocrop[0] 32 +-if {$!>1} +-calibrate_name[0] --replace[0] 32,{'~'} +name=$path{t} -rm. +merge_request=1 +nb_filters+=1 +-i[0,1] (32) -a y +-v + -e[] " "$nb_filters". "$name" ("{round($>*$progress_factor)}"%)." -v - +-else +-if {i=={'_'}} +-do path=${"-parent[] "$path} -shift 0,-1,0,0 -while {i=={'_'}} +-autocrop 0 +-endif +-autocrop 32 +-if {w} +-varname {0,t} locale_${}=$locale +-calibrate_name +-replace 32,{'~'} +path=$path{0,t}/ +-endif +is_folder=1 +-endif +-endl +-if $is_folder -rm[0,1] -i[0] (10) +-else -nm[0] $name -endif +-else +-if {$!>=3} -l[1] +-s +,{'='} +-if {$!>=3} -if {{1,[0]}=={'='}} +-rows[0] 1,100% -calibrate_name[0] +-i[0] ({':'};32) -i[2] (32) +-endif -endif +-endl -endif +-i[1] (32) +-endif +-a y +-endl -endif +-if {$merge_request" && "$ind>0} +-a[$merge_start-{$ind-1}] y +offset+={$ind-$merge_start-1} +merge_start+=1 +merge_request=0 +-endif +-done +-a[$merge_start--1] y +-v + -e[] "\n> Force filters to move, if necessary." -v - +-repeat $! ind=$> -repeat $_nbm -if {{$ind,n}'=='${_to_move$>}} +-v + -e[] " "$ind". Move '"{$ind,n}"' to '"${_move_to$>}"'." -v - +-nm[$ind] ${_move_to$>}/{$ind,b} +-endif -done -done +-v + -e[] "\n> Sort filters by lexicographic order." -v - +-_update_server_sort 0,{$!-1} +-v + -e[] "\n> Rebuild folder structure." -v - +-m "nb_levels : -l[] ({'$""1'}) -s -,{'/'} -u $! -rm -endl" +path=/ +-repeat $! -l[$>] +npath=${"-parent "{0,n}} +-if {$path'!='$npath} +nc=${"-nb_levels[] "$path} +nn=${"-nb_levels[] "$npath} +nb_up=0 +nb_down=0 +basis=$path nbasis=$npath +-do +nc=${"-nb_levels[] "$basis} +nn=${"-nb_levels[] "$nbasis} +-if {$nc>$nn} basis=${"-parent[] "$basis} nb_up+=1 +-elif {$nn>$nc} nbasis=${"-parent[] "$nbasis} nb_down+=1 +-elif {$nbasis'!='$basis} basis=${"-parent[] "$basis} nb_up+=1 nbasis=${"-parent[] "$nbasis} nb_down+=1 +-endif +-while {$nbasis'!='$basis} +command= +-if $nb_up 1,$nb_up,1,1,{'_'} command="#@gimp "{t}"\n" -rm. -endif +-if $nb_down -l[] +({'$npath'}) -s -,{'/'} -k[-$nb_down--1] -replace {'~'},32 +level={${"-nb_levels "$path}-$nb_up} +balise=${"-if "{$level<=0" && "{$npath'!='/About/}}" -u b -else -u i -endif"} +-repeat $! +-varname {$>,t} locale=${locale_${}} +command=$command"#@gimp"$locale" <"$balise">"{$>,t}"\n" +balise="i" +-done -rm +-endl -endif +-if {narg($command)} nm={0,n} -i[0] ({'$command'}) -y[0] -a y -nm $nm +-endif +path=$npath +-endif +-endl -done +-v + -e[] "> Search and replace strings." -v - +-replace_str "#@gmic\n","" +-replace_str "Author: Samj.","Author: Samj." +-replace_str " Latest update: 20"," Latest update: 20" +-repeat $! -l[$>] -s -,10 -repeat $! -l[$<] +-if {i[0]=={'#'}" && "i[1]!={'"@"'}} -rm -endif +-endl -done -i[^0] ({'\n'}) -a y -endl -done +-repeat $! --l[$>] command_name$>="" +--rows 0,6 head={t} -rm. +-if {$head'=='"#@gimp "} -s -,{':'} +-if {$!>=1} -l[1] -s -,{','} +-if $! -autocrop[0] 32 command_name$>={0,t} -endif +-endl -endif +-endif +-rm -endl -done +-if {$nb_filters>400} +-v + -e[] "> Compress and save output .gmic files." -v - +--a y -l. +--compress_gmic[0] +--compress_gmic_gimp[0] +-i[0,1,2] ({'"#@gmic"\n\ +"#"\n\ +"# File : update"$_version".gmic"\n\ +"# ( G\47MIC command file )"\n\ +"#"\n\ +"# Description : Update file for G\47MIC commands and filters (for version "${-strver}")."\n\ +"# ( http://gmic.eu )"\n\ +"#"\n\ +"# License : CeCILL v2.0"\n\ +"# ( http://www.cecill.info/licences/Licence_CeCILL_V2-en.html )"\n\ +"#"\n\n'}) +-i[2,4,6] ({'"\n\n# Local Variables:"\n\ +"# mode: sh"\n\ +"# End:"\n\ +"#"\n\ +"# (End of G\47MIC update file)"'}) +-y -a[6-8] y -a[3-5] y -a[0-2] y +-o[1] raw:${-path_rc}/cli_update$1.gmic,uchar +-o[2] raw:${-path_rc}/gimp_update$1.gmic,uchar +-o[0] raw:/tmp/update$1.gmic,uchar +-o[1] cimgz:/tmp/cli_update$1.gmic,uchar +-o[2] cimgz:/tmp/gimp_update$1.gmic,uchar +-_update_server_upload[] /tmp/update$1.gmic +-_update_server_upload[] /tmp/cli_update$1.gmic +-_update_server_upload[] /tmp/gimp_update$1.gmic +-_update_server_upload[] /tmp/update$1.gmic,update.gmic +-if {$1==1652} (1650,1651) +-elif {$1>=168} (167,168,169) +-else 0 +-endif +-repeat {w} +-_update_server_upload[] /tmp/cli_update$1.gmic,cli_update{i[$>]}.gmic +-_update_server_upload[] /tmp/gimp_update$1.gmic,gimp_update{i[$>]}.gmic +-done -rm. +-rm -endl +-endif +-if {$2" && "$1==$_version} +-v + -e[] "> Output list of filters in stdout.\n" -v - +-x "date +%Y,%m,%d,%H >"${-path_tmp}date.dlm +${-path_tmp}date.dlm +-echo_stdout "*** List of filters in the G\47MIC plug-in for GIMP ("$nb_filters" filters, on "{i}/{i(1)}/{i(2)}" "{i[3]}:00") ***\n" +-rm. +-echo_stdout "* List of filters, sorted by path:\n" +-repeat $! -l[$>] +({'{0,n}'}) -if {i!={'!'}} +-r. {w-1},1,1,1,0,0,1 +-replace_str. "&","&" +-replace_str. "é","e" +-replace_str. "/","~/~" +-replace. {'~'},32 +-if {narg(${command_name$>})} -echo_stdout[] " "{t}" (command '-"${command_name$>}"')" +-else -echo_stdout[] " "{t} +-endif +-endif -rm. +-endl -done +-echo_stdout "\n* List of filters, sorted alphabetically:\n" +-repeat $! +name={$>,b} +path={$>,f} +-nm[$>] $name"~(in~'"$path"')" +-done +-_update_server_sort 0,{$!-1} +-repeat $! -l[$>] +({'{0,n}'}) -if {i!={'!'}} +-replace_str. "&","&" +-replace_str. "é","e" +-replace. {'~'},32 +-echo_stdout[] " "{t} +-endif -rm. +-endl -done +-echo_stdout "\n*** End of list ***\n" +-endif +-rm -v + -e[] "> All done !\n" +_update_server_sort : +mid={int(($1+$2)/2)} +-if ${"-_max[] "{$1,n},{$mid,n}} -rv[$1,$mid] -endif +-if ${"-_max[] "{$mid,n},{$2,n}} -rv[$2,$mid] -endif +-if ${"-_max[] "{$1,n},{$mid,n}} -rv[$1,$mid] -endif +-if {$2-$1>=3} +pivot={$mid,n} +i=$1 j=$2 +-do +-if ${"-_max[] "$pivot,{$i,n}} -do i+=1 -while ${"-_max[] "$pivot,{$i,n}} -endif +-if ${"-_max[] "{$j,n},$pivot} -do j-=1 -while ${"-_max[] "{$j,n},$pivot} -endif +-if {$i<=$j} -rv[$i,$j] i+=1 j-=1 -endif +-while {$i<=$j} +-if {$1<$j} -_update_server_sort $1,$j -endif +-if {$i<$2} -_update_server_sort $i,$2 -endif +-endif +_update_server_move : +-if {!narg($_nbm)} _nbm=0 -endif +_to_move${_nbm}="$1" _move_to${_nbm}="$2" _nbm+=1 +_update_server_upload : -skip "${2=""}" +-if {narg("$2")} out="$2" -else -basename "$1" out=${} -endif +-l[] GMIC_LOGIN=${-gmic_ftp\ 0} -onfail GMIC_LOGIN="" -endl +-l[] GMIC_PASSWD=${-gmic_ftp\ 1} -onfail GMIC_PASSWD="" -endl +-if {narg($GMIC_LOGIN)} +-x "lftp ftp://"$GMIC_LOGIN":"$GMIC_PASSWD"@ftp.gmic.eu -e \"put -O /www/gmic/ \\\"$1\\\" -o \\\""$out"\\\"; quit\" >/dev/null" +-endif +_update_server_binaries : +-e[^-1] "Upload released binaries ($1) on the G'MIC web server." +-v - +is_pre=${"-strcontains $1,_pre"} +file0=gmic_$1_debian_jessie_amd64.deb +file1=gmic_$1_debian_jessie_i386.deb +file2=gmic_$1_debian_wheezy_amd64.deb +file3=gmic_$1_debian_wheezy_i386.deb +file4=gmic_$1_ubuntu_wily_amd64.deb +file5=gmic_$1_ubuntu_trusty_i386.deb +file6=gmic_$1_ubuntu_vivid_amd64.deb +file7=gmic_$1_win32.zip +file8=gmic_$1_win64.zip +file9=gmic_gimp_$1_linux32.zip +file10=gmic_gimp_$1_linux64.zip +file11=gmic_gimp_$1_win32.exe +file12=gmic_gimp_$1_win32.zip +file13=gmic_gimp_$1_win64.exe +file14=gmic_gimp_$1_win64.zip +file15=gmic_static_$1_linux32.zip +file16=gmic_static_$1_linux64.zip +N=17 +t0=$| +-v + -e[] "- Waiting for binary files to be build." -v - +-do +-repeat 17 +file=${file$>} +-if $file +-strreplace $file,_$1_,_ +file_short=${} +-v + -e[] "- Upload file '"$file"' to 'http://gmic.eu/files/prerelease/"$file_short -v - +-_update_server_upload $file,"files/prerelease/"$file_short +-if {!$is_pre} +is_win=${-strcontains[]" "$file,win} +-if $is_win folder="windows" -else folder="linux" -endif +-v + -e[] "- Upload file '"$file"' to 'http://gmic.eu/files/"$folder/$file"'." -v - +-_update_server_upload $file,"files/"$folder/$file +-v + -e[] "- Upload file '"$file"' to 'http://gmic.eu/files/"$folder/$file_short"'." -v - +-_update_server_upload $file,"files/"$folder/$file_short +-endif +file$>= N-=1 +-endif +-done +-if $N -wait 5000 -endif +-while {$N" && "$|<$t0+60*120} +-v + +-if $N -e[] "- Partial uploads done (timeout reached)." +-else -e[] "- All uploads done !" +-endif +update_tutorial_html : +-e[^-1] "Convert G\47MIC tutorial from Garry Osgood\47s blog (http://www.particularart.com), for the G\47MIC web page." +-v - -rm -m "add_page : -__update_tutorial_html $""*" +-use_vt100 +-add_page /,1700,index,__index +-add_page basics,4000 +-add_page beginners-cookbook,1000 +-add_page beginners-cookbook/cauldron,3500 +-add_page beginners-cookbook/dyidiffusion,1000 +-add_page beginners-cookbook/dyidiffusion/graduated-blurs,3800 +-add_page beginners-cookbook/dyidiffusion/variations-on-a-theme,3800 +-add_page beginners-cookbook/dyidiffusion/eigenvalues-and-eigenvectors,2300 +-add_page beginners-cookbook/dyidiffusion/directional-blurring,3500 +-add_page beginners-cookbook/dyidiffusion/tensors-for-the-tonsorially-challenged,8500 +-add_page beginners-cookbook/dyidiffusion/eigen-thingys,4800 +-add_page beginners-cookbook/dyidiffusion/fake-depth-of-field,7600 +-add_page beginners-cookbook/fingerpainting,12000 +-add_page beginners-cookbook/ramps,1200 +-add_page beginners-cookbook/ramps/applying-a-curve,600 +-add_page beginners-cookbook/ramps/blurring,600 +-add_page beginners-cookbook/ramps/general-ramps,2500 +-add_page beginners-cookbook/ramps/input-and-fill,1200 +-add_page beginners-cookbook/ramps/one-dimensional-functions,800 +-add_page beginners-cookbook/ramps/remapping-space,2200 +-add_page beginners-cookbook/ramps/resizing,600 +-add_page beginners-cookbook/ramps/warp,800 +-add_page beginners-cookbook/road-systems,2500 +-add_page beginners-cookbook/stained-glass,4000 +-add_page beginners-cookbook/spectral-art,1500 +-add_page beginners-cookbook/spectral-art/the-spatial-and-the-spectral,2000 +-add_page beginners-cookbook/spectral-art/the-spectral-course,2000 +-add_page beginners-cookbook/spectral-art/the-spectral-domain,2000 +-add_page beginners-cookbook/spectral-art/the-complex-number-field,3300 +-add_page beginners-cookbook/spectral-art/painting-with-waves-part-one,2200 +-add_page beginners-cookbook/spectral-art/painting-with-waves-part-two,2200 +-add_page beginners-cookbook/spectral-art/a-revised-map,1500 +-add_page beginners-cookbook/spectral-art/intermezzo-spectral-editing,1500 +-add_page beginners-cookbook/spectral-art/a-wave-painting-workflow,2000 +-add_page beginners-cookbook/spectral-art/tiletex,5000 +-add_page beginners-cookbook/spectral-art/coefficient-values,3000 +-add_page beginners-cookbook/spectral-art/coefficient-values-part-two,4500 +-add_page beginners-cookbook/spectral-art/coefficient-values-part-three,2500 +-add_page beginners-cookbook/spectral-art/cheat-sheet,9000 +-add_page beginners-cookbook/spectral-art/appendix,2500 +-add_page command-decorations,3500 +-add_page images,2000 +-add_page images/conjuring-images,1000 +-add_page images/images-as-datasets,3500 +-add_page images/images-have-edges,1200 +-add_page command-guide,5500 +-add_page command-guide/color-manipulation/-autoindex,1000,,,commands-colors-manipulation +-add_page command-guide/color-manipulation/-compose_channels,1000,,,commands-colors-manipulation +-add_page command-guide/color-manipulation/-colormap,1000,,,commands-colors-manipulation +-add_page command-guide/color-manipulation/-direction2rgb,1000,,,commands-colors-manipulation +-add_page command-guide/color-manipulation/-gradient2rgb,1000,,,commands-colors-manipulation +-add_page command-guide/color-manipulation/-mix_rgb,4000,,,commands-colors-manipulation +-add_page command-guide/color-manipulation/-select_color,3000,,,commands-colors-manipulation +-add_page command-guide/feature-extraction/-distance,9500,,,commands-features-extraction +-add_page command-guide/feature-extraction/-area,2000,,,commands-features-extraction +-add_page command-guide/feature-extraction/-label,1300,,,commands-features-extraction +-add_page command-guide/filtering/-bandpass,5000,,,commands-filtering +-add_page command-guide/filtering/-blur,2000,,,commands-filtering +-add_page command-guide/filtering/-blur_angular,700,,,commands-filtering +-add_page command-guide/filtering/-blur_linear,700,,,commands-filtering +-add_page command-guide/filtering/-blur_radial,700,,,commands-filtering +-add_page command-guide/filtering/-blur_selective,3500,,,commands-filtering +-add_page command-guide/filtering/-blur_x,700,,,commands-filtering +-add_page command-guide/filtering/-blur_xy,700,,,commands-filtering +-add_page command-guide/filtering/-blur_xyz,700,,,commands-filtering +-add_page command-guide/filtering/-blur_y,700,,,commands-filtering +-add_page command-guide/filtering/-blur_z,2500,,,commands-filtering +-add_page command-guide/filtering/-convolve,3500,,,commands-filtering +-add_page command-guide/filtering/-dct-and-idct,1500,,,commands-filtering +-add_page command-guide/filtering/-deriche,1500,,,commands-filtering +-add_page command-guide/filtering/-diffusiontensors,7200,,,commands-filtering +-add_page command-guide/filtering/-fft,6300,,,commands-filtering +-add_page command-guide/filtering/-gradient,3000,,,commands-filtering +-add_page command-guide/filtering/-gradient_norm,1300,,,commands-filtering +-add_page command-guide/filtering/-gradient_orientation,3300,,,commands-filtering +-add_page command-guide/filtering/-haar,2000,,,commands-filtering +-add_page command-guide/filtering/-smooth,4300,,,commands-filtering +-add_page command-guide/filtering/-structuretensors,3300,,,commands-filtering +-add_page command-guide/geometry-manipulation/-warp,5000,,,commands-geometry-manipulation +-add_page command-guide/image-drawing/-gaussian,2000,,,commands-image-drawing +-add_page command-guide/image-drawing/-plasma,4500,,,commands-image-drawing +-add_page command-guide/image-drawing/-turbulence,5500,,,commands-image-drawing +-add_page command-guide/inputs-outputs/-display,2000,,,commands-inputs-outputs +-add_page command-guide/inputs-outputs/-display_tensors,1500,,,commands-inputs-outputs +-add_page command-guide/inputs-outputs/-input,7500,,,commands-inputs-outputs +-add_page command-guide/inputs-outputs/-shared,2000,,,commands-inputs-outputs +-add_page command-guide/matrix-computation/-eigen,2000,,,commands-matrix-computation +-add_page command-guide/program-control/-local,3500,,,commands-program-control +-add_page command-guide/program-control/-do,6500,,,commands-program-control +-add_page command-guide/program-control/-if,3500,,,commands-program-control +-add_page command-guide/program-control/-repeat,2000,,,commands-program-control +-add_page command-guide/values-manipulation/-eigen2tensor,5500,,,commands-values-manipulation +-add_page command-guide/values-manipulation/-index,3500,,,commands-values-manipulation +-add_page command-guide/values-manipulation/-map,3500,,,commands-values-manipulation +-add_page command-guide/values-manipulation/-norm,700,,,commands-values-manipulation +-add_page command-guide/values-manipulation/-normalize,1700,,,commands-values-manipulation +-add_page command-guide/values-manipulation/-orientation,5000,,,commands-values-manipulation +-add_page command-guide/values-manipulation/-threshold,1500,,,commands-values-manipulation +-add_page technical-notes/trigometric-and-inverse-trigometric-commands,2500 +-add_page technical-notes/wavelet-analysis-and-synthesis-in-gmic,5000 +-add_page technical-notes/gmic-color-mapping,1000 +-add_page technical-notes/gmic-color-mapping/median-cut-algorithm,5500 +-add_page technical-notes/gmic-color-mapping/k-means-algorithm,10000 +-add_page gimp-filters,1500 +-add_page gimp-filters/blur-by-color-filter,23500 +-add_page gimp-filters/hedcut-filter,2000 +-add_page gimp-filters/the-fingerpainting-filter,2200 +-add_page gimp-filters/the-hairlock-filter,8500 +-v + -e[] "\n * Prepare folder structure." -v - +-x "ln -fs ../tutorial.css ." +-x "ln -fs ../copyright.html ." +-x "ln -fs ../favicon.ico ." +-x "ln -fs ../favicon.png ." +-x "ln -fs ../footer.html ." +-x "ln -fs ../header.html ." +-x "ln -fs ../gmicmenu ." +-x "ln -fs ../jquery-1.11.0.min.js ." +-x "ln -fs ../style.css ." +-x "ln -fs ../images ." +-x "mkdir -p img" +-x "cd img && ln -fs ../../img/logo4.jpg ." +-x "cd img && ln -fs ../../img/logos.jpg ." +-x "cd img && ln -fs ../../img/rss.png ." +-x "cd img && ln -fs ../../convert_raw_img/* ." +-x "ln -fs ../convert_raw.html ../convert_raw.shtml ." +-x "ln -fs ../tutorial_toc.html ." +-x "ln -fs ../highslide ." +11,11,1,3,255 -frame 1,1,0 -line 3,50%,{w-4},50%,1,0 --line 50%,3,50%,{h-4},1,0 +-a x -o img/toc_buttons.png +100%,100%,1,4 -fc. 245,245,245,0 -o. img/toc_void.png +-rm +-if {!narg($_N)} _N=0 -endif +0 -repeat $_N +-o. ${_output_html$>} -o. ${_output_shtml$>} +-done -rm. +-repeat $_N +-v + -_update_tutorial_html[] ${_input$>},${_height$>},${_output_shtml$>},${_output_html$>},${_img_prefix$>},${_tocid$>} -v - +-done +-x "rm -f __tmp.html" +-v + -e[] "\n * All done !.\n\n" +__update_tutorial_html : -skip ${3=""},${4=""},${5=""} +-if {!narg($_N)} _N=0 -endif +_input$_N=$1 _height$_N=$2 +-if {narg("$5")} _tocid$_N="$5" +-else +({'"$1"'}) -s -,{'/'} -if $! _tocid$_N={0,t} -rm -else _tocid$_N=index -endif +-endif +({'"$1"'}) -s -,{'/'} +output_base="" +-if $! output_base={t} -endif +-if {$!>2" && "i[0]!={'-'}} output_base={-2,t}_{t} -endif +-rm +-if {narg($output_base)} +({'$output_base'}) -if {i=={'-'}} -=. {'_'} output_base={t} -endif -rm. +-endif +-if {narg("$3")} _output_shtml$_N="$3".shtml _output_html$_N="$3".html _img_prefix$_N="$3" +-else _output_shtml$_N=$output_base.shtml _output_html$_N=$output_base.html _img_prefix$_N=$output_base +-endif +-if {narg("$4")} _output_html$_N="$4".html -endif +_N+=1 +_update_tutorial_html : +-v - +url="http://particularart.com/tools-and-toys/gmic/$1" +-v + -e[] "\n * Convert tutorial page '"$url"'." -v - +-v + -e[] " > Retrieve page '"$url"'." -v - +-x "wget -q "$url" -O __tmp.html" +-i raw:__tmp.html,char +-discard 13 +-replace_str "class=\"internal\" " +-replace_str "class=\"external\" " +-replace_str "dir=\"ltr\" " +-replace_str "border: 1px","border: 0px" +-replace_str "G\140MIC","G\47MIC" +-replace_str "CNTL","CTRL" +-replace_str "Rashid","Rachid" +-replace_str "gmic.sourceforge.net","gmic.eu" +-replace_str "gmic_def","gmic_stdlib" +-replace_str "@#","$!" +-replace_str "@{-1,","{" +-replace_str "@{","{" +-s -,{'""'} -k[1] +-s -,{'""'} -k[0] +-s +,{'" \n\n