MIR_CLIENT_9 {
 global:
    mir_arrow_cursor_name;
    mir_buffer_stream_get_current_buffer;
    mir_buffer_stream_get_egl_native_window;
    mir_buffer_stream_get_graphics_region;
    mir_buffer_stream_get_platform_type;
    mir_buffer_stream_is_valid;
    mir_buffer_stream_release;
    mir_buffer_stream_release_sync;
    mir_buffer_stream_swap_buffers;
    mir_buffer_stream_swap_buffers_sync;
    mir_busy_cursor_name;
    mir_caret_cursor_name;
    mir_closed_hand_cursor_name;
    mir_connect;
    mir_connection_api_impl;
    mir_connection_apply_display_config;
    mir_connection_create_buffer_stream;
    mir_connection_create_buffer_stream_sync;
    mir_connection_create_display_config;
    mir_connection_create_prompt_session_sync;
    mir_connection_create_screencast_sync;
    mir_connection_create_spec_for_changes;
    mir_connection_create_spec_for_dialog;
    mir_connection_create_spec_for_input_method;
    mir_connection_create_spec_for_menu;
    mir_connection_create_spec_for_modal_dialog;
    mir_connection_create_spec_for_normal_surface;
    mir_connection_create_spec_for_tooltip;
    mir_connection_get_available_surface_formats;
    mir_connection_get_egl_native_display;
    mir_connection_get_error_message;
    mir_connection_get_platform;
    mir_connection_is_valid;
    mir_connection_platform_operation;
    mir_connection_release;
    mir_connection_set_display_config_change_callback;
    mir_connection_set_lifecycle_event_callback;
    mir_connect_sync;
    mir_create_surface_spec;
    mir_cursor_configuration_destroy;
    mir_cursor_configuration_from_buffer_stream;
    mir_cursor_configuration_from_name;
    mir_default_cursor_name;
    mir_diagonal_resize_bottom_to_top_cursor_name;
    mir_diagonal_resize_top_to_bottom_cursor_name;
    mir_disabled_cursor_name;
    mir_display_config_destroy;
    mir_event_get_close_surface_event;
    mir_event_get_input_configuration_event;
    mir_event_get_input_event;
    mir_event_get_keymap_event;
    mir_event_get_orientation_event;
    mir_event_get_prompt_session_event;
    mir_event_get_resize_event;
    mir_event_get_surface_event;
    mir_event_get_type;
    mir_event_ref;
    mir_event_unref;
    mir_horizontal_resize_cursor_name;
    mir_hsplit_resize_cursor_name;
    mir_input_configuration_event_get_action;
    mir_input_configuration_event_get_device_id;
    mir_input_configuration_event_get_time;
    mir_input_event_get_device_id;
    mir_input_event_get_event_time;
    mir_input_event_get_keyboard_event;
    mir_input_event_get_pointer_event;
    mir_input_event_get_touch_event;
    mir_input_event_get_type;
    mir_keyboard_event_action;
    mir_keyboard_event_key_code;
    mir_keyboard_event_modifiers;
    mir_keyboard_event_scan_code;
    mir_keymap_event_get_rules;
    mir_omnidirectional_resize_cursor_name;
    mir_open_hand_cursor_name;
    mir_orientation_event_get_direction;
    mir_persistent_id_is_valid;
    mir_persistent_id_release;
    mir_platform_message_create;
    mir_platform_message_get_data;
    mir_platform_message_get_fds;
    mir_platform_message_get_opcode;
    mir_platform_message_release;
    mir_platform_message_set_data;
    mir_platform_message_set_fds;
    mir_pointer_event_action;
    mir_pointer_event_axis_value;
    mir_pointer_event_buttons;
    mir_pointer_event_button_state;
    mir_pointer_event_modifiers;
    mir_pointing_hand_cursor_name;
    mir_prompt_session_error_message;
    mir_prompt_session_event_get_state;
    mir_prompt_session_is_valid;
    mir_prompt_session_new_fds_for_prompt_providers;
    mir_prompt_session_release_sync;
    mir_resize_event_get_height;
    mir_resize_event_get_width;
    mir_screencast_get_buffer_stream;
    mir_screencast_release_sync;
    mir_surface_apply_spec;
    mir_surface_configure_cursor;
    mir_surface_create;
    mir_surface_create_sync;
    mir_surface_event_get_attribute;
    mir_surface_event_get_attribute_value;
    mir_surface_get_buffer_stream;
    mir_surface_get_dpi;
    mir_surface_get_error_message;
    mir_surface_get_focus;
    mir_surface_get_orientation;
    mir_surface_get_parameters;
    mir_surface_get_preferred_orientation;
    mir_surface_get_state;
    mir_surface_get_swapinterval;
    mir_surface_get_type;
    mir_surface_get_visibility;
    mir_surface_is_valid;
    mir_surface_release;
    mir_surface_release_sync;
    mir_surface_request_persistent_id;
    mir_surface_request_persistent_id_sync;
    mir_surface_set_event_handler;
    mir_surface_set_preferred_orientation;
    mir_surface_set_state;
    mir_surface_set_swapinterval;
    mir_surface_spec_release;
    mir_surface_spec_set_buffer_usage;
    mir_surface_spec_set_fullscreen_on_output;
    mir_surface_spec_set_height;
    mir_surface_spec_set_height_increment;
    mir_surface_spec_set_max_aspect_ratio;
    mir_surface_spec_set_max_height;
    mir_surface_spec_set_max_width;
    mir_surface_spec_set_min_aspect_ratio;
    mir_surface_spec_set_min_height;
    mir_surface_spec_set_min_width;
    mir_surface_spec_set_name;
    mir_surface_spec_set_parent;
    mir_surface_spec_set_pixel_format;
    mir_surface_spec_set_preferred_orientation;
    mir_surface_spec_set_state;
    mir_surface_spec_set_streams;
    mir_surface_spec_set_type;
    mir_surface_spec_set_width;
    mir_surface_spec_set_width_increment;
    mir_touch_event_action;
    mir_touch_event_axis_value;
    mir_touch_event_id;
    mir_touch_event_modifiers;
    mir_touch_event_point_count;
    mir_touch_event_tooltype;
    mir_vertical_resize_cursor_name;
    mir_vsplit_resize_cursor_name;
    mir_wait_for;
    mir_wait_for_one;
 local: *;
};

MIR_CLIENT_9.1 {  # New functions in Mir 0.15
  global:
    mir_connection_pong;
    mir_connection_set_ping_event_callback;
    mir_crosshair_cursor_name;
    mir_keyboard_event_input_event;
    mir_persistent_id_as_string;
    mir_persistent_id_from_string;
    mir_pointer_event_input_event;
    mir_touch_event_input_event;
    mir_surface_spec_attach_to_foreign_parent;
    mir_surface_spec_set_input_shape;
    mir_connection_get_egl_pixel_format;
  local: *;
} MIR_CLIENT_9;

MIR_CLIENT_9.2 {  # New functions in Mir 0.16
  global:
    mir_surface_spec_set_event_handler;
  local: *;
} MIR_CLIENT_9.1;

MIR_CLIENT_9v17 {
    mir_blob_from_display_configuration;
    mir_blob_size;
    mir_blob_data;
    mir_blob_release;
    mir_blob_onto_buffer;
    mir_blob_to_display_configuration;
    mir_blob_release;
    mir_buffer_stream_set_scale;
    mir_buffer_stream_set_scale_sync;
    mir_event_get_surface_output_event;
    mir_surface_output_event_get_dpi;
    mir_surface_output_event_get_form_factor;
    mir_surface_output_event_get_scale;
} MIR_CLIENT_9.2;

MIR_CLIENT_9v18 {
  global:
    mir_buffer_stream_get_error_message;
    mir_surface_output_event_get_output_id;
    mir_connection_set_base_display_config;
  local:
    *;
} MIR_CLIENT_9v17;

MIR_CLIENT_9v19 {
  global:
    mir_connection_get_graphics_module;
    mir_surface_raise;
    mir_input_event_has_cookie;
    mir_cookie_buffer_size;
    mir_input_event_get_cookie;
    mir_cookie_to_buffer;
    mir_cookie_from_buffer;
    mir_cookie_release;
    mir_keymap_event_get_keymap_buffer;
    mir_keymap_event_get_device_id;
    mir_surface_spec_set_shell_chrome;
} MIR_CLIENT_9v18;

MIR_CLIENT_0.21 {
  global:
    mir_connection_apply_display_configuration;
    mir_connection_create_display_configuration;
    mir_connection_create_input_config;
    mir_connection_set_input_config_change_callback;
    mir_display_config_get_max_simultaneous_outputs;
    mir_display_config_get_num_outputs;
    mir_display_config_get_output;
    mir_display_config_release;
    mir_input_config_destroy;
    mir_input_config_device_count;
    mir_input_config_get_device;
    mir_input_config_get_device_by_id;
    mir_input_config_get_mutable_device;
    mir_input_config_get_mutable_device_by_id;
    mir_input_device_get_capabilities;
    mir_input_device_get_id;
    mir_input_device_get_name;
    mir_input_device_get_unique_id;
    mir_output_get_connection_state;
    mir_output_get_current_mode;
    mir_output_get_current_pixel_format;
    mir_output_get_form_factor;
    mir_output_get_id;
    mir_output_get_mode;
    mir_output_get_num_modes;
    mir_output_get_num_pixel_formats;
    mir_output_get_orientation;
    mir_output_get_physical_height_mm;
    mir_output_get_physical_width_mm;
    mir_output_get_pixel_format;
    mir_output_get_position_x;
    mir_output_get_position_y;
    mir_output_get_power_mode;
    mir_output_get_preferred_mode;
    mir_output_get_scale_factor;
    mir_output_get_type;
    mir_output_is_enabled;
    mir_output_mode_get_height;
    mir_output_mode_get_refresh_rate;
    mir_output_mode_get_width;
  local:
    *;
} MIR_CLIENT_9v19;

MIR_CLIENT_DETAIL_9 {
  global:
    extern "C++" { 
      mir::events::make_event*;
      mir::events::add_touch*;
      mir::input::android::Lexicon::translate*;
      mir::input::android::android_modifiers_from_mir*;
      mir::input::android::mir_modifiers_from_android*;
      mir::input::android::mir_keyboard_action_from_android*;
      mir::input::android::android_keyboard_action_from_mir*;
      mir::input::android::mir_pointer_buttons_from_android*;
      mir::input::android::android_pointer_buttons_from_mir*;
      mir::input::android::mir_tool_type_from_android*;
      mir::input::android::android_tool_type_from_mir*;
      mir::input::android::mir_pointer_action_from_masked_android*;
      mir::input::android::mir_touch_action_from_masked_android*;
      mir::input::android::android_source_id_is_pointer_device*;
      mir::input::android::extract_android_action_from*;
      mir::client::DefaultConnectionConfiguration::DefaultConnectionConfiguration*;
      mir::client::DefaultConnectionConfiguration::the_surface_map*;
      mir::client::DefaultConnectionConfiguration::the_rpc_channel*;
      mir::client::DefaultConnectionConfiguration::the_logger*;
      mir::client::DefaultConnectionConfiguration::the_input_platform*;
      mir::client::DefaultConnectionConfiguration::the_display_configuration*;
      mir::client::DefaultConnectionConfiguration::the_lifecycle_control*;
      mir::client::DefaultConnectionConfiguration::the_ping_handler*;
      mir::client::DefaultConnectionConfiguration::the_event_sink*;
      mir::client::DefaultConnectionConfiguration::the_event_handler_register*;
      mir::client::DefaultConnectionConfiguration::the_socket_file*;
      mir::client::DefaultConnectionConfiguration::the_rpc_report*;
      mir::client::DefaultConnectionConfiguration::the_input_receiver_report*;
      typeinfo?for?mir::client::DefaultConnectionConfiguration;
      vtable?for?mir::client::DefaultConnectionConfiguration;
      mir::operator???std::ostream???Mir*
    }; 
};

MIR_CLIENT_DETAIL_9v18 {
  global:
    extern "C++" { 
      mir::client::DefaultConnectionConfiguration::the_input_devices*;
      mir::events::set_modifier*;
      mir::events::set_cursor_position*;
      mir::events::set_button_state*;
    };
} MIR_CLIENT_DETAIL_9;

MIR_CLIENT_DETAIL_9v19 {
  global:
    extern "C++" { 
      mir::input::android::android_pointer_action_from_mir*;
      mir::events::serialize_event*;
      mir::events::deserialize_event*;
    };
} MIR_CLIENT_DETAIL_9v18;

MIR_CLIENT_DETAIL_0.21 {
  global:
    extern "C++" { 
      mir::client::DefaultConnectionConfiguration::the_buffer_factory*;
    };
} MIR_CLIENT_DETAIL_9v19;

MIR_CLIENT_DETAIL_private_buffer_semantics {
  global:
    mir_buffer_get_fence;
    mir_buffer_associate_fence;
    mir_buffer_wait_fence;
    mir_buffer_get_native_buffer;
    mir_buffer_get_graphics_region;
    mir_buffer_release;
    mir_connection_create_presentation_chain_sync;
    mir_presentation_chain_is_valid;
    mir_presentation_chain_get_error_message;
    mir_connection_create_presentation_chain;
    mir_presentation_chain_allocate_buffer;
    mir_presentation_chain_submit_buffer;
    mir_presentation_chain_release;
    mir_surface_spec_add_presentation_chain;
    mir_surface_spec_add_buffer_stream;
    mir_buffer_get_width;
    mir_buffer_get_height;
    mir_buffer_get_pixel_format;
    mir_buffer_get_buffer_usage;
  local:
    *;
} MIR_CLIENT_DETAIL_9v19;
