|
gtsam_points
|
#include <light_viewer_context.hpp>


Public Member Functions | |
| LightViewerContext (const std::string &context_name) | |
| virtual | ~LightViewerContext () |
| void | draw_ui () |
| void | draw_gl () |
| bool | init_canvas (const Eigen::Vector2i &size) |
| void | set_size (const Eigen::Vector2i &size) |
| void | set_clear_color (const Eigen::Vector4f &color) |
| void | set_pos (const Eigen::Vector2i &pos, ImGuiCond cond=ImGuiCond_FirstUseEver, ImGuiWindowFlags=0) |
| void | show () |
| void | hide () |
| virtual void | clear () |
| virtual void | clear_text () |
| virtual void | append_text (const std::string &text) |
| virtual void | register_ui_callback (const std::string &name, const std::function< void()> &callback=0) |
| void | remove_ui_callback (const std::string &name) |
| guik::ShaderSetting & | shader_setting () |
| const guik::ShaderSetting & | shader_setting () const |
| void | disable_xy_grid () |
| void | enable_xy_grid () |
| void | set_draw_xy_grid (bool draw_xy_grid) |
| void | set_colormap (glk::COLORMAP colormap) |
| void | set_screen_effect (const std::shared_ptr< glk::ScreenEffect > &effect) |
| const std::shared_ptr< glk::ScreenEffect > & | get_screen_effect () const |
| void | set_bg_texture (const std::shared_ptr< glk::Texture > &bg_texture) |
| void | set_rainbow_range (const Eigen::Vector2f &minmax_z) |
| void | set_rainbow_axis (const Eigen::Vector3f &axis) |
| void | set_point_shape (float point_size=1.0f, bool metric=true, bool circle=true) |
| void | enable_decimal_rendering () |
| void | enable_normal_buffer () |
| void | enable_info_buffer () |
| void | enable_partial_rendering (double clear_thresh=1e-6) |
| void | disable_partial_rendering () |
| bool | normal_buffer_enabled () const |
| bool | info_buffer_enabled () const |
| bool | partial_rendering_enabled () const |
| const glk::Texture & | color_buffer () const |
| const glk::Texture & | depth_buffer () const |
| const glk::Texture & | normal_buffer () const |
| const glk::Texture & | info_buffer () const |
| const glk::Texture & | dynamic_flag_buffer () const |
| void | clear_drawables () |
| void | clear_drawables (const std::function< bool(const std::string &)> &fn) |
| std::unordered_map< std::string, std::pair< ShaderSetting::Ptr, glk::Drawable::ConstPtr > > & | get_drawables () |
| std::pair< ShaderSetting::Ptr, glk::Drawable::ConstPtr > | find_drawable (const std::string &name) |
| void | remove_drawable (const std::string &name) |
| void | remove_drawable (const std::regex ®ex) |
| void | update_drawable (const std::string &name, const glk::Drawable::ConstPtr &drawable, const ShaderSetting &shader_setting=ShaderSetting()) |
| void | clear_drawable_filters () |
| void | register_drawable_filter (const std::string &filter_name, const std::function< bool(const std::string &)> &filter=0) |
| void | remove_drawable_filter (const std::string &filter_name) |
| void | clear_partial_rendering () |
| const std::shared_ptr< CameraControl > & | get_camera_control () const |
| const std::shared_ptr< ProjectionControl > & | get_projection_control () const |
| void | set_camera_control (const std::shared_ptr< CameraControl > &camera_control) |
| void | set_projection_control (const std::shared_ptr< ProjectionControl > &projection_control) |
| bool | save_camera_settings (const std::string &path) const |
| bool | load_camera_settings (const std::string &path) |
| void | reset_center () |
| void | lookat (const Eigen::Vector3f &pt) |
| template<typename Vector > | |
| void | lookat (const Vector &pt) |
| std::shared_ptr< OrbitCameraControlXY > | use_orbit_camera_control (double distance=80.0, double theta=0.0, double phi=-60.0f *M_PI/180.0f) |
| std::shared_ptr< OrbitCameraControlXZ > | use_orbit_camera_control_xz (double distance=80.0, double theta=0.0, double phi=0.0) |
| std::shared_ptr< TopDownCameraControl > | use_topdown_camera_control (double distance=80.0, double theta=0.0) |
| std::shared_ptr< ArcBallCameraControl > | use_arcball_camera_control (double distance=80.0, double theta=0.0, double phi=-60.0f *M_PI/180.0f) |
| std::shared_ptr< FPSCameraControl > | use_fps_camera_control (double fovy_deg=60.0) |
| guik::GLCanvas & | get_canvas () |
| Eigen::Vector2i | canvas_tl () const |
| Eigen::Vector2i | canvas_br () const |
| Eigen::Vector2i | canvas_size () const |
| Eigen::Matrix4f | view_matrix () const |
| Eigen::Matrix4f | projection_matrix () const |
| Eigen::Vector4i | pick_info (const Eigen::Vector2i &p, int window=2) const |
| float | pick_depth (const Eigen::Vector2i &p, int window=2) const |
| Eigen::Vector3f | unproject (const Eigen::Vector2i &p, float depth) const |
| std::optional< Eigen::Vector3f > | pick_point (int button=0, int window=2, Eigen::Vector4i *info=nullptr) const |
| std::vector< unsigned char > | read_color_buffer () const |
| std::vector< float > | read_depth_buffer (bool real_scale=true) |
| bool | save_color_buffer (const std::string &filename) |
| bool | save_depth_buffer (const std::string &filename, bool real_scale=true) |
| AsyncLightViewerContext | async () |
| std::shared_ptr< glk::PointCloudBuffer > | update_points (const std::string &name, const float *data, int stride, int num_points, const ShaderSetting &shader_setting) |
| template<typename Scalar , int Dim> | |
| std::shared_ptr< glk::PointCloudBuffer > | update_points (const std::string &name, const Eigen::Matrix< Scalar, Dim, 1 > *points, int num_points, const ShaderSetting &shader_setting) |
| template<typename Scalar , int Dim, typename Allocator > | |
| std::shared_ptr< glk::PointCloudBuffer > | update_points (const std::string &name, const std::vector< Eigen::Matrix< Scalar, Dim, 1 >, Allocator > &points, const ShaderSetting &shader_setting) |
| template<typename Scalar , int Dim> | |
| void | update_normal_dists (const std::string &name, const Eigen::Matrix< Scalar, Dim, 1 > *points, const Eigen::Matrix< Scalar, Dim, Dim > *covs, int num_points, float scale, const ShaderSetting &shader_setting) |
| template<typename Scalar , int Dim, typename Alloc1 , typename Alloc2 > | |
| void | update_normal_dists (const std::string &name, const std::vector< Eigen::Matrix< Scalar, Dim, 1 >, Alloc1 > &points, const std::vector< Eigen::Matrix< Scalar, Dim, Dim >, Alloc2 > &covs, float scale, const ShaderSetting &shader_setting) |
| std::shared_ptr< glk::ThinLines > | update_thin_lines (const std::string &name, const float *vertices, const float *colors, int num_vertices, const unsigned int *indices, int num_indices, bool line_strip, const ShaderSetting &shader_setting) |
| template<typename Scalar , int Dim> | |
| std::shared_ptr< glk::ThinLines > | update_thin_lines (const std::string &name, const Eigen::Matrix< Scalar, Dim, 1 > *points, int num_points, bool line_strip, const ShaderSetting &shader_setting) |
| template<typename ScalarV , int DimV, typename ScalarC , int DimC> | |
| std::shared_ptr< glk::ThinLines > | update_thin_lines (const std::string &name, const Eigen::Matrix< ScalarV, DimV, 1 > *points, const Eigen::Matrix< ScalarC, DimC, 1 > *colors, int num_points, bool line_strip, const ShaderSetting &shader_setting) |
| template<typename ScalarV , int DimV, typename ScalarC , int DimC> | |
| std::shared_ptr< glk::ThinLines > | update_thin_lines (const std::string &name, const Eigen::Matrix< ScalarV, DimV, 1 > *points, const Eigen::Matrix< ScalarC, DimC, 1 > *colors, int num_points, const unsigned int *indices, int num_indices, bool line_strip, const ShaderSetting &shader_setting) |
| template<typename Point , typename Alloc > | |
| std::shared_ptr< glk::ThinLines > | update_thin_lines (const std::string &name, const std::vector< Point, Alloc > &points, bool line_strip, const ShaderSetting &shader_setting) |
| template<typename Point , typename Alloc > | |
| std::shared_ptr< glk::ThinLines > | update_thin_lines (const std::string &name, const std::vector< Point, Alloc > &points, const std::vector< unsigned int > &indices, bool line_strip, const ShaderSetting &shader_setting) |
| template<typename Point , typename AllocP , typename Color , typename AllocC > | |
| std::shared_ptr< glk::ThinLines > | update_thin_lines (const std::string &name, const std::vector< Point, AllocP > &points, const std::vector< Color, AllocC > &colors, bool line_strip, const ShaderSetting &shader_setting) |
| template<typename Point , typename AllocP , typename Color , typename AllocC > | |
| std::shared_ptr< glk::ThinLines > | update_thin_lines (const std::string &name, const std::vector< Point, AllocP > &points, const std::vector< Color, AllocC > &colors, const std::vector< unsigned int > &indices, bool line_strip, const ShaderSetting &shader_setting) |
| void | update_icosahedron (const std::string &name, const ShaderSetting &shader_setting) |
| void | update_sphere (const std::string &name, const ShaderSetting &shader_setting) |
| void | update_cube (const std::string &name, const ShaderSetting &shader_setting) |
| void | update_cone (const std::string &name, const ShaderSetting &shader_setting) |
| void | update_frustum (const std::string &name, const ShaderSetting &shader_setting) |
| void | update_coord (const std::string &name, const ShaderSetting &shader_setting) |
| void | update_wire_icosahedron (const std::string &name, const ShaderSetting &shader_setting) |
| void | update_wire_sphere (const std::string &name, const ShaderSetting &shader_setting) |
| void | update_wire_cube (const std::string &name, const ShaderSetting &shader_setting) |
| void | update_wire_cone (const std::string &name, const ShaderSetting &shader_setting) |
| void | update_wire_frustum (const std::string &name, const ShaderSetting &shader_setting) |
Protected Attributes | |
| std::string | context_name |
| Eigen::Vector2i | canvas_rect_min |
| Eigen::Vector2i | canvas_rect_max |
| std::unique_ptr< guik::GLCanvas > | canvas |
| guik::ShaderSetting | global_shader_setting |
| bool | show_window |
| bool | draw_xy_grid |
| bool | decimal_rendering |
| Eigen::Matrix4f | last_projection_view_matrix |
| std::unordered_map< std::string, std::function< bool(const std::string &)> > | drawable_filters |
| std::unordered_map< std::string, std::pair< ShaderSetting::Ptr, glk::Drawable::ConstPtr > > | drawables |
| std::mutex | sub_texts_mutex |
| std::deque< std::string > | sub_texts |
| std::unordered_map< std::string, std::function< void()> > | sub_ui_callbacks |
| guik::LightViewerContext::LightViewerContext | ( | const std::string & | context_name | ) |
|
virtual |
|
virtual |
Reimplemented in guik::LightViewer.
| AsyncLightViewerContext guik::LightViewerContext::async | ( | ) |
|
inline |
|
inline |
|
inline |
|
virtual |
Reimplemented in guik::LightViewer.
| void guik::LightViewerContext::clear_drawable_filters | ( | ) |
| void guik::LightViewerContext::clear_drawables | ( | ) |
| void guik::LightViewerContext::clear_drawables | ( | const std::function< bool(const std::string &)> & | fn | ) |
| void guik::LightViewerContext::clear_partial_rendering | ( | ) |
|
virtual |
Reimplemented in guik::LightViewer.
| const glk::Texture & guik::LightViewerContext::color_buffer | ( | ) | const |
| const glk::Texture & guik::LightViewerContext::depth_buffer | ( | ) | const |
| void guik::LightViewerContext::disable_partial_rendering | ( | ) |
|
inline |
| void guik::LightViewerContext::draw_gl | ( | ) |
| void guik::LightViewerContext::draw_ui | ( | ) |
| const glk::Texture & guik::LightViewerContext::dynamic_flag_buffer | ( | ) | const |
| void guik::LightViewerContext::enable_decimal_rendering | ( | ) |
| void guik::LightViewerContext::enable_info_buffer | ( | ) |
| void guik::LightViewerContext::enable_normal_buffer | ( | ) |
| void guik::LightViewerContext::enable_partial_rendering | ( | double | clear_thresh = 1e-6 | ) |
|
inline |
| std::pair< ShaderSetting::Ptr, glk::Drawable::ConstPtr > guik::LightViewerContext::find_drawable | ( | const std::string & | name | ) |
| const std::shared_ptr< CameraControl > & guik::LightViewerContext::get_camera_control | ( | ) | const |
| guik::GLCanvas & guik::LightViewerContext::get_canvas | ( | ) |
| std::unordered_map< std::string, std::pair< ShaderSetting::Ptr, glk::Drawable::ConstPtr > > & guik::LightViewerContext::get_drawables | ( | ) |
| const std::shared_ptr< ProjectionControl > & guik::LightViewerContext::get_projection_control | ( | ) | const |
| const std::shared_ptr< glk::ScreenEffect > & guik::LightViewerContext::get_screen_effect | ( | ) | const |
| void guik::LightViewerContext::hide | ( | ) |
| const glk::Texture & guik::LightViewerContext::info_buffer | ( | ) | const |
| bool guik::LightViewerContext::info_buffer_enabled | ( | ) | const |
| bool guik::LightViewerContext::init_canvas | ( | const Eigen::Vector2i & | size | ) |
| bool guik::LightViewerContext::load_camera_settings | ( | const std::string & | path | ) |
| void guik::LightViewerContext::lookat | ( | const Eigen::Vector3f & | pt | ) |
|
inline |
| const glk::Texture & guik::LightViewerContext::normal_buffer | ( | ) | const |
| bool guik::LightViewerContext::normal_buffer_enabled | ( | ) | const |
| bool guik::LightViewerContext::partial_rendering_enabled | ( | ) | const |
| float guik::LightViewerContext::pick_depth | ( | const Eigen::Vector2i & | p, |
| int | window = 2 |
||
| ) | const |
| Eigen::Vector4i guik::LightViewerContext::pick_info | ( | const Eigen::Vector2i & | p, |
| int | window = 2 |
||
| ) | const |
| std::optional< Eigen::Vector3f > guik::LightViewerContext::pick_point | ( | int | button = 0, |
| int | window = 2, |
||
| Eigen::Vector4i * | info = nullptr |
||
| ) | const |
|
inline |
| std::vector< unsigned char > guik::LightViewerContext::read_color_buffer | ( | ) | const |
| std::vector< float > guik::LightViewerContext::read_depth_buffer | ( | bool | real_scale = true | ) |
| void guik::LightViewerContext::register_drawable_filter | ( | const std::string & | filter_name, |
| const std::function< bool(const std::string &)> & | filter = 0 |
||
| ) |
|
virtual |
Reimplemented in guik::LightViewer.
| void guik::LightViewerContext::remove_drawable | ( | const std::regex & | regex | ) |
| void guik::LightViewerContext::remove_drawable | ( | const std::string & | name | ) |
| void guik::LightViewerContext::remove_drawable_filter | ( | const std::string & | filter_name | ) |
| void guik::LightViewerContext::remove_ui_callback | ( | const std::string & | name | ) |
| void guik::LightViewerContext::reset_center | ( | ) |
| bool guik::LightViewerContext::save_camera_settings | ( | const std::string & | path | ) | const |
| bool guik::LightViewerContext::save_color_buffer | ( | const std::string & | filename | ) |
| bool guik::LightViewerContext::save_depth_buffer | ( | const std::string & | filename, |
| bool | real_scale = true |
||
| ) |
| void guik::LightViewerContext::set_bg_texture | ( | const std::shared_ptr< glk::Texture > & | bg_texture | ) |
| void guik::LightViewerContext::set_camera_control | ( | const std::shared_ptr< CameraControl > & | camera_control | ) |
| void guik::LightViewerContext::set_clear_color | ( | const Eigen::Vector4f & | color | ) |
| void guik::LightViewerContext::set_colormap | ( | glk::COLORMAP | colormap | ) |
| void guik::LightViewerContext::set_draw_xy_grid | ( | bool | draw_xy_grid | ) |
| void guik::LightViewerContext::set_point_shape | ( | float | point_size = 1.0f, |
| bool | metric = true, |
||
| bool | circle = true |
||
| ) |
| void guik::LightViewerContext::set_pos | ( | const Eigen::Vector2i & | pos, |
| ImGuiCond | cond = ImGuiCond_FirstUseEver, |
||
| ImGuiWindowFlags | = 0 |
||
| ) |
| void guik::LightViewerContext::set_projection_control | ( | const std::shared_ptr< ProjectionControl > & | projection_control | ) |
| void guik::LightViewerContext::set_rainbow_axis | ( | const Eigen::Vector3f & | axis | ) |
| void guik::LightViewerContext::set_rainbow_range | ( | const Eigen::Vector2f & | minmax_z | ) |
| void guik::LightViewerContext::set_screen_effect | ( | const std::shared_ptr< glk::ScreenEffect > & | effect | ) |
| void guik::LightViewerContext::set_size | ( | const Eigen::Vector2i & | size | ) |
|
inline |
|
inline |
| void guik::LightViewerContext::show | ( | ) |
| Eigen::Vector3f guik::LightViewerContext::unproject | ( | const Eigen::Vector2i & | p, |
| float | depth | ||
| ) | const |
| void guik::LightViewerContext::update_cone | ( | const std::string & | name, |
| const ShaderSetting & | shader_setting | ||
| ) |
| void guik::LightViewerContext::update_coord | ( | const std::string & | name, |
| const ShaderSetting & | shader_setting | ||
| ) |
| void guik::LightViewerContext::update_cube | ( | const std::string & | name, |
| const ShaderSetting & | shader_setting | ||
| ) |
| void guik::LightViewerContext::update_drawable | ( | const std::string & | name, |
| const glk::Drawable::ConstPtr & | drawable, | ||
| const ShaderSetting & | shader_setting = ShaderSetting() |
||
| ) |
| void guik::LightViewerContext::update_frustum | ( | const std::string & | name, |
| const ShaderSetting & | shader_setting | ||
| ) |
| void guik::LightViewerContext::update_icosahedron | ( | const std::string & | name, |
| const ShaderSetting & | shader_setting | ||
| ) |
| void guik::LightViewerContext::update_normal_dists | ( | const std::string & | name, |
| const Eigen::Matrix< Scalar, Dim, 1 > * | points, | ||
| const Eigen::Matrix< Scalar, Dim, Dim > * | covs, | ||
| int | num_points, | ||
| float | scale, | ||
| const ShaderSetting & | shader_setting | ||
| ) |
| void guik::LightViewerContext::update_normal_dists | ( | const std::string & | name, |
| const std::vector< Eigen::Matrix< Scalar, Dim, 1 >, Alloc1 > & | points, | ||
| const std::vector< Eigen::Matrix< Scalar, Dim, Dim >, Alloc2 > & | covs, | ||
| float | scale, | ||
| const ShaderSetting & | shader_setting | ||
| ) |
| std::shared_ptr< glk::PointCloudBuffer > guik::LightViewerContext::update_points | ( | const std::string & | name, |
| const Eigen::Matrix< Scalar, Dim, 1 > * | points, | ||
| int | num_points, | ||
| const ShaderSetting & | shader_setting | ||
| ) |
| std::shared_ptr< glk::PointCloudBuffer > guik::LightViewerContext::update_points | ( | const std::string & | name, |
| const float * | data, | ||
| int | stride, | ||
| int | num_points, | ||
| const ShaderSetting & | shader_setting | ||
| ) |
| std::shared_ptr< glk::PointCloudBuffer > guik::LightViewerContext::update_points | ( | const std::string & | name, |
| const std::vector< Eigen::Matrix< Scalar, Dim, 1 >, Allocator > & | points, | ||
| const ShaderSetting & | shader_setting | ||
| ) |
| void guik::LightViewerContext::update_sphere | ( | const std::string & | name, |
| const ShaderSetting & | shader_setting | ||
| ) |
| std::shared_ptr< glk::ThinLines > guik::LightViewerContext::update_thin_lines | ( | const std::string & | name, |
| const Eigen::Matrix< Scalar, Dim, 1 > * | points, | ||
| int | num_points, | ||
| bool | line_strip, | ||
| const ShaderSetting & | shader_setting | ||
| ) |
| std::shared_ptr< glk::ThinLines > guik::LightViewerContext::update_thin_lines | ( | const std::string & | name, |
| const Eigen::Matrix< ScalarV, DimV, 1 > * | points, | ||
| const Eigen::Matrix< ScalarC, DimC, 1 > * | colors, | ||
| int | num_points, | ||
| bool | line_strip, | ||
| const ShaderSetting & | shader_setting | ||
| ) |
| std::shared_ptr< glk::ThinLines > guik::LightViewerContext::update_thin_lines | ( | const std::string & | name, |
| const Eigen::Matrix< ScalarV, DimV, 1 > * | points, | ||
| const Eigen::Matrix< ScalarC, DimC, 1 > * | colors, | ||
| int | num_points, | ||
| const unsigned int * | indices, | ||
| int | num_indices, | ||
| bool | line_strip, | ||
| const ShaderSetting & | shader_setting | ||
| ) |
| std::shared_ptr< glk::ThinLines > guik::LightViewerContext::update_thin_lines | ( | const std::string & | name, |
| const float * | vertices, | ||
| const float * | colors, | ||
| int | num_vertices, | ||
| const unsigned int * | indices, | ||
| int | num_indices, | ||
| bool | line_strip, | ||
| const ShaderSetting & | shader_setting | ||
| ) |
| std::shared_ptr< glk::ThinLines > guik::LightViewerContext::update_thin_lines | ( | const std::string & | name, |
| const std::vector< Point, Alloc > & | points, | ||
| bool | line_strip, | ||
| const ShaderSetting & | shader_setting | ||
| ) |
| std::shared_ptr< glk::ThinLines > guik::LightViewerContext::update_thin_lines | ( | const std::string & | name, |
| const std::vector< Point, Alloc > & | points, | ||
| const std::vector< unsigned int > & | indices, | ||
| bool | line_strip, | ||
| const ShaderSetting & | shader_setting | ||
| ) |
| std::shared_ptr< glk::ThinLines > guik::LightViewerContext::update_thin_lines | ( | const std::string & | name, |
| const std::vector< Point, AllocP > & | points, | ||
| const std::vector< Color, AllocC > & | colors, | ||
| bool | line_strip, | ||
| const ShaderSetting & | shader_setting | ||
| ) |
| std::shared_ptr< glk::ThinLines > guik::LightViewerContext::update_thin_lines | ( | const std::string & | name, |
| const std::vector< Point, AllocP > & | points, | ||
| const std::vector< Color, AllocC > & | colors, | ||
| const std::vector< unsigned int > & | indices, | ||
| bool | line_strip, | ||
| const ShaderSetting & | shader_setting | ||
| ) |
| void guik::LightViewerContext::update_wire_cone | ( | const std::string & | name, |
| const ShaderSetting & | shader_setting | ||
| ) |
| void guik::LightViewerContext::update_wire_cube | ( | const std::string & | name, |
| const ShaderSetting & | shader_setting | ||
| ) |
| void guik::LightViewerContext::update_wire_frustum | ( | const std::string & | name, |
| const ShaderSetting & | shader_setting | ||
| ) |
| void guik::LightViewerContext::update_wire_icosahedron | ( | const std::string & | name, |
| const ShaderSetting & | shader_setting | ||
| ) |
| void guik::LightViewerContext::update_wire_sphere | ( | const std::string & | name, |
| const ShaderSetting & | shader_setting | ||
| ) |
| std::shared_ptr< ArcBallCameraControl > guik::LightViewerContext::use_arcball_camera_control | ( | double | distance = 80.0, |
| double | theta = 0.0, |
||
| double | phi = -60.0f *M_PI/180.0f |
||
| ) |
| std::shared_ptr< FPSCameraControl > guik::LightViewerContext::use_fps_camera_control | ( | double | fovy_deg = 60.0 | ) |
| std::shared_ptr< OrbitCameraControlXY > guik::LightViewerContext::use_orbit_camera_control | ( | double | distance = 80.0, |
| double | theta = 0.0, |
||
| double | phi = -60.0f *M_PI/180.0f |
||
| ) |
| std::shared_ptr< OrbitCameraControlXZ > guik::LightViewerContext::use_orbit_camera_control_xz | ( | double | distance = 80.0, |
| double | theta = 0.0, |
||
| double | phi = 0.0 |
||
| ) |
| std::shared_ptr< TopDownCameraControl > guik::LightViewerContext::use_topdown_camera_control | ( | double | distance = 80.0, |
| double | theta = 0.0 |
||
| ) |
|
inline |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |