From bf6be44711440f58d689e52ed34c89e299489a62 Mon Sep 17 00:00:00 2001 From: vsv Date: Thu, 20 Jun 2019 13:04:07 +0300 Subject: [PATCH] Modifications according to remarks. --- doc/salome/gui/input/occ_3d_viewer.rst | 14 ++++ doc/salome/gui/input/setting_preferences.rst | 1 + src/LightApp/LightApp_Application.cxx | 33 +++++++- src/LightApp/resources/LightApp.xml | 1 + src/LightApp/resources/LightApp_msg_en.ts | 12 +++ src/LightApp/resources/LightApp_msg_fr.ts | 12 +++ src/LightApp/resources/LightApp_msg_ja.ts | 12 +++ src/OCCViewer/OCCViewer_ViewFrame.cxx | 14 ++++ src/OCCViewer/OCCViewer_ViewFrame.h | 3 + src/OCCViewer/OCCViewer_ViewModel.cxx | 27 +++++++ src/OCCViewer/OCCViewer_ViewModel.h | 4 + src/OCCViewer/OCCViewer_ViewSketcher.h | 4 + src/OCCViewer/OCCViewer_ViewWindow.cxx | 74 +++++++++++++----- src/OCCViewer/OCCViewer_ViewWindow.h | 9 ++- src/OCCViewer/resources/OCCViewer_msg_en.ts | 20 +++-- src/OCCViewer/resources/OCCViewer_msg_fr.ts | 20 +++-- src/OCCViewer/resources/OCCViewer_msg_ja.ts | 20 +++-- .../resources/occ_view_circle_style.png | Bin 449 -> 501 bytes .../resources/occ_view_rect_style.png | Bin 520 -> 630 bytes 19 files changed, 238 insertions(+), 42 deletions(-) diff --git a/doc/salome/gui/input/occ_3d_viewer.rst b/doc/salome/gui/input/occ_3d_viewer.rst index 002dbffc2..d5a2f2997 100644 --- a/doc/salome/gui/input/occ_3d_viewer.rst +++ b/doc/salome/gui/input/occ_3d_viewer.rst @@ -67,6 +67,20 @@ ____ ____ +.. image:: ../../../../src/OCCViewer/resources/occ_view_rect_style.png + :align: center + +**Advanced selection by polygon** - enables advanced selection by polygon. + +____ + +.. image:: ../../../../src/OCCViewer/resources/occ_view_circle_style.png + :align: center + +**Advanced selection by polygon** - enables advanced selection by circle. + +____ + .. image:: ../../../../src/OCCViewer/resources/occ_view_fitall.png :align: center diff --git a/doc/salome/gui/input/setting_preferences.rst b/doc/salome/gui/input/setting_preferences.rst index 53cd002ac..306b7a172 100644 --- a/doc/salome/gui/input/setting_preferences.rst +++ b/doc/salome/gui/input/setting_preferences.rst @@ -152,6 +152,7 @@ OCC 3D Viewer Preferences - **Enable preselection** - switches preselection on/off. - **Enable selection** - switches selection on/off. + - **Advanced selection** - switches default advanced selection style by Polygon or by Circle. - **Clipping parameters** - specifies the default clipping plane parameters. diff --git a/src/LightApp/LightApp_Application.cxx b/src/LightApp/LightApp_Application.cxx index 83909627c..fb14f540c 100644 --- a/src/LightApp/LightApp_Application.cxx +++ b/src/LightApp/LightApp_Application.cxx @@ -1633,6 +1633,7 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType resMgr->doubleValue( "OCCViewer", "focus_value", vm->stereographicFocusValue() )); vm->setInterocularDistance( resMgr->integerValue( "OCCViewer", "iod_type", vm->interocularDistanceType() ), resMgr->doubleValue( "OCCViewer", "iod_value", vm->interocularDistanceValue() )); + vm->setSelectionStyle( resMgr->integerValue( "OCCViewer", "adv_selection_mode", vm->selectionStyle() ) ); vm->setReverseStereo( resMgr->booleanValue( "OCCViewer", "reverse_stereo", vm->isReverseStereo() ) ); vm->setVSync( resMgr->booleanValue( "OCCViewer", "enable_vsync", vm->isVSync() ) ); @@ -2596,13 +2597,22 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) // ... "Selection" group <> int occSelectionGroup = pref->addPreference( tr( "PREF_GROUP_SELECTION" ), occGroup ); - pref->setItemProperty( "columns", 2, occSelectionGroup ); + pref->setItemProperty( "columns", 3, occSelectionGroup ); // .... -> enable preselection pref->addPreference( tr( "PREF_ENABLE_PRESELECTION" ), occSelectionGroup, LightApp_Preferences::Bool, "OCCViewer", "enable_preselection" ); // .... -> enable selection pref->addPreference( tr( "PREF_ENABLE_SELECTION" ), occSelectionGroup, LightApp_Preferences::Bool, "OCCViewer", "enable_selection" ); + // .... -> selection style + int aSeleStyle = pref->addPreference( tr( "PREF_SELECTION_STYLE" ), occSelectionGroup, + LightApp_Preferences::Selector, "OCCViewer", "adv_selection_mode" ); + aValuesList.clear(); + anIndicesList.clear(); + aValuesList << tr("PREF_POLYGON_SELECTION") << tr("PREF_CIRCLE_SELECTION"); + anIndicesList << 0 << 1; + pref->setItemProperty( "strings", aValuesList, aSeleStyle); + pref->setItemProperty( "indexes", anIndicesList, aSeleStyle); // ... "Selection" group <> // ... "Clipping" group <> @@ -3313,6 +3323,27 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString } #endif + +#ifndef DISABLE_OCCVIEWER + if (sec == QString("OCCViewer") && param == QString("adv_selection_mode")) + { + int mode = resMgr->integerValue("OCCViewer", "adv_selection_mode", 0); + QList lst; + viewManagers(OCCViewer_Viewer::Type(), lst); + QListIterator it(lst); + while (it.hasNext()) + { + SUIT_ViewModel* vm = it.next()->getViewModel(); + if (!vm || !vm->inherits("OCCViewer_Viewer")) + continue; + + OCCViewer_Viewer* occVM = (OCCViewer_Viewer*)vm; + occVM->setSelectionStyle(mode); + } + } +#endif + + #ifndef DISABLE_OCCVIEWER if ( sec == QString( "OCCViewer" ) && param == QString( "stereo_type" ) ) { diff --git a/src/LightApp/resources/LightApp.xml b/src/LightApp/resources/LightApp.xml index fd64450ee..ae448ffb2 100644 --- a/src/LightApp/resources/LightApp.xml +++ b/src/LightApp/resources/LightApp.xml @@ -125,6 +125,7 @@ + diff --git a/src/LightApp/resources/LightApp_msg_en.ts b/src/LightApp/resources/LightApp_msg_en.ts index dc4a13b33..fe57830fe 100644 --- a/src/LightApp/resources/LightApp_msg_en.ts +++ b/src/LightApp/resources/LightApp_msg_en.ts @@ -212,6 +212,18 @@ The changes will be applied on the next application session. PREF_PERSPECTIVE Perspective + + PREF_POLYGON_SELECTION + Polygon + + + PREF_CIRCLE_SELECTION + Circle + + + PREF_SELECTION_STYLE + Advanced selection + PREF_NAVIGATION Navigation style diff --git a/src/LightApp/resources/LightApp_msg_fr.ts b/src/LightApp/resources/LightApp_msg_fr.ts index ca7a04786..266cc6cb1 100644 --- a/src/LightApp/resources/LightApp_msg_fr.ts +++ b/src/LightApp/resources/LightApp_msg_fr.ts @@ -212,6 +212,18 @@ Les modifications seront appliquées à la prochaine session. PREF_PERSPECTIVE Perspective + + PREF_POLYGON_SELECTION + Polygon + + + PREF_CIRCLE_SELECTION + Circle + + + PREF_SELECTION_STYLE + Advanced selection + PREF_NAVIGATION Navigation: diff --git a/src/LightApp/resources/LightApp_msg_ja.ts b/src/LightApp/resources/LightApp_msg_ja.ts index 8ba2a56fa..513e5d270 100644 --- a/src/LightApp/resources/LightApp_msg_ja.ts +++ b/src/LightApp/resources/LightApp_msg_ja.ts @@ -211,6 +211,18 @@ Pythonファイルは、文字、数字、アンダースコアが含まれて PREF_PERSPECTIVE 遠近法 + + PREF_POLYGON_SELECTION + Polygon + + + PREF_CIRCLE_SELECTION + Circle + + + PREF_SELECTION_STYLE + Advanced selection + PREF_NAVIGATION ナビゲーション スタイル diff --git a/src/OCCViewer/OCCViewer_ViewFrame.cxx b/src/OCCViewer/OCCViewer_ViewFrame.cxx index c74e53756..91e39769e 100644 --- a/src/OCCViewer/OCCViewer_ViewFrame.cxx +++ b/src/OCCViewer/OCCViewer_ViewFrame.cxx @@ -354,6 +354,20 @@ void OCCViewer_ViewFrame::setProjectionType( int t) } } +//************************************************************************************** +int OCCViewer_ViewFrame::selectionStyle() const +{ + return getView(MAIN_VIEW)->selectionStyle(); +} + +//************************************************************************************** +void OCCViewer_ViewFrame::setSelectionStyle(int t) +{ + foreach(OCCViewer_ViewWindow* aView, myViews) { + aView->setSelectionStyle(t); + } +} + //************************************************************************************** int OCCViewer_ViewFrame::stereoType() const { diff --git a/src/OCCViewer/OCCViewer_ViewFrame.h b/src/OCCViewer/OCCViewer_ViewFrame.h index 1df7d964a..755afb5ea 100644 --- a/src/OCCViewer/OCCViewer_ViewFrame.h +++ b/src/OCCViewer/OCCViewer_ViewFrame.h @@ -75,6 +75,9 @@ public: virtual int projectionType() const; virtual void setProjectionType( int ); + virtual int selectionStyle() const; + virtual void setSelectionStyle(int); + virtual int stereoType() const; virtual void setStereoType( const int ); diff --git a/src/OCCViewer/OCCViewer_ViewModel.cxx b/src/OCCViewer/OCCViewer_ViewModel.cxx index 0e3e37f73..87370f17d 100644 --- a/src/OCCViewer/OCCViewer_ViewModel.cxx +++ b/src/OCCViewer/OCCViewer_ViewModel.cxx @@ -170,6 +170,7 @@ OCCViewer_Viewer::OCCViewer_Viewer( bool DisplayTrihedron) // set projection type to orthographic myProjectionType = 0; + mySelectionStyle = 0; // set stereo parameters myStereoType = 0; myAnaglyphFilter = 0; @@ -244,6 +245,7 @@ void OCCViewer_Viewer::initView( OCCViewer_ViewWindow* view ) view->initSketchers(); view->setInteractionStyle( interactionStyle() ); view->setProjectionType( projectionType() ); + view->setSelectionStyle( selectionStyle() ); view->setStereoType( stereoType() ); view->setAnaglyphFilter( anaglyphFilter() ); view->setStereographicFocus( stereographicFocusType(), stereographicFocusValue() ); @@ -545,6 +547,31 @@ void OCCViewer_Viewer::setProjectionType( const int theType ) } } + +int OCCViewer_Viewer::selectionStyle() const +{ + return mySelectionStyle; +} + +void OCCViewer_Viewer::setSelectionStyle(const int theMode) +{ + if (mySelectionStyle != theMode) { + mySelectionStyle = theMode; + if (!myViewManager) + return; + + QVector wins = myViewManager->getViews(); + for (int i = 0; i < (int)wins.count(); i++) + { + OCCViewer_ViewWindow* win = ::qobject_cast(wins.at(i)); + if (win) + win->setSelectionStyle(theMode); + } + } +} + + + /*! \return stereo type */ diff --git a/src/OCCViewer/OCCViewer_ViewModel.h b/src/OCCViewer/OCCViewer_ViewModel.h index 22b8059ed..8d91518e9 100644 --- a/src/OCCViewer/OCCViewer_ViewModel.h +++ b/src/OCCViewer/OCCViewer_ViewModel.h @@ -159,6 +159,9 @@ public: int stereoType() const; void setStereoType( const int ); + int selectionStyle() const; + void setSelectionStyle(const int); + int anaglyphFilter() const; void setAnaglyphFilter( const int ); @@ -260,6 +263,7 @@ protected: int myAnaglyphFilter; int myStereographicFocusType; int myInterocularDistanceType; + int mySelectionStyle; double myStereographicFocusValue; double myInterocularDistanceValue; diff --git a/src/OCCViewer/OCCViewer_ViewSketcher.h b/src/OCCViewer/OCCViewer_ViewSketcher.h index a1ec747cc..48d79cac9 100644 --- a/src/OCCViewer/OCCViewer_ViewSketcher.h +++ b/src/OCCViewer/OCCViewer_ViewSketcher.h @@ -71,6 +71,7 @@ public: virtual bool eventFilter( QObject*, QEvent* ); virtual void setSketcherMode(int theMode) {} + virtual int sketcherMode() const { return 0; } private slots: void onDrawViewPort(); @@ -128,6 +129,9 @@ public: virtual ~OCCViewer_PolygonSketcher(); virtual void setSketcherMode(int theMode); + virtual int sketcherMode() const { + return myMode; + } protected: virtual bool onKey( QKeyEvent* ); diff --git a/src/OCCViewer/OCCViewer_ViewWindow.cxx b/src/OCCViewer/OCCViewer_ViewWindow.cxx index 2d8b48f50..f866ca29c 100644 --- a/src/OCCViewer/OCCViewer_ViewWindow.cxx +++ b/src/OCCViewer/OCCViewer_ViewWindow.cxx @@ -1477,12 +1477,23 @@ void OCCViewer_ViewWindow::createActions() toolMgr()->registerAction( aAction, SwitchZoomingStyleId ); // Switch advanced selection style (poligone/circle) - aAction = new QtxAction(tr("MNU_SELECTION_STYLE_SWITCH"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_RECT_STYLE" ) ), - tr( "MNU_SELECTION_STYLE_SWITCH" ), 0, this); - aAction->setStatusTip(tr("DSC_SELECTION_STYLE_SWITCH")); + aAction = new QtxAction(tr("MNU_RECTANGLE_SELECTION_STYLE"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_RECT_STYLE" ) ), + tr( "MNU_RECTANGLE_SELECTION_STYLE" ), 0, this); + aAction->setStatusTip(tr("DSC_RECTANGLE_SELECTION_STYLE")); aAction->setCheckable(true); - connect(aAction, SIGNAL(toggled(bool)), this, SLOT(onSwitchSelectionStyle(bool))); - toolMgr()->registerAction( aAction, SwitchSelectionStyleId); + toolMgr()->registerAction( aAction, RectangleSelectionStyleId); + + aAction = new QtxAction(tr("MNU_CIRCLE_SELECTION_STYLE"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_CIRCLE_STYLE" ) ), + tr( "MNU_CIRCLE_SELECTION_STYLE" ), 0, this); + aAction->setStatusTip(tr("DSC_CIRCLE_SELECTION_STYLE")); + aAction->setCheckable(true); + toolMgr()->registerAction( aAction, CircleSelectionStyleId); + + // - add exclusive action group + QActionGroup* aSelectionGroup = new QActionGroup(this); + aSelectionGroup->addAction(toolMgr()->action(RectangleSelectionStyleId)); + aSelectionGroup->addAction(toolMgr()->action(CircleSelectionStyleId)); + connect(aSelectionGroup, SIGNAL(triggered(QAction*)), this, SLOT(onSwitchSelectionStyle(QAction*))); // Maximized view aAction = new QtxAction(tr("MNU_MINIMIZE_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_MINIMIZE" ) ), @@ -1555,7 +1566,8 @@ void OCCViewer_ViewWindow::createToolBar() toolMgr()->append( SwitchZoomingStyleId, tid ); toolMgr()->append( SwitchPreselectionId, tid ); toolMgr()->append( SwitchSelectionId, tid ); - toolMgr()->append(SwitchSelectionStyleId, tid ); + toolMgr()->append(RectangleSelectionStyleId, tid ); + toolMgr()->append(CircleSelectionStyleId, tid ); if( myModel->trihedronActivated() ) toolMgr()->append( TrihedronShowId, tid ); @@ -2202,23 +2214,45 @@ void OCCViewer_ViewWindow::onSwitchSelection( bool on ) } } -void OCCViewer_ViewWindow::onSwitchSelectionStyle(bool on) +/*! + \brief Switches style of advanced multiple selection by Poligon/Circle +*/ +void OCCViewer_ViewWindow::onSwitchSelectionStyle(QAction* theAction) { // selection - QtxAction* a = dynamic_cast( toolMgr()->action(SwitchSelectionStyleId) ); - if (a) { - if (a->isChecked() != on) { - a->setChecked(on); + OCCViewer_ViewSketcher* aSkecher = getSketcher(Polygon); + if (aSkecher) { + if (theAction == toolMgr()->action(RectangleSelectionStyleId)) { + aSkecher->setSketcherMode(OCCViewer_PolygonSketcher::Poligone); + } + else if (theAction == toolMgr()->action(CircleSelectionStyleId)) { + aSkecher->setSketcherMode(OCCViewer_PolygonSketcher::Circle); } - SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); - QPixmap aIcon = on ? aResMgr->loadPixmap("OCCViewer", tr("ICON_OCCVIEWER_CIRCLE_STYLE")) : - aResMgr->loadPixmap("OCCViewer", tr("ICON_OCCVIEWER_RECT_STYLE")); - a->setIcon(aIcon); } +} + +int OCCViewer_ViewWindow::selectionStyle() const +{ + OCCViewer_ViewSketcher* aSkecher = getSketcher(Polygon); + if (aSkecher) { + return aSkecher->sketcherMode(); + } + return 0; +} + +void OCCViewer_ViewWindow::setSelectionStyle(int theMode) +{ OCCViewer_ViewSketcher* aSkecher = getSketcher(Polygon); if (aSkecher) { - aSkecher->setSketcherMode(on ? OCCViewer_PolygonSketcher::Circle : - OCCViewer_PolygonSketcher::Poligone); + aSkecher->setSketcherMode(theMode); + if (theMode == 0) { + toolMgr()->action(RectangleSelectionStyleId)->setChecked(true); + toolMgr()->action(CircleSelectionStyleId)->setChecked(false); + } + else { + toolMgr()->action(RectangleSelectionStyleId)->setChecked(false); + toolMgr()->action(CircleSelectionStyleId)->setChecked(true); + } } } @@ -3034,11 +3068,11 @@ void OCCViewer_ViewWindow::initSketchers() } } -OCCViewer_ViewSketcher* OCCViewer_ViewWindow::getSketcher( const int typ ) +OCCViewer_ViewSketcher* OCCViewer_ViewWindow::getSketcher( const int typ ) const { OCCViewer_ViewSketcher* sketcher = 0; - QList::Iterator it; - for ( it = mySketchers.begin(); it != mySketchers.end() && !sketcher; ++it ) + QList::ConstIterator it; + for ( it = mySketchers.cbegin(); it != mySketchers.cend() && !sketcher; ++it ) { OCCViewer_ViewSketcher* sk = (*it); if ( sk->type() == typ ) diff --git a/src/OCCViewer/OCCViewer_ViewWindow.h b/src/OCCViewer/OCCViewer_ViewWindow.h index 056d4c5a1..ac3967995 100644 --- a/src/OCCViewer/OCCViewer_ViewWindow.h +++ b/src/OCCViewer/OCCViewer_ViewWindow.h @@ -152,7 +152,7 @@ public: SwitchPreselectionId, SwitchSelectionId, MaximizedId, SynchronizeId, ReturnTo3dViewId, OrthographicId, PerspectiveId, StereoId, RayTracingId, EnvTextureId, LightSourceId, - SwitchSelectionStyleId, + RectangleSelectionStyleId, CircleSelectionStyleId, UserId }; enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE, @@ -202,7 +202,7 @@ public: virtual void setVisualParameters( const QString& parameters ); virtual void initSketchers(); - virtual OCCViewer_ViewSketcher* getSketcher( const int ); + virtual OCCViewer_ViewSketcher* getSketcher( const int ) const; virtual void activateSketching( int ); @@ -220,6 +220,9 @@ public: virtual int projectionType() const; virtual void setProjectionType( int ); + virtual int selectionStyle() const; + virtual void setSelectionStyle(int); + virtual int stereoType() const; virtual void setStereoType( const int ); @@ -314,7 +317,7 @@ public slots: virtual void onSwitchZoomingStyle( bool on ); virtual void onSwitchPreselection( bool on ); virtual void onSwitchSelection( bool on ); - virtual void onSwitchSelectionStyle( bool on ); + virtual void onSwitchSelectionStyle(QAction* theAction); virtual void onRayTracing(); virtual void onEnvTexture(); virtual void onLightSource(); diff --git a/src/OCCViewer/resources/OCCViewer_msg_en.ts b/src/OCCViewer/resources/OCCViewer_msg_en.ts index 6d3ad7bf8..2f7fd70fe 100644 --- a/src/OCCViewer/resources/OCCViewer_msg_en.ts +++ b/src/OCCViewer/resources/OCCViewer_msg_en.ts @@ -232,17 +232,25 @@ MNU_ZOOMING_STYLE_SWITCH Zooming style switch - - MNU_SELECTION_STYLE_SWITCH - Advanced selection style switch - DSC_ZOOMING_STYLE_SWITCH Zooming style switch - DSC_SELECTION_STYLE_SWITCH - Advanced selection style switch + MNU_RECTANGLE_SELECTION_STYLE + Advanced selection by polygon + + + DSC_RECTANGLE_SELECTION_STYLE + Advanced selection by polygon + + + MNU_CIRCLE_SELECTION_STYLE + Advanced selection by circle + + + DSC_CIRCLE_SELECTION_STYLE + Advanced selection by circle MNU_ENABLE_PRESELECTION diff --git a/src/OCCViewer/resources/OCCViewer_msg_fr.ts b/src/OCCViewer/resources/OCCViewer_msg_fr.ts index 7e0857404..76c7e57b7 100644 --- a/src/OCCViewer/resources/OCCViewer_msg_fr.ts +++ b/src/OCCViewer/resources/OCCViewer_msg_fr.ts @@ -231,17 +231,25 @@ MNU_ZOOMING_STYLE_SWITCH Changer le style de zoom - - MNU_SELECTION_STYLE_SWITCH - Advanced selection style switch - DSC_ZOOMING_STYLE_SWITCH Changer le style de zoom - DSC_SELECTION_STYLE_SWITCH - Advanced selection style switch + MNU_RECTANGLE_SELECTION_STYLE + Advanced selection by polygon + + + DSC_RECTANGLE_SELECTION_STYLE + Advanced selection by polygon + + + MNU_CIRCLE_SELECTION_STYLE + Advanced selection by circle + + + DSC_CIRCLE_SELECTION_STYLE + Advanced selection by circle MNU_ENABLE_PRESELECTION diff --git a/src/OCCViewer/resources/OCCViewer_msg_ja.ts b/src/OCCViewer/resources/OCCViewer_msg_ja.ts index 0820836f4..0ac1e9e21 100644 --- a/src/OCCViewer/resources/OCCViewer_msg_ja.ts +++ b/src/OCCViewer/resources/OCCViewer_msg_ja.ts @@ -232,17 +232,25 @@ MNU_ZOOMING_STYLE_SWITCH ズームのスタイルを変更します。 - - MNU_SELECTION_STYLE_SWITCH - Advanced selection style switch - DSC_ZOOMING_STYLE_SWITCH ズームのスタイルを変更します。 - DSC_SELECTION_STYLE_SWITCH - Advanced selection style switch + MNU_RECTANGLE_SELECTION_STYLE + Advanced selection by polygon + + + DSC_RECTANGLE_SELECTION_STYLE + Advanced selection by polygon + + + MNU_CIRCLE_SELECTION_STYLE + Advanced selection by circle + + + DSC_CIRCLE_SELECTION_STYLE + Advanced selection by circle MNU_ENABLE_PRESELECTION diff --git a/src/OCCViewer/resources/occ_view_circle_style.png b/src/OCCViewer/resources/occ_view_circle_style.png index ee8bb505591e687515bb5017fc6ade1e321430f1..f63b6f9d944d20cafe6d53487da9a6fa44f2e235 100644 GIT binary patch delta 359 zcmV-t0hs>51N8%tB#|)~3K0MR3lRZ-WM7eyQ(}JsH%UZ6R5(v#`2YVuRWVjU7zP3v zAPxZH5+L>gVi9cWkTF(4MMaY^IXQ!8($YHbH8dQK8yN*`0MQ`6yu9IKpj<3AeISg= zVPIep6qK2%s%rBhJiM#FynJsaItGb@U7 z1OgdQfMe4{2!r$i^}}NyW?%p)7O`m{ghBd%`hCz1tNaKtP@HkP?hlkbL}~0RYTTsU8h#x4m11#odh3h#vh4>G!4}32e zHhabrUFd^1r~}Xb7=PQG+{}P=0AJv>?uF-}G&|Rr3+sSAeIs%-8Y3=& zb-=c5#5<^rxCGXLtBpm>{txrMLowEzGKV}oWidGdOXiTn&HVTr_Q7zS=H8SSNZ*t` z7!qrcY@fRL%$vT;Rvg>k_O0@px9HO z+_FJvy|5P)ksx#6 z27)jbm%t7~L%;RdG~vT)YPRcu4$8nV5C}v-;pppI-HuHoE-Wst3QFt>7zRQObpaVl zY)r?;&nN@sC=@f0IbZ=`T9lVJJci8xbZll8)(2ES9YsGf2P^=LEnt?qWMh*s7n@Ka z$XHR)^Z-zO0E&KO4qT9dL4}o-aEC0*vw!g+mRD eRgirAp8){2bagfEL+5t@0000~6_tnz z1OkEJ0SHR5(||E3S;SCQdQJH>SA8KK$niHWZu27{$GXv~Yn5ev!p5 z+~6529R}IMi+@&S5AvNFWtWOv3jbUbZG0l>Bx6LrdCNZ+gAw@0Ns|Sr_R