added support for several w3c data spec properties
authorKevron Rees <kevron.m.rees@intel.com>
Fri, 31 Oct 2014 17:26:44 +0000 (10:26 -0700)
committerKevron Rees <kevron.m.rees@intel.com>
Fri, 31 Oct 2014 17:26:44 +0000 (10:26 -0700)
12 files changed:
ambd/main.cpp
docs/CMakeLists.txt
docs/amb.idl
lib/abstractpropertytype.h
lib/vehicleproperty.cpp
lib/vehicleproperty.h
plugins/database/databasesink.cpp
plugins/dbus/dbusinterfacemanager.cpp
plugins/dbus/runningstatus.h
xwalk/CMakeLists.txt
xwalk/vehicle_api.cc
xwalk/vehicle_api.js

index 5c6bb9d..6d91e5b 100644 (file)
@@ -37,7 +37,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
 #include <QCoreApplication>
 
-#else 
+#else
 
 #include <glib.h>
 
@@ -54,7 +54,7 @@ void interrupt(int sign)
 {
        signal(sign, SIG_IGN);
        cout<<"Signal caught. Exiting gracefully.\n"<<endl;
-       
+
        /// this will cause the application to terminate and clean up:
        delete mainloop;
 }
@@ -83,7 +83,7 @@ void printVersion()
        DebugOut(0)<<"Version: "<<PROJECT_VERSION<<" ( "<<PROJECT_CODENAME<<" "<<PROJECT_QUALITY<<" )"<<endl;
 }
 
-int main(int argc, char **argv) 
+int main(int argc, char **argv)
 {
 
        bool isdeamonize=false;
@@ -100,7 +100,7 @@ int main(int argc, char **argv)
                        case 'D':
                                isdeamonize = true;
                                break;
-                               
+
                        case 'v':
                                printVersion();
                                return (0);
@@ -129,10 +129,10 @@ int main(int argc, char **argv)
                                break;
                }
        }
-       
+
        if(isdeamonize)
                daemonize();
-       
+
        if(!logfn.empty())
        {
                logfile.open(logfn, ios::out | ios::trunc);
@@ -151,14 +151,14 @@ int main(int argc, char **argv)
 #endif
 
        VehicleProperty::factory();
-       
+
        PluginLoader loader(config, argc, argv);
-       
+
        if(!loader.sources().size())
        {
                throw std::runtime_error("No sources present. aborting");
        }
-               
+
        mainloop = loader.mainloop();
 
        /* Register signal handler */
@@ -166,8 +166,6 @@ int main(int argc, char **argv)
        signal(SIGTERM, interrupt);
 
        mainloop->exec();
-       
-       VehicleProperty::shutdown();
 
        if(logfile.is_open())
                logfile.close();
index 4a2af48..69e99af 100644 (file)
@@ -3,4 +3,7 @@ if(enable_docs)
   install (DIRECTORY dbus DESTINATION ${DOC_INSTALL_DIR} COMPONENT Docs)
   install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/amb.idl DESTINATION ${DOC_INSTALL_DIR}/dbus/html/ COMPONENT Docs)
   add_custom_target(doc_idl ALL mkdir -p ${CMAKE_CURRENT_SOURCE_DIR}/dbus/html/ && cp ${CMAKE_CURRENT_SOURCE_DIR}/amb.idl ${CMAKE_CURRENT_SOURCE_DIR}/dbus/html/amb.idl WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Moving amb.idl" VERBATIM)
+
+  configure_file (${CMAKE_CURRENT_SOURCE_DIR}/amb.idl ${CMAKE_CURRENT_SOURCE_DIR}/amb.idl @ONLY)
+
 endif(enable_docs)
index 529b331..941ae7e 100644 (file)
@@ -199,19 +199,19 @@ interface org.automotive.TripMeter extends VehiclePropertyType  {
 interface org.automotive.Acceleration extends VehiclePropertyType  {
 
   /*!  X
-   *   \brief  Must return acceleration on the "X" axis as 1/1000 G (gravitational force).
+   *   \brief  return acceleration on the "X" axis (Unit: centimeters per second squared)
    */
-  attribute UInt16 X readonly
+  attribute Int16 X readonly
 
   /*!  Y
-   *   \brief  Must return acceleration on the "Y" axis as 1/1000 G (gravitational force).
+   *   \brief  return acceleration on the "Y" axis (Unit: centimeters per second squared)
    */
-  attribute UInt16 Y readonly
+  attribute Int16 Y readonly
 
   /*!  Z
-   *   \brief  Must return acceleration on the "Z" axis as 1/1000 G (gravitational force).
+   *   \brief  return acceleration on the "Z" axis (Unit: centimeters per second squared)
    */
-  attribute UInt16 Z readonly
+  attribute Int16 Z readonly
 }
 
 enumeration TransmissionMode {
@@ -224,7 +224,7 @@ enumeration TransmissionMode {
 }
 
 /*! TransmissionPosition
- * \brief Describes Transmission Pistion.  Deprecated.  Will disappear in 0.13
+ * \brief Describes Transmission Pistion.  Deprecated.  Will disappear in 0.14
  */
 enumeration TransmissionPosition {
   Neutral = 0,
@@ -280,7 +280,7 @@ interface org.automotive.Transmission extends VehiclePropertyType  {
 interface org.automotive.CruiseControlStatus extends VehiclePropertyType  {
 
   /*!  Activated
-   *   \brief  Must return whether or not the Cruise Control system is active (true) or inactive (false)
+   *   \brief  Must return whether or not the Cruise Control system is active (true) or inactive (false). Depricated.  Remove in 0.14.  Use "Status"
    */
    attribute Boolean Activated readonly
 
@@ -288,10 +288,15 @@ interface org.automotive.CruiseControlStatus extends VehiclePropertyType  {
    *   \brief  Must return target Cruise Control speed in kilometers per hour (kph).
    */
    attribute UInt16 Speed readonly
+
+  /*!  Status
+   *   \brief  Must return whether or not the Cruise Control system is active (true) or inactive (false).
+   */
+   attribute Boolean Status readonly
 }
 
 /*!
- * Deprecated.  Use BrakeOperation.  Remove in 0.13
+ * Deprecated.  Use BrakeOperation.  Remove in 0.14
  */
 interface org.automotive.WheelBrake extends VehiclePropertyType  {
 
@@ -314,71 +319,76 @@ interface org.automotive.LightStatus extends VehiclePropertyType  {
   /*!  Head
    *   \brief  Must return headlight status: on = true, off = false.
    */
-   attribute Boolean Head readonly
+   attribute Boolean Head
 
   /*!  RightTurn
    *   \brief  Must return right turn signal status: on = true, off = false.
    */
-   attribute Boolean RightTurn readonly
+   attribute Boolean RightTurn
 
   /*!  LeftTurn
    *   \brief  Must return left turn signal status: on = true, off = false.
    */
-   attribute Boolean LeftTurn readonly
+   attribute Boolean LeftTurn
 
   /*!  Brake
    *   \brief  Must return  brake signal light status: on = true, off = false.
    */
-   attribute Boolean Brake readonly
+   attribute Boolean Brake
 
   /*!  Fog
    *   \brief  Must return fog light status: on = true, off = false.
    */
-   attribute Boolean Fog readonly
+   attribute Boolean Fog
 
   /*!  Hazard
    *   \brief  Must return hazard light status: on = true, off = false.
    */
-   attribute Boolean Hazard readonly
+   attribute Boolean Hazard
 
   /*!  Parking
    *   \brief  Must return parking light status: on = true, off = false.
    */
-   attribute Boolean Parking readonly
+   attribute Boolean Parking
 
   /*!  HighBeam
    *   \brief  Must return high beam status: on = true, off = false.
    */
-   attribute Boolean HighBeam readonly
+   attribute Boolean HighBeam
 
   /*!  AutomaticHeadlights
    *   \brief  Must return automatic headlight status: on = true, off = false.
    */
-  attribute Boolean AutomaticHeadlights readonly
+  attribute Boolean AutomaticHeadlights
 
   /*!  DynamicHighBeam
    *   \brief  Must return dynamic high beam status: on = true, off = false.
    */
-  attribute Boolean DynamicHighBeam readonly
+  attribute Boolean DynamicHighBeam
 }
 
 
 interface org.automotive.InteriorLightStatus extends VehiclePropertyType  {
 
   /*!  Passenger
-   *   \brief  Must return passenger interior light status: on = true, off = false
+   *   \brief  Must return passenger interior light status: on = true, off = false. Deprecated.  Remove in 0.14.   Use status and zone.
    */
    attribute Boolean Passenger readonly
 
   /*!  Driver
-   *   \brief  Must return driver interior light status: on = true, off = false
+   *   \brief  Must return driver interior light status: on = true, off = false. Deprecated.  Remove in 0.14.   Use status and zone.
    */
    attribute Boolean Driver readonly
 
   /*!  Center
-   *   \brief  Must return center interior light status: on = true, off = false
+   *   \brief  Must return center interior light status: on = true, off = false. Deprecated.  Remove in 0.14.   Use status and zone.
    */
    attribute Boolean Center readonly
+
+  /*!  Status
+   *   \brief  Must return interior light status for the zone. on = true, off = false
+   */
+    attribute Boolean Status
 }
 
 
@@ -428,29 +438,45 @@ interface org.automotive.Fuel extends VehiclePropertyType  {
    */
    attribute UInt32 FuelConsumedSinceRestart readonly;
 
-  /*!  FuelConsumedSinceRestart
-   *   \brief must return fuel consumed since engine start; (Unit: milliliters per 100 kilometers) resets to 0 each restart
+  /*!  TimeSinceRestart
+   *   \brief must  return time elapsed since vehicle restart (Unit: seconds)
    */
-   attribute UInt32 FuelConsumedSinceRestart readonly;
+   attribute UInt32 TimeSinceRestart readonly;
 }
 
 
 interface org.automotive.EngineOil extends VehiclePropertyType  {
 
   /*!  Remaining
-   *   \brief  Must return remaining engine oil as percentage of fullness.
+   *   \brief Must return remaining engine oil as percentage of fullness.  Deprecated.  Remove in 0.14.  Use "Level"
    */
    attribute UInt16 Remaining readonly
 
   /*!  Temperature
-   *   \brief  Must return Engine Oil Temperature in Celcius.
+   *   \brief Must return Engine Oil Temperature in Celcius.
    */
    attribute long Temperature readonly
 
   /*!  Pressure
-   *   \brief  Must return Engine Oil Pressure in kPa.
+   *   \brief Must return Engine Oil Pressure in kPa.
    */
    attribute UInt16 Pressure readonly
+
+  /*!  Level
+   *   \brief Must return engine oil level (Unit: percentage, 0%: empty, 100%: full
+   */
+   attribute UInt16 Level readonly
+
+  /*!  Change
+   *   \brief Must return engine oil change indicator status: change oil (true) or no change (false)
+   */
+   attribute boolean Change readonly
+
+  /*!  LifeRemaining
+   *   \brief Must return engine oil change indicator status: change oil (true) or no change (false)
+   */
+   attribute boolean LifeRemaining readonly
+
 }
 
 
@@ -492,13 +518,13 @@ interface org.automotive.Temperature extends VehiclePropertyType  {
   /*!  Interior
    *   \brief Must return the temperature of the interior of the vehicle in celcius.
    */
-   /// Deprecated.  Use InteriorTemperature.  Remove in 0.13
+   /// Deprecated.  Use InteriorTemperature.  Remove in 0.14
    attribute signed short Interior readonly
 
   /*!  Exterior
    *   \brief Must return the temperature of the exterior of the vehicle in celcius.
    */
-   /// Deprecated.  Use ExteriorTemperature.  Remove in 0.13
+   /// Deprecated.  Use ExteriorTemperature.  Remove in 0.14
    attribute signed short Exterior readonly
 
   /*!  Interior
@@ -534,7 +560,7 @@ interface org.automotive.WindshieldWiper extends VehiclePropertyType  {
    attribute UInt16 WindshieldWiper readonly
 }
 
-/*! Deprecated.  Use ClimateControl interface.  Remove in 0.13
+/*! Deprecated.  Use ClimateControl interface.  Remove in 0.14
 */
 interface org.automotive.HVAC extends VehiclePropertyType  {
   const UInt16 AIRFLOWDIRECTION_FRONTPANEL = 0;
@@ -653,7 +679,7 @@ interface org.automotive.WindowStatus extends VehiclePropertyType  {
 
   /*!  Defrost
    *   \brief Must return the defroster status of the window. On = true, Off = false.
-   *   Deprecated.  Use Defrost interface.  Remove in 0.13.
+   *   Deprecated.  Use Defrost interface.  Remove in 0.14.
    */
   attribute Boolean Defrost;
 }
@@ -809,7 +835,7 @@ interface org.automotive.Odometer extends VehiclePropertyType  {
   /*!  Odometer
    *   \brief MUST return Distance traveled in km
    */
-   /// Deprecated. Use DistanceTotal.  Remove in 0.13
+   /// Deprecated. Use DistanceTotal.  Remove in 0.14
    attribute UInt32 Odometer readonly
 
   /*!  DistnaceTotal
@@ -843,7 +869,7 @@ interface org.automotive.Fluid extends VehiclePropertyType  {
    attribute UInt16 Washer readonly
 }
 
-/// Deprecated.  Use BatteryStatus.  Remove in 0.13
+/// Deprecated.  Use BatteryStatus.  Remove in 0.14
 interface org.automotive.Battery extends VehiclePropertyType  {
 
   /*!  Voltage
@@ -903,7 +929,7 @@ interface org.automotive.SecurityAlert extends VehiclePropertyType  {
    attribute Boolean SecurityAlert readonly
 }
 
-/// Deprecated.  Use LightStatus.  remove in 0.13
+/// Deprecated.  Use LightStatus.  remove in 0.14
 interface org.automotive.ParkingBrake extends VehiclePropertyType  {
 
   /*!  ParkingBrake
@@ -912,7 +938,7 @@ interface org.automotive.ParkingBrake extends VehiclePropertyType  {
    attribute Boolean ParkingBrake readonly
 }
 
-/// Deprecated.  Use LightStatus.  remove in 0.13
+/// Deprecated.  Use LightStatus.  remove in 0.14
 interface org.automotive.ParkingLight extends VehiclePropertyType  {
 
   /*!  ParkingLight
@@ -921,7 +947,7 @@ interface org.automotive.ParkingLight extends VehiclePropertyType  {
    attribute Boolean ParkingLight readonly
 }
 
-/// Deprecated.  Use LightStatus.  remove in 0.13
+/// Deprecated.  Use LightStatus.  remove in 0.14
 interface org.automotive.HazardLight extends VehiclePropertyType  {
 
   /*!  HazardLight
@@ -977,7 +1003,7 @@ enumeration AirbagStatus {
 }
 
 /*!
- * Deprecated.  Use "Door".  Remove in 0.13
+ * Deprecated.  Use "Door".  Remove in 0.14
  */
 interface org.automotive.DoorStatus extends VehiclePropertyType  {
 
@@ -1062,7 +1088,7 @@ interface org.automotive.NightMode extends VehiclePropertyType {
 
   /*!
    * \brief MUST return whether or not the system is in NightMode or not.  True = Night time, False = Day time
-   * Deprecated.  Will be removed in 0.13. Use "Mode"
+   * Deprecated.  Will be removed in 0.14. Use "Mode"
    */
    attribute Boolean NightMode readonly
 
@@ -1255,12 +1281,101 @@ interface org.automotive.EngineCoolant extends VehiclePropertyType {
   /*!
   * \brief MUST return engine coolant level (Unit: percentage 0%: empty, 100%: full)
   */
-   attribute Uint8 Level readonly
+   attribute Uint16 Level readonly
 
   /*!
   * \brief MUST return engine coolant temperature (Unit: celcius)
   */
-   attribute Uint8 Temperature readonly
+   attribute Int16 Temperature readonly
+}
+
+interface org.automotive.PowertrainTorque extends VehiclePropertyType {
+
+  /*!
+   * \brief must return powertrain torque (Unit: newton meters)
+   */
+   attribute UInt16 Value readonly
+}
+
+interface org.automotive.AcceleratorPedalPosition extends VehiclePropertyType {
+
+  /*!
+   * \brief must  return accelerator pedal position as a percentage (Unit: percentage, 0%: released pedal, 100%: fully depressed)
+   */
+   attribute UInt8 Value readonly
+}
+
+interface org.automotive.WheelTick extends VehiclePropertyType {
+
+  /*!
+   * \brief must return number of ticks per second (Unit: ticks per second)
+   */
+   attribute UInt8 Value readonly
+}
+
+interface IgnitionTime : VehicleCommonDataType {
+   /*!
+    * \brief must return time at ignition on
+    */
+    attribute UInt64 ignitionOnTime readonly
+
+    /*!
+     * \brief must return time at ignition off
+     */
+     attribute UInt64 ignitionOffTime readonly
+};
+
+interface org.automotive.YawRate extends VehiclePropertyType {
+
+  /*!
+   * \brief must return yaw rate of vehicle. (Unit: degrees per second)
+   */
+   attribute Int16 Value readonly
+}
+
+interface org.automotive.BrakeOperation extends VehiclePropertyType {
+
+  /*!
+   * \brief must return whether brake pedal is depressed or not. true: brake pedal is depressed, false: brake pedal is not depressed
+   */
+   attribute Boolean BrakePedalDepressed readonly
+}
+
+enum VehicleButton {
+    home = "home",
+    back = "back",
+    search = "search",
+    call = "call",
+    end_call = "end_call",
+    media_play = "media_play",
+    media_next = "media_next",
+    media_previous = "media_previous",
+    media_pause = "media_pause",
+    voice_recognize = "voice_recognize",
+    enter = "enter",
+    left = "left",
+    right = "right",
+    up = "up",
+    down = "down"
+}
+
+enum PressType {
+    press = "press",
+    long_press = "long_press",
+    release = "release"
+};
+
+interface org.automotive.ButtonEvent extends VehiclePropertyType {
+
+  /*!
+   * \brief must return the button events tha occured. This supports multiple simultanious button events.
+   */
+   attribute array Button of VehicleButton readonly
+
+  /*!
+   * \brief must return the type of event
+   */
+   attribute PressType State readonly
 }
 
 }
index c13cb41..5b7128e 100644 (file)
@@ -291,6 +291,22 @@ public:
 };
 
 template <>
+class GVS<uint8_t>
+{
+public:
+       static const char* signature() { return "q"; }
+
+       static uint16_t value(GVariant* v)
+       {
+               return g_variant_get_uint16(v);
+       }
+       static std::string stringize(std::string v)
+       {
+               return v;
+       }
+};
+
+template <>
 class GVS<uint16_t>
 {
 public:
index 3573ce2..d4cd94c 100644 (file)
@@ -21,6 +21,7 @@
 #include "listplusplus.h"
 #include "debugout.h"
 #include "mappropertytype.hpp"
+#include "superptr.hpp"
 #include <map>
 
 
@@ -34,7 +35,23 @@ using namespace std;
 
 std::map<VehicleProperty::Property, VehicleProperty::PropertyTypeFactoryCallback> VehicleProperty::registeredPropertyFactoryMap;
 
-VehicleProperty* VehicleProperty::thereCanOnlyBeOne = nullptr;
+std::unique_ptr<VehicleProperty> VehicleProperty::thereCanOnlyBeOne(nullptr);
+
+const char* ButtonEvents::W3C::Home = "home";
+const char* ButtonEvents::W3C::Back = "back";
+const char* ButtonEvents::W3C::Search = "search";
+const char* ButtonEvents::W3C::Call = "call";
+const char* ButtonEvents::W3C::EndCall = "end_call";
+const char* ButtonEvents::W3C::MediaPlay = "media_play";
+const char* ButtonEvents::W3C::MediaPause = "media_pause";
+const char* ButtonEvents::W3C::MediaPrevious = "media_previous";
+const char* ButtonEvents::W3C::MediaNext = "media_next";
+const char* ButtonEvents::W3C::VoiceRecognize = "voice_regocnize";
+const char* ButtonEvents::W3C::Enter = "enter";
+const char* ButtonEvents::W3C::Left = "left";
+const char* ButtonEvents::W3C::Right = "right";
+const char* ButtonEvents::W3C::Up = "up";
+const char* ButtonEvents::W3C::Down = "down";
 
 const char* Transmission::W3C::Park = "park";
 const char* Transmission::W3C::Reverse = "reverse";
@@ -82,6 +99,8 @@ const VehicleProperty::Property VehicleProperty::BatteryChargeLevel = "BatteryCh
 const VehicleProperty::Property VehicleProperty::InteriorTemperature = "InteriorTemperature";
 const VehicleProperty::Property VehicleProperty::ExteriorTemperature = "ExteriorTemperature";
 const VehicleProperty::Property VehicleProperty::EngineOilTemperature = "EngineOilTemperature";
+const VehicleProperty::Property VehicleProperty::EngineOilLifeRemaining = "EngineOilLifeRemaining";
+const VehicleProperty::Property VehicleProperty::EngineOilChangeIndicator= "EngineOilChangeIndicator";
 const VehicleProperty::Property VehicleProperty::VIN = "VIN";
 const VehicleProperty::Property VehicleProperty::WMI = "WMI";
 const VehicleProperty::Property VehicleProperty::TirePressure = "TirePressure";
@@ -104,6 +123,7 @@ const VehicleProperty::Property VehicleProperty::LightDynamicHighBeam= "LightDyn
 const VehicleProperty::Property VehicleProperty::InteriorLightDriver = "InteriorLightDriver";
 const VehicleProperty::Property VehicleProperty::InteriorLightCenter = "InteriorLightCenter";
 const VehicleProperty::Property VehicleProperty::InteriorLightPassenger = "InteriorLightPassenger";
+const VehicleProperty::Property VehicleProperty::InteriorLightStatus = "InteriorLightStatus";
 const VehicleProperty::Property VehicleProperty::EngineLoad = "EngineLoad";
 const VehicleProperty::Property VehicleProperty::Horn = "Horn";
 const VehicleProperty::Property VehicleProperty::FuelLevel = "FuelLevel";
@@ -192,6 +212,14 @@ const VehicleProperty::Property VehicleProperty::SeatPositionSideCushion = "Seat
 const VehicleProperty::Property VehicleProperty::DashboardIllumination = "DashboardIllumination";
 const VehicleProperty::Property VehicleProperty::GeneratedVehicleSoundMode = "GeneratedVehicleSoundMode";
 const VehicleProperty::Property VehicleProperty::DriverId = "DriverId";
+const VehicleProperty::Property VehicleProperty::PowertrainTorque = "PowertrainTorque";
+const VehicleProperty::Property VehicleProperty::AcceleratorPedalPosition = "AcceleratorPedalPosition";
+const VehicleProperty::Property VehicleProperty::Chime = "Chime";
+const VehicleProperty::Property VehicleProperty::WheelTick = "WheelTick";
+const VehicleProperty::Property VehicleProperty::IgnitionTimeOn = "IgnitionTimeOn";
+const VehicleProperty::Property VehicleProperty::IgnitionTimeOff = "IgnitionTimeOff";
+const VehicleProperty::Property VehicleProperty::YawRate = "YawRate";
+const VehicleProperty::Property VehicleProperty::ButtonEventW3C = "ButtonEventW3C";
 
 PropertyList VehicleProperty::mCapabilities;
 PropertyList VehicleProperty::mCustomProperties;
@@ -200,41 +228,43 @@ VehicleProperty::VehicleProperty()
 {
        REGISTERPROPERTY( VehicleSpeed, 0);
        REGISTERPROPERTY(EngineSpeed, 0);
-       REGISTERPROPERTY(TransmissionShiftPosition,Transmission::Neutral);
-       REGISTERPROPERTY(TransmissionGearPosition,Transmission::Neutral);
-       REGISTERPROPERTY(TransmissionMode,Transmission::Normal);
-       REGISTERPROPERTY(TransmissionModeW3C,"neutral");
+       REGISTERPROPERTY(TransmissionShiftPosition, Transmission::Neutral);
+       REGISTERPROPERTY(TransmissionGearPosition, Transmission::Neutral);
+       REGISTERPROPERTY(TransmissionMode, Transmission::Normal);
+       REGISTERPROPERTY(TransmissionModeW3C, "neutral");
        REGISTERPROPERTY(ThrottlePosition, 0);
        REGISTERPROPERTY(WheelBrake, false);
-       REGISTERPROPERTY(WheelBrakePressure,0);
-       REGISTERPROPERTY(SteeringWheelAngle,0);
-       REGISTERPROPERTY(SteeringWheelAngleW3C,0);
+       REGISTERPROPERTY(WheelBrakePressure, 0);
+       REGISTERPROPERTY(SteeringWheelAngle, 0);
+       REGISTERPROPERTY(SteeringWheelAngleW3C, 0);
        REGISTERPROPERTY(TurnSignal, TurnSignals::Off);
        REGISTERPROPERTY(ClutchStatus, false);
        REGISTERPROPERTY(EngineOilPressure, 0);
        REGISTERPROPERTY(EngineOilTemperature, 0);
-       REGISTERPROPERTY(EngineOilRemaining,0);
+       REGISTERPROPERTY(EngineOilRemaining, 0);
+       REGISTERPROPERTY(EngineOilLifeRemaining, 0);
+       REGISTERPROPERTY(EngineOilChangeIndicator, false);
        REGISTERPROPERTY(EngineCoolantTemperature, 0);
        REGISTERPROPERTY(EngineCoolantLevel, 0);
        REGISTERPROPERTY(MachineGunTurretStatus, false);
-       REGISTERPROPERTY(AccelerationX,0);
-       REGISTERPROPERTY(AccelerationY,0);
-       REGISTERPROPERTY(AccelerationZ,0);
-       REGISTERPROPERTY(MassAirFlow,0);
+       REGISTERPROPERTY(AccelerationX, 0);
+       REGISTERPROPERTY(AccelerationY, 0);
+       REGISTERPROPERTY(AccelerationZ, 0);
+       REGISTERPROPERTY(MassAirFlow, 0);
        REGISTERPROPERTY(ButtonEvent, ButtonEvents::NoButton);
-       REGISTERPROPERTY(AirIntakeTemperature,0)
+       REGISTERPROPERTY(AirIntakeTemperature, 0)
        REGISTERPROPERTY(BatteryVoltage, 0);
-       REGISTERPROPERTY(BatteryCurrent,0);
-       REGISTERPROPERTY(BatteryChargeLevel,0);
+       REGISTERPROPERTY(BatteryCurrent, 0);
+       REGISTERPROPERTY(BatteryChargeLevel, 0);
        REGISTERPROPERTY(InteriorTemperature, 0);
-       REGISTERPROPERTY(ExteriorTemperature,0);
+       REGISTERPROPERTY(ExteriorTemperature, 0);
        REGISTERPROPERTY(VIN, "");
        REGISTERPROPERTY(WMI, "");
        REGISTERPROPERTY(TirePressure, 0);
        REGISTERPROPERTY(TirePressureLow, false);
-       REGISTERPROPERTY(TireTemperature,0);
-       REGISTERPROPERTY( VehiclePowerMode,Power::Off);
-       registerPropertyPriv(TripMeters,[](){
+       REGISTERPROPERTY(TireTemperature, 0);
+       REGISTERPROPERTY( VehiclePowerMode, Power::Off);
+       registerPropertyPriv(TripMeters, [](){
                TripMetersType* t = new TripMetersType();
                BasicPropertyType<uint16_t> v(0);
                t->append(&v);
@@ -242,7 +272,7 @@ VehicleProperty::VehicleProperty()
        });
 
        REGISTERPROPERTY(CruiseControlActive, false);
-       REGISTERPROPERTY(CruiseControlSpeed,0);
+       REGISTERPROPERTY(CruiseControlSpeed, 0);
        REGISTERPROPERTY(LightHead, false);
        REGISTERPROPERTY(LightLeftTurn, false);
        REGISTERPROPERTY(LightRightTurn, false);
@@ -256,6 +286,7 @@ VehicleProperty::VehicleProperty()
        REGISTERPROPERTY(InteriorLightDriver, false);
        REGISTERPROPERTY(InteriorLightPassenger, false);
        REGISTERPROPERTY(InteriorLightCenter, false);
+       REGISTERPROPERTY(InteriorLightStatus, false);
        REGISTERPROPERTY(EngineLoad, 0);
        REGISTERPROPERTY(Horn, false);
        REGISTERPROPERTY(FuelLevel, 0);
@@ -274,7 +305,7 @@ VehicleProperty::VehicleProperty()
        REGISTERPROPERTY(VehicleLength, 0);
        REGISTERPROPERTY(Latitude, 0);
        REGISTERPROPERTY(Longitude, 0);
-       REGISTERPROPERTY(Altitude,0);
+       REGISTERPROPERTY(Altitude, 0);
        REGISTERPROPERTY(Direction, 0);
        REGISTERPROPERTY(VehicleType, Vehicle::Unknown);
        registerPropertyPriv(DoorsPerRow, []() { BasicPropertyType<uint16_t> d(0); return new DoorsPerRowType(&d); });
@@ -286,10 +317,10 @@ VehicleProperty::VehicleProperty()
        REGISTERPROPERTY(Odometer, 0);
        REGISTERPROPERTY(DistanceTotal, 0);
        REGISTERPROPERTY(DistanceSinceStart, 0);
-       REGISTERPROPERTY(TransmissionFluidLevel,0);
-       REGISTERPROPERTY(BrakeFluidLevel,0);
-       REGISTERPROPERTY(WasherFluidLevel,0);
-       REGISTERPROPERTY(SecurityAlertStatus,Security::Idle);
+       REGISTERPROPERTY(TransmissionFluidLevel, 0);
+       REGISTERPROPERTY(BrakeFluidLevel, 0);
+       REGISTERPROPERTY(WasherFluidLevel, 0);
+       REGISTERPROPERTY(SecurityAlertStatus, Security::Idle);
        REGISTERPROPERTY(ParkingBrakeStatus, false);
        REGISTERPROPERTY(ParkingLightStatus, false);
        REGISTERPROPERTY(HazardLightStatus, false);
@@ -318,11 +349,11 @@ VehicleProperty::VehicleProperty()
        REGISTERPROPERTY(AirRecirculation, false);
        REGISTERPROPERTY(Heater, false);
 
-       REGISTERPROPERTY(Defrost,false);
-       REGISTERPROPERTY(DefrostWindow,false);
-       REGISTERPROPERTY(DefrostMirror,false);
+       REGISTERPROPERTY(Defrost, false);
+       REGISTERPROPERTY(DefrostWindow, false);
+       REGISTERPROPERTY(DefrostMirror, false);
 
-       REGISTERPROPERTY(SteeringWheelHeater,false);
+       REGISTERPROPERTY(SteeringWheelHeater, false);
        REGISTERPROPERTY(SeatHeater, 0);
        REGISTERPROPERTY(SeatCooler, false);
        REGISTERPROPERTY(WindowStatus, 100);
@@ -332,40 +363,36 @@ VehicleProperty::VehicleProperty()
        REGISTERPROPERTY(NightMode, false);
        REGISTERPROPERTY(DrivingMode, Driving::None);
        REGISTERPROPERTY(DrivingModeW3C, false);
-       REGISTERPROPERTY(KeyId,"");
-       REGISTERPROPERTY(Language,"");
-       REGISTERPROPERTY(MeasurementSystem,Measurement::Metric);
-       REGISTERPROPERTY(MirrorSettingPan,0);
-       REGISTERPROPERTY(MirrorSettingTilt,0);
-       REGISTERPROPERTY(SteeringWheelPositionSlide,0);
-       REGISTERPROPERTY(SteeringWheelPositionTilt,0);
-       REGISTERPROPERTY(SeatPositionRecline,0);
-       REGISTERPROPERTY(SeatPositionSlide,0);
-       REGISTERPROPERTY(SeatPositionCushionHeight,0);
-       REGISTERPROPERTY(SeatPositionHeadrest,0);
-       REGISTERPROPERTY(SeatPositionBackCushion,0);
-       REGISTERPROPERTY(SeatPositionSideCushion,0);
-       REGISTERPROPERTY(DashboardIllumination,0);
+       REGISTERPROPERTY(KeyId, "");
+       REGISTERPROPERTY(Language, "");
+       REGISTERPROPERTY(MeasurementSystem, Measurement::Metric);
+       REGISTERPROPERTY(MirrorSettingPan, 0);
+       REGISTERPROPERTY(MirrorSettingTilt, 0);
+       REGISTERPROPERTY(SteeringWheelPositionSlide, 0);
+       REGISTERPROPERTY(SteeringWheelPositionTilt, 0);
+       REGISTERPROPERTY(SeatPositionRecline, 0);
+       REGISTERPROPERTY(SeatPositionSlide, 0);
+       REGISTERPROPERTY(SeatPositionCushionHeight, 0);
+       REGISTERPROPERTY(SeatPositionHeadrest, 0);
+       REGISTERPROPERTY(SeatPositionBackCushion, 0);
+       REGISTERPROPERTY(SeatPositionSideCushion, 0);
+       REGISTERPROPERTY(DashboardIllumination, 0);
        REGISTERPROPERTY(GeneratedVehicleSoundMode, Vehicle::Normal);
        REGISTERPROPERTY(DriverId, "");
-
+       REGISTERPROPERTY(PowertrainTorque, 0);
+       REGISTERPROPERTY(AcceleratorPedalPosition, 0);
+       REGISTERPROPERTY(Chime, false);
+       REGISTERPROPERTY(WheelTick, 0);
+       REGISTERPROPERTY(IgnitionTimeOff, 0);
+       REGISTERPROPERTY(IgnitionTimeOn, 0);
+       REGISTERPROPERTY(YawRate, 0);
+       REGISTERPROPERTY(ButtonEventW3C, "");
 }
 
 void VehicleProperty::factory()
 {
        if(!thereCanOnlyBeOne)
-               thereCanOnlyBeOne = new VehicleProperty();
-}
-
-void VehicleProperty::shutdown()
-{
-       if(thereCanOnlyBeOne){
-               delete thereCanOnlyBeOne;
-               thereCanOnlyBeOne = nullptr;
-       }
-       registeredPropertyFactoryMap.clear();
-       mCapabilities.clear();
-       mCustomProperties.clear();
+               thereCanOnlyBeOne = amb::make_unique(new VehicleProperty());
 }
 
 PropertyList VehicleProperty::capabilities()
index 3c5b97d..a79e4ce 100644 (file)
@@ -48,6 +48,25 @@ enum ButtonEventType {
        NavigateLeftButton = 1 << 11,
        NavigateRightButton = 1 << 12
 };
+
+namespace W3C
+{
+extern const char* Home;
+extern const char* Back;
+extern const char* Search;
+extern const char* Call;
+extern const char* EndCall;
+extern const char* MediaPlay;
+extern const char* MediaNext;
+extern const char* MediaPrevious;
+extern const char* MediaPause;
+extern const char* VoiceRecognize;
+extern const char* Enter;
+extern const char* Left;
+extern const char* Right;
+extern const char* Up;
+extern const char* Down;
+}
 }
 
 namespace TurnSignals {
@@ -334,12 +353,6 @@ public:
         */
        static void factory();
 
-       /*!
-        *
-        * \brief destroys static instance of VehicleProperty. This should be called at application shutdown
-        */
-       static void shutdown();
-
        typedef std::string Property;
 
        /*!
@@ -439,7 +452,7 @@ public:
 
        /**< Engine coolant temperature in degrees celcius **/
        static const Property EngineCoolantTemperature;
-       PROPERTYTYPE(EngineCoolantTemperature, EngineCoolantTemperatureType, BasicPropertyType<int>, int)
+       PROPERTYTYPEBASIC(EngineCoolantTemperature, int16_t)
 
        static const Property EngineCoolantLevel;
        PROPERTYTYPE(EngineCoolantLevel, EngineCoolantLevelType, BasicPropertyType<uint>, uint)
@@ -448,17 +461,14 @@ public:
        static const Property MachineGunTurretStatus;
        PROPERTYTYPEBASIC(MachineGunTurretStatus, bool)
 
-       /**< Acceleration on the 'x' axis in 1/1000 gravitational acceleration "g-force" */
        static const Property AccelerationX;
-       PROPERTYTYPE(AccelerationX, AccelerationXType, BasicPropertyType<uint16_t>, uint16_t)
+       PROPERTYTYPEBASIC(AccelerationX, int16_t)
 
-       /**< Acceleration on the 'y' axis in 1/1000 gravitational acceleration "g-force" */
        static const Property AccelerationY;
-       PROPERTYTYPE(AccelerationY, AccelerationYType, BasicPropertyType<uint16_t>, uint16_t)
+       PROPERTYTYPEBASIC(AccelerationY, int16_t)
 
-       /**< Acceleration on the 'z' axis in 1/1000 gravitational acceleration "g-force" */
        static const Property AccelerationZ;
-       PROPERTYTYPE(AccelerationZ, AccelerationZType, BasicPropertyType<uint16_t>, uint16_t)
+       PROPERTYTYPEBASIC(AccelerationZ, int16_t)
 
        /**< Mass Air Flow.  grams/sec */
        static const Property MassAirFlow;
@@ -466,9 +476,12 @@ public:
        //typedef BasicPropertyType<uint16_t> MassAirFlowType;
 
        /**< Button Event @see ButtonEvents::ButtonEventType */
+       ///TODO: deprecated.  Use ButtonEventW3C. Remove in 0.14
        static const Property ButtonEvent;
        PROPERTYTYPE(ButtonEvent, ButtonEventType, BasicPropertyType<ButtonEvents::ButtonEventType>, ButtonEvents::ButtonEventType)
-       //typedef BasicPropertyType<ButtonEvents::ButtonEventType> ButtonEventType;
+
+       static const Property ButtonEventW3C;
+       PROPERTYTYPE(ButtonEventW3C, ButtonEventW3CType, StringPropertyType, std::string)
 
        /**< Air intake temperature in degrees celcius */
        static const Property AirIntakeTemperature;
@@ -496,14 +509,17 @@ public:
        PROPERTYTYPE(ExteriorTemperature, ExteriorTemperatureType, BasicPropertyType<int>, int)
        //typedef BasicPropertyType<int> ExteriorTemperatureType;
 
-       /**< Engine Oil Temperature in degrees celcius */
        static const Property EngineOilTemperature;
-       PROPERTYTYPE(EngineOilTemperature, EngineOilTemperatureType, BasicPropertyType<int>, int)
-       //typedef BasicPropertyType<int> EngineOilTemperatureType;
+       PROPERTYTYPEBASIC(EngineOilTemperature, int)
 
        static const Property EngineOilRemaining;
-       PROPERTYTYPE(EngineOilRemaining, EngineOilRemainingType,BasicPropertyType<uint16_t>, uint16_t)
-       //typedef BasicPropertyType<uint16_t> EngineOilRemainingType;
+       PROPERTYTYPEBASIC(EngineOilRemaining, uint16_t)
+
+       static const Property EngineOilLifeRemaining;
+       PROPERTYTYPEBASIC(EngineOilLifeRemaining, uint8_t)
+
+       static const Property EngineOilChangeIndicator;
+       PROPERTYTYPEBASIC(EngineOilChangeIndicator, bool)
 
        /**< Vehicle Identification Number (ISO 3779) 17 chars**/
        static const Property VIN;
@@ -567,14 +583,19 @@ public:
        static const Property LightDynamicHighBeam;
        PROPERTYTYPEBASIC(LightDynamicHighBeam, bool)
 
-
+       ///TODO: deprecated.  Use InteriorLightStatus which is zoned.  Remove in 0.14
        static const Property InteriorLightDriver;
        PROPERTYTYPE(InteriorLightDriver, InteriorLightDriverType, BasicPropertyType<bool>, bool)
+       ///TODO: deprecated.  Use InteriorLightStatus which is zoned.  Remove in 0.14
        static const Property InteriorLightCenter;
        PROPERTYTYPE(InteriorLightCenter, InteriorLightCenterType, BasicPropertyType<bool>, bool)
+       ///TODO: deprecated.  Use InteriorLightStatus which is zoned.  Remove in 0.14
        static const Property InteriorLightPassenger;
        PROPERTYTYPE(InteriorLightPassenger, InteriorLightPassengerType, BasicPropertyType<bool>, bool)
 
+       static const Property InteriorLightStatus;
+       PROPERTYTYPEBASIC(InteriorLightStatus, bool)
+
        static const Property EngineLoad;
        PROPERTYTYPE(EngineLoad, EngineLoadType, BasicPropertyType<uint16_t>, uint16_t)
 
@@ -879,6 +900,26 @@ public:
        static const Property DriverId;
        PROPERTYTYPE(DriverId, DriverIdType, StringPropertyType, std::string)
 
+       static const Property PowertrainTorque;
+       PROPERTYTYPEBASIC(PowertrainTorque, uint16_t)
+
+       static const Property AcceleratorPedalPosition;
+       PROPERTYTYPEBASIC(AcceleratorPedalPosition, uint8_t)
+
+       static const Property Chime;
+       PROPERTYTYPEBASIC(Chime, bool)
+
+       static const Property WheelTick;
+       PROPERTYTYPEBASIC(WheelTick, uint)
+
+       static const Property IgnitionTimeOn;
+       PROPERTYTYPEBASIC(IgnitionTimeOn, uint64_t)
+
+       static const Property IgnitionTimeOff;
+       PROPERTYTYPEBASIC(IgnitionTimeOff, uint64_t)
+
+       static const Property YawRate;
+       PROPERTYTYPEBASIC(YawRate, int16_t)
 
        /** END PROPERTIES **/
 
@@ -928,7 +969,7 @@ private:
 
        VehicleProperty();
 
-       static VehicleProperty* thereCanOnlyBeOne;
+       static std::unique_ptr<VehicleProperty> thereCanOnlyBeOne;
 
        static bool registerPropertyPriv(Property name, PropertyTypeFactoryCallback factory);
 
index 318cd67..ae18d36 100644 (file)
@@ -122,7 +122,6 @@ int getNextEvent(gpointer data)
 
        pbshared->playbackQueue.remove(obj);
        DebugOut()<<"playback Queue size: "<<pbshared->playbackQueue.size()<<endl;
-       //delete obj;
 
        return 0;
 }
index 0db2bbe..05227df 100644 (file)
@@ -218,6 +218,12 @@ on_bus_acquired (GDBusConnection *connection, const gchar *name, gpointer user_d
        exportProperty<EngineCoolant>(iface->re, connection);
        exportProperty<NightMode>(iface->re, connection);
        exportProperty<DrivingMode>(iface->re, connection);
+       exportProperty<PowertrainTorque>(iface->re, connection);
+       exportProperty<AcceleratorPedalPosition>(iface->re, connection);
+       exportProperty<Chime>(iface->re, connection);
+       exportProperty<WheelTick>(iface->re, connection);
+       exportProperty<IgnitionTime>(iface->re, connection);
+       exportProperty<YawRate>(iface->re, connection);
 
        iface->registerCustomTypes();
 }
index 38f0b87..d66d4c6 100644 (file)
@@ -116,26 +116,9 @@ public:
        AccelerationProperty(AbstractRoutingEngine *re, GDBusConnection *connection)
        :DBusSink("Acceleration", re, connection, map<string, string>())
        {
-               /** @attributeName X
-                *  @type unsigned short
-                *  @access readonly
-                *  @attributeComment \brief  Must return acceleration on the "X" axis as 1/1000 G (gravitational force).
-                **/
-               wantPropertyVariant(VehicleProperty::AccelerationX, "X", "q", AbstractProperty::Read);
-
-               /** @attributeName Y
-                *  @type unsigned short
-                *  @access readonly
-                *  @attributeComment \brief  Must return acceleration on the "Y" axis as 1/1000 G (gravitational force).
-                **/
-               wantPropertyVariant(VehicleProperty::AccelerationY, "Y", "q", AbstractProperty::Read);
-
-               /** @attributeName Z
-                *  @type unsigned short
-                *  @access readonly
-                *  @attributeComment \brief  Must return acceleration on the "Z" axis as 1/1000 G (gravitational force).
-                **/
-               wantPropertyVariant(VehicleProperty::AccelerationZ, "Z", "q", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::AccelerationX, "X", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::AccelerationY, "Y", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::AccelerationZ, "Z", AbstractProperty::Read);
 
        }
 };
@@ -171,25 +154,15 @@ public:
        CruiseControlProperty(AbstractRoutingEngine *re, GDBusConnection *connection)
        :DBusSink("CruiseControlStatus", re, connection, map<string, string>())
        {
-               /** @attributeName Activated
-                *  @type boolean
-                *  @access readonly
-                *  @attributeComment \brief  Must return whether or not the Cruise Control system is active (true) or inactive (false)
-                **/
-               wantPropertyVariant(VehicleProperty::CruiseControlActive, "Activated", "b", AbstractProperty::Read);
-
-               /** @attributeName Speed
-                *  @type unsigned short
-                *  @access readonly
-                *  @attributeComment \brief  Must return target Cruise Control speed in kilometers per hour (kph).
-                **/
-               wantPropertyVariant(VehicleProperty::CruiseControlSpeed, "Speed", "q", AbstractProperty::Read);
-
+               ///TODO: deprecate Activated.  Remove in 0.14
+               wantPropertyVariant(VehicleProperty::CruiseControlActive, "Activated", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::CruiseControlSpeed, "Speed", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::CruiseControlActive, "Status", AbstractProperty::Read);
        }
 };
 
 /** @interface WheelBrake : VehiclePropertyType **/
-/// TODO: deprecated remove in 0.13
+/// TODO: deprecated remove in 0.14
 class WheelBrakeProperty: public DBusSink
 {
 public:
@@ -218,7 +191,7 @@ public:
                 *  @access readonly
                 *  @attributeComment \brief  Must return Wheel Brake status: Engaged = true, disengaged = false
                 **/
-               wantPropertyVariant(VehicleProperty::WheelBrake, "brakePedalDepressed", "b", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::WheelBrake, "BrakePedalDepressed", AbstractProperty::Read);
 
        }
 };
@@ -230,96 +203,34 @@ public:
        LightStatusProperty(AbstractRoutingEngine *re, GDBusConnection *connection)
                :DBusSink("LightStatus", re, connection, map<string, string>())
        {
-               /** @attributeName Head
-                *  @type boolean
-                *  @access readonly
-                *  @attributeComment \brief  Must return headlight status: on = true, off = false.
-                **/
-               wantPropertyVariant(VehicleProperty::LightHead, "Head", "b", AbstractProperty::Read);
-
-               /** @attributeName RightTurn
-                *  @type boolean
-                *  @access readonly
-                *  @attributeComment \brief  Must return right turn signal status: on = true, off = false.
-                **/
-               wantPropertyVariant(VehicleProperty::LightRightTurn, "RightTurn", "b", AbstractProperty::Read);
-
-               /** @attributeName LeftTurn
-                *  @type boolean
-                *  @access readonly
-                *  @attributeComment \brief  Must return left turn signal status: on = true, off = false.
-                **/
-               wantPropertyVariant(VehicleProperty::LightLeftTurn, "LeftTurn", "b", AbstractProperty::Read);
-
-               /** @attributeName Brake
-                *  @type boolean
-                *  @access readonly
-                *  @attributeComment \brief  Must return  brake signal light status: on = true, off = false.
-                **/
-               wantPropertyVariant(VehicleProperty::LightBrake, "Brake", "b", AbstractProperty::Read);
-
-               /** @attributeName Fog
-                *  @type boolean
-                *  @access readonly
-                *  @attributeComment \brief  Must return fog light status: on = true, off = false.
-                **/
-               wantPropertyVariant(VehicleProperty::LightFog, "Fog", "b", AbstractProperty::Read);
-
-               /** @attributeName Hazard
-                *  @type boolean
-                *  @access readonly
-                *  @attributeComment \brief  Must return hazard light status: on = true, off = false.
-                **/
-               wantPropertyVariant(VehicleProperty::LightHazard, "Hazard", "b", AbstractProperty::Read);
-
-               /** @attributeName Parking
-                *  @type boolean
-                *  @access readonly
-                *  @attributeComment \brief  Must return parking light status: on = true, off = false.
-                **/
-               wantPropertyVariant(VehicleProperty::LightParking, "Parking", "b", AbstractProperty::Read);
-
-               /** @attributeName HighBeam
-                *  @type boolean
-                *  @access readonly
-                *  @attributeComment \brief  Must return high beam status: on = true, off = false.
-                **/
-               wantPropertyVariant(VehicleProperty::LightHighBeam, "HighBeam", "b", AbstractProperty::Read);
-
-               wantPropertyVariant(VehicleProperty::LightAutomatic, "automaticHeadlights", AbstractProperty::Read);
-               wantPropertyVariant(VehicleProperty::LightDynamicHighBeam, "dynamicHighBeam", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::LightHead, "Head", "b", AbstractProperty::ReadWrite);
+               wantPropertyVariant(VehicleProperty::LightRightTurn, "RightTurn", "b", AbstractProperty::ReadWrite);
+               wantPropertyVariant(VehicleProperty::LightLeftTurn, "LeftTurn", "b", AbstractProperty::ReadWrite);
+               wantPropertyVariant(VehicleProperty::LightBrake, "Brake", "b", AbstractProperty::ReadWrite);
+               wantPropertyVariant(VehicleProperty::LightFog, "Fog", "b", AbstractProperty::ReadWrite);
+               wantPropertyVariant(VehicleProperty::LightHazard, "Hazard", "b", AbstractProperty::ReadWrite);
+               wantPropertyVariant(VehicleProperty::LightParking, "Parking", "b", AbstractProperty::ReadWrite);
+               wantPropertyVariant(VehicleProperty::LightHighBeam, "HighBeam", "b", AbstractProperty::ReadWrite);
+               wantPropertyVariant(VehicleProperty::LightAutomatic, "AutomaticHeadlights", AbstractProperty::ReadWrite);
+               wantPropertyVariant(VehicleProperty::LightDynamicHighBeam, "DynamicHighBeam", AbstractProperty::ReadWrite);
 
        }
 };
 
-/** @interface InteriorLightStatus : VehiclePropertyType **/
 class InteriorLightStatusProperty: public DBusSink
 {
 public:
        InteriorLightStatusProperty(AbstractRoutingEngine *re, GDBusConnection *connection)
                :DBusSink("InteriorLightStatus", re, connection, map<string, string>())
        {
-               /** @attributeName Passenger
-                *  @type boolean
-                *  @access readonly
-                *  @attributeComment \brief  Must return passenger interior light status: on = true, off = false
-                **/
-               wantPropertyVariant(VehicleProperty::InteriorLightPassenger, "Passenger", "b", AbstractProperty::Read);
-
-               /** @attributeName Driver
-                *  @type boolean
-                *  @access readonly
-                *  @attributeComment \brief  Must return driver interior light status: on = true, off = false
-                **/
-               wantPropertyVariant(VehicleProperty::InteriorLightPassenger, "Driver", "b", AbstractProperty::Read);
-
-               /** @attributeName Center
-                *  @type boolean
-                *  @access readonly
-                *  @attributeComment \brief  Must return center interior light status: on = true, off = false
-                **/
-               wantPropertyVariant(VehicleProperty::InteriorLightCenter, "Center", "b", AbstractProperty::Read);
-
+               /// TODO: deprecated remove in 0.14
+               wantPropertyVariant(VehicleProperty::InteriorLightPassenger, "Passenger", AbstractProperty::Read);
+               /// TODO: deprecated remove in 0.14
+               wantPropertyVariant(VehicleProperty::InteriorLightPassenger, "Driver", AbstractProperty::Read);
+               /// TODO: deprecated remove in 0.14
+               wantPropertyVariant(VehicleProperty::InteriorLightCenter, "Center", AbstractProperty::Read);
+
+               wantPropertyVariant(VehicleProperty::InteriorLightStatus, "Status", AbstractProperty::ReadWrite);
        }
 };
 
@@ -330,12 +241,9 @@ public:
        HornProperty(AbstractRoutingEngine *re, GDBusConnection *connection)
                :DBusSink("Horn", re, connection, map<string, string>())
        {
-               /** @attributeName On
-                *  @type boolean
-                *  @access readonly
-                *  @attributeComment \brief  Must return horn status: on = true, off = false
-                **/
-               wantPropertyVariant(VehicleProperty::Horn,"On","b",AbstractProperty::Read);
+               /// TODO: deprecated remove in 0.14
+               wantPropertyVariant(VehicleProperty::Horn,"On",AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::Horn,"Status",AbstractProperty::Read);
 
        }
 };
@@ -373,26 +281,13 @@ public:
        EngineOilProperty(AbstractRoutingEngine *re, GDBusConnection *connection)
                        :DBusSink("EngineOil", re, connection, map<string, string>())
        {
-               /** @attributeName Remaining
-                *  @type unsigned short
-                *  @access readonly
-                *  @attributeComment \brief  Must return remaining engine oil as percentage of fullness.
-                **/
-               wantPropertyVariant(VehicleProperty::EngineOilRemaining, "Remaining", "q", AbstractProperty::Read);
-
-               /** @attributeName Temperature
-                *  @type long
-                *  @access readonly
-                *  @attributeComment \brief  Must return Engine Oil Temperature in Celcius.
-                **/
-               wantPropertyVariant(VehicleProperty::EngineOilTemperature, "Temperature", "i", AbstractProperty::Read);
-
-               /** @attributeName Pressure
-                *  @type unsigned short
-                *  @access readonly
-                *  @attributeComment \brief  Must return Engine Oil Pressure in kPa.
-                **/
-               wantPropertyVariant(VehicleProperty::EngineOilPressure, "Pressure", "q", AbstractProperty::Read);
+               ///TODO depricated.  Use Level.  Remove in 0.14
+               wantPropertyVariant(VehicleProperty::EngineOilRemaining, "Remaining", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::EngineOilRemaining, "Level", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::EngineOilTemperature, "Temperature", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::EngineOilPressure, "Pressure", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::EngineOilChangeIndicator, "Change", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::EngineOilLifeRemaining, "LifeRemaining", AbstractProperty::Read);
 
        }
 };
@@ -451,7 +346,7 @@ public:
        ThrottlePosition(AbstractRoutingEngine *re, GDBusConnection *connection)
                        :DBusSink("ThrottlePosition", re, connection, map<string, string>())
        {
-               wantPropertyVariant(VehicleProperty::ThrottlePosition, "Value", "i", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::ThrottlePosition, "Value", AbstractProperty::Read);
        }
 };
 
@@ -477,4 +372,65 @@ public:
        }
 };
 
+class PowertrainTorque: public DBusSink
+{
+public:
+       PowertrainTorque(AbstractRoutingEngine *re, GDBusConnection *connection)
+                       :DBusSink("PowertrainTorque", re, connection, map<string, string>())
+       {
+               wantPropertyVariant(VehicleProperty::PowertrainTorque, "Value", AbstractProperty::Read);
+       }
+};
+
+class AcceleratorPedalPosition: public DBusSink
+{
+public:
+       AcceleratorPedalPosition(AbstractRoutingEngine *re, GDBusConnection *connection)
+                       :DBusSink("AcceleratorPedalPosition", re, connection, map<string, string>())
+       {
+               wantPropertyVariant(VehicleProperty::AcceleratorPedalPosition, "Value", AbstractProperty::Read);
+       }
+};
+
+class Chime: public DBusSink
+{
+public:
+       Chime(AbstractRoutingEngine *re, GDBusConnection *connection)
+                       :DBusSink("Chime", re, connection, map<string, string>())
+       {
+               wantPropertyVariant(VehicleProperty::Chime, "Status", AbstractProperty::Read);
+       }
+};
+
+class WheelTick: public DBusSink
+{
+public:
+       WheelTick(AbstractRoutingEngine *re, GDBusConnection *connection)
+                       :DBusSink("WheelTick", re, connection, map<string, string>())
+       {
+               wantPropertyVariant(VehicleProperty::WheelTick, "Value", AbstractProperty::Read);
+       }
+};
+
+class IgnitionTime: public DBusSink
+{
+public:
+       IgnitionTime(AbstractRoutingEngine *re, GDBusConnection *connection)
+                       :DBusSink("IgnitionTime", re, connection, map<string, string>())
+       {
+               wantPropertyVariant(VehicleProperty::IgnitionTimeOn, "IgnitionTimeOn", AbstractProperty::Read);
+               wantPropertyVariant(VehicleProperty::IgnitionTimeOff, "IgnitionTimeOff", AbstractProperty::Read);
+       }
+};
+
+class YawRate: public DBusSink
+{
+public:
+       YawRate(AbstractRoutingEngine *re, GDBusConnection *connection)
+                       :DBusSink("YawRate", re, connection, map<string, string>())
+       {
+               wantPropertyVariant(VehicleProperty::YawRate, "Value", AbstractProperty::Read);
+       }
+};
+
 #endif
index df093b1..4cfd571 100644 (file)
@@ -15,6 +15,9 @@ add_custom_command(OUTPUT genjs2cc COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/ge
 add_custom_target(js3cc DEPENDS genjs2cc)
 add_dependencies(vehicle_extension js3cc)
 
+configure_file (${CMAKE_CURRENT_SOURCE_DIR}/vehicle_api.js ${CMAKE_CURRENT_SOURCE_DIR}/vehicle_api.js @ONLY)
+configure_file (${CMAKE_CURRENT_SOURCE_DIR}/vehicle.html ${CMAKE_CURRENT_SOURCE_DIR}/vehicle.html @ONLY)
+
 install(TARGETS vehicle_extension  LIBRARY DESTINATION "${LIB_INSTALL_DIR}/${XWALK_EXTENSION_PATH}")
 install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/vehicle.html DESTINATION /usr/share/automotive-message-broker/xwalk/examples)
 endif(xwalk_vehicle_extension)
index fd14a3c..aaeb6a0 100644 (file)
@@ -1,2 +1,2 @@
 extern const char kSource_vehicle_api[];
-const char kSource_vehicle_api[] = { 47, 47, 32, 67, 111, 112, 121, 114, 105, 103, 104, 116, 32, 40, 99, 41, 32, 50, 48, 49, 52, 32, 73, 110, 116, 101, 108, 32, 67, 111, 114, 112, 111, 114, 97, 116, 105, 111, 110, 46, 32, 65, 108, 108, 32, 114, 105, 103, 104, 116, 115, 32, 114, 101, 115, 101, 114, 118, 101, 100, 46, 10, 47, 47, 32, 85, 115, 101, 32, 111, 102, 32, 116, 104, 105, 115, 32, 115, 111, 117, 114, 99, 101, 32, 99, 111, 100, 101, 32, 105, 115, 32, 103, 111, 118, 101, 114, 110, 101, 100, 32, 98, 121, 32, 97, 32, 66, 83, 68, 45, 115, 116, 121, 108, 101, 32, 108, 105, 99, 101, 110, 115, 101, 32, 116, 104, 97, 116, 32, 99, 97, 110, 32, 98, 101, 10, 47, 47, 32, 102, 111, 117, 110, 100, 32, 105, 110, 32, 116, 104, 101, 32, 76, 73, 67, 69, 78, 83, 69, 32, 102, 105, 108, 101, 46, 10, 10, 118, 97, 114, 32, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 32, 61, 32, 48, 59, 10, 118, 97, 114, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 32, 61, 32, 123, 125, 59, 10, 10, 118, 97, 114, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 32, 61, 32, 91, 93, 59, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 118, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 67, 111, 109, 109, 111, 110, 67, 111, 110, 116, 114, 117, 99, 116, 111, 114, 40, 111, 98, 106, 44, 32, 97, 116, 116, 110, 97, 109, 101, 41, 32, 123, 10, 32, 32, 111, 98, 106, 46, 97, 116, 116, 114, 105, 98, 117, 116, 101, 78, 97, 109, 101, 32, 61, 32, 97, 116, 116, 110, 97, 109, 101, 59, 10, 10, 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, 123, 125, 59, 10, 32, 32, 109, 115, 103, 91, 39, 109, 101, 116, 104, 111, 100, 39, 93, 32, 61, 32, 39, 122, 111, 110, 101, 115, 39, 59, 10, 32, 32, 109, 115, 103, 91, 39, 110, 97, 109, 101, 39, 93, 32, 61, 32, 111, 98, 106, 46, 97, 116, 116, 114, 105, 98, 117, 116, 101, 78, 97, 109, 101, 59, 10, 10, 32, 32, 111, 98, 106, 46, 95, 122, 111, 110, 101, 115, 32, 61, 32, 110, 101, 119, 32, 90, 111, 110, 101, 59, 10, 10, 32, 32, 118, 97, 114, 32, 99, 97, 108, 108, 32, 61, 32, 110, 101, 119, 32, 65, 115, 121, 110, 99, 67, 97, 108, 108, 40, 102, 117, 110, 99, 116, 105, 111, 110, 40, 100, 97, 116, 97, 41, 32, 123, 10, 32, 32, 32, 32, 111, 98, 106, 46, 95, 122, 111, 110, 101, 115, 32, 61, 32, 100, 97, 116, 97, 59, 10, 32, 32, 125, 41, 59, 10, 10, 32, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 91, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 93, 32, 61, 32, 99, 97, 108, 108, 59, 10, 32, 32, 109, 115, 103, 46, 97, 115, 121, 110, 99, 67, 97, 108, 108, 73, 100, 32, 61, 32, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 59, 10, 32, 32, 43, 43, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 59, 10, 10, 32, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 46, 112, 111, 115, 116, 77, 101, 115, 115, 97, 103, 101, 40, 74, 83, 79, 78, 46, 115, 116, 114, 105, 110, 103, 105, 102, 121, 40, 109, 115, 103, 41, 41, 59, 10, 10, 32, 32, 79, 98, 106, 101, 99, 116, 46, 100, 101, 102, 105, 110, 101, 80, 114, 111, 112, 101, 114, 116, 121, 40, 111, 98, 106, 44, 32, 39, 122, 111, 110, 101, 115, 39, 44, 32, 123, 32, 103, 101, 116, 58, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 41, 32, 123, 32, 114, 101, 116, 117, 114, 110, 32, 111, 98, 106, 46, 95, 122, 111, 110, 101, 115, 32, 125, 32, 125, 41, 59, 10, 125, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 86, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 40, 97, 116, 116, 110, 97, 109, 101, 41, 32, 123, 10, 32, 32, 118, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 67, 111, 109, 109, 111, 110, 67, 111, 110, 116, 114, 117, 99, 116, 111, 114, 40, 116, 104, 105, 115, 44, 32, 97, 116, 116, 110, 97, 109, 101, 41, 59, 10, 125, 10, 10, 86, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 46, 103, 101, 116, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 122, 111, 110, 101, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, 123, 125, 59, 10, 32, 32, 109, 115, 103, 91, 39, 109, 101, 116, 104, 111, 100, 39, 93, 32, 61, 32, 39, 103, 101, 116, 39, 59, 10, 32, 32, 109, 115, 103, 91, 39, 110, 97, 109, 101, 39, 93, 32, 61, 32, 116, 104, 105, 115, 46, 97, 116, 116, 114, 105, 98, 117, 116, 101, 78, 97, 109, 101, 59, 10, 32, 32, 109, 115, 103, 91, 39, 122, 111, 110, 101, 39, 93, 32, 61, 32, 122, 111, 110, 101, 59, 10, 10, 32, 32, 114, 101, 116, 117, 114, 110, 32, 99, 114, 101, 97, 116, 101, 80, 114, 111, 109, 105, 115, 101, 40, 109, 115, 103, 41, 59, 10, 125, 59, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 73, 110, 116, 101, 114, 102, 97, 99, 101, 40, 97, 116, 116, 110, 97, 109, 101, 41, 32, 123, 10, 32, 32, 118, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 67, 111, 109, 109, 111, 110, 67, 111, 110, 116, 114, 117, 99, 116, 111, 114, 40, 116, 104, 105, 115, 44, 32, 97, 116, 116, 110, 97, 109, 101, 41, 59, 10, 125, 10, 10, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 73, 110, 116, 101, 114, 102, 97, 99, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 32, 61, 32, 86, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 59, 10, 10, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 73, 110, 116, 101, 114, 102, 97, 99, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 46, 115, 117, 98, 115, 99, 114, 105, 98, 101, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 99, 97, 108, 108, 98, 97, 99, 107, 44, 32, 122, 111, 110, 101, 41, 32, 123, 10, 32, 32, 105, 102, 32, 40, 33, 122, 111, 110, 101, 41, 32, 122, 111, 110, 101, 32, 61, 32, 110, 101, 119, 32, 90, 111, 110, 101, 40, 41, 59, 10, 10, 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, 123, 125, 59, 10, 32, 32, 109, 115, 103, 91, 39, 109, 101, 116, 104, 111, 100, 39, 93, 32, 61, 32, 39, 115, 117, 98, 115, 99, 114, 105, 98, 101, 39, 59, 10, 32, 32, 109, 115, 103, 91, 39, 110, 97, 109, 101, 39, 93, 32, 61, 32, 116, 104, 105, 115, 46, 97, 116, 116, 114, 105, 98, 117, 116, 101, 78, 97, 109, 101, 59, 10, 32, 32, 109, 115, 103, 91, 39, 122, 111, 110, 101, 39, 93, 32, 61, 32, 122, 111, 110, 101, 59, 10, 10, 32, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 46, 112, 111, 115, 116, 77, 101, 115, 115, 97, 103, 101, 40, 74, 83, 79, 78, 46, 115, 116, 114, 105, 110, 103, 105, 102, 121, 40, 109, 115, 103, 41, 41, 59, 10, 10, 32, 32, 109, 115, 103, 91, 39, 99, 97, 108, 108, 98, 97, 99, 107, 39, 93, 32, 61, 32, 99, 97, 108, 108, 98, 97, 99, 107, 59, 10, 10, 32, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 46, 112, 117, 115, 104, 40, 109, 115, 103, 41, 59, 10, 10, 32, 32, 114, 101, 116, 117, 114, 110, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 46, 108, 101, 110, 103, 116, 104, 32, 45, 32, 49, 59, 10, 125, 59, 10, 10, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 73, 110, 116, 101, 114, 102, 97, 99, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 46, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, 101, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 104, 97, 110, 100, 108, 101, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 111, 98, 106, 32, 61, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 91, 104, 97, 110, 100, 108, 101, 93, 59, 10, 32, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 46, 115, 112, 108, 105, 99, 101, 40, 104, 97, 110, 100, 108, 101, 44, 32, 49, 41, 59, 10, 10, 32, 32, 118, 97, 114, 32, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, 101, 32, 61, 32, 116, 114, 117, 101, 59, 10, 10, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 105, 32, 61, 32, 48, 59, 32, 105, 32, 60, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 46, 108, 101, 110, 103, 116, 104, 59, 32, 105, 43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 118, 97, 114, 32, 116, 101, 115, 116, 79, 98, 106, 32, 61, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 91, 105, 93, 59, 10, 10, 32, 32, 32, 32, 105, 102, 32, 40, 116, 101, 115, 116, 79, 98, 106, 46, 110, 97, 109, 101, 32, 61, 61, 61, 32, 111, 98, 106, 46, 110, 97, 109, 101, 32, 38, 38, 32, 116, 101, 115, 116, 79, 98, 106, 46, 122, 111, 110, 101, 46, 101, 113, 117, 97, 108, 115, 40, 111, 98, 106, 46, 122, 111, 110, 101, 41, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, 101, 32, 61, 32, 102, 97, 108, 115, 101, 59, 10, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 125, 10, 32, 32, 125, 10, 10, 32, 32, 105, 102, 32, 40, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, 101, 41, 32, 123, 10, 32, 32, 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, 123, 125, 59, 10, 32, 32, 32, 32, 109, 115, 103, 91, 39, 109, 101, 116, 104, 111, 100, 39, 93, 32, 61, 32, 39, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, 101, 39, 59, 10, 32, 32, 32, 32, 109, 115, 103, 91, 39, 110, 97, 109, 101, 39, 93, 32, 61, 32, 116, 104, 105, 115, 46, 97, 116, 116, 114, 105, 98, 117, 116, 101, 78, 97, 109, 101, 59, 10, 32, 32, 32, 32, 109, 115, 103, 91, 39, 122, 111, 110, 101, 39, 93, 32, 61, 32, 111, 98, 106, 46, 122, 111, 110, 101, 59, 10, 10, 32, 32, 32, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 46, 112, 111, 115, 116, 77, 101, 115, 115, 97, 103, 101, 40, 74, 83, 79, 78, 46, 115, 116, 114, 105, 110, 103, 105, 102, 121, 40, 109, 115, 103, 41, 41, 59, 10, 32, 32, 125, 10, 125, 59, 10, 10, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 73, 110, 116, 101, 114, 102, 97, 99, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 46, 115, 101, 116, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 40, 118, 97, 108, 117, 101, 44, 32, 122, 111, 110, 101, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, 123, 125, 59, 10, 32, 32, 109, 115, 103, 91, 39, 109, 101, 116, 104, 111, 100, 39, 93, 32, 61, 32, 39, 115, 101, 116, 39, 59, 10, 32, 32, 109, 115, 103, 91, 39, 110, 97, 109, 101, 39, 93, 32, 61, 32, 116, 104, 105, 115, 46, 97, 116, 116, 114, 105, 98, 117, 116, 101, 78, 97, 109, 101, 59, 10, 32, 32, 109, 115, 103, 91, 39, 122, 111, 110, 101, 39, 93, 32, 61, 32, 122, 111, 110, 101, 59, 10, 32, 32, 109, 115, 103, 91, 39, 118, 97, 108, 117, 101, 39, 93, 32, 61, 32, 118, 97, 108, 117, 101, 59, 10, 10, 32, 32, 114, 101, 116, 117, 114, 110, 32, 99, 114, 101, 97, 116, 101, 80, 114, 111, 109, 105, 115, 101, 40, 109, 115, 103, 41, 59, 10, 125, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 65, 115, 121, 110, 99, 67, 97, 108, 108, 40, 114, 101, 115, 111, 108, 118, 101, 44, 32, 114, 101, 106, 101, 99, 116, 41, 32, 123, 10, 32, 32, 116, 104, 105, 115, 46, 114, 101, 115, 111, 108, 118, 101, 32, 61, 32, 114, 101, 115, 111, 108, 118, 101, 59, 10, 32, 32, 116, 104, 105, 115, 46, 114, 101, 106, 101, 99, 116, 32, 61, 32, 114, 101, 106, 101, 99, 116, 59, 10, 125, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 99, 114, 101, 97, 116, 101, 80, 114, 111, 109, 105, 115, 101, 40, 109, 115, 103, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 112, 114, 111, 109, 105, 115, 101, 32, 61, 32, 110, 101, 119, 32, 80, 114, 111, 109, 105, 115, 101, 40, 102, 117, 110, 99, 116, 105, 111, 110, 40, 114, 101, 115, 111, 108, 118, 101, 44, 32, 114, 101, 106, 101, 99, 116, 41, 32, 123, 10, 32, 32, 32, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 91, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 93, 32, 61, 32, 110, 101, 119, 32, 65, 115, 121, 110, 99, 67, 97, 108, 108, 40, 114, 101, 115, 111, 108, 118, 101, 44, 32, 114, 101, 106, 101, 99, 116, 41, 59, 10, 32, 32, 125, 41, 59, 10, 10, 32, 32, 109, 115, 103, 46, 97, 115, 121, 110, 99, 67, 97, 108, 108, 73, 100, 32, 61, 32, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 59, 10, 32, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 46, 112, 111, 115, 116, 77, 101, 115, 115, 97, 103, 101, 40, 74, 83, 79, 78, 46, 115, 116, 114, 105, 110, 103, 105, 102, 121, 40, 109, 115, 103, 41, 41, 59, 10, 32, 32, 43, 43, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 59, 10, 32, 32, 114, 101, 116, 117, 114, 110, 32, 112, 114, 111, 109, 105, 115, 101, 59, 10, 125, 10, 10, 119, 105, 110, 100, 111, 119, 46, 90, 111, 110, 101, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 122, 111, 110, 101, 41, 32, 123, 10, 32, 32, 116, 104, 105, 115, 46, 118, 97, 108, 117, 101, 32, 61, 32, 122, 111, 110, 101, 32, 63, 32, 122, 111, 110, 101, 32, 58, 32, 91, 93, 59, 10, 10, 32, 32, 79, 98, 106, 101, 99, 116, 46, 100, 101, 102, 105, 110, 101, 80, 114, 111, 112, 101, 114, 116, 121, 40, 116, 104, 105, 115, 44, 32, 39, 100, 114, 105, 118, 101, 114, 39, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 123, 32, 101, 110, 117, 109, 101, 114, 97, 98, 108, 101, 58, 32, 102, 97, 108, 115, 101, 44, 32, 103, 101, 116, 58, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 114, 101, 116, 117, 114, 110, 32, 110, 101, 119, 32, 90, 111, 110, 101, 40, 91, 39, 70, 114, 111, 110, 116, 39, 44, 32, 39, 76, 101, 102, 116, 39, 93, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 125, 32, 125, 41, 59, 10, 125, 59, 10, 10, 119, 105, 110, 100, 111, 119, 46, 90, 111, 110, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 46, 101, 113, 117, 97, 108, 115, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 122, 111, 110, 101, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 105, 115, 95, 101, 113, 117, 97, 108, 32, 61, 32, 116, 114, 117, 101, 59, 10, 10, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 105, 32, 61, 32, 48, 59, 32, 105, 32, 60, 32, 122, 111, 110, 101, 46, 118, 97, 108, 117, 101, 46, 108, 101, 110, 103, 116, 104, 59, 32, 105, 43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 105, 115, 95, 101, 113, 117, 97, 108, 32, 38, 61, 32, 116, 104, 105, 115, 46, 118, 97, 108, 117, 101, 46, 105, 110, 100, 101, 120, 79, 102, 40, 122, 111, 110, 101, 46, 118, 97, 108, 117, 101, 91, 105, 93, 41, 32, 33, 61, 61, 32, 45, 49, 59, 10, 32, 32, 125, 10, 10, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 105, 32, 61, 32, 48, 59, 32, 105, 32, 60, 32, 116, 104, 105, 115, 46, 118, 97, 108, 117, 101, 46, 108, 101, 110, 103, 116, 104, 59, 32, 105, 43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 105, 115, 95, 101, 113, 117, 97, 108, 32, 38, 61, 32, 122, 111, 110, 101, 46, 118, 97, 108, 117, 101, 46, 105, 110, 100, 101, 120, 79, 102, 40, 116, 104, 105, 115, 46, 118, 97, 108, 117, 101, 91, 105, 93, 41, 32, 33, 61, 61, 32, 45, 49, 59, 10, 32, 32, 125, 10, 10, 32, 32, 114, 101, 116, 117, 114, 110, 32, 105, 115, 95, 101, 113, 117, 97, 108, 59, 10, 125, 59, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 80, 114, 111, 112, 101, 114, 116, 121, 40, 111, 98, 106, 44, 32, 112, 114, 111, 112, 41, 32, 123, 10, 32, 32, 79, 98, 106, 101, 99, 116, 46, 100, 101, 102, 105, 110, 101, 80, 114, 111, 112, 101, 114, 116, 121, 40, 111, 98, 106, 44, 32, 112, 114, 111, 112, 44, 32, 123, 32, 101, 110, 117, 109, 101, 114, 97, 98, 108, 101, 58, 32, 116, 114, 117, 101, 44, 32, 118, 97, 108, 117, 101, 58, 32, 110, 101, 119, 32, 86, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 40, 112, 114, 111, 112, 41, 32, 125, 41, 59, 10, 125, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 111, 98, 106, 44, 32, 112, 114, 111, 112, 41, 32, 123, 10, 32, 32, 79, 98, 106, 101, 99, 116, 46, 100, 101, 102, 105, 110, 101, 80, 114, 111, 112, 101, 114, 116, 121, 40, 111, 98, 106, 44, 32, 112, 114, 111, 112, 44, 32, 123, 32, 101, 110, 117, 109, 101, 114, 97, 98, 108, 101, 58, 32, 116, 114, 117, 101, 44, 32, 118, 97, 108, 117, 101, 58, 32, 110, 101, 119, 32, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 73, 110, 116, 101, 114, 102, 97, 99, 101, 40, 112, 114, 111, 112, 41, 32, 125, 41, 59, 10, 125, 10, 10, 101, 120, 116, 101, 110, 115, 105, 111, 110, 46, 115, 101, 116, 77, 101, 115, 115, 97, 103, 101, 76, 105, 115, 116, 101, 110, 101, 114, 40, 102, 117, 110, 99, 116, 105, 111, 110, 40, 106, 115, 111, 110, 41, 32, 123, 10, 32, 32, 116, 114, 121, 32, 123, 10, 32, 32, 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, 74, 83, 79, 78, 46, 112, 97, 114, 115, 101, 40, 106, 115, 111, 110, 41, 59, 10, 10, 32, 32, 32, 32, 115, 119, 105, 116, 99, 104, 32, 40, 109, 115, 103, 46, 109, 101, 116, 104, 111, 100, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 103, 101, 116, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 104, 97, 110, 100, 108, 101, 80, 114, 111, 109, 105, 115, 101, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 122, 111, 110, 101, 115, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 104, 97, 110, 100, 108, 101, 90, 111, 110, 101, 115, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 115, 117, 98, 115, 99, 114, 105, 98, 101, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 104, 97, 110, 100, 108, 101, 83, 117, 98, 115, 99, 114, 105, 98, 101, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 115, 101, 116, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 104, 97, 110, 100, 108, 101, 80, 114, 111, 109, 105, 115, 101, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 100, 101, 102, 97, 117, 108, 116, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 125, 10, 32, 32, 125, 32, 99, 97, 116, 99, 104, 32, 40, 101, 114, 114, 111, 114, 41, 32, 123, 10, 32, 32, 32, 32, 99, 111, 110, 115, 111, 108, 101, 46, 108, 111, 103, 40, 39, 69, 114, 114, 111, 114, 32, 105, 110, 32, 109, 101, 115, 115, 97, 103, 101, 32, 108, 105, 115, 116, 101, 110, 101, 114, 58, 32, 39, 32, 43, 32, 101, 114, 114, 111, 114, 41, 59, 10, 32, 32, 125, 10, 125, 41, 59, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 104, 97, 110, 100, 108, 101, 80, 114, 111, 109, 105, 115, 101, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 99, 98, 111, 98, 106, 32, 61, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 91, 109, 115, 103, 46, 97, 115, 121, 110, 99, 67, 97, 108, 108, 73, 100, 93, 59, 10, 10, 32, 32, 105, 102, 32, 40, 109, 115, 103, 46, 101, 114, 114, 111, 114, 41, 32, 123, 10, 32, 32, 32, 32, 118, 97, 114, 32, 101, 114, 114, 111, 114, 32, 61, 32, 123, 125, 59, 10, 32, 32, 32, 32, 101, 114, 114, 111, 114, 46, 101, 114, 114, 111, 114, 32, 61, 32, 109, 115, 103, 46, 118, 97, 108, 117, 101, 59, 10, 32, 32, 32, 32, 115, 119, 105, 116, 99, 104, 32, 40, 109, 115, 103, 46, 118, 97, 108, 117, 101, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 112, 101, 114, 109, 105, 115, 115, 105, 111, 110, 95, 100, 101, 110, 105, 101, 100, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 101, 114, 114, 111, 114, 46, 109, 101, 115, 115, 97, 103, 101, 32, 61, 32, 39, 80, 101, 114, 109, 105, 115, 115, 105, 111, 110, 32, 100, 101, 110, 105, 101, 100, 39, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 105, 110, 118, 97, 108, 105, 100, 95, 111, 112, 101, 114, 97, 116, 105, 111, 110, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 101, 114, 114, 111, 114, 46, 109, 101, 115, 115, 97, 103, 101, 32, 61, 32, 39, 73, 110, 118, 97, 108, 105, 100, 32, 111, 112, 101, 114, 97, 116, 105, 111, 110, 39, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 116, 105, 109, 101, 111, 117, 116, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 101, 114, 114, 111, 114, 46, 109, 101, 115, 115, 97, 103, 101, 32, 61, 32, 39, 79, 112, 101, 114, 97, 116, 105, 111, 110, 32, 116, 105, 109, 101, 100, 32, 111, 117, 116, 39, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 105, 110, 118, 97, 108, 105, 100, 95, 122, 111, 110, 101, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 101, 114, 114, 111, 114, 46, 109, 101, 115, 115, 97, 103, 101, 32, 61, 32, 39, 90, 111, 110, 101, 32, 105, 110, 118, 97, 108, 105, 100, 32, 111, 114, 32, 110, 111, 116, 32, 102, 111, 117, 110, 100, 39, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 117, 110, 107, 110, 111, 119, 110, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 101, 114, 114, 111, 114, 46, 109, 101, 115, 115, 97, 103, 101, 32, 61, 32, 39, 65, 110, 32, 117, 110, 107, 110, 111, 119, 110, 32, 101, 114, 114, 111, 114, 32, 111, 99, 99, 117, 114, 101, 100, 39, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 100, 101, 102, 97, 117, 108, 116, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 125, 10, 10, 32, 32, 32, 32, 99, 98, 111, 98, 106, 46, 114, 101, 106, 101, 99, 116, 40, 101, 114, 114, 111, 114, 41, 59, 10, 32, 32, 125, 32, 101, 108, 115, 101, 32, 123, 10, 32, 32, 32, 32, 99, 98, 111, 98, 106, 46, 114, 101, 115, 111, 108, 118, 101, 40, 109, 115, 103, 46, 118, 97, 108, 117, 101, 41, 59, 10, 32, 32, 125, 10, 10, 32, 32, 100, 101, 108, 101, 116, 101, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 91, 109, 115, 103, 46, 97, 115, 121, 110, 99, 67, 97, 108, 108, 73, 100, 93, 59, 10, 125, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 104, 97, 110, 100, 108, 101, 90, 111, 110, 101, 115, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 99, 98, 111, 98, 106, 32, 61, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 91, 109, 115, 103, 46, 97, 115, 121, 110, 99, 67, 97, 108, 108, 73, 100, 93, 59, 10, 10, 32, 32, 105, 102, 32, 40, 99, 98, 111, 98, 106, 41, 10, 32, 32, 32, 32, 99, 98, 111, 98, 106, 46, 114, 101, 115, 111, 108, 118, 101, 40, 110, 101, 119, 32, 90, 111, 110, 101, 40, 109, 115, 103, 46, 118, 97, 108, 117, 101, 41, 41, 59, 10, 125, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 104, 97, 110, 100, 108, 101, 83, 117, 98, 115, 99, 114, 105, 98, 101, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 32, 123, 10, 32, 32, 100, 101, 108, 101, 116, 101, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 91, 109, 115, 103, 46, 97, 115, 121, 110, 99, 67, 97, 108, 108, 73, 100, 93, 59, 10, 32, 32, 118, 97, 114, 32, 118, 97, 108, 117, 101, 32, 61, 32, 109, 115, 103, 46, 118, 97, 108, 117, 101, 59, 10, 32, 32, 118, 97, 108, 117, 101, 46, 122, 111, 110, 101, 32, 61, 32, 110, 101, 119, 32, 90, 111, 110, 101, 40, 118, 97, 108, 117, 101, 46, 122, 111, 110, 101, 41, 59, 10, 10, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 105, 32, 61, 32, 48, 59, 32, 105, 32, 60, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 46, 108, 101, 110, 103, 116, 104, 59, 32, 105, 43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 118, 97, 114, 32, 105, 116, 114, 32, 61, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 91, 105, 93, 59, 10, 32, 32, 32, 32, 118, 97, 114, 32, 105, 102, 97, 99, 101, 73, 115, 32, 61, 32, 40, 118, 97, 108, 117, 101, 46, 105, 110, 116, 101, 114, 102, 97, 99, 101, 78, 97, 109, 101, 46, 116, 111, 76, 111, 119, 101, 114, 67, 97, 115, 101, 40, 41, 32, 61, 61, 61, 32, 105, 116, 114, 46, 110, 97, 109, 101, 46, 116, 111, 76, 111, 119, 101, 114, 67, 97, 115, 101, 40, 41, 41, 59, 10, 32, 32, 32, 32, 105, 102, 32, 40, 105, 102, 97, 99, 101, 73, 115, 32, 61, 61, 61, 32, 116, 114, 117, 101, 32, 38, 38, 32, 118, 97, 108, 117, 101, 46, 122, 111, 110, 101, 46, 101, 113, 117, 97, 108, 115, 40, 105, 116, 114, 46, 122, 111, 110, 101, 41, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 105, 116, 114, 46, 99, 97, 108, 108, 98, 97, 99, 107, 40, 118, 97, 108, 117, 101, 41, 59, 10, 32, 32, 32, 32, 125, 10, 32, 32, 125, 10, 125, 10, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 118, 101, 104, 105, 99, 108, 101, 83, 112, 101, 101, 100, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 101, 110, 103, 105, 110, 101, 83, 112, 101, 101, 100, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 116, 114, 97, 110, 115, 109, 105, 115, 115, 105, 111, 110, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 115, 116, 101, 101, 114, 105, 110, 103, 87, 104, 101, 101, 108, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 116, 104, 114, 111, 116, 116, 108, 101, 80, 111, 115, 105, 116, 105, 111, 110, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 101, 110, 103, 105, 110, 101, 67, 111, 111, 108, 97, 110, 116, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 110, 105, 103, 104, 116, 77, 111, 100, 101, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 100, 114, 105, 118, 105, 110, 103, 77, 111, 100, 101, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 98, 114, 97, 107, 101, 79, 112, 101, 114, 97, 116, 105, 111, 110, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 116, 105, 114, 101, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 100, 111, 111, 114, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 100, 101, 102, 114, 111, 115, 116, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 99, 108, 105, 109, 97, 116, 101, 67, 111, 110, 116, 114, 111, 108, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 108, 105, 103, 104, 116, 83, 116, 97, 116, 117, 115, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 98, 97, 116, 116, 101, 114, 121, 83, 116, 97, 116, 117, 115, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 102, 117, 101, 108, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 116, 101, 109, 112, 101, 114, 97, 116, 117, 114, 101, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 111, 100, 111, 109, 101, 116, 101, 114, 39, 41, 59, 10, 0 };
+const char kSource_vehicle_api[] = { 47, 47, 32, 67, 111, 112, 121, 114, 105, 103, 104, 116, 32, 40, 99, 41, 32, 50, 48, 49, 52, 32, 73, 110, 116, 101, 108, 32, 67, 111, 114, 112, 111, 114, 97, 116, 105, 111, 110, 46, 32, 65, 108, 108, 32, 114, 105, 103, 104, 116, 115, 32, 114, 101, 115, 101, 114, 118, 101, 100, 46, 10, 47, 47, 32, 85, 115, 101, 32, 111, 102, 32, 116, 104, 105, 115, 32, 115, 111, 117, 114, 99, 101, 32, 99, 111, 100, 101, 32, 105, 115, 32, 103, 111, 118, 101, 114, 110, 101, 100, 32, 98, 121, 32, 97, 32, 66, 83, 68, 45, 115, 116, 121, 108, 101, 32, 108, 105, 99, 101, 110, 115, 101, 32, 116, 104, 97, 116, 32, 99, 97, 110, 32, 98, 101, 10, 47, 47, 32, 102, 111, 117, 110, 100, 32, 105, 110, 32, 116, 104, 101, 32, 76, 73, 67, 69, 78, 83, 69, 32, 102, 105, 108, 101, 46, 10, 10, 118, 97, 114, 32, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 32, 61, 32, 48, 59, 10, 118, 97, 114, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 32, 61, 32, 123, 125, 59, 10, 10, 118, 97, 114, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 32, 61, 32, 91, 93, 59, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 118, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 67, 111, 109, 109, 111, 110, 67, 111, 110, 116, 114, 117, 99, 116, 111, 114, 40, 111, 98, 106, 44, 32, 97, 116, 116, 110, 97, 109, 101, 41, 32, 123, 10, 32, 32, 111, 98, 106, 46, 97, 116, 116, 114, 105, 98, 117, 116, 101, 78, 97, 109, 101, 32, 61, 32, 97, 116, 116, 110, 97, 109, 101, 59, 10, 10, 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, 123, 125, 59, 10, 32, 32, 109, 115, 103, 91, 39, 109, 101, 116, 104, 111, 100, 39, 93, 32, 61, 32, 39, 122, 111, 110, 101, 115, 39, 59, 10, 32, 32, 109, 115, 103, 91, 39, 110, 97, 109, 101, 39, 93, 32, 61, 32, 111, 98, 106, 46, 97, 116, 116, 114, 105, 98, 117, 116, 101, 78, 97, 109, 101, 59, 10, 10, 32, 32, 111, 98, 106, 46, 95, 122, 111, 110, 101, 115, 32, 61, 32, 110, 101, 119, 32, 90, 111, 110, 101, 59, 10, 10, 32, 32, 118, 97, 114, 32, 99, 97, 108, 108, 32, 61, 32, 110, 101, 119, 32, 65, 115, 121, 110, 99, 67, 97, 108, 108, 40, 102, 117, 110, 99, 116, 105, 111, 110, 40, 100, 97, 116, 97, 41, 32, 123, 10, 32, 32, 32, 32, 111, 98, 106, 46, 95, 122, 111, 110, 101, 115, 32, 61, 32, 100, 97, 116, 97, 59, 10, 32, 32, 125, 41, 59, 10, 10, 32, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 91, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 93, 32, 61, 32, 99, 97, 108, 108, 59, 10, 32, 32, 109, 115, 103, 46, 97, 115, 121, 110, 99, 67, 97, 108, 108, 73, 100, 32, 61, 32, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 59, 10, 32, 32, 43, 43, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 59, 10, 10, 32, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 46, 112, 111, 115, 116, 77, 101, 115, 115, 97, 103, 101, 40, 74, 83, 79, 78, 46, 115, 116, 114, 105, 110, 103, 105, 102, 121, 40, 109, 115, 103, 41, 41, 59, 10, 10, 32, 32, 79, 98, 106, 101, 99, 116, 46, 100, 101, 102, 105, 110, 101, 80, 114, 111, 112, 101, 114, 116, 121, 40, 111, 98, 106, 44, 32, 39, 122, 111, 110, 101, 115, 39, 44, 32, 123, 32, 103, 101, 116, 58, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 41, 32, 123, 32, 114, 101, 116, 117, 114, 110, 32, 111, 98, 106, 46, 95, 122, 111, 110, 101, 115, 32, 125, 32, 125, 41, 59, 10, 125, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 86, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 40, 97, 116, 116, 110, 97, 109, 101, 41, 32, 123, 10, 32, 32, 118, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 67, 111, 109, 109, 111, 110, 67, 111, 110, 116, 114, 117, 99, 116, 111, 114, 40, 116, 104, 105, 115, 44, 32, 97, 116, 116, 110, 97, 109, 101, 41, 59, 10, 125, 10, 10, 86, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 46, 103, 101, 116, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 122, 111, 110, 101, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, 123, 125, 59, 10, 32, 32, 109, 115, 103, 91, 39, 109, 101, 116, 104, 111, 100, 39, 93, 32, 61, 32, 39, 103, 101, 116, 39, 59, 10, 32, 32, 109, 115, 103, 91, 39, 110, 97, 109, 101, 39, 93, 32, 61, 32, 116, 104, 105, 115, 46, 97, 116, 116, 114, 105, 98, 117, 116, 101, 78, 97, 109, 101, 59, 10, 32, 32, 109, 115, 103, 91, 39, 122, 111, 110, 101, 39, 93, 32, 61, 32, 122, 111, 110, 101, 59, 10, 10, 32, 32, 114, 101, 116, 117, 114, 110, 32, 99, 114, 101, 97, 116, 101, 80, 114, 111, 109, 105, 115, 101, 40, 109, 115, 103, 41, 59, 10, 125, 59, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 73, 110, 116, 101, 114, 102, 97, 99, 101, 40, 97, 116, 116, 110, 97, 109, 101, 41, 32, 123, 10, 32, 32, 118, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 67, 111, 109, 109, 111, 110, 67, 111, 110, 116, 114, 117, 99, 116, 111, 114, 40, 116, 104, 105, 115, 44, 32, 97, 116, 116, 110, 97, 109, 101, 41, 59, 10, 125, 10, 10, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 73, 110, 116, 101, 114, 102, 97, 99, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 32, 61, 32, 86, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 59, 10, 10, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 73, 110, 116, 101, 114, 102, 97, 99, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 46, 115, 117, 98, 115, 99, 114, 105, 98, 101, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 99, 97, 108, 108, 98, 97, 99, 107, 44, 32, 122, 111, 110, 101, 41, 32, 123, 10, 32, 32, 105, 102, 32, 40, 33, 122, 111, 110, 101, 41, 32, 122, 111, 110, 101, 32, 61, 32, 110, 101, 119, 32, 90, 111, 110, 101, 40, 41, 59, 10, 10, 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, 123, 125, 59, 10, 32, 32, 109, 115, 103, 91, 39, 109, 101, 116, 104, 111, 100, 39, 93, 32, 61, 32, 39, 115, 117, 98, 115, 99, 114, 105, 98, 101, 39, 59, 10, 32, 32, 109, 115, 103, 91, 39, 110, 97, 109, 101, 39, 93, 32, 61, 32, 116, 104, 105, 115, 46, 97, 116, 116, 114, 105, 98, 117, 116, 101, 78, 97, 109, 101, 59, 10, 32, 32, 109, 115, 103, 91, 39, 122, 111, 110, 101, 39, 93, 32, 61, 32, 122, 111, 110, 101, 59, 10, 10, 32, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 46, 112, 111, 115, 116, 77, 101, 115, 115, 97, 103, 101, 40, 74, 83, 79, 78, 46, 115, 116, 114, 105, 110, 103, 105, 102, 121, 40, 109, 115, 103, 41, 41, 59, 10, 10, 32, 32, 109, 115, 103, 91, 39, 99, 97, 108, 108, 98, 97, 99, 107, 39, 93, 32, 61, 32, 99, 97, 108, 108, 98, 97, 99, 107, 59, 10, 10, 32, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 46, 112, 117, 115, 104, 40, 109, 115, 103, 41, 59, 10, 10, 32, 32, 114, 101, 116, 117, 114, 110, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 46, 108, 101, 110, 103, 116, 104, 32, 45, 32, 49, 59, 10, 125, 59, 10, 10, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 73, 110, 116, 101, 114, 102, 97, 99, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 46, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, 101, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 104, 97, 110, 100, 108, 101, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 111, 98, 106, 32, 61, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 91, 104, 97, 110, 100, 108, 101, 93, 59, 10, 32, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 46, 115, 112, 108, 105, 99, 101, 40, 104, 97, 110, 100, 108, 101, 44, 32, 49, 41, 59, 10, 10, 32, 32, 118, 97, 114, 32, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, 101, 32, 61, 32, 116, 114, 117, 101, 59, 10, 10, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 105, 32, 61, 32, 48, 59, 32, 105, 32, 60, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 46, 108, 101, 110, 103, 116, 104, 59, 32, 105, 43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 118, 97, 114, 32, 116, 101, 115, 116, 79, 98, 106, 32, 61, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 91, 105, 93, 59, 10, 10, 32, 32, 32, 32, 105, 102, 32, 40, 116, 101, 115, 116, 79, 98, 106, 46, 110, 97, 109, 101, 32, 61, 61, 61, 32, 111, 98, 106, 46, 110, 97, 109, 101, 32, 38, 38, 32, 116, 101, 115, 116, 79, 98, 106, 46, 122, 111, 110, 101, 46, 101, 113, 117, 97, 108, 115, 40, 111, 98, 106, 46, 122, 111, 110, 101, 41, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, 101, 32, 61, 32, 102, 97, 108, 115, 101, 59, 10, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 125, 10, 32, 32, 125, 10, 10, 32, 32, 105, 102, 32, 40, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, 101, 41, 32, 123, 10, 32, 32, 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, 123, 125, 59, 10, 32, 32, 32, 32, 109, 115, 103, 91, 39, 109, 101, 116, 104, 111, 100, 39, 93, 32, 61, 32, 39, 117, 110, 115, 117, 98, 115, 99, 114, 105, 98, 101, 39, 59, 10, 32, 32, 32, 32, 109, 115, 103, 91, 39, 110, 97, 109, 101, 39, 93, 32, 61, 32, 116, 104, 105, 115, 46, 97, 116, 116, 114, 105, 98, 117, 116, 101, 78, 97, 109, 101, 59, 10, 32, 32, 32, 32, 109, 115, 103, 91, 39, 122, 111, 110, 101, 39, 93, 32, 61, 32, 111, 98, 106, 46, 122, 111, 110, 101, 59, 10, 10, 32, 32, 32, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 46, 112, 111, 115, 116, 77, 101, 115, 115, 97, 103, 101, 40, 74, 83, 79, 78, 46, 115, 116, 114, 105, 110, 103, 105, 102, 121, 40, 109, 115, 103, 41, 41, 59, 10, 32, 32, 125, 10, 125, 59, 10, 10, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 73, 110, 116, 101, 114, 102, 97, 99, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 46, 115, 101, 116, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 40, 118, 97, 108, 117, 101, 44, 32, 122, 111, 110, 101, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, 123, 125, 59, 10, 32, 32, 109, 115, 103, 91, 39, 109, 101, 116, 104, 111, 100, 39, 93, 32, 61, 32, 39, 115, 101, 116, 39, 59, 10, 32, 32, 109, 115, 103, 91, 39, 110, 97, 109, 101, 39, 93, 32, 61, 32, 116, 104, 105, 115, 46, 97, 116, 116, 114, 105, 98, 117, 116, 101, 78, 97, 109, 101, 59, 10, 32, 32, 109, 115, 103, 91, 39, 122, 111, 110, 101, 39, 93, 32, 61, 32, 122, 111, 110, 101, 59, 10, 32, 32, 109, 115, 103, 91, 39, 118, 97, 108, 117, 101, 39, 93, 32, 61, 32, 118, 97, 108, 117, 101, 59, 10, 10, 32, 32, 114, 101, 116, 117, 114, 110, 32, 99, 114, 101, 97, 116, 101, 80, 114, 111, 109, 105, 115, 101, 40, 109, 115, 103, 41, 59, 10, 125, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 65, 115, 121, 110, 99, 67, 97, 108, 108, 40, 114, 101, 115, 111, 108, 118, 101, 44, 32, 114, 101, 106, 101, 99, 116, 41, 32, 123, 10, 32, 32, 116, 104, 105, 115, 46, 114, 101, 115, 111, 108, 118, 101, 32, 61, 32, 114, 101, 115, 111, 108, 118, 101, 59, 10, 32, 32, 116, 104, 105, 115, 46, 114, 101, 106, 101, 99, 116, 32, 61, 32, 114, 101, 106, 101, 99, 116, 59, 10, 125, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 99, 114, 101, 97, 116, 101, 80, 114, 111, 109, 105, 115, 101, 40, 109, 115, 103, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 112, 114, 111, 109, 105, 115, 101, 32, 61, 32, 110, 101, 119, 32, 80, 114, 111, 109, 105, 115, 101, 40, 102, 117, 110, 99, 116, 105, 111, 110, 40, 114, 101, 115, 111, 108, 118, 101, 44, 32, 114, 101, 106, 101, 99, 116, 41, 32, 123, 10, 32, 32, 32, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 91, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 93, 32, 61, 32, 110, 101, 119, 32, 65, 115, 121, 110, 99, 67, 97, 108, 108, 40, 114, 101, 115, 111, 108, 118, 101, 44, 32, 114, 101, 106, 101, 99, 116, 41, 59, 10, 32, 32, 125, 41, 59, 10, 10, 32, 32, 109, 115, 103, 46, 97, 115, 121, 110, 99, 67, 97, 108, 108, 73, 100, 32, 61, 32, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 59, 10, 32, 32, 101, 120, 116, 101, 110, 115, 105, 111, 110, 46, 112, 111, 115, 116, 77, 101, 115, 115, 97, 103, 101, 40, 74, 83, 79, 78, 46, 115, 116, 114, 105, 110, 103, 105, 102, 121, 40, 109, 115, 103, 41, 41, 59, 10, 32, 32, 43, 43, 110, 101, 120, 116, 95, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 95, 105, 100, 59, 10, 32, 32, 114, 101, 116, 117, 114, 110, 32, 112, 114, 111, 109, 105, 115, 101, 59, 10, 125, 10, 10, 119, 105, 110, 100, 111, 119, 46, 90, 111, 110, 101, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 122, 111, 110, 101, 41, 32, 123, 10, 32, 32, 116, 104, 105, 115, 46, 118, 97, 108, 117, 101, 32, 61, 32, 122, 111, 110, 101, 32, 63, 32, 122, 111, 110, 101, 32, 58, 32, 91, 93, 59, 10, 10, 32, 32, 79, 98, 106, 101, 99, 116, 46, 100, 101, 102, 105, 110, 101, 80, 114, 111, 112, 101, 114, 116, 121, 40, 116, 104, 105, 115, 44, 32, 39, 100, 114, 105, 118, 101, 114, 39, 44, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 123, 32, 101, 110, 117, 109, 101, 114, 97, 98, 108, 101, 58, 32, 102, 97, 108, 115, 101, 44, 32, 103, 101, 116, 58, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 114, 101, 116, 117, 114, 110, 32, 110, 101, 119, 32, 90, 111, 110, 101, 40, 91, 39, 70, 114, 111, 110, 116, 39, 44, 32, 39, 76, 101, 102, 116, 39, 93, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 125, 32, 125, 41, 59, 10, 125, 59, 10, 10, 119, 105, 110, 100, 111, 119, 46, 90, 111, 110, 101, 46, 112, 114, 111, 116, 111, 116, 121, 112, 101, 46, 101, 113, 117, 97, 108, 115, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 40, 122, 111, 110, 101, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 105, 115, 95, 101, 113, 117, 97, 108, 32, 61, 32, 116, 114, 117, 101, 59, 10, 10, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 105, 32, 61, 32, 48, 59, 32, 105, 32, 60, 32, 122, 111, 110, 101, 46, 118, 97, 108, 117, 101, 46, 108, 101, 110, 103, 116, 104, 59, 32, 105, 43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 105, 115, 95, 101, 113, 117, 97, 108, 32, 38, 61, 32, 116, 104, 105, 115, 46, 118, 97, 108, 117, 101, 46, 105, 110, 100, 101, 120, 79, 102, 40, 122, 111, 110, 101, 46, 118, 97, 108, 117, 101, 91, 105, 93, 41, 32, 33, 61, 61, 32, 45, 49, 59, 10, 32, 32, 125, 10, 10, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 105, 32, 61, 32, 48, 59, 32, 105, 32, 60, 32, 116, 104, 105, 115, 46, 118, 97, 108, 117, 101, 46, 108, 101, 110, 103, 116, 104, 59, 32, 105, 43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 105, 115, 95, 101, 113, 117, 97, 108, 32, 38, 61, 32, 122, 111, 110, 101, 46, 118, 97, 108, 117, 101, 46, 105, 110, 100, 101, 120, 79, 102, 40, 116, 104, 105, 115, 46, 118, 97, 108, 117, 101, 91, 105, 93, 41, 32, 33, 61, 61, 32, 45, 49, 59, 10, 32, 32, 125, 10, 10, 32, 32, 114, 101, 116, 117, 114, 110, 32, 105, 115, 95, 101, 113, 117, 97, 108, 59, 10, 125, 59, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 80, 114, 111, 112, 101, 114, 116, 121, 40, 111, 98, 106, 44, 32, 112, 114, 111, 112, 41, 32, 123, 10, 32, 32, 79, 98, 106, 101, 99, 116, 46, 100, 101, 102, 105, 110, 101, 80, 114, 111, 112, 101, 114, 116, 121, 40, 111, 98, 106, 44, 32, 112, 114, 111, 112, 44, 32, 123, 32, 101, 110, 117, 109, 101, 114, 97, 98, 108, 101, 58, 32, 116, 114, 117, 101, 44, 32, 118, 97, 108, 117, 101, 58, 32, 110, 101, 119, 32, 86, 101, 104, 105, 99, 108, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 40, 112, 114, 111, 112, 41, 32, 125, 41, 59, 10, 125, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 111, 98, 106, 44, 32, 112, 114, 111, 112, 41, 32, 123, 10, 32, 32, 79, 98, 106, 101, 99, 116, 46, 100, 101, 102, 105, 110, 101, 80, 114, 111, 112, 101, 114, 116, 121, 40, 111, 98, 106, 44, 32, 112, 114, 111, 112, 44, 32, 123, 32, 101, 110, 117, 109, 101, 114, 97, 98, 108, 101, 58, 32, 116, 114, 117, 101, 44, 32, 118, 97, 108, 117, 101, 58, 32, 110, 101, 119, 32, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 73, 110, 116, 101, 114, 102, 97, 99, 101, 40, 112, 114, 111, 112, 41, 32, 125, 41, 59, 10, 125, 10, 10, 101, 120, 116, 101, 110, 115, 105, 111, 110, 46, 115, 101, 116, 77, 101, 115, 115, 97, 103, 101, 76, 105, 115, 116, 101, 110, 101, 114, 40, 102, 117, 110, 99, 116, 105, 111, 110, 40, 106, 115, 111, 110, 41, 32, 123, 10, 32, 32, 116, 114, 121, 32, 123, 10, 32, 32, 32, 32, 118, 97, 114, 32, 109, 115, 103, 32, 61, 32, 74, 83, 79, 78, 46, 112, 97, 114, 115, 101, 40, 106, 115, 111, 110, 41, 59, 10, 10, 32, 32, 32, 32, 115, 119, 105, 116, 99, 104, 32, 40, 109, 115, 103, 46, 109, 101, 116, 104, 111, 100, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 103, 101, 116, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 104, 97, 110, 100, 108, 101, 80, 114, 111, 109, 105, 115, 101, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 122, 111, 110, 101, 115, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 104, 97, 110, 100, 108, 101, 90, 111, 110, 101, 115, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 115, 117, 98, 115, 99, 114, 105, 98, 101, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 104, 97, 110, 100, 108, 101, 83, 117, 98, 115, 99, 114, 105, 98, 101, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 115, 101, 116, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 104, 97, 110, 100, 108, 101, 80, 114, 111, 109, 105, 115, 101, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 100, 101, 102, 97, 117, 108, 116, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 125, 10, 32, 32, 125, 32, 99, 97, 116, 99, 104, 32, 40, 101, 114, 114, 111, 114, 41, 32, 123, 10, 32, 32, 32, 32, 99, 111, 110, 115, 111, 108, 101, 46, 108, 111, 103, 40, 39, 69, 114, 114, 111, 114, 32, 105, 110, 32, 109, 101, 115, 115, 97, 103, 101, 32, 108, 105, 115, 116, 101, 110, 101, 114, 58, 32, 39, 32, 43, 32, 101, 114, 114, 111, 114, 41, 59, 10, 32, 32, 125, 10, 125, 41, 59, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 104, 97, 110, 100, 108, 101, 80, 114, 111, 109, 105, 115, 101, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 99, 98, 111, 98, 106, 32, 61, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 91, 109, 115, 103, 46, 97, 115, 121, 110, 99, 67, 97, 108, 108, 73, 100, 93, 59, 10, 10, 32, 32, 105, 102, 32, 40, 109, 115, 103, 46, 101, 114, 114, 111, 114, 41, 32, 123, 10, 32, 32, 32, 32, 118, 97, 114, 32, 101, 114, 114, 111, 114, 32, 61, 32, 123, 125, 59, 10, 32, 32, 32, 32, 101, 114, 114, 111, 114, 46, 101, 114, 114, 111, 114, 32, 61, 32, 109, 115, 103, 46, 118, 97, 108, 117, 101, 59, 10, 32, 32, 32, 32, 115, 119, 105, 116, 99, 104, 32, 40, 109, 115, 103, 46, 118, 97, 108, 117, 101, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 112, 101, 114, 109, 105, 115, 115, 105, 111, 110, 95, 100, 101, 110, 105, 101, 100, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 101, 114, 114, 111, 114, 46, 109, 101, 115, 115, 97, 103, 101, 32, 61, 32, 39, 80, 101, 114, 109, 105, 115, 115, 105, 111, 110, 32, 100, 101, 110, 105, 101, 100, 39, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 105, 110, 118, 97, 108, 105, 100, 95, 111, 112, 101, 114, 97, 116, 105, 111, 110, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 101, 114, 114, 111, 114, 46, 109, 101, 115, 115, 97, 103, 101, 32, 61, 32, 39, 73, 110, 118, 97, 108, 105, 100, 32, 111, 112, 101, 114, 97, 116, 105, 111, 110, 39, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 116, 105, 109, 101, 111, 117, 116, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 101, 114, 114, 111, 114, 46, 109, 101, 115, 115, 97, 103, 101, 32, 61, 32, 39, 79, 112, 101, 114, 97, 116, 105, 111, 110, 32, 116, 105, 109, 101, 100, 32, 111, 117, 116, 39, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 105, 110, 118, 97, 108, 105, 100, 95, 122, 111, 110, 101, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 101, 114, 114, 111, 114, 46, 109, 101, 115, 115, 97, 103, 101, 32, 61, 32, 39, 90, 111, 110, 101, 32, 105, 110, 118, 97, 108, 105, 100, 32, 111, 114, 32, 110, 111, 116, 32, 102, 111, 117, 110, 100, 39, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 99, 97, 115, 101, 32, 39, 117, 110, 107, 110, 111, 119, 110, 39, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 101, 114, 114, 111, 114, 46, 109, 101, 115, 115, 97, 103, 101, 32, 61, 32, 39, 65, 110, 32, 117, 110, 107, 110, 111, 119, 110, 32, 101, 114, 114, 111, 114, 32, 111, 99, 99, 117, 114, 101, 100, 39, 59, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 32, 32, 100, 101, 102, 97, 117, 108, 116, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 32, 32, 32, 32, 125, 10, 10, 32, 32, 32, 32, 99, 98, 111, 98, 106, 46, 114, 101, 106, 101, 99, 116, 40, 101, 114, 114, 111, 114, 41, 59, 10, 32, 32, 125, 32, 101, 108, 115, 101, 32, 123, 10, 32, 32, 32, 32, 99, 98, 111, 98, 106, 46, 114, 101, 115, 111, 108, 118, 101, 40, 109, 115, 103, 46, 118, 97, 108, 117, 101, 41, 59, 10, 32, 32, 125, 10, 10, 32, 32, 100, 101, 108, 101, 116, 101, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 91, 109, 115, 103, 46, 97, 115, 121, 110, 99, 67, 97, 108, 108, 73, 100, 93, 59, 10, 125, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 104, 97, 110, 100, 108, 101, 90, 111, 110, 101, 115, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 32, 123, 10, 32, 32, 118, 97, 114, 32, 99, 98, 111, 98, 106, 32, 61, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 91, 109, 115, 103, 46, 97, 115, 121, 110, 99, 67, 97, 108, 108, 73, 100, 93, 59, 10, 10, 32, 32, 105, 102, 32, 40, 99, 98, 111, 98, 106, 41, 10, 32, 32, 32, 32, 99, 98, 111, 98, 106, 46, 114, 101, 115, 111, 108, 118, 101, 40, 110, 101, 119, 32, 90, 111, 110, 101, 40, 109, 115, 103, 46, 118, 97, 108, 117, 101, 41, 41, 59, 10, 125, 10, 10, 102, 117, 110, 99, 116, 105, 111, 110, 32, 104, 97, 110, 100, 108, 101, 83, 117, 98, 115, 99, 114, 105, 98, 101, 82, 101, 112, 108, 121, 40, 109, 115, 103, 41, 32, 123, 10, 32, 32, 100, 101, 108, 101, 116, 101, 32, 97, 115, 121, 110, 99, 95, 99, 97, 108, 108, 115, 91, 109, 115, 103, 46, 97, 115, 121, 110, 99, 67, 97, 108, 108, 73, 100, 93, 59, 10, 32, 32, 118, 97, 114, 32, 118, 97, 108, 117, 101, 32, 61, 32, 109, 115, 103, 46, 118, 97, 108, 117, 101, 59, 10, 32, 32, 118, 97, 108, 117, 101, 46, 122, 111, 110, 101, 32, 61, 32, 110, 101, 119, 32, 90, 111, 110, 101, 40, 118, 97, 108, 117, 101, 46, 122, 111, 110, 101, 41, 59, 10, 10, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 105, 32, 61, 32, 48, 59, 32, 105, 32, 60, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 46, 108, 101, 110, 103, 116, 104, 59, 32, 105, 43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 118, 97, 114, 32, 105, 116, 114, 32, 61, 32, 115, 117, 98, 115, 99, 114, 105, 112, 116, 105, 111, 110, 115, 91, 105, 93, 59, 10, 32, 32, 32, 32, 118, 97, 114, 32, 105, 102, 97, 99, 101, 73, 115, 32, 61, 32, 40, 118, 97, 108, 117, 101, 46, 105, 110, 116, 101, 114, 102, 97, 99, 101, 78, 97, 109, 101, 46, 116, 111, 76, 111, 119, 101, 114, 67, 97, 115, 101, 40, 41, 32, 61, 61, 61, 32, 105, 116, 114, 46, 110, 97, 109, 101, 46, 116, 111, 76, 111, 119, 101, 114, 67, 97, 115, 101, 40, 41, 41, 59, 10, 32, 32, 32, 32, 105, 102, 32, 40, 105, 102, 97, 99, 101, 73, 115, 32, 61, 61, 61, 32, 116, 114, 117, 101, 32, 38, 38, 32, 118, 97, 108, 117, 101, 46, 122, 111, 110, 101, 46, 101, 113, 117, 97, 108, 115, 40, 105, 116, 114, 46, 122, 111, 110, 101, 41, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 105, 116, 114, 46, 99, 97, 108, 108, 98, 97, 99, 107, 40, 118, 97, 108, 117, 101, 41, 59, 10, 32, 32, 32, 32, 125, 10, 32, 32, 125, 10, 125, 10, 47, 47, 47, 32, 82, 117, 110, 110, 105, 110, 103, 115, 116, 97, 116, 117, 115, 32, 97, 116, 116, 114, 105, 98, 117, 116, 101, 115, 58, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 118, 101, 104, 105, 99, 108, 101, 83, 112, 101, 101, 100, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 101, 110, 103, 105, 110, 101, 83, 112, 101, 101, 100, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 112, 111, 119, 101, 114, 116, 114, 97, 105, 110, 84, 111, 114, 113, 117, 101, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 97, 99, 99, 101, 108, 101, 114, 97, 116, 111, 114, 80, 101, 100, 97, 108, 80, 111, 115, 105, 116, 105, 111, 110, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 116, 104, 114, 111, 116, 116, 108, 101, 80, 111, 115, 105, 116, 105, 111, 110, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 116, 114, 97, 110, 115, 109, 105, 115, 115, 105, 111, 110, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 99, 114, 117, 105, 115, 101, 67, 111, 110, 116, 114, 111, 108, 83, 116, 97, 116, 117, 115, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 108, 105, 103, 104, 116, 83, 116, 97, 116, 117, 115, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 104, 111, 114, 110, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 99, 104, 105, 109, 101, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 102, 117, 101, 108, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 101, 110, 103, 105, 110, 101, 79, 105, 108, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 97, 99, 99, 101, 108, 101, 114, 97, 116, 105, 111, 110, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 101, 110, 103, 105, 110, 101, 67, 111, 111, 108, 97, 110, 116, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 115, 116, 101, 101, 114, 105, 110, 103, 87, 104, 101, 101, 108, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 119, 104, 101, 101, 108, 84, 105, 99, 107, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 105, 103, 110, 105, 116, 105, 111, 110, 84, 105, 109, 101, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 121, 97, 119, 82, 97, 116, 101, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 98, 114, 97, 107, 101, 79, 112, 101, 114, 97, 116, 105, 111, 110, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 98, 117, 116, 116, 111, 110, 69, 118, 101, 110, 116, 39, 41, 59, 10, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 110, 105, 103, 104, 116, 77, 111, 100, 101, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 100, 114, 105, 118, 105, 110, 103, 77, 111, 100, 101, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 98, 114, 97, 107, 101, 79, 112, 101, 114, 97, 116, 105, 111, 110, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 116, 105, 114, 101, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 100, 111, 111, 114, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 100, 101, 102, 114, 111, 115, 116, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 99, 108, 105, 109, 97, 116, 101, 67, 111, 110, 116, 114, 111, 108, 39, 41, 59, 10, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 98, 97, 116, 116, 101, 114, 121, 83, 116, 97, 116, 117, 115, 39, 41, 59, 10, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 116, 101, 109, 112, 101, 114, 97, 116, 117, 114, 101, 39, 41, 59, 10, 95, 100, 101, 102, 105, 110, 101, 86, 101, 104, 105, 99, 108, 101, 83, 105, 103, 110, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 40, 101, 120, 112, 111, 114, 116, 115, 44, 32, 39, 111, 100, 111, 109, 101, 116, 101, 114, 39, 41, 59, 10, 10, 10, 0 };
index 38cbd9a..aeb721b 100644 (file)
@@ -226,13 +226,28 @@ function handleSubscribeReply(msg) {
     }
   }
 }
-
+/// Runningstatus attributes:
 _defineVehicleSignalProperty(exports, 'vehicleSpeed');
 _defineVehicleSignalProperty(exports, 'engineSpeed');
-_defineVehicleSignalProperty(exports, 'transmission');
-_defineVehicleSignalProperty(exports, 'steeringWheel');
+_defineVehicleSignalProperty(exports, 'powertrainTorque');
+_defineVehicleSignalProperty(exports, 'acceleratorPedalPosition');
 _defineVehicleSignalProperty(exports, 'throttlePosition');
+_defineVehicleSignalProperty(exports, 'transmission');
+_defineVehicleSignalProperty(exports, 'cruiseControlStatus');
+_defineVehicleSignalProperty(exports, 'lightStatus');
+_defineVehicleSignalProperty(exports, 'horn');
+_defineVehicleSignalProperty(exports, 'chime');
+_defineVehicleSignalProperty(exports, 'fuel');
+_defineVehicleSignalProperty(exports, 'engineOil');
+_defineVehicleSignalProperty(exports, 'acceleration');
 _defineVehicleSignalProperty(exports, 'engineCoolant');
+_defineVehicleSignalProperty(exports, 'steeringWheel');
+_defineVehicleSignalProperty(exports, 'wheelTick');
+_defineVehicleSignalProperty(exports, 'ignitionTime');
+_defineVehicleSignalProperty(exports, 'yawRate');
+_defineVehicleSignalProperty(exports, 'brakeOperation');
+_defineVehicleSignalProperty(exports, 'buttonEvent');
+
 _defineVehicleSignalProperty(exports, 'nightMode');
 _defineVehicleSignalProperty(exports, 'drivingMode');
 _defineVehicleSignalProperty(exports, 'brakeOperation');
@@ -240,8 +255,10 @@ _defineVehicleSignalProperty(exports, 'tire');
 _defineVehicleSignalProperty(exports, 'door');
 _defineVehicleSignalProperty(exports, 'defrost');
 _defineVehicleSignalProperty(exports, 'climateControl');
-_defineVehicleSignalProperty(exports, 'lightStatus');
+
 _defineVehicleSignalProperty(exports, 'batteryStatus');
-_defineVehicleSignalProperty(exports, 'fuel');
+
 _defineVehicleSignalProperty(exports, 'temperature');
 _defineVehicleSignalProperty(exports, 'odometer');
+
+