text: /****************************************************************************
    Copyright (c) 2014 cocos2d-x.org
    Copyright (c) 2014-2016 Chukong Technologies Inc.
    Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
    Copyright (c) 2017 Wilson E. Alvarez <wilson.e.alvarez1@gmail.com>
  
  http://www.cocos2d-x.org
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files (the "Software"), to deal
  in the Software without restriction, including without limitation the rights
  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  copies of the Software, and to permit persons to whom the Software is
  furnished to do so, subject to the following conditions:
  
  The above copyright notice and this permission notice shall be included in
  all copies or substantial portions of the Software.
  
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  THE SOFTWARE.
   ****************************************************************************/
  
  #include "base/CCController.h"
  
  #if (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX || CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
  #include <functional>
  #include "base/ccMacros.h"
  #include "base/CCDirector.h"
  #include "base/CCScheduler.h"
  #include "base/CCEventController.h"
  #include "glfw3.h"
  
  NS_CC_BEGIN
  
  class CC_DLL ControllerImpl
  {
  	public:
  
  		ControllerImpl()
  		{
  			//FIXME: Once GLFW 3.3 is bundled with cocos2d-x and no extra
  			//controllers have been added here, remove all the code here.  If
  			//extra controllers were added, make sure to add them to the SDL
  			//Controller Database at
  			//https://github.com/gabomdq/SDL_GameControllerDB which GLFW uses
  			//for providing the new gamepad API. We are going to map the GLFW
  			//game pad events to Controller::Key key codes.
  
  
  			// Note: the controllers input profile were taken from the
  			// RetroArch joypad autoconfig project at:
  			// https://github.com/libretro/retroarch-joypad-autoconfig/tree/master/udev
  
  			// The configuration files were parsed into C++ code with:
  			// https://github.com/Rubonnek/retroarch-joypad-config-to-cpp-mapper
  			// which provides the following mapping from the RetroArch
  			// configuration variables towards the cocos2d::Controller::Key key
  			// codes.  Hardware-wise, the mapping goes from a theoretical SNES
  			// controller with extra joysticks and shoulder buttons, towards an
  			// Xbox-like controller which is widely common on mobile phones.
  
  			// RetroArch variable    ->   Cocos2D-X equivalent
  			// input_a_btn           ->   Controller::Key::BUTTON_B
  			// input_b_btn           ->   Controller::Key::BUTTON_A
  			// input_down_btn        ->   Controller::Key::BUTTON_DPAD_DOWN
  			// input_l2_axis         ->   Controller::Key::AXIS_LEFT_TRIGGER
  			// input_l3_btn          ->   Controller::Key::BUTTON_LEFT_THUMBSTICK
  			// input_l_btn           ->   Controller::Key::BUTTON_LEFT_SHOULDER
  			// input_l_x_minus_axis  ->   Controller::Key::JOYSTICK_LEFT_X
  			// input_l_y_minus_axis  ->   Controller::Key::JOYSTICK_LEFT_Y
  			// input_left_btn        ->   Controller::Key::BUTTON_DPAD_LEFT
  			// input_r2_axis         ->   Controller::Key::AXIS_RIGHT_TRIGGER
  			// input_r3_btn          ->   Controller::Key::BUTTON_RIGHT_THUMBSTICK
  			// input_r_btn           ->   Controller::Key::BUTTON_RIGHT_SHOULDER
  			// input_r_x_minus_axis  ->   Controller::Key::JOYSTICK_RIGHT_X
  			// input_r_y_minus_axis  ->   Controller::Key::JOYSTICK_RIGHT_Y
  			// input_right_btn       ->   Controller::Key::BUTTON_DPAD_RIGHT
  			// input_select_btn      ->   Controller::Key::BUTTON_SELECT
  			// input_start_btn       ->   Controller::Key::BUTTON_START
  			// input_up_btn          ->   Controller::Key::BUTTON_DPAD_UP
  			// input_x_btn           ->   Controller::Key::BUTTON_Y
  			// input_y_btn           ->   Controller::Key::BUTTON_X
  
  			// Preliminary support is added for 169 controllers, but on some
  			// cases the mapping provided might not be correct and has to be
  			// manually adjusted.
  
  
  			// Create the necessary variables:
  			std::string deviceName = "2Axes 11Keys Game  Pad";
  			std::unordered_map<int,int> buttonInputMap;
  			std::unordered_map<int,int> axisInputMap;
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo FC30 GamePad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo FC30 II";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo FC30 II Joystick";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "FC30               FC30  Joystick";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo NES30 GamePad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo NES30 GamePad Joystick";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "NES30              NES30 Joystick";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo SFC30 GamePad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo SFC30 GamePad Joystick";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "SFC30              SFC30 Joystick";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo SNES30 GamePad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo SNES30 GamePad Joystick";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "SNES30             SNES30 Joy    ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo Joy";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[11] = Controller::Key::BUTTON_A;
  			buttonInputMap[14] = Controller::Key::BUTTON_X;
  			buttonInputMap[21] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[22] = Controller::Key::BUTTON_START;
  			buttonInputMap[12] = Controller::Key::BUTTON_B;
  			buttonInputMap[15] = Controller::Key::BUTTON_Y;
  			buttonInputMap[17] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[18] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo JoyStick    8Bitdo Joy    ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo N64 GamePad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo N64         8Bitdo N64     ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[5] = Controller::Key::BUTTON_DPAD_LEFT;
  			axisInputMap[4] = Controller::Key::BUTTON_DPAD_RIGHT;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo FC30 Pro";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[13] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[14] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo FC30 Pro    8Bitdo FC30 Pro";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[13] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[14] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  			axisInputMap[7] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[7] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[5] = Controller::Key::BUTTON_DPAD_LEFT;
  			axisInputMap[4] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo NES30 Pro";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[13] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[14] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo NES30 Pro Joystick";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[13] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[14] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo NES30 Pro   8Bitdo NES30 Pro";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[13] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[14] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  			axisInputMap[7] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[7] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[5] = Controller::Key::BUTTON_DPAD_LEFT;
  			axisInputMap[4] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "8Bitdo Zero GamePad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "raphnet.net (S)NES Atari USB";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[5] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[4] = Controller::Key::BUTTON_B;
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[8] = Controller::Key::BUTTON_Y;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[3] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[2] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "ACRUX QuanBa Arcade JoyStick 1008";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[5] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[4] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Afterglow controller for PS3";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Afterglow Gamepad for Xbox 360";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "BLISS-BOX 4PLAY PORT";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[5] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[14] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[15] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[16] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[17] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[7] = Controller::Key::BUTTON_B;
  			buttonInputMap[6] = Controller::Key::BUTTON_Y;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[18] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[19] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "ControlBlock Arcade Gamepad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[5] = Controller::Key::BUTTON_X;
  			buttonInputMap[11] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[10] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[2] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[3] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[8] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[9] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "ControlBlock SNES Gamepad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "ShanWan USB WirelessGamepad ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			//axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			//axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "DragonRise Inc.   Generic   USB  Joystick  ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "DragonRise Inc. PC TWIN SHOCK Gamepad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			//axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			//axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Performance Designed Products EA SPORTS Controller for PS3";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "USB GAMEPAD 8116";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[4] = Controller::Key::AXIS_LEFT_TRIGGER;
  			//axisInputMap[4] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "G27 Racing Wheel";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[11] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[8] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[7] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[6] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[21] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[19] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[5] = Controller::Key::JOYSTICK_LEFT_Y;
  			//axisInputMap[0] = Controller::Key::JOYSTICK_RIGHT_X;
  			//axisInputMap[5] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Gamegirl Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[1] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[2] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[3] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[4] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[5] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[7] = Controller::Key::BUTTON_Y;
  			buttonInputMap[8] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[10] = Controller::Key::BUTTON_A;
  			buttonInputMap[11] = Controller::Key::BUTTON_DPAD_LEFT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Gamtec.,Ltd SmartJoy PLUS Adapter";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[9] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[8] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			//axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			//axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Gasia Co.,Ltd PS(R) Gamepad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[14] = Controller::Key::BUTTON_A;
  			buttonInputMap[15] = Controller::Key::BUTTON_X;
  			buttonInputMap[0] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[3] = Controller::Key::BUTTON_START;
  			buttonInputMap[4] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[6] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[7] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[5] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[13] = Controller::Key::BUTTON_B;
  			buttonInputMap[12] = Controller::Key::BUTTON_Y;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[1] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[2] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "GEN GAME S3";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[9] = Controller::Key::BUTTON_A;
  			buttonInputMap[12] = Controller::Key::BUTTON_X;
  			buttonInputMap[19] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[20] = Controller::Key::BUTTON_START;
  			buttonInputMap[10] = Controller::Key::BUTTON_B;
  			buttonInputMap[13] = Controller::Key::BUTTON_Y;
  			buttonInputMap[15] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[16] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[22] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[23] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Generic X-Box pad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "ShanWan Gioteck PS3 Wired Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Gravis Destroyer Tiltpad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[4] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[5] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			//buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			//buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			//buttonInputMap[4] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			//buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "GreenAsia Inc.    USB Joystick     ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			//axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			//axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "GreenAsia Inc.      USB  Joystick  ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "HJZ Mayflash WiiU Pro Game Controller Adapter";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "HORI CO.,LTD. Fighting Commander 4";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[5] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "HORI CO.,LTD. Fighting Commander";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Hori Fighting Stick EX2";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "HORI CO.,LTD. Fighting Stick mini 4";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "HORIPAD ONE";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "HORI CO.,LTD  PAD A";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "HORI CO.,LTD. REAL ARCADE PRO.3";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "HORI CO.,LTD. Real Arcade Pro.4";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "BUFFALO BSGP1601 Series ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[5] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[14] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[15] = Controller::Key::BUTTON_START;
  			buttonInputMap[3] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  			buttonInputMap[8] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "USB,2-axis 8-button gamepad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "ION iCade";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[9] = Controller::Key::BUTTON_A;
  			buttonInputMap[6] = Controller::Key::BUTTON_X;
  			buttonInputMap[5] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[4] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[3] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[1] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[2] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[8] = Controller::Key::BUTTON_B;
  			buttonInputMap[7] = Controller::Key::BUTTON_Y;
  			buttonInputMap[11] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "ipega classic gamepad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[19] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[20] = Controller::Key::BUTTON_START;
  			buttonInputMap[10] = Controller::Key::BUTTON_B;
  			buttonInputMap[13] = Controller::Key::BUTTON_Y;
  			buttonInputMap[9] = Controller::Key::BUTTON_A;
  			buttonInputMap[12] = Controller::Key::BUTTON_X;
  			buttonInputMap[15] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[16] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[22] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[23] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[5] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[4] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Jess Tech Colour Rumble Pad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[3] = Controller::Key::BUTTON_B;
  			buttonInputMap[1] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[6] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Jess Tech Dual Analog Rumble Pad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[3] = Controller::Key::BUTTON_B;
  			buttonInputMap[1] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[6] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "kadevice.com KADE - Kick Ass Dynamic Encoder";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Logic3 Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Logitech ChillStream PS3/USB Corded Gamepad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Logitech Logitech Cordless RumblePad 2";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Logitech Logitech Dual Action";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Logitech Gamepad F310";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Logitech Gamepad F510";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Logitech Gamepad F710";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Logitech Logitech(R) Precision(TM) Gamepad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			//axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			//axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_Y;
  			//axisInputMap[0] = Controller::Key::JOYSTICK_RIGHT_X;
  			//axisInputMap[0] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Logitech Logitech RumblePad 2 USB";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			axisInputMap[4] = Controller::Key::JOYSTICK_LEFT_X;
  			//axisInputMap[4] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Logitech WingMan Action Pad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Mad catz Inc. Mad Catz FightPad PRO PS3";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Mad catz Inc. Mad Catz FightPad PRO PS4";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[5] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Mad Catz FightStick TE2+ PS3";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Mad Catz FightStick TE2+ PS4";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Mad Catz Wired Xbox 360 Controller (SFIV)";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[5] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Mad Catz Xbox 360 Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "  MAYFLASH Arcade Fightstick F300";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "MAYFLASH Arcade Fightstick F300";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "HuiJia  USB GamePad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[12] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[14] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[15] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[13] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[3] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[4] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[5] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Mega World Thrustmaster dual analog 3.2";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[1] = Controller::Key::BUTTON_X;
  			buttonInputMap[11] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[10] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[6] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[8] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[9] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Mega World USB 2-Axis 8-Button Gamepad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[1] = Controller::Key::BUTTON_X;
  			buttonInputMap[5] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[6] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Microntek              USB Joystick          ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			//axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			//axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Microsoft SideWinder Dual Strike USB version 1.0";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[3] = Controller::Key::BUTTON_A;
  			buttonInputMap[1] = Controller::Key::BUTTON_X;
  			buttonInputMap[5] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[4] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Microsoft® Microsoft® SideWinder® Game Pad USB";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[9] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[8] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[5] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[2] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Microsoft® Microsoft® SideWinder® Plug & Play Game Pad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Microsoft X-Box 360 pad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Microsoft X-Box One Elite pad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Microsoft X-Box One pad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Microsoft X-Box One pad (Firmware 2015)";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Microsoft X-Box One S pad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Microsoft X-Box pad (Japan)";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[5] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[2] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[8] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[9] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Microsoft X-Box pad v1 (US)";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[5] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[2] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[8] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[9] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Microsoft X-Box pad v2 (US)";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[5] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[2] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[8] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[9] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "MOCUTE-032_B43-0F1E";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[13] = Controller::Key::BUTTON_A;
  			buttonInputMap[15] = Controller::Key::BUTTON_X;
  			//buttonInputMap[] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[21] = Controller::Key::BUTTON_START;
  			buttonInputMap[12] = Controller::Key::BUTTON_B;
  			buttonInputMap[14] = Controller::Key::BUTTON_Y;
  			buttonInputMap[19] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[17] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			//buttonInputMap[] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			//buttonInputMap[] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			//axisInputMap[] = Controller::Key::JOYSTICK_LEFT_X;
  			//axisInputMap[] = Controller::Key::JOYSTICK_LEFT_Y;
  			//axisInputMap[] = Controller::Key::JOYSTICK_RIGHT_X;
  			//axisInputMap[] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "MOSIC      SPEED-LINK Competition Pro ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[1] = Controller::Key::BUTTON_START;
  			buttonInputMap[3] = Controller::Key::BUTTON_SELECT;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "MOSIC      USB 2A8K  GamePad          ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[3] = Controller::Key::BUTTON_B;
  			buttonInputMap[1] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "WiseGroup.,Ltd MP-8800 Quad USB Joypad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[9] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[8] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "WiseGroup.,Ltd MP-8866 Dual USB Joypad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[9] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[8] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "MY-POWER CO.,LTD. 2In1 USB Joystick";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Nintendo Clovercon - controller1";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[11] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[12] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[13] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[14] = Controller::Key::BUTTON_DPAD_DOWN;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Nintendo Clovercon - controller2";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[11] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[12] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[13] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[14] = Controller::Key::BUTTON_DPAD_DOWN;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Nintendo Wii Remote Pro Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[13] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[14] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[15] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[16] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[11] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[12] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Nintendo Wii Remote";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[4] = Controller::Key::BUTTON_A;
  			buttonInputMap[7] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[3] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[5] = Controller::Key::BUTTON_B;
  			buttonInputMap[6] = Controller::Key::BUTTON_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Nintendo Wii Remote Classic Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[5] = Controller::Key::BUTTON_A;
  			buttonInputMap[7] = Controller::Key::BUTTON_X;
  			buttonInputMap[14] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[13] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[3] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[1] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[2] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[4] = Controller::Key::BUTTON_B;
  			buttonInputMap[6] = Controller::Key::BUTTON_Y;
  			buttonInputMap[9] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[8] = Controller::Key::BUTTON_LEFT_SHOULDER;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "NVIDIA Corporation NVIDIA Controller v01.04";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[8] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[5] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[4] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "NVIDIA Corporation NVIDIA Controller v01.03";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[4] = Controller::Key::BUTTON_A;
  			buttonInputMap[6] = Controller::Key::BUTTON_X;
  			buttonInputMap[3] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[5] = Controller::Key::BUTTON_B;
  			buttonInputMap[7] = Controller::Key::BUTTON_Y;
  			buttonInputMap[8] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[12] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[13] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[5] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[4] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "OUYA Game Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[3] = Controller::Key::BUTTON_A;
  			buttonInputMap[4] = Controller::Key::BUTTON_X;
  			buttonInputMap[9] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[10] = Controller::Key::BUTTON_START;
  			buttonInputMap[11] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[12] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[13] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[14] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[6] = Controller::Key::BUTTON_B;
  			buttonInputMap[5] = Controller::Key::BUTTON_Y;
  			buttonInputMap[7] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[8] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			//buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			//buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "USB,4-Axis,12-Button with POV";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "playsega controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[3] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "PLAYSTATION(R)3Conteroller-PANHAI";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[14] = Controller::Key::BUTTON_A;
  			buttonInputMap[15] = Controller::Key::BUTTON_X;
  			buttonInputMap[0] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[3] = Controller::Key::BUTTON_START;
  			buttonInputMap[4] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[6] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[7] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[5] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[13] = Controller::Key::BUTTON_B;
  			buttonInputMap[12] = Controller::Key::BUTTON_Y;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[1] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[2] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Pro Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Qnyx Snes Replica";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			//buttonInputMap[] = Controller::Key::BUTTON_DPAD_UP;
  			//buttonInputMap[] = Controller::Key::BUTTON_DPAD_DOWN;
  			//buttonInputMap[] = Controller::Key::BUTTON_DPAD_LEFT;
  			//buttonInputMap[] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			//buttonInputMap[] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			//buttonInputMap[] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			//axisInputMap[] = Controller::Key::JOYSTICK_RIGHT_X;
  			//axisInputMap[] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "raphnet.net 4nes4snes";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[4] = Controller::Key::BUTTON_START;
  			buttonInputMap[5] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[6] = Controller::Key::BUTTON_A;
  			buttonInputMap[7] = Controller::Key::BUTTON_B;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "raphnet.net Saturn_Adapter_2.0";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[1] = Controller::Key::BUTTON_X;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[5] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Razer Serval";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[5] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[4] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Retrolink Nintento 64 Classic USB";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[8] = Controller::Key::BUTTON_A;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[6] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "retronicdesign.com Sega Joypad Adapter v3.0";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[3] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "RetroUSB.com RetroPad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[3] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "RetroUSB.com SNES RetroPort";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[2] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[3] = Controller::Key::BUTTON_START;
  			buttonInputMap[5] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Rock Candy Gamepad for PS3";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Saitek Cyborg Rumble Pad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "SAITEK P880";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[4] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[5] = Controller::Key::BUTTON_START;
  			buttonInputMap[3] = Controller::Key::BUTTON_B;
  			buttonInputMap[1] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[8] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[9] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[5] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[5] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[4] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[4] = Controller::Key::BUTTON_DPAD_RIGHT;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Saitek P990 Dual Analog Pad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[9] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[8] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Saitek PLC Saitek P2600 Rumble Force Pad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[9] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[8] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Saitek Saitek X52 Flight Control System";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[30] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[6] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[18] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[16] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[5] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Samsung Game Pad EI-GP20";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[11] = Controller::Key::BUTTON_A;
  			buttonInputMap[14] = Controller::Key::BUTTON_X;
  			buttonInputMap[21] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[22] = Controller::Key::BUTTON_START;
  			buttonInputMap[12] = Controller::Key::BUTTON_B;
  			buttonInputMap[15] = Controller::Key::BUTTON_Y;
  			buttonInputMap[17] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[18] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "CYPRESS USB Gamepad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Smartjoy Family Super Smartjoy 2";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[4] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[5] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "SNES-to-Gamepad Device";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "PLAYSTATION(R)3 Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[14] = Controller::Key::BUTTON_A;
  			buttonInputMap[15] = Controller::Key::BUTTON_X;
  			buttonInputMap[0] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[3] = Controller::Key::BUTTON_START;
  			buttonInputMap[4] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[6] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[7] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[5] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[13] = Controller::Key::BUTTON_B;
  			buttonInputMap[12] = Controller::Key::BUTTON_Y;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[1] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[2] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Sony Computer Entertainment Wireless Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[14] = Controller::Key::BUTTON_A;
  			buttonInputMap[15] = Controller::Key::BUTTON_X;
  			buttonInputMap[0] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[3] = Controller::Key::BUTTON_START;
  			buttonInputMap[4] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[6] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[7] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[5] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[13] = Controller::Key::BUTTON_B;
  			buttonInputMap[12] = Controller::Key::BUTTON_Y;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[1] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[2] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Sony PLAYSTATION(R)3 Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[14] = Controller::Key::BUTTON_A;
  			buttonInputMap[15] = Controller::Key::BUTTON_X;
  			buttonInputMap[0] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[3] = Controller::Key::BUTTON_START;
  			buttonInputMap[4] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[6] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[7] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[5] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[13] = Controller::Key::BUTTON_B;
  			buttonInputMap[12] = Controller::Key::BUTTON_Y;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[1] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[2] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Wireless Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[11] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[12] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Sony Interactive Entertainment Wireless Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[5] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Steam Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			//buttonInputMap[0] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			//buttonInputMap[2] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[6] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[7] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Street Fighter IV FightPad";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			//axisInputMap[DPad Up] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[DPad Down] = Controller::Key::BUTTON_DPAD_DOWN;
  			//axisInputMap[DPad Left] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[DPad Right] = Controller::Key::BUTTON_DPAD_RIGHT;
  			//axisInputMap[Right Trigger] = Controller::Key::AXIS_RIGHT_TRIGGER;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Thrustmaster Dual Trigger 3-in-1";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[5] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "THRUSTMASTER FireStorm Dual Analog 2";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[1] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[6] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			//buttonInputMap[8] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			//buttonInputMap[9] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "THRUSTMASTER FireStorm Dual Power 2 ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[1] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[6] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Thrustmaster T Mini";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[1] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[6] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Thrustmaster T Mini Wireless";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "THRUSTMASTER Top Gun Fox 2  Pro ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[6] = Controller::Key::BUTTON_X;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "PC Game Controller       ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[4] = Controller::Key::BUTTON_A;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[5] = Controller::Key::BUTTON_B;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "TOMMO NEOGEOX Arcade Stick";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Toodles 2008 ChImp PC/PS3 Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[5] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Twin USB Joystick";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			//axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			//axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "USB,2-axis 8-button gamepad  ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "USB gamepad           ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "USB Gamepad ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "usb gamepad           ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "USB Joystick ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			//axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			//axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "USB Vibration Joystick";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[12] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[14] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[15] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[13] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Venom Limited PS3/PS4 Arcade Joystick";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[2] = Controller::Key::BUTTON_B;
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Wii U GameCube Adapter Port 1";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[3] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[8] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[9] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[10] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[11] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[1] = Controller::Key::BUTTON_Y;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "WiseGroup.,Ltd SmartJoy Dual PLUS Adapter";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[9] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[8] = Controller::Key::BUTTON_START;
  			buttonInputMap[12] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[14] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[15] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[13] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  			//axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			//axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Xarcade-to-Gamepad Device";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[3] = Controller::Key::BUTTON_A;
  			buttonInputMap[0] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[4] = Controller::Key::BUTTON_B;
  			buttonInputMap[1] = Controller::Key::BUTTON_Y;
  			buttonInputMap[2] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[1] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[1] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[0] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[0] = Controller::Key::BUTTON_DPAD_RIGHT;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Xbox 360 Wireless Receiver";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[13] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[14] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[11] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[12] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Xbox 360 Wireless Receiver (XBOX)";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[13] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[14] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[11] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[12] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Wireless Xbox 360 Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[13] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[14] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[11] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[12] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[2] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[4] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  			// Prepare variables:
  			deviceName = "Xbox Gamepad (userspace driver)";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[11] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[12] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[5] = Controller::Key::BUTTON_DPAD_UP;
  			//axisInputMap[5] = Controller::Key::BUTTON_DPAD_DOWN;
  			axisInputMap[4] = Controller::Key::BUTTON_DPAD_LEFT;
  			//axisInputMap[4] = Controller::Key::BUTTON_DPAD_RIGHT;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Xbox 360 Controller";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[2] = Controller::Key::BUTTON_X;
  			buttonInputMap[6] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[7] = Controller::Key::BUTTON_START;
  			buttonInputMap[13] = Controller::Key::BUTTON_DPAD_UP;
  			buttonInputMap[14] = Controller::Key::BUTTON_DPAD_DOWN;
  			buttonInputMap[11] = Controller::Key::BUTTON_DPAD_LEFT;
  			buttonInputMap[12] = Controller::Key::BUTTON_DPAD_RIGHT;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[3] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[4] = Controller::Key::AXIS_LEFT_TRIGGER;
  			axisInputMap[5] = Controller::Key::AXIS_RIGHT_TRIGGER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  			// Prepare variables:
  			deviceName = "SL-6566";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[1] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[0] = Controller::Key::BUTTON_B;
  			buttonInputMap[2] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Gamesir-G3s";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[13] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[14] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "xiaoji Gamesir-G3s 1.02";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[13] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[14] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Gamesir-G3v";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[13] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[14] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "xiaoji Gamesir-G3v 1.00";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[10] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[13] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[14] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "小米蓝牙手柄";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[4] = Controller::Key::BUTTON_A;
  			buttonInputMap[7] = Controller::Key::BUTTON_X;
  			buttonInputMap[14] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[15] = Controller::Key::BUTTON_START;
  			buttonInputMap[5] = Controller::Key::BUTTON_B;
  			buttonInputMap[8] = Controller::Key::BUTTON_Y;
  			buttonInputMap[10] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[11] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[17] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[18] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[5] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "USB Game Device";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[8] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[9] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[4] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[5] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Zeemote: SteelSeries FREE";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[0] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[12] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[11] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[4] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  
  
  			// Prepare variables:
  			deviceName = "Zeroplus PS Vibration Feedback Converter ";
  			buttonInputMap.clear();
  			axisInputMap.clear();
  
  
  			// Map the controller inputs to Controller::Key codes
  			buttonInputMap[2] = Controller::Key::BUTTON_A;
  			buttonInputMap[3] = Controller::Key::BUTTON_X;
  			buttonInputMap[11] = Controller::Key::BUTTON_SELECT;
  			buttonInputMap[8] = Controller::Key::BUTTON_START;
  			buttonInputMap[1] = Controller::Key::BUTTON_B;
  			buttonInputMap[0] = Controller::Key::BUTTON_Y;
  			buttonInputMap[6] = Controller::Key::BUTTON_LEFT_SHOULDER;
  			buttonInputMap[7] = Controller::Key::BUTTON_RIGHT_SHOULDER;
  			buttonInputMap[9] = Controller::Key::BUTTON_LEFT_THUMBSTICK;
  			buttonInputMap[10] = Controller::Key::BUTTON_RIGHT_THUMBSTICK;
  			axisInputMap[0] = Controller::Key::JOYSTICK_LEFT_X;
  			axisInputMap[1] = Controller::Key::JOYSTICK_LEFT_Y;
  			axisInputMap[3] = Controller::Key::JOYSTICK_RIGHT_X;
  			axisInputMap[2] = Controller::Key::JOYSTICK_RIGHT_Y;
  
  
  			// Add the controller profile to the map
  			s_controllerProfiles.insert(std::make_pair(deviceName, std::make_pair(buttonInputMap, axisInputMap)));
  		}
  
  
  		~ControllerImpl()
  		{
  			// If there are any controllers connected that were not deleted at the end of execution, delete them.
  			// This wil prevent any memory leaks showing up in valgrind
  			for ( auto& controller : Controller::s_allController )
  			{
  				delete controller;
  			}
  			Controller::s_allController.clear();
  		}
  
  		static ControllerImpl* getInstance()
  		{
  			static ControllerImpl instance;
  			return &instance;
  		}
  
  		static std::vector<Controller*>::iterator findController(int deviceId)
  		{
  			// When controllers are disconnected, GLFW cannot provide their names. We only get their deviceId.
  			auto iter = std::find_if(Controller::s_allController.begin(), Controller::s_allController.end(),
  									 [&](Controller* controller)
  									 {
  										 return deviceId == controller->_deviceId;
  									 }
  									);
  			return iter;
  		}
  
  		static void onConnected(const std::string& deviceName, int deviceId)
  		{
  			// Check whether the controller is already registered
  			auto iter = findController(deviceId);
  			if (iter != Controller::s_allController.end())
  				return;
  
  			// It's a new controller being connected.
  			auto controller = new cocos2d::Controller();
  			controller->_deviceId = deviceId;
  			controller->_deviceName = deviceName;
  			Controller::s_allController.push_back(controller);
  
  			// Check if we already have an available input controller profile. If so, attach it it to the controller.
  			for (const auto & it : s_controllerProfiles)
  			{
  				if ( deviceName.compare(it.first) == 0 )
  				{
  					// Found controller profile. Attach it to the controller:
  					CCLOG("ControllerImpl: Found input profile for controller: %s", deviceName.c_str());
  					controller->_buttonInputMap = it.second.first;
  					controller->_axisInputMap = it.second.second;
  
  
  					// Show a one-time warning in debug mode for every button that's currently not matched in the input profile.
  					// This will let the developers know that the mapping must be included in the constructor of ControllerImpl located above.
  					#ifdef COCOS2D_DEBUG
  					int count;
  					glfwGetJoystickButtons(deviceId, &count);
  					for ( int i = 0; i < count; ++i )
  					{
  						// Check the mapping of each button:
  						const auto & it = controller->_buttonInputMap.find(i);
  						if ( it == controller->_buttonInputMap.end() )
  						{
  							CCLOG("ControllerImpl: Could not find a button input mapping for controller \"%s\", and keyCode \"%d\". This keyCode will not match any from Controller::Key", controller->getDeviceName().c_str(), i);
  						}
  					}
  
  					glfwGetJoystickAxes(deviceId, &count);
  					for ( int i = 0; i < count; ++i )
  					{
  						// Check the mapping of each axis
  						const auto & it = controller->_axisInputMap.find(i);
  						if ( it == controller->_axisInputMap.end() )
  						{
  							CCLOG("ControllerImpl: Could not find an axis input mapping for controller \"%s\", and keyCode \"%d\". This keyCode will not match any from Controller::Key", controller->getDeviceName().c_str(), i);
  						}
  					}
  					#endif
  
  					break;
  				}
  			}
  
  			// Show a warning if the controller input profile is non-existent:
  			#ifdef COCOS2D_DEBUG
  			if ( controller->_buttonInputMap.empty() )
  			{
  				CCLOG("ControllerImpl: Could not find a button input map for controller: %s", deviceName.c_str());
  			}
  
  			if ( controller->_axisInputMap.empty() )
  			{
  				CCLOG("ControllerImpl: Could not find an axis input map for controller: %s", deviceName.c_str());
  			}
  			#endif
  
  			controller->onConnected();
  		}
  
  		static void onDisconnected(int deviceId)
  		{
  			// Check whether the controller is already registered
  			auto iter = findController(deviceId);
  			if (iter == Controller::s_allController.end())
  			{
  				CCLOGERROR("ControllerImpl Error: Could not find the controller!");
  				return;
  			}
  
  			(*iter)->onDisconnected();
  			Controller::s_allController.erase(iter);
  		}
  
  		static void onButtonEvent(int deviceId, int keyCode, bool isPressed, float value, bool isAnalog)
  		{
  			auto iter = findController(deviceId);
  			if (iter == Controller::s_allController.end())
  			{
  				CCLOG("ControllerImpl::onButtonEvent: new controller detected. Registering...");
  				onConnected(glfwGetJoystickName(deviceId), deviceId);
  				iter = findController(deviceId);
  			}
  
  			(*iter)->onButtonEvent(keyCode, isPressed, value, isAnalog);
  		}
  
  		static void onAxisEvent(int deviceId, int axisCode, float value, bool isAnalog)
  		{
  			auto iter = findController(deviceId);
  			if (iter == Controller::s_allController.end())
  			{
  				CCLOG("ControllerImpl::onAxisEvent: new controller detected. Registering...");
  				onConnected(glfwGetJoystickName(deviceId), deviceId);
  				iter = findController(deviceId);
  			}
  
  			(*iter)->onAxisEvent(axisCode, value, isAnalog);
  		}
  
  		static void handleConnectionsAndDisconnections(int deviceId, int event)
  		{
  			// glfw supports up to 16 game controllers
  			// Handle game controller connections and disconnections
  			if ( event == GLFW_CONNECTED )
  			{
  				onConnected(glfwGetJoystickName(deviceId), deviceId);
  			}
  			else if ( event == GLFW_DISCONNECTED )
  			{
  				ControllerImpl::getInstance()->onDisconnected(deviceId);
  			}
  			#ifdef COCOS2D_DEBUG
  			else
  			{
  				CCLOG("ControllerImpl: Unhandled GLFW joystick event: %d", event);
  			}
  			#endif
  		}
  
  		void update(float /*dt*/)
  		{
  			for (int deviceId = GLFW_JOYSTICK_1;  deviceId <= GLFW_JOYSTICK_LAST;  ++deviceId)
  			{
  				if ( glfwJoystickPresent(deviceId) )
  				{
  					auto controller = Controller::getControllerByDeviceId(deviceId);
  
  					// Poll game controller button presses
  					int count;
  					const unsigned char* buttonArray = glfwGetJoystickButtons(deviceId, &count);
  					for ( int i = 0; i < count; ++i )
  					{
  						// Map the button to the Controller:Key keys from the controller profile if it's available:
  						int keyCode = i;
  						const auto & it = controller->_buttonInputMap.find(keyCode);
  						if ( it != controller->_buttonInputMap.end() )
  						{
  							keyCode = it->second;
  						}
  						ControllerImpl::onButtonEvent(deviceId, keyCode, buttonArray[i] == GLFW_PRESS, 0, false);
  					}
  
  					// Poll game controller joystick axis
  					const float * axisArray = glfwGetJoystickAxes(deviceId, &count);
  					for ( int i = 0; i < count; ++i )
  					{
  						// Map the axis to the Controller:Key keys from the controller profile if it's available:
  						int keyCode = i;
  						const auto & it = controller->_axisInputMap.find(keyCode);
  						if ( it != controller->_axisInputMap.end() )
  						{
  							keyCode = it->second;
  						}
  						ControllerImpl::onAxisEvent(deviceId, keyCode, axisArray[i], true);
  					}
  				}
  			}
  		}
  
  	private:
  		//FIXME: Once GLFW 3.3 is bundled with cocos2d-x, remove these
  		//controller profiles and all the related code.  We will only need to
  		//provide a mapping from the GLFW gamepad key codes to the
  		//Controller::Key keycodes. So far an std::unordered_map<int,int>
  		//should suffice.
  		static std::map<std::string, std::pair< std::unordered_map<int, int>, std::unordered_map<int, int> > > s_controllerProfiles;
  };
  
  std::map<std::string, std::pair< std::unordered_map<int, int>, std::unordered_map<int, int> > > ControllerImpl::s_controllerProfiles;
  
  void Controller::startDiscoveryController()
  {
  	// Check for existing josyticks and register them as cocos2d::Controller:
  	for (int deviceId = GLFW_JOYSTICK_1;  deviceId <= GLFW_JOYSTICK_LAST;  ++deviceId)
  	{
  		if (glfwJoystickPresent(deviceId))
  		{
  			int axis_count, button_count;
  			glfwGetJoystickAxes(deviceId, &axis_count);
  			glfwGetJoystickButtons(deviceId, &button_count);
  			const char* name = glfwGetJoystickName(deviceId);
  			ControllerImpl::onConnected(name, deviceId);
  		}
  	}
  
  	// GFLW sends events when a joystick is connected and disconnected only.
  	// These events need to be filtered:
  	glfwSetJoystickCallback(ControllerImpl::handleConnectionsAndDisconnections);
  
  	// Poll the joystick axis and buttons
  	Director::getInstance()->getScheduler()->scheduleUpdate(ControllerImpl::getInstance(), 0, false);
  }
  
  void Controller::stopDiscoveryController()
  {
  	Director::getInstance()->getScheduler()->unscheduleUpdate(ControllerImpl::getInstance());
  	glfwSetJoystickCallback(nullptr);
  
  	// Also remove all the connected controllers:
  	for ( auto& controller : Controller::s_allController )
  	{
  		delete controller;
  	}
  	Controller::s_allController.clear();
  }
  
  void Controller::registerListeners()
  {
  }
  
  bool Controller::isConnected() const
  {
  	// If there is a controller instance, it means that the controller is connected.
  	// If a controller is disconnected, the instance will be destroyed.
  	// Thus, always returns true for this method.
  	return true;
  }
  
  Controller::Controller()
  	: _controllerTag(TAG_UNSET)
  	, _impl(nullptr)
  	, _connectEvent(nullptr)
  	, _keyEvent(nullptr)
  	  , _axisEvent(nullptr)
  {
  	init();
  }
  
  Controller::~Controller()
  {
  	delete _connectEvent;
  	delete _keyEvent;
  	delete _axisEvent;
  }
  
  
  NS_CC_END
  
  #endif // #if (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX || CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
  