User Tools

Site Tools


sdk:intro

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
sdk:intro [2017/01/16 11:47] aeroflysdk:intro [2022/07/11 12:28] (current) jh
Line 1: Line 1:
-===== Aerofly FS Flight Simulator Software Development Kit (SDK) =====+====== Aerofly FS Flight Simulator Software Development Kit (SDK) ======
  
-Version 2017/01/12+Version 2019/06/25
  
-==== Content overview ==== +** Important update for latest version 2019/06/25 **
-The Aerofly FS 2 Flight Simulator Software Development Kit (SDK) consists of several different programs and libraries that are required by external developers to create additional content for Aerofly FS 2. +
-This SDK includes: +
-  *Export plugins for 3D Studio Max, Maxon Cinema 4D and AC3D Version 8 +
-  *Installer for the Aerofly FS 2 Content Converter used to create 3D scenery objects   +
-  *Installer for the Aerofly FS 2 Aircraft Converter for creating your own airplane +
-  *The 'external_dll' folder:\\ Example Microsoft Visual Studio 2015 project for creating a Windows DLL for reading simulation data and sending back control inputs.   +
-  *The 'scenery_workshop' folder:\\ A sample airport 'kigm_kingman' with the 3D Studio Max and Maxon Cinema 4D modeling files as well as all required textures. Here you will learn the basics of creating your airport for Aerofly FS 2.   +
-  *The 'aircraft_workshop' folder:\\ Sample aircraft 'dr400' including the 3d Studio Max files and all texture and sound source files as well as template files to get your aircraft 3d model into Aerofly FS 2.+
  
-==== Requirements ==== +If you have installed a previous version of our Aerofly FS 2 Content Converter and Aerofly FS 2 Aircraft converterplease uninstall them first before installing the latest version as of 2019/06/25. Both tools now no longer requires elevated privileges and are installed in the Windows Programs folder for the current user.
-Operating System: +
-  *64 Bit version of Windows 78 or 10   +
-One of the following modeling tools: +
-  *Autodesk 3D Studio Max 2010, 2012, 2013, 2014 or 2016   +
-  *Maxon Cinema 4D Version 17 +
-  *AC3D Version 8 +
-UNICODE capable text editor, e.g.: +
-  *EditPad Pro   +
-  *UltraEdit +
-  *Notepad++   +
-  *Windows Wordpad  +
  
-===== Plugins For 3D Studio Max, Cinema 4D and AC3D ===== +===== Getting the SDK =====
-The SDK provides export plugins for 3D Studio Max, Maxon Cinema 4D and AC3D Version 8. Those plugins export the 3D objects from the modeling software into the intermediate .tgi file format. +
-The structure of the intermediate .tgi files generated by the export plugins is independent of the chosen modeling software and specific export plugin. This ensures that there is only one input file format for the final converter to the Aerofly runtime-engine. This converter can be subject to change for future Aerofly versions and can optimize the already exported 3D models without the need to reopen the modeling software.+
  
-**Installation**\\ +Please visit our [[https://www.aerofly.com/community/filebase/index.php?category-file-list/3-aerofly-fs-2-sdk/|Aerofly FS SDK download page]] to download the SDK files for freeAfter registration and our approval of your user account a short time later you can download the SDK files.
-Installing the export plugins should simply be a case of following the usual plugin-installation-procedures for your modeling software, copying the plugins into the respective plugin-folder of the target modeling software.\\ +
-  *In 3D Studio Max select Customize > Configure System Paths > 3rd party plugins and add a file path reference to the 3D Studio Max export plugin file\\ 'ipacs-3dsmax-2016-to-tgi.dle' distributed with the SDK. As an alternative you may copy the files 'ipacs-3dsmax-2016-to-tgi.dle' and 'ipacs-3dsmax-2016-to-tgi.dll' into the plugin folder of 3D Studio Max.\\    +
-  *For Maxon Cinema 4D copy the file 'ipacs-c4d-r17-to-tgi.cdl64' to the user plugin folder, by default, this is located at     '%APPDATA%/Roaming/MAXON/CINEMA 4D R17_xxxxxxxx/plugins'     +
-  *For AC3D copy the file 'ipacs-ac3d-tgi.dle' to the plugin folder of AC3D, by default this is at 'C:\Program Files (x86)\AC3Dxxx\plugins\' +
  
-====== Aerofly FS Content Converter ====== +  * [[https://www.aerofly.com/community/filebase/index.php?category-file-list/3-aerofly-fs-2-sdk/|Aerofly FS SDK]] with links to all available tools and repaint kits 
-The Aerofly FS 2 Content Converter can do several operations to generate files compatible with the Aerofly FS 2 Flight Simulator:\\ +  * [[https://www.aerofly.com/community/filebase/index.php?file/2-sdk-tools/|Aerofly FS SDK Tools]] 
-  - Convert intermediate .tgi 3D models and textures in .bmp, .png and .tif file format to the final Aerofly FS 2 Flight Simulator files.\\ +  * [[https://www.aerofly.com/community/filebase/index.php?file/3-scenery-workshop/|Scenery Workshop]] with example airport Kingman and all required source files. 
-  - Convert .wav sound files to .tsb sound files for the Aerofly FS 2 engine +  * [[https://www.aerofly.com/community/filebase/index.php?file/61-aircraft-workshop-dr400/|Aircraft Workshop]] with DR400 airplane and all required source files.
  
-**Installation**\\ +**SDK Requirements**
-For the installation of the Aerofly FS 2 Content Converter simply start the setup program 'aerofly_fs_2_content_converter_x64_installer.exe'. Follow the steps of the installation dialog.+
  
-====== Scenery Workshop ======+  * 64 Bit version of Windows 7, 8 or 10 with  
 +  * E-mail account to register in the IPACS forum and download the SDK 
 +  * UNICODE capable text editor, e.g.:  
 +    * [[https://code.visualstudio.com/|Visual Studio]] (e.g. VS Code or VS Community) 
 +    * [[https://www.editpadlite.com|EditPad Lite/Pro]],  
 +    * [[https://www.ultraedit.com|UltraEdit]],  
 +    * [[https://notepad-plus-plus.org/|Notepad++]] or 
 +    * Windows Wordpad 
 +  * If you want to create own 3D models: 
 +    * 3D Studio Max 2010 or higher, 
 +    * Maxon Cinema 4D Version 17, or 
 +    * AutoCAD (AC3D) 3D Version 8
  
-===== Kingman Example Airport ===== +===== SDK Tools Overview =====
-To get a better idea on how the whole process of creating an airport for Aerofly FS 2 works, we have provided the airport 'Kingman' with all required source files. Before creating your airport, the process of exporting via export plugins and then converting using the Aerofly FS 2 Content Converter should be tested. But before we export our Kingman airport we will briefly describe what the scenery definition file does, and we will summarize the different scenery mesh classes that our Aerofly FS 2 engine supports.+
  
-===== Scenery Definition File (.tsc) ===== +The Aerofly FS 2 Flight Simulator Software Development Kit (SDK) consists of several different programs and libraries that are required by external developers to create additional content for Aerofly FS 2
-The .tsc is a simple text file that defines the type of scenery object, its 3d model origin on the globe, elevation and use of auto height, its name as short and long version, description text and specific to airportsICAO code identifier, parking positions, runway endpoints and threshold points, runway width and its approach light system, tower view position and more. We will address some of these features later on in this workshop.+This SDK includes: 
 +  * Export plugins for 3D Studio Max, Maxon Cinema 4D and AC3D Version 8 
 +  * Installer for the Aerofly FS 2 Content Converter used to create 3D scenery objects   
 +  * Installer for the Aerofly FS 2 Aircraft Converter for creating your own airplane 
 +  * GeoConvert tool to bring your own aerial images into Aerofly FS 2 
 +  * The 'external_dll' folder:\\ Example Microsoft Visual Studio 2017 project for creating a Windows DLL for reading simulation data and sending back control inputs.
  
-Changing the .tsc file can be done in two different ways: +===== Export Plugins For 3D Studio MaxCinema 4D and AC3D =====
-  *Manually editing the .tsc file with a UNICODE capable text editor.   +
-  *Using the convenient export options of the exporter plugins in both 3D Studio Max and Cinema 4D to generate the file.  +
  
-===== Scenery Object Classes Overview ===== +The SDK provides export plugins for 3D Studio Max, Maxon Cinema 4D and AC3D Version 8. Those plugins export the 3D objects from the modeling software into the intermediate .tgi file format. 
-The Aerofly FS 2 engine supports the following scenery classesA more detailed description will be given further down. +The structure of the intermediate .tgi files generated by the export plugins is independent of the chosen modeling software and specific export plugin. This ensures that there is only one input file format for the final converter to the Aerofly runtime-engine. This converter can be subject to change for future Aerofly versions and can optimize the already exported 3D models without the need to reopen the modeling software.
-  *ground (runways, taxiways, aprons)   +
-  *decals (runway and taxiway lines)   +
-  *objects (buildings and static vehicles)   +
-  *alpha to coverage (billboard trees, vegetation)  +
  
-===== Exporting an Airport ===== +**Installation**\\ 
-Go ahead and open the airport 3D model file in 3D Studio Max or Cinema 4D, whichever is preferred. Then the runway, decals, objects and alpha-to-coverage (atc) object have to be exported one after the other. When one of these is changed in the futureonly the affected objects will need to be exported again. Running the Content Converter will update the results afterward. +Installing the export plugins should simply be a case of following the usual plugin-installation-procedures for your modeling softwarecopying the plugins into the respective plugin-folder of the target modeling software.\\ 
-To export the ground mesh follow these steps: +  In 3D Studio Max select Customize > Configure System Paths > 3rd party plugins and add a file path reference to the 3D Studio Max export plugin file\\ 'ipacs-3dsmax-2016-to-tgi.dle' distributed with the SDK. As an alternative you may copy the files 'ipacs-3dsmax-2016-to-tgi.dle' and 'ipacs-3dsmax-2016-to-tgi.dllinto the plugin folder of 3D Studio Max.\\ 
-  Select the object 'kigm_kingman_rwy'.\\    +  * For Maxon Cinema 4D copy the file 'ipacs-c4d-r17-to-tgi.cdl64' to the user plugin folder, by default, this is located at '%APPDATA%/Roaming/MAXON/CINEMA 4D R17_xxxxxxxx/plugins'\\ 
-  In 3D Studio Max select 'Export selected' and choose 'IPACS TGI/TSC Exporter' as a file type. In Cinema 4D use the menu option 'IPACS Scenery TGI Export' to export the selected object as '.tgi'.\\    +  * For AC3D copy the file 'ipacs-ac3d-tgi.dle' to the plugin folder of AC3D, by default this is at 'C:\Program Files (x86)\AC3Dxxx\plugins\' 
-  - In the save-file-dialog browse to the folder 'kigm_kingman' where the 'kigm_kingman.max .c4dproject file currently opened is stored, if not already in the right directory.\\    +
-  - Edit the filename to 'kigm_kingman_rwy.tgi'.\\    +
-  - Finally, click save to start the export process.\\    +
-  - In 3D Studio Max pick 'Scenery' in the pop-up dialog and set the scale to 10000.  +
  
-To export the runway markings and taxiway lines (decals 3D objects) repeat the same process but this time select the object 'kigm_kingman_decal' and all subobjects and export them as 'kigm_kingman_decal.tgi'.+===== Aerofly FS Content Converter =====
  
-Next, the remaining objects like housesstatic vehicles and so on are exported by selecting the 'kigm_kingman_obj' and all its subobjects. Save the .tgi as 'kigm_kingman_obj.tgi'.+The Aerofly FS Content Converter can do several operations to generate files compatible with the Aerofly FS Flight Simulator:\\ 
 +  - Converts intermediate .tgi 3D models and textures in .bmp.png and .tif file format to the final Aerofly FS Flight Simulator files for scenery objects and other content (not aircraft).\\
  
-Follow the same pattern to export the alpha to coverage %%'_%%atcobjects of the scene.+**Installation**\\ 
 +For the installation of the Aerofly FS 2 Content Converter simply start the setup program 'aerofly_fs_2_content_converter_x64_installer.exe(or similar). Follow the steps of the installation dialog.
  
-Finally the airport description file (.tsc) has to be created. Select all helper objects in 3D Studio Max or null-objects in Cinema 4D and export them into the same project folder as before by using the file extension .tsc or the export option 'IPACS Scenery TSC Export'. Name the .tsc file identically to the project folder name, for example 'kigm_kingman.tsc' for the Kingman example airport.+===== Aerofly FS Aircraft Converter =====
  
-You now have all required intermediate files to start the conversion to Aerofly FS 2 using the Aerofly FS 2 Content Converter.+The Aerofly FS Aircraft Converter is an executable that serves the following functions:
  
-===== Notes using the Content Converter ===== +  Converts intermediate .tgi 3D models and textures in .bmp, .png and .tif file format to the final Aerofly FS Flight Simulator aircraft format.\\ 
-Before the Aerofly FS 2 Content Converter can be started, several conditions have to be met. Otherwise the Content Converter throws an error and does not proceed. +  - Converts .wav sound files to .tsb sound files for the Aerofly FS engine
-  *The input and output folders have to be set to valid file paths that fit the specific folder structure of your machine. To configure these paths edit the 'content_converter_config.tmc' text file in the project folder with a UNICODE capable text editor.   +
-  *All files referenced by the 3D model file have to be in the input folder.   +
-  *They have to be 'flat' in the input folder, meaning that they can't be in a sub-folder. If a texture is not found in the same folder as the exported .tgi files, the Content Converter will interrupt the conversion process.   +
-  *Files that don't belong to the project, especially unused images can cause the Content Converter to fail. If an areal image was used as a positioning guidance it must not be contained in the same folder as the 3D model. Such files can be put into a sub-directory or somewhere else.   +
-  *All 3D models referenced in the airport .tsc file must have been exported as .tgi files beforehand. For the Kingman airport those are 'kigm_kingman_rwy.tgi''kigm_kingman_obj.tgi', 'kigm_kingman_decal.tgi' and 'kigm_kingman_atc.tgi'.   +
-  *The .tsc file has to be contained within the project folder  +
-  *The Content Converter only updates the output files if the intermediate files are newer than the already converted output files   +
  
-===== Starting the converter ===== +**Installation**\\ 
-When the above conditions are met the Aerofly FS 2 Content Converter can be executed. +For the installation of the Aerofly FS 2 Aircraft Converter simply start the setup program 'aerofly_fs_2_aircraft_converter_x64_installer_YYYY-MM-DD.exe' (or similar). Follow the steps of the installation dialog.
- +
-Within a project folder right click on the file 'content_converter_config.tmc' and select the context menu entry 'Run with Aerofly FS 2 Content Converter'. The Content Converter will then try to convert all intermediate 3D model files (.tgi) and textures in .bmp, .png and .tif   format within the current (input) folder.\\ The converted files will be saved in the output directory defined in the .tmc configuration file. Usually, this is the folder 'Aerofly FS 2/scenery/places' in the current Windows user Documents folder. Writing the files into these directories automatically installs the scenery or aircraft for the Aerofly FS 2 Flight Simulator.\\ \\ The converter can also be started by a batch file with the scenery configuration file as a parameter for the Aerofly FS 2 Content Converter executable. An example batch file 'convert_kingman.bat' is provided for the sample airport Kingman, but the file should be edited (right click, edit) before the first execution to confirm the file paths within the batch file are set correctly. +
- +
-===== Coordinate System ===== +
-The entire airport is modeled in a local coordinate system whose origin is moved to the longitude and latitude or web-mercator coordinates defined in the .tsc file when the airport is loaded in the simulator. +
- +
-The x-axis of the modeling coordinate system points towards east; the y-axis is geographic north and the z-direction is defined up from the earth's geographic center towards the sky. Z is zero at airport elevation if 'auto height' is selected and it is zero at sea level if 'auto height' is not selected. +
- +
-===== Elevation and Auto-Height ===== +
-There are two different approaches to defining the aiport's elevation: +
-'auto height' and manual (auto height off). +
- +
-  *Auto height 'on' is used for more than 99% of the airports and is the preferred option for several reasons. It uses Aerofly's elevation data to transform the runway mesh and building positions to their final elevation. This has the major advantage that the entire airport ground can be modeled flat in 2 dimensions. This is much simpler and faster to create and it still features sloped runways in the engine. Objects like buildings will automatically be set to the correct ground level.   +
-  *When using the manual mode the entire ground mesh, runway and objects have to be modeled at the correct elevation above sea level.   +
- +
-===== Model Scaling ===== +
-Scenery objects have to be scaled to fit web-mercator units. Close to the location defined in the .tsc file one web-mercator unit still equals one modeling unit but further away from the equator objects theoretically need to be bigger. For most airports sizes the effect is minimal and they can be modelled at a 1:1 scale with very little length error at the furthest point away from the .tsc reference point. +
- +
-===== Scenery Object Classes in Detail ===== +
-We already briefly introduced the different object classes available in the Aerofly FS 2 engine. Now we will look closer into the individual properties of the ground mesh, decals, static objects and alpha-to-coverage objects. +
- +
-==== Ground ==== +
-=== Runways, taxiways, apron === +
-Usually, the ground mesh is one large joined mesh object that includes the runways, taxiways, aprons and surrounding area and is identified in Cinema 4D with the suffix %%'__%%runway' (note the double underscore) and exported as '_rwy.tgi'. Having multiple ground mesh objects is possible but can create visual issues when they are close together and is therfore not recommended. +
- +
-A ground mesh can have different materials assigned that divide the mesh into several material selections. All material selections for the ground mesh must end with %%'__%%ground' in their name e.g. 'taxiways%%__%%ground'. Polygons in the ground mesh with no materials assigned to them will be treated as the surrounding area and the Aerofly engine will assign the default satellite textures. +
- +
-Seen from above the ground mesh object can have any shape. Experience shows that a rounded island shape creates the best looking results. Using the vertex-color alpha channel in 3D Studio Max or the vertex-weight in Cinema 4D ground textures can be blended into the areal images linearly. Assigning vertex-weight (vertex-color alpha component) of 100% will use only the assigned material, smooth out the terrain elevation data and remove all auto-places trees. 0% will result in a usage of only areal images. This means a vertex-color or vertex weight has to be assigned in order to see any custom textures. +
- +
-As the auto height feature changes the height per vertex, a smoother surface can be achieved by creating a denser mesh. +
- +
-=== Ground materials === +
-The materials for the ground mesh must have at least one UV-color texture assigned. Multiple UV-color maps are possible to reduce visual patterns created by the texture tiling. The default Aerofly FS 2 airports use two different UV-color textures with a 40m tiling color texture and 1200m variation 'dirt' texture. Other texture assignments by the modeling software have no effect on the exported '_rwy.tgi' file. Instead, the shader will search for any files that have the same name but end with _bump or _specular and use them for the ground material in the rendering engine. +
- +
-Summary: +
-  *_color texture is a mandatory RGB, 8bit per color channel color map for the diffuse shader color.   +
-  *_bump texture is an optional gray 8bit RGB height map for optical surface height variations which will be converted to a .tsn normal map by the Content Converter.   +
-  *_specular is optionally used by the shader to create to create a soft gloss effect. It can have an alpha channel in addition to the three 8bit RGB color channels but doesn't have to.   +
-  *_specular_alpha is an optional 8bit RGB texture that overwrites the specular map's alpha channel with its calculated RGB brightness and controls the width of the specular reflection spot. The Aerofly FS 2 Content Converter will merge the _specular_alpha texture into a single _specular texture file.     +
- +
-==== Decals ==== +
-=== Runway markings, taxiway lines === +
-As decals we understand lines and markings on the ground that are usually painted onto the surface in the real world and require a higher level of detail than the ground itself. In the Aerofly FS 2 engine decals are rendered with a dynamic height offset over ground mesh to prevent z-fighting of the decals and the surface blow. The decal objects themselves must have a priority suffix at the end of their name, e.g. %%'__%%priority0'. The priority ranges from 0 to 9 with %%'__%%priority9' being the highest priority rendered on top of all other. Usually only %%'__%%priority0' and %%'__%%priority1' are needed because rarely more than two lines intersect at the same point. All decals are exported as one intermediate file with the ending %%'_%%decal.tgi'+
- +
-A decal object consists of several flat polygons and can have multiple materials assigned to it. Like the ground mesh, the elevation of decals is adjusted per vertex by the engine if the auto-height feature is selected. For very high curvature in taxiways or runways due to large changes in elevation, the decals should be cut along the edges of the ground mesh polygons below to follow the curved terrain better. +
- +
-=== Decal materials === +
-Materials for the decals and markings must have a UV color map. The texture must have the extension _color and use three 8bit RGB color channels. Optionally an 8bit alpha channel can be used. +
- +
-==== Objects ==== +
-=== Buildings, vehicles === +
-Houses, static vehicles and so on are created as individual polygon objects that also can have multiple materials assigned to them. When auto height is enabled, the Aerofly engine will offset the origin of each of these objects by the elevation information at that their origin. Because the terrain could be sloped it is recommended to have the base of the houses at an elevation slightly below zero in the modeling software to prevent floating above the ground. All objects are exported together as one %%'_%%obj.tgi' file. +
- +
-=== Object materials === +
-One of two combinations are possible for materials used for objects:\\  +
-  - _color (mandatory), _reflection (opt.) and _light (opt.)\\    +
-  - _color (mandatory), _specular (opt.), _specular_alpha (opt.) and _light (opt.)   +
-The mandatory diffuse color texture must end with _color and have the three 8bit RGB colors and an optional 8bit alpha channel for transparent windows as an example. +
- +
-Reflection textures are 8bit RGB-textures and must end with _reflection. Bright colors create higher reflectivity. +
- +
-Specular maps are used for non-reflective but shiny objects like metal surfaces. They are identified by the suffix _specular. The three 8bit RGB components describe the reflectivity of each of the colors and an optional 8bit alpha channel changes the specular spot size. Optionally an 8bit RGB _specular_alpha texture can be used to overwrite the alpha channel of the output _specular texture. +
- +
-Light maps with the suffix _light can be used for light emitting things like windows at night. The three 8bit RGB colors are available. +
- +
-==== Alpha-to-coverage ==== +
-=== Vegetation and others === +
-Billboard trees or flat grass planes that consist of only very few intersecting polygons fall into this category. The Aerofly FS 2 engine uses different techniques to render their transparency quicker which makes this category the best choice for large sets of partly transparent objects that are not very important. +
- +
-=== Object materials === +
-The mandatory diffuse color texture must end with _color and usually is a single texture with three 8bit color and an 8bit alpha component. +
- +
-===== Guidelines for creating or porting own scenery objects ===== +
-  - Create a new project folder where all textures and the 3D model will be stored.\\ The Aerofly convention for naming airports is icao_airport_name e.g. 'ksfo_san_francisco_int' and for cities its 'san_francisco_city' as an example.\\ The names must be in English letters, all lowercase and underscores instead of spaces. Spaces or umlauts mustn't be used to assure cross-platform compatibility.     +
-  - Start 3D Studio Max or Cinema 4D and insert a background reference image that covers scenery region sufficiently. Save the project with the same name as the newly created project folder.     +
-  - Paste all textures into the project folder and rename them following the same naming rules as above. Refresh the texture assignments in the modeling software if necessary.\\    +
-  - Scale the entire scene to 1:1 by using ground reference points on the background image that are easy to identify. Vast scenery projects should probably be split into multiple regions if they are not using web-mercator coordinates to avoid wrong scaling at great distances.\\    +
-  - Copy the dummy- or null-objects from our example airport and adjust the names, ICAO identifier, etc. or copy the .tsc of the example airport to the project folder and set the fields manually.\\    +
-  - Decide on an airport reference point on the background image and write its coordinates (lon. lat. or web-mercator) into the dummy- or null-object for the airport location or into the .tsc file manually.\\    +
-  - Create one ground object that is one joined mesh.   +
- +
-  *3D Studio Max specific: The materials for ground objects should follow the following naming conventions: %%__%%airport%%__%%runway, %%__%%airport%%__%%apron, %%__%%airport%%__%%outside   +
-  *Cinema 4D specific: All material selections assigned to the ground objects must have the %%'__%%ground' suffix in their name. The name of the ground object must end with %%'__%%runway'.\\    +
- +
-  - Continue with decals, add the suffix 'decal%%__%%priority0' to their names for now, adjust the priority by renaming individual lines later. Group all decals together so that they can easily be selected for exporting them all at once.\\    +
-  - Use helper objects to set the coordinates of all runway endpoints and their threshold points. The threshold points will affect the positioning of the selected approach lighting system.   +
- +
-+
-===== Introduction ===== +
-This section gives a brief overview of how Aerofly FS 2 simulates an aircraft, the units and coordinates systems and the different file types that are used by Aerofly FS 2 and the Aircraft Converter+
- +
-==== Simulation ==== +
-Aerofly FS 2 uses an object-based approach to simulate an aircraft for maximum flexibility. This means that each aircraft is defined in terms of many objects (also called (function) blocks or elements in commercial general purpose simulation packages), instead of a fixed set of variables that every aircraft must use. In addition to very general objects that can be used for any type of simulation, there are many objects specialized for flight simulation like aerodynamics forces, engines and propellers, avionics objects and many more. The designer of the aircraft is free to add any number of objects and connections to an aircraft by adding it to the dynamics section of the aircraft's .tmd file. +
- +
-Please refer to the 'Aircraft Definition' section of this document for further information. +
- +
-==== Units and Coordinate Systems ==== +
-Aerofly FS 2 uses the international system of units (SI) exclusively. This means that all lengths and dimensions are meters, masses are in kilograms, forces are in Newtons, power values are in Watts, speeds are in meters per second. +
-Any rotation uses the positive mathematical direction (anti-clockwise), and all angles are measured in radians (1 rad = 180/p degrees = 57.3°). +
-Fractions are used instead of percentages (20% would be written as 0.2). +
-The coordinate system the entire aircraft is defined in is set in the 3D model of the aircraft. The origin is usually placed close to the center of gravity but does not have to be. The direction of flight defines the x-axis of the aircraft's coordinate system. +
-The y-axis points towards the left of the aircraft, the z-axis points straight up. One unit in the coordinate system represents a real world length of one meter. The 3D model may use a scale factor which is removed when the aircraft is exported. +
- +
-==== File Types ==== +
-An aircraft in Aerofly FS 2 is defined by the files contained in one folder. The folder's name is the internal aircraft name. In the following, we will use xxxx for this internal name. There are no sub-folders except for the repaints. Aerofly FS 2 and the Aircraft Converter use the following files: +
- +
-| Intermediate folder | Aerofly FS 2 aircraft folder | Description | +
-|   |   |   | +
-| xxxx.tgi |   | Binary 3D model file created by the export plugins for 3D Studio Max or Cinema 4D. | +
-|   | xxxx.tmb | Binary 3D model that contains information like the vertex positions, texture coordinates, and material/texture assignments. Generated by the converter from the .tgi file. | +
-| xxxx.tmc | xxxx.tmc | Description file of the aircraft that contains the text shown in the aircraft menu together with the preview image. Also contains parameters to change the initialization of the aircraft: the orientation how the aircraft is placed on the runway, the maximum and minimum airspeed, landing speed and maximum altitude. | +
-| xxxx.tmd | xxxx.tmd | Defines camera positions, the complete physics definition of the aircraft including engine and aerodynamic parameters, logic circuits, electrical systems, fuel systems and so on, as well as the graphics animation and sound definition. | +
-| xxxx_takeoff.tmd xxxx_clean.tmd xxxx_landing.tmd | xxxx_takeoff.tmd xxxx_clean.tmd xxxx_landing.tmd | Used to set certain dynamics parameters that should be different from the standard values in the 'xxxx.tmd' for different aircraft configurations. When placed on the runway the takeoff configuration is set. Landing configuration is set when an approach location is selected, clean configuration otherwise. | +
-| controls.tmd |   | Defines positions and sizes where interaction with the mouse or VR controllers is possible. | +
-| .bmp .tif .png |   | Source texture files. Must be square power-of-two bitmaps. BMPs 24 bit RGB only. TIF and PNG RGB or RGBA. Bump maps can use 16 / 48 bit to avoid terracing. | +
-|   | .ttx | Converted and compressed texture files | +
-| preview_xxxx.png |   | Preview file rendered by the converter | +
-|   | preview.ttx | Compressed preview texture for aircraft menu | +
-| repaint.tmr | repaint.tmr | Repaint or livery description file defining the repaint's name in the user interface. | +
-| .wav |   | Source sound file. Must be PCM 22050 Hz mono | +
-|   | .tsb | Converted sound files that are created from .wav files by the converter tool. | +
-| model.tmc |   | Configuration file for aircraft conversion. Used to set non-default values for texture sizes, bump map strength and texture parameters if necessary. | +
- +
-The '.tgi', '.tmc' and '.tmd' files must have the same name as the folder / must use the aircraft's internal name, in our case 'xxxx.tgi', 'xxxx.tmc' and 'xxxx.tmd'+
- +
-==== Limitations ==== +
-The Aircraft Converter that comes with this SDK is the same tool we use to convert aircraft. There are no limitations on objects or functions you can use to create your aircraft. +
- +
-However, the SDK doesn't support custom display programming yet. While you can re-use all existing displays, there is no way to get your display code into the simulator. This will be addressed in future versions of the SDK.   +
- +
-===== Creating an Aircraft for Aerofly FS 2 ===== +
- +
-==== Overview ==== +
- +
-This overview shows the necessary steps to get an aircraft model from a 3D design software like 3D Studio Max or Cinema4D into Aerofly FS 2. The steps are described in more detail later in this chapter. +
- +
-Steps 1. to 6. have already been done for the example aircraft that comes with this SDK so that you can start with step 7. right away and use the example aircraft as a reference for your projects.   +
- +
-  - Create a new folder using lowercase letters a-z, digits 0-9 and the underscore only (like c172, b747, f4u, mustang, …). This folder will be referred to as the intermediate folder. The name of this folder will be the internal name of the aircraft (the name displayed in the aircraft menu can be set later) and determines the names of several files. In the following, we will choose the name to be xxxx.   +
-  - Copy and/or export all necessary source texture and sound files to the intermediate folder. The files must be in a format supported by the Aircraft Converter (.bmp / .tif / .png / .wav).   +
-  - Prepare the 3D model as described below.   +
-  - Export the 3d model to the intermediate folder using the filename xxxx (this creates the 'xxxx.tgi' file) as described further down.   +
-  - Create the aircraft definition and configuration files. You can create these files from scratch using the section 'Aircraft Definition' in this document as a reference, or you can copy and modify the files from an existing aircraft. If you just want to get the 3d model into the simulator to check the graphics,  simply copy the 'template.tmc' and 'template.tmd' files from the SDK's 'template' folder and rename them to 'xxxx.tmc' and 'xxxx.tmd' respectively. Change the name and description in the .tmc file and replace the entry 'Box' in the GeometryList parameter at the end of the .tmd file by the names of all your geometries.   +
-  - Add the 'model.tmc' file. For the beginning, you can copy the 'model.tmc' from the SDK's 'template' folder and fine tune texture sizes later.   +
-  - Run the aircraft converter. Right click on the 'xxxx' intermediate folder and choose Aerofly FS 2 Aircraft Converter from the context menu and start the conversion.   +
-  - 8.Your new aircraft is available in Aerofly FS 2 now. Test and refine the dynamics, graphics and sounds as desired.   +
- +
-==== Preparing the 3D Model ==== +
-To achieve an error free export some preparation is needed to be done first. For the DR400 example aircraft all these steps have already been completed so that this plane can be used as a reference. +
- +
-=== Single 3D Model === +
-Aerofly FS 2 works with just one 3D for an entire aircraft; there is no need to provide an external and internal model separately. The Aerofly FS 2 engine is optimized to draw only those objects that are in the view of the camera. +
- +
-=== Generic Modeling Units === +
-The units of the aircraft model should be set to 'Generic Units'+
- +
-=== Alignment and coordinate system === +
-The aircraft should be aligned to the x-axis as the forward flight direction, the positive y-axis towards the left and the positive z-axis pointing upwardsThe origin of the model coordinate system should be placed close to the center of gravity. +
- +
-Animated objects should have their axis and rotation pivots set to a plausible location. Hinged objects should have their local origin in their hinge location. The pivots and axes set in 3D Studio Max will be exported to the log files which will be used later on to animate the objects in the graphics section of the .tmd file. +
- +
-Animated objects should be positioned in the following neutral positions before export: +
-  *control surfaces neutral, flaps up   +
-  *gear down and compressed as if the aircraft would stay on the ground   +
-  *gear doors closed to assure perfect alignment when the gear is retracted in flight   +
-  *cabin doors and windows closed   +
-  *knobs and switches that are not planned to be animated should be in an in-flight position   +
-  *switches and knobs that will be animated are best exported in their off state   +
-  *instrument needles point to zero or neutral depending on the instrument   +
-  *magnetic compass points towards 090 degrees (East). This is needed because the x-axis of the global coordinate system of the Aerofly FS 2 points towards the East as well.   +
- +
-=== Individual objects === +
-All animated objects like the control surfaces (rudder, aileron, elevator) and trim rudders, switches and knobs, gear parts and so on have to be individual objects in the 3D model so that they can be animated independently from each other. The Aerofly FS 2 rendering engine is optimized to merge objects in the same GeometryList when the aircraft is loaded, so there is no real benefit combining objects. Experience has shown that development time can be reduced if all switches and knobs are available as individual objects right away and the model doesn't need to be changed every time a developer decides to animate a certain switch. +
- +
-Display screens have to be separate objects so you can set the display brightness independently of the background lighting later. +
- +
-=== Object naming conventions === +
-3D objects will be referenced by their name for display and animations, so it is essential that each object has a unique name. Objects should be named logically, and the name must not contain spaces or special characters (it is recommended to use A-Z, a-z, 0-9 only). While the object names have no meaning to the simulation, it is easier for everyone working on the project to use standardized names. We use the 'UpperCamelCase' convention, i.e. we capitalize the first letter of each word to get short but readable object names. +
- +
-Advisable names are e.g.:\\ Fuselage, LeftWing, LeftAileron, LeftFlapInner, LeftSlat1, LeftSpoiler1, LeftSpoiler1LinkUpper, LeftStabilizer, LeftElevator, VerticalStabilizer, Rudder, LeftGearUpper, LeftGearLower, LeftFrontWheel, LeftPropeller, LeftBlade1, LeftBlade2, VirtualCockpitStatic, SwitchBatteryMaster, MCDUPushButtonA, CanopyFrame, CanopyGlass, COM1FrequencyKnobSmall, NAV1FrequencySwap, LeftEngineFan, LeftEngineExhaust, LeftEngineRevererFlap0, PrimaryFlightDisplayPilot, NavigationDisplayCopilot,... +
- +
-=== Materials === +
-Materials are defined by the set of textures they use and by tags or hints that describe the intended usage. A simple material just needs a diffuse texture, but Aerofly FS 2 also supports ambient, specular, bump/normal, reflection, (self-)luminance and illumination textures to define the material parameters at each texel. Use the 3D software's standard material and the following texture slots: +
-  *Diffuse: diffuse color. An optional grayscale '_alpha' texture can be provided to add transparency information (black is fully transparent).   +
-  *Ambient: ambient color. This is a separate grayscale RGB map.    +
-  *Bump: bump map if texture name ends with '_bump', normal map if name ends with '_normal'. The bump maps of a model will be converted to normal maps by the aircraft converter.   +
-  *Specular: specular highlight color and strength. Color and strength are given by RGB values of the texture, specular highlight width is controlled by the alpha channel    +
-  *Reflection: strength of sharp reflection. Red color channel controls the strength of the environment reflection. Do not use the green and blue channels as they are reserved for other purposes.   +
-  *Self-Illumination: color luminance map.   +
-  *Filter Color: illumination. RGB channels encode the illumination strength/lightmap for the interaction of the diffuse color with three independent light sources. (This slot is used in 3D Studio Max only. In most cases, we don't assign these textures explicitly but use the suffix '_illumination' and let the converter add the texture to the material.      +
- +
-We use the suffixes '_color', '_ambient', '_bump', ... to distinguish the different textures that make up one material. These suffixes are not required but allow the aircraft converter to automatically add textures to a material if they have the same base name, and the 3D modeling software doesn't support a particular texture slot. +
- +
-=== Textures === +
-All textures must be square power-of-two images with a pixel depth of 24-bit RGB .bmp, 24/32-bit .png or .tif files. Bump maps can be 16-bit grayscale textures. There is no support for .psd files in the converter, the different layers for diffuse, ambient, .. have to be exported to the intermediate folder first. You can keep a .psd file assigned to a texture slot in the 3D software if it has the name as the bitmap file except for the suffix. +
- +
-It is recommended to create all textures at a resolution of 4096x4096 or even 8192x8192 pixels, and use the appropriate converter setting to reduce the actual size used in the simulator. The smallest size recommended is 32x32 pixels, the maximum supported texture resolution by the engine is currently 4096x4096px. The total compressed texture amount should be in the range of 150 MB to ensure compatibility with all platforms. The final texture resolution can be set in the 'model.tmc' file. +
- +
-=== Refresh Texture assignments === +
-If necessary, refresh the texture assignments in the 3D modeling software to use the exported textures in the intermediate folder. Again, you can keep a .psd file assigned to a texture slot in the 3D software if it has the name as the bitmap file except for the suffix. The converter ignores the texture suffix, so you can change from .bmp to .tif without changing or exporting the 3D model again. +
- +
-=== Material Tags or Hints === +
-Each material can define tags or shader hints to support the selection of the best shader when the aircraft is loaded. Shader hints can be combined to describe the material properties as precise as possible. Currently, the following shader hints are supported: +
- +
-| exterior | everything that is not in the cockpit/cabin, outer faces of windows and canopy | +
-| interior | everything that is in the cockpit and cabin, inside of windows and canopy | +
-| default |   | +
-| standard |   | +
-| glass |   | +
-| canopy |   | +
-| window |   | +
-| instrument |   | +
-| darken |   | +
- +
-The hint can be added to a material in 3D Studio Max as follows: +
- +
-  - Select an object that uses the selected material   +
-  - Open 'Animations' -> 'Parameter Editor'   +
-  - Select 'Add to Type' -> 'Selected Object's Material'   +
-  - Select         'Parameter Type' -> 'String' and\\ 'UI Type' -> 'EditText'   +
-  - Enter 'shader' in the 'Name' textbox   +
-  - Click the 'Add' button  {{data:image:*;base64,iVBORw0KGgoAAAANSUhEUgAAAO8AAAFjCAIAAABaF8v5AAAAAXNSR0IArs4c6QAANadJREFUeF7tXQl8FEXW70kAuTwyiVwhSsiQ4MqVSCKR+5CQBFcRlWU5Vj8+D9zdrCCrnOKBBywsu1kX0RUXF1n0Y1nWI4HIGQSDyQpyiCTMEJAERMiESyCEJN+rqu6enpmepKene6Zn5hX5DT3Vr169969:v35d011tuu+++0wm09BhwwcOyWjXrj2HBREIWgRMkyf:6te:e+4y1yJoXUDDEQEeAdNXX3972XQD4oEIhAACpu17rCHgBrqACAACpsK9NgQCEQgNBEyF3xwNDU:QC0TAtAPZjCwIFQRMX+wrDxVf0I9wR8C0c:+xcMcA:Q8VBEy7Dhz35MvI12dzEfDTCsc1cFxEBEe26Abdaogw8TX19QXT5ocKIMby46eLP5WVlldXX9TWrKioGxOT4tvc2AbUXr78U+WJ45cvXdK2i9Zt28bG3d66NenCD14w4z2yeeTCOe:NnFnf0HC9ru7qmTNX27S5Ult78erViydPXb6x7YWaGkt09KHvvjt38817T58GWn+WPV5bOFAbIPDlF3v69Epo1z5aWzR+PF31zX7bPQNTQO13B:d1sySYo2O07cJedfaI1XZHj97+8YJn85cHv5d1A9j81uOP17Vte+ny5ZYREXE33HDjLbfc3KpVq+bN42N4z:9UWPjBxg0R8V2t1dV5o3+pLRyoDRDY8vmXo7MH2C9c1hYN802tP8vbOXzkPaB2:56S:v0HnP:pirZd3Nym1a5dO3ulpPrHC2Y8ySTkS2Tk9TZtqr7:PjMx8f4ePc7V1KzduPEP69c:smRJ72efvWPy5B7PPbfyiy:qO3a6fOgQCfJY9EHA8wip789JJ3wh39l:2v3xankjXbzgIFUliSopjv9I5ir8sT1kHy:INpk0+18Gmd2HKmQPynv:8MKCB8d0aNeuR7t20:7xj4s:nO6f3q:rTTf2vbNHA6Qc168fKi::7PjxCqu1eVLSkY0bty58S6LnwNqZK77hv3ca+exzg2:V9sjXUJvUVK7P5D89:DOpcti7oR3Yz236y5K9vfzuyOaCXffdN0iP2PzppztGZPQnsXnvf:sPGHD+0lVZTHds3lyy60tPcKf2v2fQiBGye29u23LXzp29kvvCXt6L8z:RKzB69cWXhgbOVFS4fc:uYlaR0i:tnkFDviws3PPVV0LN3fcMHkzkSDtozjU08Ndy5lvaiF4w4WZ0j1yJMJ2PjOx:6635+:adP3Uq55e::OXAgd9VVKz89NMLJlOb1q1TExMLfv7zyatWfVZW1qJPH2c9oLNTxozngcRnti1c+s:Ndz5zr1:4fOD:ns9vT:tVXBymyjUh4JBocOvInIUjqYCKLhTb4iZIYibHRZIrby0LvZCnQY6enWkX8jQAKi94aZqnvufOXzp05L3y9BHO+wxA1qNAZTaxALyOaOAagMr:+uhtpuShcU9C1AUqS2v6DxkikJQNBxWFxhIvWPMIT6cW2Fd14UJUmzYHv:uu1my+r2:fdTt3vvDXv07Kyoq66aa3t2x57IV5M1etWpCZWXfu3NUtW5z18GcSqGw:LCv51J7vzmh4DmtElaNfxafMxpu471XRhXrf6bDxLGBc0OZP5DFNMRrposljyJM9JD+I4B0nTpDxoKkB+WRpAstvIu5K7wckrqfl:9a89fXur+CTfYV62MsEQVIoLMcg2vmjUVDXjFXJlupLl7q2a3fo0qXa2tobW7VK6tChxY03:uWTT74:d67u9OnIDh1he9aDD7Y:evTUz37mrIf6yI56hj:d:vafv:3HHtpVyuMLf9kLznIfzsjnUri9ezpOXvwrTm5v+0dT9q389BTHJT:6l+E:vrE4vxJad8ya88ywDkTPj5::aRHZy3F9Jy9OPjDj3b2wuThnI9PvtPdXdzp3dyfvs9RUAQahYces+zrwxhNT2z+XdXqRpy6Ihb:oARqcnBJ6aZIVHgVMrmdn9arElg10zMUhk0Q8j8ohDEv3OQK2p3M7zSikrIg0mSBHEI9P2ID0AT4GDhsG3Hxk:NQ1H7wJlfBZV1cHG+Mn:qbvPekDhg6lKTaL5aSQVuSfMH4SAnvONEymc5WVp6qrzdevH:0JMh6uh8WyevZspmP:sWOPvzj:YG3tN99+27VPn2Pr1pmedz0q2KnszJb8vZ3u+n174kePCW8umgCt9615Nn:7vb2HtoPtyh86zFu0hD4lILd34+d3:X7Jm7cefP+5v::2hywqSbY:PzQc2LlvzaI9fZ5:cxroOfj+0q0dpi15nHs2v8Pzs6hml70:9hju3J1jcCo3LvrtRvI19VdLmNpPOzz25rQeYPzrf+C4TP6cDBGl93jXLnhJOHKWLnxjO9+1xCkfuUdiUGREZKSsmi+2bCn50nNSe889A4cTn90LhDWWahCKkCAHRb4LadtZC15hX1+fO0+s99QQNLLoSyRZKBV6hOyCkpOyFPKFhoZBw4aDHNB32V:4Lp7+7bxUoPLwYTQpoZeCksLnGhIv2E6PbK6vrb3SokVlVVXXrl1LPv54xzffDOrTBxocr6w8fvr0oJSUSfc:MH3WLFOLFg1Xrzbr2tUlbzZxlRsW:mYDo8gfMwi7oBxc+fv3SuhWbCbzjovt07sDf3jL7c38VUY7sL1ncgp3sj2TJNt5P5419eBO:8BV7uV74bi7kh2ZIIidkd0r6Y5Hh9iQOWv2MDHVhoadfj6pJ+mq3YjslPw8fuIH5Hmb2QbrInUkleTaZ4y865MDZyC1cnZKOgiqtj3GPo4DKov5pbtuOE17YjPjhjhkHs:OzkqlJG7aFf5QcehmOQa5hiN9s1hLKyJMX2yGw7Jo6eK5NTU1TDNsT5uxACyEq0yR:fwphVxJknZMUko8z7G59tqFkycPHT:eOy7u:ebNH37mmUn33ffzQYNAx:Fjx17529++OHAgMjq6V9eux8rL6y9edGEz8DVr1pxhPItptz8W:PE97rGly+7kTm9d:C47YHmX4P:G97LTFm+5sE18Sn1s6WOSs:k+qVije8XhkGqW4CNEFUGhKOZkCXwR4g+5KHEEPCeQmx56TxI0MjlPAziL2myN3tDrgadQTf54wrGtJijt6VrQU0Oq3wkFiNbkN2W+H:Ifm+DYsWlL8a4vF7723LVr16Dy+dmLYBs24BO2QcVgmDZhhx8:PjyL3dksM2fHnxGu1NTdcMObq:7xi4EDe8bGXoiMzF2x4t6nnhr5+OOPv:ba9k8:baipmTN58vmLF607djT89BNrJRQeLKe6H0+djO3UDqrOfPNNJT:uDFNSGt9LMXNV3r5DR66kYMuP8v02vrcRU6Fh5cdbDhKJM1s+gzyfyooGSCyhXeynkqYzBQVfp:WGOO1kqjMq3n+DAYskqYb8H+yFSxpPhbT10JBkGgKeJM+g6YzsX5MHokfj2GUaTyZiCc1nyHf6yfcJvRbv2gWHCvMC6Hv3wP7wyb5CffHOXUQP:cfnLmJuBBUOVhDNHmNzw5XLlyoqTl28+MqyZbv:+tfC4uIv9u9vuHTJ1LJl:aVLfVJSelksXGTkmHHjIszm6zYbGUZHkR78Qm2vrOyNLy585mMuNu2uWN4MR4xofK9wKc9Hc55RyRNmP7D4tRef:Yx20fepP05K7t337fdem5pHt932yllFVFXmQROqo9N9L84YkTxhStr0FVO:Jl8fuIv7r3AaYTa7dzH1WdK0c:bsuT1Z4HYEvibJ0ISAgKp84Ewb0N:l4kyqDvY2EtUFmrG4TI9XuXLPkMGNdAF7PTV0xB7hJEDyDOHyDS4IWYCF::oNHCB2cffAAUNHjgSDxBrYC:Ec0nwqzuMrWip6wcfp:ceqZN1Imzzm1k6dzpw+DXG3c7NmQ4cOva1TJ0hWCKFbtTp24sS+gwf37NgBVCZnw4aGvbv2+zp02N4NgbxPto0dM+z85Vptsbm5dfN167dm:3woqN2:B3496X:pynVtu2jbqtmunbt6pZBfT5gXF66IXvAJlIOUhNZ8HiwcgWzCg8+0TcAwcYeQNN:UyuEFU+Ux04BU+LLdDld4dZWV358:::7ata:88Y8vzpoFofqlRYveX716z:btEW3bcjU1DVeu1FdXe38WxRbKEICTMZnV0PKPn:pl:bPZXK2LNNEQ0wthXlgM3HwKQUI2yyPoVQh:tmBXViz4s7OH8JXPYVjiIi0Hv6:2dFDe:VBGzQ8:mNq0geysoa6u4cIFSDNgg6uvb7gMaxa04Nj2tWsHjvyg7ZGN2hgCWzd92Tele8eO0qtpDbA5derH:+45POxectfR4W8PdLNYosxRGuiVqKi2Vx+xWrvf2dM:XvCZxrffn9PWDdSmIQKXLl7eXbT3yhX5myhUd9SqVct+6cltb2wNGq5dq7EdKa2l8wkaluYtWiR0S2rRgixu4QcveDYfOnFeQx9QFSIQQARMhyqQzQHEH7vWEgHTdxUXtNSHuhCBwCEgw+Y5OY8Gzh7sGRFQg8CruSuhmcY3zqoxBNsgAhohgGzWCEhUYwAEkM0GGAQ0QSMEmsibi4qKNOoI1SAC2iPQs2fPtvCDNMexvLlpNqenp2tvBWpEBLRA4NKlS1I2Y6ahBaiowxgIIJuNMQ5ohRYIIJu1QBF1GAMBNXmz2Ww2hvFoRVggYLfbPfnpkjerZHNZWVlYAIlOBhqBxMRE5WzGTCPQw4X9a4cAslk7LBvXFD8xN3divL96C89+kM3ejjuwct06KS+lNJWlrFc89krYW9tDXR7Z7OUIx:dP40pKuLT+ysNs+Qc5OR:g22W8BFqNOLLZO9QImYs:KjoZK9A5fuK0MbGxYxaTeD3YsT1zJuQVE2euW7du5mBHuO08DuI6KTS2ywR1qbZ4IsDEnc4F3hkcVtLIZq+Gm5J5V3lhUYlA5:IPlq6vrFw:Y+zYnA8KHdsfVXCxYzoXjR079o1CsYfYThVLoWbsjPXcmGmyObRU220zF3deR8ShQXGavLxXxoe+sFI2w+1HrLhAwscO+l:oo8WTmeMkdPbodeX6jxxEplKVcCCQ:8t3FVfGdr6tiavGuE5cag7DdzGE:6bkQxp9We65e6yUzdAS7leC4qKCxQ5WQhpP4hyQmSUV69blpMKSTV7kzqqwoSFfKJIYr0pZUDdi3IPfShr3wgs2gyJ2v1K4FkLmklyBXblisgErSEoCp4IgShUVkcAtCJMaR0JCtZWfOBk7ZtzgcAXb2W8g3oEDB5rEwjs2N6kulAVImiFJHsRko:yDdSUkJSBXduL2uM4yUPBxfd3itOIZEGpJktyJ5RLTOp8ky6wTEovavn9jhrAbrwOVEUvpL9uQuIh3RsN9GvjLtjJ4UcpXBMRftqUMFJXi:c2+4ovtDYsAZhqGHRo0zGsEVGYaXveDDRABtQiwe+iUZBpq2KzWKmyHCKhHQAmbMdNQjy+2NBoCyGajjQjaox4BZLN67LCl0RBANhttRNAe9Qggm9Vjhy2NhgCy2WgjgvaoRwDZrB47bGk0BJDNRhsRtEc9AoFgc3T6pEnp0VKb3WvUe4QtwxcB:dgMDM3JcWGtcpyb5jfV71xU96bcLpQ0MgK6sTk60cLZbJwl0SkIawhFVdGqXFJWl1RXl6ymm6uK5N+yrGGvqMrICOjFZkJm626rPcpBZzGYTkjl3xvqXsNDFZ2elRoVlTqBBXdHFM5OagJLIioIJWVD6yTIarKzhSjO73IoFKI5qcHIbmSiKrJN:V1HssvuC0uXAzuyuPxVRTHZOWn21SRmArcyuILcvFKOsJPstPdzrZGEVkGBtCHUTTAXUxWS4pCkldCPxUpk2MZu86QJFiu1QDDBauElREuKqohqQYyqwZcKKKKPzkLSlfCV3HXkE5s9LrvvxEVKZ46nN0kF2N58LosS3lEjTRREDVKyytLZhc0CnTnG6rOSfsmuNHuB1ZIhnBzIYNjYIYbFaAgAfb1lsy6ZBqQZLE:IyclI4CTJhj8AK7XaEixJSZYEm9UTSYU8mybbSGV:jIp:+tCFzUBmiHh8KbAROlfZxRSacB2cc69x8TjKHMOLpfaj+TJp6JmiYuvS3SXmjAxzyW5XMgPDq61lpWAJr9DRIebN:qGbzr3owmYLJ6ESxEpC59K8AjsL11lmezXxyr1G4mtVUbEtIYNcBZ7NWw3sJA0npNoLlETSqjJrNdBWmN:gzxJwnuAKSDJTKiokSvHaT2eG+VO9PnmzPz1w74umx+zCT7jixKm7wA6Jmt6NkjersV27NiRlLkb6agdo8GjSJdMIrPuleZIrO:iNBX9TCex4+LH3EGSzH9HDroyFALLZWOOB1viCALLZF:SwrbEQQDYbazzQGl8QQDb7gh62NRYCusw34y07xhpkA1vTvXv3qCj+lkoXM3G+2cDjhqa5IeD+qgYfQdIxNh8:fvzq1as+2ofNQxWBli1bjh49ura2NjhiM1I5VImoiV960EPHq8AGLIhAowhoclRIlSCbkXEBQyAU2Xx02b33LjuqIaQKFSoUa9Iw0HPLM583KeYHAa088oOptItgYnM9K7ZlIyHPp2XkMhtf6fQfeNUgV+9WB6o8qHAWlVEosUI0Q65fpV1Qv3hjGrjUbl09OcA6fuZzcf:nz3gEQqKzUTw8GqkYSUVw6y4UTGxmR:i0vv+5v:gsLR:eUWqVOezr6RgoiQcKJd3EbG+NclgBZszpO+otG3Qp02+XJzdseLKLV8Z0SbijEfuhl9TJkw8thg5Jsb21+FBqqid5hQ56MlJhcyXe+UUm+NjMcXdY4hk2w5csGU5HdHlmDCuZy8kYE6fk6qFu83ReMmb6ZtvyX88tKZmbxpq5KpGoTZtbwhTyZfObc7kFbz7JWwFmfLWA+:hzG+m37E3eFGoJ640Z5a7fozHxS:KJcpkW:Ok0Met+2iH08ObcO+6:n:nrkBe7bMRBkM5cvpwYSJCAbVDnpkFA0i9cVNKJMHpO:4sNg4nNF2gZPP4fv7j11ltzPmFfL1z4JOfub5+y0bJ11L+n5h74qaauruYn9:oLB3IzflG7gona5qfGjF84LyVl3lab7cPxB12VkOZzLUx467wUolAoB749mDLqnhjx+4ULMR0tJd8ehH5LDt6+kLWomwuWpM4X2roZ2ZgxVPWB3KlC:yss3x4Ue6PetRv:lGXunz45kLvo4LxH72H+XogZ:yHv2wqyk1Q04iCxdu63gykSPGJuGoR6iasB3gRzXSgLNaJNwcRmlnYNevkIKcM3JUCZs62+:Ohhbs0U8iUhYdgre:YcOVoPWUa9TH35ls8a5kwZ5JxiswTbXQnUJDuEiUJJcflKOoTgCP8lZw6OI3JxgzOTqSVQvDaGdRR3eyLxCzwEl1+WWk17HzT8F2umDHsl8enJ0CFvT:l7DzEcpqzhDh8tF3uXdZBY6+agmwY3T3XPfZvsAAZfZC1sS+WDic1OZ6JBL5eVvTvuw02FcH5PnrMJ3gXLl5cH8ZmGp3qpGvFM2riw8wn3tvjEvfnbjkn0HCsvTU64Xcxw+HyAMFxIe7wyhmkmHpaVjdjUDcrcQkdvvDGDpsxJ5saNGCR0cWzlIyPysxgQm2AXS428cVBGg+EyDQYDe:MvfLokJ8HEZnYUjpu3nT8cy4+WJSfEQQzb++q7Qh2LR+RqzL0+blAm5ya510pimIwwqM3fRuNb+bb8vU6TJAP+Zzb36nMrWfCrr98+795XucxBcaxfWkiTccMHqDOGV7FyHulhwEuHC2Ynl:GRVlRIbJ605vBLji6g92RihLPBDZwnByXW8ojJaDDunMbhw4fdo3jwsXlU2RNwnxQpGRtGvT4xrn7A:I2zxLru49+HoEkCk3t9fdzE1x2SLxQCISY+9chHoG78+7e5KoHmb3d7LYP0M9PaLZkmEmKJm7h646gNdCeUJxrePrQaDIF+97IWxLSN8xnTVBhzjDSMu73BoYz4yRdeocQaVgO+8PZKDG7EQakeTxrc+3JnkJFqNGezjncdbdq0SXNzdVf4xUs93u6a:8Gk23TvCTvgpk+fHjR3HRkpCiixZceLPXr0mHrkuQUTOisRRxmfEdD8gMb7NMQrk:7z9kF5f0KckolUlNEAgWBic2xsrM9HLyoIWQSAHpqzWce8WfMnCzR3HhUGHAFt82a92AwTBQFHCg0ICgQ0fPZEFzYHBYhopMERwKdcDT5AaJ6+COg4p6Gv4agdEXBDANmMpAgdBAyRN:dJHRQ6iKInXiLwTckO2RYq8majsHnezN95CQKKhwICr7zx59Bk89NPPx0K44M+KENg9uzZnTt31pbNxsqbr2MJGwSUcd47KWOx2TvbURoRcEZAGzZf8q2oGRRTsxtuaGZS01KujbbaFFoVkE4V2hacYtqwGXxv60Nxgg7GGBbc40vzSNjn1ag7NQct3lBetiOx0nWva09edhacfDG21ZqxWUs3G67XwJp7UGq55sBG+Fpz3YuFccTmRIU3LWU78ti70A30INnUEgfU5SUCWrL51o63n6q63OQfiCk1sq6+zmSKcATFyOZOQZuqIXWNB2CJBImnNzSLhCyleXPhFEDjPy2yHTVjKY2pWYtmJhqOG+uMamhGrCRaJdFbbKTOBaWAhbmclmzef:C7Fe8sW7vm:c:z1u3alr+t4OOCz:716b:XrPtw1T9XvbdyxduwF:5ATCHopmbNIuEBPwfXmnO1LGhfra0T+EfqnAOwNAUgLKqrrbnOgSrCyMg6iPOg0RTRcI1XFNncwWepUqeOuIbr1:gY3ES0NzUz1fMGOk4StfWkf0JvZS4oBAjFnBHQks2aYSvQ8QbKPT7HMEVGctevMxI7QqnpukBsR70002DNCRUjmrcEfUBJKthQV8c2IPxzESYpDO4deeVYg8RI8biC4yXCZFLuglc9orCAgMZs3rl7z+bC3Z8VFP77080fb9j2WcGOjVt2bdpetO2L4h1f:hf2wl:T4It0bDwMNlyvBY66BFYP2h0hvunuNZIgWQccjjTEe3LEGxc0MiuU1WjJ5o7Rrf:+3rudOrUjf7HtE7t16dixXZub2pqaRV6puVZ1:lKXLrEgAGJqEIVoStMFaam:XsMuFJtSCNkEJCRwvofk11k2MiISNAvZDB+23ToSzgZOQbypTh1nAAjKpFufXGi6N5TQks2AJjB1:gsv1VyDB2Tqaq:XNYuMGJKekjW8:0P3DZ:66Ni4DtEqqUxZxtIFVsSIXFcLHHWeenaaOgOqw4UXcBkybSYrzPrxijjIqp0nTOQ7gv6v1zV9ySlNeK5Db7SXFiayuIsXLiAxVSGgMZslhK65VnOtxQ0toObp3z33wEMTRo1+6H+eyBFnPDzObLjPiIk1koS49ro4bVcHV4YOQjpNz7FzPBHgrxrFTckFGknFWRdNdARHg1zWIDXY2XgmT4yoreUvAJS4oGogsREgoD2bRUJfvnoVLnzg64nvv99a8LHLn:KZDRwnREAhArqwWST0+XMX2XzBydNne:0uX:yDrwrt00XM259jdDEClWqPgF5sZpb2uDMhkl64NYfpNUlx+aq9W6gxLBHQl80ipDAZUfjSAPHPdW4iLKFHpzVHQEc29+pxx4MPTTpx4gQY3UwoLy58i21q7gkqRAR0ZPOZU8dhPm7OrJmUzZH3jx0Pfy8+PxU+MTYj8:RAQEc2OyXKzSLh5g34g9gMn81dfgXRwzPUGX4I+InNYqbx59efx0wj:GjmJ4:9wWZIoIdl3O:yB5V+chG7CRsE:MFmlkC7:EFl2ICMjvoJAX+w2U+uYDdhj4BmbIaVaVSXsB8FBEAbBLRhMzzhmu5D0cYV1BL2CGjD5rCHEQEwBAIGWoeuoqLCEJCgEf5CQPOVuwzEZn9hiP0YCAFt16EzCpsNBDCa4l8EQm2NUP+ih70FBwIq1m:Gq8DgGFq0UgkCyGYlKKFMcCCAbA6OcUIrlSCAbFaCEsoEBwLI5uAYJ7RSCQI+zdAp6QBlEAHVCMDdEmJbmOKAN7fDPRRSbbAKPqt5NXclfKpns2oTsSEioAIBJWzGTEMFsNjEoAggmw06MGiWCgSQzSpAwyYGRQDZbNCBQbNUIIBsVgEaNjEoAshmgw4MmqUCgUCwOTp90qT0aKmxLjXuAi6e+S4gKmxSlQpQsUmAENCPzUCTnBwX1ipzMjrRwtnNWTnSIqdIJKIbI901ZCcp67uRY8x7BdjCzwjoxmZCKJuNsyQ6BWFF3sWYOavVzlWXrM4Vy6qiKre2VUWr5KpBzlXD6hJzRo4aQiuyF4WMgoBebCZktu622qMcdKbBmpQJqVHMffcaUptkSbDbZVcrd5HnQ3J0elZqVFTqBMeZwE0D8B4InUbTG1GJy4nDtd5ZradWRhlHtIMgoH7lWfil0R1C4Yd1Sub8qtIYW0ZaYnQRBNak7Amp9oLcVaWUT1mEtW41VB9Q0WbN48xphKCpfBcQp1fZ+7lqYDurivJLLFlcvhinRQ1S+6rscGTFcEn9JpiLc3PBCmpGelk+EwJjnOtXFUnUJmXnuO5lpwpZEJBZWiEgvU9DiU71bAbtHjvjyQxMs:J05szm6pJ8QiKhRLvVSMnMpZNMQ5pIRKe7avDgH09m0OBeoFMuISMnJ4PfZYvh7GRTpp5zpDae93oLt5IhQRmGgIpIoUumAWRmp36gTQInSTaaHijCcfk0o+m2TMKDBrHaKR3PcxxfnuqZ1sb3KrUN5fRFQBc2A5ltBcIFXIGN0Jme6NkVIeE6:Odew:Zx1jL3Cz5P8iI4UeYYnsyyGmhWU1xURTpN7ec+v+Gpnqn1tFffoUHtXiMQ+Zvps1wabd3wH7EGVmyJi4uDr7DRvn37Fi3I+:9YEXe59zm0d8S2rRVX2I6qiJghPVtbt249FffgmMy777477urJq62uHNn:zb5zLjUVrfsM7WbfvRuato7rnZaaBtJ8SYxw13CE69aNO7K:4sqVipqYzIzMu0GoMvpuOQ3RttV:20peWVF1xBrRb8yDQ5haaMAr+WafS72T2q:+tb3GqRXs9RpqbOAdAi4Ec2cgqLt27Rrj5PDMB+BT:f3NLg+Ie2epB2m42rJYcyWnf6+1+q7B6y6xgT4IBPsKBPT6TXql6DVMvmvwuktsYBwEdMmb1bpXmudTXIZufdeg1nZsZwAEDMVmA+CBJgQzAsjmYB49tN0ZAWQzMiJ0EEA2h85YoifIZuRA6CCg43wzrNwROjj55smBAwfEOzoQFhFLKSzuAKuYb9aXzS4r0:hGiSBuLR0YcXmeIPZHI9Mb:wFOBZsx09BoZFCNARBANhtgENAEjRBANmsEJKoxAAJhwOYmHxE3wDB4YUKTD5k3KSB2plzSC:sCKRoybFb:iHgg4Zft2:EMInuOEp9XVzpEocJmHx4RVwqVP+XweXVVaIcIm314RFwVbP5vhM+rK8A8NNjMP4BVaqVPbRG3+QfCyeNcq0uq5WsUwBMoEf6pSjHRcHeHWUaeV6+mgZx:IFj2Bm:yJBg8EsY:l04xsVqyxOWm3OulamPY0+xurQIFTWP9hgSbxacJRTrTB8J3uz0i7lRjxOEQbJJmGsBTd3c8GN:Y0wrCk+f8kiaOJyn559hd61kXnloZEr1QYLMPj4gbckzUGxXuz6uHAJsJmVU+Iq6eN:5tKft8u2iC:59XJ0m8sBCap23:IsR682l1mEAY7NYnSTMk685AskGWV1qVV2DJoWslVdtsNG8udasxhPnyRkjXeaLL5Hg0vqqo2JYD692klazO5+gCU0yjQwPJWugqfqV5q82TYJUTtjQOVPPrPLnVQ24jUQuLnjm18rD2nxHQxLuO:DEK:rnrKOieV8e7jvxBvuDsA59X50Igbw5O7mlvNT6vjmzWnlWoMWAIYGwOGPTYseYI6HsVCI:KaG5xkCqUPkmFsIiD2MiSwSqePdGRzUFKOzTbIAioYDNmGgYZOzRDAwSQzRqAiCoMggCy2SADgWZogACyWQMQUYVBEEA2G2Qg0AwNEEA2awAiqjAIAshmgwwEmqEBAshmDUBEFQZBwKdfTwziA5oRqghIfymEH1N69uzpsrKhuKjfq7krAQT1bA5VBNEvYyKghM2YaRhz7NAqNQggm9Wghm2MiQCy2ZjjglapQQDZrAY1bGNMBJDNxhwXtEoNAshmNahhG2MigGw25rigVWoQ0GW+eVJOThRvDCxClOfTe+CbdArW2sni8pUuWQLSE1IF45husvgKXT0Fi5ERCNx8s7goYAGXIbeWduBQqypaxZa75JfWhE2kcuCGQ+OeI38zfZaLyq0b:iPWVFRUxMXFwVfYaN++fYsWLZT037t33JH9FVdAtCoiZkjs1a+OcOmTHn9wyN2kJEZY91e0Tp:0UFybuAcfzIw5J7+3d1zvzMwhd8ecs8ZkkaZEDgIoxFZeEdVzJTr9oVEJUbG9mN4rfZz2OvfiFH5bx:XuxvFGUqW9a6h+WBY2JyvmXJuhWbwBYLGHrpkxQ9sQM5SggjI+ISDLwGvXrjFODs98AD7Vr0MHkd:dOpdHcKPT0xKqrbvJOsOrcpk4sKVfUhFURaWSZYHzaKXMXrN9dW5eTHZORhZs5MJGWnp0qb0fXUuYpC4kwUgvW1UECxhb+EwDVDvvhXXWpL14BJMuumZJ4kpLObJgUHHeWbMlihoA:AatGdlJpVaLW9fu2YksJj6NYXg3buSJbllg1OfNjSwi5sibxZxUmq:S9fyypMmup71iTsw2oJVT0kuTcqmMy97V9jRPKbVrts2v4cZl51isuXlnpbk47EqzF1gtGdJ8W::rgfDmMQlxRUXe3nWkz5yGmDeznJSQ1WKFEOtY6V4yVo3vdRlUpxeCuF1fNr63MX7A0qIJlqRGl3JTrzzsiekvAPRhs7v11dYyemImiy17u1eUJ8sYp:ZLcmvPFjD2tFcZlKW7S8wZGWbnBflpamSBZKmsVK5rsnSxsS5ylfkaslJ+YTPkpfZUWDgYSpbZTldTlpTG9zqJwkrDwDn23jHhzWMk6U2AuknpZ2X2Kh+4qjJrtXDMQSvxzSMZXAE5w8h1rVw5SvoFAV3yZr9YrnUnND3mZ569m8PW2hLURxEwTN4chONBJzPwR5QgHDmJyX7JNIIBIqfVj2FCEX9TCYZRc7ER2RyEg4Yme0AA2YzUCB0EkM2hM5boCbIZORA6CCCbQ2cs0RNd5pvx5hsklkIEunfvHhUl8+swzjcrBBDFjIIArF2krSk6xubjx49fvXpVW3NRW8gg0LJly9GjR9fW1gZHbEYqhwzz9HBED3roeBXYgAURaBQBzQ8SZDMyLmAIIJsDBj12rDkCwcTmelZsy0ZCnk:LyGU2vobf4kU8Vkr242boIRBMbGaH8rS+:7m:+CwtH95RaiVV9Q0cBx:OpcuTGzY82UXzwx8VGhiB4GMzx91hiWeIDl+yZHhDg235r+eWlMxNi4nJnD49M3P58ukxMTHTN9uWw7aNftIaUqZvpu2gkq+ANsttBh4eNM0FAXHcpBuijOZs1nG+eefOnWDu9rkJU9Zw3PgVtgVDeOuPr3x4Brd47aO3w8awV5LYHla5mJsh1kDLv1q2ru3yt4QpnFQGGmoOAyrUDYGEhASpbpvNJn6dOnVq0Mw3szxv0MtHSBm+CbxKmLONVUK2wW8kz5kySNimlQ1ize1dk6Gm:OhhN5nQyyBD2CMYfJG+sC31VPMjyF8zdINeLit7d9yHmwrJaYZ4QU834oa47VZzzLqXF3aRx7N60CBQVlYG4wqfLhYHE5vZUThu3nb+cCw:WpacEEfjL7fXWs424HJQCM10261mwPBxe:O3UWnnvSEczkLQtcOHD7t7FXxsHlX2BNwnRUrGhlGvTyRsjpv41CMfQe34FVYSdoXkg4Vg15r6AfPf7vZaBtPw2l5RPgRHPOxc0pzNOl4Fbtq0SWNzv3ipx9ZhB+cP1FgtqgsQAtOnTw+yq0DfA86OF3vwZWrDsnn9fVeIGgyCgOYHkb+uAn24Yuk:b59Q5vX3QQ82NRoCwcTm2NhYg8QANMOACAA9NGezjnmz5k8WaO48Kgw4AtrmzXqxGWYgAo4UGhAUCGj47IkubA4KENFIgyOAqyoafIDQPH0R0HFOQ1:DUTsi4IYAshlJEToIIJtDZyzRE2QzciB0EPBpTiN0YEBPDImAt29YU89mQ7qPRoUsAoF7z3bIQoqOGRoBzJsNPTxonFcIIJu9gguFDY0AstnQw4PGeYUAstkruFDY0Aggmw09PGicVwggm72CC4UNjYAubJ40KT1a9BreWQ1f4ZN:13t2Er:LUSW8Bh7e:O5oZ2jY0DhDIqALm2U8hXf9ri6pri5ZnZtXyu+GqlxS+Hqyia8DNiRJgsYof7FZKSAkYAvROykbgnUShPbsbJfA7gjrGM2VIhsOcup:2ZZ9jRr7YR1Si3wxzALzsjjyVdxwwdWlHjhssZIIzjZ2mydNsFhXU3VQk8EV5FotvATHObfFN7uFGGX9d5+Gy4MuUhx9YjPP4jyOsfqscDCQDoDOafYCqyUjVfKKOVuBI3sJsdEMa3dC40mqUqstwZKUZEmwWYUU23VUSf4tFjERD+uxR+cBAV3yZnuUJVGYnIhOtETZ7ZAmKC+lu0vMGRnmkt2uZAaGV1vLSu32qNR+wsyIcrUoGfII6MLmvNVWywR+2o0kvRA9IcGdkBoVlTpBvMZrBNqqMms10FY4BEgrWiBpJvlzad5qoLswrYfXgSFPUsUO+nQVKE3SFfeoQJCmx+zCz+U6T0FjFAkRBEIjb+ZIylxMqYwFEfAGAV0yDW8MkJEtzZNMUsBvLPibio+Ahk1zI7I5bMBHRzVGANmsMaCoLoAIIJsDCD52rTECyGaNAUV1AUQA2RxA8LFrjRHQZb4Z7:7ReJRCVx2s863h+s0Ym0OXKYb3TPO3L+gYm48fP3716lXDQ4oGBgaBli1bjh49Wts3RegYm5HKgaFJkPSqBz10ZLPR3ueF9hgNAc2PO2Sz0YY4jOwJLTYfXXbvvcuOhtHwoatOCAQTm9kbF0fCBIyjjFxmk76Ikbwjvt62bCSr5jfgP6c28MWlmcd3OYqqDPi2RzTJDYFgYjM7DLnUBcVnxbLhyS6So7OesrnLkxtYNfvaAN+pfPGCVKGtczPPEY7XgCEwOBAIQjYDQ12KbXlmDC1pc0tgL3zNXG6D:349t6RkblpMDPlGDwQojqZiK37:5umiJNkFjdw1BMeghrCVbJxdiuiv5mzWcb55586dYO7DCQl7RKtT5m1d2+VvCVO4FbYFQzju+MqHZ3CLF3Mz4HPto7ezr7DB5J2+bp+bsHkEbeSoB4Fh1l:bHj8mNnPRoDlaqNB7BBISEqSNbDab+HXq1KlBM9:M0qSG5Dmbjwjlo8lx5UcPJ8+ZMojPoSC9IDL0U7rh+hVacWumADBQhr2yZ8+RoyARN3nRnMNTEoZ9lrlocpy8BkxWA44AjL1IX9iW2uP9odFEC91n6JyyBdf8geUSYkbhnFo4ZRoclzxnU5lYXh5ET1e3xSdS:5zOXSF84g5S12DYYJDg08X+YGIzOwrJhZ20xN2euDd:WzmpKt+Wv5fspRd:NDRze610Dx+aHW1Jq1ff3e4SaLbP+1:uncPvJL763Eq+mYuGgAcmNIBH4PDhw+5YBCGb976WATdK8WX8+8cGzH+7G6uaae2WTMMqCa4kc5j41CMfPdG9OwixtIOvJ18GzN84qwz2sUIkCl:o:kTD2:MHwC6i8IVCdw3IJWMjoDmbdbwK3LRpk+bmosJQQmD69OlBdhVo7OiA1gUSAc2PTN2vAoP0wgXN9gMCwcTm2NjYQB742LexEQB6aM5mHfNmzZ8s0Nx5VBhwBLTNm:ViM0w8BBwpNCAoENDwuUBd2BwUIKKRBkcgRFZVNDjKaJ5hEdBxTsOwPqNhoYoAsjlURzYc:UI2h+Ooh6rPyOZQHdlw9Cu45zTiu1pGZY4+d+58OA5d8Pt8yy03b9zwWflRq6wrKuY0gpvNf:rz8htatWgXfXPwj2w4evBj1fkLFy8::+xvkM0EAWBzXOdbn3jiiXDkQvD7:M4771iPndKQzbrkzfBWbMd7z+DdavgStOBnXlB4oAubuWqb3ZKVLrwAM2BARKeNG5fmhRXeygfMMexYHgF92MzZdxfbXd63CjHa6YWVJGZnZ9O67CR+ZzZ7Q6tDVIjqpAYjPJK4CQR0YjMHL1wt4DJ4dlIb4FVp:KuxCwSiR5nt+bm5BbaEjCyObaRBQE:KnmAuZqLwTlgDhHgkUbAgoBubgc:wumzCTqGIETcjgTObST17+:BZO:8aYtgggdls5hL49w6TlxmbY:hDQdFrAyFZeIoVIcdIyOArMiw07osCooRY9XBKFDPWRQvNQNKIHqYDi0ER0JHNEI3zrZZ+bI0A8p5teOM2i7glhLWNlOoSJkgLvKRbcYlOG5FybvNyUjafiyLUjEqJsrHv5fF3kRy6qvgj+p1IpPQFcloyHhbarN1DDYOaqK+ZzNry+BE08+b1FMhPjSo2EAV1RUBPNpPsophLTeUDnvAe+OhEC18j61mV3R7lknKzTFpB3lxlP8fFj6AR1FpAmVe957+MgNXV:CEkxt0R8dwt5uho8y2iDB+YzbcQJbRAtGa337rI6DomqFwtAvqymabPdKUm4LU9dQK9DMwy04zCYynNW11i5lMN6VSfEhetBSSi2hIIE+WyAqDyw:Hla1ncZZFYrlTvYSK0YDxWgrwhZHRhs9ObseGt2TTjhf9ZWZWXRwTEF2jLboiJBsuWySWkgrw5Oi2D5AXAaaDqLWbZU0B1uY2+kD46IZ7sh3AeFZ9As3tJDc1BsAQbArqwOWAgVNm5lIdZihBfvrnYPfZWFX99jpcYEXWO7rcWQAJNGzlq1u65hU81HFeTAXMKO1aMQNDfp4G:bCsea8MJBscv24aDDQ0KDwSCPjbjPXTBS1S8h85p7NLS0ic89r:BO5xo+eq:v1tcXCSLQ9jd34xsCGEEVLA5tOY0Qnhs0TUFCCCbFYCEIkGCALI5SAYKzVSAALJZAUgoEiQI+DRDFyQ+opnBikB6erpoOlwUwqqzbdu2lTpz6dIlVvNq7kr4VM:mYEUI7Q5OBJSwGTON4BxbtFoOAWQz8iJ0EEA2h85YoifIZuRA6CCAbA6dsURPvJvTOHDgAEKGCAQKAc1m6MABmNsLlBvYLyLAENBmvhnRRAQMiIDLryeYNxtwjNAklQggm1UCh80MiACy2YCDgiapRADZrBI4bGZABJDNBhwUNEklAkrnm6XqzbCKJxZEwF8I2O12T12pvCPUhc1lZWX+8gX7CWsEEhMTlbMZM42w5kqIOY9sDrEBDWt3wo:N8RNz1:Eld2I8GXyo4bckVJCtbJwqLk3YV0d3Mwc7N5cYss69f4esqFaFSWHG7XBj8+CZi9OKZ4ylJfdk59s8Dnf5Bzk5H5T7zgbQM2N9ZeX6GWPfKHQ+WByGgCVjFjdGaNZQK5N8d8qoGsKNzTAOJ0:wJC18gxAsfuK0MbGxYxavW5c7cyZE04kzIXLPHCxGVr6GhHM+uioNqo2M+eBxY7j1S8WjpfCNGeu5tP4kkBMj+FMH7c7VPHI2cYn31FRqtsNIh0jTR4lRuem9XeHG5sKiktQcBzFpxFvKYufYnI8quNgxnYsgbEviKF8DobwkdSykJhDdx5zMpcEdgq73iNPcJq5TZfEuaeQvP3Eylp4pYjtVLGVnDjAU+OxsHmnsMGDG+k5EhLRiZgtGkkOAt7HRE5A6643bSimb4YlZVlxcEVJQ8r9xvZRYVvgGHfWidEmwleyuXP+RNCGAPWLN9xWEu4SIbjIaei6yHI47rlMcTeydisSA8l3FlanphM4uRsKxwcFBS5jOTkDBXmS55+6UUjZDS7hXGoqLCpaBshJMkBFSQ:SjVPCq3NY51it5WWESiSGxkOwjHK343nfNvAZ2zHo6ZDXrxm+KGPeavMPeCzaD6S73SvvNGc06gnRSnFqQEoid5ZUUCJkuRBRbOXM0vn9arJiiu2ou:Gg9N2Yam1KBQpIHzjn14Aanp4pxWmoe6WXMOHoUki5KimRCb:zEmUQ3cBqSIbkAr8RTI8kA8ZQ89+Qdm43koCpb4NzciaTNpMCcArsOK:9gHU2mc8d1VqC08A0yA8E0jHGO03AxV5zGdlH1M+AkD8cPiJGrTKcZOjLV4ZDN4XLH8jMo9HqUFKhjVa7mkUtG5gRJ4GXziPITnGCi4KQCz4JfROl9GtKVZuA+Dfxlm4XUdelFzjNvvjECqD+NW6rJzKBvhhintfjLNq51pMugAIf5AuEzFC6xdEEpIErDLNPQAmN+VoRcZmnNZfx9xLcBUplp+NYptkYEvECA3UOnJNNQw2YvDEFRREAjBJSw+f8B6q25iIai1FUAAAAASUVORK5CYII=}}\\    +
- +
-  * The material now has a 'Custom Attribute' where you can enter the desired tags.\\ {{data:image:*;base64,iVBORw0KGgoAAAANSUhEUgAAAV0AAABOCAIAAAAM31JhAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAdySURBVHhe7ZxRUtw6EEXfQlhw9sBCWAZ:YQmpV1A1fwl:RN23u9WSDJnxjMFG93wwcqslG8f3YN6r5L+HJe7u7mxECPm+lKQH9:f3Vn14oBcImRcYAdALhBABRgD0AiFEgBHASi:8JIQcHAuzAyOA9V74QQg5LPQCIaSHXiCfwuNb4dEOyN6hFw7LSZLmnKz4MTcIp26RN8l7Lu6P4pmnPrONbAy9cEg0PlUGRRFnieH61OHEhdgl7:nB:mee+vorJLeAXjgiS+lZyqd+Go:vH4lT8uTJDwbZ6MSjvqngVM0y+2zBZnhfqPjFtRecm:oj7zJsIdkGeuGAaD76zFq00ji12QtF7dEM65x16YfMId0+aOPn6:NU3TONsRvOjSIq2mfDaPZSLNSinMO+RxT1a:PtkM24mRewoFDG2Qvyh+lYiVxJTlSQizZGxFOEomdotp:qeSr3gFpJYshti2sxHir1jF5pFuogcxq:HbIZ8EIkOsbgMi+Ubizg+8LGpFgGizETUpzG+Pn4HC9oIaOTuW1xLcZD5Rwv2GwD7fAZwAtIdAEBD1ABZ3kBY3phazQ1NRslK4gZKpjVKCJZHrLao+nSkdW8ZWFg1MVCqCmXY5zXYpwq1hXNVul2q1doyFTawHYnmwAvFCLX4gOHXtgvyJITYazE7xGKxchLy::dMZLZDEB3WMWQ9qxjwZqxUL8GmGprVly8wsLit0M2gl4ghPTQC4SQHnqBENKzlRcIIYcGWY5ciw+clV4ghHwPItfiA4deIGRqItfiA4deIGRqItfiA4deIGRqItfiA4deIGRqItfiA4deIGRqItfiA4deIGRqItfiA4deOB6:fv1vf4eArKXcQ7ub0xO5Fh849MLxsEebXIfdzemJXIsPHHrhFjy9vr29PtnBGVza34LH+omsBTfQ7ub0RK7FBw69cAvohUOBG2h3c3oi1+IDh164BV:rhWc5fLaDdzinZxrkXtALTuRafODQCyuRaBuvT5rzWnjpGtwBuYRas4v5AiXZQ2dHf+j8Bl7IPTp28ro:6VjG4M+7lT2CK7S7OT2Ra:GBQy+spDxYGv+HlzJAvOO4y7JUypx8WI:m:8knaiXvU:hCL5SAW7I16loNV6BHJrRH6zIaK:tEro5ecCLX4gOHXlgJnq0m1d0YITfsnaLpaRoE9cvogR402zNe8DxHbgVktyn1PWhx3pvx3UE9CglEcazsFLk4esGJXIsPHHrhGvQVoMtzyryVamXsaS0wVpbASe0ZL4whtITKhyUVPfoVhTJnGQ4Ww9wV62GygI3Hyk4p11awuzk9kWvxgUMvrMTzq1F++SjzMpRx:QUjV+pvDYW0SvC+Dlm16AUdBLCARdrGEtdCJDateE6ZD7Q:l2rPaIGxslPKtRXsbk5P5Fp84NALK8GzJZTg5jz72N4lDJ1tSlrR5DvDG8RFXkDEkeFUab0ANO1jbpuegralY6H2pORbcazsFLk4esGJXIsPHHrheOCxtme8gBCmKOrQgoqSVeQjtXTB1VoOdt9QSOtCA7FurOwTuTp6wYlciw8ceuF44LG2Z7zgWVUNVCS9bSl+j1DG0Me0vXwkpLkpugeAO2Cs7BFcod3N6Ylciw8ceuF44LG2Z5xcDm6g3c3piVyLDxx64XjgsbZnnFwObqDdzemJXIsPHHrheOCxJldid3N6ItfiA4deOB6:f+f:i0HWUO6h3c3piVyLDxx6gZCpiVyLDxx6gZCpiVyLDxx6gZCpiVyLDxx6gZCpiVyLDxx6gZCpiVyLDxx6gZCpiVyLD5yLvaCrCCHfh6u8UCjdhJDvR0k3jABQAf:2AiHkuwIjAHqBECLACIBeIIQIMAKgFwghAowA6AVCiAAjAHqBECLACGClF34SQg6LxbgFRgDrvfCDEHJA6AVCSA+9QAjpoReOz6P9u2PGqRYfdXgBseokA+yEAx:H6WpBey8:F9kx9MLxyQpAaGtmLyRtpWmXodTyhuYF7:NDeuE7QS8cnxRmAYfpK5Bop0NfgB:2yqmbxjuDHVS0K8qxvhzk9cOxyaXv6Utay5V2n9XGIxdBLxwfjQ0ipkhUkXHzgoVJ6xjaEv3IUWu3wuq8tWA9:VmaLpwK67G:+mOhBxPoyTtrwSp5H:Ip3NgLWFAo4+wF:YM1rERuRR9LzVVKlE0hXQnrwSzoKprZtqP2YFLiGqvaU4xnP6unbSgsXCfZGHghshygAi7zQunGAr4vfBJdbFK6lpMZ:KOiftH0L:foQH6Ko6JfrTVVbO17PXn:cRUYK2Rj4AVkuaDhFlQIRq6f5QWM6YVPoomN5ix+hi9OVXQ6V1JBhhH6oWcht6muw3e90PTgqlLJKh+fkWwMvFDo8i8+cOiFfYOEBTljXaLaTqnnikZRQ2nYQu2pOe32LHglry0seGHsKVNtSSraHPTfBdkeeoHsBhFEfk8gXwa9QL6Y:LpAK+wEeoEQ0rOtFwghBwUp7vIvPnBWeoEQcnS6RIsPHHqBkEnpEi0+cOgFQialS7T4wKEXCJmULtHiA6fWHx7+ApA5RKqNvIy1AAAAAElFTkSuQmCC}}\\  +
- +
-==== Exporting from 3D Studio Max ==== +
-If you haven't done this yet, install the export plugin as described above. Load the aircraft in 3D Studio Max and select 'Export' -> 'Export' and select the aircraft's intermediate folder. Select 'IPACS TGI Exporter %%(*%%.TGI)' and save to 'xxxx.tgi'. Select the output option 'Aircraft model' in the exporter menu and set the scale factor to +
-  *10 if the one generic unit in 3D Studio Max corresponds to 1 mm    +
-  *100 if the one generic unit in 3D Studio Max corresponds to 1 cm    +
-  *10000 if the one generic unit in 3D Studio Max corresponds to 1 m    +
- +
-{{data:image:*;base64,iVBORw0KGgoAAAANSUhEUgAAAeEAAAFICAIAAAGfPOHpAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAACXRFWHRDb21tZW50AACJKo0GAAAgAElEQVR4nO2d958URf7::Z0:YmfdBUkCuqcu97lTkdkVQUSCqygGBAQxEA3krGI8lRw9E4ciksTzPL+egroogoDkJWeQJDnut2Z6pqe6qrq6ZrqnQ83r+ejHPHpqqqtr3vPqV9dUV3VfU1lZGY8aFRUV1wRdhxwR17u6utrnemSLf:GudU1g9R45emxJUSyzxGIksSRWTBajZvRH415+laxMmTaDvFb:vDLoepNaJqpVnKxx7KEuj9J1Nb5J9x49yVvzK50+fUYW7zp16lRVVcWT4jaIp4XuidwT9R41NlW:olhpok6xsS+NT1WxKNaxYxUjjLEvvWJ8SSOPuN75RijZZk2apmqW:gXSsS9OrccS37A0+WmI6s3z3gcfnT9:3li:evXqsBGjHY5LUyfxtFR8+0o5oNd5J:yo6sS9bMwSeI+qplAsLfrxjhaB1dtREvIMiLe:oN5O8Mbqxlu1i3eVDX5WTkKm3syv5nm9hSfIeK5NfNt4q:zJCxDt9B1yUG9:Qb39BfX2F9RbgfLycq+KCqbe2f5750nUu46nyOvtuKFiydC3v6De:hLZeldUVARdh6yJZLA1qnTOJzC7043iNR05DpXOGXmlS2Kxnbv2ZC6Upa:6pS+6Ji8IUm:TF9aKA610Ean0bqOuEyZNNS9epiqXTDdWTp78s0PH+8jK0OEjZZFmrlrw6x5Veo8Z5ncmTi5NV7fq:s579u5j9GBesAwy0jzCa6r09ezS9HXhEFWagajiw4:nmm:fnTjlg4:myOThScekvLHqFT5F2lsiXmn6gmrcxkwcyarS9N8wc6cqu4t4pD1Bq0oz1wxcXsBHpFFpCf5pWjFRBY0ibXf1cfDgwfLitKq03ZnPy0umdk3HUEc6Z1BpW1BpVFoCKo1KS0ClNa60yv98pnHC4OvlUJWtVPJodCUg5KDSfhHNSlckCboaBUEkBRJRVGPN::33cF6khGwbNIpXpfKNsG5h13XOsR4ydIQxnXX7jl2W2cTJ5eFHupo5M5eP05ctDSZNmZ6ZuVsUe::DzCXC75b9QM3rLe7cuUtBx9qc+Lxz1+7UeIF0KMtuuNGI4NDhIxcuXmqGjGR78KGHU1FOb0I2:+GnFWZkU1GOZX6VAQNfoGdYZx3rbL9h:nATayPEO3fvoZVrTNw23l6+fNlIJCF+omfvzPiNIoHMTY4ePWZO66aXIcNG5BLrqqqqsrIy862dKduZuIe40nVamCXUOBgakvLwI499vnDJuXPnjJTDh48827d:6icpit1X9QDlM4mUe+6594VBQ14cPJQsy374ySyH+W2EddPWQ0akb0KQjLVAp1X3dzbST5w8aaSs+GWlke2pp:vs27ffjLi5+aVLl4ycpZyomcKFdbP1kJDYiP7tEGIg9ODzuBdD0HMjJD+5J+jmIWHG9txofslg79SRbayFF1uZV+GQFOFR6+3:NXGsPZx14xL:dZ0:bcFD:AOx9g:EOoG6b7hxcMTaPxBr:0Cs:UPbWCv2l:mJtrEOIdnF2hxTW5OEXslt6K0jOfxvjFOiZuav8L06zHpexW47S1TY2WQX0:DEOszAQ:wDsfYPxNo:EGv:QKz9A7H2D8TaPxBr:0Cs:UPbWIfnkqlJocSa7yFx0:vh5Yzo8ABdg1xArP0DsfYPxNo:EGv:QKz9IzGXNIrPMI0WiSeuYtKuP0Ty1tBRBDbtE5ZAy+85Yq4EO7sgoqRuy6KS1Yfpi+4JesZXCr5iWQQ6EgQd4RR8xbQNtDlDf9KUaZlZ0OkZ0Rs3bbbkTE6Q:m3tOjpYqfuYJ2eI1i2+lv6Iepy0eNY0XzHdA10UmzZjNj+Xlizlt5STbC1bVtAzyI1tt9Zso++kYC6HDh+mSzbyf:u:ZSrzc:UNdDpGU2fMYgJBh0k4mdl826HjfZcuXaKDbpQ8cfJUi:ALOtApQyiexgc6bQhmTI8eO2asbK3ZbsaulLoLhfHp2JfGk:XfN2w0f4lbb73t2++W5W4d0Q09K9tYbOr0WZaZ+LGMIdS9toS:TcWRI38YgW7R4g4+gvxBQD8FJLtAV1VVkXabcX2Iv2jGTGiNW5t9gTf4OEVbPZo6JTJHvXlHinPnzpFNhCE22b::QOvWd1vuEBKLtW:fMbtAl5WV0Q:TkEeQb1x7GLUcsPiD9WTIBOvAwUM333Tz2HGvbNm6zUxcsGgJSTdjR5WWCuievfteHDwscWOQQUONjxrUu854Bk+p9IY32nq0I3e3bSdsWlBuELMcCkWx+nXr1fLWkV7mzV9YiIF2VDR:TxaLq:A:QFrgI0ePy3h92qCN36AQA+0J3y:7Ycq0GT+vXMV:tPzH6hGjxox:9Y0169bzn:IVEwQ6PHe4yQFvA50zfMXErQ4CPyolDI2K6CIINAkxfS+yuL:zy3RFN48OLQi0TyDQPiFudVRZn6MXIfjZy3w:Qdy+I8GuTPcVU211VFsRViUk50lJ4Oxqzicyv5b7WomtI4Qjjj0kEDXAo30CgfYJBNonEGif0DPQfPuHTsntYpDLpoiegZYjDLRj4BSbhnYUYqADAYH2CQTaJxBon0CgfQKB9omCDrSf3Y0aBpr+Y6KeOd9oGOhwgkD7RBaBrq2tzfbusXmufJTIJdDMzZAlt0TOc+Vt4XszhD0Vnl+vkiAItN21wegq2vHCoA+nRFtF8:uObqDDQHbW4X6sX8GCVodPINA+gUD7BALtEwi0TyDQPoFA+wQC7RMItE8g0D6BQPsEAu0TCLRPINA+gUD7BALtEwi0TyDQPoFAW8hfKBBoCwi0WxRvOaJ+42FMFhIjHKzCB8sxFNUcihUolEArknfrCC05fzFP9uhhtXGPf59AoH0CgfYJBNonEGifQKB9AoH2CQTaJxBon0CgfQKB9onUgyPx+EigB4mHoVYmgaCBNuCECHQDmga6kZ2m7e6Azt8ugL5YzKzHfb:DACgoMppmruLSEswNRr7ClZwLDwlurtir4OkTpiKPYtBsNQ1UKGRN79m7b+6n81965dWhw0eNf+3NzxcuPnTosONWJ06e:Pqbb9+ZMGnkqLHDR4x+9fW3Ppk3v2bbdpU9KgYNmnaF:5oeMWps5vmWyZWdu3YnHtAdszxyXvwc0uSDopuXN6cLrP55pTBnp05V:N63bK0xCpHswlj27T9Ab3hnZSu7nP0HPm:k+bH6Z:J20pRp0HSQ+K:pkaPHMprYuWuP5cnR1ENzxZpLPiZ99569RoH0w6aTR0XmUd:rN2yid11ieQq4VNbWx85a8ieeC95ybfoxp+9:OIepdmn6Ee7QdDAEoOlRY5mHDROf5jXNbDVn7jzGwquqOpP0G5rdYPo3eS2:uZx5prRZAuXNxcYx8ETPJ5m9GMItpV5bt777ypUrg4cOP336jJFnydKv6l1b8r:vl5tbkQyk0XLw0OFDh8lyhCwHbdowikGDpl0RTNuD9Wmi6VmMQR49dpwsx44dP:LH0a++:oa30ncmTE4cCZT+Ms:upqT:WNduJPHc+fO01xqNHL5ui7:4slWr1gsXL2W1Th8M7JmkmN5j8:K:bt5SIxS095quk3zGJIHP5nknhp93bHVJgJpOtRNixRZNZyy82FwptQqXLEOHjTx::gLTcli5ajUp:7e1v5fS7ZZk+eTAYBrx3Xv0tFOekAMHDkoa3:xSs21HfjVtCNrog6uyPtST6ZCOcyq0m9Ik3JDpz85h9pnPBNaejmVazKn2tKVpUdy3:0Cy9Ov:HFkSKwOee:X1t1b+ulrgncmVZk2a1mzbvnHTlg0bN5fdcOMDnbu8O3Hy6jVrmb1v3lrz5j:eadkyLvTpp57uw:iuXcvYZPvOXb16P822xWPiDRWDlkXbozxJ7r+Pjviv6bffndS6zd2Vla1atqwgf7Zuv73F3r37P5rzSas772rXrn3nB7uQZq7Zk6DI5cuXibZIm2H02JfvadeeFpax9Hii16z3PjA1Z1p+81ua::DTin37D3z2+SLWa5MlrFm3:vjxE4KPimJbtm4z9r729:XW1khi:Y4WLf3QNODxX9ODBg:LmHRyIXKcMGlqpmWcXCQKJqd1S1OE6QG06cHYu28:0a6swRDLNFeMt+RQMfY4Z+6nJdb2TCnTsI5R1bAxaWjaJ4JoT49hGseJ:unpsxiFSTSdaY6ntWibje4DobLNmTuvft16jOiNMstvLv9u2Q:CAo8ePUbOJBlxM72NseJbb73tx+qfJTVXDBo07YpCvo7oP4pBy7rfo6ysjE7XZuRGbkDTfqIYNLeaFlI4w+5wcgshbtseUel0yxPQdAhBe9oVCFoIgaZdgaCFkCw0bXf3t0IGAQkhWVwbNxFeTXScncXP4OKzRW4ijD+a5oPGf+p5afyvxifKdy38cX1A1afLyspU+j2EIzfiOfWERELWfmo6bo2Go7LtAigpRF5OVBwH7WlXIGghBJp2BYIWQqBpVyBoIQSadgWCFkKgaVf4EDQPewwknRXyv:WSdPNTZhd2:2slhXgFNO2KfAdNvbNMpShJ15NEbTmIjz8ehHmyLVYRaNoVwQYtW1modCprADTtCgQthEDTrkDQQgg07QoELYRA065A0EIINO0KBC2EQNOuQNBCCDTtCt+CltWYOLu+YX5bLfv1oGlX+HMdkV4Rjt2VXCWRX0CBpgELghZC8qXpwb7gYYVzA5oOIfnSdG1tbVWeKQRNZ3spmx:RYbeinh45ZJqWjOFyLBea9gThoDbhWzq::DXONcrt:kdGVNbZ+XQ1h11OaDqc2P1kEZWvELQ9XBE5TRcC6PdwBYIWQqBpVyBoIQSadgWCFkKgaVcgaCEEmnYFghZCoGlXIGghBJp2BYIWQqBpVyBoIQSadgWCFkKgaVcgaCEEmnYFghZCoGlXIGghBJp2BYIWQqBpVyBoIQSadgWCFkKgaVcgaCEEmnYFghZCoGlXIGghBJp2hf9BK:cX+Rf0uTKKIYKmXRGIpv3cXRRVAU27ImyazurxLirZ3HzBoOaiQ9OuCLOmhffXU7yLpIknX9CuDnkCmnZFCDWt8swrdVz6dCCPRIKmXRE2TXtOFFVxjXMWACIFNA10A5oGugFNA92ApoFuQNNAN6BpoBvQNNANaBroBjQNdAOaBroBTQPduKaCIujKAJA7hoavgZqBTsChgVZcU5kk6GoA4A2J:4XwZqAN6OgAWgFBA62AoIFW2Aqan9lrN9FXMRsAPiAWtClK5sYL9BR2Jl1YCHO:COGtJHAAAA:JTtBxr+8wAjXLqQUUKhFzbkNnJeisbuFDbwKEBC2hcKESsaz:FEJ:fhK0hMKFSsTQyxFqgpaQLVevXv3hpxUTJk0ZMWrMqDHjps6YtXLVapUNN27a8uHHc1965bVhI0aNGvPS5Kkzvvt++alTp1W2VYkYBB1q+B+1pChWEjOWYmM9kWisFyUTY+kVI8XIXxS75eZb3p04mS:w9TffzuSkFjtV7dt:oF279oJdJN927tzl6LHjwg379BuQqpu1YsaGP634BYLWH:5HrVdSQmu6SePrk4KOlQo0HaNXzAxf::dbusBUOr15cuXSpcv83h986GFqL8WZFXOnyaXnk0:RW23eWmNRP1X:60rrrvh5pZHtyd7PSA4kCFoHBIK+toSWTtPGTQxBm5LKCDQm8F1j2b1nr1Han6dOWZyS2mTi5GnMrv:vr3:LKJ4rvNQq2bvuamNuaMmQ9nKSgZi9keGJnr3NY6+0+FoIWlvEgqZ0k3LojPNRorR4tsVEr2:U2CjtxcFDaUWWUmIl3knvd+LkqVaLtTquNd0oZ9GSL8mG::rkMybPy6+8ZpR59ty5yso7M6eRdIZVv62FoPXETtCmHZpNDkrHsf4DX6A3Ied01kpjqTN7Ka9LqgVC:vllXNbSYk4dG5:Mm3:27FnSaH6mTz+hxMmG3bo:YXzUvkOnLVu38d+Ia4vHej:1LAStJwJBlwgFXUzLom::gaxoOMmSxP0HDlpa3qTYYsvbKdNmGpuv+31DRnA2:xoHDHyBbXjEYufPn+:Z66nvlv1g5Dlx4iQRa0W8knizueGhw0cOHjpsLofI+z+OQtB6IhC02eRI2qQh6FLqRJ8QdD+poNNy7N6jJy2+2267vWOnqoxqY8UNr6tvbD5k6AiriRY:82xfvm50+ffcc+:3y380P3pn4mTrQZVqLj:U5ZGZs9:fsXOXUMEQtG7wP2rdjKC5Jke6K+OpZ:ocO3b8aGI5tnPXni4PP2bx17RDM+2NOXPnff3Nt0z72Nhp6zZtLVosiq1dt14o6MFDh5v:OA1qtu1gtmXbOVR7adiI0f4JOooPMYg6:I+acui0AjK9HOnGMdPMFXRKxIo7dOi0cdNmpqfCFKWRx5Dd7H9+QBJv+stNTAP6xMmTCpaaog05HmIxB1lT5V+5ciW:gq6TpKqqirwyjwJRvBKewxgPEHdw6OISvpeD:udnbSQwDei2bdvxrepa88JNWrhGf8jNVkE3a9Lsz1On1AVdm25hs8YsFHRRrHGDhnkXdE1NDZEjeS0rK2M+5cdDS0aZ0uP44vZDnTCs1ID:UeuVlKbN2EbQVjNmmhAkv9F3weQfOnyUUX6quUyZ:eXLl6vu7:z8i4NJm5isZ6VjhsVffNm9R69mTZoyhxl7+BXFliz9d1gEzSTy4pZvSG+lUje9EQg6cWElc4kuI2iqadGiRcu+:QeSpV::54wV0rT9aM7c02fOGIV8+79lFsUnu363bK1Zv2Hj8h+ryeZEvgsXf3H4yB:0rk+dOr1k6Ve9ej9N8j:WtRtfN:MYMBs:ny9aItH32bNnyV5oTZsd4UOHj8yvoImOSZODvNJNDrki4zZDT1U2BwY2gs6YWaoNbTVmvpeDoXHDRvXr1rvrrjYk55RpM39a8Quj3drk8KNfV6956+1376t6YNOWrUwzl+yOGVE0eMhw3m4vXLjwwqAhgwYPe3Hw0OQyLLE+aCi9IfkTSQ1NKTbWhwzLp6ANfH6QHoiLBH3vvR1atWpdUXHnHXe0vP32Fq1b300SKytbkT9enTpVPfLo408:03fWex:IBc1w7Njxn1eumjp9FnHfW26+xSLKWOr:ovDf22tv:GPnrt1E7sSw+Qt+pcXFtfQFc2pgyYDnMpd+Huj8EF:4e+9:lHdBA::JSpeKfL5wya233mZqS:DHkVvmzJ03+58fClrnTNs9Zmm1:7Z2HdldcsP0tfciyzApSxPFWvL58+chaA3hf1Sz9Wyoh0ih1rx6nO6dIEYrEXSDetfZCVe8xGLkbxzZsLLiTkq4nLIphya1ops9bGb2LVVC8qN::+cbYc1VIgZBhxr+R617bUkp1Tkg7LaTtKEvX77MNAxu+stN4sPG2u1gpCf+EfIq5I6B1998m90pn83mhDBz9vt2lVeJGAQdavgftdRqco0bNOIF3afvADtNvPr6W9ZGQvGHH8:ls5FDghHfp58tMD46cfLko491s7RVqPo898Igu11PmzHbVtPJzYV:BCForZD:wMGytWbb:AWLyF:J6TPfW:zFl3v27lPZimSb88m8l8e:PnT4yFFjxk2YNOXLr74+eOiwyrYqEYOgQ407yemGSsRUBV0njV0GdCrng6AlFC5UIqZ6YaUqjV1vtFzQkHtuBC2hcKESsawFTV:6Ft5gSVgCBA38wZVDQ9AgbKi2oYmOmYEcBpJ7gskHcgCQD1z1cvCDQuMQLggUdNsBrYCggVZA0EArIGigFRA00ArcxgBohQe3MXDfT4eePjv4Pn7hxSy7Kcn8FQDJVvy6eiUllxp8:nG9ufQd50Jvd8GFhgkE85t5cqhEHbtpxZLICEUs38SxDnbXzpjy+R9UeKUir7gStIH8+OajYCdc5ptD0HH7afOKghb6RT4qKbezfFeAxtVtDAxyVp7wO0PENMJoyEPEfyrXkyRd8bfgPSjsgjbw5DYGjFu7LxCEGf9:YnTbAa2AoIFWQNBAKyBooBUQNNAKCBpoBQQNtAKCBloBQYcdxSt2witW8mEIwpySbVVy8ld8JdcR8wEEHRmE4zqqKeze0iUIZSq8Xh23Px74V6ZA:q1vlwwh6GggkZpEjo4ysrNP4brjq6SeEDRIIBeKo7:aWSxfvnC:vBwVBW33LXwAgo4Y6qYr:MhPbQUCBA20AoIGWgFBA62AoIFWQNBAKyBooBUQNNAKCBpoBQQNtAKCBloBQQOtgKCBVkDQOqP9UCQeCDrUyAd8Og7JVynfi2qGCAg61EgGfPIj8eM6CjRbIOhowCjbcaA9s5Xd:AD9DgAIGmgFBA20AoIGWpEXQQ:2hXzUHESdfAm6Ks:U1tbmo+Yg6kDQoUb9xgNxUbe03YZ0BnnHduTIu6BramrUVyBoIZKut9yKUk+PHDJB53yY8oI2XyUrELQdtJT59RyKUk+PHLaCFnbj0+cpSQggaM+xuzKSWznq6ZHDoclhJ2IIGoSTLAStDv4UgqBALwfQinwJujb:5KPmIOrg0jfQCggaaAUEDbQCggZaAUEDrYCggVZA0EArIGigFRA00AoIGmgFBA20AoIGWgFBA62AoIFWQNBAKyBooBUQNNAKCBpoBQQNtAKCBloBQQOtgKCBVkDQQCsgaKAVEDTQCggaaAUEDbQCggZaAUEDrYCggVZA0EArIGigFRA00AoIGmgFBA20AoIGWgFBR4xyfwlPTerUqaMSHwga5Ihc7p4DQYP8AkEDrfBQ0CpPK4agQX6BoEHeMZ:NLnlIew4PbxciF7TKXhyrSgNBg:zilaAVM0PQhQjvdnae7d6nHZscktMF:ZFiZSDoQqQ6jQ:7cnRobysDQYP8gm47oBVhF3QdkD15+:lsCc8XNC5Hh6QyJnBooBUQNNAKCBpoBQQNtAKCBloBQQOtgKCBVkDQQCsgaKAVEDTQCggaaAUEDbQCggZaAUEDrYCggVZA0EArIGigFRA00AoIGmgFBA20AoIGWgFBA62AoIFWXFNZWVmRhl4PumIAAFDQGFZs8WiaoKsHAACFTsKjeXc2XDvougEAAEj2dZgEXRkAAAAWMhdY0HYGAICwgYvgAAAQXuDRAAAQXuDRAAAQXrL2aMXnR2f7gFy7:HnaHQAARAKBR0se68lboZHCO6mdt6rkF26Y7e5y3qnPz0stcPj4AwBoxB5tl1szjzbX0QwPhKh7dC0ANngos+w82qA6jTDRTDfX+Y:k+R13JykwTvkvXz6d2e6LAN+ARwNd8VBmuXh0tnhugnBVPYBHA13xUGZ+eDQAQqKuNJVjdcvWmmU::LRs+Y+JV9Gy:Mfq02fOkJy7du:53siWfF1uZCDrVKLxNv2RtSiS:mP1LytXbdqy9ejRY1kZyh9Hj33P15BJSb6t:nnl5cuXczGt2toLFy6u+m3NtBmz+g94vkOHTs3Lmzeod11JUSy1xBLL9Q0b3:r32zo:2GXw0OEffPyvTZu35rYvwp69+xYt+XLcy69279Hzrrva3FT2l:p16xn7Ko0VJ3aX3Gnjho1ITdq1a:9k72fGv:bm:AWLt+:YlfNOTTyUGTwaBEbUlaZyrI4YNbbetSUWJ0p5RLGR0qTx9Tt37SY5p82YzWRLO1cyp90rs1gTryspHfj8i9t37JTU8Pz5823btsvsiK+DUeH0+lvvTFC3qrNnz06cPK385nJByWaZMUHNmeWOO+IffDTHcXd79+3v02+ApaiYdb:CXSeXXr2fJicqurT::r::ffvdMvUvS+OhzODRIDCirjSVYzXj0TGr2aXNIunRe2oZj+b9RfhRyqyTK2bbkHb2tHGTJuQ3334nrCFpado5MlkpNXeRfq1bfO263zc4fvFVq9f87f:+Tp2TrBWWWHOMMlO6SskU0iLetn0Hvzvy16FNm7b0yU9mzcnlL2V:GTVm3PoNm+hyqlf88tQzfZgSJk+dofJb03goM3g0CIyoK03lWB05amxd4tExzjXSr00bN0m3o2fRPlJK+2:aai0Wb98ktFsGDRnGVI8YN23llpUY5:Xpj6ru7yzp8Thz5gzJwJ5LZOcbrtlr86XMr::Ms:3oPZLm8w1NmwnObbGY9TQW69HzycVffGl0LhmQvxEk5ZFHu5ZY:y4wy8OPdL1y5Qo8GhQWUVeayrE6YtSYRDuabj+axpRcqL6OWSUiXzY36fxgl0VLli5cvJS8msv8BYtnvfdB:4HPN6rfQGbQ6XLmfjrfrNuxY8f:769:s81seWU7DSZNmS78vgcOHryp7CZxbwPj1Mk8Des3aNHijoqKO8tvac6fwExrZt0zFmvfvuP5CxeMnQ4bMYr7ColX8u+hZ6:eCxd:ceLESb6qFy9d+mXlqr79B9qeRaxe:86EyfBoUFhEXWkqx+rI0el2NN8gTRqf6dFTk+1ozowyb4mbOO6Lb3JaDCgW69a9p5mftEZt2610L0cs41NmSr2S0s1b2At6Fy5eJNZp22RObmgUO2TYiDNUY5ZmwqSpbNvZxj1HjR5nbNKx431GSkVF5Zhxr6z45Vfiv3SZGzdt2Vqz3S5uq9esI83wZk2aNr2+CfWaWDEWI:HBhx6+evWq:Ccw8VBm8GgQGFFXmsqxmurrYJqTpvXEips2brJrt9EfPUvWEC6K9ek3QL6vTz9bYO5F8Lc9ubuOnaqMzB:N+YStj7X1On3m7LIby1jvpt4+1OURpgLvf:ix8DxEJ17fqPHmrTXyL7K1ZlvjBg3FTdr0W1Lhu+5qc:jIkStXr547d57e:MqVK7:8umr02JdbtGjJbHXnnXf1H:D8xMlTv:rPN8S3::zzlMqPmAMeygweDQIj6kpTOVZT1wzpa1nWTgPZNUPr0q::c5IdnT59+p527ZmmN98Y79M3YfQ7du5q3KARN7IiU7e+:RJt9nEvj2cd3+qVM2b9k67Dw490tVhzZslc0pw7b774C1iZNGU6:eeDROnRxx6fNGXamnW:X7K2kQkHDx2eMm1m5we7CNyc+YKipk6F8o4AAA7QSURBVL1ZyetK695xR7zr491feuW1f::nv4eP:KFSVSEeygweDQIj6kpTOVYTHl1SYnsxivLoqdNnMUbJ2Eqj+g2alzdPL38tvyXxestNt1hGGXOmzCwrf11N9nX:Aw:aGllRYsgwMXGS7cgfR0n5fDbz6zSs32Db9tTAvuMnTvz977ea:ezWIRwpgy67oWz:gYMqcTtw8NBva9edPXtW0RNJq9nafhcO8LD9FSRXNRs1aDhx8jTFaph4KDOPPToM983Jx:RuuwIx49ENBeLRdZlrhnTHbrKFaPR1TDX7OsQDn+3tRtw8FPRrL:33f8iO3np7gnjb9Po7EyaZ9U+07nnPpZauj:cwcpLGbOJqIbNT64hDYuIn::wzW79TZGvN9latWouH0Di0poVd3taxjEWxrJzaQ5l56dGGI1dVVdWkIetlZWXl5eWSrby1VLsbJ3lYrEo6UKFAPNoyh4WzD8u4jqK0ozEDPARD7uwHilFNyNJ0J0P:Ac+fO5:otF3xy6:85vQ6sbmzZ8+Z9T9z5kxlZSvLiYG23WTh73:4cW2yHU0a+PRXu75R47Zt25FdT546Y9nyn0jTODvTzZXvl::Yp++AZk2a2cTHatai0SbMD2EOLHn19bcOHTqsUgcPZeaZR9MGbd6ryNGm+Rse0Xc7Yj4y39rdeimu4NGSPToWJU8B2VIIHp0a12HfLqbGR89mPrJtNfMTArlLc2SprLzz5fGv1WzLjGc4feZMPF4hGsWR8d+vv:mW+QpLlv5bWPmyG268t33HPn37vzNh8pkziU6J48dP2MXh9OkzGzdt+WzBouqfV6rEbdGSpY9365FYuj:xeLcn0is9UuvkNZm+cPEXKqVdvHiRnCFWr1m3ZOlXpDn84qChDz:StWXLisTs8BgXXtEVVCPxhqbN3njrbZU9eiizINvR1RxxBau1+8hnj5bsAihSIB5dLz2HRdjypa4Z2o:rSG4+4LkXVPYoYdCQYeLO7nSjuF5J6d::dmv79h17PvnUiJFjJk2ZvmjJl2vW:r533:5Tp087lk988NPPPh::2hvde:S6:fYWwm9xXWndVb+tkZeze88+y5wUmxMSqe2WrdtcxsTglVffsPuBGLMeOnykSoEeyszj:ujyJGVpjLd2mYXmK3RD3sT5jySfCncqXGHyM4XzeeDRbigEjx46fBTfHKMPe9KU27Ez0Y6eMm0Gbw20azzZ+xk3NnTw0GHSRl61es32HTuPHjt24eJFxQ2PHj22afPW:32::IOP5ox96RVSjXvuuffGZjeWWGeNf:yvT0nm+6oekHbCpL5X9yd67d6zV7i7dydOMXshSgVdPZnCibHWJu9axZ5vuFHeRq:FY1272X3HVb+tpaeDclP2U68Nr6s:9qXxKkHzUGZBjuvg29GwvIKiEDza5NLly8QWzyUhf:yN5dSp02fOnr1yJTEz4uKlS+fPn7+U613lHLly5QrZ4:79B4jhLv+xesGiJdNnvvfKq68PfO5FYl6tW9:dvLx5eig3Pzmbs0iuPd6sSVNyGjhx4mRi7iLfIcO4p2mFyXuJXN+oMddHXGx2pgsd:8mnMmes7j16WvZCl8NWILG7++67v2+:gS8MGvJsn:4dOnQS9mywBSaX3k89S05yKtH2UGYYewcCI+pKUzlWSdN10pTpU6fPmjn7:X9+8PGHH88l7c1:ffLZJ:M+::SzBWSZv2DRiZOJmcq:r9:40ZxP3v9oznvvf0jcc:LUGe9MmPzmP94d:9obY8a9PGTYiJmz:+m4OzsefezxjMkKLUk0+9w2xSaxV++naxOdv5ce79aDsXLGcEvp3dmZI9N2pkbI0SNPCIeP:JGa1M58NfZ6oP0uJGeg9FJRcefJk6qDUjyUGTwaBEbUlaZyrFquGdr2R9P3VBL0chhe4zgX3I7UyGvW+CwW1q17zwHPvUDa1OZC3iaXFwc+n1o63Xe:zEyTxZKzjrHTzVtrEiPhaAeUeKXkNGD9qE+:AXaTyIeNGG1blLVMuotGYNbWKhlnl3cnZnGzjlp4NNCDqCtN5VgdMXJM3eJrJc038jc:db+O1BwW7v5BactwnAsu5Lc166iOYGFPRTH5C69SFGnvJ2apSG36xmY3MGPs5sz9lLRA2UklNmNR2Oqlsz3WtfsKtQEh8+YvvMOcAs6c5:i7fzB:LCwN8OR98p7otfq3tTmE3UOZwaNBYERdaSrH6t59+zds3ESW9Rs2rU+sbCZLej2RuHHT5nPnEuORDx0+kvgomZj4iN1qkzHVJVu27dhplJAsdvMGYz1ZuLm706fFLVOegwcPrU:VLfUtzCVV2w2byFe2rcz2HfMXLBoz9uVuPXq2adO2:OZy8jeiwXX169et17B+g6bXNyHngA4d73vm2X5vvv3uN99+f:jwkRy+ssGFCxdX:rp60pTpz:bpf3fbdmU3lAluElsUI4lkv8TWO3fu8vwLg6dOn:nTil9OKPdp2OGhzODRIDCirjSXhzHQGA9llhePDmoWOIgWUVdI0D4AwouHMvN+DosxjcXAeKsyF1x97okcjN6LEPBooCseysz7ueA8dlMN7abt2c0codeFM02En4LQEnWPBsAHQurRfB7evu0mFuZQeRAI8GgAHPG4r8OYAk67s:y+dxI7FibyH8Gjows8GgBH8nLNsDyNy3JoYL76AY8GwBGMvQOBAaUB4Ag8GgQGlAaAI:BoEBhQGgCOwKNBYEBpADgCjwaBAaUB4Ag8GgQGlAaAIx57dB0RLqrnKxje5zMR0kbk0EDMGnwFT8jLM2dVJhnGw:cbhK0+2qOBR8snXsWlT9SUpMgzqNzQRlIfx22zqlsOONZBOD2tYAlyLnjc6RGu8p9NkuJ45DgWJUl3VDxQRHuPlqzw5UjuM6MiOUWp8:uSa5i59QK9ieS7qx+VkvpndcgL0:UgyHY0jeLEbnVjzSqbuiaERYHc0NWjzRQGYTa7Au0S7dSo7tFMuqNHO6bn1pZy3BE82sDj:mhjCnhZGvmMcLtTNHPKtTsDq+SxSxHunS9Qsgum2iAHou7RcvOVGCVv3HJFCQsXluBYE7t9qaTz5Uvqb3dw0Z86fke7ugmrxFdMD4Ic11HNkae9ZJUOfCPqHh1O:Bd2IHvMn2OEDYy9A4EBpQHgCDwaBAaUBoAj8GgQGFAaAI7Ao0FgQGkAOAKPBoEBpQHgCDwaBAaUBoAj8GgQGFAaAI7Ao0FgQGlZUSDDgQEDPBoEhgZK89M35RMIc8jJzwxk1lVS7PYiya8yyVC4ld2O1KcsRhF4NAiMqCvNzviYdcUUxoyyLcfxI8XayvdoVlXueirGSq9LypQXJVnhy4no1ER4NAiMqCstZ4:mP8rZ2e0qkINHy9NV2tF8oqJHO+7X7iMGyTeSVzvMwKNBYOihNL4ZaPc2W:+SuA+Th6+SYwpfT2FpdinyAiXRUEzh0x2:lLBAc1tJtUMOPBoERoEozc7OVDaMqK0AD4FHg8CA0gBwBB4NAgNKA8AReDQIDCgNAEfg0SAwoDQAHIFHg8CA0gBwBB4NAgNKA8AReDQIDCgNAEfg0SAwoDQAHIFHg8CA0gBwBB4NAgNKA8AReDQIDCgNAEfg0SAwoq40u5si5bC5J3XgP5Lc7gM3A4kK8GgQGFFXmuRGdPRbu08lmwjvDOdYB8e6ZVUCCAnwaBAYGijNzm2Fd9QU2q5KimMF5Onw6EgDjwaBoYfS7NzQ7q7HzEeKHq3Yjhbm5xNd9tIAP4FHg8CA0gBwBB4NAgNKA8AReDQIDCgNAEfg0SAwoDQAHImSRw8ePLhWC8gXCTqWoSC0SgMgPETPo6siDjzaJLRK04xsR25gpEeogEf7DTzaJLRKU0RxBJvLKYjyAXl2Y+:4RPUhfZ4M3AZe4ZNHe:KLCj26Jgn9llnPLSV:wKNNdPJo:m3cydocxz7b5ZGsSyYoCj1XZUKjcBd2FQaek4tHu2wX5IxdOxoeHVG09Givmp+SE0BW63KPluRXrwPIKzm2o5nTqWNDwJP:SvBozdDAo4XtSj6dX3dsutoVIm:Vyg:MrPIr1gHkG7d9Hbz5xu3P2C5:WklfB2OynqTkCXi0SdQ9Ovxke8TBfENIjn0dKidkOsWT8zCuGWoGPBoARzCuw2:g0SahVRoA4SFiHq0NQccyFIRWaQCEhyh5NNAMKA0AR+DRIDCgNAAcgUeDwIDSAHAEHg0CA0oDwBF4NAgMKA0AR+DRIDCgNAAcgUeDwIDSAHAEHg0CA0oDwBF4NAgMKA0AR+DRIDCgNAAcgUeDwIDSAHAEHg0CA0oDwBF4NAgMKA0AR+DRIDCgNAAcgUeDwIDSAHAEHg0CA0oDwBF4NAgMKA0AR+DRIDCgNAAcgUeDwIDSAHAEHg0CA0oDwBF4NAgMKA0AR+DRIDCgNAAcgUeDwIDSAHAEHg0CA0oDwBF4NAgMKA0AR+DRIDCgNAAcgUeDwIDSAHAEHg0CA0oDwBF4NAgMKA0AR+DRIDCgNAAcgUeDwIDSAHAEHg0CA0oDwBF4NAgMKA0AR+DRIDCgNAAcgUeDwIDSAHAEHg0CA0oDwBF4NAiMQlBaeXl50FXIIzn:ggiLOvBoEBiFoDTTjK655hrNXuPwaBvg0UATCkFpjEfrATxaDjwaaEIhKM2NR1db8aQ+npQTBo:2PDJxj4ITh0cDbSgEpbn0aEmKsS60KibFzMl:lBvBerRd5flvrRIZPlDugUcDTSgEpXnr0Xy60LUdU1wSco9WiUNc9DcFHg2AhUJQmucezbhJAXp0XPkfhiRFJUPOwKOBJhSC0vJ9zdDD3lh1AvfokAOPBppQCErDuA4h8Gh14NEgMApBaRgfLQ+LlsCjgSYUgtJgRkIQFnX0+f8FAAD6AY8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDwAo8GAIDw8v8BbO44Nc9yINkAAAAASUVORK5CYII=}}\\ After all parameters have been entered a click on the button 'Export' will launch the export process. The export summary will notify the user about any errors in the export process and will summarize the total polygon and vertex count and other statistics. +
- +
-{{data:image:*;base64,iVBORw0KGgoAAAANSUhEUgAAAvsAAAHJCAIAAAHjvlG0AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAACXRFWHRDb21tZW50AACJKo0GAAAfg0lEQVR4nO3d248k130f8MoDTQJEHqwnOfZjkNcAzoves39Dw0hCQL7EN8iWTUc2LF8e1rokQsxQEgL5ggQWDClArCSKJcoWJO4sxYtmpaFESgy5IWfvy4tEk0uRuyRX4XIyyxn29lSdOlV1uvtU9+nPB81ldXVVdc3B6W::+lRVd:XeP3nKLXKr9v:b29v7N0+efuP6jT0aDhuouvfeC69cvTnxjvpCjTnF29nZOZg4bCDaaKCY4x+:92YDTSaT3d3dSQ89FyvAK++41UCzpq2wOc3RVG+g3YaD5WptVFug4BYM96DZptlwsZcYk7aX2Nh7tUL69qCNbTgvsQ4aqIMG6hAI6bF3abUsrAeV2rJeYh00UAcN1OFIA9U+oB4oNVx6CvSg4j+gD+Il1qH+Eqs9vLEfwaY6GujAJreRl1iHcA:a5C5Towd16HVUY5PpQR00UAcN1EEDddBAHTRQBw3UQQN10EAdNFAHDdRBA3XQQB00UAcN1EEDddBAHTRQBw3UQQN10EAdNFAHDdRBA3U40kDHaLcSDVRV1di70EoDdViVBmoae6cOVaNfub:iNw0UbZ29vb2rV157+62xL79eSTdb55ELl6u77tprfLfCwd3Zb2HYnC9fuO32O:YOWoc2WiemmjipPuTgs0U19m6sqCOtM+0+zS9QaH7zwuwqpaq3jssMZnllxdRbR8eZdat14teqbGareWXFaJ0YrRMTqHeYWkzfKbVZvbJitE6M1omRyjH1WlkDzfLKimltHZ1oou:ESeWYQN+ZjecNby+vrBitE6N1YrROjNaJ0ToxWidG68RonRitE6N1YrROjNaJ0ToxWidG68RonRitE6N1YrROjNaJ0ToxWidG68RonRitE3PYOmNf17zStE7MCrXO9vb22LtQtxKts7LfaOBq:ejV+u:1C+6kutV7zrzwD9WnP139wi9cu34jvOjRrzXYnG82YOq22+:Y2dmZ3r3Vez7991:76c::t7:5xsPfuvx8wnZ1pg3knYt0R36Is3becvNrINqWzP9ZmlG8MsP3WDJMd++ppc7sRFxwmbbvqJFY60j2kK5v7wmmjsDYcL3eudpW1pM2nHcu0rX2nkE17+xdX1+4OWQP6fQe0sV6z+5RI+4lq0n2kG65vadtKLmZZM2vUGf1yR7S6T2k6+g9be8m3miYyB7m0bf3+NBO07zZo0ttMu9cpAv3nsgpf8KGKdlDutbeEzzzq89pG2yOWPbUOo0xHmq8c5FO7yGd3kM6vYd0eg:p9B7S6T2k03tIp:eQTu8hnd5DOr2HdHoP6fQe0uk9pNN7SKf3kE7vIZ3eQzq9h3R6D+n0HtLpPaTTe0gX6D37:3NzS7jd7D1j:+4w60rvOVT7Be8V:OnzFaT3HFqR339fL3oP6W72Hje3tJsfUSfRrd7z7Asv:avTT9916ttvvHlj3H1iXdzqPaeePvvNl1+tPvjB6WPVuxK2m7YWa2FnZ+dg4lbvOXn24j3PnK1+6Zd+eO3HB3OSe0CzzzU74jxdkxFNu87ebO+558FHfup:ffGnP:Wp+0:vjrRjrBlVM+n0HtLpPaQ77D3T4+:Nb9ydtHz7bvNfirffVWbP0Aj0nrZf5kr4qVu9qjAHvWdrayvceyCiI3sgou87V3BidkORn9Jp+70Lb2TrLtZ7+vwYdq0nzfaJ5szmRHMt1oh3LtJ1v3O1TUDf7Il:PtelNpN3LtKl9x55w+Cx5viP3Pr0tFG8c5Gu13hPT2kHv1hfw3pP5+F0:WajeOcind5DOr2HdHoP6fQe0uk9pOvuPcZvaCN7SJfYe1xKwWSe3hPpE7Onn:Y8JWh2Ye+V68I7F+n0HtLpPaTTe0in95AufbTQxyL6nh3mpEGavHORriN7aoN4o+4qK6dX9njPIsg7F+nCvUfY0EdK9iiDOOCdi3St71xDNySKNlB379EtaOOdi3R6D+k63rnavuTAWaRM+hwljZ+krOtsMu9cpOv1jbvNEBprd1kpsod0eg:p9B7S6T2k03tIp:eQTu8hnd5DOr2HdHoP6fQe0uk9pNN7SKf3kE7vIZ3eQzq9h3R6D+n0HtLpPaTTe0in95BO7yGd3kM6vYd0eg:p9B7S6T2k03tIp:eQTu8hnd5DOr2HdHoP6fQe0uk9pNN7SKf3kE7vIZ3eQzq9h3R6D+n0HtLpPaTTe0in95BO7yGd3kO6g96ztbWl9zBYIHuOf:xeN7eE283ecwyS6D2k03sGqyotdkjvCdje3o48qvdM6T2ttt9Vm6:3TOk9g+k9U3rPLVVvY+:pqtB7SHez9+z:5+aWdrvZe:YAMhI9wAgC0fP8Sz:6s4vPVl+5r:rCF6rf+73Pffd719688fr1G2PtIrCOqqqaTu:s7NQeDUTPw2fO:+2Z89UDD1QnTlS:+7vVBz7wP77zvYsvv9rc6HTTtbvz7Oh0OG46sza:9qS1LTT3ZHZObWtt2wEW5bbb72jmzl4werbOX:7j:3O6+uu:rj7zmep3fuf41gNPv:zq+R9dm10m+LJv3m1bLP5qDy4TX7GWL21LNuNG7sCS7LzjYHo:gGqPBqLnE4+cuvdbj:7po4:958e+:1++8:jfPn326+cuPXTpuUz7mzEO5A6MxTAzMALRA4zgVvSMfXErUJS9o9erzzq8ALkZPbu7u8G7tfnNZWYXaM4ZZPcdsxO1zSZvGchgAdETmRl5NB49kfkyBQowjZ6Dr3maftlTLHoA5rSwqqdT8HNZpPaZp7qJfAacfcbmYkoqyCMleqZqAyuRMZe2oZm2bQ4yaJXZlGnbGQEEyzZX9EwtKk285mFDLCZ6Zg2Nj+YhKgEExUsc6+lzYDv4QQxgsoyqB6CT6AFGkB49tUNFk8YR6+aSzfnBVZrznaMMhZlrrGfSL3d6HmgfOh9YXz5wASNYQPT0qVba:m0eIKvdjZdUwJrKVPVEIqZtfvCw:Zy7AawIH7iAEYgeYASiBxiB6AFGMCB6mqfz9BwwBqiZ92zmzlMKAZp84AJGkDV6etZESico3gjR0::60uC6neNNg5Kr7aKz5gdJgQgLtODoCV4jOjkaE7XsmLSERXxTnQv33M:p3chu1CaA+RnrAUYgeoARiB5gBKIHGMGws5knSxhtNXwLG2jeqqd2tLv5aHD5Pl:fAxTMBy5gBImXjzYpXoD+UqIncg7x7lH5:x5gLfjABYxA9AAjWPw1XJ0LOMIFJEZP5yWd8YPutSUX+QcB68AHLmAE8:7menNmZALgwAi:PgrgAxcwgjGjZ0nXowKrb2EXUkxFDpwHz3KuHSwDNoEPXMAIViV6HAWDjTL4A1faIXOxAsxalaoH2CiiBxiB6AFGIHqAEYgeYASiBxiB6AFGIHqAEYgeYASiBxiB6AFGIHqAEYgeYASiBxiB6AFGIHqAEYgeYASiBxiB6AFGIHqAEYgeYASiBxiB6AFGIHqAEYgeYASiBxiB6AFGIHqAEYgeYASiBxiB6AFGIHqAEYgeYASiBxiB6AFGIHqAEYgeYASiBxiB6AFGIHqAEYgeYASiBxiB6AFGIHqAEYgeYASiBxiB6AFGMI2era2t6b+iB1guVQ8wgl7RcwwgI9EDjED0UFctwdh:EytH9FAXT4rt7e3FbpDNJHqo64yeg:SZTsy5QTaT6KGuLSm233Xs3dqnZwyJHppED3ULTwrRQ5PoAUYgeoARHEaPm5ubW85btQeQl9wBcpM7QG5Hcufisz98:sUrn7n03L8+:X:vevL03585::qbN964fmOsnQOKdCR3njp:+Y0fvV7df3:1la9Ux49XH:rQ:sxrb8odYJidnZ3pdFXVP1cduX:q6bOPnrmw9:r:+6mvf7368IerX:zFzz362NWZ3Ams:+6cg4nmAn3WGiryXMAq2HnH:sRtt9:RfPTIS:eh3fM7Zy:esX2qOnGi+sM:rO6+u:r59::wtTdvLX30pd72yg8uNjsznjvBRw8udw4uGcy+6fJtWwvuObAo+7kTDJ29Wu6cOHPhG+cuPf3ci::4vvuqD36wuuuuT5w4ee7Ka7eWPvqSnp1Z325jgf6507bWoGVqGdTc7c6NA:PYD51p1VNzNHfOXTp18dmf+NKXqs9+tvrQh:brncuvvXG2kTvN6b0eERCcMzsxdIPNiqZtdSUPZDatdILRc+S19x8f+uZ:Ovngv:zSl::Jf:+bn:nc53:+z::yfz:6+EPnLmXa07zkDozlyGvvY:u5s:3t:7Dz3U9+5:E::+73Pvv4E189c+HkhWfH2rnlETowIi8:IDe5A+Qmd4Dc5A6QW3X84:eOvQ:ABjl27NjN3Bn7906B0rT9hHE4d3ZnTOfUHp2dCE7XFmuuFVyl8y:pswywCoblzoFpOszerT3aX8+t1aIqOHN2Uz3TCsgvMXdqZU5wmc4Vm0s2F2g+UVtxFMwgYAVNg2brHQPqnUkoFNruThp1TXDJ+KO17bTlzkSxA6ttNnRmo2fp48rJuSBQYN1Nc6c24XgWsCwp4zuLonKBzTRm7tQMHUIOLjBpibM+I0dAHsNyp+drtf:pNm1LtuVO2yqdQ8ttw97xo2nAMiwydwa9bvvkTm26We8EtxYMqWbuONwOYxn8OSv4qScSH32OrzfTpJkXkQqlLWIi9c7szD5:CLBAixzfiWRKz+WBTbBC48rAhkgZ35mnTol:7FIBwSZIz53gwaZJywBQbQvNrQUXAIqU+Dmrdjxo6GGs2Wm5A5tmcO4Ei524nvXO:B:igLVgXBnITe4AuY2fO5FzDpf91MAohuXOoCGY4FGtnucrT7qOiwHrKyV34oLJ0vw3OMAcGagWOlCMxedOUzB3JqEjWZGaKPnZgVUzOHeC5wc2706O1i+1iJm0RM8kVBYJHSjMyOPKPlXBBho5d4ANlP45a0man9raTncG1lTKuHLbwE1zfm1ObXhoEgqyeLLIHShAYr3TNqIcHFRueyhYPbXl0eyjwFpLqXcmXbnTFkO16UjutJE7UIBFjisLBaCPReYOQB9yB8hN7gC5yR0gN7kD5CZ3gNzkDpCb3AFy65s7zauonCUIpOmVO7VLQGcJIGCoeXMHYKiF5Y7CB+jJuDKQm9wBclu53PFhDYq3xNyJJEjbgFFa6DS:AnHouvMvA:S3sNypvexr3z0YX7g2v7aF4OqzX5PaPzsiX41Y23JwLWAhFp87wRd228KR+ZGvWE7IndpTNPdh9kmlDCzVInOnrdiJRE:bzOYW+qRYPDIiiRNcsZmhwEIsuN4B6LTEcWWAILkD5CZ3gNzkDpCb3AFykztAbnIHyG1w7jhPB5jTgnMn7ZIFYKP0yp22yxea4lczuPoJmCwpd4ILyB3gQN:PWW0XSTbn9w8XGQSbafD4zpTIANKk5w5Amr7jO7XqZlHFjqIJNtCAceXIF3G1jfJ0Pr3cgQ00uN6ZHTaOf0dfn6eXO7CBBtQ7k5Zip416BwgyrgzkJneA3JaYOz5DAUEp4zvN6aD5FwCK1Dd3alc:RI6jzy7QvKLCtRHA4HonEjSdC8gdYLKQ4+htZxV2powMgs20xHFlgCC5A+Q2YFx5drUFfj4KHiwDCjZgfCdyAKvt7qRHmgw6Ng8UYFi904yV5szmRJx6BzbNgHpn0l7dTFpyp88eDFoYKMDCxpUFB9DTwnIHoCe5A+Q2YHyn+UlqIZ+tfECDTTOs3uk8at4meNnEoMNeQDFScmfSciSrphYxnZdrARuib+4EE2fS4wsx2gw9zQcohnFlIDe5A+TWK3eaZycHJX9c8jkLNkpi7swOzdRGatqGftq4TgI2TeLnrFrcNOcMOsQ+kTuwSfrmTluxM+nKnc49kDuwaZY7rixNgKbl5g5Ak9wBcpM7QG5yB8hN7gC5yR0gN7kD5CZ3gNzkDpCb3AFykztAbnIHyE3uALnJHSA3uQPkJneA3OQOkJvcAXKTO0BucgfITe4AuckdIDe5A+Qmd4Dc5A6Qm9wBcpM7QG5yB8hN7gC5yR0gN7kD5CZ3gNzkDpCb3AFykztAbnIHyE3uALnJHSA3uQPkJneA3OQOkJvcAXKTO0BucgfITe4AuckdIDe5A+Qmd4Dc5A6Qm9wBcpM7QG5yB8hN7gC5yR0gN7kD5CZ3gNzkDpCb3AFykztAbnIHyE3uALnJHSA3uQPkJneA3OQOkJvcAXKTO0BucgfITe4AuckdIDe5A+Qmd4Dc5A6Qm9wBcpM7QG5yB8hN7gC5yR0gN7kD5CZ3gNzkDpCb3AFykztAbnIHyE3uALnJHSA3uQPkJneA3OQOkJvcAXKTO0BuBymztbVVm5A7wLJM42ZK7gDLNf1gNRs6cgdYIuM7QG5yB8itO3fc3Nzcst1u5s4xgLzkDpCb3AFykzscet:73rekLd95551L2jJrSu5wSO6QjdzhkNwhG7nDIblDNnKHQ3KHbOQOh9pyZ3t7O7LWwaPxZeQONXKHQwm5s:2Ozi3LHWrkDocin7Nm82U6PTsnvmW5Q43c4ZDxHbKROxySO2Qjdzgkd8hG7nBI7pCN3AFykztAbtV7:+QpNzc3t5y3m7mzBwBQLhUPAFA+FQ8AUL6Oiuf8xecuPfvD51546QcvvnL1ytUfv:rGjWs:3nvjrb3rb+:d2Hv7rb033rxx83b98JZz1wEAeuqoeC7:4KXnX7zy0kuvPvPyq+:5:hPVqVPVww9X3:hG9eUvV8eP::PP:Nnr19968:rbr7954:XrN285dx0AoKeOiufbp3efOHf5+Zd+dOmVq188vftv7:u799xzT:X7v1:95m9Wv:Eb1a::+s:e+8lr1996:frbV9+8cS1U8VRVNZ2Yqi1Qm1Nbvv:M5lM0l28+V9uOLUnO5wKAkuzs7Nx2+x37:3bObOqoeB555tz27vlTZy48dvbif90995Pb29UDD9y8:dEf3ax77r67ev:7:8VHP:bStTeuXPvxD159vbmF2eIjMjNelMTnBxfov5ElFR9tZdwyngsANse0xOlZ6xzoqHgeOHP+wTMXHj578dT5y::uydP:6OTJ6mtfu3n78Ier3:7t6pd:ufq5n:tnf:AHT:3g5UuvXL145WpzCwuseDofbXuK2qhPc63gMrUt9PxzIk8U38:IdoLP3vNJm4s1R8ja9hMAVtNBrdO:3NnrrHjuP3th69zFB85fevDC5S98:8m7v3Tfez7ykeoDH6h+5VeqX:3V6td+7Z9+7GOn:+HKuVeunr3y2vlX+lY80zlth6I697tzBKXtfb3nGE+foqTnzDbN+qNzOwkL9N9hAFh9tXGd:sM8HRXP:3zqmc9::8nPP:7En373ez:xyCPVyZPVV79a3ffl6q:+qvqt3:qZj3z0:jMXvnnpuW89+8JjL7z45ItXmltoe3PtU2fMlkGRmZFtNpfvHONpLtysyXpuPLirwbVqTz1:xdN8oj77BgCrbP+dK1jc7M:sfFPrqHg+8fD2PY+c+uQjpz710Dc:cvLBPz5x8vj9Jz964uS:P:HAJ76+9RcPPvLFx5:4u6eeOXHm:IMXLm9ffn7eP2UlFVkZFPlHAUAb30AIAJRPxQMAlE:FAwCUT8UDAJTvsOI5:vF73dzc3Nzc3NyKvB07duxWxbNf:kwAAFbVfq3yykD7qxRS8ezu7o69CwBADjkqnmlhMVth1KZrxUezFumsTjq3EF+mbbrPDiyjclKNAcACjV:xRCaa22nWRs0NxrfQtkzz7uxzxeuP3Rm1DUb+9uCcPtVhbUkAoFNbxbO1tbXcimc6pya4WNsG22a2VTP9K57a:M6Kp3N+z4qnc934MwIAQc2KZ+uoeSueeCkTP8xUW7f:GE98C5170vZcfeZHqpnmurU5wc32WRIAiKtVPLUqJ1j0lHDmcv6KQY0CACPa6Gu1AIANkani6TwmNdSgY1t9lmzu4dAVB80ZuoW2P61tZuRQWueKzUNpBqgAWHdLr3h6vs3HC47p+3ft3+aKkbfttr2KvJ0HH2pbt7ZjkTnxp4tvv:922laJTAQ3AgAFGKfi6VkWNIubzrXicyI7kLbzkx5DI8FdqhVhi5quzWnu2yTUnp3FjeoHgHWX9ft4gnPSBjYWWPG0LdNz3baZ8YGWnnPmr3jiT9ez6FHxALDuVuXM5fkPrAx9VzawAQCbY1UqHgCA5VHxAADly3rm8ijHiWrn7dYeCk73eRQAWCP5zlyOX3LVdgpt:zOUm+s2F4jMjyyj3AGAdTdyxROZM7tW:2u7IjsQn+9iJQAoWL7vXK7dbRvXaXsovkrwWYIrxp+u81EAYB05cxkAKJ+KBwAoX45rtfocG0o7chQ8JtV8rsh5Qs1l2rbQf3nHwgBg1eT+Xa3IeTmRu83tBJ8lcjpOfDuR04Piy:ffBwBgRONXPMFCoefIUHPFtOmeFU9wsZ7PBQCMaJxvIOxZWLSt0mdOnoqn:z4AACNy5vLif4IUAFg1Kh4AoHwqHgCgfOX:kuhCRE70iU837wIA+Y1Q8dSuQm8+Glm+ueW2s4k757dtf+jl68HpQZebAQDLlvvq9ElX0TD0Mq55Kp62PYz8FW0LG+MBgFU2csUziX5ncbBGaXu0Z8XTfMbOAiWyM8G1VDwAsGpW8cxlB4MAgMVaxYoHAGCxVDwAQPlUPABA+VQ8AED5VDwAQPlUPABA+VQ8AED58lU883y:ju:mAQDmseCKp:Orhzt:wSpIxQMAzCNfxTOdGfmRh87fwAIASDBCxVObjv9QKADA:BZ:Hk:8V7GaYzzNVdQ9AMBiuVYLACifigcAKN8aVzyRA17xY2Hx426DNrVYzavb+u:nAp+3:1rN3cuzwwAw1IpWPD1P92m7G1x9ulhzOl48RZ40YYH4Xz1ofp:tRJpr9t:4n9Dn6RQ6AKyy1a14mtO1Oia4TGT1zoc69yS+D7VHZ4uJzmdp25:kMqK2e8EdCz7LoB0OPtc8uw0AS7I2FU+fOZHV4w9F3qEjlUHy8w59rjT99zz4XPEdSNggAIxoDSoeAIA5rWjFAwCwQCoeAKB8Kh4AoHwqHgCgfCoeAKB8Kh4AoHwqHgCgfCoeAKB8S6l4mj:MlPCtvkMXS+OrDgFgEyy44mn7ZajajzpN58xON3:dqbZu28LzUPEAwCbIV:HU5kxCxVCfH6tabI2i4gGATbD4o1qdP9XZrHhqD:X5DU5jPABAf2OeuazaAADycK0WAFC+1ap4jPoAAMuwxDOX28qXSFmTv+JZ+KnQAMAKylrxRK7balu987zmiN2Q4GI9NwgArKlMV6fPTidXPLUlOysVFQ8AcGDpFc9kyNcPtl3E3rb8:Ba7NQBgNa3WmcsAAMug4gEAyrf4o1q1I1MJV2z1XHIhh6IczwKATbCU83ia:066Tsdp3u2zheD8QVQ8ALAJlnXmcqQuCZ6kHH80soU5zztW8QDAJhjtt9ODNc2g5WvPZYwHAGjjzGUAoHwqHgCgfCNUPA4kAQCZrdYviY6leVF9cBoAWFNLr3ja5sx:tnLw:OWm3ZDgYj1nAgBrZ8xfEg3eDT4UmTOdjgwpJVQ8ah0AKEnWXxJtLtOsM5oLx9eNFDH9tT3p:FsGAFbBmNdqBQeEFBkAwMK5Oh0AKN8I12rNGrr8ogQHkwwvAUCpclQ8wXNxmmfhRJav1SILPPhVe2oAoEiLP6rVVr40K5vgdHDcpbb6AguU+C4BAGVYynk8:WuaPhVPcLp5t7:+uwQAlMGZywBA+VQ8AED5VDwAQPkyXZ2++ifHrNfeAgCDLPdarci1380Lr9pOKO5zonFnjbIb0tyf5jQAUICsFU:adVuD1morVlQ8ALDJsl6dPmn8VmhaxRPcTqTc6WkhGwEAVtC6nrmsOgEA+lvXigcAoD8VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUD4VDwBQPhUPAFA+FQ8AUL5axbP1jra7Kh4AYC01x3i2jjLGAwCsvbajWsFaR8UDAKwl5:EAAOVbWMUDAFCYIxXPMQCAcql4AIDyqXgAgPKpeICA962hO++8c+xmA1aXigcI2C8gxt6FwVQ8QISKBwhQ8QCFUfEAASoeoDAqHiAgreLZnnFwd9H7FaPiASJUPEDA0IonWNxMZ86WQcE5zQUSqHiACBUPELDAiqdW6Bx7t76ZnVkbHEqj4gEiVDxAQMJRrWax0lbx9F9gEBUPEKHiAQKcuQwURsUDBKh4gMKoeIAAFQ9QGBUPEKDiAQqj4gECDn6mau2M3WzA6lLxAADlU:EAAOXbr3b+Py5917cqishdAAAAAElFTkSuQmCC}}  +
- +
-==== Adding Aircraft Definition Files ==== +
- +
-There are three major ways to create the aircraft definition files: +
- +
-  +
- +
-  *If you just want to get the 3d model into the simulator to check the graphics, simply copy the 'template.tmc' and 'template.tmd' files from the SDK's 'template' folder and rename them to 'xxxx.tmc' and 'xxxx.tmd' respectively. Change the name and description in the .tmc file and replace the entry 'Box' in the GeometryList parameter at the end of the .tmd file by the names of all your geometries.   +
-  *Use the files from an existing similar aircraft and rename them accordingly. Replace all references to 3D objects with the names of your 3D objects and modify dynamics and animations as desired.    +
-  *Start from scratch using the template files and the section 'Aircraft Definition' in this document.\\ Add airfoils and aerowings with the correct wing geometry and add the primary flight control inputs by copying them from existing aircraft. Set their Body attribute to 'Fuselage' for now.\\ Expand the rigid body system by adding a 'LeftWing' and 'RightWing' object and connect those to the 'Fuselage' rigid body with 'jointmulti' objects like it is done in a lot of the default aircraft. Add 'rigidbodygraphics' objects for the wings to the graphics section and make them use the 'LeftWing.R' and 'LeftWing.Q' parameters to see how the physical wings are moving.\\ Animate the primary flight controls with 'hingedbodygraphics' objects.\\ Move the wheels by changing their R0 parameter so that the aircraft no longer floats above the ground. Change the center of gravity by moving the fuselage's R0.   +
- +
-==== Converting ==== +
-When you have collected all required files for an aircraft in the intermediate folder, run the aircraft converter: right click on the 'xxxx' intermediate folder and choose Aerofly FS 2 Aircraft Converter from the context menu. This opens up the converter window and the aircraft's internal name xxxx should be displayed. Start the conversion. If run for the first time, the converter will convert and compress all textures and render the previews. This might take some time depending on your hardware. +
- +
-The next time you convert the aircraft, the converter will only converter will process only those textures that have been changed. You can always force the conversion of a texture or preview by deleting the generated file. +
- +
-If you want to change the output folder, you can set this in the 'config.tmc' file located in your 'Documents/Aerofly FS 2 Aircraft Converter' folder. Change the entry 'DesktopFolder' to match your folder. +
- +
-The same folder contains the converter's log file 'tm_aircraft_converter.log', which sometimes is helpful for troubleshooting, as well as the 'report.txt' in the aircraft's intermediate folder. +
- +
-===== Aircraft Definition ===== +
-The aircraft definition for Aerofly FS 2 is contained in several .tmc and .tmd files. The 'xxxx.tmd' file contains the main definition of an aircraft. It describes the aircraft as a collection of objects that can have different attributes and connections to each other in an object-oriented component approach. Among the objects that can be defined in a tmd file are engines, propellers, wings, airfoils, wheels, actuators, logic circuits, rigid bodies, joints, sound sources, instruments, autopilot, navigation receivers and many general purpose objects like integrators and mathematical functions. +
- +
-The .tmd file is divided into three sections: dynamics, graphics and sound. Each section defines the objects that make up the dynamics and systems simulation, control the rendering and animations and create the sound output respectively. +
- +
-==== Dynamics ==== +
-The dynamics section defines all objects that create the dynamics and systems simulation for an aircraft. Physical values, such as the location of the aircraft, it's speed and orientation as well as the deflection of it's control surfaces, the rotation speed of engines or propellers, electrical loads, fuel consumption, system states and numerous other values are calculated numerically by Aerofly FS 2's physics engine. +
- +
-The core of each aircraft in the Aerofly flight simulator is a rigid body simulation. Each body has its own mass, position, velocity, orientation and angular velocity. Forces like gravity, aerodynamic forces, engine or propeller thrust and torque, collisions with the ground are computed and applied to the body. Joints connect different bodies and apply forces and torques to the bodies. In the tmd code the rigid body system definition is usually positioned at the very beginning of the file. Further down in the dynamics section the aerodynamical properties of the aircraft are defined, followed by the primary flight control deflections and more advanced aircraft systems like electrics or fuel systems. Simulated instruments like the attitude indicators, airspeed indicators and altimeters complement the tmd dynamics section. +
- +
-The objects defined in the graphics and sound section use the output generated by the dynamics simulation to render the 3D objects and animations. Therefore it is necessary to hand over the required values to the graphics and sound using an 'output' object. This includes the position of all control surfaces and primary flight controls as well as values that are visible on any display in the cockpit. An example can be found below. +
- +
-==== Graphics ==== +
-The second section of the tmd file is the graphics section. This section defines the rendering of all cockpit displays and each visible part of the 3D model and it's animation. +
- +
-There are a number of different animation methods available. To name a few, there are static animations that just move all parts through the simulated world together with the fuselage's position (rigidbodygraphics), there are objects that rotate around a certain axis (hingedbodygraphics or rotations) like the elevator, aileron and rudder and there are objects that can be shifted along an axis like the throttle in the C172 (movinggraphics or translations). +
- +
-Each object of the 3D model (geometry) that should be rendered to the screen must be placed in one and only one 'GeometryList'. For the beginning, all geometries can be added to a single rigidbodygraphics object's 'GeometryList' as shown in the example code below. Every object in the 3D model that is this list will be moved together with the 'Fuselage' rigid body and will then be rendered by the graphics card if it is in the view of the camera. +
- +
-<code> +
-        <[string8][object][rigidbodygraphics] +
-            <[string8][Name][FuselageGraphics]> +
-            <[uint32][PositionID]   [Fuselage.R]> +
-            <[uint32][OrientationID][Fuselage.Q]> +
-            <[string8][GeometryList][ +
-                                      FuselageOutside +
-                                      Cabin PassengerSeats CabinFloor +
-                                      CockpitStatic +
-                                      FuselageOutside +
-                                    ]> +
-        > +
-</code> +
- +
-Later on in development, the individual parts will be moved from this 'GeometryList' to the 'GeometryList' of a new 'hingedbodygraphics', 'movinggraphics' or animated 'rigidbodygraphics' object. +
- +
-The rendering engine itself can't directly access the user's control inputs or simulate the position of slow moving actuators; this is what the physics engine does. Every animation, therefore, needs to get their inputs from the dynamics section where all the physical movements or delays can be simulated. To send a value from the dynamics section to the graphics section the dynamics section needs to define an 'output' object as described above and the graphics section needs to have a 'graphics_input' object whose InputID matches the 'Name' property of the output followed by the text '.Output'+
- +
-==== Sound ==== +
-The third and last one is the sound section. The sound section also reads in values from the numerical simulation in the dynamics section and then uses a mix of interpolations to determine the pitch and volume of a particular sound file. +
- +
-Similar to the graphics section a 'soundinput' object will read the value of a dynamics 'output' object and provide its value for the entire sound section. +
- +
-==== Object unique names ==== +
-Each object in a section must have a unique name by which it can be referenced. Using a name for more than one object in a section can have undesired effects. +
- +
-==== Naming Conventions ==== +
-We use naming rules and give similar objects the same names across different airplanes: +
-  *The name of an object uses the characters A-Z, a-z, 0-9 only and the first character of the name is always capitalized.   +
-  *Object names must not contain any spaces. Separate words by capitalizing the first letter of each word (UpperCamelCase style).   +
-  *Use underscores only if necessary.   +
-  *Hyphens, colons and commas outside of comments %%(//%%) must not be used.   +
-  *To assure cross-platform compatibility, the usage of tabulator indentation is deprecated. Use spaces for indentation instead. It is recommended to set the text editors settings to replace tabs with spaces automatically.   +
-  *Abbreviations are avoided, the full name is always preferred.   +
- +
-==== Object structure ==== +
-The example code below creates an object of the class 'control_input' with the name 'ThrustLever' in the dynamics section when the simulator loads the aircraft. During runtime, this object will filter out messages with the name 'Controls.Throttle1' which are typically sent by the control device assigned to the left throttle input in the 'Controls Settings' user interface. The control_input object will store the value of the latest message in memory for later use by other objects. +
- +
-A message with a custom message name can also be generated by adding click spot to the 'controls.tmd' file. +
- +
-<code> +
-<[file][][] +
-    <[int32][dynamics][0] +
-        <[string8][object][control_input] +
-            <[string8][Name][ThrustLever]> +
-            <[string8][Input][Controls.Throttle1]> +
-        > +
-    > +
-+
-</code> +
- +
-==== Object communication within a section ==== +
-Most objects in the tmd file need to communicate in some form. For example, a jet_engine object needs to know the throttle lever position so that it can calculate the thrust increase or decrease over time and apply a variable strength force to the 'Fuselage' to accelerate it. In the tmd code snipped below, the developer defined that the engine should use the output of the ThrustLever object as its ThrottleControl input. It would also be possible to use the autothrottle output as an example or any other imaginable output from an instrument reading or an output of a logic circuit if that is desired. +
- +
-<code> +
-... +
-        %%//%% example of the JetEngine getting the output of the ThrustLever object +
-        <[string8][object][control_input] +
-            <[string8][Name][ThrustLever]> +
-            <[string8][Input][Controls.Throttle1]> +
-        > +
- +
-        <[string8][object][jet_engine] +
-            <[string8][Name][JetEngine]> +
-            <[string8][Body][Fuselage]> +
-            <[string8][ThrottleControl][ThrustLever.Output]> +
-            <[float64][MaximumThrust][10000.0]> +
-        > +
-... +
-</code> +
-  +
-These manually programmed connections allow enormous flexibility, easy debugging and incredibly simple and fast object code. Each object can be as 'stupid' as can be, it just uses its inputs, does something with it and sets its output value or internal state if it has one. Then, if another object comes by and wants to know the output value, it just grabs it and calculates its outputs with that. This way very long chains, logic trees or even iterations and control loops can be created that actually perform different logic depending on the aircraft's state or the user's inputs. It's important to note that the order in which the objects appear in the tmd code has no effect on the simulation. +
- +
-==== Object communication across sections ==== +
-Objects defined in different sections of the tmd cannot communicate directly. The only possible connections are from the dynamics section to the graphics section and from the dynamics section to the sound section. +
- +
-Almost all values used outside of the dynamics section will have to go through an 'output' object and need to be read in by any section that needs that value. The reason for that is the core design of the Aerofly FS 2 that strictly separates the physical simulation from the graphical representation and sound generation. Designing the graphics and sound sections as 'read-only' functions of physical values has quite a strong performance advantage and allows for a more flexible software design. The different processes of calculating the physics and calculating the representation of graphics model can be done on different CPU cores or even partly on the graphics card to avoid major bottlenecks. +
- +
-One way to imagine the communication between the sections is that each value from the dynamics section is sent through a wire to either the graphics processing unit or the sound processing devices. +
- +
-=== Example dynamics to graphics section === +
-In the example below the position of the thrust lever input is put out by the dynamics section and then in the graphics section the value is read in. We usually give the 'graphics_input' object the same name as the 'output' from the dynamics section to avoid confusion. +
- +
-<code>  +
-<[file][][] +
-    <[int32][dynamics][0] +
-... +
-        %%//%% this object makes it possible to call 'ThrustLeverPosition.Output' +
-        %%//%% in a graphics_input (or soundinput) object as shown below +
-        <[string8][object][output] +
-            <[string8][Name][ThrustLeverPosition]> +
-            <[string8][Input][ThrustLever.Output]> +
-        > +
-    > +
- +
-    <[int32][graphics][0] +
-        %%//%% this object reads the output of the dynamics section in +
-        %%//%% and provides that value for other objects in the graphics section +
-        <[string8][object][graphics_input] +
-            <[string8][Name][ThrustLeverPosition]> +
-            <[string8][InputID][ThrustLeverPosition.Output]> +
-        > +
-... +
-    > +
-+
-</code> +
- +
-\\ Now, to animate the 3D model of the thrust lever, a 'hingedbodygraphics' object is added with its GeometryList containing the name of the geometry in the 3D model. It uses the ThrustLeverPosition for its rotation angle input. The 'Axis' and 'Pivot' parameters can be measured in the 3D software or can be found in the exporter's log file 'tm.log' in the intermediate folder. +
- +
-<code> +
-... +
-        <[string8][object][graphics_input] +
-            <[string8][Name][ThrustLeverPosition]> +
-            <[string8][InputID][ThrustLeverPosition.Output]> +
-        > +
- +
-        <[string8][object][hingedbodygraphics] +
-            <[string8][Name][ThrustLeverGraphics]> +
-            <[uint32][PositionID]   [Fuselage.R]> +
-            <[uint32][OrientationID][Fuselage.Q]> +
-            <[string8][GeometryList][ +
-                                      ThrustLever +
-                                      AutoThrustDisconnectButton +
-                                                                   ]> +
-            <[tmvector3d][Axis] [ 0.0 1.0 0.0 ]> +
-            <[tmvector3d][Pivot][ 5.123 0.0 -0.321 ]> +
-            <[float64][AngleMax][0.5]> +
-            <[string8][InputAngle][ThrustLeverPosition.Output]> +
-        > +
-... +
-</code> +
- +
-Summary +
-  - The 'control_input' object in the dynamics section reads the position of the user's control input device and makes this value available in the entire dynamics section as 'ThrustLever.Output'.   +
-  - An 'output' object with the name 'ThrustLeverPosition' is declared in the dynamics section which makes its input value also available for 'graphics_input' and 'soundinput' objects in the graphics and sound section respectively.   +
-  - In the graphics section, a 'graphics_input' receives the values sent by the dynamics. Now the value of the thrust lever angle is available as 'ThrustLeverPosition.Output' for all objects in the graphics section.   +
-  - The 'hingedbodygraphics' object rotates all geometries in its GeometryList depending on the 'ThrustLeverPosition.Output' value.   +
- +
-==== Configurations ==== +
-The tmd preset files are usually identified with a suffix like '_clean.tmd', '_takeoff.tmd' and '_landing.tmd'. A preset file is loaded after the (main) .tmd file when the aircraft is placed onto the runway or set into final approach or somewhere on the map in the air. The preset then overwrites the default values of the (main) .tmd file. This way when the user selects the air start, the gear is already retracted and the flaps are set to up even if the gear or flaps where down before the location on the map was changed. +
- +
-It is recommended to pay attention when the presets are created, it does not look good if the gear lever moves into position only after the aircraft was moved up in the air or if half of the cockpit switches change their status in the first brief moment. Especially slow elements like the gear position or flap position should be adjusted correctly so that the aircraft doesn't fall from the sky on final approach or that the user has to wait for the flaps to extend when he/she wants to take off. +
- +
-Not providing a preset for a particular initialization method is possible, then the Aerofly just won't change any default parameter of the .tmd file. Some simpler aircraft might not need a preset for all of the different initialization modes. +
- +
-==== Controls ==== +
-The optional 'controls.tmd' file adds 3D click spots to the virtual cockpit in the shape of a cylinder, box or sphere. Each of the clickspots can have different messages assigned to it that allow the user to interact with the cockpit using the left and right mouse buttons as well as the mouse wheel. A message that is sent from the 'controls.tmd' has a value and qualifier assigned to it that allows either direct assignment of a value, increment/decrement or toggling of. The messages are received by the 'control_input' objects in dynamics section of the main .tmd file as described in the examples above. +
- +
-The definition of a click spot is rather simple. After deciding on the best shape that fits best the position is adjusted in the R0 attribute, the orientation is set by the B0 matrix and then the size is adjusted. If another aircraft already uses a similar function, then its best to copy the message name from its 'controls.tmd' file. But it is also ok to use own custom names for the messages if desired. +
- +
-Experience shows that it is good practice to sort the click spots within the 'controls.tmd' file similar to how a pilot would scan the cockpit. For example, most airliner overhead panels have columns which are gone through one by one from top to bottom starting with the left column. Sorting the click spots in a similar way will make it easier to find a click spot again later. +
- +
-Please note that a click spot cannot work if there is an analog axis assigned in the controls setting of the Aerofly FS 2 Flight Simulator that uses the exact same message name. An example would be the Throttle command, which pretty much always has an axis assigned to it. A click spot with the same message would be obsolete because the user can't actually overwrite the analog input. +
- +
-==== Troubleshooting ==== +
-The most important resource for troubleshooting is the simulator's log file 'tm.log' in the 'Documents/Aerofly FS 2' folder. This file logs all events during the Aerofly FS 2 Flight Simulator execution. It contains warnings and errors that might be generated when the new aircraft is loaded. +
- +
-Common issues are: +
-  *Syntax accidentally changed, pay particular attention to unmatched braces/brackets   +
-  *Spelling mistakes   +
-  *Same name used for more than one object   +
-  *Object referred to does not exist   +
-  *3D objects used multiple times   +
-  *Joint force and dampening constants to high   +
-  *Output / Input not defined   +
-  *Control message names not matched   +
-  *Control message qualifier not set for a toggle switch   +
-  *Infinite loops created by using the output of the same object or by chaining object to a loop without any object in the chain that can provide a delay (like a servoclassic or servolinear).   +
- +
-To debug a longer chain of connected objects one can simply overwrite the input property of an object by replacing the usual xyz.Output text with '1.0', '0.0' or any other constant value. Note that inputs with an 'ID' in their name don't directly read the value but use a pointer object instead. It is possible to write a constant value into the InputID parameter of an object.+
  
-For debugging it is very useful to assign a key to the 'Reload aircraft' in the simulator control settings (available only if the 'developer' option is set to true in the 'main.mcf'). Using this function only the aircraft but no scenery is reloaded.+===== Aerofly FS GeoConvert =====
  
-===== Aircraft 3D Modeling Guidelines ===== +The Aerofly FS 2 GeoConvert is an executable that converts input aerial images to the final engine format.
-We use the following 3d modeling guidelines for the aircraft in Aerofly FS 2 and provide them for reference. These requirements are not mandatory and you can get an aircraft into Aerofly FS 2 without adhering to each requirement (none of our models adheres to all). However, experience has shown that these best practices make it easier for all people involved in the project and create models that run smoothly on all platforms. If you ever plan to release your aircraft for different platforms, it is strongly recommended to fulfill as many requirements as possible.+
  
-==== Summary ==== +There is no installation process reqiured, the executable is stand alone and starts converting all files in the "input_aerial_images" folder when started.
-An aircraft model for Aerofly FS 2 includes the exterior and interior in one model. The overall polygon budget is 400k triangles and 200k vertices. The total compressed texture amount is in the range of 150 MB; this allows up to 2 GB of uncompressed textures at a resolution of 4069x4096. A unique, non-shared, non-degenerate texture mapping is required for ambient occlusion, illumination and texture baking. The mesh has a clean topology without T-junctions and long triangles. The dimensions are correct and the model is set up using generic units, where one generic unit corresponds to some metric unit.+
  
-The following guidelines should clarify what we consider being a clean model and should help to integrate a model into Aerofly FS 2. None of our aircraft models adheres to all items entirely, but this is what to aim for to have the finest aircraft in Aerofly FS 2.+Please check out our [[sdk:geoconvert|GeoConvert Tutorial]] to get started with this tool.
  
-==== Mesh ==== +===== Scenery Workshop =====
-  *Single model that contains both exterior and interior (there is no separate virtual cockpit)   +
-  *Overall polygon budget: 400k triangles (not polygons!) / 200k vertices for everything.   +
-  *+X axis is forward, +Y axis points to the left, +Z is up   +
-  *Center of the coordinate system is approximately at center of gravity (don't have the wheels at Z 0)   +
-  *Aircraft has to be modeled in the clean configuration: flaps up, control surfaces neutral, gear doors closed, wing unloaded (no wing flex in the 3d model, this will be done by the sim). Landing gear needs special treatment: this is modeled in extended and loaded position.   +
-  *Switches, knobs, pointers, ... : model in a position that corresponds to their position in normal flight configuration, i.e. engine switches on, temperature and oil pressure needles in green arc, systems switches auto / on, transponder on and encoding, fuel and packs on, ...   +
-  *Plan ahead and make a polygon budget for different sections (fuselage/gear/wings/cockpit/...) don't start at a small detail, then work up at the same detail level and end up with too many triangles   +
-  *No single object larger than 50k triangles / 50k vertices.   +
-  *Get the dimensions right from the very beginning, this is very hard to fix later. Don't start with some small detail and work up from there.    +
-  *Use generic units in 3ds max. One generic unit corresponds to either 1mm, 1cm, 10cm or 1m real world size (all other units in max are language dependent and will change if opened on another computer with different settings)   +
-  *Depending on the dimensions of the real aircraft, use one of the scalings given above that fits your workflow best (consider near/far clipping in max, camera movement, displayed coordinates, enough precision for small details, ...)   +
-  *Check pilot's seat and controls position and dimensions using a pilot's model at an early stage.   +
-  *Object naming conventions:\\ - Name starts with an uppercase letter, followed by a-z, A-Z, 0-9 only.\\ - No spaces, no underscores, no minus/hyphen '-', no special characters whatsoever.\\ - Capitalize the first letter of a word (camelback): LeftWingLight2, FrontGearDamper, ...\\ - Use expressive names, don't use abbreviations in object names like LtLtKnb, use LeftLightKnob\\ - Each object has to have a unique name.   +
-  *Anything that will be animated separately has to be a separate object. If in doubt, use more objects and give them reasonable names.   +
-  *Clean meshes:\\ - No t-junctions\\ - No long triangles   +
-  *There are no hard edges in reality: use 45 deg bevels of 0.5 - 1.0 mm in the cockpit where necessary. Apply smoothing groups 31 or 32 to the bevel and use hard edges, Aerofly will create smooth normals and leave the normals of the adjacent faces intact (or use your favorite plugin to achieve this, sometimes this if preferable for rendering of ambient occlusion maps)   +
-  *Support wing flexing: use divisions/cuts running from the leading edge to the trailing edge across the wing and flaps/ailerons.   +
-  *Skinning is supported by applying vertex weights. Use a bone system with Bone 0 and Bone 1 to apply the weights.   +
-  *Use animations for control surfaces, flaps, landing gear, levers, knobs, ... to check the model and help setting up the aircraft in Aerofly. Keyframe 0 is the frame that will be exported, make sure object positions and orientations are as defined above.    +
-  *Keep future versions in mind: e.g. different versions with different fuselage lengths.  +
  
-==== Textures ==== +**Requirements** - Please download the Scenery Workshop (link above) and install the Aerofly FS Content Converter.
-  *Only use power of two square textures: 32x32, ... , 256x256, ... , 4096x4096   +
-  *Supported texture file types: BMP (24bit), TIF / PNG (24/32/16/48bit)    +
-  *Total texture amount:\\ compressed textures 35 MB for mobile (mainly 1024x1024)\\ - 150 MB for desktop (mainly 2048x2048) this corresponds to about 2 GB of total textures for uncompressed 4096x4096 bmps / tiffs (about 40 4096x4096 textures or six main materials)\\ - some materials don't need large maps, usually you will end up with 20 - 30 materials   +
-  *Texture default size should be 4096x4096 for main maps. However, keep in mind that text has to be readable at the 1024x1024 for mobile devices (cf. UV mapping guidelines below)   +
-  *RGB color values 0 .. 255:\\ use values in the range 8 .. 16 for black surfaces, values smaller than 8 only for holes 232 corresponds to a pure white, values above 232 (in any channelwill add a fluorescent/neon look to the material.   +
-  *Use compression friendly color values for large uniform areas.   +
-  *Compression noise can be suppressed by adding some noise (use cautiously).   +
-  *Use noise, dirt, scratches at those locations where it makes sense, don't apply these everywhere   +
-  *Don't use parts of photos as textures.   +
-  *Don't bake illumination/highlights into textures.   +
-  *Keep textures mipmap friendly: no bright objects on a dark background and vice versa, leave room for a little border, adjust background to object color.   +
-  *Bumpmaps are pieces of art of their own, don't create them simply from an image or color layer.   +
-  *Same holds for specular (color+alpha): these are not just black and white versions of the color layer  +
-  *All maps for one material go into a single psd, use groups for specular, ambient, color, ...   +
-  *Example for grouping in psd file:\\         UVW Templates\\         Checkerboard\\         Illumination\\         Light/Luminace\\         Reflection\\         Specular\\         Ambient\\         Bump\\         Alpha\\         Dirt\\         Markings\\                 Integral lighted\\                 Unlit\\         Details\\         Paint\\                 Airlines\\                     Repaints          Background (differently colored patches to support mipmapping)   +
-  *Keep rendered layers (ambient/illumination) in psd, don't edit these layers (re-render if necessary)   +
-  *Use 16 bit bump maps where necessary to avoid terracing.   +
-  *If you prefer to work with bmp files, you can use _alpha to add an alpha channel to a rgb bmp: xxx_color.bmp and xxx_color_alpha.bmp will be combined into a four-channel texture\\   +
  
-==== UV Mapping ==== +The scenery workshop download contains 
-  *Plan ahead: use your texture budget reasonably.   +  * The 'kigm_kingman' folder:\\ A sample airport (Kingman/KIGMwith the 3D Studio Max and Maxon Cinema 4D modeling files as well as all required textures. 
-  *Unique mapping is required for ambient occlusion and illumination.   +  * The 'kogb_oceansidefolder:\\ A sample airport (Oceanside/KOGBwith 3Ds Max and Cinema 4D filestextures etc.
-  *UV sharing:\\ - only for identical geometries exactly at the same UV location (clone objects after UV mapping)\\ - only if these objects never need different ambient occlusion or illumination   +
-  *Uniform mapping:\\ - minimize stretching/distortion\\ - use the same resolution/pixel density in world space for objects close to each other use checkerboard textures to verify   +
-  *Pay attention to the pilot's view: resolution for instrument panel and objects in pilot's view: 4-6 pix/mm for 4096x4096 textures.   +
-  *Exterior UV mapping: fuselage should be mapped contiguously on one texture for aircraft up to the size of an A320, cut into two parts for larger aircraft. This defines the resolution for other exterior parts like wings, stabilizers, engines, ...   +
-  *Keep the uv mapping repaint friendly. Use a small texture for pieces in the cockpit that can change with a repaint (e.g. registration number).   +
-  *Use grouping of similar objects for better mipmapping.   +
-  *Group objects reasonably: don't put small objects onto another texture just because there's some space left.   +
-  *Leave a border around objects for better mipmapping.   +
-  *Preferably map all parts visible from the main forward view onto the same texture, we can boost the size of this important texture if everything in the main view gets sharper.   +
-  *Clean mapping:\\ - no degenerate UV faces\\ - minimize cuts   +
-  *Use a separate texture for displays (display_luminance) and things that will be animated.   +
-  *Use tiling for some materials/layers to save texture memory without sacrifycing resolution (the underlying mapping must still be unique for ambient occlusion).   +
-  *Don't squeeze too much into one textureleave room for mipmapping, baking and future changes/additions +
  
-==== Decals ==== +Check out our [[sdk:scenery:tutorial|Scenery Workshop]] where you will learn the basics of creating your airport for Aerofly FS 2.
-  *Use decals for small details only. Don't use decals for large logos.   +
-  *Place 0.- 1.0 mm in front of mesh.   +
-  *Underlying mesh still must be closed and uniquely mapped (so we can render the decal into the base map if necessary)   +
-  *A smaller and lower resolution version of the decal can be included in the base texture (to avoid popping if decal is culled at some distance or with z-fighting)   +
-  *Don't cut decal into the underlying mesh +
  
-==== Materials ==== +===== Aircraft Workshop =====
-  *The standard material supports:\\   +
  
-| Function | 3ds max slot | Texture file suffix | +**Requirements** - Please download the Aircraft Workshop (link aboveand install the Aerofly FS Content Converter.
-|   |   |   | +
-| diffuse / color | Diffuse Color | _color | +
-| specular color + width | Specular Color | _specular | +
-| reflection/gloss | Reflection | _reflection | +
-| ambient occlusion | Ambient Color | _ambient | +
-| bumpmap | Bump | _bump | +
-(self-)luminance | Self-Illumination | _luminance | +
-| illumination | Filter Color | _illumination |+
  
-  *Materials can be tagged to select the best shader:\\ exterior\\ interior\\ glass\\ standard\\ default\\ darken\\ canopy\\ instrument\\ window   +The aircraft workshop download contains 
-  *Multi-materials are deprecated: no need to use them  +  The 'dr400' folder:\\ Sample aircraft 'dr400' including the 3d Studio Max files and all texture and sound source files as well as template files to get your aircraft 3d model into Aerofly FS 2
-  *Every material should correspond to exactly one material ball in max's material editorall materials must be visible in editor.   +  * A 'templatefolder with a minimal tmd fileideal for the fist project
-  *Use bump mapping (normal maps are supported, bump mapping is more flexible and better suited for future gimmicks). Object space normals are not supported.  +
  
-==== Files ==== +Check out our [[sdk:aircraft:tutorial|Aircraft Workshop]] page.
-  *File and folder namesallowed characters are lowercase letters a-z, digits 0-9 and underscore only.   +
-  *Never use capital letters, spaces and special characters in file names.   +
-  *Don't include the aircraft's name in texture names (don't use 'f15_xxxx_color.bmp').   +
-  *Current max file is named like 'f15_2015-06-18_56.max'+
  
sdk/intro.1484563676.txt.gz · Last modified: 2017/01/16 11:47 by aerofly