From cb8bb6f7fedf34b72ea01e9f2d8ba2a7e220e665 Mon Sep 17 00:00:00 2001 From: Felix Ruess Date: Mon, 8 Nov 2010 20:13:21 +0000 Subject: [PATCH] fix line endings, replace CRLF with LF --- conf/airframes/TUDelft/Trip50A.xml | 30 +- conf/airframes/TUDelft/Trip50B.xml | 30 +- conf/radios/aron.xml | 26 +- conf/settings/settings_beth_twist_old.xml | 6 +- conf/simulator/Malolo1/Malolo1-set.xml | 206 +- conf/simulator/Malolo1/Malolo1.xml | 1092 +-- conf/simulator/Malolo1/Models/Malolo1.ac | 8394 ++++++++--------- conf/simulator/Malolo1/Models/Malolo1.xml | 206 +- conf/system/udev/rules/1-jtag-rule.rules | 8 +- sw/airborne/arch/lpc21/efsl/conf/config.h | 2 +- .../lpc21/efsl/inc/interfaces/LPC2000_regs.h | 144 +- .../arch/lpc21/efsl/inc/interfaces/sd.h | 132 +- .../arch/lpc21/efsl/src/interfaces/sd.c | 696 +- .../arduimu_Firmware_WithGps/arduimu/ADC.pde | 2 +- .../arduimu/Compass.pde | 2 +- .../arduimu_Firmware_WithGps/arduimu/DCM.pde | 2 +- .../arduimu/GPS_EM406.pde | 2 +- .../arduimu/GPS_NMEA.pde | 2 +- .../arduimu/Output.pde | 2 +- .../arduimu/Vector.pde | 2 +- .../arduimu/arduimu.pde | 2 +- .../arduimu/matrix.pde | 2 +- .../arduimu/press_alt.pde | 2 +- sw/airborne/fms/libeknav/assertions.hpp | 130 +- sw/airborne/fms/libeknav/basic_ins_qkf.cpp | 308 +- sw/airborne/fms/libeknav/ins_qkf.hpp | 624 +- .../fms/libeknav/ins_qkf_observe_gps_pvt.cpp | 242 +- .../fms/libeknav/ins_qkf_observe_vector.cpp | 386 +- sw/airborne/fms/libeknav/ins_qkf_predict.cpp | 368 +- sw/airborne/fms/libeknav/quaternions.hpp | 286 +- sw/in_progress/airspeed/rls.m | 80 +- sw/in_progress/airspeed/rls_control.m | 198 +- sw/in_progress/airspeed/ultrasimplesim.m | 858 +- .../firmware/ezusb/hpi_PX-TV402U.hex | 736 +- .../firmware/ezusb/hpi_StarTrek.hex | 716 +- sw/tools/calibration/airspeed.m | 150 +- 36 files changed, 8037 insertions(+), 8037 deletions(-) diff --git a/conf/airframes/TUDelft/Trip50A.xml b/conf/airframes/TUDelft/Trip50A.xml index cfd28c1262..b8203b747a 100644 --- a/conf/airframes/TUDelft/Trip50A.xml +++ b/conf/airframes/TUDelft/Trip50A.xml @@ -127,29 +127,29 @@ -
- +
+ - + - diff --git a/conf/airframes/TUDelft/Trip50B.xml b/conf/airframes/TUDelft/Trip50B.xml index 0bd82e16be..d0194acc90 100644 --- a/conf/airframes/TUDelft/Trip50B.xml +++ b/conf/airframes/TUDelft/Trip50B.xml @@ -132,29 +132,29 @@
-
- +
+ - + - diff --git a/conf/radios/aron.xml b/conf/radios/aron.xml index d1682f31a1..bbe2d2f4a8 100644 --- a/conf/radios/aron.xml +++ b/conf/radios/aron.xml @@ -1,13 +1,13 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/conf/settings/settings_beth_twist_old.xml b/conf/settings/settings_beth_twist_old.xml index fdc2d1953f..3f053c7a29 100644 --- a/conf/settings/settings_beth_twist_old.xml +++ b/conf/settings/settings_beth_twist_old.xml @@ -37,9 +37,9 @@ - diff --git a/conf/simulator/Malolo1/Malolo1-set.xml b/conf/simulator/Malolo1/Malolo1-set.xml index b2f87d2c60..c85509bb87 100644 --- a/conf/simulator/Malolo1/Malolo1-set.xml +++ b/conf/simulator/Malolo1/Malolo1-set.xml @@ -1,103 +1,103 @@ - - - - - - - Malolo1(R/C) - Innis Cunningham, Josh Wilson - 0.0 - - - Aircraft/Malolo1/Malolo1-splash.rgb - - - jsb - Malolo1 - 0.8 - - - - Aircraft/Generic/generic-sound.xml - - - - false - - - - Aircraft/Malolo1/Models/Malolo1.xml - - - - true - - 0.0 - 0.26 - 0.34 - -8 - - - - -15.0 - - YardStik 110 (Sig Mfg) - Cruise speed: 60 mph - Never-exceed (Vne): 85 mph - Best Glide (Vglide): 20 mph - Maneuvering (Va): 50 mph - Approach speed: 15-25 mph - Stall speed (Vs): 10 mph - - - - - - - -0.01 - 0.00 - 0.00 - - - - 3 - - - 1.0 - - - - - 700 - - - - - - - 48.0 - 56.0 - 400.0 - 1000.0 - 6000.0 - 0.008 - 0.35 - 0.001 - - - - + + + + + + + Malolo1(R/C) + Innis Cunningham, Josh Wilson + 0.0 + + + Aircraft/Malolo1/Malolo1-splash.rgb + + + jsb + Malolo1 + 0.8 + + + + Aircraft/Generic/generic-sound.xml + + + + false + + + + Aircraft/Malolo1/Models/Malolo1.xml + + + + true + + 0.0 + 0.26 + 0.34 + -8 + + + + -15.0 + + YardStik 110 (Sig Mfg) + Cruise speed: 60 mph + Never-exceed (Vne): 85 mph + Best Glide (Vglide): 20 mph + Maneuvering (Va): 50 mph + Approach speed: 15-25 mph + Stall speed (Vs): 10 mph + + + + + + + -0.01 + 0.00 + 0.00 + + + + 3 + + + 1.0 + + + + + 700 + + + + + + + 48.0 + 56.0 + 400.0 + 1000.0 + 6000.0 + 0.008 + 0.35 + 0.001 + + + + diff --git a/conf/simulator/Malolo1/Malolo1.xml b/conf/simulator/Malolo1/Malolo1.xml index 5ee13aa539..c12a9ae9c3 100644 --- a/conf/simulator/Malolo1/Malolo1.xml +++ b/conf/simulator/Malolo1/Malolo1.xml @@ -1,546 +1,546 @@ - - - - - - Author Name - Creation Date - Version - Models a Malolo - - - - 10.57 - 9.17 - 1.15 - 1.69 - 3.28 - 1.06 - 0 - - 37.4 - 0 - 0 - - - 20 - 0 - 5 - - - 0 - 0 - 0 - - - - - 1 - 1 - 2 - 0 - 0 - 0 - 12 - - 36.4 - 0 - 4 - - - 1 - - 0 - 0 - 0 - - - - - - - - 40.1 - -9.9 - -10.1 - - 0.8 - 0.5 - 0.02 - 120 - 20 - 0.0 - LEFT - 0 - - - - 40.1 - 9.9 - -10.1 - - 0.8 - 0.5 - 0.02 - 120 - 20 - 0.0 - RIGHT - 0 - - - - 68.9 - 0 - -4.3 - - 0.8 - 0.5 - 0.02 - 24 - 20 - 360.0 - NONE - 0 - - - - 10 - 0 - -8.3 - - 0.8 - 0.5 - 0.02 - 24 - 20 - 360.0 - NONE - 0 - - - - - - - - 36 - 0 - 0 - - - 0.0 - 0 - 0 - - 0 - - - 1 - 0 - 0 - - - 0.0 - 0.0 - 0.0 - - 1.0 - - - - - 36.36 - 0 - -1.89375 - - 1.5 - 1.5 - - - - - - - - fcs/elevator-cmd-norm - fcs/pitch-trim-cmd-norm - - -1 - 1 - - - - - fcs/pitch-trim-sum - - -0.35 - 0.3 - - fcs/elevator-pos-rad - - - - fcs/elevator-pos-rad - - -0.3 - 0.3 - - - -1 - 1 - - fcs/elevator-pos-norm - - - - fcs/aileron-cmd-norm - fcs/roll-trim-cmd-norm - - -1 - 1 - - - - - fcs/roll-trim-sum - - -0.35 - 0.35 - - fcs/left-aileron-pos-rad - - - - -fcs/roll-trim-sum - - -0.35 - 0.35 - - fcs/right-aileron-pos-rad - - - - fcs/left-aileron-pos-rad - - -0.35 - 0.35 - - - -1 - 1 - - fcs/left-aileron-pos-norm - - - - fcs/right-aileron-pos-rad - - -0.35 - 0.35 - - - -1 - 1 - - fcs/right-aileron-pos-norm - - - - fcs/rudder-cmd-norm - fcs/yaw-trim-cmd-norm - - -1 - 1 - - - - - fcs/rudder-command-sum - - -0.35 - 0.35 - - fcs/rudder-pos-rad - - - - fcs/rudder-pos-rad - - -0.35 - 0.35 - - - -1 - 1 - - fcs/rudder-pos-norm - - - - - - - - Drag_at_zero_lift - - aero/qbar-psf - metrics/Sw-sqft - - aero/alpha-rad - - -1.5700 1.5000 - -0.2600 0.0560 - 0.0000 0.0280 - 0.2600 0.0560 - 1.5700 1.5000 - -
-
-
- - Induced_drag - - aero/qbar-psf - metrics/Sw-sqft - aero/cl-squared - 0.0400 - - - - Drag_due_to_sideslip - - aero/qbar-psf - metrics/Sw-sqft - - aero/beta-rad - - -1.5700 1.2300 - -0.2600 0.0500 - 0.0000 0.0000 - 0.2600 0.0500 - 1.5700 1.2300 - -
-
-
- - Drag_due_to_Elevator_Deflection - - aero/qbar-psf - metrics/Sw-sqft - fcs/elevator-pos-norm - 0.0300 - - -
- - - - Side_force_due_to_beta - - aero/qbar-psf - metrics/Sw-sqft - aero/beta-rad - -1.0000 - - - - - - - Lift_due_to_alpha - - aero/qbar-psf - metrics/Sw-sqft - - aero/alpha-rad - - -0.2000 -0.7500 - 0.0000 0.2500 - 0.2300 1.4000 - 0.6000 0.7100 - -
-
-
- - Lift_due_to_Elevator_Deflection - - aero/qbar-psf - metrics/Sw-sqft - fcs/elevator-pos-rad - 0.2000 - - -
- - - - Roll_moment_due_to_beta - - - aero/qbar-psf - metrics/Sw-sqft - metrics/bw-ft - aero/beta-rad - -0.1000 - - - - Roll_moment_due_to_roll_rate - - aero/qbar-psf - metrics/Sw-sqft - metrics/bw-ft - aero/bi2vel - velocities/p-aero-rad_sec - -0.4000 - - - - Roll_moment_due_to_yaw_rate - - aero/qbar-psf - metrics/Sw-sqft - metrics/bw-ft - aero/bi2vel - velocities/r-aero-rad_sec - 0.1500 - - - - Roll_moment_due_to_aileron - - aero/qbar-psf - metrics/Sw-sqft - metrics/bw-ft - fcs/left-aileron-pos-rad - - velocities/mach - - 0.0000 0.1300 - 2.0000 0.0570 - -
-
-
- - Roll_moment_due_to_rudder - - aero/qbar-psf - metrics/Sw-sqft - metrics/bw-ft - fcs/rudder-pos-rad - 0.0100 - - -
- - - - Pitch_moment_due_to_alpha - - aero/qbar-psf - metrics/Sw-sqft - metrics/cbarw-ft - aero/alpha-rad - -0.5000 - - - - Pitch_moment_due_to_elevator - - aero/qbar-psf - metrics/Sw-sqft - metrics/cbarw-ft - fcs/elevator-pos-rad - - velocities/mach - - 0.0000 -0.5000 - 2.0000 -0.2750 - -
-
-
- - Pitch_moment_due_to_pitch_rate - - aero/qbar-psf - metrics/Sw-sqft - metrics/cbarw-ft - aero/ci2vel - velocities/q-aero-rad_sec - -12.0000 - - - - Pitch_moment_due_to_alpha_rate - - aero/qbar-psf - metrics/Sw-sqft - metrics/cbarw-ft - aero/ci2vel - aero/alphadot-rad_sec - -7.0000 - - -
- - - - Yaw_moment_due_to_beta - - aero/qbar-psf - metrics/Sw-sqft - metrics/bw-ft - aero/beta-rad - 0.1200 - - - - Yaw_moment_due_to_yaw_rate - - aero/qbar-psf - metrics/Sw-sqft - metrics/bw-ft - aero/bi2vel - velocities/r-aero-rad_sec - -0.1500 - - - - Yaw_moment_due_to_rudder - - aero/qbar-psf - metrics/Sw-sqft - metrics/bw-ft - fcs/rudder-pos-rad - -0.0500 - - - - Adverse_yaw - - aero/qbar-psf - metrics/Sw-sqft - metrics/bw-ft - fcs/left-aileron-pos-rad - -0.0300 - - - - Yaw_moment_due_to_tail_incidence - - aero/qbar-psf - metrics/Sw-sqft - metrics/bw-ft - 0.0007 - - - -
-
+ + + + + + Author Name + Creation Date + Version + Models a Malolo + + + + 10.57 + 9.17 + 1.15 + 1.69 + 3.28 + 1.06 + 0 + + 37.4 + 0 + 0 + + + 20 + 0 + 5 + + + 0 + 0 + 0 + + + + + 1 + 1 + 2 + 0 + 0 + 0 + 12 + + 36.4 + 0 + 4 + + + 1 + + 0 + 0 + 0 + + + + + + + + 40.1 + -9.9 + -10.1 + + 0.8 + 0.5 + 0.02 + 120 + 20 + 0.0 + LEFT + 0 + + + + 40.1 + 9.9 + -10.1 + + 0.8 + 0.5 + 0.02 + 120 + 20 + 0.0 + RIGHT + 0 + + + + 68.9 + 0 + -4.3 + + 0.8 + 0.5 + 0.02 + 24 + 20 + 360.0 + NONE + 0 + + + + 10 + 0 + -8.3 + + 0.8 + 0.5 + 0.02 + 24 + 20 + 360.0 + NONE + 0 + + + + + + + + 36 + 0 + 0 + + + 0.0 + 0 + 0 + + 0 + + + 1 + 0 + 0 + + + 0.0 + 0.0 + 0.0 + + 1.0 + + + + + 36.36 + 0 + -1.89375 + + 1.5 + 1.5 + + + + + + + + fcs/elevator-cmd-norm + fcs/pitch-trim-cmd-norm + + -1 + 1 + + + + + fcs/pitch-trim-sum + + -0.35 + 0.3 + + fcs/elevator-pos-rad + + + + fcs/elevator-pos-rad + + -0.3 + 0.3 + + + -1 + 1 + + fcs/elevator-pos-norm + + + + fcs/aileron-cmd-norm + fcs/roll-trim-cmd-norm + + -1 + 1 + + + + + fcs/roll-trim-sum + + -0.35 + 0.35 + + fcs/left-aileron-pos-rad + + + + -fcs/roll-trim-sum + + -0.35 + 0.35 + + fcs/right-aileron-pos-rad + + + + fcs/left-aileron-pos-rad + + -0.35 + 0.35 + + + -1 + 1 + + fcs/left-aileron-pos-norm + + + + fcs/right-aileron-pos-rad + + -0.35 + 0.35 + + + -1 + 1 + + fcs/right-aileron-pos-norm + + + + fcs/rudder-cmd-norm + fcs/yaw-trim-cmd-norm + + -1 + 1 + + + + + fcs/rudder-command-sum + + -0.35 + 0.35 + + fcs/rudder-pos-rad + + + + fcs/rudder-pos-rad + + -0.35 + 0.35 + + + -1 + 1 + + fcs/rudder-pos-norm + + + + + + + + Drag_at_zero_lift + + aero/qbar-psf + metrics/Sw-sqft + + aero/alpha-rad + + -1.5700 1.5000 + -0.2600 0.0560 + 0.0000 0.0280 + 0.2600 0.0560 + 1.5700 1.5000 + +
+
+
+ + Induced_drag + + aero/qbar-psf + metrics/Sw-sqft + aero/cl-squared + 0.0400 + + + + Drag_due_to_sideslip + + aero/qbar-psf + metrics/Sw-sqft + + aero/beta-rad + + -1.5700 1.2300 + -0.2600 0.0500 + 0.0000 0.0000 + 0.2600 0.0500 + 1.5700 1.2300 + +
+
+
+ + Drag_due_to_Elevator_Deflection + + aero/qbar-psf + metrics/Sw-sqft + fcs/elevator-pos-norm + 0.0300 + + +
+ + + + Side_force_due_to_beta + + aero/qbar-psf + metrics/Sw-sqft + aero/beta-rad + -1.0000 + + + + + + + Lift_due_to_alpha + + aero/qbar-psf + metrics/Sw-sqft + + aero/alpha-rad + + -0.2000 -0.7500 + 0.0000 0.2500 + 0.2300 1.4000 + 0.6000 0.7100 + +
+
+
+ + Lift_due_to_Elevator_Deflection + + aero/qbar-psf + metrics/Sw-sqft + fcs/elevator-pos-rad + 0.2000 + + +
+ + + + Roll_moment_due_to_beta + + + aero/qbar-psf + metrics/Sw-sqft + metrics/bw-ft + aero/beta-rad + -0.1000 + + + + Roll_moment_due_to_roll_rate + + aero/qbar-psf + metrics/Sw-sqft + metrics/bw-ft + aero/bi2vel + velocities/p-aero-rad_sec + -0.4000 + + + + Roll_moment_due_to_yaw_rate + + aero/qbar-psf + metrics/Sw-sqft + metrics/bw-ft + aero/bi2vel + velocities/r-aero-rad_sec + 0.1500 + + + + Roll_moment_due_to_aileron + + aero/qbar-psf + metrics/Sw-sqft + metrics/bw-ft + fcs/left-aileron-pos-rad + + velocities/mach + + 0.0000 0.1300 + 2.0000 0.0570 + +
+
+
+ + Roll_moment_due_to_rudder + + aero/qbar-psf + metrics/Sw-sqft + metrics/bw-ft + fcs/rudder-pos-rad + 0.0100 + + +
+ + + + Pitch_moment_due_to_alpha + + aero/qbar-psf + metrics/Sw-sqft + metrics/cbarw-ft + aero/alpha-rad + -0.5000 + + + + Pitch_moment_due_to_elevator + + aero/qbar-psf + metrics/Sw-sqft + metrics/cbarw-ft + fcs/elevator-pos-rad + + velocities/mach + + 0.0000 -0.5000 + 2.0000 -0.2750 + +
+
+
+ + Pitch_moment_due_to_pitch_rate + + aero/qbar-psf + metrics/Sw-sqft + metrics/cbarw-ft + aero/ci2vel + velocities/q-aero-rad_sec + -12.0000 + + + + Pitch_moment_due_to_alpha_rate + + aero/qbar-psf + metrics/Sw-sqft + metrics/cbarw-ft + aero/ci2vel + aero/alphadot-rad_sec + -7.0000 + + +
+ + + + Yaw_moment_due_to_beta + + aero/qbar-psf + metrics/Sw-sqft + metrics/bw-ft + aero/beta-rad + 0.1200 + + + + Yaw_moment_due_to_yaw_rate + + aero/qbar-psf + metrics/Sw-sqft + metrics/bw-ft + aero/bi2vel + velocities/r-aero-rad_sec + -0.1500 + + + + Yaw_moment_due_to_rudder + + aero/qbar-psf + metrics/Sw-sqft + metrics/bw-ft + fcs/rudder-pos-rad + -0.0500 + + + + Adverse_yaw + + aero/qbar-psf + metrics/Sw-sqft + metrics/bw-ft + fcs/left-aileron-pos-rad + -0.0300 + + + + Yaw_moment_due_to_tail_incidence + + aero/qbar-psf + metrics/Sw-sqft + metrics/bw-ft + 0.0007 + + + +
+
diff --git a/conf/simulator/Malolo1/Models/Malolo1.ac b/conf/simulator/Malolo1/Models/Malolo1.ac index 309c0947ef..0f20446ac7 100644 --- a/conf/simulator/Malolo1/Models/Malolo1.ac +++ b/conf/simulator/Malolo1/Models/Malolo1.ac @@ -1,4197 +1,4197 @@ -AC3Db -MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0 -MATERIAL "ac3dmat0" rgb 0 0 0 amb 0.2 0.2 0.2 emis 0 0 0 spec 0.2 0.2 0.2 shi 16 trans 0 -MATERIAL "ac3dmat1" rgb 1 1 1 amb 0.2 0.2 0.2 emis 0 0 0 spec 0.2 0.2 0.2 shi 16 trans 0 -OBJECT world -kids 10 -OBJECT poly -name "elevator.002" -data 8 -Mesh.007 -crease 45.000000 -numvert 16 -0.347071 0.070181 -0.798229 -0.358572 0.068152 -0.798229 -0.35857 0.074784 -0.874594 -0.347071 0.076781 -0.874594 -0.327247 0.077067 -0.874727 -0.378451 0.075071 -0.874602 -0.37852 0.068468 -0.798331 -0.327249 0.07047 -0.798206 -0.36769 0.077071 0.922783 -0.41896 0.075069 0.922658 -0.418891 0.06847 0.846387 -0.367688 0.070467 0.846262 -0.387511 0.070181 0.846395 -0.399011 0.068183 0.846395 -0.399013 0.074752 0.92276 -0.387511 0.076781 0.92276 -numsurf 10 -SURF 0x30 -mat 1 -refs 4 -3 0.0 1.0 -0 0.0 0.0434782989323 -1 1.0 0.0 -2 0.980769991875 1.0 -SURF 0x30 -mat 1 -refs 4 -7 0.0 0.0 -0 0.0 0.0 -3 0.0 0.0 -4 0.0 0.0 -SURF 0x30 -mat 1 -refs 4 -0 0.0 0.0 -7 0.0 0.0 -6 0.0 0.0 -1 0.0 0.0 -SURF 0x30 -mat 1 -refs 4 -5 0.0 0.0 -2 0.0 0.0 -1 0.0 0.0 -6 0.0 0.0 -SURF 0x30 -mat 1 -refs 4 -4 0.0 0.0 -3 0.0 0.0 -2 0.0 0.0 -5 0.0 0.0 -SURF 0x30 -mat 1 -refs 4 -11 0.0 0.0 -12 0.0 0.0 -13 0.0 0.0 -10 0.0 0.0 -SURF 0x30 -mat 1 -refs 4 -10 0.0 0.0 -13 0.0 0.0 -14 0.0 0.0 -9 0.0 0.0 -SURF 0x30 -mat 1 -refs 4 -15 0.0 0.0 -8 0.0 0.0 -9 0.0 0.0 -14 0.0 0.0 -SURF 0x30 -mat 1 -refs 4 -8 0.0 0.0 -15 0.0 0.0 -12 0.0 0.0 -11 0.0 0.0 -SURF 0x30 -mat 1 -refs 4 -12 0.0 1.0 -15 0.0 0.0434782989323 -14 1.0 0.0 -13 0.980769991875 1.0 -kids 0 -OBJECT poly -name "strut" -data 8 -Mesh.012 -crease 45.000000 -numvert 76 -0.560943 0.047946 0.86931 -0.560133 0.048086 0.869093 -0.55999 0.048179 0.86835 -0.560659 0.048131 0.867826 -0.561611 0.047897 0.868785 -0.561469 0.047989 0.868042 -0.561581 0.053113 0.869846 -0.560784 0.052492 0.869392 -0.56061 0.052599 0.868659 -0.561237 0.053327 0.86838 -0.562226 0.05384 0.869567 -0.562055 0.053946 0.868833 -0.394243 0.073744 0.912046 -0.394042 0.07305 0.911597 -0.393871 0.073156 0.910864 -0.393898 0.073958 0.910579 -0.394098 0.074652 0.911028 -0.39427 0.074546 0.911762 -0.39997 0.073025 0.910591 -0.399768 0.07233 0.910142 -0.399596 0.072437 0.909408 -0.399623 0.073239 0.909123 -0.399824 0.073933 0.909572 -0.399996 0.073826 0.910306 -0.483779 0.06236 0.89022 -0.48358 0.061666 0.889771 -0.483406 0.061773 0.889037 -0.483435 0.062574 0.888753 -0.483634 0.063269 0.889203 -0.483808 0.063162 0.889935 -0.486658 0.062139 0.889516 -0.486458 0.061444 0.889067 -0.486285 0.061551 0.888334 -0.486313 0.062352 0.88805 -0.486513 0.063047 0.888499 -0.486687 0.06294 0.889231 -0.394071 0.073851 0.911313 -0.560801 0.048038 0.868567 -0.526582 0.048038 -0.806734 -0.36246 0.073851 -0.858598 -0.452748 0.06294 -0.828377 -0.452988 0.063047 -0.82909 -0.453056 0.062352 -0.829577 -0.452882 0.061551 -0.82935 -0.452641 0.061444 -0.828637 -0.452573 0.062139 -0.82815 -0.449932 0.063162 -0.829301 -0.450172 0.063269 -0.830015 -0.45024 0.062574 -0.830502 -0.450066 0.061773 -0.830276 -0.449826 0.061666 -0.829561 -0.449758 0.06236 -0.829074 -0.368022 0.073826 -0.85632 -0.368264 0.073933 -0.857034 -0.36833 0.073239 -0.857521 -0.368157 0.072437 -0.857294 -0.367915 0.07233 -0.85658 -0.367848 0.073025 -0.856093 -0.362392 0.074546 -0.858111 -0.362634 0.074652 -0.858825 -0.3627 0.073958 -0.859312 -0.362527 0.073156 -0.859085 -0.362286 0.073049 -0.858372 -0.362219 0.073744 -0.857885 -0.527506 0.053946 -0.805845 -0.527264 0.05384 -0.805132 -0.527052 0.053327 -0.806662 -0.526371 0.052599 -0.806756 -0.526132 0.052492 -0.806042 -0.526568 0.053113 -0.805236 -0.527427 0.047989 -0.806826 -0.527154 0.047897 -0.806121 -0.526854 0.048131 -0.807438 -0.526009 0.048179 -0.807347 -0.525737 0.048086 -0.806641 -0.526311 0.047946 -0.806028 -numsurf 84 -SURF 0x10 -mat 1 -refs 3 -4 0.0 0.0 -0 0.0 0.0 -37 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -37 0.0 0.0 -0 0.0 0.0 -1 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -37 0.0 0.0 -1 0.0 0.0 -2 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -37 0.0 0.0 -2 0.0 0.0 -3 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -37 0.0 0.0 -3 0.0 0.0 -5 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -37 0.0 0.0 -5 0.0 0.0 -4 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -0 0.0 0.0 -4 0.0 0.0 -10 0.0 0.0 -6 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -1 0.0 0.0 -0 0.0 0.0 -6 0.0 0.0 -7 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -7 0.0 0.0 -8 0.0 0.0 -2 0.0 0.0 -1 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -8 0.0 0.0 -9 0.0 0.0 -3 0.0 0.0 -2 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -9 0.0 0.0 -11 0.0 0.0 -5 0.0 0.0 -3 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -11 0.0 0.0 -10 0.0 0.0 -4 0.0 0.0 -5 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -35 0.0 0.0 -30 0.0 0.0 -6 0.0 0.0 -10 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -30 0.0 0.0 -31 0.0 0.0 -7 0.0 0.0 -6 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -31 0.0 0.0 -32 0.0 0.0 -8 0.0 0.0 -7 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -32 0.0 0.0 -33 0.0 0.0 -9 0.0 0.0 -8 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -33 0.0 0.0 -34 0.0 0.0 -11 0.0 0.0 -9 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -34 0.0 0.0 -35 0.0 0.0 -10 0.0 0.0 -11 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -36 0.0 0.0 -12 0.0 0.0 -17 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -36 0.0 0.0 -13 0.0 0.0 -12 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -36 0.0 0.0 -14 0.0 0.0 -13 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -36 0.0 0.0 -15 0.0 0.0 -14 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -36 0.0 0.0 -16 0.0 0.0 -15 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -36 0.0 0.0 -17 0.0 0.0 -16 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -18 0.0 0.0 -23 0.0 0.0 -17 0.0 0.0 -12 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -19 0.0 0.0 -18 0.0 0.0 -12 0.0 0.0 -13 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -20 0.0 0.0 -19 0.0 0.0 -13 0.0 0.0 -14 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -21 0.0 0.0 -20 0.0 0.0 -14 0.0 0.0 -15 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -22 0.0 0.0 -21 0.0 0.0 -15 0.0 0.0 -16 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -23 0.0 0.0 -22 0.0 0.0 -16 0.0 0.0 -17 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -24 0.0 0.0 -29 0.0 0.0 -23 0.0 0.0 -18 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -25 0.0 0.0 -24 0.0 0.0 -18 0.0 0.0 -19 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -26 0.0 0.0 -25 0.0 0.0 -19 0.0 0.0 -20 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -27 0.0 0.0 -26 0.0 0.0 -20 0.0 0.0 -21 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -28 0.0 0.0 -27 0.0 0.0 -21 0.0 0.0 -22 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -29 0.0 0.0 -28 0.0 0.0 -22 0.0 0.0 -23 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -35 -2.98022992951e-008 1.0 -29 -2.98022992951e-008 0.0 -24 0.166666999459 0.0 -30 0.166666999459 1.0 -SURF 0x10 -mat 1 -refs 4 -30 0.166666999459 1.0 -24 0.166666999459 0.0 -25 0.33333298564 0.0 -31 0.33333298564 1.0 -SURF 0x10 -mat 1 -refs 4 -31 0.33333298564 1.0 -25 0.33333298564 0.0 -26 0.5 0.0 -32 0.5 1.0 -SURF 0x10 -mat 1 -refs 4 -32 0.5 1.0 -26 0.5 0.0 -27 0.666666984558 0.0 -33 0.666666984558 1.0 -SURF 0x10 -mat 1 -refs 4 -33 0.666666984558 1.0 -27 0.666666984558 0.0 -28 0.833333015442 0.0 -34 0.833333015442 1.0 -SURF 0x10 -mat 1 -refs 4 -34 0.833333015442 1.0 -28 0.833333015442 0.0 -29 1.0 0.0 -35 1.0 1.0 -SURF 0x10 -mat 1 -refs 4 -41 0.833333015442 1.0 -47 0.833333015442 0.0 -46 1.0 0.0 -40 1.0 1.0 -SURF 0x10 -mat 1 -refs 4 -42 0.666666984558 1.0 -48 0.666666984558 0.0 -47 0.833333015442 0.0 -41 0.833333015442 1.0 -SURF 0x10 -mat 1 -refs 4 -43 0.5 1.0 -49 0.5 0.0 -48 0.666666984558 0.0 -42 0.666666984558 1.0 -SURF 0x10 -mat 1 -refs 4 -44 0.33333298564 1.0 -50 0.33333298564 0.0 -49 0.5 0.0 -43 0.5 1.0 -SURF 0x10 -mat 1 -refs 4 -45 0.166666999459 1.0 -51 0.166666999459 0.0 -50 0.33333298564 0.0 -44 0.33333298564 1.0 -SURF 0x10 -mat 1 -refs 4 -40 -2.98022992951e-008 1.0 -46 -2.98022992951e-008 0.0 -51 0.166666999459 0.0 -45 0.166666999459 1.0 -SURF 0x10 -mat 1 -refs 4 -46 0.0 0.0 -47 0.0 0.0 -53 0.0 0.0 -52 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -47 0.0 0.0 -48 0.0 0.0 -54 0.0 0.0 -53 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -48 0.0 0.0 -49 0.0 0.0 -55 0.0 0.0 -54 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -49 0.0 0.0 -50 0.0 0.0 -56 0.0 0.0 -55 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -50 0.0 0.0 -51 0.0 0.0 -57 0.0 0.0 -56 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -51 0.0 0.0 -46 0.0 0.0 -52 0.0 0.0 -57 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -52 0.0 0.0 -53 0.0 0.0 -59 0.0 0.0 -58 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -53 0.0 0.0 -54 0.0 0.0 -60 0.0 0.0 -59 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -54 0.0 0.0 -55 0.0 0.0 -61 0.0 0.0 -60 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -55 0.0 0.0 -56 0.0 0.0 -62 0.0 0.0 -61 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -56 0.0 0.0 -57 0.0 0.0 -63 0.0 0.0 -62 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -57 0.0 0.0 -52 0.0 0.0 -58 0.0 0.0 -63 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -39 0.0 0.0 -58 0.0 0.0 -59 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -39 0.0 0.0 -59 0.0 0.0 -60 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -39 0.0 0.0 -60 0.0 0.0 -61 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -39 0.0 0.0 -61 0.0 0.0 -62 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -39 0.0 0.0 -62 0.0 0.0 -63 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -39 0.0 0.0 -63 0.0 0.0 -58 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -41 0.0 0.0 -40 0.0 0.0 -65 0.0 0.0 -64 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -42 0.0 0.0 -41 0.0 0.0 -64 0.0 0.0 -66 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -43 0.0 0.0 -42 0.0 0.0 -66 0.0 0.0 -67 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -44 0.0 0.0 -43 0.0 0.0 -67 0.0 0.0 -68 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -45 0.0 0.0 -44 0.0 0.0 -68 0.0 0.0 -69 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -40 0.0 0.0 -45 0.0 0.0 -69 0.0 0.0 -65 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -64 0.0 0.0 -65 0.0 0.0 -71 0.0 0.0 -70 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -66 0.0 0.0 -64 0.0 0.0 -70 0.0 0.0 -72 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -67 0.0 0.0 -66 0.0 0.0 -72 0.0 0.0 -73 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -68 0.0 0.0 -67 0.0 0.0 -73 0.0 0.0 -74 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -74 0.0 0.0 -75 0.0 0.0 -69 0.0 0.0 -68 0.0 0.0 -SURF 0x10 -mat 1 -refs 4 -75 0.0 0.0 -71 0.0 0.0 -65 0.0 0.0 -69 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -38 0.0 0.0 -70 0.0 0.0 -71 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -38 0.0 0.0 -72 0.0 0.0 -70 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -38 0.0 0.0 -73 0.0 0.0 -72 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -38 0.0 0.0 -74 0.0 0.0 -73 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -38 0.0 0.0 -75 0.0 0.0 -74 0.0 0.0 -SURF 0x10 -mat 1 -refs 3 -71 0.0 0.0 -75 0.0 0.0 -38 0.0 0.0 -kids 0 -OBJECT poly -name "lhelevon" -data 8 -Mesh.034 -texture "//DSC01758.rgb" -texrep 1 1 -crease 45.000000 -numvert 13 -0.599074 0.014895 -0.531554 -0.888591 0.119852 2.243279 -0.88656 0.113006 2.242792 -0.599074 0.014895 0.530098 -0.59518 0.008608 0.527454 -0.463361 0.035624 0.529998 -0.460279 0.012334 0.527711 -0.59518 0.008608 0.527454 -0.599074 0.014895 0.530098 -0.830417 0.12606 2.243226 -0.828674 0.113886 2.242929 -0.88656 0.113006 2.242792 -0.888591 0.119852 2.243279 -numsurf 3 -SURF 0x30 -mat 2 -refs 4 -3 0.389142990112 0.68247282505 -1 0.389142990112 0.68247282505 -2 0.389142990112 0.68247282505 -4 0.389142990112 0.68247282505 -SURF 0x30 -mat 2 -refs 4 -12 0.632252514362 0.754359185696 -8 0.633194804192 0.815167069435 -5 0.577246665955 0.814726471901 -9 0.581604659557 0.753918588161 -SURF 0x30 -mat 2 -refs 4 -7 0.621307790279 0.314203381538 -11 0.620118558407 0.25295484066 -10 0.567195057869 0.253511667252 -6 0.564221799374 0.314203381538 -kids 0 -OBJECT poly -name "vertfin.001" -data 8 -Mesh.030 -texture "//DSC01758.rgb" -texrep 1 1 -crease 45.000000 -numvert 40 -0.898813 0.127446 2.305112 -0.991374 0.444008 2.310203 -0.898925 0.444261 2.309624 -0.894502 0.444221 2.309629 -0.891408 0.443818 2.309534 -0.887714 0.441718 2.309106 -0.885246 0.439368 2.308627 -0.647729 0.11492 2.308054 -0.647636 0.115487 2.307015 -0.885226 0.439496 2.308345 -0.887694 0.441835 2.308817 -0.891387 0.443935 2.309244 -0.894483 0.444362 2.309331 -0.898906 0.444396 2.309338 -0.991278 0.444693 2.308753 -0.898719 0.128013 2.304073 -0.675529 0.109794 2.307774 -0.88548 0.439591 2.308672 -0.675436 0.110361 2.306736 -0.885461 0.439718 2.308389 -0.885461 0.439718 -2.305973 -0.675436 0.110361 -2.304319 -0.88548 0.439591 -2.306256 -0.675529 0.109794 -2.305357 -0.898719 0.128013 -2.301657 -0.991278 0.444693 -2.306336 -0.898906 0.444396 -2.306921 -0.894483 0.444362 -2.306914 -0.891387 0.443935 -2.306828 -0.887694 0.441835 -2.3064 -0.885226 0.439496 -2.305928 -0.647636 0.115487 -2.304599 -0.647729 0.11492 -2.305637 -0.885246 0.439368 -2.306211 -0.887714 0.441718 -2.306689 -0.891408 0.443818 -2.307117 -0.894502 0.444221 -2.307213 -0.898925 0.444261 -2.307207 -0.991374 0.444008 -2.307786 -0.898813 0.127446 -2.302695 -numsurf 28 -SURF 0x30 -mat 2 -refs 4 -0 0.497161775827 0.756072878838 -1 0.497380167246 0.787407398224 -2 0.485913664103 0.787407398224 -3 0.483402043581 0.78682166338 -SURF 0x30 -mat 2 -refs 4 -0 0.497161775827 0.756072878838 -3 0.483402043581 0.78682166338 -4 0.481654673815 0.786089539528 -5 0.480235010386 0.785211026669 -SURF 0x30 -mat 2 -refs 4 -1 0.464727908373 0.754755079746 -0 0.464727908373 0.754755079746 -15 0.464727908373 0.754755079746 -14 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -2 0.464727908373 0.754755079746 -1 0.464727908373 0.754755079746 -14 0.464727908373 0.754755079746 -13 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -3 0.464727908373 0.754755079746 -2 0.464727908373 0.754755079746 -13 0.464727908373 0.754755079746 -12 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -4 0.464727908373 0.754755079746 -3 0.464727908373 0.754755079746 -12 0.464727908373 0.754755079746 -11 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -5 0.464727908373 0.754755079746 -4 0.464727908373 0.754755079746 -11 0.464727908373 0.754755079746 -10 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -7 0.464727908373 0.754755079746 -6 0.464727908373 0.754755079746 -9 0.464727908373 0.754755079746 -8 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -16 0.480944782495 0.75541394949 -0 0.497161775827 0.756072878838 -5 0.480235010386 0.785211026669 -17 0.479525238276 0.784552156925 -SURF 0x30 -mat 2 -refs 4 -17 0.479525238276 0.784552156925 -6 0.478815346956 0.783893227577 -7 0.464727908373 0.754755079746 -16 0.480944782495 0.75541394949 -SURF 0x30 -mat 2 -refs 4 -0 0.464727908373 0.754755079746 -16 0.464727908373 0.754755079746 -18 0.464727908373 0.754755079746 -15 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -16 0.464727908373 0.754755079746 -7 0.464727908373 0.754755079746 -8 0.464727908373 0.754755079746 -18 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -6 0.464727908373 0.754755079746 -17 0.464727908373 0.754755079746 -19 0.464727908373 0.754755079746 -9 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -17 0.464727908373 0.754755079746 -5 0.464727908373 0.754755079746 -10 0.464727908373 0.754755079746 -19 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -22 0.464727908373 0.754755079746 -20 0.464727908373 0.754755079746 -29 0.464727908373 0.754755079746 -34 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -33 0.464727908373 0.754755079746 -30 0.464727908373 0.754755079746 -20 0.464727908373 0.754755079746 -22 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -23 0.464727908373 0.754755079746 -21 0.464727908373 0.754755079746 -31 0.464727908373 0.754755079746 -32 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -39 0.464727908373 0.754755079746 -24 0.464727908373 0.754755079746 -21 0.464727908373 0.754755079746 -23 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -22 0.479525238276 0.784552156925 -23 0.480944782495 0.75541394949 -32 0.464727908373 0.754755079746 -33 0.478815346956 0.783893227577 -SURF 0x30 -mat 2 -refs 4 -23 0.480944782495 0.75541394949 -22 0.479525238276 0.784552156925 -34 0.480235010386 0.785211026669 -39 0.497161775827 0.756072878838 -SURF 0x30 -mat 2 -refs 4 -32 0.464727908373 0.754755079746 -31 0.464727908373 0.754755079746 -30 0.464727908373 0.754755079746 -33 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -34 0.464727908373 0.754755079746 -29 0.464727908373 0.754755079746 -28 0.464727908373 0.754755079746 -35 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -35 0.464727908373 0.754755079746 -28 0.464727908373 0.754755079746 -27 0.464727908373 0.754755079746 -36 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -36 0.464727908373 0.754755079746 -27 0.464727908373 0.754755079746 -26 0.464727908373 0.754755079746 -37 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -37 0.464727908373 0.754755079746 -26 0.464727908373 0.754755079746 -25 0.464727908373 0.754755079746 -38 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -38 0.464727908373 0.754755079746 -25 0.464727908373 0.754755079746 -24 0.464727908373 0.754755079746 -39 0.464727908373 0.754755079746 -SURF 0x30 -mat 2 -refs 4 -39 0.497161775827 0.756072878838 -34 0.480235010386 0.785211026669 -35 0.481654673815 0.786089539528 -36 0.483402043581 0.78682166338 -SURF 0x30 -mat 2 -refs 4 -39 0.497161775827 0.756072878838 -36 0.483402043581 0.78682166338 -37 0.485913664103 0.787407398224 -38 0.497380167246 0.787407398224 -kids 0 -OBJECT poly -name "rhelevon" -data 8 -Mesh.035 -texture "//DSC01758.rgb" -texrep 1 1 -crease 45.000000 -numvert 12 -0.888591 0.119852 -2.244735 -0.88656 0.113006 -2.244248 -0.828674 0.113886 -2.244385 -0.830417 0.12606 -2.244682 -0.599074 0.014895 -0.531554 -0.59518 0.008608 -0.52891 -0.460279 0.012334 -0.529167 -0.463361 0.035624 -0.531454 -0.59518 0.008608 -0.52891 -0.599074 0.014895 -0.531554 -0.88656 0.113006 -2.244248 -0.888591 0.119852 -2.244735 -numsurf 3 -SURF 0x30 -mat 2 -refs 4 -5 0.621307790279 0.314203381538 -6 0.564221799374 0.314203381538 -2 0.567195057869 0.253511667252 -1 0.620118558407 0.25295484066 -SURF 0x30 -mat 2 -refs 4 -0 0.626432478428 0.748539149761 -3 0.575784623623 0.748098552227 -7 0.57142663002 0.808906435966 -4 0.627374768257 0.809347033501 -SURF 0x30 -mat 2 -refs 4 -9 0.383322954178 0.676652789116 -8 0.383322954178 0.676652789116 -10 0.383322954178 0.676652789116 -11 0.383322954178 0.676652789116 -kids 0 -OBJECT poly -name "prop2" -data 4 -Mesh -crease 45.000000 -numvert 176 -0.447799 0.015737 0.014021 -0.447791 0.026166 0.013519 -0.447803 0.023866 0.012121 -0.447808 0.034227 0.009612 -0.447801 0.029706 0.007026 -0.447784 0.034036 0.012987 -0.447826 0.037484 0.010513 -0.447789 0.040879 0.012291 -0.447813 0.042939 0.011062 -0.447788 0.049869 0.01214 -0.417741 0.015746 -0.013894 -0.417741 0.023797 -0.012044 -0.417759 0.029418 -0.011997 -0.417778 0.029788 -0.006896 -0.417814 0.034121 -0.008562 -0.417826 0.038109 -0.009619 -0.417779 0.037623 -0.011067 -0.417783 0.042948 -0.010342 -0.41785 0.042614 -0.011096 -0.417655 0.049921 -0.011491 -0.425336 0.049942 -0.003771 -0.424017 0.043533 -0.006159 -0.422736 0.038074 -0.007723 -0.420323 0.023848 -0.012073 -0.421212 0.032839 -0.009584 -0.43308 0.04989 0.002823 -0.432446 0.043943 0.000817 -0.431587 0.038313 -0.001342 -0.430094 0.029725 -0.006943 -0.430827 0.03504 -0.003668 -0.440134 0.049923 0.00857 -0.439411 0.043477 0.006413 -0.438831 0.038482 0.004943 -0.43831 0.03193 -0.000214 -0.438492 0.035413 0.002871 -0.436633 0.030372 0.011437 -0.434509 0.023824 0.012175 -0.438416 0.035954 0.010635 -0.439603 0.042038 0.009501 -0.440007 0.04994 0.009108 -0.428927 0.033369 0.006113 -0.426723 0.029736 0.007 -0.430569 0.037726 0.005025 -0.431762 0.043084 0.003688 -0.432435 0.049899 0.003452 -0.422416 0.035259 -0.000989 -0.420715 0.031983 -0.000142 -0.423534 0.038425 -0.001748 -0.424339 0.04294 -0.002563 -0.424656 0.049918 -0.002944 -0.437706 0.17413 0.00581 -0.433209 0.174132 0.002869 -0.428304 0.174135 -0.00055 -0.423286 0.174138 -0.004615 -0.427943 0.174135 -4.1e-005 -0.432878 0.174133 0.003245 -0.437513 0.17413 0.006045 -0.442404 0.174128 0.007403 -0.440149 0.092185 0.009205 -0.433096 0.092189 0.003454 -0.42544 0.092193 -0.003172 -0.417708 0.092197 -0.010907 -0.424742 0.092193 -0.002379 -0.432472 0.092189 0.00403 -0.439782 0.092185 0.009565 -0.447781 0.092181 0.01272 -0.447774 0.049898 0.012115 -0.439767 0.049941 0.009035 -0.417723 0.049925 -0.01154 -0.417672 0.015689 0.014013 -0.440023 -0.018481 -0.00844 -0.432969 -0.018441 -0.002692 -0.425225 -0.018485 0.003901 -0.417612 -0.01846 0.01167 -0.424545 -0.01846 0.003074 -0.432324 -0.018449 -0.003322 -0.439656 -0.018499 -0.008905 -0.447663 -0.018464 -0.011985 -0.447626 -0.060747 -0.012589 -0.439627 -0.060743 -0.009434 -0.432317 -0.060739 -0.003899 -0.424587 -0.060735 0.002509 -0.417552 -0.060732 0.011038 -0.425285 -0.060736 0.003302 -0.432941 -0.06074 -0.003324 -0.439994 -0.060743 -0.009075 -0.442164 -0.142688 -0.007273 -0.437272 -0.142686 -0.005914 -0.432638 -0.142683 -0.003114 -0.427702 -0.142681 0.000172 -0.423045 -0.142678 0.004746 -0.428064 -0.142681 0.000681 -0.432968 -0.142683 -0.002738 -0.437466 -0.142686 -0.00568 -0.417679 -0.011482 0.010472 -0.417544 -0.018455 0.011622 -0.417727 -0.006644 0.009749 -0.417688 0.001677 0.007026 -0.41772 -0.002656 0.008692 -0.424235 -0.011482 0.002693 -0.423436 -0.006966 0.001878 -0.420623 -0.000521 0.000273 -0.422321 -0.003798 0.001119 -0.431658 -0.011634 -0.003557 -0.43047 -0.006275 -0.004895 -0.426633 0.00172 -0.00687 -0.428833 -0.001916 -0.005982 -0.439896 -0.018498 -0.008977 -0.447677 -0.018436 -0.012009 -0.4395 -0.010596 -0.00937 -0.447688 -0.009445 -0.012161 -0.43832 -0.004511 -0.010504 -0.44769 -0.002602 -0.012857 -0.434425 0.007624 -0.012045 -0.436542 0.001074 -0.011307 -0.447705 0.005268 -0.013389 -0.447724 0.015675 -0.0139 -0.447708 0.001688 -0.006901 -0.447714 -0.002793 -0.009482 -0.438396 -0.003969 -0.002741 -0.438218 -0.000486 0.000344 -0.447728 -0.006051 -0.010383 -0.438732 -0.007038 -0.004812 -0.447709 -0.011505 -0.010932 -0.439307 -0.012034 -0.006283 -0.430732 -0.003588 0.003798 -0.430004 0.001727 0.007073 -0.431488 -0.006862 0.001472 -0.432341 -0.012493 -0.000687 -0.421119 -0.001378 0.009714 -0.420239 0.007614 0.012203 -0.422638 -0.006614 0.007853 -0.423913 -0.012074 0.006289 -0.417669 0.002047 0.012127 -0.417681 -0.006158 0.011197 -0.417747 -0.011149 0.011226 -0.417661 0.007642 0.012173 -0.447719 0.007568 -0.011991 -0.478542 0.015674 8.3e-005 -0.386162 0.015687 8.8e-005 -0.479197 0.014909 8.3e-005 -0.479198 0.015012 0.000414 -0.479198 0.015292 0.000657 -0.479197 0.015677 0.000744 -0.479198 0.016059 0.000657 -0.4792 0.016336 0.000414 -0.4792 0.016439 8.3e-005 -0.4792 0.016336 -0.000248 -0.479199 0.016056 -0.00049 -0.479199 0.015674 -0.00058 -0.479198 0.01529 -0.00049 -0.479197 0.015011 -0.000248 -0.386136 -0.000429 8.8e-005 -0.386274 0.001677 0.007026 -0.386189 0.007642 0.012173 -0.386222 0.015689 0.014013 -0.386175 0.023745 0.012173 -0.386183 0.029643 0.007065 -0.386188 0.031802 8.8e-005 -0.386203 0.029722 -0.006899 -0.386175 0.023745 -0.011998 -0.386164 0.015752 -0.013894 -0.386148 0.007628 -0.011998 -0.386139 0.00173 -0.00689 -0.44894 -0.00044 8.8e-005 -0.448988 0.001702 0.007053 -0.448966 0.007622 0.012173 -0.448959 0.015717 0.014018 -0.448962 0.023769 0.012172 -0.448988 0.029633 0.007065 -0.448992 0.031792 8.8e-005 -0.448994 0.029658 -0.006893 -0.44898 0.023734 -0.011998 -0.448967 0.0157 -0.013898 -0.448927 0.001701 -0.006897 -0.448953 0.007587 -0.011993 -numsurf 170 -SURF 0x30 -mat 2 -refs 3 -0 0.00431034015492 1.0 -1 1.0 0.731706976891 -2 0.771552026272 0.0 -SURF 0x30 -mat 2 -refs 4 -2 0.0 0.792452991009 -1 0.213018000126 1.0 -3 1.0 0.405660003424 -4 0.556213021278 0.0 -SURF 0x30 -mat 2 -refs 4 -1 0.0 1.0 -5 0.701086997986 0.857142984867 -6 1.0 0.22222200036 -3 0.717391014099 0.0 -SURF 0x30 -mat 2 -refs 4 -5 0.0 1.0 -7 0.783217012882 0.710525989532 -8 1.0 0.184210002422 -6 0.40559399128 0.0 -SURF 0x30 -mat 2 -refs 3 -7 0.0 1.0 -9 1.0 0.833333015442 -8 0.0565370991826 0.0 -SURF 0x30 -mat 2 -refs 3 -10 0.0 0.0 -11 0.588689029217 0.943396985531 -12 1.0 1.0 -SURF 0x30 -mat 2 -refs 4 -11 0.0 0.0 -13 0.577854990959 1.0 -14 1.0 0.6875 -12 0.543253004551 0.0069443997927 -SURF 0x30 -mat 2 -refs 4 -12 0.0 0.0 -14 0.539534986019 1.0 -15 1.0 0.682353019714 -16 0.937209010124 0.264705985785 -SURF 0x30 -mat 2 -refs 4 -15 0.0722893029451 1.0 -17 1.0 0.576924026012 -18 0.927711009979 0.0 -16 0.0 0.076923198998 -SURF 0x30 -mat 2 -refs 3 -17 0.0166666992009 1.0 -19 1.0 0.0 -18 0.0 0.500001013279 -SURF 0x30 -mat 2 -refs 4 -22 0.0 0.0 -21 0.0 0.0 -18 0.0 0.0 -16 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -21 0.0 0.0 -20 0.0 0.0 -19 0.0 0.0 -18 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -24 0.0 0.0 -22 0.0 0.0 -16 0.0 0.0 -12 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -23 0.0 0.0 -24 0.0 0.0 -12 0.0 0.0 -10 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -26 0.0 0.0 -25 0.0 0.0 -20 0.0 0.0 -21 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -27 0.0 0.0 -26 0.0 0.0 -21 0.0 0.0 -22 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -29 0.0 0.0 -27 0.0 0.0 -22 0.0 0.0 -24 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -28 0.0 0.0 -29 0.0 0.0 -24 0.0 0.0 -23 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -31 0.0 0.0 -30 0.0 0.0 -25 0.0 0.0 -26 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -32 0.0 0.0 -31 0.0 0.0 -26 0.0 0.0 -27 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -34 0.0 0.0 -32 0.0 0.0 -27 0.0 0.0 -29 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -33 0.0 0.0 -34 0.0 0.0 -29 0.0 0.0 -28 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -8 0.0 0.0 -9 0.0 0.0 -30 0.0 0.0 -31 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -6 0.0 0.0 -8 0.0 0.0 -31 0.0 0.0 -32 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -3 0.0 0.0 -6 0.0 0.0 -32 0.0 0.0 -34 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -4 0.0 0.0 -3 0.0 0.0 -34 0.0 0.0 -33 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -0 0.0 0.0 -1 0.0 0.0 -35 0.0 0.0 -36 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -1 0.0 0.0 -5 0.0 0.0 -37 0.0 0.0 -35 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -5 0.0 0.0 -7 0.0 0.0 -38 0.0 0.0 -37 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -7 0.0 0.0 -9 0.0 0.0 -39 0.0 0.0 -38 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -36 0.0 0.0 -35 0.0 0.0 -40 0.0 0.0 -41 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -35 0.0 0.0 -37 0.0 0.0 -42 0.0 0.0 -40 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -37 0.0 0.0 -38 0.0 0.0 -43 0.0 0.0 -42 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -38 0.0 0.0 -39 0.0 0.0 -44 0.0 0.0 -43 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -41 0.0 0.0 -40 0.0 0.0 -45 0.0 0.0 -46 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -40 0.0 0.0 -42 0.0 0.0 -47 0.0 0.0 -45 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -42 0.0 0.0 -43 0.0 0.0 -48 0.0 0.0 -47 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -43 0.0 0.0 -44 0.0 0.0 -49 0.0 0.0 -48 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -46 0.0 0.0 -45 0.0 0.0 -14 0.0 0.0 -13 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -45 0.0 0.0 -47 0.0 0.0 -15 0.0 0.0 -14 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -48 0.0 0.0 -49 0.0 0.0 -19 0.0 0.0 -17 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -47 0.0 0.0 -48 0.0 0.0 -17 0.0 0.0 -15 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -57 0.0 1.0 -56 0.217972993851 0.893750011921 -55 0.414914011955 0.75 -54 0.688337028027 0.449999988079 -SURF 0x30 -mat 2 -refs 4 -57 0.0 1.0 -54 0.688337028027 0.449999988079 -53 1.0 0.0 -52 0.674951970577 0.34375 -SURF 0x30 -mat 2 -refs 4 -57 0.0 1.0 -52 0.674951970577 0.34375 -51 0.401529997587 0.668749988079 -50 0.21032500267 0.84375 -SURF 0x30 -mat 2 -refs 4 -58 0.0 0.0 -65 0.0 0.0 -57 0.0 0.0 -50 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -59 0.0 0.0 -58 0.0 0.0 -50 0.0 0.0 -51 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -60 0.0 0.0 -59 0.0 0.0 -51 0.0 0.0 -52 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -61 0.0 0.0 -60 0.0 0.0 -52 0.0 0.0 -53 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -62 0.0 0.0 -61 0.0 0.0 -53 0.0 0.0 -54 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -63 0.0 0.0 -62 0.0 0.0 -54 0.0 0.0 -55 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -64 0.0 0.0 -63 0.0 0.0 -55 0.0 0.0 -56 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -65 0.0 0.0 -64 0.0 0.0 -56 0.0 0.0 -57 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -30 0.0 0.0 -66 0.0 0.0 -65 0.0 0.0 -58 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -25 0.0 0.0 -30 0.0 0.0 -58 0.0 0.0 -59 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -20 0.0 0.0 -25 0.0 0.0 -59 0.0 0.0 -60 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -68 0.0 0.0 -20 0.0 0.0 -60 0.0 0.0 -61 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -49 0.0 0.0 -68 0.0 0.0 -61 0.0 0.0 -62 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -44 0.0 0.0 -49 0.0 0.0 -62 0.0 0.0 -63 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -67 0.0 0.0 -44 0.0 0.0 -63 0.0 0.0 -64 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -66 0.0 0.0 -67 0.0 0.0 -64 0.0 0.0 -65 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -77 0.0 0.0 -76 0.0 0.0 -79 0.0 0.0 -78 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -76 0.0 0.0 -75 0.0 0.0 -80 0.0 0.0 -79 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -75 0.0 0.0 -74 0.0 0.0 -81 0.0 0.0 -80 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -74 0.0 0.0 -73 0.0 0.0 -82 0.0 0.0 -81 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -73 0.0 0.0 -72 0.0 0.0 -83 0.0 0.0 -82 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -72 0.0 0.0 -71 0.0 0.0 -84 0.0 0.0 -83 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -71 0.0 0.0 -70 0.0 0.0 -85 0.0 0.0 -84 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -70 0.0 0.0 -77 0.0 0.0 -78 0.0 0.0 -85 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -78 0.0 0.0 -79 0.0 0.0 -87 0.0 0.0 -86 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -79 0.0 0.0 -80 0.0 0.0 -88 0.0 0.0 -87 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -80 0.0 0.0 -81 0.0 0.0 -89 0.0 0.0 -88 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -81 0.0 0.0 -82 0.0 0.0 -90 0.0 0.0 -89 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -82 0.0 0.0 -83 0.0 0.0 -91 0.0 0.0 -90 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -83 0.0 0.0 -84 0.0 0.0 -92 0.0 0.0 -91 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -84 0.0 0.0 -85 0.0 0.0 -93 0.0 0.0 -92 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -85 0.0 0.0 -78 0.0 0.0 -86 0.0 0.0 -93 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -86 0.0 1.0 -87 0.217972993851 0.893750011921 -88 0.414914011955 0.75 -89 0.688337028027 0.449999988079 -SURF 0x30 -mat 2 -refs 4 -86 0.0 1.0 -89 0.688337028027 0.449999988079 -90 1.0 0.0 -91 0.674951970577 0.34375 -SURF 0x30 -mat 2 -refs 4 -86 0.0 1.0 -91 0.674951970577 0.34375 -92 0.401529997587 0.668749988079 -93 0.21032500267 0.84375 -SURF 0x30 -mat 2 -refs 4 -100 0.0 0.0 -99 0.0 0.0 -94 0.0 0.0 -96 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -99 0.0 0.0 -74 0.0 0.0 -95 0.0 0.0 -94 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -102 0.0 0.0 -100 0.0 0.0 -96 0.0 0.0 -98 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -101 0.0 0.0 -102 0.0 0.0 -98 0.0 0.0 -97 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -103 0.0 0.0 -75 0.0 0.0 -74 0.0 0.0 -99 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -104 0.0 0.0 -103 0.0 0.0 -99 0.0 0.0 -100 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -106 0.0 0.0 -104 0.0 0.0 -100 0.0 0.0 -102 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -105 0.0 0.0 -106 0.0 0.0 -102 0.0 0.0 -101 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -109 0.0 0.0 -107 0.0 0.0 -75 0.0 0.0 -103 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -111 0.0 0.0 -109 0.0 0.0 -103 0.0 0.0 -104 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -114 0.0 0.0 -111 0.0 0.0 -104 0.0 0.0 -106 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -113 0.0 0.0 -114 0.0 0.0 -106 0.0 0.0 -105 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -110 0.0 0.0 -108 0.0 0.0 -107 0.0 0.0 -109 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -112 0.0 0.0 -110 0.0 0.0 -109 0.0 0.0 -111 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -115 0.0 0.0 -112 0.0 0.0 -111 0.0 0.0 -114 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -116 0.0 0.0 -115 0.0 0.0 -114 0.0 0.0 -113 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -117 0.0 0.0 -118 0.0 0.0 -119 0.0 0.0 -120 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -118 0.0 0.0 -121 0.0 0.0 -122 0.0 0.0 -119 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -121 0.0 0.0 -123 0.0 0.0 -124 0.0 0.0 -122 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -123 0.0 0.0 -108 0.0 0.0 -70 0.0 0.0 -124 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -120 0.0 0.0 -119 0.0 0.0 -125 0.0 0.0 -126 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -119 0.0 0.0 -122 0.0 0.0 -127 0.0 0.0 -125 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -122 0.0 0.0 -124 0.0 0.0 -128 0.0 0.0 -127 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -124 0.0 0.0 -70 0.0 0.0 -71 0.0 0.0 -128 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -126 0.0 0.0 -125 0.0 0.0 -129 0.0 0.0 -130 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -125 0.0 0.0 -127 0.0 0.0 -131 0.0 0.0 -129 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -127 0.0 0.0 -128 0.0 0.0 -132 0.0 0.0 -131 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -128 0.0 0.0 -71 0.0 0.0 -72 0.0 0.0 -132 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -130 0.0 0.0 -129 0.0 0.0 -133 0.0 0.0 -69 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -129 0.0 0.0 -131 0.0 0.0 -134 0.0 0.0 -133 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -132 0.0 0.0 -72 0.0 0.0 -95 0.0 0.0 -135 0.0 0.0 -SURF 0x30 -mat 2 -refs 4 -131 0.0 0.0 -132 0.0 0.0 -135 0.0 0.0 -134 0.0 0.0 -SURF 0x30 -mat 2 -refs 3 -94 0.0166666992009 1.0 -95 1.0 0.0 -135 0.0 0.500001013279 -SURF 0x30 -mat 2 -refs 4 -96 0.0722893029451 1.0 -94 1.0 0.576924026012 -135 0.927711009979 0.0 -134 0.0 0.076923198998 -SURF 0x30 -mat 2 -refs 4 -133 0.0 0.0 -98 0.539534986019 1.0 -96 1.0 0.682353019714 -134 0.937209010124 0.264705985785 -SURF 0x30 -mat 2 -refs 4 -136 0.0 0.0 -97 0.577854990959 1.0 -98 1.0 0.6875 -133 0.543253004551 0.0069443997927 -SURF 0x30 -mat 2 -refs 3 -69 0.0 0.0 -136 0.588689029217 0.943396985531 -133 1.0 1.0 -SURF 0x30 -mat 2 -refs 3 -110 0.0 1.0 -108 1.0 0.833333015442 -123 0.0565370991826 0.0 -SURF 0x30 -mat 2 -refs 4 -112 0.0 1.0 -110 0.783217012882 0.710525989532 -123 1.0 0.184210002422 -121 0.40559399128 0.0 -SURF 0x30 -mat 2 -refs 4 -115 0.0 1.0 -112 0.701086997986 0.857142984867 -121 1.0 0.22222200036 -118 0.717391014099 0.0 -SURF 0x30 -mat 2 -refs 4 -137 0.0 0.792452991009 -115 0.213018000126 1.0 -118 1.0 0.405660003424 -117 0.556213021278 0.0 -SURF 0x30 -mat 2 -refs 3 -116 0.00431034015492 1.0 -115 1.0 0.731706976891 -137 0.771552026272 0.0 -SURF 0x10 -mat 2 -refs 3 -138 0.0 0.0 -140 0.0 0.0 -151 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -138 0.0 0.0 -141 0.0 0.0 -140 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -138 0.0 0.0 -142 0.0 0.0 -141 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -138 0.0 0.0 -143 0.0 0.0 -142 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -138 0.0 0.0 -144 0.0 0.0 -143 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -138 0.0 0.0 -145 0.0 0.0 -144 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -138 0.0 0.0 -146 0.0 0.0 -145 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -138 0.0 0.0 -147 0.0 0.0 -146 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -138 0.0 0.0 -148 0.0 0.0 -147 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -138 0.0 0.0 -149 0.0 0.0 -148 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -138 0.0 0.0 -150 0.0 0.0 -149 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -138 0.0 0.0 -151 0.0 0.0 -150 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -139 0.0 0.0 -163 0.0 0.0 -152 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -139 0.0 0.0 -152 0.0 0.0 -153 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -139 0.0 0.0 -153 0.0 0.0 -154 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -139 0.0 0.0 -154 0.0 0.0 -155 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -139 0.0 0.0 -155 0.0 0.0 -156 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -139 0.0 0.0 -156 0.0 0.0 -157 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -139 0.0 0.0 -157 0.0 0.0 -158 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -139 0.0 0.0 -158 0.0 0.0 -159 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -139 0.0 0.0 -159 0.0 0.0 -160 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -139 0.0 0.0 -160 0.0 0.0 -161 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -139 0.0 0.0 -161 0.0 0.0 -162 0.0 0.0 -SURF 0x10 -mat 2 -refs 3 -139 0.0 0.0 -162 0.0 0.0 -163 0.0 0.0 -SURF 0x10 -mat 2 -refs 4 -163 -2.98022992951e-008 1.0 -174 -2.98022975187e-008 0.499999970198 -164 0.083333298564 0.5 -152 0.083333298564 1.0 -SURF 0x10 -mat 2 -refs 4 -174 -2.98022975187e-008 0.499999970198 -151 -2.98022992951e-008 0.0 -140 0.083333298564 0.0 -164 0.083333298564 0.5 -SURF 0x10 -mat 2 -refs 4 -152 0.083333298564 1.0 -164 0.083333298564 0.5 -165 0.166666999459 0.499999821186 -153 0.166666999459 1.0 -SURF 0x10 -mat 2 -refs 4 -164 0.083333298564 0.5 -140 0.083333298564 0.0 -141 0.166666999459 0.0 -165 0.166666999459 0.499999821186 -SURF 0x10 -mat 2 -refs 4 -153 0.166666999459 1.0 -165 0.16666701436 0.499999821186 -166 0.250000119209 0.5 -154 0.25 1.0 -SURF 0x10 -mat 2 -refs 4 -165 0.16666701436 0.499999821186 -141 0.166666999459 0.0 -142 0.25 0.0 -166 0.250000119209 0.5 -SURF 0x10 -mat 2 -refs 4 -154 0.25 1.0 -166 0.250000059605 0.499999970198 -167 0.333332955837 0.500000178814 -155 0.33333298564 1.0 -SURF 0x10 -mat 2 -refs 4 -166 0.250000059605 0.499999970198 -142 0.25 0.0 -143 0.33333298564 0.0 -167 0.333332955837 0.500000178814 -SURF 0x10 -mat 2 -refs 4 -155 0.33333298564 1.0 -167 0.333332955837 0.500000119209 -168 0.41666701436 0.500000178814 -156 0.41666701436 1.0 -SURF 0x10 -mat 2 -refs 4 -167 0.333332955837 0.500000119209 -143 0.33333298564 0.0 -144 0.41666701436 0.0 -168 0.41666701436 0.500000178814 -SURF 0x10 -mat 2 -refs 4 -156 0.41666701436 1.0 -168 0.416666984558 0.500000178814 -169 0.500000059605 0.500000178814 -157 0.5 1.0 -SURF 0x10 -mat 2 -refs 4 -168 0.416666984558 0.500000178814 -144 0.41666701436 0.0 -145 0.5 0.0 -169 0.500000059605 0.500000178814 -SURF 0x10 -mat 2 -refs 4 -157 0.5 1.0 -169 0.5 0.500000178814 -170 0.583333015442 0.5 -158 0.583333015442 1.0 -SURF 0x10 -mat 2 -refs 4 -169 0.5 0.500000178814 -145 0.5 0.0 -146 0.583333015442 0.0 -170 0.583333015442 0.5 -SURF 0x10 -mat 2 -refs 4 -158 0.583333015442 1.0 -170 0.583333015442 0.5 -171 0.666666984558 0.5 -159 0.666666984558 1.0 -SURF 0x10 -mat 2 -refs 4 -170 0.583333015442 0.5 -146 0.583333015442 0.0 -147 0.666666984558 0.0 -171 0.666666984558 0.5 -SURF 0x10 -mat 2 -refs 4 -159 0.666666984558 1.0 -171 0.666666984558 0.5 -172 0.75 0.5 -160 0.75 1.0 -SURF 0x10 -mat 2 -refs 4 -171 0.666666984558 0.5 -147 0.666666984558 0.0 -148 0.75 0.0 -172 0.75 0.5 -SURF 0x10 -mat 2 -refs 4 -160 0.75 1.0 -172 0.75 0.5 -173 0.833332896233 0.499999850988 -161 0.833333015442 1.0 -SURF 0x10 -mat 2 -refs 4 -172 0.75 0.5 -148 0.75 0.0 -149 0.833333015442 0.0 -173 0.833332896233 0.499999850988 -SURF 0x10 -mat 2 -refs 4 -161 0.833333015442 1.0 -173 0.833332896233 0.499999821186 -175 0.916666984558 0.5 -162 0.916666984558 1.0 -SURF 0x10 -mat 2 -refs 4 -173 0.833332896233 0.499999821186 -149 0.833333015442 0.0 -150 0.916666984558 0.0 -175 0.916666984558 0.5 -SURF 0x10 -mat 2 -refs 4 -162 0.916666984558 1.0 -175 0.916666984558 0.5 -174 1.0 0.5 -163 1.0 1.0 -SURF 0x10 -mat 2 -refs 4 -175 0.916666984558 0.5 -150 0.916666984558 0.0 -151 1.0 0.0 -174 1.0 0.5 -kids 0 -OBJECT poly -name "strut.001" -data 8 -Mesh.008 -texture "//DSC01758.rgb" -texrep 1 1 -crease 45.000000 -numvert 66 -0.122961 0.036168 -0.007847 -0.123795 0.032667 -0.005827 -0.125292 0.033057 -0.00245 -0.125954 0.036951 -0.001105 -0.123627 0.040056 -0.006497 -0.125123 0.040451 -0.003124 -0.06621 0.036665 0.018844 -0.068706 0.033567 0.020659 -0.071725 0.03409 0.022792 -0.072249 0.037713 0.023107 -0.066703 0.040266 0.019166 -0.069722 0.040788 0.021298 --0.039285 0.052705 0.02356 --0.041066 0.049268 0.025128 --0.043836 0.049792 0.02757 --0.044833 0.053752 0.028448 --0.043051 0.057188 0.026881 --0.040277 0.056664 0.024435 --0.020398 0.057601 0.087325 --0.021955 0.054164 0.089115 --0.024381 0.054689 0.091908 --0.025251 0.058648 0.09291 --0.023694 0.062084 0.091119 --0.021267 0.06156 0.088325 -0.014627 0.054014 0.100576 -0.014632 0.050579 0.102951 -0.014584 0.051102 0.106654 -0.014626 0.055062 0.107975 -0.014621 0.058498 0.105599 -0.01467 0.057975 0.101902 -0.043922 0.047399 0.079423 -0.045198 0.043963 0.081425 -0.0472 0.044486 0.084534 -0.047935 0.048446 0.085636 -0.046659 0.051882 0.083634 -0.044682 0.051359 0.080509 --0.042057 0.053228 0.026003 -0.124458 0.036561 -0.004475 -0.111846 0.036561 0.002391 -0.107074 0.040788 0.0678 -0.103726 0.040266 0.069364 -0.109899 0.037713 0.066503 -0.109365 0.03409 0.066802 -0.106015 0.033567 0.068365 -0.103202 0.036665 0.069633 -0.113348 0.040451 0.002483 -0.109678 0.040056 0.002109 -0.115514 0.036951 0.002764 -0.114018 0.033057 0.007768 -0.110343 0.032667 0.002296 -0.108175 0.036168 0.002018 --0.024381 0.054689 0.091908 -0.137771 0.129913 -0.152033 -0.016644 0.049462 -0.16521 -0.135023 0.133184 -0.144856 -0.137615 0.130504 -0.144588 -0.138988 0.128869 -0.148177 -0.137771 0.129913 -0.152033 -0.13518 0.132592 -0.1523 -0.133808 0.134227 -0.148711 -0.01453 0.049895 -0.161635 -0.018229 0.049459 -0.161346 -0.020344 0.049024 -0.16492 -0.018757 0.049029 -0.168784 -0.015064 0.049464 -0.169074 -0.01295 0.049897 -0.165498 -numsurf 66 -SURF 0x10 -mat 2 -refs 3 -37 0.235402002931 0.485176384449 -0 0.235402002931 0.485176384449 -4 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -1 0.235402002931 0.485176384449 -0 0.235402002931 0.485176384449 -37 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -37 0.235402002931 0.485176384449 -2 0.235402002931 0.485176384449 -1 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -37 0.235402002931 0.485176384449 -3 0.235402002931 0.485176384449 -2 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -37 0.235402002931 0.485176384449 -5 0.235402002931 0.485176384449 -3 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -37 0.235402002931 0.485176384449 -4 0.235402002931 0.485176384449 -5 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -0 0.235402002931 0.485176384449 -6 0.235402002931 0.485176384449 -10 0.235402002931 0.485176384449 -4 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -6 0.235402002931 0.485176384449 -0 0.235402002931 0.485176384449 -1 0.235402002931 0.485176384449 -7 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -7 0.235402002931 0.485176384449 -1 0.235402002931 0.485176384449 -2 0.235402002931 0.485176384449 -8 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -8 0.235402002931 0.485176384449 -2 0.235402002931 0.485176384449 -3 0.235402002931 0.485176384449 -9 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -9 0.235402002931 0.485176384449 -3 0.235402002931 0.485176384449 -5 0.235402002931 0.485176384449 -11 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -11 0.235402002931 0.485176384449 -5 0.235402002931 0.485176384449 -4 0.235402002931 0.485176384449 -10 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -35 0.235402002931 0.485176384449 -10 0.235402002931 0.485176384449 -6 0.235402002931 0.485176384449 -30 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -30 0.235402002931 0.485176384449 -6 0.235402002931 0.485176384449 -7 0.235402002931 0.485176384449 -31 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -31 0.235402002931 0.485176384449 -7 0.235402002931 0.485176384449 -8 0.235402002931 0.485176384449 -32 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -32 0.235402002931 0.485176384449 -8 0.235402002931 0.485176384449 -9 0.235402002931 0.485176384449 -33 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -33 0.235402002931 0.485176384449 -9 0.235402002931 0.485176384449 -11 0.235402002931 0.485176384449 -34 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -34 0.235402002931 0.485176384449 -11 0.235402002931 0.485176384449 -10 0.235402002931 0.485176384449 -35 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -36 0.235402002931 0.485176384449 -17 0.235402002931 0.485176384449 -12 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -36 0.235402002931 0.485176384449 -12 0.235402002931 0.485176384449 -13 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -36 0.235402002931 0.485176384449 -13 0.235402002931 0.485176384449 -14 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -36 0.235402002931 0.485176384449 -14 0.235402002931 0.485176384449 -15 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -36 0.235402002931 0.485176384449 -15 0.235402002931 0.485176384449 -16 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -36 0.235402002931 0.485176384449 -16 0.235402002931 0.485176384449 -17 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -18 0.235402002931 0.485176384449 -12 0.235402002931 0.485176384449 -17 0.235402002931 0.485176384449 -23 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -19 0.235402002931 0.485176384449 -13 0.235402002931 0.485176384449 -12 0.235402002931 0.485176384449 -18 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -20 0.235402002931 0.485176384449 -14 0.235402002931 0.485176384449 -13 0.235402002931 0.485176384449 -19 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -21 0.235402002931 0.485176384449 -15 0.235402002931 0.485176384449 -14 0.235402002931 0.485176384449 -51 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -22 0.235402002931 0.485176384449 -16 0.235402002931 0.485176384449 -15 0.235402002931 0.485176384449 -21 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -23 0.235402002931 0.485176384449 -17 0.235402002931 0.485176384449 -16 0.235402002931 0.485176384449 -22 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -24 0.235402002931 0.485176384449 -18 0.235402002931 0.485176384449 -23 0.235402002931 0.485176384449 -29 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -25 0.235402002931 0.485176384449 -19 0.235402002931 0.485176384449 -18 0.235402002931 0.485176384449 -24 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -26 0.235402002931 0.485176384449 -20 0.235402002931 0.485176384449 -19 0.235402002931 0.485176384449 -25 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -27 0.235402002931 0.485176384449 -21 0.235402002931 0.485176384449 -51 0.235402002931 0.485176384449 -26 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -28 0.235402002931 0.485176384449 -22 0.235402002931 0.485176384449 -21 0.235402002931 0.485176384449 -27 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -29 0.235402002931 0.485176384449 -23 0.235402002931 0.485176384449 -22 0.235402002931 0.485176384449 -28 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -35 0.235402002931 0.485667705536 -30 0.235483899713 0.485667705536 -24 0.235483899713 0.485176384449 -29 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -30 0.235483899713 0.485667705536 -31 0.235565781593 0.485667705536 -25 0.235565781593 0.485176384449 -24 0.235483899713 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -31 0.235565781593 0.485667705536 -32 0.235647678375 0.485667705536 -26 0.235647678375 0.485176384449 -25 0.235565781593 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -32 0.235647678375 0.485667705536 -33 0.235729545355 0.485667705536 -27 0.235729545355 0.485176384449 -26 0.235647678375 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -33 0.235729545355 0.485667705536 -34 0.235811442137 0.485667705536 -28 0.235811442137 0.485176384449 -27 0.235729545355 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -34 0.235811442137 0.485667705536 -35 0.235893324018 0.485667705536 -29 0.235893324018 0.485176384449 -28 0.235811442137 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -39 0.235402002931 0.485176384449 -45 0.235402002931 0.485176384449 -46 0.235402002931 0.485176384449 -40 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -41 0.235402002931 0.485176384449 -47 0.235402002931 0.485176384449 -45 0.235402002931 0.485176384449 -39 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -42 0.235402002931 0.485176384449 -48 0.235402002931 0.485176384449 -47 0.235402002931 0.485176384449 -41 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -43 0.235402002931 0.485176384449 -49 0.235402002931 0.485176384449 -48 0.235402002931 0.485176384449 -42 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -49 0.235402002931 0.485176384449 -43 0.235402002931 0.485176384449 -44 0.235402002931 0.485176384449 -50 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -50 0.235402002931 0.485176384449 -44 0.235402002931 0.485176384449 -40 0.235402002931 0.485176384449 -46 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -38 0.235402002931 0.485176384449 -46 0.235402002931 0.485176384449 -45 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -38 0.235402002931 0.485176384449 -45 0.235402002931 0.485176384449 -47 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -38 0.235402002931 0.485176384449 -47 0.235402002931 0.485176384449 -48 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -38 0.235402002931 0.485176384449 -48 0.235402002931 0.485176384449 -49 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -38 0.235402002931 0.485176384449 -49 0.235402002931 0.485176384449 -50 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -46 0.235402002931 0.485176384449 -38 0.235402002931 0.485176384449 -50 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -54 0.235402002931 0.485176384449 -60 0.235402002931 0.485176384449 -61 0.235402002931 0.485176384449 -55 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -55 0.235402002931 0.485176384449 -61 0.235402002931 0.485176384449 -62 0.235402002931 0.485176384449 -56 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -56 0.235402002931 0.485176384449 -62 0.235402002931 0.485176384449 -63 0.235402002931 0.485176384449 -52 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -57 0.235402002931 0.485176384449 -63 0.235402002931 0.485176384449 -64 0.235402002931 0.485176384449 -58 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -58 0.235402002931 0.485176384449 -64 0.235402002931 0.485176384449 -65 0.235402002931 0.485176384449 -59 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 4 -59 0.235402002931 0.485176384449 -65 0.235402002931 0.485176384449 -60 0.235402002931 0.485176384449 -54 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -53 0.235402002931 0.485176384449 -61 0.235402002931 0.485176384449 -60 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -53 0.235402002931 0.485176384449 -62 0.235402002931 0.485176384449 -61 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -53 0.235402002931 0.485176384449 -63 0.235402002931 0.485176384449 -62 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -53 0.235402002931 0.485176384449 -64 0.235402002931 0.485176384449 -63 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -53 0.235402002931 0.485176384449 -65 0.235402002931 0.485176384449 -64 0.235402002931 0.485176384449 -SURF 0x10 -mat 2 -refs 3 -53 0.235402002931 0.485176384449 -60 0.235402002931 0.485176384449 -65 0.235402002931 0.485176384449 -kids 0 -OBJECT poly -name "motor" -data 8 -Mesh.014 -texture "//DSC01758.rgb" -texrep 1 1 -crease 45.000000 -numvert 59 -0.115873 0.015857 -4e-006 -0.391286 0.015822 -4e-006 -0.115873 0.006298 0.03494 -0.115866 -0.00085 0.030258 -0.115861 -0.013081 0.017468 -0.11586 -0.017558 -4e-006 -0.115861 -0.013081 -0.017476 -0.115866 -0.00085 -0.030266 -0.115873 0.015857 -0.034948 -0.11588 0.032565 -0.030266 -0.115884 0.044796 -0.017476 -0.115886 0.049272 -4e-006 -0.115884 0.044796 0.017468 -0.11588 0.032565 0.030258 -0.391286 0.015822 0.03494 -0.391279 -0.000886 0.030258 -0.391274 -0.013116 0.017468 -0.391273 -0.017593 -4e-006 -0.391274 -0.013116 -0.017476 -0.391279 -0.000886 -0.030266 -0.391286 0.015822 -0.034948 -0.391292 0.032529 -0.030266 -0.391297 0.04476 -0.017476 -0.391299 0.049237 -4e-006 -0.391297 0.04476 0.017468 -0.391292 0.032529 0.030258 -0.286615 0.035604 0.035833 -0.286616 0.050088 0.020687 -0.286617 0.055389 -4e-006 -0.286616 0.050088 -0.020695 -0.286615 0.035604 -0.035841 -0.286613 0.015818 -0.041385 -0.286612 0.015696 -0.06011 -0.286611 0.001213 -0.060082 -0.28661 -0.023752 -4e-006 -0.286611 0.001213 0.060379 -0.286612 0.015696 0.060115 -0.286613 0.015818 0.041377 -0.220677 0.035646 0.035833 -0.220678 0.05013 0.020687 -0.220679 0.055431 -4e-006 -0.220678 0.05013 -0.020695 -0.220677 0.035646 -0.035841 -0.220676 0.015861 -0.041385 -0.220674 0.015739 -0.06011 -0.220673 0.001254 -0.060082 -0.220673 -0.02371 -4e-006 -0.220673 0.001254 0.060379 -0.220674 0.015739 0.060115 -0.220676 0.015861 0.041377 -0.286613 0.015818 -4e-006 -0.220676 0.015861 -4e-006 -0.220673 0.001254 0.060379 -0.286611 0.001213 0.060379 -0.286611 0.001213 -0.060082 -0.101225 0.031552 0.044786 -0.101226 0.03692 0.12043 -0.14196 0.025509 0.044786 -0.141961 0.029399 0.12043 -numsurf 73 -SURF 0x10 -mat 2 -refs 3 -0 0.0799582228065 0.539897024632 -2 0.0799582228065 0.539897024632 -13 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -0 0.0799582228065 0.539897024632 -3 0.0799582228065 0.539897024632 -2 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -0 0.0799582228065 0.539897024632 -4 0.0799582228065 0.539897024632 -3 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -0 0.0799582228065 0.539897024632 -5 0.0799582228065 0.539897024632 -4 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -0 0.0799582228065 0.539897024632 -6 0.0799582228065 0.539897024632 -5 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -0 0.0799582228065 0.539897024632 -7 0.0799582228065 0.539897024632 -6 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -0 0.0799582228065 0.539897024632 -8 0.0799582228065 0.539897024632 -7 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -0 0.0799582228065 0.539897024632 -9 0.0799582228065 0.539897024632 -8 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -0 0.0799582228065 0.539897024632 -10 0.0799582228065 0.539897024632 -9 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -0 0.0799582228065 0.539897024632 -11 0.0799582228065 0.539897024632 -10 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -0 0.0799582228065 0.539897024632 -12 0.0799582228065 0.539897024632 -11 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -0 0.0799582228065 0.539897024632 -13 0.0799582228065 0.539897024632 -12 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -1 0.0799582228065 0.539897024632 -25 0.0799582228065 0.539897024632 -14 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -1 0.0799582228065 0.539897024632 -14 0.0799582228065 0.539897024632 -15 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -1 0.0799582228065 0.539897024632 -15 0.0799582228065 0.539897024632 -16 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -1 0.0799582228065 0.539897024632 -16 0.0799582228065 0.539897024632 -17 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -1 0.0799582228065 0.539897024632 -17 0.0799582228065 0.539897024632 -18 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -1 0.0799582228065 0.539897024632 -18 0.0799582228065 0.539897024632 -19 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -1 0.0799582228065 0.539897024632 -19 0.0799582228065 0.539897024632 -20 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -1 0.0799582228065 0.539897024632 -20 0.0799582228065 0.539897024632 -21 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -1 0.0799582228065 0.539897024632 -21 0.0799582228065 0.539897024632 -22 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -1 0.0799582228065 0.539897024632 -22 0.0799582228065 0.539897024632 -23 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -1 0.0799582228065 0.539897024632 -23 0.0799582228065 0.539897024632 -24 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 3 -1 0.0799582228065 0.539897024632 -24 0.0799582228065 0.539897024632 -25 0.0799582228065 0.539897024632 -SURF 0x10 -mat 2 -refs 4 -25 0.0799582228065 0.549106776714 -13 0.0799582228065 0.539897024632 -2 0.0807257071137 0.539897024632 -14 0.0807257071137 0.549106776714 -SURF 0x10 -mat 2 -refs 4 -14 0.0807257071137 0.549106776714 -2 0.0807257071137 0.539897024632 -3 0.0814931765199 0.539897024632 -15 0.0814931765199 0.549106776714 -SURF 0x10 -mat 2 -refs 4 -15 0.0814931765199 0.549106776714 -3 0.0814931765199 0.539897024632 -4 0.082260645926 0.539897024632 -16 0.082260645926 0.549106776714 -SURF 0x10 -mat 2 -refs 4 -16 0.082260645926 0.549106776714 -4 0.082260645926 0.539897024632 -5 0.0830281153321 0.539897024632 -17 0.0830281153321 0.549106776714 -SURF 0x10 -mat 2 -refs 4 -17 0.0830281153321 0.549106776714 -5 0.0830281153321 0.539897024632 -6 0.0837956145406 0.539897024632 -18 0.0837956145406 0.549106776714 -SURF 0x10 -mat 2 -refs 4 -18 0.0837956145406 0.549106776714 -6 0.0837956145406 0.539897024632 -7 0.0845630839467 0.539897024632 -19 0.0845630839467 0.549106776714 -SURF 0x10 -mat 2 -refs 4 -19 0.0845630839467 0.549106776714 -7 0.0845630839467 0.539897024632 -8 0.0853305533528 0.539897024632 -20 0.0853305533528 0.549106776714 -SURF 0x10 -mat 2 -refs 4 -20 0.0853305533528 0.549106776714 -8 0.0853305533528 0.539897024632 -9 0.0860980525613 0.539897024632 -21 0.0860980525613 0.549106776714 -SURF 0x10 -mat 2 -refs 4 -21 0.0860980525613 0.549106776714 -9 0.0860980525613 0.539897024632 -10 0.0868655219674 0.539897024632 -22 0.0868655219674 0.549106776714 -SURF 0x10 -mat 2 -refs 4 -22 0.0868655219674 0.549106776714 -10 0.0868655219674 0.539897024632 -11 0.0876329913735 0.539897024632 -23 0.0876329913735 0.549106776714 -SURF 0x10 -mat 2 -refs 4 -23 0.0876329913735 0.549106776714 -11 0.0876329913735 0.539897024632 -12 0.0884004756808 0.539897024632 -24 0.0884004756808 0.549106776714 -SURF 0x10 -mat 2 -refs 4 -24 0.0884004756808 0.549106776714 -12 0.0884004756808 0.539897024632 -13 0.089167945087 0.539897024632 -25 0.089167945087 0.549106776714 -SURF 0x10 -mat 2 -refs 4 -27 0.183842405677 0.479689747095 -39 0.183842405677 0.478968471289 -38 0.183902516961 0.478968471289 -26 0.183902516961 0.479689747095 -SURF 0x10 -mat 2 -refs 4 -28 0.183782294393 0.479689747095 -40 0.183782294393 0.478968471289 -39 0.183842405677 0.478968471289 -27 0.183842405677 0.479689747095 -SURF 0x10 -mat 2 -refs 4 -29 0.183722183108 0.479689747095 -41 0.183722183108 0.478968471289 -40 0.183782294393 0.478968471289 -28 0.183782294393 0.479689747095 -SURF 0x10 -mat 2 -refs 4 -30 0.183662086725 0.479689747095 -42 0.183662086725 0.478968471289 -41 0.183722183108 0.478968471289 -29 0.183722183108 0.479689747095 -SURF 0x10 -mat 2 -refs 4 -31 0.183601975441 0.479689747095 -43 0.183601975441 0.478968471289 -42 0.183662086725 0.478968471289 -30 0.183662086725 0.479689747095 -SURF 0x10 -mat 2 -refs 4 -32 0.183541864157 0.479689747095 -44 0.183541864157 0.478968471289 -43 0.183601975441 0.478968471289 -31 0.183601975441 0.479689747095 -SURF 0x10 -mat 2 -refs 4 -54 0.183481752872 0.479689747095 -45 0.183481752872 0.478968471289 -44 0.183541864157 0.478968471289 -32 0.183541864157 0.479689747095 -SURF 0x10 -mat 2 -refs 4 -34 0.183421641588 0.479689747095 -46 0.183421641588 0.478968471289 -45 0.183481752872 0.478968471289 -54 0.183481752872 0.479689747095 -SURF 0x10 -mat 2 -refs 4 -35 0.183361545205 0.479689747095 -47 0.183361545205 0.478968471289 -46 0.183421641588 0.478968471289 -34 0.183421641588 0.479689747095 -SURF 0x10 -mat 2 -refs 4 -36 0.183301433921 0.479689747095 -48 0.183301433921 0.478968471289 -52 0.183361545205 0.478968471289 -53 0.183361545205 0.479689747095 -SURF 0x10 -mat 2 -refs 4 -37 0.183241322637 0.479689747095 -49 0.183241322637 0.478968471289 -48 0.183301433921 0.478968471289 -36 0.183301433921 0.479689747095 -SURF 0x10 -mat 2 -refs 4 -26 0.183181211352 0.479689747095 -38 0.183181211352 0.478968471289 -49 0.183241322637 0.478968471289 -37 0.183241322637 0.479689747095 -SURF 0x10 -mat 2 -refs 3 -50 0.183181211352 0.478968471289 -27 0.183181211352 0.478968471289 -26 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -50 0.183181211352 0.478968471289 -28 0.183181211352 0.478968471289 -27 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -50 0.183181211352 0.478968471289 -29 0.183181211352 0.478968471289 -28 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -50 0.183181211352 0.478968471289 -30 0.183181211352 0.478968471289 -29 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -50 0.183181211352 0.478968471289 -31 0.183181211352 0.478968471289 -30 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -50 0.183181211352 0.478968471289 -32 0.183181211352 0.478968471289 -31 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -50 0.183181211352 0.478968471289 -33 0.183181211352 0.478968471289 -32 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -50 0.183181211352 0.478968471289 -34 0.183181211352 0.478968471289 -33 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -50 0.183181211352 0.478968471289 -35 0.183181211352 0.478968471289 -34 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -50 0.183181211352 0.478968471289 -36 0.183181211352 0.478968471289 -35 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -50 0.183181211352 0.478968471289 -37 0.183181211352 0.478968471289 -36 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -50 0.183181211352 0.478968471289 -26 0.183181211352 0.478968471289 -37 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -51 0.183181211352 0.478968471289 -38 0.183181211352 0.478968471289 -39 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -51 0.183181211352 0.478968471289 -39 0.183181211352 0.478968471289 -40 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -51 0.183181211352 0.478968471289 -40 0.183181211352 0.478968471289 -41 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -51 0.183181211352 0.478968471289 -41 0.183181211352 0.478968471289 -42 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -51 0.183181211352 0.478968471289 -42 0.183181211352 0.478968471289 -43 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -51 0.183181211352 0.478968471289 -43 0.183181211352 0.478968471289 -44 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -51 0.183181211352 0.478968471289 -44 0.183181211352 0.478968471289 -45 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -51 0.183181211352 0.478968471289 -45 0.183181211352 0.478968471289 -46 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -51 0.183181211352 0.478968471289 -46 0.183181211352 0.478968471289 -47 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -51 0.183181211352 0.478968471289 -47 0.183181211352 0.478968471289 -48 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -51 0.183181211352 0.478968471289 -48 0.183181211352 0.478968471289 -49 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 3 -51 0.183181211352 0.478968471289 -49 0.183181211352 0.478968471289 -38 0.183181211352 0.478968471289 -SURF 0x10 -mat 2 -refs 4 -57 0.202283456922 0.48957207799 -55 0.211194992065 0.48957696557 -56 0.211193606257 0.501945197582 -58 0.202282071114 0.501940310001 -kids 0 -OBJECT poly -name "horzstab.001" -data 8 -Mesh.010 -texture "//DSC01758.rgb" -texrep 1 1 -crease 45.000000 -numvert 111 -0.64451 0.116561 2.306764 -0.899361 0.123524 2.307009 -0.897399 0.11689 2.306601 -0.639688 0.109987 2.307225 -0.718084 0.142869 2.306838 -0.717002 0.119428 2.307038 -0.844071 0.129424 2.306957 -0.842378 0.117664 2.306735 -0.888591 0.119852 2.243279 -0.88656 0.113006 2.242792 -0.620911 0.113907 2.243027 -0.61543 0.106828 2.243436 -0.696769 0.115892 2.243243 -0.697857 0.140206 2.243103 -0.828674 0.113886 2.242929 -0.830417 0.12606 2.243226 -0.599074 0.014895 0.530098 -0.59518 0.008608 0.527454 --0.010354 0.042571 0.529629 --0.033546 0.021898 0.52866 -0.152882 0.020824 0.528298 -0.154115 0.068626 0.52977 -0.460279 0.012334 0.527711 -0.463361 0.035624 0.529998 -0.45383 0.031514 0.485704 -0.450833 0.006714 0.483731 -0.13917 0.066308 0.485106 -0.137916 0.017689 0.483609 --0.050266 0.016705 0.484691 --0.028168 0.039808 0.484963 -0.587785 0.005264 0.482751 -0.591745 0.010516 0.485441 -0.367942 0.006021 0.310547 -0.365004 -0.006865 0.309817 --0.088669 0.0295 0.311497 --0.115907 -6.7e-005 0.310739 -0.074979 0.005783 0.309154 -0.074034 0.056712 0.311605 -0.261662 -0.002896 0.310014 -0.264015 0.021732 0.311779 -0.365004 -0.006865 0.309817 -0.367942 0.006021 0.310547 -0.591745 0.010516 0.485441 -0.587785 0.005264 0.482751 -0.59518 0.008608 0.527454 -0.599074 0.014895 0.530098 -0.88656 0.113006 2.242792 -0.888591 0.119852 2.243279 -0.897399 0.11689 2.306601 -0.899361 0.123524 2.307009 -0.899361 0.123524 -2.308464 -0.897399 0.11689 -2.308057 -0.888591 0.119852 -2.244735 -0.88656 0.113006 -2.244248 -0.599074 0.014895 -0.531554 -0.59518 0.008608 -0.52891 -0.587785 0.005264 -0.484206 -0.591745 0.010516 -0.486897 -0.363957 -0.014836 -0.000747 -0.360042 -0.032265 -0.000744 -0.367942 0.006021 -0.312003 -0.365004 -0.006865 -0.311273 -0.264015 0.021732 -0.313235 -0.261662 -0.002896 -0.31147 -0.074034 0.056712 -0.313061 -0.074979 0.005783 -0.31061 --0.115907 -6.7e-005 -0.312195 --0.088669 0.0295 -0.312953 -0.365004 -0.006865 -0.311273 -0.367942 0.006021 -0.312003 -0.22406 -0.027043 -0.000735 -0.227156 0.005364 -0.00072 --0.031493 -0.015144 -0.000728 --0.031393 0.051392 -0.000719 -0.360042 -0.032265 -0.000712 --0.261235 -0.01331 -0.000728 --0.198642 0.030973 -0.000728 -0.363957 -0.014836 -0.000747 -0.591745 0.010516 -0.486897 -0.587785 0.005264 -0.484206 --0.028168 0.039808 -0.486419 --0.050266 0.016705 -0.486147 -0.137916 0.017689 -0.485065 -0.13917 0.066308 -0.486562 -0.450833 0.006714 -0.485187 -0.45383 0.031514 -0.48716 -0.463361 0.035624 -0.531454 -0.460279 0.012334 -0.529167 -0.154115 0.068626 -0.531226 -0.152882 0.020824 -0.529754 --0.033546 0.021898 -0.530116 --0.010354 0.042571 -0.531085 -0.59518 0.008608 -0.52891 -0.599074 0.014895 -0.531554 -0.830417 0.12606 -2.244682 -0.828674 0.113886 -2.244385 -0.697857 0.140206 -2.244559 -0.696769 0.115892 -2.244699 -0.61543 0.106828 -2.244892 -0.620911 0.113907 -2.244483 -0.88656 0.113006 -2.244248 -0.888591 0.119852 -2.244735 -0.842378 0.117664 -2.308191 -0.844071 0.129424 -2.308412 -0.717002 0.119428 -2.308494 -0.718084 0.142869 -2.308294 -0.639688 0.109987 -2.308681 -0.897399 0.11689 -2.308057 -0.899361 0.123524 -2.308464 -0.64451 0.116561 -2.30822 -0.61543 0.106828 -2.244892 -numsurf 80 -SURF 0x30 -mat 2 -refs 4 -4 0.399851858616 0.632653355598 -0 0.399851858616 0.632653355598 -3 0.399851858616 0.632653355598 -5 0.399851858616 0.632653355598 -SURF 0x30 -mat 2 -refs 4 -1 0.399851858616 0.632653355598 -6 0.399851858616 0.632653355598 -7 0.399851858616 0.632653355598 -2 0.399851858616 0.632653355598 -SURF 0x30 -mat 2 -refs 4 -6 0.399851858616 0.632653355598 -4 0.399851858616 0.632653355598 -5 0.399851858616 0.632653355598 -7 0.399851858616 0.632653355598 -SURF 0x30 -mat 2 -refs 4 -0 0.399851858616 0.632653355598 -10 0.399851858616 0.632653355598 -11 0.399851858616 0.632653355598 -3 0.399851858616 0.632653355598 -SURF 0x30 -mat 2 -refs 4 -12 0.514271497726 0.254068434238 -5 0.528543055058 0.133798599243 -3 0.439346075058 0.137139439583 -11 0.408424496651 0.255182027817 -SURF 0x30 -mat 2 -refs 4 -10 0.479361355305 0.70319634676 -0 0.500608086586 0.639424204826 -4 0.542607367039 0.639886260033 -13 0.532478153706 0.703658461571 -SURF 0x30 -mat 2 -refs 4 -14 0.567195057869 0.253511667252 -7 0.573141515255 0.132128179073 -5 0.528543055058 0.133798599243 -12 0.514271497726 0.254068434238 -SURF 0x30 -mat 2 -refs 4 -9 0.620118558407 0.25295484066 -2 0.617740035057 0.130457758904 -7 0.573141515255 0.132128179073 -14 0.567195057869 0.253511667252 -SURF 0x30 -mat 2 -refs 4 -6 0.563607037067 0.64011734724 -15 0.559036552906 0.703889489174 -13 0.532478153706 0.703658461571 -4 0.542607367039 0.639886260033 -SURF 0x30 -mat 2 -refs 4 -1 0.584606766701 0.640348434448 -8 0.585594952106 0.704120576382 -15 0.559036552906 0.703889489174 -6 0.563607037067 0.64011734724 -SURF 0x30 -mat 2 -refs 4 -10 0.458114653826 0.639424204826 -18 0.458114653826 0.639424204826 -19 0.458114653826 0.639424204826 -11 0.458114653826 0.639424204826 -SURF 0x30 -mat 2 -refs 4 -18 0.458114653826 0.639424204826 -29 0.458114653826 0.639424204826 -28 0.458114653826 0.639424204826 -19 0.458114653826 0.639424204826 -SURF 0x30 -mat 2 -refs 4 -27 0.5 0.374338269234 -20 0.507135748863 0.314203381538 -19 0.392963767052 0.314203321934 -28 0.377502918243 0.373224675655 -SURF 0x30 -mat 2 -refs 4 -20 0.507135748863 0.314203381538 -12 0.514271497726 0.254068434238 -11 0.408424496651 0.255182027817 -19 0.392963767052 0.314203321934 -SURF 0x30 -mat 2 -refs 4 -13 0.532478153706 0.703658461571 -21 0.527413547039 0.73554456234 -18 0.468738019466 0.735082447529 -10 0.479361355305 0.70319634676 -SURF 0x30 -mat 2 -refs 4 -21 0.527413547039 0.73554456234 -26 0.522348940372 0.767430663109 -29 0.458114653826 0.766968548298 -18 0.468738019466 0.735082447529 -SURF 0x30 -mat 2 -refs 4 -25 0.561248540878 0.374895095825 -22 0.564221799374 0.314203381538 -20 0.507135748863 0.314203381538 -27 0.5 0.374338269234 -SURF 0x30 -mat 2 -refs 4 -22 0.564221799374 0.314203381538 -14 0.567195057869 0.253511667252 -12 0.514271497726 0.254068434238 -20 0.507135748863 0.314203381538 -SURF 0x30 -mat 2 -refs 4 -30 0.622497081757 0.375451922417 -17 0.621307790279 0.314203381538 -22 0.564221799374 0.314203381538 -25 0.561248540878 0.374895095825 -SURF 0x30 -mat 2 -refs 4 -15 0.559036552906 0.703889489174 -23 0.556751310825 0.735775589943 -21 0.527413547039 0.73554456234 -13 0.532478153706 0.703658461571 -SURF 0x30 -mat 2 -refs 4 -23 0.556751310825 0.735775589943 -24 0.554466068745 0.767661690712 -26 0.522348940372 0.767430663109 -21 0.527413547039 0.73554456234 -SURF 0x30 -mat 2 -refs 4 -16 0.586089074612 0.736006617546 -31 0.586583197117 0.767892718315 -24 0.554466068745 0.767661690712 -23 0.556751310825 0.735775589943 -SURF 0x30 -mat 2 -refs 4 -31 0.600605428219 0.772481143475 -32 0.537756383419 0.808732867241 -39 0.50633263588 0.808652341366 -24 0.559492111206 0.769924759865 -SURF 0x30 -mat 2 -refs 4 -24 0.559492111206 0.769924759865 -39 0.50633263588 0.808652341366 -37 0.44927740097 0.809792399406 -26 0.46711575985 0.771030068398 -SURF 0x30 -mat 2 -refs 4 -33 0.455821305513 0.525201380253 -30 0.455473095179 0.518463850021 -25 0.438758164644 0.518463850021 -38 0.437887579203 0.525158703327 -SURF 0x30 -mat 2 -refs 4 -38 0.437887579203 0.525158703327 -25 0.438758164644 0.518463850021 -27 0.422043204308 0.518463850021 -36 0.419953852892 0.525116026402 -SURF 0x30 -mat 2 -refs 4 -26 0.46711575985 0.771030068398 -37 0.44927740097 0.809792399406 -34 0.412061452866 0.80841088295 -29 0.405638307333 0.772020041943 -SURF 0x30 -mat 2 -refs 4 -36 0.419953852892 0.525116026402 -27 0.422043204308 0.518463850021 -28 0.388613373041 0.518463850021 -35 0.38408640027 0.525030732155 -SURF 0x30 -mat 2 -refs 4 -29 0.358979851007 0.775249123573 -34 0.358979851007 0.775249123573 -35 0.358979851007 0.775249123573 -28 0.358979851007 0.775249123573 -SURF 0x30 -mat 2 -refs 4 -34 0.359373480082 0.822860062122 -76 0.359373480082 0.822860062122 -75 0.359373480082 0.822860062122 -35 0.359373480082 0.822860062122 -SURF 0x30 -mat 2 -refs 4 -72 0.419953852892 0.525116026402 -36 0.422043204308 0.518463850021 -35 0.388613373041 0.518463850021 -75 0.38408640027 0.525030732155 -SURF 0x30 -mat 2 -refs 4 -37 0.525246620178 0.77130818367 -73 0.500941634178 0.802097022533 -76 0.378444582224 0.8017770648 -34 0.436071872711 0.771053314209 -SURF 0x30 -mat 2 -refs 4 -70 0.437887579203 0.525158703327 -38 0.438758164644 0.518463850021 -36 0.422043204308 0.518463850021 -72 0.419953852892 0.525116026402 -SURF 0x30 -mat 2 -refs 4 -74 0.455821305513 0.525201380253 -33 0.455473095179 0.518463850021 -38 0.438758164644 0.518463850021 -70 0.437887579203 0.525158703327 -SURF 0x30 -mat 2 -refs 4 -39 0.569834053516 0.771435678005 -71 0.562190175056 0.802256941795 -73 0.500941634178 0.802097022533 -37 0.525246620178 0.77130818367 -SURF 0x30 -mat 2 -refs 4 -32 0.61442142725 0.77156317234 -77 0.623438715935 0.802416920662 -71 0.562190175056 0.802256941795 -39 0.569834053516 0.771435678005 -SURF 0x30 -mat 2 -refs 4 -58 0.395501255989 0.808040380478 -41 0.395501255989 0.808040380478 -40 0.395501255989 0.808040380478 -59 0.395501255989 0.808040380478 -SURF 0x30 -mat 2 -refs 4 -41 0.395501255989 0.808040380478 -42 0.395501255989 0.808040380478 -43 0.395501255989 0.808040380478 -40 0.395501255989 0.808040380478 -SURF 0x30 -mat 2 -refs 4 -42 0.399851858616 0.632653355598 -45 0.399851858616 0.632653355598 -44 0.399851858616 0.632653355598 -43 0.399851858616 0.632653355598 -SURF 0x30 -mat 2 -refs 4 -47 0.399851858616 0.632653355598 -49 0.399851858616 0.632653355598 -48 0.399851858616 0.632653355598 -46 0.399851858616 0.632653355598 -SURF 0x30 -mat 2 -refs 4 -52 0.399851858616 0.632653355598 -53 0.399851858616 0.632653355598 -51 0.399851858616 0.632653355598 -50 0.399851858616 0.632653355598 -SURF 0x30 -mat 2 -refs 4 -57 0.399851858616 0.632653355598 -56 0.399851858616 0.632653355598 -55 0.399851858616 0.632653355598 -54 0.399851858616 0.632653355598 -SURF 0x30 -mat 2 -refs 4 -60 0.395501255989 0.808040380478 -61 0.395501255989 0.808040380478 -56 0.395501255989 0.808040380478 -57 0.395501255989 0.808040380478 -SURF 0x30 -mat 2 -refs 4 -58 0.395501255989 0.808040380478 -59 0.395501255989 0.808040380478 -61 0.395501255989 0.808040380478 -60 0.395501255989 0.808040380478 -SURF 0x30 -mat 2 -refs 4 -69 0.61442142725 0.77156317234 -62 0.569834053516 0.771435678005 -71 0.562190175056 0.802256941795 -77 0.623438715935 0.802416920662 -SURF 0x30 -mat 2 -refs 4 -62 0.569834053516 0.771435678005 -64 0.525246620178 0.77130818367 -73 0.500941634178 0.802097022533 -71 0.562190175056 0.802256941795 -SURF 0x30 -mat 2 -refs 4 -74 0.455821305513 0.525201380253 -70 0.437887579203 0.525158703327 -63 0.438758164644 0.518463850021 -68 0.455473095179 0.518463850021 -SURF 0x30 -mat 2 -refs 4 -70 0.437887579203 0.525158703327 -72 0.419953852892 0.525116026402 -65 0.422043204308 0.518463850021 -63 0.438758164644 0.518463850021 -SURF 0x30 -mat 2 -refs 4 -64 0.525246620178 0.77130818367 -67 0.436071872711 0.771053314209 -76 0.378444582224 0.8017770648 -73 0.500941634178 0.802097022533 -SURF 0x30 -mat 2 -refs 4 -72 0.419953852892 0.525116026402 -75 0.38408640027 0.525030732155 -66 0.388613373041 0.518463850021 -65 0.422043204308 0.518463850021 -SURF 0x30 -mat 2 -refs 4 -67 0.359373480082 0.822860062122 -66 0.359373480082 0.822860062122 -75 0.359373480082 0.822860062122 -76 0.359373480082 0.822860062122 -SURF 0x30 -mat 2 -refs 4 -80 0.358979851007 0.775249123573 -81 0.358979851007 0.775249123573 -66 0.358979851007 0.775249123573 -67 0.358979851007 0.775249123573 -SURF 0x30 -mat 2 -refs 4 -65 0.419953852892 0.525116026402 -66 0.38408640027 0.525030732155 -81 0.388613373041 0.518463850021 -82 0.422043204308 0.518463850021 -SURF 0x30 -mat 2 -refs 4 -83 0.46711575985 0.771030068398 -80 0.405638307333 0.772020041943 -67 0.412061452866 0.80841088295 -64 0.44927740097 0.809792399406 -SURF 0x30 -mat 2 -refs 4 -63 0.437887579203 0.525158703327 -65 0.419953852892 0.525116026402 -82 0.422043204308 0.518463850021 -84 0.438758164644 0.518463850021 -SURF 0x30 -mat 2 -refs 4 -68 0.455821305513 0.525201380253 -63 0.437887579203 0.525158703327 -84 0.438758164644 0.518463850021 -79 0.455473095179 0.518463850021 -SURF 0x30 -mat 2 -refs 4 -85 0.559492111206 0.769924759865 -83 0.46711575985 0.771030068398 -64 0.44927740097 0.809792399406 -62 0.50633263588 0.808652341366 -SURF 0x30 -mat 2 -refs 4 -78 0.600605428219 0.772481143475 -85 0.559492111206 0.769924759865 -62 0.50633263588 0.808652341366 -69 0.537756383419 0.808732867241 -SURF 0x30 -mat 2 -refs 4 -93 0.586089074612 0.736006617546 -86 0.556751310825 0.735775589943 -85 0.554466068745 0.767661690712 -78 0.586583197117 0.767892718315 -SURF 0x30 -mat 2 -refs 4 -86 0.556751310825 0.735775589943 -88 0.527413547039 0.73554456234 -83 0.522348940372 0.767430663109 -85 0.554466068745 0.767661690712 -SURF 0x30 -mat 2 -refs 4 -94 0.559036552906 0.703889489174 -96 0.532478153706 0.703658461571 -88 0.527413547039 0.73554456234 -86 0.556751310825 0.735775589943 -SURF 0x30 -mat 2 -refs 4 -79 0.622497081757 0.375451922417 -84 0.561248540878 0.374895095825 -87 0.564221799374 0.314203381538 -92 0.621307790279 0.314203381538 -SURF 0x30 -mat 2 -refs 4 -87 0.564221799374 0.314203381538 -89 0.507135748863 0.314203381538 -97 0.514271497726 0.254068434238 -95 0.567195057869 0.253511667252 -SURF 0x30 -mat 2 -refs 4 -84 0.561248540878 0.374895095825 -82 0.5 0.374338269234 -89 0.507135748863 0.314203381538 -87 0.564221799374 0.314203381538 -SURF 0x30 -mat 2 -refs 4 -88 0.527413547039 0.73554456234 -91 0.468738019466 0.735082447529 -80 0.458114653826 0.766968548298 -83 0.522348940372 0.767430663109 -SURF 0x30 -mat 2 -refs 4 -96 0.532478153706 0.703658461571 -99 0.479361355305 0.70319634676 -91 0.468738019466 0.735082447529 -88 0.527413547039 0.73554456234 -SURF 0x30 -mat 2 -refs 4 -89 0.507135748863 0.314203381538 -90 0.392963767052 0.314203321934 -98 0.408424496651 0.255182027817 -97 0.514271497726 0.254068434238 -SURF 0x30 -mat 2 -refs 4 -82 0.5 0.374338269234 -81 0.377502918243 0.373224675655 -90 0.392963767052 0.314203321934 -89 0.507135748863 0.314203381538 -SURF 0x30 -mat 2 -refs 4 -91 0.458114653826 0.639424204826 -90 0.458114653826 0.639424204826 -81 0.458114653826 0.639424204826 -80 0.458114653826 0.639424204826 -SURF 0x30 -mat 2 -refs 4 -99 0.458114653826 0.639424204826 -110 0.458114653826 0.639424204826 -90 0.458114653826 0.639424204826 -91 0.458114653826 0.639424204826 -SURF 0x30 -mat 2 -refs 4 -108 0.584606766701 0.640348434448 -103 0.563607037067 0.64011734724 -94 0.559036552906 0.703889489174 -101 0.585594952106 0.704120576382 -SURF 0x30 -mat 2 -refs 4 -103 0.563607037067 0.64011734724 -105 0.542607367039 0.639886260033 -96 0.532478153706 0.703658461571 -94 0.559036552906 0.703889489174 -SURF 0x30 -mat 2 -refs 4 -100 0.620118558407 0.25295484066 -95 0.567195057869 0.253511667252 -102 0.573141515255 0.132128179073 -107 0.617740035057 0.130457758904 -SURF 0x30 -mat 2 -refs 4 -95 0.567195057869 0.253511667252 -97 0.514271497726 0.254068434238 -104 0.528543055058 0.133798599243 -102 0.573141515255 0.132128179073 -SURF 0x30 -mat 2 -refs 4 -99 0.479361355305 0.70319634676 -96 0.532478153706 0.703658461571 -105 0.542607367039 0.639886260033 -109 0.500608086586 0.639424204826 -SURF 0x30 -mat 2 -refs 4 -97 0.514271497726 0.254068434238 -98 0.408424496651 0.255182027817 -106 0.439346075058 0.137139439583 -104 0.528543055058 0.133798599243 -SURF 0x30 -mat 2 -refs 4 -109 0.399851858616 0.632653355598 -106 0.399851858616 0.632653355598 -110 0.399851858616 0.632653355598 -99 0.399851858616 0.632653355598 -SURF 0x30 -mat 2 -refs 4 -103 0.399851858616 0.632653355598 -102 0.399851858616 0.632653355598 -104 0.399851858616 0.632653355598 -105 0.399851858616 0.632653355598 -SURF 0x30 -mat 2 -refs 4 -108 0.399851858616 0.632653355598 -107 0.399851858616 0.632653355598 -102 0.399851858616 0.632653355598 -103 0.399851858616 0.632653355598 -SURF 0x30 -mat 2 -refs 4 -105 0.399851858616 0.632653355598 -104 0.399851858616 0.632653355598 -106 0.399851858616 0.632653355598 -109 0.399851858616 0.632653355598 -kids 0 -OBJECT poly -name "horzstab" -data 8 -Mesh.005 -texture "//DSC01758.rgb" -texrep 1 1 -crease 45.000000 -numvert 9 --0.130157 0.035188 -0.165385 -0.056747 0.048284 -0.165385 -0.056748 0.047968 0.16319 --0.130232 0.034365 0.16319 -0.056747 0.035473 -0.001098 --0.130195 0.039586 -0.001098 -0.024135 0.054261 -0.165385 -0.024101 0.054395 0.16319 --0.031115 0.052716 -0.001098 -numsurf 4 -SURF 0x30 -mat 2 -refs 4 -4 0.528291463852 0.761986076832 -8 0.51858150959 0.76190161705 -7 0.519941926003 0.773422718048 -2 0.52847212553 0.77364385128 -SURF 0x30 -mat 2 -refs 4 -8 0.51858150959 0.76190161705 -5 0.508871614933 0.761817157269 -3 0.51141166687 0.773201584816 -7 0.519941926003 0.773422718048 -SURF 0x30 -mat 2 -refs 4 -6 0.520433187485 0.750243842602 -0 0.512755572796 0.75015938282 -5 0.508871614933 0.761817157269 -8 0.51858150959 0.76190161705 -SURF 0x30 -mat 2 -refs 4 -8 0.51858150959 0.76190161705 -4 0.528291463852 0.761986076832 -1 0.528110802174 0.750328302383 -6 0.520433187485 0.750243842602 -kids 0 +AC3Db +MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0 +MATERIAL "ac3dmat0" rgb 0 0 0 amb 0.2 0.2 0.2 emis 0 0 0 spec 0.2 0.2 0.2 shi 16 trans 0 +MATERIAL "ac3dmat1" rgb 1 1 1 amb 0.2 0.2 0.2 emis 0 0 0 spec 0.2 0.2 0.2 shi 16 trans 0 +OBJECT world +kids 10 +OBJECT poly +name "elevator.002" +data 8 +Mesh.007 +crease 45.000000 +numvert 16 +0.347071 0.070181 -0.798229 +0.358572 0.068152 -0.798229 +0.35857 0.074784 -0.874594 +0.347071 0.076781 -0.874594 +0.327247 0.077067 -0.874727 +0.378451 0.075071 -0.874602 +0.37852 0.068468 -0.798331 +0.327249 0.07047 -0.798206 +0.36769 0.077071 0.922783 +0.41896 0.075069 0.922658 +0.418891 0.06847 0.846387 +0.367688 0.070467 0.846262 +0.387511 0.070181 0.846395 +0.399011 0.068183 0.846395 +0.399013 0.074752 0.92276 +0.387511 0.076781 0.92276 +numsurf 10 +SURF 0x30 +mat 1 +refs 4 +3 0.0 1.0 +0 0.0 0.0434782989323 +1 1.0 0.0 +2 0.980769991875 1.0 +SURF 0x30 +mat 1 +refs 4 +7 0.0 0.0 +0 0.0 0.0 +3 0.0 0.0 +4 0.0 0.0 +SURF 0x30 +mat 1 +refs 4 +0 0.0 0.0 +7 0.0 0.0 +6 0.0 0.0 +1 0.0 0.0 +SURF 0x30 +mat 1 +refs 4 +5 0.0 0.0 +2 0.0 0.0 +1 0.0 0.0 +6 0.0 0.0 +SURF 0x30 +mat 1 +refs 4 +4 0.0 0.0 +3 0.0 0.0 +2 0.0 0.0 +5 0.0 0.0 +SURF 0x30 +mat 1 +refs 4 +11 0.0 0.0 +12 0.0 0.0 +13 0.0 0.0 +10 0.0 0.0 +SURF 0x30 +mat 1 +refs 4 +10 0.0 0.0 +13 0.0 0.0 +14 0.0 0.0 +9 0.0 0.0 +SURF 0x30 +mat 1 +refs 4 +15 0.0 0.0 +8 0.0 0.0 +9 0.0 0.0 +14 0.0 0.0 +SURF 0x30 +mat 1 +refs 4 +8 0.0 0.0 +15 0.0 0.0 +12 0.0 0.0 +11 0.0 0.0 +SURF 0x30 +mat 1 +refs 4 +12 0.0 1.0 +15 0.0 0.0434782989323 +14 1.0 0.0 +13 0.980769991875 1.0 +kids 0 +OBJECT poly +name "strut" +data 8 +Mesh.012 +crease 45.000000 +numvert 76 +0.560943 0.047946 0.86931 +0.560133 0.048086 0.869093 +0.55999 0.048179 0.86835 +0.560659 0.048131 0.867826 +0.561611 0.047897 0.868785 +0.561469 0.047989 0.868042 +0.561581 0.053113 0.869846 +0.560784 0.052492 0.869392 +0.56061 0.052599 0.868659 +0.561237 0.053327 0.86838 +0.562226 0.05384 0.869567 +0.562055 0.053946 0.868833 +0.394243 0.073744 0.912046 +0.394042 0.07305 0.911597 +0.393871 0.073156 0.910864 +0.393898 0.073958 0.910579 +0.394098 0.074652 0.911028 +0.39427 0.074546 0.911762 +0.39997 0.073025 0.910591 +0.399768 0.07233 0.910142 +0.399596 0.072437 0.909408 +0.399623 0.073239 0.909123 +0.399824 0.073933 0.909572 +0.399996 0.073826 0.910306 +0.483779 0.06236 0.89022 +0.48358 0.061666 0.889771 +0.483406 0.061773 0.889037 +0.483435 0.062574 0.888753 +0.483634 0.063269 0.889203 +0.483808 0.063162 0.889935 +0.486658 0.062139 0.889516 +0.486458 0.061444 0.889067 +0.486285 0.061551 0.888334 +0.486313 0.062352 0.88805 +0.486513 0.063047 0.888499 +0.486687 0.06294 0.889231 +0.394071 0.073851 0.911313 +0.560801 0.048038 0.868567 +0.526582 0.048038 -0.806734 +0.36246 0.073851 -0.858598 +0.452748 0.06294 -0.828377 +0.452988 0.063047 -0.82909 +0.453056 0.062352 -0.829577 +0.452882 0.061551 -0.82935 +0.452641 0.061444 -0.828637 +0.452573 0.062139 -0.82815 +0.449932 0.063162 -0.829301 +0.450172 0.063269 -0.830015 +0.45024 0.062574 -0.830502 +0.450066 0.061773 -0.830276 +0.449826 0.061666 -0.829561 +0.449758 0.06236 -0.829074 +0.368022 0.073826 -0.85632 +0.368264 0.073933 -0.857034 +0.36833 0.073239 -0.857521 +0.368157 0.072437 -0.857294 +0.367915 0.07233 -0.85658 +0.367848 0.073025 -0.856093 +0.362392 0.074546 -0.858111 +0.362634 0.074652 -0.858825 +0.3627 0.073958 -0.859312 +0.362527 0.073156 -0.859085 +0.362286 0.073049 -0.858372 +0.362219 0.073744 -0.857885 +0.527506 0.053946 -0.805845 +0.527264 0.05384 -0.805132 +0.527052 0.053327 -0.806662 +0.526371 0.052599 -0.806756 +0.526132 0.052492 -0.806042 +0.526568 0.053113 -0.805236 +0.527427 0.047989 -0.806826 +0.527154 0.047897 -0.806121 +0.526854 0.048131 -0.807438 +0.526009 0.048179 -0.807347 +0.525737 0.048086 -0.806641 +0.526311 0.047946 -0.806028 +numsurf 84 +SURF 0x10 +mat 1 +refs 3 +4 0.0 0.0 +0 0.0 0.0 +37 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +37 0.0 0.0 +0 0.0 0.0 +1 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +37 0.0 0.0 +1 0.0 0.0 +2 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +37 0.0 0.0 +2 0.0 0.0 +3 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +37 0.0 0.0 +3 0.0 0.0 +5 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +37 0.0 0.0 +5 0.0 0.0 +4 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +0 0.0 0.0 +4 0.0 0.0 +10 0.0 0.0 +6 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +1 0.0 0.0 +0 0.0 0.0 +6 0.0 0.0 +7 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +7 0.0 0.0 +8 0.0 0.0 +2 0.0 0.0 +1 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +8 0.0 0.0 +9 0.0 0.0 +3 0.0 0.0 +2 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +9 0.0 0.0 +11 0.0 0.0 +5 0.0 0.0 +3 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +11 0.0 0.0 +10 0.0 0.0 +4 0.0 0.0 +5 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +35 0.0 0.0 +30 0.0 0.0 +6 0.0 0.0 +10 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +30 0.0 0.0 +31 0.0 0.0 +7 0.0 0.0 +6 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +31 0.0 0.0 +32 0.0 0.0 +8 0.0 0.0 +7 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +32 0.0 0.0 +33 0.0 0.0 +9 0.0 0.0 +8 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +33 0.0 0.0 +34 0.0 0.0 +11 0.0 0.0 +9 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +34 0.0 0.0 +35 0.0 0.0 +10 0.0 0.0 +11 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +36 0.0 0.0 +12 0.0 0.0 +17 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +36 0.0 0.0 +13 0.0 0.0 +12 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +36 0.0 0.0 +14 0.0 0.0 +13 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +36 0.0 0.0 +15 0.0 0.0 +14 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +36 0.0 0.0 +16 0.0 0.0 +15 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +36 0.0 0.0 +17 0.0 0.0 +16 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +18 0.0 0.0 +23 0.0 0.0 +17 0.0 0.0 +12 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +19 0.0 0.0 +18 0.0 0.0 +12 0.0 0.0 +13 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +20 0.0 0.0 +19 0.0 0.0 +13 0.0 0.0 +14 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +21 0.0 0.0 +20 0.0 0.0 +14 0.0 0.0 +15 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +22 0.0 0.0 +21 0.0 0.0 +15 0.0 0.0 +16 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +23 0.0 0.0 +22 0.0 0.0 +16 0.0 0.0 +17 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +24 0.0 0.0 +29 0.0 0.0 +23 0.0 0.0 +18 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +25 0.0 0.0 +24 0.0 0.0 +18 0.0 0.0 +19 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +26 0.0 0.0 +25 0.0 0.0 +19 0.0 0.0 +20 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +27 0.0 0.0 +26 0.0 0.0 +20 0.0 0.0 +21 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +28 0.0 0.0 +27 0.0 0.0 +21 0.0 0.0 +22 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +29 0.0 0.0 +28 0.0 0.0 +22 0.0 0.0 +23 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +35 -2.98022992951e-008 1.0 +29 -2.98022992951e-008 0.0 +24 0.166666999459 0.0 +30 0.166666999459 1.0 +SURF 0x10 +mat 1 +refs 4 +30 0.166666999459 1.0 +24 0.166666999459 0.0 +25 0.33333298564 0.0 +31 0.33333298564 1.0 +SURF 0x10 +mat 1 +refs 4 +31 0.33333298564 1.0 +25 0.33333298564 0.0 +26 0.5 0.0 +32 0.5 1.0 +SURF 0x10 +mat 1 +refs 4 +32 0.5 1.0 +26 0.5 0.0 +27 0.666666984558 0.0 +33 0.666666984558 1.0 +SURF 0x10 +mat 1 +refs 4 +33 0.666666984558 1.0 +27 0.666666984558 0.0 +28 0.833333015442 0.0 +34 0.833333015442 1.0 +SURF 0x10 +mat 1 +refs 4 +34 0.833333015442 1.0 +28 0.833333015442 0.0 +29 1.0 0.0 +35 1.0 1.0 +SURF 0x10 +mat 1 +refs 4 +41 0.833333015442 1.0 +47 0.833333015442 0.0 +46 1.0 0.0 +40 1.0 1.0 +SURF 0x10 +mat 1 +refs 4 +42 0.666666984558 1.0 +48 0.666666984558 0.0 +47 0.833333015442 0.0 +41 0.833333015442 1.0 +SURF 0x10 +mat 1 +refs 4 +43 0.5 1.0 +49 0.5 0.0 +48 0.666666984558 0.0 +42 0.666666984558 1.0 +SURF 0x10 +mat 1 +refs 4 +44 0.33333298564 1.0 +50 0.33333298564 0.0 +49 0.5 0.0 +43 0.5 1.0 +SURF 0x10 +mat 1 +refs 4 +45 0.166666999459 1.0 +51 0.166666999459 0.0 +50 0.33333298564 0.0 +44 0.33333298564 1.0 +SURF 0x10 +mat 1 +refs 4 +40 -2.98022992951e-008 1.0 +46 -2.98022992951e-008 0.0 +51 0.166666999459 0.0 +45 0.166666999459 1.0 +SURF 0x10 +mat 1 +refs 4 +46 0.0 0.0 +47 0.0 0.0 +53 0.0 0.0 +52 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +47 0.0 0.0 +48 0.0 0.0 +54 0.0 0.0 +53 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +48 0.0 0.0 +49 0.0 0.0 +55 0.0 0.0 +54 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +49 0.0 0.0 +50 0.0 0.0 +56 0.0 0.0 +55 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +50 0.0 0.0 +51 0.0 0.0 +57 0.0 0.0 +56 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +51 0.0 0.0 +46 0.0 0.0 +52 0.0 0.0 +57 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +52 0.0 0.0 +53 0.0 0.0 +59 0.0 0.0 +58 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +53 0.0 0.0 +54 0.0 0.0 +60 0.0 0.0 +59 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +54 0.0 0.0 +55 0.0 0.0 +61 0.0 0.0 +60 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +55 0.0 0.0 +56 0.0 0.0 +62 0.0 0.0 +61 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +56 0.0 0.0 +57 0.0 0.0 +63 0.0 0.0 +62 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +57 0.0 0.0 +52 0.0 0.0 +58 0.0 0.0 +63 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +39 0.0 0.0 +58 0.0 0.0 +59 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +39 0.0 0.0 +59 0.0 0.0 +60 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +39 0.0 0.0 +60 0.0 0.0 +61 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +39 0.0 0.0 +61 0.0 0.0 +62 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +39 0.0 0.0 +62 0.0 0.0 +63 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +39 0.0 0.0 +63 0.0 0.0 +58 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +41 0.0 0.0 +40 0.0 0.0 +65 0.0 0.0 +64 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +42 0.0 0.0 +41 0.0 0.0 +64 0.0 0.0 +66 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +43 0.0 0.0 +42 0.0 0.0 +66 0.0 0.0 +67 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +44 0.0 0.0 +43 0.0 0.0 +67 0.0 0.0 +68 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +45 0.0 0.0 +44 0.0 0.0 +68 0.0 0.0 +69 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +40 0.0 0.0 +45 0.0 0.0 +69 0.0 0.0 +65 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +64 0.0 0.0 +65 0.0 0.0 +71 0.0 0.0 +70 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +66 0.0 0.0 +64 0.0 0.0 +70 0.0 0.0 +72 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +67 0.0 0.0 +66 0.0 0.0 +72 0.0 0.0 +73 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +68 0.0 0.0 +67 0.0 0.0 +73 0.0 0.0 +74 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +74 0.0 0.0 +75 0.0 0.0 +69 0.0 0.0 +68 0.0 0.0 +SURF 0x10 +mat 1 +refs 4 +75 0.0 0.0 +71 0.0 0.0 +65 0.0 0.0 +69 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +38 0.0 0.0 +70 0.0 0.0 +71 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +38 0.0 0.0 +72 0.0 0.0 +70 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +38 0.0 0.0 +73 0.0 0.0 +72 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +38 0.0 0.0 +74 0.0 0.0 +73 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +38 0.0 0.0 +75 0.0 0.0 +74 0.0 0.0 +SURF 0x10 +mat 1 +refs 3 +71 0.0 0.0 +75 0.0 0.0 +38 0.0 0.0 +kids 0 +OBJECT poly +name "lhelevon" +data 8 +Mesh.034 +texture "//DSC01758.rgb" +texrep 1 1 +crease 45.000000 +numvert 13 +0.599074 0.014895 -0.531554 +0.888591 0.119852 2.243279 +0.88656 0.113006 2.242792 +0.599074 0.014895 0.530098 +0.59518 0.008608 0.527454 +0.463361 0.035624 0.529998 +0.460279 0.012334 0.527711 +0.59518 0.008608 0.527454 +0.599074 0.014895 0.530098 +0.830417 0.12606 2.243226 +0.828674 0.113886 2.242929 +0.88656 0.113006 2.242792 +0.888591 0.119852 2.243279 +numsurf 3 +SURF 0x30 +mat 2 +refs 4 +3 0.389142990112 0.68247282505 +1 0.389142990112 0.68247282505 +2 0.389142990112 0.68247282505 +4 0.389142990112 0.68247282505 +SURF 0x30 +mat 2 +refs 4 +12 0.632252514362 0.754359185696 +8 0.633194804192 0.815167069435 +5 0.577246665955 0.814726471901 +9 0.581604659557 0.753918588161 +SURF 0x30 +mat 2 +refs 4 +7 0.621307790279 0.314203381538 +11 0.620118558407 0.25295484066 +10 0.567195057869 0.253511667252 +6 0.564221799374 0.314203381538 +kids 0 +OBJECT poly +name "vertfin.001" +data 8 +Mesh.030 +texture "//DSC01758.rgb" +texrep 1 1 +crease 45.000000 +numvert 40 +0.898813 0.127446 2.305112 +0.991374 0.444008 2.310203 +0.898925 0.444261 2.309624 +0.894502 0.444221 2.309629 +0.891408 0.443818 2.309534 +0.887714 0.441718 2.309106 +0.885246 0.439368 2.308627 +0.647729 0.11492 2.308054 +0.647636 0.115487 2.307015 +0.885226 0.439496 2.308345 +0.887694 0.441835 2.308817 +0.891387 0.443935 2.309244 +0.894483 0.444362 2.309331 +0.898906 0.444396 2.309338 +0.991278 0.444693 2.308753 +0.898719 0.128013 2.304073 +0.675529 0.109794 2.307774 +0.88548 0.439591 2.308672 +0.675436 0.110361 2.306736 +0.885461 0.439718 2.308389 +0.885461 0.439718 -2.305973 +0.675436 0.110361 -2.304319 +0.88548 0.439591 -2.306256 +0.675529 0.109794 -2.305357 +0.898719 0.128013 -2.301657 +0.991278 0.444693 -2.306336 +0.898906 0.444396 -2.306921 +0.894483 0.444362 -2.306914 +0.891387 0.443935 -2.306828 +0.887694 0.441835 -2.3064 +0.885226 0.439496 -2.305928 +0.647636 0.115487 -2.304599 +0.647729 0.11492 -2.305637 +0.885246 0.439368 -2.306211 +0.887714 0.441718 -2.306689 +0.891408 0.443818 -2.307117 +0.894502 0.444221 -2.307213 +0.898925 0.444261 -2.307207 +0.991374 0.444008 -2.307786 +0.898813 0.127446 -2.302695 +numsurf 28 +SURF 0x30 +mat 2 +refs 4 +0 0.497161775827 0.756072878838 +1 0.497380167246 0.787407398224 +2 0.485913664103 0.787407398224 +3 0.483402043581 0.78682166338 +SURF 0x30 +mat 2 +refs 4 +0 0.497161775827 0.756072878838 +3 0.483402043581 0.78682166338 +4 0.481654673815 0.786089539528 +5 0.480235010386 0.785211026669 +SURF 0x30 +mat 2 +refs 4 +1 0.464727908373 0.754755079746 +0 0.464727908373 0.754755079746 +15 0.464727908373 0.754755079746 +14 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +2 0.464727908373 0.754755079746 +1 0.464727908373 0.754755079746 +14 0.464727908373 0.754755079746 +13 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +3 0.464727908373 0.754755079746 +2 0.464727908373 0.754755079746 +13 0.464727908373 0.754755079746 +12 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +4 0.464727908373 0.754755079746 +3 0.464727908373 0.754755079746 +12 0.464727908373 0.754755079746 +11 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +5 0.464727908373 0.754755079746 +4 0.464727908373 0.754755079746 +11 0.464727908373 0.754755079746 +10 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +7 0.464727908373 0.754755079746 +6 0.464727908373 0.754755079746 +9 0.464727908373 0.754755079746 +8 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +16 0.480944782495 0.75541394949 +0 0.497161775827 0.756072878838 +5 0.480235010386 0.785211026669 +17 0.479525238276 0.784552156925 +SURF 0x30 +mat 2 +refs 4 +17 0.479525238276 0.784552156925 +6 0.478815346956 0.783893227577 +7 0.464727908373 0.754755079746 +16 0.480944782495 0.75541394949 +SURF 0x30 +mat 2 +refs 4 +0 0.464727908373 0.754755079746 +16 0.464727908373 0.754755079746 +18 0.464727908373 0.754755079746 +15 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +16 0.464727908373 0.754755079746 +7 0.464727908373 0.754755079746 +8 0.464727908373 0.754755079746 +18 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +6 0.464727908373 0.754755079746 +17 0.464727908373 0.754755079746 +19 0.464727908373 0.754755079746 +9 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +17 0.464727908373 0.754755079746 +5 0.464727908373 0.754755079746 +10 0.464727908373 0.754755079746 +19 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +22 0.464727908373 0.754755079746 +20 0.464727908373 0.754755079746 +29 0.464727908373 0.754755079746 +34 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +33 0.464727908373 0.754755079746 +30 0.464727908373 0.754755079746 +20 0.464727908373 0.754755079746 +22 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +23 0.464727908373 0.754755079746 +21 0.464727908373 0.754755079746 +31 0.464727908373 0.754755079746 +32 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +39 0.464727908373 0.754755079746 +24 0.464727908373 0.754755079746 +21 0.464727908373 0.754755079746 +23 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +22 0.479525238276 0.784552156925 +23 0.480944782495 0.75541394949 +32 0.464727908373 0.754755079746 +33 0.478815346956 0.783893227577 +SURF 0x30 +mat 2 +refs 4 +23 0.480944782495 0.75541394949 +22 0.479525238276 0.784552156925 +34 0.480235010386 0.785211026669 +39 0.497161775827 0.756072878838 +SURF 0x30 +mat 2 +refs 4 +32 0.464727908373 0.754755079746 +31 0.464727908373 0.754755079746 +30 0.464727908373 0.754755079746 +33 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +34 0.464727908373 0.754755079746 +29 0.464727908373 0.754755079746 +28 0.464727908373 0.754755079746 +35 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +35 0.464727908373 0.754755079746 +28 0.464727908373 0.754755079746 +27 0.464727908373 0.754755079746 +36 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +36 0.464727908373 0.754755079746 +27 0.464727908373 0.754755079746 +26 0.464727908373 0.754755079746 +37 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +37 0.464727908373 0.754755079746 +26 0.464727908373 0.754755079746 +25 0.464727908373 0.754755079746 +38 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +38 0.464727908373 0.754755079746 +25 0.464727908373 0.754755079746 +24 0.464727908373 0.754755079746 +39 0.464727908373 0.754755079746 +SURF 0x30 +mat 2 +refs 4 +39 0.497161775827 0.756072878838 +34 0.480235010386 0.785211026669 +35 0.481654673815 0.786089539528 +36 0.483402043581 0.78682166338 +SURF 0x30 +mat 2 +refs 4 +39 0.497161775827 0.756072878838 +36 0.483402043581 0.78682166338 +37 0.485913664103 0.787407398224 +38 0.497380167246 0.787407398224 +kids 0 +OBJECT poly +name "rhelevon" +data 8 +Mesh.035 +texture "//DSC01758.rgb" +texrep 1 1 +crease 45.000000 +numvert 12 +0.888591 0.119852 -2.244735 +0.88656 0.113006 -2.244248 +0.828674 0.113886 -2.244385 +0.830417 0.12606 -2.244682 +0.599074 0.014895 -0.531554 +0.59518 0.008608 -0.52891 +0.460279 0.012334 -0.529167 +0.463361 0.035624 -0.531454 +0.59518 0.008608 -0.52891 +0.599074 0.014895 -0.531554 +0.88656 0.113006 -2.244248 +0.888591 0.119852 -2.244735 +numsurf 3 +SURF 0x30 +mat 2 +refs 4 +5 0.621307790279 0.314203381538 +6 0.564221799374 0.314203381538 +2 0.567195057869 0.253511667252 +1 0.620118558407 0.25295484066 +SURF 0x30 +mat 2 +refs 4 +0 0.626432478428 0.748539149761 +3 0.575784623623 0.748098552227 +7 0.57142663002 0.808906435966 +4 0.627374768257 0.809347033501 +SURF 0x30 +mat 2 +refs 4 +9 0.383322954178 0.676652789116 +8 0.383322954178 0.676652789116 +10 0.383322954178 0.676652789116 +11 0.383322954178 0.676652789116 +kids 0 +OBJECT poly +name "prop2" +data 4 +Mesh +crease 45.000000 +numvert 176 +0.447799 0.015737 0.014021 +0.447791 0.026166 0.013519 +0.447803 0.023866 0.012121 +0.447808 0.034227 0.009612 +0.447801 0.029706 0.007026 +0.447784 0.034036 0.012987 +0.447826 0.037484 0.010513 +0.447789 0.040879 0.012291 +0.447813 0.042939 0.011062 +0.447788 0.049869 0.01214 +0.417741 0.015746 -0.013894 +0.417741 0.023797 -0.012044 +0.417759 0.029418 -0.011997 +0.417778 0.029788 -0.006896 +0.417814 0.034121 -0.008562 +0.417826 0.038109 -0.009619 +0.417779 0.037623 -0.011067 +0.417783 0.042948 -0.010342 +0.41785 0.042614 -0.011096 +0.417655 0.049921 -0.011491 +0.425336 0.049942 -0.003771 +0.424017 0.043533 -0.006159 +0.422736 0.038074 -0.007723 +0.420323 0.023848 -0.012073 +0.421212 0.032839 -0.009584 +0.43308 0.04989 0.002823 +0.432446 0.043943 0.000817 +0.431587 0.038313 -0.001342 +0.430094 0.029725 -0.006943 +0.430827 0.03504 -0.003668 +0.440134 0.049923 0.00857 +0.439411 0.043477 0.006413 +0.438831 0.038482 0.004943 +0.43831 0.03193 -0.000214 +0.438492 0.035413 0.002871 +0.436633 0.030372 0.011437 +0.434509 0.023824 0.012175 +0.438416 0.035954 0.010635 +0.439603 0.042038 0.009501 +0.440007 0.04994 0.009108 +0.428927 0.033369 0.006113 +0.426723 0.029736 0.007 +0.430569 0.037726 0.005025 +0.431762 0.043084 0.003688 +0.432435 0.049899 0.003452 +0.422416 0.035259 -0.000989 +0.420715 0.031983 -0.000142 +0.423534 0.038425 -0.001748 +0.424339 0.04294 -0.002563 +0.424656 0.049918 -0.002944 +0.437706 0.17413 0.00581 +0.433209 0.174132 0.002869 +0.428304 0.174135 -0.00055 +0.423286 0.174138 -0.004615 +0.427943 0.174135 -4.1e-005 +0.432878 0.174133 0.003245 +0.437513 0.17413 0.006045 +0.442404 0.174128 0.007403 +0.440149 0.092185 0.009205 +0.433096 0.092189 0.003454 +0.42544 0.092193 -0.003172 +0.417708 0.092197 -0.010907 +0.424742 0.092193 -0.002379 +0.432472 0.092189 0.00403 +0.439782 0.092185 0.009565 +0.447781 0.092181 0.01272 +0.447774 0.049898 0.012115 +0.439767 0.049941 0.009035 +0.417723 0.049925 -0.01154 +0.417672 0.015689 0.014013 +0.440023 -0.018481 -0.00844 +0.432969 -0.018441 -0.002692 +0.425225 -0.018485 0.003901 +0.417612 -0.01846 0.01167 +0.424545 -0.01846 0.003074 +0.432324 -0.018449 -0.003322 +0.439656 -0.018499 -0.008905 +0.447663 -0.018464 -0.011985 +0.447626 -0.060747 -0.012589 +0.439627 -0.060743 -0.009434 +0.432317 -0.060739 -0.003899 +0.424587 -0.060735 0.002509 +0.417552 -0.060732 0.011038 +0.425285 -0.060736 0.003302 +0.432941 -0.06074 -0.003324 +0.439994 -0.060743 -0.009075 +0.442164 -0.142688 -0.007273 +0.437272 -0.142686 -0.005914 +0.432638 -0.142683 -0.003114 +0.427702 -0.142681 0.000172 +0.423045 -0.142678 0.004746 +0.428064 -0.142681 0.000681 +0.432968 -0.142683 -0.002738 +0.437466 -0.142686 -0.00568 +0.417679 -0.011482 0.010472 +0.417544 -0.018455 0.011622 +0.417727 -0.006644 0.009749 +0.417688 0.001677 0.007026 +0.41772 -0.002656 0.008692 +0.424235 -0.011482 0.002693 +0.423436 -0.006966 0.001878 +0.420623 -0.000521 0.000273 +0.422321 -0.003798 0.001119 +0.431658 -0.011634 -0.003557 +0.43047 -0.006275 -0.004895 +0.426633 0.00172 -0.00687 +0.428833 -0.001916 -0.005982 +0.439896 -0.018498 -0.008977 +0.447677 -0.018436 -0.012009 +0.4395 -0.010596 -0.00937 +0.447688 -0.009445 -0.012161 +0.43832 -0.004511 -0.010504 +0.44769 -0.002602 -0.012857 +0.434425 0.007624 -0.012045 +0.436542 0.001074 -0.011307 +0.447705 0.005268 -0.013389 +0.447724 0.015675 -0.0139 +0.447708 0.001688 -0.006901 +0.447714 -0.002793 -0.009482 +0.438396 -0.003969 -0.002741 +0.438218 -0.000486 0.000344 +0.447728 -0.006051 -0.010383 +0.438732 -0.007038 -0.004812 +0.447709 -0.011505 -0.010932 +0.439307 -0.012034 -0.006283 +0.430732 -0.003588 0.003798 +0.430004 0.001727 0.007073 +0.431488 -0.006862 0.001472 +0.432341 -0.012493 -0.000687 +0.421119 -0.001378 0.009714 +0.420239 0.007614 0.012203 +0.422638 -0.006614 0.007853 +0.423913 -0.012074 0.006289 +0.417669 0.002047 0.012127 +0.417681 -0.006158 0.011197 +0.417747 -0.011149 0.011226 +0.417661 0.007642 0.012173 +0.447719 0.007568 -0.011991 +0.478542 0.015674 8.3e-005 +0.386162 0.015687 8.8e-005 +0.479197 0.014909 8.3e-005 +0.479198 0.015012 0.000414 +0.479198 0.015292 0.000657 +0.479197 0.015677 0.000744 +0.479198 0.016059 0.000657 +0.4792 0.016336 0.000414 +0.4792 0.016439 8.3e-005 +0.4792 0.016336 -0.000248 +0.479199 0.016056 -0.00049 +0.479199 0.015674 -0.00058 +0.479198 0.01529 -0.00049 +0.479197 0.015011 -0.000248 +0.386136 -0.000429 8.8e-005 +0.386274 0.001677 0.007026 +0.386189 0.007642 0.012173 +0.386222 0.015689 0.014013 +0.386175 0.023745 0.012173 +0.386183 0.029643 0.007065 +0.386188 0.031802 8.8e-005 +0.386203 0.029722 -0.006899 +0.386175 0.023745 -0.011998 +0.386164 0.015752 -0.013894 +0.386148 0.007628 -0.011998 +0.386139 0.00173 -0.00689 +0.44894 -0.00044 8.8e-005 +0.448988 0.001702 0.007053 +0.448966 0.007622 0.012173 +0.448959 0.015717 0.014018 +0.448962 0.023769 0.012172 +0.448988 0.029633 0.007065 +0.448992 0.031792 8.8e-005 +0.448994 0.029658 -0.006893 +0.44898 0.023734 -0.011998 +0.448967 0.0157 -0.013898 +0.448927 0.001701 -0.006897 +0.448953 0.007587 -0.011993 +numsurf 170 +SURF 0x30 +mat 2 +refs 3 +0 0.00431034015492 1.0 +1 1.0 0.731706976891 +2 0.771552026272 0.0 +SURF 0x30 +mat 2 +refs 4 +2 0.0 0.792452991009 +1 0.213018000126 1.0 +3 1.0 0.405660003424 +4 0.556213021278 0.0 +SURF 0x30 +mat 2 +refs 4 +1 0.0 1.0 +5 0.701086997986 0.857142984867 +6 1.0 0.22222200036 +3 0.717391014099 0.0 +SURF 0x30 +mat 2 +refs 4 +5 0.0 1.0 +7 0.783217012882 0.710525989532 +8 1.0 0.184210002422 +6 0.40559399128 0.0 +SURF 0x30 +mat 2 +refs 3 +7 0.0 1.0 +9 1.0 0.833333015442 +8 0.0565370991826 0.0 +SURF 0x30 +mat 2 +refs 3 +10 0.0 0.0 +11 0.588689029217 0.943396985531 +12 1.0 1.0 +SURF 0x30 +mat 2 +refs 4 +11 0.0 0.0 +13 0.577854990959 1.0 +14 1.0 0.6875 +12 0.543253004551 0.0069443997927 +SURF 0x30 +mat 2 +refs 4 +12 0.0 0.0 +14 0.539534986019 1.0 +15 1.0 0.682353019714 +16 0.937209010124 0.264705985785 +SURF 0x30 +mat 2 +refs 4 +15 0.0722893029451 1.0 +17 1.0 0.576924026012 +18 0.927711009979 0.0 +16 0.0 0.076923198998 +SURF 0x30 +mat 2 +refs 3 +17 0.0166666992009 1.0 +19 1.0 0.0 +18 0.0 0.500001013279 +SURF 0x30 +mat 2 +refs 4 +22 0.0 0.0 +21 0.0 0.0 +18 0.0 0.0 +16 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +21 0.0 0.0 +20 0.0 0.0 +19 0.0 0.0 +18 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +24 0.0 0.0 +22 0.0 0.0 +16 0.0 0.0 +12 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +23 0.0 0.0 +24 0.0 0.0 +12 0.0 0.0 +10 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +26 0.0 0.0 +25 0.0 0.0 +20 0.0 0.0 +21 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +27 0.0 0.0 +26 0.0 0.0 +21 0.0 0.0 +22 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +29 0.0 0.0 +27 0.0 0.0 +22 0.0 0.0 +24 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +28 0.0 0.0 +29 0.0 0.0 +24 0.0 0.0 +23 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +31 0.0 0.0 +30 0.0 0.0 +25 0.0 0.0 +26 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +32 0.0 0.0 +31 0.0 0.0 +26 0.0 0.0 +27 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +34 0.0 0.0 +32 0.0 0.0 +27 0.0 0.0 +29 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +33 0.0 0.0 +34 0.0 0.0 +29 0.0 0.0 +28 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +8 0.0 0.0 +9 0.0 0.0 +30 0.0 0.0 +31 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +6 0.0 0.0 +8 0.0 0.0 +31 0.0 0.0 +32 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +3 0.0 0.0 +6 0.0 0.0 +32 0.0 0.0 +34 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +4 0.0 0.0 +3 0.0 0.0 +34 0.0 0.0 +33 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +0 0.0 0.0 +1 0.0 0.0 +35 0.0 0.0 +36 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +1 0.0 0.0 +5 0.0 0.0 +37 0.0 0.0 +35 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +5 0.0 0.0 +7 0.0 0.0 +38 0.0 0.0 +37 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +7 0.0 0.0 +9 0.0 0.0 +39 0.0 0.0 +38 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +36 0.0 0.0 +35 0.0 0.0 +40 0.0 0.0 +41 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +35 0.0 0.0 +37 0.0 0.0 +42 0.0 0.0 +40 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +37 0.0 0.0 +38 0.0 0.0 +43 0.0 0.0 +42 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +38 0.0 0.0 +39 0.0 0.0 +44 0.0 0.0 +43 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +41 0.0 0.0 +40 0.0 0.0 +45 0.0 0.0 +46 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +40 0.0 0.0 +42 0.0 0.0 +47 0.0 0.0 +45 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +42 0.0 0.0 +43 0.0 0.0 +48 0.0 0.0 +47 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +43 0.0 0.0 +44 0.0 0.0 +49 0.0 0.0 +48 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +46 0.0 0.0 +45 0.0 0.0 +14 0.0 0.0 +13 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +45 0.0 0.0 +47 0.0 0.0 +15 0.0 0.0 +14 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +48 0.0 0.0 +49 0.0 0.0 +19 0.0 0.0 +17 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +47 0.0 0.0 +48 0.0 0.0 +17 0.0 0.0 +15 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +57 0.0 1.0 +56 0.217972993851 0.893750011921 +55 0.414914011955 0.75 +54 0.688337028027 0.449999988079 +SURF 0x30 +mat 2 +refs 4 +57 0.0 1.0 +54 0.688337028027 0.449999988079 +53 1.0 0.0 +52 0.674951970577 0.34375 +SURF 0x30 +mat 2 +refs 4 +57 0.0 1.0 +52 0.674951970577 0.34375 +51 0.401529997587 0.668749988079 +50 0.21032500267 0.84375 +SURF 0x30 +mat 2 +refs 4 +58 0.0 0.0 +65 0.0 0.0 +57 0.0 0.0 +50 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +59 0.0 0.0 +58 0.0 0.0 +50 0.0 0.0 +51 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +60 0.0 0.0 +59 0.0 0.0 +51 0.0 0.0 +52 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +61 0.0 0.0 +60 0.0 0.0 +52 0.0 0.0 +53 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +62 0.0 0.0 +61 0.0 0.0 +53 0.0 0.0 +54 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +63 0.0 0.0 +62 0.0 0.0 +54 0.0 0.0 +55 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +64 0.0 0.0 +63 0.0 0.0 +55 0.0 0.0 +56 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +65 0.0 0.0 +64 0.0 0.0 +56 0.0 0.0 +57 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +30 0.0 0.0 +66 0.0 0.0 +65 0.0 0.0 +58 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +25 0.0 0.0 +30 0.0 0.0 +58 0.0 0.0 +59 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +20 0.0 0.0 +25 0.0 0.0 +59 0.0 0.0 +60 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +68 0.0 0.0 +20 0.0 0.0 +60 0.0 0.0 +61 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +49 0.0 0.0 +68 0.0 0.0 +61 0.0 0.0 +62 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +44 0.0 0.0 +49 0.0 0.0 +62 0.0 0.0 +63 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +67 0.0 0.0 +44 0.0 0.0 +63 0.0 0.0 +64 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +66 0.0 0.0 +67 0.0 0.0 +64 0.0 0.0 +65 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +77 0.0 0.0 +76 0.0 0.0 +79 0.0 0.0 +78 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +76 0.0 0.0 +75 0.0 0.0 +80 0.0 0.0 +79 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +75 0.0 0.0 +74 0.0 0.0 +81 0.0 0.0 +80 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +74 0.0 0.0 +73 0.0 0.0 +82 0.0 0.0 +81 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +73 0.0 0.0 +72 0.0 0.0 +83 0.0 0.0 +82 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +72 0.0 0.0 +71 0.0 0.0 +84 0.0 0.0 +83 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +71 0.0 0.0 +70 0.0 0.0 +85 0.0 0.0 +84 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +70 0.0 0.0 +77 0.0 0.0 +78 0.0 0.0 +85 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +78 0.0 0.0 +79 0.0 0.0 +87 0.0 0.0 +86 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +79 0.0 0.0 +80 0.0 0.0 +88 0.0 0.0 +87 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +80 0.0 0.0 +81 0.0 0.0 +89 0.0 0.0 +88 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +81 0.0 0.0 +82 0.0 0.0 +90 0.0 0.0 +89 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +82 0.0 0.0 +83 0.0 0.0 +91 0.0 0.0 +90 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +83 0.0 0.0 +84 0.0 0.0 +92 0.0 0.0 +91 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +84 0.0 0.0 +85 0.0 0.0 +93 0.0 0.0 +92 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +85 0.0 0.0 +78 0.0 0.0 +86 0.0 0.0 +93 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +86 0.0 1.0 +87 0.217972993851 0.893750011921 +88 0.414914011955 0.75 +89 0.688337028027 0.449999988079 +SURF 0x30 +mat 2 +refs 4 +86 0.0 1.0 +89 0.688337028027 0.449999988079 +90 1.0 0.0 +91 0.674951970577 0.34375 +SURF 0x30 +mat 2 +refs 4 +86 0.0 1.0 +91 0.674951970577 0.34375 +92 0.401529997587 0.668749988079 +93 0.21032500267 0.84375 +SURF 0x30 +mat 2 +refs 4 +100 0.0 0.0 +99 0.0 0.0 +94 0.0 0.0 +96 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +99 0.0 0.0 +74 0.0 0.0 +95 0.0 0.0 +94 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +102 0.0 0.0 +100 0.0 0.0 +96 0.0 0.0 +98 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +101 0.0 0.0 +102 0.0 0.0 +98 0.0 0.0 +97 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +103 0.0 0.0 +75 0.0 0.0 +74 0.0 0.0 +99 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +104 0.0 0.0 +103 0.0 0.0 +99 0.0 0.0 +100 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +106 0.0 0.0 +104 0.0 0.0 +100 0.0 0.0 +102 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +105 0.0 0.0 +106 0.0 0.0 +102 0.0 0.0 +101 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +109 0.0 0.0 +107 0.0 0.0 +75 0.0 0.0 +103 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +111 0.0 0.0 +109 0.0 0.0 +103 0.0 0.0 +104 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +114 0.0 0.0 +111 0.0 0.0 +104 0.0 0.0 +106 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +113 0.0 0.0 +114 0.0 0.0 +106 0.0 0.0 +105 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +110 0.0 0.0 +108 0.0 0.0 +107 0.0 0.0 +109 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +112 0.0 0.0 +110 0.0 0.0 +109 0.0 0.0 +111 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +115 0.0 0.0 +112 0.0 0.0 +111 0.0 0.0 +114 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +116 0.0 0.0 +115 0.0 0.0 +114 0.0 0.0 +113 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +117 0.0 0.0 +118 0.0 0.0 +119 0.0 0.0 +120 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +118 0.0 0.0 +121 0.0 0.0 +122 0.0 0.0 +119 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +121 0.0 0.0 +123 0.0 0.0 +124 0.0 0.0 +122 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +123 0.0 0.0 +108 0.0 0.0 +70 0.0 0.0 +124 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +120 0.0 0.0 +119 0.0 0.0 +125 0.0 0.0 +126 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +119 0.0 0.0 +122 0.0 0.0 +127 0.0 0.0 +125 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +122 0.0 0.0 +124 0.0 0.0 +128 0.0 0.0 +127 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +124 0.0 0.0 +70 0.0 0.0 +71 0.0 0.0 +128 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +126 0.0 0.0 +125 0.0 0.0 +129 0.0 0.0 +130 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +125 0.0 0.0 +127 0.0 0.0 +131 0.0 0.0 +129 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +127 0.0 0.0 +128 0.0 0.0 +132 0.0 0.0 +131 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +128 0.0 0.0 +71 0.0 0.0 +72 0.0 0.0 +132 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +130 0.0 0.0 +129 0.0 0.0 +133 0.0 0.0 +69 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +129 0.0 0.0 +131 0.0 0.0 +134 0.0 0.0 +133 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +132 0.0 0.0 +72 0.0 0.0 +95 0.0 0.0 +135 0.0 0.0 +SURF 0x30 +mat 2 +refs 4 +131 0.0 0.0 +132 0.0 0.0 +135 0.0 0.0 +134 0.0 0.0 +SURF 0x30 +mat 2 +refs 3 +94 0.0166666992009 1.0 +95 1.0 0.0 +135 0.0 0.500001013279 +SURF 0x30 +mat 2 +refs 4 +96 0.0722893029451 1.0 +94 1.0 0.576924026012 +135 0.927711009979 0.0 +134 0.0 0.076923198998 +SURF 0x30 +mat 2 +refs 4 +133 0.0 0.0 +98 0.539534986019 1.0 +96 1.0 0.682353019714 +134 0.937209010124 0.264705985785 +SURF 0x30 +mat 2 +refs 4 +136 0.0 0.0 +97 0.577854990959 1.0 +98 1.0 0.6875 +133 0.543253004551 0.0069443997927 +SURF 0x30 +mat 2 +refs 3 +69 0.0 0.0 +136 0.588689029217 0.943396985531 +133 1.0 1.0 +SURF 0x30 +mat 2 +refs 3 +110 0.0 1.0 +108 1.0 0.833333015442 +123 0.0565370991826 0.0 +SURF 0x30 +mat 2 +refs 4 +112 0.0 1.0 +110 0.783217012882 0.710525989532 +123 1.0 0.184210002422 +121 0.40559399128 0.0 +SURF 0x30 +mat 2 +refs 4 +115 0.0 1.0 +112 0.701086997986 0.857142984867 +121 1.0 0.22222200036 +118 0.717391014099 0.0 +SURF 0x30 +mat 2 +refs 4 +137 0.0 0.792452991009 +115 0.213018000126 1.0 +118 1.0 0.405660003424 +117 0.556213021278 0.0 +SURF 0x30 +mat 2 +refs 3 +116 0.00431034015492 1.0 +115 1.0 0.731706976891 +137 0.771552026272 0.0 +SURF 0x10 +mat 2 +refs 3 +138 0.0 0.0 +140 0.0 0.0 +151 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +138 0.0 0.0 +141 0.0 0.0 +140 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +138 0.0 0.0 +142 0.0 0.0 +141 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +138 0.0 0.0 +143 0.0 0.0 +142 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +138 0.0 0.0 +144 0.0 0.0 +143 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +138 0.0 0.0 +145 0.0 0.0 +144 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +138 0.0 0.0 +146 0.0 0.0 +145 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +138 0.0 0.0 +147 0.0 0.0 +146 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +138 0.0 0.0 +148 0.0 0.0 +147 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +138 0.0 0.0 +149 0.0 0.0 +148 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +138 0.0 0.0 +150 0.0 0.0 +149 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +138 0.0 0.0 +151 0.0 0.0 +150 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +139 0.0 0.0 +163 0.0 0.0 +152 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +139 0.0 0.0 +152 0.0 0.0 +153 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +139 0.0 0.0 +153 0.0 0.0 +154 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +139 0.0 0.0 +154 0.0 0.0 +155 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +139 0.0 0.0 +155 0.0 0.0 +156 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +139 0.0 0.0 +156 0.0 0.0 +157 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +139 0.0 0.0 +157 0.0 0.0 +158 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +139 0.0 0.0 +158 0.0 0.0 +159 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +139 0.0 0.0 +159 0.0 0.0 +160 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +139 0.0 0.0 +160 0.0 0.0 +161 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +139 0.0 0.0 +161 0.0 0.0 +162 0.0 0.0 +SURF 0x10 +mat 2 +refs 3 +139 0.0 0.0 +162 0.0 0.0 +163 0.0 0.0 +SURF 0x10 +mat 2 +refs 4 +163 -2.98022992951e-008 1.0 +174 -2.98022975187e-008 0.499999970198 +164 0.083333298564 0.5 +152 0.083333298564 1.0 +SURF 0x10 +mat 2 +refs 4 +174 -2.98022975187e-008 0.499999970198 +151 -2.98022992951e-008 0.0 +140 0.083333298564 0.0 +164 0.083333298564 0.5 +SURF 0x10 +mat 2 +refs 4 +152 0.083333298564 1.0 +164 0.083333298564 0.5 +165 0.166666999459 0.499999821186 +153 0.166666999459 1.0 +SURF 0x10 +mat 2 +refs 4 +164 0.083333298564 0.5 +140 0.083333298564 0.0 +141 0.166666999459 0.0 +165 0.166666999459 0.499999821186 +SURF 0x10 +mat 2 +refs 4 +153 0.166666999459 1.0 +165 0.16666701436 0.499999821186 +166 0.250000119209 0.5 +154 0.25 1.0 +SURF 0x10 +mat 2 +refs 4 +165 0.16666701436 0.499999821186 +141 0.166666999459 0.0 +142 0.25 0.0 +166 0.250000119209 0.5 +SURF 0x10 +mat 2 +refs 4 +154 0.25 1.0 +166 0.250000059605 0.499999970198 +167 0.333332955837 0.500000178814 +155 0.33333298564 1.0 +SURF 0x10 +mat 2 +refs 4 +166 0.250000059605 0.499999970198 +142 0.25 0.0 +143 0.33333298564 0.0 +167 0.333332955837 0.500000178814 +SURF 0x10 +mat 2 +refs 4 +155 0.33333298564 1.0 +167 0.333332955837 0.500000119209 +168 0.41666701436 0.500000178814 +156 0.41666701436 1.0 +SURF 0x10 +mat 2 +refs 4 +167 0.333332955837 0.500000119209 +143 0.33333298564 0.0 +144 0.41666701436 0.0 +168 0.41666701436 0.500000178814 +SURF 0x10 +mat 2 +refs 4 +156 0.41666701436 1.0 +168 0.416666984558 0.500000178814 +169 0.500000059605 0.500000178814 +157 0.5 1.0 +SURF 0x10 +mat 2 +refs 4 +168 0.416666984558 0.500000178814 +144 0.41666701436 0.0 +145 0.5 0.0 +169 0.500000059605 0.500000178814 +SURF 0x10 +mat 2 +refs 4 +157 0.5 1.0 +169 0.5 0.500000178814 +170 0.583333015442 0.5 +158 0.583333015442 1.0 +SURF 0x10 +mat 2 +refs 4 +169 0.5 0.500000178814 +145 0.5 0.0 +146 0.583333015442 0.0 +170 0.583333015442 0.5 +SURF 0x10 +mat 2 +refs 4 +158 0.583333015442 1.0 +170 0.583333015442 0.5 +171 0.666666984558 0.5 +159 0.666666984558 1.0 +SURF 0x10 +mat 2 +refs 4 +170 0.583333015442 0.5 +146 0.583333015442 0.0 +147 0.666666984558 0.0 +171 0.666666984558 0.5 +SURF 0x10 +mat 2 +refs 4 +159 0.666666984558 1.0 +171 0.666666984558 0.5 +172 0.75 0.5 +160 0.75 1.0 +SURF 0x10 +mat 2 +refs 4 +171 0.666666984558 0.5 +147 0.666666984558 0.0 +148 0.75 0.0 +172 0.75 0.5 +SURF 0x10 +mat 2 +refs 4 +160 0.75 1.0 +172 0.75 0.5 +173 0.833332896233 0.499999850988 +161 0.833333015442 1.0 +SURF 0x10 +mat 2 +refs 4 +172 0.75 0.5 +148 0.75 0.0 +149 0.833333015442 0.0 +173 0.833332896233 0.499999850988 +SURF 0x10 +mat 2 +refs 4 +161 0.833333015442 1.0 +173 0.833332896233 0.499999821186 +175 0.916666984558 0.5 +162 0.916666984558 1.0 +SURF 0x10 +mat 2 +refs 4 +173 0.833332896233 0.499999821186 +149 0.833333015442 0.0 +150 0.916666984558 0.0 +175 0.916666984558 0.5 +SURF 0x10 +mat 2 +refs 4 +162 0.916666984558 1.0 +175 0.916666984558 0.5 +174 1.0 0.5 +163 1.0 1.0 +SURF 0x10 +mat 2 +refs 4 +175 0.916666984558 0.5 +150 0.916666984558 0.0 +151 1.0 0.0 +174 1.0 0.5 +kids 0 +OBJECT poly +name "strut.001" +data 8 +Mesh.008 +texture "//DSC01758.rgb" +texrep 1 1 +crease 45.000000 +numvert 66 +0.122961 0.036168 -0.007847 +0.123795 0.032667 -0.005827 +0.125292 0.033057 -0.00245 +0.125954 0.036951 -0.001105 +0.123627 0.040056 -0.006497 +0.125123 0.040451 -0.003124 +0.06621 0.036665 0.018844 +0.068706 0.033567 0.020659 +0.071725 0.03409 0.022792 +0.072249 0.037713 0.023107 +0.066703 0.040266 0.019166 +0.069722 0.040788 0.021298 +-0.039285 0.052705 0.02356 +-0.041066 0.049268 0.025128 +-0.043836 0.049792 0.02757 +-0.044833 0.053752 0.028448 +-0.043051 0.057188 0.026881 +-0.040277 0.056664 0.024435 +-0.020398 0.057601 0.087325 +-0.021955 0.054164 0.089115 +-0.024381 0.054689 0.091908 +-0.025251 0.058648 0.09291 +-0.023694 0.062084 0.091119 +-0.021267 0.06156 0.088325 +0.014627 0.054014 0.100576 +0.014632 0.050579 0.102951 +0.014584 0.051102 0.106654 +0.014626 0.055062 0.107975 +0.014621 0.058498 0.105599 +0.01467 0.057975 0.101902 +0.043922 0.047399 0.079423 +0.045198 0.043963 0.081425 +0.0472 0.044486 0.084534 +0.047935 0.048446 0.085636 +0.046659 0.051882 0.083634 +0.044682 0.051359 0.080509 +-0.042057 0.053228 0.026003 +0.124458 0.036561 -0.004475 +0.111846 0.036561 0.002391 +0.107074 0.040788 0.0678 +0.103726 0.040266 0.069364 +0.109899 0.037713 0.066503 +0.109365 0.03409 0.066802 +0.106015 0.033567 0.068365 +0.103202 0.036665 0.069633 +0.113348 0.040451 0.002483 +0.109678 0.040056 0.002109 +0.115514 0.036951 0.002764 +0.114018 0.033057 0.007768 +0.110343 0.032667 0.002296 +0.108175 0.036168 0.002018 +-0.024381 0.054689 0.091908 +0.137771 0.129913 -0.152033 +0.016644 0.049462 -0.16521 +0.135023 0.133184 -0.144856 +0.137615 0.130504 -0.144588 +0.138988 0.128869 -0.148177 +0.137771 0.129913 -0.152033 +0.13518 0.132592 -0.1523 +0.133808 0.134227 -0.148711 +0.01453 0.049895 -0.161635 +0.018229 0.049459 -0.161346 +0.020344 0.049024 -0.16492 +0.018757 0.049029 -0.168784 +0.015064 0.049464 -0.169074 +0.01295 0.049897 -0.165498 +numsurf 66 +SURF 0x10 +mat 2 +refs 3 +37 0.235402002931 0.485176384449 +0 0.235402002931 0.485176384449 +4 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +1 0.235402002931 0.485176384449 +0 0.235402002931 0.485176384449 +37 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +37 0.235402002931 0.485176384449 +2 0.235402002931 0.485176384449 +1 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +37 0.235402002931 0.485176384449 +3 0.235402002931 0.485176384449 +2 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +37 0.235402002931 0.485176384449 +5 0.235402002931 0.485176384449 +3 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +37 0.235402002931 0.485176384449 +4 0.235402002931 0.485176384449 +5 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +0 0.235402002931 0.485176384449 +6 0.235402002931 0.485176384449 +10 0.235402002931 0.485176384449 +4 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +6 0.235402002931 0.485176384449 +0 0.235402002931 0.485176384449 +1 0.235402002931 0.485176384449 +7 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +7 0.235402002931 0.485176384449 +1 0.235402002931 0.485176384449 +2 0.235402002931 0.485176384449 +8 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +8 0.235402002931 0.485176384449 +2 0.235402002931 0.485176384449 +3 0.235402002931 0.485176384449 +9 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +9 0.235402002931 0.485176384449 +3 0.235402002931 0.485176384449 +5 0.235402002931 0.485176384449 +11 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +11 0.235402002931 0.485176384449 +5 0.235402002931 0.485176384449 +4 0.235402002931 0.485176384449 +10 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +35 0.235402002931 0.485176384449 +10 0.235402002931 0.485176384449 +6 0.235402002931 0.485176384449 +30 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +30 0.235402002931 0.485176384449 +6 0.235402002931 0.485176384449 +7 0.235402002931 0.485176384449 +31 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +31 0.235402002931 0.485176384449 +7 0.235402002931 0.485176384449 +8 0.235402002931 0.485176384449 +32 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +32 0.235402002931 0.485176384449 +8 0.235402002931 0.485176384449 +9 0.235402002931 0.485176384449 +33 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +33 0.235402002931 0.485176384449 +9 0.235402002931 0.485176384449 +11 0.235402002931 0.485176384449 +34 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +34 0.235402002931 0.485176384449 +11 0.235402002931 0.485176384449 +10 0.235402002931 0.485176384449 +35 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +36 0.235402002931 0.485176384449 +17 0.235402002931 0.485176384449 +12 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +36 0.235402002931 0.485176384449 +12 0.235402002931 0.485176384449 +13 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +36 0.235402002931 0.485176384449 +13 0.235402002931 0.485176384449 +14 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +36 0.235402002931 0.485176384449 +14 0.235402002931 0.485176384449 +15 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +36 0.235402002931 0.485176384449 +15 0.235402002931 0.485176384449 +16 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +36 0.235402002931 0.485176384449 +16 0.235402002931 0.485176384449 +17 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +18 0.235402002931 0.485176384449 +12 0.235402002931 0.485176384449 +17 0.235402002931 0.485176384449 +23 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +19 0.235402002931 0.485176384449 +13 0.235402002931 0.485176384449 +12 0.235402002931 0.485176384449 +18 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +20 0.235402002931 0.485176384449 +14 0.235402002931 0.485176384449 +13 0.235402002931 0.485176384449 +19 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +21 0.235402002931 0.485176384449 +15 0.235402002931 0.485176384449 +14 0.235402002931 0.485176384449 +51 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +22 0.235402002931 0.485176384449 +16 0.235402002931 0.485176384449 +15 0.235402002931 0.485176384449 +21 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +23 0.235402002931 0.485176384449 +17 0.235402002931 0.485176384449 +16 0.235402002931 0.485176384449 +22 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +24 0.235402002931 0.485176384449 +18 0.235402002931 0.485176384449 +23 0.235402002931 0.485176384449 +29 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +25 0.235402002931 0.485176384449 +19 0.235402002931 0.485176384449 +18 0.235402002931 0.485176384449 +24 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +26 0.235402002931 0.485176384449 +20 0.235402002931 0.485176384449 +19 0.235402002931 0.485176384449 +25 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +27 0.235402002931 0.485176384449 +21 0.235402002931 0.485176384449 +51 0.235402002931 0.485176384449 +26 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +28 0.235402002931 0.485176384449 +22 0.235402002931 0.485176384449 +21 0.235402002931 0.485176384449 +27 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +29 0.235402002931 0.485176384449 +23 0.235402002931 0.485176384449 +22 0.235402002931 0.485176384449 +28 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +35 0.235402002931 0.485667705536 +30 0.235483899713 0.485667705536 +24 0.235483899713 0.485176384449 +29 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +30 0.235483899713 0.485667705536 +31 0.235565781593 0.485667705536 +25 0.235565781593 0.485176384449 +24 0.235483899713 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +31 0.235565781593 0.485667705536 +32 0.235647678375 0.485667705536 +26 0.235647678375 0.485176384449 +25 0.235565781593 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +32 0.235647678375 0.485667705536 +33 0.235729545355 0.485667705536 +27 0.235729545355 0.485176384449 +26 0.235647678375 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +33 0.235729545355 0.485667705536 +34 0.235811442137 0.485667705536 +28 0.235811442137 0.485176384449 +27 0.235729545355 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +34 0.235811442137 0.485667705536 +35 0.235893324018 0.485667705536 +29 0.235893324018 0.485176384449 +28 0.235811442137 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +39 0.235402002931 0.485176384449 +45 0.235402002931 0.485176384449 +46 0.235402002931 0.485176384449 +40 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +41 0.235402002931 0.485176384449 +47 0.235402002931 0.485176384449 +45 0.235402002931 0.485176384449 +39 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +42 0.235402002931 0.485176384449 +48 0.235402002931 0.485176384449 +47 0.235402002931 0.485176384449 +41 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +43 0.235402002931 0.485176384449 +49 0.235402002931 0.485176384449 +48 0.235402002931 0.485176384449 +42 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +49 0.235402002931 0.485176384449 +43 0.235402002931 0.485176384449 +44 0.235402002931 0.485176384449 +50 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +50 0.235402002931 0.485176384449 +44 0.235402002931 0.485176384449 +40 0.235402002931 0.485176384449 +46 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +38 0.235402002931 0.485176384449 +46 0.235402002931 0.485176384449 +45 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +38 0.235402002931 0.485176384449 +45 0.235402002931 0.485176384449 +47 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +38 0.235402002931 0.485176384449 +47 0.235402002931 0.485176384449 +48 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +38 0.235402002931 0.485176384449 +48 0.235402002931 0.485176384449 +49 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +38 0.235402002931 0.485176384449 +49 0.235402002931 0.485176384449 +50 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +46 0.235402002931 0.485176384449 +38 0.235402002931 0.485176384449 +50 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +54 0.235402002931 0.485176384449 +60 0.235402002931 0.485176384449 +61 0.235402002931 0.485176384449 +55 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +55 0.235402002931 0.485176384449 +61 0.235402002931 0.485176384449 +62 0.235402002931 0.485176384449 +56 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +56 0.235402002931 0.485176384449 +62 0.235402002931 0.485176384449 +63 0.235402002931 0.485176384449 +52 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +57 0.235402002931 0.485176384449 +63 0.235402002931 0.485176384449 +64 0.235402002931 0.485176384449 +58 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +58 0.235402002931 0.485176384449 +64 0.235402002931 0.485176384449 +65 0.235402002931 0.485176384449 +59 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 4 +59 0.235402002931 0.485176384449 +65 0.235402002931 0.485176384449 +60 0.235402002931 0.485176384449 +54 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +53 0.235402002931 0.485176384449 +61 0.235402002931 0.485176384449 +60 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +53 0.235402002931 0.485176384449 +62 0.235402002931 0.485176384449 +61 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +53 0.235402002931 0.485176384449 +63 0.235402002931 0.485176384449 +62 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +53 0.235402002931 0.485176384449 +64 0.235402002931 0.485176384449 +63 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +53 0.235402002931 0.485176384449 +65 0.235402002931 0.485176384449 +64 0.235402002931 0.485176384449 +SURF 0x10 +mat 2 +refs 3 +53 0.235402002931 0.485176384449 +60 0.235402002931 0.485176384449 +65 0.235402002931 0.485176384449 +kids 0 +OBJECT poly +name "motor" +data 8 +Mesh.014 +texture "//DSC01758.rgb" +texrep 1 1 +crease 45.000000 +numvert 59 +0.115873 0.015857 -4e-006 +0.391286 0.015822 -4e-006 +0.115873 0.006298 0.03494 +0.115866 -0.00085 0.030258 +0.115861 -0.013081 0.017468 +0.11586 -0.017558 -4e-006 +0.115861 -0.013081 -0.017476 +0.115866 -0.00085 -0.030266 +0.115873 0.015857 -0.034948 +0.11588 0.032565 -0.030266 +0.115884 0.044796 -0.017476 +0.115886 0.049272 -4e-006 +0.115884 0.044796 0.017468 +0.11588 0.032565 0.030258 +0.391286 0.015822 0.03494 +0.391279 -0.000886 0.030258 +0.391274 -0.013116 0.017468 +0.391273 -0.017593 -4e-006 +0.391274 -0.013116 -0.017476 +0.391279 -0.000886 -0.030266 +0.391286 0.015822 -0.034948 +0.391292 0.032529 -0.030266 +0.391297 0.04476 -0.017476 +0.391299 0.049237 -4e-006 +0.391297 0.04476 0.017468 +0.391292 0.032529 0.030258 +0.286615 0.035604 0.035833 +0.286616 0.050088 0.020687 +0.286617 0.055389 -4e-006 +0.286616 0.050088 -0.020695 +0.286615 0.035604 -0.035841 +0.286613 0.015818 -0.041385 +0.286612 0.015696 -0.06011 +0.286611 0.001213 -0.060082 +0.28661 -0.023752 -4e-006 +0.286611 0.001213 0.060379 +0.286612 0.015696 0.060115 +0.286613 0.015818 0.041377 +0.220677 0.035646 0.035833 +0.220678 0.05013 0.020687 +0.220679 0.055431 -4e-006 +0.220678 0.05013 -0.020695 +0.220677 0.035646 -0.035841 +0.220676 0.015861 -0.041385 +0.220674 0.015739 -0.06011 +0.220673 0.001254 -0.060082 +0.220673 -0.02371 -4e-006 +0.220673 0.001254 0.060379 +0.220674 0.015739 0.060115 +0.220676 0.015861 0.041377 +0.286613 0.015818 -4e-006 +0.220676 0.015861 -4e-006 +0.220673 0.001254 0.060379 +0.286611 0.001213 0.060379 +0.286611 0.001213 -0.060082 +0.101225 0.031552 0.044786 +0.101226 0.03692 0.12043 +0.14196 0.025509 0.044786 +0.141961 0.029399 0.12043 +numsurf 73 +SURF 0x10 +mat 2 +refs 3 +0 0.0799582228065 0.539897024632 +2 0.0799582228065 0.539897024632 +13 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +0 0.0799582228065 0.539897024632 +3 0.0799582228065 0.539897024632 +2 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +0 0.0799582228065 0.539897024632 +4 0.0799582228065 0.539897024632 +3 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +0 0.0799582228065 0.539897024632 +5 0.0799582228065 0.539897024632 +4 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +0 0.0799582228065 0.539897024632 +6 0.0799582228065 0.539897024632 +5 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +0 0.0799582228065 0.539897024632 +7 0.0799582228065 0.539897024632 +6 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +0 0.0799582228065 0.539897024632 +8 0.0799582228065 0.539897024632 +7 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +0 0.0799582228065 0.539897024632 +9 0.0799582228065 0.539897024632 +8 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +0 0.0799582228065 0.539897024632 +10 0.0799582228065 0.539897024632 +9 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +0 0.0799582228065 0.539897024632 +11 0.0799582228065 0.539897024632 +10 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +0 0.0799582228065 0.539897024632 +12 0.0799582228065 0.539897024632 +11 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +0 0.0799582228065 0.539897024632 +13 0.0799582228065 0.539897024632 +12 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +1 0.0799582228065 0.539897024632 +25 0.0799582228065 0.539897024632 +14 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +1 0.0799582228065 0.539897024632 +14 0.0799582228065 0.539897024632 +15 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +1 0.0799582228065 0.539897024632 +15 0.0799582228065 0.539897024632 +16 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +1 0.0799582228065 0.539897024632 +16 0.0799582228065 0.539897024632 +17 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +1 0.0799582228065 0.539897024632 +17 0.0799582228065 0.539897024632 +18 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +1 0.0799582228065 0.539897024632 +18 0.0799582228065 0.539897024632 +19 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +1 0.0799582228065 0.539897024632 +19 0.0799582228065 0.539897024632 +20 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +1 0.0799582228065 0.539897024632 +20 0.0799582228065 0.539897024632 +21 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +1 0.0799582228065 0.539897024632 +21 0.0799582228065 0.539897024632 +22 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +1 0.0799582228065 0.539897024632 +22 0.0799582228065 0.539897024632 +23 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +1 0.0799582228065 0.539897024632 +23 0.0799582228065 0.539897024632 +24 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 3 +1 0.0799582228065 0.539897024632 +24 0.0799582228065 0.539897024632 +25 0.0799582228065 0.539897024632 +SURF 0x10 +mat 2 +refs 4 +25 0.0799582228065 0.549106776714 +13 0.0799582228065 0.539897024632 +2 0.0807257071137 0.539897024632 +14 0.0807257071137 0.549106776714 +SURF 0x10 +mat 2 +refs 4 +14 0.0807257071137 0.549106776714 +2 0.0807257071137 0.539897024632 +3 0.0814931765199 0.539897024632 +15 0.0814931765199 0.549106776714 +SURF 0x10 +mat 2 +refs 4 +15 0.0814931765199 0.549106776714 +3 0.0814931765199 0.539897024632 +4 0.082260645926 0.539897024632 +16 0.082260645926 0.549106776714 +SURF 0x10 +mat 2 +refs 4 +16 0.082260645926 0.549106776714 +4 0.082260645926 0.539897024632 +5 0.0830281153321 0.539897024632 +17 0.0830281153321 0.549106776714 +SURF 0x10 +mat 2 +refs 4 +17 0.0830281153321 0.549106776714 +5 0.0830281153321 0.539897024632 +6 0.0837956145406 0.539897024632 +18 0.0837956145406 0.549106776714 +SURF 0x10 +mat 2 +refs 4 +18 0.0837956145406 0.549106776714 +6 0.0837956145406 0.539897024632 +7 0.0845630839467 0.539897024632 +19 0.0845630839467 0.549106776714 +SURF 0x10 +mat 2 +refs 4 +19 0.0845630839467 0.549106776714 +7 0.0845630839467 0.539897024632 +8 0.0853305533528 0.539897024632 +20 0.0853305533528 0.549106776714 +SURF 0x10 +mat 2 +refs 4 +20 0.0853305533528 0.549106776714 +8 0.0853305533528 0.539897024632 +9 0.0860980525613 0.539897024632 +21 0.0860980525613 0.549106776714 +SURF 0x10 +mat 2 +refs 4 +21 0.0860980525613 0.549106776714 +9 0.0860980525613 0.539897024632 +10 0.0868655219674 0.539897024632 +22 0.0868655219674 0.549106776714 +SURF 0x10 +mat 2 +refs 4 +22 0.0868655219674 0.549106776714 +10 0.0868655219674 0.539897024632 +11 0.0876329913735 0.539897024632 +23 0.0876329913735 0.549106776714 +SURF 0x10 +mat 2 +refs 4 +23 0.0876329913735 0.549106776714 +11 0.0876329913735 0.539897024632 +12 0.0884004756808 0.539897024632 +24 0.0884004756808 0.549106776714 +SURF 0x10 +mat 2 +refs 4 +24 0.0884004756808 0.549106776714 +12 0.0884004756808 0.539897024632 +13 0.089167945087 0.539897024632 +25 0.089167945087 0.549106776714 +SURF 0x10 +mat 2 +refs 4 +27 0.183842405677 0.479689747095 +39 0.183842405677 0.478968471289 +38 0.183902516961 0.478968471289 +26 0.183902516961 0.479689747095 +SURF 0x10 +mat 2 +refs 4 +28 0.183782294393 0.479689747095 +40 0.183782294393 0.478968471289 +39 0.183842405677 0.478968471289 +27 0.183842405677 0.479689747095 +SURF 0x10 +mat 2 +refs 4 +29 0.183722183108 0.479689747095 +41 0.183722183108 0.478968471289 +40 0.183782294393 0.478968471289 +28 0.183782294393 0.479689747095 +SURF 0x10 +mat 2 +refs 4 +30 0.183662086725 0.479689747095 +42 0.183662086725 0.478968471289 +41 0.183722183108 0.478968471289 +29 0.183722183108 0.479689747095 +SURF 0x10 +mat 2 +refs 4 +31 0.183601975441 0.479689747095 +43 0.183601975441 0.478968471289 +42 0.183662086725 0.478968471289 +30 0.183662086725 0.479689747095 +SURF 0x10 +mat 2 +refs 4 +32 0.183541864157 0.479689747095 +44 0.183541864157 0.478968471289 +43 0.183601975441 0.478968471289 +31 0.183601975441 0.479689747095 +SURF 0x10 +mat 2 +refs 4 +54 0.183481752872 0.479689747095 +45 0.183481752872 0.478968471289 +44 0.183541864157 0.478968471289 +32 0.183541864157 0.479689747095 +SURF 0x10 +mat 2 +refs 4 +34 0.183421641588 0.479689747095 +46 0.183421641588 0.478968471289 +45 0.183481752872 0.478968471289 +54 0.183481752872 0.479689747095 +SURF 0x10 +mat 2 +refs 4 +35 0.183361545205 0.479689747095 +47 0.183361545205 0.478968471289 +46 0.183421641588 0.478968471289 +34 0.183421641588 0.479689747095 +SURF 0x10 +mat 2 +refs 4 +36 0.183301433921 0.479689747095 +48 0.183301433921 0.478968471289 +52 0.183361545205 0.478968471289 +53 0.183361545205 0.479689747095 +SURF 0x10 +mat 2 +refs 4 +37 0.183241322637 0.479689747095 +49 0.183241322637 0.478968471289 +48 0.183301433921 0.478968471289 +36 0.183301433921 0.479689747095 +SURF 0x10 +mat 2 +refs 4 +26 0.183181211352 0.479689747095 +38 0.183181211352 0.478968471289 +49 0.183241322637 0.478968471289 +37 0.183241322637 0.479689747095 +SURF 0x10 +mat 2 +refs 3 +50 0.183181211352 0.478968471289 +27 0.183181211352 0.478968471289 +26 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +50 0.183181211352 0.478968471289 +28 0.183181211352 0.478968471289 +27 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +50 0.183181211352 0.478968471289 +29 0.183181211352 0.478968471289 +28 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +50 0.183181211352 0.478968471289 +30 0.183181211352 0.478968471289 +29 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +50 0.183181211352 0.478968471289 +31 0.183181211352 0.478968471289 +30 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +50 0.183181211352 0.478968471289 +32 0.183181211352 0.478968471289 +31 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +50 0.183181211352 0.478968471289 +33 0.183181211352 0.478968471289 +32 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +50 0.183181211352 0.478968471289 +34 0.183181211352 0.478968471289 +33 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +50 0.183181211352 0.478968471289 +35 0.183181211352 0.478968471289 +34 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +50 0.183181211352 0.478968471289 +36 0.183181211352 0.478968471289 +35 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +50 0.183181211352 0.478968471289 +37 0.183181211352 0.478968471289 +36 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +50 0.183181211352 0.478968471289 +26 0.183181211352 0.478968471289 +37 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +51 0.183181211352 0.478968471289 +38 0.183181211352 0.478968471289 +39 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +51 0.183181211352 0.478968471289 +39 0.183181211352 0.478968471289 +40 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +51 0.183181211352 0.478968471289 +40 0.183181211352 0.478968471289 +41 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +51 0.183181211352 0.478968471289 +41 0.183181211352 0.478968471289 +42 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +51 0.183181211352 0.478968471289 +42 0.183181211352 0.478968471289 +43 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +51 0.183181211352 0.478968471289 +43 0.183181211352 0.478968471289 +44 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +51 0.183181211352 0.478968471289 +44 0.183181211352 0.478968471289 +45 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +51 0.183181211352 0.478968471289 +45 0.183181211352 0.478968471289 +46 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +51 0.183181211352 0.478968471289 +46 0.183181211352 0.478968471289 +47 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +51 0.183181211352 0.478968471289 +47 0.183181211352 0.478968471289 +48 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +51 0.183181211352 0.478968471289 +48 0.183181211352 0.478968471289 +49 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 3 +51 0.183181211352 0.478968471289 +49 0.183181211352 0.478968471289 +38 0.183181211352 0.478968471289 +SURF 0x10 +mat 2 +refs 4 +57 0.202283456922 0.48957207799 +55 0.211194992065 0.48957696557 +56 0.211193606257 0.501945197582 +58 0.202282071114 0.501940310001 +kids 0 +OBJECT poly +name "horzstab.001" +data 8 +Mesh.010 +texture "//DSC01758.rgb" +texrep 1 1 +crease 45.000000 +numvert 111 +0.64451 0.116561 2.306764 +0.899361 0.123524 2.307009 +0.897399 0.11689 2.306601 +0.639688 0.109987 2.307225 +0.718084 0.142869 2.306838 +0.717002 0.119428 2.307038 +0.844071 0.129424 2.306957 +0.842378 0.117664 2.306735 +0.888591 0.119852 2.243279 +0.88656 0.113006 2.242792 +0.620911 0.113907 2.243027 +0.61543 0.106828 2.243436 +0.696769 0.115892 2.243243 +0.697857 0.140206 2.243103 +0.828674 0.113886 2.242929 +0.830417 0.12606 2.243226 +0.599074 0.014895 0.530098 +0.59518 0.008608 0.527454 +-0.010354 0.042571 0.529629 +-0.033546 0.021898 0.52866 +0.152882 0.020824 0.528298 +0.154115 0.068626 0.52977 +0.460279 0.012334 0.527711 +0.463361 0.035624 0.529998 +0.45383 0.031514 0.485704 +0.450833 0.006714 0.483731 +0.13917 0.066308 0.485106 +0.137916 0.017689 0.483609 +-0.050266 0.016705 0.484691 +-0.028168 0.039808 0.484963 +0.587785 0.005264 0.482751 +0.591745 0.010516 0.485441 +0.367942 0.006021 0.310547 +0.365004 -0.006865 0.309817 +-0.088669 0.0295 0.311497 +-0.115907 -6.7e-005 0.310739 +0.074979 0.005783 0.309154 +0.074034 0.056712 0.311605 +0.261662 -0.002896 0.310014 +0.264015 0.021732 0.311779 +0.365004 -0.006865 0.309817 +0.367942 0.006021 0.310547 +0.591745 0.010516 0.485441 +0.587785 0.005264 0.482751 +0.59518 0.008608 0.527454 +0.599074 0.014895 0.530098 +0.88656 0.113006 2.242792 +0.888591 0.119852 2.243279 +0.897399 0.11689 2.306601 +0.899361 0.123524 2.307009 +0.899361 0.123524 -2.308464 +0.897399 0.11689 -2.308057 +0.888591 0.119852 -2.244735 +0.88656 0.113006 -2.244248 +0.599074 0.014895 -0.531554 +0.59518 0.008608 -0.52891 +0.587785 0.005264 -0.484206 +0.591745 0.010516 -0.486897 +0.363957 -0.014836 -0.000747 +0.360042 -0.032265 -0.000744 +0.367942 0.006021 -0.312003 +0.365004 -0.006865 -0.311273 +0.264015 0.021732 -0.313235 +0.261662 -0.002896 -0.31147 +0.074034 0.056712 -0.313061 +0.074979 0.005783 -0.31061 +-0.115907 -6.7e-005 -0.312195 +-0.088669 0.0295 -0.312953 +0.365004 -0.006865 -0.311273 +0.367942 0.006021 -0.312003 +0.22406 -0.027043 -0.000735 +0.227156 0.005364 -0.00072 +-0.031493 -0.015144 -0.000728 +-0.031393 0.051392 -0.000719 +0.360042 -0.032265 -0.000712 +-0.261235 -0.01331 -0.000728 +-0.198642 0.030973 -0.000728 +0.363957 -0.014836 -0.000747 +0.591745 0.010516 -0.486897 +0.587785 0.005264 -0.484206 +-0.028168 0.039808 -0.486419 +-0.050266 0.016705 -0.486147 +0.137916 0.017689 -0.485065 +0.13917 0.066308 -0.486562 +0.450833 0.006714 -0.485187 +0.45383 0.031514 -0.48716 +0.463361 0.035624 -0.531454 +0.460279 0.012334 -0.529167 +0.154115 0.068626 -0.531226 +0.152882 0.020824 -0.529754 +-0.033546 0.021898 -0.530116 +-0.010354 0.042571 -0.531085 +0.59518 0.008608 -0.52891 +0.599074 0.014895 -0.531554 +0.830417 0.12606 -2.244682 +0.828674 0.113886 -2.244385 +0.697857 0.140206 -2.244559 +0.696769 0.115892 -2.244699 +0.61543 0.106828 -2.244892 +0.620911 0.113907 -2.244483 +0.88656 0.113006 -2.244248 +0.888591 0.119852 -2.244735 +0.842378 0.117664 -2.308191 +0.844071 0.129424 -2.308412 +0.717002 0.119428 -2.308494 +0.718084 0.142869 -2.308294 +0.639688 0.109987 -2.308681 +0.897399 0.11689 -2.308057 +0.899361 0.123524 -2.308464 +0.64451 0.116561 -2.30822 +0.61543 0.106828 -2.244892 +numsurf 80 +SURF 0x30 +mat 2 +refs 4 +4 0.399851858616 0.632653355598 +0 0.399851858616 0.632653355598 +3 0.399851858616 0.632653355598 +5 0.399851858616 0.632653355598 +SURF 0x30 +mat 2 +refs 4 +1 0.399851858616 0.632653355598 +6 0.399851858616 0.632653355598 +7 0.399851858616 0.632653355598 +2 0.399851858616 0.632653355598 +SURF 0x30 +mat 2 +refs 4 +6 0.399851858616 0.632653355598 +4 0.399851858616 0.632653355598 +5 0.399851858616 0.632653355598 +7 0.399851858616 0.632653355598 +SURF 0x30 +mat 2 +refs 4 +0 0.399851858616 0.632653355598 +10 0.399851858616 0.632653355598 +11 0.399851858616 0.632653355598 +3 0.399851858616 0.632653355598 +SURF 0x30 +mat 2 +refs 4 +12 0.514271497726 0.254068434238 +5 0.528543055058 0.133798599243 +3 0.439346075058 0.137139439583 +11 0.408424496651 0.255182027817 +SURF 0x30 +mat 2 +refs 4 +10 0.479361355305 0.70319634676 +0 0.500608086586 0.639424204826 +4 0.542607367039 0.639886260033 +13 0.532478153706 0.703658461571 +SURF 0x30 +mat 2 +refs 4 +14 0.567195057869 0.253511667252 +7 0.573141515255 0.132128179073 +5 0.528543055058 0.133798599243 +12 0.514271497726 0.254068434238 +SURF 0x30 +mat 2 +refs 4 +9 0.620118558407 0.25295484066 +2 0.617740035057 0.130457758904 +7 0.573141515255 0.132128179073 +14 0.567195057869 0.253511667252 +SURF 0x30 +mat 2 +refs 4 +6 0.563607037067 0.64011734724 +15 0.559036552906 0.703889489174 +13 0.532478153706 0.703658461571 +4 0.542607367039 0.639886260033 +SURF 0x30 +mat 2 +refs 4 +1 0.584606766701 0.640348434448 +8 0.585594952106 0.704120576382 +15 0.559036552906 0.703889489174 +6 0.563607037067 0.64011734724 +SURF 0x30 +mat 2 +refs 4 +10 0.458114653826 0.639424204826 +18 0.458114653826 0.639424204826 +19 0.458114653826 0.639424204826 +11 0.458114653826 0.639424204826 +SURF 0x30 +mat 2 +refs 4 +18 0.458114653826 0.639424204826 +29 0.458114653826 0.639424204826 +28 0.458114653826 0.639424204826 +19 0.458114653826 0.639424204826 +SURF 0x30 +mat 2 +refs 4 +27 0.5 0.374338269234 +20 0.507135748863 0.314203381538 +19 0.392963767052 0.314203321934 +28 0.377502918243 0.373224675655 +SURF 0x30 +mat 2 +refs 4 +20 0.507135748863 0.314203381538 +12 0.514271497726 0.254068434238 +11 0.408424496651 0.255182027817 +19 0.392963767052 0.314203321934 +SURF 0x30 +mat 2 +refs 4 +13 0.532478153706 0.703658461571 +21 0.527413547039 0.73554456234 +18 0.468738019466 0.735082447529 +10 0.479361355305 0.70319634676 +SURF 0x30 +mat 2 +refs 4 +21 0.527413547039 0.73554456234 +26 0.522348940372 0.767430663109 +29 0.458114653826 0.766968548298 +18 0.468738019466 0.735082447529 +SURF 0x30 +mat 2 +refs 4 +25 0.561248540878 0.374895095825 +22 0.564221799374 0.314203381538 +20 0.507135748863 0.314203381538 +27 0.5 0.374338269234 +SURF 0x30 +mat 2 +refs 4 +22 0.564221799374 0.314203381538 +14 0.567195057869 0.253511667252 +12 0.514271497726 0.254068434238 +20 0.507135748863 0.314203381538 +SURF 0x30 +mat 2 +refs 4 +30 0.622497081757 0.375451922417 +17 0.621307790279 0.314203381538 +22 0.564221799374 0.314203381538 +25 0.561248540878 0.374895095825 +SURF 0x30 +mat 2 +refs 4 +15 0.559036552906 0.703889489174 +23 0.556751310825 0.735775589943 +21 0.527413547039 0.73554456234 +13 0.532478153706 0.703658461571 +SURF 0x30 +mat 2 +refs 4 +23 0.556751310825 0.735775589943 +24 0.554466068745 0.767661690712 +26 0.522348940372 0.767430663109 +21 0.527413547039 0.73554456234 +SURF 0x30 +mat 2 +refs 4 +16 0.586089074612 0.736006617546 +31 0.586583197117 0.767892718315 +24 0.554466068745 0.767661690712 +23 0.556751310825 0.735775589943 +SURF 0x30 +mat 2 +refs 4 +31 0.600605428219 0.772481143475 +32 0.537756383419 0.808732867241 +39 0.50633263588 0.808652341366 +24 0.559492111206 0.769924759865 +SURF 0x30 +mat 2 +refs 4 +24 0.559492111206 0.769924759865 +39 0.50633263588 0.808652341366 +37 0.44927740097 0.809792399406 +26 0.46711575985 0.771030068398 +SURF 0x30 +mat 2 +refs 4 +33 0.455821305513 0.525201380253 +30 0.455473095179 0.518463850021 +25 0.438758164644 0.518463850021 +38 0.437887579203 0.525158703327 +SURF 0x30 +mat 2 +refs 4 +38 0.437887579203 0.525158703327 +25 0.438758164644 0.518463850021 +27 0.422043204308 0.518463850021 +36 0.419953852892 0.525116026402 +SURF 0x30 +mat 2 +refs 4 +26 0.46711575985 0.771030068398 +37 0.44927740097 0.809792399406 +34 0.412061452866 0.80841088295 +29 0.405638307333 0.772020041943 +SURF 0x30 +mat 2 +refs 4 +36 0.419953852892 0.525116026402 +27 0.422043204308 0.518463850021 +28 0.388613373041 0.518463850021 +35 0.38408640027 0.525030732155 +SURF 0x30 +mat 2 +refs 4 +29 0.358979851007 0.775249123573 +34 0.358979851007 0.775249123573 +35 0.358979851007 0.775249123573 +28 0.358979851007 0.775249123573 +SURF 0x30 +mat 2 +refs 4 +34 0.359373480082 0.822860062122 +76 0.359373480082 0.822860062122 +75 0.359373480082 0.822860062122 +35 0.359373480082 0.822860062122 +SURF 0x30 +mat 2 +refs 4 +72 0.419953852892 0.525116026402 +36 0.422043204308 0.518463850021 +35 0.388613373041 0.518463850021 +75 0.38408640027 0.525030732155 +SURF 0x30 +mat 2 +refs 4 +37 0.525246620178 0.77130818367 +73 0.500941634178 0.802097022533 +76 0.378444582224 0.8017770648 +34 0.436071872711 0.771053314209 +SURF 0x30 +mat 2 +refs 4 +70 0.437887579203 0.525158703327 +38 0.438758164644 0.518463850021 +36 0.422043204308 0.518463850021 +72 0.419953852892 0.525116026402 +SURF 0x30 +mat 2 +refs 4 +74 0.455821305513 0.525201380253 +33 0.455473095179 0.518463850021 +38 0.438758164644 0.518463850021 +70 0.437887579203 0.525158703327 +SURF 0x30 +mat 2 +refs 4 +39 0.569834053516 0.771435678005 +71 0.562190175056 0.802256941795 +73 0.500941634178 0.802097022533 +37 0.525246620178 0.77130818367 +SURF 0x30 +mat 2 +refs 4 +32 0.61442142725 0.77156317234 +77 0.623438715935 0.802416920662 +71 0.562190175056 0.802256941795 +39 0.569834053516 0.771435678005 +SURF 0x30 +mat 2 +refs 4 +58 0.395501255989 0.808040380478 +41 0.395501255989 0.808040380478 +40 0.395501255989 0.808040380478 +59 0.395501255989 0.808040380478 +SURF 0x30 +mat 2 +refs 4 +41 0.395501255989 0.808040380478 +42 0.395501255989 0.808040380478 +43 0.395501255989 0.808040380478 +40 0.395501255989 0.808040380478 +SURF 0x30 +mat 2 +refs 4 +42 0.399851858616 0.632653355598 +45 0.399851858616 0.632653355598 +44 0.399851858616 0.632653355598 +43 0.399851858616 0.632653355598 +SURF 0x30 +mat 2 +refs 4 +47 0.399851858616 0.632653355598 +49 0.399851858616 0.632653355598 +48 0.399851858616 0.632653355598 +46 0.399851858616 0.632653355598 +SURF 0x30 +mat 2 +refs 4 +52 0.399851858616 0.632653355598 +53 0.399851858616 0.632653355598 +51 0.399851858616 0.632653355598 +50 0.399851858616 0.632653355598 +SURF 0x30 +mat 2 +refs 4 +57 0.399851858616 0.632653355598 +56 0.399851858616 0.632653355598 +55 0.399851858616 0.632653355598 +54 0.399851858616 0.632653355598 +SURF 0x30 +mat 2 +refs 4 +60 0.395501255989 0.808040380478 +61 0.395501255989 0.808040380478 +56 0.395501255989 0.808040380478 +57 0.395501255989 0.808040380478 +SURF 0x30 +mat 2 +refs 4 +58 0.395501255989 0.808040380478 +59 0.395501255989 0.808040380478 +61 0.395501255989 0.808040380478 +60 0.395501255989 0.808040380478 +SURF 0x30 +mat 2 +refs 4 +69 0.61442142725 0.77156317234 +62 0.569834053516 0.771435678005 +71 0.562190175056 0.802256941795 +77 0.623438715935 0.802416920662 +SURF 0x30 +mat 2 +refs 4 +62 0.569834053516 0.771435678005 +64 0.525246620178 0.77130818367 +73 0.500941634178 0.802097022533 +71 0.562190175056 0.802256941795 +SURF 0x30 +mat 2 +refs 4 +74 0.455821305513 0.525201380253 +70 0.437887579203 0.525158703327 +63 0.438758164644 0.518463850021 +68 0.455473095179 0.518463850021 +SURF 0x30 +mat 2 +refs 4 +70 0.437887579203 0.525158703327 +72 0.419953852892 0.525116026402 +65 0.422043204308 0.518463850021 +63 0.438758164644 0.518463850021 +SURF 0x30 +mat 2 +refs 4 +64 0.525246620178 0.77130818367 +67 0.436071872711 0.771053314209 +76 0.378444582224 0.8017770648 +73 0.500941634178 0.802097022533 +SURF 0x30 +mat 2 +refs 4 +72 0.419953852892 0.525116026402 +75 0.38408640027 0.525030732155 +66 0.388613373041 0.518463850021 +65 0.422043204308 0.518463850021 +SURF 0x30 +mat 2 +refs 4 +67 0.359373480082 0.822860062122 +66 0.359373480082 0.822860062122 +75 0.359373480082 0.822860062122 +76 0.359373480082 0.822860062122 +SURF 0x30 +mat 2 +refs 4 +80 0.358979851007 0.775249123573 +81 0.358979851007 0.775249123573 +66 0.358979851007 0.775249123573 +67 0.358979851007 0.775249123573 +SURF 0x30 +mat 2 +refs 4 +65 0.419953852892 0.525116026402 +66 0.38408640027 0.525030732155 +81 0.388613373041 0.518463850021 +82 0.422043204308 0.518463850021 +SURF 0x30 +mat 2 +refs 4 +83 0.46711575985 0.771030068398 +80 0.405638307333 0.772020041943 +67 0.412061452866 0.80841088295 +64 0.44927740097 0.809792399406 +SURF 0x30 +mat 2 +refs 4 +63 0.437887579203 0.525158703327 +65 0.419953852892 0.525116026402 +82 0.422043204308 0.518463850021 +84 0.438758164644 0.518463850021 +SURF 0x30 +mat 2 +refs 4 +68 0.455821305513 0.525201380253 +63 0.437887579203 0.525158703327 +84 0.438758164644 0.518463850021 +79 0.455473095179 0.518463850021 +SURF 0x30 +mat 2 +refs 4 +85 0.559492111206 0.769924759865 +83 0.46711575985 0.771030068398 +64 0.44927740097 0.809792399406 +62 0.50633263588 0.808652341366 +SURF 0x30 +mat 2 +refs 4 +78 0.600605428219 0.772481143475 +85 0.559492111206 0.769924759865 +62 0.50633263588 0.808652341366 +69 0.537756383419 0.808732867241 +SURF 0x30 +mat 2 +refs 4 +93 0.586089074612 0.736006617546 +86 0.556751310825 0.735775589943 +85 0.554466068745 0.767661690712 +78 0.586583197117 0.767892718315 +SURF 0x30 +mat 2 +refs 4 +86 0.556751310825 0.735775589943 +88 0.527413547039 0.73554456234 +83 0.522348940372 0.767430663109 +85 0.554466068745 0.767661690712 +SURF 0x30 +mat 2 +refs 4 +94 0.559036552906 0.703889489174 +96 0.532478153706 0.703658461571 +88 0.527413547039 0.73554456234 +86 0.556751310825 0.735775589943 +SURF 0x30 +mat 2 +refs 4 +79 0.622497081757 0.375451922417 +84 0.561248540878 0.374895095825 +87 0.564221799374 0.314203381538 +92 0.621307790279 0.314203381538 +SURF 0x30 +mat 2 +refs 4 +87 0.564221799374 0.314203381538 +89 0.507135748863 0.314203381538 +97 0.514271497726 0.254068434238 +95 0.567195057869 0.253511667252 +SURF 0x30 +mat 2 +refs 4 +84 0.561248540878 0.374895095825 +82 0.5 0.374338269234 +89 0.507135748863 0.314203381538 +87 0.564221799374 0.314203381538 +SURF 0x30 +mat 2 +refs 4 +88 0.527413547039 0.73554456234 +91 0.468738019466 0.735082447529 +80 0.458114653826 0.766968548298 +83 0.522348940372 0.767430663109 +SURF 0x30 +mat 2 +refs 4 +96 0.532478153706 0.703658461571 +99 0.479361355305 0.70319634676 +91 0.468738019466 0.735082447529 +88 0.527413547039 0.73554456234 +SURF 0x30 +mat 2 +refs 4 +89 0.507135748863 0.314203381538 +90 0.392963767052 0.314203321934 +98 0.408424496651 0.255182027817 +97 0.514271497726 0.254068434238 +SURF 0x30 +mat 2 +refs 4 +82 0.5 0.374338269234 +81 0.377502918243 0.373224675655 +90 0.392963767052 0.314203321934 +89 0.507135748863 0.314203381538 +SURF 0x30 +mat 2 +refs 4 +91 0.458114653826 0.639424204826 +90 0.458114653826 0.639424204826 +81 0.458114653826 0.639424204826 +80 0.458114653826 0.639424204826 +SURF 0x30 +mat 2 +refs 4 +99 0.458114653826 0.639424204826 +110 0.458114653826 0.639424204826 +90 0.458114653826 0.639424204826 +91 0.458114653826 0.639424204826 +SURF 0x30 +mat 2 +refs 4 +108 0.584606766701 0.640348434448 +103 0.563607037067 0.64011734724 +94 0.559036552906 0.703889489174 +101 0.585594952106 0.704120576382 +SURF 0x30 +mat 2 +refs 4 +103 0.563607037067 0.64011734724 +105 0.542607367039 0.639886260033 +96 0.532478153706 0.703658461571 +94 0.559036552906 0.703889489174 +SURF 0x30 +mat 2 +refs 4 +100 0.620118558407 0.25295484066 +95 0.567195057869 0.253511667252 +102 0.573141515255 0.132128179073 +107 0.617740035057 0.130457758904 +SURF 0x30 +mat 2 +refs 4 +95 0.567195057869 0.253511667252 +97 0.514271497726 0.254068434238 +104 0.528543055058 0.133798599243 +102 0.573141515255 0.132128179073 +SURF 0x30 +mat 2 +refs 4 +99 0.479361355305 0.70319634676 +96 0.532478153706 0.703658461571 +105 0.542607367039 0.639886260033 +109 0.500608086586 0.639424204826 +SURF 0x30 +mat 2 +refs 4 +97 0.514271497726 0.254068434238 +98 0.408424496651 0.255182027817 +106 0.439346075058 0.137139439583 +104 0.528543055058 0.133798599243 +SURF 0x30 +mat 2 +refs 4 +109 0.399851858616 0.632653355598 +106 0.399851858616 0.632653355598 +110 0.399851858616 0.632653355598 +99 0.399851858616 0.632653355598 +SURF 0x30 +mat 2 +refs 4 +103 0.399851858616 0.632653355598 +102 0.399851858616 0.632653355598 +104 0.399851858616 0.632653355598 +105 0.399851858616 0.632653355598 +SURF 0x30 +mat 2 +refs 4 +108 0.399851858616 0.632653355598 +107 0.399851858616 0.632653355598 +102 0.399851858616 0.632653355598 +103 0.399851858616 0.632653355598 +SURF 0x30 +mat 2 +refs 4 +105 0.399851858616 0.632653355598 +104 0.399851858616 0.632653355598 +106 0.399851858616 0.632653355598 +109 0.399851858616 0.632653355598 +kids 0 +OBJECT poly +name "horzstab" +data 8 +Mesh.005 +texture "//DSC01758.rgb" +texrep 1 1 +crease 45.000000 +numvert 9 +-0.130157 0.035188 -0.165385 +0.056747 0.048284 -0.165385 +0.056748 0.047968 0.16319 +-0.130232 0.034365 0.16319 +0.056747 0.035473 -0.001098 +-0.130195 0.039586 -0.001098 +0.024135 0.054261 -0.165385 +0.024101 0.054395 0.16319 +-0.031115 0.052716 -0.001098 +numsurf 4 +SURF 0x30 +mat 2 +refs 4 +4 0.528291463852 0.761986076832 +8 0.51858150959 0.76190161705 +7 0.519941926003 0.773422718048 +2 0.52847212553 0.77364385128 +SURF 0x30 +mat 2 +refs 4 +8 0.51858150959 0.76190161705 +5 0.508871614933 0.761817157269 +3 0.51141166687 0.773201584816 +7 0.519941926003 0.773422718048 +SURF 0x30 +mat 2 +refs 4 +6 0.520433187485 0.750243842602 +0 0.512755572796 0.75015938282 +5 0.508871614933 0.761817157269 +8 0.51858150959 0.76190161705 +SURF 0x30 +mat 2 +refs 4 +8 0.51858150959 0.76190161705 +4 0.528291463852 0.761986076832 +1 0.528110802174 0.750328302383 +6 0.520433187485 0.750243842602 +kids 0 diff --git a/conf/simulator/Malolo1/Models/Malolo1.xml b/conf/simulator/Malolo1/Models/Malolo1.xml index f418a12cb2..09144f72eb 100644 --- a/conf/simulator/Malolo1/Models/Malolo1.xml +++ b/conf/simulator/Malolo1/Models/Malolo1.xml @@ -1,103 +1,103 @@ - - - - - Malolo1.ac - - -0.01 - 0.2 - - - - rotate - rhelevon - controls/flight/elevator - 15 - 0 -
- 0.65 - 1.4 - 0.07 -
- - 0.215 - 1 - 0.056 - -
- - - rotate - rhelevon - controls/flight/aileron - -15 - 0 -
- 0.65 - 1.4 - 0.07 -
- - 0.215 - 1 - 0.056 - -
- - - rotate - lhelevon - controls/flight/elevator - 15 - 0 -
- 0.65 - -1.4 - 0.07 -
- - -0.215 - 1 - -0.056 - -
- - - rotate - lhelevon - controls/flight/aileron - 15 - 0 -
- 0.65 - -1.4 - 0.07 -
- - -0.215 - 1 - -0.056 - -
- - - - spin - prop2 - engines/engine/rpm - -0.2 -
- 0 - 0 - 0.0156 -
- - 1 - 0 - 0 - -
- - - -
+ + + + + Malolo1.ac + + -0.01 + 0.2 + + + + rotate + rhelevon + controls/flight/elevator + 15 + 0 +
+ 0.65 + 1.4 + 0.07 +
+ + 0.215 + 1 + 0.056 + +
+ + + rotate + rhelevon + controls/flight/aileron + -15 + 0 +
+ 0.65 + 1.4 + 0.07 +
+ + 0.215 + 1 + 0.056 + +
+ + + rotate + lhelevon + controls/flight/elevator + 15 + 0 +
+ 0.65 + -1.4 + 0.07 +
+ + -0.215 + 1 + -0.056 + +
+ + + rotate + lhelevon + controls/flight/aileron + 15 + 0 +
+ 0.65 + -1.4 + 0.07 +
+ + -0.215 + 1 + -0.056 + +
+ + + + spin + prop2 + engines/engine/rpm + -0.2 +
+ 0 + 0 + 0.0156 +
+ + 1 + 0 + 0 + +
+ + + +
diff --git a/conf/system/udev/rules/1-jtag-rule.rules b/conf/system/udev/rules/1-jtag-rule.rules index 37dc831e1d..8a60e15db4 100644 --- a/conf/system/udev/rules/1-jtag-rule.rules +++ b/conf/system/udev/rules/1-jtag-rule.rules @@ -1,4 +1,4 @@ -SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", -MODE="0666", GROUP="plugdev" - -in the udev rules +SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", +MODE="0666", GROUP="plugdev" + +in the udev rules diff --git a/sw/airborne/arch/lpc21/efsl/conf/config.h b/sw/airborne/arch/lpc21/efsl/conf/config.h index 73d2d4ac78..fcb34982d1 100644 --- a/sw/airborne/arch/lpc21/efsl/conf/config.h +++ b/sw/airborne/arch/lpc21/efsl/conf/config.h @@ -15,7 +15,7 @@ */ /*#define HW_ENDPOINT_LINUX*/ - /*#define HW_ENDPOINT_ATMEGA128_SD*/ + /*#define HW_ENDPOINT_ATMEGA128_SD*/ #define HW_ENDPOINT_LPC2000_SD diff --git a/sw/airborne/arch/lpc21/efsl/inc/interfaces/LPC2000_regs.h b/sw/airborne/arch/lpc21/efsl/inc/interfaces/LPC2000_regs.h index 2f1bca11a4..15d0e973fa 100644 --- a/sw/airborne/arch/lpc21/efsl/inc/interfaces/LPC2000_regs.h +++ b/sw/airborne/arch/lpc21/efsl/inc/interfaces/LPC2000_regs.h @@ -1,72 +1,72 @@ -/* based on LPC213x.h from Keil GmbH (keil.com/arm.com) */ - -#ifndef LPC2000_regs_h -#define LPC2000_regs_h - -/* Pin Connect Block */ -#define PINSEL0 (*((volatile unsigned long *) 0xE002C000)) -#define PINSEL1 (*((volatile unsigned long *) 0xE002C004)) -#define PINSEL2 (*((volatile unsigned long *) 0xE002C014)) - -/* General Purpose Input/Output (GPIO) */ -#define IOPIN0 (*((volatile unsigned long *) 0xE0028000)) -#define IOSET0 (*((volatile unsigned long *) 0xE0028004)) -#define IODIR0 (*((volatile unsigned long *) 0xE0028008)) -#define IOCLR0 (*((volatile unsigned long *) 0xE002800C)) -#define IOPIN1 (*((volatile unsigned long *) 0xE0028010)) -#define IOSET1 (*((volatile unsigned long *) 0xE0028014)) -#define IODIR1 (*((volatile unsigned long *) 0xE0028018)) -#define IOCLR1 (*((volatile unsigned long *) 0xE002801C)) - -/* SPI0 (Serial Peripheral Interface 0) */ -#define S0SPCR (*((volatile unsigned char *) 0xE0020000)) -#define S0SPSR (*((volatile unsigned char *) 0xE0020004)) -#define S0SPDR (*((volatile unsigned char *) 0xE0020008)) -#define S0SPCCR (*((volatile unsigned char *) 0xE002000C)) -#define S0SPTCR (*((volatile unsigned char *) 0xE0020010)) -#define S0SPTSR (*((volatile unsigned char *) 0xE0020014)) -#define S0SPTOR (*((volatile unsigned char *) 0xE0020018)) -#define S0SPINT (*((volatile unsigned char *) 0xE002001C)) - -/* SSP Controller */ -#define SSPCR0 (*((volatile unsigned short* ) 0xE0068000)) -#define SSPCR1 (*((volatile unsigned char * ) 0xE0068004)) -#define SSPDR (*((volatile unsigned short* ) 0xE0068008)) -#define SSPSR (*((volatile unsigned char * ) 0xE006800C)) -#define SSPCPSR (*((volatile unsigned char * ) 0xE0068010)) -#define SSPIMSC (*((volatile unsigned char * ) 0xE0068014)) -#define SSPRIS (*((volatile unsigned char * ) 0xE0068018)) -#define SSPMIS (*((volatile unsigned char * ) 0xE006801C)) -#define SSPICR (*((volatile unsigned char * ) 0xE0068020)) -#define SSPDMACR (*((volatile unsigned char * ) 0xE0068024)) - -/* Real Time Clock */ -/* maybe useful for the efsl time-handling : */ -#define ILR (*((volatile unsigned char *) 0xE0024000)) -#define CTC (*((volatile unsigned short*) 0xE0024004)) -#define CCR (*((volatile unsigned char *) 0xE0024008)) -#define CIIR (*((volatile unsigned char *) 0xE002400C)) -#define AMR (*((volatile unsigned char *) 0xE0024010)) -#define CTIME0 (*((volatile unsigned long *) 0xE0024014)) -#define CTIME1 (*((volatile unsigned long *) 0xE0024018)) -#define CTIME2 (*((volatile unsigned long *) 0xE002401C)) -#define SEC (*((volatile unsigned char *) 0xE0024020)) -#define MIN (*((volatile unsigned char *) 0xE0024024)) -#define HOUR (*((volatile unsigned char *) 0xE0024028)) -#define DOM (*((volatile unsigned char *) 0xE002402C)) -#define DOW (*((volatile unsigned char *) 0xE0024030)) -#define DOY (*((volatile unsigned short*) 0xE0024034)) -#define MONTH (*((volatile unsigned char *) 0xE0024038)) -#define YEAR (*((volatile unsigned short*) 0xE002403C)) -#define ALSEC (*((volatile unsigned char *) 0xE0024060)) -#define ALMIN (*((volatile unsigned char *) 0xE0024064)) -#define ALHOUR (*((volatile unsigned char *) 0xE0024068)) -#define ALDOM (*((volatile unsigned char *) 0xE002406C)) -#define ALDOW (*((volatile unsigned char *) 0xE0024070)) -#define ALDOY (*((volatile unsigned short*) 0xE0024074)) -#define ALMON (*((volatile unsigned char *) 0xE0024078)) -#define ALYEAR (*((volatile unsigned short*) 0xE002407C)) -#define PREINT (*((volatile unsigned short*) 0xE0024080)) -#define PREFRAC (*((volatile unsigned short*) 0xE0024084)) - -#endif +/* based on LPC213x.h from Keil GmbH (keil.com/arm.com) */ + +#ifndef LPC2000_regs_h +#define LPC2000_regs_h + +/* Pin Connect Block */ +#define PINSEL0 (*((volatile unsigned long *) 0xE002C000)) +#define PINSEL1 (*((volatile unsigned long *) 0xE002C004)) +#define PINSEL2 (*((volatile unsigned long *) 0xE002C014)) + +/* General Purpose Input/Output (GPIO) */ +#define IOPIN0 (*((volatile unsigned long *) 0xE0028000)) +#define IOSET0 (*((volatile unsigned long *) 0xE0028004)) +#define IODIR0 (*((volatile unsigned long *) 0xE0028008)) +#define IOCLR0 (*((volatile unsigned long *) 0xE002800C)) +#define IOPIN1 (*((volatile unsigned long *) 0xE0028010)) +#define IOSET1 (*((volatile unsigned long *) 0xE0028014)) +#define IODIR1 (*((volatile unsigned long *) 0xE0028018)) +#define IOCLR1 (*((volatile unsigned long *) 0xE002801C)) + +/* SPI0 (Serial Peripheral Interface 0) */ +#define S0SPCR (*((volatile unsigned char *) 0xE0020000)) +#define S0SPSR (*((volatile unsigned char *) 0xE0020004)) +#define S0SPDR (*((volatile unsigned char *) 0xE0020008)) +#define S0SPCCR (*((volatile unsigned char *) 0xE002000C)) +#define S0SPTCR (*((volatile unsigned char *) 0xE0020010)) +#define S0SPTSR (*((volatile unsigned char *) 0xE0020014)) +#define S0SPTOR (*((volatile unsigned char *) 0xE0020018)) +#define S0SPINT (*((volatile unsigned char *) 0xE002001C)) + +/* SSP Controller */ +#define SSPCR0 (*((volatile unsigned short* ) 0xE0068000)) +#define SSPCR1 (*((volatile unsigned char * ) 0xE0068004)) +#define SSPDR (*((volatile unsigned short* ) 0xE0068008)) +#define SSPSR (*((volatile unsigned char * ) 0xE006800C)) +#define SSPCPSR (*((volatile unsigned char * ) 0xE0068010)) +#define SSPIMSC (*((volatile unsigned char * ) 0xE0068014)) +#define SSPRIS (*((volatile unsigned char * ) 0xE0068018)) +#define SSPMIS (*((volatile unsigned char * ) 0xE006801C)) +#define SSPICR (*((volatile unsigned char * ) 0xE0068020)) +#define SSPDMACR (*((volatile unsigned char * ) 0xE0068024)) + +/* Real Time Clock */ +/* maybe useful for the efsl time-handling : */ +#define ILR (*((volatile unsigned char *) 0xE0024000)) +#define CTC (*((volatile unsigned short*) 0xE0024004)) +#define CCR (*((volatile unsigned char *) 0xE0024008)) +#define CIIR (*((volatile unsigned char *) 0xE002400C)) +#define AMR (*((volatile unsigned char *) 0xE0024010)) +#define CTIME0 (*((volatile unsigned long *) 0xE0024014)) +#define CTIME1 (*((volatile unsigned long *) 0xE0024018)) +#define CTIME2 (*((volatile unsigned long *) 0xE002401C)) +#define SEC (*((volatile unsigned char *) 0xE0024020)) +#define MIN (*((volatile unsigned char *) 0xE0024024)) +#define HOUR (*((volatile unsigned char *) 0xE0024028)) +#define DOM (*((volatile unsigned char *) 0xE002402C)) +#define DOW (*((volatile unsigned char *) 0xE0024030)) +#define DOY (*((volatile unsigned short*) 0xE0024034)) +#define MONTH (*((volatile unsigned char *) 0xE0024038)) +#define YEAR (*((volatile unsigned short*) 0xE002403C)) +#define ALSEC (*((volatile unsigned char *) 0xE0024060)) +#define ALMIN (*((volatile unsigned char *) 0xE0024064)) +#define ALHOUR (*((volatile unsigned char *) 0xE0024068)) +#define ALDOM (*((volatile unsigned char *) 0xE002406C)) +#define ALDOW (*((volatile unsigned char *) 0xE0024070)) +#define ALDOY (*((volatile unsigned short*) 0xE0024074)) +#define ALMON (*((volatile unsigned char *) 0xE0024078)) +#define ALYEAR (*((volatile unsigned short*) 0xE002407C)) +#define PREINT (*((volatile unsigned short*) 0xE0024080)) +#define PREFRAC (*((volatile unsigned short*) 0xE0024084)) + +#endif diff --git a/sw/airborne/arch/lpc21/efsl/inc/interfaces/sd.h b/sw/airborne/arch/lpc21/efsl/inc/interfaces/sd.h index 541937a732..3b5a797f61 100644 --- a/sw/airborne/arch/lpc21/efsl/inc/interfaces/sd.h +++ b/sw/airborne/arch/lpc21/efsl/inc/interfaces/sd.h @@ -1,66 +1,66 @@ -/*****************************************************************************\ -* efs - General purpose Embedded Filesystem library * -* --------------------------------------------------------- * -* * -* Filename : sd.h * -* Revision : Initial developement * -* Description : Headerfile for sd.c * -* * -* This program is free software; you can redistribute it and/or * -* modify it under the terms of the GNU General Public License * -* as published by the Free Software Foundation; version 2 * -* of the License. * - * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* As a special exception, if other files instantiate templates or * -* use macros or inline functions from this file, or you compile this * -* file and link it with other works to produce a work based on this file, * -* this file does not by itself cause the resulting work to be covered * -* by the GNU General Public License. However the source code for this * -* file must still be made available in accordance with section (3) of * -* the GNU General Public License. * -* * -* This exception does not invalidate any other reasons why a work based * -* on this file might be covered by the GNU General Public License. * -* * -* (c)2006 Lennart Yseboodt * -* (c)2006 Michael De Nil * -\*****************************************************************************/ - -#ifndef __SD_H_ -#define __SD_H_ - -#include "config.h" -#include "types.h" -#include "../debug.h" - -#ifdef HW_ENDPOINT_ATMEGA128_SD - #include "interfaces/atmega128.h" -#endif -#ifdef HW_ENDPOINT_DSP_TI6713_SD - #include "interfaces/dsp67xx.h" -#endif -#ifdef HW_ENDPOINT_LPC2000_SD - #include "interfaces/lpc2000_spi.h" -#endif - -#define CMDREAD 17 -#define CMDWRITE 24 -#define CMDREADCSD 9 - -esint8 sd_Init(hwInterface *iface); -void sd_Command(hwInterface *iface,euint8 cmd, euint16 paramx, euint16 paramy); -euint8 sd_Resp8b(hwInterface *iface); -void sd_Resp8bError(hwInterface *iface,euint8 value); -euint16 sd_Resp16b(hwInterface *iface); -esint8 sd_State(hwInterface *iface); - -esint8 sd_readSector(hwInterface *iface,euint32 address,euint8* buf, euint16 len); -esint8 sd_writeSector(hwInterface *iface,euint32 address, euint8* buf); -esint8 sd_getDriveSize(hwInterface *iface, euint32* drive_size ); - -#endif +/*****************************************************************************\ +* efs - General purpose Embedded Filesystem library * +* --------------------------------------------------------- * +* * +* Filename : sd.h * +* Revision : Initial developement * +* Description : Headerfile for sd.c * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; version 2 * +* of the License. * + * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* As a special exception, if other files instantiate templates or * +* use macros or inline functions from this file, or you compile this * +* file and link it with other works to produce a work based on this file, * +* this file does not by itself cause the resulting work to be covered * +* by the GNU General Public License. However the source code for this * +* file must still be made available in accordance with section (3) of * +* the GNU General Public License. * +* * +* This exception does not invalidate any other reasons why a work based * +* on this file might be covered by the GNU General Public License. * +* * +* (c)2006 Lennart Yseboodt * +* (c)2006 Michael De Nil * +\*****************************************************************************/ + +#ifndef __SD_H_ +#define __SD_H_ + +#include "config.h" +#include "types.h" +#include "../debug.h" + +#ifdef HW_ENDPOINT_ATMEGA128_SD + #include "interfaces/atmega128.h" +#endif +#ifdef HW_ENDPOINT_DSP_TI6713_SD + #include "interfaces/dsp67xx.h" +#endif +#ifdef HW_ENDPOINT_LPC2000_SD + #include "interfaces/lpc2000_spi.h" +#endif + +#define CMDREAD 17 +#define CMDWRITE 24 +#define CMDREADCSD 9 + +esint8 sd_Init(hwInterface *iface); +void sd_Command(hwInterface *iface,euint8 cmd, euint16 paramx, euint16 paramy); +euint8 sd_Resp8b(hwInterface *iface); +void sd_Resp8bError(hwInterface *iface,euint8 value); +euint16 sd_Resp16b(hwInterface *iface); +esint8 sd_State(hwInterface *iface); + +esint8 sd_readSector(hwInterface *iface,euint32 address,euint8* buf, euint16 len); +esint8 sd_writeSector(hwInterface *iface,euint32 address, euint8* buf); +esint8 sd_getDriveSize(hwInterface *iface, euint32* drive_size ); + +#endif diff --git a/sw/airborne/arch/lpc21/efsl/src/interfaces/sd.c b/sw/airborne/arch/lpc21/efsl/src/interfaces/sd.c index 90a02b28e9..e9d2938f77 100644 --- a/sw/airborne/arch/lpc21/efsl/src/interfaces/sd.c +++ b/sw/airborne/arch/lpc21/efsl/src/interfaces/sd.c @@ -1,352 +1,352 @@ -/*****************************************************************************\ -* efs - General purpose Embedded Filesystem library * -* --------------------- ----------------------------------- * -* * -* Filename : sd.c * -* Revision : Initial developement * -* Description : This file contains the functions needed to use efs for * -* accessing files on an SD-card. * -* * -* This program is free software; you can redistribute it and/or * -* modify it under the terms of the GNU General Public License * -* as published by the Free Software Foundation; version 2 * -* of the License. * - * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* As a special exception, if other files instantiate templates or * -* use macros or inline functions from this file, or you compile this * -* file and link it with other works to produce a work based on this file, * -* this file does not by itself cause the resulting work to be covered * -* by the GNU General Public License. However the source code for this * -* file must still be made available in accordance with section (3) of * -* the GNU General Public License. * -* * -* This exception does not invalidate any other reasons why a work based * -* on this file might be covered by the GNU General Public License. * -* * -* (c)2006 Lennart Yseboodt * -* (c)2006 Michael De Nil * -\*****************************************************************************/ - -/*****************************************************************************/ -#include "interfaces/sd.h" -/*****************************************************************************/ - -esint8 sd_Init(hwInterface *iface) -{ - esint16 i; - euint8 resp; - - /* Try to send reset command up to 100 times */ - i=100; - do{ - sd_Command(iface,0, 0, 0); - resp=sd_Resp8b(iface); - } - while(resp!=1 && i--); - - if(resp!=1){ - if(resp==0xff){ - return(-1); - } - else{ - sd_Resp8bError(iface,resp); - return(-2); - } - } - - /* Wait till card is ready initialising (returns 0 on CMD1) */ - /* Try up to 32000 times. */ - i=32000; - do{ - sd_Command(iface,1, 0, 0); - - resp=sd_Resp8b(iface); - if(resp!=0) - sd_Resp8bError(iface,resp); - } - while(resp==1 && i--); - - if(resp!=0){ - sd_Resp8bError(iface,resp); - return(-3); - } - - return(0); -} -/*****************************************************************************/ - -void sd_Command(hwInterface *iface,euint8 cmd, euint16 paramx, euint16 paramy) -{ - if_spiSend(iface,0xff); - - if_spiSend(iface,0x40 | cmd); - if_spiSend(iface,(euint8) (paramx >> 8)); /* MSB of parameter x */ - if_spiSend(iface,(euint8) (paramx)); /* LSB of parameter x */ - if_spiSend(iface,(euint8) (paramy >> 8)); /* MSB of parameter y */ - if_spiSend(iface,(euint8) (paramy)); /* LSB of parameter y */ - - if_spiSend(iface,0x95); /* Checksum (should be only valid for first command (0) */ - - if_spiSend(iface,0xff); /* eat empty command - response */ -} -/*****************************************************************************/ - -euint8 sd_Resp8b(hwInterface *iface) -{ - euint8 i; - euint8 resp; - - /* Respone will come after 1 - 8 pings */ - for(i=0;i<8;i++){ - resp = if_spiSend(iface,0xff); - if(resp != 0xff) - return(resp); - } - - return(resp); -} -/*****************************************************************************/ - -euint16 sd_Resp16b(hwInterface *iface) -{ - euint16 resp; - - resp = ( sd_Resp8b(iface) << 8 ) & 0xff00; - resp |= if_spiSend(iface,0xff); - - return(resp); -} -/*****************************************************************************/ - -void sd_Resp8bError(hwInterface *iface,euint8 value) -{ - switch(value) - { - case 0x40: - DBG((TXT("Argument out of bounds.\n"))); - break; - case 0x20: - DBG((TXT("Address out of bounds.\n"))); - break; - case 0x10: - DBG((TXT("Error during erase sequence.\n"))); - break; - case 0x08: - DBG((TXT("CRC failed.\n"))); - break; - case 0x04: - DBG((TXT("Illegal command.\n"))); - break; - case 0x02: - DBG((TXT("Erase reset (see SanDisk docs p5-13).\n"))); - break; - case 0x01: - DBG((TXT("Card is initialising.\n"))); - break; - default: - DBG((TXT("Unknown error 0x%x (see SanDisk docs p5-13).\n"),value)); - break; - } -} -/*****************************************************************************/ - -esint8 sd_State(hwInterface *iface) -{ - eint16 value; - - sd_Command(iface,13, 0, 0); - value=sd_Resp16b(iface); - - switch(value) - { - case 0x000: - return(1); - break; - case 0x0001: - DBG((TXT("Card is Locked.\n"))); - break; - case 0x0002: - DBG((TXT("WP Erase Skip, Lock/Unlock Cmd Failed.\n"))); - break; - case 0x0004: - DBG((TXT("General / Unknown error -- card broken?.\n"))); - break; - case 0x0008: - DBG((TXT("Internal card controller error.\n"))); - break; - case 0x0010: - DBG((TXT("Card internal ECC was applied, but failed to correct the data.\n"))); - break; - case 0x0020: - DBG((TXT("Write protect violation.\n"))); - break; - case 0x0040: - DBG((TXT("An invalid selection, sectors for erase.\n"))); - break; - case 0x0080: - DBG((TXT("Out of Range, CSD_Overwrite.\n"))); - break; - default: - if(value>0x00FF) - sd_Resp8bError(iface,(euint8) (value>>8)); - else - DBG((TXT("Unknown error: 0x%x (see SanDisk docs p5-14).\n"),value)); - break; - } - return(-1); -} -/*****************************************************************************/ - -/* **************************************************************************** - * WAIT ?? -- FIXME - * CMDWRITE - * WAIT - * CARD RESP - * WAIT - * DATA BLOCK OUT - * START BLOCK - * DATA - * CHKS (2B) - * BUSY... - */ - -esint8 sd_writeSector(hwInterface *iface,euint32 address, euint8* buf) -{ - euint32 place; - euint16 i; - euint16 t=0; - - /*DBG((TXT("Trying to write %u to sector %u.\n"),(void *)&buf,address));*/ - place=512*address; - sd_Command(iface,CMDWRITE, (euint16) (place >> 16), (euint16) place); - - sd_Resp8b(iface); /* Card response */ - - if_spiSend(iface,0xfe); /* Start block */ - for(i=0;i<512;i++) - if_spiSend(iface,buf[i]); /* Send data */ - if_spiSend(iface,0xff); /* Checksum part 1 */ - if_spiSend(iface,0xff); /* Checksum part 2 */ - - if_spiSend(iface,0xff); - - while(if_spiSend(iface,0xff)!=0xff){ - t++; - /* Removed NOP */ - } - /*DBG((TXT("Nopp'ed %u times.\n"),t));*/ - - return(0); -} -/*****************************************************************************/ - -/* **************************************************************************** - * WAIT ?? -- FIXME - * CMDCMD - * WAIT - * CARD RESP - * WAIT - * DATA BLOCK IN - * START BLOCK - * DATA - * CHKS (2B) - */ - -esint8 sd_readSector(hwInterface *iface,euint32 address, euint8* buf, euint16 len) -{ - euint8 cardresp; - euint8 firstblock; - euint8 c; - euint16 fb_timeout=0xffff; - euint32 i; - euint32 place; - - /*DBG((TXT("sd_readSector::Trying to read sector %u and store it at %p.\n"),address,&buf[0]));*/ - place=512*address; - sd_Command(iface,CMDREAD, (euint16) (place >> 16), (euint16) place); - - cardresp=sd_Resp8b(iface); /* Card response */ - - /* Wait for startblock */ - do - firstblock=sd_Resp8b(iface); - while(firstblock==0xff && fb_timeout--); - - if(cardresp!=0x00 || firstblock!=0xfe){ - sd_Resp8bError(iface,firstblock); - return(-1); - } - - for(i=0;i<512;i++){ - c = if_spiSend(iface,0xff); - if(i>6; +/*****************************************************************************\ +* efs - General purpose Embedded Filesystem library * +* --------------------- ----------------------------------- * +* * +* Filename : sd.c * +* Revision : Initial developement * +* Description : This file contains the functions needed to use efs for * +* accessing files on an SD-card. * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; version 2 * +* of the License. * + * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* As a special exception, if other files instantiate templates or * +* use macros or inline functions from this file, or you compile this * +* file and link it with other works to produce a work based on this file, * +* this file does not by itself cause the resulting work to be covered * +* by the GNU General Public License. However the source code for this * +* file must still be made available in accordance with section (3) of * +* the GNU General Public License. * +* * +* This exception does not invalidate any other reasons why a work based * +* on this file might be covered by the GNU General Public License. * +* * +* (c)2006 Lennart Yseboodt * +* (c)2006 Michael De Nil * +\*****************************************************************************/ -DBG((TXT(" c_size %d"), c_size)); - - by= iob[5] & 0x0F; - read_bl_len = 1; - read_bl_len <<= by; +/*****************************************************************************/ +#include "interfaces/sd.h" +/*****************************************************************************/ -DBG((TXT(" read_bl_len %d"), read_bl_len)); - - by=iob[9] & 0x03; - by <<= 1; - by += iob[10] >> 7; +esint8 sd_Init(hwInterface *iface) +{ + esint16 i; + euint8 resp; + + /* Try to send reset command up to 100 times */ + i=100; + do{ + sd_Command(iface,0, 0, 0); + resp=sd_Resp8b(iface); + } + while(resp!=1 && i--); + + if(resp!=1){ + if(resp==0xff){ + return(-1); + } + else{ + sd_Resp8bError(iface,resp); + return(-2); + } + } -DBG((TXT(" by %d"), by)); - - c_size_mult = 1; + /* Wait till card is ready initialising (returns 0 on CMD1) */ + /* Try up to 32000 times. */ + i=32000; + do{ + sd_Command(iface,1, 0, 0); + + resp=sd_Resp8b(iface); + if(resp!=0) + sd_Resp8bError(iface,resp); + } + while(resp==1 && i--); + + if(resp!=0){ + sd_Resp8bError(iface,resp); + return(-3); + } + + return(0); +} +/*****************************************************************************/ + +void sd_Command(hwInterface *iface,euint8 cmd, euint16 paramx, euint16 paramy) +{ + if_spiSend(iface,0xff); + + if_spiSend(iface,0x40 | cmd); + if_spiSend(iface,(euint8) (paramx >> 8)); /* MSB of parameter x */ + if_spiSend(iface,(euint8) (paramx)); /* LSB of parameter x */ + if_spiSend(iface,(euint8) (paramy >> 8)); /* MSB of parameter y */ + if_spiSend(iface,(euint8) (paramy)); /* LSB of parameter y */ + + if_spiSend(iface,0x95); /* Checksum (should be only valid for first command (0) */ + + if_spiSend(iface,0xff); /* eat empty command - response */ +} +/*****************************************************************************/ + +euint8 sd_Resp8b(hwInterface *iface) +{ + euint8 i; + euint8 resp; + + /* Respone will come after 1 - 8 pings */ + for(i=0;i<8;i++){ + resp = if_spiSend(iface,0xff); + if(resp != 0xff) + return(resp); + } + + return(resp); +} +/*****************************************************************************/ + +euint16 sd_Resp16b(hwInterface *iface) +{ + euint16 resp; + + resp = ( sd_Resp8b(iface) << 8 ) & 0xff00; + resp |= if_spiSend(iface,0xff); + + return(resp); +} +/*****************************************************************************/ + +void sd_Resp8bError(hwInterface *iface,euint8 value) +{ + switch(value) + { + case 0x40: + DBG((TXT("Argument out of bounds.\n"))); + break; + case 0x20: + DBG((TXT("Address out of bounds.\n"))); + break; + case 0x10: + DBG((TXT("Error during erase sequence.\n"))); + break; + case 0x08: + DBG((TXT("CRC failed.\n"))); + break; + case 0x04: + DBG((TXT("Illegal command.\n"))); + break; + case 0x02: + DBG((TXT("Erase reset (see SanDisk docs p5-13).\n"))); + break; + case 0x01: + DBG((TXT("Card is initialising.\n"))); + break; + default: + DBG((TXT("Unknown error 0x%x (see SanDisk docs p5-13).\n"),value)); + break; + } +} +/*****************************************************************************/ + +esint8 sd_State(hwInterface *iface) +{ + eint16 value; + + sd_Command(iface,13, 0, 0); + value=sd_Resp16b(iface); + + switch(value) + { + case 0x000: + return(1); + break; + case 0x0001: + DBG((TXT("Card is Locked.\n"))); + break; + case 0x0002: + DBG((TXT("WP Erase Skip, Lock/Unlock Cmd Failed.\n"))); + break; + case 0x0004: + DBG((TXT("General / Unknown error -- card broken?.\n"))); + break; + case 0x0008: + DBG((TXT("Internal card controller error.\n"))); + break; + case 0x0010: + DBG((TXT("Card internal ECC was applied, but failed to correct the data.\n"))); + break; + case 0x0020: + DBG((TXT("Write protect violation.\n"))); + break; + case 0x0040: + DBG((TXT("An invalid selection, sectors for erase.\n"))); + break; + case 0x0080: + DBG((TXT("Out of Range, CSD_Overwrite.\n"))); + break; + default: + if(value>0x00FF) + sd_Resp8bError(iface,(euint8) (value>>8)); + else + DBG((TXT("Unknown error: 0x%x (see SanDisk docs p5-14).\n"),value)); + break; + } + return(-1); +} +/*****************************************************************************/ + +/* **************************************************************************** + * WAIT ?? -- FIXME + * CMDWRITE + * WAIT + * CARD RESP + * WAIT + * DATA BLOCK OUT + * START BLOCK + * DATA + * CHKS (2B) + * BUSY... + */ + +esint8 sd_writeSector(hwInterface *iface,euint32 address, euint8* buf) +{ + euint32 place; + euint16 i; + euint16 t=0; + + /*DBG((TXT("Trying to write %u to sector %u.\n"),(void *)&buf,address));*/ + place=512*address; + sd_Command(iface,CMDWRITE, (euint16) (place >> 16), (euint16) place); + + sd_Resp8b(iface); /* Card response */ + + if_spiSend(iface,0xfe); /* Start block */ + for(i=0;i<512;i++) + if_spiSend(iface,buf[i]); /* Send data */ + if_spiSend(iface,0xff); /* Checksum part 1 */ + if_spiSend(iface,0xff); /* Checksum part 2 */ + + if_spiSend(iface,0xff); + + while(if_spiSend(iface,0xff)!=0xff){ + t++; + /* Removed NOP */ + } + /*DBG((TXT("Nopp'ed %u times.\n"),t));*/ + + return(0); +} +/*****************************************************************************/ + +/* **************************************************************************** + * WAIT ?? -- FIXME + * CMDCMD + * WAIT + * CARD RESP + * WAIT + * DATA BLOCK IN + * START BLOCK + * DATA + * CHKS (2B) + */ + +esint8 sd_readSector(hwInterface *iface,euint32 address, euint8* buf, euint16 len) +{ + euint8 cardresp; + euint8 firstblock; + euint8 c; + euint16 fb_timeout=0xffff; + euint32 i; + euint32 place; + + /*DBG((TXT("sd_readSector::Trying to read sector %u and store it at %p.\n"),address,&buf[0]));*/ + place=512*address; + sd_Command(iface,CMDREAD, (euint16) (place >> 16), (euint16) place); + + cardresp=sd_Resp8b(iface); /* Card response */ + + /* Wait for startblock */ + do + firstblock=sd_Resp8b(iface); + while(firstblock==0xff && fb_timeout--); + + if(cardresp!=0x00 || firstblock!=0xfe){ + sd_Resp8bError(iface,firstblock); + return(-1); + } + + for(i=0;i<512;i++){ + c = if_spiSend(iface,0xff); + if(i>6; + +DBG((TXT(" c_size %d"), c_size)); + + by= iob[5] & 0x0F; + read_bl_len = 1; + read_bl_len <<= by; + +DBG((TXT(" read_bl_len %d"), read_bl_len)); + + by=iob[9] & 0x03; + by <<= 1; + by += iob[10] >> 7; + +DBG((TXT(" by %d"), by)); + + c_size_mult = 1; c_size_mult <<= (2+by); - -DBG((TXT(" c_size_mult %d"), c_size_mult)); - - *drive_size = (euint32)(c_size+1) * (euint32)c_size_mult * (euint32)read_bl_len; - - return 0; -} + +DBG((TXT(" c_size_mult %d"), c_size_mult)); + + *drive_size = (euint32)(c_size+1) * (euint32)c_size_mult * (euint32)read_bl_len; + + return 0; +} diff --git a/sw/airborne/firmwares/helper/arduimu_Firmware_WithGps/arduimu/ADC.pde b/sw/airborne/firmwares/helper/arduimu_Firmware_WithGps/arduimu/ADC.pde index 69926b91c8..6f78acfdf1 100644 --- a/sw/airborne/firmwares/helper/arduimu_Firmware_WithGps/arduimu/ADC.pde +++ b/sw/airborne/firmwares/helper/arduimu_Firmware_WithGps/arduimu/ADC.pde @@ -92,4 +92,4 @@ ISR(ADC_vect) ADMUX = (analog_reference << 6) | MuxSel; // start the conversion ADCSRA|= (1<. - * - */ - -#ifndef AHRS_ASSERTIONS_HPP -#define AHRS_ASSERTIONS_HPP - -#include -#include - -template -bool hasNaN(const MatrixBase& expr); - -template -bool hasInf(const MatrixBase& expr); - -template -bool hasNaN(const MatrixBase& expr) -{ - for (int j = 0; j != expr.cols(); ++j) { - for (int i = 0; i != expr.rows(); ++i) { - if (std::isnan(expr.coeff(i, j))) - return true; - } - } - return false; -} - -template -bool hasInf(const MatrixBase& expr) -{ - for (int i = 0; i != expr.cols(); ++i) { - for (int j = 0; j != expr.rows(); ++j) { - if (std::isinf(expr.coeff(j, i))) - return true; - } - } - return false; -} - -template -bool isReal(const MatrixBase& exp) -{ - return !hasNaN(exp) && ! hasInf(exp); -} - -#endif /* ASSERTIONS_HPP_ */ +/* + * assertions.hpp + * + * Created on: Aug 6, 2009 + * Author: Jonathan Brandmeyer + * + * This file is part of libeknav. + * + * Libeknav is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * Libeknav is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with libeknav. If not, see . + * + */ + +#ifndef AHRS_ASSERTIONS_HPP +#define AHRS_ASSERTIONS_HPP + +#include +#include + +template +bool hasNaN(const MatrixBase& expr); + +template +bool hasInf(const MatrixBase& expr); + +template +bool hasNaN(const MatrixBase& expr) +{ + for (int j = 0; j != expr.cols(); ++j) { + for (int i = 0; i != expr.rows(); ++i) { + if (std::isnan(expr.coeff(i, j))) + return true; + } + } + return false; +} + +template +bool hasInf(const MatrixBase& expr) +{ + for (int i = 0; i != expr.cols(); ++i) { + for (int j = 0; j != expr.rows(); ++j) { + if (std::isinf(expr.coeff(j, i))) + return true; + } + } + return false; +} + +template +bool isReal(const MatrixBase& exp) +{ + return !hasNaN(exp) && ! hasInf(exp); +} + +#endif /* ASSERTIONS_HPP_ */ diff --git a/sw/airborne/fms/libeknav/basic_ins_qkf.cpp b/sw/airborne/fms/libeknav/basic_ins_qkf.cpp index 81cdaa259f..4f42e5b889 100644 --- a/sw/airborne/fms/libeknav/basic_ins_qkf.cpp +++ b/sw/airborne/fms/libeknav/basic_ins_qkf.cpp @@ -1,154 +1,154 @@ -/* - * basic_ins_qkf.cpp - * - * Created on: Aug 11, 2009 - * Author: Jonathan Brandmeyer - * This file is part of libeknav. - * - * Libeknav is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3. - * - * Libeknav is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with libeknav. If not, see . - * - */ - -#include "ins_qkf.hpp" -#include "assertions.hpp" - -using namespace Eigen; - -basic_ins_qkf::basic_ins_qkf( - const Vector3d& estimate, - double pos_error, double bias_error, double v_error, - const Vector3d& gyro_white_noise, - const Vector3d& gyro_stability_noise, - const Vector3d& accel_white_noise, - Quaterniond initial_orientation, // this is new - const Vector3d& vel_estimate) - : gyro_stability_noise(gyro_stability_noise) - , gyro_white_noise(gyro_white_noise) - , accel_white_noise(accel_white_noise) -{ - avg_state.position = estimate; - avg_state.gyro_bias = Vector3d::Zero(); - //avg_state.orientation = Quaterniond::Identity(); - avg_state.orientation = initial_orientation; - avg_state.velocity = vel_estimate; - - cov << Matrix3d::Identity()*bias_error*bias_error, Matrix::Zero(), - Matrix3d::Zero(), Matrix3d::Identity()*M_PI*M_PI*0.5, Matrix::Zero(), - Matrix::Zero(), Matrix3d::Identity()*pos_error*pos_error, Matrix3d::Zero(), - Matrix::Zero(), Matrix3d::Identity()*v_error*v_error; - assert(is_real()); -} - -void -basic_ins_qkf::counter_rotate_cov(const Quaterniond&) -{ - // Rotate the principle axes of the angular error covariance by the - // mean update. - - // TODO: This is only required in the case that the system covariance is - // right-multiplied by the mean. The current design left-multiplies the - // covariance by the mean. - return; - - // TODO: There should be an expression that makes both this matrix's - // construction and multiplication much more efficient. - // Matrix counter_rot = Matrix::Identity(); - // counter_rot.block<3, 3>(3, 3) = update.cast().conjugate().toRotationMatrix(); - // cov = (counter_rot * cov.cast() * counter_rot.transpose()).cast(); -} -#if 0 -basic_ins_qkf::state -basic_ins_qkf::average_sigma_points(const std::vector >& points) -{ - state ret; - Vector3d sum; -#define avg_vector_field(field) \ - sum = Vector3d::Zero(); \ - for (auto i = points.begin(), end = points.end(); i != end; ++i) { \ - sum += i->field; \ - } \ - ret.field = sum / points.size() - - avg_vector_field(gyro_bias); - avg_vector_field(velocity); - - Vector3d p_sum = Vector3d::Zero(); - for (auto i = points.begin(), end = points.end(); i != end; ++i) { - p_sum += i->position; - } - ret.position = p_sum / (double)points.size(); - - std::vector quat_points; - quat_points.reserve(points.size()); - for (auto i = points.begin(), end = points.end(); i != end; ++i) { - quat_points.push_back(i->orientation); - } - ret.orientation = quaternion_avg_johnson(quat_points).normalized(); - return ret; -} -#endif - -bool -basic_ins_qkf::is_real(void) const -{ - return !(hasNaN(cov) || hasInf(cov)) && avg_state.is_real(); -} - -Quaterniond -basic_ins_qkf::state::apply_kalman_vec_update(const Matrix update) -{ - // std::cout << "***update available***\n" - // << "\tstate: "; print(std::cout); - // std::cout << "\n\tupdate: " << update.transpose() << "\n"; - gyro_bias += update.segment<3>(0); - Quaterniond posterior_update = exp(update.segment<3>(3)); - orientation = (orientation * posterior_update).normalized(); - position += update.segment<3>(6); - velocity += update.segment<3>(9); - assert(is_real()); - return posterior_update; -} - -#if 0 -Quaterniond -basic_ins_qkf::state::apply_left_kalman_vec_update(const Matrix update) -{ - // std::cout << "***update available***\n" - // << "\tstate: "; print(std::cout); - // std::cout << "\n\tupdate: " << update.transpose() << "\n"; - gyro_bias += update.segment<3>(0); - Quaterniond posterior_update = exp(update.segment<3>(3)); - orientation = (posterior_update * orientation).normalized(); - position += update.segment<3>(6); - velocity += update.segment<3>(9); - assert(is_real()); - return posterior_update; -} -#endif - -bool -basic_ins_qkf::state::has_nan(void)const -{ - return hasNaN(gyro_bias) || hasNaN(orientation.coeffs()) - || hasNaN(position) || hasNaN(velocity); -} - -bool -basic_ins_qkf::state::is_real(void) const -{ - return !(hasNaN(gyro_bias) || hasNaN(orientation.coeffs()) - || hasNaN(position) || hasNaN(velocity)) - && !(hasInf(gyro_bias) || hasInf(orientation.coeffs()) - || hasInf(position) || hasInf(velocity)); -} - +/* + * basic_ins_qkf.cpp + * + * Created on: Aug 11, 2009 + * Author: Jonathan Brandmeyer + * This file is part of libeknav. + * + * Libeknav is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * Libeknav is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with libeknav. If not, see . + * + */ + +#include "ins_qkf.hpp" +#include "assertions.hpp" + +using namespace Eigen; + +basic_ins_qkf::basic_ins_qkf( + const Vector3d& estimate, + double pos_error, double bias_error, double v_error, + const Vector3d& gyro_white_noise, + const Vector3d& gyro_stability_noise, + const Vector3d& accel_white_noise, + Quaterniond initial_orientation, // this is new + const Vector3d& vel_estimate) + : gyro_stability_noise(gyro_stability_noise) + , gyro_white_noise(gyro_white_noise) + , accel_white_noise(accel_white_noise) +{ + avg_state.position = estimate; + avg_state.gyro_bias = Vector3d::Zero(); + //avg_state.orientation = Quaterniond::Identity(); + avg_state.orientation = initial_orientation; + avg_state.velocity = vel_estimate; + + cov << Matrix3d::Identity()*bias_error*bias_error, Matrix::Zero(), + Matrix3d::Zero(), Matrix3d::Identity()*M_PI*M_PI*0.5, Matrix::Zero(), + Matrix::Zero(), Matrix3d::Identity()*pos_error*pos_error, Matrix3d::Zero(), + Matrix::Zero(), Matrix3d::Identity()*v_error*v_error; + assert(is_real()); +} + +void +basic_ins_qkf::counter_rotate_cov(const Quaterniond&) +{ + // Rotate the principle axes of the angular error covariance by the + // mean update. + + // TODO: This is only required in the case that the system covariance is + // right-multiplied by the mean. The current design left-multiplies the + // covariance by the mean. + return; + + // TODO: There should be an expression that makes both this matrix's + // construction and multiplication much more efficient. + // Matrix counter_rot = Matrix::Identity(); + // counter_rot.block<3, 3>(3, 3) = update.cast().conjugate().toRotationMatrix(); + // cov = (counter_rot * cov.cast() * counter_rot.transpose()).cast(); +} +#if 0 +basic_ins_qkf::state +basic_ins_qkf::average_sigma_points(const std::vector >& points) +{ + state ret; + Vector3d sum; +#define avg_vector_field(field) \ + sum = Vector3d::Zero(); \ + for (auto i = points.begin(), end = points.end(); i != end; ++i) { \ + sum += i->field; \ + } \ + ret.field = sum / points.size() + + avg_vector_field(gyro_bias); + avg_vector_field(velocity); + + Vector3d p_sum = Vector3d::Zero(); + for (auto i = points.begin(), end = points.end(); i != end; ++i) { + p_sum += i->position; + } + ret.position = p_sum / (double)points.size(); + + std::vector quat_points; + quat_points.reserve(points.size()); + for (auto i = points.begin(), end = points.end(); i != end; ++i) { + quat_points.push_back(i->orientation); + } + ret.orientation = quaternion_avg_johnson(quat_points).normalized(); + return ret; +} +#endif + +bool +basic_ins_qkf::is_real(void) const +{ + return !(hasNaN(cov) || hasInf(cov)) && avg_state.is_real(); +} + +Quaterniond +basic_ins_qkf::state::apply_kalman_vec_update(const Matrix update) +{ + // std::cout << "***update available***\n" + // << "\tstate: "; print(std::cout); + // std::cout << "\n\tupdate: " << update.transpose() << "\n"; + gyro_bias += update.segment<3>(0); + Quaterniond posterior_update = exp(update.segment<3>(3)); + orientation = (orientation * posterior_update).normalized(); + position += update.segment<3>(6); + velocity += update.segment<3>(9); + assert(is_real()); + return posterior_update; +} + +#if 0 +Quaterniond +basic_ins_qkf::state::apply_left_kalman_vec_update(const Matrix update) +{ + // std::cout << "***update available***\n" + // << "\tstate: "; print(std::cout); + // std::cout << "\n\tupdate: " << update.transpose() << "\n"; + gyro_bias += update.segment<3>(0); + Quaterniond posterior_update = exp(update.segment<3>(3)); + orientation = (posterior_update * orientation).normalized(); + position += update.segment<3>(6); + velocity += update.segment<3>(9); + assert(is_real()); + return posterior_update; +} +#endif + +bool +basic_ins_qkf::state::has_nan(void)const +{ + return hasNaN(gyro_bias) || hasNaN(orientation.coeffs()) + || hasNaN(position) || hasNaN(velocity); +} + +bool +basic_ins_qkf::state::is_real(void) const +{ + return !(hasNaN(gyro_bias) || hasNaN(orientation.coeffs()) + || hasNaN(position) || hasNaN(velocity)) + && !(hasInf(gyro_bias) || hasInf(orientation.coeffs()) + || hasInf(position) || hasInf(velocity)); +} + diff --git a/sw/airborne/fms/libeknav/ins_qkf.hpp b/sw/airborne/fms/libeknav/ins_qkf.hpp index 1fcc1f98aa..489d5592d9 100644 --- a/sw/airborne/fms/libeknav/ins_qkf.hpp +++ b/sw/airborne/fms/libeknav/ins_qkf.hpp @@ -1,312 +1,312 @@ -#ifndef AHRS_INS_QKF_HPP -#define AHRS_INS_QKF_HPP -/* - * ins_qkf.cpp - * - * Author: Jonathan Brandmeyer - * - * This file is part of libeknav. - * - * Libeknav is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3. - * - * Libeknav is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with libeknav. If not, see . - */ - -//#include "sigma_points.hpp" -#include "quaternions.hpp" -#include - -#define BARO_CENTER_OF_MASS 1 - -using Eigen::Vector3f; -using Eigen::Vector3d; -using Eigen::Vector2d; -using Eigen::Quaterniond; -using Eigen::Matrix; -using Eigen::aligned_allocator; - - -struct basic_ins_qkf -{ - EIGEN_MAKE_ALIGNED_OPERATOR_NEW - /// The maximum number of satellites that may be tracked by the filter - static const size_t max_sv = 12; - /** - * The covariance of the zero-mean gaussian white noise that is added to - * the gyro bias at each time step. This value is treated as a diagonal - * matrix, in units of radians^2/second^2. - */ - const Vector3d gyro_stability_noise; - - /** - * The covariance of the zero-mean gaussian white noise that is added to - * the gyro measurement at each time step, in rad^2/second^2 - */ - const Vector3d gyro_white_noise; - - /** - * The covariance of the zero-mean gaussian white noise that is added to - * the accelerometer measurement at each time step, in (m/s/s)^2 - */ - const Vector3d accel_white_noise; - - /** - * A term for the basic state of the system - */ - struct state - { - EIGEN_MAKE_ALIGNED_OPERATOR_NEW - typedef std::vector > container_t; - - /** - * Construct a state variable from mean and error terms - * @param mean The average state - * @param error An error vector of length 12 or greater - */ - template - state(const state& mean, const Vector_T& error) - : gyro_bias(mean.gyro_bias + error.template segment<3>(0)) - , orientation(mean.orientation * exp(error.template segment<3>(3))) - , position(mean.position + error.template segment<3>(6).template cast()) - , velocity(mean.velocity + error.template segment<3>(9)) - { - assert(!has_nan()); - } - -#if 0 - template - state(const state& mean, const Vector_T& error, bool) - : gyro_bias(mean.gyro_bias + error.segment(0, 3)) - , orientation(mean.orientation * exp(error.segment(3, 3))) - , position(mean.position + error.segment(6, 3).template cast()) - , velocity(mean.velocity + error.segment(9, 3)) - { - assert(!has_nan()); - } -#endif - /** - * Default-construct an undefined state object. - * @return - */ - state(){} - - /** - * Provided a kalman update vector, apply the vector as an offset to this - * state. - * @param update A 12-vector to be applied - * @return The rotation applied to the mean orientation - */ - Quaterniond apply_kalman_vec_update(const Matrix update); - Quaterniond apply_left_kalman_vec_update(const Matrix update); - - /** - * An estimate of the bias error in the rate gyros, in radians/second - */ - Vector3d gyro_bias; - - /** - * An estimate of the orientation of the vehicle. This quaternion represents - * a transformation from ECEF coordinates to the vehicle body frame. - */ - Quaterniond orientation; - - /// Position in Earth-centered Earth-fixed reference frame, in meters - Vector3d position; - - /// Velocity in Earth-centered Earth-fixed reference frame, in m/s - Vector3d velocity; - - /** - * @return True if the state vector contains any NaNs - */ - bool has_nan(void) const; - - /** - * @return True if the state vector does not contain any NaNs or Infs - */ - bool is_real(void) const; - - /** - * Print a representation of this object to the stream str. - * @param str An output stream. - */ - void print(std::ostream& str); - }; - - /// The average state of the filter at any time t. - state avg_state; - - /// Covariance term. Elements are ordered exactly as in struct state - Matrix cov; - - /** - * Initialize a new basic INS QKF - * @param pos_estimate Initial estimate of the position - * @param pos_error one-sigma initial bounds for position error - * @param bias_error one-sigma initial bounds for bias error in the gyros - * @param v_error one-sigma bounds for velocity error (initial v == 0) - * @param gyro_white_noise The diagonal matrix of gyro white noise - * @param gyro_stability_noise The diagonal matrix of gyro instability noise - * @param accel_white_noise The diagonal matrix of accelerometer white noise - */ - //Old one without orientation_init() - basic_ins_qkf(const Vector3d& pos_estimate, - double pos_error, double bias_error, double v_error, - const Vector3d& gyro_white_noise, - const Vector3d& gyro_stability_noise, - const Vector3d& accel_white_noise, - Quaterniond initial_orientation = Quaterniond::Identity(), - const Vector3d& vel_estimate = Vector3d::Zero()); - - - /* //Old one without orientation_init() - basic_ins_qkf(const Vector3d& pos_estimate, - double pos_error, double bias_error, double v_error, - const Vector3d& gyro_white_noise, - const Vector3d& gyro_stability_noise, - const Vector3d& accel_white_noise, - const Vector3d& vel_estimate = Vector3d::Zero()); - */ - /** - * Report an INS observation, to propagate the filter forward by one time - * step. The coordinate system is maintained in ECEF coordinates. - * TODO: Provide a workspace parameter for storage that should be - * carried forward to an observation function carried out in this - * time step. - * @param gyro_meas The measured angular velocity, in rad/sec - * @param accel_meas The measured inertial reference frame acceleration, in m/s - * @param dt The elapsed time since the last measurement, in seconds. - */ - void predict(const Vector3d& gyro_meas, const Vector3d& accel_meas, double dt); - - /** - * Report an INS observation, to propagate the filter forward by one time - * step. This function differs from predict() in that it uses the NED frame - * instead of the ECEF frame. - */ - void predict_ned(const Vector3d& gyro_meas, const Vector3d& accel_meas, double dt); - - /** - * Make a single vector observation, with some angular uncertainty. - * Warning: only one of obs_vector or obs_gps_pv_report can be called - * after a single call to predict(). - * @param ref Reference vector, when the orientation is the identity. - * Must be a unit vector. - * @param obs Vector observation, should not be a unit vector - * @param error one-sigma squared magnitude error in the observation - */ - void obs_vector(const Vector3d& ref, const Vector3d& obs, double error); - - /** - * Incorporate a GPS PVT report. - * @param pos The sensor position, in earth-centered, earth-fixed coords, meters - * @param vel The sensor velocity, in meters/second - * @param p_error The RMS position error, (m)^2 - * @param v_error The RMS velocity error, (m/s)^2 - */ - void obs_gps_pv_report(const Vector3d& pos, const Vector3d& vel, const Vector3d& p_error, const Vector3d v_error); - - /** - * Incorporate a GPS position report, in either ECEF or NED coordinates. - * @param pos The position, in meters - * @param p_error The position error, in meters. - */ - void obs_gps_p_report(const Vector3d& pos, const Vector3d& p_error); - - /** - * Incoporate a barometer report, the altitude should be ein ENU coordinates (Up=Positive) - * It's also necessary to provide the ECEF2ENU matrix. - * @param altitude The altitude, in meters - * @param baro_error, The altitude error, in meters - * @param ecef2enu, The rotational martrix form ECEF to ENU - * @param pos_0, the position where ENU would be (0, 0, 0). - */ - #if BARO_CENTER_OF_MASS - void obs_baro_report(double altitude, double baro_error); - #else - void obs_baro_report(double altitude, double baro_error, Matrix ecef2enu, const Vector3d& pos_0); - #endif - - /** - * Incorporate a GPS velocity report, in ECEF 3d coordinates. - * @param vel The 3d velocity, relative to the fixed earth frame, in (m/s). - * @param v_error The one-sigma RMS velocity error (m/s)^2 - */ - void obs_gps_v_report(const Vector3d& vel, const Vector3d& v_error); - - /** - * Observe a GPS vector track over ground report, in north-east-down coordinates - * @param vel The 2d velocity value, parallel to the ground, in m/s - * @param v_error The one-sigma RMS velocity error (m/s)^2 - */ - void obs_gps_vtg_report(const Vector2d vel, const double v_error); - - /** - * Directly observe the gyro sensor bias. In practice, we cannot do this. However, - * the true bias is not a random walk. It tends to return towards zero when it is - * farther away from zero (not temperature dependent). Therefore, we can - * incorporate this extra knowledge through a periodic "observation" of zero - * bias with a large error. - * - * Use with extreme caution. It is almost certainly better to just clamp the - * bias term after making an observation. - * - * @param bias The observed bias, in radians/sec - * @param bias_error The one-sigma estimate of the gyro bias error, in radians/sec - */ - void obs_gyro_bias(const Vector3d& bias, const Vector3d& bias_error); - - /** - * Measure the total angular error between the filter's attitude estimate - * and some other orientation. - * @param orientation The attitude to compare against - * @return The angular difference between them, in radians - */ - double angular_error(const Quaterniond& orientation) const; - - /** - * Measure the total gyro bias error between the filter's estimate and - * some other bias - * @param gyro_bias The gyro bias vector to compare against - * @return The vector difference between them, in radians/second - */ - double gyro_bias_error(const Vector3d& gyro_bias) const; - - /** - * Determine the statistical distance between an example sample point - * and the distribution computed by the estimator. - */ - double mahalanobis_distance(const state& sample) const; - -private: - - /** - * The type of an error term between two state vectors. - */ - typedef Eigen::Matrix state_error_t; - /// Compute the error difference between a sigma point and the mean as: point - mean - state_error_t sigma_point_difference(const state& mean, const state& point) const; - - -public: - /** Perform the posterior counter-rotation of the covariance matrix by - the update that gets applied to the estimated state. - */ - void counter_rotate_cov(const Quaterniond& update); - - /** - * Verify that the covariance and average state are niether NaN nor Inf - * @return True, iff no element in the covariance or mean are NaN or Inf - */ - bool is_real(void) const; -}; - -#endif +#ifndef AHRS_INS_QKF_HPP +#define AHRS_INS_QKF_HPP +/* + * ins_qkf.cpp + * + * Author: Jonathan Brandmeyer + * + * This file is part of libeknav. + * + * Libeknav is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * Libeknav is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with libeknav. If not, see . + */ + +//#include "sigma_points.hpp" +#include "quaternions.hpp" +#include + +#define BARO_CENTER_OF_MASS 1 + +using Eigen::Vector3f; +using Eigen::Vector3d; +using Eigen::Vector2d; +using Eigen::Quaterniond; +using Eigen::Matrix; +using Eigen::aligned_allocator; + + +struct basic_ins_qkf +{ + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + /// The maximum number of satellites that may be tracked by the filter + static const size_t max_sv = 12; + /** + * The covariance of the zero-mean gaussian white noise that is added to + * the gyro bias at each time step. This value is treated as a diagonal + * matrix, in units of radians^2/second^2. + */ + const Vector3d gyro_stability_noise; + + /** + * The covariance of the zero-mean gaussian white noise that is added to + * the gyro measurement at each time step, in rad^2/second^2 + */ + const Vector3d gyro_white_noise; + + /** + * The covariance of the zero-mean gaussian white noise that is added to + * the accelerometer measurement at each time step, in (m/s/s)^2 + */ + const Vector3d accel_white_noise; + + /** + * A term for the basic state of the system + */ + struct state + { + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + typedef std::vector > container_t; + + /** + * Construct a state variable from mean and error terms + * @param mean The average state + * @param error An error vector of length 12 or greater + */ + template + state(const state& mean, const Vector_T& error) + : gyro_bias(mean.gyro_bias + error.template segment<3>(0)) + , orientation(mean.orientation * exp(error.template segment<3>(3))) + , position(mean.position + error.template segment<3>(6).template cast()) + , velocity(mean.velocity + error.template segment<3>(9)) + { + assert(!has_nan()); + } + +#if 0 + template + state(const state& mean, const Vector_T& error, bool) + : gyro_bias(mean.gyro_bias + error.segment(0, 3)) + , orientation(mean.orientation * exp(error.segment(3, 3))) + , position(mean.position + error.segment(6, 3).template cast()) + , velocity(mean.velocity + error.segment(9, 3)) + { + assert(!has_nan()); + } +#endif + /** + * Default-construct an undefined state object. + * @return + */ + state(){} + + /** + * Provided a kalman update vector, apply the vector as an offset to this + * state. + * @param update A 12-vector to be applied + * @return The rotation applied to the mean orientation + */ + Quaterniond apply_kalman_vec_update(const Matrix update); + Quaterniond apply_left_kalman_vec_update(const Matrix update); + + /** + * An estimate of the bias error in the rate gyros, in radians/second + */ + Vector3d gyro_bias; + + /** + * An estimate of the orientation of the vehicle. This quaternion represents + * a transformation from ECEF coordinates to the vehicle body frame. + */ + Quaterniond orientation; + + /// Position in Earth-centered Earth-fixed reference frame, in meters + Vector3d position; + + /// Velocity in Earth-centered Earth-fixed reference frame, in m/s + Vector3d velocity; + + /** + * @return True if the state vector contains any NaNs + */ + bool has_nan(void) const; + + /** + * @return True if the state vector does not contain any NaNs or Infs + */ + bool is_real(void) const; + + /** + * Print a representation of this object to the stream str. + * @param str An output stream. + */ + void print(std::ostream& str); + }; + + /// The average state of the filter at any time t. + state avg_state; + + /// Covariance term. Elements are ordered exactly as in struct state + Matrix cov; + + /** + * Initialize a new basic INS QKF + * @param pos_estimate Initial estimate of the position + * @param pos_error one-sigma initial bounds for position error + * @param bias_error one-sigma initial bounds for bias error in the gyros + * @param v_error one-sigma bounds for velocity error (initial v == 0) + * @param gyro_white_noise The diagonal matrix of gyro white noise + * @param gyro_stability_noise The diagonal matrix of gyro instability noise + * @param accel_white_noise The diagonal matrix of accelerometer white noise + */ + //Old one without orientation_init() + basic_ins_qkf(const Vector3d& pos_estimate, + double pos_error, double bias_error, double v_error, + const Vector3d& gyro_white_noise, + const Vector3d& gyro_stability_noise, + const Vector3d& accel_white_noise, + Quaterniond initial_orientation = Quaterniond::Identity(), + const Vector3d& vel_estimate = Vector3d::Zero()); + + + /* //Old one without orientation_init() + basic_ins_qkf(const Vector3d& pos_estimate, + double pos_error, double bias_error, double v_error, + const Vector3d& gyro_white_noise, + const Vector3d& gyro_stability_noise, + const Vector3d& accel_white_noise, + const Vector3d& vel_estimate = Vector3d::Zero()); + */ + /** + * Report an INS observation, to propagate the filter forward by one time + * step. The coordinate system is maintained in ECEF coordinates. + * TODO: Provide a workspace parameter for storage that should be + * carried forward to an observation function carried out in this + * time step. + * @param gyro_meas The measured angular velocity, in rad/sec + * @param accel_meas The measured inertial reference frame acceleration, in m/s + * @param dt The elapsed time since the last measurement, in seconds. + */ + void predict(const Vector3d& gyro_meas, const Vector3d& accel_meas, double dt); + + /** + * Report an INS observation, to propagate the filter forward by one time + * step. This function differs from predict() in that it uses the NED frame + * instead of the ECEF frame. + */ + void predict_ned(const Vector3d& gyro_meas, const Vector3d& accel_meas, double dt); + + /** + * Make a single vector observation, with some angular uncertainty. + * Warning: only one of obs_vector or obs_gps_pv_report can be called + * after a single call to predict(). + * @param ref Reference vector, when the orientation is the identity. + * Must be a unit vector. + * @param obs Vector observation, should not be a unit vector + * @param error one-sigma squared magnitude error in the observation + */ + void obs_vector(const Vector3d& ref, const Vector3d& obs, double error); + + /** + * Incorporate a GPS PVT report. + * @param pos The sensor position, in earth-centered, earth-fixed coords, meters + * @param vel The sensor velocity, in meters/second + * @param p_error The RMS position error, (m)^2 + * @param v_error The RMS velocity error, (m/s)^2 + */ + void obs_gps_pv_report(const Vector3d& pos, const Vector3d& vel, const Vector3d& p_error, const Vector3d v_error); + + /** + * Incorporate a GPS position report, in either ECEF or NED coordinates. + * @param pos The position, in meters + * @param p_error The position error, in meters. + */ + void obs_gps_p_report(const Vector3d& pos, const Vector3d& p_error); + + /** + * Incoporate a barometer report, the altitude should be ein ENU coordinates (Up=Positive) + * It's also necessary to provide the ECEF2ENU matrix. + * @param altitude The altitude, in meters + * @param baro_error, The altitude error, in meters + * @param ecef2enu, The rotational martrix form ECEF to ENU + * @param pos_0, the position where ENU would be (0, 0, 0). + */ + #if BARO_CENTER_OF_MASS + void obs_baro_report(double altitude, double baro_error); + #else + void obs_baro_report(double altitude, double baro_error, Matrix ecef2enu, const Vector3d& pos_0); + #endif + + /** + * Incorporate a GPS velocity report, in ECEF 3d coordinates. + * @param vel The 3d velocity, relative to the fixed earth frame, in (m/s). + * @param v_error The one-sigma RMS velocity error (m/s)^2 + */ + void obs_gps_v_report(const Vector3d& vel, const Vector3d& v_error); + + /** + * Observe a GPS vector track over ground report, in north-east-down coordinates + * @param vel The 2d velocity value, parallel to the ground, in m/s + * @param v_error The one-sigma RMS velocity error (m/s)^2 + */ + void obs_gps_vtg_report(const Vector2d vel, const double v_error); + + /** + * Directly observe the gyro sensor bias. In practice, we cannot do this. However, + * the true bias is not a random walk. It tends to return towards zero when it is + * farther away from zero (not temperature dependent). Therefore, we can + * incorporate this extra knowledge through a periodic "observation" of zero + * bias with a large error. + * + * Use with extreme caution. It is almost certainly better to just clamp the + * bias term after making an observation. + * + * @param bias The observed bias, in radians/sec + * @param bias_error The one-sigma estimate of the gyro bias error, in radians/sec + */ + void obs_gyro_bias(const Vector3d& bias, const Vector3d& bias_error); + + /** + * Measure the total angular error between the filter's attitude estimate + * and some other orientation. + * @param orientation The attitude to compare against + * @return The angular difference between them, in radians + */ + double angular_error(const Quaterniond& orientation) const; + + /** + * Measure the total gyro bias error between the filter's estimate and + * some other bias + * @param gyro_bias The gyro bias vector to compare against + * @return The vector difference between them, in radians/second + */ + double gyro_bias_error(const Vector3d& gyro_bias) const; + + /** + * Determine the statistical distance between an example sample point + * and the distribution computed by the estimator. + */ + double mahalanobis_distance(const state& sample) const; + +private: + + /** + * The type of an error term between two state vectors. + */ + typedef Eigen::Matrix state_error_t; + /// Compute the error difference between a sigma point and the mean as: point - mean + state_error_t sigma_point_difference(const state& mean, const state& point) const; + + +public: + /** Perform the posterior counter-rotation of the covariance matrix by + the update that gets applied to the estimated state. + */ + void counter_rotate_cov(const Quaterniond& update); + + /** + * Verify that the covariance and average state are niether NaN nor Inf + * @return True, iff no element in the covariance or mean are NaN or Inf + */ + bool is_real(void) const; +}; + +#endif diff --git a/sw/airborne/fms/libeknav/ins_qkf_observe_gps_pvt.cpp b/sw/airborne/fms/libeknav/ins_qkf_observe_gps_pvt.cpp index 37b6a1fa1a..d16f7a7bd5 100644 --- a/sw/airborne/fms/libeknav/ins_qkf_observe_gps_pvt.cpp +++ b/sw/airborne/fms/libeknav/ins_qkf_observe_gps_pvt.cpp @@ -1,121 +1,121 @@ -/* - * ins_qkf_observe_gps_pvt.cpp - * - * Created on: Sep 2, 2009 - * Author: Jonathan Brandmeyer - * - * This file is part of libeknav. - * - * Libeknav is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3. - * - * Libeknav is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with libeknav. If not, see . - */ - -#include "ins_qkf.hpp" -#include "assertions.hpp" -#include - -#ifdef TIME_OPS -#include "timer.hpp" -#include -#endif - -using namespace Eigen; - -#define RANK_ONE_UPDATES - -void -basic_ins_qkf::obs_gps_v_report(const Vector3d& vel, const Vector3d& v_error) -{ - Vector3d residual = vel - avg_state.velocity; - //std::cout << "diff_v(" < update = Matrix::Zero(); - for (int i = 0; i < 3; ++i) { - double innovation_cov_inv = 1.0/(cov(9+i, 9+i) + v_error[i]); - Matrix gain = cov.block<12, 1>(0, 9+i) * innovation_cov_inv; - update += gain * (residual[i] - update[9+i]); - cov -= gain * cov.block<1, 12>(9+i, 0); - } -#else - Matrix innovation_cov = cov.block<3, 3>(9, 9); - innovation_cov += v_error.asDiagonal(); - Matrix kalman_gain_t; - innovation_cov.qr().solve(cov.block<3, 12>(9, 0), &kalman_gain_t); - cov.part() -= cov.block<12, 3>(0, 9) * kalman_gain_t; // .transpose() * cov.block<3, 12>(9, 0); - Matrix update = kalman_gain_t.transpose() * residual; -#endif - //std::cout << "update(" << update.segment<6>(0).transpose()*180/M_PI << "\t" << update.segment<6>(6).transpose() << ")\n"; - - //update.segment<6>(0) = Matrix::Zero(); // only for debugging - //std::cout << "update(" << update.segment<6>(0).transpose()*180/M_PI << "\t" << update.segment<6>(6).transpose() << ")\n"; - Quaterniond rotor = avg_state.apply_kalman_vec_update(update); - counter_rotate_cov(rotor); - assert(is_real()); -} - -void -basic_ins_qkf::obs_gps_pv_report( - const Vector3d& pos, const Vector3d& vel, - const Vector3d& p_error, const Vector3d v_error) -{ -#ifdef TIME_OPS - timer clock; - clock.start(); -#endif -#if 1 - //std::cout<<"position"< obs_matrix; - obs_matrix << Matrix::Zero(), Matrix::Identity(); - - Matrix residual; - residual.segment<3>(0) = (pos - avg_state.position); - residual.segment<3>(3) = vel - avg_state.velocity; - - Matrix innovation_cov = cov.corner<6, 6>(Eigen::BottomRight); - //innovation_cov = obs_matrix * cov * obs_matrix.transpose(); - innovation_cov.corner<3, 3>(Eigen::TopLeft) += p_error.asDiagonal(); - innovation_cov.corner<3, 3>(Eigen::BottomRight) += v_error.asDiagonal(); -#if 1 - // Perform matrix inverse by LU decomposition instead of cofactor expansion. - // K = P*transpose(H)*inverse(S) - // K = P*transpose(transpose(transpose(H)*inverse(S))) - // K = P*transpose(transpose(inverse(S))*H) - // K = P*transpose(inverse(transpose(S))*H) - // S == transpose(S) - // K = P*transpose(inverse(S)*H) - // obs_matrx <- inverse(S)*H - Matrix inv_s_h; - innovation_cov.qr().solve(obs_matrix, &inv_s_h); - Matrix kalman_gain = cov * inv_s_h.transpose(); -#else - Matrix kalman_gain = cov.block<12, 6>(0, 6) * innovation_cov.inverse(); -#endif - Quaterniond rotor = avg_state.apply_kalman_vec_update(kalman_gain * residual); - cov.part() -= kalman_gain * obs_matrix * cov; - counter_rotate_cov(rotor); - assert(is_real()); -#endif - -#ifdef TIME_OPS - double time = clock.stop() * 1e6; - std::cout << "obs_gps_pvt time: " << time << "\n"; -#endif -} - +/* + * ins_qkf_observe_gps_pvt.cpp + * + * Created on: Sep 2, 2009 + * Author: Jonathan Brandmeyer + * + * This file is part of libeknav. + * + * Libeknav is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * Libeknav is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with libeknav. If not, see . + */ + +#include "ins_qkf.hpp" +#include "assertions.hpp" +#include + +#ifdef TIME_OPS +#include "timer.hpp" +#include +#endif + +using namespace Eigen; + +#define RANK_ONE_UPDATES + +void +basic_ins_qkf::obs_gps_v_report(const Vector3d& vel, const Vector3d& v_error) +{ + Vector3d residual = vel - avg_state.velocity; + //std::cout << "diff_v(" < update = Matrix::Zero(); + for (int i = 0; i < 3; ++i) { + double innovation_cov_inv = 1.0/(cov(9+i, 9+i) + v_error[i]); + Matrix gain = cov.block<12, 1>(0, 9+i) * innovation_cov_inv; + update += gain * (residual[i] - update[9+i]); + cov -= gain * cov.block<1, 12>(9+i, 0); + } +#else + Matrix innovation_cov = cov.block<3, 3>(9, 9); + innovation_cov += v_error.asDiagonal(); + Matrix kalman_gain_t; + innovation_cov.qr().solve(cov.block<3, 12>(9, 0), &kalman_gain_t); + cov.part() -= cov.block<12, 3>(0, 9) * kalman_gain_t; // .transpose() * cov.block<3, 12>(9, 0); + Matrix update = kalman_gain_t.transpose() * residual; +#endif + //std::cout << "update(" << update.segment<6>(0).transpose()*180/M_PI << "\t" << update.segment<6>(6).transpose() << ")\n"; + + //update.segment<6>(0) = Matrix::Zero(); // only for debugging + //std::cout << "update(" << update.segment<6>(0).transpose()*180/M_PI << "\t" << update.segment<6>(6).transpose() << ")\n"; + Quaterniond rotor = avg_state.apply_kalman_vec_update(update); + counter_rotate_cov(rotor); + assert(is_real()); +} + +void +basic_ins_qkf::obs_gps_pv_report( + const Vector3d& pos, const Vector3d& vel, + const Vector3d& p_error, const Vector3d v_error) +{ +#ifdef TIME_OPS + timer clock; + clock.start(); +#endif +#if 1 + //std::cout<<"position"< obs_matrix; + obs_matrix << Matrix::Zero(), Matrix::Identity(); + + Matrix residual; + residual.segment<3>(0) = (pos - avg_state.position); + residual.segment<3>(3) = vel - avg_state.velocity; + + Matrix innovation_cov = cov.corner<6, 6>(Eigen::BottomRight); + //innovation_cov = obs_matrix * cov * obs_matrix.transpose(); + innovation_cov.corner<3, 3>(Eigen::TopLeft) += p_error.asDiagonal(); + innovation_cov.corner<3, 3>(Eigen::BottomRight) += v_error.asDiagonal(); +#if 1 + // Perform matrix inverse by LU decomposition instead of cofactor expansion. + // K = P*transpose(H)*inverse(S) + // K = P*transpose(transpose(transpose(H)*inverse(S))) + // K = P*transpose(transpose(inverse(S))*H) + // K = P*transpose(inverse(transpose(S))*H) + // S == transpose(S) + // K = P*transpose(inverse(S)*H) + // obs_matrx <- inverse(S)*H + Matrix inv_s_h; + innovation_cov.qr().solve(obs_matrix, &inv_s_h); + Matrix kalman_gain = cov * inv_s_h.transpose(); +#else + Matrix kalman_gain = cov.block<12, 6>(0, 6) * innovation_cov.inverse(); +#endif + Quaterniond rotor = avg_state.apply_kalman_vec_update(kalman_gain * residual); + cov.part() -= kalman_gain * obs_matrix * cov; + counter_rotate_cov(rotor); + assert(is_real()); +#endif + +#ifdef TIME_OPS + double time = clock.stop() * 1e6; + std::cout << "obs_gps_pvt time: " << time << "\n"; +#endif +} + diff --git a/sw/airborne/fms/libeknav/ins_qkf_observe_vector.cpp b/sw/airborne/fms/libeknav/ins_qkf_observe_vector.cpp index 64a8486396..c8370b0443 100644 --- a/sw/airborne/fms/libeknav/ins_qkf_observe_vector.cpp +++ b/sw/airborne/fms/libeknav/ins_qkf_observe_vector.cpp @@ -1,193 +1,193 @@ -/* - * ins_qkf_observe_vector.cpp - * - * Created on: Sep 2, 2009 - * Author: Jonathan Brandmeyer - - * This file is part of libeknav. - * - * Libeknav is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3. - * - * Libeknav is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with libeknav. If not, see . - */ - -#include "ins_qkf.hpp" -#include "assertions.hpp" - -#ifdef TIME_OPS -#include "timer.hpp" -#include -#endif - -using namespace Eigen; -#define RANK_ONE_UPDATES - -#include - -void -basic_ins_qkf::obs_gyro_bias(const Vector3d& bias, const Vector3d& bias_error) -{ - Matrix kalman_gain = cov.block<12, 3>(0, 0) - * (cov.block<3, 3>(0, 0) + bias_error.asDiagonal()).inverse(); - cov -= kalman_gain * cov.block<3, 12>(0, 0); - Vector3d innovation = bias - avg_state.gyro_bias; - - // Apply the Kalman gain to obtain the posterior state and error estimates. - avg_state.apply_kalman_vec_update(kalman_gain * innovation); -} - -void -basic_ins_qkf::obs_vector(const Vector3d& ref, const Vector3d& obs, double error) -{ -#ifdef TIME_OPS - timer clock; - clock.start(); -#endif -#define DEBUG_VECTOR_OBS 0 - // Optimization opportunity: re-use sigma points from the state prediction -#if 0 - std::vector > points; - Matrix state_errors; - decompose_sigma_points(points, state_errors, error); - - std::vector projected_points; - projected_points.reserve(points.size()); - for (auto i = points.begin(), end = points.end(); i != end; ++i) { - projected_points.push_back(observe_vector(*i, ref)); - } - - Vector3d expected_obs = avg_state.orientation * ref; - Quaterniond expected_observation_prediction = Quaterniond().setFromTwoVectors(ref, expected_obs); - // Compute the observation error matrix and its self-covariance - Quaterniond mean_observation_pred = quaternion_avg_johnson(projected_points); - - - // assert(obs_projection.transpose().isUnitary()); -#if DEBUG_VECTOR_OBS - std::cout << "\n\nref: " << ref.transpose(); - std::cout << "\nobs: " << obs.transpose(); - std::cout << "\nexpected observation: " << expected_observation_prediction.coeffs().transpose(); - std::cout << "\nUKF observation: " << mean_observation_pred.coeffs().transpose(); - std::cout << "\nexpected innovation: " << log(Quaterniond().setFromTwoVectors( - expected_obs, obs)).transpose(); - std::cout << "\ntangent space innovation: " << log(avg_state.orientation.conjugate() * - Quaterniond().setFromTwoVectors(expected_obs, obs) * avg_state.orientation) << "\n"; -#endif - Matrix obs_errors(3, projected_points.size()); - for (unsigned i = 0; i != projected_points.size(); ++i) { - if (projected_points[i].coeffs().dot(mean_observation_pred.coeffs()) < 0) { - // Choose the point on the same hemisphere as the mean. otherwise, the error vectors - // get screwed up. - projected_points[i].coeffs() *= -1; - } - obs_errors.col(i) = log(mean_observation_pred.conjugate() * projected_points[i]); - } - - // Construct an observation matrix composed of the two unit vectors - // orthogonal to the direction that pivots about the expected observation - // Vector3d obs = obs.normalized(); - Matrix obs_projection; -#if 1 - SelfAdjointEigenSolver > obs_cov((obs_errors * obs_errors.transpose())*0.5); - obs_projection = obs_cov.eigenvectors().block<3, 2>(0, 1).transpose(); -#else - typedef Vector3d vector_t; - obs_projection.row(0) = expected_obs.cross((expected_obs.dot(vector_t::UnitX()) < 0.707) - ? vector_t::UnitX() : vector_t::UnitY()).normalized(); - obs_projection.row(1) = expected_obs.cross(obs_projection.row(0)); -#endif - assert(!hasNaN(obs_projection)); -#if DEBUG_VECTOR_OBS - std::cout << "predicted obs: " << expected_obs.transpose() << "\n"; - std::cout << "actual obs: " << obs.transpose() << "\n"; - std::cout << "reference obs: " << ref.transpose() << "\n"; - std::cout << "obs cov eigenvalues: " << obs_cov.eigenvalues().transpose() << "\n"; - std::cout << "obs cov eigenvectors:\n" << obs_cov.eigenvectors() << "\n"; - std::cout << "measurement subspace:\n" << obs_projection.transpose() << "\n"; -#endif - - Matrix projected_obs_errors = obs_projection*obs_errors; - Matrix obs_pred_cov = (projected_obs_errors * projected_obs_errors.transpose())*0.5; -#if DEBUG_VECTOR_OBS - std::cout << "obs errors: " << obs_errors << "\n"; - std::cout << "S: " << obs_pred_cov << "\n"; - std::cout << "expected S: " << cov.block<3, 3>(3, 3) << "\n"; -#endif - - Matrix state_meas_cross_cov = - (state_errors.block<12, 30>(0,0) * projected_obs_errors.transpose())*0.5; - Matrix kalman_gain = state_meas_cross_cov * obs_pred_cov.inverse(); - // Innovation rotation in the tangent space at the mean - Vector2d innovation = obs_projection*log( - Quaterniond().setFromTwoVectors((mean_observation_pred * ref), obs)); -#if DEBUG_VECTOR_OBS - std::cout << "inverse(S): " << obs_pred_cov.inverse() << "\n"; - std::cout << "used innovation: " << log(Quaterniond().setFromTwoVectors( - mean_observation_pred * ref, obs)).transpose() << "\n"; - std::cout << "projected innovation: " << innovation.transpose() << "\n"; - std::cout << "deprojected innovation: " << (obs_projection.transpose() * innovation).transpose() << "\n"; -#endif - // actually, cov -= K*S*K^T, but this saves a multiplication. - cov -= (kalman_gain * obs_pred_cov * kalman_gain.transpose()); -#else - // BIG optimization opportunity: Use a pseudo-linear measurement model. - - Vector3d obs_ref = avg_state.orientation.conjugate()*obs; - Vector3d v_residual = log(Quaterniond().setFromTwoVectors(ref, obs_ref)); - - Matrix h_trans; - h_trans.col(0) = ref.cross( - (abs(ref.dot(obs_ref)) < 0.9994) ? obs_ref : - (abs(ref.dot(Vector3d::UnitX())) < 0.707) - ? Vector3d::UnitX() : Vector3d::UnitY()).normalized(); - - h_trans.col(1) = -ref.cross(h_trans.col(0)); - assert(!hasNaN(h_trans)); - assert(h_trans.isUnitary()); - Vector2d innovation = h_trans.transpose() * v_residual; -#ifdef RANK_ONE_UPDATES - // Running a rank-one update here is a strict win. - Matrix update = Matrix::Zero(); - for (int i = 0; i < 2; ++i) { - double obs_error = error; - double obs_cov = (h_trans.col(i).transpose() * cov.block<3, 3>(3, 3) * h_trans.col(i))[0]; - Matrix gain = cov.block<12, 3>(0, 3) * h_trans.col(i) / (obs_error + obs_cov); - update += gain * h_trans.col(i).transpose() * v_residual; - cov -= gain * h_trans.col(i).transpose() * cov.block<3, 12>(3, 0); - } -#else - Matrix kalman_gain = cov.block<12, 3>(0, 3) * h_trans - * (h_trans.transpose() * cov.block<3, 3>(3, 3) * h_trans - + (Vector2d() << error, error).finished().asDiagonal()).inverse(); - cov -= kalman_gain * h_trans.transpose() * cov.block<3, 12>(3, 0); -#endif - -#endif - - // Apply the Kalman gain to obtain the posterior state and error estimates. -#ifndef RANK_ONE_UPDATES - Matrix update = (kalman_gain * innovation); -#endif - -#if DEBUG_VECTOR_OBS - // std::cout << "projected update: " << (obs_projection * update.segment<3>(3)).transpose() << "\n"; - std::cout << "deprojected update: " << update.segment<3>(3).transpose() << "\n"; -#endif - Quaterniond posterior_update = avg_state.apply_kalman_vec_update(update); - counter_rotate_cov(posterior_update); - - assert(is_real()); -#ifdef TIME_OPS - double time = clock.stop() * 1e6; - std::cout << "observe_vector(): " << time << "\n"; -#endif - -} +/* + * ins_qkf_observe_vector.cpp + * + * Created on: Sep 2, 2009 + * Author: Jonathan Brandmeyer + + * This file is part of libeknav. + * + * Libeknav is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * Libeknav is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with libeknav. If not, see . + */ + +#include "ins_qkf.hpp" +#include "assertions.hpp" + +#ifdef TIME_OPS +#include "timer.hpp" +#include +#endif + +using namespace Eigen; +#define RANK_ONE_UPDATES + +#include + +void +basic_ins_qkf::obs_gyro_bias(const Vector3d& bias, const Vector3d& bias_error) +{ + Matrix kalman_gain = cov.block<12, 3>(0, 0) + * (cov.block<3, 3>(0, 0) + bias_error.asDiagonal()).inverse(); + cov -= kalman_gain * cov.block<3, 12>(0, 0); + Vector3d innovation = bias - avg_state.gyro_bias; + + // Apply the Kalman gain to obtain the posterior state and error estimates. + avg_state.apply_kalman_vec_update(kalman_gain * innovation); +} + +void +basic_ins_qkf::obs_vector(const Vector3d& ref, const Vector3d& obs, double error) +{ +#ifdef TIME_OPS + timer clock; + clock.start(); +#endif +#define DEBUG_VECTOR_OBS 0 + // Optimization opportunity: re-use sigma points from the state prediction +#if 0 + std::vector > points; + Matrix state_errors; + decompose_sigma_points(points, state_errors, error); + + std::vector projected_points; + projected_points.reserve(points.size()); + for (auto i = points.begin(), end = points.end(); i != end; ++i) { + projected_points.push_back(observe_vector(*i, ref)); + } + + Vector3d expected_obs = avg_state.orientation * ref; + Quaterniond expected_observation_prediction = Quaterniond().setFromTwoVectors(ref, expected_obs); + // Compute the observation error matrix and its self-covariance + Quaterniond mean_observation_pred = quaternion_avg_johnson(projected_points); + + + // assert(obs_projection.transpose().isUnitary()); +#if DEBUG_VECTOR_OBS + std::cout << "\n\nref: " << ref.transpose(); + std::cout << "\nobs: " << obs.transpose(); + std::cout << "\nexpected observation: " << expected_observation_prediction.coeffs().transpose(); + std::cout << "\nUKF observation: " << mean_observation_pred.coeffs().transpose(); + std::cout << "\nexpected innovation: " << log(Quaterniond().setFromTwoVectors( + expected_obs, obs)).transpose(); + std::cout << "\ntangent space innovation: " << log(avg_state.orientation.conjugate() * + Quaterniond().setFromTwoVectors(expected_obs, obs) * avg_state.orientation) << "\n"; +#endif + Matrix obs_errors(3, projected_points.size()); + for (unsigned i = 0; i != projected_points.size(); ++i) { + if (projected_points[i].coeffs().dot(mean_observation_pred.coeffs()) < 0) { + // Choose the point on the same hemisphere as the mean. otherwise, the error vectors + // get screwed up. + projected_points[i].coeffs() *= -1; + } + obs_errors.col(i) = log(mean_observation_pred.conjugate() * projected_points[i]); + } + + // Construct an observation matrix composed of the two unit vectors + // orthogonal to the direction that pivots about the expected observation + // Vector3d obs = obs.normalized(); + Matrix obs_projection; +#if 1 + SelfAdjointEigenSolver > obs_cov((obs_errors * obs_errors.transpose())*0.5); + obs_projection = obs_cov.eigenvectors().block<3, 2>(0, 1).transpose(); +#else + typedef Vector3d vector_t; + obs_projection.row(0) = expected_obs.cross((expected_obs.dot(vector_t::UnitX()) < 0.707) + ? vector_t::UnitX() : vector_t::UnitY()).normalized(); + obs_projection.row(1) = expected_obs.cross(obs_projection.row(0)); +#endif + assert(!hasNaN(obs_projection)); +#if DEBUG_VECTOR_OBS + std::cout << "predicted obs: " << expected_obs.transpose() << "\n"; + std::cout << "actual obs: " << obs.transpose() << "\n"; + std::cout << "reference obs: " << ref.transpose() << "\n"; + std::cout << "obs cov eigenvalues: " << obs_cov.eigenvalues().transpose() << "\n"; + std::cout << "obs cov eigenvectors:\n" << obs_cov.eigenvectors() << "\n"; + std::cout << "measurement subspace:\n" << obs_projection.transpose() << "\n"; +#endif + + Matrix projected_obs_errors = obs_projection*obs_errors; + Matrix obs_pred_cov = (projected_obs_errors * projected_obs_errors.transpose())*0.5; +#if DEBUG_VECTOR_OBS + std::cout << "obs errors: " << obs_errors << "\n"; + std::cout << "S: " << obs_pred_cov << "\n"; + std::cout << "expected S: " << cov.block<3, 3>(3, 3) << "\n"; +#endif + + Matrix state_meas_cross_cov = + (state_errors.block<12, 30>(0,0) * projected_obs_errors.transpose())*0.5; + Matrix kalman_gain = state_meas_cross_cov * obs_pred_cov.inverse(); + // Innovation rotation in the tangent space at the mean + Vector2d innovation = obs_projection*log( + Quaterniond().setFromTwoVectors((mean_observation_pred * ref), obs)); +#if DEBUG_VECTOR_OBS + std::cout << "inverse(S): " << obs_pred_cov.inverse() << "\n"; + std::cout << "used innovation: " << log(Quaterniond().setFromTwoVectors( + mean_observation_pred * ref, obs)).transpose() << "\n"; + std::cout << "projected innovation: " << innovation.transpose() << "\n"; + std::cout << "deprojected innovation: " << (obs_projection.transpose() * innovation).transpose() << "\n"; +#endif + // actually, cov -= K*S*K^T, but this saves a multiplication. + cov -= (kalman_gain * obs_pred_cov * kalman_gain.transpose()); +#else + // BIG optimization opportunity: Use a pseudo-linear measurement model. + + Vector3d obs_ref = avg_state.orientation.conjugate()*obs; + Vector3d v_residual = log(Quaterniond().setFromTwoVectors(ref, obs_ref)); + + Matrix h_trans; + h_trans.col(0) = ref.cross( + (abs(ref.dot(obs_ref)) < 0.9994) ? obs_ref : + (abs(ref.dot(Vector3d::UnitX())) < 0.707) + ? Vector3d::UnitX() : Vector3d::UnitY()).normalized(); + + h_trans.col(1) = -ref.cross(h_trans.col(0)); + assert(!hasNaN(h_trans)); + assert(h_trans.isUnitary()); + Vector2d innovation = h_trans.transpose() * v_residual; +#ifdef RANK_ONE_UPDATES + // Running a rank-one update here is a strict win. + Matrix update = Matrix::Zero(); + for (int i = 0; i < 2; ++i) { + double obs_error = error; + double obs_cov = (h_trans.col(i).transpose() * cov.block<3, 3>(3, 3) * h_trans.col(i))[0]; + Matrix gain = cov.block<12, 3>(0, 3) * h_trans.col(i) / (obs_error + obs_cov); + update += gain * h_trans.col(i).transpose() * v_residual; + cov -= gain * h_trans.col(i).transpose() * cov.block<3, 12>(3, 0); + } +#else + Matrix kalman_gain = cov.block<12, 3>(0, 3) * h_trans + * (h_trans.transpose() * cov.block<3, 3>(3, 3) * h_trans + + (Vector2d() << error, error).finished().asDiagonal()).inverse(); + cov -= kalman_gain * h_trans.transpose() * cov.block<3, 12>(3, 0); +#endif + +#endif + + // Apply the Kalman gain to obtain the posterior state and error estimates. +#ifndef RANK_ONE_UPDATES + Matrix update = (kalman_gain * innovation); +#endif + +#if DEBUG_VECTOR_OBS + // std::cout << "projected update: " << (obs_projection * update.segment<3>(3)).transpose() << "\n"; + std::cout << "deprojected update: " << update.segment<3>(3).transpose() << "\n"; +#endif + Quaterniond posterior_update = avg_state.apply_kalman_vec_update(update); + counter_rotate_cov(posterior_update); + + assert(is_real()); +#ifdef TIME_OPS + double time = clock.stop() * 1e6; + std::cout << "observe_vector(): " << time << "\n"; +#endif + +} diff --git a/sw/airborne/fms/libeknav/ins_qkf_predict.cpp b/sw/airborne/fms/libeknav/ins_qkf_predict.cpp index 3390b382ef..21806a0e17 100644 --- a/sw/airborne/fms/libeknav/ins_qkf_predict.cpp +++ b/sw/airborne/fms/libeknav/ins_qkf_predict.cpp @@ -1,184 +1,184 @@ -/* - * ins_qkf_predict.cpp - * - * Created on: Sep 2, 2009 - * Author: Jonathan Brandmeyer - - * This file is part of libeknav. - * - * Libeknav is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3. - * - * Libeknav is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with libeknav. If not, see . - */ - -/** - * This is a modified version by Martin Dieblich - * The general changes are a more consequent naming - * - */ - - -#include "ins_qkf.hpp" -#include "assertions.hpp" -#ifdef TIME_OPS -//#include "timer.hpp" -#include -#endif - -using namespace Eigen; - -namespace { - -Matrix -axis_scale(const Vector3d& axis, double scale) -{ - return (scale - 1) * axis * axis.transpose() + Matrix3d::Identity(); -} - -void -linear_predict(basic_ins_qkf& _this, const Vector3d& gyro_meas, const Vector3d& accel_meas, double dt) -{ - // The two components of rotation that do not spin about the gravity vector - // have an influence on the position and velocity of the vehicle. - // Let r be an error axis of rotation, and z be the gravity vector. - // Increasing r creates increasing error in the direction _|_ to r and z. - // By the small angle theorem, the amount of error is ~ abs(r)*abs(z). - // Increasing r also creates increasing error in the direction || to -z. - // By the small angle theorem, the amount of error is ~ zero. - // Therefore, rotate the error block about the z axis by -90 degrees, and - // zero out the error vector in the z direction. - // accel_cov is the relationship between error vectors in the tangent space - // of the vehicle orientation and the translational reference frame. - - - Matrix3d rot = _this.avg_state.orientation.conjugate().toRotationMatrix(); - - Vector3d accel_ecef = rot*accel_meas; // a_e = (q_e2b)^* x a_b = q_b2e x a_b - Vector3d accel_gravity = _this.avg_state.position.normalized()*(-9.81); - Vector3d accel_resid = accel_ecef + accel_gravity; // a = (xdd-g)+g = xdd; - - #if 0 - printf("==================================================\n"); - printf("Quaternion: % 1.4f % 1.4f % 1.4f % 1.4f\n", - _this.avg_state.orientation.w(), - _this.avg_state.orientation.x(), - _this.avg_state.orientation.y(), - _this.avg_state.orientation.z()); - printf("Accel_meas: % 1.4f % 1.4f % 1.4f\n", accel_meas(0), accel_meas(1), accel_meas(2)); - printf("Accel_ecef: % 1.4f % 1.4f % 1.4f\n", accel_ecef(0), accel_ecef(1), accel_ecef(2)); - printf("Accel_grav: % 1.4f % 1.4f % 1.4f\n", accel_gravity(0), accel_gravity(1), accel_gravity(2)); - #endif - -#if 0 - // This form works well with zero static acceleration. - Matrix accel_cov = - Eigen::AngleAxisd(-M_PI*0.5, _this.avg_state.position.normalized()) - * axis_scale(_this.avg_state.position.normalized(), 0) * 9.81; -#elif 1 - Matrix accel_cov = - Eigen::AngleAxisd(-M_PI*0.5, accel_ecef.normalized()) - * axis_scale(accel_ecef.normalized(), 0) * accel_meas.norm(); -#else - // The following form ends up being identical to the simpler one - // above - Matrix accel_cov = - Eigen::AngleAxisd(-M_PI*0.5, _this.avg_state.position.normalized()) - * axis_scale(_this.avg_state.position.normalized(), 0) * 9.81 - + Eigen::AngleAxisd(-M_PI*0.5, accel_resid.normalized()) - * axis_scale(accel_resid.normalized(), 0)*accel_resid.norm(); -#endif - // TODO: Optimization opportunity: the accel_cov doesn't change much over - // the life of a mission. Precompute it once and then retain the original. - // Then, only one 3x3 block ever gets updated in the A matrix below. - - // The linearized Kalman state projection matrix. -#if 0 - Matrix A; - // gyro bias row - A << Matrix::Identity(), Matrix::Zero(), - // Orientation row - _this.avg_state.orientation.conjugate().toRotationMatrix()*-dt, - Matrix::Identity(), Matrix::Zero(), - // Position row - Matrix::Zero(), -accel_cov*0.5*dt*dt, - Matrix::Identity(), Matrix::Identity()*dt, - // Velocity row - Matrix::Zero(), -accel_cov * dt, - Matrix::Zero(), Matrix::Identity(); - - // 800x realtime, with vectorization - _this.cov.part() = A * _this.cov * A.transpose(); -#else - // 1500x realtime, without vectorization, on 2.2 GHz Athlon X2 - const Matrix cov = _this.cov; - const Matrix3d dtR = dt * _this.avg_state.orientation.conjugate().toRotationMatrix(); - const Matrix3d dtQ = accel_cov * dt; - - _this.cov.block<3, 3>(0, 3) -= cov.block<3,3>(0, 0)*dtR.transpose(); - _this.cov.block<3, 3>(0, 6) += dt * cov.block<3, 3>(0, 9); - _this.cov.block<3, 3>(0, 9) -= cov.block<3, 3>(0, 3) * dtQ.transpose(); - _this.cov.block<3, 3>(3, 3).part() += dtR*cov.block<3, 3>(0, 0)*dtR.transpose() - - dtR*cov.block<3, 3>(0, 3) - cov.block<3, 3>(3, 0)*dtR.transpose(); - _this.cov.block<3, 3>(3, 6) += -dtR * (cov.block<3, 3>(0, 6) + dt*cov.block<3, 3>(0, 9)) - + dt*cov.block<3, 3>(3, 9); - _this.cov.block<3, 3>(3, 9) += -dtR*( -cov.block<3, 3>(0, 3)*dtQ.transpose() + cov.block<3, 3>(0, 9)) - - cov.block<3, 3>(3, 3)*dtQ.transpose(); - _this.cov.block<3, 3>(6, 6).part() += dt*cov.block<3, 3>(6, 9) + dt*dt*cov.block<3, 3>(9, 9) - + dt*cov.block<3, 3>(9, 6); - _this.cov.block<3, 3>(6, 9) += -cov.block<3, 3>(6, 3)*dtQ.transpose() + dt*cov.block<3, 3>(9, 9) - - dt*cov.block<3, 3>(9, 3)*dtQ.transpose(); - _this.cov.block<3, 3>(9, 9).part() += dtQ*cov.block<3, 3>(3, 3)*dtQ.transpose() - - dtQ*cov.block<3, 3>(3, 9) - cov.block<3, 3>(9, 3)*dtQ.transpose(); - - _this.cov.block<3, 3>(3, 0) = _this.cov.block<3, 3>(0, 3).transpose(); - _this.cov.block<3, 3>(6, 0) = _this.cov.block<3, 3>(0, 6).transpose(); - _this.cov.block<3, 3>(6, 3) = _this.cov.block<3, 3>(3, 6).transpose(); - _this.cov.block<3, 3>(9, 0) = _this.cov.block<3, 3>(0, 9).transpose(); - _this.cov.block<3, 3>(9, 3) = _this.cov.block<3, 3>(3, 9).transpose(); - _this.cov.block<3, 3>(9, 6) = _this.cov.block<3, 3>(6, 9).transpose(); -#endif - - _this.cov.block<3, 3>(0, 0) += _this.gyro_stability_noise.asDiagonal() * dt; - _this.cov.block<3, 3>(3, 3) += _this.gyro_white_noise.asDiagonal() * dt; - _this.cov.block<3, 3>(6, 6) += _this.accel_white_noise.asDiagonal() * 0.5*dt*dt; - _this.cov.block<3, 3>(9, 9) += _this.accel_white_noise.asDiagonal() * dt; - - Quaterniond orientation = exp((gyro_meas - _this.avg_state.gyro_bias) * dt) - * _this.avg_state.orientation; - //Vector3d accel = accel_ecef - _this.avg_state.position.normalized() * 9.81; - //std::cout << " ACCEL______(" << accel.transpose() << ")\n"; - Vector3d position = _this.avg_state.position + _this.avg_state.velocity * dt + 0.5*accel_resid*dt*dt; - Vector3d velocity = _this.avg_state.velocity + accel_resid*dt; - - _this.avg_state.position = position; - _this.avg_state.velocity = velocity; - _this.avg_state.orientation = orientation; -} - -} // !namespace (anon) - -void -basic_ins_qkf::predict(const Vector3d& gyro_meas, const Vector3d& accel_meas, double dt) -{ -#ifdef TIME_OPS - timer clock; - clock.start(); -#endif - - // Always use linearized prediction - linear_predict(*this, gyro_meas, accel_meas, dt); - -#ifdef TIME_OPS - double time = clock.stop()*1e6; - std::cout << "unscented predict time: " << time << "\n"; -#endif -} - +/* + * ins_qkf_predict.cpp + * + * Created on: Sep 2, 2009 + * Author: Jonathan Brandmeyer + + * This file is part of libeknav. + * + * Libeknav is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * Libeknav is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with libeknav. If not, see . + */ + +/** + * This is a modified version by Martin Dieblich + * The general changes are a more consequent naming + * + */ + + +#include "ins_qkf.hpp" +#include "assertions.hpp" +#ifdef TIME_OPS +//#include "timer.hpp" +#include +#endif + +using namespace Eigen; + +namespace { + +Matrix +axis_scale(const Vector3d& axis, double scale) +{ + return (scale - 1) * axis * axis.transpose() + Matrix3d::Identity(); +} + +void +linear_predict(basic_ins_qkf& _this, const Vector3d& gyro_meas, const Vector3d& accel_meas, double dt) +{ + // The two components of rotation that do not spin about the gravity vector + // have an influence on the position and velocity of the vehicle. + // Let r be an error axis of rotation, and z be the gravity vector. + // Increasing r creates increasing error in the direction _|_ to r and z. + // By the small angle theorem, the amount of error is ~ abs(r)*abs(z). + // Increasing r also creates increasing error in the direction || to -z. + // By the small angle theorem, the amount of error is ~ zero. + // Therefore, rotate the error block about the z axis by -90 degrees, and + // zero out the error vector in the z direction. + // accel_cov is the relationship between error vectors in the tangent space + // of the vehicle orientation and the translational reference frame. + + + Matrix3d rot = _this.avg_state.orientation.conjugate().toRotationMatrix(); + + Vector3d accel_ecef = rot*accel_meas; // a_e = (q_e2b)^* x a_b = q_b2e x a_b + Vector3d accel_gravity = _this.avg_state.position.normalized()*(-9.81); + Vector3d accel_resid = accel_ecef + accel_gravity; // a = (xdd-g)+g = xdd; + + #if 0 + printf("==================================================\n"); + printf("Quaternion: % 1.4f % 1.4f % 1.4f % 1.4f\n", + _this.avg_state.orientation.w(), + _this.avg_state.orientation.x(), + _this.avg_state.orientation.y(), + _this.avg_state.orientation.z()); + printf("Accel_meas: % 1.4f % 1.4f % 1.4f\n", accel_meas(0), accel_meas(1), accel_meas(2)); + printf("Accel_ecef: % 1.4f % 1.4f % 1.4f\n", accel_ecef(0), accel_ecef(1), accel_ecef(2)); + printf("Accel_grav: % 1.4f % 1.4f % 1.4f\n", accel_gravity(0), accel_gravity(1), accel_gravity(2)); + #endif + +#if 0 + // This form works well with zero static acceleration. + Matrix accel_cov = + Eigen::AngleAxisd(-M_PI*0.5, _this.avg_state.position.normalized()) + * axis_scale(_this.avg_state.position.normalized(), 0) * 9.81; +#elif 1 + Matrix accel_cov = + Eigen::AngleAxisd(-M_PI*0.5, accel_ecef.normalized()) + * axis_scale(accel_ecef.normalized(), 0) * accel_meas.norm(); +#else + // The following form ends up being identical to the simpler one + // above + Matrix accel_cov = + Eigen::AngleAxisd(-M_PI*0.5, _this.avg_state.position.normalized()) + * axis_scale(_this.avg_state.position.normalized(), 0) * 9.81 + + Eigen::AngleAxisd(-M_PI*0.5, accel_resid.normalized()) + * axis_scale(accel_resid.normalized(), 0)*accel_resid.norm(); +#endif + // TODO: Optimization opportunity: the accel_cov doesn't change much over + // the life of a mission. Precompute it once and then retain the original. + // Then, only one 3x3 block ever gets updated in the A matrix below. + + // The linearized Kalman state projection matrix. +#if 0 + Matrix A; + // gyro bias row + A << Matrix::Identity(), Matrix::Zero(), + // Orientation row + _this.avg_state.orientation.conjugate().toRotationMatrix()*-dt, + Matrix::Identity(), Matrix::Zero(), + // Position row + Matrix::Zero(), -accel_cov*0.5*dt*dt, + Matrix::Identity(), Matrix::Identity()*dt, + // Velocity row + Matrix::Zero(), -accel_cov * dt, + Matrix::Zero(), Matrix::Identity(); + + // 800x realtime, with vectorization + _this.cov.part() = A * _this.cov * A.transpose(); +#else + // 1500x realtime, without vectorization, on 2.2 GHz Athlon X2 + const Matrix cov = _this.cov; + const Matrix3d dtR = dt * _this.avg_state.orientation.conjugate().toRotationMatrix(); + const Matrix3d dtQ = accel_cov * dt; + + _this.cov.block<3, 3>(0, 3) -= cov.block<3,3>(0, 0)*dtR.transpose(); + _this.cov.block<3, 3>(0, 6) += dt * cov.block<3, 3>(0, 9); + _this.cov.block<3, 3>(0, 9) -= cov.block<3, 3>(0, 3) * dtQ.transpose(); + _this.cov.block<3, 3>(3, 3).part() += dtR*cov.block<3, 3>(0, 0)*dtR.transpose() + - dtR*cov.block<3, 3>(0, 3) - cov.block<3, 3>(3, 0)*dtR.transpose(); + _this.cov.block<3, 3>(3, 6) += -dtR * (cov.block<3, 3>(0, 6) + dt*cov.block<3, 3>(0, 9)) + + dt*cov.block<3, 3>(3, 9); + _this.cov.block<3, 3>(3, 9) += -dtR*( -cov.block<3, 3>(0, 3)*dtQ.transpose() + cov.block<3, 3>(0, 9)) + - cov.block<3, 3>(3, 3)*dtQ.transpose(); + _this.cov.block<3, 3>(6, 6).part() += dt*cov.block<3, 3>(6, 9) + dt*dt*cov.block<3, 3>(9, 9) + + dt*cov.block<3, 3>(9, 6); + _this.cov.block<3, 3>(6, 9) += -cov.block<3, 3>(6, 3)*dtQ.transpose() + dt*cov.block<3, 3>(9, 9) + - dt*cov.block<3, 3>(9, 3)*dtQ.transpose(); + _this.cov.block<3, 3>(9, 9).part() += dtQ*cov.block<3, 3>(3, 3)*dtQ.transpose() + - dtQ*cov.block<3, 3>(3, 9) - cov.block<3, 3>(9, 3)*dtQ.transpose(); + + _this.cov.block<3, 3>(3, 0) = _this.cov.block<3, 3>(0, 3).transpose(); + _this.cov.block<3, 3>(6, 0) = _this.cov.block<3, 3>(0, 6).transpose(); + _this.cov.block<3, 3>(6, 3) = _this.cov.block<3, 3>(3, 6).transpose(); + _this.cov.block<3, 3>(9, 0) = _this.cov.block<3, 3>(0, 9).transpose(); + _this.cov.block<3, 3>(9, 3) = _this.cov.block<3, 3>(3, 9).transpose(); + _this.cov.block<3, 3>(9, 6) = _this.cov.block<3, 3>(6, 9).transpose(); +#endif + + _this.cov.block<3, 3>(0, 0) += _this.gyro_stability_noise.asDiagonal() * dt; + _this.cov.block<3, 3>(3, 3) += _this.gyro_white_noise.asDiagonal() * dt; + _this.cov.block<3, 3>(6, 6) += _this.accel_white_noise.asDiagonal() * 0.5*dt*dt; + _this.cov.block<3, 3>(9, 9) += _this.accel_white_noise.asDiagonal() * dt; + + Quaterniond orientation = exp((gyro_meas - _this.avg_state.gyro_bias) * dt) + * _this.avg_state.orientation; + //Vector3d accel = accel_ecef - _this.avg_state.position.normalized() * 9.81; + //std::cout << " ACCEL______(" << accel.transpose() << ")\n"; + Vector3d position = _this.avg_state.position + _this.avg_state.velocity * dt + 0.5*accel_resid*dt*dt; + Vector3d velocity = _this.avg_state.velocity + accel_resid*dt; + + _this.avg_state.position = position; + _this.avg_state.velocity = velocity; + _this.avg_state.orientation = orientation; +} + +} // !namespace (anon) + +void +basic_ins_qkf::predict(const Vector3d& gyro_meas, const Vector3d& accel_meas, double dt) +{ +#ifdef TIME_OPS + timer clock; + clock.start(); +#endif + + // Always use linearized prediction + linear_predict(*this, gyro_meas, accel_meas, dt); + +#ifdef TIME_OPS + double time = clock.stop()*1e6; + std::cout << "unscented predict time: " << time << "\n"; +#endif +} + diff --git a/sw/airborne/fms/libeknav/quaternions.hpp b/sw/airborne/fms/libeknav/quaternions.hpp index 1190162916..1aad063705 100644 --- a/sw/airborne/fms/libeknav/quaternions.hpp +++ b/sw/airborne/fms/libeknav/quaternions.hpp @@ -1,143 +1,143 @@ -#ifndef AHRS_QUATERNIONS_HPP -#define AHRS_QUATERNIONS_HPP - -/* - * quaternions.cpp - * - * Author: Jonathan Brandmeyer - * - * This file is part of libeknav. - * - * Libeknav is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3. - * - * Libeknav is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with libeknav. If not, see . - */ - -#include -#include - -using Eigen::Quaternion; - -template -Quaternion operator-(const Quaternion& q) -{ - return Quaternion(-q.w(), -q.x(), -q.y(), -q.z()); -} - -/** - * Convert a rotation from modified Rodrigues parameters to a quaternion. - * @param v The multiplication of the rotation angle by the tangent of the angle/4 - * @return The quaternion corresponding to that rotation. - */ -template -Quaternion exp_r(const Eigen::Matrix& v) -{ - // a2 = tan^2(theta/4) - FloatT a2 = v.squaredNorm(); - Quaternion ret; - // sin(theta/2) = 2*tan(theta/4) / (1 + tan^2(theta/4)) - // v == v.normalized() * tan^2(theta/4) - ret.vec() = v*(2/(1+a2)); - // cos(theta/2) = (1 - tan^2(theta/4)) / (1 + tan^2(theta/4)) - ret.w() = (1-a2)/(1+a2); - return ret; -} - -template -Eigen::Matrix log_r(const Quaternion& q) -{ - // Note: This algorithm is reasonably safe when using double - // precision (to within 1e-10 of precision), but not float. - /* - * q.w() == cos(theta/2) - * q.vec() == sin(theta/2)*v_hat - * - * - * Normal rodrigues params: - * v*tan(theta/2) = v*sin(theta/2) / cos(theta/2) - * v*tan(theta/2) = q.vec() / q.w() - * - * Modified rodrigues params (pulls away from infinity at theta=pi) - * tan(theta/2) == sin(theta) / (1 + cos(theta)) - * therefore, tan(theta/4)*v_hat = sin(theta/2)*v_hat / (1 + cos(theta/2)) - */ - return q.vec() / (1.0+q.w()); -} - -/** - * Convert an angle/axis 3-vector to a unit quaternion - * @param v A 3-vector whose length is between 0 and 2*pi - * @return The quaternion that represents the same rotation. - */ -template -Quaternion exp(Eigen::Matrix v); - -template -Quaternion exp(Eigen::Matrix v) -{ - FloatT angle = v.norm(); - if (angle <= Eigen::machine_epsilon()) { - // std::cerr << "Warning: tiny quaternion flushed to zero\n"; - return Quaternion::Identity(); - } - else { - Quaternion ret; -#if 0 - if (angle > 1.999*M_PI) { - // TODO: I really, really don't like this hack. It should - // be impossible to compute an angular measurement update - // with a rotation angle greater than this number... - v *= 1.999*M_PI / angle; - angle = 1.999*M_PI; - } -#endif - assert(angle <= FloatT(2.0*M_PI)); -#if 0 - // Oddly enough, this attempt to make the formula faster by reducing - // the number of trig calls actually runs slower. - FloatT tan_x = std::tan(angle * 0.25); - FloatT cos_angle = (1 - tan_x*tan_x)/(1+tan_x*tan_x); - FloatT sin_angle = 2*tan_x/(1+tan_x*tan_x); - ret.w() = cos_angle; - ret.vec() = (sin_angle/angle)*v; -#else - ret.w() = std::cos(angle*0.5); - ret.vec() = (std::sin(angle*0.5)/angle)*v; -#endif - return ret; - // return Quaternion(Eigen::AngleAxis(angle, v / angle)); - } -} - -/** - * Convert a unit quaternion to multiplied angle/axis form. - * @param q A unit quaternion. The quaternion's norm should be close to unity, - * but may be slightly too large or small. - * @return The 3-vector in the tangent space of the quaternion q. - */ -template -Eigen::Matrix log(const Quaternion& q) __attribute__((noinline)); - -template -Eigen::Matrix log(const Quaternion& q) -{ - FloatT mag = q.vec().norm(); - if (mag <= Eigen::machine_epsilon()) { - // Flush to zero for very small angles. This avoids division by zero. - return Eigen::Matrix::Zero(); - } - FloatT angle = 2.0*std::atan2(mag, q.w()); - return q.vec() * (angle/mag); - // Eigen::AngleAxis res(q /*mag <= 1.0) ? q : q.normalized() */); - // return res.axis() * res.angle(); -} - -#endif +#ifndef AHRS_QUATERNIONS_HPP +#define AHRS_QUATERNIONS_HPP + +/* + * quaternions.cpp + * + * Author: Jonathan Brandmeyer + * + * This file is part of libeknav. + * + * Libeknav is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * Libeknav is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with libeknav. If not, see . + */ + +#include +#include + +using Eigen::Quaternion; + +template +Quaternion operator-(const Quaternion& q) +{ + return Quaternion(-q.w(), -q.x(), -q.y(), -q.z()); +} + +/** + * Convert a rotation from modified Rodrigues parameters to a quaternion. + * @param v The multiplication of the rotation angle by the tangent of the angle/4 + * @return The quaternion corresponding to that rotation. + */ +template +Quaternion exp_r(const Eigen::Matrix& v) +{ + // a2 = tan^2(theta/4) + FloatT a2 = v.squaredNorm(); + Quaternion ret; + // sin(theta/2) = 2*tan(theta/4) / (1 + tan^2(theta/4)) + // v == v.normalized() * tan^2(theta/4) + ret.vec() = v*(2/(1+a2)); + // cos(theta/2) = (1 - tan^2(theta/4)) / (1 + tan^2(theta/4)) + ret.w() = (1-a2)/(1+a2); + return ret; +} + +template +Eigen::Matrix log_r(const Quaternion& q) +{ + // Note: This algorithm is reasonably safe when using double + // precision (to within 1e-10 of precision), but not float. + /* + * q.w() == cos(theta/2) + * q.vec() == sin(theta/2)*v_hat + * + * + * Normal rodrigues params: + * v*tan(theta/2) = v*sin(theta/2) / cos(theta/2) + * v*tan(theta/2) = q.vec() / q.w() + * + * Modified rodrigues params (pulls away from infinity at theta=pi) + * tan(theta/2) == sin(theta) / (1 + cos(theta)) + * therefore, tan(theta/4)*v_hat = sin(theta/2)*v_hat / (1 + cos(theta/2)) + */ + return q.vec() / (1.0+q.w()); +} + +/** + * Convert an angle/axis 3-vector to a unit quaternion + * @param v A 3-vector whose length is between 0 and 2*pi + * @return The quaternion that represents the same rotation. + */ +template +Quaternion exp(Eigen::Matrix v); + +template +Quaternion exp(Eigen::Matrix v) +{ + FloatT angle = v.norm(); + if (angle <= Eigen::machine_epsilon()) { + // std::cerr << "Warning: tiny quaternion flushed to zero\n"; + return Quaternion::Identity(); + } + else { + Quaternion ret; +#if 0 + if (angle > 1.999*M_PI) { + // TODO: I really, really don't like this hack. It should + // be impossible to compute an angular measurement update + // with a rotation angle greater than this number... + v *= 1.999*M_PI / angle; + angle = 1.999*M_PI; + } +#endif + assert(angle <= FloatT(2.0*M_PI)); +#if 0 + // Oddly enough, this attempt to make the formula faster by reducing + // the number of trig calls actually runs slower. + FloatT tan_x = std::tan(angle * 0.25); + FloatT cos_angle = (1 - tan_x*tan_x)/(1+tan_x*tan_x); + FloatT sin_angle = 2*tan_x/(1+tan_x*tan_x); + ret.w() = cos_angle; + ret.vec() = (sin_angle/angle)*v; +#else + ret.w() = std::cos(angle*0.5); + ret.vec() = (std::sin(angle*0.5)/angle)*v; +#endif + return ret; + // return Quaternion(Eigen::AngleAxis(angle, v / angle)); + } +} + +/** + * Convert a unit quaternion to multiplied angle/axis form. + * @param q A unit quaternion. The quaternion's norm should be close to unity, + * but may be slightly too large or small. + * @return The 3-vector in the tangent space of the quaternion q. + */ +template +Eigen::Matrix log(const Quaternion& q) __attribute__((noinline)); + +template +Eigen::Matrix log(const Quaternion& q) +{ + FloatT mag = q.vec().norm(); + if (mag <= Eigen::machine_epsilon()) { + // Flush to zero for very small angles. This avoids division by zero. + return Eigen::Matrix::Zero(); + } + FloatT angle = 2.0*std::atan2(mag, q.w()); + return q.vec() * (angle/mag); + // Eigen::AngleAxis res(q /*mag <= 1.0) ? q : q.normalized() */); + // return res.axis() * res.angle(); +} + +#endif diff --git a/sw/in_progress/airspeed/rls.m b/sw/in_progress/airspeed/rls.m index f0f1720e98..d70994bdfd 100644 --- a/sw/in_progress/airspeed/rls.m +++ b/sw/in_progress/airspeed/rls.m @@ -1,40 +1,40 @@ -clear -close all - -% DATA -t=1:200; -orig = sin(t./3)+sin(t./100.*2.*pi); -echo = [orig(4:end) 0 0 0]./1.2 + 0.5; -echo = echo + randn(size(orig))./10; -x = echo; -d = orig; - -% RLS -rls_p = 5; -rls_delta = 1; -rls_lambda = 0.95; -rls_x = ones(rls_p+1, 1).* x(1); -rls_w = ones(rls_p+1, 1)./(rls_p+1); -rls_P = eye(rls_p+1) .* rls_delta; - -filt = x; - -for i=t - rls_x = [ x(i); rls_x(1:end-2); 1]; - filt(i) = rls_w' * rls_x; - rls_alpha = d(i) - filt(i); - rls_g = rls_P * rls_x / (rls_lambda + rls_x' * rls_P * rls_x); - rls_P = rls_P / rls_lambda - rls_g*rls_x'* rls_P / rls_lambda; - rls_w = rls_w + rls_alpha * rls_g; - - -end - - -close all; -figure; -plot(orig,'r'); -hold on; -plot(echo,'b'); -plot(filt,'g'); - +clear +close all + +% DATA +t=1:200; +orig = sin(t./3)+sin(t./100.*2.*pi); +echo = [orig(4:end) 0 0 0]./1.2 + 0.5; +echo = echo + randn(size(orig))./10; +x = echo; +d = orig; + +% RLS +rls_p = 5; +rls_delta = 1; +rls_lambda = 0.95; +rls_x = ones(rls_p+1, 1).* x(1); +rls_w = ones(rls_p+1, 1)./(rls_p+1); +rls_P = eye(rls_p+1) .* rls_delta; + +filt = x; + +for i=t + rls_x = [ x(i); rls_x(1:end-2); 1]; + filt(i) = rls_w' * rls_x; + rls_alpha = d(i) - filt(i); + rls_g = rls_P * rls_x / (rls_lambda + rls_x' * rls_P * rls_x); + rls_P = rls_P / rls_lambda - rls_g*rls_x'* rls_P / rls_lambda; + rls_w = rls_w + rls_alpha * rls_g; + + +end + + +close all; +figure; +plot(orig,'r'); +hold on; +plot(echo,'b'); +plot(filt,'g'); + diff --git a/sw/in_progress/airspeed/rls_control.m b/sw/in_progress/airspeed/rls_control.m index bc6bfd975b..1364885937 100644 --- a/sw/in_progress/airspeed/rls_control.m +++ b/sw/in_progress/airspeed/rls_control.m @@ -1,99 +1,99 @@ -clear -close all - -% DATA -tmax = 200; -t=1:tmax; -command = zeros(1,tmax); -command(50:150) = 1; - -% reference model -vref = zeros(1,tmax); -vrefdot = 0; - -sysx = 0.2; -sysvx = 0; -plotsys = zeros(1,tmax); - -integrator = 0; -plotint =zeros(1,tmax); - -x = zeros(1,1:tmax); -d = zeros(1,1:tmax); -filt = zeros(1,1:tmax); - -% RLS -rls_p = 5; -rls_delta = 1; -rls_lambda = 0.95; -rls_x = ones(rls_p+1, 1).* x(1); -rls_w = ones(rls_p+1, 1)./(rls_p+1); -rls_P = eye(rls_p+1) .* rls_delta; - -for i=2:tmax - acc = (command(i) - vref(i-1)) / 8 - vrefdot * 0.7 ; - if (acc > 0.02) - acc = 0.02; - elseif (acc<-0.02) - acc = -0.02; - end - vrefdot = vrefdot + acc; - if vrefdot > 0.5 - vrefdot = 0.5 - elseif vrefdot < -0.5 - vrefdot = 0.5 - end - vref(i) = vref(i-1) + vrefdot; - - % Control with Integrator - error = vref(i) - sysx + rand(1,1) / 20.0; - integrator = integrator + error / 2; - syscomm = error * 4 + integrator; - - sysacc = (syscomm - (sysx-0.2)*0.75) / 5 - sysvx*0.6; - if (sysacc > 0.04) - sysacc = 0.04; - elseif (sysacc<-0.04) - sysacc = -0.04; - end - sysvx = sysvx + sysacc; - if sysvx > 0.6 - sysvx = 0.6 - elseif sysvx < -0.7 - sysvx = 0.7 - end - sysx = sysx + sysvx; - - plotsys(i) = sysx; - plotint(i) = integrator; -end - -close all -figure -plot(command , 'r'); -hold on -plot(vref,'g'); -plot(plotsys,'b') -plot(plotint,'k'); - -%% Rest - - -for i=t - rls_x = [ x(i); rls_x(1:end-1)]; - filt(i) = rls_w' * rls_x; - rls_alpha = d(i) - filt(i); - rls_g = rls_P * rls_x / (rls_lambda + rls_x' * rls_P * rls_x); - rls_P = rls_P / rls_lambda - rls_g*rls_x'* rls_P / rls_lambda; - rls_w = rls_w + rls_alpha * rls_g; - - -end - - -figure; -plot(orig,'r'); -hold on; -plot(echo,'b'); -plot(filt,'g'); - +clear +close all + +% DATA +tmax = 200; +t=1:tmax; +command = zeros(1,tmax); +command(50:150) = 1; + +% reference model +vref = zeros(1,tmax); +vrefdot = 0; + +sysx = 0.2; +sysvx = 0; +plotsys = zeros(1,tmax); + +integrator = 0; +plotint =zeros(1,tmax); + +x = zeros(1,1:tmax); +d = zeros(1,1:tmax); +filt = zeros(1,1:tmax); + +% RLS +rls_p = 5; +rls_delta = 1; +rls_lambda = 0.95; +rls_x = ones(rls_p+1, 1).* x(1); +rls_w = ones(rls_p+1, 1)./(rls_p+1); +rls_P = eye(rls_p+1) .* rls_delta; + +for i=2:tmax + acc = (command(i) - vref(i-1)) / 8 - vrefdot * 0.7 ; + if (acc > 0.02) + acc = 0.02; + elseif (acc<-0.02) + acc = -0.02; + end + vrefdot = vrefdot + acc; + if vrefdot > 0.5 + vrefdot = 0.5 + elseif vrefdot < -0.5 + vrefdot = 0.5 + end + vref(i) = vref(i-1) + vrefdot; + + % Control with Integrator + error = vref(i) - sysx + rand(1,1) / 20.0; + integrator = integrator + error / 2; + syscomm = error * 4 + integrator; + + sysacc = (syscomm - (sysx-0.2)*0.75) / 5 - sysvx*0.6; + if (sysacc > 0.04) + sysacc = 0.04; + elseif (sysacc<-0.04) + sysacc = -0.04; + end + sysvx = sysvx + sysacc; + if sysvx > 0.6 + sysvx = 0.6 + elseif sysvx < -0.7 + sysvx = 0.7 + end + sysx = sysx + sysvx; + + plotsys(i) = sysx; + plotint(i) = integrator; +end + +close all +figure +plot(command , 'r'); +hold on +plot(vref,'g'); +plot(plotsys,'b') +plot(plotint,'k'); + +%% Rest + + +for i=t + rls_x = [ x(i); rls_x(1:end-1)]; + filt(i) = rls_w' * rls_x; + rls_alpha = d(i) - filt(i); + rls_g = rls_P * rls_x / (rls_lambda + rls_x' * rls_P * rls_x); + rls_P = rls_P / rls_lambda - rls_g*rls_x'* rls_P / rls_lambda; + rls_w = rls_w + rls_alpha * rls_g; + + +end + + +figure; +plot(orig,'r'); +hold on; +plot(echo,'b'); +plot(filt,'g'); + diff --git a/sw/in_progress/airspeed/ultrasimplesim.m b/sw/in_progress/airspeed/ultrasimplesim.m index 2b7be7b9f8..3f1369a105 100644 --- a/sw/in_progress/airspeed/ultrasimplesim.m +++ b/sw/in_progress/airspeed/ultrasimplesim.m @@ -1,429 +1,429 @@ -clear -clc -close all - - - -dt = 1/60; -simsteps = 25000; - -timespan=0:1/60:100; - -t = 0; -airspeed = 14; -acceleration = 0; -vclimb = 0; -altitude = 100; -pitch = 0; -alpha = 0; -pitch_sp = 0.2; -throttle = 0.5; -power = 0.25; -elevator = 0; - - -% Altitude command -altitude_sp = ones(1,simsteps).* 100; -% Airspeed command -airspeed_sp = ones(1,simsteps).* 12; - -% slow climb + descend -altitude_sp(1,2000:4000) = 125; -% fast climb + descend -airspeed_sp(1,6000:12000) = 16; -altitude_sp(1,8000:10000) = 125; -% too low airspeed -airspeed_sp(1,13000:14000) = 7; -% too high airspeed -airspeed_sp(1,15000:16000) = 30; -% throttle kill batlow -battery_good = ones(1,simsteps); -battery_good(1,24000:25000) = 0; -% Roll perturbation -roll_perturbation = zeros(1,simsteps); -% roll oscillation: e.g. poor nav -roll_perturbation(1,21000:24000) = abs(sin((21000:24000)./170 .* 6.28)); -% Headwind changes by making turns -% -to keep a constant airspeed, a kinematic acceleration is needed -% -or with constant kinetic energy, a change in airspeed is seen -wind = zeros(1,simsteps); -% 60Hz 70m circle 11m/s 410m = ca 2000 samples -wind(1, 17000:23000) = sin((17000:23000)./2000 .* 6.28) .* 5; -% derivative of sin is cos so we might also just turn the wind 90deg -headwind_induced_kinematic_acceleration = wind .* 0.10; - - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Save states for plotting -X = zeros(simsteps,15); -extra1 = 0; -extra2 = 0; - -% Very ultra-sofisticated Aircraft Model -Vmax = 26; % Level flight full power -Vmin = 8; % Stall -Mass = 1.0; - -% Controller States -pitch_cumsum = 0; -airspeed_cumsum = 0; - -% RLS -rls_p = 3; -rls_delta = 0; -rls_x = zeros(rls_p+1, 1); -rls_w = zeros(rls_p+1, 1); -rls_P = eye(rls_p+1) .* rls_delta; - - -for i=1:simsteps - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % Simplified A/C long dynamics with stall and energy - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % Pitch loop without integrators - pitch_neutral = 0.2; - elevator = (pitch_neutral + pitch_sp - pitch) * 15; - if (elevator > 0.4) - elevator = 0.4; - elseif (elevator < -0.2) - elevator = -0.2; - end - % Follow elevator but also align with the flow - pitch = pitch + elevator * dt - alpha * dt; - % Angle of attack from 0 deg at vmax to 17 deg stall at vmin - if airspeed > Vmax - alpha = 0; - LoverD = 6; - elseif airspeed < Vmin - % from Vmin downto 0.95 Vmin ... increase alpha from 17 to 45 deg - lin = (Vmin-airspeed) / (0.05*Vmin); - if (lin > 1) - lin = 1; - end - alpha = (17 + (60-17) * lin) / 57; % complete stall - LoverD = 8 - 7 * lin; - else - alpha = (Vmax - airspeed) / (Vmax-Vmin) * 17.0 / 57; - LoverD = 8; - end - % Path angle - gamma = pitch - alpha; - vclimb = sin(gamma) * airspeed; - altitude = altitude + vclimb * dt; - % Using the pitch angle... - P_climb = vclimb * Mass; - % Lift over Drag - P_drag = airspeed / (LoverD / (1+roll_perturbation(i))) * Mass; - % Motor Energy - power_sp = throttle ^ 2; - power = power + (power_sp - power) * 0.1; - % Full throttle = same energy as vmax glide - P_motor = (Vmax / LoverD) * sqrt(power) * Mass; - % Total energy - P_tot = P_motor - P_drag - P_climb; - - acceleration = P_tot / Mass + headwind_induced_kinematic_acceleration(i); - airspeed = airspeed + (acceleration * dt); - - if (airspeed < Vmin/2) - airspeed = Vmin/2; - end - if (altitude < 0) - altitude = 0; - end - - - controller = 4; - - - - %%%%%%%%%%%%%%%%%%%%%%%%% - % Run Control 1: Standard no-airspeed - - if controller == 1 - Throttle_min = 0.0; - Throttle_max = 1.; - - Pitch_min = -30/57; - Pitch_max = 45/57; - - VClimb_max = 3; - - - % Traditional with integrators: - - vclimb_sp = (altitude_sp(i) - altitude); - if (vclimb_sp > VClimb_max) - vclimb_sp = VClimb_max; - elseif (vclimb_sp < -VClimb_max) - vclimb_sp = -VClimb_max; - end - % throttle increment only.... - throttle = 0.65 + vclimb_sp * 0.9; - if (throttle > Throttle_max) - throttle = Throttle_max; - elseif (throttle < Throttle_min) - throttle = Throttle_min; - end - % pitch of vz - pitch_sp = 0.025 + vclimb_sp * 0.05; - if (pitch_sp > Pitch_max) - pitch_sp = Pitch_max; - elseif (pitch_sp < Pitch_min) - pitch_sp = Pitch_min; - end - - %%%%%%%%%%%%%%%%%%%%%%%%% - % Run Control 2-3: Old Airspeed Loops - % 2: with saturated integrator as most people used - % 3: with active integrator - - elseif (controller == 2) || (controller == 3) - Throttle_min = 0.0; - Throttle_max = 1; - - Pitch_min = -6/57; - Pitch_max = 15/57; - - VClimb_max = 1.0; - - - - % Traditional with integrators: - - vclimb_sp = (altitude_sp(i) - altitude); - if (vclimb_sp > VClimb_max) - vclimb_sp = VClimb_max; - elseif (vclimb_sp < -VClimb_max) - vclimb_sp = -VClimb_max; - end - % I-gain - pitch_cumsum = pitch_cumsum + (vclimb_sp - vclimb) * 0.0015; - if (pitch_cumsum > Pitch_max) - pitch_cumsum = Pitch_max; - elseif (pitch_cumsum < Pitch_min) - pitch_cumsum = Pitch_min; - end - % P-gain - pitch_sp = pitch_cumsum + vclimb_sp * 0.025; - if (pitch_sp > Pitch_max) - pitch_sp = Pitch_max; - elseif (pitch_sp < Pitch_min) - pitch_sp = Pitch_min; - end - - err_airspeed = airspeed_sp(i) - airspeed; - if (controller == 2) - airspeed_cumsum = 0.45; - else - airspeed_cumsum = airspeed_cumsum + err_airspeed * 0.001; - end - if (airspeed_cumsum > Throttle_max) - airspeed_cumsum = Throttle_max; - elseif (airspeed_cumsum < Throttle_min) - airspeed_cumsum = Throttle_min; - end - throttle = airspeed_cumsum + err_airspeed * 0.2; - if (throttle > Throttle_max) - throttle = Throttle_max; - elseif (throttle < Throttle_min) - throttle = Throttle_min; - end - - %%%%%%%%%%%%%%%%%%%%%%%%% - % Run Control 4: Feed Forward Gains to climb/accelerate Tcr+Tcl - - elseif controller == 4 - Throttle_min = 0.0; - Throttle_max = 1; - - Pitch_min = -12/57; - Pitch_max = 25/57; - - if (airspeed_sp(i) <= 12) - VClimb_max = 3; - Pitch_max = 10.5/57; - Pitch_min = -4.5/57; - else - VClimb_max = 2; - Pitch_max = 3.5/57; - Pitch_min = -11/57; - end - - % Climb feed forward gain per m/s - Tcl = 0.25; - % Cruise feed forward gain per m/s - Tcr = 1/26; - - % Traditional with integrators: - - vclimb_sp = (altitude_sp(i) - altitude); - if (vclimb_sp > VClimb_max) - vclimb_sp = VClimb_max; - elseif (vclimb_sp < -VClimb_max) - vclimb_sp = -VClimb_max; - end - % I-gain - pitch_cumsum = pitch_cumsum + (vclimb_sp - vclimb) * 0.0015; - if (pitch_cumsum > Pitch_max) - pitch_cumsum = Pitch_max; - elseif (pitch_cumsum < Pitch_min) - pitch_cumsum = Pitch_min; - end - % P-gain - pitch_sp = pitch_cumsum + vclimb_sp * 0.025; - if (pitch_sp > Pitch_max) - pitch_sp = Pitch_max; - elseif (pitch_sp < Pitch_min) - pitch_sp = Pitch_min; - end - - err_airspeed = airspeed_sp(i) - airspeed; - airspeed_cumsum = airspeed_cumsum + err_airspeed * 0.0005; - if (airspeed_cumsum > Throttle_max) - airspeed_cumsum = Throttle_max; - elseif (airspeed_cumsum < Throttle_min) - airspeed_cumsum = Throttle_min; - end - throttle = airspeed_cumsum + err_airspeed * 0.2 + Tcr * airspeed_sp(i) + Tcl * vclimb_sp; - if (throttle > Throttle_max) - throttle = Throttle_max; - elseif (throttle < Throttle_min) - throttle = Throttle_min; - end - - %%%%%%%%%%%%%%%%%%%%%%%%% - % Run Control 5: Feed Forward Gains to climb/accelerate Tcr+Tcl - - elseif controller == 5 - Throttle_min = 0.0; - Throttle_max = 1; - - Pitch_min = -6/57; - Pitch_max = 15/57; - - VClimb_max = 1.0; - - if (i==1) - % Climb feed forward gain per m/s - Tcl = 0.25; - % Cruise feed forward gain per m/s - Tcr = 1/2000; - end - - % Traditional with integrators: - - vclimb_sp = (altitude_sp(i) - altitude); - if (vclimb_sp > VClimb_max) - vclimb_sp = VClimb_max; - elseif (vclimb_sp < -VClimb_max) - vclimb_sp = -VClimb_max; - end - % I-gain - pitch_cumsum = pitch_cumsum + (vclimb_sp - vclimb) * 0.0015; - if (pitch_cumsum > Pitch_max) - pitch_cumsum = Pitch_max; - elseif (pitch_cumsum < Pitch_min) - pitch_cumsum = Pitch_min; - end - % P-gain - pitch_sp = pitch_cumsum + vclimb_sp * 0.025; - if (pitch_sp > Pitch_max) - pitch_sp = Pitch_max; - elseif (pitch_sp < Pitch_min) - pitch_sp = Pitch_min; - end - - err_airspeed = airspeed_sp(i) - airspeed; - if (abs(vclimb_sp) > 0.5) - %Tcl = Tcl + err_airspeed/airspeed_sp(i) * 0.05 * 0.01; - Tcr = Tcr + err_airspeed/airspeed_sp(i) * 0.05 * 0.001; - else - %Tcl = Tcl + err_airspeed/airspeed_sp(i) * 0.05 * 0.001; - Tcr = Tcr + err_airspeed/airspeed_sp(i) * 0.05 * 0.01; - end - throttle = err_airspeed * 0.2 + Tcr * airspeed_sp(i) + Tcl * vclimb_sp; - if (throttle > Throttle_max) - throttle = Throttle_max; - elseif (throttle < Throttle_min) - throttle = Throttle_min; - end - - extra1 = Tcr; - end - - % Autopilot actions - if battery_good(i) == 0 - throttle = 0; - end - - % Save For plotting - X(i,:) = [ airspeed_sp(i) airspeed altitude_sp(i) altitude throttle power pitch_sp (pitch-pitch_neutral) alpha gamma elevator vclimb_sp vclimb extra1 extra2]; - -end - - - -figure -subplot(6,1,1) -hold on -plot(airspeed_sp,'r'); -plot(X(:,2),'b'); -plot(ones(simsteps,1)*Vmin,'k'); -plot(ones(simsteps,1)*Vmax,'k'); -title('Airspeed') -axis([0 simsteps Vmin-1 Vmax+1]); -grid - -subplot(6,1,2) -hold on -plot(altitude_sp,'r'); -plot(X(:,4),'b'); -title('Altitude') -axis([0 simsteps (min(altitude_sp) - 10) (max(altitude_sp)+10)]); -grid - -subplot(6,1,3) -hold on -plot(X(:,5),'r'); -title('Throttle') -axis([0 simsteps 0 1]); -grid - - -subplot(6,1,4) -hold on -plot(X(:,7)*57,'r'); -plot(X(:,8)*57,'b'); -title('Pitch (degrees)') -axis([0 simsteps (Pitch_min*57-3) (Pitch_max*57 + 3)]); -grid - -subplot(6,1,5) -hold on -plot(X(:,9)*57,'g'); -plot(ones(simsteps,1)*17,'r'); -plot(X(:,10)*57,'k'); -axis([0 simsteps -10 20]); -title('Alpha (green) Gamma (black) (degrees)') -%legend('1','2') -grid - -subplot(6,1,6) -hold on -plot(X(:,12),'r'); -plot(X(:,13),'b'); -title('VClimb') -axis([0 simsteps (-VClimb_max -0.5) (VClimb_max + 0.5)]); -grid - -set(gcf,'PaperUnits','centimeter') -set(gcf,'PaperSize',[21 30.5]) -set(gcf,'PaperPosition',[1 1 19 28.5]) -print(gcf,'-depsc2', ['results_' num2str(controller)]); -%print(gcf,'-djpeg', ['results_' num2str(controller)]); - - +clear +clc +close all + + + +dt = 1/60; +simsteps = 25000; + +timespan=0:1/60:100; + +t = 0; +airspeed = 14; +acceleration = 0; +vclimb = 0; +altitude = 100; +pitch = 0; +alpha = 0; +pitch_sp = 0.2; +throttle = 0.5; +power = 0.25; +elevator = 0; + + +% Altitude command +altitude_sp = ones(1,simsteps).* 100; +% Airspeed command +airspeed_sp = ones(1,simsteps).* 12; + +% slow climb + descend +altitude_sp(1,2000:4000) = 125; +% fast climb + descend +airspeed_sp(1,6000:12000) = 16; +altitude_sp(1,8000:10000) = 125; +% too low airspeed +airspeed_sp(1,13000:14000) = 7; +% too high airspeed +airspeed_sp(1,15000:16000) = 30; +% throttle kill batlow +battery_good = ones(1,simsteps); +battery_good(1,24000:25000) = 0; +% Roll perturbation +roll_perturbation = zeros(1,simsteps); +% roll oscillation: e.g. poor nav +roll_perturbation(1,21000:24000) = abs(sin((21000:24000)./170 .* 6.28)); +% Headwind changes by making turns +% -to keep a constant airspeed, a kinematic acceleration is needed +% -or with constant kinetic energy, a change in airspeed is seen +wind = zeros(1,simsteps); +% 60Hz 70m circle 11m/s 410m = ca 2000 samples +wind(1, 17000:23000) = sin((17000:23000)./2000 .* 6.28) .* 5; +% derivative of sin is cos so we might also just turn the wind 90deg +headwind_induced_kinematic_acceleration = wind .* 0.10; + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Save states for plotting +X = zeros(simsteps,15); +extra1 = 0; +extra2 = 0; + +% Very ultra-sofisticated Aircraft Model +Vmax = 26; % Level flight full power +Vmin = 8; % Stall +Mass = 1.0; + +% Controller States +pitch_cumsum = 0; +airspeed_cumsum = 0; + +% RLS +rls_p = 3; +rls_delta = 0; +rls_x = zeros(rls_p+1, 1); +rls_w = zeros(rls_p+1, 1); +rls_P = eye(rls_p+1) .* rls_delta; + + +for i=1:simsteps + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Simplified A/C long dynamics with stall and energy + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Pitch loop without integrators + pitch_neutral = 0.2; + elevator = (pitch_neutral + pitch_sp - pitch) * 15; + if (elevator > 0.4) + elevator = 0.4; + elseif (elevator < -0.2) + elevator = -0.2; + end + % Follow elevator but also align with the flow + pitch = pitch + elevator * dt - alpha * dt; + % Angle of attack from 0 deg at vmax to 17 deg stall at vmin + if airspeed > Vmax + alpha = 0; + LoverD = 6; + elseif airspeed < Vmin + % from Vmin downto 0.95 Vmin ... increase alpha from 17 to 45 deg + lin = (Vmin-airspeed) / (0.05*Vmin); + if (lin > 1) + lin = 1; + end + alpha = (17 + (60-17) * lin) / 57; % complete stall + LoverD = 8 - 7 * lin; + else + alpha = (Vmax - airspeed) / (Vmax-Vmin) * 17.0 / 57; + LoverD = 8; + end + % Path angle + gamma = pitch - alpha; + vclimb = sin(gamma) * airspeed; + altitude = altitude + vclimb * dt; + % Using the pitch angle... + P_climb = vclimb * Mass; + % Lift over Drag + P_drag = airspeed / (LoverD / (1+roll_perturbation(i))) * Mass; + % Motor Energy + power_sp = throttle ^ 2; + power = power + (power_sp - power) * 0.1; + % Full throttle = same energy as vmax glide + P_motor = (Vmax / LoverD) * sqrt(power) * Mass; + % Total energy + P_tot = P_motor - P_drag - P_climb; + + acceleration = P_tot / Mass + headwind_induced_kinematic_acceleration(i); + airspeed = airspeed + (acceleration * dt); + + if (airspeed < Vmin/2) + airspeed = Vmin/2; + end + if (altitude < 0) + altitude = 0; + end + + + controller = 4; + + + + %%%%%%%%%%%%%%%%%%%%%%%%% + % Run Control 1: Standard no-airspeed + + if controller == 1 + Throttle_min = 0.0; + Throttle_max = 1.; + + Pitch_min = -30/57; + Pitch_max = 45/57; + + VClimb_max = 3; + + + % Traditional with integrators: + + vclimb_sp = (altitude_sp(i) - altitude); + if (vclimb_sp > VClimb_max) + vclimb_sp = VClimb_max; + elseif (vclimb_sp < -VClimb_max) + vclimb_sp = -VClimb_max; + end + % throttle increment only.... + throttle = 0.65 + vclimb_sp * 0.9; + if (throttle > Throttle_max) + throttle = Throttle_max; + elseif (throttle < Throttle_min) + throttle = Throttle_min; + end + % pitch of vz + pitch_sp = 0.025 + vclimb_sp * 0.05; + if (pitch_sp > Pitch_max) + pitch_sp = Pitch_max; + elseif (pitch_sp < Pitch_min) + pitch_sp = Pitch_min; + end + + %%%%%%%%%%%%%%%%%%%%%%%%% + % Run Control 2-3: Old Airspeed Loops + % 2: with saturated integrator as most people used + % 3: with active integrator + + elseif (controller == 2) || (controller == 3) + Throttle_min = 0.0; + Throttle_max = 1; + + Pitch_min = -6/57; + Pitch_max = 15/57; + + VClimb_max = 1.0; + + + + % Traditional with integrators: + + vclimb_sp = (altitude_sp(i) - altitude); + if (vclimb_sp > VClimb_max) + vclimb_sp = VClimb_max; + elseif (vclimb_sp < -VClimb_max) + vclimb_sp = -VClimb_max; + end + % I-gain + pitch_cumsum = pitch_cumsum + (vclimb_sp - vclimb) * 0.0015; + if (pitch_cumsum > Pitch_max) + pitch_cumsum = Pitch_max; + elseif (pitch_cumsum < Pitch_min) + pitch_cumsum = Pitch_min; + end + % P-gain + pitch_sp = pitch_cumsum + vclimb_sp * 0.025; + if (pitch_sp > Pitch_max) + pitch_sp = Pitch_max; + elseif (pitch_sp < Pitch_min) + pitch_sp = Pitch_min; + end + + err_airspeed = airspeed_sp(i) - airspeed; + if (controller == 2) + airspeed_cumsum = 0.45; + else + airspeed_cumsum = airspeed_cumsum + err_airspeed * 0.001; + end + if (airspeed_cumsum > Throttle_max) + airspeed_cumsum = Throttle_max; + elseif (airspeed_cumsum < Throttle_min) + airspeed_cumsum = Throttle_min; + end + throttle = airspeed_cumsum + err_airspeed * 0.2; + if (throttle > Throttle_max) + throttle = Throttle_max; + elseif (throttle < Throttle_min) + throttle = Throttle_min; + end + + %%%%%%%%%%%%%%%%%%%%%%%%% + % Run Control 4: Feed Forward Gains to climb/accelerate Tcr+Tcl + + elseif controller == 4 + Throttle_min = 0.0; + Throttle_max = 1; + + Pitch_min = -12/57; + Pitch_max = 25/57; + + if (airspeed_sp(i) <= 12) + VClimb_max = 3; + Pitch_max = 10.5/57; + Pitch_min = -4.5/57; + else + VClimb_max = 2; + Pitch_max = 3.5/57; + Pitch_min = -11/57; + end + + % Climb feed forward gain per m/s + Tcl = 0.25; + % Cruise feed forward gain per m/s + Tcr = 1/26; + + % Traditional with integrators: + + vclimb_sp = (altitude_sp(i) - altitude); + if (vclimb_sp > VClimb_max) + vclimb_sp = VClimb_max; + elseif (vclimb_sp < -VClimb_max) + vclimb_sp = -VClimb_max; + end + % I-gain + pitch_cumsum = pitch_cumsum + (vclimb_sp - vclimb) * 0.0015; + if (pitch_cumsum > Pitch_max) + pitch_cumsum = Pitch_max; + elseif (pitch_cumsum < Pitch_min) + pitch_cumsum = Pitch_min; + end + % P-gain + pitch_sp = pitch_cumsum + vclimb_sp * 0.025; + if (pitch_sp > Pitch_max) + pitch_sp = Pitch_max; + elseif (pitch_sp < Pitch_min) + pitch_sp = Pitch_min; + end + + err_airspeed = airspeed_sp(i) - airspeed; + airspeed_cumsum = airspeed_cumsum + err_airspeed * 0.0005; + if (airspeed_cumsum > Throttle_max) + airspeed_cumsum = Throttle_max; + elseif (airspeed_cumsum < Throttle_min) + airspeed_cumsum = Throttle_min; + end + throttle = airspeed_cumsum + err_airspeed * 0.2 + Tcr * airspeed_sp(i) + Tcl * vclimb_sp; + if (throttle > Throttle_max) + throttle = Throttle_max; + elseif (throttle < Throttle_min) + throttle = Throttle_min; + end + + %%%%%%%%%%%%%%%%%%%%%%%%% + % Run Control 5: Feed Forward Gains to climb/accelerate Tcr+Tcl + + elseif controller == 5 + Throttle_min = 0.0; + Throttle_max = 1; + + Pitch_min = -6/57; + Pitch_max = 15/57; + + VClimb_max = 1.0; + + if (i==1) + % Climb feed forward gain per m/s + Tcl = 0.25; + % Cruise feed forward gain per m/s + Tcr = 1/2000; + end + + % Traditional with integrators: + + vclimb_sp = (altitude_sp(i) - altitude); + if (vclimb_sp > VClimb_max) + vclimb_sp = VClimb_max; + elseif (vclimb_sp < -VClimb_max) + vclimb_sp = -VClimb_max; + end + % I-gain + pitch_cumsum = pitch_cumsum + (vclimb_sp - vclimb) * 0.0015; + if (pitch_cumsum > Pitch_max) + pitch_cumsum = Pitch_max; + elseif (pitch_cumsum < Pitch_min) + pitch_cumsum = Pitch_min; + end + % P-gain + pitch_sp = pitch_cumsum + vclimb_sp * 0.025; + if (pitch_sp > Pitch_max) + pitch_sp = Pitch_max; + elseif (pitch_sp < Pitch_min) + pitch_sp = Pitch_min; + end + + err_airspeed = airspeed_sp(i) - airspeed; + if (abs(vclimb_sp) > 0.5) + %Tcl = Tcl + err_airspeed/airspeed_sp(i) * 0.05 * 0.01; + Tcr = Tcr + err_airspeed/airspeed_sp(i) * 0.05 * 0.001; + else + %Tcl = Tcl + err_airspeed/airspeed_sp(i) * 0.05 * 0.001; + Tcr = Tcr + err_airspeed/airspeed_sp(i) * 0.05 * 0.01; + end + throttle = err_airspeed * 0.2 + Tcr * airspeed_sp(i) + Tcl * vclimb_sp; + if (throttle > Throttle_max) + throttle = Throttle_max; + elseif (throttle < Throttle_min) + throttle = Throttle_min; + end + + extra1 = Tcr; + end + + % Autopilot actions + if battery_good(i) == 0 + throttle = 0; + end + + % Save For plotting + X(i,:) = [ airspeed_sp(i) airspeed altitude_sp(i) altitude throttle power pitch_sp (pitch-pitch_neutral) alpha gamma elevator vclimb_sp vclimb extra1 extra2]; + +end + + + +figure +subplot(6,1,1) +hold on +plot(airspeed_sp,'r'); +plot(X(:,2),'b'); +plot(ones(simsteps,1)*Vmin,'k'); +plot(ones(simsteps,1)*Vmax,'k'); +title('Airspeed') +axis([0 simsteps Vmin-1 Vmax+1]); +grid + +subplot(6,1,2) +hold on +plot(altitude_sp,'r'); +plot(X(:,4),'b'); +title('Altitude') +axis([0 simsteps (min(altitude_sp) - 10) (max(altitude_sp)+10)]); +grid + +subplot(6,1,3) +hold on +plot(X(:,5),'r'); +title('Throttle') +axis([0 simsteps 0 1]); +grid + + +subplot(6,1,4) +hold on +plot(X(:,7)*57,'r'); +plot(X(:,8)*57,'b'); +title('Pitch (degrees)') +axis([0 simsteps (Pitch_min*57-3) (Pitch_max*57 + 3)]); +grid + +subplot(6,1,5) +hold on +plot(X(:,9)*57,'g'); +plot(ones(simsteps,1)*17,'r'); +plot(X(:,10)*57,'k'); +axis([0 simsteps -10 20]); +title('Alpha (green) Gamma (black) (degrees)') +%legend('1','2') +grid + +subplot(6,1,6) +hold on +plot(X(:,12),'r'); +plot(X(:,13),'b'); +title('VClimb') +axis([0 simsteps (-VClimb_max -0.5) (VClimb_max + 0.5)]); +grid + +set(gcf,'PaperUnits','centimeter') +set(gcf,'PaperSize',[21 30.5]) +set(gcf,'PaperPosition',[1 1 19 28.5]) +print(gcf,'-depsc2', ['results_' num2str(controller)]); +%print(gcf,'-djpeg', ['results_' num2str(controller)]); + + diff --git a/sw/in_progress/videolizer/wis-go7007-linux/firmware/ezusb/hpi_PX-TV402U.hex b/sw/in_progress/videolizer/wis-go7007-linux/firmware/ezusb/hpi_PX-TV402U.hex index d587072b2e..d806b19d30 100644 --- a/sw/in_progress/videolizer/wis-go7007-linux/firmware/ezusb/hpi_PX-TV402U.hex +++ b/sw/in_progress/videolizer/wis-go7007-linux/firmware/ezusb/hpi_PX-TV402U.hex @@ -1,368 +1,368 @@ -:100B4900011500011605011000011140C107C10579 -:0C0B5900C106020B0000010800010900A9 -:100A6B0090E6007410F0120EE790E60B7401F000A4 -:100A7B00000090E61274A2F000000090E61374E2FE -:100A8B00F000000090E614F000000090E615F00076 -:100A9B00000090E6047480F00000007402F0000087 -:100AAB00007404F00000007406F00000007408F0FD -:100ABB00000000E4F000000090E6187411F0000054 -:100ACB000090E6907480F000000090E691F000003A -:100ADB000090E6197409F0000000E490E622F000A3 -:100AEB00000090E6237404F000000090E61A7409ED -:100AFB00F0000000E490E624F000000090E625747E -:100B0B0040F000000090E61B7409F0000000E49038 -:100B1B00E626F000000090E6277440F0000000533A -:100B2B00807F43B280E4F5B6F5B490E668E054FC00 -:0E0B3B00F000000053E8FB0000001212BC2284 -:1004140090E6F4E030E00AE5AA20E30575390180AE -:100424003790E6F4E030E20AE5AC30E505753902D0 -:100434008026300705753920801E90E6F4E030E10F -:100444000AE5AC30E105753904800DE5AB20E10522 -:100454007539088003753910E53924FE70030205E7 -:100464000224FE700302054524FC70030205852462 -:10047400F8700302067524F0700302060F241F604F -:10048400030206AD90E6F3E0547FF000000090E62E -:10049400F074FFF090E6F174ECF0E5BB30E7FB009C -:1004A4000000E490E6D0F000000090E6D104F000F3 -:1004B400000075BB05000000E5BB30E7FB00000051 -:1004C40090E6F3E0547FF000000090E6F074FFF053 -:1004D40090E6F174EEF0E5BB30E7FB000000E49039 -:1004E400E6D0F000000090E6D104F000000075BBF7 -:1004F40005000000E5BB30E7030206AD80F600000E -:100504000090E6F3E0547FF000000090E6F074FF02 -:10051400F090E6F174F2F0E5BB30E7FB00000090E8 -:10052400E6D0E510F000000090E6D1E511F00000FF -:100534000075BB07000000E5BB30E7030206AD8091 -:10054400F690E6F3E0547FF000000090E6F074FFCC -:10055400F090E6F174E4F0E5BB30E7FB00000090B6 -:10056400E6D0E510F000000090E6D1E511F00000BF -:100574000075BB06000000E5BB30E7030206AD8052 -:10058400F600000090E6497402F000000090E6F3E3 -:10059400E0547FF000000090E6F074FFF090E6F184 -:1005A40074F4F0E5BB30E7FB00000090E6F1E0F501 -:1005B40008E5BB30E7FB00000090E6F2E0FF90E6C0 -:1005C400F0E0F534EF30E1030206AD90E6F3E054D9 -:1005D4007FF000000090E6F074FFF090E6F174EA1A -:1005E400F0E5BB30E7FB000000E490E6D0F000004B -:1005F4000090E6D17420F0000000E4F5BB00000098 -:10060400E5BB30E7FB0000000206ADE4F537F53842 -:10061400901487E0FFA3E0F535A3E0FEC313F5369D -:10062400EF30E03930E104D2058002C205E535D36C -:100634009401400DE53514FD7A147B8AAF3612120D -:100644000474892535F582E43414F583E0F50FD27A -:10065400057A147B88FDAF361211E88010E4F50F9B -:10066400D2057A147B8AAD35AF36121204C20780E4 -:1006740038300235300632D3E5139400E512940085 -:10068400501FE5B120E10DE58054246424601A4331 -:1006940080248015E5805424FFBF240D5380DB8023 -:0C06A40008E51315137002151200000089 -:0106B0002227 -:0512C400438080D322ED -:0512C90053807FD322D9 -:020CFE00D322FF -:080CF60090E6BAE0F514D322E8 -:1012900090E740E514F0E490E68AF090E68B04F0E5 -:0212A000D32257 -:0812B40090E6BAE0F50ED3222A -:1012A20090E740E50EF0E490E68AF090E68B04F0D9 -:0212B200D32245 -:0212D200D32225 -:0212D400D32223 -:0212D600D32221 -:1000800090E6B9E0120FAC00AC1000D212011C14C3 -:10009000016D20019D2101EB22027724033B250302 -:1000A000E13003904003BF41000003FF00000090D7 -:1000B000E6047480F00000007404F0000000740690 -:1000C000F00000007408F0000000E4F000000002FE -:1000D000040190E6F3E0547FF000000090E6BDE0FC -:1000E00090E6F0F090E6BCE090E6F1F0E5BB30E79A -:1000F000FB00000090E6F3E04480F000000090E692 -:10010000BBE090E6F0F090E6BAE090E6F1F0000097 -:1001100000E5BB30E7FB00000002040190E6F3E0DD -:10012000547FF000000090E6BDE090E6F0F090E62D -:10013000BCE090E6F1F0E5BB30E7FB00000090E6A4 -:10014000F1E0F509E5BB30E7FB90E6F2E090E7402F -:10015000F090E6F0E090E741F0E490E68AF090E677 -:100160008B7402F090E6A0E04480F0C32290E6BADF -:10017000E0F53490E6BEE0F535E490E68AF090E6EE -:100180008BF090E6A0E020E1F97AE77B40AD35AF57 -:100190003412120490E6A0E04480F0C32290E6BA44 -:1001A000E0F53490E6BEE0F53590E6A0E020E1F918 -:1001B000E4F536E536C39535501274402536F582A0 -:1001C000E434E7F58374CDF0053680E77AE77B40C9 -:1001D000AD35AF341211E8E490E68AF090E68BE595 -:1001E00035F090E6A0E04480F0C32290E6BAE0F556 -:1001F0003490E6BEE0F53590E6A0E020E1F9E4F5C4 -:1002000036E536C39535501274402536F582E43410 -:10021000E7F58374CDF0053680E7E4F53690E6BB6C -:10022000E0601590E6BDE0FFAE36053674C72EF5EA -:1002300082E43414F583EFF090E6BCE0FFAE3605BF -:100240003674C72EF582E43414F583EFF07A147B0C -:10025000C7AD36AF341212047AE77B40AD35AF3408 -:100260001211E8E490E68AF090E68BE535F090E62E -:10027000A0E04480F0C322E490E68AF090E68BF0A0 -:1002800090E6A0E020E1F990E6BEE0F50F90E740AF -:10029000E030E02BE4F536E536C3950F400302036A -:1002A0003074402536F582E434E7F583E0FF748747 -:1002B0002536F582E43414F583EFF0053680D890C6 -:1002C000E741E02402F535E4F536E536C3953550CF -:1002D0001E74402536F582E434E7F583E0FF748729 -:1002E0002536F582E43414F583EFF0053680DB74AF -:1002F000402536F582E434E7F583E0FF90E741E0FE -:100300002F14901488F0E50F14F535E536C39535B4 -:10031000501E74412536F582E434E7F583E0FF741E -:10032000872536F582E43414F583EFF0053680DB5B -:10033000D20790E6A0E04480F0C322300710E4909A -:10034000E740F090E68AF090E68B04F0802D90E78D -:10035000407401F0F536E536D3950F501E748725AD -:1003600036F582E43414F583E0FF74402536F582D7 -:10037000E434E7F583EFF0053680DBE490E68AF0BD -:10038000E50F0490E68BF090E6A0E04480F0C322F5 -:1003900090E6BAE0547FF580A3E04480F5B23002E5 -:1003A00060E5805424FFBF240D2006067512807579 -:1003B0001300D206804BC206E4F512F5138042907A -:1003C000E740E5B1F0A3E580F0A3E50AF0E490E6AC -:1003D0008AF090E68B7403F090E6A0E04480F0C3CE -:1003E0002290E740E516F0A3E515F0E490E68AF0E8 -:1003F00090E68B7402F090E6A0E04480F0C322C344 -:1004000022E490E68AF090E68B04F090E6A0E044C7 -:0304100080F0C3B6 -:0104130022C6 -:10122000C0E0C083C082D2015391EF90E65D7401AB -:08123000F0D082D083D0E0323F -:10125000C0E0C083C0825391EF90E65D7404F0D08B -:0612600082D083D0E032D1 -:10126600C0E0C083C0825391EF90E65D7402F0D077 -:0612760082D083D0E032BB -:1010B700C0E0C083C082852A26852B2785278285A5 -:1010C7002683A37402F08522288523298529828512 -:1010D7002883A37407F05391EF90E65D7410F0D066 -:0610E70082D083D0E0324C -:10123800C0E0C083C082D2045391EF90E65D740889 -:08124800F0D082D083D0E03227 -:100FD200C0E0C083C08290E680E030E74B852226E5 -:100FE200852327852782852683A37402F0852A28F4 -:100FF200852B29852982852883A37407F075100221 -:1010020075110000000090E6247402F000000090C8 -:10101200E625E4F000000090E6267402F0000000ED -:1010220090E627E4F00000005391EF90E65D742013 -:08103200F0D082D083D0E0323F -:0112D80032E3 -:0112D90032E2 -:0112DA0032E1 -:0112DB0032E0 -:0112DC0032DF -:0112DD0032DE -:0112DE0032DD -:0112DF0032DC -:0112E00032DB -:0112E10032DA -:0112E20032D9 -:0112E30032D8 -:0112E40032D7 -:0112E50032D6 -:0112E60032D5 -:0112E70032D4 -:0112E80032D3 -:0112E90032D2 -:0112EA0032D1 -:0112EB0032D0 -:0112EC0032CF -:0112ED0032CE -:0112EE0032CD -:0112EF0032CC -:0112F00032CB -:0112F10032CA -:0112F20032C9 -:0112F30032C8 -:0112F40032C7 -:0112F50032C6 -:0112F60032C5 -:0112F70032C4 -:0112F80032C3 -:0112F90032C2 -:0112FA0032C1 -:1011CA00C0E0C083C08290E6F574FFF000000053CF -:0E11DA0091BFF5A2000000D082D083D0E03299 -:10127C00C0E05391BFE5A04480F50AE5B14480F588 -:04128C000DD0E0326F -:0A0BF60000010202030304040505D8 -:020B6500C102CB -:100DB800E4F533F532F531F530C204C200C203C29E -:100DC80001120A6B75240C752500752C0C752D12F3 -:100DD80075220C75231C752A0C752B4A752E0C75FB -:100DE8002F78D2E843D82090E668E04408F090E6EF -:100DF8005CE0443DF0D2AF90E680E020E105D20807 -:100E080012111F90E680E054F7F0538EF8C204E503 -:100E1800B154C0FFBFC002D2023001051206B1C2F0 -:100E2800013004291212C45024C2041211A5200052 -:100E38001690E682E030E704E020E1EF90E682E0F9 -:100E480030E604E020E0E412114E1212C912041434 -:020E580080C751 -:010E5A002275 -:1006B10090E6B9E0700302078D1470030208362436 -:1006C100FE70030208CB24FB70030207871470033A -:1006D10002078114700302077514700302077B245B -:1006E100056003020937120CFE400302094390E63C -:1006F100BBE024FE602C14604724FD6016146031B9 -:1007010024067066E52490E6B3F0E52590E6B4F0A2 -:10071100020943E52C90E6B3F0E52D90E6B4F00232 -:100721000943E52690E6B3F0E52790E6B4F0020927 -:1007310043E52890E6B3F0E52990E6B4F0020943D9 -:1007410090E6BAE0FF12117AAA06A9077B01EA49ED -:100751004B600DEE90E6B3F0EF90E6B4F002094382 -:1007610090E6A0E04401F002094390E6A0E04401D4 -:10077100F00209431212A20209431212B402094300 -:10078100120CF60209431212900209431212D240CE -:100791000302094390E6B8E0247F602B14603C24F7 -:1007A10002600302082CA200E433FF25E0FFA2034C -:1007B100E4334F90E740F0E4A3F090E68AF090E64E -:1007C1008B7402F0020943E490E740F0A3F090E655 -:1007D1008AF090E68B7402F002094390E6BCE05483 -:1007E1007EFF7E00E0D3948040067C007D01800482 -:1007F1007C007D00EC4EFEED4F24F6F582740B3E3D -:10080100F583E493FF3395E0FEEF24A1FFEE34E698 -:100811008F82F583E0540190E740F0E4A3F090E685 -:100821008AF090E68B7402F002094390E6A0E0445E -:1008310001F00209431212D4400302094390E6B8C1 -:10084100E024FE601D2402600302094390E6BAE041 -:10085100B40105C20002094390E6A0E04401F002A0 -:10086100094390E6BAE0705990E6BCE0547EFF7E01 -:1008710000E0D3948040067C007D0180047C007DF3 -:1008810000EC4EFEED4F24F6F582740B3EF583E449 -:1008910093FF3395E0FEEF24A1FFEE34E68F82F55E -:1008A10083E054FEF090E6BCE05480FF1313135430 -:1008B1001FFFE0540F2F90E683F0E04420F002097F -:1008C1004390E6A0E04401F080781212D650739074 -:1008D100E6B8E024FE60202402706790E6BAE0B436 -:1008E1000104D200805C90E6BAE06402605490E6B4 -:1008F100A0E04401F0804B90E6BCE0547EFF7E0016 -:10090100E0D3948040067C007D0180047C007D0062 -:10091100EC4EFEED4F24F6F582740B3EF583E49325 -:10092100FF3395E0FEEF24A1FFEE34E68F82F583DD -:10093100E04401F0800C120080500790E6A0E044F2 -:0909410001F090E6A0E04480F012 -:01094A00228A -:030033000212CEE8 -:0412CE0053D8EF32D0 -:100B67006080140003013801010101070002010040 -:100B770000000000FAFAFBFBFBFBFBFB36092D2DFF -:100B87002D2D123F01013801010101070202070261 -:100B970000000000F9FBFBFBFBFBFBFB09092D2D0C -:100BA700002D363F03013F0101010107000201004B -:100BB70000000000FAFAFBFBFBFBFBFB36092D2DBF -:100BC7002D2D123F19023F023F01010703020706BD -:100BD70001000000FBFFFBF9FBFBFBFB3F2D2D2D6D -:0E0BE7002D2D363F471480E00000FB06E41180 -:100EE70090E60174C2F090E6F574FFF0901480E08C -:100EF70090E6F3F0901481E090E6C3F0901482E05E -:100F070090E6C1F0901483E090E6C2F0901485E07B -:100F170090E6C0F0901486E090E6F4F075AF0774A1 -:100F270014F59A7400F59B759DE4E4F59EFF90E631 -:100F37007BE090E67CF00FBF80F4E490E671F0F57B -:100F4700B490E672F0F5B600000090E6C4F0000039 -:050F57000090E6C5F06A -:010F5C002272 -:100C000012010002FF00FF403B0904A101000102A4 -:100C100000010A06000200000040010009022E0047 -:100C2000010100C0320904000004FF0000000705B4 -:100C30000202000200070584020002000705860286 -:100C40000002000705880200020009022E000101CF -:100C500000C0320904000004FF0000000705020282 -:100C6000400000070584024000000705860240009E -:100C70000007058802400000040309041003500027 -:100C80004C004500580054004F0052003003500003 -:100C90006C006500780074006F0072002000430053 -:100CA0006F006E007600650072007400580020002E -:0E0CB0005400560034003000320055000000A1 -:03004300020D00AB -:0300530002127C1A -:100D00000212200002126600021250000212380085 -:100D10000210B700020FD2000212D8000212D9004E -:100D20000212DA000212DB000212DC000212DD0005 -:100D30000212DE000212DF000212E0000212E100E5 -:100D40000212E2000212D9000212E3000212E400D1 -:100D50000212E5000212E6000212E7000212E800A9 -:100D60000212E9000212D9000212D9000212D900BF -:100D70000212EA000212EB000212EC000212ED0075 -:100D80000212EE000212EF000212F0000212F10055 -:100D90000212F2000212F3000212F4000212F50035 -:100DA0000212F6000212F7000212F8000212F90015 -:080DB0000212FA000211CA0050 -:10114E0090E682E030E004E020E60B90E682E030AC -:10115E00E119E030E71590E680E04401F07F147E5F -:0C116E000012103A90E680E054FEF022DF -:1011A50090E682E044C0F090E681F04387010000BC -:0411B5000000002214 -:10111F0030080990E680E0440AF0800790E680E00E -:10112F004408F07FDC7E0512103A90E65D74FFF004 -:0F113F0090E65FF05391EF90E680E054F7F022D6 -:0812BC00E4F51CD2E9D2AF22D7 -:100CBE00AD0790E678E020E6F9C2E990E678E044E8 -:100CCE0080F0ED25E090E679F090E678E030E0F9FE -:100CDE0090E678E04440F090E678E020E6F990E681 -:080CEE0078E030E1D6D2E922E2 -:1010ED00AC0790E678E020E6F9E51C702390E678F1 -:1010FD00E04480F0EC25E090E679F08D17AF03A980 -:10110D00077518018A19891AE4F51B751C01D3227C -:02111D00C322EB -:10108000AC0730050990E678E030E60680F7E51C0D -:1010900070FC90E678E04480F0EC25E0440190E6B6 -:1010A00079F08D17AF03A9077518018A19891AE419 -:0710B000F51B751C03D322A0 -:03004B0002094B5C -:10094B00C0E0C083C082C085C084C086758600C0ED -:10095B00D075D000C000C001C002C003C006C007E4 -:10096B0090E678E030E206751C06020A4D90E678B8 -:10097B00E020E10CE51C64026006751C07020A4DC1 -:10098B00E51C24FE607214604924FE7003020A39D0 -:10099B0024FC7003020A45147003020A4A240960FE -:1009AB0003020A4DAB18AA19A91AAF1B051B8F829C -:1009BB00758300120F5D90E679F0E51BB5170830D3 -:1009CB000505751C05807BE51B65177075751C0A85 -:1009DB00807090E679E0AB18AA19A91AAE1B8E822B -:1009EB00758300120F8A751C02E517640170539012 -:1009FB00E678E04420F0804AE51724FEB51B07900B -:100A0B00E678E04420F0E51714B51B0A90E678E091 -:100A1B004440F0751C0090E679E0AB18AA19A91AAE -:100A2B00AE1B8E82758300120F8A051B801490E615 -:100A3B0078E04440F0751C008008751C008003753D -:100A4B001C005391DFD007D006D003D002D001D0C9 -:100A5B0000D0D0D086D084D085D082D083D0E03265 -:02117A00A907C3 -:10117C00AE2EAF2F8F828E83A3E064037017AD0168 -:10118C0019ED7001228F828E83E07C002FFDEC3EE6 -:08119C00FEAF0580DFE4FEFF59 -:0111A4002228 -:1011E800121080E51C24FA600E146006240770F3C0 -:0C11F800D322E4F51CD322E4F51CD32222 -:101204001210EDE51C24FA600E146006240770F336 -:0C121400D322E4F51CD322E4F51CD32205 -:10103A008E348F3590E600E054187012E53524019D -:10104A00FFE43534C313F534EF13F535801590E614 -:10105A0000E05418FFBF100BE53525E0F535E534FF -:10106A0033F534E5351535AE34700215344E600566 -:06107A001211B980EE2204 -:1011B9007400F58690FDA57C05A3E582458370F949 -:0111C9002203 -:03000000020E5B92 -:0C0E5B00787FE4F6D8FD758139020EA204 -:100F5D00BB010CE58229F582E5833AF583E0225049 -:100F6D0006E92582F8E622BBFE06E92582F8E22293 -:0D0F7D00E58229F582E5833AF583E49322AD -:100F8A00F8BB010DE58229F582E5833AF583E8F09D -:100F9A00225006E92582C8F622BBFE05E92582C849 -:020FAA00F22231 -:100FAC00D083D082F8E4937012740193700DA3A3D4 -:100FBC0093F8740193F5828883E4737402936860E8 -:060FCC00EFA3A3A380DFE8 -:100E6700020DB8E493A3F8E493A34003F68001F2DC -:100E770008DFF48029E493A3F85407240CC8C3338C -:100E8700C4540F4420C8834004F456800146F6DF5B -:100E9700E4800B0102040810204080900B49E47E97 -:100EA700019360BCA3FF543F30E509541FFEE49350 -:100EB700A360010ECF54C025E060A840B8E493A317 -:100EC700FAE493A3F8E493A3C8C582C8CAC583CA42 -:100ED700F0A3C8C582C8CAC583CADFE9DEE780BEFA -:010BF50000FF -:00000001FF +:100B4900011500011605011000011140C107C10579 +:0C0B5900C106020B0000010800010900A9 +:100A6B0090E6007410F0120EE790E60B7401F000A4 +:100A7B00000090E61274A2F000000090E61374E2FE +:100A8B00F000000090E614F000000090E615F00076 +:100A9B00000090E6047480F00000007402F0000087 +:100AAB00007404F00000007406F00000007408F0FD +:100ABB00000000E4F000000090E6187411F0000054 +:100ACB000090E6907480F000000090E691F000003A +:100ADB000090E6197409F0000000E490E622F000A3 +:100AEB00000090E6237404F000000090E61A7409ED +:100AFB00F0000000E490E624F000000090E625747E +:100B0B0040F000000090E61B7409F0000000E49038 +:100B1B00E626F000000090E6277440F0000000533A +:100B2B00807F43B280E4F5B6F5B490E668E054FC00 +:0E0B3B00F000000053E8FB0000001212BC2284 +:1004140090E6F4E030E00AE5AA20E30575390180AE +:100424003790E6F4E030E20AE5AC30E505753902D0 +:100434008026300705753920801E90E6F4E030E10F +:100444000AE5AC30E105753904800DE5AB20E10522 +:100454007539088003753910E53924FE70030205E7 +:100464000224FE700302054524FC70030205852462 +:10047400F8700302067524F0700302060F241F604F +:10048400030206AD90E6F3E0547FF000000090E62E +:10049400F074FFF090E6F174ECF0E5BB30E7FB009C +:1004A4000000E490E6D0F000000090E6D104F000F3 +:1004B400000075BB05000000E5BB30E7FB00000051 +:1004C40090E6F3E0547FF000000090E6F074FFF053 +:1004D40090E6F174EEF0E5BB30E7FB000000E49039 +:1004E400E6D0F000000090E6D104F000000075BBF7 +:1004F40005000000E5BB30E7030206AD80F600000E +:100504000090E6F3E0547FF000000090E6F074FF02 +:10051400F090E6F174F2F0E5BB30E7FB00000090E8 +:10052400E6D0E510F000000090E6D1E511F00000FF +:100534000075BB07000000E5BB30E7030206AD8091 +:10054400F690E6F3E0547FF000000090E6F074FFCC +:10055400F090E6F174E4F0E5BB30E7FB00000090B6 +:10056400E6D0E510F000000090E6D1E511F00000BF +:100574000075BB06000000E5BB30E7030206AD8052 +:10058400F600000090E6497402F000000090E6F3E3 +:10059400E0547FF000000090E6F074FFF090E6F184 +:1005A40074F4F0E5BB30E7FB00000090E6F1E0F501 +:1005B40008E5BB30E7FB00000090E6F2E0FF90E6C0 +:1005C400F0E0F534EF30E1030206AD90E6F3E054D9 +:1005D4007FF000000090E6F074FFF090E6F174EA1A +:1005E400F0E5BB30E7FB000000E490E6D0F000004B +:1005F4000090E6D17420F0000000E4F5BB00000098 +:10060400E5BB30E7FB0000000206ADE4F537F53842 +:10061400901487E0FFA3E0F535A3E0FEC313F5369D +:10062400EF30E03930E104D2058002C205E535D36C +:100634009401400DE53514FD7A147B8AAF3612120D +:100644000474892535F582E43414F583E0F50FD27A +:10065400057A147B88FDAF361211E88010E4F50F9B +:10066400D2057A147B8AAD35AF36121204C20780E4 +:1006740038300235300632D3E5139400E512940085 +:10068400501FE5B120E10DE58054246424601A4331 +:1006940080248015E5805424FFBF240D5380DB8023 +:0C06A40008E51315137002151200000089 +:0106B0002227 +:0512C400438080D322ED +:0512C90053807FD322D9 +:020CFE00D322FF +:080CF60090E6BAE0F514D322E8 +:1012900090E740E514F0E490E68AF090E68B04F0E5 +:0212A000D32257 +:0812B40090E6BAE0F50ED3222A +:1012A20090E740E50EF0E490E68AF090E68B04F0D9 +:0212B200D32245 +:0212D200D32225 +:0212D400D32223 +:0212D600D32221 +:1000800090E6B9E0120FAC00AC1000D212011C14C3 +:10009000016D20019D2101EB22027724033B250302 +:1000A000E13003904003BF41000003FF00000090D7 +:1000B000E6047480F00000007404F0000000740690 +:1000C000F00000007408F0000000E4F000000002FE +:1000D000040190E6F3E0547FF000000090E6BDE0FC +:1000E00090E6F0F090E6BCE090E6F1F0E5BB30E79A +:1000F000FB00000090E6F3E04480F000000090E692 +:10010000BBE090E6F0F090E6BAE090E6F1F0000097 +:1001100000E5BB30E7FB00000002040190E6F3E0DD +:10012000547FF000000090E6BDE090E6F0F090E62D +:10013000BCE090E6F1F0E5BB30E7FB00000090E6A4 +:10014000F1E0F509E5BB30E7FB90E6F2E090E7402F +:10015000F090E6F0E090E741F0E490E68AF090E677 +:100160008B7402F090E6A0E04480F0C32290E6BADF +:10017000E0F53490E6BEE0F535E490E68AF090E6EE +:100180008BF090E6A0E020E1F97AE77B40AD35AF57 +:100190003412120490E6A0E04480F0C32290E6BA44 +:1001A000E0F53490E6BEE0F53590E6A0E020E1F918 +:1001B000E4F536E536C39535501274402536F582A0 +:1001C000E434E7F58374CDF0053680E77AE77B40C9 +:1001D000AD35AF341211E8E490E68AF090E68BE595 +:1001E00035F090E6A0E04480F0C32290E6BAE0F556 +:1001F0003490E6BEE0F53590E6A0E020E1F9E4F5C4 +:1002000036E536C39535501274402536F582E43410 +:10021000E7F58374CDF0053680E7E4F53690E6BB6C +:10022000E0601590E6BDE0FFAE36053674C72EF5EA +:1002300082E43414F583EFF090E6BCE0FFAE3605BF +:100240003674C72EF582E43414F583EFF07A147B0C +:10025000C7AD36AF341212047AE77B40AD35AF3408 +:100260001211E8E490E68AF090E68BE535F090E62E +:10027000A0E04480F0C322E490E68AF090E68BF0A0 +:1002800090E6A0E020E1F990E6BEE0F50F90E740AF +:10029000E030E02BE4F536E536C3950F400302036A +:1002A0003074402536F582E434E7F583E0FF748747 +:1002B0002536F582E43414F583EFF0053680D890C6 +:1002C000E741E02402F535E4F536E536C3953550CF +:1002D0001E74402536F582E434E7F583E0FF748729 +:1002E0002536F582E43414F583EFF0053680DB74AF +:1002F000402536F582E434E7F583E0FF90E741E0FE +:100300002F14901488F0E50F14F535E536C39535B4 +:10031000501E74412536F582E434E7F583E0FF741E +:10032000872536F582E43414F583EFF0053680DB5B +:10033000D20790E6A0E04480F0C322300710E4909A +:10034000E740F090E68AF090E68B04F0802D90E78D +:10035000407401F0F536E536D3950F501E748725AD +:1003600036F582E43414F583E0FF74402536F582D7 +:10037000E434E7F583EFF0053680DBE490E68AF0BD +:10038000E50F0490E68BF090E6A0E04480F0C322F5 +:1003900090E6BAE0547FF580A3E04480F5B23002E5 +:1003A00060E5805424FFBF240D2006067512807579 +:1003B0001300D206804BC206E4F512F5138042907A +:1003C000E740E5B1F0A3E580F0A3E50AF0E490E6AC +:1003D0008AF090E68B7403F090E6A0E04480F0C3CE +:1003E0002290E740E516F0A3E515F0E490E68AF0E8 +:1003F00090E68B7402F090E6A0E04480F0C322C344 +:1004000022E490E68AF090E68B04F090E6A0E044C7 +:0304100080F0C3B6 +:0104130022C6 +:10122000C0E0C083C082D2015391EF90E65D7401AB +:08123000F0D082D083D0E0323F +:10125000C0E0C083C0825391EF90E65D7404F0D08B +:0612600082D083D0E032D1 +:10126600C0E0C083C0825391EF90E65D7402F0D077 +:0612760082D083D0E032BB +:1010B700C0E0C083C082852A26852B2785278285A5 +:1010C7002683A37402F08522288523298529828512 +:1010D7002883A37407F05391EF90E65D7410F0D066 +:0610E70082D083D0E0324C +:10123800C0E0C083C082D2045391EF90E65D740889 +:08124800F0D082D083D0E03227 +:100FD200C0E0C083C08290E680E030E74B852226E5 +:100FE200852327852782852683A37402F0852A28F4 +:100FF200852B29852982852883A37407F075100221 +:1010020075110000000090E6247402F000000090C8 +:10101200E625E4F000000090E6267402F0000000ED +:1010220090E627E4F00000005391EF90E65D742013 +:08103200F0D082D083D0E0323F +:0112D80032E3 +:0112D90032E2 +:0112DA0032E1 +:0112DB0032E0 +:0112DC0032DF +:0112DD0032DE +:0112DE0032DD +:0112DF0032DC +:0112E00032DB +:0112E10032DA +:0112E20032D9 +:0112E30032D8 +:0112E40032D7 +:0112E50032D6 +:0112E60032D5 +:0112E70032D4 +:0112E80032D3 +:0112E90032D2 +:0112EA0032D1 +:0112EB0032D0 +:0112EC0032CF +:0112ED0032CE +:0112EE0032CD +:0112EF0032CC +:0112F00032CB +:0112F10032CA +:0112F20032C9 +:0112F30032C8 +:0112F40032C7 +:0112F50032C6 +:0112F60032C5 +:0112F70032C4 +:0112F80032C3 +:0112F90032C2 +:0112FA0032C1 +:1011CA00C0E0C083C08290E6F574FFF000000053CF +:0E11DA0091BFF5A2000000D082D083D0E03299 +:10127C00C0E05391BFE5A04480F50AE5B14480F588 +:04128C000DD0E0326F +:0A0BF60000010202030304040505D8 +:020B6500C102CB +:100DB800E4F533F532F531F530C204C200C203C29E +:100DC80001120A6B75240C752500752C0C752D12F3 +:100DD80075220C75231C752A0C752B4A752E0C75FB +:100DE8002F78D2E843D82090E668E04408F090E6EF +:100DF8005CE0443DF0D2AF90E680E020E105D20807 +:100E080012111F90E680E054F7F0538EF8C204E503 +:100E1800B154C0FFBFC002D2023001051206B1C2F0 +:100E2800013004291212C45024C2041211A5200052 +:100E38001690E682E030E704E020E1EF90E682E0F9 +:100E480030E604E020E0E412114E1212C912041434 +:020E580080C751 +:010E5A002275 +:1006B10090E6B9E0700302078D1470030208362436 +:1006C100FE70030208CB24FB70030207871470033A +:1006D10002078114700302077514700302077B245B +:1006E100056003020937120CFE400302094390E63C +:1006F100BBE024FE602C14604724FD6016146031B9 +:1007010024067066E52490E6B3F0E52590E6B4F0A2 +:10071100020943E52C90E6B3F0E52D90E6B4F00232 +:100721000943E52690E6B3F0E52790E6B4F0020927 +:1007310043E52890E6B3F0E52990E6B4F0020943D9 +:1007410090E6BAE0FF12117AAA06A9077B01EA49ED +:100751004B600DEE90E6B3F0EF90E6B4F002094382 +:1007610090E6A0E04401F002094390E6A0E04401D4 +:10077100F00209431212A20209431212B402094300 +:10078100120CF60209431212900209431212D240CE +:100791000302094390E6B8E0247F602B14603C24F7 +:1007A10002600302082CA200E433FF25E0FFA2034C +:1007B100E4334F90E740F0E4A3F090E68AF090E64E +:1007C1008B7402F0020943E490E740F0A3F090E655 +:1007D1008AF090E68B7402F002094390E6BCE05483 +:1007E1007EFF7E00E0D3948040067C007D01800482 +:1007F1007C007D00EC4EFEED4F24F6F582740B3E3D +:10080100F583E493FF3395E0FEEF24A1FFEE34E698 +:100811008F82F583E0540190E740F0E4A3F090E685 +:100821008AF090E68B7402F002094390E6A0E0445E +:1008310001F00209431212D4400302094390E6B8C1 +:10084100E024FE601D2402600302094390E6BAE041 +:10085100B40105C20002094390E6A0E04401F002A0 +:10086100094390E6BAE0705990E6BCE0547EFF7E01 +:1008710000E0D3948040067C007D0180047C007DF3 +:1008810000EC4EFEED4F24F6F582740B3EF583E449 +:1008910093FF3395E0FEEF24A1FFEE34E68F82F55E +:1008A10083E054FEF090E6BCE05480FF1313135430 +:1008B1001FFFE0540F2F90E683F0E04420F002097F +:1008C1004390E6A0E04401F080781212D650739074 +:1008D100E6B8E024FE60202402706790E6BAE0B436 +:1008E1000104D200805C90E6BAE06402605490E6B4 +:1008F100A0E04401F0804B90E6BCE0547EFF7E0016 +:10090100E0D3948040067C007D0180047C007D0062 +:10091100EC4EFEED4F24F6F582740B3EF583E49325 +:10092100FF3395E0FEEF24A1FFEE34E68F82F583DD +:10093100E04401F0800C120080500790E6A0E044F2 +:0909410001F090E6A0E04480F012 +:01094A00228A +:030033000212CEE8 +:0412CE0053D8EF32D0 +:100B67006080140003013801010101070002010040 +:100B770000000000FAFAFBFBFBFBFBFB36092D2DFF +:100B87002D2D123F01013801010101070202070261 +:100B970000000000F9FBFBFBFBFBFBFB09092D2D0C +:100BA700002D363F03013F0101010107000201004B +:100BB70000000000FAFAFBFBFBFBFBFB36092D2DBF +:100BC7002D2D123F19023F023F01010703020706BD +:100BD70001000000FBFFFBF9FBFBFBFB3F2D2D2D6D +:0E0BE7002D2D363F471480E00000FB06E41180 +:100EE70090E60174C2F090E6F574FFF0901480E08C +:100EF70090E6F3F0901481E090E6C3F0901482E05E +:100F070090E6C1F0901483E090E6C2F0901485E07B +:100F170090E6C0F0901486E090E6F4F075AF0774A1 +:100F270014F59A7400F59B759DE4E4F59EFF90E631 +:100F37007BE090E67CF00FBF80F4E490E671F0F57B +:100F4700B490E672F0F5B600000090E6C4F0000039 +:050F57000090E6C5F06A +:010F5C002272 +:100C000012010002FF00FF403B0904A101000102A4 +:100C100000010A06000200000040010009022E0047 +:100C2000010100C0320904000004FF0000000705B4 +:100C30000202000200070584020002000705860286 +:100C40000002000705880200020009022E000101CF +:100C500000C0320904000004FF0000000705020282 +:100C6000400000070584024000000705860240009E +:100C70000007058802400000040309041003500027 +:100C80004C004500580054004F0052003003500003 +:100C90006C006500780074006F0072002000430053 +:100CA0006F006E007600650072007400580020002E +:0E0CB0005400560034003000320055000000A1 +:03004300020D00AB +:0300530002127C1A +:100D00000212200002126600021250000212380085 +:100D10000210B700020FD2000212D8000212D9004E +:100D20000212DA000212DB000212DC000212DD0005 +:100D30000212DE000212DF000212E0000212E100E5 +:100D40000212E2000212D9000212E3000212E400D1 +:100D50000212E5000212E6000212E7000212E800A9 +:100D60000212E9000212D9000212D9000212D900BF +:100D70000212EA000212EB000212EC000212ED0075 +:100D80000212EE000212EF000212F0000212F10055 +:100D90000212F2000212F3000212F4000212F50035 +:100DA0000212F6000212F7000212F8000212F90015 +:080DB0000212FA000211CA0050 +:10114E0090E682E030E004E020E60B90E682E030AC +:10115E00E119E030E71590E680E04401F07F147E5F +:0C116E000012103A90E680E054FEF022DF +:1011A50090E682E044C0F090E681F04387010000BC +:0411B5000000002214 +:10111F0030080990E680E0440AF0800790E680E00E +:10112F004408F07FDC7E0512103A90E65D74FFF004 +:0F113F0090E65FF05391EF90E680E054F7F022D6 +:0812BC00E4F51CD2E9D2AF22D7 +:100CBE00AD0790E678E020E6F9C2E990E678E044E8 +:100CCE0080F0ED25E090E679F090E678E030E0F9FE +:100CDE0090E678E04440F090E678E020E6F990E681 +:080CEE0078E030E1D6D2E922E2 +:1010ED00AC0790E678E020E6F9E51C702390E678F1 +:1010FD00E04480F0EC25E090E679F08D17AF03A980 +:10110D00077518018A19891AE4F51B751C01D3227C +:02111D00C322EB +:10108000AC0730050990E678E030E60680F7E51C0D +:1010900070FC90E678E04480F0EC25E0440190E6B6 +:1010A00079F08D17AF03A9077518018A19891AE419 +:0710B000F51B751C03D322A0 +:03004B0002094B5C +:10094B00C0E0C083C082C085C084C086758600C0ED +:10095B00D075D000C000C001C002C003C006C007E4 +:10096B0090E678E030E206751C06020A4D90E678B8 +:10097B00E020E10CE51C64026006751C07020A4DC1 +:10098B00E51C24FE607214604924FE7003020A39D0 +:10099B0024FC7003020A45147003020A4A240960FE +:1009AB0003020A4DAB18AA19A91AAF1B051B8F829C +:1009BB00758300120F5D90E679F0E51BB5170830D3 +:1009CB000505751C05807BE51B65177075751C0A85 +:1009DB00807090E679E0AB18AA19A91AAE1B8E822B +:1009EB00758300120F8A751C02E517640170539012 +:1009FB00E678E04420F0804AE51724FEB51B07900B +:100A0B00E678E04420F0E51714B51B0A90E678E091 +:100A1B004440F0751C0090E679E0AB18AA19A91AAE +:100A2B00AE1B8E82758300120F8A051B801490E615 +:100A3B0078E04440F0751C008008751C008003753D +:100A4B001C005391DFD007D006D003D002D001D0C9 +:100A5B0000D0D0D086D084D085D082D083D0E03265 +:02117A00A907C3 +:10117C00AE2EAF2F8F828E83A3E064037017AD0168 +:10118C0019ED7001228F828E83E07C002FFDEC3EE6 +:08119C00FEAF0580DFE4FEFF59 +:0111A4002228 +:1011E800121080E51C24FA600E146006240770F3C0 +:0C11F800D322E4F51CD322E4F51CD32222 +:101204001210EDE51C24FA600E146006240770F336 +:0C121400D322E4F51CD322E4F51CD32205 +:10103A008E348F3590E600E054187012E53524019D +:10104A00FFE43534C313F534EF13F535801590E614 +:10105A0000E05418FFBF100BE53525E0F535E534FF +:10106A0033F534E5351535AE34700215344E600566 +:06107A001211B980EE2204 +:1011B9007400F58690FDA57C05A3E582458370F949 +:0111C9002203 +:03000000020E5B92 +:0C0E5B00787FE4F6D8FD758139020EA204 +:100F5D00BB010CE58229F582E5833AF583E0225049 +:100F6D0006E92582F8E622BBFE06E92582F8E22293 +:0D0F7D00E58229F582E5833AF583E49322AD +:100F8A00F8BB010DE58229F582E5833AF583E8F09D +:100F9A00225006E92582C8F622BBFE05E92582C849 +:020FAA00F22231 +:100FAC00D083D082F8E4937012740193700DA3A3D4 +:100FBC0093F8740193F5828883E4737402936860E8 +:060FCC00EFA3A3A380DFE8 +:100E6700020DB8E493A3F8E493A34003F68001F2DC +:100E770008DFF48029E493A3F85407240CC8C3338C +:100E8700C4540F4420C8834004F456800146F6DF5B +:100E9700E4800B0102040810204080900B49E47E97 +:100EA700019360BCA3FF543F30E509541FFEE49350 +:100EB700A360010ECF54C025E060A840B8E493A317 +:100EC700FAE493A3F8E493A3C8C582C8CAC583CA42 +:100ED700F0A3C8C582C8CAC583CADFE9DEE780BEFA +:010BF50000FF +:00000001FF diff --git a/sw/in_progress/videolizer/wis-go7007-linux/firmware/ezusb/hpi_StarTrek.hex b/sw/in_progress/videolizer/wis-go7007-linux/firmware/ezusb/hpi_StarTrek.hex index 6e17c1067b..7db17e4366 100644 --- a/sw/in_progress/videolizer/wis-go7007-linux/firmware/ezusb/hpi_StarTrek.hex +++ b/sw/in_progress/videolizer/wis-go7007-linux/firmware/ezusb/hpi_StarTrek.hex @@ -1,358 +1,358 @@ -:100BB800012C00012D05012900012A40C105C104AD -:0A0BC80002240000012100012200B8 -:100A090090E6007410F0120E2490E60B7401F000C9 -:100A1900000090E61274A2F000000090E61374E260 -:100A2900F000000090E614F000000090E615F000D8 -:100A3900000090E6047480F00000007402F00000E9 -:100A4900007404F00000007406F00000007408F05F -:100A5900000000E4F000000090E6187411F00000B6 -:100A69000090E6907480F000000090E691F000009C -:100A79000090E6197409F0000000E490E622F00005 -:100A8900000090E6237404F000000090E61A74094F -:100A9900F0000000E490E624F000000090E62574E0 -:100AA90040F000000090E61B7409F0000000E4909B -:100AB900E626F000000090E6277440F0000000539D -:100AC900807F43B280E4F5B6F5B490E668E054FC63 -:0E0AD900F000000053E8FB00000012122B2278 -:10068E0090E6F4E030E00AE5AA20E305751F01804C -:10069E003790E6F4E030E20AE5AC30E505751F026E -:1006AE008026300505751F20801E90E6F4E030E1AF -:1006BE000AE5AC30E105751F04800DE5AB20E105C0 -:1006CE00751F088003751F10E51F24FE70030207B7 -:1006DE007524FE70030207B824FC70030207F82489 -:1006EE00E87003020881241F60030208E590E6F318 -:1006FE00E0547FF000000090E6F074FFF090E6F119 -:10070E0074ECF0E5BB30E7FB000000E490E6D0F0BF -:10071E0000000090E6D104F000000075BB0500005B -:10072E0000E5BB30E7FB00000090E6F3E0547FF0FD -:10073E0000000090E6F074FFF090E6F174EEF0E544 -:10074E00BB30E7FB000000E490E6D0F00000009024 -:10075E00E6D104F000000075BB05000000E5BB30DB -:10076E00E7030208E580F600000090E6F3E0547F10 -:10077E00F000000090E6F074FFF090E6F174F2F0F5 -:10078E00E5BB30E7FB00000090E6D0E529F0000065 -:10079E000090E6D1E52AF000000075BB07000000CE -:1007AE00E5BB30E7030208E580F690E6F3E0547F00 -:1007BE00F000000090E6F074FFF090E6F174E4F0C3 -:1007CE00E5BB30E7FB00000090E6D0E529F0000025 -:1007DE000090E6D1E52AF000000075BB060000008F -:1007EE00E5BB30E7030208E580F600000090E6491D -:1007FE007402F000000090E6F3E0547FF000000079 -:10080E0090E6F074FFF090E6F174F4F0E5BB30E79B -:10081E00FB00000090E6F1E0F521E5BB30E7FB00C0 -:10082E00000090E6F2E0FF90E6F0E0F51AEF30E11E -:10083E00030208E590E6F3E0547FF000000090E636 -:10084E00F074FFF090E6F174EAF0E5BB30E7FB00E0 -:10085E000000E490E6D0F000000090E6D17420F0A5 -:10086E00000000E4F5BB000000E5BB30E7FB000034 -:10087E00008064E4F51DF51E901487E0FFA3E0F5FB -:10088E001BA3E0FEC313F51CEF30E03930E104D2B8 -:10089E00048002C204E51BD39401400DE51B14FD38 -:1008AE007A147B8AAF1C1211797489251BF582E4A8 -:1008BE003414F583E0F528D2047A147B88FDAF1C3E -:1008CE0012115D8010E4F528D2047A147B8AAD1BD8 -:0A08DE00AF1C121179C205000000E2 -:0108E80022ED -:050CFA00438080D322BD -:0512330053807FD3226F -:02123C00D322BB -:08121B0090E6BAE0F52BD322A6 -:1011ED0090E740E52BF0E490E68AF090E68B04F072 -:0211FD00D322FB -:0812230090E6BAE0F527D322A2 -:1011FF0090E740E527F0E490E68AF090E68B04F064 -:02120F00D322E8 -:02123E00D322B9 -:02124000D322B7 -:02124200D322B5 -:1000800090E6B9E0120EE900AC1000D212011C1487 -:10009000016D20019D2101EB22027724033B250302 -:1000A000C23003904003A041000003E00000009034 -:1000B000E6047480F00000007404F0000000740690 -:1000C000F00000007408F0000000E4F000000002FE -:1000D00003E290E6F3E0547FF000000090E6BDE01C -:1000E00090E6F0F090E6BCE090E6F1F0E5BB30E79A -:1000F000FB00000090E6F3E04480F000000090E692 -:10010000BBE090E6F0F090E6BAE090E6F1F0000097 -:1001100000E5BB30E7FB0000000203E290E6F3E0FD -:10012000547FF000000090E6BDE090E6F0F090E62D -:10013000BCE090E6F1F0E5BB30E7FB00000090E6A4 -:10014000F1E0F522E5BB30E7FB90E6F2E090E74016 -:10015000F090E6F0E090E741F0E490E68AF090E677 -:100160008B7402F090E6A0E04480F0C32290E6BADF -:10017000E0F51A90E6BEE0F51BE490E68AF090E622 -:100180008BF090E6A0E020E1F97AE77B40AD1BAF71 -:100190001A12117990E6A0E04480F0C32290E6BAEA -:1001A000E0F51A90E6BEE0F51B90E6A0E020E1F94C -:1001B000E4F51CE51CC3951B50127440251CF58208 -:1001C000E434E7F58374CDF0051C80E77AE77B40E3 -:1001D000AD1BAF1A12115DE490E68AF090E68BE554 -:1001E0001BF090E6A0E04480F0C32290E6BAE0F570 -:1001F0001A90E6BEE0F51B90E6A0E020E1F9E4F5F8 -:100200001CE51CC3951B50127440251CF582E43478 -:10021000E7F58374CDF0051C80E7E4F51C90E6BBA0 -:10022000E0601590E6BDE0FFAE1C051C74C72EF51E -:1002300082E43414F583EFF090E6BCE0FFAE1C05D9 -:100240001C74C72EF582E43414F583EFF07A147B26 -:10025000C7AD1CAF1A1211797AE77B40AD1BAF1AFC -:1002600012115DE490E68AF090E68BE51BF090E6D3 -:10027000A0E04480F0C322E490E68AF090E68BF0A0 -:1002800090E6A0E020E1F990E6BEE0F52890E74096 -:10029000E030E02BE4F51CE51CC395284003020385 -:1002A000307440251CF582E434E7F583E0FF748761 -:1002B000251CF582E43414F583EFF0051C80D890FA -:1002C000E741E02402F51BE4F51CE51CC3951B5037 -:1002D0001E7440251CF582E434E7F583E0FF748743 -:1002E000251CF582E43414F583EFF0051C80DB74E3 -:1002F00040251CF582E434E7F583E0FF90E741E018 -:100300002F14901488F0E52814F51BE51CC3951BE9 -:10031000501E7441251CF582E434E7F583E0FF7438 -:1003200087251CF582E43414F583EFF0051C80DB8F -:10033000D20590E6A0E04480F0C322300510E4909E -:10034000E740F090E68AF090E68B04F0802D90E78D -:10035000407401F0F51CE51CD39528501E748725C8 -:100360001CF582E43414F583E0FF7440251CF5820B -:10037000E434E7F583EFF0051C80DBE490E68AF0D7 -:10038000E5280490E68BF090E6A0E04480F0C322DC -:1003900090E6BAE0547FF580A3E04480F5B2804255 -:1003A00090E740E526F0A3E580F0A3E523F0E49094 -:1003B000E68AF090E68B7403F090E6A0E04480F0CB -:1003C000C32290E740E52DF0A3E52CF0E490E68A07 -:1003D000F090E68B7402F090E6A0E04480F0C32237 -:1003E000C322E490E68AF090E68B04F090E6A0E069 -:0403F0004480F0C392 -:0103F40022E6 -:100AE700C0E0C083C082D2015391EF90E65D7401EC -:080AF700F0D082D083D0E03280 -:1011AD00C0E0C083C0825391EF90E65D7404F0D02F -:0611BD0082D083D0E03275 -:1011C300C0E0C083C0825391EF90E65D7402F0D01B -:0611D30082D083D0E0325F -:10102C00C0E0C083C08285100C85110D850D8285B2 -:10103C000C83A37402F085080E85090F850F828539 -:10104C000E83A37407F05391EF90E65D7410F0D00B -:06105C0082D083D0E032D7 -:10119500C0E0C083C082D2035391EF90E65D74082E -:0811A500F0D082D083D0E032CB -:100F0F00C0E0C083C08290E680E030E74B85080CDC -:100F1F0085090D850D82850C83A37402F085100E53 -:100F2F0085110F850F82850E83A37407F075290233 -:100F3F00752A0000000090E6247402F00000009073 -:100F4F00E625E4F000000090E6267402F0000000B1 -:100F5F0090E627E4F00000005391EF90E65D7420D7 -:080F6F00F0D082D083D0E03203 -:010AFF0032C4 -:010CFF0032C2 -:011244003277 -:011245003276 -:011246003275 -:011247003274 -:011248003273 -:011249003272 -:01124A003271 -:01124B003270 -:01124C00326F -:01124D00326E -:01124E00326D -:01124F00326C -:01125000326B -:01125100326A -:011252003269 -:011253003268 -:011254003267 -:011255003266 -:011256003265 -:011257003264 -:011258003263 -:011259003262 -:01125A003261 -:01125B003260 -:01125C00325F -:01125D00325E -:01125E00325D -:01125F00325C -:01126000325B -:01126100325A -:011262003259 -:011263003258 -:011264003257 -:10113F00C0E0C083C08290E6F574FFF0000000535A -:0E114F0091BFF5A2000000D082D083D0E03224 -:1011D900C0E05391BFE5A04480F523E5B14480F513 -:0411E90026D0E032FA -:0A12110000010202030304040505B6 -:100C6100E4F519F518F517F516C203C200C202C260 -:100C710001120A09750A0D750B0075120D75131213 -:100C810075080D75091C75100D75114A75140D75D2 -:100C91001578D2E843D82090E668E04408F090E661 -:100CA1005CE0443DF0D2AF90E680E020E105D20661 -:100CB10012109490E680E054F7F0538EF8C203309E -:100CC10001051203F5C201300329120CFA5024C2A6 -:100CD1000312111A20001690E682E030E704E020AA -:100CE100E1EF90E682E030E604E020E0E41210C398 -:080CF10012123312068E80C7B7 -:010CF90022D8 -:1003F50090E6B9E070030204D01470030205792475 -:10040500FE700302060E24FB70030204CA14700377 -:100415000204C41470030204B81470030204BE2459 -:1004250005600302067A12123C400302068690E636 -:10043500BBE024FE602C14604724FD601614603177 -:1004450024067065E50A90E6B3F0E50B90E6B4F096 -:10045500020686E51290E6B3F0E51390E6B4F002E5 -:100465000686E50C90E6B3F0E50D90E6B4F00206DD -:1004750086E50E90E6B3F0E50F90E6B4F002068649 -:1004850090E6BAE0FF1210EFAA06A9077B01EA4938 -:10049500600DEE90E6B3F0EF90E6B4F002068690BC -:1004A500E6A0E04401F002068690E6A0E04401F0F3 -:1004B5000206861211FF0206861212230206861212 -:1004C500121B0206861211ED02068612123E400329 -:1004D50002068690E6B8E0247F602B14603C240277 -:1004E500600302056FA200E433FF25E0FFA202E4EA -:1004F500334F90E740F0E4A3F090E68AF090E68B66 -:100505007402F0020686E490E740F0A3F090E68AD4 -:10051500F090E68B7402F002068690E6BCE0547E0D -:10052500FF7E00E0D3948040067C007D0180047C42 -:10053500007D00EC4EFEED4F2411F58274123EF560 -:1005450083E493FF3395E0FEEF24A1FFEE34E68FBD -:1005550082F583E0540190E740F0E4A3F090E68A49 -:10056500F090E68B7402F002068690E6A0E0440166 -:10057500F0020686121240400302068690E6B8E0B5 -:1005850024FE601D2402600302068690E6BAE0B4EC -:100595000105C20002068690E6A0E04401F00206CD -:1005A5008690E6BAE0705990E6BCE0547EFF7E0086 -:1005B500E0D3948040067C007D0180047C007D00B2 -:1005C500EC4EFEED4F2411F58274123EF583E49353 -:1005D500FF3395E0FEEF24A1FFEE34E68F82F5832D -:1005E500E054FEF090E6BCE05480FF131313541F53 -:1005F500FFE0540F2F90E683F0E04420F0020686DA -:1006050090E6A0E04401F08078121242507390E623 -:10061500B8E024FE60202402706790E6BAE0B401D9 -:1006250004D200805C90E6BAE06402605490E6A0D3 -:10063500E04401F0804B90E6BCE0547EFF7E00E094 -:10064500D3948040067C007D0180047C007D00EC15 -:100655004EFEED4F2411F58274123EF583E493FFAF -:100665003395E0FEEF24A1FFEE34E68F82F583E0BB -:100675004401F0800C120080500790E6A0E0440190 -:08068500F090E6A0E04480F0D3 -:01068D00224A -:030033000212387E -:0412380053D8EF3266 -:100BD20060801400030138010101010700020100D5 -:100BE20000000000FAFAFBFBFBFBFBFB36092D2D94 -:100BF2002D2D123F010138010101010702020702F6 -:100C020000000000F9FBFBFBFBFBFBFB09092D2DA0 -:100C1200002D363F03013F010101010700020100DF -:100C220000000000FAFAFBFBFBFBFBFB36092D2D53 -:100C32002D2D123F19023F023F0101070302070651 -:100C420001000000FBFFFBF9FBFBFBFB3F2D2D2D01 -:0E0C52002D2D363F471480E00000FB06E41114 -:100E240090E60174C2F090E6F574FFF0901480E04F -:100E340090E6F3F0901481E090E6C3F0901482E021 -:100E440090E6C1F0901483E090E6C2F0901485E03F -:100E540090E6C0F0901486E090E6F4F075AF077465 -:100E640014F59A7400F59B759DE4E4F59EFF90E6F5 -:100E74007BE090E67CF00FBF80F4E490E671F0F53F -:100E8400B490E672F0F5B600000090E6C4F00000FD -:050E94000090E6C5F02E -:010E99002236 -:100D000012010002FF00FF40B10E0770080201024D -:100D100000010A06000200000040010009022E0046 -:100D200001010080FA0904000004FF00000007052B -:100D30000202000200070584020002000705860285 -:100D40000002000705880200020009022E000101CE -:100D50000080FA0904000004FF00000007050202F9 -:100D6000400000070584024000000705860240009D -:100D70000007058802400000040309040803570027 -:100D8000490053001203540056002000540055003F -:080D90004E0045005200000076 -:03004300020B00AD -:030053000211D9BE -:100B0000020AE7000211C3000211AD0002119500B4 -:100B100002102C00020F0F00020AFF00020CFF005F -:100B2000021244000212450002124600021247005F -:100B3000021248000212490002124A0002124B003F -:100B400002124C00020CFF0002124D0002124E0075 -:100B500002124F0002125000021251000212520003 -:100B600002125300020CFF00020CFF00020CFF00F7 -:100B700002125400021255000212560002125700CF -:100B8000021258000212590002125A0002125B00AF -:100B900002125C0002125D0002125E0002125F008F -:100BA000021260000212610002126200021263006F -:080BB0000212640002113F0073 -:1010C30090E682E030E004E020E60B90E682E03038 -:1010D300E119E030E71590E680E04401F07F147EEB -:0C10E30000120F7790E680E054FEF0222F -:10111A0090E682E044C0F090E681F0438701000047 -:04112A00000000229F -:1010940030060990E680E0440AF0800790E680E09C -:1010A4004408F07FDC7E05120F7790E65D74FFF054 -:0F10B40090E65FF05391EF90E680E054F7F02262 -:08122B00E4F533D2E9D2AF2251 -:100FBD00AD0790E678E020E6F9C2E990E678E044E6 -:100FCD0080F0ED25E090E679F090E678E030E0F9FC -:100FDD0090E678E04440F090E678E020E6F990E67F -:080FED0078E030E1D6D2E922E0 -:10106200AC0790E678E020E6F9E533702390E67865 -:10107200E04480F0EC25E090E679F08D2EAF03A9F4 -:1010820007752F018A308931E4F532753301D32295 -:02109200C32277 -:100FF500AC0730040990E678E030E60680F7E53383 -:1010050070FC90E678E04480F0EC25E0440190E641 -:1010150079F08D2EAF03A907752F018A308931E448 -:07102500F532753303D322FD -:03004B000208E9BF -:1008E900C0E0C083C082C085C084C086758600C050 -:1008F900D075D000C000C001C002C003C006C00747 -:1009090090E678E030E2067533060209EB90E67866 -:10091900E020E10CE533640260067533070209EB58 -:10092900E53324FE607214604924FE70030209D77E -:1009390024FC70030209E31470030209E824096026 -:10094900030209EBAB2FAA30A931AF3205328F82EE -:10095900758300120E9A90E679F0E532B52E0830CB -:100969000405753305807BE532652E707575330A8C -:10097900807090E679E0AB2FAA30A931AE328E8231 -:10098900758300120EC7753302E52E64017053900A -:10099900E678E04420F0804AE52E24FEB53207903F -:1009A900E678E04420F0E52E14B5320A90E678E0C6 -:1009B9004440F075330090E679E0AB2FAA30A931B5 -:1009C900AE328E82758300120EC70532801490E60E -:1009D90078E04440F0753300800875330080037572 -:1009E90033005391DFD007D006D003D002D001D015 -:1009F90000D0D0D086D084D085D082D083D0E032C8 -:0210EF00A9074F -:1010F100AE14AF158F828E83A3E064037017AD0128 -:1011010019ED7001228F828E83E07C002FFDEC3E71 -:08111100FEAF0580DFE4FEFFE4 -:0111190022B3 -:10115D00120FF5E53324FA600E146006240770F3C0 -:0C116D00D322E4F533D322E4F533D3227F -:10117900121062E53324FA600E146006240770F336 -:0C118900D322E4F533D322E4F533D32263 -:100F77008E1A8F1B90E600E054187012E51B2401AF -:100F8700FFE4351AC313F51AEF13F51B801590E626 -:100F970000E05418FFBF100BE51B25E0F51BE51A11 -:100FA70033F51AE51B151BAE1A7002151A4E6005AC -:060FB70012112E80EE2253 -:10112E007400F58690FDA57C05A3E582458370F9D4 -:01113E00228E -:03000000020D9856 -:0C0D9800787FE4F6D8FD758133020DDF92 -:100E9A00BB010CE58229F582E5833AF583E022500D -:100EAA0006E92582F8E622BBFE06E92582F8E22257 -:0D0EBA00E58229F582E5833AF583E4932271 -:100EC700F8BB010DE58229F582E5833AF583E8F061 -:100ED700225006E92582C8F622BBFE05E92582C80D -:020EE700F222F5 -:100EE900D083D082F8E4937012740193700DA3A398 -:100EF90093F8740193F5828883E4737402936860AC -:060F0900EFA3A3A380DFAB -:100DA400020C61E493A3F8E493A34003F68001F2F8 -:100DB40008DFF48029E493A3F85407240CC8C33350 -:100DC400C4540F4420C8834004F456800146F6DF1F -:100DD400E4800B0102040810204080900BB8E47EEC -:100DE400019360BCA3FF543F30E509541FFEE49314 -:100DF400A360010ECF54C025E060A840B8E493A3DB -:100E0400FAE493A3F8E493A3C8C582C8CAC583CA05 -:100E1400F0A3C8C582C8CAC583CADFE9DEE780BEBD -:010C60000093 -:00000001FF +:100BB800012C00012D05012900012A40C105C104AD +:0A0BC80002240000012100012200B8 +:100A090090E6007410F0120E2490E60B7401F000C9 +:100A1900000090E61274A2F000000090E61374E260 +:100A2900F000000090E614F000000090E615F000D8 +:100A3900000090E6047480F00000007402F00000E9 +:100A4900007404F00000007406F00000007408F05F +:100A5900000000E4F000000090E6187411F00000B6 +:100A69000090E6907480F000000090E691F000009C +:100A79000090E6197409F0000000E490E622F00005 +:100A8900000090E6237404F000000090E61A74094F +:100A9900F0000000E490E624F000000090E62574E0 +:100AA90040F000000090E61B7409F0000000E4909B +:100AB900E626F000000090E6277440F0000000539D +:100AC900807F43B280E4F5B6F5B490E668E054FC63 +:0E0AD900F000000053E8FB00000012122B2278 +:10068E0090E6F4E030E00AE5AA20E305751F01804C +:10069E003790E6F4E030E20AE5AC30E505751F026E +:1006AE008026300505751F20801E90E6F4E030E1AF +:1006BE000AE5AC30E105751F04800DE5AB20E105C0 +:1006CE00751F088003751F10E51F24FE70030207B7 +:1006DE007524FE70030207B824FC70030207F82489 +:1006EE00E87003020881241F60030208E590E6F318 +:1006FE00E0547FF000000090E6F074FFF090E6F119 +:10070E0074ECF0E5BB30E7FB000000E490E6D0F0BF +:10071E0000000090E6D104F000000075BB0500005B +:10072E0000E5BB30E7FB00000090E6F3E0547FF0FD +:10073E0000000090E6F074FFF090E6F174EEF0E544 +:10074E00BB30E7FB000000E490E6D0F00000009024 +:10075E00E6D104F000000075BB05000000E5BB30DB +:10076E00E7030208E580F600000090E6F3E0547F10 +:10077E00F000000090E6F074FFF090E6F174F2F0F5 +:10078E00E5BB30E7FB00000090E6D0E529F0000065 +:10079E000090E6D1E52AF000000075BB07000000CE +:1007AE00E5BB30E7030208E580F690E6F3E0547F00 +:1007BE00F000000090E6F074FFF090E6F174E4F0C3 +:1007CE00E5BB30E7FB00000090E6D0E529F0000025 +:1007DE000090E6D1E52AF000000075BB060000008F +:1007EE00E5BB30E7030208E580F600000090E6491D +:1007FE007402F000000090E6F3E0547FF000000079 +:10080E0090E6F074FFF090E6F174F4F0E5BB30E79B +:10081E00FB00000090E6F1E0F521E5BB30E7FB00C0 +:10082E00000090E6F2E0FF90E6F0E0F51AEF30E11E +:10083E00030208E590E6F3E0547FF000000090E636 +:10084E00F074FFF090E6F174EAF0E5BB30E7FB00E0 +:10085E000000E490E6D0F000000090E6D17420F0A5 +:10086E00000000E4F5BB000000E5BB30E7FB000034 +:10087E00008064E4F51DF51E901487E0FFA3E0F5FB +:10088E001BA3E0FEC313F51CEF30E03930E104D2B8 +:10089E00048002C204E51BD39401400DE51B14FD38 +:1008AE007A147B8AAF1C1211797489251BF582E4A8 +:1008BE003414F583E0F528D2047A147B88FDAF1C3E +:1008CE0012115D8010E4F528D2047A147B8AAD1BD8 +:0A08DE00AF1C121179C205000000E2 +:0108E80022ED +:050CFA00438080D322BD +:0512330053807FD3226F +:02123C00D322BB +:08121B0090E6BAE0F52BD322A6 +:1011ED0090E740E52BF0E490E68AF090E68B04F072 +:0211FD00D322FB +:0812230090E6BAE0F527D322A2 +:1011FF0090E740E527F0E490E68AF090E68B04F064 +:02120F00D322E8 +:02123E00D322B9 +:02124000D322B7 +:02124200D322B5 +:1000800090E6B9E0120EE900AC1000D212011C1487 +:10009000016D20019D2101EB22027724033B250302 +:1000A000C23003904003A041000003E00000009034 +:1000B000E6047480F00000007404F0000000740690 +:1000C000F00000007408F0000000E4F000000002FE +:1000D00003E290E6F3E0547FF000000090E6BDE01C +:1000E00090E6F0F090E6BCE090E6F1F0E5BB30E79A +:1000F000FB00000090E6F3E04480F000000090E692 +:10010000BBE090E6F0F090E6BAE090E6F1F0000097 +:1001100000E5BB30E7FB0000000203E290E6F3E0FD +:10012000547FF000000090E6BDE090E6F0F090E62D +:10013000BCE090E6F1F0E5BB30E7FB00000090E6A4 +:10014000F1E0F522E5BB30E7FB90E6F2E090E74016 +:10015000F090E6F0E090E741F0E490E68AF090E677 +:100160008B7402F090E6A0E04480F0C32290E6BADF +:10017000E0F51A90E6BEE0F51BE490E68AF090E622 +:100180008BF090E6A0E020E1F97AE77B40AD1BAF71 +:100190001A12117990E6A0E04480F0C32290E6BAEA +:1001A000E0F51A90E6BEE0F51B90E6A0E020E1F94C +:1001B000E4F51CE51CC3951B50127440251CF58208 +:1001C000E434E7F58374CDF0051C80E77AE77B40E3 +:1001D000AD1BAF1A12115DE490E68AF090E68BE554 +:1001E0001BF090E6A0E04480F0C32290E6BAE0F570 +:1001F0001A90E6BEE0F51B90E6A0E020E1F9E4F5F8 +:100200001CE51CC3951B50127440251CF582E43478 +:10021000E7F58374CDF0051C80E7E4F51C90E6BBA0 +:10022000E0601590E6BDE0FFAE1C051C74C72EF51E +:1002300082E43414F583EFF090E6BCE0FFAE1C05D9 +:100240001C74C72EF582E43414F583EFF07A147B26 +:10025000C7AD1CAF1A1211797AE77B40AD1BAF1AFC +:1002600012115DE490E68AF090E68BE51BF090E6D3 +:10027000A0E04480F0C322E490E68AF090E68BF0A0 +:1002800090E6A0E020E1F990E6BEE0F52890E74096 +:10029000E030E02BE4F51CE51CC395284003020385 +:1002A000307440251CF582E434E7F583E0FF748761 +:1002B000251CF582E43414F583EFF0051C80D890FA +:1002C000E741E02402F51BE4F51CE51CC3951B5037 +:1002D0001E7440251CF582E434E7F583E0FF748743 +:1002E000251CF582E43414F583EFF0051C80DB74E3 +:1002F00040251CF582E434E7F583E0FF90E741E018 +:100300002F14901488F0E52814F51BE51CC3951BE9 +:10031000501E7441251CF582E434E7F583E0FF7438 +:1003200087251CF582E43414F583EFF0051C80DB8F +:10033000D20590E6A0E04480F0C322300510E4909E +:10034000E740F090E68AF090E68B04F0802D90E78D +:10035000407401F0F51CE51CD39528501E748725C8 +:100360001CF582E43414F583E0FF7440251CF5820B +:10037000E434E7F583EFF0051C80DBE490E68AF0D7 +:10038000E5280490E68BF090E6A0E04480F0C322DC +:1003900090E6BAE0547FF580A3E04480F5B2804255 +:1003A00090E740E526F0A3E580F0A3E523F0E49094 +:1003B000E68AF090E68B7403F090E6A0E04480F0CB +:1003C000C32290E740E52DF0A3E52CF0E490E68A07 +:1003D000F090E68B7402F090E6A0E04480F0C32237 +:1003E000C322E490E68AF090E68B04F090E6A0E069 +:0403F0004480F0C392 +:0103F40022E6 +:100AE700C0E0C083C082D2015391EF90E65D7401EC +:080AF700F0D082D083D0E03280 +:1011AD00C0E0C083C0825391EF90E65D7404F0D02F +:0611BD0082D083D0E03275 +:1011C300C0E0C083C0825391EF90E65D7402F0D01B +:0611D30082D083D0E0325F +:10102C00C0E0C083C08285100C85110D850D8285B2 +:10103C000C83A37402F085080E85090F850F828539 +:10104C000E83A37407F05391EF90E65D7410F0D00B +:06105C0082D083D0E032D7 +:10119500C0E0C083C082D2035391EF90E65D74082E +:0811A500F0D082D083D0E032CB +:100F0F00C0E0C083C08290E680E030E74B85080CDC +:100F1F0085090D850D82850C83A37402F085100E53 +:100F2F0085110F850F82850E83A37407F075290233 +:100F3F00752A0000000090E6247402F00000009073 +:100F4F00E625E4F000000090E6267402F0000000B1 +:100F5F0090E627E4F00000005391EF90E65D7420D7 +:080F6F00F0D082D083D0E03203 +:010AFF0032C4 +:010CFF0032C2 +:011244003277 +:011245003276 +:011246003275 +:011247003274 +:011248003273 +:011249003272 +:01124A003271 +:01124B003270 +:01124C00326F +:01124D00326E +:01124E00326D +:01124F00326C +:01125000326B +:01125100326A +:011252003269 +:011253003268 +:011254003267 +:011255003266 +:011256003265 +:011257003264 +:011258003263 +:011259003262 +:01125A003261 +:01125B003260 +:01125C00325F +:01125D00325E +:01125E00325D +:01125F00325C +:01126000325B +:01126100325A +:011262003259 +:011263003258 +:011264003257 +:10113F00C0E0C083C08290E6F574FFF0000000535A +:0E114F0091BFF5A2000000D082D083D0E03224 +:1011D900C0E05391BFE5A04480F523E5B14480F513 +:0411E90026D0E032FA +:0A12110000010202030304040505B6 +:100C6100E4F519F518F517F516C203C200C202C260 +:100C710001120A09750A0D750B0075120D75131213 +:100C810075080D75091C75100D75114A75140D75D2 +:100C91001578D2E843D82090E668E04408F090E661 +:100CA1005CE0443DF0D2AF90E680E020E105D20661 +:100CB10012109490E680E054F7F0538EF8C203309E +:100CC10001051203F5C201300329120CFA5024C2A6 +:100CD1000312111A20001690E682E030E704E020AA +:100CE100E1EF90E682E030E604E020E0E41210C398 +:080CF10012123312068E80C7B7 +:010CF90022D8 +:1003F50090E6B9E070030204D01470030205792475 +:10040500FE700302060E24FB70030204CA14700377 +:100415000204C41470030204B81470030204BE2459 +:1004250005600302067A12123C400302068690E636 +:10043500BBE024FE602C14604724FD601614603177 +:1004450024067065E50A90E6B3F0E50B90E6B4F096 +:10045500020686E51290E6B3F0E51390E6B4F002E5 +:100465000686E50C90E6B3F0E50D90E6B4F00206DD +:1004750086E50E90E6B3F0E50F90E6B4F002068649 +:1004850090E6BAE0FF1210EFAA06A9077B01EA4938 +:10049500600DEE90E6B3F0EF90E6B4F002068690BC +:1004A500E6A0E04401F002068690E6A0E04401F0F3 +:1004B5000206861211FF0206861212230206861212 +:1004C500121B0206861211ED02068612123E400329 +:1004D50002068690E6B8E0247F602B14603C240277 +:1004E500600302056FA200E433FF25E0FFA202E4EA +:1004F500334F90E740F0E4A3F090E68AF090E68B66 +:100505007402F0020686E490E740F0A3F090E68AD4 +:10051500F090E68B7402F002068690E6BCE0547E0D +:10052500FF7E00E0D3948040067C007D0180047C42 +:10053500007D00EC4EFEED4F2411F58274123EF560 +:1005450083E493FF3395E0FEEF24A1FFEE34E68FBD +:1005550082F583E0540190E740F0E4A3F090E68A49 +:10056500F090E68B7402F002068690E6A0E0440166 +:10057500F0020686121240400302068690E6B8E0B5 +:1005850024FE601D2402600302068690E6BAE0B4EC +:100595000105C20002068690E6A0E04401F00206CD +:1005A5008690E6BAE0705990E6BCE0547EFF7E0086 +:1005B500E0D3948040067C007D0180047C007D00B2 +:1005C500EC4EFEED4F2411F58274123EF583E49353 +:1005D500FF3395E0FEEF24A1FFEE34E68F82F5832D +:1005E500E054FEF090E6BCE05480FF131313541F53 +:1005F500FFE0540F2F90E683F0E04420F0020686DA +:1006050090E6A0E04401F08078121242507390E623 +:10061500B8E024FE60202402706790E6BAE0B401D9 +:1006250004D200805C90E6BAE06402605490E6A0D3 +:10063500E04401F0804B90E6BCE0547EFF7E00E094 +:10064500D3948040067C007D0180047C007D00EC15 +:100655004EFEED4F2411F58274123EF583E493FFAF +:100665003395E0FEEF24A1FFEE34E68F82F583E0BB +:100675004401F0800C120080500790E6A0E0440190 +:08068500F090E6A0E04480F0D3 +:01068D00224A +:030033000212387E +:0412380053D8EF3266 +:100BD20060801400030138010101010700020100D5 +:100BE20000000000FAFAFBFBFBFBFBFB36092D2D94 +:100BF2002D2D123F010138010101010702020702F6 +:100C020000000000F9FBFBFBFBFBFBFB09092D2DA0 +:100C1200002D363F03013F010101010700020100DF +:100C220000000000FAFAFBFBFBFBFBFB36092D2D53 +:100C32002D2D123F19023F023F0101070302070651 +:100C420001000000FBFFFBF9FBFBFBFB3F2D2D2D01 +:0E0C52002D2D363F471480E00000FB06E41114 +:100E240090E60174C2F090E6F574FFF0901480E04F +:100E340090E6F3F0901481E090E6C3F0901482E021 +:100E440090E6C1F0901483E090E6C2F0901485E03F +:100E540090E6C0F0901486E090E6F4F075AF077465 +:100E640014F59A7400F59B759DE4E4F59EFF90E6F5 +:100E74007BE090E67CF00FBF80F4E490E671F0F53F +:100E8400B490E672F0F5B600000090E6C4F00000FD +:050E94000090E6C5F02E +:010E99002236 +:100D000012010002FF00FF40B10E0770080201024D +:100D100000010A06000200000040010009022E0046 +:100D200001010080FA0904000004FF00000007052B +:100D30000202000200070584020002000705860285 +:100D40000002000705880200020009022E000101CE +:100D50000080FA0904000004FF00000007050202F9 +:100D6000400000070584024000000705860240009D +:100D70000007058802400000040309040803570027 +:100D8000490053001203540056002000540055003F +:080D90004E0045005200000076 +:03004300020B00AD +:030053000211D9BE +:100B0000020AE7000211C3000211AD0002119500B4 +:100B100002102C00020F0F00020AFF00020CFF005F +:100B2000021244000212450002124600021247005F +:100B3000021248000212490002124A0002124B003F +:100B400002124C00020CFF0002124D0002124E0075 +:100B500002124F0002125000021251000212520003 +:100B600002125300020CFF00020CFF00020CFF00F7 +:100B700002125400021255000212560002125700CF +:100B8000021258000212590002125A0002125B00AF +:100B900002125C0002125D0002125E0002125F008F +:100BA000021260000212610002126200021263006F +:080BB0000212640002113F0073 +:1010C30090E682E030E004E020E60B90E682E03038 +:1010D300E119E030E71590E680E04401F07F147EEB +:0C10E30000120F7790E680E054FEF0222F +:10111A0090E682E044C0F090E681F0438701000047 +:04112A00000000229F +:1010940030060990E680E0440AF0800790E680E09C +:1010A4004408F07FDC7E05120F7790E65D74FFF054 +:0F10B40090E65FF05391EF90E680E054F7F02262 +:08122B00E4F533D2E9D2AF2251 +:100FBD00AD0790E678E020E6F9C2E990E678E044E6 +:100FCD0080F0ED25E090E679F090E678E030E0F9FC +:100FDD0090E678E04440F090E678E020E6F990E67F +:080FED0078E030E1D6D2E922E0 +:10106200AC0790E678E020E6F9E533702390E67865 +:10107200E04480F0EC25E090E679F08D2EAF03A9F4 +:1010820007752F018A308931E4F532753301D32295 +:02109200C32277 +:100FF500AC0730040990E678E030E60680F7E53383 +:1010050070FC90E678E04480F0EC25E0440190E641 +:1010150079F08D2EAF03A907752F018A308931E448 +:07102500F532753303D322FD +:03004B000208E9BF +:1008E900C0E0C083C082C085C084C086758600C050 +:1008F900D075D000C000C001C002C003C006C00747 +:1009090090E678E030E2067533060209EB90E67866 +:10091900E020E10CE533640260067533070209EB58 +:10092900E53324FE607214604924FE70030209D77E +:1009390024FC70030209E31470030209E824096026 +:10094900030209EBAB2FAA30A931AF3205328F82EE +:10095900758300120E9A90E679F0E532B52E0830CB +:100969000405753305807BE532652E707575330A8C +:10097900807090E679E0AB2FAA30A931AE328E8231 +:10098900758300120EC7753302E52E64017053900A +:10099900E678E04420F0804AE52E24FEB53207903F +:1009A900E678E04420F0E52E14B5320A90E678E0C6 +:1009B9004440F075330090E679E0AB2FAA30A931B5 +:1009C900AE328E82758300120EC70532801490E60E +:1009D90078E04440F0753300800875330080037572 +:1009E90033005391DFD007D006D003D002D001D015 +:1009F90000D0D0D086D084D085D082D083D0E032C8 +:0210EF00A9074F +:1010F100AE14AF158F828E83A3E064037017AD0128 +:1011010019ED7001228F828E83E07C002FFDEC3E71 +:08111100FEAF0580DFE4FEFFE4 +:0111190022B3 +:10115D00120FF5E53324FA600E146006240770F3C0 +:0C116D00D322E4F533D322E4F533D3227F +:10117900121062E53324FA600E146006240770F336 +:0C118900D322E4F533D322E4F533D32263 +:100F77008E1A8F1B90E600E054187012E51B2401AF +:100F8700FFE4351AC313F51AEF13F51B801590E626 +:100F970000E05418FFBF100BE51B25E0F51BE51A11 +:100FA70033F51AE51B151BAE1A7002151A4E6005AC +:060FB70012112E80EE2253 +:10112E007400F58690FDA57C05A3E582458370F9D4 +:01113E00228E +:03000000020D9856 +:0C0D9800787FE4F6D8FD758133020DDF92 +:100E9A00BB010CE58229F582E5833AF583E022500D +:100EAA0006E92582F8E622BBFE06E92582F8E22257 +:0D0EBA00E58229F582E5833AF583E4932271 +:100EC700F8BB010DE58229F582E5833AF583E8F061 +:100ED700225006E92582C8F622BBFE05E92582C80D +:020EE700F222F5 +:100EE900D083D082F8E4937012740193700DA3A398 +:100EF90093F8740193F5828883E4737402936860AC +:060F0900EFA3A3A380DFAB +:100DA400020C61E493A3F8E493A34003F68001F2F8 +:100DB40008DFF48029E493A3F85407240CC8C33350 +:100DC400C4540F4420C8834004F456800146F6DF1F +:100DD400E4800B0102040810204080900BB8E47EEC +:100DE400019360BCA3FF543F30E509541FFEE49314 +:100DF400A360010ECF54C025E060A840B8E493A3DB +:100E0400FAE493A3F8E493A3C8C582C8CAC583CA05 +:100E1400F0A3C8C582C8CAC583CADFE9DEE780BEBD +:010C60000093 +:00000001FF diff --git a/sw/tools/calibration/airspeed.m b/sw/tools/calibration/airspeed.m index d06d370628..af6feedf5e 100644 --- a/sw/tools/calibration/airspeed.m +++ b/sw/tools/calibration/airspeed.m @@ -1,75 +1,75 @@ - -close all - -%% Read Data - -% AIR = load('airspeed.txt'); -% air = AIR(:,5); -% desired = AIR(:,6); -% climb = AIR(:,7)./100; -% speed = AIR(:,8)./100; -% alt = AIR(:,9)./100; -% course = AIR(:,10)./10; -% -% airspeed_bias = 64.5; -% airspeed_scale = 3.5; - -%% Read data - -AIR = load('airspeed_amp.txt'); -AIR = AIR(1000:end,:); -air = AIR(:,6); -desired = AIR(:,9)./100; -climb = AIR(:,7)./100; -speed = AIR(:,8)./100; -alt = AIR(:,9)./100; -course = AIR(:,10)./10; - -airspeed_bias = 370; -airspeed_scale = 3.5 / 5.7 * 2.4; - -%% Altitude - -figure -hold on -plot (alt); -plot(desired,'r'); -grid on; - -%% Wind - -windx = 7; -windy = 0; - -figure; -vx = speed .* cosd(course) + windx; -vy = speed .* sind(course) + windy; -vz = climb; -plot(vx,vy,'bx'); -grid on; -axis equal; - -%% Airspeed Calibration - -gpsairspeed = sqrt(vx.^2 + vy .^2 + vz.^2); - -airsp = air - airspeed_bias; -airsp = airsp - airsp .* (airsp < 0); -airsp = sqrt(airsp) * airspeed_scale; - -% [b,a] = butter(2,0.1); -% airsp = filter(b,a,airsp); -% gpsairspeed = filter(b,a,gpsairspeed); - -figure -plot(airsp,'b'); -hold on; -plot(gpsairspeed,'r'); -grid on; -legend('air','gps'); -%plot(climb,'g'); - -%% Total Energy - -%Ekin = airsp .* - + +close all + +%% Read Data + +% AIR = load('airspeed.txt'); +% air = AIR(:,5); +% desired = AIR(:,6); +% climb = AIR(:,7)./100; +% speed = AIR(:,8)./100; +% alt = AIR(:,9)./100; +% course = AIR(:,10)./10; +% +% airspeed_bias = 64.5; +% airspeed_scale = 3.5; + +%% Read data + +AIR = load('airspeed_amp.txt'); +AIR = AIR(1000:end,:); +air = AIR(:,6); +desired = AIR(:,9)./100; +climb = AIR(:,7)./100; +speed = AIR(:,8)./100; +alt = AIR(:,9)./100; +course = AIR(:,10)./10; + +airspeed_bias = 370; +airspeed_scale = 3.5 / 5.7 * 2.4; + +%% Altitude + +figure +hold on +plot (alt); +plot(desired,'r'); +grid on; + +%% Wind + +windx = 7; +windy = 0; + +figure; +vx = speed .* cosd(course) + windx; +vy = speed .* sind(course) + windy; +vz = climb; +plot(vx,vy,'bx'); +grid on; +axis equal; + +%% Airspeed Calibration + +gpsairspeed = sqrt(vx.^2 + vy .^2 + vz.^2); + +airsp = air - airspeed_bias; +airsp = airsp - airsp .* (airsp < 0); +airsp = sqrt(airsp) * airspeed_scale; + +% [b,a] = butter(2,0.1); +% airsp = filter(b,a,airsp); +% gpsairspeed = filter(b,a,gpsairspeed); + +figure +plot(airsp,'b'); +hold on; +plot(gpsairspeed,'r'); +grid on; +legend('air','gps'); +%plot(climb,'g'); + +%% Total Energy + +%Ekin = airsp .* +